var DebugMode = 0;//0-off;1-popup;2-alert;
var _StepName=null;
var _AdCookie = "RPT_Conv";
var _RoutableTestTargetCookie="RLTTC"
var _SetRoutableLogin=false;
var _Delim = "|CP|";
var RPT_Enabled = true; 
var _PageTitle;

//var subs = document.domain.split(".");
//if(subs.length>=2)
//{document.domain=subs[subs.length-2]+"."+subs[subs.length-1];}

var agent=navigator.userAgent.toLowerCase();
if((agent.indexOf("safari/312")>=0)||(agent.indexOf("safari/125")>=0))
{RPT_Enabled=false;}
 
//Called to initilize the page name
function RPT_Init(pageName)
{
	if(!RPT_Enabled)return;
	if(pageName){WT.ti=_PageTitle=pageName;}
}

//Used to set the PersonId on the login page
function RPT_SetPersonId(personId)
{
	if(!RPT_Enabled)return;
	DCS.dcsaut=personId;
	_SetRoutableLogin=true;
}

//Called on error pages to register the error code
//<script>RPT_ErrorPage();</script>
function RPT_ErrorPage(code)
{
	if(!RPT_Enabled)return;
	DCS.dcssta=code;
}

//Called by UI once to set page context for scenerio pages
//<script>RPT_ScenerioPage('BillPay;Transfer;Overnight', 'Verify');</script>
function RPT_ScenerioPage(scenarioNames, stepName)
{
	if(!RPT_Enabled)return;
	if(scenarioNames && (scenarioNames!="unassigned") && stepName)
	{
	 	var scenarios=scenarioNames.split(";");
 		var steps=stepName.split(";");
 		var diff=scenarios.length-steps.length;
 		if(diff>0)//scens>steps
 		{
 			for(var i=0;i<diff;i++)
 			{stepName= stepName+";"+steps[0];}
  	}
  	WT.si_n=scenarioNames;
  	WT.si_p=_StepName=stepName;
  }
}

function RPT_Impression(url)
{if(!RPT_Enabled)return;_Show('flash view\n' + url);_Init();_AdSearch(url,true);DCS.dcsuri="/FORMAN";dcsTag();}

function RPT_Click(url)
{
  RPT_ClickNoRedirect(url);
	if(url.indexOf("javascript")==0){eval(decodeURI(url));}
	else{document.location=url;}
}

function RPT_ClickNoRedirect(url)
{
	if(RPT_Enabled)
	{
	  _Show('flash click\n' + url);
	  _Init();
	  url=_AdSearch(url,false);
	  if(!DCSext.jp_ck){if(WT.ac){DCSext.jp_ck="1";}	}//auto set click if it isn't there
    dcsTag();
  }
}

function RPT_AddVariables()  //accept a variable lengthed list of variable definitions ( name,val, name, val, ...)
{
	if(arguments.length!=0)
	{	for (var i=0;i<arguments.length;i+=2){	
			if (arguments[i].length==6 && arguments[i].indexOf("jp_")==0) DCSext[arguments[i]] = arguments[i+1];}
	}
	else{//invalid list passed 
	}
}

//obsolete click through method for flash
function clickthrough(flashFile)
{
  var t = document.getElementById(flashFile);
	if(t){RPT_Click(t.href);}
}

//end interface///////////////////////////////
function AdParam(jpVal, wtVal)
{
	this.JpVal = jpVal;
	this.WtVal = wtVal;	
}
var _AdParams = new Array(
new AdParam("wt.ac","WT.ad"),
new AdParam("jp_aid","DCSext.jp_aid"),
new AdParam("wt.mc_id", "WT.mc_id"),
new AdParam("jp_mep","DCSext.jp_mep"),
new AdParam("jp_con","DCSext.jp_con"),
new AdParam("jp_lid","DCSext.jp_lid"),
//new AdParam("jp_cam","DCSext.jp_cam"),
//new AdParam("jp_pro","DCSext.jp_pro"),
new AdParam("jp_aoc","DCSext.jp_aoc"),
//new AdParam("jp_pg","DCSext.jp_pg"),
new AdParam("jp_avt","DCSext.jp_avt"),
new AdParam("wt.pn_sku","WT.pn_sku")
//new AdParam("wt.pi","WT.pi")
);
_Bind(window,"load","_Init");

function _Show(m)
{if(DebugMode>0){alert(m);}}

function _Debug(query)
{
	var usingTestHarnass = (typeof(WriteWebTrendsCall) != "undefined");

  if( (DebugMode > 0) || (usingTestHarnass))
  {
    var delim=(DebugMode == 1) ? "<br/>" : "\n";
    var parts = query.split("?");
    var buffer = query + "\n\n" + "Domain: " + parts[0] + delim + "Length: " + query.length + delim;
    parts = parts[1].split("&");
    buffer += "Param Count: " + (parts.length-1) + delim;//-1 because WT starts with ?&
    parts = parts.sort( function(x,y){var a = String(x).toUpperCase(); var b = String(y).toUpperCase(); if (a > b)return 1; if (a < b) return -1;return 0;  });
    buffer += parts.join(delim);
    if(DebugMode == 1){var w = window.open(""); w.document.write(buffer);}
    else{_Show(buffer);}
    
    //writes to the test harnass
    if(usingTestHarnass)
		{	WriteWebTrendsCall(parts);}
  }
}

function InitializeFPC()
{
	//standard wt causes ie7 lock-using dhtml instead
	var e = document.createElement("script");
	e.type="text/javascript";
	e.src="https://" + gDomain+ "/" + gDcsId+ "/wtid.js"
  e.onload=function(){_Init2();} ;
  e.onreadystatechange=function()
  { _Show(this.readyState);if(this.readyState == 'loaded')_Init2();};
	document.body.appendChild(e);
}
//Init all variables and perform initial log
var _Initialized=false;
function _Init()
{
  if(_Initialized==true)
  {return;}
  
  _Initialized=true;
  
  var myUrl = document.location.href.toLowerCase();
  var val = _GetParmVal("rpt_debug", myUrl);
  if(val)	{DebugMode=parseInt(val);_SetCookie("rpt_debug",val);}
  else if((val=_GetCookie("rpt_debug"))){DebugMode=parseInt(val);}
	_Show("Agent:"+agent);

  if(!RPT_Enabled)return;
  _Configure();
  if(!RPT_Enabled)return;//a secondary check in case dcsid lookup fails
  _CheckConversion();//see if this is a conversion page
 
 	_SetConversionInfo(myUrl, false);//if this page has a conversion flag, reset the cookie set flag to ignore propagating click though
 
   //add per Nk
  if((document.cookie.indexOf(gFpc+"=")==-1)&&(document.cookie.indexOf("WTLOPTOUT=")==-1))
  { 
    InitializeFPC();
  }
  else
  {
    _Init2();
  }
}  

