var WTA;
// Declare global variable to hold all the tracking parameters
var v={};
var dotImgId;
var images=[];
var index=0;
var env = "";

// Declare all the host prefixes for all the different metric servers
// e.g. Hosts starting with www2. should go to wwww2 metrics server and so on
var prodHomeMetricsHostDomains = new Array("home2.");
var prodWWW2MetricsHostDomains = new Array("www2.");
var prodWWW3MetricsHostDomains = new Array("www3.","papp","pwps","pwas","home.");
var prodMetricsHostDomains = new Array("www.","ira.","rollover.","metrics.","individual.","corporate.");

var qualHomeMetricsHostDomains = new Array("home2qual.");
var qualWWW2MetricsHostDomains = new Array("www2qual.","pdqual.troweprice.com/rps");
var qualWWW3MetricsHostDomains = new Array("www3qual.","qeecm","qwps","qwas","pdqual","peecm");
var qualMetricsHostDomains = new Array("metricsqual.","corporatequal.");

var devHomeMetricsHostDomains = new Array("home2dev.");
var devWWW2MetricsHostDomains = new Array("www2dev.","pddev.troweprice.com/rps");
var devWWW3MetricsHostDomains = new Array("www3dev.","deecm","dapp","dwps","dwas","pddev");
var devMetricsHostDomains = new Array("metricsdev.","localhost","h30924","h31978","corporatedev.");

// Declare all the metric servers in different architectures [DEV, QUAL and PROD]
var prodHomeMetricsServer = "//home2.troweprice.com/metrics";
var prodWWW2MetricsServer = "//www2.troweprice.com/metrics";
var prodWWW3MetricsServer = "//www3.troweprice.com/metrics";
var prodMetricsServer = "//metrics.troweprice.com";
var qualHomeMetricsServer = "//home2qual.troweprice.com/metrics";
var qualWWW2MetricsServer = "//www2qual.troweprice.com/metrics";
var qualWWW3MetricsServer = "//www3qual.troweprice.com/metrics";
var qualMetricsServer = "//metricsqual.troweprice.com";
var devHomeMetricsServer = "//home2dev.troweprice.com/metrics";
var devWWW2MetricsServer = "//www2dev.troweprice.com/metrics";
var devWWW3MetricsServer = "//www3dev.troweprice.com/metrics";
var devMetricsServer = "//metricsdev.troweprice.com";

// Default metrics server is PROD
var metricsServer = "//metrics.troweprice.com";

// Empty resource residing on the metrics server
var trackingResource = "/trpwa_i.txt";

// LogFlag to be passed so that the entry is not filtered by the Sensor
var logFlag = "Log=1";

var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

// Based on the host which is calling the page dot get the metrics server where the request needs to go to
function getMetricsServer()
{
	var x;
	var hostname = window.location.hostname;
	for ( x in prodHomeMetricsHostDomains ) 
	{
		if (hostname.indexOf(prodHomeMetricsHostDomains[x]) != -1)
		{
			metricsServer = prodHomeMetricsServer;
			return;
		}
	}
	x=0;
	for ( x in prodWWW3MetricsHostDomains ) 
	{
		if (hostname.indexOf(prodWWW3MetricsHostDomains[x]) != -1)
		{
			metricsServer = prodWWW3MetricsServer;
			return;
		}
	}
	x=0;
	for ( x in prodWWW2MetricsHostDomains ) 
	{
		if (hostname.indexOf(prodWWW2MetricsHostDomains[x]) != -1)
		{
			metricsServer = prodWWW2MetricsServer;
			return;
		}
	}
	x=0;
	for ( x in prodMetricsHostDomains ) 
	{
		if (hostname.indexOf(prodMetricsHostDomains[x]) != -1)
		{
			metricsServer = prodMetricsServer;
			return;
		}
	}
	x=0;
	for ( x in qualHomeMetricsHostDomains ) 
	{
		if (hostname.indexOf(qualHomeMetricsHostDomains[x]) != -1)
		{
			metricsServer = qualHomeMetricsServer;
			return;
		}
	}
	x=0;
	for ( x in qualWWW3MetricsHostDomains ) 
	{
		if (hostname.indexOf(qualWWW3MetricsHostDomains[x]) != -1)
		{
			metricsServer = qualWWW3MetricsServer;
			return;
		}
	}
	x=0;
	for ( x in qualWWW2MetricsHostDomains ) 
	{
		if (hostname.indexOf(qualWWW2MetricsHostDomains[x]) != -1)
		{
			metricsServer = qualWWW2MetricsServer;
			return;
		}
	}
	x=0;
	for ( x in qualMetricsHostDomains ) 
	{
		if (hostname.indexOf(qualMetricsHostDomains[x]) != -1)
		{
			metricsServer = qualMetricsServer;
			return;
		}
	}
	x=0;
	for ( x in devHomeMetricsHostDomains ) 
	{
		if (hostname.indexOf(devHomeMetricsHostDomains[x]) != -1)
		{
			metricsServer = devHomeMetricsServer;
			return;
		}
	}
	x=0;
	for ( x in devWWW3MetricsHostDomains ) 
	{
		if (hostname.indexOf(devWWW3MetricsHostDomains[x]) != -1)
		{
			metricsServer = devWWW3MetricsServer;
			return;
		}
	}
	x=0;
	for ( x in devWWW2MetricsHostDomains ) 
	{
		if (hostname.indexOf(devWWW2MetricsHostDomains[x]) != -1)
		{
			metricsServer = devWWW2MetricsServer;
			return;
		}
	}
	x=0;
	for ( x in devMetricsHostDomains ) 
	{
		if (hostname.indexOf(devMetricsHostDomains[x]) != -1)
		{
			metricsServer = devMetricsServer;
			return;
		}
	}
}

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}


// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

function getEnv()
{
	var hostname = window.location.hostname;
	if (hostname.indexOf("peecm") != -1)
	{
		env = "stage";
		return;
	}
}

getEnv();

if (!WTA) WTA = {};
WTA.globalNamespace = this;

// create namespace
WTA.createNamespace = function(name){
    if (name.charAt(0) != '.' && name.charAt(name.length-1) != '.' && name.indexOf("..") == -1){
        var parts = name.split('.');
        var container = WTA.globalNamespace;
        var names = "";
        for (var i=0; i < parts.length; i++){
            var part = parts[i];
            names = names + part;
            // build Namespace
            if (part.substring(0,1) != part.substring(0,1).toUpperCase() || part == 'WTA'){ // don't handle classes
                if (!container[part])container[part] = {};
                container = container[part];
                if (!container.NAME) container.NAME = names;
                if (i < parts.length -1) names = names + '.';
            }
        }
        var namespace = container;
        return namespace;
    }
};

// Create namespace for the class
WTA.createNamespace('WTA.utils');

WTA.utils.tags ={
  data_count:0,
	  
  // initialize method.. This adds the basic tracking parameters to the v global variable.
  // this method is currently used by RPS LOB.
  initialize:function(){
      if (typeof v != "undefined")
	  {
		  v["v_pn"]=document.URL;
		  v["v_site"]="RPS";
	      v["v_event"]="LD";
	  }
	  data_count=0;
  },

  initializespon:function(){
      if (typeof v != "undefined")
	  {
		  v["v_pn"]=document.URL;
		  v["v_site"]="SPON";
	      v["v_event"]="LD";
	  }
	  data_count=0;
  },

  initializepartic:function(){
      if (typeof v != "undefined")
	  {
		  v["v_pn"]=document.URL;
		  v["v_site"]="PARTIC";
	      v["v_event"]="LD";
	  }
	  data_count=0;
  },

  initializemc:function(site){
      if (typeof v != "undefined")
	  {
		  v["v_pn"]=document.URL;
		if (site != "undefined")
		{
		  v["v_site"]=site;
		}
		else
		  {
		  v["v_site"]="MICROSITE";
		  }
	      v["v_event"]="LD";
	  }
	  data_count=0;
  },

  // initializeretail method.. This adds the basic tracking parameters to the v global variable.
  // this method is currently used by Retail LOB.
  initializeretail:function(){
      if (typeof v != "undefined")
	  {
		  v["v_pn"]=document.URL;
		  v["v_site"]="RETAIL";
	      v["v_event"]="LD";
	  }
	  data_count=0;
  },

  // initializeretail method.. This adds the basic tracking parameters to the v global variable.
  // this method is currently used by Retail LOB.
  initializepnretail:function(pn){
      if (typeof v != "undefined")
	  {
        v={};
		if (pn != "undefined")
		{
		  v["v_pn"]=pn;
		}
		else
		  {
		  v["v_pn"]=document.URL;
		  }
		  v["v_site"]="RETAIL";
	      v["v_event"]="LD";
	  }
	  data_count=0;
  },
  
    // initializetpd method.. This adds the basic tracking parameters to the v global variable.
    // this method is currently used by Financial Intermediaries.
    initializepntpd:function(pn){
        if (typeof v != "undefined")
  	  {
          v={};
  		if (pn != "undefined")
  		{
  		  v["v_pn"]=pn;
  		}
  		else
  		  {
  		  v["v_pn"]=document.URL;
  		  }
  		  v["v_site"]="TPD";
  	      v["v_event"]="LD";
  	  }
  	  data_count=0;
    },


  // initializeretail method.. This adds the basic tracking parameters to the v global variable.
  // this method is currently used by Retail LOB.
  initializeexchg:function(){
      if (typeof v != "undefined")
	  {
		  v["v_pn"]=document.URL;
		  v["v_site"]="EXCHG";
	      v["v_event"]="LD";
	  }
	  data_count=0;
  },

  // initializeretail method.. This adds the basic tracking parameters to the v global variable.
  // this method is currently used by Retail LOB.
  initializeiws:function(){
      if (typeof v != "undefined")
	  {
		  v["v_pn"]=document.URL;
		  v["v_site"]="IWS";
	      v["v_event"]="LD";
	  }
	  data_count=0;
  },

 // this method add the template type of the page rendered. This method is mainly used for Retail currently. 
 // Template type can something like Core, Promotional etc.

 addtemplate:function(template){
      if (typeof v != "undefined")
	  {
		  v["v_template"]=template;
	  }
  },


  // this method is used to track different components placed on the V7 page.
  // the method accepts the component, its placement and its type as parameter
  // There may be multiple components displayed on the page
  // Thus this method gets called multiple times.
  addComponent:function(component,placement,comp_type){
	  if (typeof v != "undefined")
	  {
		  if (data_count == 0)
		  {
			v["v_page_data"] = "v_comp=" + component + "|" + "v_plmt=" + placement + "|" + "v_comp_type=" + comp_type;
		  }
		  else
		  {
			v["v_page_data"] += "~" + "v_comp=" + component + "|" + "v_plmt=" + placement + "|" + "v_comp_type=" + comp_type;
		  }
		  data_count++;
	  }
  },

  // this method is similar to addCOmponent. In this data [component, its placement and type] is already concatentated and passed in as a parameter.
  addPageData:function(data){
	  if (typeof v != "undefined")
	  {
		  if (data_count == 0)
		  {
			v["v_page_data"] = data;
		  }
		  else
		  {
			v["v_page_data"] += "~" + data;
		  }
		  data_count++;
	  }
  },

  addLinkData:function(data){
	  if (typeof v != "undefined")
	  {
		v["v_link_data"] = data;
	  }
  },

  flush2:function(){
var now = new Date();
var metricServer = getMetricsServer();
var swfVersion =GetSwfVer();

          var d = {};
//        d["dt"] = document.title;
          d["dr"] = document.referrer;
          d["du"] = document.URL;

        // Version check based upon the values entered above in "Globals"
          v["v_fv"]=GetSwfVer();

          if (env != "")
          {
                v["v_env"]=env;
          }

          var vo = "";

          for ( dKey in d ) {
                  vo = vo+"&"+dKey+"="+escape(d[dKey]);
          }

          if (typeof v != "undefined") {
                  for ( vKey in v ) {
                          vo = vo+"&"+vKey+"="+escape(v[vKey]);
                  }
          }

var url1 = metricsServer+trackingResource+"?" + logFlag + "&" + vo + "&cb=" + now.getTime();



  var script_id = null;
        var script = document.createElement('script');
         script.setAttribute('type', 'text/javascript');
         script.setAttribute('src', url1);
         script.setAttribute('id', 'script_id');
         script_id = document.getElementById('script_id');
         if(script_id){
             document.getElementsByTagName('head')[0].removeChild(script_id);
         }
         // Insert <script> into DOM
         document.getElementsByTagName('head')[0].appendChild(script);
},

// Once all the data which needs to be tracked during Page Load event has been added, this method is called to send the data to metrics 
  // page dot server
  flush:function(){
      var now = new Date();
	  getMetricsServer();
	  var ct = "<img src=";
	  var cd = metricsServer; 
	  var cu = trackingResource+"?"+logFlag; 
	  var ce = " border=0 height=1 width=1>";

	  var c = {};
//	  c["sw"] = screen.width;
//	  c["sh"] = screen.height;
//	  c["cd"] = screen.colorDepth;
      c["cb"] = now.getTime();
	  var co = "";

	  for ( cKey in c ) {
		  co = co+"&"+cKey+"="+escape(c[cKey]);
	  }
	  
	  var d = {};
//	  d["dt"] = document.title;
	  d["dr"] = document.referrer;
	  d["du"] = document.URL;

	// Version check based upon the values entered above in "Globals"
	  v["v_fv"]=GetSwfVer();

	  if (env != "")
	  {
		v["v_env"]=env;
	  }

	  var vo = "";

	  for ( dKey in d ) {
		  vo = vo+"&"+dKey+"="+escape(d[dKey]);
	  }

	  if (typeof v != "undefined") {
		  for ( vKey in v ) {
			  vo = vo+"&"+vKey+"="+escape(v[vKey]);
		  }
	  }
	  document.write(ct,cd,cu,vo,co,ce);
  },

  // this method is called for Retail application when a link is clicked on a page and a JavaScript is called when the link is clicked. 
  // The user is not taken to another page. Something like when Expand/Collapse is called on FAQ page or when a tab is clicked on a pag
  sendretaillink:function(component,linktext){
	WTA.utils.tags.sendlinktag(component,linktext,"RETAIL");
  },

  sendexchglink:function(component,linktext,pagedata){
	var queryparam = "v_site=EXCHG&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_edu=" + escape(document.URL) + "&v_page_data=" + escape(pagedata);
	WTA.utils.tags.send(queryparam);
  },

  // This method adds the tracking parameter needed to track the link click event
  // It create a tracking string and then send the data to the send method
  sendlinktag:function(component,linktext,site){
	var queryparam = "v_site=" + site + "&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },




   // this method is called for Retail application when a link is clicked on a page and the user is taken to another page. 
  sendretailurllink:function(component,linktext){
	WTA.utils.tags.sendlinkurltag(component,linktext,"RETAIL");
  },

  sendexchgurllink:function(component,linktext,pagedata){
	var queryparam = "v_comp=" + escape(component) + "&v_linkplmt=" + escape(linkplmt) + "&v_page_data=" + escape(pagedata);
	return WTA.utils.tags.sendurl(linktext,queryparam);
  },

  // this method is called to append tracking parameters to the URL where the user needs to go to.
  // With this tracking parameters appended to the URL are logged during the page load event of the target URL
  sendlinkurltag:function(component,linktext,site){
	var queryparam = "v_comp=" + escape(component) + "&v_linkplmt=" + escape(linkplmt);
	return WTA.utils.tags.sendurl(linktext,queryparam);
  },




  // this method is called for Retail application when a link is clicked on a page and a JavaScript is called when the link is clicked. 
  // This method is similar to sendretaillink. The only difference is that it has another parameter called the placement of the link clicked
  // The user is not taken to another page. Something like when Expand/Collapse is called on FAQ page or when a tab is clicked on a pag
  sendretaillinkp:function(component,linktext,linkplmt){
	return WTA.utils.tags.sendlinkptag(component,linktext,linkplmt,"RETAIL");
  },

  sendexchglinkp:function(component,linktext,linkplmt,pagedata){
	var queryparam = "v_site=" + site + "&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_linkplmt=" + (linkplmt) + "&v_edu=" + escape(document.URL) + "&v_page_data=" + escape(pagedata);
	return WTA.utils.tags.send(queryparam);
  },

  // This method adds the tracking parameter needed to track the link click event
  // It create a tracking string and then send the data to the send method
  sendlinkptag:function(component,linktext,linkplmt,site){
	var queryparam = "v_site=" + site + "&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_linkplmt=" + (linkplmt) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },

  // this method is called for Retail application when a button is clicked on a page. 
  // This method is similar to sendretaillink. The only difference is that it has another parameter called the placement of the link clicked
  // The user is not taken to another page. Something like when Expand/Collapse is called on FAQ page or when a tab is clicked on a pag
  sendretailclickp:function(component,query){
	return WTA.utils.tags.sendclickptag(component,query,"RETAIL");
  },

  // This method adds the tracking parameter needed to track the click event
  // It create a tracking string and then send the data to the send method
  sendclickptag:function(component,query,site){
	if (query != "")
	{
		query = "&" + query;
	}
	var queryparam = "v_site=" + site + "&v_event=CLK&v_comp=" + escape(component) + query + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },




  // this method is called for Retail application when a link is clicked on a page and the user is taken to another page. 
  // This method is similar to sendretailurllink. The only difference is that it has another parameter called the placement of the link clicked
  sendretailurllinkp:function(component,linktext,linkplmt){
	return WTA.utils.tags.sendurllinkptag(component,linktext,linkplmt,"RETAIL");
  },

  sendexchgurllinkp:function(component,linktext,linkplmt){
	return WTA.utils.tags.sendurllinkptag(component,linktext,linkplmt,"EXCHG");
  },

  // this method is called to append tracking parameters to the URL where the user needs to go to.
  // With this tracking parameters appended to the URL are logged during the page load event of the target URL
  sendurllinkptag:function(component,linktext,linkplmt,site){
	var queryparam = "v_linkcomp=" + escape(component) + "&v_linkplmt=" + escape(linkplmt);
	return WTA.utils.tags.sendurl(linktext,queryparam);
  },

  // this method sends the user to the target URL
  sendurl:function(linktext,queryparam){
	  /*
	var url = linktext;
	if ((linktext.indexOf('?')) == -1)
	{
		url = url + "?" + queryparam;
	}
	else
	{
		url = url + "&" + queryparam;
	}
	setTimeout("WTA.utils.tags.navigate(\"" + url + "\")", 100);
	return false;
	*/
  },




  // If the link clicked sends the user to a site which is external to TRP domains, then this method is called
  // This method is called when the onclick event calls a javascript method rather than an absolute URL
  sendretailexitjs:function(element,component,linktext,linkplmt){
	return WTA.utils.tags.sendexitjstag(element,component,linktext,linkplmt,"RETAIL");
  },

  sendexchgexitjs:function(element,component,linktext,linkplmt,pagedata){
	var extlnkref = "";
	if (typeof element != undefined)
	{
		if (typeof element.href != "undefined")
		{
			extlnkref = element.href;
		}
		else
		{
			extlnkref = element;
		}
	}
	var queryparam = "v_site=EXCHG&v_event=EXTCLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_linkplmt=" + (linkplmt) + "&v_edu=" + escape(document.URL) + "&v_extlnk=" + escape(extlnkref) + "&v_page_data=" + escape(pagedata);
	WTA.utils.tags.send(queryparam);
  },

  sendcorpexitjs:function(element,component,linktext,linkplmt){
	return WTA.utils.tags.sendexitjstag(element,component,linktext,linkplmt,"CORP");
  },

  sendcarexitjs:function(element,component,linktext,linkplmt){
	return WTA.utils.tags.sendexitjstag(element,component,linktext,linkplmt,"CAR");
  },
  
  sendtpdexitjs:function(element,component,linktext,linkplmt){
  	return WTA.utils.tags.sendexitjstag(element,component,linktext,linkplmt,"TPD");
    },

  // this method is called to append tracking parameters to the URL where the user needs to go to.
  sendexitjstag:function(element,component,linktext,linkplmt,site){
	var extlnkref = "";
	if (typeof element != undefined)
	{
		if (typeof element.href != "undefined")
		{
			extlnkref = element.href;
		}
		else
		{
			extlnkref = element;
		}
	}
	var queryparam = "v_site=" + site + "&v_event=EXTCLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_linkplmt=" + (linkplmt) + "&v_edu=" + escape(document.URL) + "&v_extlnk=" + escape(extlnkref);
	WTA.utils.tags.send(queryparam);
  },




  // If the link clicked sends the user to a site which is external to TRP domains, then this method is called
  // This method is called when the onclick event calls an absolute URL and not a javascript method
  sendretailexiturl:function(element,component,linktext,linkplmt){
	 return WTA.utils.tags.sendexiturltag(element,component,linktext,linkplmt,"RETAIL");
  },

  sendexchgexiturl:function(element,component,linktext,linkplmt,pagedata){
	var extlnkref = "";
	if (typeof element != undefined)
	{
		if (typeof element.href != "undefined")
		{
			extlnkref = element.href;
		}
		else
		{
			extlnkref = element;
		}
	}

	var queryparam = "v_site=EXCHG&v_event=EXTCLK&v_link=" + escape(linktext) + "&v_linkplmt=" + escape(linkplmt) + "&v_edu=" + escape(document.URL) + "&v_extlnk=" + escape(extlnkref) + "&v_page_data=" + escape(pagedata);
	return WTA.utils.tags.send(queryparam);
  },

  sendcorpexiturl:function(element,component,linktext,linkplmt){
	 return WTA.utils.tags.sendexiturltag(element,component,linktext,linkplmt,"CORP");
  },

  sendcarexiturl:function(element,component,linktext,linkplmt){
	 return WTA.utils.tags.sendexiturltag(element,component,linktext,linkplmt,"CAR");
  },

  senduaexiturl:function(element,component,linktext,linkplmt){
	 return WTA.utils.tags.sendexiturltag2(element,component,linktext,linkplmt,"UA");
  },
  
    sendtpdexiturl:function(element,component,linktext,linkplmt){
  	 return WTA.utils.tags.sendexiturltag(element,component,linktext,linkplmt,"TPD");
  },

  // this method is called to append tracking parameters to the URL where the user needs to go to.
  sendexiturltag:function(element,component,linktext,linkplmt,site){
	var extlnkref = "";
	if (typeof element != undefined)
	{
		if (typeof element.href != "undefined")
		{
			extlnkref = element.href;
		}
		else
		{
			extlnkref = element;
		}
	}

	var queryparam = "v_site=" + site + "&v_event=EXTCLK&v_link=" + escape(linktext) + "&v_linkplmt=" + escape(linkplmt) + "&v_edu=" + escape(document.URL) + "&v_extlnk=" + escape(extlnkref);
	WTA.utils.tags.send(queryparam);
//	window.setTimeout(function(){WTA.utils.tags.navigate(element.href);}, 100);
//    return false;
  },

  // this method is called to append tracking parameters to the URL where the user needs to go to.
  sendexiturltag2:function(element,component,linktext,linkplmt,site){
	var extlnkref = "";
	if (typeof element != undefined)
	{
		if (typeof element.href != "undefined")
		{
			extlnkref = element.href;
		}
		else
		{
			extlnkref = element;
		}
	}

	var queryparam = "v_site=" + site + "&v_event=EXTCLK&v_link=" + escape(linktext) + "&v_linkplmt=" + escape(linkplmt) + "&v_edu=" + escape(document.URL) + "&v_extlnk=" + escape(extlnkref);
	WTA.utils.tags.send2(queryparam);
	window.setTimeout(function(){WTA.utils.tags.navigate(element.href);}, 1000);
    return false;
  },

  // TODO...
  // this method is called to track when the onChange events with in a drop down list box
  sendretailonchange:function(element,component,additionalparam){
	return WTA.utils.tags.sendonchangetag(element,component,"RETAIL",additionalparam);
  },
 
  sendexchgonchange:function(element,component,additionalparam){
	return WTA.utils.tags.sendonchangetag(element,component,"EXCHG",additionalparam);
  },

  // this method is called to append tracking parameters and sends a page dot to the metric server.
  sendonchangetag:function(element,component,site,additionalparam){
	var queryparam = "v_site=" + site + "&v_event=CHNG&v_comp=" + escape(component) + "&v_slctd=" + escape(element.options[element.selectedIndex].value) + "&v_slctd_desc=" + escape(element.options[element.selectedIndex].text);
	if (typeof additionalparam != "undefined")
	{
		queryparam += "&" + additionalparam;
	}
	WTA.utils.tags.send(queryparam);
  },


  // this method is called for SPONSOR application when a link is clicked on a page and a JavaScript is called when the link is clicked. 
  // The user is not taken to another page. Something like when Expand/Collapse is called on FAQ page or when a tab is clicked on a pag
  sendsponlink:function(element,component,linktext){
	var queryparam = "v_site=SPON&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },

  // this method is called for Participant application when a link is clicked on a page and a JavaScript is called when the link is clicked. 
  // The user is not taken to another page. Something like when Expand/Collapse is called on FAQ page or when a tab is clicked on a pag
  sendparticlink:function(element,component,linktext){
	var queryparam = "v_site=PARTIC&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },

  sendmclink:function(element,component,linktext,site){
	var queryparam = "v_site="+site+"&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },

  // this method is called for SPONSOR application when a link is clicked on a page and a JavaScript is called when the link is clicked. 
  // This method is similar to sendlink. The only difference is that it has another parameter called the placement of the link clicked
  // The user is not taken to another page. Something like when Expand/Collapse is called on FAQ page or when a tab is clicked on a pag
  sendsponlinkp:function(element,component,linktext,linkplmt){
	var queryparam = "v_site=SPON&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_linkplmt=" + escape(linkplmt) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },

  // this method is called to track when the onChange events with in a drop down list box
  sendparticonchange:function(element,component){
	var queryparam = "v_site=PARTIC&v_event=CHNG&v_comp=" + escape(component) + "&v_slctd=" + escape(element.options[element.selectedIndex].value);
	WTA.utils.tags.send(queryparam);
  },
  sendmconchange:function(element,component,site){
	var queryparam = "v_site="+site+"&v_event=CHNG&v_comp=" + escape(component) + "&v_slctd=" + escape(element.options[element.selectedIndex].value);
	WTA.utils.tags.send(queryparam);
  },
  // this method is called to track when the onChange events with in a drop down list box
  sendspononchange:function(element,component){
	var queryparam = "v_site=SPON&v_event=CHNG&v_comp=" + escape(component) + "&v_slctd=" + escape(element.options[element.selectedIndex].value);
	WTA.utils.tags.send(queryparam);
  },

  // Used for Participant application. If the link clicked sends the user to a site which is external to TRP domains, then this method is called
  sendparticexit:function(element){
	var queryparam = "v_site=PARTIC&v_event=EXTCLK&v_url=" + escape(element.href) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },
  sendmcexit:function(element){
	var queryparam = "v_site="+site+"&v_event=EXTCLK&v_url=" + escape(element.href) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },
  
  // Used for SPONSOR application. If the link clicked sends the user to a site which is external to TRP domains, then this method is called
  sendsponexit:function(element){
	var queryparam = "v_site=SPON&v_event=EXTCLK&v_url=" + escape(element.href) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },
  
  
  // this method is called for RPS application when a link is clicked on a page and a JavaScript is called when the link is clicked. 
  // The user is not taken to another page. Something like when Expand/Collapse is called on FAQ page or when a tab is clicked on a pag
  sendlink:function(element,component,linktext){
	var queryparam = "v_site=RPS&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },

  // this method is called for RPS application when a link is clicked on a page and a JavaScript is called when the link is clicked. 
  // This method is similar to sendlink. The only difference is that it has another parameter called the placement of the link clicked
  // The user is not taken to another page. Something like when Expand/Collapse is called on FAQ page or when a tab is clicked on a pag
  sendlinkp:function(element,component,linktext,linkplmt){
	var queryparam = "v_site=RPS&v_event=CLK&v_comp=" + escape(component) + "&v_link=" + escape(linktext) + "&v_linkplmt=" + escape(linkplmt) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },

  // this method is called to track when the onChange events with in a drop down list box
  sendonchange:function(element,component){
	var queryparam = "v_site=RPS&v_event=CHNG&v_comp=" + escape(component) + "&v_slctd=" + escape(element.options[element.selectedIndex].value);
	WTA.utils.tags.send(queryparam);
  },

  // Used for RPS application. If the link clicked sends the user to a site which is external to TRP domains, then this method is called
  sendexit:function(element){
	var queryparam = "v_site=RPS&v_event=EXTCLK&v_url=" + escape(element.href) + "&v_edu=" + escape(document.URL);
	WTA.utils.tags.send(queryparam);
  },

  // create a page dot and sends the information over to metrics server
  send:function(queryparam){
	  getMetricsServer();
	  if (env != "")
	  {
		queryparam += "&v_env=" + env;
	  }

      var now = new Date();
      var wtatrpImg = document.createElement("img");
	  var src = metricsServer + trackingResource + "?" + logFlag + "&" + queryparam + "&cb="+now.getTime();

      wtatrpImg.setAttribute("src",src);
      wtatrpImg.width = wtatrpImg.height = 1;

      // remove the old image if it exists
      if (dotImgId != 'undefined' && dotImgId != '' && dotImgId != null)
      {
         document.body.removeChild(dotImgId);
      }
      dotImgId = document.body.appendChild(wtatrpImg);
  },

  // create a page dot and sends the information over to metrics server
  send2:function(queryparam){
	  getMetricsServer();
	  if (env != "")
	  {
		queryparam += "&v_env=" + env;
	  }

      var now = new Date();
	  var src = "http:" + metricsServer + trackingResource + "?" + logFlag + "&" + queryparam + "&cb="+now.getTime();
        
      if (document.images){
		images[index]=new Image();
		images[index].src=src;
		index++;
	  }
  },

  navigate:function(url){
    document.location.href = url;
   }
};
