var hash;

var CAT = "cat";
var SIZE= "size";
var COLOR = "color";
var BRAND= "brand";
var CAT_BRAND= "catBrand";
 
/**
 * The event from sidebar, sortOption, footer page will send an ajax call to load the browseProduct.jsp.
 * 
 * This function is used to render the side bar, sortOption, and footer page. 
 * Mainly for back/refresh button support.
 * Should be called on the pages where ajax enabled facets and navigation is used
 */
var sortmap = new Array();
sortmap['sortPrioritydescending'] = 'default';
sortmap['childSKUs.priceascending'] = 'Price increasing';
sortmap['childSKUs.pricedescending'] = 'Price decreasing';
sortmap['displayNameascending'] = 'Brand A-Z';
sortmap['displayNamedescending'] = 'Brand Z-A';

function getVerticalScrollPos() {
	var yscroll = document.body.scrollTop;			 

	if (yscroll == 0)
	{
	    if (window.pageYOffset)
	        yscroll = window.pageYOffset;
	    else
	        yscroll = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
	}
	
	return yscroll;
}

function ajaxNavigationStateReload (hash, refineActive) {
	
	if (isFragmentIdentifierSet(hash)) {
		var savedDirectives = hash;
		var sDocSort = extractParam(savedDirectives, 'sort');
		var sDocSortProp = extractParam(savedDirectives, 'sortProp');
		var sDocSortOrder = extractParam(savedDirectives, 'sortOrder');
		var sPageNum = extractParam(savedDirectives, 'goToPage');
		var sPageSize = extractParam(savedDirectives, 'pageSize');
		var sDirFacetTrail = extractParam(savedDirectives, 'addFacet');
		//inSearchPage is used only by search.jsp However, search.jsp is replaced by SLI
		//var sDirInSearchPage = extractParam(savedDirectives, 'inSearchPage');
		var action = extractParam(savedDirectives, 'nsraction');
		var pagesAvailable = $("#browseBrand").attr("pagesAvailable");
		
		// If refine results are minimal (ie. 1 row or less), automatically
		// scroll window to top
		
		var numProducts = $("#browseBrand > li > div").length;
		
		/*
		if (numProducts <= 4)
		{
			//var yscroll = (document.all ? document.scrollTop : window.pageYOffset);			
			var yscroll = document.body.scrollTop;			 

			if (yscroll == 0)
			{
			    if (window.pageYOffset)
			        yscroll = window.pageYOffset;
			    else
			        yscroll = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
			}
			
			var scrollUp = setTimeout("window.scrollTo(0,0)", 500);
			var scrollBack = setTimeout("window.scrollTo(0, " + yscroll + ")", 4000);
		}
		*/
		
		
		if (numProducts <= 4)
		{
			//var yscroll = (document.all ? document.scrollTop : window.pageYOffset);
			var yscroll = getVerticalScrollPos();
			var speed = Math.round(yscroll / 100);
			var step = Math.round(yscroll / 25);
			var leapY = 0 > yscroll ? yscroll + step : yscroll - step;
			
			if (yscroll < 100) {			
				var scrollUp = setTimeout("window.scrollTo(0,0)", 500);
				var scrollBack = setTimeout("window.scrollTo(0, " + yscroll + ")", 4000);
			}
			
			if (speed >= 100000)
				speed = 100000;
			
			for ( var i=yscroll; i>0; i-=step ) {
			    setTimeout("window.scrollTo(0, "+leapY+")", timer * speed);
			    leapY -= step; if (leapY < 0) leapY = 0; timer++;
			}
			
			for ( var i=0; i<yscroll; i+=step ) {
			    setTimeout("window.scrollTo(0, "+leapY+")", timer * speed);
			    leapY += step; if (leapY > yscroll) leapY = yscroll; timer++;
			}				
		}
		
			
		// update sort option and footer page with the current value from the window.location.hash
		renderSortOptionFooterPage(sDocSort, sDocSortProp, sDocSortOrder, sPageNum, sPageSize, pagesAvailable)
		
		// Facet Trail must filter and select refinements with the current value from the window.location.hash.
		filterFacet(sDirFacetTrail);
		
		refineResults(refineActive);
	}
}