function _Init2()
{
  _Show('done initializeFPC');
  dcsVar();
  dcsMeta();
  //after allowing the dcsref to be set by default code, check to see if we should force it for a routable
  if(_SetRoutableLogin)
  {_SetCookie(_RoutableTestTargetCookie, "1");}
	else
	{
	  val=_GetCookie(_RoutableTestTargetCookie);
		if(val)
		{
			_Show("Routable Login Cookie Exists");
			if(!DCS.dcsref)
			{
				if(DCS.dcssip.indexOf(".cardmemberservices.com")> -1)	{DCS.dcsref="http://www.cardmemberservices.com";}
				else{DCS.dcsref="http://www.chase.com";}
			}
			_SetCookie(_RoutableTestTargetCookie, "");
		}
	}
	
  dcsCookie();
  _Bind(document.body, "click", "_OnClick");
  if(_StepName)
  { 
    _BindAll(document.getElementsByTagName("input"), "change", "_OnChange");  
    _BindAll(document.getElementsByTagName("select"), "change", "_OnChange");
    _BindAll(document.getElementsByTagName("textarea"), "change", "_OnChange");
  }
  _ParamSearch();
  //for 2D reporting of extended ad variables
	val = DCSext.jp_aid;
	if(val)
	{
		var vals = val.split(";");
		for(var i=0;i<vals.length;i++)
		{
			if(_clickedAd){_AddParam("DCSext.jp_ck", (vals[i]==_clickedAd) ? "1":"0");}
			if(_conversionAd){_AddParam("WT.si_cs", (vals[i]==_conversionAd) ? "1":"0");}
		}
	}
  dcsTag();
}

function _Clear()
{ DCS=new Object(); WT=new Object(); DCSext=new Object();}

function _GetTarget(evt, tag, recurse)
{
  tag = tag.toUpperCase();
	var e=evt.target||evt.srcElement;
	if((! recurse) && (e.tagName.toUpperCase() != tag)){return null;}
  else
  {	
	  while(e.tagName)
	  {	
	    if(e.tagName.toUpperCase() != tag)
	    {e=e.parentElement || e.parentNode;}
	    else{return e;}
	  }
	}
  return null;
}

function _GetTargetName(elem)
{
  var name = null;
  if(elem)
  {
    if(elem.id && elem.id.length > 0){name = elem.id;}
    else if(elem.name && elem.name.length > 0){name = elem.name;}
    else if(elem.title && elem.title.length > 0){name= elem.title;}
    else if(elem.alt && elem.alt.length > 0){name= elem.alt;}
  }
  return name;
}

function _TrackElement(target)
{
	if( target && _StepName)
  {
  	var index;
  	var stepName = _StepName;
  	if( (index = _StepName.indexOf(";")) >-1)
  	{	stepName = _StepName.substring(0, index);	}
  	var name = _GetTargetName(target);
  	if(name){dcsMultiTrack("DCS.dcsuri", "/FORMAN", "WT.si_n", stepName, "WT.si_p", name);}
  	else{_Show("Not logging element track because no name found");}
  }
}

function _OnChange(evt)
{
  var target = _GetTarget(evt, "input", false);
  if(target)
  {
   var type = target.type.toLowerCase();
   if(type == "button" || type == "image" || type == "submit" || type=="radio" || type=="checkbox")
   {return true;}
 	}
  if(!target){target = _GetTarget(evt, "select", false);}
  if(!target){target = _GetTarget(evt, "textarea", false);}
  _TrackElement(target);
  return true;
}

var _thirdParyHost, _thirdPartyPath,_isThirdParty=false;

function _ParseThirdPartyUrl(url)
{
  var i = url.indexOf("//");
  var test = url.substring(i+2, url.length);
  i = test.indexOf("/");
  _thirdPartyHost = test.substring(0, i);
  _thirdPartyPath = test.substring(i+1, test.length);
  _Show("Third Party\n\n" + url + "\n\n" + _thirdPartyHost + "\n\n" + _thirdPartyPath);
}

function _IsTaggedOffSite(url)
{
  var implicitUrl = _GetParmVal("jp_offsite", url);
  if(implicitUrl)
  { _Show("3rd Party Tagged");_isThirdParty = true; _ParseThirdPartyUrl(implicitUrl);}
  return _isThirdParty;
}

function _IsImpliedOffSite(url)
{
  if(url.indexOf("viewad.aspx") != -1)
  {return _isThirdParty;}
  else if(url.indexOf("ultimaterewards") != -1)
  { _Show("3rd Pary Ultimate Rewards Implied");_isThirdParty = true; _ParseThirdPartyUrl(url); }
  else if((url.indexOf(".chase.") == -1) &&(url.indexOf(".cardmemberservices.") == -1)) 
  { _Show("3rd Pary Implied");_isThirdParty = true; _ParseThirdPartyUrl(url); }
  return _isThirdParty;
}

