var quickLook = {
    productFunctionPath: '/gid/js/common/layouts/en/productFunctions.js',
    QuickLookBtnAdj: {'1':0,'2':0,'3':0,'4':0,'10':0,'7':0,'8':0,'9':0,'20':0,'21':0},
    QuickLookLauncherMap : $H({
	   objQuickLook : 'quickLookWindow',
	   objQuickLookLauncher : "quickLookLauncher"}),
	initializeQuickLook : function() {
		gidLib.loadDomObjMap(this, this.QuickLookLauncherMap);
		if (window["objSBS"] && objSBS.isFilterEngaged) this.isFromSBS = true;
        this.isLoaded = true;
	},
    setUserSizeSelections : function(strSizeCategoryDimension,strSizeSelections) {
		if (!this.objUserSizeSelections) this.objUserSizeSelections = {};
		var objUserSelections = this.objUserSizeSelections;
		if (!objUserSelections.arraySizeCategories) objUserSelections.arraySizeCategories = [];
		with(objUserSelections) {
			var arraySizeSelections = strSizeSelections.split("||");
			var arraySizeValues = arraySizeSelections[0].split("^,^");
			arraySizeCategories[strSizeCategoryDimension] = {strSizeDimensionValueId: arraySizeValues[0], strSizeDimensionAlphaSize: arraySizeValues[1]};
		}
	},
    loadQuickLookCallback: function(obj,periodicalExecuterRef) {
        if(!quickLook.initializeData) return false;
        objGIDPageViewAdapter.initializeGidProducts();
        periodicalExecuterRef.stop();
        quickLook.isLoaded = true;
        if(quickLook.relaunchQuickLook) { quickLook.relaunchQuickLook = false; quickLook.launchQuickLook(); }
        return true;
    },
    isQuickLookOpen : false,
    initializing: false,
    loadQuickLookModule: function(brandCode) {
        if(quickLook.initializing) return;
        quickLook.initializing = true;
        gidLib.loadScript({
            callerObject:this, src:this.productFunctionPath,
            timeout:{
                handler:function() {return true; },
                args:null,
                timeDelay:2
            },
            callback:{
                handler:this.loadQuickLookCallback,
                args:this,
                timeDelay:1
            }
        });
    },
    launchQuickLook: function() { this.relaunchQuickLook = true; },
	openQuickLookLauncher : function(strProductId,strDefaultStyleColor,strCategoryId,strVariantId,targetImg, isCrossSell, brandCode, customProperties) {

		if (this.isLoaded) {
			var blnOpen = false;
			if (this.isQuickLookOpen) {
				if (this.objP.strProductId != strProductId) blnOpen = true;
			} else {
				blnOpen = true;
			}
            brandCode = brandCode||gidBrandSiteConstruct.currentBrandCode;
            
            var constants = customProperties || brandProperties;

            if (blnOpen) {
				var targetObj = $(targetImg);
                if(!targetObj) return;
                var cumulativeOffset = Position.cumulativeOffset(targetObj);
                var realOffset =  Position.realOffset(targetObj);
                var scrollTop = (document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
                var scrollLeft = (document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
                var position = [cumulativeOffset[0]-(realOffset[0]-scrollLeft),cumulativeOffset[1]-(realOffset[1]-scrollTop)];
				var target = this.objQuickLookTarget = {
					strProductId : strProductId,
					strDefaultStyleColor : strDefaultStyleColor,
					strCategoryId : strCategoryId,
					strVariantId : strVariantId,
					position : position,
					isCrossSell: isCrossSell,
					obj : targetObj,
                    brandCode: brandCode
                };
                this.quickLookLauncherBoundBox = {top:target.position[1]+4,left:target.position[0]+4,right:target.position[0] + constants.PRODUCTIMGWIDTH - 4,btm:target.position[1] + constants.PRODUCTIMGHEIGHT - 4};
                this.objQuickLookLauncher.setStyle({left: (target.position[0] + (constants.QUICKLOOKTARGETXPOS) ) + 'px',
					top: (target.position[1] + this.QuickLookBtnAdj[brandCode] + (constants.QUICKLOOKTARGETYPOS) ) + 'px', visibility: 'visible'});

                if(!quickLook.initializeData) {
                    this.loadQuickLookModule(brandCode);
                }
            }
		}
	},
    logTeaLeafEvent: function(itemSource, eventType) {
        var tlevt = new TeaLeaf.Event("GUI", eventType);

        var tlAddNameValueArray = ["Name", itemSource.name,
                                     "Id", itemSource.id,
                                     "ElementType", itemSource.type,
                                     "TagName", itemSource.tagName,
                                     "XPath", TeaLeaf.Client.tlGetXPathFromNode(itemSource)];
        tlevt.tlAddData(tlAddNameValueArray);
        tlevt.tlSend();
    },

	closeQuickLookLauncher : function(e) {
		if(e && this.quickLookLauncherBoundBox && !gidLib.isMouseOut(Event.pointerX(e), Event.pointerY(e), this.quickLookLauncherBoundBox)) {
			return;
		}
		if(this.isLoaded && this.objQuickLookTarget) {
			this.objQuickLookLauncher.style.visibility = 'hidden';
			this.objQuickLookLauncher.src = '/gid/assets/common/quicklook/'+brandConst.BRAND_LOCALE+'/button_quicklook_launcher_on.gif';
			this.objQuickLookTarget.strProductId = 0;
		}
	}
};

var applicationOnLoadFunctions = function() {
    setSideNavHeight();
    quickLook.initializeQuickLook();
};

var applicationOnUnLoadFunctions = function() {
    if(window['quickLook'] && quickLook.closeRelatedWindows) { quickLook.closeRelatedWindows(); }
}

Event.observe(window,'load', applicationOnLoadFunctions);
Event.observe(window,'beforeunload', applicationOnUnLoadFunctions);

/* Search Refinements */

function Search(
	strRefinementGroups,
	strSelectedRefinements,
	strAbstractRefinementGroupKeys,
	strAbstractSelectedRefinementKeys) {

	this.strRefinementGroups = strRefinementGroups;
	this.strSelectedRefinements = strSelectedRefinements;
	this.strAbstractRefinementGroupKeys = strAbstractRefinementGroupKeys;
	this.strAbstractSelectedRefinementKeys = strAbstractSelectedRefinementKeys;
	this.arrayRefinementGroups = new Array();
	this.arraySelectedRefinements = new Array();
	this.arrayAbstractRefinementGroupKeys = new  Array();
	this.arrayAbstractSelectedRefinementKeys = new Array();
	this.isSearchActive = false;

	this.RefinementGroup = function() {
		this.arrayRefinements = new Array();
	}
	
	this.Refinement = function(
		type,
		name,
		displayValue,
		value,
		productCount) {
		
		this.type = type;
		this.name = name;
		this.displayValue = displayValue;
		this.value = value;
		this.productCount = productCount;
	}
	
	this.submitRefinement = function(objDropdown) {
		var strRefinementGroupKey = objDropdown.name;
		var intRefinementCount = objDropdown.selectedIndex -1;
		
		objRefinement = objSearch.arrayRefinementGroups[strRefinementGroupKey].arrayRefinements[intRefinementCount];
		
		/*
		alert("strRefinementGroupKey = " + strRefinementGroupKey + 
			"\r\nintRefinementCount = " + intRefinementCount +
			"\r\nobjRefinement.type = " + objRefinement.type + 
			"\r\nobjRefinement.name = " + objRefinement.name + 
			"\r\nobjRefinement.value = " + objRefinement.value);
		*/
		/**
 		* Modified:  Keo 07/28/08 - Added wrapper for G to H 
 		*/
		if(!(reportingService||{}).isActive){
			omni.objSearchProcessor.setRefinement(objRefinement,true);
		} else {
			reportingService.controller.appManagers.searchAppManager.setRefinement(objRefinement,true);
		}
		
		objSearch.setSearchSelectionFormValues(
			objRefinement.type,
			objRefinement.name,
			objRefinement.value,
			"refine");	
	}
	
	this.submitRefinementLink = function(objLink, intRefinementCount, strRefinementGroupKey) {
		
		objRefinement = objSearch.arrayRefinementGroups[strRefinementGroupKey].arrayRefinements[intRefinementCount];
		
		/*
		alert("strRefinementGroupKey = " + strRefinementGroupKey + 
			"\r\nintRefinementCount = " + intRefinementCount +
			"\r\nobjRefinement.type = " + objRefinement.type + 
			"\r\nobjRefinement.name = " + objRefinement.name + 
			"\r\nobjRefinement.value = " + objRefinement.value);
		*/
				/**
 		* Modified:  Keo 07/28/08 - Added wrapper for G to H 
 		*/
		if(!(reportingService||{}).isActive){
			omni.objSearchProcessor.setRefinement(objRefinement,true);	
		}else {
			reportingService.controller.appManagers.searchAppManager.setRefinement(objRefinement,true);
		}
		return true;
		
	}
	
	this.submitUnRefinement = function(objDropdown) {
		var strSelectedRefinementKey = objDropdown.name;
		
		objSelectedRefinement = objSearch.arraySelectedRefinements[strSelectedRefinementKey];
		/**
 		* Modified:  Keo 07/28/08 - Added wrapper for G to H 
 		*/
		if(!(reportingService||{}).isActive){
			omni.objSearchProcessor.setRefinement(objSelectedRefinement,false);
		} else {
			reportingService.controller.appManagers.searchAppManager.setRefinement(objSelectedRefinement,false);
		}
		objSearch.setSearchSelectionFormValues(
			objSelectedRefinement.type,
			objSelectedRefinement.name,
			objSelectedRefinement.value,
			"unrefine");
	}
	
	this.submitUnRefinementLink = function(strSelectedRefinementKey) {
		objSelectedRefinement = objSearch.arraySelectedRefinements[strSelectedRefinementKey];		
		/*
		alert("strSelectedRefinementKey = " + strSelectedRefinementKey + 
			"\r\nobjSelectedRefinement.type = " + objSelectedRefinement.type + 
			"\r\nobjSelectedRefinement.name = " + objSelectedRefinement.name + 
			"\r\nobjSelectedRefinement.value = " + objSelectedRefinement.value);
		*/
		/**
 		* Modified:  Keo 07/28/08 - Added wrapper for G to H 
 		*/
		if(!(reportingService||{}).isActive){
			omni.objSearchProcessor.setRefinement(objSelectedRefinement,false);
		}else {
			reportingService.controller.appManagers.searchAppManager.setRefinement(objSelectedRefinement,false);
		}
		return true;
	}
	
	this.setSubmitForm = function() {
		if (!objSearch.objSubmitForm) {
			objSearch.objSubmitForm = document.forms.searchSelectionForm;
		}
	}
	
	this.setSearchSelectionFormValues = function (
		strType,
		strName,
		strValue,
		strRefinementMode) {
		
		objSearch.setSubmitForm();
		
		objSearch.objSubmitForm.searchFilter.value = strType;
		objSearch.objSubmitForm.searchFilterName.value = strName;
		objSearch.objSubmitForm.searchFilterValue.value = strValue;
		objSearch.objSubmitForm.searchRefinementMode.value = strRefinementMode;
		objSearch.objSubmitForm.searchContextPath.value = objSearch.strSearchContextPath;
		if (objSearch.sortBy) {
			objSearch.objSubmitForm.sortBy.value = objSearch.sortBy;
		}

		objSearch.setSearchViewFormValues(objSearch);
		
		/*
		alert("objSearch.objSubmitForm.searchFilter.value = " + objSearch.objSubmitForm.searchFilter.value +
		"\r\nobjSearch.objSubmitForm.searchFilterName.value = " + objSearch.objSubmitForm.searchFilterName.value +
		"\r\nobjSearch.objSubmitForm.searchFilterValue.value = " + objSearch.objSubmitForm.searchFilterValue.value +
		"\r\nobjSearch.objSubmitForm.searchRefinementMode.value = " + objSearch.objSubmitForm.searchRefinementMode.value +
		"\r\nobjSearch.objSubmitForm.searchContextPath.value = " + objSearch.objSubmitForm.searchContextPath.value +
		"\r\nobjSearch.objSubmitForm.cid.value = " + objSearch.objSubmitForm.cid.value);
		*/
		
		objSearch.objSubmitForm.submit();
	
	}
	
	this.processAbstractRefinementGroupKeys = function() {
		if (objSearch.strAbstractRefinementGroupKeys) {
			objSearch.arrayAbstractRefinementGroupKeys = objSearch.strAbstractRefinementGroupKeys.split("^,^");
		}
	}

	this.processAbstractSelectedRefinementKeys = function() {
		if (objSearch.strAbstractSelectedRefinementKeys) {
			objSearch.arrayAbstractSelectedRefinementKeys = objSearch.strAbstractSelectedRefinementKeys.split("^,^");
		}
	}
	
	this.processRefinementGroups = function() {
		if (objSearch.strRefinementGroups) {
			var arrayRefinementGroups = objSearch.strRefinementGroups.split("^^^^");
			for (var intGroupCounter=0;intGroupCounter < arrayRefinementGroups.length;intGroupCounter++) {
				var strRefinementGroup = arrayRefinementGroups[intGroupCounter];
				var arrayRefinementGroup = strRefinementGroup.split("||");
				var strRefinementGroupKey = objSearch.arrayAbstractRefinementGroupKeys[intGroupCounter];
				objSearch.arrayRefinementGroups[strRefinementGroupKey] = new objSearch.RefinementGroup();
				
				for (var refinementCounter = 0; refinementCounter < arrayRefinementGroup.length; refinementCounter++) {
					var strRefinement = arrayRefinementGroup[refinementCounter];
					var arrayRefinement = strRefinement.split("^,^");
					var objRefinement = new this.Refinement();
					objRefinement.type = arrayRefinement[0];
					objRefinement.name = arrayRefinement[1];
					objRefinement.displayValue = arrayRefinement[2];
					objRefinement.value = arrayRefinement[3];
					objRefinement.productCount = arrayRefinement[4];
					objRefinement.refinementCount = eval(arrayRefinement[5] - 1);
					objSearch.arrayRefinementGroups[strRefinementGroupKey].arrayRefinements[objRefinement.refinementCount] = objRefinement;
				}
			}
		}
	}
	
	this.processSelectedRefinements = function() {
		if (objSearch.strSelectedRefinements) {
			var arraySelectedRefinements = objSearch.strSelectedRefinements.split("||");		
			
			for (var intSelectedRefinementCounter=0;intSelectedRefinementCounter < arraySelectedRefinements.length;intSelectedRefinementCounter++) {
				var strSelectedRefinementKey = objSearch.arrayAbstractSelectedRefinementKeys[intSelectedRefinementCounter];
				var strSelectedRefinement = arraySelectedRefinements[intSelectedRefinementCounter];
				var arraySelectedRefinement = strSelectedRefinement.split("^,^");
				var objSelectedRefinement = new objSearch.Refinement();
				objSelectedRefinement.type = arraySelectedRefinement[0];
				objSelectedRefinement.name = arraySelectedRefinement[1];
				
				objSelectedRefinement.value = arraySelectedRefinement[2];
				objSearch.arraySelectedRefinements[strSelectedRefinementKey] = objSelectedRefinement;
			}
		}	
	}
	
	this.setIsSortBySelectedCookie = function(bool) {
		/**
 		* Modified:  Keo 07/28/08 - Added wrapper for G to H 
 		*/
		if(!(reportingService||{}).isActive){
			omni.objSearchProcessor.setIsSortBySelectedCookie(bool);
		}else {
			reportingService.controller.appManagers.searchAppManager.setIsSortBySelectedCookie(bool);
		}
	}
}


function setCategorySort(objFormField) {
	
	var intCurrentSortSelectedIndex = objFormField.selectedIndex;
	var filterToolsForm = document.getElementById("filterTools");
	filterToolsForm.sortBy.selectedIndex = intCurrentSortSelectedIndex;
	var strSortValue = objFormField.options[objFormField.selectedIndex].value;
	
	
	if (objFormField.options && strSortValue != "-1" /*&& objSBS.objSmartDropDowns.strSelectedSortByOption != strSortValue*/) {
		if (objSearch.isSearchActive) {
			objSearch.setIsSortBySelectedCookie(true);
		}
		var strURL = window.location.href;
		strURL = removeQueryStringParam(strURL,'sizDivReset');
		strURL = removeQueryStringParam(strURL,'pageID');
		strURL = removeQueryStringParam(strURL,'sortBy');
		strURL += "&sortBy=" + strSortValue;
		window.location.href = strURL;
	}

}




objSearch = new Search();

var imageLoader = {
    productPerRow: 4,
    imgs:[],
    currentImg: 0,
    loadedGroups: {count: 0, lastLoaded: 0},
    browserDim: [(window.innerWidth || document.documentElement.clientWidth), (window.innerHeight || document.documentElement.clientHeight)],

    delayLoad: function(img, path) {
        this.imgs[this.currentImg] = {img:img, src: path};
        this.currentImg = this.currentImg + 1;
    },
    loadImgs: function(group) {
        if(this.loadedGroups[group]) return;
        var count = 1;
        var i =  this.groupSize * group;
        i = this.shouldFlipImgArray ? (this.imgs.length - 1) - i : i;
        var offset = this.shouldFlipImgArray ? -1 : 1;
        var done = false;
        var img = this.imgs[i];
        while(img && !done) {
            img.img.onload = null;
            img.img.src = img.src;
            done = (count == this.groupSize);
            i = i+offset;
            count = count + 1;
            img = this.imgs[i];
        }
        this.loadedGroups[group] = true;
        this.loadedGroups.count = this.loadedGroups.count + 1;
        this.loadedGroups.lastLoaded = group;
    },
    getRowNumber: function(height) {
        height = height < 0 ? 0 : (height > this.maxH ? this.maxH : height);
        return Math.floor(height * this.rowsHeightInverse);
    },
    fetch: function() {
        this.isDone = this.groupCount == this.loadedGroups.count;
        if(this.imgs.length == 0) return;
        if(this.isDone) { Event.stopObserving(window, 'scroll', this.scrollHandler); }
        var group = this.getRowNumber( (window.pageYOffset || document.documentElement.scrollTop) - this.minH);
        this.loadImgs(group);
        if(group > 0)
            this.loadImgs(group-1);
        if(group < this.groupCount - 1)
            this.loadImgs(group+1);
    },
    init: function() {
        var productGrid = this.productGrid = $('tabTable')||$('tabTableOff')||$('searchProductIteration')||$$('div[class="categoryContent"]')[0];
        if(!productGrid) return;
        this.productList = $$('div[class~="productItem"]');
        if(this.productList.length == 0) return;

        this.firstProductImg = Selector.findChildElements(this.productList[0], ['img']);
        this.shouldFlipImgArray = this.firstProductImg[0].id == this.imgs[this.imgs.length - 1].img.id;
        this.productDim = this.productList[0].getDimensions();

        this.productViewportRowCount = this.browserDim[1] / this.productDim.height;
        this.groupSize = Math.ceil(this.productViewportRowCount * this.productPerRow);

        this.groupCount = Math.ceil(this.productList.size() / this.groupSize);
        this.productGridDim = productGrid.getDimensions();
        this.productRowCount = Math.floor(this.productGridDim.height / this.productDim.height);
        this.rowSize = this.productRowCount / this.groupCount;

        this.rowsHeight = this.productDim.height * this.rowSize;
        this.rowsHeightInverse = 1/this.rowsHeight;

        this.productGridOffset = Position.cumulativeOffset(productGrid);
        this.minH = this.productGridOffset[1];
        this.maxH = this.minH + this.productGridDim.height - this.rowsHeight;

        this.scrollHandler = imageLoader.fetch.bind(imageLoader);

        Event.observe(window, 'scroll', this.scrollHandler);
        this.fetch();
    }
};

Event.observe(window, 'load', imageLoader.init.bind(imageLoader));

var crossLink = {
    wct: '',
    data: null,
    brandData: {},

	LINK: new Template('<a href="#{url}#{action}.do?cid=#{cid}&ssiteid=#{siteid}&fromCL=#{from}" onmouseover="crossLink.getLongName(event, #{code}, #{index});" onmouseout="crossLink.getShortName(event, #{code}, #{index});">{brandName}#{name}</a>'),
    LINK_PREVIEW: new Template('<a href="#{url}/preview/launch.do?date=#{date}&targetURL=#{url}#{action}.do?cid=#{cid}&ssiteid=#{siteid}&fromCL=#{from}"  onmouseover="crossLink.getLongName(event, #{code}, #{index});" onmouseout="crossLink.getShortName(event, #{code}, #{index});">{brandName}#{name}</a>'),
    CONTENT: new Template('<div id="#{brandCode}Links"></div><div id="#{brandCode}Greek" class="greek"><p>#{smallLinks}</p></div>'),
	LETTER_COUNT_MAX: 8,
    MODULE_CLOSED : new Template(
		'<div class="brandRow">' +
	        '<div class="logo"><img id="#{brandCode}Logo" src="#{assetPath}badgeSmall.gif" /></div>' +
	        '<div id="#{brandCode}Content" class="content">#{content}</div>' +
			'</div>'),
	setPos : function() {
		if(!(crossLink.mainContent && crossLink.moduleDim)) return;
		crossLink.mainContentPos = Position.cumulativeOffset(crossLink.mainContent);
        var browserOffset = clientBrowser.isIE6 ? window.pageYOffset || document.documentElement.scrollTop: 0;
        var crossLinkPos = crossLink.modulePos = crossLink.modulePos = [crossLink.mainContentDim.width + crossLink.mainContentPos[0],
		    (window.innerHeight || document.documentElement.clientHeight) + browserOffset - crossLink.moduleDim.height - 10];

        if(!crossLink.isShown) {
			crossLink.module.setStyle({ opacity: '0', left: crossLinkPos[0] + 'px', top: crossLinkPos[1] + 'px'});
			crossLink.isShown = new Effect.Appear(crossLink.module.id, {duration: 1.0} );
		} else {
            crossLink.module.setStyle({left: crossLinkPos[0] + 'px', top: crossLinkPos[1] + 'px'});
        }
    },
    setPosY: function() {
        var browserOffset = clientBrowser.isIE6 ? window.pageYOffset || document.documentElement.scrollTop: 0;
        var dim = crossLink.module.getDimensions();
        var ypos = (window.innerHeight || document.documentElement.clientHeight) + browserOffset - dim.height - 10;
        crossLink.module.setStyle({top: ypos + 'px'});
    },
    trimText: function(str) {
        str = gidLib.unUnicode(str);
        return str.length > crossLink.LETTER_COUNT_MAX ? str.substring(0,crossLink.LETTER_COUNT_MAX) + '...' : str;
    },
    getSmallLinks: function(str, obj) {
        return (str + crossLink.trimText(obj.catalogItemName) + '<br/>');
    },
    getBrands: function(code, data) {
		var brandCode = 'brand' + code;
        var trimText = crossLink.trimText;
        var smallLinks = '';

		if(data.length > 3) {
			smallLinks = trimText(data[0].catalogItemName) + '<br/>' + trimText(data[1].catalogItemName) + '<br/>...';
		} else {
			smallLinks = data.inject('', crossLink.getSmallLinks);
		}

        return crossLink.CONTENT.evaluate({
		    brandCode: brandCode,
		    smallLinks: smallLinks
		});
     },
    getLongName: function(e, code, i) {
        var obj = crossLink.brandData[code][i];
        (e.target||e.srcElement).innerHTML = obj.catalogItemName;
        crossLink.setPosY();
    },
    getShortName: function(e, code, i) {
        var obj = crossLink.brandData[code][i];
        (e.target||e.srcElement).innerHTML = obj.shortName;
        crossLink.setPosY();
    },
    getLinksHTML : function(array, obj, index) {
        var code = array.code;
        
        var siteid = 'cl' + crossLink.brandAbbr + crossLink.getConfirmBrand(code).brandAbbr;
        var url = crossLink.getConfirmBrand(code).unsecureUrl;
        var from = crossLink.currentBrandCode + crossLink.cid;
        var name = obj.shortName = (obj.shortName || crossLink.trimText(obj.catalogItemName));
        var previewDate = crossLink.previewDate||'';
        array.push( ((previewDate && previewDate != '') ? crossLink.LINK_PREVIEW : crossLink.LINK).evaluate({
                url: url,
                action: obj['categoryAction']||'/browse/category',
                cid: obj.catalogItemId,
                siteid: siteid,
                code: code,
                from: from,
                name: name,
                index: index,
                date: previewDate
        }));
        return array;
    },
	renderBrandData: function(args, periodicalExecuterRef) {
        var code = args.brandCode;
        var data = crossLink.brandData[code];
        if(!data || data.length == 0) return false;

		periodicalExecuterRef.stop();

        var brandCode = 'brand' + code;
		var brandContent = brandCode + 'Content';
		var greek = brandCode + 'Greek';
		var links = brandCode + 'Links';

        crossLink[brandCode].innerHTML = crossLink.MODULE_CLOSED.evaluate({
		        brandCode: brandCode,
		        brandId: code,
		        content: crossLink.getBrands(code, data),
		        assetPath: crossLink.getConfirmBrand(code).badgeContentPath
		    });

        links = crossLink[links] = $(links);
		crossLink[brandContent] = $(brandContent);
		greek = crossLink[greek] = $(greek);
        crossLink[brandCode].style.display = 'block';

        var linksHTML = [];
        
        var brandName = crossLink.getConfirmBrand(code).brandDisplayName + ' ';
        linksHTML.code = code;
        links.innerHTML = data.inject(linksHTML, crossLink.getLinksHTML).join('').replace(/{brandName}/g, '');

        crossLink.skipLinks.innerHTML = crossLink.skipLinks.innerHTML + linksHTML.join('').replace(/{brandName}/g, brandName);

        links.style.display = 'none';
        crossLink.moduleDim = crossLink.module.getDimensions();
		crossLink.setPos();
        return true;
    },
    loadScriptTimeoutHandler: function(args) {
        return (!crossLink.data || crossLink.data.length == 0);
    },
    createDivs: function() {
        var module = document.createElement('div');
        module.id = 'crossLinkModule';
        module.innerHTML = '<div id="crossLinkHeader"><div class="headerText"></div></div>' +
                            '<div id="crossLinkBrands">' +
                                '<div id="skipNavCrossLinks" class="skipNavs"><a name="crossLinks" class="skipNavs">' + this.headerText + '</a></div>' +
                                '<div id="brand1" onmouseover="crossLink.show(event, 1);" onmouseout="crossLink.hide(event, 1);" class="brandMain"></div>' +
                                '<div id="brand3" onmouseover="crossLink.show(event, 3);" onmouseout="crossLink.hide(event, 3);" class="brandMain"></div>' +
                                '<div id="brand2" onmouseover="crossLink.show(event, 2);" onmouseout="crossLink.hide(event, 2);" class="brandMain"></div>' +
                                '<div id="brand4" onmouseover="crossLink.show(event, 4);" onmouseout="crossLink.hide(event, 4);" class="brandMain"></div>' +
                                '<div id="brand10" onmouseover="crossLink.show(event, 10);" onmouseout="crossLink.hide(event, 10);" class="brandMain"></div>' +
                            '</div>'
        document.body.appendChild(module);
        this.module = $(module.id);
        this.skipLinks = $('skipNavCrossLinks');
    },
    buildPath: function() {
        var isCategoryPage = !(window['productPage']||window['outfitPage']);
        var path = getCookieVar("globalSession","xlinkFrom")||'';
        var cid = this.cid = getQuerystringParam("cid")||this.cid;
        var states = path.split('|');
        var fromCL = getQuerystringParam("fromCL");
        var oldFromCL = states[0];
		var oldCid = states[1]||cid;
		

        path = (cid && fromCL) || (cid && oldFromCL && !(isCategoryPage && cid != oldCid)) ? (fromCL||oldFromCL) + '|' + (fromCL ? cid : oldCid) + '|' + (states[2]||'') : '';
        setCookieVar('globalSession', 'xlinkFrom', path);
    },
    getConfirmBrand: function(code) {
    	for (var i=0; i < this.brandConstruct.length; i++) {
    		brand = this.brandConstruct[i];
    		if (brand.brandCode == code) {
    			return brand;
    		}
    	}
    	return null;
    },
    init: function() {
        this.buildPath();
        if(!this.wct || this.wct == '') return;
        this.createDivs();
        this.brandConstruct = window['gidBrandSiteConstruct'].gidBrandSites.compact();
        this.currentBrandCode = gidBrandSiteConstruct.currentBrandCode;
		this.currentBrand = this.getConfirmBrand(this.currentBrandCode);
        this.brandAbbr = this.currentBrand.brandAbbr;
        this.mainContent = $('mainContentContainer');
		this.mainContentDim = crossLink.mainContent.getDimensions();
        this.moduleBrands = $('crossLinkBrands');
        
		var paramSem = getQuerystringParam("sem");            
        var semParam = '';
        if(paramSem == 'true'){
          semParam =  "&sem=true";
        }

        if(window['objPreview']) {
            this.previewDate = objPreview.ppdDate.match(/\d\d\/\d\d\/\d\d\d\d/)[0];
        }

        for(var i=1; i<=this.brandConstruct.length; i++) {
			var loopBrandCode = this.brandConstruct[i-1].brandCode;
			if(loopBrandCode == this.currentBrandCode) continue;
			var brand = 'brand' + loopBrandCode;
			var brandContainer = brand + 'Container';
			this[brand] = $(brand);
			this[brandContainer] = $(brandContainer);
		    var args = {brandCode: loopBrandCode};
		    gidLib.loadScript({
		    	callerObject:{},
		        src: this.getConfirmBrand(loopBrandCode).unsecureUrl + '/lynx/CrossLinkData?wct=' + this.wct + ((this.previewDate && this.previewDate != '') ? '&previewDate=' + this.previewDate : '' + semParam ),
				timeout:{
						handler:this.loadScriptTimeoutHandler,
						args:args,
						timeDelay:20
				},
				callback:{
						handler:this.renderBrandData,
						args:args,
						timeDelay:0.1
				}
			});
        }

        if(clientBrowser.isIE6) {
            Event.observe(window, 'scroll', crossLink.setPos);
        }

        Event.observe(window, 'resize', crossLink.setPos);
        this.isReady = true;
    },
	show : function(e, brandCode) {
        var target = crossLink['brand' + brandCode];
        var src = target.contains ? (e.toElement||e.relatedTarget) : (e.fromElement || e.target);
        if( gidLib.checkMouseEvent(src, target) ) return;

        crossLink['brand' + brandCode + 'Greek'].style.display = 'none';
        crossLink['brand' + brandCode + 'Links'].style.display = 'block';
        crossLink.setPosY();
	},
	hide : function(e, brandCode) {
        var target = crossLink['brand' + brandCode];
        var src = e.toElement || e.relatedTarget;
        if( !gidLib.checkMouseEvent(src, target) ) return;

        crossLink['brand' + brandCode + 'Greek'].style.display = 'block';
        crossLink['brand' + brandCode + 'Links'].style.display = 'none';
        crossLink.setPosY();
	},

    getOmniValue: function() {
        var xlink = 'no crosslink';
        var path = getCookieVar("globalSession","xlinkFrom")||'';
        var states = path.split('|');
        var state = (states.length - 1)||1;

        if(state == 2) {
                var appComponent = states[2].split(':');
                var oldPid = appComponent[1];
                var oldCid = states[1];
                var app = (window['productPage']||window['outfitPage']||window['quickLook']||'').type||'';

                if(states[2] != '')
                    path = path.replace(states[2], '');

                if(app != '' && getQuerystringParam("cid") ) {
                    path = path + app;
                    var pid = window[app].objP.strProductId;
                    path = path + ':' + pid;

                    if(pid != oldPid) {
                        xlink = states[0] + '|' + gidBrandSiteConstruct.currentBrandCode + oldCid;
                    }
                }

        }

        setCookieVar('globalSession', 'xlinkFrom', path);
        return xlink;
    }
};

Event.observe(window, 'load', crossLink.init.bind(crossLink));

var AcernoPixel = {
		setPixel: function() {
			var cid = gidLib.getQuerystringParam("cid");
			if (cid != ''){
								
					var AcernoPixel = document.createElement('p');
					AcernoPixel.style.display = 'none';
					document.body.appendChild(AcernoPixel);
					AcernoPixel.innerHTML = '<img src="http://www.imiclk.com/cgi/r.cgi?m=3&mid=7jGZZuuX&did=' + cid+'" width="0" height="0"/>';								
			}
		}
};
if (location.pathname == '/browse/division.do' || location.pathname == '/browse/category.do' || location.pathname == '/browse/subDivision.do' || location.pathname == '/browse/categorySearch.do'){
	Event.observe(window,'load',AcernoPixel.setPixel);
}

