/* 	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
	
	Usage:
	Only a tracking code is required:
	$.gaTracker('UA-XXXXX-XX');

	...but other options can be specified:
	$.gaTracker(
		'UA-XXXXX-XX',
		{
			vpath:		'/track',	<-- virtual path to stow tracking stats under
			external:	'/external/',
			mailto:		'/mailto/',
			download:	'/downloads/',
			statuscode:	200,
			emaillinks:	true,     <--- track any mailto: links
			extlinks:	true,     <--- track any http:// external links
			extensions:	[
				'pdf','doc','xls','csv','jpg','gif', 'mp3',
				'swf','txt','ppt','zip','gz','dmg','xml'		
			]
		}
	);

*/
var thisScript = null;
var gaAccountId = null;
var pageTracker;
var gat;

// get our script src= attribute...
var scripts = document.getElementsByTagName('script');
thisScript = new String(scripts[scripts.length - 1].src);

// load ga library
document.write(unescape("%3Cscript src='http://www.google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

(function(jQuery){
	jQuery.gaTracker = function(code, opts){
		opts = jQuery.extend({
			trackurl: 	null,
			vpath:		'/track',
			external:	'/external/',
			mailto:		'/mailtos/',
			download:	'/downloads',
			bookmark:	'/bookmarks',
			statuscode: 	200,
			emaillinks:	true,
			extlinks:	true,
			bookmarklinks:	false,
			customvar:	null,
			addTrans:	null,
			addItems:	null,
			extensions: [
					'pdf','doc','xls','csv','jpg','gif', 'mp3',
					'swf','txt','ppt','zip','gz','dmg','xml', 'js'		
			],
			debug:		true
			
		}, 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 = '';
			
			// determine type of link
			linktype = 0;
			if (u.indexOf('http://') == 0) {		// http:// type external link
				linktype = 1;
			}
			else {
				if(u.indexOf('mailto:') == 0){		// mailto link
					linktype = 2;
				}
				else {
					if(u.indexOf('#') == 0){	// bookmark link
						linktype = 3;
					}
					else {
						linktype = 4;
					}
				}
			}
			switch(linktype) {
			case 1: //ext link
				// complete URL - check domain
				if (opts.extlinks) {	// track extlinks enabled ??
					var regex = /([^:\/]+)*(?::\/\/)*([^:\/]+)(:[0-9]+)*\/?/i;
					var linkparts = regex.exec(u);
					var urlparts = regex.exec(location.href);					
					if(linkparts[2] != urlparts[2]) trackingURL = opts.vpath + opts.external + linkparts[2];
				}
				break;
			case 2: //mailto link
				if (opts.emaillinks) {	// track mailto links enabled ??
					var emailaddr = u.substring(7);
					if (emailaddr.indexOf('?') > 0) {
						emailaddr = emailaddr.substring(0, emailaddr.indexOf('?'));
					}
					trackingURL = opts.vpath + opts.mailto + emailaddr;
				}
				break;
			case 3: // bookmark links
				if (opts.bookmarklinks) {	// track bookmark links enabled ??
					trackingURL = opts.vpath + opts.bookmark + document.location.pathname + '/' + u;
				}
				break;
			case 4:
				// 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]){	// matches one of recognised download filetypes
						trackingURL = opts.vpath + opts.download + u;
						break;
					}
				}
				break;
			}
			// go back with pseudo url representing this click event
			return trackingURL;
		}
		
		// add tracking code to the current page
		function addTracking(){
			if (typeof _gat != 'undefined') {
				debug('GA loaded for '+code+' track='+opts.trackurl);

				jQuery.pageTracker = _gat._getTracker(code);
				
				jQuery.pageTracker._initData();
				//pageTracker = jQuery.pageTracker;
				
				// main page tracker
				if (opts.statuscode == 200) {	// normal GA tracking code
					if (opts.trackurl) {
						jQuery.pageTracker._trackPageview(opts.trackurl);
					}
					else {
						jQuery.pageTracker._trackPageview();
					}
				}
				else {				// 404 virtual tracking url
					trackURL = opts.vpath+'/errors/'+opts.statuscode+document.location.pathname + document.location.search + '?referrer=' + document.referrer;
					jQuery.pageTracker._trackPageview(trackURL);
					debug('Tracking error '+trackURL);
				}
				// custom segmentation tracking
				if (opts.customvar) {
					jQuery.pageTracker._setVar(opts.customvar);
					debug('_setVar('+opts.customvar+')');
				}
				// e-commerce tracking
				if (opts.addTrans && opts.addTrans.length > 0) {
					// jQuery.pageTracker._addTrans(opts.addTrans);
							debug('_addTrans('+opts.addTrans+')');
					jQuery.pageTracker._addTrans(opts.addTrans[0],opts.addTrans[1],opts.addTrans[2],opts.addTrans[3],opts.addTrans[4],opts.addTrans[5],opts.addTrans[6],opts.addTrans[7]);
				}
				if (opts.addItems && opts.addItems.length > 0) {
					for (i=0;i<opts.addItems.length;i++) {
						debug(i+' of '+opts.addItems.length+' _addItem('+opts.addItems[i]+')');
		
						jQuery.pageTracker._addItem(opts.addItems[i][0],opts.addItems[i][1],opts.addItems[i][2],opts.addItems[i][3],opts.addItems[i][4],opts.addItems[i][5]);
		
					}
					jQuery.pageTracker._trackTrans();
					debug('_trackTrans()');
				}
			
				// 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(){
								jQuery.pageTracker._trackPageview(newLink);
								debug('tracked click to '+newLink);
							});
						}
					}				
				});
			}
			else {
				throw "_gat is undefined";	// serInterval loading ??
			}
		}
		
		// include the external GA script in try/catch to play nice
		function initGA(){
			try{
				if (typeof _gat != 'object') {
					// 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 synchronously
					jQuery.ajaxSetup({ async: false }); 
					jQuery.getScript(gaURL, function(){
						addTracking();
					});
					jQuery.ajaxSetup({ async: true }); 
				}
				else {
					debug('ga already loaded...');
					addTracking();
				}
			} catch(err) {
					// log any failure
					debug('Failed to load Google Analytics:' + err);
			}
		}
		
		initGA();
		return 1234;
	}
	
	// print to firebug console if available
	function debug(message) {
		if(typeof console != 'undefined' && typeof console.debug != 'undefined') {
			console.debug(message);
		}

	}
	
})(jQuery);

