//******************************************************
//***** COPYRIGHT 2007-2011, PRACTICAL DATA, INC. ******
//***** - UNAUTHORIZED USE IS PROHIBITED ***************
//******************************************************

//***************************************************************************
//********************* INITIALIZE PAGING VARIABLES *************************
//***************************************************************************
var pd_itemsPerPage = "";
var pd_pagesToDisplay = "";
var pd_itemsPerRow = "";
var pd_itemsCount = 0;
var pd_sortBy = "";
var pd_gridViewTableWidth = 600;
var pd_gridViewTableSpacer = 6;
var pd_yahooStoreId = "";
var pd_debugFlag = false;
var pd_noItemsFoundMessage = "";
var pd_regPriceText = "";
var pd_salePriceText = "";
var pd_myAccountPricingText = "";
var pd_sortByDefault = "default";
var pd_sortByDefaultUseOrderCount = true; // Set to "true" to use new PD Core "pd-order-count" variable field to order contents

var pd_showGridViewAddToCart = false;

var pd_lastSection = "";
var pd_currentSection = "";
var pd_currentPageNumber = 1;
var pd_viewAll = false;


var pd_refreshId = "";
var pd_searchFirstRun = true;
var pd_sortMethod = "name"
var pd_filterSearchDelay = 650;
var pd_pagingDisplayMode = "";
var pd_pagingDisplayModeDefault = "list";

var pd_searchText = "";
var pd_brandSelected = "";
var pd_sizeSelected = "";
var pd_colorSelected = "";
var pd_materialSelected = "";
var pd_categorySelected = "";
var pd_priceRange = "";

//**** PEG START
var pd_finishSelected = "";
var pd_wattageSelected = "";
var pd_voltageSelected = "";
var pd_lightSourceSelected = "";
var pd_powerSelected = "";
var pd_colorTemperatureSelected = "";
var pd_beamSpreadSelected = "";
var pd_dimmableSelected = "";
var pd_linkableSelected = "";
//**** PEG FINISH

var pd_filterBy = "";
var pd_filterByStoneButton = "";
var pd_filterByNonStoneButton = "";
var pd_searchTextFirstLoad = "Filter Items By Keyword(s):";
var pd_myAccountPricingNoDiscountForSaleItems = "";
//***** SHOW ABSTRACT BELOW NAME LINK
var pd_showAbstractText = true;

var pd_sortTemp = "";

var pd_displayList = new Array();
var pd_filteredDisplayList = new Array();

//*************************
//*** INITIALIZE PAGING ***
//*************************
function pdPagingInitialize() {
debug("pdPagingInitialize()");

//alert("pdPagingInitialize");

	if(isBlank(pd_regPriceText)) pd_regPriceText = "Regular Price:";
	if(isBlank(pd_salePriceText)) pd_salePriceText = "Sale Price:";
	if(isBlank(pd_myAccountPricingText)) pd_myAccountPricingText = "Your Price:";
	
	if(isBlank(pd_showGridViewAddToCart)) pd_showGridViewAddToCart = false;

	if(isBlank(pd_itemsPerPage)) pd_itemsPerPage = 25;
	if(isBlank(pd_pagesToDisplay)) pd_pagesToDisplay = 8;
	if(isBlank(pd_itemsPerRow)) pd_itemsPerRow = 1;
	if(isBlank(pd_sortBy)) pd_sortBy = getCurrentSortBy();
	if(isBlank(pd_sortByDefault)) pd_sortBy = "default";
	if(isBlank(pd_gridViewTableWidth)) pd_gridViewTableWidth = "100%";
	if(isBlank(pd_yahooStoreId)) pd_yahooStoreId = "";
	if(isBlank(pd_debugFlag)) pd_debugFlag = false;
	if(isBlank(pd_noItemsFoundMessage)) pd_noItemsFoundMessage = "No Items Found.";
	if(isBlank(pd_pagingDisplayMode)) pd_pagingDisplayMode = getPagingDisplayMode();
	else setPagingDisplayMode(pd_pagingDisplayMode);
	if(isBlank(pd_filterByStoneButton)) pd_filterByStoneButton = false;
	if(isBlank(pd_filterByNonStoneButton)) pd_filterByNonStoneButton = false;
	if(isBlank(pd_myAccountPricingEnabled)) pd_myAccountPricingEnabled = false;
	if(isBlank(pd_myAccountPricingNoDiscountForSaleItems)) pd_myAccountPricingNoDiscountForSaleItems = false;

	pd_displayList = parseDisplayList2();
	pd_itemsCount = pd_displayList.length;
	
	performSort();
	pdRenderControlPanelFilters();
pdAddControlPanelFilters();
	renderControlPanelSortLinks();
	renderControlPanelFilterButtons();
	performFilter("", true);
	return true;
}

//***************************************************************************
//********* FILTER BY KEYWORD/ SEARCH WHILE TYPING FUNCTIONS ****************
//***************************************************************************
function filterProductArrayBySearchTerm(searchText) {
debug("filterProductArrayBySearchTerm(" + searchText + ")");
	pd_filteredDisplayList = getFilteredDisplayList(searchText);
	pd_currentPageNumber = 1;
	var success = displayProductArray();
	return false;
}

function getFilteredDisplayList(searchTermString) {
debug("getFilteredDisplayList");
	var productArray = pd_filteredDisplayList;
	searchTermString = String(searchTermString).toLowerCase();
	searchTermString = String(searchTermString).replace(/,/g, " ");
	var searchTermList = String(searchTermString).split(" ");
	var filteredHash = new Array();
	var item = new Object();
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			var found = true;
			for(item2 in searchTermList) {
				if(searchTermList.hasOwnProperty(item2)) {
					if(!isBlank(searchTermList[item2])) {
						if(productArray[item].searchIndex.indexOf(searchTermList[item2]) == -1) found = false;
					}
				}
			}
			if(found == true) {
				filteredHash[productArray[item].id] = productArray[item];
			}
		}
	}
	var filteredList = convertHashToArray(filteredHash);
	return filteredList;
}



