/*

Overview

--------

wttracking.js is a client side include file used for WebTrends tracking capabilities.

The file includes WebTrends code and Digitas specific functions that utilize the WT code to

track and record information.





Use

---

To use this file, please do the following:



1. Include it in the header of your html page, for example:

<script language="JavaScript" type="text/javascript" src="wttracking.js"></script>



Including this file will trigger an initial WebTrends call as the page is loading.



2. Include meta tags specified by measurement in the header of your html page, for example:

<META NAME="WT.ti" CONTENT="title">



These will be the defaults for the page and sent to WebTrends during the page load.



3. Add the following noscript tag to the body of the page to account for browsers not supporting or

allowing JavaScript:

<noscript>

<img alt="" border="0" name="dcsimg" width="1" height="1" src="http://statse.webtrendslive.com/dcs5v2dll10000w411kgzt45h_3p7h/njs.gif?dcsuri=/nojavascript&amp;WT.js=No&amp;WT.tv=8.0.0">

</noscript>



4. If you need to fire further beacons (to track user interaction with the flash object or elements on the page),

the following 2 functions are provided:



- track(beacon)

Fires off a WebTrends beacon based on the object, property and value specified

note: The following format for the beacon is required:

		object.property=value&object.property=value (etc)



for example,

	track("WT.ti=Title&WT.cg_n=Title group");



- trackAndLink(beacon, linkURL)

Sends off the provided beacon (same format as above required) and redirects to the provided linkURL



for example,

	trackAndLink("WT.ti=Title", "http://www.redsox.com");



- trackAndLinkPopup(beacon, linkURL, windowProps)

Sends off the provided beacon (same format as above required) and redirects to the provided linkURL in a new window, where windowProps is specified by AS.



for example

	trackAndLinkPopup("WT.ti=Title", "http://www.digitas.com", windowProps);



Note

----

This script can be reused across all sites, however, do not forget to update the dcs id as needed per client/site

for proper reporting.  Update the following line of code with the appropriate id from measurement:



var gDcsId="DCSID-REQUIRED";





Debugging

---------

To run tracking in a debug mode, simply add "debug_mode" to the query string, for example:

http://www.someurl.com/main.html?debug_mode



While in the debug mode, any beacon fired on the page will trigger a dialog box to pop up,

showing all the information collected to be sent to WebTrends.  You will also see an appropriate

message at the top of the page, letting you know that you are in debug mode.  To turn the debug

mode off, simply refresh the page without "debug_mode" in the query string.



*/



// START OF SDC Advanced Tracking Code

// Copyright (c) 1996-2005 WebTrends Inc.  All rights reserved.

// V8.0

// $DateTime: 2006/05/02 08:33:13 $

var gService = true;

var gTimeZone = 0;

// 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();

	document.cookie=name+"="+"id="+WT.co_f+":lv="+dCur.getTime().toString()+":ss="+dSes.getTime().toString()+expiry+"; path=/"+(((typeof(gFpcDom)!="undefined")&&(gFpcDom!=""))?("; domain="+gFpcDom):(""));

	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";

	}

}



// Code section for Use the new first-party cookie generated with this tag.

var gFpc="WT_FPC";

var gConvert=true;



function dcsAdv(){

	dcsFunc("dcsET");

	dcsFunc("dcsCookie");

	dcsFunc("dcsAdSearch");

	dcsFunc("dcsTP");

}



// END OF SDC Advanced Tracking Code



// START OF SmartSource Data Collector TAG

var gDomain="statse.webtrendslive.com";

var gDcsId="dcsoqs7xrvievvzsilzgqnfeu_7b7f";



if ((typeof(gConvert)!="undefined")&&gConvert&&(document.cookie.indexOf(gFpc+"=")==-1)&&(document.cookie.indexOf("WTLOPTOUT=")==-1)){

	document.write("<SCR"+"IPT TYPE='text/javascript' SRC='"+"http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+"/"+gDcsId+"/wtid.js"+"'><\/SCR"+"IPT>");

}



var gImages=new Array;

var gIndex=0;

var DCS=new Object();

var WT=new Object();

var DCSext=new Object();

var gQP=new Array();

var gI18n=false;

if (window.RegExp){

	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};

}



