<!--
/*
 * cmdatatagutils.js
 * $Id: cmdatatagutils.js,v 1.1 2011/06/15 20:01:28 etribou Exp $
 * $Revision: 1.1 $
 *
 * Version 4.1.0
 *
 * Coremetrics Tag v4.0, 8/7/2006
 * COPYRIGHT 1999-2002 COREMETRICS, INC. 
 * ALL RIGHTS RESERVED. U.S.PATENT PENDING
 *
 * The following functions aid in the creation of Coremetrics data tags.
 * 061407	MOCHOA		Added Conversion Event Tag
 * 032608	MOCHOA		Enabled Element Tag function
 * 04/09/08	Hutch White	Add SessionID parameter to techprops tag
 *				auto generates conversion event when present
 * 				NOTE: if adding auto techprops, this will be a problem
 *				as pageview does not pass SessionID	
 * 07/03/08     Leslie Hibbard  Added Explore attributes
 * 08/05/08     Leslie Hibbard  Added sessionID to tech props and page view
 * 11/20/08	Yolanda Hunt	Placed standard Page View tag parameters at the top of the tag
 * 				Modified the attribute parameter to remove the custom tag from pv_a9
 * 12/18/08	Hutch White	Converted to maketag.  Added Explore attributes to all tagging
 * 04/14/09	WBIRD		Added cm_vc (IO); eluminate 4.2.7 (offsite impressions); non-slot ha1 logic;
 * 04/22/09     WBIRD           Added tealeaf integration code to maketag
 * 05/27/09	WBIRD		Removed custom tags li= 20, 25 and 40 and associated extra_fields (replaced by Explore)
 * 07/07/09	WBIRD		AdTarget provisioned
 * 03/05/10	WBIRD		Converted to multiclient / added reg+hview+hselect attributes
 * 09082010	WBIRD		Added attribute to cmCreateCartHotelBookingTag
 */

var cm_exAttr=new Array;  
var cm_ClientID = "99999999";
var cm_TrackLink = "A";
var cm_TrackImpressions = "RS";
var cm_JSFEnabled = false;
var cm_tempHost;
var cm_tempCookieDomain;
var cm_4_override;

var cm_VisitorSessionID;
var cmfirstFlag="Y";
if (cI("cmTPSet") == 'Y'){
	cmfirstFlag=null;
}

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;

/*
	clientID : REQUIRED: client id for particular site
	firstPartyCM : REQUIRED: true for Javascript First Party, false for 3rd party and 1st Party Subdomain
	hostDomain : REQUIRED for 1st PARTY:
			if firstPartyCM=true, set to site domain. 
			if firstPartyCM=false and site uses 1st party subdomain set to first party subdomain
			if firstPartyCM=false and hostDomain=null, automatically set to data.coremetrics.com
			cookieDomain : REQUIRED only for Delegated 1st party w/AdTarget - sets CoreAt in specified domain
*/
function cmSetClientID(clientID,firstPartyCM,hostDomain,cookieDomain){
	if (firstPartyCM==null || !firstPartyCM){
		cm_JSFEnabled=false;
	} else {
		cm_JSFEnabled=firstPartyCM;
	}
	cm_ClientID=clientID; 
	cm_tempHost = hostDomain;
	if ((!hostDomain && firstPartyCM==false) || (!hostDomain && !firstPartyCM)){
		cm_tempHost="data.coremetrics.com";
	}
// IO V4 case
	if (typeof(IORequest) == "function"){
		IORequest.client_id = cm_ClientID;
	}
// AdTarget case
	if (typeof cmLoad == 'function') {
		if (cookieDomain){	// Delegated 1st Party + AdTarget component
			cm_tempCookieDomain=cookieDomain;
		}
		cm_PartnerDataClientIDs = cm_ClientID; 
		if (cm_JSFEnabled==false) {
			cm_Production_HOST = cm_tempHost;
		} else {
			cm_Production_HOST = "data.coremetrics.com";
		}
		cmLoad();
	}
} 

