<!--
/*
* $Id: cmdatatagutils.js 109956 2009-10-02 01:23:38Z cbwilliams $
*Copyright 2000-2004,Coremetrics 4.0.18 $Revision: 125080 $
*CMX Version for all sites 
*
* Date            Modifier        Description
* 20070105		Andy Cabezas    Gomez traffic blocking
* 20070109		Hutch White        Add cm_ref detection for Referring URL forwarding
* 20070118		Tim Gilbert     Falling back to cmrf if cm_ref not found - this is needed for Flash redirection which uses cmrf.
* 20070130		Tim Gilbert     Using cm_ref for redirects again; misc cleanup.
* 20070220		Hutch White		Make ParseRef check for cm_ref case insensitive
* 20070608		Hutch White		Added conversion, element, all manual tags, trackimpressions RS
* 20071030		C Williams		Added code to ProductTag to prevent duplicate viewset prefixes eg, E:E:ABC. This code is maintained by WSI to handle Akamai caching issues.
* 20080430		MOCHOA			Enabled MovieTime Tagging Function ; Disable Impression Tracking
* 20080516		HWHITE			Add cm_em parameter checking
* 20080801		LHIBBARD		Changed cm_em to not be a page view, added BV tagging
* 20090403		ETOWB			Cleaned up comments; converted to MakeTag version; added attributes;
*						Important Note:  Outstanding decisions regarding shop attribute de-duping must be resolved before shop attributes are used.
* 20090724		ETOWB			Fixed Issue with Order tag extra_field 1 being hardcoded to "N"
*						Note:  Shop Attribute de-duping question is still outstanding.
*               CBWILLIAMS      Removed logic for campaigns per CHR-157  
*
* 
*/
 
var cm_exAttr=new Array;  
var cm_ClientID = "99999999";
var cm_TrackLink = "A";
var cm_TrackImpressions = "";
var cm_JSFEnabled = false;

var cmJv = "1.0";
if (typeof(isNaN) == "function") cmJv = "1.1";
if (typeof(isFinite) == "function") cmJv = "1.2";
if (typeof(NaN) == "number") cmJv = "1.3";
if (typeof(decodeURI) == "function") cmJv = "1.5";
if (typeof(Array.forEach) == "function") cmJv = "1.6";
if (typeof(Iterator) == "object") cmJv = "1.7";

var cmCheckCMEMFlag = true;
var cmCategoryId = null;
  
/* TAG GENERATING FUNCTIONS */

function cmSetClientID(thisID) {
	var cm_ClientID=thisID;
	window.cm_ClientID=cm_ClientID;
}

function cmSetProduction(cmhost){
	// use new domain name which varies by site
	cm_HOST=cmhost + "/cm?"; 
}

function cmExternalClick(link) {
	cmCreateManualPageviewTag("External: " + link, null, link, document.location.href);
	return true; 
}

function cmCreateManualImpressionTag(pageID, trackSP, trackRE) {
		// insert code to get pageID from cmTagControl if pageID is null
		cmMakeTag(["tid","9","pi",pageID,"cm_sp",trackSP,"cm_re",trackRE,"st",cm_ClientTS]);
}

function cmCreateManualLinkClickTag(href,name,pageID) {	
	if (cmCreateLinkTag == null && cM != null) {
		var cmCreateLinkTag = cM;
	}
	if (cmCreateLinkTag != null) {		
		var dt = new Date();
		cmLnkT3 = dt.getTime();
		href=cG7.normalizeURL(href,true);
		cmCreateLinkTag(cm_ClientTS, cmLnkT3, name, href, false, pageID);
	}
}

function cmCreateManualPageviewTag(pageID, categoryID,DestinationURL,ReferringURL, searchTerm) {
	cmMakeTag(["tid","1","pi",pageID,"cg",categoryID,"ul",DestinationURL,"rf",ReferringURL,"se",searchTerm]);
}

function cmCreatePageElementTag(elementID, elementCategory, pageID, pageCategoryID, elementLocation,attributes) {
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}
	cmMakeTag(["tid","15","eid",elementID,"ecat",elementCategory,"pflg","0","pid",pageID,"pcat",pageCategoryID,"eloc",elementLocation,"cm_exAttr",cm_exAttr]);
}