function _OnClick(evt)
{
  var target = _GetTarget(evt, "a", true);
  if(target)
  {
  	//if it's an ad..
  	var targetUrl = target.href.toLowerCase();
  	if(_GetParmVal(_AdParams[0].JpVal,targetUrl) || _GetParmVal(_AdParams[1].JpVal,targetUrl))
  	{
  		_Show('click - ad param present');
   		if(_IsTaggedOffSite(targetUrl) || _IsImpliedOffSite(targetUrl))
  		{
    	  //Code section for Track clicks to links leading offsite.
    	  
    	  var buffer = 'dcsMultiTrack("DCS.dcssip","'+_thirdPartyHost+'","DCS.dcsuri","'+_thirdPartyPath+'","WT.ti","Offsite","WT.os","1"';
        for(var i=1;i<_AdParams.length;i++)
	      {
	        var v=_GetParmVal(_AdParams[i].JpVal,targetUrl)
	        if(v){buffer+=',"'+_AdParams[i].WtVal+'","'+v+'"';}
	      }
        buffer += ');'
        eval(buffer);
       _Clear();
  	 	}
  		else
  		{
  		  _SetConversionInfo(targetUrl,true);
  		}
    }
  	else //for non ads, track the click here..ads track on target page per WT docs
  	{
    	gHref = targetUrl;	
    	var pcg,spcg,svl = "";
		var pcg = target.getAttribute("pcg");
		spcg = target.getAttribute("spcg");
		svl = target.getAttribute("svl");
		if((typeof(_linkTrackingVersion) != 'undefined' && _linkTrackingVersion == 2) || pcg == "" || pcg ){ 
		    _Show("Link Tracking v2");
            var eventSrc = window.location.pathname;
            //added for WO 105760
            var pg_name,partner_dir_name ="";
            pg_name = _getURLParams('pg_name');
            partner_dir_name=_getURLParams('partner_dir_name');
            if (pg_name != "" && pg_name != null){
                    _Show("pg_name == " + pg_name);
                    eventSrc = pg_name;
            }
            else if (partner_dir_name != "" && partner_dir_name != null){
                    _Show("partner_dir_name == " + partner_dir_name);
                    eventSrc = partner_dir_name;
            }
            //End WO 105760
			dcsMultiTrack("DCS.dcsuri", window.location.pathname, "WT.es", eventSrc, "DCSext.jp_pcg", pcg, "DCSext.jp_spcg", spcg,"WT.ti", target.id, "WT.dl", "99", "WT.svl", svl);
		}
		else{
		    _Show("Link Tracking v1");
       	   	var name = _GetTargetName(target);
    		if((!WT.ti) && document.title)
			{	
	  		    var title = _PageTitle ? _PageTitle : document.title;
	  		    if(!title){title = "Title Not Set";}
  			    title = gI18n?dcsEscape(dcsEncode(title),I18NRE):title;		
			}    				
 	  	    if(name){dcsMultiTrack("DCS.dcsuri", "/FORMAN", "WT.ti", title, "WT.ac", name);}
  		    else{_Show("Not logging click because no name found");}
  		}
  	}
  }
  else if( (target=_GetTarget(evt, "input", false)))
  { 
    var type = target.type.toLowerCase();
    if(type == "button" || type == "image" || type == "submit" || type=="radio" || type=="checkbox")
    {_TrackElement(target);}
  }
  evt.cancelBubble = true;
	if(evt.stopPropagation){evt.stopPropagation();}
}
function _SetConversionInfo(targetUrl, propagateClick)
{  		  
  //Get the conversion URL
  var conv=_GetParmVal("jp_cnv",targetUrl);
  _Show("_SetConversionInfo:"+conv + "::" + targetUrl);
  if(conv)//ad was clicked with conv page specified
  {
    _Show('looks like an ad: conversion=' + conv);
    var index = targetUrl.indexOf("?")
    var meta = index > -1 ? targetUrl.substring(index):"";
    meta = meta.replace("jp_cnv", "foo");
    var clickBit = propagateClick ? _Delim + "1" : "";
    var cookieVal = conv + _Delim + meta + clickBit;
    _Show('setting cookie:' + cookieVal);
    _SetCookie(_AdCookie, cookieVal);//create a cookie with all the goodies-this will be used to confirm the conversion      
  }
}

var _clickedAd;
var _conversionAd;
function _CheckConversion()
{ 
	//case: current url represents and ad click
	//case: cookie states that ad clicked not logged yet
	//case: curruent url represents the conversion
	
	var currentUrl=document.location.href.toLowerCase();
	var c=_GetCookie(_AdCookie);
	var meta;
	var isScenarioPage = (WT.si_n && WT.si_p);
	
	if(c && (c.length>0))
	{meta=c.split(_Delim);_Show("CONV:cookie:\n" + c);}
	
	var val=_GetParmVal(_AdParams[0].JpVal, currentUrl);
  if(val)//log click from query string and delete the crumb
	{
		_Show("CONV:\npage url contains ad click");
		_clickedAd=val;//record clicked ad id for logging jp_ck later
		_AddParam("WT.ac", val);
    _AddParam(_AdParams[1].WtVal, val);
	  for(var i=2;i<_AdParams.length;i++)
	  {
	    val=_GetParmVal(_AdParams[i].JpVal,currentUrl);
	    _AddParam(_AdParams[i].WtVal, val);
	  }
	  
		if(meta&&meta.length==3)
		{
			_Show("CONV:removing click param from cookie");
			_SetCookie(_AdCookie, meta[0]+_Delim+meta[1]);//remove click flag
		}
	}
	else if(meta && meta.length==3)
	{//cookie has the crumb. click hasn't been logged yet. log it. then clear the cookie	
		val = _GetParmVal(_AdParams[0].JpVal, meta[1]);
		_Show("CONV:\nlanded on page casued by ad click, but params not on query string");
		_clickedAd=val;//record clicked ad id for logging jp_ck later
		_AddParam("WT.ac", val);
		_AddParam(_AdParams[1].WtVal, val);
		for(var i=2;i<_AdParams.length;i++)
		{
			val=_GetParmVal(_AdParams[i].JpVal,meta[1]);
			_AddParam(_AdParams[i].WtVal, val);
		}
		_Show("CONV:removing click param from cookie");
		_SetCookie(_AdCookie, meta[0]+_Delim+meta[1]);//remove click flag
	}
	//not an else-if because it could be both
	if(isScenarioPage&&meta&&meta.length>=2)//else if we are in a scenario, check to see if we are the conversion
	{
		var dest=currentUrl;
  	var start=currentUrl.indexOf("jp_cnv=");
  	if(start>-1){dest = currentUrl.substr(0,start);}
		start = currentUrl.indexOf("&", start);
  	if(start > -1){dest+=currentUrl.substr(start+1);  }
  	dest = dest.toLowerCase();
  	meta[0] = meta[0].toLowerCase();
		_Show("CONV:Test Conversion:\n"+ dest+ "\ncontains\n"+meta[0]);
		if(dest.indexOf(meta[0])> -1)
  	{
    	_Show("CONV:\nXConversion!");
    	val = _GetParmVal(_AdParams[0].JpVal,meta[1]);
    	_conversionAd=val;
    	
    	if(!_clickedAd)//if conversion&click are the same ad, no need to add again
    	{
	  		_AddParam(_AdParams[1].WtVal, val);
	 			for(var i=2;i<_AdParams.length;i++)
				{
					val=_GetParmVal(_AdParams[i].JpVal,meta[1]);
					_AddParam(_AdParams[i].WtVal, val);
				}
			}
			//2dim fix si_cs reflects bitmask	//_AddParam("WT.si_cs", "1");
  		_Show('CONV:\nclear cookie');
  		_SetCookie(_AdCookie, "");
		}
		else
		{_Show("CONV:\nNot a conversion page");}
  }
	else
	{_Show("CONV:\nNo ad query string or conversion cookie");}
}

