//////////////////////////////////////////////////////////////////////////////////////
// Omniture Wrapper
// Written By: Michael Johns mjohns(at)ea.com
// Date: 04/06
//
// Purpose: the following wrapper was created to abstract business names from logical
// names. This eliminates the touching of every Omniture call if for some reason the
// use of props, evars or events change. It also creates a means to select the type
// of reporting desired (custom link or Psuedo HTTP request). 
//
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
// Global Variables and Array declarations
//////////////////////////////////////////////////////////////////////////////////////
var prefix 							= "s_ea.";//object name
var eventArr           				= "eventsAssignmentArray";
var addValuesArr					= "additionalValuesAssignmentArray";
var eventsAssignmentArray 			= new Array();
var propsAssignmentArray 			= new Array();
var evarsAssignmentArray 			= new Array();
var additionalValuesAssignmentArray	= new Array();
var trackingItems      				= new Array(4);
trackingItems[ 0 ]     				= "props";
trackingItems[ 1 ]     				= "evars";
trackingItems[ 2 ]     				= "events";
trackingItems[ 3 ]     				= "additionalValues";
var eventString						= "";// holds the events
var extendOmniSession 				= 0;// flag set for omniKeepSessionAlive function
var numOfExtensions 				= 1;//multiple # times 29 mins.
var timesSessionExtended 			= 1;//counter for # of times session 

//////////////////////////////////////////////////////////////////////////////////////
// Function setOmniValues
//
// Description: This function separates the business names from the logical
// and takes in all the possible values associated with custom links and 
// standard HTTP requests. It will populate and evaluate the params being
// passed in and map to appropriate Omniture values.
//
// link - "this" passes link object
//
// type - type of link (mandatory for custom link reporting)
// 			'o' for Custom Link
// 			'd' to include in the File Downloads report
// 			'e' to include in the Exit Links report
//
// linkName - without a Link Name, the link will be reported by URL
//
// props - list of props and values, example:
// 			'userid=prop1value,sitecode=prop2value' 
// 		 	*** never use actual param name, always the business name (userid instead of prop1)
// 			*** See omnitureMapping function for business names (*not case sensitive)
//
// evars - list of evars and values, example:
// 			'userid=evar1value,sitecode=evar2value' 
// 		 	*** never use actual param name, always the business name (userid instead of evar1)
// 			*** See omnitureMapping function for business names (*not case sensitive)
//
// events - list of events to trigger example:
// 			'successdownload,successregistration'
// 			*** never use actual param name, always the business name (successdownload instead of event2)
// 			*** See omnitureMapping function for business names (*not case sensitive)
//
// reportPageView - flag to report data as cutomlink (0) or a psuedo HTTP request (1)
//
// productDetails - list of products example:
// 					'categoryValue2; productName1 (id1),categoryValue2; productName2 (id2)
//
// additionalValues - used to report any additional values that need to be set example:
// 					'campaign=campaignValue,state=stateValue,zip=zipValue,cc=USD'	
// 					*** See omnitureMapping function for business names (*not case sensitive)
//
// pageName - used to override the pageName (s_ea.pageName) example:
//            'myNewPageName'
//            *** if blank or null the pageName will not change
// 
// Called By: external links
//
//////////////////////////////////////////////////////////////////////////////////////
function setOmniValues(link, type, linkName, props, evars, events, reportPageView, productDetails, additionalValues, pageName){
	
	// re-intialize arrays/strings
	propsAssignmentArray.length 			= 0;
	evarsAssignmentArray.length 			= 0;
	eventsAssignmentArray.length 			= 0;
	additionalValuesAssignmentArray.length	= 0;
	eventString								= "";
	
	//reinitialize object
	s_ea = s_gi(s_account);
	//check if pageName needs to be overridden
	if(isNotEmpty(pageName)) {
		s_ea.pageName = pageName;
	}
	          
    // put raw split data in named arrays
	// example propsAssignmentArray --> userid=prop1value,sitecode=prop2value,brand=prop3value
	for (i = 0; i<=3; i++) {
    	if(isNotEmpty(eval(trackingItems[ i ]))){
			var chunk = eval(trackingItems[ i ]);
			var currArrayName = trackingItems[ i ] + "AssignmentArray";
			eval(currArrayName + " = chunk.split(',')");
		    // split assigned values into two-dimensional array
			// DO NOT need to do anything to events since values are driven by
			// evar and events are only comma "," delimited
			if( currArrayName != eventArr){
				var currArraySegmentedName = trackingItems[ i ] + "Array";
				for (var j=0; j < eval(currArrayName).length; j++) {
					// example of currArraySegmentedName -->  userid,prop1value
					currArraySegmentedName = eval(currArrayName)[ j ].split("=");
					// convert business names to omniture names
					// example --> userid switched to prop1
					currArraySegmentedName[ 0 ] = omnitureMapping(currArraySegmentedName[ 0 ], trackingItems[ i ]);
					// swapping in array example --> userid=prop1Value becomes prop1,prop1Value
					eval(currArrayName)[ j ] = currArraySegmentedName;
				}
			}else{
				for (var j=0; j < eval(currArrayName).length; j++) {
					// for event array example --> successdownload set to event2
					// also builds up string of events for assignment to
					// _ea.linkTrackEvents and s_ea.events
					eventString += eval(currArrayName)[ j ] = omnitureMapping(eval(currArrayName)[ j ], trackingItems[ i ]);
					
					if(j < eval(currArrayName).length - 1){
		 				eventString += ",";
		 			}
				}
			}
			
			// set individual variable assignment
			if( currArrayName != eventArr){
				assignValuestoParams(i);
			}
		}
	}
	
	//get events if any
	var currEvents = assignEvents(reportPageView);
		
	//assign to s_ea.linkTrackVars 
    assignLinkTrackVars(reportPageView, currEvents, productDetails);
	
	//assign to s_ea.products 
    assignProducts(reportPageView, productDetails);
		
	//call appropriate reporting function
	reportData(link, type, linkName, reportPageView);
	
};