function cmCreateProductElementTag(elementID, elementCategory, productID, productCategoryID, elementLocation,attributes) {
	if (attributes){
		cm_exAttr=attributes.split("-_-");
	}
	cmMakeTag(["tid","15","eid",elementID,"ecat",elementCategory,"pflg","1","pid",productID,"pcat",productCategoryID,"eloc",elementLocation,"cm_exAttr",cm_exAttr]);
}

function cmCreateTechPropsTag(pageID, categoryID,attributes) {
	if(pageID == null) { pageID = cmGetDefaultPageID(); }
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}	
	cmMakeTag(["tid","6","pi",pageID,"cg",categoryID,"pc","Y","cm_exAttr",cm_exAttr]);
}


function cmCreatePageViewTag(page_id, search_term, search_results, customer_service_flag, registry_flag, unused_referrer_param, category,attributes) {
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}	
	if (customer_service_flag) { customer_service_flag = "CS"; }
	if (registry_flag) { registry_flag = "Registry"; }
	cmMakeTag(["tid","1","pi",page_id,"cg",category,"se",search_term,"sr",search_results,"pv2",customer_service_flag,"pv4",registry_flag,"cm_exAttr",cm_exAttr]);

	if (search_term) {
		cmMakeTag(["tid","7","li","1","ps1",search_term,"ps2",search_results]);
	}
}

function cmCreateCategoryTag(cat_name, cat_id, page_num, registry_flag,attributes) {
	var page_id = "CATEGORY: " + cat_name + " (" + cat_id + ")";
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}	
    if (page_num) {
        if ((page_num != "") && (page_num != "1")) {
            page_id = page_id + " PG " + page_num;
        }
    }
	if (registry_flag) { registry_flag = "Registry"; }
	cmMakeTag(["tid","1","pi",page_id,"cg",cat_id,"pv4",registry_flag,"cm_exAttr",cm_exAttr]);
}


function cmCreateDefaultPageviewTag(categoryID) {
	cmCreatePageviewTag(cmGetDefaultPageID(), categoryID);
}


function cmCreateProductTag(cat_id, prod_name, prod_id, count_page, registry_flag, bannercookiename,totalReviewCount,avgRating,ratingsOnlyRV,buyAgainPerc,attributes) {
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}
	var old_cat_id = cat_id;
    var url_cat_id = getCategoryOverride(bannercookiename);
    if (url_cat_id != null)
    {
    	if (url_cat_id.charAt(1) == ":") 
    	{
        	cat_id = url_cat_id;
        } else {
        	cat_id = getViewsetFromCategory(old_cat_id) + ":" + url_cat_id;
        }
    }
    if (cmCategoryId == null)
    {
        cmCategoryId = cat_id;
    }
	if (count_page) { count_page = "Y"; } else { count_page = "N"; }
	if (registry_flag) { registry_flag = "Registry"; }
	cmMakeTag(["tid","5","pi","PRODUCT: "+prod_name+" ("+prod_id+")","pr",prod_id,"pm",prod_name,"cg",cat_id,"pc",count_page,"pv4",registry_flag,"cm_vc",cmExtractParameter("cm_vc",document.location.href),"cm_exAttr",cm_exAttr]);

	if ( totalReviewCount || avgRating) {
		cmMakeTag(["tid","7","li","10300","ps1",prod_id,"ps2",prod_name,"ps3",cat_id,"ps4",totalReviewCount,"ps5",avgRating,"ps6",ratingsOnlyRV,"ps7",buyAgainPerc]);
	}
}


/*
 * Variables and Arrays to support Lineitem Aggregation
 */
var __sArray = new Array();
var __skuString = "";
var __ex=new Array();