function _BindAll(elems, event, func)
{if(typeof(elems)!="undefined"){for (var i=0;i<elems.length;i++){_Bind(elems[i], event, func);}}}

function _Bind(element, event, func)
{
  var f = window[func];
	if ((typeof(f)=="function") && element){if (element.addEventListener){element.addEventListener(event, f, false);}	else if(element.attachEvent){element.attachEvent("on"+event, f);}}
}

function _OnLoadError(evt)
{_Show('_OnLoadError');return false;}

function _OnLoad(evt)
{if (gHref.length>0){window.location=gHref;gHref="";return true;}}

function _AddParam(n, val)
{
	if(!val){val="";}
	
	var cv = eval(n);
	if(cv == null || cv == "undefined")
	{	eval(n + "= val");	}
	else// if(cv.length==0)
	{	eval(n + "+=" + "';' + val;");	}
}

/*Necessarily Non-optimal-given the possible embeded relationship of urls, don't optimize into hash table*/
function _ParamSearch()
{if(document.links){for(var i=0;i<document.links.length;i++) {_AdSearchUpdateObj(document.links[i]);}}}

function _AdSearchUpdateObj(link)
{	
	var r = _AdSearch(link.href,true);
	if(r != link.href)//ie6 issue with '@'
	{	r=r.replace("@","%40");link.href=r;_Show("subbing:" + r + " for " + link.href);}
}

function _AdSearch(url, convertClickToImpression)
{
	if(url.indexOf("#") > 0){return url;}
	var wtVal = _GetParmVal(_AdParams[0].JpVal,url);
	var jpVal = _GetParmVal(_AdParams[1].JpVal,url);
	var newUrl=url;
	if(wtVal && jpVal)
	{/*do nothing if they are already populated*/}
	else if(wtVal)
	{
		var text = _AdParams[0].JpVal+"="+wtVal;var exp = new RegExp(text, "i");
		newUrl=url.replace(exp, text+"&"+_AdParams[1].JpVal+"="+wtVal);
	}
	else if(jpVal)
	{
		var text = _AdParams[1].JpVal+"="+jpVal;var exp = new RegExp(text, "i");
		newUrl=url.replace(exp, text+"&"+_AdParams[0].JpVal+"="+jpVal);
	}
	else
	{return url;}//just return the passed in URL
 
 	var adId=(wtVal)?wtVal:jpVal;
 	if(convertClickToImpression==true){_AddParam(_AdParams[0].WtVal, adId);}
	else{_AddParam("WT.ac", adId);}
	
  _AddParam(_AdParams[1].WtVal, adId);
  for(var i=2;i<_AdParams.length;i++)
  {
    var v=_GetParmVal(_AdParams[i].JpVal,url);
    _AddParam(_AdParams[i].WtVal, v);
  }
  return newUrl;//return the modified URL
}

// Returns the value of the given parameter string 
//Given the nested url paridigm, this should not be optimized
function _GetParmVal(param, link) 
{
	//TODO:use expression and stop lower casing everywhere
	param = param.toLowerCase();
	link = link.toLowerCase();
	var pos = link.indexOf(param+"=");
	var rv=null;
	if(pos!=-1) 
	{
		var start=pos+param.length+1;
		var end=link.indexOf("&",start);
		rv=link.substring(start,(end!=-1)?end:link.length);
		if((end=rv.indexOf("'")) >-1)//in case the link is inside a js call and is quoted
		{rv=rv.substring(0,end);	}
	}
  return rv;
}

