/**
 * Google Analytics Tracking Plugin
 * Author: Craig Nagy craig.nagy AT vancouverradio.rogers.com
 * Version: 2007.11.09
 */
(function($) {
					
  // google analytics initialization
	$.fn.ga = function(account,options)
	{	
		_uacct = account; // set the _uacct in a global scope (might already be there, but just to be safe)
		return this.each(function() {
				new $.ga(this, $.extend( {acct: account}, options));
		});
	};
	
	$.ga = function(src, options)
	{
		var self = this; // persistent self reference
		this.source = src; // element to apply GA tracking to (usually document)
		this.options = $.extend({
			fileTypes : ['zip','wmv','gz','mov','txt','ppt','doc','xls','mpg','mpeg','mp3','pdf','avi'],
			domains : [], 		// domains to include in tracking
			restricted : [], 	// domains to NEVER modify
			trackAnchors : true,
			trackFiles : true,
			trackForms : true,
			hostDomain : document.domain.toLowerCase(),
			debug : false
		}, options);
		this.options.debug = true;
		if (typeof urchinTracker == 'undefined') {
			$.getScript("http://www.google-analytics.com/urchin.js",function(){
				self.attachHandlers();
				urchinTracker();
			});
		} else {
			this.attachHandlers();
		}
		
	};
	
	$.extend($.ga.prototype, {
			attachHandlers : function() {
				
				var self = this, o = this.options;
				
				/* Loop through all links with an href attribute and
				*  add the appropriate analytics function call if
				*  it's a tracked domain or downloadable file.
				*/
				$(self.source).find('a[href]').each(function() {
					
					var href = $(this).attr('href');
					
					/* standard cross domain links */
					if( self.isCrossDomain(href) && !self.isRestricted(href) && !self.isTrackedFile(href) ) {

						var onclick = $(this).attr('onclick');
						var target = $(this).attr('target');
						if( (typeof(onclick) == 'undefined' || onclick == null) && (target == null || target == '') ) {
							self.log('Cross Domain Link: '+href);
							$(this).click(function(){
								self.log("__utmLinker",this.href);
								__utmLinker(this.href);
								return false;
							});	
						}
						
					/* Downloadable File */
					} else if( o.trackFiles && self.isTrackedFile(href) && !self.isRestricted(href) ) {
						var onclick = $(this).attr('onclick');
						var target = $(this).attr('target');
						if( (typeof(onclick) == 'undefined' || onclick == null) && (target == null || target == '') ) {
							self.log('Downloadable File: '+href);							
							$(this).click(function(){
								self.log("urchinTracker",this.href);
								urchinTracker(this.href);
							});	
						}
					}
				});
				
				/* cross domain image maps */
				$(self.source).find('area[href]').each(function() {
					var href = $(this).attr('href');
					if( self.isCrossDomain(href) && !self.isRestricted(href) ) {
						self.log('Cross Domain Image Map: '+href);
						$(this).click(function(){
							self.log("__utmLinker",this.href);
							__utmLinker(this.href);
							return false;
						});									
					}
				});						

				/* cross domain forms */
				if( o.trackForms ) {
					$(self.source).find('form[action]').each(function() {
						var action = $(this).attr('action');
						if( self.isCrossDomain(action) && !self.isRestricted(action) ) {
							self.log('Cross Domain Form: '+action);
							$(this).submit(function(){
								self.log("__utmLinkPost");
								__utmLinkPost(this);
							});									
						}
					});
				}
				
				/* named anchors */
				if( o.trackAnchors ) {
					$(self.source).find('a[@href*="#"]').each(function() {
						var href = $(this).attr('href');
						
						if( !self.isRestricted(href) ) {
							self.log('Named Anchor: '+$(this).attr('href'));
							$(this).click(function(){
								self.log("urchinTracker",this.href);
								urchinTracker(this.href);
								//return false;
								return true;
							});	
						}
					});	
				}
	
			
			},
			isCrossDomain : function(href) {
				var href = href.toLowerCase();
				
				for(var i = 0; i < this.options.domains.length; i++) {
					domain = this.options.domains[i].toLowerCase();
					if ( href.indexOf(domain) >= 0 && 
							 href.indexOf(this.options.hostDomain) <= -1 ) {
						return true;
					}
				}
				return false;
			},
			isTrackedFile : function(href) {
				var href = href.toLowerCase();
				var type = href.substring(href.lastIndexOf(".")+1,href.length);
				
				if( jQuery.inArray(type, this.options.fileTypes) > -1 ) {
					for(var i = 0; i < this.options.domains.length; i++) {
						if ( href.indexOf(this.options.domains[i].toLowerCase()) != -1 ) {
							return true;
						}
					}
				}
				return false;
			},
			isRestricted : function(href) {
				var href = href.toLowerCase();
				if(href.indexOf("javascript:") >= 0) { return true; }
				if(href.indexOf("mailto:") >= 0) { return true; }
				for(var i = 0; i < this.options.restricted.length; i++) {
					restricted = this.options.restricted[i].toLowerCase();
					if ( href.indexOf(restricted) != -1 ) {
						return true;
					}
				}
				return false;
			},
			log : function() {
				if(!this.options.debug) return;
				if( window.console )
					console.debug.apply( console, arguments );
			}
			
	});
		
})(jQuery);