/*
 * Calling this function points tags to the production database
 */
function cmSetProduction(){
	if (cm_JSFEnabled==false){
		cm_HOST=cm_tempHost+"/eluminate?";
		if (cm_tempCookieDomain){	// Delegated 1st Party + AdTarget component
			cm_JSFPCookieDomain=cm_tempCookieDomain;
		}	
	} else {
		cm_HOST="data.coremetrics.com/eluminate?";
		cm_JSFPCookieDomain=cm_tempHost;
	}
}

/* TAG GENERATING FUNCTIONS */

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);
	}
}

/* manual PageviewTag for off site page tagging.  Allows client to supply URL and Referring URL
*/
function cmCreateManualPageviewTag(pageID, categoryID,DestinationURL,ReferringURL) {
	cmMakeTag(["tid","1","pi",pageID,"cg",categoryID,"ul",DestinationURL,"rf",ReferringURL]);
}

function cmCreatePageElementTag(elementID, elementCategory,attributes) {
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}
	cmMakeTag(["tid","15","eid",elementID,"ecat",elementCategory,"pflg","0","cm_exAttr",cm_exAttr]);
}

 
/*
 * Creates a Tech Props tag.
 * pageID		: required. Page ID to set on this Pageview tag
 */
function cmCreateTechPropsTag(pageID, categoryID,visitorSessionID,attributes) {
    if(pageID == null) { pageID = cmGetDefaultPageID(); }
    languagePrefix = cmCheckLanguage();
	pageID= languagePrefix + pageID;
	categoryID = languagePrefix + categoryID;

	if (visitorSessionID){
		cmCreateConversionEventTag(visitorSessionID, "2", "Client Session ID", "50")
	}
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}	
	cmMakeTag(["tid","6","pi",pageID,"cg",categoryID,"pc","Y","cm_exAttr",cm_exAttr]);
}

/*
 * Creates a Pageview tag with the given Page ID
 *
 * pageID	: required. Page ID to set on this Pageview tag
 * categoryID	: optional. Category ID to set on this Pageview tag
 * searchString	: optional. Internal search string enterred by user to reach
 *				  this page.
 *
 * 
 */

function cmCreatePageviewTag(pageID, categoryID, searchString, searchResults, sortType, searchCheckindate, searchNights,searchRooms, searchChildren, searchAdults, searchHotel, searchRating, searchHotelResults,visitorSessionID,attributes) {

	if (pageID == null) { pageID = cmGetDefaultPageID(); } 
    attributes=sortType+"-_-"+ searchCheckindate+"-_-"+ searchNights+"-_-"+ searchRooms+"-_-"+ searchChildren+"-_-"+ searchAdults+"-_-"+ searchHotel+"-_-"+ searchRating+"-_-"+ searchHotelResults+"-_-"+ attributes;
	var cm_exAttr=new Array;
	cm_exAttr=attributes.split("-_-");
	if (visitorSessionID){
		cmCreateConversionEventTag(visitorSessionID, "2", "Client Session ID", "50")
	}

	languagePrefix = cmCheckLanguage();
	pageID = languagePrefix + pageID;
	categoryID = languagePrefix + categoryID;
	cmMakeTag(["tid","1","pi",pageID,"cg",categoryID,"se",searchString,"sr",searchResults,"cm_exAttr",cm_exAttr])
}

/*
 * Creates a Pageview tag with the default value for Page ID. 
 * Format of Page ID is "x/y/z/MyPage.asp"
 *
 * 
 */
function cmCreateDefaultPageviewTag(categoryID) {
	cmCreatePageviewTag(cmGetDefaultPageID(), categoryID);
}

/*
 * 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 
 *
 * 
 */
