/* extend the std pageTracker functionality by adding our own custom method
   Based on existing getLinkerUrl() it deconstructs returned url into an array of cookie/value pairs
   so these can be used to create dummy hidden form fields in a trackable form
*/

// get Link components as array of cookies
pageTracker._getLinkComponents = function(url) {
	var newurl = this._getLinkerUrl(url);
console.log(newurl);
	var extrauri = newurl.substr(url.length);
	var c = extrauri.charAt(0);
	if ('?' == c || '&' == c || '#' == c)
	  extrauri = extrauri.substr(1);
	var arr = extrauri.split('&');
	var components = {};
	for (var i=0; i<arr.length; ++i) {
	  var kv = arr[i].split('=');
	  var k = kv.shift();
	  components[k] = kv.join('=');
	}
	return components;
}

// wrapper function to handle both Gets and Posts
function _linkByPostOrGet(formobj, useHash) {
	if (useHash == null) useHash = false;
	if (typeof(console) == 'object') console.log('form submit event for '+formobj.id);
	if (this.title && this.title == "galink") {		// already appended cookie data to form.action ??
		console.log('skipped...');
	}
	else {
		var thisform = jQuery(formobj);
		var method = thisform.attr("method").toLowerCase();
		if (!method || method == "get") {	// uses GET
console.log('using get...');
			var href = window.href;
			if ((action = thisform.attr('action')))
				href = action;		// use forms action url to pass to getLinkComponents
			var components = pageTracker._getLinkComponents(href);
			for (gacookie in components) {
				thisform.append(jQuery('<input type="hidden" name="' + gacookie + '" value="' + components[gacookie] + '" />'));
			}
			// pageTracker._linkByPostOriginal(formobj, useHash);
			
		} else {	// uses POST - OK to use std _linkByPost() 
			// if (typeof(console) == 'object') console.log('form uses post - trickle down to std ga _linkByPost()');
			pageTracker._linkByPostOriginal(formobj, useHash);
		}
		this.title = "galink";	// flag form as being tagged with cookie data
	}	
	return true;
}

// overload Ga's _linkByPost with our own wrapper method
// save original method first
pageTracker._linkByPostOriginal = pageTracker._linkByPost;
// pageTracker._linkOriginal = pageTracker._link;

pageTracker._linkByPost = function(formObject, useHash) {
	_linkByPostOrGet(formObject, useHash);
	return true;
}

// on dom loaded..
jQuery(document).ready(function(){
	// add submit handlers to all trackable forms.

	jQuery("form.trackable").submit(function(){
			_linkByPostOrGet(this, false);
	});
	// add onclick handlers to all trackable links to other domains
	jQuery("a.trackable").click(function(){  
		if (this.rev && this.rev == "galink") {	// already appended cookie data
			;
		}
		else {
			this.href = pageTracker._getLinkerUrl(this.href);
			this.rev = "galink";
			if (typeof(console) == 'object') console.log('trackable link to '+this.href+' ('+this.target+') clicked');
		}
		return true;	// let original event happen .
	  });
});	// end onready