function paging(pageId) {
	strPagingParam = objSBS.strPagingParam;
	strURL = window.location.href;
	strURL = removeQueryStringParam(strURL,strPagingParam);
	strURL += "&" + strPagingParam + "=" + pageId;
	window.location.href= strURL;
}

var objSBS = {};

objSBS.getTabStateURL = function(state) {
	var strURL = window.location.href;
	strURL = removeQueryStringParam(strURL,'actFltr');
	strURL = removeQueryStringParam(strURL,'pageID');
	strURL += "&actFltr="+state;
	return strURL;
}

objSBS.setCategoryAllTab = function() {
	window.location.href = objSBS.getTabStateURL(false);
}

objSBS.setCategoryFilterTab = function() {
	window.location.href = objSBS.getTabStateURL(true);
}

objSBS.setCategoryReset = function() {
    var cid = getQuerystringParam('cid');
    objSBS.strCategoryResetUrl = '?cid=' + cid + '&sizDivReset=true';
    window.location.href = window.location.pathname + objSBS.strCategoryResetUrl;
}


objSBS.initializeSBS = function() {
    objSBS.initialFormFieldsOptions = {};
    $$('li.sizeFinderDropdowns select').each(function(dropdowns) {
        objSBS.initialFormFieldsOptions[dropdowns.id] = $A(dropdowns.options);
    });

	for (var prop in objSBS.objSmartDropDowns.objUserSelections.arraySizeCategories) {
		if (!isPrototypeSafe(prop, objSBS.objSmartDropDowns.objUserSelections.arraySizeCategories)) continue;
		var objSizeSelection = objSBS.objSmartDropDowns.objUserSelections.arraySizeCategories[prop];
		var arrayTmpUserSelection = prop.split(",");
		var strSizeCategoryId = arrayTmpUserSelection[0];
		var strSizeDimensionId = arrayTmpUserSelection[1];
		var strFormFieldId = "sizeCategory" + strSizeCategoryId + "sizeDimension" + strSizeDimensionId;
		var objFormField = $(strFormFieldId);
        
		var strBaseSizeId = objSizeSelection.strBaseSizeId;
		if(objFormField){
			for (var i=0;i < objFormField.options.length; i++) {
				objFormFieldOption = objFormField.options[i];
				if (objFormFieldOption.value == strBaseSizeId) {
					objFormFieldOption.selected = true;
					objFormField.className = "active";
					objFormField.selectedSizeId = strBaseSizeId;
					break;
				}
			}
			objFormField.onchange();
		}
	}

	for (var sizeCatId in objSBS.objSmartDropDowns.arraySizeCategories) {
		if (!isPrototypeSafe(sizeCatId, objSBS.objSmartDropDowns.arraySizeCategories)) continue;
		var sizeCat = objSBS.objSmartDropDowns.arraySizeCategories[sizeCatId];
		if (undefined == objSBS.objSmartDropDowns.objUserSelections.arraySizeCategories[sizeCatId+",1"]) {
			var objDD = $("sizeCategory" + sizeCatId + "sizeDimension1");
			objDD.options[0].selected = true;
		}
		if (sizeCat.objSizeDimension.objSizeDimensionChild) {
			if (undefined == objSBS.objSmartDropDowns.objUserSelections.arraySizeCategories[sizeCatId+",2"]) {
				objDD = $("sizeCategory" + sizeCatId + "sizeDimension2");
				objDD.options[0].selected = true;
			}
		}
	}
}

