// AutoUser module

if(typeof AO !== "object")
	AO={};	

/**
 * AO.AutoUser singleton class
 */
AO.AutoUser=function()
{
	
	var registrationSubmitHandler=null;
	var registrationFormID=null;

	// closure PRIVATE variables
		
	var duplicate_iteration0=20; // count of the kontakt ...
	var duplicate_iteration1=20; // count of the bank items
	
	var msg_close_timeout=null;
		
	// public interface
	return {		
		
		
		// #################################################
		// #################################################
		//   Registration
		// #################################################
		// #################################################
		
		
		commonSet : function()
		{
			
			this.createValidationMethods();
			
			/*
			var clueSett={
				local:true,
				width: '150px',	
				// height: '55px',								
				positionBy:'auto',
				cursor: 'pointer',
				tracking: false,
				attribute:'rel',
				showTitle:false,
				dropShadowSteps:3,
				sticky: true,
				topOffset: 10,
				leftOffset:10,	
				activation:'click',
				// closePosition : "title",
				closeText:'',
				cluetipClass: 'jtip'
			};
			
			
			$("#user_form_submit_butt").attr("rel","#form_response_message").cluetip(clueSett).click(function(){$("#user_form").submit()});
			*/
		},
		
		
		createValidationMethods : function()
		{
			// add validation methods
			jQuery.validator.addMethod(
				"samepass", 
				AO.Common.Util.createDelegate(this.samePassRule,this)
				,
				"passwords are not same"
			);	
			
			// add validation method
			jQuery.validator.addMethod(
				"passformat", 
				AO.Common.Util.createDelegate(this.passFormatRule,this)
				,
				"invalid password format"
			);	
			
			// add validation method
			jQuery.validator.addMethod(
				"loginformat", 
				AO.Common.Util.createDelegate(this.loginFormatRule,this)
				,
				"invalid login format"
			);
		},
		
		
				
		setUpRegistration : function()
		{
			var obj=this;
			
			this.commonSet();
			
			// user_type selection
			$("#typ_uzivatela_sel").change(
				function()
				{
					// delegate to AOModules.AutoUser
					obj.getRegistrationMore($("option:selected:selected",this).attr("value"));
				}										 
			);
			
			this.setEnabledSubmitButton(false);
			
			// FORM validation
			var submitHandler=AO.Common.Util.createHandler(this.submitRegister,this);
				
			this.setRegistrationSubmitHandler(submitHandler);
			this.setRegistrationFormID("user_form");
			
			$("#user_form").validate(this.getRegisterValidationSettings());
		},


		setRegistrationSubmitHandler : function(handler)
		{
			registrationSubmitHandler=handler;
		},
		
		getRegistrationSubmitHandler : function()
		{
			return registrationSubmitHandler;
		},
		
		setRegistrationFormID : function(id)
		{
			registrationFormID=id
		},
		
		getRegistrationFormID : function()
		{
			return registrationFormID;
		},

		// called also from AutoPredajna !!!!!
		getRegisterValidationSettings : function()
		{
			return {
				rules: {
					login: {
						required : true,
						rangelength: [4,20],						
						loginformat : true
					},
					passwd: {
						required: true,
						rangelength: [6,20],
						passformat : true
						// samepass: true						
					},
					passwd2: {
						required: true,
						samepass: true
					},
					email: {
						required: true,
						email: true
					},
					typ_uzivatela : {
						required : true
					},
					obchodne_podmienky : {
						required : true
					}
				},
				messages: {
					
					login: {
						required: "povinná položka",
						// minlength: "minimálna dĺžka sú 4 znaky",
						// maxlength: "maximálna dĺžka je 20 znakov",
						rangelength : "dlžka prihlasovacieho mena musí byť medzi 4 a 20 znakov",
						loginformat : "nesprávny formát, nepoužívajte špeciálne znaky"
					},
					passwd: {
						required: "povinná položka",
						// minlength: "minimálna dĺžka hesla je 6 znakov",
						// maxlength: "maximálna dĺžka hesla je 20 znakov",
						rangelength : "dlžka hesla musí byť medzi 6 a 20 znakov",
						passformat : "nesprávny formát, nepoužívajte špeciálne znaky",
						samepass: "heslá sa musia zhodovať"
					},
					passwd2: {
						required: "povinná položka",
						samepass: "heslá sa musia zhodovať"
					},
					email: {
						required: "povinná položka",
						email: "nesprávny formát e-mailovej adresy"
					},
					typ_uzivatela : {
						required : "povinná položka"
					},
					obchodne_podmienky : {
						required : "povinná položka"
					}
					
				},
				errorClass: "invalid",
				// focusCleanup: true,
				submitHandler : this.getRegistrationSubmitHandler()
			};
		},
		
		
		/**
		 * after user_type choosen		
		 */
		getObjednajValidationSettingsMore : function()
		{
			var typ_uzivatela=$("#typ_uzivatela_sel").val();
			
			var coreSettings=this.getRegisterValidationSettings();
			
			switch(typ_uzivatela)
			{
				case "1" :
										
					jQuery.extend(coreSettings.rules, {
							fo_telefon : {required: true},
							fo_meno : {required: true},
							fo_priezvisko : {required: true},
							adresa_ulica : {required: true},
							adresa_psc : {required: true},
							adresa_obec : {required: true},
							adresa_okres : {required: true},
							adresa_kraj : {required: true},
							adresa_stat : {required: true}
					});
						
					jQuery.extend(coreSettings.messages, {
							fo_telefon : {required: "povinná položka"},
							fo_meno : {required: "povinná položka"},
							fo_priezvisko : {required: "povinná položka"},
							adresa_ulica : {required: "povinná položka"},
							adresa_psc : {required: "povinná položka"},
							adresa_obec : {required: "povinná položka"},
							adresa_okres : {required: "povinná položka"},
							adresa_kraj : {required: "povinná položka"},
							adresa_stat : {required: "povinná položka"}
					});
					
				break;				
				
				case "2" :				
					jQuery.extend(coreSettings.rules, {
							spol_obch_nazov : {required: true},
							"ko_meno[0]" : {required: true},
							"ko_priezvisko[0]" : {required: true},
							"ko_telefon[0]" : {required: true}
					});
						
					jQuery.extend(coreSettings.messages, {
							spol_obch_nazov : {required: "povinná položka"},
							"ko_meno[0]" : {required: "povinná položka"},
							"ko_priezvisko[0]" : {required: "povinná položka"},
							"ko_telefon[0]" : {required: "povinná položka"}		
					});
										
				
				break;
				
				case "5" :
					//	extSettings = {};
					jQuery.extend(coreSettings.rules, {
						spol_obch_nazov : {required: true},
						"ko_meno[0]" : {required: true},
						"ko_priezvisko[0]" : {required: true},
						"ko_telefon[0]" : {required: true},
						adresa_ulica : {required: true},
						adresa_psc : {required: true},
						adresa_obec : {required: true},
						adresa_okres : {required: true},
						adresa_kraj : {required: true},
						adresa_stat : {required: true}
					});
						
					jQuery.extend(coreSettings.messages, {
						spol_obch_nazov : {required: "povinná položka"},
						"ko_meno[0]" : {required: "povinná položka"},
						"ko_priezvisko[0]" : {required: "povinná položka"},
						"ko_telefon[0]" : {required: "povinná položka"},
						adresa_ulica : {required: "povinná položka"},
						adresa_psc : {required: "povinná položka"},
						adresa_obec : {required: "povinná položka"},
						adresa_okres : {required: "povinná položka"},
						adresa_kraj : {required: "povinná položka"},
						adresa_stat : {required: "povinná položka"}
					});
				break;
			}
			
			return coreSettings;
		},
		
		
		
		setEnabledSubmitButton : function(enbl)
		{
			var sbut=$("#user_form_submit_butt");
			
			if(!enbl)
			{
				sbut.attr("disabled","disabled");
				sbut.addClass("button-common-off");
			}
			else
			{
				sbut.removeAttr("disabled");
				sbut.removeClass("button-common-off");
			}
		},
		
		
		// ###############################################
		// zmena udajov
		// ###############################################
				
		setUpZmenaUdajov : function()
		{
			this.addFormMoreHandlers();
			
			var typ_uzivatela=$("#typ_uzivatela_hidden").val();
			
			var rules={};
			var messages={};
			
			
			switch(typ_uzivatela)
			{
				case "1" : // fo
										
					rules = {
							fo_telefon : {required: true},
							fo_meno : {required: true},
							fo_priezvisko : {required: true},
							adresa_ulica : {required: true},
							adresa_psc : {required: true},
							adresa_obec : {required: true},
							adresa_okres : {required: true},
							adresa_kraj : {required: true},
							adresa_stat : {required: true}
					};
						
					messages = {
							fo_telefon : {required: "povinná položka"},
							fo_meno : {required: "povinná položka"},
							fo_priezvisko : {required: "povinná položka"},
							adresa_ulica : {required: "povinná položka"},
							adresa_psc : {required: "povinná položka"},
							adresa_obec : {required: "povinná položka"},
							adresa_okres : {required: "povinná položka"},
							adresa_kraj : {required: "povinná položka"},
							adresa_stat : {required: "povinná položka"}
					};
					
				break;				
				
				case "2" : // spol
								
					rules = {
						spol_obch_nazov : {required: true},
						"ko_meno[0]" : {required: true},
						"ko_priezvisko[0]" : {required: true},
						"ko_telefon[0]" : {required: true},
						adresa_ulica : {required: true},
						adresa_psc : {required: true},
						adresa_obec : {required: true},
						adresa_okres : {required: true},
						adresa_kraj : {required: true},
						adresa_stat : {required: true}
					};
						
					messages={
						spol_obch_nazov : {required: "povinná položka"},
						"ko_meno[0]" : {required: "povinná položka"},
						"ko_priezvisko[0]" : {required: "povinná položka"},
						"ko_telefon[0]" : {required: "povinná položka"},
						adresa_ulica : {required: "povinná položka"},
						adresa_psc : {required: "povinná položka"},
						adresa_obec : {required: "povinná položka"},
						adresa_okres : {required: "povinná položka"},
						adresa_kraj : {required: "povinná položka"},
						adresa_stat : {required: "povinná položka"}
					};
										
				
				break;
				
				case "5" :
					rules = {
							spol_obch_nazov : {required: true},
							"ko_meno[0]" : {required: true},
							"ko_priezvisko[0]" : {required: true},
							"ko_telefon[0]" : {required: true},
							adresa_ulica : {required: true},
							adresa_psc : {required: true},
							adresa_obec : {required: true},
							adresa_okres : {required: true},
							adresa_kraj : {required: true},
							adresa_stat : {required: true}
						};
							
						messages={
							spol_obch_nazov : {required: "povinná položka"},
							"ko_meno[0]" : {required: "povinná položka"},
							"ko_priezvisko[0]" : {required: "povinná položka"},
							"ko_telefon[0]" : {required: "povinná položka"},
							adresa_ulica : {required: "povinná položka"},
							adresa_psc : {required: "povinná položka"},
							adresa_obec : {required: "povinná položka"},
							adresa_okres : {required: "povinná položka"},
							adresa_kraj : {required: "povinná položka"},
							adresa_stat : {required: "povinná položka"}
						};
				break;
			}
			
			
			
			// FORM validation
			$("#user_form").validate({
				rules: rules,
				messages: messages,
				errorClass: "invalid",
				// focusCleanup: true,
				submitHandler : AO.Common.Util.createHandler(this.submitZmenaUdajov,this)
			});
		},
		
		
		submitZmenaUdajov : function(form)
		{			
			var opts={
				success : AO.Common.Util.createHandler(this.submitZmenaComplete,this),
		        error : AO.Common.Util.createHandler(this.responseErrorZmena,this),				
		        url : AO.Common.settings.BASE_URL,
		        dataType : 'json',
				method : "POST"
			};
			
			$(form).ajaxSubmit(opts);
			
			this.setStatusMessage("Prebieha ukladanie údajov.","info");			
		},
		
		
		submitZmenaComplete : function(d)
		{
			if(d.result)
			{
				// fill info
				this.setStatusMessage("Vaše údaje boli uložené.","ok");			
				
			}else
			{
				// proccess errors
				this.processError(d.error);								
			}
		},
		
		
		responseErrorZmena : function()
		{
			alert("Zmena údajov neprebehla úspešne!");	
		},
		
		// ###########################################################
		// change password
		// ###########################################################
		
		setChangePasswd : function()
		{
			this.commonSet();
			
			// FORM validation
			$("#change_pass_form").validate({
				rules: {
					passwd_old:{
						required: true
					},
					new_passwd: {
						required: true,
						rangelength: [6,20],
						passformat : true
						// samepass: true
					},
					new_passwd2: {
						required: true,
						samepass: true
					}
				},
				messages: {
					passwd_old: {
						required: "povinná položka"
					},
					new_passwd: {
						required: "povinná položka",
						// minlength: "minimálna dĺžka hesla je 6 znakov",
						// maxlength: "maximálna dĺžka hesla je 20 znakov",
						rangelength : "dlžka hesla musí byť medzi 6 a 20 znakov",
						passformat : "nesprávny formát, nepoužívajte špeciálne znaky",
						samepass: "heslá sa musia zhodovať"
					},
					new_passwd2: {
						required: "povinná položka",						
						samepass: "heslá sa musia zhodovať"
					}					
				},
				errorClass: "invalid",
				// focusCleanup: true,
				submitHandler : AO.Common.Util.createHandler(this.submitChangePasswd,this)
				
			});
			
		},
		
		
		// ##########################################
		//	submit change passwd
		// ##########################################
		
		submitChangePasswd : function(form)
		{
			var opts={
				success : AO.Common.Util.createHandler(this.submitChangePasswdComplete,this),
		        error : AO.Common.Util.createHandler(this.responseErrorPasswd,this),				
		        url : AO.Common.settings.BASE_URL,
		        dataType : 'json',
				method : "POST"
			};
			
			$(form).ajaxSubmit(opts);
			
			this.setStatusMessage("Prebieha zmena hesla na serveri.","info");
		},
		
		
		submitChangePasswdComplete : function(d)
		{
			if(d.result)
			{
				// fill info
				this.setStatusMessage("Vaše heslo bolo zmenené.","ok");			
				
			}else
			{
				// proccess errors
				this.processError(d.error);	
				
				$("#change_pass_form :password").val("");							
			}
		},
		
		
		responseErrorPasswd : function()
		{
			alert("Zmena hesla neprebehla úspešne!");	
		},
		
		
		
		// ##################################################
		//	forgot password
		// ##################################################
		
		setForgotPasswd : function()
		{
			// FORM validation
			$("#forgot_pass_form").validate({
				rules: {
					login: "required",
					email: {
						required : true,
						email : true
					}
				},
				messages: {
					login : "povinná položka",				
					email : {
						required : "povinná položka",
						email : "nesprávny formát e-mailovej adresy"
					}			
				},
				errorClass : "invalid",				
				submitHandler : AO.Common.Util.createHandler(this.submitForgotPasswd,this)				
			});
		},
		
		submitForgotPasswd : function(form)
		{
			var opts={
				success : AO.Common.Util.createHandler(this.submitForgotPasswdComplete,this),
		        error : AO.Common.Util.createHandler(this.responseErrorForgotPasswd,this),				
		        url : AO.Common.settings.BASE_URL,
		        dataType : 'json',
				method : "POST"
			};
			
			$(form).ajaxSubmit(opts);
			
			this.setStatusMessage("Prebieha kontrola na serveri.","info");
		},
		
		
		submitForgotPasswdComplete : function(d)
		{
			if(d.result)
			{
				// TODO
				
				// valid account
				this.setStatusMessage("Heslo bolo zaslané na vašu e-mailivú adresu.","ok");			
				
				// invalid account
				
			}else
			{
				// proccess errors
				this.processError(d.error);								
			}
		},
		
		
		responseErrorForgotPasswd : function()
		{
			alert("Zaslanie vášho hesla na emalovú adresu neprebehlo úspešne!");	
		},
		
		
		// ##################################################
		// 	same pass rule
		// ##################################################
		/*
		samePassRule : function(value, element, params)
		{
			var el1=$("#password1");
			var el2=$("#password2");
			
			var res= el1.val() == el2.val()
			
			if(res)
			{
				// prevent infinite loop
				if(this.recursePassValidation)
					return true
				
				this.recursePassValidation=true;
				
				if(element.id=="password1")
					el2.valid();
				else
					el1.valid();	
					
				delete this.recursePassValidation;
			}
			
			return res;
		},
		*/
		
		
		samePassRule : function(value, element, params)
		{
			var el1=$("#password1");
			// var el2=$("#password2");
			
			var res= el1.val() == value;
						
			return res;
		},
		
		
		passFormatRule : function(value, element, params)
		{
			// var res=/^[0-9a-zA-Z_]{6,20}$/.test(value);
			var res=/^[0-9a-zA-Z_]*$/.test(value);
			
			return res;
		},
		
		loginFormatRule : function(value, element, params)
		{
			// var res=/^[0-9a-zA-Z_]{6,20}$/.test(value);
			var res=/^[0-9a-zA-Z_]*$/.test(value);
			
			return res;
		},
		
		
		
		/**
		 * checks same password
		 */
		checkEqualPass : function()
		{
			var p1=$("#password1").val();
			var p2=$("#password2").val();
			return p1 == p2;
		},
		
		
		// #################################################
		//	SUBMIT register
		// #################################################
		
		submitRegister : function(form)
		{		
			var opts={
				success : AO.Common.Util.createHandler(this.submitRegisterComplete,this),
		        error : AO.Common.Util.createHandler(this.responseError,this),				
		        url : AO.Common.settings.BASE_URL,
		        dataType : 'json',
				method : "POST"
			};
			
			this.setStatusMessage("Prebieha registrácia na serveri.","info");
			
			$(form).ajaxSubmit(opts);
		},
		
		
		submitRegisterComplete : function(d)
		{
			if(d.result)
			{
				// google analytics tracking
				if(window['pageTracker'])
					pageTracker._trackPageview("/registrationdone.html");
				
				this.setStatusMessage("Registrácia prebehla úspešne.","ok");
								
				// redir
				var redir_link=register_complete_redir; // global var store
				// $.post(redir_link);
				
				// window.location.href=redir_link+"&email="+d.data.email+"&ao_id="+d.data.ao_id;
				AO.Common.Util.redir(redir_link+"&email="+d.data.email+"&ao_id="+d.data.ao_id);
								
			}else
			{
				// proccess errors
				this.processError(d.error);								
			}	
		},
		
		
		responseError : function()
		{
			alert("Registrácia neprebehla úspešne!");	
		},
		
		
		// #################################################
		// state MSGs
		// #################################################
		
		/**
		 * cluetip impl
		 */
		__setStatusMessage : function(msg,type)
		{
			// var ctip=$("#cluetip");
			
			// ctip.show();
			
			// $cluetip.css({left: posX});
			
			// if()
			this.setCluetipMsg(msg);
		},
		
		
		setCluetipMsg : function(msg)
		{
			// sometimes it did not showed ...
			
			var f=function()
			{
				$('#cluetip-inner').html(msg);
			};
			
			window.setTimeout(f,40);
						
			// $('#cluetip-inner').html(msg);
		},
		
		/**
		 * div impl
		 */
		setStatusMessage : function(msg,type)
		{
			if(!this.statusObject)
				this.statusObject=new AO.Common.formStatusMsg("form_response_message");
			
			this.statusObject.setStatusMessage(msg,type);
			
			this.deferHideStatusMsg();
		},
		
		
		deferHideStatusMsg : function()
		{
			if(!this.statusObject)
				this.statusObject=new AO.Common.formStatusMsg("form_response_message");
			
			this.statusObject.deferHideStatusMsg();	
		},
		
		
		
		
		// #################################################
		// 	process errors
		// #################################################
		
		
		processError : function(er)
		{
			// TODO
			// more job ...
			if(er && er.code)
			{
				switch(er.code)
				{
					case 70 :
					
						// mark required
						var required=er.data.required;
						for(var i=0;i<required.length;i++)
							$("#"+required[i]).addClass("invalid");
							
						// mark regexp
						var regexp=er.data.regexp;
						for(var i=0;i<regexp.length;i++)
							$("#"+regexp[i]).addClass("invalid");
						
						this.setStatusMessage("Opravte označené položky.","bad");
					
					break;
					
					case 8 :
						this.setStatusMessage("Užívateľské meno už existuje!","bad");
					break;
					
					case 300 : // forgot pass bad
						this.setStatusMessage("Zadali ste nesprávne údaje!","bad");
					break;
					
					case 301 : // forgot pass bad
						this.setStatusMessage("Zadali ste nesprávne staré heslo!","bad");
					break;
					
					case 11 :
						this.setStatusMessage("Zadaný email je už používaný!","bad");
					break;
					
					case 12 :
						this.setStatusMessage("Zadané telefónne číslo je už používané!","bad");
					break;
					
					case 13 :
						this.setStatusMessage("Zvolené prihlasovacie meno je zakázané!","bad");
					break;
					
					default:
						this.setStatusMessage("Nastala chyba (kód: "+er.code+")","bad");
					break;
					
				}
			}else
			{
				this.setStatusMessage("Nastala neznáma chyba!","bad");
			}
		},
		
		
		
		// #################################################
		//	FORM NEXT CONTINUE - after choose user type ...
		// #################################################
		
		
		/**
		 * get registration pokracovanie form
		 * @param id {String} usertype ID (value of option)
		 */
		getRegistrationMore : function(id)
		{
			var postData={
				_action : "add_item_get_part",
				_pack : "autoUser",
				_server : "ao",
				typ_uzivatela : id
			};
			
			// $.post(AO.Common.settings.BASE_URL, data, this.getRegistrationMoreComplete, "json");
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.getRegistrationMoreComplete,this), "json");
			
			if(id)
				this.setEnabledSubmitButton(true);
			else
				this.setEnabledSubmitButton(false);
		},
		
		
		
		getRegistrationMoreComplete : function(d,succes)
		{
			$("#html_registracia_pokracovanie").html("");
			
			if(!d)
				return;	
			
			
			var html=d.data.html_registracia_pokracovanie;
			
			// inject
			$("#html_registracia_pokracovanie").append(html);
			
			this.setMoreValidationSettings();
			
			this.addFormMoreHandlers();
		},
		
		
		/**
		 * change validation settings after load additional form
		 */
		setMoreValidationSettings : function()
		{
			var form=$("#"+this.getRegistrationFormID());
			
			// listeners from elements are not removed yet, but it works ...
			form.removeData("validator");
			form.unbind("submit");
			
			var s=this.getObjednajValidationSettingsMore();
			
			form.validate(s);			
		},
		
		
		
		addFormMoreHandlers : function()
		{
			// add handler
			var add_link=$("#bank_account_add_item");			
			if(add_link.length>0)
				add_link.click(AO.Common.Util.createHandler(this.duplicateBankAccount,this));
						
			// add handler
			var ko_add_link=$("#kontaktna_osoba_add_item");			
			if(ko_add_link.length>0)
				ko_add_link.click(AO.Common.Util.createHandler(this.duplicateKontaktnaOsoba,this));
			
			
			// address functionality, add handlers (AO.Address module)
			$("#adresa_stat").change(AO.Common.Util.createHandler(AO.Address.localityChangedAddress,AO.Address));
			$("#adresa_kraj").change(AO.Common.Util.createHandler(AO.Address.localityChangedAddress,AO.Address));
			$("#adresa_okres").change(AO.Common.Util.createHandler(AO.Address.localityChangedAddress,AO.Address));
			// $("#adresa_obec").change(AO.Common.Util.createHandler(AO.Address.localityChangedAddress,AO.Address));
						
			
			// korespondencna address functionality, add handlers
			$("#kadresa_stat").change(AO.Common.Util.createHandler(AO.Address.localityChangedKorespAddress,AO.Address));
			$("#kadresa_kraj").change(AO.Common.Util.createHandler(AO.Address.localityChangedKorespAddress,AO.Address));
			$("#kadresa_okres").change(AO.Common.Util.createHandler(AO.Address.localityChangedKorespAddress,AO.Address));
			// $("#kadresa_obec").change(AO.Common.Util.createHandler(AO.Address.localityChangedKorespAddress,AO.Address));
			
				
			// enable korespondencna adresa
			var obj=this;
			var koresp_add_check=$("#k_adresa_same_check");
			if(koresp_add_check.length>0)
			{
				$("#k_adresa_same_check").click(function(e)
					 {
						 var el=$(this); // this is element
						 var checked=el.get(0).checked; 						
						 obj.setEnabledKorespondencna(checked);
					 }
				 );
			}
		},
		
		
		// #################################################
		//	korespondencna adresa
		// #################################################
		
		
		setEnabledKorespondencna : function(enbl)
		{
			if(enbl)
			{
				$("#korespondencna_adresa_item input").attr("disabled","disabled").addClass("off");
				$("#korespondencna_adresa_item select").attr("disabled","disabled").addClass("off");
				$("#korespondencna_adresa_item label").addClass("off");
			}
			else
			{
				$("#korespondencna_adresa_item input").removeAttr("disabled").removeClass("off");
				$("#korespondencna_adresa_item select").removeAttr("disabled").removeClass("off");
				$("#korespondencna_adresa_item label").removeClass("off");				
			}
		},
		
		
		// ##################################################
		//	DUPLICATION / REMOVE
		// ##################################################
		
		duplicateBankAccount : function(e)
		{		
			e.preventDefault();
						
			// get
			var bank_tpl_tpl=$("#bank_account_item").html();
			
			var act=duplicate_iteration1.toString();
			
			var html=this.duplicatePrepareHTML(bank_tpl_tpl,act,"bank_account","zmazať účet");
			
			// append
			$("#bank_account_item_end").before(html);
			
			// reset inputs
			var newid='bank_account_item_'+act;			
			$("#"+newid+" input:text").val("");
			
			// add remove handler
			var self=this;
			$("#remove_bank_account_item_"+act).click(
				function(e)
				{
					self.removeBankAccount(act);
					e.preventDefault();
				}				
			);
			
			// var newpart=$("#bank_account_item_"+act);			
			// $("input:text",newpart).val("");			
			
			duplicate_iteration1++;			
			
		},	
		
		
		
		duplicateKontaktnaOsoba : function(e)
		{	
			e.preventDefault();
			
			// get tpl
			var ko_tpl=$("#kontaktna_osoba_item").html();
			
			var act=duplicate_iteration0.toString();
			
			var html=this.duplicatePrepareHTML(ko_tpl,act,"kontaktna_osoba","zmazať kontaktnú osobu");
			
			// append
			$("#kontaktna_osoba_item_end").before(html);
			
			// reset inputs
			var newid='kontaktna_osoba_item_'+act;			
			$("#"+newid+" input:text").val("");
			$("#"+newid+" input:text").removeClass("invalid").next("label").remove(); // invalid may be there from validation
			$("#"+newid+" span.txt_red").remove(); // remove * spans
			
			// add remove handler
			var self=this;
			$("#remove_kontaktna_osoba_item_"+act).click(
				function(e)
				{
					self.removeKontaktnaOsoba(act);
					e.preventDefault();
				}
			);
			
			// remove values
			// var newpart=$("#kontaktna_osoba_item_"+act);			
			// $("input:text",newpart).val("");			
			
			duplicate_iteration0++;			
		},	
		
		
		
		duplicatePrepareHTML : function(inHTML,iteration,idWhat,removeText)
		{
			var outHTML="";
			
			// replace strings
			inHTML=inHTML.replace(/\[0\]/g,"["+iteration+"]");
			inHTML=inHTML.replace(/XXX/g,iteration);
						
			// add extra stuff
			var firstrow='<tr class="form-section-divider"><td>&nbsp;</td><td>'+
			'<a href="#" id="remove_'+idWhat+'_item_'+iteration+'">' +
			'[ '+removeText+' ]</a></td></tr>';
			
			
			outHTML='<tbody id="'+idWhat+'_item_'+iteration+'">' +
				firstrow +
				inHTML +
				'</tbody>';		
			
			return outHTML;			
		},
		
		
		removeBankAccount : function(iter)
		{
			var el=$("#bank_account_item_"+iter);
			el.remove();
		},
		
		
		removeKontaktnaOsoba : function(iter)
		{
			var el=$("#kontaktna_osoba_item_"+iter);
			el.remove();
		},
		
		
		
		publicMethod : function()
		{
       		// removeAll();
		}
		
	};
	
}();