function __cmGetPIPC(__pr) {
	var __pI, i;
	var cmAttr1=new Array();
	var cmAttr2=new Array();
	for (i=0;i<__ex.length;++i){
		cmAttr1=cmAttr1+__ex[i];
	}		
	for (__pI = 0; __pI < __sArray.length; ++__pI) {
		if (__ex.length>0){
			cmAttr2=new Array();		
			for (i=__sArray[__pI].length-__ex.length*2+1;i<__sArray[__pI].length;i=i+2){
				cmAttr2=cmAttr2+__sArray[__pI][i];
			}
	
			if (__pr == __sArray[__pI][1] && cmAttr1==cmAttr2){
				return __pI;
			}
		} else {
		if (__pr == __sArray[__pI][1]) return __pI;
		}
	}	
	return -1;
}

function cmAddShop(__v) {

	var __i = __cmGetPIPC(__v[1]);
	if (__i == -1) {
		if (__ex.length>0){
			for (var i=0; i<__ex.length; ++i){
				__v[__v.length]="s_a"+(i+1);
				__v[__v.length]=__ex[i];
			}
		}
		__sArray[__sArray.length] = __v;
	}
	else {
		var __oQ = __sArray[__i][5];
		var __oP = __sArray[__i][7];
		__sArray[__i][5] = parseInt(__sArray[__i][5]) + parseInt(__v[5]);
		__sArray[__i][7] = (((__v[7]*__v[5])+(__oP*__oQ))/__sArray[__i][5]);
		__sArray[__i][11] = parseInt(__sArray[__i][11]) + parseInt(__v[11]);
		__sArray[__i][13] = parseInt(__sArray[__i][13]) + parseInt(__v[13]);
		__sArray[__i][15] += __v[15];
	}
}

function cmCreateShopAction5Tag(prod_id, prod_qty, prod_price, 
                sku, category, prod_name, ship_other_count, gift_wrap_count,attributes) {
	var pattern = /[^\-0-9\.]/gi;
    prod_price = prod_price.toString().replace(pattern, "");
	if (attributes){
		__ex=attributes.split("-_-");
	} else {
	__ex=new Array();
	}	

	cmAddShop(["pr",prod_id,"pm",prod_name,"qt",prod_qty,"bp",prod_price,"cg",category,
		       "sx4",ship_other_count,"sx5",gift_wrap_count,"sx11","|"+sku+"|"+prod_price+"|"+prod_qty+"|",
				"at","5","tid","4","pc","N"]);
}


function cmCreateShopAction9Tag(prod_id, prod_qty, prod_price, sku, order_id, cust_id, order_price, ship_other_count, 
	     gift_wrap_count, category, prod_name, reg_number, completion_flag,attributes) {
	var cm_slotNum;
	var pattern = /[^\-0-9\.]/gi;
	var pattern1 = /^\s+|\s+$/gi;
    prod_price = prod_price.toString().replace(pattern, "");
	order_price = order_price.toString().replace(pattern, "");
	prod_id = prod_id.toString().replace(pattern1, "");
	if (attributes){
		__ex=attributes.split("-_-");
	} else {
	__ex=new Array();
	}
	
	cmAddShop(["pr",prod_id,"pm",prod_name,"qt",prod_qty,"bp",prod_price,"cg",category,
			   "sx4",ship_other_count,"sx5",gift_wrap_count,"sx11","|"+sku+"|"+prod_price+"|"+prod_qty+"|","sx7",reg_number,"sx8",completion_flag,
			   "cd",cust_id,"on",order_id,"tr",order_price,"at","9","tid","4","pc","N"]);
	cmCalcSKUString();
}

function cmDisplayShop5s() {
	cmDisplayShops();
}

function cmDisplayShop9s() {
	cmCalcSKUString();
	cmDisplayShops();
}