objSBS.setFilterToolsSelectionUrl = function() {
	with (objSBS.objSmartDropDowns.objUserSelections) {
		hasSizeSelection = false;
		strCategoryFilteredUrl = "";
		strCategorySortValue = "";
	}
	for (var prop in objSBS.objSmartDropDowns.arraySizeCategories) {
		if (!isPrototypeSafe(prop, objSBS.objSmartDropDowns.arraySizeCategories)) continue;
		var strSizeCategoryId = objSBS.objSmartDropDowns.arraySizeCategories[prop].strSizeCategoryId;
		var strFormFieldId = "sizeCategory" + strSizeCategoryId + "sizeDimension" + objSBS.objSmartDropDowns.arraySizeCategories[prop].objSizeDimension.strSizeDimensionId;
		var objFormField = eval("document.forms.filterTools." + strFormFieldId);
		var strSizeDimensionValue = "";
		var strRelativeSizeDimensionValue = "";
		if (objFormField.options && objFormField.options[objFormField.selectedIndex].value != "") {
			objSBS.objSmartDropDowns.objUserSelections.hasSizeSelection = true;
			strSizeDimensionValue = objFormField.options[objFormField.selectedIndex].value;
		}
		// 1b) Check if 2 size dimensions.
		if (objSBS.objSmartDropDowns.arraySizeCategories[prop].objSizeDimension.objSizeDimensionChild) {
			var strRelativeFormFieldId = "sizeCategory" + prop + "sizeDimension" + objSBS.objSmartDropDowns.arraySizeCategories[prop].objSizeDimension.objSizeDimensionChild.strSizeDimensionId;
			var objRelativeFormField = eval("document.forms.filterTools." + strRelativeFormFieldId);
			if (objRelativeFormField.value != "") {
				objSBS.objSmartDropDowns.objUserSelections.hasSizeSelection = true;
				strRelativeSizeDimensionValue = objRelativeFormField.value;
			}
		}

		with (objSBS.objSmartDropDowns.objUserSelections) {
			var strTmpUrl = "szCatId=" + strSizeCategoryId + "&szCatValue" + strSizeCategoryId + "=" + strSizeDimensionValue + "," + strRelativeSizeDimensionValue;
			// 1c) Conditional needed because there may be multiple size
			// 	categories displayed on the page with multiple options which will require the URLs to append.
			if (strCategoryFilteredUrl != "") {
				strCategoryFilteredUrl = strCategoryFilteredUrl + "&" + strTmpUrl;
			}
			else {
				strCategoryFilteredUrl = objSBS.strCategoryFilteredUrl + strTmpUrl;
			}

		}
	}
	// 2) Append sort value to URLs outside of loop so values are only recorded once in string.
	// 2a) Append profile ID value outside of loop so values are only recorded once in string
	//			only if a profile selection has been detected.
	with (objSBS.objSmartDropDowns.objUserSelections) {
		strCategorySortValue = (document.forms.filterTools.sortBy ? document.forms.filterTools.sortBy.value : 0);
		strCategoryFilteredUrl = strCategoryFilteredUrl + "&sortBy=" + strCategorySortValue
	}
}

objSBS.submitFilterTools = function() {
	if (objSBS.objSmartDropDowns.objUserSelections.hasSizeSelection) {
		document.fire("shopBySize:request");
        window.location.href = objSBS.objSmartDropDowns.objUserSelections.strCategoryFilteredUrl;
	} else {
		document.getElementById("noSelectionError").style.display = "block";
	}
}

objSBS.SmartDropdowns = function(hasFilterTab, isFilteredTabSelected, arraySizeCategories, objUserSelections) {
	this.hasFilterTab = hasFilterTab;
	this.isFilteredTabSelected = isFilteredTabSelected;

	if (!arraySizeCategories) {
		this.arraySizeCategories = new Array();
	}
	else {
		this.arraySizeCategories = arraySizeCategories;
	}
	if (!objUserSelections) {
		this.objUserSelections = new objSBS.UserSelections(false, "", "", "");
	}
	else {
		this.objUserSelections = objUserSelections;
	}
}

objSBS.UserSelections = function(hasSizeSelections, strCategoryFilteredUrl, strCategoryNonFilteredUrl, strSmsSelectionUrl, arraySizeCategories) {
	this.hasSizeSelections = hasSizeSelections;
	this.strCategoryFilteredUrl = strCategoryFilteredUrl;
	this.strCategoryNonFilteredUrl = strCategoryNonFilteredUrl;
	this.strSmsSelectionUrl = strSmsSelectionUrl;
	if (!arraySizeCategories) {
		this.arraySizeCategories = new Array();
	}
	else {
	 this.arraySizeCategories = arraySizeCategories;
	}
}

objSBS.SizeCategory = function(strSizeCategoryId, strSizeCategoryName, objSizeDimension) {
	this.strSizeCategoryId = strSizeCategoryId;
	this.strSizeCategoryName = strSizeCategoryName;
	this.objSizeDimension = objSizeDimension;
}

objSBS.SizeDimension = function(strSizeDimensionId, strSizeDimensionName, arrayBaseSizes, objSizeDimensionChild, arraySizeDimensionChildBaseSizes) {
	this.strSizeDimensionId = strSizeDimensionId;
	this.strSizeDimensionName = strSizeDimensionName;
	this.objSizeDimensionChild = objSizeDimensionChild;

	if (!arrayBaseSizes) {
		this.arrayBaseSizes = new Array();
	}
	else {
		this.arrayBaseSizes = arrayBaseSizes;
	}

	if (!arraySizeDimensionChildBaseSizes) {
		this.arraySizeDimensionChildBaseSizes = new Array();
	}
	else {
		this.arraySizeDimensionChildBaseSizes = arraySizeDimensionChildBaseSizes;
	}

}