function performFilter(pdActiveFilter, noResetPageNumber) {
debug("performFilter()");

//alert("performFilter:" + pdActiveFilter);

	//*****************************************************************
	//*** LOAD FILTERED DISPLAY LIST WITH COPY OF FULL PRODUCT LIST ***
	//*****************************************************************
	pd_filteredDisplayList = pd_displayList;
	
	//*************************
	//*** RESET PAGE NUMBER ***
	//*************************
	if(noResetPageNumber == true) {
	//**** DO NOTHING
	}else{
		resetPageNumber();
	}
	
	//************************************
	//*** LOAD FILTERS VALUES FROM GUI ***
	//************************************
	loadFilters(pdActiveFilter);
		
	//***********************
	//*** PERFORM FILTERS ***
	//***********************
	if(!isBlank(pd_brandSelected)) pd_filteredDisplayList = getFilteredDisplayListByFullStringMatch("brand", pd_brandSelected);
	debug("pd_filteredDisplayList.length=" + pd_filteredDisplayList.length);
	if(!isBlank(pd_materialSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("material", pd_materialSelected);
	debug("pd_filteredDisplayList.length=" + pd_filteredDisplayList.length);
	if(!isBlank(pd_sizeSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("size", pd_sizeSelected);
	debug("pd_filteredDisplayList.length=" + pd_filteredDisplayList.length);
	if(!isBlank(pd_colorSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("color", pd_colorSelected);
	debug("pd_filteredDisplayList.length=" + pd_filteredDisplayList.length);
	if(!isBlank(pd_categorySelected)) pd_filteredDisplayList = getFilteredDisplayListByFullStringMatch("category", pd_categorySelected);
	debug("pd_filteredDisplayList.length=" + pd_filteredDisplayList.length);
	if(!isBlank(pd_priceRange)) pd_filteredDisplayList = getFilteredDisplayListByNumericRange("price", pd_priceRange);
	debug("pd_filteredDisplayList.length=" + pd_filteredDisplayList.length);
	
	//**** PEG START
	if(!isBlank(pd_finishSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("finish", pd_finishSelected);
	if(!isBlank(pd_wattageSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("wattage", pd_wattageSelected);
	if(!isBlank(pd_voltageSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("voltage", pd_voltageSelected);
	if(!isBlank(pd_lightSourceSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("lightSource", pd_lightSourceSelected);
	if(!isBlank(pd_powerSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("power", pd_powerSelected);
	if(!isBlank(pd_colorTemperatureSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("colorTemperature", pd_colorTemperatureSelected);
	if(!isBlank(pd_beamSpreadSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("beamSpread", pd_beamSpreadSelected);
	if(!isBlank(pd_dimmableSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("dimmable", pd_dimmableSelected);
	if(!isBlank(pd_linkableSelected)) pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("linkable", pd_linkableSelected);
	//**** PEG FINISH
	
	/*
	if(pd_filterByStoneButton == false && pd_filterByNonStoneButton == false) {
		pd_filteredDisplayList = getFilteredDisplayListByBooleanMatch("hasStone", false);
		pd_filteredDisplayList = getFilteredDisplayListByBooleanMatch("hasStone", true);
	} else if(pd_filterByStoneButton == false && pd_filterByNonStoneButton == true) {
		pd_filteredDisplayList = getFilteredDisplayListByBooleanMatch("hasStone", false);
	} else if(pd_filterByStoneButton == true && pd_filterByNonStoneButton == false) {
		pd_filteredDisplayList = getFilteredDisplayListByBooleanMatch("hasStone", true);
	} else if(pd_filterByStoneButton == true && pd_filterByNonStoneButton == true) {
		//**** FILTER NOTHING
	}
	*/
	
	debug("pd_filteredDisplayList.length=" + pd_filteredDisplayList.length);
	
	//**************************************************************************
	//*** IGNORE "SEARCH AS YOU TYPE" FILTER IF IT CONTAINS PLACEHOLDER TEXT ***
	//**************************************************************************
	if(pd_searchText != pd_searchTextFirstLoad){
		pd_filteredDisplayList = getFilteredDisplayListBySubStringMatch("searchIndex", pd_searchText);
		debug("pd_filteredDisplayList.length=" + pd_filteredDisplayList.length);
	}
		
	//***************************
	//**** REDISPLAY RESULTS ****
	//***************************	
	var success = displayProductArray();	
	
	//********************************************
	//*** RESET CURSOR FOCUS TO KEYWORD FILTER ***
	//********************************************
	if(document.getElementById("pdPagingFilterByKeyword")){
		var pdPagingFilterByKeyword = document.getElementById("pdPagingFilterByKeyword");
		pdPagingFilterByKeyword.focus();
		if(pdPagingFilterByKeyword.value == pd_searchTextFirstLoad){
			//** DO NOTHING **
		}else if(isBlank(pdPagingFilterByKeyword.value)){
			pdPagingFilterByKeyword.value = pd_searchTextFirstLoad;
		}else{
			pdPagingFilterByKeyword.value = pd_searchText;
		}
	}
	
	//****************************************************************
	//*** SHOW SEARCH CANCEL BUTTON IF THE SEARCH BOX IS POPULATED ***
	//****************************************************************
	var pdPagingFilterByKeyword = document.getElementById("pdPagingFilterByKeyword");
	if(pdPagingFilterByKeyword){
		if(pdPagingFilterByKeyword.value != pd_searchTextFirstLoad && !isBlank(pdPagingFilterByKeyword.value)){
			displaySearchCancelButton();
		}
	}
	
	//***************************************
	//*** RE-RENDER CONTROL PANEL FILTERS ***
	//***************************************
	var doNotResetKeywordFilter = true;
	pdRenderControlPanelFilters(doNotResetKeywordFilter, pdActiveFilter);

	return false;
}

function resetFilters() {
debug("resetFilters()");

	try {document.getElementById("pdPagingFilterByBrand").options.selectedIndex = 0;} catch(e) {}
	try {document.getElementById("pdPagingFilterBySize").options.selectedIndex = -1;} catch(e) {}
	try {document.getElementById("pdPagingFilterByColor").options.selectedIndex = -1;} catch(e) {}
	try {document.getElementById("pdPagingFilterByMaterial").options.selectedIndex = -1;} catch(e) {}
	try {document.getElementById("pdPagingFilterByPriceRange").options.selectedIndex = -1;} catch(e) {}
	try {document.getElementById("pdPagingFilterByKeyword").value = "";} catch(e) {}

	//**** PEG START
	try {document.getElementById("pdPagingFilterByFinish").options.selectedIndex = 0;} catch(e) {}
	try {document.getElementById("pdPagingFilterByWattage").options.selectedIndex = 0;} catch(e) {}
	try {document.getElementById("pdPagingFilterByVoltage").options.selectedIndex = 0;} catch(e) {}
	try {document.getElementById("pdPagingFilterByLightSource").options.selectedIndex = 0;} catch(e) {}
	try {document.getElementById("pdPagingFilterByPower").options.selectedIndex = 0;} catch(e) {}
	try {document.getElementById("pdPagingFilterByColorTemperature").options.selectedIndex = 0;} catch(e) {}
	try {document.getElementById("pdPagingFilterByBeamSpread").options.selectedIndex = 0;} catch(e) {}
	try {document.getElementById("pdPagingFilterByDimmable").options.selectedIndex = 0;} catch(e) {}
	try {document.getElementById("pdPagingFilterByLinkable").options.selectedIndex = 0;} catch(e) {}
	//**** PEG FINISH
		
	pd_searchText = "";	//*** MUST SET HERE
	pdSetCookie("V2pd_filterSettings", "", "", "", "");
	
	return false;
}

function loadSavedFilters() {
debug("loadSavedFilters()");

	var filterString = pdGetCookie("V2pd_filterSettings");
	if(!isBlank(filterString)) {
		var filterPairs = filterString.split("&");
		for(var i=0;i<filterPairs.length;i++) {
			var pair = filterPairs[i].split("=");
			if(pair[0] == "brandSelected") pd_brandSelected = pair[1];
			else if(pair[0] == "sizeSelected") pd_sizeSelected = pair[1];
			else if(pair[0] == "colorSelected") pd_colorSelected = pair[1];
			else if(pair[0] == "materialSelected") pd_materialSelected = pair[1];
			else if(pair[0] == "priceRange") pd_priceRange = pair[1];
			else if(pair[0] == "searchText") pd_searchText = pair[1];
					
//*** PEG START
			else if(pair[0] == "finishSelected") pd_finishSelected = pair[1];
			else if(pair[0] == "wattageSelected") pd_wattageSelected = pair[1];
			else if(pair[0] == "voltageSelected") pd_voltageSelected = pair[1];
			else if(pair[0] == "lightSourceSelected") pd_lightSourceSelected = pair[1];
			else if(pair[0] == "powerSelected") pd_powerSelected = pair[1];
			else if(pair[0] == "colorTemperatureSelected") pd_colorTemperatureSelected = pair[1];
			else if(pair[0] == "beamSpreadSelected") pd_beamSpreadSelected = pair[1];
			else if(pair[0] == "dimmableSelected") pd_dimmableSelected = pair[1];
			else if(pair[0] == "linkableSelected") pd_linkableSelected = pair[1];
//*** PEG FINISH
			
			
		}
		setDropdownValue("pdPagingFilterByBrand", pd_brandSelected);
		setDropdownValue("pdPagingFilterBySize", pd_sizeSelected);
		setDropdownValue("pdPagingFilterByColor", pd_colorSelected);
		setDropdownValue("pdPagingFilterByMaterial", pd_materialSelected);
		setDropdownValue("pdPagingFilterByPriceRange", pd_priceRange);
	
		//*** PEG START
		setDropdownValue("pdPagingFilterByFinish", pd_finishSelected);
		setDropdownValue("pdPagingFilterByWattage", pd_wattageSelected);
		setDropdownValue("pdPagingFilterByVoltage", pd_voltageSelected);
		setDropdownValue("pdPagingFilterByLightSource", pd_lightSourceSelected);
		setDropdownValue("pdPagingFilterByPower", pd_powerSelected);
		setDropdownValue("pdPagingFilterByColorTemperature", pd_colorTemperatureSelected);
		setDropdownValue("pdPagingFilterByBeamSpread", pd_beamSpreadSelected);
		setDropdownValue("pdPagingFilterByDimmable", pd_dimmableSelected);
		setDropdownValue("pdPagingFilterByLinkable", pd_linkableSelected);
		//*** PEG FINISH

		try { document.getElementById("pdPagingFilterByKeyword").value = pd_searchText;} catch(e) {}				
	}
	return false;
}

function setDropdownValue(elementId, value) {
debug("loadSavedFilters()");
	var dropdown = document.getElementById(elementId);
	if(dropdown != null) {	
		for(var i=0;i<dropdown.options.length;i++) {
			if(dropdown.options[i].value == value) dropdown.selected = true;
		}
	}
	return false;	
}


function loadFilters() {
debug("loadFilters()");
	try {pd_brandSelected = document.getElementById("pdPagingFilterByBrand").options[document.getElementById("pdPagingFilterByBrand").selectedIndex].value;} catch(e){}
	try {pd_sizeSelected = document.getElementById("pdPagingFilterBySize").options[document.getElementById("pdPagingFilterBySize").selectedIndex].value;} catch(e){}
	try {pd_colorSelected = document.getElementById("pdPagingFilterByColor").options[document.getElementById("pdPagingFilterByColor").selectedIndex].value;} catch(e){}
	try {pd_materialSelected = document.getElementById("pdPagingFilterByMaterial").options[document.getElementById("pdPagingFilterByMaterial").selectedIndex].value;} catch(e){}
	try {pd_priceRange = document.getElementById("pdPagingFilterByPriceRange").options[document.getElementById("pdPagingFilterByPriceRange").selectedIndex].value;} catch(e){}	
	
	//*** PEG START
	try {pd_finishSelected = document.getElementById("pdPagingFilterByFinish").options[document.getElementById("pdPagingFilterByFinish").selectedIndex].value;} catch(e){}
	try {pd_wattageSelected = document.getElementById("pdPagingFilterByWattage").options[document.getElementById("pdPagingFilterByWattage").selectedIndex].value;} catch(e){}
	try {pd_voltageSelected = document.getElementById("pdPagingFilterByVoltage").options[document.getElementById("pdPagingFilterByVoltage").selectedIndex].value;} catch(e){}
	try {pd_lightSourceSelected = document.getElementById("pdPagingFilterByLightSource").options[document.getElementById("pdPagingFilterByLightSource").selectedIndex].value;} catch(e){}
	try {pd_powerSelected = document.getElementById("pdPagingFilterByPower").options[document.getElementById("pdPagingFilterByPower").selectedIndex].value;} catch(e){}
	try {pd_colorTemperatureSelected = document.getElementById("pdPagingFilterByColorTemperature").options[document.getElementById("pdPagingFilterByColorTemperature").selectedIndex].value;} catch(e){}
	try {pd_beamSpreadSelected = document.getElementById("pdPagingFilterByBeamSpread").options[document.getElementById("pdPagingFilterByBeamSpread").selectedIndex].value;} catch(e){}
	try {pd_dimmableSelected = document.getElementById("pdPagingFilterByDimmable").options[document.getElementById("pdPagingFilterByDimmable").selectedIndex].value;} catch(e){}
	try {pd_linkableSelected = document.getElementById("pdPagingFilterByLinkable").options[document.getElementById("pdPagingFilterByLinkable").selectedIndex].value;} catch(e){}
	//*** PEG FINISH
	
	//************************
	//*** REMEMBER FILTERS ***
	//************************
	var filterList = new Array();
	if(!isBlank(pd_brandSelected)) filterList.push("brandSelected=" + pd_brandSelected);
	if(!isBlank(pd_sizeSelected)) filterList.push("sizeSelected=" + pd_sizeSelected);
	if(!isBlank(pd_colorSelected)) filterList.push("colorSelected=" + pd_colorSelected);
	if(!isBlank(pd_materialSelected)) filterList.push("materialSelected=" + pd_materialSelected);
	if(!isBlank(pd_priceRange)) filterList.push("priceRange=" + pd_priceRange);
	if(!isBlank(pd_searchText)) filterList.push("searchText=" + pd_searchText);
	
	//*** PEG START
	if(!isBlank(pd_finishSelected)) filterList.push("finishSelected=" + pd_finishSelected);
	if(!isBlank(pd_wattageSelected)) filterList.push("wattageSelected=" + pd_wattageSelected);
	if(!isBlank(pd_voltageSelected)) filterList.push("voltageSelected=" + pd_voltageSelected);
	if(!isBlank(pd_lightSourceSelected)) filterList.push("lightSourceSelected=" + pd_lightSourceSelected);
	if(!isBlank(pd_powerSelected)) filterList.push("powerSelected=" + pd_powerSelected);
	if(!isBlank(pd_colorTemperatureSelected)) filterList.push("colorTemperatureSelected=" + pd_colorTemperatureSelected);
	if(!isBlank(pd_beamSpreadSelected)) filterList.push("beamSpreadSelected=" + pd_beamSpreadSelected);
	if(!isBlank(pd_dimmableSelected)) filterList.push("dimmableSelected=" + pd_dimmableSelected);
	if(!isBlank(pd_linkableSelected)) filterList.push("linkableSelected=" + pd_linkableSelected);
	//*** PEG FINISH
	
	var filterString = filterList.join("&");
	
	return false;
}

function searchWhileTyping() {
debug("searchWhileTyping()");
	pd_searchText = String(document.getElementById("pdPagingFilterByKeyword").value);
	displaySearchCancelButton();	
	window.clearTimeout(pd_refreshId);
	pd_refreshId = window.setTimeout("performFilter()", pd_filterSearchDelay);
	return false;
}

function noEnter(e){
  	var keycode;
  	if (window.event) keycode = window.event.keyCode;
  	else if (e) keycode = e.which;

	if(keycode == 13){
		return false;
	}else{
		return true;
	}
}

function displaySearchCancelButton() {
debug("displaySearchCancelButton");
	var pdPagingFilterByKeyword = document.getElementById("pdPagingFilterByKeyword");
	var pdPagingFilterByKeywordCancelButton = document.getElementById("pdPagingFilterByKeywordCancelButton");
	var pdPagingFilterByKeywordCancelButtonActive = document.getElementById("pdPagingFilterByKeywordCancelButtonActive");
	pdPagingFilterByKeywordCancelButtonActive.className = "pdFilterItemsByKeywordClose";
	pdPagingFilterByKeywordCancelButton.className = "pdHideDiv";
	try {pdRemoveEvent(pdPagingFilterByKeywordCancelButtonActive,"click", clearSearch);} catch(e) {}
	pdAddEvent(pdPagingFilterByKeywordCancelButtonActive,"click", clearSearch);
	pdAddEvent(pdPagingFilterByKeyword,"click", clearFirstTimeSearchText);
	return false;	
}

function clearFirstTimeSearchText() {
	var pdPagingFilterByKeyword = document.getElementById("pdPagingFilterByKeyword");

debug("clearFirstTimeSearchText()");
	if(pd_searchFirstRun) {
		pdPagingFilterByKeyword.value = "";
		pd_searchFirstRun = false;
	}
	if(pdPagingFilterByKeyword.value == pd_searchTextFirstLoad) {
		pdPagingFilterByKeyword.value = "";
	}
	return false;
}


function clearSearch() {
debug("clearSearch");
	var searchFieldValue = document.getElementById("pdPagingFilterByKeyword").value;
	if(searchFieldValue != pd_searchTextFirstLoad){
		searchFieldValue = pd_searchTextFirstLoad;
	}
	clearSearchBox();
	setPageNumber(1);
	resetFilters();
	performFilter();
	return false;
}

function clearSearchBox() {
debug("clearSearchBox");
	//document.getElementById("pdPagingFilterByKeywordCancelButtonActive").innerHTML = '<img src="' + pd_imageUrl + 'spacer.gif">';
	document.getElementById("pdPagingFilterByKeywordCancelButtonActive").className = "pdHideDiv";
	document.getElementById("pdPagingFilterByKeywordCancelButton").className = "pdShowDiv";
	
	document.getElementById("pdPagingFilterByKeyword").value = "";
	return false;
}

//***************************************************************************
//****** END FILTER BY KEYWORD/ SEARCH WHILE TYPING FUNCTIONS ***************
//***************************************************************************

//***********************************************
//********* PAGINATION FUNCTIONS ****************
//***********************************************

function parseDisplayList() {

	//******************
	//*** INITIALIZE ***
	//******************
	pd_lastSection = pdGetCookie("V2pd_lastSection");
	setCurrentSection(MD5.hex(location.href));
	if(pd_lastSection != pd_currentSection) {
		pd_sortBy = pd_sortByDefault;
	}
	pd_currentPageNumber = getCurrentPageNumber();
	loadSavedFilters();
	
	//***********************************************
	//***** BUILD JS ARRAY OF PRODUCT ELEMENTS ******
	//***********************************************
	var i = 0;
	var displayList = new Array();
	
	//*******************************************
	//*** ONLY LOAD IF PRODUCT WRAPPER EXISTS ***
	//*******************************************
	var dataWrapper = "";
	try {
		dataWrapper = document.getElementById("productDataWrapper");
	} catch(e) {
		//*** IGNORE
	}
		
	if(!isBlank(dataWrapper)) {
	
		if(dataWrapper.firstChild) { // check for children
			var oChild = dataWrapper.firstChild;
			while(oChild) {
			
			    if(oChild.nodeType==1 && String(oChild.id).indexOf("productData") > -1) { 
					displayList[i] = new Object();
					displayList[i].id = oChild.id;
										
					displayList[i].html = document.getElementById(oChild.id).innerHTML;
		
					//**************************************************
					//**** PARSE PRODUCT ATTRIBUTES (2 levels deep) ****
					//**************************************************
					var subChild = oChild.firstChild;
					while(subChild) {
						if(subChild.nodeType==1) {
							displayList[i][subChild.id] = String(subChild.title).replace(/&quot;/g, '"');
						}
						subChild = subChild.nextSibling;
					}
					
					//******************************
					//*** CREATE DEFAULT SORT ID ***
					//******************************
					displayList[i].defaultSortId = i;
					
					//**************************
					//*** BUILD SEARCH INDEX ***
					//**************************
					displayList[i].searchIndex = "";
					if(displayList[i].itemId) displayList[i].searchIndex += " " + String(displayList[i].itemId).toLowerCase();
					if(displayList[i].name) displayList[i].searchIndex += " " + String(displayList[i].name).toLowerCase();
					if(displayList[i].brand) displayList[i].searchIndex += " " + String(displayList[i].brand).toLowerCase();
					if(displayList[i].keywords) displayList[i].searchIndex += " " + String(displayList[i].keywords).toLowerCase();
					
				 	i++;
				 }
			  oChild = oChild.nextSibling;
		   }
		}
		
		//*******************************************
		//**** TURN OFF DISPLAY OF DATA ELEMENTS ****
		//*******************************************
		turnOffDisplayOfDataElements();
		
	} else {
		displayList = false;
	}
	
	//*******************************************
	//*** SAVE INITIAL FILTERED PRODUCT ARRAY ***
	//*******************************************
	pd_filteredDisplayList = displayList;

	//****************
	//**** RETURN ****
	//****************
	return displayList;	
}


function parseDisplayList2() {

	//******************
	//*** INITIALIZE ***
	//******************
	pd_lastSection = pdGetCookie("V2pd_lastSection");
	setCurrentSection(MD5.hex(location.href));
	if(pd_lastSection != pd_currentSection) {
		pd_sortBy = pd_sortByDefault;
	}
	pd_currentPageNumber = getCurrentPageNumber();
	loadSavedFilters();
	
	//***********************************************
	//***** BUILD JS ARRAY OF PRODUCT ELEMENTS ******
	//***********************************************
	var i = 0;
	var displayList = new Array();
	
	//*******************************************
	//*** ONLY LOAD IF PRODUCT WRAPPER EXISTS ***
	//*******************************************
	var dataWrapper = "";
	try {
		dataWrapper = document.getElementById("productDataWrapper");
	} catch(e) {
		//*** IGNORE
	}
		
	if(!isBlank(dataWrapper)) {
	
		if(dataWrapper.firstChild) { // check for children
			var oChild = dataWrapper.firstChild;			
			var dataString = "";
			var subChild = "";
			var tempArray1 = new Array();
			var tempArray2 = new Array();
			while(oChild) {
			
			    if(oChild.nodeType==1 && String(oChild.id).indexOf("productData") > -1) { 
					displayList[i] = new Object();
					displayList[i].id = oChild.id;
										
				
										
					displayList[i].html = document.getElementById(oChild.id).innerHTML;
		
					//**************************************************
					//**** PARSE PRODUCT ATTRIBUTES (2 levels deep) ****
					//**************************************************
					subChild = oChild.firstChild;					
					dataString = subChild.innerHTML;					
					tempArray1 = dataString.split("|~|");
					for(var ii=0;ii<tempArray1.length;ii++) {
						tempArray2 = tempArray1[ii].split("=");
						displayList[i][String(tempArray2[0])] = String(tempArray2[1]).replace(/&quot;/g, '"');					
					}
															
					//******************************
					//*** CREATE DEFAULT SORT ID ***
					//******************************
					displayList[i].defaultSortId = i;
					
					//**************************
					//*** BUILD SEARCH INDEX ***
					//**************************
					displayList[i].searchIndex = "";
					if(displayList[i].itemId) displayList[i].searchIndex += " " + String(displayList[i].itemId).toLowerCase();
					if(displayList[i].name) displayList[i].searchIndex += " " + String(displayList[i].name).toLowerCase();
					if(displayList[i].brand) displayList[i].searchIndex += " " + String(displayList[i].brand).toLowerCase();
					if(displayList[i].keywords) displayList[i].searchIndex += " " + String(displayList[i].keywords).toLowerCase();
					
				 	i++;
				 }
			  oChild = oChild.nextSibling;
		   }
		}
		
		//*******************************************
		//**** TURN OFF DISPLAY OF DATA ELEMENTS ****
		//*******************************************
		turnOffDisplayOfDataElements();
		
	} else {
		displayList = false;
	}
	
	//*******************************************
	//*** SAVE INITIAL FILTERED PRODUCT ARRAY ***
	//*******************************************
	pd_filteredDisplayList = displayList;

	//****************
	//**** RETURN ****
	//****************
	return displayList;	
}


function renderProductArray() {
	debug("renderProductArray");
	
	var productArray = pd_filteredDisplayList;
	var productArrayLen = productArray.length;
	var html = "";
	var tempHtml = "";
	var tempProductHtml = "";
	var tempHtmlTable = "";
	
	var pageNumber = 1;
	var i = 1;
	var item = new Object();
	var rowItemCount = 1;
	var isOpen = false;
	var shade = true;
	
	//*** GRID TABLE VARIABLES ***				
	var pd_gridViewTableSpacerTotalWidth = (pd_gridViewTableSpacer * pd_itemsPerRow) - pd_gridViewTableSpacer;
	var cellWidth = ((pd_gridViewTableWidth - pd_gridViewTableSpacerTotalWidth) / pd_itemsPerRow);
	
	debug("pd_currentPageNumber render = " + pd_currentPageNumber);	

	// RESET PRODUCT WRAPPER HTML TO FIX ISSUE WHEN CHANGING DISPLAY STYLES
	document.getElementById("productWrapper").innerHTML = "";
		
	for(var k=0;k<productArrayLen;k++) {
	
		tempHtml = '';		
		if(pageNumber == pd_currentPageNumber || pd_currentPageNumber == "all") {
	
			//**************************************
			//****** GENERATE GRID VIEW HTML *******
			//**************************************
			if(pd_pagingDisplayMode == "grid"){
				
				if(rowItemCount == 1) {
					tempHtml += '<tr valign="top">\r\n';
					isOpen = true;
				}
				tempHtml += '<td align="center" width="' + Math.floor(cellWidth) + '" class="item">';
				tempHtml += '<div class="pdDisplayGridItemWrapper" id="' + productArray[k].id + '">';
				tempHtml += genProductHtmlGridItem(productArray[k]);
				tempHtml += '</div></td>';

				if(rowItemCount != pd_itemsPerRow){
					tempHtml += '<td width="' + pd_gridViewTableSpacer + '"><img src="' + pd_imageUrl + 'spacer.gif" width="' + pd_gridViewTableSpacer + '"></td>';
				}
				
				rowItemCount++;
				
				if(rowItemCount > pd_itemsPerRow) {
					tempHtml += '</tr><tr><td colspan="' + ((pd_itemsPerRow * 2) - 1) + '" class="pdDisplayGridWrapperSpacer"></td></tr>';
					rowItemCount = 1;
					isOpen = false;
				}
				
			//*************************************************
			//*************** GENERATE LIST VIEW HTML *********
			//*************************************************					
			} else {
				tempHtml += '<div id="' + productArray[k].id;
				if(!shade) {
					tempHtml += '" class="pdDisplayDivListOn">';
				} else {
					tempHtml += '" class="pdDisplayDivList">';
				}
				tempHtml += genProductHtmlList(productArray[k]);
				tempHtml += '</div><div class="pdDisplayDivListBar"></div>';
				
				shade = !shade;
			}

		}
		i++;
		pageNumber = Math.ceil(i / pd_itemsPerPage);
					
		html += tempHtml + "\r\n";
		
		if(pageNumber > pd_currentPageNumber) break;	//*** BREAK OUT OF LOOP AFTER OUR PAGE IS RENDERED
	}
	//***** ADD GUIDE ROW FOR GRID VIEW *******
	var guideRow = '';
	for (i=1;i<=pd_itemsPerRow;i++){
		guideRow += '<td width="' + Math.floor(cellWidth) + '"><img border=0 src="' + pd_imageUrl + 'spacer.gif" width="' + Math.floor(cellWidth) + '" height="1"></td>';
		if(i != pd_itemsPerRow){
			guideRow += '<td width="' + pd_gridViewTableSpacer + '"><img border=0 src="' + pd_imageUrl + 'spacer.gif" width="' + pd_gridViewTableSpacer + '" height="1"></td>';
		}
	}
	//*** ADD TABLE WRAP IF GRID DISPLAY ****
	tempHtmlTable += '<div class="pdDisplayGridWrapper"><table border="0" cellpadding="0" cellspacing="0" width="' + pd_gridViewTableWidth + '">';
	//tempHtmlTable += '<div class="pdDisplayGridWrapper"><table border="0" cellpadding="0" cellspacing="0" width="100%">';
	tempHtmlTable += html;
	tempHtmlTable += '<tr>' + guideRow + '</tr>';
	tempHtmlTable += '</table></div>';
	
	if(pd_pagingDisplayMode == "grid"){
		html = tempHtmlTable;
	}
	
	return html;
}

//***********************************************
//******** VIEW PRODUCT ARRAY AS GRID ***********
//***********************************************
function genProductHtmlGridItem(itemData){

	//*** PRICE DISPLAY LOGIC ***
	var priceReg = itemData["priceReg"] - 0;
	var priceSale = itemData["priceSale"] - 0;
	if(!priceSale) priceSale = priceReg;
	var priceDisplay = '';
	var onSale = true;
	if(priceReg > priceSale){
		priceDisplay = '<div class="pagedPriceDiv"><div class="pagedPrice">' + pd_regPriceText + '<strike>' + ' ' + pdPagingFormatCurrency(priceReg,true) + '</strike></div><div class="pagedPriceSale">' + pd_salePriceText + ' ' + pdPagingFormatCurrency(itemData["price"]-0,true) + '</div></div>';
		onSale = true;
	}else if(priceReg > 0){
		priceDisplay = '<div class="pagedPriceDiv"><span class="pagedPriceSale">' + pdPagingFormatCurrency(itemData["price"]-0,true) + '</span></div>';
		onSale = false;
	}	

	//**** LINK/PRICE DISPLAY ****
	var linkHtml = '<a href="' + itemData["itemId"] + '.html" class="pagedLink">';

	
	//*****************************************
	//*** QUICK SHOP ENABLED FOR THIS ITEM? ***
	//*****************************************
	var pd_quickShopApplies = false;
	if((!isBlank(priceReg) || !isBlank(priceSale)) && pd_quickShopEnabled == true) pd_quickShopApplies = true;
	//*** USE BLANK TITLE IF QUICK SHOP DOES NOT APPLY TO THIS ITEM ***
	var tempTitle = itemData["itemId"];
	if(pd_quickShopApplies == false){tempTitle = "";}

	var html = '';
	html += '<div class="pagingItemImgGrid" title="' + tempTitle +'">' + linkHtml + '<img src="' + itemData["image"] + '" border="0"></a></div>';
	html += linkHtml + itemData["name"] + '</a>';
	
	//html += '<div class="pagingAbstract">' + itemData["abstract"] + '</div>';

	//******* RATING DISPLAY ******
	var rating = itemData["rating"] - 0;
	var ratingCount = itemData["ratingCount"] - 0;
	var ratingCountS = '';
	if(ratingCount > 1){ratingCountS = 's'}
	
	if(rating  > 0){
		html += '<div class="pdPagingRating">';
		html += '<img src="' + pd_imageUrl + 'rating/' + rating + '.gif" border="0">';
		if(ratingCount > 0 && pd_enableRatingCount == true ){
			html += '<span>(' + ratingCount + ' rating' + ratingCountS + ')</span>';
		}
		html += '</div>';
	}
	
	//**** PRICE DISPLAY *********
	html += priceDisplay;
	
	
	//********************************************************
	//*** RETRIEVE DISCOUNT AND CALCULATE DISCOUNTED PRICE ***
	//********************************************************
	var discountPercentage = 0;
	var discountOption = "";
	if(pd_myAccountPricingEnabled && (pd_myAccountPricingNoDiscountForSaleItems == false || (pd_myAccountPricingNoDiscountForSaleItems == true && onSale == false))) {	//*** RESTRICT DISCOUNT TO ONSALE ITEMS
		try {
			discountPercentage = getDiscountPercentage(itemData["itemId"]);
			var pipeIndex = String(discountPercentage).indexOf("|");
			if(pipeIndex > -1) discountPercentage = String(discountPercentage).substring(0, pipeIndex) - 0;	//*** IGNORE QTY PRICING
		} catch(e) {
			//*** IGNORE IF NOT AVAILABLE 
		}
	}
	if(discountPercentage > 0) {
		var discountedPrice = priceSale - (priceSale * (discountPercentage/100));		
		html += '<div class="pagedPriceYourPrice">';
		html += pd_myAccountPricingText + pdPagingFormatCurrency(discountedPrice, true);
		html += "<div>";
		
		var discountAmount = Math.round((priceSale - discountedPrice) * 100)/100;
		discountOption = '<input type="hidden" name="Discount" value="(- ' + pdPagingFormatCurrency(discountAmount) + ')">';		
	}

	//****************************************************************************************//
	//**** DISPLAY ADD TO CART BUTTON IF ITEM IS ORDERABLE/ DOES NOT HAVE OPTIONS ************//
	//****************************************************************************************//
	if(pd_showGridViewAddToCart){
		html += '<div style="margin-top:6px;">';
		if((!isBlank(itemData["priceReg"]) || !isBlank(itemData["priceSale"])) && itemData["orderable"] == "T" && itemData["hasOptions"] != "T"){
			html += '<form method="POST" style="display:inline;" action="http://order.store.yahoo.net/cgi-bin/wg-order?' + pd_yahooStoreId + '+' + itemData["itemId"] + '">';
			html += '<input name="vwitem" type="hidden" value="' + itemData["itemId"] + '">';
			html += '<input name="vwcatalog" type="hidden" value="' + pd_yahooStoreId + '">';
			html += discountOption;		
			html += '<input type="image" src="' + pd_imageUrl + 'pagingAddCart.gif" border="0">';
			html += '</form>';
		} else if((!isBlank(itemData["priceReg"]) || !isBlank(itemData["priceSale"])) && itemData["orderable"] == "T") {
			html += linkHtml + '<img src="' + pd_imageUrl + 'pagingMoreInfo.gif" border="0">' + '</a>';
		} else if(itemData["orderable"] != "T") {
			html += linkHtml + '<img src="' + pd_imageUrl + 'pagingOutOfStock.gif" border="0">' + '</a>';
		}
		html += '</div>';
	}	
	
	return html;
}
//***********************************************
//******** VIEW PRODUCT ARRAY AS LIST ***********
//***********************************************
function genProductHtmlList(itemData){
	
	var displayDiv = new String(itemData.id);
	var dataDiv = displayDiv.replace(/Display/g, 'Data');
	
	//*** PRICE DISPLAY LOGIC ***
	var priceReg = itemData["priceReg"] - 0;
	var priceSale = itemData["priceSale"] - 0;
	if(!priceSale) priceSale = priceReg;	
	var priceDisplay = '';
	var onSale = true;
	if(priceReg > priceSale){
		onSale = true;
	} else if(priceReg > 0){
		onSale = false;
	}
	
	//***** LINK HTML ******
	var linkHtml = '<a href="' + itemData["itemId"] + '.html" class="pagedLink">';
	var displayHtml = document.getElementById(dataDiv).innerHTML;
	
	//***********************
	//**** DISPLAY IMAGE ****
	//***********************
	var imageHtml = '<img src="' + itemData["image"] + '" border="0">';	
	displayHtml = displayHtml.replace("<!-" + "- pdImageDisplay -" + "->", imageHtml);
	
	//********************************************************
	//*** RETRIEVE DISCOUNT AND CALCULATE DISCOUNTED PRICE ***
	//********************************************************
	var discountPercentage = 0;
	if(pd_myAccountPricingEnabled && (pd_myAccountPricingNoDiscountForSaleItems == false || (pd_myAccountPricingNoDiscountForSaleItems == true && onSale == false))) {	//*** RESTRICT DISCOUNT TO ONSALE ITEMS
		try {
			discountPercentage = getDiscountPercentage(itemData["itemId"]);
			var pipeIndex = String(discountPercentage).indexOf("|");
			if(pipeIndex > -1) discountPercentage = String(discountPercentage).substring(0, pipeIndex) - 0;	//*** IGNORE QTY PRICING	
		} catch(e) {
			//*** IGNORE IF NOT AVAILABLE 
		}
	}
	if(discountPercentage > 0) {
		var discountedPrice = priceSale - (priceSale * (discountPercentage/100));
		var html = '<div class="pagingMyAccountPrice">';	
		html += pd_myAccountPricingText + pdPagingFormatCurrency(discountedPrice, true);
		html += '</div>';
		displayHtml = displayHtml.replace("<!-" + "- pdPricingDisplay -" + "->", html);
		
		var discountAmount = Math.round((priceSale - discountedPrice) * 100)/100;
		var discountOption = '<input type="hidden" name="Discount" value="(- ' + pdPagingFormatCurrency(discountAmount) + ')">';
		displayHtml = displayHtml.replace(/<\/form>/i, discountOption + "</form>");
	}
		
	return displayHtml;
}

//***********************************************
//*** END NEW DISPLAY STYLE FUNCTIONALITY *******
//***********************************************

function displayProductArray() {
	debug("displayProductArray");
	
	//*************************************
	//**** TEST FOR NOTHING TO DISPLAY ****
	//*************************************
	if(!pd_filteredDisplayList) return false;
		
	//**********************************
	//**** REMEMBER GLOBAL SETTINGS ****
	//**********************************
	pdSetCookie("V2pd_pagingSortBy", pd_sortBy);
	
	//*******************************
	//**** RENDER PAGE ELEMENTS *****
	//*******************************		
	if(isBlank(pd_currentPageNumber)) {
		debug("could not find pd_currentPageNumber " + pd_currentPageNumber + ": setting = 1");
		pd_currentPageNumber = 1;
	}	
	
	//*********************************************
	//*** POPULATE RESULTS INTO PRODUCT WRAPPER ***
	//*********************************************
	if(pd_filteredDisplayList.length >0) {
		document.getElementById("productWrapper").innerHTML = renderProductArray();
	} else {
		document.getElementById("productWrapper").innerHTML = '<div class="pdFilterNoProductsFound">' + pd_noItemsFoundMessage + '</b></div>';
	}
	
	//**********************************************************
	//*** TURN ON HEADER CONTROL PANEL AND POPULATE ELEMENTS ***
	//**********************************************************
	document.getElementById("pdPagingControlPanel").className = "pagingControlPanelShow";
	document.getElementById("pageInfo").innerHTML = renderPageInfo(pd_filteredDisplayList.length);
	document.getElementById("pageInfoBottom").innerHTML = renderPageInfo(pd_filteredDisplayList.length);
	
	var pageCount = Math.ceil(pd_filteredDisplayList.length/pd_itemsPerPage);
	if(pageCount > 1) {	
		document.getElementById("pageNumberBar").className = "pdPagingNumberBarWrap";
		document.getElementById("pageNumberBarBottom").className = "pdPagingNumberBarFooterWrap";
		document.getElementById("pageNumberLinks").innerHTML = renderPageNumberLinks(pd_filteredDisplayList.length);
		document.getElementById("pageNumberLinksBottom").innerHTML = renderPageNumberLinks(pd_filteredDisplayList.length);
	} else {
		document.getElementById("pageNumberBar").className = "pagingControlPanelHide";
		document.getElementById("pageNumberBarBottom").className = "pagingControlPanelHide";
	}
	//*****************************
	//*** ADD QUICKSHOP BUTTONS ***
	//*****************************
	//if(pd_quickShopEnabled == true) pdDeferUntilLoaded(pdQsButtons,"pdQuickShopDisplayWindow");

	if(pd_quickShopEnabled == true){pdQsButtons();}

	//**************
	//*** RETURN ***
	//**************
	return false;
}


function renderControlPanelSortLinks() {

	//********************************
	//**** SORT BY DEFAULT BUTTON ****
	//********************************
	var pdPagingSortByDefaultButton = document.getElementById("pdPagingSortByDefaultButton");

	var pdPagingSortByDefaultButtonActive = document.getElementById("pdPagingSortByDefaultButtonActive");
	if(pdPagingSortByDefaultButton != null && pdPagingSortByDefaultButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortByDefaultButton,"click", sortAndDisplayByDefault);} catch(e) {}
		pdPagingSortByDefaultButton.className = "pdHiddenElem";
		pdPagingSortByDefaultButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "default") pdPagingSortByDefaultButtonActive.className = "pdSortLinkActive";
		else pdPagingSortByDefaultButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortByDefaultButton,"click", sortAndDisplayByDefault);
	}

	//***********************************************
	//**** SORT BY DEFAULT - MULTI ACTION BUTTON ****
	//***********************************************
	var pdPagingSortByDefaultButtonAscDesc = document.getElementById("pdPagingSortByDefaultButtonAscDesc");
	var pdPagingSortByDefaultButtonAsc = document.getElementById("pdPagingSortByDefaultButtonAsc");
	var pdPagingSortByDefaultButtonDesc = document.getElementById("pdPagingSortByDefaultButtonDesc");

	if(pdPagingSortByDefaultButtonAscDesc != null && pdPagingSortByDefaultButtonAsc != null && pdPagingSortByDefaultButtonDesc != null) {
		try {pdRemoveEvent(pdPagingSortByDefaultButtonAscDesc,"click", sortAndDisplayByDefault);} catch(e) {}
		pdPagingSortByDefaultButtonAscDesc.className = "pdHiddenElem";
		pdPagingSortByDefaultButtonAsc.className = "pdHiddenElem";
		pdPagingSortByDefaultButtonDesc.className = "pdHiddenElem";
		if(pd_sortBy == "defaultDesc"){
			pdPagingSortByDefaultButtonDesc.className = "pdSortLinkActiveDesc";
			pdAddEvent(pdPagingSortByDefaultButtonDesc,"click", sortAndDisplayByDefault);	
		}else if(pd_sortBy == "default"){
			pdPagingSortByDefaultButtonAsc.className = "pdSortLinkActive";
			pdAddEvent(pdPagingSortByDefaultButtonAsc,"click", sortAndDisplayByDefaultDesc);	
		}else{
			pdPagingSortByDefaultButtonAscDesc.className = "pdSortLink";
			pdAddEvent(pdPagingSortByDefaultButtonAscDesc,"click", sortAndDisplayByDefault);	
		}
	}
	
	//**************************************************
	//**** SORT BY POPULARITY - MULTI ACTION BUTTON ****
	//**************************************************
	var pdPagingSortByPopularityButtonAscDesc = document.getElementById("pdPagingSortByPopularityButtonAscDesc");
	var pdPagingSortByPopularityButtonAsc = document.getElementById("pdPagingSortByPopularityButtonAsc");
	var pdPagingSortByPopularityButtonDesc = document.getElementById("pdPagingSortByPopularityButtonDesc");

	if(pdPagingSortByPopularityButtonAscDesc != null && pdPagingSortByPopularityButtonAsc != null && pdPagingSortByPopularityButtonDesc != null) {
		try {pdRemoveEvent(pdPagingSortByPopularityButtonAscDesc,"click", sortAndDisplayByPopularity);} catch(e) {}
		pdPagingSortByPopularityButtonAscDesc.className = "pdHiddenElem";
		pdPagingSortByPopularityButtonAsc.className = "pdHiddenElem";
		pdPagingSortByPopularityButtonDesc.className = "pdHiddenElem";
		if(pd_sortBy == "popularityDesc"){
			pdPagingSortByPopularityButtonDesc.className = "pdSortLinkActiveDesc";
			pdAddEvent(pdPagingSortByPopularityButtonDesc,"click", sortAndDisplayByPopularity);	
		}else if(pd_sortBy == "popularity"){
			pdPagingSortByPopularityButtonAsc.className = "pdSortLinkActive";
			pdAddEvent(pdPagingSortByPopularityButtonAsc,"click", sortAndDisplayByPopularityDesc);	
		}else{
			pdPagingSortByPopularityButtonAscDesc.className = "pdSortLink";
			pdAddEvent(pdPagingSortByPopularityButtonAscDesc,"click", sortAndDisplayByPopularity);	
		}
	}
	
	
	
	//******************************
	//**** SORT BY BRAND BUTTON ****
	//******************************
	var pdPagingSortByBrandButton = document.getElementById("pdPagingSortByBrandButton");
	var pdPagingSortByBrandButtonActive = document.getElementById("pdPagingSortByBrandButtonActive");
	if(pdPagingSortByBrandButton != null && pdPagingSortByBrandButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortByBrandButton,"click", sortAndDisplayByBrand);} catch(e) {}
		pdPagingSortByBrandButton.className = "pdHiddenElem";
		pdPagingSortByBrandButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "brand") pdPagingSortByBrandButtonActive.className = "pdSortLinkActive";
		else pdPagingSortByBrandButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortByBrandButton,"click", sortAndDisplayByBrand);
	}
		
	//******************************
	//**** SORT BY NAME BUTTON ****
	//******************************	
	var pdPagingSortByNameButton = document.getElementById("pdPagingSortByNameButton");
	var pdPagingSortByNameButtonActive = document.getElementById("pdPagingSortByNameButtonActive");
	if(pdPagingSortByNameButton != null && pdPagingSortByNameButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortByNameButton,"click", sortAndDisplayByName);} catch(e) {}
		pdPagingSortByNameButton.className = "pdHiddenElem";
		pdPagingSortByNameButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "name") pdPagingSortByNameButtonActive.className = "pdSortLinkActive";
		else pdPagingSortByNameButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortByNameButton,"click", sortAndDisplayByName);	
	}
	
	//********************************************
	//**** SORT BY NAME - MULTI ACTION BUTTON ****
	//********************************************
	var pdPagingSortByNameButtonAscDesc = document.getElementById("pdPagingSortByNameButtonAscDesc");
	var pdPagingSortByNameButtonAsc = document.getElementById("pdPagingSortByNameButtonAsc");
	var pdPagingSortByNameButtonDesc = document.getElementById("pdPagingSortByNameButtonDesc");
	if(pdPagingSortByNameButtonAscDesc != null && pdPagingSortByNameButtonAsc != null && pdPagingSortByNameButtonDesc != null) {
		try {pdRemoveEvent(pdPagingSortByNameButtonAscDesc,"click", sortAndDisplayByName);} catch(e) {}
		pdPagingSortByNameButtonAscDesc.className = "pdHiddenElem";
		pdPagingSortByNameButtonAsc.className = "pdHiddenElem";
		pdPagingSortByNameButtonDesc.className = "pdHiddenElem";
		if(pd_sortBy == "nameDesc"){
			pdPagingSortByNameButtonDesc.className = "pdSortLinkActiveDesc";
			pdAddEvent(pdPagingSortByNameButtonDesc,"click", sortAndDisplayByName);	
		}else if(pd_sortBy == "name"){
			pdPagingSortByNameButtonAsc.className = "pdSortLinkActive";
			pdAddEvent(pdPagingSortByNameButtonAsc,"click", sortAndDisplayByNameDesc);	
		}else{
			pdPagingSortByNameButtonAscDesc.className = "pdSortLink";
			pdAddEvent(pdPagingSortByNameButtonAscDesc,"click", sortAndDisplayByName);	
		}
	}

	//*****************************
	//**** SORT BY SIZE BUTTON ****
	//*****************************	
	var pdPagingSortBySizeButton = document.getElementById("pdPagingSortBySizeButton");
	var pdPagingSortBySizeButtonActive = document.getElementById("pdPagingSortBySizeButtonActive");
	if(pdPagingSortBySizeButton != null && pdPagingSortBySizeButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortBySizeButton,"click", sortAndDisplayBySize);} catch(e) {}
		pdPagingSortBySizeButton.className = "pdHiddenElem";
		pdPagingSortBySizeButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "size") pdPagingSortBySizeButtonActive.className = "pdSortLinkActive";
		else pdPagingSortBySizeButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortBySizeButton,"click", sortAndDisplayBySize);	
	}
		
	//******************************
	//**** SORT BY PRICE BUTTON ****
	//******************************	
	var pdPagingSortByPriceButton = document.getElementById("pdPagingSortByPriceButton");
	var pdPagingSortByPriceButtonActive = document.getElementById("pdPagingSortByPriceButtonActive");
	if(pdPagingSortByPriceButton != null && pdPagingSortByPriceButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortByPriceButton,"click", sortAndDisplayByPrice);} catch(e) {}
		pdPagingSortByPriceButton.className = "pdHiddenElem";
		pdPagingSortByPriceButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "price") pdPagingSortByPriceButtonActive.className = "pdSortLinkActive";
		else pdPagingSortByPriceButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortByPriceButton,"click", sortAndDisplayByPrice);	
	}
	
	//***********************************
	//**** SORT BY PRICE DESC BUTTON ****
	//***********************************
	var pdPagingSortByPriceDescButton = document.getElementById("pdPagingSortByPriceDescButton");
	var pdPagingSortByPriceDescButtonActive = document.getElementById("pdPagingSortByPriceDescButtonActive");
	if(pdPagingSortByPriceDescButton != null && pdPagingSortByPriceDescButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortByPriceDescButton,"click", sortAndDisplayByPriceDesc);} catch(e) {}
		pdPagingSortByPriceDescButton.className = "pdHiddenElem";
		pdPagingSortByPriceDescButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "priceDesc") pdPagingSortByPriceDescButtonActive.className = "pdSortLinkActive";
		else pdPagingSortByPriceDescButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortByPriceDescButton,"click", sortAndDisplayByPriceDesc);	
	}

	//**********************************************************************
	//**** SORT BY PRICE BUTTON MULTI ACTION BUTTON - LOW/HIGH HIGH/LOW ****
	//**********************************************************************
	var pdPagingSortByPriceButtonAscDesc = document.getElementById("pdPagingSortByPriceButtonAscDesc");
	var pdPagingSortByPriceButtonActiveAsc = document.getElementById("pdPagingSortByPriceButtonActiveAsc");
	var pdPagingSortByPriceButtonActiveDesc = document.getElementById("pdPagingSortByPriceButtonActiveDesc");
	if(pdPagingSortByPriceButtonAscDesc != null && pdPagingSortByPriceButtonActiveAsc != null && pdPagingSortByPriceButtonActiveDesc != null) {
		try {pdRemoveEvent(pdPagingSortByPriceButtonAscDesc,"click", sortAndDisplayByPrice);} catch(e) {}
		pdPagingSortByPriceButtonAscDesc.className = "pdHiddenElem";
		pdPagingSortByPriceButtonActiveAsc.className = "pdHiddenElem";
		pdPagingSortByPriceButtonActiveDesc.className = "pdHiddenElem";
		if(pd_sortBy == "priceDesc"){
			pdPagingSortByPriceButtonActiveDesc.className = "pdSortLinkActiveDesc";
			pdAddEvent(pdPagingSortByPriceButtonActiveDesc,"click", sortAndDisplayByPrice);	
		}else if(pd_sortBy == "price"){
			pdPagingSortByPriceButtonActiveAsc.className = "pdSortLinkActive";
			pdAddEvent(pdPagingSortByPriceButtonActiveAsc,"click", sortAndDisplayByPriceDesc);	
		}else{
			pdPagingSortByPriceButtonAscDesc.className = "pdSortLink";
			pdAddEvent(pdPagingSortByPriceButtonAscDesc,"click", sortAndDisplayByPrice);	
		}
	}	
	
	//*************************************************
	//**** SORT BY RATING BUTTON **********************
	//*************************************************
	var pdPagingSortByRatingButton = document.getElementById("pdPagingSortByRatingButton");
	var pdPagingSortByRatingButtonActive = document.getElementById("pdPagingSortByRatingButtonActive");
	if(pdPagingSortByRatingButton != null && pdPagingSortByRatingButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortByRatingButton,"click", sortAndDisplayByRatingDesc);} catch(e) {}
		pdPagingSortByRatingButton.className = "pdHiddenElem";
		pdPagingSortByRatingButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "ratingDesc") pdPagingSortByRatingButtonActive.className = "pdSortLinkActive";
		else pdPagingSortByRatingButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortByRatingButton,"click", sortAndDisplayByRatingDesc);	
	}

	//**********************************************************************
	//**** SORT BY RATING BUTTON MULTI ACTION BUTTON - LOW/HIGH HIGH/LOW ****
	//**********************************************************************
	var pdPagingSortByRatingButtonAscDesc = document.getElementById("pdPagingSortByRatingButtonAscDesc");
	var pdPagingSortByRatingButtonActiveAsc = document.getElementById("pdPagingSortByRatingButtonActiveAsc");
	var pdPagingSortByRatingButtonActiveDesc = document.getElementById("pdPagingSortByRatingButtonActiveDesc");
	if(pdPagingSortByRatingButtonAscDesc != null && pdPagingSortByRatingButtonActiveAsc != null && pdPagingSortByRatingButtonActiveDesc != null) {
		try {pdRemoveEvent(pdPagingSortByRatingButtonAscDesc,"click", sortAndDisplayByRating);} catch(e) {}
		pdPagingSortByRatingButtonAscDesc.className = "pdHiddenElem";
		pdPagingSortByRatingButtonActiveAsc.className = "pdHiddenElem";
		pdPagingSortByRatingButtonActiveDesc.className = "pdHiddenElem";
		if(pd_sortBy == "ratingDesc"){
			pdPagingSortByRatingButtonActiveDesc.className = "pdSortLinkActive";
			pdAddEvent(pdPagingSortByRatingButtonActiveDesc,"click", sortAndDisplayByRating);	
		}else if(pd_sortBy == "rating"){
			pdPagingSortByRatingButtonActiveAsc.className = "pdSortLinkActiveDesc";
			pdAddEvent(pdPagingSortByRatingButtonActiveAsc,"click", sortAndDisplayByRatingDesc);	
		}else{
			pdPagingSortByRatingButtonAscDesc.className = "pdSortLink";
			pdAddEvent(pdPagingSortByRatingButtonAscDesc,"click", sortAndDisplayByRatingDesc);	
		}
	}	
		
	//***************************************
	//**** SORT BY CASE PACK SIZE BUTTON ****
	//***************************************
	var pdPagingSortByCasePackSizeButton = document.getElementById("pdPagingSortByCasePackSizeButton");
	var pdPagingSortByCasePackSizeButtonActive = document.getElementById("pdPagingSortByCasePackSizeButtonActive");
	if(pdPagingSortByCasePackSizeButton != null && pdPagingSortByCasePackSizeButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortByCasePackSizeButton,"click", sortAndDisplayByCasePackSize);} catch(e) {}
		pdPagingSortByCasePackSizeButton.className = "pdHiddenElem";
		pdPagingSortByCasePackSizeButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "casePackSize") pdPagingSortByCasePackSizeButtonActive.className = "pdSortLinkActive";
		else pdPagingSortByCasePackSizeButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortByCasePackSizeButton,"click", sortAndDisplayByCasePackSize);	
	}
	
	//******************************
	//**** SORT BY SCORE BUTTON ****
	//******************************
	var pdPagingSortByScoreButton = document.getElementById("pdPagingSortByScoreButton");
	var pdPagingSortByScoreButtonActive = document.getElementById("pdPagingSortByScoreButtonActive");
	if(pdPagingSortByScoreButton != null && pdPagingSortByScoreButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortByScoreButton,"click", sortAndDisplayByScore);} catch(e) {}
		pdPagingSortByScoreButton.className = "pdHiddenElem";
		pdPagingSortByScoreButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "score") pdPagingSortByScoreButtonActive.className = "pdSortLinkActive";
		else pdPagingSortByScoreButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortByScoreButton,"click", sortAndDisplayByScore);	
	}
	
	//***********************************
	//**** SORT BY BESTSELLER BUTTON ****
	//***********************************
	var pdPagingSortByBestsellerButton = document.getElementById("pdPagingSortByBestsellerButton");
	var pdPagingSortByBestsellerButtonActive = document.getElementById("pdPagingSortByBestsellerButtonActive");
	if(pdPagingSortByBestsellerButton != null && pdPagingSortByBestsellerButtonActive != null) {
		try {pdRemoveEvent(pdPagingSortByBestsellerButton,"click", sortAndDisplayByBestseller);} catch(e) {}
		pdPagingSortByBestsellerButton.className = "pdHiddenElem";
		pdPagingSortByBestsellerButtonActive.className = "pdHiddenElem";
		if(pd_sortBy == "bestseller") pdPagingSortByBestsellerButtonActive.className = "pdSortLinkActive";
		else pdPagingSortByBestsellerButton.className = "pdSortLink";
		pdAddEvent(pdPagingSortByBestsellerButton,"click", sortAndDisplayByBestseller);	
	}	
	
	//*************************************
	//**** VIEW ALL ITEMS / PAGED VIEW ****
	//*************************************
	var pdPagingViewAllButton = document.getElementById("pdPagingViewAllButton");
	var pdPagingViewAllButtonActive = document.getElementById("pdPagingViewAllButtonActive");
	if(pd_itemsCount > pd_itemsPerPage) {
		if(pdPagingViewAllButton != null && pdPagingViewAllButtonActive != null) {
			try {pdRemoveEvent(pdPagingViewAllButton,"click", toggleViewAll);} catch(e) {}
			try {pdRemoveEvent(pdPagingViewAllButtonActive,"click", toggleViewAll);} catch(e) {}
			pdPagingViewAllButton.className = "pdHiddenElem";
			pdPagingViewAllButtonActive.className = "pdHiddenElem";
			if(pd_currentPageNumber == "all") pdPagingViewAllButtonActive.className = "pdPagingViewAllButtonActive";
			else pdPagingViewAllButton.className = "pdPagingViewAllButton";
			pdAddEvent(pdPagingViewAllButton,"click", toggleViewAll);
			pdAddEvent(pdPagingViewAllButtonActive,"click", toggleViewAll);
		}
	}else{
			pdPagingViewAllButton.className = "pdHiddenElem";
			pdPagingViewAllButtonActive.className = "pdHiddenElem";
	}

	//*****************************
	//**** DISPLAY GRID BUTTON ****
	//*****************************
	var pdPagingDisplayGridButton = document.getElementById("pdPagingDisplayGridButton");
	var pdPagingDisplayGridButtonActive = document.getElementById("pdPagingDisplayGridButtonActive");
	if(pdPagingDisplayGridButton != null && pdPagingDisplayGridButtonActive != null) {
		try {pdRemoveEvent(pdPagingDisplayGridButtonActive,"click", togglePagingDisplayMode);} catch(e) {}
		pdPagingDisplayGridButton.className = "pdHiddenElem";
		pdPagingDisplayGridButtonActive.className = "pdHiddenElem";
		if(pd_pagingDisplayMode == "list") pdPagingDisplayGridButtonActive.className = "pdDisplayModeGrid";
		else pdPagingDisplayGridButton.className = "pdDisplayModeGridActive";
		pdAddEvent(pdPagingDisplayGridButtonActive,"click", togglePagingDisplayMode);	
	}
	
	//*****************************
	//**** DISPLAY LIST BUTTON ****
	//*****************************
	var pdPagingDisplayListButton = document.getElementById("pdPagingDisplayListButton");
	var pdPagingDisplayListButtonActive = document.getElementById("pdPagingDisplayListButtonActive");
	if(pdPagingDisplayListButton != null && pdPagingDisplayListButtonActive != null) {
		try {pdRemoveEvent(pdPagingDisplayListButtonActive,"click", togglePagingDisplayMode);} catch(e) {}	
		pdPagingDisplayListButton.className = "pdHiddenElem";
		pdPagingDisplayListButtonActive.className = "pdHiddenElem";
		if(pd_pagingDisplayMode == "grid") pdPagingDisplayListButtonActive.className = "pdDisplayModeList";
		else pdPagingDisplayListButton.className = "pdDisplayModeListActive";
		pdAddEvent(pdPagingDisplayListButtonActive,"click", togglePagingDisplayMode);	
	}
	
	
	return true;
}