// Add customizations here



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 (document.title){

		WT.ti=gI18n?dcsEscape(dcsEncode(document.title),I18NRE):document.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;

		}

	}

	WT.tv="8.0.0";

	WT.sp="@@SPLITVALUE@@";

	DCS.dcsdat=dCurrent.getTime();

	DCS.dcssip=window.location.hostname;

	DCS.dcsuri=window.location.pathname;

	if (window.location.search){

		DCS.dcsqry=window.location.search;

		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 ((window.document.referrer!="")&&(window.document.referrer!="-")){

		if (!(navigator.appName=="Microsoft Internet Explorer"&&parseInt(navigator.appVersion)<4)){

			DCS.dcsref=gI18n?dcsEscape(window.document.referrer, I18NRE):window.document.referrer;

		}

	}

}



function dcsA(N,V){

	return "&"+N+"="+dcsEscape(V, RE);

}



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){

	if (document.images){

		gImages[gIndex]=new Image;

		if ((typeof(gHref)!="undefined")&&(gHref.length>0)){

			gImages[gIndex].onload=gImages[gIndex].onerror=dcsLoadHref;

		}

		gImages[gIndex].src=dcsSrc;

		gIndex++;

	}

	else{

		document.write('<IMG ALT="" BORDER="0" NAME="DCSIMG" WIDTH="1" HEIGHT="1" SRC="'+dcsSrc+'">');

	}

}



function dcsMeta(){

	var elems;

	if (document.all){

		elems=document.all.tags("meta");

	}

	else if (document.documentElement){

		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;

	}

	var P="http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+(gDcsId==""?'':'/'+gDcsId)+"/dcs.gif?";

	for (N in DCS){

		if (DCS[N]) {

			P+=dcsA(N,DCS[N]);

		}

	}

	for (N in WT){

		if (WT[N]) {

			P+=dcsA("WT."+N,WT[N]);

		}

	}

	for (N in DCSext){

		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";

	}



	// (Digitas added) If page is invoked in debug_mode, show the data being sent

	if (document.location.search.indexOf("debug_mode") != -1) {

		var alert_text = "Measurement data about to be sent to WebTrends:\n";

		alert_text += "(Refresh the page without \"debug_mode\" in the location bar to hide these alerts)\n";

		alert_text += "-------------------------------------------------------------------------------------------\n";

		for (N in DCS){ if (DCS[N]) { alert_text+= "DCS." + N + ": " + DCS[N] + "\n"; } }

		for (N in WT){ if (WT[N]) { alert_text+= "WT." + N + ": " + WT[N] + "\n"; } }

		for (N in DCSext){ if (DCSext[N]) { alert_text+= "DCSext." + N + ": " + DCSext[N]+ "\n"; } }

		//alert_text += "\nFull beacon string:\n" + P + "\n\n";

		alert(alert_text);

	}

	dcsCreateImage(P);

}



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 dcsFunc(func){

	if (typeof(window[func])=="function"){

		window[func]();

	}

}



dcsVar();

dcsMeta();

dcsFunc("dcsAdv");

dcsTag();



// (Digitas added) Notification of being in debug mode and instructions to get back to regular mode (without the

// tracking alerts)

if (document.location.search.indexOf("debug_mode") != -1) {

	document.write("<div style='font:normal 14px arial,helvetica,sans-serif;border:1px dashed #00F;text-align:center;padding: 5px 5px 5px 5px;margin:0px 0px 0px 0px;color:#00F';><strong>Tracking mode on:</strong> alerts will be shown every time a beacon is called. Refresh page without \"debug_mode\" in the location bar to hide these alerts.</div>");

}

// END OF SmartSource Data Collector  TAG



// START OF Digitas utility functions that handle the WebTrends tracking

