/* 	gaTracker 1.0.1: jQuery Google Analytics Integration 
	A quicker, automated way to embed Google Analytics.
	(c)2007 Jason Huck/Core Five Creative
	
	* BETA Support for new Analytics API (ga.js) by Jamie Thompson - http://jamazon.co.uk
	* Requires jQuery 1.2.x or higher (for cross-domain $.getScript)
	* TODO: more testing, delay after $.getScript for Safari
	* Added Transaction Support - mitch 
		For more info on Transactions: http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55528
	
	
	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'		
			],
			transaction: { 
				info: [OrderId, 'Affiliation', '652.52', '10.29', '5.00', 'Sherbrooke', 'Quebec', 'Canada' ], 
				items: [
					[OrderId, 'SKU', 'Product Name', 'Category', 'Price', 'Quantity'],
					[OrderId, '8314', 'Dog-Cat', 'Robotics', '49.99', '1'],
					[OrderId, '8410', 'Cinemin Swivel', 'Tech - Projection', '349.99', '1']
				]
			}
		}
	);

*/


(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'		
			],
			transaction: false
			
		}, 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('://') == -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(var 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 transaction code to the page
		 * 
		 * @return void
		 **/
		function addTransaction() {

			var transaction = opts.transaction.info || false;
			
			if(!transaction) { 
				return false;
			}
			
			$.pageTracker._addTrans.apply(this, transaction);
			
			var items = opts.transaction.items || false;
			
			if(items) {
				for (var i=0; i < items.length; i++) {
					$.pageTracker._addItem.apply(this, items[i]);
				}
			}
			
			$.pageTracker._trackTrans();
		
		}
		
		// add tracking code to the current page
		function addTracking(){

			$.pageTracker = _gat._getTracker(code);

			//If there is a transaction, and we want third party cart tracking
			//Not enabled, but here if we need to enable it. 
			//$.pageTracker._setDomainName()
			//$.pageTracker._setAllowLinker(true)

			$.pageTracker._initData();
			$.pageTracker._trackPageview(); 
		
			// 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(){
							$.pageTracker._trackPageview(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/ga.js';
		
				// include the script
				$.getScript(gaURL, function(){
					addTracking();
					
					if(opts.transaction !== false) {
						addTransaction();
					}
					
				});
			} catch(err) {
				// log any failure
				console.log('Failed to load Google Analytics:' + err);
			}
		}
		
		initGA();
	};
})(jQuery);
