/*	SONY | SONY STYLE.COM - [MODAL OF FUNCTIONALITY NAME]
 *	Author(s): 	Branden Thompson	| Front End Architect , Branden.Thompson at am dot sony dot com
 *				Jonathan Cheung 	| Sr. Flash Developer , Jonathan.Cheung at am dot sony dot com
 *
 *	Date:		[DATE HERE]
 *
 *	JS FILE PRE-CONDITIONS:
 *	-------------------------------------------------------------------------------------------------
 *
 *		- Prototype must be included before this .js (or included functions) is referenced.
 *
 *
 *
 *	FUNCTIONALITY THAT THIS JS WILL PROVIDE
 *	-------------------------------------------------------------------------------------------------
 *
 *	[DESCRIPTION HERE]
*/

Event.observe(window, 'load', function(){




	$$('#price_slider').each(function(evt)
	{
		/*
		* Price slider functionality
		*
		*
		*
		*/
		var price_slider = $('price_slider');
		var bar_slider = $('price_slider_bar');
		/*
		* Price slider blue bar is set below.
		* Updates the wise and the values of the 2 handles onslide
		*/
		var barSlide = new Control.Slider($('price_slider_bar'), price_slider,{
			range: $R(endecaPriceObject.minValue, endecaPriceObject.maxValue),
			onSlide: function(values, sliderClass){
				price_slider_object.setValue(price_slider_object.values[1]-price_slider_object.values[0]+values, 1);
				price_slider_object.setValue(values, 0);
			}
		})
		/*
		* Price slider object stores the 2 handles.
		* Ajax call should be added in the onchange function
		*/
		var price_slider_object = new SonyStylePriceSlider(price_slider.select('.handle'), price_slider, {
			sliderValue: [endecaPriceObject.startLowValue, endecaPriceObject.startHighValue],
			range: $R(endecaPriceObject.minValue,endecaPriceObject.maxValue),
			restricted:true,
			values: endecaPriceObject.possibleValues,
			onSlide: function(values, sliderClass) {
				$('endecaMinPrice').update("$"+Math.round(values[0]));
                        	$('endecaMaxPrice').update("$"+Math.round(values[1]));
                        	$('sumInfo').update(sumPriceCounts(Math.round(values[0]), Math.round(values[1])));

				sliderClass.updateBarPosition();
			},
			onChange: function(values,sliderClass) {
				if (sliderClass.timerVar!= null) sliderClass.timerVar.stop();
			    sliderClass.timerVar = new PeriodicalExecuter(function(pe) {
					// This is the AJAX function taht is called
				 	refineByPriceRange(Math.round(values[0]),Math.round(values[1]));
				    pe.stop();
				}.bind(this), sliderClass.timeOutInterval);
				$('endecaMinPrice').update("$"+Math.round(values[0]));
				$('endecaMaxPrice').update("$"+Math.round(values[1]));
				$('sumInfo').update(sumPriceCounts(Math.round(values[0]), Math.round(values[1])));
			    sliderClass.updateBarPosition();
			}
		});
		/*
		* End Slider functions
		*
		*/
	});

	// initiate pricing
	if (isUserInEpp())
	{
		initSearchPricingAjax();

		var counter = 0;
		var priceArray = new Array();
		$$('.priceFinanceArea').each(function(element){

				var elementId = element.id;
				elementId = elementId.replace('priceFinanceArea_','');
				elementId = elementId.replace('invisiblePriceFinanceArea_','');				

				priceArray.push("catEntryId_" + counter + "=" + elementId);

				++counter;
		});
		/*$$('.subProductPrice').each(function(element){

				var elementId = element.id;
				elementId = elementId.replace('SKU_','');
				elementId = elementId.replace('PriceAndFinancingOptions','');

				priceArray.push("catEntryId_" + counter + "=" + elementId);

				++counter;
		});*/
		if (counter > 0)
		{
			var productIdsForPrice = priceArray.join("&");
			ajaxEngine.sendRequest('SYGetContractUnitPrices', {method:'post', parameters: productIdsForPrice + "&" + baseUrlParameters});
		}
	}


	/*
	* Initialize the custom select boxes
	*/
	$$('.jcCustomSelect').each(function(e){
		new jcCustomSelect(e.readAttribute('id'), null)
	});



	$$('.subDimensionList').invoke('hide');
	$$('.quickViewLayer').invoke('hide');




	$$('a.dimensionViewLink').invoke('observe', 'click', function(evt){

		if($(this).hasClassName('activeDimension'))
		{
			$(this).removeClassName('activeDimension');
			$($(this).readAttribute('data-relatedSubList')).hide();
		}
		else{
			$(this).addClassName('activeDimension');
			$($(this).readAttribute('data-relatedSubList')).show();
		}

	})// end dimension view link event listener

	$$('.searchResultProductImage').invoke('observe', 'mouseover', function(evt){

		$($(this).readAttribute('data-relatedQuickView')).show();

	});// end Quick View mouseover Listener


	/*	QUICK VIEW MOUSEOUT:
	 *	-----------------------------------------------------------------
	 *	When the user mouses out of the active quick view box, we're just
	 *	going to re-hide that div layer with the PNG & Link.
	*/
	$$('.quickViewLayer').invoke('observe', 'mouseout', function(evt){

		$(this).hide();

	});// end Quick view Hide Listener


	/*	COMPARE BOX EVENT LISTENER:
	 *	-----------------------------------------------------------------
	 *	This event listner is for the "compare" box in the search result
	 *	listing items.  What's this is going to do is:
	 *
	 *	- Check to see if the checkbox is checked or not:
	 *	- Depending on that, will change the verbiage to COMPARE <-> COMPARE NOW
	 *
	*/
	$$('.compareResultItemBox').invoke('observe', 'click', function(evt){


		/*
			NOTE: ourLink will need to be populated dynamically via an
			AJAX request;
		*/

		// We also need to check if other boxes have been checked, if not, we
		// need to have the link change to the lightbox popup:

		var numOfBoxesChecked = 0;
		var ourLink = 'javascript:compareProducts();';
		var dynamicCompareId = 'imAUniqueIdProvidedByIssa';
		var ourSiblings = $(this).siblings();


		if($(this).checked == true)
		{
			$$('.compareResultItemBox').each(function(evt){

				if(evt.checked == true)
				{
					numOfBoxesChecked++;
					//alert("yummy!");
				}
			});

			//alert(numOfBoxesChecked);

			if(numOfBoxesChecked > 1)
			{

				ourSiblings[0].innerHTML = '<a href="'+ ourLink +'" id="'+ dynamicCompareId +'" rel="">COMPARE NOW</a>';
			}
			else
			{

				ourSiblings[0].innerHTML = '<a id="'+ dynamicCompareId +'" class="lightwindow" params="lightwindow_height=150px;"href="#noProductToComparePopUp" >COMPARE NOW</a>';
				myLightWindow.createWindow(dynamicCompareId);

			}
			/*	THIS IS WHERE YOU WOULD WANT TO PLACE ANY CODE/LOGIC
			 *	THAT IS USED TO HIDE OTHER CHECKBOXES DEPENDING ON
			 *	WHETHER OR NOT THEY ARE IN THE SAME 'PRODUCT LINE'
			*/

			var sku = $(this).readAttribute('data-sku');
			var name = $(this).readAttribute('data-name');
			var damcategory=$(this).readAttribute('data-damcategory');
			if(sku)
				{
				addCheckBox(sku,sku,damcategory);
				toggleAllComparisonCheckboxes(damcategory);
				}


		}
		else
		{
			var sku = $(this).readAttribute('data-sku');
			var damcategory=$(this).readAttribute('data-damcategory');
			addCheckBox(sku,sku,damcategory);//The same method would remove it as check box is unchecked
			ourSiblings[0].innerHTML = "COMPARE";
		}

	});

	/*	COMPARE SELECTED BUTTON EVENT LISTENER:
	 *	-----------------------------------------------------------------
	 *	This event listner is for the "compare" box in the search result
	 *	listing items.  What's this is going to do is:
	 *
	 *	- Check to see if atleast two checkboxes are selected otherwise show message to user
	 *
	 *
	*/
	if($('sortingBarCompareSelectedButton')){
		Event.observe($('sortingBarCompareSelectedButton'), 'click', function(evt){
			var counter=0;
			$$('input.compareResultItemBox').each(
			function(e){
				if(e.checked) counter++;
			});
			if(counter<2)
			{
			myLightWindow.createWindow('sortingBarCompareSelectedHRef');
			}
			else
			{
				compareProducts();
			}

		});
	}

	/**
	 * Observe events for next and previous page arrows
	 *
	*/
	
	if($('previousPageArrow')){
		Event.observe($('previousPageArrow'), 'click', function(evt){
		if($('pageNumber-jcCustom'))
		{
        refineByPageNumber(($('pageNumber-jcCustom').value*1)-1);
        }

		});
	}	
	
	if($('nextPageArrow')){
		Event.observe($('nextPageArrow'), 'click', function(evt){
		if($('pageNumber-jcCustom'))
		{
        refineByPageNumber(($('pageNumber-jcCustom').value*1)+1);
        }	
		});
	}	
	

	/**
	 * Observe events for "Product" and "Accessories" checkbox
	 *
	*/

	$$('.sortCheckBox').invoke('observe', 'click', function(evt){

		var ourCounter = 0;
		$$('.sortCheckBox').each(function(evt){

			if(evt.checked != false)
			{
				ourCounter++;
			}
		});

		if(ourCounter == 0)
		{   
			myLightWindow.activateWindow({

				/*
					NOTE - PLEASE READ ME!
				*/

				href: window.location.href +'#noCheckBoxesSelectedPopup',

				iframeEmbed: false
				});
			Event.stop(evt);
		}
		else
		{
			//BRT 7.6.09 - Moved this function to only occur IF a box is selected.
			refineByProductFilterCheckbox($(this));
		}


	});

	/*	Check how many check box are visible. Show them only if there is more than one visible checkbox.
	 *  Also hide compare selected button.
	 *	-----------------------------------------------------------------
	 *
	*/
			var counter=0;
			$$('input.compareResultItemBox').each(
		function(e){
			if(!$(e.parentNode).hasClassName('invisibleElement')) counter++;
		});

			if(counter<2)
			{
				$$('input.compareResultItemBox').each(
			function(e){
				if(!$(e.parentNode).hasClassName('invisibleElement')) $(e.parentNode).addClassName('invisibleElement');
			});
				if($('sortingBarCompareSelectedButton')){
					$('sortingBarCompareSelectedButton').addClassName('invisibleElement');
				}
			}





	/*	ACTIVE TAB (SUB NAV) Event Listener
	 *	This will turn the "tab" on and off when a user clicks another tab
	*/
	$$('.resultSubNavTab').invoke('observe', 'click', function(evt){

		$$($(this).siblings()).invoke('removeClassName', 'activeTab');
		$(this).addClassName('activeTab');
	});


	$$('a.defaultDimension').each(function(evt){

		evt.addClassName('activeDimension');

		//alert($(evt).readAttribute('data-relatedSubList'));
		$($(evt).readAttribute('data-relatedSubList')).show();

	});

	$$("ul.jcCustomSelectList li").each(function(element){
        	if(element.parentNode && element.parentNode.id && element.childNodes[0]){
				if(element.parentNode.id == 'sortBySelectList-jcCustomSelectList'){
                	Event.observe(element.childNodes[0], 'click', function(evt){
                		var value=element.readAttribute('value');
                		if(value==0) value=''; 
                  		refineBySort(value);
                	});
                }
				else if(element.parentNode.id == 'pageNumber-jcCustomSelectList'){
                	Event.observe(element.childNodes[0], 'click', function(evt){
                  		refineByPageNumber(element.readAttribute('value'));
                	});
                }
				else if(element.parentNode.id == 'resultsPerPageList-jcCustomSelectList'){
                	Event.observe(element.childNodes[0], 'click', function(evt){
                  		refineByPerPage(element.readAttribute('value'));
                	});
                }
          	}
      	});
});// end Window Load Event Listener