function pdAddControlPanelFilters() {
	//alert("pdAddControlPanelFilters");
	
	try {
		var pdPagingFilterByBrand = document.getElementById("pdPagingFilterByBrand");
		pdAddEvent(pdPagingFilterByBrand,"change", function(){performFilter('brand')});
	} catch(e) {}
	
	try {
	var pdPagingFilterBySize = document.getElementById("pdPagingFilterBySize");
	pdAddEvent(pdPagingFilterBySize,"change",  function(){performFilter('size')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByColor = document.getElementById("pdPagingFilterByColor");
	pdAddEvent(pdPagingFilterByColor,"change",  function(){performFilter('color')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByMaterial = document.getElementById("pdPagingFilterByMaterial");
	pdAddEvent(pdPagingFilterByMaterial,"change",  function(){performFilter('material')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByCategory = document.getElementById("pdPagingFilterByCategory");
	pdAddEvent(pdPagingFilterByCategory,"change",  function(){performFilter('category')});
	} catch(e) {}
	
	try {	
	var pdPagingFilterByFinish = document.getElementById("pdPagingFilterByFinish");
	pdAddEvent(pdPagingFilterByFinish,"change", function(){performFilter('finish')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByWattage = document.getElementById("pdPagingFilterByWattage");
	pdAddEvent(pdPagingFilterByWattage,"change", function(){performFilter('wattage')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByVoltage = document.getElementById("pdPagingFilterByVoltage");
	pdAddEvent(pdPagingFilterByVoltage,"change", function(){performFilter('voltage')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByLightSource = document.getElementById("pdPagingFilterByLightSource");
	pdAddEvent(pdPagingFilterByLightSource,"change",  function(){performFilter('lightSource')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByPower = document.getElementById("pdPagingFilterByPower");
	pdAddEvent(pdPagingFilterByPower,"change",  function(){performFilter('power')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByColorTemperature = document.getElementById("pdPagingFilterByColorTemperature");
	pdAddEvent(pdPagingFilterByColorTemperature,"change",  function(){performFilter('colorTemperature')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByBeamSpread = document.getElementById("pdPagingFilterByBeamSpread");
	pdAddEvent(pdPagingFilterByBeamSpread,"change",  function(){performFilter('beamSpread')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByDimmable = document.getElementById("pdPagingFilterByDimmable");
	pdAddEvent(pdPagingFilterByDimmable,"change",  function(){performFilter('dimmable')});
	} catch(e) {}
	
	try {
	var pdPagingFilterByLinkable = document.getElementById("pdPagingFilterByLinkable");
	pdAddEvent(pdPagingFilterByLinkable,"change",  function(){performFilter('linkable')});
	} catch(e) {}

}

function pdRenderControlPanelFilters(doNotResetKeywordFilter, pdActiveFilter) {
//alert("pdRenderControlPanelFilters");
	//*****************************
	//***** FILTER BY KEYWORD *****
	//*****************************
	if(doNotResetKeywordFilter != true) {
		var pdPagingFilterByKeyword = document.getElementById("pdPagingFilterByKeyword");
		if(pdPagingFilterByKeyword != null) {
			try {pdRemoveEvent(pdPagingFilterByKeyword,"click", clearFirstTimeSearchText);} catch(e) {}
			pdPagingFilterByKeyword.value = pd_searchTextFirstLoad;	
			pdAddEvent(pdPagingFilterByKeyword,"click", clearFirstTimeSearchText);
			pdAddEvent(pdPagingFilterByKeyword,"keyup", searchWhileTyping);
		}
	}
	
	//*************************
	//**** FILTER BY BRAND ****
	//*************************
	if(pdActiveFilter != "brand") {
		var pdPagingFilterByBrand = document.getElementById("pdPagingFilterByBrand");
		if(pdPagingFilterByBrand != null) {
			try {pdRemoveEvent(pdPagingFilterByBrand, "change", performFilter);} catch(e) {}
			var filterList = generateFilterList("brand");
			if(filterList.length == 0) pdPagingFilterByBrand.className = "pdHideDiv";
			else {
				pdPagingFilterByBrand.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByBrand, filterList, pd_brandSelected);
				//pdAddEvent(pdPagingFilterByBrand,"change", function(){performFilter('brand')});
			}
		}
	}
	
	//************************
	//**** FILTER BY SIZE ****
	//************************
	if(pdActiveFilter != "size") {
		var pdPagingFilterBySize = document.getElementById("pdPagingFilterBySize");
		if(pdPagingFilterBySize != null) {
			try {pdRemoveEvent(pdPagingFilterBySize, "change", performFilter);} catch(e) {}
			var filterList = generateFilterList("size");
			if(filterList.length == 0) pdPagingFilterBySize.className = "pdHideDiv";
			else {
				pdPagingFilterBySize.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterBySize, filterList, pd_sizeSelected);
				//pdAddEvent(pdPagingFilterBySize,"change",  function(){performFilter('size')});
			}
		}
	}
	
	//*************************
	//**** FILTER BY COLOR ****
	//*************************
	if(pdActiveFilter != "color") {
		var pdPagingFilterByColor = document.getElementById("pdPagingFilterByColor");
		if(pdPagingFilterByColor != null) {
			try{pdRemoveEvent(pdPagingFilterByColor, "change", performFilter);} catch(e) {}
			var filterList = generateFilterList("color");
			if(filterList.length == 0) pdPagingFilterByColor.className = "pdHideDiv";
			else {
				pdPagingFilterByColor.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByColor, filterList, pd_colorSelected);
				//pdAddEvent(pdPagingFilterByColor,"change",  function(){performFilter('color')});
			}
		}
	}
	
	//****************************
	//**** FILTER BY MATERIAL ****
	//****************************
	if(pdActiveFilter != "material") {
		var pdPagingFilterByMaterial = document.getElementById("pdPagingFilterByMaterial");
		if(pdPagingFilterByMaterial != null) {
			try {pdRemoveEvent(pdPagingFilterByMaterial, "change", performFilter);} catch(e) {}
			var filterList = generateFilterList("material");
			if(filterList.length == 0) pdPagingFilterByMaterial.className = "pdHideDiv";
			else {
				pdPagingFilterByMaterial.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByMaterial, filterList, pd_materialSelected);
				//pdAddEvent(pdPagingFilterByMaterial,"change",  function(){performFilter('material')});
			}
		}
	}
	
	//****************************
	//**** FILTER BY CATEGORY ****
	//****************************
	if(pdActiveFilter != "category") {
		var pdPagingFilterByCategory = document.getElementById("pdPagingFilterByCategory");
		if(pdPagingFilterByCategory != null) {
			try {pdRemoveEvent(pdPagingFilterByCategory, "change", performFilter);} catch(e) {}
			var filterList = generateFilterList("category");
			if(filterList.length == 0) pdPagingFilterByCategory.className = "pdHideDiv";
			else {
				pdPagingFilterByCategory.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByCategory, filterList, pd_categorySelected);
				//pdAddEvent(pdPagingFilterByCategory,"change",  function(){performFilter('category')});
			}
		}
	}
	
	//**************************
	//**** FILTER BY FINISH ****
	//**************************
	if(pdActiveFilter != "finish") {
		var pdPagingFilterByFinish = document.getElementById("pdPagingFilterByFinish");
		if(pdPagingFilterByFinish != null) {
			try {pdRemoveEvent(pdPagingFilterByFinish, "change");} catch(e) {}
			var filterList = generateFilterList("finish");
			if(filterList.length == 0) pdPagingFilterByFinish.className = "pdHideDiv";
			else {
				pdPagingFilterByFinish.onchange = "";		//TEST
				pdPagingFilterByFinish.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByFinish, filterList, pd_finishSelected);
				//pdAddEvent(pdPagingFilterByFinish,"change", function(){performFilter('finish')});
			}
		}
	}
	
	//***************************
	//**** FILTER BY WATTAGE ****
	//***************************
	if(pdActiveFilter != "wattage") {
		var pdPagingFilterByWattage = document.getElementById("pdPagingFilterByWattage");
		if(pdPagingFilterByWattage != null) {
			try {pdRemoveEvent(pdPagingFilterByWattage, "change");} catch(e) {}
			var filterList = generateFilterList("wattage");
			if(filterList.length == 0) pdPagingFilterByWattage.className = "pdHideDiv";
			else {
				pdPagingFilterByWattage.onchange = "";		//TEST
				pdPagingFilterByWattage.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByWattage, filterList, pd_wattageSelected);
				//pdAddEvent(pdPagingFilterByWattage,"change",  function(){performFilter('wattage')});
			}
		}
	}
	
	//***************************
	//**** FILTER BY VOLTAGE ****
	//***************************
	if(pdActiveFilter != "voltage") {
		var pdPagingFilterByVoltage = document.getElementById("pdPagingFilterByVoltage");
		if(pdPagingFilterByVoltage != null) {
			try {pdRemoveEvent(pdPagingFilterByVoltage, "change");} catch(e) {}
			var filterList = generateFilterList("voltage");
			if(filterList.length == 0) pdPagingFilterByVoltage.className = "pdHideDiv";
			else {
				pdPagingFilterByVoltage.onchange = "";		//TEST
				pdPagingFilterByVoltage.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByVoltage, filterList, pd_voltageSelected);
				//pdAddEvent(pdPagingFilterByVoltage,"change",  function(){performFilter('voltage')});
			}
		}
	}
	
	//*******************************
	//**** FILTER BY lightSource ****
	//*******************************
	if(pdActiveFilter != "lightSource") {
		var pdPagingFilterByLightSource = document.getElementById("pdPagingFilterByLightSource");
		if(pdPagingFilterByLightSource != null) {
			try {pdRemoveEvent(pdPagingFilterByLightSource, "change");} catch(e) {}
			var filterList = generateFilterList("lightSource");
			if(filterList.length == 0) pdPagingFilterByLightSource.className = "pdHideDiv";
			else {
				pdPagingFilterByLightSource.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByLightSource, filterList, pd_lightSourceSelected);
				//pdAddEvent(pdPagingFilterByLightSource,"change",  function(){performFilter('lightSource')});
			}
		}
	}
	
	//*************************
	//**** FILTER BY power ****
	//*************************
	if(pdActiveFilter != "power") {
		var pdPagingFilterByPower = document.getElementById("pdPagingFilterByPower");
		if(pdPagingFilterByPower != null) {
			try {pdRemoveEvent(pdPagingFilterByPower, "change");} catch(e) {}
			var filterList = generateFilterList("power");
			if(filterList.length == 0) pdPagingFilterByPower.className = "pdHideDiv";
			else {
				pdPagingFilterByPower.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByPower, filterList, pd_powerSelectedSelected);
				//pdAddEvent(pdPagingFilterByPower,"change",  function(){performFilter('power')});
			}
		}
	}
	//************************************
	//**** FILTER BY colorTemperature ****
	//************************************
	if(pdActiveFilter != "colorTemperature") {
		var pdPagingFilterByColorTemperature = document.getElementById("pdPagingFilterByColorTemperature");
		if(pdPagingFilterByColorTemperature != null) {
			try {pdRemoveEvent(pdPagingFilterByColorTemperature, "change");} catch(e) {}
			var filterList = generateFilterList("colorTemperature");
			if(filterList.length == 0) pdPagingFilterByColorTemperature.className = "pdHideDiv";
			else {
				pdPagingFilterByColorTemperature.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByColorTemperature, filterList, pd_colorTemperatureSelected);
				//pdAddEvent(pdPagingFilterByColorTemperature,"change",  function(){performFilter('colorTemperature')});
			}
		}
	}
	//******************************
	//**** FILTER BY beamSpread ****
	//******************************
	if(pdActiveFilter != "beamSpread") {
		var pdPagingFilterByBeamSpread = document.getElementById("pdPagingFilterByBeamSpread");
		if(pdPagingFilterByBeamSpread != null) {
			try {pdRemoveEvent(pdPagingFilterByBeamSpread, "change", performFilter);} catch(e) {}
			var filterList = generateFilterList("beamSpread");
			if(filterList.length == 0) pdPagingFilterByBeamSpread.className = "pdHideDiv";
			else {
				pdPagingFilterByBeamSpread.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByBeamSpread, filterList, pd_beamSpreadSelectedSelected);
				//pdAddEvent(pdPagingFilterByBeamSpread,"change",  function(){performFilter('beamSpread')});
			}
		}
	}
	//****************************
	//**** FILTER BY dimmable ****
	//****************************
	if(pdActiveFilter != "dimmable") {
		var pdPagingFilterByDimmable = document.getElementById("pdPagingFilterByDimmable");
		if(pdPagingFilterByDimmable != null) {
			try {pdRemoveEvent(pdPagingFilterByDimmable, "change", performFilter);} catch(e) {}
			var filterList = generateFilterList("dimmable");
			if(filterList.length == 0) pdPagingFilterByDimmable.className = "pdHideDiv";
			else {
				pdPagingFilterByDimmable.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByDimmable, filterList, pd_dimmableSelectedSelected);
				//pdAddEvent(pdPagingFilterByDimmable,"change",  function(){performFilter('dimmable')});
			}
		}
	}
	
	//****************************
	//**** FILTER BY linkable ****
	//****************************
	if(pdActiveFilter != "linkable") {
		var pdPagingFilterByLinkable = document.getElementById("pdPagingFilterByLinkable");
		if(pdPagingFilterByLinkable != null) {
			try {pdRemoveEvent(pdPagingFilterByLinkable, "change", performFilter);} catch(e) {}
			var filterList = generateFilterList("linkable");
			if(filterList.length == 0) pdPagingFilterByLinkable.className = "pdHideDiv";
			else {
				pdPagingFilterByLinkable.className = "pdShowDivInline";
				populateSelectOptions(pdPagingFilterByLinkable, filterList, pd_linkableSelectedSelected);
				//pdAddEvent(pdPagingFilterByLinkable,"change",  function(){performFilter('linkable')});
			}
		}
	}
		
	//*******************************
	//**** FILTER BY PRICE RANGE ****
	//*******************************
	var pdPagingFilterByPriceRange = document.getElementById("pdPagingFilterByPriceRange");
	if(pdPagingFilterByPriceRange != null) {
		try {pdRemoveEvent(pdPagingFilterByPriceRange,"change", performFilter);} catch(e) {}
		pdAddEvent(pdPagingFilterByPriceRange,"change", performFilter);
	}

	return false;
}

function renderControlPanelFilterButtons() {
debug("renderControlPanelFilterButtons()");

	//*********************************
	//**** FILTER BY STONE BUTTONS ****
	//*********************************
	var pdPagingFilterStoneButton = document.getElementById("pdPagingFilterStoneButton");
	var pdPagingFilterStoneButtonActive = document.getElementById("pdPagingFilterStoneButtonActive");
	if(pdPagingFilterStoneButton != null && pdPagingFilterStoneButtonActive != null) {
		try {pdRemoveEvent(pdPagingFilterStoneButtonActive, "click", setAndPerformFilterByStoneButton);} catch(e) {}
		try {pdRemoveEvent(pdPagingFilterStoneButton, "click", setAndPerformFilterByStoneButton);} catch(e) {}
		if(pd_filterByStoneButton == true) {
			pdPagingFilterStoneButton.className = "pdHiddenElem";
			pdPagingFilterStoneButtonActive.className = "pdSortLinkActive";
		} else {
			pdPagingFilterStoneButtonActive.className = "pdHiddenElem";
			pdPagingFilterStoneButton.className = "pdSortLinkActive";
		}
		pdAddEvent(pdPagingFilterStoneButton,"click", setAndPerformFilterByStoneButton);
		pdAddEvent(pdPagingFilterStoneButtonActive,"click", setAndPerformFilterByStoneButton);
	}
	
	//*************************************
	//**** FILTER BY NON STONE BUTTONS ****
	//*************************************
	var pdPagingFilterNonStoneButton = document.getElementById("pdPagingFilterNonStoneButton");
	var pdPagingFilterNonStoneButtonActive = document.getElementById("pdPagingFilterNonStoneButtonActive");
	if(pdPagingFilterNonStoneButton != null && pdPagingFilterNonStoneButtonActive != null) {
		try {pdRemoveEvent(pdPagingFilterNonStoneButtonActive, "click", setAndPerformFilterByNonStoneButton);} catch(e) {}
		try {pdRemoveEvent(pdPagingFilterNonStoneButton, "click", setAndPerformFilterByNonStoneButton);} catch(e) {}
		if(pd_filterByNonStoneButton == true) {
			pdPagingFilterNonStoneButton.className = "pdHiddenElem";
			pdPagingFilterNonStoneButtonActive.className = "pdSortLinkActive";
		} else {
			pdPagingFilterNonStoneButtonActive.className = "pdHiddenElem";
			pdPagingFilterNonStoneButton.className = "pdSortLinkActive";
		}
		pdAddEvent(pdPagingFilterNonStoneButton,"click", setAndPerformFilterByNonStoneButton);
		pdAddEvent(pdPagingFilterNonStoneButtonActive,"click", setAndPerformFilterByNonStoneButton);
	}

	return false;
}



//*********************************************************************
//****** DISPLAY PAGE ELEMENTS RELATED TO SORTING AND FILTERING *******
//*********************************************************************

function clearFilter() {
debug("clearFilter");
	pd_currentPageNumber = 1;
	performFilter();
	return false;
}

function renderPageNumberLinks(productCount) {

debug("renderPageNumberLinks(productCount)");

	var pageCount = Math.ceil(productCount/pd_itemsPerPage);
	if(pageCount == 1) return "";	
	var html = "";

	if(pd_currentPageNumber != "all") {
	
		var pagesToDisplay = pd_pagesToDisplay;
		var extraPages = 0;

		var firstPageNumberToDisplay = pd_currentPageNumber - Math.floor(pagesToDisplay / 2);
		if(firstPageNumberToDisplay < 1) {
			extraPages = Math.abs(firstPageNumberToDisplay) + 1;
			firstPageNumberToDisplay = 1;
		}

		var lastPageNumberToDisplay = (pd_currentPageNumber - 0) + Math.floor(pagesToDisplay / 2) + extraPages;
		if(lastPageNumberToDisplay > pageCount) {
			firstPageNumberToDisplay -= lastPageNumberToDisplay - pageCount;
			lastPageNumberToDisplay = pageCount;
			if(firstPageNumberToDisplay < 1) firstPageNumberToDisplay = 1;
		}		
		html += '<table border="0" cellpadding="0" cellspacing="0"><tr valign="top">';
		
		//**********************
		//*** PREVIOUS ARROW ***
		//**********************		
		if(pd_currentPageNumber != "all") {	
			if(pd_currentPageNumber > 1) {
				var previousPage = pd_currentPageNumber - 1;
				html += '<td><div class="pdPageArrowPrev" onClick="return(setPageNumberAndDisplayProductArray(' + previousPage + '))"></div></td>';
			} else {
				html += '';
			}
		}
			
		for(var i=firstPageNumberToDisplay;i<=lastPageNumberToDisplay;i++) {
			if(pd_currentPageNumber == i) {
				html += '<td><div class="pdPageNumBgOn">' + i + '</div></td>';
				if(i < lastPageNumberToDisplay) html += '';
			} else {
				html += '<td><div class="pdPageNumBg" onClick="return(setPageNumberAndDisplayProductArray(' + i + '))">' + i + '</div></td>';
				if(i < lastPageNumberToDisplay) html += '';
			}
		}
		
		//******************
		//*** NEXT ARROW ***
		//******************	
		if(pd_currentPageNumber != "all") {	
			var nextPage = pd_currentPageNumber + 1;
			if(nextPage <= pageCount) {
				html += '<td><div class="pdPageArrowNext" onClick="return(setPageNumberAndDisplayProductArray(' + nextPage + '))"></div></td>';
			} else {
				html += '';
			}
		}
		
		html += '</tr></table>';
	}	
	return html;
}


function renderPageInfo(productCount) {
debug("renderPageInfo");

	var html = "";

	/*** CHANGE DISPLAY TO PAGE COUNT OR ITEM COUNT ***/
	if(pd_enableItemCountResults == true){
		/** SET SHOWING RESULTS ITEM START COUNT **/
		if(pd_currentPageNumber == 1){
			pd_showingItemsFirstValCount = 1;
		}else{
			pd_showingItemsFirstValCount = (pd_currentPageNumber * pd_itemsPerPage) - pd_itemsPerPage;
		}
		/** SET SHOWING RESULTS ITEM LAST COUNT **/
		pd_showingItemsLastValCount = ((pd_currentPageNumber * pd_itemsPerPage) - pd_itemsPerPage) + pd_itemsPerPage;
		if(pd_showingItemsLastValCount > pd_itemsCount){pd_showingItemsLastValCount = pd_itemsCount;}
		
		/** SHOW APPROPRIATE DISPLAY IF ITEM COUNT IS LESS THAN PER PAGE COUNT **/
		if(pd_itemsCount > pd_itemsPerPage && pd_currentPageNumber != 'all'){
			html += 'Showing ' + pd_showingItemsFirstValCount + ' - ' + pd_showingItemsLastValCount + ' of ' + pd_itemsCount + ' Items';
		}else{
			html += 'Showing ' + pd_itemsCount + ' Items';
		}
	}else{
		var pageCount = Math.ceil(productCount/pd_itemsPerPage);
		if(pageCount == 1 || pageCount == 0) return "";
		
		if(pd_currentPageNumber != "all") {
			html += '<nobr>Page ' + pd_currentPageNumber + ' of ' + pageCount + '&nbsp; &nbsp;</nobr>';
		}
	}
	return html;
}

function toggleViewAll() {
debug("toggleViewAll()");
	//*************************
	//*** TOGGLE pd_viewAll ***
	//*************************
	if(pd_currentPageNumber != "all") setPageNumber("all");
	else setPageNumber(1);
	
	//*****************
	//*** REDISPLAY ***
	//*****************
	renderControlPanelSortLinks();
	displayProductArray();

	//**************
	//*** RETURN ***
	//**************
	return false;
}

function togglePagingDisplayMode() {
debug("togglepagingDisplayMode()");
	//***********************************
	//*** TOGGLE pd_pagingDisplayMode ***
	//***********************************
	if(pd_pagingDisplayMode == "list") setPagingDisplayMode("grid");
	else setPagingDisplayMode("list");

	//*****************
	//*** REDISPLAY ***
	//*****************
	renderControlPanelSortLinks();
	displayProductArray();

	//**************
	//*** RETURN ***
	//**************
	return false;
}


function viewPage(pageNumber) {
	debug("viewPage, setting pageNumber = " + pageNumber);
	setPageNumber(pageNumber);
	displayProductArray();
	return false;
}

function populateSelectOptions(selectElement, optionList, selected) {

//alert("populateSelectedOptions:" + selectElement.name);

	var optionCount = 0;
	selectElement.options.length = 1;	//*** CLEAR OPTIONS (EXCEPT DEFAULT OPTION)
	var item = new Object();
	for(item in optionList) {			//*** LOOP THROUGH TO RE-POPULATE OPTIONS
		if(optionList.hasOwnProperty(item)) {
			optionCount++;
			selectElement.options[optionCount] = new Option(optionList[item].name, optionList[item].name);
			if(selected == optionList[item].name) selectElement.options[optionCount].selected = true;
		}
	}
	return false;
}

function renderSelectOptions(list, defaultOptionName, defaultOptionValue, optionSelected) {
	debug("renderSelectOptions(list, defaultOptionName, defaultOptionValue, optionSelected)");

	var html = "";
	html += '<option value="' + defaultOptionValue + '">' + defaultOptionName + '</option>';
	var item = new Object();
	for(item in list) {
		if(list.hasOwnProperty(item)) {
			html += '<option value="' + list[item].name + '"';
			if(list[item].name == optionSelected) html += ' SELECTED';
			html += '>' + list[item].name + '</option>';
		}
	}
	return html;
}

function renderBestsellerFilterLink() {
	var html = '';
	if(pd_filterBy != 'bestseller'){
		html += '<nobr><img src="' + pd_imageUrl + 'arrowSmall.gif"><a href="#" class="pdFilterLink"  onClick="return(filterProductArrayByBestseller(\'bestseller\'))">Show Bestsellers</a></nobr>';
	}else{	
		html += '<div class="pdFilterLinkDOn"><nobr><img src="' + pd_imageUrl + 'arrowSmallW.gif" hspace="4"><a href=" " class="pdFilterLinkOn"  onClick="return(filterProductArrayByBestseller(\'all\'))"><b>Show All Items</b></a></nobr></div>';
	}
	return html;
}

//*********************************************
//********* FILTER BESTSELLER ITEMS ***********
//*********************************************
function filterProductArrayByBestseller(filterBy) {
debug("filterProductArrayByBestseller()");
	if(filterBy == 'bestseller'){
		pd_filterBy = 'bestseller';
		pd_filteredDisplayList = getFilteredDisplayListByBestseller();
		pd_currentPageNumber = 1;
		var success = displayProductArray();
	}else{
		pd_filterBy = 'all';
		return(clearFilter());
	}	
	return false;
}

function getFilteredDisplayListByBestseller() {
debug("getFilteredDisplayListByBestseller");
	var productArray = pd_filteredDisplayList;
	var filteredHash = new Array();
	var item = new Object();
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			var isBestseller = productArray[item].bestseller;
			if(isBestseller == "Yes"){
				filteredHash[productArray[item].id] = productArray[item];
			}
		}
	}	
	var filteredList = convertHashToArray(filteredHash);
	return filteredList;
}
//*********************************************
//****** END FILTER BESTSELLER ITEMS **********
//*********************************************

function getFilteredDisplayListByFullStringMatch(filterName, filterValue) {
debug("getFilteredDisplayListByFullStringMatch(" + filterName + "," + filterValue + ")");
	var productArray = pd_filteredDisplayList;
	filterValue = String(filterValue).toLowerCase();	//*** LOWERCASE VALUE FOR CASE INSENSITIVE COMPARISON
	var filteredHash = new Array();
	var item = new Object();
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			var found = true;
			if(String(productArray[item][filterName]).toLowerCase() != filterValue && filterValue != "") found = false;
			if(found == true) filteredHash[productArray[item].id] = productArray[item];
		}
	}
	var filteredList = convertHashToArray(filteredHash);
	return filteredList;
}

function getFilteredDisplayListByBooleanMatch(filterName, filterValue) {
debug("getFilteredDisplayListByBooleanMatch(" + filterName + "," + filterValue + ")");
	var productArray = pd_filteredDisplayList;
	filterValue = String(filterValue).toLowerCase();	//*** LOWERCASE VALUE FOR CASE INSENSITIVE COMPARISON
	var filteredHash = new Array();
	var item = new Object();
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			var found = true;
			if(parseBoolean(productArray[item][filterName]) != parseBoolean(filterValue)) found = false;
			if(found == true) filteredHash[productArray[item].id] = productArray[item];
		}
	}
	var filteredList = convertHashToArray(filteredHash);
	return filteredList;

}


function getFilteredDisplayListBySubStringMatch(filterName, filterValue) {
debug("getFilteredDisplayListBySubStringMatch(" + filterName + "," + filterValue + ")");
	var productArray = pd_filteredDisplayList;
	filterValue = String(filterValue).toLowerCase();	//*** LOWERCASE VALUE FOR CASE INSENSITIVE COMPARISON
	var filteredHash = new Array();
	var item = new Object();
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			var found = false;
			if(String(productArray[item][filterName]).toLowerCase().indexOf(filterValue) > -1) found = true;		
			if(filterValue == "") found = true;	//*** ALWAYS FIND A BLANK SEARCH
			if(found == true) filteredHash[productArray[item].id] = productArray[item];
		}
	}
	var filteredList = convertHashToArray(filteredHash);
	return filteredList;
}

