/**
* File: CRMUtil.js
* Description: This file contains the functions to manage the CRM functionalities
* on the website.
* 
*  Name  Date       Description   
*  ----------------------------
*  RJ    5/6/2002   changed the IRegionalOfferTag function to add functionality 
*                   for RTO in Infiniti.Same as for NISSAN-(RJ)
*  SK    07/30/03   Added code in IRegionalOfferTag function to catch for 
*                   Homepage RTO tag and display a RTO of different
*                   height and width
*  Subbu 04/15/04   TAR 894 - Fixed Clickstream_Spanish, this function will append
*                    the site, area and creative name value pair to Url
*                   Also added the header revision history
*  Anup  04/15/04   TAR 902 | Made the image path variable in SwitchClickstream a local variable
*  SK    04/23/04   TAR 894 | Updated Clickstream_Spanish function with new format of Referral Tags
*  VK    04/28/04   InfinitiKorea: Made an entry for new function Clickstream_Korea
*  VK    04/30/04   InfinitiKorea: Changes to switchClickstream function
*  Anup  04/30/04   TAR939 | Added the strRTCUrl2 and strRTCUrl3 variables to store the destination path 
*                   for multiple RTC pages.
*  Vipul 05/19/04   InfinitiKorea | Set the cookie domain name appropriately in
*                   SetRefCookie and SetRefCookie (for .com, .co.xx and other domains)
*  BNK   06/26/04   Added code for the reporting pilot
*  Kearney 7/13/04  TAR1035: Removed case-sensitivity for Site Area Creative
*  Archana 07/22/2004  Added code for generating Custom reports on Reporting Pilot.
*  Archana 07/26/2004   Modified update reporting pilot for ebrochure download.
*  Eddie 08/18/2004 TAR852: Clickstream upgrade to the new RTWI interface
*  MBV 10/28/2004   Switchclickstream() function modified for Release 3
*  Scott 01/06/2005 Added new Omniture variables to ReportingObject_executeOmn() 
*  Anup  01/18/2005 General reporting cleanup & Updated with the changes to support flash events and actions 
*/

var intIsActiveCS=1;
var intIsActiveRTO=1;
var strNameTag;

var strVisitorIdText="visitorID";
var strVisitorIdLength=20;
var strZipCodeText="ZipCode";

var strCSImgSrc;
//BM added a secondary image source for the vanity URL
var strCSImgSrcSecon;
var strRTOImgSrc;
var strRTO2ImgSrc;
var doneLoading;

//TAR447: Anup- variable to store the RTC Href url 
var strRTCUrl;
var strRTCUrl2;
var strRTCUrl3;

// source page
var strSourcePage;
var strCRMURL;
var strCRMSite;
var strLocale;

//locale constants
var englishLocale = "en_US";
var spanishLocale = "es_US";
var koreaEnglishLocale = "en_KR";

//Referral Tags Constants
var strReferrer = "Referrer";
var strUnknownSite = "UnknownSite";
var strUnknownArea = "UnknownArea";
var strUnknownCreative = "UnknownCreative";

//Grab the referral tags and store them in cookies. Store in cookies only if they exists in URL
var strReferralSite="Site";
var strReferralArea="Area";
var strReferralCreative="Creative";

var objRTArgs=GetQueryString();
if(!(objRTArgs[strReferralSite]==null)){
    SetRefCookie(strReferralSite,escape(objRTArgs[strReferralSite]));
}
if(!(objRTArgs[strReferralArea]==null)){
    SetRefCookie(strReferralArea,escape(objRTArgs[strReferralArea]));
}
if(!(objRTArgs[strReferralCreative]==null)){
    SetRefCookie(strReferralCreative,escape(objRTArgs[strReferralCreative]));
}

//function to set session cookie for referral tags
function SetRefCookie(strCookieName,strCookieValue){
    var arrHostName=document.location.hostname.split(".");
    var hostName=null;
    
    //Check if the last word in the array is "com": assign last two words as cookie domain
    //Check if the second last word in the array is "co": assign last three words as cookie domain
    //ELSE assign complete domain name of the current page as cookie domain
    if (arrHostName[arrHostName.length-1] == "com") {
        hostName="."+arrHostName[arrHostName.length-2]+"."+arrHostName[arrHostName.length-1];
    } else if (arrHostName[arrHostName.length-2] == "co") {
        hostName="."+arrHostName[arrHostName.length-3]+"."+arrHostName[arrHostName.length-2]+"."+arrHostName[arrHostName.length-1];
    } else {
        hostName=document.location.hostname;
    }

    document.cookie=strCookieName+"="+escape(strCookieValue)+"; domain="+hostName+"; path=/";
    return;
}

//End of cookie writing for referral tags

function GetCookie(strCookieName){
    var strArg=strCookieName+"=";
    var intArgLen=strArg.length;
    var intCookieLen=document.cookie.length;
    var i=0;

    while(i<intCookieLen){
        var j=i+intArgLen;
        if(document.cookie.substring(i,j)==strArg){
            return GetCookieVal(j);
        }
        i=document.cookie.indexOf(" ",i)+1;
        if(i==0){
            break;
        }
    }
    return null;
}

function GetCookieVal(intOffset){
    var strEnd=document.cookie.indexOf(";",intOffset);
    if(strEnd==-1){
        strEnd=document.cookie.length;
    }
    return unescape(document.cookie.substring(intOffset,strEnd));
}