refineResults = function(refineActive) {	
	if(refineActive == CAT){
		categoryFilter();
	} else if (refineActive==SIZE){
		sizeFilter();
	} else if (refineActive==COLOR){
		colorFilter();
	} else if (refineActive==BRAND){
		brandFilter();
	} else if (refineActive==CAT_BRAND){
		catBrandFilter();
	}else {
		filter();
	}
}


categoryFilter = function() {
	if(!$.categorySelected()) {
		$.disableRefineCategoryOption();
	}
	$.disableRefineBrandOption();
	$.disableRefineSizeOption();
	$.disableRefineColorOption();
}

sizeFilter = function() {
	$.disableRefineCategoryOption();
 	$.disableRefineBrandOption();
	if(!$.sizeSelected()) {
		$.disableRefineSizeOption();
	}
	$.disableRefineColorOption();
}
brandFilter = function() {
	$.disableRefineCategoryOption();
	if(!$.brandSelected()) {
		$.disableRefineBrandOption();
	}
	$.disableRefineSizeOption();
	$.disableRefineColorOption();
}

colorFilter = function() {	
	$.disableRefineCategoryOption();
 	$.disableRefineBrandOption();
	$.disableRefineSizeOption();
	
	if(!$.colorSelected()) {
		$.disableRefineColorOption();
	}
}

catBrandFilter = function() {
	$(".catFacetCheckBox").removeClass("disabledChecbox");
	$(".secondLevelPrettyCheckbox").attr("style","text-decoration:none;color:#666666");
 	$.disableRefineBrandOption();
	$.disableRefineSizeOption();
	$.disableRefineColorOption();
}


filter = function() {
	$.disableRefineCategoryOption();
 	$.disableRefineBrandOption();
	$.disableRefineSizeOption();
	$.disableRefineColorOption();
}

$.brandSelected = function () {
	if($(".brandFacetCheckbox:checked").length > 0){
		return true;
	}
	return false;
}

$.categorySelected = function () {
	if($(".catFacetCheckBox:checked").length > 0){
		return true;
	}
	return false;
}
$.sizeSelected = function () {
	if($(".sizeFacetCheckbox:checked").length > 0){
		return true;
	}
	return false;
}
$.colorSelected = function () {
	if($(".colorFacetCheckbox:checked").length > 0){
		return true;
	}
	return false;
}

$.disableRefineBrandOption = function () {
	$(".brandPrettyCheckbox").attr("style","text-decoration:none;color:#666666");
	$(".brandFacetCheckbox").removeClass("disabledChecbox");
	var fields = $("#searchBrandFacetValues").find("span").map(function() { return $(this).text(); }).get();
	
	$(".brandFacetCheckbox").each(function(){
		if (jQuery.inArray($(this).val(),fields) == -1){
			$(".prettyCheckbox[for='"+$(this).attr("id")+"']").attr("style","text-decoration:line-through;color:#CCCCCC");
			$(this).addClass("disabledChecbox");
		}
	});
}

$.disableRefineCategoryOption = function () {
	if($("input#brandPage").val() == "true"){
 		
		$(".secondLevelPrettyCheckbox").attr("style","text-decoration:none;color:#666666");
		$(".thirdLevelPrettyCheckbox").attr("style","text-decoration:none;color:#666666");
		$(".secondLevelRefineCat").attr("style","text-decoration:none;color:#666666");
		$(".firstLevelRefineCat").attr("style","text-decoration:none;color:#666666");
	
	}else{
		$(".catPrettyCheckbox").attr("style","text-decoration:none;color:#666666");
		$(".secondLevelRefineCat").attr("style","text-decoration:none;color:#666666");
		$(".firstLevelRefineCat").attr("style","text-decoration:none;color:#666666");
	}
	$(".catFacetCheckBox").removeClass("disabledChecbox");
	
}
$.disableRefineSizeOption = function () {
	$(".sizePrettyCheckbox").attr("style","text-decoration:none;color:#666666");
	$(".sizeFacetCheckbox").removeClass("disabledChecbox");
	var fields = $("#searchSizeFacetValues").find("span").map(function() { return $(this).text(); }).get();
	
	$(".sizeFacetCheckbox").each(function(){
		if (jQuery.inArray($(this).val(),fields) == -1){
			$(".prettyCheckbox[for='"+$(this).attr("id")+"']").attr("style","text-decoration:line-through;color:#CCCCCC");
			$(this).addClass("disabledChecbox");
		}
	});
}
$.disableRefineColorOption = function () {
	$(".colorPrettyCheckbox").attr("style","text-decoration:none;color:#666666");
	$(".colorFacetCheckbox").removeClass("disabledChecbox");
	var fields = $("#searchColorFacetValues").find("span").map(function() { return $(this).text(); }).get();
	
	$(".colorFacetCheckbox").each(function(){
		if (jQuery.inArray($(this).val(),fields) == -1){
			$(".prettyCheckbox[for='"+$(this).attr("id")+"']").attr("style","text-decoration:line-through;color:#CCCCCC");
			$(this).addClass("disabledChecbox");
		}
	});
}
 