function getFilteredDisplayListBySize(size) {
debug("getFilteredDisplayListBySize");
	var productArray = pd_filteredDisplayList;
	debug("productArray.length = " + productArray.length);
	size = String(size).toLowerCase();
	var filteredHash = new Array();
	var item = new Object();
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			var found = false;
			var tempArray = productArray[item].sizeList.split(",");
			var item2 = new Object();
			for(item2 in tempArray) {
				if(tempArray.hasOwnProperty(item2)) {
					if(String(tempArray[item2]).toLowerCase() == size) found = true;
					if(isBlank(size)) found = true;
				}
			}
			if(found == true) {
				filteredHash[productArray[item].id] = productArray[item];
			}
		}
	}
	var filteredList = convertHashToArray(filteredHash);
	return filteredList;
}

function getFilteredDisplayListByNumericRange(attributeName, numericRange) {
debug("getFilteredDisplayListByNumericRange(" + numericRange + ")");
	var productArray = pd_filteredDisplayList;
	var numericRangeComponents = numericRange.split(":");
	var low = numericRangeComponents[0];
	var high = numericRangeComponents[1];
	
	var filteredList = new Array();
	var item = new Object();
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			var found = false;
			if((productArray[item][attributeName]-0) >= (low-0) && (productArray[item][attributeName]-0) <= (high-0)) found = true;
			if(found == true) filteredList.push(productArray[item]);
		}
	}
	return filteredList;
}


