
var ppcTracker = function () {

	var options = {
		campaignKey: 'jpcid'
	}
	var cookieOptions = {
		name: '_jp_ppc_tracker_',
		lifetime: 30 // days
	};
	var advertisers = {
		'Google': 'gclid'
	};
	var advertiser = '';
	var campaign = '';

	function getParams () {
		var params = {};
		var hashes = window.location.search.substring(1).split('&');
		for (var i = 0; i < hashes.length; i++) {
			var hash = hashes[i].split('=');
			params[hash[0]] = hash[1];
		}
		return params;
	};

	function setFromAdvertiserClick () {
		var params = getParams();
		advertiser = '';
		for (var advertiserKey in advertisers) {
			var trackingParam = advertisers[advertiserKey];
			if (params[trackingParam] != undefined) {
				advertiser = advertiserKey;
			}
		}
		// if we're from an advertiser we make sure the campaign is empty so that the
		// campaign value is only set if we're definitely coming from a PPC advert
		if (!advertiser) {
			campaign = '';
		}
		else if (params[options.campaignKey] != undefined) {
			campaign = params[options.campaignKey];
		}
	};

	// cookie methods from http://www.quirksmode.org/js/cookies.html, thanks to PPK
	var cookie = {
		read: function () {
			var nameEQ = cookieOptions.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;
		},
		write: function (value, lifetime) {
			if (lifetime == undefined) {
				lifetime = cookieOptions.lifetime;
			}
			var name = cookieOptions.name;
			var date = new Date();
			date.setTime(date.getTime() + (lifetime * 24 * 60 * 60 * 1000));
			var expires = '; expires=' + date.toGMTString();
			document.cookie = name + '=' + value + expires + '; path=/';
		},
		dispose: function () {
			cookie.write('', -1);
		}
	};

	function getCookieValues () {
		var ret = {
			advertiser: '',
			campaign: ''
		};
		var val = cookie.read();
		if (val) {
			val = val.split('|');
			if (val[0] != undefined) {
				ret.advertiser = val[0];
			}
			if (val[1] != undefined) {
				ret.campaign = val[1];
			}
		}
		return ret;
	}

	function writeCookieValues () {
		var val = [advertiser, campaign].join('|');
		cookie.write(val);
	}

	function getElementById (id) {
		if (id.nodeType) {
			return id;
		}
		return document.getElementById(id);
	}

	// constructor
	function init () {
		setFromAdvertiserClick();
		// advertiser and campaign will be set now if we're from a PPC advert
		if (advertiser) {
			// set the cookie to indicate that they've just come from an advertiser
			writeCookieValues();
		}
		else {
			var vals = getCookieValues();
			advertiser = vals.advertiser;
			campaign = vals.campaign;
		}

		return {
			// public methods
			writeAdvertiser: function (element) {
				element = getElementById(element);
				element.value = advertiser;
			},
			writeCampaign: function (element) {
				element = getElementById(element);
				element.value = campaign;
			}
		}
	}
	return init();
}();