function SetCookie(strCookieName,strCookieValue){
    var dateNextYear=new Date();
    var arrHostName=document.location.hostname.split(".");
    var hostName=null;
    
    //Check if the last word in the array is "com": assign last two words as cookie domain
    //Check if the second last word in the array is "co": assign last three words as cookie domain
    //ELSE assign complete domain name of the current page as cookie domain

    if (arrHostName[arrHostName.length-1] == "com") {
        hostName="."+arrHostName[arrHostName.length-2]+"."+arrHostName[arrHostName.length-1];
    } else if (arrHostName[arrHostName.length-2] == "co") {
        hostName="."+arrHostName[arrHostName.length-3]+"."+arrHostName[arrHostName.length-2]+"."+arrHostName[arrHostName.length-1];
    } else {
        hostName=document.location.hostname;
    }

    dateNextYear.setFullYear(dateNextYear.getFullYear()+1);
    document.cookie=strCookieName+"="+escape(strCookieValue)+"; domain="+hostName+"; expires="+dateNextYear.toGMTString()+"; path=/";
    return;
}

function GetVisitorId(){
    CheckVisitorId();
    return GetCookie(strVisitorIdText);
 }

function SetVisitorId(strVisitorId){
    SetCookie(strVisitorIdText,strVisitorId);
    return;
}

function CheckVisitorId(){
    var strVID=GetCookie(strVisitorIdText);

    if(strVID==null||strVID==""||strVID.length>strVisitorIdLength){
        strVID=CreateRandomNumber(strVisitorIdLength);
    }
    SetCookie(strVisitorIdText,strVID);
    return;
}

function GetZipCode(){
    return GetCookie(strZipCodeText);
}

function SetZipCode(newZip){
    var strZipCode=new String(newZip);

    // if the zipcode is formatted xxxxx-xxxx, we will store only the
    // first 5 digits
    arrZipCode=strZipCode.split("-");

    SetCookie(strZipCodeText,arrZipCode[0]);
    return;
}

function CreateRandomNumber(numLength){

    //The function will generate a randon number of lenght numLength
    //The first 13 digits of the random number will be time in milli-seconds
    //since 1st January 1970. The rest of digits will be randomly generated.

    //the number of random digits in the random number
    var remainingLength = numLength - 13;

    //create the first 13 digits: number of milliseconds since
    var now = new Date();
    var strPrefix = now.getTime();

    //create the rest of digits
    // since the random number generator doesn't always give enough
    // digits, concatenate 2 sets of random numbers
    var strRandomDec1=Math.random().toString();
    var strRandomDec2=Math.random().toString();
    var arrRandomNumber1=strRandomDec1.split(".");
    var arrRandomNumber2=strRandomDec2.split(".");
    var strRandomNumber=arrRandomNumber1[1]+arrRandomNumber2[1];

    //if the number of digits is more, trim it
    var len=strRandomNumber.length;
    if (remainingLength <= len){
        strRandomNumber = strRandomNumber.substring(0,remainingLength);
    }

    //if the number of digits is less, pad it
    for(var i=0;i<remainingLength-len;i++){
        strRandomNumber = strRandomNumber+"0";
    }

    return strPrefix+strRandomNumber;

}


function switchClickstream (strPageName, strLinkSource) 
{
  var strVisitorId = GetVisitorId();
  var objMLArgs = GetQueryString();
  var strSCSImgSrc;
 
  if(intIsActiveCS && strVisitorId != null) 
  {
    // Entry made for Korea locale (both English and Hangul Languages for Korea will be taken care of here)
    // strLocale contains the site.
    
    if( typeof( RTWIBaseUrl ) != 'undefined' )
    {
      strSCSImgSrc = RTWIBaseUrl + '?Site=' + RTWICurrentSite + '&SessionId=' + strVisitorId + '&Page=' + strPageName;
    }
    else
    {
      strSCSImgSrc = strCRMURL + '?Site=' + RTWICurrentSite + '&SessionId=' + strVisitorId + '&Page=' + strPageName;
    }
    
    //If coming from an external site, add Referral Tag
    //Referral tag of the format: Referral=site_value|test_value|creative_value
    if(objMLArgs.Site || objMLArgs.Area || objMLArgs.Creative)
    {
      if(objMLArgs.Site)
      {
        strSCSImgSrc += '&' + strReferrer + '=' + objMLArgs.Site + '|';
      } 
      else 
      {
        strSCSImgSrc += '&Referrer=' + strUnknownSite + '|';
      }
 
      if(objMLArgs.Area)
      {
        strSCSImgSrc += objMLArgs.Area + '|';
      } 
      else 
      {
        strSCSImgSrc += strUnknownArea + '|';
      }
 
      if(objMLArgs.Creative)
      {
        strSCSImgSrc += objMLArgs.Creative;
      } 
      else 
      {
        strSCSImgSrc += strUnknownCreative;
      }
    }
    
    if( strLinkSource )
    {
      strSCSImgSrc += "&LinkSource=" + strLinkSource;
    }        
 
    if (document.images.csimage) 
    {
      document.images.csimage.src = strSCSImgSrc;
    }
    else 
    {
      var objImg = new Image ();
      objImg.src = strSCSImgSrc;
    }
  }
 
  return;
}

// Function to create the Clickstream tag