//////////////////////////////////////////////////////////////////////////////////////
// Function omniLinkCall
//
// Description: This function reports a custom link name without changing any other
// parameters. This is equivalent to using the setOmniValues. Either method is 
// acceptable.
//
// link - "this" passes link object
//
// linkName - without a Link Name, the link will be reported by URL
//
// Called By: external links
//
//////////////////////////////////////////////////////////////////////////////////////
function omniLinkCall(link,linkName) {
	setOmniValues(link,'o',linkName,'','','',0,'','');
};

//////////////////////////////////////////////////////////////////////////////////////
// Function assignEvents
//
// Description: Assigns new values from array to s_ea.linkTrackEvents and 
// s_ea.events variable based on the type of reporting selected. 
//
// reportPageView - flag to report data as cutomlink (0) or a psuedo HTTP request (1)
//
// returns: "None" or "events"
//
// Called By: setOmniValues
//
//////////////////////////////////////////////////////////////////////////////////////
function assignEvents(reportPageView){

	s_ea.linkTrackEvents = "None";
	s_ea.events = "";
	
	if((reportPageView)&&(eventsAssignmentArray.length > 0)){
		s_ea.events = eventString;
		return "None";
	}
	
	if((!reportPageView)&&(eventsAssignmentArray.length > 0)){
		s_ea.linkTrackEvents = eventString;
		s_ea.events = eventString;
		return "events";
	}
	return "None";
};

