var tracking = {};

tracking.webtrends = {};
tracking.chartbeat = {};
tracking.googleanalytics = {};

tracking.link  = {
	internal: function(element) {
		tracking.webtrends.link.internal(element);
	}
};

tracking.webtrends.link = {
	internal: function(element) {
		var rel = $(element).attr('rel');
				
		// modification by Panalysis
		rel = rel.replace(/\[URL\]/g,document.location.pathname); // replace [URL] with the document path.
		
		if(typeof(window["vehicle"]) != "undefined")
			rel = rel.replace(/\[VEHICLE\]/g,window["vehicle"]); // replace [URL] with the document path.
			
		// if the page is an accessory details page then get the name of the accessory from the document.location.hash value
		if(document.location.hash && document.location.pathname.indexOf('/accessories')>0)
		{
			var dh = document.location.hash.split(/[-_]/);
			if(dh.length>1)
			{
				var acc = dh[dh.length-1];
				rel = rel.replace(/\[ACCESS\]/g,acc); // replace [ACCESS] with the selected accessory.
			}
		}
		// end modification
		
		rel = encodeURIComponent(rel); //changes , to %2C and ; to %3B
		rel = rel.replace(/%2C/g, '='); //changes %2C to =
		rel = rel.replace(/%3B/g, '&'); //changes %3B to &

		// modification by Panalysis - correct case where hash exists in URL
		var href = $(element).attr('href');
		var ph1 = href.split(/#/);
		
		if(ph1.length==2) {
			var ph2 = ph1[0].split(/\?/);
			if(ph2.length==2) {
				$(element).attr('href', ph2[0]+'&'+rel+'#'+ph1[1]);
			} else {
				$(element).attr('href', ph1[0]+'?'+rel+'#'+ph1[1]);
			}
		} else {
			var ph2 = href.split(/\?/);
			if(ph2.length==2) {
				$(element).attr('href', href+'&'+rel);
			} else {
				$(element).attr('href', href+'?'+rel);
			}
		}
			// end modification
	},
	external: function(element, link) {
		// modification by Panalysis
		var rel = $(element).attr('rel');
		var target = $(element).attr('target'); 
		var nvp = rel.split(/;/);
		var evObj = {};
		if(nvp.length>0)
		{
			for(var i=0; i<nvp.length; i++)
			{
				var kv = nvp[i].split(/,/);
				if(kv.length==2)
					evObj[kv[0]] = kv[1];
			}
		}
		
		hh_WT.trackEvent(evObj, true);
		
		 
		if($(element).hasClass('target-self')){
			document.location.href = link;
		}else{
			window.open(link);
		}

		return false;
		
		// end modification
	},
	morelink: function(element) {
		// modification by Panalysis - correct case where hash exists in URL
		var href = $(element).attr('href');
		var ph = href.split(/#/);
		var v ="";
		var state = wt._getSectTypeFromURL();
		
		if(typeof(window["vehicle"]) !="undefined")
			v = window["vehicle"];
 
 		// if there is no vehicle try to get this from the screen
		try{
			var tvstr = $($('.offer-details').find("h3")[0]).text();
			    		
			var tv = tvstr.split(" ");
			if(tv.length>0)
			{
				v = tv[0];
				if(v=="Hybrid")
					v+= " " + tv[1];
				if(tv[0] == "2010") {
					v = tv[1];
				}
			}
			
		} catch (err) {}
			
 		var cta="", ac="";
 		
		if(href.indexOf("ebrochure")>0)
		{
			cta="";
			switch(v.toLowerCase())
			{
				case "yaris":
					 cta="WT.ebro_submit";
					 break;
				case "hybrid camry":
					 cta="WT.ebro_submit";
					 break;
				case "ruckus":
					 cta="WT.ebro_submit";
					 break;
			}
			
			ac="EBR";
		}
		else if(href.indexOf("dealer-enquiry")>0)
		{
			cta="";
			ac="DE";
		}
		else if(href.indexOf("book-a-test-drive")>0)
		{
			cta="";
			ac="BATD";
		}
		else if(href.indexOf("service-advantage")>0)
		{
			cta="TSAClick";
			ac="TSA";
		}
		else if(href.indexOf("special-offers/toyota-finance-advantage-video")>0)
		{
			cta="ToyotaFinanceAdvantageRHSVideo";
			ac="TFARHSVideo";
		}
		else if(href.indexOf("special-offers")>0)
		{
			cta="SeeAllOffers";
			ac="SAO";
		}
		else if(href.match(/\/\w*(aurion|avensis|camry|corolla|prius|rukus|tarago|yaris|cruiser|hilux|kluger|prado|rav4)[\/]*$/))
		{
			cta="VisitModelClick";
			ac="VM";
		}
 		
		var wtac = state + v.replace(/\s+/g,"") + "SpecialOffer" + ac;
		if(typeof(window["sGroup"]) !="undefined")
		{
			var sgl = window["sGroup"].split(";");
			if(sgl.length>0)
				wtac += sgl[0].replace(/\W+/g,"");
			else
				wtac += window["sGroup"].replace(/\W+/g,"");
		}
		else
			wtac="no-section";
		if(href.indexOf('finance/toyota-finance-advantage')>0)
 			wtac+="TFA";
 		else if(href.indexOf('toyota-finance-advantage-enquiry')>0)
 			wtac+="TFAENQForm";
 	
		
		var vals = {
			WTac:wtac,
			VehicleConversionID: v.replace(/\s+/g,"+"),
			SpecOffer:1
		}
		if(cta != "")
			vals[cta]=1;
		
		var furl = tracking.webtrends.link.appendtourl(ph[0],vals);
		
		if(ph.length==2)
			$(element).attr('href', furl + "#" + ph[1]);
		else
			$(element).attr('href', furl);
		// end modification
	},
	toolboxlink: function(element) {
		// modification by Panalysis - correct case where hash exists in URL
		var href = $(element).attr('href');
		var ph = href.split(/#/);
		var v ="no-vehicle";
		var isExt=0;
		var state = wt._getSectTypeFromURL();
		
		if(typeof(window["vehicle"]) !="undefined")
			v = window["vehicle"];
		else
		{
			var vl = document.location.pathname.split('/');
			if(vl[0]=="" && vl.length>1)
				v=vl[1];
			else
				v=vl[0];
			
			v=v.charAt(0).toUpperCase() + v.slice(1);
		}
 		var cta="", ac="", tbi="";
 		
		if(href.indexOf("accessories-ebrochure")>0)
		{
			cta="";
			ac="AccessoriesEBR";
			tbi="Accessories+eBrochure";
		}
		else if(href.indexOf("ebrochure")>0)
		{
			cta="WT.ebro_submit";
			ac="EBR";
			tbi="eBrochure";
		}
		else if(href.indexOf("printed-brochure")>0)
		{
			ac="PB";
			tbi="Printed+Brochure";
		}
		else if(href.indexOf("dealer-enquiry")>0)
		{
			cta="";
			ac="DE";
			tbi="Dealer+Enquiry";
		}
		else if(href.indexOf("request-a-service")>0)
		{
			cta="";
			ac="RAS";
			tbi="Request+a+Service";
		}
		else if(href.indexOf("compare-models")>0)
		{
			ac="ComModel";
			tbi="Compare+Models";
		}
		else if(href.indexOf("range")>0)
		{
			ac="ComGrades";
			tbi="Compare+Grades";
		}
		else if(href.indexOf("prices")>0)
		{
			ac="PriceMyCar";
			tbi="Price+My+Car";
		}
		else if(href.indexOf("dealer")>0)
		{
			ac="FAD";
			tbi="Find+a+Dealer";
		}
		else if(href.indexOf("apps/cwt")>0)
		{
			ac="TrackMyToy";
			tbi="Track+My+Toyota";
			isExt = 1;
		}
		else if(href.indexOf("fleet")>0)
		{
			ac="FleetCustLogin";
			tbi="Fleet+Customer+Login";
		}
		else if(href.indexOf("tfsonline")>0)
		{
			ac="TFSlogin";
			tbi="TFS+Login";
			isExt = 1;
		}
		else if(href.indexOf("book-a-test-drive")>0)
		{
			cta="";
			tbi="Book+a+Test+Drive";
			ac="BATD";
		}
 
		var wtpr = "VH_" + state + "_" + v + "_" + "VSH_Toolbox_" + ac;
		if(cta != "")
			wtpr +="&" + cta + "=1";
		if(href.indexOf("ebrochure")>0)
		{
			wtpr +="&VehicleConversionID="+v;
		}
		var tbp = v + "|" + tbi + "|" + document.location.pathname.toLowerCase();
			
		if(isExt==1)
		{
			$(element).click(function(event){
				event.preventDefault();
				var tobj = {EventClass:"External",Action:"Click",AC:wtpr,ToolboxPath:tbp};
				tracking.event.external(this.href,tobj);
			});
		}
		else if(ac!="")
		{
			var vals = {
				WTac: wtpr,
				Toolbox: tbp
			}
			var furl = tracking.webtrends.link.appendtourl(ph[0],vals);
			if(ph.length==2)
				$(element).attr('href', furl +"#" + ph[1]);
			else
				$(element).attr('href', furl);
		}
	},
	modulelink: function(element)
	{
		if($(element).hasClass('module-external')) {
			tracking.webtrends.link.moduleExternalLink(element);
			return;
		} 		
		
		var mn="";
		// try to get the module name from the attributes
		if($(element).attr('tracking:modulename'))
			mn = $(element).attr('tracking:modulename');
		// then try to get this from the heading
		if(mn=="")
			mn = $($(element).find("h2")[0]).text();
		if(mn=="")
			mn = $($(element).find("h3")[0]).text();
		if(mn=="")
			mn = $($(element).find("a.more-link")[0]).text();
		
		var dl =document.location.pathname.toLowerCase();
		
		if(mn=="") return;
		
		mn = filterTrackingName(mn);
		
		// Tag the links
		$(element).find("a").each(function(i,n)
		{
			var href = $(n).attr('href');
			var t = $(n).text();
			var mCTAName = filterTrackingName(t);

			if(mCTAName == '') {
				if($(n).find('img').length > 0) {
					mCTAName = 'Image';
				} else {
					mCTAName = 'Unknown';
				}
			}
			var mState="";
			if(wt.InBucket("S","PostcodeInput"))
				mState = "Prompt";
			else if(wt.InBucket("V","Personalised"))
				mState = "Personalised";
				
			var v = "";
			if(typeof(wt) != "undefined")
				v = wt._getVehicleFromString(href);
			
			var ph = href.split("#");
			var vals = {
				ModuleName: mn,
				ModuleLoc: dl,
				ModuleCTA: mCTAName,
				ModuleState: mState,
				ModuleInteract: 1
			}
			if(v!="")
				vals["VehicleConversionID"]=v;
			
			var furl = tracking.webtrends.link.appendtourl(href,vals);
			if(ph.length==2)
				$(n).attr('href', furl+"#" + ph[1]);
			else
				$(n).attr('href', furl );
		});
		
	},
	moduleExternalLink: function(element)
	{	
		var mn="";
		// try to get the module name from the attributes
		if($(element).attr('tracking:modulename'))
			mn = $(element).attr('tracking:modulename');
		// then try to get this from the heading
		if(mn=="")
			mn = $($(element).find("h2")[0]).text();
		if(mn=="")
			mn = $($(element).find("h3")[0]).text();
		if(mn=="")
			mn = $($(element).find("a.more-link")[0]).text();
		
		var dl =document.location.pathname.toLowerCase();
		
		if(mn=="") return;
		
		mn = filterTrackingName(mn);
		
		// Tag the links
		$(element).find("a").each(function(i,n){
			var href = $(n).attr('href');
			var t = $(n).text();
			var mCTAName = filterTrackingName(t);

			if(mCTAName == '') {
				if($(n).find('img').length > 0) {
					mCTAName = 'Image';
				} else {
					mCTAName = 'Unknown';
				}
			}
			var mState="";
			if(wt.InBucket("S","PostcodeInput"))
				mState = "Prompt";
			else if(wt.InBucket("V","Personalised"))
				mState = "Personalised";
				
			var v = "";
			if(typeof(wt) != "undefined")
				v = wt._getVehicleFromString(href);
			
			var vals = {
				'DCSext.ModuleName': mn,
				'DCSext.ModuleLoc': dl,
				'DCSext.ModuleCTA': mCTAName,
				'DCSext.ModuleState': mState,
				'DCSext.ModuleInteract': 1
			}
			
			if(v!="")
				vals["VehicleConversionID"]=v;			
			
			$(n).unbind('mouseenter mouseleave').hover(function(){
			    $(n).attr('href', '#');
			}, function(){
			    $(n).attr('href', href);
			});

			$(n).unbind('click').click(function(){
				hh_WT.trackEvent(vals, true);
                setTimeout(function() {
					if($(n).hasClass('target-self')){
						document.location.href = href;
					}else{
						window.open(href);
					}
                }, 1000);		
		
				return false;				
			});
		});

	},
	sidebarlink: function(element)
	{
		var l = $(element).attr('href');
		var d="?";
		if(l.indexOf('?')>0)
			d="&";
		var ph = l.split("#");
		var lp = l.split("/");
		var v="Unspecified";
		if(lp.length>1)
			v=lp[lp.length-1];
			
		var vals = {
			WTac: "TFALPRHSView"+ v + "2.9Offer"
		};
				
		var furl = tracking.webtrends.link.appendtourl(ph[0],vals);
		if(ph.length==2)
			$(element).attr('href', furl+"#" + ph[1]);
		else
			$(element).attr('href', furl );
	},
	appendtourl: function(strUrl, vals)
	{	
		
		if(strUrl != undefined) {
			var res="";
			var p = strUrl.split("?");
			var params = {};
			if(p.length==2)
			{
				var q = p[1].split(/&/);
				for(var i=0; i<q.length; i++)
				{
					var np = q[i].split('=');
					if(np.length==2)
						params[np[0]] = np[1];
				}
			}
			for(var v in vals)
				params[v]=vals[v];
				
			res = p[0] + "?";
			var c=0;
			for(var p in params)
			{
				if(c>0)
					res += "&";
				if(p=="WTac")
					res += "WT.ac=" + params[p];
				else
					res += p + "=" + params[p];
					
				c++;
			}
			
			res = res.replace(/\s+/g,"+");
			return res;
		}
	}
};

tracking.event = {
	receive: function(trackingObj) {
		//tracking.event.receive(trackingObj);
		function trackinObjToStr(obj) {
			var s = "";
			for(var i in obj) {
				s += "   " + i+": " +obj[i] +"\n";
			}
			return s;
		}
		
		if(typeof(wt) != "undefined") wt.ReceiveEvent(trackingObj);
		wt._log("Receiving event \n" + trackinObjToStr(trackingObj));
	},
	activate: function(event, trackingObj) {
		//tracking.event.activate('trackingevent', {EventClass: '[VAL]', Action: '[VAL]', Vehicle: '[VAL]', OfferID: '[VAL]', Source: '[VAL]'});
		tracking.event.receive(trackingObj);
	},
	external: function(dest,trackingObj)
	{
		tracking.event.receive(trackingObj);
		
		document.location.href = dest;
	}
};

tracking.wtvar = {
	set: function(n,v)
	{
		tracking.wtvar[n]=v;
	}
}


function receiveTrackingEvent(tObj)
{
	tracking.event.receive(tObj);
}


var addThisTracker = {
	_trackEvent:function(a,b,c,d)
	{
		var dl = document.location.pathname.toLowerCase();
		tracking.event.receive({EventClass:"Share",Action:"Click",Dest:b,Source:dl,ShareURL:c});
	},
	_trackPageview:function(a)
	{
		// placeholder
	}
}

$(document).ready(function() {
	
	var dl = document.location.pathname.toLowerCase();
	$('a.tracking-internal').each(function(i,n) {
		tracking.webtrends.link.internal(n);
	});

	$('a.tracking-external').each(function(i,n) {
		var href = $(n).attr('href');
		$(n).attr('href', '#');
		$(this).click(function(){
			tracking.webtrends.link.external(n, href);
			return false;
		})
	});
	
	$('#overlay').find('a.more-link').each(function(i,n) {
		tracking.webtrends.link.morelink(n);
	});
	
	$('div.dealer').find('a.more-link').each(function(i,n) {
		tracking.webtrends.link.morelink(n);
	});
	
	$('.toolbox-menu').find('a').each(function(i,n) {
		tracking.webtrends.link.toolboxlink(n);
	});
	
	// track the side bar links in TFA
	if(dl.indexOf('toyota-finance-advantage')>0)
	{
		$('.side-promo').find("a").each(function(i,n) {
			tracking.webtrends.link.sidebarlink(n);
		});
	}
	
	if(dl.indexOf('special-offers')>0)
	{
		$('#footer-content').find("a").each(function(i,n) {
		tracking.webtrends.link.morelink(n);
		});
		
		$('#sidebar-b').find("a").each(function(i,n) {
		tracking.webtrends.link.morelink(n);
		});
	}
	 
	$('#main .module').each(function(i,n) {
		tracking.webtrends.link.modulelink(n);
	});
	$('#footer .module').each(function(i,n) {
		tracking.webtrends.link.modulelink(n);
	});
	
});

function handleEvent(eventObj) { 
	wt.ReceiveEvent(eventObj); 
}

function filterTrackingName(t) {
	t = t.replace(/[\?@&%]+/g, ''); // Remove any ?@&% characters
	t = t.replace(/\s{2,}/g,' '); // Remove any sets of spaces to one space
	t = t.replace(/[\n\r]/g,''); // Remove any new line characters
	t = t.replace(/\s+$/, '');
	t = t.replace(/^\s+/, '');
	return t.replace(/\s/g, "+"); // Replace all left over spaces with +
}
