// gaTracker: jQuery Google Analytics Integration
// A quicker, automated way to embed Google Analytics.
// (c)2007 Jason Huck/Core Five Creative
//
// Requires jQuery 1.2.x or higher (for cross-domain $.getScript)
//
// 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'
//			]
//		}
//	);
//
// TODO: more testing, delay after $.getScript for Safari


(function($){
	$.gaTracker = function(code, opts){
		opts = jQuery.extend({
			external:	'/external/',
			mailto:		'/mailtos/',
			download:	'/downloads/',
			mb_adds:	'/Mercabarna Ads/',
			extensions: [
					'pdf','doc','xls','csv','jpg','gif', 'mp3',
					'swf','txt','ppt','zip','gz','dmg','xml'
			]
		}, 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){
			var trackingURL = '';

			if(u.indexOf('utm_source=Mercabarna') != -1) {
				trackingURL = opts.mb_adds + u;
			} else {
				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;
						}
					}
				} 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(){
			_uacct = code;
			urchinTracker();

			// examine every link in the page
			$('a').each(function(){
				var u = $(this).attr('href');

				if(typeof(u) != 'undefined'){
					var newLink = decorateLink(u);

					// if it needs to be tracked manually,
					// bind a click event to call GA with
					// the decorated/prefixed link
					if(newLink.length){
						$(this).click(function(){
							urchinTracker(newLink);
						});
					}
				}
			});
		}

		// include the external GA script in try/catch to play nice
		function initGA(){
			try{
				// determine whether to include the normal or SSL version
				var gaURL = (location.href.indexOf('https') == 0 ? 'https://ssl' : 'http://www');
				gaURL += '.google-analytics.com/urchin.js';

				// include the script
				$.getScript(gaURL, function(){
					addTracking();
				});
			} catch(err) {
				// log any failure
				console.log('Failed to load Google Analytics:' + err);
			}
		}

		initGA();
	}
})(jQuery);