//////////////////////////////////////////////////////////////////////////////////////
// function reportData
//
// Description: calls the appropriate function:
// 				s_ea.t() psuedo HTTP request or s_ea.tl() Custom Link
// to trigger the correct type of reporting
//
// link - "this" passes link object
//
// type - type of link (mandatory for custom link reporting)
// 			'o' for Custom Link
// 			'd' to include in the File Downloads report
// 			'e' to include in the Exit Links report
//
// linkName - without a Link Name, the link will be reported by URL
//
// reportPageView - flag to report data as cutomlink (0) or a psuedo HTTP request (1)
//
// Called By: setOmniValues
//
//////////////////////////////////////////////////////////////////////////////////////
function reportData(link, type, linkName, reportPageView){

	if(reportPageView){
		s_ea.t();
	}else{
		linkName = s_ea.pageName+":"+linkName;//add pageName to Link Name
		if(isNotEmpty(link)){
			s_ea.tl(link, type, linkName);
		}else{
		   	s_ea.tl('', type, linkName);
		}
		
	}
};

//////////////////////////////////////////////////////////////////////////////////////
// Function assignProducts
//
// Description: sets s_ea.products to actual product data
//
// reportPageView - flag to report data as cutomlink (0) or a psuedo HTTP request (1)
//
// productDetails - string containg product details
//
// Called By: setOmniValues
//
//////////////////////////////////////////////////////////////////////////////////////
function assignProducts(reportPageView, productDetails){

	s_ea.products = "";
	
	if(isNotEmpty(productDetails)){
		s_ea.products = productDetails;
	}
};

//////////////////////////////////////////////////////////////////////////////////////
// Function assignLinkTrackVars
//
// Description: Assigns new values from arrays to s_ea.linkTrackVars variable
//
// reportPageView - flag to report data as cutomlink (0) or a psuedo HTTP request (1)
//
// currEvents - string containg "None" or "events" set by assignEvents()
//
// productDetails - string of product details passed in from link
//
// Called By: setOmniValues
//
//////////////////////////////////////////////////////////////////////////////////////
function assignLinkTrackVars(reportPageView, currEvents, productDetails){

	if(reportPageView){
		//props and evars do NOT needs to be set since s_ea.t() sends everything (props/evars)
		s_ea.linkTrackVars = "None";
		
	}else{
		var currProps 				= getLinkTrackVarsValues("propsAssignmentArray");
		var currEvars 				= getLinkTrackVarsValues("evarsAssignmentArray");
		var currAdditionalValues 	= getLinkTrackVarsValues("additionalValuesAssignmentArray");
				
		if(isNotEmpty(productDetails)){
			currProductDetails = "products";
		}else{
			currProductDetails = "None";
		}
		s_ea.linkTrackVars = buildLinkTrackVarsValues(currProps, currEvars, currAdditionalValues, currEvents, currProductDetails);
	}
};

//////////////////////////////////////////////////////////////////////////////////////
// Function buildLinkTrackVarsValues
//
// Description: compiles new values from arrays to be assigned to s_ea.linkTrackVars
// variable
//
// currProps - string of props being reported
// currEvars - string of evars being reported
// currAdditionalValues - string of aditional values being reported
// currEvents - string "None" or "events"
// currProductDetails - string "None" or "products"
//
// Called By: assignLinkTrackVars
//
// Returns: arr (aggregated array of all values for linkTrackVars)
//
//////////////////////////////////////////////////////////////////////////////////////
function buildLinkTrackVarsValues(currProps, currEvars, currAdditionalValues, currEvents, currProductDetails){
	
	var arr = new Array();
	if(currProps != "None") arr.push(currProps);
	
	if(currEvars != "None") arr.push(currEvars);
	
	if(currAdditionalValues != "None") arr.push(currAdditionalValues);
	
	if(currEvents != "None") arr.push(currEvents);
	
	if(currProductDetails != "None") arr.push(currProductDetails);
	
	if(arr.length == 0) {
		return 'None';
	} else {
		return arr.join(",");
	}
};