function getFilteredDisplayListByTitleFirstLetterIsNumber() {
debug("getFilteredDisplayListByTitleFirstLetterIsNumber");
	var productArray = pd_displayList;
	var filteredList = new Array();
	var item = new Object();
	var i = 0;
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			if(startsWithNumber(productArray[item].name)) {
				filteredList[i] = productArray[item];
				i++;
			}
		}
	}
	return filteredList;
}

function getFilteredDisplayListByBrandFirstLetterIsNumber() {
debug("getFilteredDisplayListByBrandFirstLetterIsNumber");
	var productArray = pd_displayList;
	var filteredList = new Array();
	var item = new Object();
	var i = 0;
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			if(startsWithNumber(productArray[item].brand)) {
				filteredList[i] = productArray[item];
				i++;
			}
		}
	}
	return filteredList;
}

function getFilteredDisplayListByTitleFirstLetter(firstLetter) {
debug("getFilteredDisplayListByTitleFirstLetter");
	var productArray = pd_displayList;
	var filteredList = new Array();
	var item = new Object();
	var i = 0;
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			if((String(productArray[item].name).substring(0, 1)).toLowerCase() == String(firstLetter).toLowerCase()) {
				filteredList[i] = productArray[item];
				i++;
			}
		}
	}
	return filteredList;
}

