// gaTracker: jQuery Google Analytics Integration
// A quick, automated way to embed Google Analytics.
// (c)2007 Jason Huck/Core Five Creative
//
// Usage:
//
// Only a tracking code is required:
// $.gaTracker('UA-XXXXX-XX');
//
// ...but other options can be specified:
// $.gaTracker(
//		'UA-XXXXX-XX',
//		{
//			external:	'/external/',
//			mailto:		'/mailto/',
//			download:	'/downloads/',
//			extensions:	[
//				'pdf','doc','xls','csv','jpg','gif', 'mp3',
//				'swf','txt','ppt','zip','gz','dmg','xml'
//			]
//		}
//	);

(function($){
    $.gaTracker = function(code, opts){
	opts = jQuery.extend({
	    external:   '/external/',
	    mailto:     '/mailtos/',
	    download:   '/downloads/',
	    extensions: [
		'pdf','doc','xls','csv','jpg','gif', 'mp3',
		'swf','txt','ppt','zip','gz','dmg','xml', 'js'
	    ]
	}, opts);

	// Returns the given URL prefixed if it is:
	//		a) a link to an external site
	//		b) a mailto link
	//		c) a downloadable file
	// ...otherwise returns an empty string.
	function decorateLink(u, link){
	    var trackingURL = '';

	    if(u.indexOf('://') == -1 && u.indexOf('mailto:') != 0){
		// no protocol or mailto - internal link - check extension
		var ext = u.split('.')[u.split('.').length - 1];
		var exts = opts.extensions;

		for(i = 0; i < exts.length; i++){
		    if(ext == exts[i]){
			trackingURL = opts.download + u;
			break;
		    }
		}

		var ver = $(link).attr('ver');
		if(ver !== undefined) trackingURL += '/' + ver;

	    } else {
		if(u.indexOf('mailto:') == 0){
		    // mailto link - decorate
		    trackingURL = opts.mailto + u.substring(7);
		} else {
		    // complete URL - check domain
		    var regex = /([^:\/]+)*(?::\/\/)*([^:\/]+)(:[0-9]+)*\/?/i;
		    var linkparts = regex.exec(u);
		    var urlparts = regex.exec(location.href);
		    if(linkparts[2] != urlparts[2]) trackingURL = opts.external + u;
		}
	    }

	    return trackingURL;
	}

	// add tracking code to the current page
	function addTracking(){
	    var pageTracker = _gat._getTracker(code);
	    pageTracker._initData();
	    pageTracker._trackPageview();

	    // examine every link in the page
	    $('a[href]').each(function(){
		var u = $(this).attr('href');
		var newLink = decorateLink(u, this);

		if(newLink.length){
		    $(this).click(function(){
			var pageTracker = _gat._getTracker(code);
			pageTracker._initData();
			pageTracker._trackPageview(newLink);
		    });
		}
	    });
	}

	// include the external GA script in try/catch to play nice
	function initGA(){
	    var gaURL = (("https:" == document.location.protocol) ? "https://ssl" : "http://www");
	    gaURL += '.google-analytics.com/ga.js';

	    // include the script
	    $.getScript(gaURL, function(){
		addTracking();
	    });
	}

	initGA();
    }
})(jQuery);