function debug(message) {
	if(typeof console != 'undefined' && typeof console.debug != 'undefined') {
		console.debug(message);
	}

}
// on page load
jQuery(document).ready(function(){
// track pageview and add tracking handlers for every outbound link
	if (typeof jQuery.gaTracker != 'undefined') {
		var gat = jQuery.gaTracker('UA-636062-1', 
			{
				trackurl: "",
				vpath: "/track", 
				emaillinks: 1, 
				extlinks: 1, 
				customvar: ""
			}
		);
		// tracking 'View Website' and 'Send Email' links on business partner listing pages
		$("div.hilited div.pod ul.uppercase li.directive a[href^='http:']")
		.not("[href*='christchurchnz.com']")
		.not("[href*='bethere.co.nz']").click(function(){
			trackURL = '/track/website'+'/'+this.href;
			jQuery.pageTracker._trackPageview(trackURL);
			debug('tracked click to '+trackURL);
			return false; // return false to keep the actual link click from actuating
		});
		// tracking main menu items
		$("li.nav-explore a[href^='/']").click(function(){
			trackURL = '/track/mainmenu/explore';
			jQuery.pageTracker._trackPageview(trackURL);
			//return false; // return false to keep the actual link click from actuating
		});
		$("li.nav-accommodation a[href^='/']").click(function(){
			trackURL = '/track/mainmenu/accommodation';
			jQuery.pageTracker._trackPageview(trackURL);
			//return false; // return false to keep the actual link click from actuating
		});
		$("li.nav-what-to-see-and-do a[href^='/']").click(function(){
			trackURL = '/track/mainmenu/what-to-see-and-do';
			jQuery.pageTracker._trackPageview(trackURL);
			//return false; // return false to keep the actual link click from actuating
		});
		$("li.nav-events a[href^='/']").click(function(){
			trackURL = '/track/mainmenu/events';
			jQuery.pageTracker._trackPageview(trackURL);
			//return false; // return false to keep the actual link click from actuating
		});
		$("li.nav-wine-dine-and-shop a[href^='/']").click(function(){
			trackURL = '/track/mainmenu/shop-wine-dine';
			jQuery.pageTracker._trackPageview(trackURL);
			//return false; // return false to keep the actual link click from actuating
		});
		$("li.nav-tours-and-transport a[href^='/']").click(function(){
			trackURL = '/track/mainmenu/transport';
			jQuery.pageTracker._trackPageview(trackURL);
			//return false; // return false to keep the actual link click from actuating
		});
		$("li.nav-blog a[href^='http:']").click(function(){
			trackURL = '/track/mainmenu/blog';
			jQuery.pageTracker._trackPageview(trackURL);
			//return false; // return false to keep the actual link click from actuating
		});
		$("li.nav-specials a[href^='http:']").click(function(){
			trackURL = '/track/mainmenu/whatshot';
			jQuery.pageTracker._trackPageview(trackURL);
			//return false; // return false to keep the actual link click from actuating
		});
		$("li.nav-conventions a[href^='/']").click(function(){
			trackURL = '/track/mainmenu/conventions';
			jQuery.pageTracker._trackPageview(trackURL);
			return false; // return false to keep the actual link click from actuating
		});
		// tracking home page main banner
		$("div#rotator-holder").click(function(){
			trackURL = '/track/banner/homepage-main';
			jQuery.pageTracker._trackPageview(trackURL);
			return false; // return false to keep the actual link click from actuating
		});

	}
	else { // no gatracker library
		alert('jquery-gatracker js file not loaded');
	}
	
	// setup our normal pagetracker object for any onpage event tracking code which expects it
	pageTracker = jQuery.pageTracker;

});
