/*
	JavaScript Tracking Tool
	Written by Michael Langford for CARE, www.care.org
	This script is (c) Copyright CARE USA.  Use by expressed permission only.
*/

var TRK_O = false;
var TRK_X = false;
var TRK_SessionOnly = true;
var ChannelParamName = "s_subsrc";
var SourceParamName = "s_src";
var GA2ndSourceParamName = "qp_source"; // var GA2ndSourceParamName = ""; //?
var ChannelCookieName = "trkchannel";
var SourceCookieName = "trksource";



function TRK_AddClass(){
	var AllAnchorElements = $$('a');
	for(var i=0;i<AllAnchorElements.length;i++){
		if(!AllAnchorElements[i].hasClassName('trk') && !AllAnchorElements[i].hasClassName('trkx')){
			AllAnchorElements[i].addClassName("trk");
//			try{console.log(AllAnchorElements[i].href,"ADDED trk class");}catch(e){};
		}
		else{
//			try{console.log(AllAnchorElements[i].href,"has trk class");}catch(e){};
		}
	}
}

function TRK_HasCookies(){
	if(TRK_ReadCookie("trksource") != null && TRK_ReadCookie("trkchannel") != null){ return true; }
	return false;
}

function TRK_AquireTracking(){
	if(TRK_GetParamValue(SourceParamName) || TRK_GetParamValue(ChannelParamName) ||  TRK_GetParamValue(GA2ndSourceParamName) || TRK_O || TRK_HasCookies()){
		var SourceValue;
		if(TRK_GetParamValue(GA2ndSourceParamName)){
			SourceValue =TRK_O ? TRK_O : TRK_GetParamValue(GA2ndSourceParamName);
			TRK_CreateCookie(SourceCookieName,SourceValue,0,"/","care.org");
		}
		else if(TRK_GetParamValue(SourceParamName)){
			SourceValue = TRK_O ? TRK_O : TRK_GetParamValue(SourceParamName);
			TRK_CreateCookie(SourceCookieName,SourceValue,0,"/","care.org");
		}
		else{
			if(TRK_ReadCookie("trksource") == null){
				SourceValue = TRK_O ? TRK_O : "";
				TRK_CreateCookie(SourceCookieName,SourceValue,0,"/","care.org");
			}
		}

		if(TRK_ReadCookie("trkchannel") == null){
			if(TRK_GetParamValue(ChannelParamName)){
				TRK_CreateCookie(ChannelCookieName,TRK_GetParamValue(ChannelParamName),0,"/","care.org");
			}
		}

		var TRK_TaskList = $$('.trk');
		TRK_TaskList.each(function(Link){
			var TRK_Source =  TRK_ReadCookie(SourceCookieName)  ? TRK_ReadCookie(SourceCookieName) : "";
			var TRK_Channel = TRK_ReadCookie(ChannelCookieName) ? TRK_ReadCookie(ChannelCookieName) : "";
			var Delimiter = "?";
			var ChkDelimiter = /\?/g;
			var ChkHash = /\#/g;
			var EmailLink = /mailto\:/g;
			var JSLink = /javascript\:/g;

			try{
				if(!Link.href.match(EmailLink) && !Link.href.match(JSLink)){
					if(Link.href.match(ChkDelimiter)){
						Delimiter = "&";
					}

					if(Link.href.match(ChkHash)){
						/*Does not support named-anchor links...*/
					}
					else{
						var trkHardCodeResult = TRK_CheckHardCode(Link.search,Link);

						if(trkHardCodeResult == "N,N"){ Link.href = Link.href + Delimiter + SourceParamName + "=" + TRK_Source + "&" + ChannelParamName + "=" + TRK_Channel; }
						else if(trkHardCodeResult == "Y,N"){ Link.href = Link.href + Delimiter + ChannelParamName + "=" + TRK_Channel; }
						else if(trkHardCodeResult == "N,Y"){ Link.href = Link.href + Delimiter + SourceParamName + "=" + TRK_Source; }
						else if(trkHardCodeResult == "Y,Y"){ Link.href = Link.href; }

					}
				}
				else{
					/* Do not add source or channel values to non-URI links */
				}
			}catch(e){ };
		});
	}
}

function TRK_CheckHardCode(params,anchor){
	var s_src = new RegExp(SourceParamName,"ig");
	var s_subsrc = new RegExp(ChannelParamName,"ig");
	var output = new Array("N","N");

	if(params.match(s_src)){
//		console.log(params.match(s_src)," ",anchor);
		output[0] = "Y"
	};
	if(params.match(s_subsrc)){
//		console.log(params.match(s_subsrc,anchor));
		output[1] = "Y"
	};
//	console.log(output.join());

	return output.join();
}

function ArrangeURL(urlstring){
	var URLArray = urlstring.split("#");
	HashPart = URLArray.pop();
	return [URLArray[0],"#"+HashPart];

}

function TRK_GetParamValue(key){
	var VALUE = "";
	var thisLocation = String(document.location);
	var QueryHash = $H(thisLocation.toQueryParams());
	QueryHash.each(function(keyValuePair){
		if(keyValuePair.key == key){
			VALUE = keyValuePair.value;
		}
	});
	return VALUE;
}

function TRK_GetExpiration(DURATION){//Duration input is in HOURS
	var ThisDate = new Date();
	ThisDate.setTime(ThisDate.getTime()+(DURATION * 60 * 60 * 1000));
	if(DURATION == 0){
		return "Session";
	}
	else{
		return ThisDate.toGMTString(); //Outputs GMT date _DURATAION_ hours away.
	}
}

function TRK_CreateCookie(NAME,VALUE,DURATION,PATH,DOMAIN){
	if(DURATION != -1){ TRK_EraseCookie(NAME,VALUE,DURATION,PATH,DOMAIN); }
	var EXPIRY = TRK_GetExpiration(DURATION);
	var COOKIESTRING = NAME + "=" + VALUE + "; ";
	if(EXPIRY != "Session"){
		COOKIESTRING += "expires=" + EXPIRY + "; ";
	}
	COOKIESTRING += "path=" + PATH + "; domain=" + DOMAIN + ";";
	if(TRK_SessionOnly){ document.cookie= NAME + "=" + VALUE; }
	else{ document.cookie = COOKIESTRING; }
	return null;
}

function TRK_ReadCookie(NAME) {
	var nameEQ = NAME + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' '){
			c = c.substring(1,c.length)
		}
		if(c.indexOf(nameEQ) == 0){
			return c.substring(nameEQ.length,c.length);
		}
	}
	return null;
}

function TRK_EraseCookie(NAME,VALUE,DURATION,PATH,DOMAIN){
	TRK_CreateCookie(NAME,VALUE,-1,PATH,DOMAIN);
}


Event.observe(window,'load',function(){
	try{
		if(!TRK_X){
			TRK_AddClass();
			TRK_AquireTracking();
		}
	}catch(e){ };
},false);