function DcsMap(dom, dcsId)
{
	this.Domain = dom;
	this.DcsId = dcsId;
	//DcsMap.prototype.Domain = domain;
	//DcsMap.prototype.DcsId = dcsId;
}
var _DcsMap = new Array(
new DcsMap("banking.chase.com","dcsh0zybu000008yzwamy0uc7_1o4w"),
new DcsMap("cardmemberservices.firstusa.com","dcsqubibu000008yzwamy0uc7_1o2j"),
new DcsMap("cards.cardmemberservices.com","dcsfpz9cu000008yzwamy0uc7_1o5x"),
new DcsMap("cards.chase.com","dcskoxzbu000008yzwamy0uc7_1o2h"),
new DcsMap("chaseonline.chase.com","dcs5k7vbu000008yzwamy0uc7_1o3j"),
new DcsMap("investments.chase.com","dcsqvdpbu000008yzwamy0uc7_1o1y"),
new DcsMap("mortgage03.chase.com","dcsfuwdcu000008yzwamy0uc7_1o5d"),
new DcsMap("online.cardmemberservices.com","dcswimacu000008yzwamy0uc7_1o4l"),
new DcsMap("online.firstusa.com","dcs1677cu000008yzwamy0uc7_1o5d"),
new DcsMap("payments.cardmemberservices.com","dcsqsghbu000008yzwamy0uc7_1o9h"),
new DcsMap("payments.chase.com","dcs3y8ccu000008yzwamy0uc7_1o8o"),
new DcsMap("poadvisorui.bankone.net","dcs0rk5cu000008yzwamy0uc7_1o4t"),
new DcsMap("privateclient.jpmorgan.com","dcsdk3vfv000008yzwamy0uc7_9o9l"),
new DcsMap("resources.cardmemberservices.com","dcs6iolfv000008yzwamy0uc7_9o7j"),
new DcsMap("resources.chase.com","dcsnuo8fv000008yzwamy0uc7_9o9s"),
new DcsMap("stmts.cardmemberservices.com","dcs8i4cfv000008yzwamy0uc7_9o1z"),
new DcsMap("stmts.chase.com","dcs1ceofv000008yzwamy0uc7_9o7c"),
new DcsMap("tssportal.jpmorgan.com","dcs6zmefv000008yzwamy0uc7_9o8b"),
new DcsMap("www.bankone.com","dcsv1hffv000008yzwamy0uc7_9o3o"),
new DcsMap("www.campusone.com","dcsw5gggv000008yzwamy0uc7_9o6i"),
new DcsMap("www.cardmemberservices.com","dcsls1sfv000008yzwamy0uc7_9o7z"),
new DcsMap("www.chase.com","dcsuaddfv000008yzwamy0uc7_9o7x"),
//new DcsMap("www.collegechoice.com","dcsz588fv000008yzwamy0uc7_9o8z"),
new DcsMap("www.educationone.com","dcs41f8fv000008yzwamy0uc7_9o9d"),
new DcsMap("www.studentloannet.com","dcs59h5hw000008yzwamy0uc7_8o7r"),
new DcsMap("www2.bankone.com","dcse3echw000008yzwamy0uc7_8o3h"),
new DcsMap("apply.chase.com","dcsz588fv000008yzwamy0uc7_9o8z"),
new DcsMap("chase.net","dcsgw7t9t000008yzwamy0uc7_2o3q"),
new DcsMap("www.chasemydreams.com","dcs9fap2m000008e43fyt3w1b_4n1d"),
new DcsMap("www.homeequityedu.com","dcs02ov5t10000k7nqwacfw1b_6f5g"),
new DcsMap("applynow.chase.com","dcsby4i7p00000om9pfto6yen_2z4y"),
new DcsMap("app.firstusa.com","dcs9j2baw00000kbi548vqzen_1o8j"),
new DcsMap("demo.chase.com","dcs504b2810000cdq6tugvi2s_8u5x"),
new DcsMap("wip-chase.chase.com","dcsha6rmc00000g0r1x0g086y_3u3f"),
new DcsMap("www.firstusa.com","dcsqgnood10000chltaxkdte7_3o5y"),
new DcsMap("applynow1.chase.com","dcsf1l8z010000knn1i8anmy9_3o8e"),
new DcsMap("ultimaterewards.chase.com","dcs3q2tow100004b7c82spn94_8n9e"),
new DcsMap("www.chaseultimaterewards.com","dcs92kw0e10000o6hkw3yxnk4_6c4h"),
new DcsMap("ultimaterewardsrc.chase.com","dcsj8qjtb00000oqsyy29cok4_9z8t"),
new DcsMap("ultimaterewardsshop.chase.com","dcs1xnlu200000cte4wfutok4_4x5z"),
new DcsMap("ultimaterewardsearn.chase.com","dcsmqdi7d100000kfhz5uipk4_7o3j"),
new DcsMap("ultimaterewardspartners.chase.com","dcsc3ixhh000008me06sstpk4_3c2d"),
new DcsMap("servicing.chase.com","dcsq9vt4a000008q9vhrkyxd4_5u9g"),
new DcsMap("deposits.chase.com","dcsdhdauy000000k3ogyggabe_9e5o"),
new DcsMap("wayforward.jpmorganchase.com","dcs2shrqb100000wgqo44xx6k_3p3c"),
new DcsMap("www.chasetrp.com","dcs2hulig10000k7nao1z6qqm_2h5s"),
new DcsMap("applynow.firstusa.com","dcsn27vv410000s14eofw91rs_1d1i"),
new DcsMap("applynow1.firstusa.com","dcsmv2iwr1000004rnvyhb2rs_5x9l"),
new DcsMap("applynow.cardmemberservices.com","dcslg8bxt00000s1gvp96r2rs_2v4t"),
new DcsMap("applynow1.cardmemberservices.com","dcsrbvjdg00000g0j31f8b3rs_6p2o"));

var WTCert="qa-webtrends.chase.com";
var WTQA="qa-webtrends.chase.com";
var WTLoad = "load-webtrends.chase.com";
var WTProd="webtrends.chase.com";
var _isQA,_isCert,_isLoad;
//TODO: the identification needs to be more robust as it is error prone.
//Ideally all this shouldn't be in JS.
function _Configure()
{
	gDcsId = _GetDcsId(document.location.hostname);
  if(_isCert){gDomain=WTCert;}
  else if(_isQA){gDomain=WTQA;}
	else if(_isLoad){gDomain=WTLoad;}
  else if(gDcsId){gDomain=WTProd;} 
  else{_Show("No dcsId for:" + document.location.hostname);RPT_Enabled=false;}
}

function _GetDcsId(domain)
{
	var returnValue=null;
  var normalizedDomain = _GetDomain(domain);
  if(normalizedDomain)
  {
		for(var index=0;index<_DcsMap.length; index++)
 		{if(normalizedDomain.indexOf(_DcsMap[index].Domain)>-1){returnValue=_DcsMap[index].DcsId;break;}}
	}
 	if(returnValue==null){_Show('Non supported Domain:' + domain + "==" + normalizedDomain);}
	return returnValue;
}

var _ResolvedDomain;
function _Replace(source, test, replace){if(source.match(test)){_ResolvedDomain = source.replace(test, replace);return true;}return false;}