//////////////////////////////////////////////////////////////////////////////////////
// Function getLinkTrackVarsValues
//
// Description: pulls and assigns new values from arrays to s_ea.linkTrackVars variable 
//
// arrayName - name of array to be used to pull values from
//
// Called By: assignLinkTrackVars
//
// Returns: linkTrackVarsValues (string of all values for linkTrackVars)
//
//////////////////////////////////////////////////////////////////////////////////////
function getLinkTrackVarsValues(arrayName){

	if(eval(arrayName).length > 0){
		linkTrackVarsValues = "";
		// populate s_ea.s_linkTrackVars with array data
		for (var i=0; i < eval(arrayName).length; i++) {
		 	linkTrackVarsValues += eval(arrayName)[i][0];
		 	// need to add "," between values except last one
		 	if(i < eval(arrayName).length - 1){
		 		linkTrackVarsValues += ",";
		 	}
		}
	}else{
		linkTrackVarsValues = "None";
	}
 return linkTrackVarsValues;

};

//////////////////////////////////////////////////////////////////////////////////////
// Function assignValuestoParams
//
// Description: resolves values from array and assigns to appropriate omniture variable
//
// Called By: setOmniValues
//
//////////////////////////////////////////////////////////////////////////////////////
function assignValuestoParams(arrayPos){

	var currMultiDimArrayName = eval(trackingItems[ arrayPos ] + "AssignmentArray");
	var arrName = trackingItems[ arrayPos ] + "AssignmentArray";
		
	for (var m=0; m < currMultiDimArrayName.length; m++) {
		// assigns value to params example --> s_ea.prop1 = prop1Value
		eval(prefix + currMultiDimArrayName[m][0] + "= currMultiDimArrayName[m][1]");
	}
	
};

//////////////////////////////////////////////////////////////////////////////////////
// Function isNotEmpty
//
// Checks if the string is null or contains spaces only
//
// val - any string/array
//
// Called By: setOmniValues, assignProducts, assignLinkTrackVars
//
// Returns: true or false
//
//////////////////////////////////////////////////////////////////////////////////////
function isNotEmpty(val){

     re = /^ *$/;
     if(re.exec(val)||(val == null)){
          return false;
     }else{
          return true;
     }
};

//////////////////////////////////////////////////////////////////////////////////////
// Function modifyOmniRSI
//
// updates report suite Id(s) of current page object
//
// newRSI - total string of comma separated RSIs
//
// sendBroadcast - flag to send broadcast, (0) don't send and (1) send. 
//                 If no parameter then defaults to (0), don't send
//
// Called By: page
//
//////////////////////////////////////////////////////////////////////////////////////
function modifyOmniRSI(newRSI,sendBroadcast){
	
	s_account = newRSI;
	s_ea.sa(newRSI);
	if(isNotEmpty(sendBroadcast)) {
		if(sendBroadcast){
			setOmniValues('','','','','','',1,'','');
		}
	}
};