objSBS.BaseSize = function(strBaseSizeId, strBaseSizeName, strBaseSizesOptimizedString, arrayBaseSizeChildren, arrayBaseSizeParents) {
	this.strBaseSizeId = strBaseSizeId;
	this.strBaseSizeName = strBaseSizeName;
	this.strBaseSizesOptimizedString = strBaseSizesOptimizedString;
	if (!arrayBaseSizeChildren) {
		this.arrayBaseSizeChildren = new Array();
	}
	else {
		this.arrayBaseSizeChildren = arrayBaseSizeChildren;
	}

	if (!arrayBaseSizeParents) {
		this.arrayBaseSizeParents = new Array();
	}
	else {
		this.arrayBaseSizeParents = arrayBaseSizeParents;
	}
}

objSBS.processTmpBaseSizeChildren = function(objBaseSize, strTmpBaseSizeChildren) {
	// 1) Parse strTmpBaseSizeChildren into array arrayTmpBaseSizeChildren.
	// 2) Loop through arrayTmpBaseSizeChildren and create BaseSize objects and add to
	//		objBaseSize.arrayBaseSizeChildren for storage.
	var arrayTmpBaseSizeChildren = strTmpBaseSizeChildren.split("||");
	for (var i=0; i < arrayTmpBaseSizeChildren.length; i++) {
		var arrayBaseSizeChild = arrayTmpBaseSizeChildren[i].split("^,^");
		var strBaseSizeId = arrayBaseSizeChild[0];
		var strBaseSizeName = arrayBaseSizeChild[1];
		var objTempBaseSizeChild = new objSBS.BaseSize(strBaseSizeId, strBaseSizeName.unescapeHTML().replace("&#34;", "\"").replace("&#034;", "\""));
		objBaseSize.arrayBaseSizeChildren[i] = objTempBaseSizeChild;
	}
}

objSBS.processSizeDimensionChildBaseSizes = function(objSizeDimension, strTmpBaseSizeChildren) {
	// 1) Parse strTmpBaseSizeChildren into array arrayTmpBaseSizeChildren.
	// 2) Loop through arrayTmpBaseSizeChildren and create BaseSize objects and add to
	//		objSizeDimension.arraySizeDimensionChildBaseSizes for storage.
	var arrayTmpBaseSizeChildren = strTmpBaseSizeChildren.split("||");
	for (var i=0; i < arrayTmpBaseSizeChildren.length; i++) {
		var arrayBaseSizeChild = arrayTmpBaseSizeChildren[i].split("^,^");
		var strBaseSizeId = arrayBaseSizeChild[0];
		var strBaseSizeName = arrayBaseSizeChild[1];
		var objTempBaseSizeChild = new objSBS.BaseSize(strBaseSizeId, strBaseSizeName.unescapeHTML().replace("&#34;", "\"").replace("&#034;", "\""));
		objSizeDimension.arraySizeDimensionChildBaseSizes[strBaseSizeId] = objTempBaseSizeChild;
	}
}

objSBS.processSizeDimensionChildBaseSizeParents = function(arraySizeDimensionChildBaseSizes, arrayBaseSizes) {
	for (var prop in arraySizeDimensionChildBaseSizes) {
		if (!isPrototypeSafe(prop, arraySizeDimensionChildBaseSizes)) continue;
		var i = 0;
		var strTmpSizeDimensionChildBaseSizeId = arraySizeDimensionChildBaseSizes[prop].strBaseSizeId;
		for (var prop2 in arrayBaseSizes) {
			if (!isPrototypeSafe(prop2, arrayBaseSizes)) continue;
			// Solve 1st position parse bug by adding "||" to beginning of strBaseSizesOptimizedString.
			// This is needed because the absolute parse pattern is "||<id>^,^"
			strTmpBaseSizesOptimizedString = "||" + arrayBaseSizes[prop2].strBaseSizesOptimizedString;
			if (strTmpBaseSizesOptimizedString.indexOf("||" + strTmpSizeDimensionChildBaseSizeId + "^,^") > -1) {
				var hasParentMatch = true;
				// Add Parent reference to parent array index for Child BaseSize.
				arraySizeDimensionChildBaseSizes[prop].arrayBaseSizeParents[i] = arrayBaseSizes[prop2];
				i++;
				hasParentMatch = false;
			}
		}
	}
}