function _GetDomain(domain)
{ 
  domain = domain.toLowerCase();
 	//domain = domain.replace("wip-", "");//dctm wip - commented because a new dcsId is added
 	domain = domain.replace("devweb.", "");
 	domain = domain.replace("web.", "");
 	
 	if(domain.indexOf("chase.net")>-1){_isQA=true;_ResolvedDomain="resources.chase.com";}
 	else if(domain.indexOf("wip-chase.chase")>-1){_isQA=true;_ResolvedDomain="wip-chase.chase.com";}
 	else if(domain.indexOf("servicing.chase")>-1){ _ResolvedDomain="servicing.chase.com";}
 	else if(domain.indexOf("chasemydreams")>-1){ _ResolvedDomain="www.chasemydreams.com";if(domain.indexOf("www.")==-1){_isQA=true;}}
 	else if(domain.indexOf("homeequityedu")>-1){ _ResolvedDomain="www.homeequityedu.com";if(domain.indexOf("www.")==-1){_isQA=true;}}
 	else if(domain.indexOf("chfservi")>-1){_isCert=true;_ResolvedDomain="mortgage03.chase.com";}
 	else if(domain.indexOf("chfservqf")>-1){_isQA=true;_ResolvedDomain="mortgage03.chase.com";}
 	else if(domain.indexOf("stage2.bankone.com")>-1){_isQA=true;_ResolvedDomain="demo.chase.com";}
 	else if(domain.indexOf("appqa-")>-1){_isQA=true;_ResolvedDomain="app.firstusa.com";}
 	else if(domain.indexOf("www.firstusa")>-1){_ResolvedDomain="www.firstusa.com";}
 	else if((domain.indexOf("cig1s053-mkt.bankone")>-1)||(domain.indexOf("cig1s053-oasysqa2.dmz.bankone")>-1)){_isQA=true;_ResolvedDomain="www.firstusa.com";}
 	else if((domain.indexOf("qa.chasetrp")>-1)||(domain.indexOf("qa2.chasetrp")>-1)){_isQA=true;_ResolvedDomain="www.chasetrp.com";}
	else if(_Replace(domain, /^((cms)|(chase))(qf\d)\./, "www.")){_isQA=true;}
	else if(_Replace(domain, /q\d\./, ".")){_isQA=true;}
	else if(_Replace(domain, /i\d\./, ".")){_isCert=true;}
	else if(_Replace(domain, /qa\./, ".")){if(domain.indexOf("ultimaterewards")||domain.indexOf("applynow")>-1){_isQA=true;}_isLoad=true;}
	else if(_Replace(domain, /load-/, "")){_isLoad=true;}
	else if(_Replace(domain, /([di]\d)\./, ".")){_isCert=true;}
	else if(_Replace(domain, /cert(\d*)-/, "")){_isCert=true;}
	else if(_Replace(domain, /(qf\d)\./, ".")){_isQA=true;}
	else if(_Replace(domain, /qa(\w)-/, "")){_isQA=true;}
	else if(_Replace(domain, /qa(\w)-/, "")){_isQA=true;}
	else{_ResolvedDomain=domain;}
	
	return _ResolvedDomain;
}

function _IsNumeric(text){var digits="0123456789";for(i=0; i<text.length; i++) {if(digits.indexOf(text.charAt(i)) == -1){return false;}}return true;}

function _SetCookie(name,value)
{
  var d=new Date();
  d.setDate(d.getDate()+30)
  var subs = document.domain.split(".");
  var domain = subs[subs.length-2]+ "."+subs[subs.length-1];
  document.cookie=name+ "=" + escape(value) + ";domain="+domain + ";path=/";
}

function _GetCookie(name)
{
	var pos=document.cookie.indexOf(name+"=");
	if (pos!=-1)
	{
		var start=pos+name.length+1;
		var end=document.cookie.indexOf(";",start);
		if (end==-1){end=document.cookie.length;}
		return unescape(document.cookie.substring(start,end));
	}
	return null;
}

//wt 'standard'///////////////////////////////////////////////////////////////////////////////////////////
var gDomain=null;
var gDcsId=null;
var gImages=new Array;
var gIndex=0;
var DCS=new Object();
var WT=new Object();
var DCSext=new Object();
var gI18n=false;
var gHref=""; // cache the clicked href in case of image load error
var RE={"%09":/\t/g,"%20":/ /g,"%23":/\#/g,"%26":/\&/g,"%2B":/\+/g,"%3F":/\?/g,"%5C":/\\/g,"%22":/\"/g,"%7F":/\x7F/g,"%A0":/\xA0/g};
var I18NRE={"%25":/\%/g};
var gQP=new Array();
var gTimeZone = -8;
var gFpc="WT_FPC";	

function dcsMultiTrack()
{
	if(arguments.length%2==0)
	{
		for (var i=0;i<arguments.length;i+=2)
		{
			if(arguments[i].indexOf('WT.')==0){WT[arguments[i].substring(3)]=arguments[i+1];}
			else if (arguments[i].indexOf('DCS.')==0){DCS[arguments[i].substring(4)]=arguments[i+1];}
			else if (arguments[i].indexOf('DCSext.')==0){DCSext[arguments[i].substring(7)]=arguments[i+1];}
		}
		dcsCookie();
		dcsTag();
	}
}

var PaidSearchText = "wt.srch=1";
function dcsVar()
{
	var dCurrent=new Date();
  WT.tz=dCurrent.getTimezoneOffset()/60*-1;
	if (WT.tz==0)	{WT.tz="0";}
	WT.bh=dCurrent.getHours();
	WT.ul=navigator.appName=="Netscape"?navigator.language:navigator.userLanguage;
	if (typeof(screen)=="object")
	{
		WT.cd=navigator.appName=="Netscape"?screen.pixelDepth:screen.colorDepth;
		WT.sr=screen.width+"x"+screen.height;
	}
  if (typeof(navigator.javaEnabled())=="boolean")
  { WT.jo=navigator.javaEnabled()?"Yes":"No"; }
  
	if((!WT.ti) && document.title)
	{	
	  var title = document.title;
	  if(!title){title = "Title Not Set";}
  	WT.ti=gI18n?dcsEscape(dcsEncode(title),I18NRE):title;	
	}

	WT.js="Yes";
	WT.jv=dcsJV();
	if (document.body&&document.body.addBehavior)
	{ document.body.addBehavior("#default#clientCaps");
		if (document.body.connectionType)
		{WT.ct=document.body.connectionType;}
		document.body.addBehavior("#default#homePage");
		WT.hp=document.body.isHomePage(location.href)?"1":"0";
	}
	if (parseInt(navigator.appVersion)>3)
	{
		if ((navigator.appName=="Microsoft Internet Explorer")&&document.body)
		{	WT.bs=document.body.offsetWidth+"x"+document.body.offsetHeight;	}
		else if (navigator.appName=="Netscape")
		{	WT.bs=window.innerWidth+"x"+window.innerHeight;	}
	}
	
	WT.fi="No";
	if (window.ActiveXObject)
	{ 
		for(var i=10;i>0;i--)
		{
			try
			{
				var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+i);
				WT.fi="Yes";
				WT.fv=i+".0";
				break;
			}
			catch(e){}
		}
	}
	else if (navigator.plugins&&navigator.plugins.length)
	{
		for (var i=0;i<navigator.plugins.length;i++)
		{
			if (navigator.plugins[i].name.indexOf('Shockwave Flash')!=-1)
			{
				WT.fi="Yes";
				WT.fv=navigator.plugins[i].description.split(" ")[2];
				break;
			}
		}
	}
	
	if (gI18n)
	{
		WT.em=(typeof(encodeURIComponent)=="function")?"uri":"esc";
		if (typeof(document.defaultCharset)=="string")
		{WT.le=document.defaultCharset;} 
		else if (typeof(document.characterSet)=="string")
		{WT.le=document.characterSet;}
	}
	
	DCS.dcsdat=dCurrent.getTime();
	DCS.dcssip=window.location.hostname;
	DCS.dcsuri=window.location.pathname;
	if (window.location.search)
	{
		var q=window.location.search;
		//wo69647 persist WT.srch=1
		var isPaidSearch = (q.toLowerCase().indexOf(PaidSearchText) != -1);
		q=q.replace(/[\&]?WT\.\w*\=[\w\.\%\/]*/ig, "");
		q=q.replace(/[\&]?jp_\w*\=[\w\.\%\/]*/ig, "");
		q=q.replace("?&","?");
		
		if(isPaidSearch){q+= "&WT.srch=1";}

		DCS.dcsqry=q;
		
		if (gQP.length>0)
		{
			for (var i=0;i<gQP.length;i++)
			{
				var pos=DCS.dcsqry.indexOf(gQP[i]);
				if (pos!=-1)
				{
					var front=DCS.dcsqry.substring(0,pos);
					var end=DCS.dcsqry.substring(pos+gQP[i].length,DCS.dcsqry.length);
					DCS.dcsqry=front+end;
				}
			}
		}
	}
	if ((document.referrer!="")&&(document.referrer!="-"))
	{
		if (!(navigator.appName=="Microsoft Internet Explorer"&&parseInt(navigator.appVersion)<4))
		{DCS.dcsref=gI18n?dcsEscape(window.document.referrer, I18NRE):window.document.referrer;}
	}
}