function getFilteredDisplayListByBrandFirstLetter(firstLetter) {
debug("getFilteredDisplayListByBrandFirstLetter");
	var productArray = pd_displayList;
	var filteredList = new Array();
	var item = new Object();
	var i = 0;
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			if((String(productArray[item].brand).substring(0, 1)).toLowerCase() == String(firstLetter).toLowerCase()) {
				filteredList[i] = productArray[item];
				i++;
			}
		}
	}
	return filteredList;
}

function getFirstLetterListByBrand() {
debug("getFirstLetterListByBrand");
	var productArray = pd_displayList;
	var firstLetterHash = new Array();
	var item = new Object();
	var firstLetter = "";
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			firstLetter = (String(productArray[item].brand).substring(0,1)).toUpperCase();
			firstLetterHash[firstLetter] = firstLetter;
		}
	}
	return firstLetterHash;
}

function getFirstLetterListByTitle() {
debug("getFirstLetterListByTitle");
	var productArray = pd_displayList;
	var firstLetterHash = new Array();
	var item = new Object();
	var firstLetter = "";
	for(item in productArray) {
		if(productArray.hasOwnProperty(item)) {
			firstLetter = (String(productArray[item].name).substring(0,1)).toUpperCase();
			firstLetterHash[firstLetter] = firstLetter;
		}
	}
	return firstLetterHash;
}


