RegManager = function(config)
{
	this.config = config;
}
RegManager.prototype = {
	init: function()
	{
		var $formdiv = $("<div>").addClass("highslide-html-content").attr({"id":"hs_card"}).appendTo("#form_page");
		$formheader = $("<div/>").addClass("highslide-header").appendTo($formdiv);
		$("<h3>").html(this.config.labels.header).appendTo($formheader);
		$("<ul/>").appendTo($formheader)
		.html('<ul><li class="highslide-close"><a href="#" id="highslideclose" onclick="return hs.close(this)">'+this.config.labels.close+'</a></li>');
		this.formdivbody = $("<div>").addClass("highslide-body").attr({"id":"form-body"}).appendTo($formdiv);
		this.generateFormLinks();
	},
	generateFormLinks: function(){
		$("#regform").bind('click', {scope: this}, function(event){
			var obj = event.data.scope;
			hs.htmlExpand(this, {
				contentId: "hs_card"
				,width: 960
				,dimmingOpacity: 0.8 
				,height: 600
				,slideshowGroup: null
				,useControls: false
			});
			obj.generateForm();
			return false;
		});
	},
	generateForm: function(){
			$("#form-body").empty();
			var $formMain = $("<div>").addClass("formDiv").css({"width":"940px"}).attr("id", "formuser").appendTo("#form-body");

			var $form = $("<div>").css({"float":"left", "width":"440px"}).appendTo($formMain);
			
			$("<div>").addClass("formLabel").html(this.config.labels.name_ru).appendTo($form);
			$("<input>").addClass("field").attr({"name": "f_name_ru"}).appendTo($form);
			$("<div>").addClass("divider").html("").appendTo($form);

			$("<div>").addClass("formLabel").html(this.config.labels.name_en).appendTo($form);
			$("<input>").addClass("field").attr({"name": "f_name_en"}).appendTo($form);
			$("<div>").addClass("divider").html("").appendTo($form);

			$("<div>").addClass("formLabel").html(this.config.labels.about_ru).appendTo($form);
			$("<textarea>").addClass("field").attr({"name": "f_about_ru"}).appendTo($form);
			$("<div>").addClass("divider").html("").appendTo($form);

			$("<div>").addClass("formLabel").html(this.config.labels.about_en).appendTo($form);
			$("<textarea>").addClass("field").attr({"name": "f_about_en"}).appendTo($form);
			$("<div>").addClass("divider").html("").appendTo($form);

			var $form2 = $("<div>").css({"float":"left", "margin": "0 0 0 32px", "width":"440px"}).appendTo($formMain);

			$("<div>").addClass("formLabel").html(this.config.labels.address_ru).appendTo($form2);
			$("<input>").addClass("field").attr({"name": "f_address_ru"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);

			$("<div>").addClass("formLabel").html(this.config.labels.address_en).appendTo($form2);
			$("<input>").addClass("field").attr({"name": "f_address_en"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);
			
			$("<div>").addClass("formLabel").html(this.config.labels.first_name).appendTo($form2);
			$("<input>").addClass("field").attr({"name": "f_first_name"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);
			
			$("<div>").addClass("formLabel").html(this.config.labels.last_name).appendTo($form2);
			$("<input>").addClass("field").attr({"name": "f_last_name"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);

			$("<div>").addClass("formLabel").html(this.config.labels.town).appendTo($form2);
			$("<input>").addClass("field").attr({"name": "f_town"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);
			
			$("<div>").addClass("formLabel").html(this.config.labels.country).appendTo($form2);
			$("<select>").addClass("field").attr({"name": "f_country"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);

			$("<div>").addClass("formLabel").html(this.config.labels.tel).appendTo($form2);
			$("<input>").addClass("field").attr({"name": "f_tel"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);

			$("<div>").addClass("formLabel").html(this.config.labels.fax).appendTo($form2);
			$("<input>").addClass("field").attr({"name": "f_fax"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);

			$("<div>").addClass("formLabel").html(this.config.labels.mail).appendTo($form2);
			$("<input>").addClass("field").attr({"name": "f_mail"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);

			$("<div>").addClass("formLabel").html(this.config.labels.web).appendTo($form2);
			$("<input>").addClass("field").attr({"name": "f_web"}).appendTo($form2);
			$("<div>").addClass("divider").html("").appendTo($form2);

			$("<div>").addClass("captchacont").css({"margin":"16px 0 0 0"}).appendTo($form);
			var $formbuttons = $("<div>").addClass("formbuttons").appendTo($form);
			$("<button>").addClass("butSend").html(this.config.labels.send).appendTo($formbuttons)
			.bind('click', {scope: this}, function(event){
				var obj = event.data.scope;
				obj.subbmitForm();
			});
			$("<div>").attr({"id":"ajaxmessage"}).appendTo($form2);
			$("<button>").addClass("butRenew").html(this.config.labels.renew).appendTo($formbuttons)
			.bind('click', {scope: this}, function(event){
				var obj = event.data.scope;
				obj.getCaptcha();
			});
			this.getCaptcha();
			this.getLocation();
	},
	successCallback: function(data, event){
		switch(this.action){
			case "get_location_list":
				this.scope.generateLocationList(data);
				break;
		}
	},
	getLocation: function(){
		var o = {
			url: this.config.locationURL
			,action: "get_location_list"
			,scope: this
			,dataType: "json"
			,type: "post"
			,data:{lang: this.config.lang}
			,success: this.successCallback
		};
		$.ajax(o);		
	},
	generateLocationList: function(dataObj){
		for(var i = 0; i < dataObj.length; i++){
			if(dataObj[i].id == "")
				continue;
			$("<option/>")
			.attr({"value":dataObj[i].id})
			.text(dataObj[i].loc_ver_name)
			.appendTo($("#formuser select[name='f_country']"));		
		}		
	},
	createLoader: function(){
		$("#ajaxmessage").empty();
		$("<img>").attr({"src":"img/ajax-loader.gif"}).appendTo("#ajaxmessage");
	},
	deleteLoader: function(){
		$("#ajaxmessage").empty();
	},
	validateForm: function(data){
		$spanError = $("<span>").addClass("spanError");

		if(!Validate.now(Validate.Length, data.f_name_ru, {minimum:3, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			$(".spanError").focus();
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_name_en, {minimum:3, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			$(".spanError").focus();
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_about_ru, {minimum:3})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			$(".spanError").focus();
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_about_en, {minimum:3})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			$(".spanError").focus();
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_address_ru, {minimum:3, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			$(".spanError").focus();
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_address_en, {minimum:3, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			$(".spanError").focus();
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_first_name, {minimum:3, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			$(".spanError").focus();
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_last_name, {minimum:3, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			$(".spanError").focus();
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_town, {minimum:3, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			return false;
		}
		if(!Validate.now(Validate.Email, data.f_mail)){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_tel, {minimum:3, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			return false;
		}
		if(!Validate.now(Validate.Length, data.f_fax, {minimum:3, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validDefault).appendTo("#ajaxmessage");
			return false;
		}
		if(!Validate.now(Validate.Length, data.code, {minimum:4, maximum:255})){
			$("#ajaxmessage").empty();
			$spanError.html(this.config.labels.validCode).appendTo("#ajaxmessage");
			return false;
		}
		return true;
	},
	subbmitForm: function(){
		var data = {
			f_name_ru: $("#formuser input[name='f_name_ru']").attr("value"),
			f_name_en: $("#formuser input[name='f_name_en']").attr("value"),
			f_about_ru: $("#formuser textarea[name='f_about_ru']").attr("value"),
			f_about_en: $("#formuser textarea[name='f_about_en']").attr("value"),
			f_address_ru: $("#formuser input[name='f_address_ru']").attr("value"),
			f_address_en: $("#formuser input[name='f_address_en']").attr("value"),
			f_first_name: $("#formuser input[name='f_first_name']").attr("value"),
			f_last_name: $("#formuser input[name='f_last_name']").attr("value"),
			f_town: $("#formuser input[name='f_town']").attr("value"),
			f_country: $("#formuser select[name='f_country']").attr("value"),
			f_tel: $("#formuser input[name='f_tel']").attr("value"),
			f_fax: $("#formuser input[name='f_fax']").attr("value"),
			f_mail: $("#formuser input[name='f_mail']").attr("value"),
			f_web: $("#formuser input[name='f_web']").attr("value"),
			crypt: $("#formuser input[name='crypt']").attr("value"),
			code: $("#formuser input[name='code']").attr("value")
		};
		var validationResult = this.validateForm(data);
		if(validationResult == false){
			return;
		}
		this.createLoader();
		$.ajax({
			url: this.config.scriptSubbmit,
			dataType: "json",
			data: data,
			type: "post",
			scope: this,
			success: this.getSubbmittingAnswer
		});
	},
	getSubbmittingAnswer: function(data){
		obj = this.scope;
		if(data.success == 'true'){
			obj.deleteLoader();
			$("#ajaxmessage").html(obj.config.labels.subbmitMessage);
		}
		else if(data.success == 'false'){
			obj.deleteLoader();
			$("<span>").addClass("spanError").html(obj.config.labels.subbmitError).appendTo("#ajaxmessage");
		}
	},
	getCaptcha: function(){
		$.ajax({
			url: this.config.scriptCaptcha,
			dataType: "json",
			type: "post",
			scope: this,
			success: this.createCaptcha
		});
	},
	createCaptcha: function(data){
		var $captchacont = $(".captchacont");
		$captchacont.empty();
		$("<input>").attr({"name": "crypt", "value":data[0].crypt})
			.css({"display":"none"})
			.appendTo($captchacont);
		$("<div>").addClass("formLabel").html(this.scope.config.labels.code).appendTo($captchacont);
		$("<input>").addClass("inputCode").attr({"name": "code"})
			.appendTo($captchacont);
		var $divcaptcha = $("<div>").addClass("divcaptcha")
			.appendTo($captchacont);
		$("<img>").attr({"src": "captcha/tmp/outputcaptcha/"+data[0].crypt+".png"})
			.appendTo($divcaptcha);
	},
	handlerClick: function(e)
	{
		//alert("Ok");
	}
};
