<!--
/*
 * cmdatatagutils.js
 *
 * $Revision:&
 * $Id: cmdatatagutils%20-%206370697-90031492-091108.txt 109383 2009-02-04 17:54:50Z hwhite $
 * Coremetrics Tag v3.1, 2/28/2002
 * COPYRIGHT 1999-2002 COREMETRICS, INC. 
 * ALL RIGHTS RESERVED. U.S.PATENT PENDING
 *
 * The following functions aid in the creation of Coremetrics data tags.
 *
 * Date				Engineer		Desc
 *	08/09/07		MOCHOA		Add Manual Tags
 *	09/10/07		MOCHOA		Add Conversion Event Tags
 *								Add Element Tags
 *								Add Endeca Function
 *								Add Livemail Function
 *  10/29/07		MOCHOA		Add Number of Search Results parameter to pageviewtag
 *  02/14/08		Odemyanyuk	Updated library to Multiclient version replaced 
 *  							functions  for tag creation to cmMakeTag functions.
 *  06/27/08        LHIBBARD    Added orderType to order tag, added normalization
 *  06/27/08		HWHITE		Added two parameters to setClientID function to handle client managed
 *                              first party
 */

// TAG GENERATING FUNCTIONS ---------------------------------------------------

cmSetClientID("90031492");

var cm_TrackLink = "A";
var cm_TrackImpressions = "RS";
var cm_JSFEnabled = false;
var cm_tempHost;
var coreHost;

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;

/*
	ATTENTION: This function (cmSetClientID) is an OD custom function.  It has to be
	added to every cmdatatagutils.js library we get from Coremetrics in the future.
*/
function cmSetClientID(clientID,firstPartyCM,hostDomain){
	if (firstPartyCM==null){
		cm_JSFEnabled=false;
	} else {
		cm_JSFEnabled=firstPartyCM;
	}
	cm_ClientID=clientID; 
	cm_tempHost = hostDomain;
	if (!hostDomain && firstPartyCM==false){
		cm_tempHost="data.coremetrics.com/eluminate?";
	}	
} 

/*
 * Calling this function points tags to the production database
 */
function cmSetProduction(){
	if (cm_JSFEnabled==false){
		if (cm_tempHost && !coreHost){
			cm_HOST = cm_tempHost; 
		} else {
			cm_HOST = coreHost; 
		}			
	} else {
		cm_HOST="data.coremetrics.com/eluminate?";
		cm_JSFPCookieDomain=cm_tempHost;
	}
}

var cmEndecaSearchTerm = new Array();
var cmEndecaDimension = new Array();
var cmEndecaDimensionValue = new Array();
var cmEndecaCounter = 0;
 
function cmCreateEndecaSearch(searchTerm, dimension, dimensionValue) {
            cmEndecaSearchTerm[cmEndecaCounter] = searchTerm;
            cmEndecaDimension[cmEndecaCounter] = dimension;
            cmEndecaDimensionValue[cmEndecaCounter] = dimensionValue;
            cmEndecaCounter++;
}
 
function cmDisplayEndecaSearch() {
            var i;
 
            var datestamp = new Date();
            var stamp = (Math.floor(Math.random() * 11111111)) + datestamp.valueOf();
 
            for(i=0; i<cmEndecaCounter;i++){
                        var cm = new _cm("tid", "7", "vn2", "e4.0");
 
                        cm.li = 10100;
                        cm.ps1 = cmEndecaSearchTerm[i];
                        cm.ps2 = cmEndecaDimension[i];
                        cm.ps3 = cmEndecaDimensionValue[i];
                        cm.ps4 = stamp;
                        cm.writeImg();
            }
 
            cmEndecaCounter = 0;
}
 
function cmCreateEndecaClick(searchTerm, dimension, dimensionValue) {
            cmEndecaSearchTerm[cmEndecaCounter] = searchTerm;
            cmEndecaDimension[cmEndecaCounter] = dimension;
            cmEndecaDimensionValue[cmEndecaCounter] = dimensionValue;
            cmEndecaCounter++;
}
 
function cmDisplayEndecaClick() {
            var i;
 
            var datestamp = new Date();
            var stamp = (Math.floor(Math.random() * 11111111)) + datestamp.valueOf();
 
            for(i=0; i<cmEndecaCounter;i++){
                        var cm = new _cm("tid", "7", "vn2", "e4.0");
 
                        cm.li = 10101;
                        cm.ps1 = cmEndecaSearchTerm[i];
                        cm.ps2 = cmEndecaDimension[i];
                        cm.ps3 = cmEndecaDimensionValue[i];
                        cm.ps4 = stamp;
                        cm.writeImg();
            }
            cmEndecaCounter = 0;
}