function cmCreateProductviewTag(productID, productName, categoryID, venue, attributes) {
    attributes=venue+"-_-"+ attributes
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}
	languagePrefix = cmCheckLanguage();
	categoryID= languagePrefix + categoryID; 
	cmMakeTag(["tid","5","pi",languagePrefix + "PRODUCT: " + productName + " (" + productID + ")","pr",productID,"pm",productName,"cg",categoryID,"pc","Y","cm_vc",cmExtractParameter("cm_vc",document.location.href),"cm_exAttr",cm_exAttr]);
}

/*
 * Variables and Arrays to support Lineitem Aggregation
 */
var __sArray = new Array();
var __skuString = "";
var __ex=new Array();

function __cmGetPIPC(__pr,__cg) {
	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] && __cg == __sArray[__pI][9] && cmAttr1==cmAttr2){
				return __pI;
			}
		} else {
		if (__pr == __sArray[__pI][1] && __cg == __sArray[__pI][9]) return __pI;
		}
	}
	return -1;
}

function cmAddShop(__v) {

	var __i = __cmGetPIPC(__v[1],__v[9]);
	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]);
	}
}

/*
 * 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
 *
 * 
 */

var custom_shopLink = (dt.getTime()%10000000) + (Math.floor(Math.random()*10000));

function cmCreateShopAction5Tag(productID, productName, productQuantity, productPrice, categoryID, shopType, SKU, venue, attributes) {
    
	var pattern = /[^\-0-9\.]/gi;
    productPrice = productPrice.toString().replace(pattern, "");   
	languagePrefix = cmCheckLanguage();
	var cm_slotNum;	
	
	if(!attributes)
	{
		attributes=shopType+"-_-"+"-_-"+SKU+"-_-"+venue+"-_-"+attributes;
	}
	if (attributes){
		__ex=attributes.split("-_-"); 
	} else {
	__ex=new Array();
	}
	cmAddShop(["pr",productID,"pm",productName,"qt",productQuantity,"bp",productPrice,"cg",languagePrefix + categoryID,"ha1",attributes ? cm_hex_sha1(attributes) : null,"at","5","tid","4","pc","N"]);

}

function cmDisplayShop5s() {
	cmDisplayShops();
}

/*
 * 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
 *
 * returns nothing, causes a document.write of an image request for this tag.
 */
function cmCreateShopAction9Tag(productID, productName, productQuantity,productPrice, customerID, orderID,orderTotal, categoryID, shopType, SKU, venue, attributes) {

	var cm_slotNum;
	var pattern = /[^\-0-9\.]/gi;
	var pattern1 = /^\s+|\s+$/gi;
    productPrice = productPrice.toString().replace(pattern, "");
	orderTotal = orderTotal.toString().replace(pattern, "");
	productID = productID.toString().replace(pattern1, "");	  	
    languagePrefix = cmCheckLanguage();
    if(!attributes)
    {
    	attributes=shopType+"-_-"+"-_-"+SKU+"-_-"+venue+"-_-"+attributes;
    }
    
	if (attributes){
		__ex=attributes.split("-_-");
	} else {
	__ex=new Array();
	}
	cmAddShop(["pr",productID,"pm",productName,"qt",productQuantity,"bp",productPrice,"cd",customerID, "on",orderID,"tr",orderTotal,"cg",languagePrefix + categoryID,"ha1",attributes ? cm_hex_sha1(attributes) : null,"at","9","tid","4","pc","N"]);
}

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();
}