function generateFilterList(listType) {
debug("generateFilterList(" + listType + ")");
	var productArray = pd_filteredDisplayList;
	var filteredHash = new Array();
	var tempName = "";
	var item = new Object();
	var item2 = new Object();
	for(item in productArray) {				
		if(productArray.hasOwnProperty(item)) {	
			var splitString = ",";	//*** BY DEFAULT, SPLIT ON COMMA
			if(String(productArray[item][listType]).indexOf("|") > -1) splitString = "|";	//*** OPTIONALLY, SPLIT ON PIPE
			var tempArray = String(productArray[item][listType]).split(splitString);
			for(item2 in tempArray) {			
				if(tempArray.hasOwnProperty(item2)) {
					tempName = String(tempArray[item2]).toLowerCase();
					if(!isBlank(tempName)) {	
						if(!filteredHash[tempName]) {
							filteredHash[tempName] = new Object();
							filteredHash[tempName].name = tempArray[item2];
							filteredHash[tempName].count = 1;
						} else {
							filteredHash[tempName].count++;
						}
					}
				}
			}
		}
	}
	
	var filteredList = convertHashToArray(filteredHash);
	
	//************************
	//*** SORT BY listType ***
	//************************
	pd_sortTemp = "name";
	filteredList.sort(compareGeneric);
	return filteredList;
}

function startsWithNumber(input) {
	if(	String(input).substring(0, 1) == "0" ||
		String(input).substring(0, 1) == "1" ||
		String(input).substring(0, 1) == "2" ||
		String(input).substring(0, 1) == "3" ||
		String(input).substring(0, 1) == "4" ||
		String(input).substring(0, 1) == "5" ||
		String(input).substring(0, 1) == "6" ||
		String(input).substring(0, 1) == "7" ||
		String(input).substring(0, 1) == "8" ||
		String(input).substring(0, 1) == "9") {
		return true;
	} else {
		return false;
	}
}


function getCurrentPageNumber() {
	debug("initialize : getCurrentPageNumber");
	var pageNumber = 1;
	if(pd_lastSection == pd_currentSection) {
		pageNumber = pdGetCookie("V2pd_currentPageNumber");
	}

	setPageNumber(pageNumber);
	setLastSection(pd_currentSection);
	
	if(isBlank(pageNumber)) pageNumber = 1;
	return pageNumber;	
}
//*******************************************************************
//*********** END DISPLAY PAGE ELEMENTS RELATED TO SORTING **********
//*******************************************************************

//*******************************************************************
//****************** COMPARE AND SORT FUNCTIONS *********************
//*******************************************************************
function performSort() {
debug("performSort()");
	if(pd_sortBy == "default") sortProductArrayByNumeric("defaultSortId");
	else if(pd_sortBy == "defaultDesc") sortProductArrayByNumericDescending("defaultSortId");
	else if(pd_sortBy == "popularity") sortProductArrayByNumericDescending("orderCount");
	else if(pd_sortBy == "popularityDesc") sortProductArrayByNumeric("orderCount");
	else if(pd_sortBy == "name") sortProductArrayByGeneric("name");
	else if(pd_sortBy == "nameDesc") sortProductArrayByGenericDescending("name");
	else if(pd_sortBy == "brand") sortProductArrayByGeneric("brand");
	else if(pd_sortBy == "price") sortProductArrayByNumeric("price");
	else if(pd_sortBy == "priceDesc") sortProductArrayByNumericDescending("price");
	else if(pd_sortBy == "rating") {
		sortProductArrayByNumeric("id", true);
		sortProductArrayByNumeric("ratingCount");
		sortProductArrayByNumeric("rating", true);
	}
	else if(pd_sortBy == "ratingDesc") {
		sortProductArrayByNumeric("id", true);
		sortProductArrayByNumericDescending("ratingCount");
		sortProductArrayByNumericDescending("rating", true);
	} 
	else if(pd_sortBy == "casePackSize") sortProductArrayByGeneric("casePackSize");
	else if(pd_sortBy == "bestseller") sortProductArrayByNumericDescending("bestseller");
	else if(pd_sortBy == "sizeForm") sortProductArrayByGeneric("sizeForm");
	else if(pd_sortBy == "size") sortProductArrayBySize();
	else if(pd_sortBy == "score") sortProductArrayByNumericDescending("score");
	return false;
}

function getCurrentSortBy() {
	debug("initialize : getCurrentSortBy");
	var pd_sortBy = "";
	pd_currentSection = "";
	if(pd_lastSection == pd_currentSection) {
		pd_sortBy = pdGetCookie("V2pd_pagingSortBy");
	}
	if(isBlank(pd_sortBy)) pd_sortBy = pd_sortByDefault;
	return pd_sortBy;	
}

function sortProductArrayByGeneric(sortBy) {
debug("sortProductArrayByGeneric");
	pd_sortTemp = "id";
	pd_filteredDisplayList = pd_filteredDisplayList.sort(compareGeneric);
	pd_sortTemp = sortBy;
	pd_filteredDisplayList = pd_filteredDisplayList.sort(compareGeneric);
	return false;
}

function sortProductArrayByGenericDescending(sortBy) {
debug("sortProductArrayByGenericDescending");
	pd_sortTemp = "id";
	pd_filteredDisplayList = pd_filteredDisplayList.sort(compareGenericDescending);
	pd_sortTemp = sortBy;
	pd_filteredDisplayList = pd_filteredDisplayList.sort(compareGenericDescending);
	return false;
}

function sortProductArrayByNumeric(sortBy, suppressIdSort) {
debug("sortProductArrayByNumeric(" + sortBy + ")");
	if(suppressIdSort != true) {
		pd_sortTemp = "id";
		pd_filteredDisplayList = pd_filteredDisplayList.sort(compareGeneric);
	}
	pd_sortTemp = sortBy;
	pd_filteredDisplayList = pd_filteredDisplayList.sort(compareNumeric);
	return false;
}

function sortProductArrayByNumericDescending(sortBy, suppressIdSort) {
debug("sortProductArrayByNumericDescending(" + sortBy + ")");

	if(suppressIdSort != true) {
		pd_sortTemp = "id";
		pd_filteredDisplayList = pd_filteredDisplayList.sort(compareGeneric);
	}
	pd_sortTemp = sortBy;
	pd_filteredDisplayList = pd_filteredDisplayList.sort(compareNumericDescending);
	return false;
}

function compareGeneric(item1, item2) {
	if(isNumeric(String(item1[pd_sortTemp]).substring(0,1))) return compareNumeric(item1, item2);
	else {
		if(String(item1[pd_sortTemp]).toUpperCase() > String(item2[pd_sortTemp]).toUpperCase()) return 1;
		else if(String(item1[pd_sortTemp]).toUpperCase() < String(item2[pd_sortTemp]).toUpperCase()) return -1;
		else return 0;
	}
}
function compareGenericDescending(item1, item2) {
	if(String(item1[pd_sortTemp]).toUpperCase() > String(item2[pd_sortTemp]).toUpperCase()) return -1;
	else if(String(item1[pd_sortTemp]).toUpperCase() < String(item2[pd_sortTemp]).toUpperCase()) return 1;
	else return 0;
}

function compareNumeric(item1, item2) {
	if(parseInt(item1[pd_sortTemp]) > parseInt(item2[pd_sortTemp])) return 1;
	else if(parseInt(item1[pd_sortTemp]) < parseInt(item2[pd_sortTemp])) return -1;
	else return 0;
}
function compareNumericDescending(item1, item2) {
	if(parseInt(item1[pd_sortTemp]) < parseInt(item2[pd_sortTemp])) return 1;
	else if(parseInt(item1[pd_sortTemp]) > parseInt(item2[pd_sortTemp])) return -1;
	else return 0;
}

function compareSize(item1, item2) {
	if(getSizeSortValue(item1.size) > getSizeSortValue(item2.size)) return 1;
	else if(getSizeSortValue(item1.size) < getSizeSortValue(item2.size)) return -1;
	else return 0;
}

function getSizeSortValue(size) {
	size = size.toUpperCase();
	if(size == "XS" || size == "X-SMALL" || size == "EXTRA SMALL") sizeScore = 0;
	else if(size == "S" || size == "SMALL") sizeScore = 2;
	else if(size == "M" || size == "MEDIUM") sizeScore = 6;
	else if(size == "L" || size == "LARGE") sizeScore = 8;
	else if(size == "XL" || size == "EXTRA LARGE" || size == "X-LARGE") sizeScore = 10;
	else if(size - 0 == size) sizeScore = size;
	else sizeScore = 999;
	return sizeScore;
}
//*******************************************************************
//************** END COMPARE AND SORT FUNCTIONS *********************
//*******************************************************************

function debug(message) {
	if(pd_debugFlag == true) {
		alert(message);
	}
	return false;
}