// done
function cmCreatePageElementTag(elementID, elementCategory, pageID, pageCategoryID, elementLocation){
	cmMakeTag(["tid", "15", "eid", elementID, "ecat", elementCategory, "pflg", "0", "pid", pageID, "pcat", pageCategoryID, "eloc", elementLocation]);
}

// done
function cmCreateProductElementTag(elementID, elementCategory, productID, productCategoryID, elementLocation) {
	cmMakeTag(["tid","15","eid",elementID,"ecat",elementCategory,"pflg","1","pid",productID,"pcat",productCategoryID,"eloc",elementLocation]);
}

// done
function cmCreateConversionEventTag(eventID, actionType, categoryID, points) {
	cmMakeTag(["tid","14","cid",eventID,"cat",actionType,"ccid",categoryID,"cpt",points]);
}

// done
function cmCreateManualImpressionTag(pageID, trackSP, trackRE){
	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();
		cmCreateLinkTag(cm_ClientTS, cmLnkT3, name, href, false, pageID);
	}
}

// done
/* manual PageviewTag for off site page tagging.  Allows client to supply URL and Referring URL
*/
function cmCreateManualPageviewTag(pageID, categoryID, DestinationURL, ReferringURL, searchTerm){
	if (searchTerm) {
		cmMakeTag(["tid", "1", "pi", pageID, "cg", categoryID, "ul", DestinationURL, "rf", ReferringURL, "se", searchTerm]);		
	} else {
		cmMakeTag(["tid", "1", "pi", pageID, "cg", categoryID, "ul", DestinationURL, "rf", ReferringURL]);	
	}
}

// done
/*
 * Creates a Tech Props tag.
 * pageID		: required. Page ID to set on this Pageview tag
 */
function cmCreateTechPropsTag(pageID, categoryID, referralURL) {
	if (referralURL) {
		cmMakeTag(["tid", "6", "pi", pageID, "cg", categoryID, "pc", "Y", "rf", referralURL]);
	} else {
		cmMakeTag(["tid", "6", "pi", pageID, "cg", categoryID, "pc", "Y"]);
	}
}



//done

/*
 * Creates a Pageview tag with the given Page ID
 *
 * pageID		: required. Page ID to set on this Pageview tag
 * searchString	: optional. Internal search string enterred by user to reach
 *				  this page.
 * categoryID	: optional. Category ID to set on this Pageview tag
 * numberOfSearchResults : optional.  Number of search results returned from an onsite search
 * returns nothing, causes a document.write of an image request for this tag.
 */
function cmCreatePageviewTag(pageID, searchString, categoryID, referralURL, numberOfSearchResults) {
	if (pageID == null) { pageID = cmGetDefaultPageID(); }
	cmMakeTag(["tid","1","pi",pageID,"cg",categoryID,"se",searchString,"sr",numberOfSearchResults,"rf",referralURL]);
}



// done
/*
 * Creates a Pageview tag with the default value for Page ID. 
 * Format of Page ID is "x/y/z/MyPage.asp"
 *
 * returns nothing, causes a document.write of an image request for this tag.
 */
function cmCreateDefaultPageviewTag() {
	cmCreatePageviewTag(cmGetDefaultPageID(), null, null);
}

/*
 * Creates a Productview Tag
 * Also creates a Pageview Tag by setting pc="Y"
 * Format of Page ID is "PRODUCT: <Product Name> (<Product ID>)"
 *
 * productID	: required. Product ID to set on this Productview tag
 * productName	: required. Product Name to set on this Productview tag
 * categoryID	: optional. Category ID to set on this Productview tag 
 *
 * returns nothing, causes a document.write of an image request for this tag.
 */


//done 
function cmCreateProductviewTag(productID, productName, categoryID, referralURL) {
	if (productName == null) {
		productName = "";
	}
	if (referralURL) {
		cmMakeTag(["tid", "5", "pi", "PRODUCT: " + productName + " (" + productID + ")", "pr", productID, "pm", productName, "cg", categoryID, "pc", "Y", "rf", referralURL]);
	} else {
		cmMakeTag(["tid", "5", "pi", "PRODUCT: " + productName + " (" + productID + ")", "pr", productID, "pm", productName, "cg", categoryID, "pc", "Y"]);
	}
}

/*
 * Variables and Arrays to support Lineitem Aggregation
 */
var __sArray = new Array();
var __skuString = "";

function __cmGetPI(__id){
	var __pI;
	for (__pI = 0; __pI < __sArray.length; ++__pI) {
		if (__id == __sArray[__pI][1]) return __pI;
	}
	return -1;
}