/*
 * 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, convCharge, attributes) {
	var pattern = /[^\-0-9\.]/gi;
    orderShipping = orderShipping.toString().replace(pattern, "");
	orderTotal = orderTotal.toString().replace(pattern, "");
	attributes=convCharge+"-_-"+attributes;
	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}	
	cmMakeTag(["tid","3","osk",__skuString,"on",orderID,"tr",orderTotal,"sg",orderShipping,"cd",customerID,"ct",customerCity,"sa",customerState,"zp",customerZIP,"or3",convCharge,"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 cmCreateHotelViewTag(propertyCode, propertyName, categoryID, hotelBrand, siteBrand, siteCountry, language, ZIP, city, state, country, rating, attributes) {
	var cm = new _cm("tid", "5", "vn2", "e4.0");
	cm.li  = "2";
 	if (attributes){
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}
    languagePrefix = cmCheckLanguage();
    cmMakeTag(["tid","5","pi",languagePrefix + "HOTEL VIEW: " + propertyName + "(" + propertyCode + ")","pr",propertyCode,"pm",propertyName,"cg",languagePrefix + categoryID,"pc","Y","li","2","ps1",propertyCode,"ps2",propertyName,"ps3",hotelBrand,"ps4",siteBrand,"ps5",language,"ps6",siteCountry,"ps7",ZIP,"ps8",city,"ps9",state,"ps10",country,"ps11",rating,"ps12",languagePrefix + categoryID,"cm_exAttr",cm_exAttr]);
}

function cmCreateHotelSelectionTag(propertyCode, propertyName, hotelBrand, categoryID, siteBrand, siteCountry, language, ZIP, city, state, country, roomNights, adultRoomNights, childrenRoomNights, unitPrice, rateType, roomCode, reservationStartDate, numRooms, lowAvgRate, avgNightRate, rating, childAges, attributes) {
	if (attributes){
		cm_4_override = true;
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}
	languagePrefix = cmCheckLanguage();
    cmMakeTag(["tid","4","at","5","pr",propertyCode,"pm",propertyName,"cg",languagePrefix + categoryID,"qt",roomNights,"bp",unitPrice,"pc","N","sx1",hotelBrand,"sx2",siteBrand + "|" + siteCountry,"sx3",language,"sx4",ZIP,"sx5",city,"sx6",state,"sx7",country,"sx8",adultRoomNights,"sx9",childrenRoomNights,"sx10",rateType,"sx11",roomCode,"sx14",reservationStartDate,"sx15",numRooms,"li","10","ps1",propertyCode,"ps2",propertyName,"ps3",lowAvgRate,"ps4",avgNightRate,"ps5",rating,"ps6",childAges,"ps7",languagePrefix + categoryID,"cm_exAttr",cm_exAttr]);
}

function cmCreateHotelBookingTag(propertyCode, propertyName, hotelBrand, categoryID, siteBrand, siteCountry, language, ZIP, city, state, country, roomNights, adultRoomNights, childrenRoomNights, unitPrice, rateType, roomCode, travelType, bookingConfirmationNumber, bookingTotal, tax, usedCreditBypass, customerID, userEmail, userCity, userState, userCountry, userZIP, newsletterName, subscribe, userPhone, signinQuestion, reservationStartDate, numRooms, cancellationWaiver, paymentType) {

	languagePrefix = cmCheckLanguage();

    cmMakeTag(["tid","4","at","9","pr",propertyCode,"pm",propertyName,"cg",languagePrefix + categoryID,"qt",roomNights,"bp",unitPrice,"on",bookingConfirmationNumber,"tr",bookingTotal,"tr",bookingTotal,"sg",tax,"cd",customerID,"pc","N","sx1",hotelBrand,"sx2",siteBrand + "|" + siteCountry,"sx3",language,"sx4",ZIP,"sx5",city,"sx6",state,"sx7",country,"sx8",adultRoomNights,"sx9",childrenRoomNights,"sx10",rateType,"sx11",roomCode,"sx12",usedCreditBypass,"sx14",reservationStartDate,"sx15",numRooms + "|" + travelType]);
    cmMakeTag(["tid","3","osk","|" + propertyCode + "|" + unitPrice + "|" + roomNights + "|","on",bookingConfirmationNumber,"tr",bookingTotal,"sg",tax,"cd",customerID,"ct",userCity,"sa",userState,"zp",userZIP,"or1",travelType,"or2",cancellationWaiver]);														
    cmMakeTag(["tid","2","cd",customerID,"em",userEmail,"ct",userCity,"sa",userState,"zp",userZIP,"nl",newsletterName,"sd",subscribe,"cy",userCountry,"rg11",userPhone,"rg12",signinQuestion,"rg13",paymentType]);
}

function cmCreateCartHotelBookingTag(propertyCode, propertyName, hotelBrand, categoryID, siteBrand, siteCountry, language, ZIP, city, state, country, 
	roomNights, adultRoomNights, childrenRoomNights, unitPrice, rateType, roomCode, travelType, bookingConfirmationNumber, bookingTotal, tax, usedCreditBypass, 
	customerID, reservationStartDate, numRooms, attributes) {	
	if (attributes){
		cm_4_override = true;
		var cm_exAttr=new Array;
		cm_exAttr=attributes.split("-_-");
	}
	languagePrefix = cmCheckLanguage();
    cmMakeTag(["tid","4","at","9","pr",propertyCode,"pm",propertyName,"cg",languagePrefix + categoryID,"qt",roomNights,"bp",unitPrice,"on",bookingConfirmationNumber,"tr",bookingTotal,"tr",bookingTotal,"sg",tax,"cd",customerID,"pc","N","sx1",hotelBrand,"sx2",siteBrand + "|" + siteCountry,"sx3",language,"sx4",ZIP,"sx5",city,"sx6",state,"sx7",country,"sx8",adultRoomNights,"sx9",childrenRoomNights,"sx10",rateType,"sx11",roomCode,"sx12",usedCreditBypass,"sx14",reservationStartDate,"sx15",numRooms + "|" + travelType,"cm_exAttr",cm_exAttr]);
}

/*
 * 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, userCountry, userPhone, signinQuestion, paymentType, attributes) {
        var cm_exAttr=new Array;
		if (attributes){
          cm_exAttr=attributes.split("-_-");
        }
        if(userPhone) {cm_exAttr[10]=userPhone;}
        if(signinQuestion) {cm_exAttr[11]=signinQuestion;}
	if(paymentType) {cm_exAttr[12]=paymentType;}

    cmMakeTag(["tid","2","cd",customerID,"em",customerEmail,"ct",customerCity,"sa",customerState,"zp",customerZIP,"nl",newsletterName,"sd",subscribe,"cy",userCountry,"rg11",userPhone,"rg12",signinQuestion,"rg13",paymentType,"cm_exAttr",cm_exAttr]);
}

/* Creates an Error Tag
 *
 */