function cmCalcSKUString() {
	__skuString = "";
	var __skuStringArray = new Array();
	for (var i = 0; i < __sArray.length; ++i) {
		// aggregate
		var __skuStringArrayIndex = -1;
		for (var y = 0; y < __skuStringArray.length; ++y) {
			if (__sArray[i][1] == __skuStringArray[y][0] ) {
				__skuStringArrayIndex = y;
			}
		}
		if (__skuStringArrayIndex == -1) {
			// it doesn't exist, so add it
			var newArrayIndex = __skuStringArray.length;
			__skuStringArray[newArrayIndex] = new Array();
			__skuStringArray[newArrayIndex][0] = __sArray[i][1];
			__skuStringArray[newArrayIndex][1] = __sArray[i][7];
			__skuStringArray[newArrayIndex][2] = __sArray[i][5];
		}
		else {
			// it exists, so update it
			var __oP = __skuStringArray[__skuStringArrayIndex][1];
			var __oQ = __skuStringArray[__skuStringArrayIndex][2];
			__skuStringArray[__skuStringArrayIndex][2] = parseInt(__sArray[i][5]) + __oQ;
			__skuStringArray[__skuStringArrayIndex][1] = (__oP*__oQ+__sArray[i][7]*__sArray[i][5])/(parseInt(__sArray[i][5])+parseInt(__oQ));
		}
	}
	for (var x = 0; x < __skuStringArray.length; ++x) {
		__skuString += "|"+__skuStringArray[x][0]+"|"+__skuStringArray[x][1]+"|"+__skuStringArray[x][2]+"|";
	}
}

function cmDisplayShops() {
	var i;
	for (i = 0; i < __sArray.length; ++i) {
		cmMakeTag(__sArray[i]);
	}
	__sArray = new Array();
}

function cmCreateOrderTag(order_id, cust_id, subtotal, shipping_charge, sku_data, 
city, state, zip, logged_in_flag, registry_flag,attributes) {

	var pattern = /[^\-0-9\.]/gi;
    shipping_charge = shipping_charge.toString().replace(pattern, "");
	subtotal = subtotal.toString().replace(pattern, "");
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}	
	if (logged_in_flag) { logged_in_flag = "Y"; } else { logged_in_flag = "N"; } 
	if (registry_flag) { registry_flag = "Registry"; }
	cust_id = custIDcheck(cust_id);
	cmMakeTag(["tid","3","osk",__skuString,"on",order_id,"tr",subtotal,"sg",shipping_charge,"cd",cust_id,
		       "ct",city,"sa",state,"zp",zip,"or1",logged_in_flag,"or2",registry_flag,"cm_exAttr",cm_exAttr]);
	__skuString = "";
}

/*
 * Creates a Conversion Event tag
 *
 * eventID			: required. Conversion event ID
 * actionType		: required. 1=conversion initiation, 2=conversion completion
 * categoryID		: optional. Category for the event
 * points			: optional. Point value to assign to conversion.
 */
 function cmCreateConversionEventTag(eventID, actionType, categoryID, points,attributes) {
 	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}
	cmMakeTag(["tid","14","cid",eventID,"cat",actionType,"ccid",categoryID,"cpt",points,"cm_exAttr",cm_exAttr]);
 }

function cmCreateRegistrationTag(page_id, cust_id, email, newsletter_name, subscribed, 
city, state, zip, registry_flag, category, age, relation, shopping_for, cats_requested, attributes) {

 	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}
	if (registry_flag) { registry_flag = "Y"; }
	if (subscribed) { subscribed = "Y"; } else {subscribed = "N";} 
	/** PT age
    actual age if the customer enters their age
    if they are logged in, it defaults to 0 
    if they are under 13, age = 12 **/
	cmMakeTag(["tid","2","cd",cust_id,"em",email,"ct",city,"sa",state,"cg",category,"ag",age,
				"pi",page_id,"pc","Y","pv3",cats_requested,"zp",zip,"cm_exAttr",cm_exAttr,
				"rg11",registry_flag,"rg12",relation,"rg13",shopping_for,"nl",newsletter_name,"sd"]);
}

function cmCreateErrorTag(error_type) {
	cmMakeTag(["tid","404","li","100","ps1",document.URL,"ps2",ParseRef(document.URL),"ps3",error_type]);
}

/*		
 * cmMovieTime = Custom Tag to Track Time Viewing Movies		
 * MovieID is the Movie Identifier, unique to domain		
 * status denotes start and stop.
 *
 * MovieID - unique movie identifier (required)
 * status  - track status, "0"=start, "1"=pause,	"2"=play, "3"=end (required)
 * stamp   - time stamp	(required)
 * pageID  - pageID value from pageview tag
 * playerID- identifier for player type -  0=Flash, 1=Windows Media Player, 2= Real Player, 3= Quicktime, 4=other
 */		
