/**
 * Conversion Tracking Class v1.1
 * Adapts for either SilverPop or ExactTarget usage -- Eric R. Shinn 2010.12
 */

var EmailConversionTracking = new function EmailConversionTracking() {
	var ECT={}; // Method for making functions publicly accessible. ex: ECT.funcName = funcName;
	
	/**
	 * Arrays of paramenters used by various Tracking Software in Object notation.
	 */
	var vendors = {
		ExactTarget: {
			parameterKeys: {
				input:	["j","e","l","u","jb","mid"],
				output:	["JobId","EmailAddr","ListID","UrlID","BatchID","MemberID"]
			}
		}
	};
	var vendor = "";
	
	function initTracking() {
		// Check which vendor is used (if any).
		vendor = getVendor();
		if (vendor) vendors[vendor].requestTrackingPixel();
	}
	
	function getVendor() {
		for (vendor in vendors) {
			// Try looking in the parameter string...
			var regSearch = new RegExp("[?&]("+vendors[vendor].parameterKeys.input.join('|')+")(?:=([^&]*))",'gi');
			var regResult = document.location.search.match(regSearch);
			if (regResult && regResult.length == vendors[vendor].parameterKeys.input.length) {
				setValues(vendor, "input");
				return vendor;
			}
		}
		return false;
	}
	
	function setValues(vendor, key) {
		var values = vendors[vendor].parameterKeys.values = [];
		var keys = vendors[vendor].parameterKeys[key];
		for (i=0, iLen=keys.length; i<iLen; i++) {
			values[i] = (key == "input") ? queryPram(keys[i]) : queryCookie(keys[i]);
		}
	}
	
	function queryPram(pram) {
		var x = new RegExp("[?&]"+escape(unescape(pram))+"(?:=([^&]*))","i").exec(window.location.search);
		return (x!=null)?x[1]:"";
	} ECT.queryPram = queryPram;
	
	function queryCookie(pram) {
		var x = new RegExp("ExactTarget.*[?&]?"+pram+"(?:=([^;&]*))","i").exec(document.cookie);
		return (x!=null)?x[1]:"";
	} ECT.queryCookie = queryCookie;
	
	function setCookie () {
		if (vendor && vendors[vendor].parameterKeys.values) {
			var prams = vendors[vendor].parameterKeys.output;
			var values = vendors[vendor].parameterKeys.values;
			var strValue = ""
			var days = 30; // Can be changed to how many days the cookie lives.
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));;
			var expires = "; expires="+date.toGMTString();
			for (var i=0, iLen=prams.length; i<iLen; i++) {
				strValue += prams[i]+"="+values[i];
				if (i<iLen-1) strValue += "&";
			}
			document.cookie = "ExactTarget="+strValue+"; expires="+date.toGMTString()+"; path=/";
		}
	} ECT.setCookie = setCookie;
		
	function removeCookie () {
		if (vendor && vendors[vendor].parameterKeys.values) {
			var days = -1; // Can be changed to how many days the cookie lives.
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			document.cookie = "ExactTarget=; expires="+date.toGMTString()+"; path=/";
		}
	} ECT.removeCookie = removeCookie;
	
	/**
	 * Vendor-specific tracking-pixel requests
	 */
	vendors.ExactTarget.requestTrackingPixel = function requestTrackingPixel() {
		// MID :: 1032761
		var values = vendors[vendor].parameterKeys.values;
		var imgSrc = "http://click.exacttarget.com/conversion.aspx?xml=<system>";
		imgSrc += "<system_name>tracking</system_name>";
		imgSrc += "<action>conversion</action>";
		imgSrc += "<member_id>"+values[5]+"</member_id>";
		imgSrc += "<job_id>"+values[0]+"</job_id>";
		imgSrc += "<email>"+values[1]+"</email>";
		imgSrc += "<list>"+values[2]+"</list>";
		imgSrc += "<original_link_id>"+values[3]+"</original_link_id>";
		imgSrc += "<BatchID>"+values[4]+"</BatchId>";
		// Landing page or Conversion page?
		imgSrc += "<conversion_link_id>"+2+"</conversion_link_id><link_alias>LandingPage</link_alias>";
		imgSrc += "<display_order>"+1+"</display_order>";
		imgSrc += "<data_set></data_set></system>";
		
		var blankImg = new Image();
		blankImg.src = imgSrc;
	};
	
	// Window.OnLoad() for W3C browsers.
	if (window.addEventListener) window.addEventListener("load", initTracking, false);
	// Window.OnLoad() for IE 5 and up.
	else if (window.attachEvent) window.attachEvent("onload", initTracking);
	
	return ECT;
}