function cmCreateErrorTag(pageID, categoryID) {
	if(pageID == null) {
		pageID = cmGetDefaultPageID();
	}
	cmMakeTag(["tid","404","pi",pageID,"cg",categoryID,"pc","Y"]);
}

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" && typeof(cm.cm_exAttr)!="undefined" || cm_4_override) {
		cm_4_override = false;
		switch(cm.tid){
			case "6":
				prefix="pv";
				break;
			case "1":
				prefix="pv";
				break;
			case "2":
				prefix="rg";
				break;
			case "4":
				prefix="s";
				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];
		}
		cm.cm_exAttr=null;
	}	
	if ((cm.pi == null) && (cm.pc == "Y")) {
		cm.pi = cmGetDefaultPageID();
	}

	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;
	}

	//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");
	if (cmCheckCMEMFlag){cmStartTagSet();}
    cm.writeImg();

	if (typeof(cm_TLCookie)!="undefined" && cmfirstFlag=="Y"){
    	cmStartTagSet();
		var eventID="TLTIID_"+cI(cm_TLCookie);
		cmfirstFlag="N";		
		cmCreateConversionEventTag(eventID,2,"Tealeaf",0);
	}

	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 + "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);
		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 cmCheckLanguage() {
	if ((cmIndexOfParameter("espanol.",document.URL) != -1) || (cmIndexOfParameter("lang=es",document.URL) != -1)) {
		var languagePrefix = "es:";
		return(languagePrefix);
	} else {
		languagePrefix = "";
		return(languagePrefix);
	}
}