////////////////////////////////////////////////////////////////////////////////////////
// Function omnitureMapping
//
// Description: Remaps business names to omniture names or returns "notFound"
//
// currValue - current array being populated:
//				propsAssignmentArray
//				evarsAssignmentArray
//				additionalValuesAssignmentArray
//				eventsAssignmentArray
//
// typeOfValue - type of array value being passed in
//				"props"
//				"evars";
//				"events";
//				"additionalValues";
//
// Called By: setOmniValues
//
// Returns: Omniture logical value of parameter
//
//////////////////////////////////////////////////////////////////////////////////////
function omnitureMapping(currValue, typeOfValue){

	currValue = currValue.toLowerCase();
 
	var lookupTable = new Array();
	// eVars	
	if(typeOfValue == "evars"){
		lookupTable["userid"]						= "eVar1";
		lookupTable["sitecode"]						= "eVar2";
		lookupTable["game"]							= "eVar3";
		lookupTable["newslettertype"]				= "eVar4";
		lookupTable["intcmp"]						= "eVar5";
		lookupTable["registrationlevel"]			= "eVar6";
		lookupTable["supporteventtype"]				= "eVar7";
		lookupTable["downloadtype"]					= "eVar8";
		lookupTable["gamespecifictype"]				= "eVar9";
		lookupTable["registrationtype"]				= "eVar10";
		lookupTable["purchaseintentaction"]			= "eVar11";
		lookupTable["extcampaignid"]				= "eVar14";
		lookupTable["entitlementtype"]				= "eVar15";
		lookupTable["territory"]					= "eVar18";
		lookupTable["abtest"]						= "eVar19";
		lookupTable["intsearchterms"]				= "eVar20";
		lookupTable["prodfindingmethod"]			= "eVar22";
		lookupTable["merchcategorybrowse"]			= "eVar23";
		lookupTable["crossselltype"]				= "eVar24";
		lookupTable["originatingpage"]				= "eVar25";
		lookupTable["promocode"]					= "eVar26";
		lookupTable["shipmethod"]					= "eVar27";
		lookupTable["paymentmethod"]				= "eVar28";
		lookupTable["originalsite"]					= "eVar29";
		lookupTable["recentsite"]					= "eVar30";
		lookupTable["deliverymethod"]				= "eVar31";
		lookupTable["ordertype"]					= "eVar32";
		//lookupTable[""]							= "eVar33";
		lookupTable["label"]						= "eVar34";
		lookupTable["buymodulename"]				= "eVar35";
	}
			
	//sProps
	if(typeOfValue == "props"){
		lookupTable["userid"]						= "prop1";
		lookupTable["sitecode"]						= "prop2";
		lookupTable["brand"]						= "prop3";
		lookupTable["franchise"]					= "prop4";
		lookupTable["game"]							= "prop5";
		lookupTable["platform"]						= "prop6";
		lookupTable["longpagename"]					= "prop7";
		lookupTable["registrationlevel"]			= "prop8";
		lookupTable["gamespecifictrafficvalue"]		= "prop9";
		lookupTable["contenttitle"]					= "prop10";
		lookupTable["territory"]					= "prop11";
		lookupTable["language"]						= "prop12";
		lookupTable["contentmediatype"]				= "prop13";
		lookupTable["contentcategory"]				= "prop14";
		lookupTable["contentbucket"]				= "prop15";
		lookupTable["contenttype"]					= "prop16";
		lookupTable["country"]						= "prop17";
		lookupTable["localpagename"]				= "prop18";
		lookupTable["abtest"]						= "prop19";
		lookupTable["intsearchterms"]				= "prop20";
		lookupTable["searchnoresults"]				= "prop21";
		lookupTable["searchcategory"]				= "prop22";
		lookupTable["pagedetailviews"]				= "prop23";
		lookupTable["pagenamesdetailviews"]			= "prop24";
		lookupTable["prodregplatform"]				= "prop25";
		lookupTable["prodreggametitle"]				= "prop26";
		lookupTable["prodregcountry"]				= "prop27";
		lookupTable["gfcategory"]					= "prop28";
		lookupTable["gfcomponent"]					= "prop29";
		lookupTable["gfsearchterm"]					= "prop30";
		lookupTable["gfsorttype"]					= "prop31";
		lookupTable["gfpagepath"]					= "prop32";
		lookupTable["subbrand"]						= "prop35";
		lookupTable["server"]						= "server";
	}
	
	//events 
	if(typeOfValue == "events"){
		//custom events below
		lookupTable["htmlopens"] 					= "event1";
		lookupTable["successdownload"] 				= "event2";
		lookupTable["successregistration"] 			= "event3";
		lookupTable["passalong"] 					= "event4";
		lookupTable["successentitlementexpiration"] = "event5";
		lookupTable["successentitlement"] 			= "event6";
		lookupTable["totalclicks"] 					= "event7";
		lookupTable["successgamespecific"] 			= "event9";
		lookupTable["searches"] 					= "event10";
		lookupTable["successsupport"] 				= "event11";
		lookupTable["successfindastore"] 			= "event12";
		lookupTable["proddetailviews"] 				= "event13";
		lookupTable["logins"] 						= "event14";
		lookupTable["successpurchaseintent"] 		= "event15";
		lookupTable["successnewsletter"] 			= "event16";
		lookupTable["successcancelsubscription"] 	= "event17";
		lookupTable["acctcreation"] 				= "event18";
		lookupTable["shipping"] 					= "event19";
		lookupTable["tax"] 							= "event20";
		lookupTable["revieworder"] 					= "event21";
		lookupTable["cashcardpurchase"] 			= "event23";
				
		// standard events below
		lookupTable["successproductview"] 			= "prodView";
		lookupTable["successcartview"] 				= "scView";
		lookupTable["successscopen"] 				= "scOpen";
		lookupTable["successscadd"] 				= "scAdd";
		lookupTable["successscremove"] 				= "scRemove";
		lookupTable["successsccheckout"] 			= "scCheckout";
		lookupTable["successpurchase"] 				= "purchase";
	}
	
	//additionalvalues
	if(typeOfValue == "additionalValues"){
		lookupTable["zip"]							= "zip";
		lookupTable["campaign"]						= "campaign";
		lookupTable["state"]						= "state";
		lookupTable["usd"]							= "USD";
        lookupTable["charset"]						= "charSet";
		lookupTable["purchaseid"]					= "purchaseID";
	}
	
	var omniValue = lookupTable[currValue];
	if (omniValue == null){
		omniValue = "notFound";
	}
	return omniValue;
};