function Clickstream(strURL,strMake,strArea,strTopic,strCategory,strName, strSecondary){
    var strCSTag;
    // update global variable
    var strVisitorId = GetVisitorId();
    var objMLArgs=GetQueryString();
    
    strCRMURL = strURL;
    strNameTag = strName;
    strCRMSite = strMake;

    if (strMake == "NissanSpanish") {
        strLocale = spanishLocale;
    }
    else if (strMake == "InfinitiKorea") {
        strLocale = koreaEnglishLocale;
    }
    else if (strMake == "InfinitiKoreaHangul") {
        strLocale = koreaEnglishLocale; 
    }
    else {
        strLocale = englishLocale;
    }
    
    // Added 11-17-04 MBV: Set RTWICurrentSite...
    RTWICurrentSite = strMake;

    // update global source page variables
    strSourcePage = strName;

    if (intIsActiveCS && strVisitorId != null) {
        strCSImgSrc = strURL + '?Site=' + strMake + '&SessionId=' + strVisitorId + '&Page=' + strName;
 
        //If coming from an external site, add Referral Tag
        //Referral tag of the format: Referrer=site_value|area_value|creative_value
        if(objMLArgs.Site || objMLArgs.Area || objMLArgs.Creative){
            if(objMLArgs.Site){
                strCSImgSrc += '&' + strReferrer + '=' + objMLArgs.Site + '|';
            } else {
                strCSImgSrc += '&' + strReferrer + '=' + strUnknownSite + '|';
            }

            if(objMLArgs.Area){
                strCSImgSrc += objMLArgs.Area + '|';
            } else {
                strCSImgSrc += strUnknownArea + '|';
            }

            if(objMLArgs.Creative){
                strCSImgSrc += objMLArgs.Creative;
            } else {
                strCSImgSrc += strUnknownCreative;
            }
        }  
        
        // 11-29-2004 MBV: Modified for Release 3 to ensure that this
        // function does not result in a call if a Release 3 call has
        // already been made.
        if( typeof( OffersLoaded ) == 'undefined' ){
        	//BM added the following code for Vanity URL
        	//If strSecondary is not null then we have to write out the second clickstream tag
        	if(strSecondary!=null) {
            	strCSImgSrcSecon = strCSImgSrc;
            	strCSTagSecon='<img src="/m/static/i/spacer.gif" name="csimagesecon" border="0" width="1" height="1">';
            	document.write(strCSTagSecon);
            	document.onload = setTimeout("document.images.csimagesecon.src = strCSImgSrcSecon",1000);
        	} else {
            	strCSTag='<img src="/m/static/i/spacer.gif" name="csimage" border="0" width="1" height="1">';
            	document.write(strCSTag);
            	document.onload = setTimeout("document.images.csimage.src = strCSImgSrc",1000);
            }
        }
    }
    return;
}

function Clickstream_Spanish (strURL, strMake, strName) {
   //Spanish clickstreams will not support secondary/vanity URLs
    var strCSTag;
    // update global variable
    var strVisitorId = GetVisitorId();
    var objMLArgs=GetQueryString();
    
    strCRMURL = strURL;
    strNameTag = strName;
    strCRMSite = strMake;
    strLocale = spanishLocale;
    // update global source page variables
    strSourcePage = strName;
 
    if (intIsActiveCS && strVisitorId != null) {
        strCSImgSrc = strCRMURL + '?Site=' + strMake + '&SessionId=' + strVisitorId + '&Page=' + strName;
 
        //If coming from an external site, add Referral Tag
        //Referral tag of the format: Referral=site_value|test_value|creative_value
        if(objMLArgs.Site || objMLArgs.Area || objMLArgs.Creative){
            if(objMLArgs.Site){
                strCSImgSrc += '&' + strReferrer + '=' + objMLArgs.Site + '|';
            } else {
                strCSImgSrc += '&Referrer=' + strUnknownSite + '|';
            }
 
            if(objMLArgs.Area){
                strCSImgSrc += objMLArgs.Area + '|';
            } else {
                strCSImgSrc += strUnknownArea + '|';
            }
 
            if(objMLArgs.Creative){
                strCSImgSrc += objMLArgs.Creative;
            } else {
                strCSImgSrc += strUnknownCreative;
            }
        }  
        
        if(objMLArgs.LinkSource){
            strCSImgSrc += "&LinkSource=" + objMLArgs.LinkSource;
        }      
 
 	// Modify here to check existence of csimage...
	var obj = document.getElementById( 'csimage' );

        if( obj == null) {
			obj = true;
        }
        
		if( obj ) {
         strCSTag = '<img src="/m/static/i/spacer.gif" name="csimage" border="0" width="1" height="1">';
         document.write(strCSTag);
        }
        
        // 11-29-2004 MBV: Modified for Release 3 to ensure that this
        // function does not result in a call if a Release 3 call has
        // already been made.
        if( typeof( OffersLoaded ) == 'undefined' ){
        	document.onfiltered= setTimeout("document.images.csimage.src = strCSImgSrc",1000);
        	// document.onfiltered= setTimeout("swapCRMImage('document.images.csimage.src = strCSImgSrc')",1000);
        }
    }
 
    return;
}


function swapCRMImage(strEval){
    if(typeof(initDone)=="undefined"){
        if(doneLoading){
            eval(strEval);
        }else{
            setTimeout("swapCRMImage('"+strEval+"')",100);
        }
    }else{
        if(initDone){
            eval(strEval);
        }else{
            setTimeout("swapCRMImage('"+strEval+"')",100);
        }
    }
}

function openExternalLink(pageName, url) {
    switchClickstream(pageName);
    popExternal(url);
}