$.renderFacetSideBar = function (){
	
	// hide the unused brand fils
	//$("li.brandAddFacet").hide();
	$("#searchBrandFacetValues").children("span.value").each(function(){
		$("li.brandAddFacet a[value='" + $(this).text() + "']").parent().show();
	});
	
	// hide the unused category filters and subcategories section
	$("a.categoryAddFacet").parent("li").hide();
	$("div.categories a").hide();
	$("#searchCategoryFacetValues").children("span.value").each(function(){
		$("a.categoryAddFacet[value='" + $(this).text() + "']").parent("li").show();
	});
	
	// hide the unused size filters
	//$("li.sizeAddFacet").hide();
	if($("#searchSizeFacetValues").children("span.value").length == 0){
		$("div.sizeSideBar").hide();
	}
	else{
		$("#searchSizeFacetValues").children("span.value").each(function(){
			$("li.sizeAddFacet a[value='" + $(this).text() + "']").parent().show();
		});
		$("div.sizeSideBar").show();
	}
	
}

 function renderSortOptionFooterPage(sDocSort, sDocSortProp, sDocSortOrder, sPageNum, sPageSize, pagesAvailable){
	// render sort option adn footer page
		$(".sortBy option[sort='"+sDocSort+"'][sortProp='"+sDocSortProp+"'][sortOrder='"+sDocSortOrder+"']").attr("selected", "selected");		
		 $("span#selectItemsPerPage").text(sPageSize);
		 $("span#selectfooterItemsPerPage").text(sPageSize);
		$(".pageSize").each(function(){
			 $(this).val(sPageSize);
		});		
		
		$('.pageNum').each(function(){
			$(this).children().remove();
			for(var i=1;i <= pagesAvailable; i++){
				$(this).append(new Option(i,i));				
			}
		});
		
		$(".totalPages").text(pagesAvailable);
		$(".pageSize option[selected='selected']").val(sPageSize);
		changeSelectedPage(sPageNum);
		var selectedVal = sortmap[sDocSortProp+sDocSortOrder];
		
		$("span#selectType").text(selectedVal);
		$("span#selectfooterType").text(selectedVal);
		
		if(sPageNum < pagesAvailable){
			 if(sPageNum > 1){
				 $("div.previous").removeClass("hidden");
				 $("div.next").removeClass("hidden");
			 }
			 else{
				 $("div.previous").addClass("hidden");
				 $("div.next").removeClass("hidden");
			 }
		 }  else if(sPageNum == pagesAvailable){
			 if(pagesAvailable == 1){
				 $("div.previous").addClass("hidden");
				 $("div.next").addClass("hidden");
			 }
			 else{
				 $("div.next").addClass("hidden");
				 $("div.previous").removeClass("hidden");
			 }
		 }
		
 }
 
 
 function filterFacet(sDirFacetTrail){
	 var refinementValues = sDirFacetTrail.split(':');
		var lastCategoryFacetSetted = false;
		$(".sizeAddFacet.selectedFilter").removeClass("selectedFilter");
		$(".categoryAddFacet.selectedFilter").removeClass("selectedFilter");
		$(".brandAddFacet.selectedFilter").removeClass("selectedFilter");
		for(var i=1; i<refinementValues.length; i+=2){			
			if($("li a.categoryAddFacet[value='" + escape(refinementValues[i]) + "']").length > 0){
				lastCategoryFacetSetted = escape(refinementValues[i]);
			}
 
			//clear the previous one
			
			$("li.brandAddFacet a[value='" + escape(refinementValues[i]) + "']").parent().addClass("selectedFilter");
			$("li.sizeAddFacet a[value='" + escape(refinementValues[i]) + "']").parent().addClass("selectedFilter");
			
			$("li.addFacet a[value='" + escape(refinementValues[i]) + "']").each(function(){
				$(this).parent("li").addClass("selectedFilter");
			});
		}
		
		// Make the last category from trail the selected category.
		$("li a.categoryAddFacet[value='" + lastCategoryFacetSetted + "']").addClass("selectedFilter");
		
		if($(".categoryAddFacet.selectedFilter").length > 0 || $(".brandAddFacet.selectedFilter").length > 0 || 
				   $(".sizeAddFacet.selectedFilter").length > 0 || $(".addFacet.selectedFilter").length > 0){
			$("div.clearFilters").removeClass("hidden");
		}		

		if($(".categoryAddFacet.selectedFilter").length == 0){
			$(".addFacetFirstLevel.categoryAddFacet").parents("ul").find("div").slideUp('slow');
		}
		// Open the selected category sub categories div.
		//$(".categoryAddFacet.selectedFilter").parents("ul").find("div").slideUp('slow');
		//$(".categoryAddFacet.selectedFilter").parents("div#sideBar ul > li").find("div:first").slideDown('slow');

 }
  
 