function dcsJV()
{
	var agt=navigator.userAgent.toLowerCase();
	var major=parseInt(navigator.appVersion);
	var mac=(agt.indexOf("mac")!=-1);
	var nn=((agt.indexOf("mozilla")!=-1)&&(agt.indexOf("compatible")==-1));
	var nn4=(nn&&(major==4));
	var nn6up=(nn&&(major>=5));
	var ie=((agt.indexOf("msie")!=-1)&&(agt.indexOf("opera")==-1));
	var ie4=(ie&&(major==4)&&(agt.indexOf("msie 4")!=-1));
	var ie5up=(ie&&!ie4);
	var op=(agt.indexOf("opera")!=-1);
	var op5=(agt.indexOf("opera 5")!=-1||agt.indexOf("opera/5")!=-1);
	var op6=(agt.indexOf("opera 6")!=-1||agt.indexOf("opera/6")!=-1);
	var op7up=(op&&!op5&&!op6);
	var jv="1.1";
	if (nn6up||op7up){jv="1.5";}
	else if((mac&&ie5up)||op6){jv="1.4";}
	else if(ie5up||nn4||op5){jv="1.3";}
	else if(ie4){jv="1.2";}
	return jv;
}

function dcsA(N,V)
{return "&"+N+"="+dcsEscape(V, RE);}

function dcsA1(N,V)
{return "&"+N+"="+V;}

function dcsEscape(S, REL)
{
	if (typeof(REL)!="undefined")
	{
		var retStr = new String(S);
		for(R in REL){retStr = retStr.replace(REL[R],R);}
		return retStr;
	}
	else{return escape(S);}
}

function dcsEncode(S)
{	return (typeof(encodeURIComponent)=="function")?encodeURIComponent(S):escape(S);}

function dcsCreateImage(dcsSrc)
{
  _Debug(dcsSrc);
	if (document.images)
	{
		gImages[gIndex]=new Image();
//	  gImages[gIndex].onload=_OnLoad;
//	  gImages[gIndex].onerror=_OnLoadError;
		gImages[gIndex].src=dcsSrc;
		gIndex++;
	}
	else
	{document.write('<IMG ALT="" BORDER="0" NAME="DCSIMG" WIDTH="1" HEIGHT="1" SRC="'+dcsSrc+'">');}
}

function dcsMeta()
{
	var elems = document.getElementsByTagName("meta");
	if (typeof(elems)!="undefined")
	{
		for (var i=1;i<=elems.length;i++)
		{
			var meta=elems.item(i-1);
			if (meta.name)
			{
				if (meta.name.indexOf('WT.')==0){WT[meta.name.substring(3)]=(gI18n&&(meta.name.indexOf('WT.ti')==0))?dcsEscape(dcsEncode(meta.content),I18NRE):meta.content;}
				else if (meta.name.indexOf('DCSext.')==0){DCSext[meta.name.substring(7)]=meta.content;}
				else if (meta.name.indexOf('DCS.')==0){DCS[meta.name.substring(4)]=(gI18n&&(meta.name.indexOf('DCS.dcsref')==0))?dcsEscape(meta.content,I18NRE):meta.content;}
			}
		}
	}
}