function GetQueryString(){
    var objQSArgs=new Object();
    var strQuery=document.location.search.substring(1);
    var arrPairs=strQuery.split("&");
 
    for(var i=0;i<arrPairs.length;i++){
        var pos=arrPairs[i].indexOf('=');

        if(pos==-1){continue;}

        var strName=arrPairs[i].substring(0,pos);
        var strValue=arrPairs[i].substring(pos+1);

		//TAR1035: Force key to Sentence case if referral key
		if (strName.toLowerCase() == strReferralSite.toLowerCase() ||
			strName.toLowerCase() == strReferralArea.toLowerCase() ||
			strName.toLowerCase() == strReferralCreative.toLowerCase()) {
			strName = strName.substring(0,1).toUpperCase() + strName.substring(1).toLowerCase();
			}
        objQSArgs[strName]=unescape(strValue);
    }
    return objQSArgs;
}

function NRegionalOfferTag(strURL,strName,strRTOPos,email,modelName,modelYear){

    var strRTO;
    var strVisitorId=GetVisitorId();
    var strZipCode=GetZipCode();
    var strCurrentState=document.location.href;
    var strReloadURL;
    var strZipCodeURL;
    var strZipCodeMessage;
    var strChangeZip;
    
    strNameTag=strName;

    if(intIsActiveRTO&&strVisitorId!=null&&(location.href.indexOf("Reload")<0)){
        strRTOImgSrc=strURL+'?SessionId='+strVisitorId+'&RPEvent=NissanRegionalExtendRTO&Zip='+strZipCode+'&Page='+strName+'&RTOPos='+strRTOPos;
        if(email){
            strRTOImgSrc+='&email='+email;
        }
        if(modelName){
            strRTOImgSrc+='&modelName='+modelName;
        }
        if(modelYear){
            strRTOImgSrc+='&modelYear='+modelYear;
        }
        if(strRTOPos=='5'){
            strRTO2ImgSrc = strRTOImgSrc;
        }

        //set the value of the RTC destination page
        strRTCUrl=strURL;
        strRTCUrl+='?SessionId='+strVisitorId;
        strRTCUrl+='&RPEvent=NissanRegionalAcceptRTO';
        strRTCUrl+='&Zip='+strZipCode;
        strRTCUrl+='&CurrentState='+strCurrentState;
        strRTCUrl+='&Page='+strName;
        strRTCUrl+='&RTOPos='+strRTOPos;
        if(email){
            strRTCUrl+='&email='+email;
        }
        if(modelName){
            strRTCUrl+='&modelName='+modelName;
        }
        if(modelYear){
            strRTCUrl+='&modelYear='+modelYear;
        }
        
        strRTO='<table width="209" border="0" cellpadding="0" cellspacing="0"><tr><td align="center" colspan="2">';   
        
        if(strRTOPos=='5'){
            strRTCUrl2=strRTCUrl;
            strRTO+='<a href="Javascript:gotoLink(strRTCUrl2)">';
            strRTO+='<img name="CRMImg2" src="/m/static/i/spacer.gif" width="209" height="87" border="0" onError="HandleRTCImageError(this,'+strRTOPos+')" onAbort="HandleRTCImageError(this,'+strRTOPos+')">';
        } else {
            strRTO+='<a href="Javascript:gotoLink(strRTCUrl)">';
            strRTO+='<img name="CRMImg" src="/m/static/i/spacer.gif" width="209" height="87" border="0" onError="HandleRTCImageError(this,'+strRTOPos+')" onAbort="HandleRTCImageError(this,'+strRTOPos+')">';
        }
        strRTO+='</a></td></tr>';
        document.write(strRTO);
        document.write('</table>');

        if(strRTOPos=='5'){
            document.onload=setTimeout("document.images.CRMImg2.src = strRTO2ImgSrc",1000);
        } else {
            document.onload=setTimeout("document.images.CRMImg.src = strRTOImgSrc",1000);
        }
    }

    if(strRTO!=""){
        rtoPresent = "Yes";
    }
    if(location.href.indexOf("Reload")>0){
        intCutPoint=location.href.indexOf("Reload")-1;
        strReloadURL=location.href.substring(0,intCutPoint);
        location=strReloadURL;
    }
}

function changeCRMImg(strURL){
    document.CRMImg.src=strURL;
}