if (defaultNormalize == null) { var defaultNormalize = null; }

function myNormalizeURL(url, isHref) {
    var newURL = url;
 
		if (isHref) {
			var blackList = [";jsessionid=","Values=","RawValues=","nameDD=","ratingDD="];
			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;
    }
}

/*  hash functions that support shop aggregation with attributes */
function cm_hex_sha1(s)    { return cm_rstr2hex(cm_rstr_sha1(cm_str2rstr_utf8(s))); }

function cm_rstr_sha1(s)
{
  return cm_binb2rstr(cm_binb_sha1(cm_rstr2binb(s), s.length * 8));
}

function cm_rstr2hex(input)
{
  var hex_tab = 0 ? "0123456789ABCDEF" : "0123456789abcdef";
  var output = "";
  var x;
  for(var i = 0; i < input.length; i++)
  {
    x = input.charCodeAt(i);
    output += hex_tab.charAt((x >>> 4) & 0x0F)
           +  hex_tab.charAt( x        & 0x0F);
  }
  return output;
}

function cm_str2rstr_utf8(input)
{
  var output = "";
  var i = -1;
  var x, y;

  while(++i < input.length)
  {
    /* Decode utf-16 surrogate pairs */
    x = input.charCodeAt(i);
    y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
    if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)
    {
      x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
      i++;
    }

    /* Encode output as utf-8 */
    if(x <= 0x7F)
      output += String.fromCharCode(x);
    else if(x <= 0x7FF)
      output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),
                                    0x80 | ( x         & 0x3F));
    else if(x <= 0xFFFF)
      output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
                                    0x80 | ((x >>> 6 ) & 0x3F),
                                    0x80 | ( x         & 0x3F));
    else if(x <= 0x1FFFFF)
      output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
                                    0x80 | ((x >>> 12) & 0x3F),
                                    0x80 | ((x >>> 6 ) & 0x3F),
                                    0x80 | ( x         & 0x3F));
  }
  return output;
}

function cm_rstr2binb(input)
{
  var output = Array(input.length >> 2);
  for(var i = 0; i < output.length; i++)
    output[i] = 0;
  for(var i = 0; i < input.length * 8; i += 8)
    output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
  return output;
}

function cm_binb2rstr(input)
{
  var output = "";
  for(var i = 0; i < input.length * 32; i += 8)
    output += String.fromCharCode((input[i>>5] >>> (24 - i % 32)) & 0xFF);
  return output;
}

function cm_binb_sha1(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << (24 - len % 32);
  x[((len + 64 >> 9) << 4) + 15] = len;

  var w = Array(80);
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
  var e = -1009589776;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;

    for(var j = 0; j < 80; j++)
    {
      if(j < 16) w[j] = x[i + j];
      else w[j] = cm_bit_rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
      var t = cm_safe_add(cm_safe_add(cm_bit_rol(a, 5), cm_sha1_ft(j, b, c, d)),
                       cm_safe_add(cm_safe_add(e, w[j]), cm_sha1_kt(j)));
      e = d;
      d = c;
      c = cm_bit_rol(b, 30);
      b = a;
      a = t;
    }

    a = cm_safe_add(a, olda);
    b = cm_safe_add(b, oldb);
    c = cm_safe_add(c, oldc);
    d = cm_safe_add(d, oldd);
    e = cm_safe_add(e, olde);
  }
  return Array(a, b, c, d, e);

}

function cm_sha1_ft(t, b, c, d)
{
  if(t < 20) return (b & c) | ((~b) & d);
  if(t < 40) return b ^ c ^ d;
  if(t < 60) return (b & c) | (b & d) | (c & d);
  return b ^ c ^ d;
}

function cm_sha1_kt(t)
{
  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
         (t < 60) ? -1894007588 : -899497514;
}

function cm_safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

function cm_bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

//-->