if(typeof AO !== "object")
	AO={};

AO.autoAgent = function(){
	
	var mode;
	var form;		
	var make,model,acsr,engine;			
	var agentSaveButton;
	var agentFormMsg;
	var progressIndicator=false;

	/* ajax form submit */
	var submit = function(ajaxSetup){				   		   
	    form.ajaxSubmit(ajaxSetup);			       
	    form.submit(function(){return false;});
	}
		
	var responseError = function(){alert('J6ON error');}		
				
	var reset = function (selectEl){		
		for(var i=0; i<selectEl.length; i++){
			var f = selectEl[i].get(0);
			f.options.length=0;
			f.options[0]=new Option('-', '');		
		}				
	}			
	
	var renderManager = function (cmd, response) {
		switch(cmd){								
			case 'model' :			renderModels(response.model);		break;			
			case 'nazov_vybavy' :	renderAcsr(response.nazov_vybavy);	break;
			case 'motor' :			renderEngine(response.motor);		break;
			default:				alert('no valid CMD '+ cmd +' in JSON');break;
		}			
	}
	
	var render = function (responseText, statusText){		
		var response = responseText.data;
		var result = responseText.result;				
		if(!result)  alert('Error code: ' + responseText.error.code + ' | app part :'+ responseText.error.app_part);			
		for(var cmd in response) renderManager(cmd, response);										
	}
		
	var renderModels = function (data){AO.Common.Util.generateOptions(model.get(0), data.options, data.value);}			
	var renderAcsr = function (data){AO.Common.Util.generateOptions(acsr.get(0), data.options, data.value);}	
	var renderEngine = function (data){AO.Common.Util.generateOptions(engine.get(0),  data.options, data.value);}	

	var renderResult = function(responseText, statusText){
		
		var response = responseText.data;
		var result = responseText.result;				
		progressIndicator=false;
		if(result){			
			//alert(response.agent.rss_url);
			if(response.agent.rss_url != undefined && mode != 'edit'){
				var rssLink = $('#agent_rss_link').val(response.agent.rss_url);
			}
			
			if(mode=='add'){
				agentSaveButton.hide();
			}
			
			agentFormMsg.html('Agent bol uložnený.');
		}else{
			agentFormMsg.html('Agent nebol uložnený. Error code: ' + responseText.error.code + ' | app part :'+ responseText.error.app_part);
		}
	}
	
	var renderError = function(responseText, statusText){
		agentFormMsg.html('Agent nebol uložnený.');		
	}
	
	
	return {
		
		init : function(m){			

			mode=m;
			
			if(m!='detail')
			{
				form = $('#autoagentFilterForm');													
				agentSaveButton = 	$("#saveAgent");									
				agentFormMsg = 	$("#agentFormMsg");		
				
				agentSaveButton.click(this.setAgent);
			}		
			
			make = $('#filter_idd_make');
			model = $('#filter_idd_model');			
			acsr = $('#filter_idd_acsr');
			engine = $('#filter_idd_engine');																
			
			make.change(this.getModels);			
			model.change(this.getAcsrEngine);		
			
		},
		getModels : function(){
			
			reset([model,acsr,engine]);						
			if(make.get(0).value=='') return;			
			
			var params = {
				_server: 'ao',
				_pack: 'autoKonfigurator',
				_action: 'get_model',
				mode: 'filter',
				znacka: make.get(0).value				
			}					
			$.post(AO.Common.settings.BASE_URL, params, render, "json");												
		},
		getAcsrEngine : function(){
			
			reset([acsr,engine]);		
			if(model.get(0).value=='') return;
							
			var params1 = {
				_server: 'ao',
				_pack: 'autoKonfigurator',
				_action: 'get_nazov_vybavy',
				mode: 'filter',
				znacka: make.get(0).value,
				model: model.get(0).value		
			}				
			$.post(AO.Common.settings.BASE_URL, params1, render, "json");
		
			var params2 = {
				_server: 'ao',
				_pack: 'autoKonfigurator',
				_action: 'get_motor',
				mode: 'filter',
				znacka: make.get(0).value,
				model: model.get(0).value		
			}		
			$.post(AO.Common.settings.BASE_URL, params2, render, "json");							   
		},	
		
		setAgent : function (){
			
			if(progressIndicator) return;
			
			progressIndicator=true;
			
			if(mode=='add'){
				var url = '/ibase.php?_server=ao&_pack=autoAgent&_action=add_item';
			}else if(mode=='edit'){
				var url = '/ibase.php?_server=ao&_pack=autoAgent&_action=update_item';
			}else{
				return;
			}
			
			var opt = { 		        
		        success: AO.Common.Util.createHandler(renderResult,this),
			    error:AO.Common.Util.createHandler(renderError,this),	
		        url:url,
		        dataType:'json'
	    	};			
	    	    	
	    	submit(opt);				    	    		
		}					
	}
}();