function dcsTag()
{
	if(document.cookie.indexOf("WTLOPTOUT=")!=-1){return;}
	if(!DCS.dcsdat){var d=new Date();DCS.dcsdat=d.getTime();}
	if(!DCS.dcssip){DCS.dcssip=window.location.hostname;}
	if(!DCS.dcsuri){DCS.dcsuri=window.location.pathname;}
	if(!DCS.dcspro){DCS.dcspro=window.location.protocol.replace(":","");}

	var P="https://"+gDomain+(gDcsId==""?'':'/'+gDcsId)+"/dcs.gif?";
	//Added for Loyalty Rel 3 as temporary patch to fix Link Clicks issue - Defect 89562
	//Included the toJSONString condition for WO 96845
	if ((DCS.dcssip!=null) && (DCS.dcssip.indexOf("ultimaterewards")> -1)){
	    var temp=DCS.dcsuri.toLowerCase();
	    if (temp.indexOf("wt.ac") > 0){
	        _AddParam("DCSext.jp_ck", "1");
	    }
	    for (N in DCS){if(N=="toJSONString"){continue;}if(DCS[N]){P+=dcsA1(N,DCS[N]);}}
	}	 
	else
	    for (N in DCS){if(N=="toJSONString"){continue;}if(DCS[N]){P+=dcsA(N,DCS[N]);}}
	for (N in WT){if(N=="toJSONString"){continue;}if(WT[N]){P+=dcsA("WT."+N,WT[N]);}}
	for (N in DCSext){if(N=="toJSONString"){continue;}if(DCSext[N]){P+=dcsA(N,DCSext[N]);}}
	if (P.length>2048&&navigator.userAgent.indexOf('MSIE')>=0){P=P.substring(0,2040)+"&WT.tu=1";}
	
	dcsCreateImage(P);
	_Clear();
}

// Code section for Enable First-Party Cookie Tracking
function dcsCookie(){
	//if (typeof(dcsOther)=="function"){dcsOther();}
	//else if (typeof(dcsPlugin)=="function"){dcsPlugin();}
	//else if (typeof(dcsFPC)=="function"){
		dcsFPC(gTimeZone);
	//}
}
function dcsGetCookie(name){
	var pos=document.cookie.indexOf(name+"=");
	if (pos!=-1)
	{
		var start=pos+name.length+1;
		var end=document.cookie.indexOf(";",start);
		if (end==-1){end=document.cookie.length;}
		return unescape(document.cookie.substring(start,end));
	}
	return null;
}
function dcsGetCrumb(name,crumb){
	var aCookie=dcsGetCookie(name).split(":");
	for (var i=0;i<aCookie.length;i++){
		var aCrumb=aCookie[i].split("=");
		if (crumb==aCrumb[0]){return aCrumb[1];}
	}
	return null;
}
function dcsGetIdCrumb(name,crumb){
	var cookie=dcsGetCookie(name);
	var id=cookie.substring(0,cookie.indexOf(":lv="));
	var aCrumb=id.split("=");
	for (var i=0;i<aCrumb.length;i++){if (crumb==aCrumb[0]){return aCrumb[1];}}
	return null;
}

function dcsFPC(offset)
{
	if (typeof(offset)=="undefined"){return;}
	if (document.cookie.indexOf("WTLOPTOUT=")!=-1){return;}
	var name=gFpc;
	var dCur=new Date();
	var adj=(dCur.getTimezoneOffset()*60000)+(offset*3600000);
	dCur.setTime(dCur.getTime()+adj);
	var dExp=new Date(dCur.getTime()+315360000000);
	var dSes=new Date(dCur.getTime());
	WT.co_f=WT.vt_sid=WT.vt_f=WT.vt_f_a=WT.vt_f_s=WT.vt_f_d=WT.vt_f_tlh=WT.vt_f_tlv="";
	if (document.cookie.indexOf(name+"=")==-1)
	{
		if ((typeof(gWtId)!="undefined")&&(gWtId!="")){WT.co_f=gWtId;}
		else if ((typeof(gTempWtId)!="undefined")&&(gTempWtId!=""))
		{WT.co_f=gTempWtId;	WT.vt_f="1";}
		else
		{
		  WT.co_f="2";
			var cur=dCur.getTime().toString();
			for (var i=2;i<=(32-cur.length);i++)
			{WT.co_f+=Math.floor(Math.random()*16.0).toString(16);}
			WT.co_f+=cur;
			WT.vt_f="1";
		}
		if (typeof(gWtAccountRollup)=="undefined"){	WT.vt_f_a="1";}
		WT.vt_f_s=WT.vt_f_d="1";
		WT.vt_f_tlh=WT.vt_f_tlv="0";
	}
	else
	{
		var id=dcsGetIdCrumb(name,"id");
		var lv=parseInt(dcsGetCrumb(name,"lv"));
		var ss=parseInt(dcsGetCrumb(name,"ss"));
		if ((id==null)||(id=="null")||isNaN(lv)||isNaN(ss)){return;}
		WT.co_f=id;
		var dLst=new Date(lv);
		WT.vt_f_tlh=Math.floor((dLst.getTime()-adj)/1000);
		dSes.setTime(ss);
		if ((dCur.getTime()>(dLst.getTime()+1800000))||(dCur.getTime()>(dSes.getTime()+28800000)))
		{
			WT.vt_f_tlv=Math.floor((dSes.getTime()-adj)/1000);
			dSes.setTime(dCur.getTime());
			WT.vt_f_s="1";
		}
		if ((dCur.getDay()!=dLst.getDay())||(dCur.getMonth()!=dLst.getMonth())||(dCur.getYear()!=dLst.getYear()))
		{WT.vt_f_d="1";}
	}
	WT.co_f=escape(WT.co_f);
	WT.vt_sid=WT.co_f+"."+(dSes.getTime()-adj);
	var expiry="; expires="+dExp.toGMTString();
	//webtrends fpc domain is bogus
	var subs = document.domain.split(".");
  var domain = subs[subs.length-2]+ "."+subs[subs.length-1];
	document.cookie=name+"="+"id="+WT.co_f+":lv="+dCur.getTime().toString()+":ss="+dSes.getTime().toString()+expiry+"; path=/; domain="+domain;
	if (document.cookie.indexOf(name+"=")==-1)
	{
	  WT.co_f=WT.vt_sid=WT.vt_f_s=WT.vt_f_d=WT.vt_f_tlh=WT.vt_f_tlv="";
		WT.vt_f=WT.vt_f_a="2";
	}
}
//added for WO 105760
function _getURLParams(name){
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )    
        return "";
    else    
        return results[1];
}