function __cmGetPIPC(__pr,__cg) {
	var __pI;
	for (__pI = 0; __pI < __sArray.length; ++__pI) {
		if (__pr == __sArray[__pI][1] && __cg == __sArray[__pI][9]) return __pI;
	}
	return -1;
}

function cmAddShop(__v) {
	var __i = __cmGetPIPC(__v[1],__v[9]); /* uncomment for productID-categoryID aggregation */
	//var __i = __cmGetPI(__v[1]); /* uncomment for productID aggregation */
	if (__i == -1) {
		__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]);
	}
}

/*
 * Creates a Shop tag with Action 5 (Shopping Cart)
 *
 * productID	: required. Product ID to set on this Shop tag
 * quantity	: required. Quantity to set on this Shop tag
 * productPrice	: required. Price of one unit of this product
 * categoryID	: optional. Category to set on this Shop tag
 *
 * 
 */
function cmCreateShopAction5Tag(productID,productName,productQuantity,productPrice,categoryID) {
	var pattern = /[^\-0-9\.]/gi;
    productPrice = productPrice.toString().replace(pattern, "");
	cmAddShop(["pr",productID,"pm",productName,"qt",productQuantity,"bp",productPrice,"cg",categoryID,"at","5","tid","4","pc","N"]);
}

/*
 * Creates a Shop tag with Action 9 (Order Receipt / Confirmed)
 *
 * productID	: required. Product ID to set on this Shop tag
 * productName	: required. Product Name to set on this Shop tag
 * quantity	: required. Quantity to set on this Shop tag
 * productPrice	: required. Price of one unit of this product
 * customerID	: required. ID of customer making the purchase
 * orderID	: required. ID of order this lineitem belongs to
 * orderTotal	: required. Total price of order this lineitem belongs to
 * categoryID	: optional. Category to set on this Shop tag
 *
 */
function cmCreateShopAction9Tag(productID,productName,productQuantity,productPrice,customerID,orderID,orderTotal,categoryID) {
	var pattern = /[^\-0-9\.]/gi;
    productPrice = productPrice.toString().replace(pattern, "");
	orderTotal = orderTotal.toString().replace(pattern, "");
	cmAddShop(["pr",productID,"pm",productName,"qt",productQuantity,"bp",productPrice,"cg",categoryID,"cd",customerID,"on",orderID,"tr",orderTotal,"at","9","tid","4","pc","N"]);
	cmCalcSKUString();
}

function cmDisplayShop5s() {
	cmDisplayShops();
}

function cmDisplayShop9s() {
	cmCalcSKUString();
	cmDisplayShops();
}

function cmCalcSKUString() {
	__skuString = "";
	var __skuStringArray = new Array();
	for (i = 0; i < __sArray.length; ++i) {
		// aggregate
		var __skuStringArrayIndex = -1;
		for (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] = (((__sArray[i][7]*__sArray[i][5])+(__oP*__oQ))/__sArray[i][5]);		
		}
	}
	for (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();
}

/*
 * Creates an Order tag
 *
 * orderID			: required. Order ID of this order
 * orderTotal		: required. Total of this order (minus tax and shipping)
 * orderShipping	: required. Shipping charge for this order
 * customerID		: required. Customer ID that placed this order
 * customerCity		: optional. City of Customer that placed this order
 * customerState	: optional. State of Customer that placed this order
 * customerZIP		: optional. Zipcode of Customer that placed this order
 *
 */
function cmCreateOrderTag(orderID,orderTotal,orderShipping,customerID,customerCity,customerState,customerZIP,orderType) {
	var pattern = /[^\-0-9\.]/gi;
    orderShipping = orderShipping.toString().replace(pattern, "");
	orderTotal = orderTotal.toString().replace(pattern, "");
	cmMakeTag(["tid","3","osk",__skuString,"on",orderID,"tr",orderTotal,"sg",orderShipping,"cd",customerID,"ct",customerCity,"sa",customerState,"zp",customerZIP,"or1",orderType]);
	__skuString = "";
}


// done
/*
 * Creates a Registration tag and/or a Newsletter tag
 *
 * customerID		: required for Registration. ID of Customer to register.
 * customerEmail	: required for Newsletters. Optional for Registration.
 * customerCity		: optional. City of Customer that placed this order
 * customerState	: optional. State of Customer that placed this order
 * customerZIP		: optional. Zipcode of Customer that placed this order
 * newsletterName	: required for Newsletters. The name of the Newsletter.
 * subscribe		: required for Newsletters. Either "Y" or "N"
 *
 */
