﻿/*
 *****************************
 *	CONSTANTS
 *****************************
 */
var INPUT_DERIVATIVES = $("input#inpt_derivatives");
/*
 *****************************
 *	UTILITIES
 *****************************
 */
 

/*
 *****************************
 *	PAGE INIT
 *****************************
 */

	$(document).ready (function() 
	{
		sIFR.replaceCoreAssets();
		INPUT_DERIVATIVES = $("input#inpt_derivatives");
	});




/*
 *****************************
 *	MODEL ITEM EVENT HANDLER CONFIGURATION
 *****************************
 */
	 
	$(document).ready (function() 
	{
		/* 
		 * ADD 'ROLL-OVER' FUNCTIONALITY TO MODELS 
		 */
			$("div.main-container > div.search-setup > div.model-selection > div.model-item").hover(
				function () 
				{
					var parent	= $(this).parent("div.model-selection");
					var index	= parent.children().index($(this));			//var index	= parent.children().index(this);
					
					handleModelOver(index);
				}, 
				function () {	/* NOTE :: No 'ROLL-OUT' as fired by 'div.model-item-over' */	}
			);
		
		/* 
		 * ADD 'ROLL-OUT' FUNCTIONALITY TO MODEL-OVERS 
		 */
			$("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over").hover(
				function () {	/* NOTE :: No 'ROLL-OVER' as fired by 'div.model-item' */	}, 
				function () 
				{
					handleModelOut();
				}
			);
		
		/* 
		 * ADD 'CATCH-ALL' BEHAVIOUR TO OVERLAY SCREEN
		 */
			$("div.main-container > div.search-setup > div.model-selection-over > div.overlay").hover(
				function () 
				{
					hideOverlay();
				}, 
				function () 
				{
					hideOverlay();	
				}
			);
		
	});

		
	/*
	 *****************************
	 *	EVENT HANDLER :: MODEL SELECTION OVER
	 *****************************
	 */
	 
		function handleModelOver (index)
		{
			/*
			 * DISPLAY OVER CONTAINER IF NOT ALREADY DISPLAYED
			 */
				var target			= $("div.main-container > div.search-setup > div.model-selection-over");
				var target_Class	= "model-selection-over-active";
				
				if (!target.hasClass(target_Class))
				{
					target.addClass(target_Class);
				}
			
			/*
			 * DISPLAY SPECIFIC MODEL
			 */
				activateModel(index)
		}
	
	
	/*
	 *****************************
	 *	EVENT HANDLER :: MODEL SELECTION (OVER-STATE) OUT
	 *****************************
	 */
	 	
		function handleModelOut ()
		{
			//Hide all over states
			hideAllModels();
			
			//Remove 'active' class from over-container
			//$("div.main-container > div.search-setup > div.model-selection-over").removeClass("model-selection-over-active");
			hideOverlay();
		}
		
		
	/*
	 *****************************
	 *	ROLL-OVER / ROLL-OUT UTILITY METHODS
	 *****************************
	 */
		
		function activateModel (index)
		{
			//Hide all over states
			hideAllModels();
			
			//Retrive and display over version
			var target = $($("div.model-selection-over").children().get(index));
			target.addClass("model-item-over-visible");
		}
		
		function hideAllModels ()
		{
			$("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over").removeClass("model-item-over-visible");
		}

		function hideOverlay ()
		{
			//Remove 'active' class from over-container
			$("div.main-container > div.search-setup > div.model-selection-over").removeClass("model-selection-over-active");
		}




	/*
	 *****************************
	 *	MODEL / TRIM SELECTION
	 *****************************
	 */
		
		$(document).ready (function() 
		{
			/* 
			 * ADD 'CLICK' FUNCTIONALITY TO ADD / REMOVE ALL MODELS OPTION 
			 */
				setupAndStyleModelOptionLinks();
				
				$("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over > div.options > h4").click(
					function () 
					{
						handleOptionClick($(this), true);
						return false;
					}
				);
				
				
				$("div.main-container > div.search-setup > div.model-selection > div.other-models > div.model-item-simple > h4 > a").click(
					function () 
					{
						handleModelSimpleClick($(this));
						return false;
					}
				);
				
				
			/* 
			 * ADD 'CLICK' FUNCTIONALITY TO MODEL-OPTIONS 
			 */
				$("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over > div.options > ul > li > a").click(
					function () 
					{
						handleOptionClick($(this), false);
						return false;
					}
				);
			
		});
		
		
		function setupAndStyleModelOptionLinks()
		{
				if ($.browser.msie)
				{
					var amLink_ibiza_3			= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-ibiza-3-door > div.options > h4 > a");
					var amLink_ibiza_5			= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-ibiza-5-door > div.options > h4 > a");
					var amLink_new_ibiza_3		= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-new-ibiza-3-door > div.options > h4 > a");
					var amLink_new_ibiza_5		= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-new-ibiza-5-door > div.options > h4 > a");
					var amLink_leon				= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-leon > div.options > h4 > a");
					var amLink_altea			= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-altea > div.options > h4 > a");
					var amLink_altea_xl			= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-altea-xl > div.options > h4 > a");
					var amLink_altea_freetrack	= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-altea-freetrack > div.options > h4 > a");
					var amLink_altea_toledo		= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-toledo > div.options > h4 > a");
					var amLink_altea_alhambra	= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-alhambra > div.options > h4 > a");
					var amLink_exeo 			= $("div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-exeo > div.options > h4 > a");
					
					amLink_ibiza_3.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-ibiza-3-door > div.options > h4'), true)");
					amLink_ibiza_5.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-ibiza-5-door > div.options > h4'), true)");
					amLink_new_ibiza_3.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-new-ibiza-3-door > div.options > h4'), true)");
					amLink_new_ibiza_5.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-new-ibiza-5-door > div.options > h4'), true)");
					amLink_leon.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-leon > div.options > h4'), true)");
					amLink_altea.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-altea > div.options > h4'), true)");
					amLink_altea_xl.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-altea-xl > div.options > h4'), true)");
					amLink_altea_freetrack.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-altea-freetrack > div.options > h4'), true)");
					amLink_altea_toledo.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-toledo > div.options > h4'), true)");
					amLink_altea_alhambra.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-alhambra > div.options > h4'), true)");
					amLink_exeo.attr("href", "javascript:handleOptionClick($('div.main-container > div.search-setup > div.model-selection-over > div.model-item-over-exeo > div.options > h4'), true)");
					
				}
				
				
				// STYLE LINKS
				sIFR.replace(sIFR_settings.STYLE_ITALLIC_4, 
				{
					selector	: "div.main-container div.search-setup > div.model-selection-over > div.model-item-over > div.options > h4"
				});
			
		}
		
		
		function handleOptionClick(eventSource_jQObjectRef, isAllModelsLink)
		{
			var _this					= eventSource_jQObjectRef;
			var _allModels				= isAllModelsLink;
			var _parentItemContainer	= _this.parents("div.model-selection-over");
			var _parentItem				= _this.parents("div.model-item-over");
			var _modelItemIndex			= _parentItemContainer.children().index(_parentItem);
			
			//alert("--------- \n_this = " + _this + "\n_allModels = " + _allModels + "\n_parentItemContainer = " + _parentItemContainer + "\n_parentItem = " + _parentItem + "/n_modelItemIndex = " + _modelItemIndex)
			
			if (!_this.hasClass("selected"))
			{
				//Set item status
				_this.addClass("selected");
				
				//Based on type of link (individual option / all models) perform appropriate action
				if (!_allModels)
				{
					//Configure 'all models' option
					configureAllModelsSelected(_parentItem, _modelItemIndex);
					var options = _this;
				}
				else 
				{
					selectAllOptions(_parentItem, true);
					var options = _parentItem.find("ul > li > a");
				}
				
				
				////////////////////////////////////////////////////////////////////
				//
				//Extract #IDs and Add to search
				//
				addToSearch(options);
				////////////////////////////////////////////////////////////////////
				
				
				//Update 'RESTING STATE (UP) MODEL-ITEM'
				updateModelItemSelectedState(_modelItemIndex, true);
			}
			else if (_this.hasClass("selected"))
			{
				//Set item status
				_this.removeClass("selected");
				
				//Based on type of link (individual option / all models) perform appropriate action
				if (!_allModels)
				{
					//Configure 'all models' option
					configureAllModelsSelected(_parentItem, _modelItemIndex);
					var options = _this;
				}
				else
				{
					selectAllOptions(_parentItem, false);
					//Update 'RESTING STATE (UP) MODEL-ITEM'
					updateModelItemSelectedState(_modelItemIndex, false);
					var options = _parentItem.find("ul > li > a");
				}
				
				
				////////////////////////////////////////////////////////////////////
				//
				//Extract #IDs and Remove from search
				//
				removeFromSearch(options);
				////////////////////////////////////////////////////////////////////
			}
			
		}
		
		
		
		function selectAllOptions (modelItem_jQRef, bool)
		{
			var modelItem	= modelItem_jQRef;
			var options		= modelItem.find("ul > li > a");
			
			if (bool)
			{
				options.each(
					function (i)
					{
						var item = $(this);
						item.addClass("selected");
					}
				);
			}
			else
			{
				options.each(
					function (i)
					{
						var item = $(this);
						item.removeClass("selected");
					}
				);
			}
		}
		
		
		function configureAllModelsSelected (modelItem_jQRef, modelItemIndex)
		{
			var totalSelected	= 0;
			var modelItem		= modelItem_jQRef;
			
			var selectAllLink	= modelItem.find("div.options > h4").eq(0);
			var options			= modelItem.find("ul > li > a");
			
			options.each(
				function (i)
				{
					var item = $(this);
					if (item.hasClass("selected")) ++totalSelected;
				}
			);
			
			if (options.length == totalSelected)
			{
				selectAllLink.addClass("selected");
			}
			else
			{
				selectAllLink.removeClass("selected");
			}
			
			if (totalSelected == 0) updateModelItemSelectedState(modelItemIndex, false); //Update 'RESTING STATE (UP) MODEL-ITEM'
				
		}
		
		
		
		function updateModelItemSelectedState (index, selected)
		{
			//Retrive and update class name
			var target = $($("div.model-selection").children().get(index));
			
			if (selected)
			{
				target.addClass("model-item-selected");
			}
			else
			{
				target.removeClass("model-item-selected");
			}
		}
		
		
		function handleModelSimpleClick (eventSource_jQObjectRef)
		{
			var _this = eventSource_jQObjectRef;
			
			if (!_this.hasClass("selected"))
			{
				//Set item status
				_this.addClass("selected");
				
				////////////////////////////////////////////////////////////////////
				//
				//Extract #IDs and Add to search
				//
				var derivs = $(_this).attr("href").replace("#","") ;
				addToSearchSimple(derivs);
				////////////////////////////////////////////////////////////////////
			}
			else if (_this.hasClass("selected"))
			{
				//Set item status
				_this.removeClass("selected");
			
				////////////////////////////////////////////////////////////////////
				//
				//Extract #IDs and Remove from search
				//
				var derivs = $(_this).attr("href").replace("#","") ;
				removeFromSearchSimple(derivs);
				////////////////////////////////////////////////////////////////////
			}
		}
		
		
		function addToSearch(options)
		{
			/*
			 * HELLO JOE :: Add options to search object
			 */
            var _existingDerivatives = new String() ;
            var _derivativeIds = new String();
            var _newDerivativeIds = new String();

            _existingDerivatives = INPUT_DERIVATIVES.val() ;

            //alert("ADDDDD - existing derivs = " + _existingDerivatives ) ;
            
            for(var _i = 0; _i < options.length; _i++)
            {
                _derivativeIds = $(options[_i]).attr("href").replace("#","") ;
                if ( _existingDerivatives.indexOf(_derivativeIds) < 0 )
                {
                    //alert( "ADD - Not already in list ... " + _derivativeIds ) ;
                    // add to new derivs 
                    if ( _newDerivativeIds.length > 0 )
                    {
                        _newDerivativeIds += "," + _derivativeIds ;
                    }
                    else
                    {
                        _newDerivativeIds = _derivativeIds ;
                    }
                }
                else
                {
                    //alert( "Already in list ... " + _derivativeIds ) ;
                }
                
            }

            //alert(_derivativeIds);
            if ( INPUT_DERIVATIVES.val().length > 0 )
            {
                INPUT_DERIVATIVES.val(INPUT_DERIVATIVES.val() + "," + _newDerivativeIds);
            }
            else
            {
                INPUT_DERIVATIVES.val(_newDerivativeIds);
            }
            //alert(INPUT_DERIVATIVES.val());
            
		}
		
		
		function removeFromSearch(options)
		{
			/*
			 * HELLO JOE :: Remove options from search object
			 */

            var _derivativesNew = new String() ;
            var _removeId = new String();

            _derivativesNew = INPUT_DERIVATIVES.val() ;
            // alert( "Old list = " + _derivativesNew ) ;

            for(var _i = 0; _i < options.length; _i++)
            {
                _removeId = $(options[_i]).attr("href").replace("#","") ;
                //alert( "        remove this ..." + _removeId ) ;
                _derivativesNew = _derivativesNew.replace(_removeId, "") ;
                _derivativesNew = _derivativesNew.replace(",,", ",") ;
            }

            // Remove leading & trailing commas
            if ( _derivativesNew.substr(0,1) == "," )
            {
                _derivativesNew = _derivativesNew.substr(1) ; 
            }
            if ( _derivativesNew.length > 0 )
            {
                if ( _derivativesNew.substr(_derivativesNew.length - 1 ,1) == "," )
                {
                    _derivativesNew = _derivativesNew.substr(0, _derivativesNew.length - 1) ; 
                }
            }

            // alert( "new list = " + _derivativesNew ) ;
            INPUT_DERIVATIVES.val(_derivativesNew);
            
		}

		function addToSearchSimple(derivs)
		{
			/*
			 * HELLO JOE :: Add single derivative item to search object
			 */
            //alert("ADD SIMPLE - existing derivs = " + INPUT_DERIVATIVES.val() ) ;
            //alert("ADD SIMPLE - will add = " + derivs ) ;
            
            if ( INPUT_DERIVATIVES.val().length > 0 )
            {
                INPUT_DERIVATIVES.val(INPUT_DERIVATIVES.val() + "," + derivs);
            }
            else
            {
                INPUT_DERIVATIVES.val(derivs);
            }
            
            //alert("ADD SIMPLE - new derivs = " + INPUT_DERIVATIVES.val());

		}
		
		
		function removeFromSearchSimple(derivs)
		{
			/*
			 * HELLO JOE :: Remove single derivative item from search object
			 */

            var _derivativesNew = new String() ;

            _derivativesNew = INPUT_DERIVATIVES.val() ;            
            //alert( "REMOVE SIMPLE old list = " + _derivativesNew ) ;
            //alert( "REMOVE SIMPLE - will remove = " + derivs ) ;

            _derivativesNew = _derivativesNew.replace(derivs, "") ;
            
            _derivativesNew = _derivativesNew.replace(",,", ",") ;

            // Remove leading & trailing commas
            if ( _derivativesNew.substr(0,1) == "," )
            {
                _derivativesNew = _derivativesNew.substr(1) ; 
            }
            if ( _derivativesNew.length > 0 )
            {
                if ( _derivativesNew.substr(_derivativesNew.length - 1 ,1) == "," )
                {
                    _derivativesNew = _derivativesNew.substr(0, _derivativesNew.length - 1) ; 
                }
            }

            //alert( "REMOVE SIMPLE new list = " + _derivativesNew ) ;
            INPUT_DERIVATIVES.val(_derivativesNew);

		}
		
		
	
	/*
	 *****************************
	 *	COPY LOCATION LINK / FUNCTIONALITY
	 *****************************
	 */
		
		$(document).ready (function() 
		{
			/* 
			 * ADD 'CLICK' FUNCTIONALITY TO COPY LOCATION LINK 
			 */
				
				$("div.main-container > div.dealer-locator a.copy-location").click(
					function () 
					{
						copySearchLocationToDealerLocation();
						return false;
					}
				);	
		});
		
		function copySearchLocationToDealerLocation ()
		{
			var searchLocInput = $('div.main-container > div.search-setup div.search-location > input.search-location-input');
			var dealerLocInput = $('div.main-container > div.dealer-locator input.dealer-location-input');
			
			dealerLocInput.attr("value", searchLocInput.attr("value"));
		}
		
		
	/*
	 *****************************
	 *	SEARCH LINK / SEARCH CLICK HANDLERS
	 *****************************
	 */
		
		$(document).ready (function() 
		{
			/* 
			 * ADD 'CLICK' FUNCTIONALITY TO SEARCH LINK 
			 */
				
				$("div.main-container > div.search-setup > form > fieldset > div.search-location  > div.search-link").click(
					function () 
					{
						submitSearch();
						return false;
					}
				);
			
			/* 
			 * ADD 'CLICK' FUNCTIONALITY TO FIND DEALER LINK 
			 */
				//setupAndStyleSubmitLinks();
				
				$("div.main-container > div.dealer-locator > div.find-dealers-link").click(
					function () 
					{
						findDealers();
						return false;
					}
				);	
		});
		
		
		
		function setupAndStyleSubmitLinks()
		{
				/*
				if ($.browser.msie)
				{
					var submitSearchLink	= $("div.main-container > div.search-setup div.search-location > div.search-link > a.search");
					var findDealersLink		= $("div.main-container > div.dealer-locator div.find-dealers-link > a.find-dealers");
					
					submitSearchLink.attr("href", "javascript:submitSearch()");
					findDealersLink.attr("href", "javascript:findDealers()");
				}
				*/
				
				// STYLE LINKS
				/*
				sIFR.replace(sIFR_settings.STYLE_ROMAN_2, 
				{
					selector: "div.main-container > div.search-setup div.search-location > div.search-link, div.main-container > div.dealer-locator div.find-dealers-link"
				});
			    */
				
		}
		
		
		
		
		
		
		function submitSearch ()
		{
			/*
			 * HELLO JOE :: Go go go...we're ready to rock and roll....get me some results...and don't take no for an answer
			 */
			 $("form#frm_nationalSearch").submit();
		}
		
		function findDealers ()
		{
			/*
			 * HELLO JOE :: Go go go....get me some dealers
			 *
			 * Will need to rig up dealer item links
			 */
			 alert("> findDealers < \n\n......but only if you're really sure...)");
			 
			 $('div.main-container > div.dealer-locator > div.dealer-results').addClass("dealer-results-active");
		}
		
		function submitDealerStockSearch (dealer_id)
		{
			/*
			 * HELLO JOE :: Go go go....get me some results at a specific dealer
			 */
		}