function IRegionalOfferTag(strURL,strName,strRTOPos,email,modelName,modelYear){
    var strRTO;
    var strVisitorId=GetVisitorId();
    var strZipCode=GetZipCode();
    var strCurrentState=document.location.href;
    var strZipCodeURL="/form/global/UpdateZipCode";
    var strChangeZip;
    var strHomepageRTOTag = "GBL::Home:::GBLHome";
    strNameTag=strName;

    if(intIsActiveRTO&&strVisitorId!=null){
    // if (intIsActiveRTO && strVisitorId != null && (location.href.indexOf("Reload") < 0)) {
        strRTOImgSrc=strURL+'?SessionId='+strVisitorId+'&RPEvent=InfinitiRegionalExtendRTO&Zip='+strZipCode+'&Page='+strName+'&RTOPos='+strRTOPos;
        if(email){
            strRTOImgSrc+='&email='+email;
        }
        if(modelName){
            strRTOImgSrc+='&modelName='+modelName;
        }
        if(modelYear){
            strRTOImgSrc+='&modelYear='+modelYear;
        }
        if(strRTOPos=='05'){
            strRTO2ImgSrc=strRTOImgSrc;
        }
        if(strName == strHomepageRTOTag){
            strRTO3ImgSrc=strRTOImgSrc;
        }
        
        //set the value of the RTC destination page
        strRTCUrl=strURL;
        strRTCUrl+='?SessionId='+strVisitorId;
        strRTCUrl+='&RPEvent=InfinitiRegionalAcceptRTO';
        strRTCUrl+='&Zip='+strZipCode;
        strRTCUrl+='&CurrentState='+strCurrentState;
        // if (is.ie5) {strRTO += escape("?Reload")}
        strRTCUrl+='&Page='+strName;
        strRTCUrl+='&RTOPos='+strRTOPos;
        if(email){
            strRTCUrl+='&email='+email;
        }
        if(modelName){
            strRTCUrl+='&modelName='+modelName;
        }
        if(modelYear){
            strRTCUrl+='&modelYear='+modelYear;
        } 

        if(strRTOPos=='05'){
            strRTCUrl2=strRTCUrl;   
            strRTO='<a href="Javascript:gotoLink(strRTCUrl2)">';          
            strRTO+='<img name="rtoimage2" src="/m/static/i/spacer.gif" border="0" onError="HandleRTCImageError(this,\''+strRTOPos+'\')" onAbort="HandleRTCImageError(this,\''+strRTOPos+'\')">';
        } else if(strName == strHomepageRTOTag){
            strRTCUrl3=strRTCUrl;
            strRTO='<a href="Javascript:gotoLink(strRTCUrl3)">';         
            strRTO+='<img name="rtoimage3" width="91" height="102" src="/m/static/i/spacer.gif" border="0" onError="HandleRTCImageError(this,\''+strRTOPos+'\')" onAbort="HandleRTCImageError(this,\''+strRTOPos+'\')">';
        } else {
            strRTO='<a href="Javascript:gotoLink(strRTCUrl)">'; 
            strRTO+='<img name="rtoimage" src="/m/static/i/spacer.gif" border="0" onError="HandleRTCImageError(this,\''+strRTOPos+'\')" onAbort="HandleRTCImageError(this,\''+strRTOPos+'\')">';
        }
        strRTO+='</a>';

       document.write(strRTO);

        if((strZipCode!=null && strRTOPos!='05' && strName != strHomepageRTOTag)){
            strChangeZip='<br><img src="/m/static/i/spacer.gif" width="5" height="15">';
            strChangeZip+='<img name="changeZip" src="/m/static/i/gl_/gl_n_arrow.gif" border="0">';
            strChangeZip+='<img src="/m/static/i/spacer.gif" width="6" height="1">';
            strChangeZip+='<a href="';
            strChangeZip+=strZipCodeURL;
            strChangeZip+='?CurrentState='+strCurrentState;
            // if (is.ie5) {strChangeZip += escape("?Reload")}
            strChangeZip+='" class="rtnav">';
            strChangeZip+='Update Your Zip</a>';
            document.write(strChangeZip);
        }

        if(strRTOPos=='05'){
            document.onload = setTimeout("document.images.rtoimage2.src = strRTO2ImgSrc",1000);
        } else if(strName == strHomepageRTOTag){
            document.onload = setTimeout("document.images.rtoimage3.src = strRTO3ImgSrc",1000);
        } else {
            document.onload = setTimeout("document.images.rtoimage.src = strRTOImgSrc",1000);
        }
    }
    if(location.href.indexOf("Reload")>0){
        intCutPoint=location.href.indexOf("Reload")-1;
        strReloadURL=location.href.substring(0,intCutPoint);
        location=strReloadURL;
    }
}


function RegionalOfferTagUrl(strURL,strName,strRTOPos){
    var strRTOUrl;
    var strVisitorId=GetVisitorId();
    var strZipCode=GetZipCode();
    var strCurrentState=document.location.href;
    var strReloadURL;
    var strRTOImgSrc;

    if(intIsActiveRTO&&strVisitorId!=null&&(location.href.indexOf("Reload")<0)){
        var arrHostName=document.location.hostname.split(".");
        var OfferPrefix;
        var hostName=arrHostName[arrHostName.length-2];
        if(hostName=='infiniti'){
            OfferPrefix='Infiniti';
        }else if(hostName=='nissanusa'){
            OfferPrefix='Nissan';
        }else{
            var hostNamePrefix=arrHostName[0];
            var arrHostNamePrefix=hostNamePrefix.split("-");

            hostNamePrefix=arrHostNamePrefix[0];

            if(hostNamePrefix=='infiniti'){
                OfferPrefix='Infiniti';
            }else if(hostNamePrefix == 'nissan'){
                OfferPrefix='Nissan';
            }
        }

        strRTOImgSrc=strURL+'?SessionId='+strVisitorId+'&RPEvent='+OfferPrefix+'RegionalExtendRTO&Zip='+strZipCode+'&Page='+strName+'&RTOPos='+strRTOPos;

        strRTOUrl=strURL;
        strRTOUrl+='?SessionId='+strVisitorId;
        strRTOUrl+='&RPEvent='+OfferPrefix+'RegionalAcceptRTO';
        strRTOUrl+='&Zip='+strZipCode;
        strRTOUrl+='&CurrentState='+strCurrentState;
        // if (is.ie5) {strRTOUrl += escape("?Reload")}
        strRTOUrl+='&Page='+strName;
        strRTOUrl+='&RTOPos='+strRTOPos;

        if(rtoURL!=""){
            rtoURL=strRTOUrl;
            rtoMain=strRTOImgSrc;
        }
    }

    if(location.href.indexOf("Reload")>0){
        var intCutPoint=location.href.indexOf("Reload")-1;
        strReloadURL=location.href.substring(0,intCutPoint);
        location=strReloadURL;
    }
}

