/**
 * Conversion Tracking Class v1.0
 *
 * Requirements:	1. This class requires the use of "cookies-v1.js".
 *					2. This class requires the use of "parameterURI-v1.js"
 */

var ConversionTracking = {
	
	/**
	 * Arrays of paramenters used by various Tracking Software in Object notation.
	 */
	pramConvArray: {
		SilverPop: {
			changeFrom: ["spMailingID",	"spUserID",	"spJobID"],
			changeTo:	["m",			"r",		"j"]
		}
	},
	
	// Initiate Tracking
	initTracking: function () {
		// Get parameters from the URL.
		var urlPrams = ConversionTracking.getUrlPrams(window.location);
		if (typeof(urlPrams) != "undefined") {
			urlPrams = ConversionTracking.convertPrams(urlPrams, ConversionTracking.pramConvArray);
			ConversionTracking.applyToCookie(urlPrams, ConversionTracking.pramConvArray);
//			ConversionTracking.applyToAllLinks(urlPrams);
			ConversionTracking.applyPramsToFormAction(ConversionTracking.pramConvArray, urlPrams);
			ConversionTracking.silverPopImageTrackingCall(ConversionTracking.pramConvArray.SilverPop.changeTo, urlPrams);
		} else {
			ConversionTracking.silverPopImageTrackingCall(ConversionTracking.pramConvArray.SilverPop.changeTo);
		}
	},
	
	// Retrieve Parameters from URL and return in arrays.
	getUrlPrams: function (uri) {
		if (String(uri).indexOf("?") != -1) uri = String(uri).substring(String(uri).indexOf("?")+1);
		else return;
		var uriPrams = {name: uri.split("&"), value: uri.split("&")};
		for (var i=0; i < uriPrams.name.length; i++) {
			uriPrams.name[i] = uriPrams.name[i].substring(0,uriPrams.name[i].indexOf("="));
//			alert("getUrlPrams.name: "+uriPrams.name[i]);
			uriPrams.value[i] = uriPrams.value[i].substring(uriPrams.value[i].indexOf("=")+1);
//			alert("getUrlPrams.value: "+uriPrams.value[i]);
		}
		return uriPrams;
	},
	
	// Parameter Naming Conversion
	convertPrams: function (prams, convTable) {
		// Run through all retrieved parameters and check for any parameter names that need to be changed.
		for (var n = 0; n < prams.name.length; n++) {
			for (var tracker in convTable) {
				for (var i = 0; i < convTable[tracker].changeFrom.length; i++) {
//					if (prams.name[n] == convTable[tracker].changeFrom[i]) alert("Converted "+prams.name[n]+" = "+prams.value[n]+" to "+convTable[tracker].changeTo[i]);
					if (prams.name[n] == convTable[tracker].changeFrom[i]) prams.name[n] = convTable[tracker].changeTo[i];
				}
			}
		}
		return prams;
	},
	
	applyToCookie: function (prams, convTable) {
		for (var tracker in convTable) {
			for (var n=0; n<convTable[tracker].changeTo.length; n++) {
				for (var i=0; i<prams.name.length; i++) {
					if (prams.name[i] == convTable[tracker].changeTo[n]) {
						var days = 45; // 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();
//alert("Applying Cookie: "+prams.name[i]+'='+prams.value[i]+expires+'; path=/');
						document.cookie = prams.name[i]+'='+prams.value[i]+expires+'; path=/';
					}
				}
			}
		}
	},
	
	readFromCookie: function (name) {
		var nameEQ = name + '=';
		var attr = document.cookie.split('; ');
		for (var i=0; i<attr.length; i++) {
			if (attr[i].indexOf(nameEQ) == 0) {
				return attr[i].substring(attr[i].indexOf("=")+1);
			}
		}
		return null;
	},
	
	applyToAllLinks: function (prams) {
		var links = document.getElementsByTagName('a');
		var tagExt = "";
		var exPrams = "";
		for (var n=0; n<prams.name.length; n++) {
			exPrams += prams.name[n]+"="+prams.value[n];
			if (n < prams.name.length-1) exPrams += "&";
		}
		for (var i=0; i<links.length; i++) {
			tagExt = (links[i].href.indexOf("?") != -1) ? "&" : "?";
			links[i].href = links[i].href + tagExt + exPrams;
		}
	},
	
	applyPramsToFormAction: function (convArray, urlPrams) {
		var formTags = document.getElementsByTagName("form");
		for (var f=0; f<formTags.length; f++) {
			formTags[f].action = (formTags[f].action.indexOf("?") == -1) ? formTags[f].action+"?" : formTags[f].action+"&";
			for (var tracker in convArray) {
				for (var i=0; i<convArray[tracker].changeTo.length; i++) {
					if (urlPrams) {
						for (var x=0; x<urlPrams.name.length; x++) {
							if (convArray[tracker].changeTo[i] == urlPrams.name[x]) formTags[f].action += urlPrams.name[x]+"="+urlPrams.value[x]+"&";
						}
					} else if (ConversionTracking.readFromCookie(convArray[tracker].changeTo[i]) != null) {
						formTags[f].action += convArray[tracker].changeTo[i]+"="+ConversionTracker.readFromCookie(convArray[tracker].changeTo[i])+"&";
					} else {
						return;
					}
				}
			}
			formTags[f].action = formTags[f].action.substring(0, formTags[f].action.length - 1);
			
			// Next two lines are temporary for testing conversion ONLY. Remove before going into production.
//			formTags[f].action = "conversionPage.asp"+formTags[f].action.substring(formTags[f].action.indexOf("?"));
//			alert("The form action is now: "+formTags[f].action);
		}
	},
	
	silverPopImageTrackingCall: function (targetPramList, urlPrams) {
		var blankImage = new Image();
		var imgPrams = "?";
		for (var i=0; i<targetPramList.length; i++) {
			if (urlPrams) {
				for (var x=0; x<urlPrams.name.length; x++) {
					if (targetPramList[i] == urlPrams.name[x]) imgPrams += targetPramList[i]+"="+urlPrams.value[x]+"&";
				}
			} else if (ConversionTracking.readFromCookie(targetPramList[i]) != null) {
				imgPrams += targetPramList[i]+"="+ConversionTracking.readFromCookie(targetPramList[i])+"&";
			} else {
				return;
			}
		}
		pageURL = (String(window.location).indexOf("?") != -1) ? String(window.location).substring(0,String(window.location).indexOf("?")) : String(window.location);
		imgPrams += "name="+document.title+"&s="+pageURL;
		blankImage.src = "http://recp.rm02.net/cst"+imgPrams;
//		alert("Making a SilverPop Image call with SRC = "+blankImage.src);
	},
	
	addToWindowOnLoad: function () {
		// Start for W3C browsers.
		if (window.addEventListener) window.addEventListener("load", ConversionTracking.initTracking, false);
		// Start for IE 5 and up.
		else if (window.attachEvent) window.attachEvent("onload", ConversionTracking.initTracking);
		// Start for others ... commented out as some code is not compatible with IE 4 - ex: document.getElementsByTagName()
//		else {window.oldLoad = window.onload; window.onload = function() {window.oldLoad(); ConversionTracking.initTracking()};}
	}
	
};

ConversionTracking.addToWindowOnLoad();