(function ($) {
  $.fn.addGAInfo = function(args) {
	var options = $.extend({}, $.fn.addGAInfo.defaults, args);
	var gap = new GAParser();

	return this.each(function() {
		if (gap.length() > 0) {
			
			for (key in gap.getArgs()) {
				var name = (options.nameKey[key]) ? options.nameKey[key] : key;
				field = $("<input type=\"hidden\" name=\"" + name + "\" />");
				val = gap.getArg(key);
				if (val.length > 0) field.attr("value",val);
				$(this).append(field);
			}
		}
	});
  };
  
  $.fn.addGAInfo.defaults = {
	  	"nameKey": { 
			"utm_source": "Source", 
			"utm_medium": "Medium", 
			"utm_campaign": "Campaign", 
			"utmctr": "Search term", 
			"utmcct": "Referral URL" 
		}
  };
  
})(jQuery);



/******************************************/
var GAParser = function() {
	var args = 	new Array();
	var valMap = { "utmcsr": "utm_source", "utmccn": "utm_campaign", "utmcmd": "utm_medium" };
	var length = 0;
	
	//Private Functions
	var readCookie = function(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 "";
	};
	
	var splitPairs = function(str,delim) {
		pairs = str.split(delim);
		for (i=0;i < pairs.length;i++) {
			spl = pairs[i].split("=");
			if (valMap[spl[0]] != null) { spl[0] = valMap[spl[0]]; }
			args[spl[0]] = spl[1];
			length++;
		}	
	};
	
	//Contructor
	c = readCookie("__utmz");
	if (c) {
		c = c.substring(c.indexOf("utm"),c.length);
		splitPairs(c,"|");
	}
	
	//Public functions
	return {
		"length":	function() {
			return length;
		},
		"getArg":	function(name) {
			 return (args[name]) ? args[name] : "";
		},
		"getArgs":	function(name) {
			 return args;
		}
	};
	
};