function ShowUpdateZipcode(locale){
    var strZipCode=GetZipCode();
    var strCurrentState=document.location.href;
    var strZipCodeURL;
    var strZipCodeMessage;
    var strChangeZip;

    if( locale == spanishLocale ){
        strZipCodeMessage = 'Actualiza tu c&#243;digo postal';
        strZipCodeURL = "/espanol/global/zipcode/ZipCodeApplication";
    } else {
        strZipCodeMessage = 'Update Your Zip Code';
        strZipCodeURL = "/global/zipcode/ZipCodeApplication";
    }

    if(strZipCode!=null){
        strChangeZip = '<table><tr><td><a class="ArrowLink" href="';
        strChangeZip += strZipCodeURL;
        strChangeZip += '?CurrentState='+strCurrentState;
        strChangeZip += '" onmouseover="arrowSwap(\'changeZip\',1)" ';
        strChangeZip += 'onmouseout="arrowSwap(\'changeZip\')">';
        strChangeZip += '<img name="changeZip" src="/m/static/i/gl_arrow.gif" width="9" height="7" border="0">';
        strChangeZip += strZipCodeMessage;
        strChangeZip += '</a></td></tr></table>';
        document.write(strChangeZip);
    }
    
}

function HandleRTCImageError(imgObject,rtcPos){
        var hostName = document.location.hostname;
        var documentHref  = document.location.href;
        var strZipCode = GetZipCode();        
         
        var defaultRTCUrl;
        var defaultRTCImgSrc;

        if (hostName.indexOf("nissan") != -1) {
            if (documentHref.indexOf("/espanol") != -1 
                || documentHref.indexOf("/Espanol") != -1) {
             defaultRTCUrl = '/espanol/buying/SpecialOffers/';
             defaultRTCImgSrc = '/m/crm/espanol/i/crm_s00_enticement_'+rtcPos+'.gif';                   
            } else {
                 defaultRTCUrl = '/buying/SpecialOffers/';
                 defaultRTCImgSrc = '/m/crm/i/crm_specials_'+rtcPos+'.gif';         
            }
        } else if (hostName.indexOf("infiniti") != -1) {
            defaultRTCUrl = '/form/global/LocateDealer/1,,,00.html?txtZipCode='+strZipCode;
            defaultRTCImgSrc = '/m/crm/i/crm_locatedealer_'+rtcPos+'.gif';
        } else {
            //unknown host
            defaultRTCUrl = strRTCUrl;
            defaultRTCImgSrc = imgObject.src;
        }        
                
        strRTCUrl = defaultRTCUrl;
        strRTCUrl2 = strRTCUrl;
        strRTCUrl3 = strRTCUrl;        
        
        //set rtoURL for pages that don't call the RegionalOfferTag function.
        if(typeof(rtoURL)!="undefined"){
            rtoURL=strRTCUrl;
        }        

        imgObject.src = defaultRTCImgSrc;
        //alert('defaultRTCImgSrc =' + defaultRTCImgSrc);
        //alert('imgObject.src =' + imgObject.src);
        //alert('imgObject.height =' + imgObject.height);
        //alert('imgObject.width =' + imgObject.width);
        
}

function gotoLink(strLink){
    document.location.href=strLink;
}


////////////////////////
////////////////////////

//client side environment detection
function getEnvironment(){
    var strHostName=document.location.hostname.toLowerCase();
    
    if (strHostName.indexOf("dev") != -1) return "dev";
    if (strHostName.indexOf("test") != -1) return "test";
    if (strHostName.indexOf("integ") != -1) return "integ";
    if (strHostName.indexOf("qa") != -1) return "qa";
    if (strHostName.indexOf("stage") != -1) return "stage";
    			
    return "prod";
}

//client side siterelation detection
function getSiteRelation(){
    var strHostName=document.location.hostname.toLowerCase();
    var strUrl=document.location.href.toLowerCase();
    
    if (strHostName.indexOf("nissan") != -1) return "Nissan";
    if (strUrl.indexOf("/espanol") != -1) return "NissanSpanish";
    if (strHostName.indexOf("infiniti") != -1) return "Infiniti";

    return "Nissan";
}

//pause execution of the current Javascript thread
function wait(strMillis){
	var currentTime = new Date();
	var exitTime = currentTime.getTime() + strMillis;
	while (currentTime.getTime() < exitTime){
		//dummy delay loop
		currentTime = new Date();
	}		
}

var hbx_accounts = 
	[["DM5406219PSA", "DM5406219NWC", "DM5406202OEZ", "DM540620PCAZ"],
	 ["DM540621G1AZ", "DM540620K6DW", "DM540621D3BE", "DM540621E7ZZ"],
	 ["DM5406204LRF", "DM5406217BAW", "DM5406202OMA", "DM54062053AV"],
	 ["DM540621BJFA", "DM5406207NFN", "DM540620PBDE", "DM540620HEAC"],
	 ["DM54062096RA", "DM5406205ANA", "DM540620J3BD", "DM540620IDRC"]];
	 
var omn_accounts = 
        [["nissanusacom",    "nissanespanol",    "nissaninfiniticom", "nissaninfiniticom"],
         ["devnissanusacom", "devnissanespanol", "devnissaninfiniti", "devnissaninfiniti"],
         ["devnissanusacom", "devnissanespanol", "devnissaninfiniti", "devnissaninfiniti"],
         ["devnissanusacom", "devnissanespanol", "devnissaninfiniti", "devnissaninfiniti"],
         ["devnissanusacom", "devnissanespanol", "devnissaninfiniti", "devnissaninfiniti"]];