//////////////////////////////////////////////////////////////////////////////////////
// Function buildContentType
//
// Description: Builds content type of the base tagging
//
// content_type_media - top level categorization of content type
//				
// content_type_classification - combined (with ::) secondary and ternary level
//                               categorization of content type
//
// content_type_title - title of content type
//
// content_type - aggregate of content_type_media, content_type_classification (split)
//                and content_type_title (colon delimited)
//
// Called By: various dynamic page components
//
// Calls: setOmniValues with 3 pieces of content type categorization and title  
//        or "Unset" if DCR does not pass in valid parameters.
//////////////////////////////////////////////////////////////////////////////////////
function buildContentType(content_type_media, content_type_classification, content_type_title){
		
	if((content_type_media == "<ADD CONTENT>") || (!isNotEmpty(content_type_media)) || (content_type_media == "undefined")){
		content_type_media = "Unset";
	}
	
	if((!isNotEmpty(content_type_title)) || (content_type_title == "undefined")){
		content_type_title = "Unset";
	}
	
	if((content_type_classification == "<ADD CONTENT>") || (content_type_classification == "undefined")){
		classification_category = "Unset";
		classification_subcategory = "Unset";
	} else {
		var ct_pieces = content_type_classification.split("::");

		classification_category = ct_pieces[0];
		classification_subcategory = ct_pieces[1];
	}
	
	setOmniValues('','','','contentmediatype='+content_type_media+',contentcategory='+classification_category+',contentbucket='+classification_subcategory+',contenttitle='+content_type_title+',contenttype='+content_type_media+' : '+classification_category+' : '+classification_subcategory+' : '+content_type_title,'', '', 1);
};