function track(beacon){

	// Fires off a WebTrends beacon based on the object, property and value specified

	// note: The following format for the beacon is required:

	// object.property=value&object.property=value (etc)

	if (beacon != undefined) {

		// First we break up the passed in arguments into key/value pairs

		var pairs = beacon.split("&");

		//alert("Flash sent: " + beacon); // debug



		var arguments= new Array(pairs.length * 2);

		for (var i = 0; i < pairs.length; i++) {

			var pair = pairs[i].split("=");

			arguments[i*2] = pair[0];

			arguments[i*2+1] = pair[1];

		}



		// Update the tracking objects with the arguments passed in

		if (arguments.length%2 == 0) {

			// Reset the initial default parameters (will update the time, and in case a property was overwritten)

			dcsVar();

			dcsMeta();



			for (var i = 0; i < arguments.length; i += 2) {

				if (arguments[i] != undefined) {

					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];

					}

				}

			}



			dcsTag();



			// The properties just set are specific to this tracking call, thus we need to clear them

			// out so that they don't unnecessarily get sent in the future tracking calls for this page

			for (var i = 0; i < arguments.length; i+=2) {

				if (arguments[i] != undefined) {

					if (arguments[i].indexOf('WT.')==0){

						WT[arguments[i].substring(3)]="";

					} else if (arguments[i].indexOf('DCS.')==0){

						DCS[arguments[i].substring(4)]="";

					} else if (arguments[i].indexOf('DCSext.')==0){

						DCSext[arguments[i].substring(7)]="";

					}

				}

			}

		}

	} else {

		// If passed in parameter is empty, then fire off the default values

		dcsVar();

		dcsMeta();

		dcsTag();

	}

}



function trackAndLink(beacon, linkURL) {

	// Sends off the provided beacon and redirects to the provided linkURL

	track(beacon);



	// Force a brief delay to make sure that the beacon had time to be properly sent to WebTrends

	setTimeout('document.location.href = "' + linkURL + '"', 500);

}





function trackAndLinkPopup(beacon, linkURL, windowProps) {

	//Sends of the provided beacon and launches linkURL in a new window

 	track(beacon);

 	setTimeout(window.open(linkURL,"win",windowProps),500);

}



//LEGACY FUNCTIONS - TRYING TO PHASE OUT





function multiTrackAndLink(args, linkURL) {

	multiTrack(args);

	document.location.href = linkURL;

}



function multiTrack(args){

	// First we break up the passed in arguments into key/value pairs

	var pairs = args.split("&");

	//alert("Flash sent: " + args); // debug



	var arguments= new Array(pairs.length * 2);

	for (var i = 0; i < pairs.length; i++) {

		var pair = pairs[i].split("=");

		arguments[i*2] = pair[0];

		arguments[i*2+1] = pair[1];

	}



	// We need to wipe out the set of properties possibly passed in by flash

	// so old values don't stay around

	DCSext.CSL = "";

	DCSext.SC = "";

	DCSext.SFL = "";

	DCSext.APLY = "";

	DCSext.LRNM = "";

	DCSext.ANCR = "";

	WT.ti = "";

	WT.cg_n = "";

	WT.cg_s = "";

	WT.si_n = "";

	WT.si_x = "";

	WT.si_p = "";



	// Update the tracking objects with the arguments passed in

	for (var i=0;i<arguments.length;i++) {

		if (arguments[i] != undefined) {

			if (arguments[i].indexOf('WT.')==0){

				WT[arguments[i].substring(3)]=arguments[i+1];

				i++;

			}

			if (arguments[i].indexOf('DCS.')==0){

				DCS[arguments[i].substring(4)]=arguments[i+1];

				i++;

			}

			if (arguments[i].indexOf('DCSext.')==0){

				DCSext[arguments[i].substring(7)]=arguments[i+1];

				i++;

			}

		}

	}



	var dCurrent=new Date();

	DCS.dcsdat=dCurrent.getTime();

	WT.bh=dCurrent.getHours();

	dcsTag();

}





// END OF Digitas utility functions

