/*
 * ZMENA PREDAJNE 7.5.2008
 * zmeny su vykomentovane: /////
 * 
 */

if(typeof AO !== "object")
	AO={};
	

/**
 * AO.AutoPredajna singleton class
 */
AO.AutoPredajna=function()
{
	var __mode="publicPredajna";
	
	var coreInitialized=false;
	
	var objednavka_tab_index;
	
	// links
	var objednavkaRedirLink; // redir link of objednavka complete
	
	// dialog
	var dialogInitialized=false;
	var predajna_dialog=null; // dialog reference
	
	// buttons
	///// var predajna_rezervuj_butt=null; // rezervuj button
	var predajna_objednaj_butt=null; // objednaj button
	
	// forms
	var prihlasenie_form;
	var register_form;
	
	// BLOCKS and temp infos
	var action=null; // objednaj | rezervuj | objednajComplete | null
	var originalAction=null;
	
	var tabs; // tab reference
	
	var forms_enabled; // block objednaj forms
	
	var autocompleteUserInput;
	
	
	var predajnaInitialized=false;
	
	
	var initDialog = function()
	{
		predajna_dialog=$("#predajna_dialog");
		predajna_dialog.dialog({width:500, height:350, autoOpen:false}); // options {width, height, position, buttons}
			
		dialogInitialized=true;
		
		closeDialog();
	}
	
	var setDialogContent = function(html)
	{
		if(!dialogInitialized)
			initDialog();
			
		predajna_dialog.html(html);
	};
	
	var setDialogDimmensions = function(width,height)
	{
		if(!dialogInitialized)
			initDialog();
			
		predajna_dialog.parent().parent().width(width);
		predajna_dialog.parent().parent().height(height);
		
		openDialog();
	};
	
	var setDialogTitle = function(txt)
	{	
		if(!dialogInitialized)
			initDialog();
			
		var p=predajna_dialog.parent();
			
		$("span.ui-dialog-title").html(txt);
	};
	
	var openDialog = function()
	{
		if(!dialogInitialized)
			initDialog();
		
		// predajna_dialog.dialog("enable");
		predajna_dialog.dialog("open");
	};
		
	var closeDialog = function()
	{
		// predajna_dialog.dialog("disable");
		predajna_dialog.dialog("close");
	};
	
	
		
	return {
		
		
		/**
		 * default mode is "publicPredajna", change if you use predajna from elsewhere, IF by it later
		 */
		setPredajnaMode : function(mode)
		{
			__mode=mode;
		},
		
		/*
		// not used but working properly
		setuUpUserPredajnaLazy : function(objednavka_tab_index,objednavkaRedir)
		{
			// optimization 
			// sets up predajna tab right after click on the tab
			// lazy creation
			
			this.__temp_objednavka_tab_index=objednavka_tab_index;
			this.__temp_objednavkaRedir=objednavkaRedir;
			
			var tabs=this.getTabs();
			
			// add selector handler is 50 ms
			this.getTabs().tabs().bind('select.ui-tabs', AO.Common.Util.createDelegate(this.firstTabSelected,this));
							
		},
		
		
		firstTabSelected : function(e,tab)
		{
			if(tab.panel.id==="objednavka-tab")
			{
				this.getTabs().tabs().unbind('select.ui-tabs');
				
				this.setUpUserPredajna(this.__temp_objednavka_tab_index,this.__temp_objednavkaRedir);
				
				delete this.__temp_objednavka_tab_index;
				delete this.__temp_objednavkaRedir;
				
				this.objednajCarBefore();
				return false;	
			}
			
			return true;
		},
		*/
		
		// handlers to buttons
		setUpPredajnaCore : function()
		{
			// if not found nothing happens
			// objednaj button
			predajna_objednaj_butt=$("#predajna_objednaj_butt");
			predajna_objednaj_butt.click(AO.Common.Util.createHandler(this.objednajCarHandler,this));
			
			// if not found nothing happens
			// rezervuj
			///// predajna_rezervuj_butt=$("#predajna_rezervuj_butt");						
			///// predajna_rezervuj_butt.click(AO.Common.Util.createHandler(this.rezervujCarHandler,this));
			
			coreInitialized=true;
		},
		
		/**
		 * set up public detail, bookmark detail, my cars detail
		 */
		setUpUserPredajna : function(objednavka_tab_index,objednavkaRedir)
		{			
			this.setObjednavkaTabIndex(objednavka_tab_index);
			
			this.setUpUserPredajnaCommon(objednavkaRedir);
						
			predajnaInitialized=true;	
		},
		
		
		/**
		 * set up public detail, bookmark detail, my cars detail
		 * F_SOLD - predana autokarta
		 */
		setUpUserDisabledPredajna : function()
		{
			///// predajna_rezervuj_butt=$("#predajna_rezervuj_butt");
			predajna_objednaj_butt=$("#predajna_objednaj_butt");
			
			this.objednavkaBlocked=false;
			
			///// this.setEnabledRezervujButton(false);
			this.setEnabledObjednavkaButton(false);
						
			///// predajna_rezervuj_butt.attr("title","predaná autokarta");
			predajna_objednaj_butt.attr("title","predaná autokarta");
		},
		
				
		/**
		 * called also from AutoPredajnaUser (detail rezervacia)
		 */
		setUpUserPredajnaCommon : function(objednavkaRedir)
		{
			if(!coreInitialized)
				this.setUpPredajnaCore();
				
			objednavkaRedirLink=objednavkaRedir;
			
			// dialog lazy creation
			/*
			predajna_dialog=$("#predajna_dialog");
			predajna_dialog.dialog({width:500, height:350, autoOpen:false}); // options {width, height, position, buttons}
			closeDialog();
			*/
						
			// tab selection
			this.getTabs().tabs().bind('select.ui-tabs', AO.Common.Util.createDelegate(this.tabSelected,this));
			
			
			// blocks "objednaj" button
			///// this.objednavkaBlocked=false;
			
			
		},
		
						
		setObjednavkaTabIndex : function(i)
		{
			objednavka_tab_index=i;
		},
		
				
		getTabs : function()
		{
			if(!tabs)
				tabs=$('#karta_tabs > ul');
				
			return tabs;
		},
		
		
		rezervujCarHandler : function(e)
		{
			e.preventDefault();
			this.rezervujCar();
		},
		
		
		rezervujCar : function()
		{	
			// prebieha request
			if(action)
			{
				// TODO
				// blink				
				return;
			}
						
			action="rezervuj";
			originalAction=action;
			
			var id=__autokartaID; // global variable			
			if(!id)	return;
					
			var postData={
				_action : "create_rezervacia",
				_pack : "autoPredajna",
				_server : "ao",
				autokarta_id : id
			};				
			
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.rezervujCarComplete,this), "json");			
			
			setDialogContent('<div class="text_c status_msg_info"><strong>... prebieha odosielanie záujmu o autokartu</strong></div>');
			setDialogTitle("Nezáväzný záujem");
			openDialog();
		},
		
		
		rezervujCarComplete : function(d)
		{
			// reservation complete successfuly
			if(d.result==1)
			{
				// google analytics tracking
				
				if(window['pageTracker'])
					pageTracker._trackPageview("/reservationdone.html");
				
				setDialogContent('<div class="text_c status_msg_ok"><strong>Záujem prebehol úspešne.</strong></div>');
				
				if(AO.AutoGaraz && AO.AutoGaraz.isGaraz())	
					AO.AutoGaraz.refreshGaraz("rezervacie");
					
				// TODO 
				// timeout close
				
			}else if(d.result==2)
			{
				// prihlasenie form
				var pform=d;
				
				prihlasenie_form=d.data.html_login_form;
				register_form=d.data.html_register_form;
				
				var beforeHtml='<p>Táto operácia vyžaduje aby ste boli prihlásený do systému.</p>';
				
				this.setLoginForm([500,350],beforeHtml);				
							
			}else
			{
				var msg=this.getObjednajErrors(d.error,true);
				// this.setStatusMessage2(msg,"ok");
				setDialogDimmensions(360,120);
				setDialogContent(msg);
				
				// setDialogContent("Odoslanie záujmu neprebehlo úspešne!");
			}
			
			// reset action
			action=null;
		},
				
		
		
		// ###################################################
		// 	objednaj
		// ###################################################
		
		
		tabSelected : function(e,tab)
		{
			// selection of last tab
			if(tab.panel.id==="objednavka-tab")
			{
				///// this.setEnabledObjednavkaButton(false);
				
				///// if(predajna_rezervuj_butt) // if detail rezervacie no such button
				/////	predajna_rezervuj_butt.hide();
				
				if(this.selectFromScript)
				{						
					return true;					
				}else
				{
					this.objednajCarBefore();
					return false;
				}
				
			}else
			{	
				///// this.setEnabledObjednavkaButton(true);
				
				
				///// if(predajna_rezervuj_butt) // if detail rezervacie no such button
				/////	predajna_rezervuj_butt.show();		
					
				return true;				
			}
		},
		
		
		
		setEnabledObjednavkaButton : function(enbl)
		{
			if(enbl !== this.objednavkaBlocked)
				return;
			
			if(enbl)
			{
				predajna_objednaj_butt.addClass("butt-green").removeClass("butt-gray").removeClass("default_cursor");
				// 
				this.objednavkaBlocked=false;
			}else
			{
				predajna_objednaj_butt.addClass("butt-gray").addClass("default_cursor").removeClass("butt-green");
				this.objednavkaBlocked=true;
			}
		},
		
		/////
		/*
		setEnabledRezervujButton : function(enbl)
		{
			if(enbl)
				predajna_rezervuj_butt.addClass("butt-green").removeClass("butt-gray").removeClass("default_cursor");
			else
				predajna_rezervuj_butt.addClass("butt-gray").addClass("default_cursor").removeClass("butt-green");
		},
		*/
		/////
		
		
		objednajCarHandler : function(e)
		{
			e.preventDefault();
			
			if(!this.objednavkaBlocked)
				this.objednajCarBefore();
		},	
		
		
		/**
		 * check if is registered / logged ...
		 */
		objednajCarBefore : function()
		{
			// prebieha request
			if(action)
			{	// TODO
				// blink				
				return;
			}			
			
			// what action is it (internal, not POST action)
			action="objednaj";
			originalAction=action;
			
			var postData={
				_action : "can_create_objednavka",
				_pack : "autoPredajna",
				_server : "ao"			
			};				
			
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.objednajCarBeforeComplete,this), "json");			
			
		},
		
		/**
		 * login or continue
		 * @param d {Object}
		 */
		objednajCarBeforeComplete : function(d)
		{
			// reservation complete successfuly
			if(d.result==1)
			{
				// continue
				this.objednajCarPrepare();
				
				// do not reset action (block next clicks)
				// !!!
				
			}else if(d.result==2)
			{
				// prihlasenie form
				var pform=d;
				
				prihlasenie_form=d.data.html_login_form;
				register_form=d.data.html_register_form;
				
				var beforeHtml='<p>Táto operácia vyžaduje aby ste boli prihlásený do systému.</p>';
				
				this.setLoginForm([500,350],beforeHtml);
				
				// reset action
				action=null;				
							
			}else
			{
				setDialogDimmensions([500,200]);
				setDialogContent("Príprava objednávky neprebehla úspešne!");
				
				// reset action
				action=null;
			}			
		},
		
		
		/**
		 * send prepare request
		 */
		objednajCarPrepare : function()
		{
			var id=__autokartaID; // global variable			
			if(!id)	return;
				
			var postData=this.getPrepareObjednavkaPostData();
			
			if(__mode=="publicPredajna")
				postData.action="create"; // for public create
				
				
			if(__mode=="adminRezervacia")
				postData.predaj_id=$("#objednavka_predaj_id").val(); 
			
			
			// wait cursor
			AO.Common.Util.setElementWaitIndicator("objednavka-tab-button",true);
			AO.Common.Util.setElementWaitIndicator("predajna_objednaj_butt",true);
			
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.objednajCarPrepareComplete,this), "json");
		},
		
				
		getPrepareObjednavkaPostData : function()
		{
			var id=__autokartaID;  // global variable
			
			// odpojena vybava !!!
			// var vybavy_packs=this.getVybavaData('add_vybava_packs_free[]');
			// var vybavy_items=this.getVybavaData('add_vybava_free[]');
					
			var postData={
				_action : "prepare_objednavka_content",
				_pack : "autoPredajna",
				_server : "ao",
				autokarta_id : id,
				
				// odpojena vybava !!!
				// "add_vybava_packs_free[]" : vybavy_packs,
				// "add_vybava_free[]" : vybavy_items,
				
				/*
				'financovanie_obstaravacia_cena'
				'financovanie_akontacia'
				'financovanie_splatka'
				'financovanie_doba_splacania'
				'financovanie_akontacia_perc'
				'financovanie_splatky_type'
				
				// poistenie
				'poistenie_cena'
				'poistenie_hp'
				'poistenie_pzp'
				'poistenie_poistovna_type'
				*/
				financovanie_obstaravacia_cena : $("#financovanie_obstaravacia_cena").val() || "",
				financovanie_akontacia : $("#financovanie_akontacia").val() || "",
				financovanie_splatka : $("#financovanie_splatka").val() || "",
				financovanie_doba_splacania : $("#financovanie_doba_splacania").val() || "",
				financovanie_akontacia_perc : $("#financovanie_akontacia_perc").val() || "",
				financovanie_splatky_type : $("#financovanie_splatky_type").val() || "",
				
				poistenie_cena : $("#poistenie_cena").val() || "",
				poistenie_hp : $("#poistenie_hp").val() || "",
				poistenie_pzp : $("#poistenie_pzp").val() || "",
				poistenie_poistovna_type : $("#poistenie_poistovna_type").val() || ""
			
			};	
			
			return postData;
		},
		
		
		
		objednajCarPrepareComplete : function(d)
		{
			// fill objednavka with HTMLs
			if(d.result==1)
			{				
				$("#objednavka_financovanie_wrap").html(d.data.html_financovanie);
				$("#objednavka_poistenie_wrap").html(d.data.html_poistenie);
				
				// odpojena vybava !!!
				// $("#objednavka_add_vybava_packs_free_wrap").html(d.data.html_add_vybava_packs_free);
				// $("#objednavka_add_vybava_free_wrap").html(d.data.html_add_vybava_free);
				
				// odpojena vybava !!!
				// $("#objednavka_obstaravacia_cena_wrap").html(d.data.obstaravacia_cena);
				
				
				// priradenie admina ak sa prihlasil admin
				if(d.data.html_admin2user)
				{
					$("#objednavka_admin_2_user_wrap").html(d.data.html_admin2user);
					this.setUpAdmin2User();
				}
				
				
				if(d.data.html_user_info)
				{
					$("#objednavka_user_info_wrap").html(d.data.html_user_info);					
				}
				
				
				// nemusi prist lebo sa moze prihlasit aj admin !!
				if(d.data.html_user)
				{
					$("#objednavka_user_wrap").html(d.data.html_user);
				
					this.setUpObjednavkaForm();
				}
				
				// fill user type to hidden element
				$("#objednavka_typ_uzivatela").val(d.data.user_type);
				
				
				// odpojena vybava !!!
				// odpojene lebo cena sa nemeni !!!
				
				// var admin_cena_s_vybavou=$("#objednavka_cena_final_s_dph");
				// if(admin_cena_s_vybavou.size()>0)
				//	admin_cena_s_vybavou.html(AO.Common.Util.numberFormat(d.data.obstaravacia_cena_int)+",- Sk");
				
				
				// select tab
				this.selectFromScript=true;
				var tabind=objednavka_tab_index;
				this.getTabs().tabs("select",objednavka_tab_index);
				
				delete this.selectFromScript;
											
			}else
			{
				// TODO
			}
			
			
			AO.Common.Util.setElementWaitIndicator("objednavka-tab-button",false);
			AO.Common.Util.setElementWaitIndicator("predajna_objednaj_butt",false);
						
			// reset action here !!!
			action=null;
		},
		
		
		getVybavaData : function(name)
		{
			var sel=$("#vybava_add_form input[name='"+name+"']:checked");
			var add=[];
			
			for(var i=0; i<sel.size(); i++)
				add.push(sel.get(i).value);
			
			
			return add;
		},
		
		
		
		// #######################################
		// 	objednavka FORMs
		// #########################################
		
		
		// called also in admin2user mode !!! selections will be empty
		setUpObjednavkaForm : function()
		{
			// adresa			
			$("#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));
						
			// validation
			var validationSett=this.getObjednavkaValidationSettings();
			
			var of=$("#objednavka_form");
			
			of.validate(validationSett);
			
		},
		
		
		submitObjednavka : function(form)
		{
			action="objednajComplete"; // originalAction not needed			
			
			// action is in HTML hidden
			var opts={
				success : AO.Common.Util.createHandler(this.submitObjednavkaComplete,this),
		        error : AO.Common.handler.ajaxError,				
		        url : AO.Common.settings.BASE_URL,
		        dataType : 'json',
				method : "POST"
			};
			
			this.setStatusMessage2("Prebieha objednávka.","info");
			
			$(form).ajaxSubmit(opts);
		},
		
		
		submitObjednavkaComplete : function(d)
		{
			if(d.result)
			{
				// fill info
				this.setStatusMessage2("Objednávka prebehla úspešne.","ok");
				
				// refresh garaz bottom
				// NOT NEEDED while redir !!! redundant request
				
				//if(AO.AutoGaraz && AO.AutoGaraz.isGaraz())	
				//	AO.AutoGaraz.refreshGaraz("objednavky");
				
				
				// google analytics tracking
				if(window['pageTracker'])
					pageTracker._trackPageview("/orderdone.html");
				
				// var a=__mode;
				switch(__mode)
				{
					// redir
					case "publicPredajna" :					
					case "userRezervacia" :
					case "adminRezervacia" :
						// var a= objednavkaRedirLink;
						AO.Common.Util.redir(objednavkaRedirLink+"&ao_id="+d.data.ao_id);
					break;
				}
				
				
			}else
			{
				var msg=this.getObjednajErrors(d.error);
				this.setStatusMessage2(msg,"bad");
			}
			
			action=null;			
		},	
		
				
		getObjednajErrors : function(err,format)
		{
			var msg="";
			var cls="";
			
			if(format)
			{
				cls='class="status_msg_bad"';	
			}
			
			
			// 200 - uz rezervovane uzivatelom
			// 201 - predane	
			// 202 - uz objednane uzivatelom
			switch(err.code)
			{
				case 200 :
					msg = '<strong '+cls+'>Túto autokartu už máte rezervovanú!</strong><br/>ID rezervácie: '+err.data.ao_id;
				break;
				
				case 201 :
					msg = '<strong '+cls+'>Táto autokarta je už predaná!</strong>';
				break;
				
				case 202 :
					msg = '<strong '+cls+'>Túto autokartu už máte objednanú!</strong><br/>ID objednávky: '+err.data.ao_id;
				break;
				
				default:
					msg = '<strong '+cls+'>Akcia neprebehla úspešne, nastala neznáma chyba</strong>';
				break;
			}
			
			return msg;
			
		},
		
		
		
		// #################
		// validation data
		
		getObjednavkaValidationSettings : function()
		{
			var typ_uzivatela=$("#objednavka_typ_uzivatela").val();
			
			if(typ_uzivatela=="1")
				return this.getObjednavkaValidationSettingsFO();
			else if(typ_uzivatela=="2")
				return this.getObjednavkaValidationSettingsS();
			else	
				return {};
		},
		
		
		getObjednavkaValidationSettingsFO : function()
		{
			return {
					rules: {
						fo_meno : {
							required : true
						},
						fo_priezvisko : {
							required : true
						},
						adresa_stat : {
							required : true
						},
						adresa_kraj : {
							required : true
						},
						adresa_okres : {
							required : true
						},
						adresa_obec : {
							required : true
						},
						adresa_psc : {
							required : true
						},
						adresa_ulica : {
							required : true
						}
					},
					messages: {
						fo_meno : {
							required : "povinná položka"
						},
						fo_priezvisko : {
							required : "povinná položka"
						},
						adresa_stat : {
							required : "povinná položka"
						},
						adresa_kraj : {
							required : "povinná položka"
						},
						adresa_okres : {
							required : "povinná položka"
						},
						adresa_obec : {
							required : "povinná položka"
						},
						adresa_psc : {
							required : "povinná položka"
						},
						adresa_ulica : {
							required : "povinná položka"
						}				
					},
					errorClass: "invalid",
					// focusCleanup: true,
					submitHandler : AO.Common.Util.createHandler(this.submitObjednavka,this)
				};
		},
		
		
		getObjednavkaValidationSettingsS : function()
		{
			return {
					rules: {
						spol_obch_nazov : {
							required : true
						},
						spol_ico : {
							required : true
						},
						spol_dic : {
							required : true
						},
						spol_ic_dph : {
							required : true
						},
						adresa_stat : {
							required : true
						},
						adresa_kraj : {
							required : true
						},
						adresa_okres : {
							required : true
						},
						adresa_obec : {
							required : true
						},
						adresa_psc : {
							required : true
						},
						adresa_ulica : {
							required : true
						}
					},
					messages: {
						spol_obch_nazov : {
							required : "povinná položka"
						},
						spol_ico : {
							required : "povinná položka"
						},
						spol_dic : {
							required : "povinná položka"
						},
						spol_ic_dph : {
							required : "povinná položka"
						},
						adresa_stat : {
							required : "povinná položka"
						},
						adresa_kraj : {
							required : "povinná položka"
						},
						adresa_okres : {
							required : "povinná položka"
						},
						adresa_obec : {
							required : "povinná položka"
						},
						adresa_psc : {
							required : "povinná položka"
						},
						adresa_ulica : {
							required : "povinná položka"
						}			
					},
					errorClass: "invalid",
					// focusCleanup: true,
					submitHandler : AO.Common.Util.createHandler(this.submitObjednavka,this)
				};
		},
		
		
		
		// ###################################################
		//	login ... copy of AutoLogin impl
		// ###################################################
		
		setLoginForm : function(dimmension,extraBefore,extraAfter)
		{
			if(prihlasenie_form)
			{
				setDialogDimmensions(dimmension[0],dimmension[1]);
				
				var html="";
				
				if(extraBefore)
					html+=extraBefore;
				
				html+=prihlasenie_form;
				
				if(extraAfter)
					html+=extraAfter;
								
				setDialogContent(html);	
				
				this.setUpLogin();
			}
		},
		
		setUpLogin : function()
		{
			delete this.statusObject;
			
			$("#predajna_register_butt").click(AO.Common.Util.createHandler(this.setRegisterForm,this));
			
			$("#predajna_login_form").validate({
				rules: {
					login: "required",
					passwd: "required"					
				},
				messages: {					
					login: "povinná položka",
					passwd: "povinná položka"					
				},
				
				errorClass: "invalid",
				// focusCleanup: true,
				submitHandler : AO.Common.Util.createHandler(this.doLogin,this)
			});
			
		},
		
		
		doLogin : function(e)
		{	
			$("#predajna_response_msg").text("").hide();
					
			var opts={
				success : AO.Common.Util.createHandler(this.doLoginComplete,this),
		        error : AO.Common.handler.ajaxError,				
		        url : AO.Common.settings.BASE_URL,
		        dataType : 'json',
				method : "POST"
			};
			
			$("#predajna_login_form").ajaxSubmit(opts);
		},
		
		
		doLoginComplete : function(d)
		{			
			if(d.result===1)
			{
				// fill right top box
				AO.AutoLogin.proccesLoginOK(d.data.html_login_box);
				
				$("#objednavka_typ_uzivatela").val(d.data.user_type);
				
				if(originalAction == "rezervuj")
				{
					var y=confirm("chcete pokracovať v rezervácii?");
					
					if(y)
						this.rezervujCar();
						
				}else if(originalAction == "objednaj")
				{
					this.objednajCarPrepare();
					closeDialog();
				}
				
				// reset action temp datas
				originalAction=null;
			}	
			else		
				this.proccesLoginError(d.error);			
		},
		
		
		proccesLoginError : function(err)
		{
			switch(err.code)
			{
				case 3 :
					this.setStatusMessage("Nesprávne meno alebo heslo!","bad");
				break;
				
				default :
					this.setStatusMessage("Prihlásenie neprebehlo úspešne!","bad");					
				break;
			}
		},
		
		
		// ###################################################
		//	register
		// ###################################################
		
		setRegisterForm : function(e)
		{
			e.preventDefault();
			
			if(register_form)
			{
				setDialogDimmensions(700,550);
				setDialogContent(register_form);						
				this.setUpRegister();
			}
		},
		
		
		setUpRegister : function()
		{	
			delete this.statusObject;
					
			AO.AutoUser.createValidationMethods();			
			
			var submitHandler=AO.Common.Util.createHandler(this.submitRegister,this);
			
			AO.AutoUser.setRegistrationSubmitHandler(submitHandler);
			AO.AutoUser.setRegistrationFormID("predajna_user_form");
			
			var v=AO.AutoUser.getRegisterValidationSettings();
			
			$("#predajna_user_form").validate(v);
			
			// add selection handler			
			// user_type selection
			$("#typ_uzivatela_sel").change(
				function()
				{
					AO.AutoUser.getRegistrationMore($("option:selected:selected",this).attr("value"));
				}										 
			);
		},
		
		
		submitRegister : function(form)
		{		
			var opts={
				success : AO.Common.Util.createHandler(this.submitRegisterComplete,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");
				
				var self=this;
				
				var action="operácii";
				
				if(originalAction === "rezervuj")
				{
					action="rezervácii";
					
				}else if(originalAction === "objednaj")
				{
					action="objednávke";
				}				
				
				var beforeHtml='<h3>Vážený zákazník,</h3>'+
				'<p><strong>Vaša registrácia prebehla úspešne.</strong></p>'+
				'<p><strong>Po prihlásení do účtu môžete v '+action+' pokračovať.</strong></p>'+
				'V prípade akýchkoľvek otázok nás prosím neváhajte kontaktovať na Email: <a href="mailto:obchod@autoolymp.sk">obchod@autoolymp.sk</a> alebo na našich telefónnych číslach uvedených v kontaktoch.</p>'+
				' Vaše číslo zákazníka je <strong style="color:#FF0000; font-size:1.2em">'+d.data.ao_id+'</strong>, uvádzajte ho prosím pri našej ďalšej komunikácii.</p>'+
				'<p>Ešte raz ďakujeme, že ste si zvolili náš obchodný systém a prajeme Vám príjemný výber Vášho automobilu.</p>';
				
				
				var f=function()
				{
					self.setLoginForm([500,500],beforeHtml);
				}
								
				window.setTimeout(f,1000);				
				
			}else
			{
				// proccess errors
				this.processError(d.error);								
			}	
		},
		
		// same as in AutoUser :(
		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;
					
					default:
						this.setStatusMessage("Nastala chyba (kód: "+er.code+")","bad");
					break;
					
				}
			}else
			{
				this.setStatusMessage("Nastala neznáma chyba!","bad");
			}
		},
		
		
		
		
		
		// #######################################
		// button msg in dialog
		// ########################################
		
		/**
		 * div impl
		 */
		setStatusMessage : function(msg,type)
		{
	
			if(!this.statusObject)
				this.statusObject=new AO.Common.formStatusMsg("predajna_form_response_message");
			
			this.statusObject.setStatusMessage(msg,type);
			
			this.deferHideStatusMsg();
		},
		
		
		deferHideStatusMsg : function()
		{
			if(!this.statusObject)
				this.statusObject=new AO.Common.formStatusMsg("predajna_form_response_message");
			
			this.statusObject.deferHideStatusMsg();	
		},
		
		
		// #######################################
		// button msg in objednavka form
		// ########################################
		
		/**
		 * div impl
		 */
		setStatusMessage2 : function(msg,type)
		{
	
			if(!this.statusObject2)
				this.statusObject2=new AO.Common.formStatusMsg("objednavka_form_response_message",6000);
			
			this.statusObject2.setStatusMessage(msg,type);
			
			this.deferHideStatusMsg2();
		},
		
		
		deferHideStatusMsg2 : function()
		{
			if(!this.statusObject2)
				this.statusObject2=new AO.Common.formStatusMsg("objednavka_form_response_message",6000);
			
			this.statusObject2.deferHideStatusMsg();	
		},
		
		
		
		// #########################################
		//	enable forms in predajna (objednaj, vybava, financie, poistenie)
		// #########################################
		
		setEnabledObjednajForms : function(enbl)
		{
			// forms are in same state
			if(forms_enabled===enbl)
				return;
				
			// SELECTIONS
			
			// block fakturacne form
			var all_els=$("#objednavka_form :input");
			var all_labels=$("#objednavka_form label");
			
			// odpojena vybava !!!
			// var vybava_els=$("#vybava_add_form :input");
			
			var financovanie_els=$("#form_financovanie :input");
			var poistenie_els=$("#form_poistenie :input");
			
			
			if(enbl)
			{
				all_els.removeAttr("disabled").removeClass("off");
				all_labels.removeClass("off");
				
				// odpojena vybava !!!
				// vybava_els.removeAttr("disabled").removeClass("off");
								
				financovanie_els.removeAttr("disabled").removeClass("off");
								
				poistenie_els.removeAttr("disabled").removeClass("off");
								
			}else
			{
				all_els.attr("disabled","disabled").addClass("off");
				all_labels.addClass("off");
				
				// odpojena vybava !!!
				// vybava_els.attr("disabled","disabled").addClass("off");
								
				financovanie_els.attr("disabled","disabled").addClass("off");
								
				poistenie_els.attr("disabled","disabled").addClass("off");				
			}			
			
			forms_enabled=enbl;	
		},
		
		
		// ###################################################
		//	NEZAVEZNY ZAUJEM
		// ###################################################
		
		// init
		setUpNezavaznyZaujem : function()
		{
			// if not logged
			this.setUpZaujemLogin();
			
			// fill my datas if logged (link exists)
			$("#zaujemGetUserDataLink").click(AO.Common.Util.createHandler(this.fillZaujemUserDatasHandl,this));
			
			this.setUpZaujemForm();
		},
		
		
		// DUPLIKOVANE - lebo mame 2x login (dialog a nezavazny zaujem)
		// ale nechal som to tak - bude vacsi prehlad ked nebudu previazane cez parametre ...
		setUpZaujemLogin : function()
		{
			var lform=$("#zaujem_login_form");
			
			if(lform.size()==0)
				return;
			
			$("#zaujem_login_form").validate({
				rules: {
					login: "required",
					passwd: "required"									
				},
				messages: {					
					login: "povinná položka",
					passwd: "povinná položka"
				},
				
				errorClass: "invalid",
				// focusCleanup: true,
				submitHandler : AO.Common.Util.createHandler(this.doZaujemLogin,this)
			});
			
		},
		
		
		doZaujemLogin : function(e)
		{	
			$("#zaujem_login_response_message").text("").hide();
					
			var opts={
				success : AO.Common.Util.createHandler(this.doZaujemLoginComplete,this),
		        error : AO.Common.handler.ajaxError,				
		        url : AO.Common.settings.BASE_URL,
		        dataType : 'json',
				method : "POST"
			};
			
			$("#zaujem_login_form").ajaxSubmit(opts);
		},
		
		
		doZaujemLoginComplete : function(d)
		{			
			if(d.result===1)
			{
				// fill right top box
				AO.AutoLogin.proccesLoginOK(d.data.html_login_box);
				
				$("#objednavka_typ_uzivatela").val(d.data.user_type);
				
				this.fillZaujemUserDatas(d.data.user_data);
			}	
			else
			{
				switch(err.code)
				{
					case 3 :
						this.setStatusMessage3("Nesprávne meno alebo heslo!","bad");
					break;
					
					default :
						this.setStatusMessage3("Prihlásenie neprebehlo úspešne!","bad");					
					break;
				}
			}							
		},
		
		
		
		setUpZaujemForm : function()
		{
			$("#autoKartaZaujemForm").validate({
				rules: {
					meno: "required",
					priezvisko: "required",
					telefon: "required",
					email : "required",
					user_type : "required"
				},
				messages: {	
					meno: "povinná položka",
					priezvisko: "povinná položka",
					telefon: "povinná položka",
					email : "povinná položka",
					user_type : "povinná položka"					
				},
				
				errorClass: "invalid",
				// focusCleanup: true,
				submitHandler : AO.Common.Util.createHandler(this.doZaujem,this)
			});
			
		},
		
		
		doZaujem : function(e)
		{	
			$("#zaujem_login_response_message").text("").hide();
					
			var opts={
				success : AO.Common.Util.createHandler(this.doZaujemComplete,this),
		        error : AO.Common.handler.ajaxError,				
		        url : AO.Common.settings.BASE_URL,
		        dataType : 'json',
				method : "POST"
			};

			this.setStatusMessage4("Záujem sa odosiela!","info");					
			
			$("#autoKartaZaujemForm").ajaxSubmit(opts);
			
		},
		
		
		doZaujemComplete : function(d)
		{			
			if(d.result===1)
			{
				this.setStatusMessage4("Ďakujeme za Váš záujem! Bol odoslaný predávajúcemu!","ok");					
				
				if(window['pageTracker'])
					pageTracker._trackPageview("/zaujemdone.html");
					
				$("#autoKartaZaujemForm").get(0).reset();
			}	
			else
			{
				this.setStatusMessage4("Prejavenie záujmu neprebehlo úspešne!","bad");
				/*
				switch(err.code)
				{
					default :
						
					break;
				}
				*/
			}							
		},
		
		
		fillZaujemUserDatasHandl : function(e)
		{
			e.preventDefault();
			
			if(window['__userData2Fill'])
			{
				this.fillZaujemUserDatas(window.__userData2Fill);				
			}
		},
		
		
		fillZaujemUserDatas : function(d)
		{
			if(d['meno'])
				$('#zaujemMeno').val(d.meno);
			
			if(d['priezvisko'])
				$('#zaujemPriezvisko').val(d.priezvisko);
			
			if(d['telefon'])
				$('#zaujemTelefon').val(d.telefon);
	
			if(d['email'])
				$('#zaujemEmail').val(d.email);
						
			if(d['user_type'])
				$('#zaujemUserType').val(d.user_type);
			
			if(d['id'])
				$('#zaujemUserId').val(d.id);					
			
		},
		
		
		setStatusMessage3 : function(msg,type)
		{
	
			if(!this.statusObject3)
				this.statusObject3=new AO.Common.formStatusMsg("zaujem_login_response_message",6000);
			
			this.statusObject3.setStatusMessage(msg,type);
			
			this.deferHideStatusMsg3();
		},
		
		
		deferHideStatusMsg3 : function()
		{
			if(!this.statusObject3)
				this.statusObject3=new AO.Common.formStatusMsg("zaujem_login_response_message",6000);
			
			this.statusObject3.deferHideStatusMsg();	
		},
		
		setStatusMessage4 : function(msg,type)
		{
	
			if(!this.statusObject4)
				this.statusObject4=new AO.Common.formStatusMsg("autoKartaZaujemFormMsg",10000);
			
			this.statusObject4.setStatusMessage(msg,type);
			
			this.deferHideStatusMsg4();
		},
		
		
		deferHideStatusMsg4 : function()
		{
			if(!this.statusObject4)
				this.statusObject4=new AO.Common.formStatusMsg("autoKartaZaujemFormMsg",10000);
			
			this.statusObject4.deferHideStatusMsg();	
		},
		
		
		// ###################################################
		// ###################################################
		// ###################################################
		// ADMIN 2 USER in public ponuka
		// ###################################################
		
		setUpAdmin2User : function()
		{
								
			// set user choose
			autocompleteUserInput=$('#a2o_login');
						
			autocompleteUserInput.autocomplete(
				AO.Common.settings.BASE_URL,
				{
					minChars : 3,
					cacheLength : 1,
					selectOnly: 1,
					mustMatch : 1,
					formatItem : AO.Common.Util.createDelegate(this.autocompleteformatItem,this), 
					extraParams : this.getACExtraParams(),
					onItemSelect : AO.Common.Util.createHandler(this.autocompleteSelect,this)
				}
				
			);
			
			// change of type -> change AC params
			$("#objednavka_admin_2_user_wrap input[name='admin2user_typ_uzivatela']").change(AO.Common.Util.createHandler(this.autocompleteChangeExtraParams,this));
			
		},
		
		
		getACExtraParams : function()
		{
			var ch=$("#objednavka_admin_2_user_wrap input[name='admin2user_typ_uzivatela']:checked");
			var tu=ch.val();
		
			return {
				_action : "prepare_objednavka_user_select",
				_pack : "autoPredajna",
				_server : "ao",
				typ_uzivatela : tu
			}
		},
		
		
		autocompleteChangeExtraParams : function()
		{
			var ac = autocompleteUserInput.get(0).autocompleter;
			
			ac.setExtraParams(this.getACExtraParams());			
		},
		
		
		autocompleteformatItem : function(row)
		{
			return row[0]+" ("+row[1]+" "+row[2]+")";
		},		
		
		
		autocompleteSelect : function(li)
		{
			// spusta sa aj pri inite ???
			
			var inf=li.extra; // data from server (row) except first col
			var id=inf[inf.length-1];
			
			// load form part
			if(id)
			{
				// set ID to hidden for latter form submit
				$("#admin2user_user_id").val(id);
				this.loadUserObjednavkaFrom(id);
			}			
		},
		
		
		loadUserObjednavkaFrom : function(uid)
		{
			var postData={
				_action : "prepare_objednavka_user",
				_pack : "autoPredajna",
				_server : "ao",
				user_id : uid
			};
						
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.loadUserObjednavkaFromComplete,this), "json");
		},
		
		
		loadUserObjednavkaFromComplete : function(d)
		{
			if(d.result)
			{
				// fill user type to hidden element
				$("#objednavka_typ_uzivatela").val(d.data.user_type);
				
				if(d.data.html_prev_objednavky)
				{
					$("#objednavka_admin_change_objednavka_wrap").html(d.data.html_prev_objednavky);					
					$("#prev_objednavka_sel").change(AO.Common.Util.createHandler(this.prevObjednavkaSelected,this));
				}
				
				$("#objednavka_user_wrap").html(d.data.html_user);
				AO.AutoPredajna.setUpObjednavkaForm();
			}
		},
		
		
		prevObjednavkaSelected : function(e)
		{
			var predaj_id=$("#prev_objednavka_sel").val();
			
			if(!predaj_id)
				return;
				
			var postData={
				_action : "prepare_objednavka_prev_user",
				_pack : "autoPredajna",
				_server : "ao",
				predaj_id : predaj_id,
				user_id : $("#admin2user_user_id").val()
			};
			
			// same response handler			
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.loadUserObjednavkaFromComplete,this), "json");
		}
			
	}	

}();