/*
	Setup markup for Price section. May be different for each page.
*/
function displaySearchPriceSection(productId, priceObject)
{
	var origPrice = priceObject.orgPrice;
	var price = priceObject.price;
	var finance = priceObject.finance;

	var newHtml = '';

	var element = $('priceFinanceArea_' + productId);
	if (element)
	{
		//newHtml += ('<div class="priceFinanceArea">');
		/*if (origPrice)
		{
			var dollarIdx = origPrice.indexOf("$");
			var decimalIdx = origPrice.indexOf(".");

			newHtml += '<span class="strikeOut">';
			newHtml += '<span class="productCurrency">$</span>';
			newHtml += '<span class="currencyUnits">';
			newHtml += origPrice.substring(dollarIdx+1,decimalIdx);
			newHtml += '</span>';
			newHtml += '<span class="currencySubUnits">';
			newHtml += origPrice.substr(decimalIdx);
			newHtml += '</span>';
			newHtml += '</span>';
		}*/

		if (price)
		{
			var dollarIdx = price.indexOf("$");
			var decimalIdx = price.indexOf(".");

			newHtml += '<p id=\"price_';
			newHtml += productId;			
			newHtml += '\" class=\"searchResultPrice\">';
			newHtml += price;
			newHtml += '</p>';
		}
		if (finance)
		{
		
			newHtml += '<p id=\"finance_'+productId+'\" class="searchResultFinancing">';
			newHtml += finance;
			newHtml += '</p>';
			/*
			var dollarIdx = finance.indexOf("$");
			var slashIdx = finance.indexOf("/");

			newHtml += '<p class="productFinancing">As low as ';
			newHtml += '<span class="monthlyRate">';
			newHtml += finance.substring(dollarIdx,slashIdx);
			newHtml += '</span>/month**</p>';
			*/
		}
		element.innerHTML = newHtml;
	}
}