function cmMovieTime(MovieID, status,pageID,playerID) {		
	var datestamp = new Date();	
	var stamp = (Math.floor(Math.random() * 11111111)) + datestamp.valueOf();	
	cmCreateCustomTag("500",MovieID,status,datestamp.getTime(),pageID,playerID,stamp);
}

function cmCreateBazaarViewTag(productID, productName,categoryID) {
    cmMakeTag(["tid","7","li","10301","ps1",productID,"ps2",productName,"ps3",categoryID]);
}

function cmCreateCustomTag(line_number, ps1, ps2, ps3, ps4, ps5, ps6, ps7, ps8, ps9, ps10, ps11, ps12, ps13, ps14, ps15) {

    // for aggregate pip report, extract values from url
    if (line_number == 2) { 
        //handle escaped underscores
        var pattern = /cm%5Flid/ig;
        var new_url = document.location.href;
        new_url = new_url.replace(pattern, "cm_lid");
        
        //handle escaped "="
        pattern = /cm_lid%3D/ig;
        new_url = new_url.replace(pattern, "cm_lid=");
    
        pattern = /pgid%3D/ig;
        new_url = new_url.replace(pattern, "pgid=");
    
        // indeces
        var iGid = new_url.indexOf("pgid");
        var iLid = new_url.indexOf("cm_lid");

        if (iLid > 0) {
            // values
            ps3 = cmExtractParameter("pgid",new_url);
            ps4 = cmExtractParameter("cm_lid",new_url);
        }
    }
	cmMakeTag(["tid","7","li",line_number,"ps1",ps1,"ps2",ps2,"ps3",ps3,"ps4",ps4,"ps5",ps5,"ps6",ps6,"ps7",ps7,"ps8",ps8,"ps9",ps9,"ps10",ps10,"ps11",ps11,"ps12",ps12,"ps13",ps13,"ps14",ps14,"ps15",ps15]);
}