/*	"getElementsByClassName"
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

function turnOffDisplayOfDataElements() {
	var elementArray = getElementsByClassName("displayDiv", "div");
	var item = new Object();
	for(item in elementArray) {
		if(elementArray.hasOwnProperty(item)) {
			elementArray[item].className = "displayDivHide";
		}
	}
	return true;
}

function setPageNumber(pageNumber) {
	pd_currentPageNumber = pageNumber;
	pdSetCookie("V2pd_currentPageNumber", pageNumber);
	return true;
}

function resetPageNumber() {
	if(pd_currentPageNumber != "all") setPageNumber(1);
	return true;
}

function getPagingDisplayMode() {
	var pagingDisplayMode = pdGetCookie("V2pd_pagingDisplayMode");
	if(isBlank(pagingDisplayMode)) pagingDisplayMode = pd_pagingDisplayModeDefault;
	if(isBlank(pagingDisplayMode)) pagingDisplayMode = "list";
	
	
	
	setPagingDisplayMode(pagingDisplayMode);
	return pagingDisplayMode;
}

function setPagingDisplayMode(pagingDisplayMode) {
	pd_pagingDisplayMode = pagingDisplayMode;
	pdSetCookie("V2pd_pagingDisplayMode", pagingDisplayMode);
	return true;
}

function setCurrentSection(section) {	
	pd_currentSection = section;	
	pdSetCookie("V2pd_currentSection", section);
	return true;
}

function setLastSection(section) {	
	pd_lastSection = section;	
	pdSetCookie("V2pd_lastSection", section);
	return true;
}

function convertHashToArray(hash) {
	var tempArray = new Array();
	var item = new Object();
	for(item in hash) {
		if(hash.hasOwnProperty(item)) {
			tempArray.push(hash[item]);
		}	
	}
	return tempArray;
}

function setPageNumberAndDisplayProductArray(pageNumber) {
	setPageNumber(pageNumber);

	//SCROLL TO TOP OF PAGING
	var pagingTop = document.getElementById('pagingTop');
	pagingTop.scrollIntoView();

	displayProductArray();
	return false;
}

//**************************************
//*** CONCATENATED FUNCTION WRAPPERS ***
//**************************************
function sortAndDisplayByDefault() {
	resetPageNumber();
	pd_sortBy = "default";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByDefaultDesc() {
	resetPageNumber();
	pd_sortBy = "defaultDesc";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByPopularity() {
	resetPageNumber();
	pd_sortBy = "popularity";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByPopularityDesc() {
	resetPageNumber();
	pd_sortBy = "popularityDesc";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByBrand() {
	resetPageNumber();
	pd_sortBy = "brand";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByName() {
	resetPageNumber();
	pd_sortBy = "name";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByNameDesc() {
	resetPageNumber();
	pd_sortBy = "nameDesc";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByPrice() {
	resetPageNumber();
	pd_sortBy = "price";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByPriceDesc() {
	resetPageNumber();
	pd_sortBy = "priceDesc";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByRating() {
	resetPageNumber();
	pd_sortBy = "rating";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByRatingDesc() {
	resetPageNumber();
	pd_sortBy = "ratingDesc";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByCasePackSize() {
	resetPageNumber();
	pd_sortBy = "casePackSize";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayBySize() {
	resetPageNumber();
	pd_sortBy = "size";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByScore() {
	resetPageNumber();
	pd_sortBy = "score";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}
function sortAndDisplayByBestseller() {
	resetPageNumber();
	pd_sortBy = "bestseller";
	renderControlPanelSortLinks();
	performSort();
	displayProductArray();
}

//************************
//**** BUTTON FILTERS ****
//************************
function setAndPerformFilterByStoneButton() {
debug("setAndPerformFilterByStoneButton()");
	pd_filterByStoneButton = !pd_filterByStoneButton;
	renderControlPanelFilterButtons();
	performFilter();
}
function setAndPerformFilterByNonStoneButton() {
debug("setAndPerformFilterByNonStoneButton()");
	pd_filterByNonStoneButton = !pd_filterByNonStoneButton;
	renderControlPanelFilterButtons();
	performFilter();
}


function pdPagingFormatCurrency(num, includeDollarSign) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	
	var returnValue = (((sign)?'':'-') + num + '.' + cents);
	if(includeDollarSign == true) returnValue = "$" + returnValue;	
	return returnValue;
}

//*************************************************
//***** COPYRIGHT 2005, PRACTICAL DATA, INC. ******
//***** - UNAUTHORIZED USE IS PROHIBITED **********
//*************************************************
function pdGetCookie(cookieName) {
	var allCookies = String(document.cookie);
	var cookieStart = allCookies.indexOf(cookieName + "=");
	if(cookieStart == -1) return "";
	cookieStart = cookieStart + cookieName.length + 1;
	var cookieEnd = allCookies.indexOf(";", cookieStart);
	if(cookieEnd == -1) cookieEnd = allCookies.length;
	var cookieValue = allCookies.substring(cookieStart, cookieEnd);
	cookieValue = decodeURIComponent(cookieValue);
	return cookieValue;
}
function pdSetCookie(cookieName, cookieValue, cookieDomain, cookiePath, expirationDate) {
	if(isBlank(cookieDomain)) cookieDomain = getCurrentDomainName();
	if(isBlank(cookiePath)) cookiePath = "/";
	var cookieString = encodeURIComponent(cookieName) + "=" + encodeURIComponent(cookieValue) + ";domain=" + cookieDomain + ";path=" + cookiePath;
	if(!isBlank(expirationDate)) {
		cookieString += ";expires=" + expirationDate.toGMTString();
	}
	document.cookie = cookieString;
	return true;
}

function getCurrentDomainName() {
	var url = String(location);
	var domainName = extractDomain(url);
	return domainName;
}

function extractDomain(url) {
	var url = url.replace("http://", "");
	var slashIndex = url.indexOf("/");
	if(slashIndex == -1) slashIndex = url.length;
	var url = url.substring(0, slashIndex);
	var urlSectionArray = url.split('.');
	var urlSectionArrayLength = urlSectionArray.length;
	var domainName = "";
	for(var i=urlSectionArrayLength - 2;i<urlSectionArrayLength; i++) {
		domainName += "." + urlSectionArray[i];
	}
	return domainName;
}

function isBlank(item) {
	item = String(item).toLowerCase();
	if(item == "undefined" || item == "" || item == "null") return true;
	else return false;
}

function pdAddEvent(obj, evType, fn) {
	
//alert("pdAddEvent:" + obj.name + ":" + obj.id);

	if (obj.addEventListener) {
   		obj.addEventListener(evType, fn, false);
   		return true;
	} else if (obj.attachEvent) {
   		var r = obj.attachEvent("on"+evType, fn);
   		return r;
 	} else {
   		return false;
 	}
}
function pdRemoveEvent(obj, type, fn ) {
	if (obj.detachEvent) {
		obj.detachEvent('on'+type, fn);
		obj[type+fn] = null;
	} else {
		obj.removeEventListener( type, fn, false);
	}
}
function pdRemoveAllChangeEvents(obj) {
	obj.OnChange.remove();
}

function parseBoolean(input, returnType) {
	var trueValue = true;
	var falseValue = false;
	if(returnType == "YESNO" || returnType == "YES/NO") {
		trueValue = "yes";
		falseValue = "no";
	}
	input = String(input).toUpperCase();
	if(input == "TRUE" || input == "YES" || input == "1" || input == "T" || input == "Y") return trueValue;
	else if(input == "FALSE" || input == "NO" || input == "0" || input == "F" || input == "N") return falseValue;
	else return false;
}


/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

var MD5 = (function() {
/*
 * Calculate the MD5 of an array of little-endian words, and a bit length
 */
function core_md5(x, len) {
  /* append padding */
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16) {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return [a, b, c, d];
}

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function md5_cmn(q, a, b, x, s, t) {
  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t) {
  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t) {
  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t) {
  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t) {
  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
 * Calculate the HMAC-MD5, of a key and some data
 */
function core_hmac_md5(key, data) {
  var bkey = str2binl(key);
  if(bkey.length > 16) bkey = core_md5(bkey, key.length * MD5.chrsz);

  var ipad = [], opad = [];
  for(var i = 0; i < 16; i++) {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * MD5.chrsz);
  return core_md5(opad.concat(hash), 512 + 128);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y) {
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function bit_rol(num, cnt) {
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert a string to an array of little-endian words
 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
 */
function str2binl(str) {
  var bin = [], chrsz = MD5.chrsz;
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

/*
 * Convert an array of little-endian words to a string
 */
function binl2str(bin) {
  var str = "", chrsz = MD5.chrsz;
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
  return str;
}

/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray) {
  var hex_tab = MD5.hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++) {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of little-endian words to a base-64 string
 */
function binl2b64(binarray) {
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3) {
    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++) {
      if(i * 8 + j * 6 > binarray.length * 32) str += MD5.b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

  return {
/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
    hexcase: 0, // hex output format. 0 - lowercase; 1 - uppercase
    b64pad: "", // base-64 pad character. "=" for strict RFC compliance
    chrsz: 8,   // bits per input character. 8 - ASCII; 16 - Unicode

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
    hex:function( s ) { 
      return binl2hex( core_md5( str2binl( s ), s.length * MD5.chrsz ) );
    },

    base64:function( s ) {
      return binl2b64( core_md5( str2binl( s ), s.length * MD5.chrsz ) );
    },

    string:function( s ) {
      return binl2str( core_md5( str2binl( s ), s.length * MD5.chrsz ) );
    },

    hmac:{
      hex:function( key, data ) {
        return binl2hex( core_hmac_md5( key, data ) );
      },

      base64:function( key, data ) {
        return binl2b64( core_hmac_md5( key, data ) );
      },

      string:function( key, data ) {
        return binl2str( core_hmac_md5( key, data ) );
      }
    },

    test:function() { // Perform a simple self-test to see if the VM is working
      return this.hex("abc") == "900150983cd24fb0d6963f7d28e17f72";
    }
  };
})();

function isNumeric(input) {
   return (input - 0) == input && input.length > 0;
}

//***********************************************
//******** VIEW PRODUCT ARRAY AS GRID ***********
//***********************************************
function genProductHtmlGridItem(itemData){

	//*** PRICE DISPLAY LOGIC ***
	var priceReg = itemData["priceReg"] - 0;
	var priceSale = itemData["priceSale"] - 0;
	if(!priceSale) priceSale = priceReg;
	var priceDisplay = '';
	var onSale = true;
	
	if(!isBlank(itemData["mapPrice"])) {
		priceDisplay = '<div class="pagedPriceDiv"><span class="pagedPriceSale">';
		if(itemData["optionPriceChange"] == "T") priceDisplay += 'from ';
		priceDisplay += '<strike>' + pdPagingFormatCurrency(itemData["mapPrice"]-0,true) + '</strike></span>';
		priceDisplay += '<div style="color:#404040;font-size:11px">Add to Cart to<br>see Discounted Price</div>';
		//priceDisplay += itemData["mapPriceLabel"];
		priceDisplay += '</div>';
		onSale = false;
	} else {
		if(priceReg > priceSale){
			priceDisplay = '<div class="pagedPriceDiv"><div class="pagedPrice">' + pd_regPriceText + '<strike>' + ' ' + pdPagingFormatCurrency(priceReg,true) + '</strike></div><div class="pagedPriceSale">' + pd_salePriceText + ' ' + pdPagingFormatCurrency(itemData["price"]-0,true) + '</div></div>';
			onSale = true;
		}else if(priceReg > 0){
			priceDisplay = '<div class="pagedPriceDiv"><span class="pagedPriceSale">';
			if(itemData["optionPriceChange"] == "T") priceDisplay += 'from ';
			priceDisplay += pdPagingFormatCurrency(itemData["price"]-0,true) + '</span></div>';
			onSale = false;
		}
	
	}

	//**** LINK/PRICE DISPLAY ****
	var linkHtml = '<a href="' + itemData["itemId"] + '.html" class="pagedLink">';

	
	//*****************************************
	//*** QUICK SHOP ENABLED FOR THIS ITEM? ***
	//*****************************************
	var pd_quickShopApplies = false;
	if((!isBlank(priceReg) || !isBlank(priceSale)) && pd_quickShopEnabled == true) pd_quickShopApplies = true;
	//*** USE BLANK TITLE IF QUICK SHOP DOES NOT APPLY TO THIS ITEM ***
	var tempTitle = itemData["itemId"];
	if(pd_quickShopApplies == false){tempTitle = "";}

	var html = '';
	html += '<div class="pagingItemImgGrid" title="' + tempTitle +'">' + linkHtml + '<img src="' + itemData["image"] + '" border="0"></a></div>';
	
	if(!isBlank(itemData["code"])) {
		html += linkHtml + itemData["name"] + ' (' + itemData["code"] + ')</a>';
	} else {
		html += linkHtml + itemData["name"] + '</a>';
	}
	//html += '<div class="pagingAbstract">' + itemData["abstract"] + '</div>';

	//******* RATING DISPLAY ******
	var rating = itemData["rating"] - 0;
	var ratingCount = itemData["ratingCount"] - 0;
	var ratingCountS = '';
	if(ratingCount > 1){ratingCountS = 's'}
	
	if(rating  > 0){
		html += '<div class="pdPagingRating">';
		html += '<img src="' + pd_imageUrl + 'rating/' + rating + '.gif" border="0">';
		if(ratingCount > 0 && pd_enableRatingCount == true ){
			html += '<span>(' + ratingCount + ' rating' + ratingCountS + ')</span>';
		}
		html += '</div>';
	}
	
	//**** PRICE DISPLAY *********
	html += priceDisplay;
	
	
	//********************************************************
	//*** RETRIEVE DISCOUNT AND CALCULATE DISCOUNTED PRICE ***
	//********************************************************
	var discountPercentage = 0;
	var discountOption = "";
	if(pd_myAccountPricingEnabled && (pd_myAccountPricingNoDiscountForSaleItems == false || (pd_myAccountPricingNoDiscountForSaleItems == true && onSale == false))) {	//*** RESTRICT DISCOUNT TO ONSALE ITEMS
		try {
			discountPercentage = getDiscountPercentage(itemData["itemId"]);
			var pipeIndex = String(discountPercentage).indexOf("|");
			if(pipeIndex > -1) discountPercentage = String(discountPercentage).substring(0, pipeIndex) - 0;	//*** IGNORE QTY PRICING
		} catch(e) {
			//*** IGNORE IF NOT AVAILABLE 
		}
	}
	
	if(discountPercentage > 0) {
		var discountedPrice = priceSale - (priceSale * (discountPercentage/100));		
		html += '<div class="pagedPriceYourPrice">';
		html += pd_myAccountPricingText + pdPagingFormatCurrency(discountedPrice, true);
		html += "<div>";
		
		var discountAmount = Math.round((priceSale - discountedPrice) * 100)/100;
		discountOption = '<input type="hidden" name="Discount" value="(- ' + pdPagingFormatCurrency(discountAmount) + ')">';		
	}

	//****************************************************************************************//
	//**** DISPLAY ADD TO CART BUTTON IF ITEM IS ORDERABLE/ DOES NOT HAVE OPTIONS ************//
	//****************************************************************************************//
	if(pd_showGridViewAddToCart){
		html += '<div style="margin-top:6px;">';
		if((!isBlank(itemData["priceReg"]) || !isBlank(itemData["priceSale"])) && itemData["orderable"] == "T" && itemData["hasOptions"] != "T"){
			html += '<form method="POST" style="display:inline;" action="http://order.store.yahoo.net/cgi-bin/wg-order?' + pd_yahooStoreId + '+' + itemData["itemId"] + '">';
			html += '<input name="vwitem" type="hidden" value="' + itemData["itemId"] + '">';
			html += '<input name="vwcatalog" type="hidden" value="' + pd_yahooStoreId + '">';
			html += discountOption;		
			html += '<input type="image" src="' + pd_imageUrl + 'pagingAddCart.gif" border="0">';
			html += '</form>';
		} else if((!isBlank(itemData["priceReg"]) || !isBlank(itemData["priceSale"])) && itemData["orderable"] == "T") {
			html += linkHtml + '<img src="' + pd_imageUrl + 'pagingMoreInfo.gif" border="0" alt="more info">' + '</a>';
		} else if(itemData["orderable"] != "T") {
			html += linkHtml + '<img src="' + pd_imageUrl + 'pagingOutOfStock.gif" border="0">' + '</a>';
		}
		html += '</div>';
	}	
	
	return html;
}

function getStoreCode() {return "yhst-63025373064411";}