objSBS.setSizeSelectionOptions = function(
	intSizeDimensionNodeDepth,
	strSizeCategoryId,
	strSizeDimensionId,
	objFormField,
	strRelativeSizeDimensionId) {
    var selectedVal = objFormField.value;
    var relFormField = $('sizeCategory' + strSizeCategoryId + 'sizeDimension' + strRelativeSizeDimensionId);

    if(selectedVal == '') {
        objFormField.options.length = relFormField.options.length = 0;
        
        objSBS.initialFormFieldsOptions[objFormField.id].each(function (option) {
            objFormField.options.add(option);
        });
        objSBS.initialFormFieldsOptions[relFormField.id].each(function (option) {
            relFormField.options.add(option);
        });
        return;
    }
	objSBS.objSmartDropDowns.objSizeSelectionOptions = {
        intSizeDimensionNodeDepth : intSizeDimensionNodeDepth,
        strSizeCategoryId : strSizeCategoryId,
        strSizeDimensionId : strSizeDimensionId,
        objFormField : objFormField,
        strRelativeSizeDimensionId : strRelativeSizeDimensionId
    };

    if(relFormField) {
        var baseSize = intSizeDimensionNodeDepth == 1 ? 'arrayBaseSizes' : 'arraySizeDimensionChildBaseSizes';
        var childrenName = intSizeDimensionNodeDepth == 1 ? 'arrayBaseSizeChildren' : 'arrayBaseSizeParents';

        Object.extend(objSBS.objSmartDropDowns.objSizeSelectionOptions, {
            strSizeSelectionValue : selectedVal,
            hasResetSizeOptions : selectedVal != "",
            objRelativeFormField : relFormField,
            strRelativeSizeSelectionValue : relFormField.value,
            arrayRelativeOptionsSource : selectedVal != "" ?
                objSBS.objSmartDropDowns.arraySizeCategories[strSizeCategoryId].objSizeDimension[baseSize][selectedVal][childrenName] :
                objSBS.objSmartDropDowns.arraySizeCategories[strSizeCategoryId].objSizeDimension[baseSize]
        });
        objSBS.setOptionsList();
    }

	objSBS.setFilterToolsSelectionUrl();
	objFormField.className = (objFormField.selectedSizeId == objFormField.options[objFormField.selectedIndex].value ? "active" : "");
}

objSBS.setOptionsList = function() {
    var selectionOptions = objSBS.objSmartDropDowns.objSizeSelectionOptions;
    var formField = selectionOptions.objRelativeFormField;
    var selected = selectionOptions.strRelativeSizeSelectionValue;
    formField.options.length = 0;

    formField.options.add(new Option(objSBS.strSelectSizeText, "", true, false));
    selectionOptions.arrayRelativeOptionsSource.each(function(val,i) {
        formField.options.add(new Option(val.strBaseSizeName.unescapeHTML().replace("&#34;", "\"").replace("&#034;", "\""), val.strBaseSizeId, false, selected == val.strBaseSizeId));
    });
}

objSBS.resetRelativeBaseSizes = function() {
	this.arraySizeDimensionChildBaseSizes.length = 0;
}

objSBS.objSizeSelection = function(strBaseSizeId,strSizeDimensionValueId) {
	this.strBaseSizeId = strBaseSizeId;
	this.strSizeDimensionValueId = strSizeDimensionValueId;
}

objSBS.openSizeChart = function(cid) {
   var query = (cid) ? "?cid="+cid : "";
   objSBS.objSizeChartWindow = window.open("/browse/sizeChart.do"+query,
           "SBSsizeChart","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width="
           + brandProperties.SIZECHARTWINDOWWIDTH+",height=" + brandProperties.SIZECHARTWINDOWHEIGHT);
}

objSBS.closeRelatedWindows = function() {
  if (objSBS.objSizeChartWindow && !objSBS.objSizeChartWindow.closed) objSBS.objSizeChartWindow.close();
}

function pageOnLoadFunctions() {
	if (objSBS.isActive) {
		var isShopBySizeSet = false;
		if (window["categoryInfo"]) {
			if (categoryInfo.categoryPageCachingActive == "true") {
				isShopBySizeSet = true;
			}
		}
		if (!isShopBySizeSet) {
			objSBS.initializeSBS();
		}
	}
	// if (objSBS.isActive) objSBS.initializeSBS();
	if (Survey && Survey.popSurvey) Survey.popSurvey('category');
}

function pageOnUnLoadFunctions() {
	if(window['objSBS']) { objSBS.closeRelatedWindows(); }
}