function cmMakeTag(__v) {
	var cm = new _cm("vn2", "e4.0");
	var i;
	for (i = 0; i < __v.length; i += 2) {
		var _n = __v[i];
		var _v = __v[i + 1];
		cm[_n] = _v;
	}
	
	var datestamp = new Date();	
	var stamp = (Math.floor(Math.random() * 11111111)) + datestamp.valueOf();	
	cm.rnd = stamp;
	
	if (cm.tid == "6") {
		cm.addTP();
		document.cookie = "cmTPSet=Y; path=/";
	}

	if (cm.tid == "1") {
		if (cI("cmTPSet") != 'Y') {
			cm.tid = "6";
			cm.pc = "Y";
			cm.addTP();
			document.cookie = "cmTPSet=Y; path=/";
		}
	}

	if (cm.tid=="4") {
			//this needs to be defined before shop attributes are used
			//cm.ha1 = cmCalcShopHash(tempAttList);
	}

	if (cm.tid != "4" && typeof(cm.cm_exAttr)!="undefined"){
		switch(cm.tid){
			case "6":
				prefix="pv";
				break;
			case "1":
				prefix="pv";
				break;
			case "2":
				prefix="rg";
				break;
			case "5":
				prefix="pr";
				break;
			case "3":
				prefix="o";
				break;
			case "14":
				prefix="c";
				break;
			case "15":
				prefix="e";
				break;
			default:
				break;
		}		
		var attrNum=cm.cm_exAttr.length;
		if (attrNum>15){
			attrNum=15;
		}
		for (i=0;i<attrNum;i++){
			if (cm.tid=="2"){
				Attval=prefix+(i+1);
			} else {
				Attval=prefix+"_a"+(i+1);
			}
			cm[Attval]=cm.cm_exAttr[i];
		}
		// calculate hash value for shop tags
		cm.cm_exAttr=null;
	}	
	if ((cm.pi == null) && (cm.pc == "Y")) {
		cm.pi = cmGetDefaultPageID();
	}

	//make sure sku values in sx11 do not overflow
	if (cm.tid == "4") {
		var maxlength = 100;
        var length = cm.sx11.length;
        if (length>maxlength) {
			var tempSKU = cm.sx11;
            cm.sx11 = tempSKU.substring(0,maxlength);
            if (length<=2*maxlength)
            {
                cm.sx12 = tempSKU.substring(maxlength,length);
            } else {
                cm.sx12 = tempSKU.substring(maxlength,2*maxlength);
                if (length<=3*maxlength)
                {
                    cm.sx13 = tempSKU.substring(2*maxlength,length);
                } else {
                    cm.sx13 = tempSKU.substring(2*maxlength,3*maxlength);
                    if (length<=4*maxlength)
                    {
                        cm.sx14 = tempSKU.substring(3*maxlength,length);
                    } else {
                        cm.sx14 = tempSKU.substring(3*maxlength,4*maxlength);
                        cm.sx15 = tempSKU.substring(4*maxlength,length);
                    }                        
                }    
            }
        }
	}

	try{
		if (parent.cm_ref != null) {
			cm.rf = parent.cm_ref;
			if (cm.pc == "Y") {
				parent.cm_ref = document.URL;
			}
		}
	
		// if parent had mmc variables and this is the first pageview, add mmc to this url
		if(parent.cm_set_mmc) {
			cm.ul = document.location.href + 
					((document.location.href.indexOf("?") < 0) ? "?" : "&") + 
					parent.cm_mmc_params; 
			if (cm.pc == "Y") {
				parent.cm_ref = cm.ul;
				parent.cm_set_mmc = false;
			}
		}
	}
	catch(err){}

	if (cm.ul == null) {
		cm.ul = window.location.href;
	}

	// call ParseRef on referringURL for every tag
	cm.rf = ParseRef(document.referrer);


	//check for zero price and zero quantity
	cmSafeZero(cm,["qt","bp","tr","sg"]);

	//check for manual_cm_mmc parameter;
	if (this.manual_cm_mmc != null) {
		cm.ul = cm.ul + ((cm.ul.indexOf("&") == -1) ? ((cm.ul.indexOf("?") == -1) ? "?" : "&") : "&") + "cm_mmc=" + this.manual_cm_mmc;
	}

	cm.ul = cmConvertMMC(cm.ul);

	// convert MMC parameters to lowercase;
	cm.ul = cm.ul.replace(/cm_mmc/gi,"cm_mmc");
	cm.ul = cm.ul.replace(/cm_ven/gi,"cm_ven");
	cm.ul = cm.ul.replace(/cm_cat/gi,"cm_cat");
	cm.ul = cm.ul.replace(/cm_pla/gi,"cm_pla");
	cm.ul = cm.ul.replace(/cm_ite/gi,"cm_ite");
	if (cmCheckCMEMFlag){cmStartTagSet();}
	cm.writeImg();
	if (cmCheckCMEMFlag) {
		cmCheckCMEMFlag = false;	
		cmCheckCMEM();
		cmSendTagSet();		
	}
	
}

// HELPER FUNCTIONS -----------------------------------------------------------
/* These functions are used by the tag-generating functions and/or may be used
 * in in general as convenience functions
 */

/*
 * Creates an acceptable default Page ID value to use for Pageview tags.
 * The default Page ID is based on the URL, and consists of the path and
 * filename (without the protocol, domain and query string).
 * 
 * example:
 * returns "x/y/MyPage.asp" for the URL http://www.mysite.com/x/y/MyPage.asp
 */
function cmGetDefaultPageID() { 
	var pageName = window.location.pathname; 

	// eliminates everything after "?" (for Opera browswers)
	var tempIndex1 = pageName.indexOf("?");
	if (tempIndex1 != -1) {
		pageName = pageName.substr(0, tempIndex1);
	}
	// eliminates everything after "#" (for Opera browswers)
	var tempIndex2 = pageName.indexOf("#");
	if (tempIndex2 != -1) {
		pageName = pageName.substr(0, tempIndex2);
	}
	// eliminates everything after ";"
	var tempIndex3 = pageName.indexOf(";");
	if (tempIndex3 != -1) {
		pageName = pageName.substr(0, tempIndex3);
	}

	var slashPos = pageName.lastIndexOf("/");
	if (slashPos == pageName.length - 1) {
		pageName = pageName + "index.cfm"; /****************** SET TO DEFAULT DOC NAME */
	}

	while (pageName.indexOf("/") == 0) {
		pageName = pageName.substr(1,pageName.length);
	}

	return(pageName); 
} 

