// 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 jQuery.getScript)
	//
	// Usage:
	// 
	// Only a tracking code is required:
	// jQuery.gaTracker('UA-XXXXX-XX');
	// 
	// ...but other options can be specified:
	// jQuery.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 jQuery.getScript for Safari
	
	
	(function(jQuery){
		jQuery.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'		
				]	
			}, 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(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
				jQuery('a').each(function(){
					var u = jQuery(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){
							jQuery(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
					jQuery.getScript(gaURL, function(){
						addTracking();
					});
				} catch(err) {
					// log any failure
					console.log('Failed to load Google Analytics:' + err);
				}
			}
			
			initGA();
		}
	})(jQuery);