function isFragmentIdentifierSet() {
	var savedDirectives = parent.location.hash;
	return (savedDirectives != '' && savedDirectives.indexOf('nsraction') > -1);
}
  
   
 function isFragmentIdentifierSet(hash) {
 	return (hash != '' && hash.indexOf('nsraction') > -1);
 }
  
 
function extractParam(str, paramName) {
	var tempStartPos = str.indexOf(paramName);
	if (tempStartPos > -1) {
		tempStartPos = tempStartPos + paramName.length + 1; // 1 for = sign
		var tempEndPos = str.indexOf('&', tempStartPos);
		tempEndPos = (tempEndPos > -1) ? tempEndPos : str.length;
		return str.substring(tempStartPos, tempEndPos);
	} else {
		return '';
	}
}
 
$.convertQueryToMap = function (searchParameter){
	 var entries = searchParameter.split("&");
	 var map = {};
	
	 for (var i=0; i< entries.length; i++){
		 var parts = entries[i].split('=');
		 map[parts[0]] = parts[1];
	 }
	 
	 return map;
 }


$.convertMapToQuery = function (map){
	var hash = (map['categoryId'] != undefined? "categoryId=" +  map['categoryId']:'') +
	(map['addFacet'] != undefined && map['addFacet'] != ''? "&addFacet=" +  map['addFacet']:'') +
	(map['goToPage'] != undefined? "&goToPage=" +  map['goToPage']:'') +
	(map['pageSize'] != undefined? "&pageSize=" +  map['pageSize']:'') +
	(map['sort'] != undefined? "&sort=" +  map['sort']:'') +
	(map['sortProp'] != undefined? "&sortProp=" +  map['sortProp']:'') +
	(map['sortOrder'] != undefined? "&sortOrder=" +  map['sortOrder']:'') +
	(map['secondSortOrder'] != undefined? "&secondSortOrder=" +  map['secondSortOrder']:'') +
	(map['nsraction'] != undefined? "&nsraction=" +  map['nsraction']:'');
	if(hash.indexOf("&") == 0){
		hash=hash.substring(1, hash.length);
	}
	
	return hash;
}

function changeSelectedPage(pageNum){
	if(pageNum) {
		 $("#selectpagesType").text(pageNum);
		 $("#selectfooterPagesType").text(pageNum);
		 $(".pageNum").each(function(){
			$(this).children("[selected='selected']").removeAttr('selected'); 
			$(this).children(':eq(' + (pageNum-1) + ')').attr('selected','selected');
		 });
	}
}