function cmIndexOfParameter (parameter, inString) {
	return inString.indexOf(parameter);
}

function cmExtractParameter (parameter, inString) {
    if (cmIndexOfParameter(parameter, inString) == -1) {
        return null;
    }
	var s = inString;
	var begin = s.indexOf(parameter);
	var end = s.indexOf("&", begin);
	if (end == -1) {
		end = s.length;
	}
	var middle = s.indexOf("=", begin);
	return s.substring(middle + 1, end);
}

function cmRemoveParameter (parameter, inString) {
    if (cmIndexOfParameter(parameter, inString) == -1) {
        return inString;
    }
	var s = inString;
	var begin = s.indexOf(parameter);
	var start = (begin - 1);
	var end = s.indexOf("&", begin);
	if (end == -1) {
		end = s.length;
	}
	if (s.substring(start, begin) == "?") {    // retain leading "?"
		start = (start + 1);
		end = (end + 1);
	}
	return s.substring(0, start) + s.substring(end, s.length);
}

function cmCheckCMEM() {
	if (cmIndexOfParameter("cm_em",document.location.href) != -1){
		var emailAddress = cmExtractParameter("cm_em",document.location.href);
		if (emailAddress.indexOf(":")>-1){
			emailAddress=emailAddress.substring(emailAddress.indexOf(":")+1);
		}
		cmCreateRegistrationTag(emailAddress,emailAddress);
	}
	if (cmIndexOfParameter("cm_lm",document.location.href) != -1){
		var emailAddress = cmExtractParameter("cm_lm",document.location.href);
		if (emailAddress.indexOf(":")>-1){
			emailAddress=emailAddress.substring(emailAddress.indexOf(":")+1);
		}		
		cmCreateRegistrationTag(emailAddress,emailAddress);
	}
}

function cmSafeZero(cm, checkArray) {
	// put logic here to convert number 0 to string "0"
	for (var i = 0; i < checkArray.length; ++i) {
		if ((cm[checkArray[i]] != null) && (cm[checkArray[i]] == 0)) {
			cm[checkArray[i]] = "0";
		}
	}
}

function ParseRef (url) {
    var cm_ref;
    if (url.toLowerCase().indexOf("cm_ref=") >= 0) {
        var start = url.toLowerCase().indexOf("cm_ref=") + 7;
        var stop = url.indexOf("&", start);
        if (stop < 0) {
            stop = url.length;
        }
        cm_ref = unescape(url.substring(start, stop));
    }
    // Fall back to document.referrer if nothing is in the URL
    if (!cm_ref && document.referrer) {
        return document.referrer;
    }
    return cm_ref;
}

function custIDcheck(cust_id) {
	var id_value;
	id_value = cI("cmCustID");
	id_value = unescape(id_value);
	var foreverDate = new Date();
	foreverDate.setFullYear(foreverDate.getFullYear() + 50);
	if (cust_id != null && cust_id != '') {
		if (id_value != cust_id) {
			document.cookie = "cmCustID=" + escape(cust_id) + "; expires=" + foreverDate.toGMTString() + ";path=/;";
		}
		id_value = cust_id;
	} else {
		id_value = (Math.round(Math.random() * 1000000000000)) + (foreverDate.getTime()%1000);
		document.cookie = "cmCustID=" + id_value + "; expires=" + foreverDate.toGMTString() + ";path=/;";
	}
	return id_value;
}