//////////////////////////////////////////////////////////////////////////////////////
// Function omniUpdateContentType
//
// Description: updates content types and sends broadcast
//
// content_type_media - top level categorization of content type
//				
// content_type_category - secondary level categorization of content type
//
// content_type_contentbucket - ternary level categorization of content type
//
// content_type_title - title of content type
//
// content_type - aggregate of content_type_media, content_type_category
//                content_type_contentbucket and content_type_title (colon delimited)
//
// Called By: various dynamic page components
//
// Calls: setOmniValues with 4 pieces of content type categorization and title  
//        or maintains previously set value if not passed in valid parameter or null.
//////////////////////////////////////////////////////////////////////////////////////
function omniUpdateContentType(content_type_media, content_type_category, content_type_contentbucket, content_type_title){
		
	if((!isNotEmpty(content_type_media)) || (content_type_media == "undefined") || (content_type_media == null)){
		content_type_media = eval(prefix + omnitureMapping("contentmediatype", "props"));
	}
	
	if((!isNotEmpty(content_type_category)) || (content_type_category == "undefined") || (content_type_category == null)){
		content_type_category = eval(prefix+ omnitureMapping("contentcategory", "props"));
	}
	
	if((!isNotEmpty(content_type_contentbucket)) || (content_type_contentbucket == "undefined") || (content_type_contentbucket == null)){
		content_type_contentbucket = eval(prefix + omnitureMapping("contentbucket", "props"));
	}
	
	if((!isNotEmpty(content_type_title)) || (content_type_title == "undefined") || (content_type_title == null)){
		content_type_title = eval(prefix + omnitureMapping("contenttitle", "props"));
	}
		
	setOmniValues('','','','contentmediatype='+content_type_media+',contentcategory='+content_type_category+',contentbucket='+content_type_contentbucket+',contenttitle='+content_type_title+',contenttype='+content_type_media+' : '+content_type_category+' : '+content_type_contentbucket+' : '+content_type_title,'', '', 1);
};

