// AutoGaraz module

if(typeof AO !== "object")
	AO={};
	

/**
 * AO.AutoGaraz singleton class
 */
AO.AutoGaraz=function()
{
	var adding=false;
	var refreshing=false;
	var refreshing2=false;
	
		
	// public interface
	return {		
		
		
		isGaraz : function()
		{
			return $("#garaz-wrap").size() !== 0;
		},
		
		// #################################################
		//   setUp 
		// #################################################
		
		setUp : function()
		{			
			// move zalozky   
			var ssss=new Date().valueOf();
			// this.initZalozkyCarousel();
			
			// moje auta
			// this.initMyCarsCarousel();
			
			var eeee=new Date().valueOf();
			// alert((eeee-ssss));
			
			// alert($('#garaz_bottom_tabs > ul').size())
			var __gtab=$('#garaz_bottom_tabs > ul').tabs(); 
				
			this.saveTabReference(__gtab);	
			
			this.setUpZalozkyButtons();
			this.setUpMyCarsButtons();
		},
		
		
		/**
		 * set compare statik links to private vars
		 */
		setCompareLinks : function(cmp_bkm_link,cmp_mycar_link)
		{
			this.cmp_bkm_link=cmp_bkm_link;
			this.cmp_mycar_link=cmp_mycar_link;
		},
		
		
		setUpTempInfo : function()
		{
			var sel=$("#temporary_garaz");
			sel.cluetip({
				local:true,
				width: '200px',
				sticky: false,				
				/*topOffset: -30,
		    	leftOffset:70,*/
				positionBy:'auto',
				cursor: 'pointer',
				tracking: true,
				showTitle:true,
				dropShadowSteps:  3,
				/*closeText:'X',*/
				cluetipClass: 'jtip'
			});
		},
		
		
		/**
		 * set up remove and compare button
		 */
		setUpZalozkyButtons : function()
		{
			$("#garazZmazatButton").click(AO.Common.Util.createHandler(this.removeSelectedAutoKartyFromGaraz,this));
			$("#garazPorovnatButton").click(AO.Common.Util.createHandler(this.compareSelectedAutoKartyFromGaraz,this));
		},
		
		
		/**
		 * set up remove and compare button
		 */
		setUpMyCarsButtons : function()
		{
			$("#garazMyCarsZmazatButton").click(AO.Common.Util.createHandler(this.removeSelectedMyCarsFromGaraz,this));
			$("#garazMyCarsPorovnatButton").click(AO.Common.Util.createHandler(this.compareSelectedMyCarsFromGaraz,this));
		},
		
		
		/**
		 * set up gataz funcitonality in listings
		 */
		setUpGarazTools : function(type)
		{
			/*
			var clueSett={
				local:true,
				width: '150px',	
				height: '55px',								
				positionBy:'auto',
				cursor: 'pointer',
				tracking: false,
				attribute:'rel',
				showTitle:false,
				dropShadowSteps:3,
				sticky: true,
				// activation:'click',
				// closePosition : "title",
				// closeText:'zavrieť',
				cluetipClass: 'jtip'
			};
			*/
			
			
			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'
			};
			
			
			
			switch(type)
			{
				case "karta" : 
					
					$("#listGarazAdd").click(AO.Common.Util.createHandler(this.addAutoKarta2Garaz,this)).attr("rel","#cluetip_garaz").cluetip(clueSett);
					
				break;
				
				case "list" : 
				default :
						
					// top and bottom link
					$("#listGarazAdd").click(AO.Common.Util.createHandler(this.addSelectedAutoKarty,this)).attr("rel","#cluetip_garaz").cluetip(clueSett);
					$("#listGarazAdd2").click(AO.Common.Util.createHandler(this.addSelectedAutoKarty,this)).attr("rel","#cluetip_garaz").cluetip(clueSett);
					
					
					//var s=new Date().valueOf();
							
					// links in BOXes
					if(document.getElementById("carCardsSmallBox"))
					{
						var sel=$("#carCardsSmallBox a.vloz_do_garaze");
						sel.click(AO.Common.Util.createHandler(this.addAutoKarta2Garaz,this)).attr("rel","#cluetip_garaz").cluetip(clueSett);
					}
					
					// var s=new Date().valueOf();	
					if(document.getElementById("carCardsBigBox"))
					{
						var sel=$("#carCardsBigBox a.vloz_do_garaze");
						sel.click(AO.Common.Util.createHandler(this.addAutoKarta2Garaz,this)).attr("rel","#cluetip_garaz").cluetip(clueSett);						
					}
					
					//var e=new Date().valueOf();	
					
					//alert((e-s));
								
				break;
			}
		   
			
		},
				

		
		
		saveTabReference : function(t)
		{
			this.garazTab=t;
		},
		
		
		getGarazCardsSelection : function()
		{
			var sel=$("#zalozky_aut_ul input[name^='garazCarCard']:checked");			
			var card_ids=[];
			
			for(var i=0; i<sel.size(); i++)
				card_ids.push(sel.get(i).value);
				
			return card_ids;
		},
		
		
		getGarazMyCardsSelection : function()
		{
			var sel=$("#moje_auta_ul input[name^='garazCarCard']:checked");			
			var card_ids=[];
			
			for(var i=0; i<sel.size(); i++)
				card_ids.push(sel.get(i).value);
				
			return card_ids;
		},
		
		
		// #################################################
		//   ADD to garaz
		// #################################################
		
		
		addAutoKarta2Garaz : function(e)
		{
			e.preventDefault();
			
			if(this.timeout)
				window.clearTimeout(this.timeout);
			
			if($("#html_zalozky_aut").size()==0)
			{
				this.setCluetipMsg("nie je garáž!");
				this.resetAddInfoDefer();
				
				return;
			}
			
			
			if(adding)
				return;
				
			var id=e.target.name;
			
			id=id.replace("autokarta_","");
				
			this.addAKreq(id);
		},
		
		
		addSelectedAutoKarty : function(e)
		{
			e.preventDefault();
			
			if(this.timeout)
				window.clearTimeout(this.timeout);
			
			
			if($("#html_zalozky_aut").size()==0)
			{
				alert("vkladanie do garáže je dočasne vypnuté");
				return;
			}
				
			
			if(adding)
				return;
			
			// select first tab to render carousel OK
			this.garazTab.tabs("select", 0);
		
			
			// get selection
			var sel=$("#carCardsTableForm input[name^='carCard']:checked");			
			var a_ids=[];
			
			if(sel.size()==0)
			{
				this.setCluetipMsg("Nie je označené žiadne auto.");
				this.resetAddInfoDefer();
				return;
			}
				
			for(var i=0; i<sel.size(); i++)
				a_ids.push(sel.get(i).value);
				
			var ids=a_ids.join("|");
			
			this.addAKreq(ids);
		},
		
		
		/**
		 * request
		 */
		addAKreq : function(ids)
		{
			var postData={
				_action : "add_to_bkm",
				_pack : "autoPonuka",
				_server : "ao",
				id : ids
			};
			
			// $("#cluetip_garaz").html("nahrávam");
			this.setCluetipMsg("Nahrávam");
			
			// $.post(AO.Common.settings.BASE_URL, data, this.getRegistrationMoreComplete, "json");
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.addSelectedAutoKartyComplete,this), "json");
			
			
			adding=true;
		},
		
		
		addSelectedAutoKartyComplete : function(d)
		{
			if(d.result)
			{
				// $("#cluetip_garaz").html("autokaty boli vložené do garáže");
				this.setCluetipMsg("Autokarta/y boli vložené do garáže.");
				
				// set box HTML
				$("#html_zalozky_aut").html(d.data.html_zalozky_aut);
				
				// init carousel
				// this.initZalozkyCarousel();
				
				// TODO			
				// inform world				
			}else
			{
				var ecode=d.error.code
				
				switch(ecode)
				{
					case 101 : 
						this.setCluetipMsg("Auto nebolo pridané do garáže. Garáž je plná.");
					break;
					
					case 102 : 
						this.setCluetipMsg("Auto sa už v garáži nachádza.");
					break;										
				}
			}
			
			this.resetAddInfoDefer();
			
			adding=false;
		},
		
		
		resetAddInfoDefer : function()
		{
			var self=this;
			
			var f=function()
			{
				// self.setCluetipMsg("");
				$('#cluetip').hide();
			};
			
			this.timeout=window.setTimeout(f,4000);			
		},
		
		
		
		setCluetipMsg : function(msg)
		{
			// sometimes it did not showed ...
			
			var f=function()
			{
				var c=$('#cluetip-inner');
				c.html(msg);
			};
			
			window.setTimeout(f,40);
						
			// $('#cluetip-inner').html(msg);
		},
		
		
		
		// #########################################################
		// refresh
		// #########################################################
		
		/**
		 * 
		 * @param what {String} 
		 */
		refreshGaraz : function(what)
		{
			var completeHandler, action;
			
			switch(what)
			{
				case "zalozky_aut" :
					action="get_bkm";
					pack="autoPonuka";
					completeHandler=AO.Common.Util.createHandler(this.refreshZalozkyComplete,this);
					
					// select first tab to render carousel OK
					this.garazTab.tabs("select", 0);
					
				break;
				
				case "my_cars" :
					action="get_my_cars";
					pack="autoPonuka";
					completeHandler=AO.Common.Util.createHandler(this.refreshMyCarsComplete,this);
					
					// select first tab to render carousel OK
					this.garazTab.tabs("select", 1);
					
				break;
				
				case "rezervacie" :
					action="get_rezervacie";
					pack="autoPredajna";
					completeHandler=AO.Common.Util.createHandler(this.refreshRezervacieComplete,this);
					
					this.garazTab.tabs("select", 3);
				break;
				
				
				case "objednavky" :
					action="get_objednavky";
					pack="autoPredajna";
					completeHandler=AO.Common.Util.createHandler(this.refreshObjednavkyComplete,this);
					
					this.garazTab.tabs("select", 2);					
				break;
				
				
				default : 
					return;
				break;
			}
			
			// request
			var postData={
				_action : action,
				_pack : pack,
				_server : "ao"				
			};
						
			$.post(AO.Common.settings.BASE_URL, postData, completeHandler, "json");			
			
		},
		
		
		
		// #########################################################
		// remove
		// #########################################################
		
		/**
		 * bottom garaz remove autokarty
		 */
		removeSelectedAutoKartyFromGaraz : function(e)
		{
			e.preventDefault();
			
			if(refreshing)
				return;
				
			var sel=this.getGarazCardsSelection();
			
			if(sel.length===0)
				return;
			
			var ids=sel.join("|");
			
			var postData={
				_action : "delete_from_bkm",
				_pack : "autoPonuka",
				_server : "ao",
				id : ids
			};
						
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.refreshZalozkyComplete,this), "json");			
			
			refreshing=true;
		},
		
		
		
		refreshZalozkyComplete : function(d)
		{
			// alert("complete");
			
			if(d.result)
			{
				// set box HTML
				$("#html_zalozky_aut").html(d.data.html_zalozky_aut);
				
				// init carousel
				// this.initZalozkyCarousel();
				
			}	
			
			refreshing=false;		
		},
		
		
		
		removeSelectedMyCarsFromGaraz : function(e)
		{
			e.preventDefault();
			
			// _action=delete_from_my_cars
			
			if(refreshing2)
				return;
				
			var sel=this.getGarazMyCardsSelection();
			
			if(sel.length===0)
				return;
			
			var ids=sel.join("|");
			
			var postData={
				_action : "delete_from_my_cars",
				_pack : "autoPonuka",
				_server : "ao",
				id : ids
			};
						
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.refreshMyCarsComplete,this), "json");
			
			refreshing2=true;	
		},
		
		refreshMyCarsComplete : function(d)
		{
			// alert("complete");			
			if(d.result)
			{
				// set box HTML
				$("#html_moje_auta").html(d.data.html_moje_auta);
				
				// init carousel
				// this.initMyCarsCarousel();				
			}
			
			refreshing2=false;
		},
		
		
		
		refreshRezervacieComplete : function(d)
		{
			// alert("complete");			
			if(d.result)
			{
				// set box HTML
				$("#html_rezervacie").html(d.data.html_rezervacie);					
			}
			
			refreshing2=false;
		},
		
		
		refreshObjednavkyComplete : function(d)
		{
			// alert("complete");			
			if(d.result)
			{
				// set box HTML
				$("#html_objednavky").html(d.data.html_objednavky);					
			}
			
			refreshing2=false;
		},
		
		
		
		// #########################################################
		// compare
		// ########################################################
		
		compareSelectedAutoKartyFromGaraz : function()
		{
			var sel=this.getGarazCardsSelection();
			
			if(sel.length===0)
				return;
			
			var ids=sel.join("|");
			
			var compareLink=this.cmp_bkm_link+"&carCardID="+ids;
			
			// alert(compareLink);
			// window.location.href=compareLink;
			AO.Common.Util.redir(compareLink);
		},
		
		
		compareSelectedMyCarsFromGaraz : function()
		{
			var sel=this.getGarazMyCardsSelection();
			
			if(sel.length===0)
				return;
			
			var ids=sel.join("|");
			
			var compareLink=this.cmp_mycar_link+"&carCardID="+ids;
			
			// alert(compareLink);
			// window.location.href=compareLink;
			AO.Common.Util.redir(compareLink);
		},
		
		
		// ##########################################################
		// 	carousel
		// ###########################################################
		
		
		initZalozkyCarousel : function()
		{
			 jQuery("#zalozky_aut_ul").jcarousel({
		        scroll: 1,
				//wrap:'both',
				initCallback:AO.Common.Util.createDelegate(this.zalozky_aut_carousel_initCallback,this),
		        // initCallback: AO.AutoGaraz.zalozky_aut_carousel_initCallback,
		        // This tells jCarousel NOT to autobuild prev/next buttons
		        buttonNextHTML: null,
		        buttonPrevHTML: null,
				vertical: false
		    });  
		},
		
		zalozky_aut_carousel_initCallback : function (carousel)
		{
			jQuery('#zalozky_aut_next').bind('click', function() {
			    carousel.next();
			    return false;
			});
			
			jQuery('#zalozky_aut_prev').bind('click', function() {
			    carousel.prev();
			    return false;
			});
		},
		
		
		initMyCarsCarousel : function()
		{
			 jQuery("#moje_auta_ul").jcarousel({
		        scroll: 1,
				//wrap:'both',
				initCallback:AO.Common.Util.createDelegate(this.moje_auta_carousel_initCallback,this),
		        // initCallback: AO.AutoGaraz.zalozky_aut_carousel_initCallback,
		        // This tells jCarousel NOT to autobuild prev/next buttons
		        buttonNextHTML: null,
		        buttonPrevHTML: null,
				vertical: false
		    });  
		},
		
		
		moje_auta_carousel_initCallback : function (carousel)
		{
			jQuery('#moje_auta_next').bind('click', function() {
			    carousel.next();
			    return false;
			});
			
			jQuery('#moje_auta_prev').bind('click', function() {
			    carousel.prev();
			    return false;
			});
		}
		
	}	
}();