//Convenience method for setting up reporting on the page
//Only call this method before the page has loaded
function AddReporting(env, site, tag) {
    //Define global reporting object
    reporting = new ReportingObject(env, site, tag);
    reporting.execute();
}

//Convenience method for updating the reporting object
//Only call this method after the page has loaded (i.e. Flash)
function UpdateReporting(env, site, tag) {
    
    if (typeof(reporting) == "undefined") {
        //Define global reporting object, call execute on it
        reporting = new ReportingObject(env, site, tag);
        reporting.execute();
    }
    
    //Reporting object defined, call update
    reporting.update(tag);
}

//Reporting Object Constructor
function ReportingObject(env, site, tag) {

    //Define the object's properties    
    this.env = env;
    this.site = site;
    this.tag = tag;
    
    //Attach the object's functions
    this.execute = ReportingObject_execute;
    this.update = ReportingObject_update;
    
    this.executeHbx = ReportingObject_executeHbx;
    this.updateHbx = ReportingObject_updateHbx;
    
    this.executeOmn = ReportingObject_executeOmn;
    this.updateOmn = ReportingObject_updateOmn;
    
    this.splitTag = ReportingObject_splitTag;
    this.getEnvIndex = ReportingObject_getEnvIndex;
    this.getSiteIndex = ReportingObject_getSiteIndex;
}

//Splits the tag on : and fills in empty fields
function ReportingObject_splitTag() {
    
    var tagColumns = this.tag.split(":");
    
    //Fill in blank columns with their default values
//    if (tagColumns[0] == "") tagColumns[0] = "cat";
//    if (tagColumns[1] == "") tagColumns[1] = "sec";
//    if (tagColumns[2] == "") tagColumns[2] = "page";
//    if (tagColumns[3] == "") tagColumns[3] = "sub";
//    if (tagColumns[4] == "") tagColumns[4] = "sub2";
//    if (tagColumns[5] == "") tagColumns[5] = "short";

   return tagColumns;
}

//added to remove hierachies like sub, sub2, sec etc.
function trmPath(tgCols,delimiter)
{
    var strArval ='';
    var strpath = '';
    for (i=0;i<tgCols.length;i++)
    {
        if (tgCols[i] != '')
            {   strArval = tgCols[i];
            strpath = strpath + strArval;
            if (i<tgCols.length-1)
                    strpath = strpath + delimiter;
            }
    }
    return strpath;
}

//Gets the env index for reporting 
function ReportingObject_getEnvIndex() {

    //Default=0,Prod=0,Stage=1,QA=2,Test=3,Dev=4
    if (this.env != null) {
        var envToUpper = this.env.toUpperCase();
        if (envToUpper == "STAGE") return 1;
        else if (envToUpper == "QA") return 2;
        else if (envToUpper == "TEST") return 3;
        else if (envToUpper == "DEV") return 4;
    }
    
    return 0;
}

//Gets the site index for reporting
function ReportingObject_getSiteIndex() {
    
    //Default=0,Nissan=0,NissanSpanish=1,Infiniti=2,InfinitiKorea=3
    if (this.site != null) {
        var siteToUpper = this.site.toUpperCase();
        if (siteToUpper == "NISSANSPANISH") return 1;
        else if (siteToUpper == "INFINITI") return 2;
        else if (siteToUpper == "INFINITIKOREA") return 3;
    }
    
    return 0;
}

//Initiates reporting for all vendors
function ReportingObject_execute() {
    //Comment out vendors you're not using
    this.executeOmn();
    this.executeHbx();
}

//Updates reporting for all vendors
function ReportingObject_update(newTag) {
 
    //Comment out vendors you're not using
    //this.updateHbx(newTag);
    this.updateOmn(newTag);
}

//Handles reporting for WebSideStory
function ReportingObject_executeHbx() {

    //Variables and function left global on purpose
    
    _hbEC = 0;
    _hbE = new Array();
    _hbEvent = function _hbEvent(a,b) {
        b = _hbE[_hbEC++] = new Object();
        b._N = a;
        b._C = 0;
        return b;
    }
    
    hbx = _hbEvent("pv");
    hbx.vpc = "HBX0100u";
    hbx.gn = "ehg-nissan.hitbox.com";
    _acct = null;
    
    //Set the account
    hbx.acct = hbx_accounts[this.getEnvIndex()][this.getSiteIndex()];
    
    //Set the page tagging variables
    var tagColumns = this.splitTag();
    hbx.pn = tagColumns[5];           //page name
    //hbx.mlc = tagColumns.join("/");   //path
    
    //set hierarchy 
    hbx.mlc = trmPath(tagColumns,"/");
    
    //set link tracking
    hbx.lt="auto";
      
    //Set parameters for custom reports
    if(typeof(rptEBrochure)!="undefined"){
       hbx.hc1 = rptEBrochure; 
    }
    
    if(typeof(rptBrochureRequest)!="undefined"){    
       var primIntmdl = rptBrochureRequest.split(",");
       hbx.hc2 = primIntmdl[0];    
    } 

    if(typeof(rptContactDealer)!="undefined"){
       hbx.hc3 = rptContactDealer;
            
    } 
    
    if(typeof(rptQuickQuote)!="undefined"){
       hbx.hc4 = rptQuickQuote;    
    } 
    
    if(typeof(rptGoalPage)!="undefined"){
       hbx.gp = "LAST";
       hbx.hcn = rptGoalPage;        
    } 
    
}