function cmCreateRegistrationTag(customerID, customerEmail, customerCity,
				customerState, customerZIP, newsletterName, 
				subscribe) {
	if (newsletterName && subscribe) {
		cmMakeTag(["tid", "2", "cd", customerID, "em", customerEmail, "ct", customerCity, "sa", customerState, "zp", customerZIP, "nl", newsletterName, "sd", subscribe]);
	} else {
		cmMakeTag(["tid", "2", "cd", customerID, "em", customerEmail, "ct", customerCity, "sa", customerState, "zp", customerZIP]);
	}
}


//done
/* 
 * Creates an Error Tag
 */
function cmCreateErrorTag() {
	pageID = cmGetDefaultPageID();
	cmMakeTag(["tid","404","pi",pageID,"pc","Y"]);
}

// done. 
/* 
 * Creates Zip Code tag 
 * zipCode	: Required. Zip code entered for browsing.
 */
function cmCreateZipCodeTag(zipCode) {
	cmMakeTag(["tid", "7", "li", "1", "ps1", zipCode]);
}


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;
	}

	if (cm.tid == "6") {
		cm.addTP();
	}

	if (cm.tid == "1") {
		if (cI("cmTPSet") != 'Y') {
			cm.tid = "6";
			cm.pc = "Y";
			cm.addTP();
			document.cookie = "cmTPSet=Y; path=/";
		}
	}

	if ((cm.pi == null) && (cm.pc == "Y")) {
		cm.pi = cmGetDefaultPageID();
	}

	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;
		}
	}

	if (cm.ul == null) {
		cm.ul = window.location.href;
	}

	//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;
	}

	// 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");

    cm.writeImg();
	if (cmCheckCMEMFlag) {
		cmCheckCMEMFlag = false;
		cmCheckCMEM();
	}
	
}

// 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 + "default.asp"; /****************** 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);
		cmCreateRegistrationTag(emailAddress,emailAddress);
	}
	if (cmIndexOfParameter("cm_lm",document.location.href) != -1){
		var emailAddress = cmExtractParameter("cm_lm",document.location.href);
		cmCreateRegistrationTag(emailAddress,emailAddress);
	}
}

function cmSafeZero(cm, checkArray) {
	// put logic here to convert number 0 to string "0"
	for (i = 0; i < checkArray.length; ++i) {
		if ((cm[checkArray[i]] != null) && (cm[checkArray[i]] == 0)) {
			cm[checkArray[i]] = "0";
		}
	}
}


if (defaultNormalize == null) { var defaultNormalize = null; }

function myNormalizeURL(url, isHref) {
    var newURL = url.toLowerCase();
	var pageURL=document.URL;
    // ... transform newURL here ...
	if (newURL.toLowerCase().indexOf(";jsessionid=")>0){
		var param = ";jsessionid=";
		var paramIndex = newURL.indexOf(param);

		if (paramIndex > 0) {
			var end = newURL.indexOf("?",paramIndex+param.length);
			var u = newURL.substring(0, paramIndex);
				if (end != -1){
					u += newURL.substring(end);
				}
				newURL = u;
		}
	}
	else {
		if (isHref) {

			if ((pageURL.toLowerCase().indexOf("/textsearch.do")>-1 || pageURL.toLowerCase().indexOf("/find.do")>-1 || pageURL.toLowerCase().indexOf("/items/add.do")>-1 || pageURL.toLowerCase().indexOf("/displaycart.do")>-1) && (newURL.toLowerCase().indexOf("/ddsku.do")>-1 || newURL.toLowerCase().indexOf("/textrefine.do")>-1 || newURL.toLowerCase().indexOf("/browse.do")>-1 || newURL.toLowerCase().indexOf("/in_dim_search")>-1 || newURL.toLowerCase().indexOf("/adredir.do")>-1 || newURL.toLowerCase().indexOf("/find.do")>-1)) {

				var whiteList = ["cm_re=", "cm_re_o=", "cm_sp=", "cm_sp_o=","cm_mmc=","cm_mmc_o="];
				var paramString;
				var paramIndex = newURL.indexOf("?");
				var params;
				var keepParams = new Array();
				
				if (paramIndex > 0) {
					paramString = newURL.substring(paramIndex+1);
					newURL = newURL.substring(0, paramIndex);
					params = paramString.split("&");
					for(var i=0; i<params.length; i++) {
						for(var j=0; j<whiteList.length; j++) {
							if (params[i].toLowerCase().indexOf(whiteList[j].toLowerCase()) == 0) {
								keepParams[keepParams.length] = params[i];
							}
						}
					}
				}
				newURL += "?" + keepParams.join("&");
			}
			else{
				var blackList = ["cartentryid=","cardnumber=","sid=","jsessionid=","ciid=","adurl"];
				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].toLowerCase().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;
    }
}


//-->