//////////////////////////////////////////////////////////////////////////////////////
// Function omniLocalize
//
// Description: localizes relevant variables in HTML (not flash) based on language code
// 
// langCode - required language code 
//
// addRSI - optional additional report suites (comma delimited) to be appended to the
//          standard report suites that are already associated with the specified
//          language code 
// 
// sendBroadcast - optional flag to send broadcast,(0) don't send and (1) send. 
//                 If no parameter then defaults to (1), send
// 
// isEcomSite - optional flag to denote if an ecommerce site, (0) not ecomm, (1) is
//
//////////////////////////////////////////////////////////////////////////////////////
function omniLocalize(langCode, addRSI, sendBroadcast, isEcomSite){

    var langCodeLC = langCode.toLowerCase();
 
    var localizedTable = new Array();
    
    localizedTable["en_ca"]        = new Array("CA","NA","eaeacom,eaeacomna");
    localizedTable["zh_cn"]        = new Array("CN","APAC","eaeacom");
    localizedTable["zh_hk"]        = new Array("CN","APAC","eaeacom");
    localizedTable["zh_tw"]        = new Array("TW","APAC","eaeacom");
    localizedTable["cs_cz"]        = new Array("CZ","EMEA","eaeacom,eaeacomeu,easportscz");
    localizedTable["da_dk"]        = new Array("DK","EMEA","eaeacom,eaeacomeu,easportsdk");
    localizedTable["nl_nl"]        = new Array("NL","EMEA","eaeacom,eaeacomeu,easportsnl");
    localizedTable["en_au"]        = new Array("AU","EMEA","eaeacom");
    localizedTable["en_ie"]        = new Array("IE","EMEA","eaeacom,eaeacomeu,eagamesuk");
    localizedTable["en_nz"]        = new Array("NZ","EMEA","eaeacom");
    localizedTable["en_za"]        = new Array("ZA","EMEA","eaeacom");
    localizedTable["en_gb"]        = new Array("UK","EMEA","eaeacom,eaeacomeu,eagamesuk");
    localizedTable["en_us"]        = new Array("US","NA","eaeacom,aeacomna");
    localizedTable["fi_fi"]        = new Array("FI","EMEA","eaeacom,eaeacomeu,easportsfi");
    localizedTable["fr_fr"]        = new Array("FR","EMEA","eaeacom,eaeacomeu,easportsfr");
    localizedTable["de_de"]        = new Array("DE","EMEA","eaeacom,eaeacomeu,eagamesde");
    localizedTable["hu_hu"]        = new Array("HU","EMEA","eaeacom,eaeacomeu,easportshu");
    localizedTable["it_it"]        = new Array("IT","EMEA","eaeacom,eaeacomeu,easportsit");
    localizedTable["ja_jp"]        = new Array("JP","APAC","eaeacom");
    localizedTable["ko_kr"]        = new Array("KR","APAC","eaeacom");
    localizedTable["es_mx"]        = new Array("MX","NA","eaeacom,eaeacomna");
    localizedTable["no_no"]        = new Array("NO","EMEA","eaeacom,eaeacomeu,easportsno");
    localizedTable["pl_pl"]        = new Array("PL","EMEA","eaeacom,eaeacomeu,easportspl");
    localizedTable["pt_br"]        = new Array("BR","LTAM","eaeacom,eaeacomeu,easportsbr");
    localizedTable["pt_pt"]        = new Array("PT","EMEA","eaeacom,eaeacomeu,easportspt");
    localizedTable["ru_ru"]        = new Array("RU","EMEA","eaeacom,eaeacomeu,eagamesru");
    localizedTable["es_es"]        = new Array("ES","EMEA","eaeacom,eaeacomeu,easportses");
    localizedTable["sv_se"]        = new Array("SE","EMEA","eaeacom,eaeacomeu,easportsse");
    localizedTable["th_th"]        = new Array("TH","APAC","eaeacom");
    localizedTable["el_gr"]        = new Array("GR","EMEA","eaeacom,eaeacomeu,easportsgr");
    localizedTable["fr_be"]        = new Array("BE","EMEA","eaeacom,eaeacomeu,easportsnl");
    localizedTable["nl_be"]        = new Array("BE","EMEA","eaeacom,eaeacomeu,easportsnl");
    
    var currCountry;
    var currRegion;
    var currRSI;
        
    if(localizedTable[langCodeLC] != null) {
        currCountry = localizedTable[langCodeLC][0];
        currRegion = localizedTable[langCodeLC][1];
        currRSI = localizedTable[langCodeLC][2];
    } else {
        currCountry = "US";
        currRegion = "NA";
        currRSI = "eaeacom,eaeacomna";
    }
    
    var ps = ":";
    
    s_ea.pageName = currRegion + ps + currCountry + s_ea.pageName.substring(s_ea.pageName.indexOf(":", s_ea.pageName.indexOf(":")+1));
 
    s_ea.prop11= currRegion;
    s_ea.prop12= langCode;
    s_ea.prop17= currCountry;
    
    var currSiteID = s_ea.prop18.split(":");
	if (currSiteID.length == 3) {
	    s_ea.prop18 = currCountry + ps + currSiteID[1] + ps + currSiteID[2];
	}

    s_ea.eVar17= currCountry;
    s_ea.eVar18= currRegion;
    
    if(isNotEmpty(isEcomSite)){
        if(!isEcomSite){
            var currMRSiteID = s_ea.eVar30.split(":");
			if (currMRSiteID.length == 3) {
            	s_ea.eVar30 = currCountry + ps + currMRSiteID[1] + ps + currMRSiteID[2];
			}
        }
    }

    if(isNotEmpty(addRSI)){
        currRSI += "," + addRSI;
    }
    
    modifyOmniRSI(currRSI,sendBroadcast);
};
	
//////////////////////////////////////////////////////////////////////////////////////
// Function omniKeepSessionAlive
//
// Description: utility function recursively called. This function extends the user 
// session by sending out a custom link broadcast at approx 28-29 mins. of the session
// since the session will end at 30 min.
//
//////////////////////////////////////////////////////////////////////////////////////	

function omniKeepSessionAlive(){
	
	if(extendOmniSession){
		omniLinkCall(this,'extendSession');
	}
	if(timesSessionExtended <= numOfExtensions){
		extendOmniSession = 1;
		timesSessionExtended++;
		setTimeout("omniKeepSessionAlive()",1700000);
	}
};

omniKeepSessionAlive();//kicks off timer onload
//////////////////////////////////////////////////////////////////////////////////////
// END OF CODE
//////////////////////////////////////////////////////////////////////////////////////