//Updates reporting for Hbx
function ReportingObject_updateHbx(newTag) {
    
    if (newTag != null) {
        this.tag = newTag;    
    }
    
    //Reset the page tagging variables
    var tagColumns = this.splitTag();
    //hbx.pn = tagColumns[5];             //page name
    _hbSet("n",tagColumns[5]);
    
    //added to remove hierachies like sub, sub2, sec 
    //hbx.mlc = trmPath(tagColumns,"/");
    _hbSet("vcon",trmPath(tagColumns,"/"));
    
    //Set parameters for custom reports
    if(typeof(rptEBrochure)!="undefined"){       
         //hbx.hc1 = rptEBrochure;
         _hbSet("c1",rptEBrochure);
    } 
    
    _hbSend();
            
}

//Handles reporting for Omniture
function ReportingObject_executeOmn() {
   
    //Set the account
    s_account = omn_accounts[this.getEnvIndex()][this.getSiteIndex()];
    
    //Set the page tagging variables
    var tagColumns = this.splitTag();
    s_channel = tagColumns[0];
    s_pageName = tagColumns[5];       //page name
    //s_hier1 = tagColumns.join(",");   //path
    
    //added to remove hierachies like sub, sub2, sec etc.
    s_hier1 = trmPath(tagColumns,",");

    //Set parameters for custom reports
    if(typeof(rptEBrochure)!="undefined"){
         s_prop1 = rptEBrochure ;            
    }
    
    // ST 1/6/2005: Added following changes as part of Omniture reporting pilot
    if (typeof(rptEvents) != "undefined") {
	s_events = rptEvents;
    }

    // ST 1/6/2005: Added following changes as part of Omniture reporting pilot
    if ((typeof(rptVisitorIdFlag) != "undefined") && (rptVisitorIdFlag == true)) {
	s_eVar1 = GetVisitorId();
    }

    // ST 1/6/2005: Added following changes as part of Omniture reporting pilot
    if (typeof(rptProducts) != "undefined") {
	s_products = rptProducts;
    }
                
    if(typeof(rptBrochureRequest)!="undefined"){
         var primIntmdl = rptBrochureRequest.split(",");
         s_prop2 = primIntmdl[0];   
    } 
    
    if(typeof(rptContactDealer)!="undefined"){
         s_prop3 = rptContactDealer;
    } 
    
    if(typeof(rptQuickQuote)!="undefined"){
         s_prop4 = rptQuickQuote;
    } 
        
    //Set parameter for campaign Management
    strCmp = "CMP";
    var objArgs=GetQueryString();
    if(!(objArgs[strCmp]==null)){
        s_campaign = objArgs[strCmp];
    }     
}

//Updates reporting for Omniture
function ReportingObject_updateOmn(newTag) {
    
    if (newTag != null) {

        this.tag = newTag;    
    }
    
    //Reset the page tagging variables
    var tagColumns = this.splitTag();
    s_pageName = tagColumns[5]; //page name
    s_channel = tagColumns[0];
    
    //s_hier1 = tagColumns.join(","); //path
    
    //added to remove hierachies like sub, sub2, sec etc.
    s_hier1 = trmPath(tagColumns,",");

    //Set parameters for custom reports    
    if(typeof(rptEBrochure)!="undefined"){
        s_prop1 = rptEBrochure; 
    } 
    
    if (typeof(rptEvents) != "undefined") {
	s_events = rptEvents;
    }

    if ((typeof(rptVisitorIdFlag) != "undefined") && (rptVisitorIdFlag == true)) {
	s_eVar1 = GetVisitorId();
    }

    if (typeof(rptProducts) != "undefined") {
	s_products = rptProducts;
    }    
    
    var newImageTag = s_gs(s_account);
    
    var intStart = newImageTag.indexOf("src=\"");
    var intEnd = newImageTag.indexOf("\"",intStart+5);
    var newSrc = newImageTag.substring(intStart+5,intEnd);
        	
    var objRptImage = document.images.rptimage;
    if (objRptImage !== null) document.images.rptimage.src = newSrc;
    
    return;    
}

////////////////////////////
////////////////////////////

//Call this function from the flash pages to track the custom events and actions. 
function trackActionEvents(strActionTag,strPageTag,strEventName,strProduct){
	
	var strEnvironment = getEnvironment();
	var strSiterelation = getSiteRelation();

	//track events through Atlas
	if (strActionTag !== 'undefined' && strActionTag !== null) {
		var strAtlasURL = 'http://switch.atdmt.com/action/' + strActionTag;
		var objActionImage = document.images.actionimage;
		if (objActionImage !== null) document.images.actionimage.src = strAtlasURL;		
		wait(200);
	}
	
	//track events through SiteCatalyst
	if (strEventName !== 'undefined' && strEventName !== null) {
		rptEvents = strEventName;
		rptVisitorIdFlag = true;
	}
	
	if (strProduct !== 'undefined' && strProduct !== null) rptProducts = strProduct;
	
        if (strPageTag !== 'undefined' && strPageTag !== null) {
		if  (typeof (s_gs) === 'function') {
			UpdateReporting(strEnvironment,strSiterelation,strPageTag);
		} else {
			setTimeout ("UpdateReporting('"+strEnvironment+"','"+strSiterelation+"','"+strPageTag+"')",1000);
		        //setTimeout ("trackActionEvents("+null+",'"+strPageTag+"','"+strEventName+"','"+strProduct+"')",500);
		}
        }
        
        return;
}