function getUrlParameters(urlStr)
{
    var parameters = new Object();
    var paramStart = urlStr.indexOf('?');
    if (paramStart < 0)
    {
        return parameters;
    }
    
    var paramEnd = urlStr.indexOf('#');
    if (paramEnd < 0)
    {
        paramEnd = urlStr.length;
    }
    
    var paramList = urlStr.substring(paramStart+1).split('&');
    for (var i = 0; i < paramList.length; ++i)
    {
        paramList[i] = paramList[i].split('=');
        parameters[unescape(paramList[i][0])] = unescape(paramList[i][1]);
    }
    
    return parameters;
}

function getViewsetFromCategory(category)
{
    var colon = category.indexOf(':');
    if (colon < 0)
    {
        return "E";
    }

    return category.substring(0, colon);
}

function getCategoryOverride(bannercookiename)
{
    var params = getUrlParameters("" + location.href);
    
    //CHR-157 Remove Campaigns from Coremetrics logic
    //if (typeof params.bnrid == "string" && params.bnrid.length > 0)
    //{
    //    return "Campaign";
    //}
    
    if (typeof params.cm_src == "string" &&
        params.cm_src.length > 0 &&
        params.cm_src != "None" )
    {
        return params.cm_src;
    }
    
    return null;
}

function writeCmSrc()
{
    //alert(cmCategoryId);
    document.write('<input type="hidden" name="u_cmsrc" value="' + cmCategoryId + '">');
}

function cmConvertMMC(url) {
	var newURL=url;
	if (this.cm_sdxmmc){
		var tstURL=url.toLowerCase();
		if (cm_sdxmmc && (tstURL.indexOf("cm_ven")==-1) && (tstURL.indexOf("cm_mmc")==-1)) { 
			if (tstURL.indexOf("?")>0){
				tstURL=tstURL+"&"+cm_sdxmmc;
			}
			else{
				tstURL=tstURL+"?"+cm_sdxmmc;
			}
		} 
		newURL=tstURL;
	}
	if(this.gs_mmc_ven){
		mmc_string=(window.location.href.indexOf("?")==-1?"?":"&")+"cm_ven="+this.gs_mmc_ven;
		if(this.gs_mmc_cat){
			mmc_string+="&cm_cat="+this.gs_mmc_cat;
		}
		if(this.gs_mmc_pla){
			mmc_string+="&cm_pla="+this.gs_mmc_pla;
		}
		if(this.gs_mmc_ite){
			mmc_string+="&cm_ite="+this.gs_mmc_ite;
		}
		newURL=window.location.href+mmc_string;
	}
	return newURL;
}

function cmCalcShopHash(input) {
	return input;
}



/*
 * Link normalization
 */

if (defaultNormalize == null) { var defaultNormalize = null; }

function myNormalizeURL(url, isHref)
{
    var newURL = url;
    if (isHref)
    {
        // parse out domain from url
        if (url.indexOf("http://") == 0 || url.indexOf("https://") == 0)
        {
            newURL = newURL.substring(newURL.indexOf("://")+3);
            newURL = newURL.substring(newURL.indexOf("/"));
        }
    
        var blackList = ["cm_src=","cmsrc=","flash=","bnrid="];
        var paramString;
        var paramIndex = newURL.indexOf("?");
        var params;
        var keepParams = new Array();
        var goodParam;
        
        if (paramIndex > 0)
        {
            paramString = newURL.substring(paramIndex+1);
            newURL = newURL.substring(0, paramIndex);
            params = paramString.split("&");
    
            for (var i=0; i<params.length; i++)
            {
                goodParam = true;
                for(var j=0; j<blackList.length; j++)
                {
                    if (params[i].indexOf(blackList[j]) == 0)
                    {
                        goodParam = false;
                    }
                }

                if (goodParam == true)
                {
                    keepParams[keepParams.length] = params[i];
                }
            }

            newURL += "?" + keepParams.join("&");
        }
    }
 
    if (defaultNormalize != null) {
        newURL = defaultNormalize(newURL, isHref);
    }
    return newURL;
}

// install normalization
if (document.cmTagCtl != null) {
    var func = "" + document.cmTagCtl.normalizeURL;
    if (func.indexOf('myNormalizeURL') == -1) {
        defaultNormalize = document.cmTagCtl.normalizeURL;
        document.cmTagCtl.normalizeURL = myNormalizeURL;
    }
}

//-->