/****************************************************
     Google Analytics script
	 
	 Author: Alexandre Frantz (Magnet Search Marketing)
	 
	 Version: 1.0
	****************************************************/


GoogleAnalytics = {
	extTrack: ["127.0.0.1","magnetsearchmarketing.com"],
	extDoc: [".doc",".xls",".exe",".zip",".pdf",".ppt",".wav",".mp3",".mov",".mpg",".avi",".wmv",".jpg"],
	utm_pagename: "",
	utm_defaultparams: "",
	utm_moreparams: "",
	utm_account:"UA-3783909-1",
	
	doHeader: function(utm_account) {
		this.initialize(utm_account);
	},
	
	doFooter: function() {
		this.trackPagename();
		this.addLinkerEvents("");
	},
	
	initialize: function(utm_account){
		if(typeof(utm_account)=="undefined"||utm_account==""){
			return;
		}
		else{
			this.utm_account=utm_account;
		}
		if (typeof(window._gat)!="undefined"){				
			window.pageTracker = _gat._getTracker(this.utm_account);
			this.addSearchEngines();
		}
	},
	
	// v 1.1
	addSearchEngines: function(){
		if(typeof(pageTracker.hd) == "undefined") return;
	
		var tab = pageTracker.hd();
		
		if(typeof(tab[0]) == "undefined" || typeof(tab[0]['zb']) == "undefined" || typeof(tab[0]['Nb']) == "undefined") return;
		
		pageTracker._clearOrganic();

		// Google  Image 
		pageTracker._addOrganic("images.google.co.uk", "prev");
		pageTracker._addOrganic("images.google.es", "prev");
		pageTracker._addOrganic("images.google.pt", "prev");
		pageTracker._addOrganic("images.google.it", "prev");
		pageTracker._addOrganic("images.google.fr", "prev");
		pageTracker._addOrganic("images.google.nl", "prev");
		pageTracker._addOrganic("images.google.be", "prev");
		pageTracker._addOrganic("images.google.de", "prev");
		pageTracker._addOrganic("images.google.no", "prev");
		pageTracker._addOrganic("images.google.se", "prev");
		pageTracker._addOrganic("images.google.dk", "prev");
		pageTracker._addOrganic("images.google.fi", "prev");
		pageTracker._addOrganic("images.google.ch", "prev");
		pageTracker._addOrganic("images.google.at", "prev");
		pageTracker._addOrganic("images.google.ie", "prev");
		pageTracker._addOrganic("images.google.ru", "prev");
		pageTracker._addOrganic("images.google.pl", "prev");
		pageTracker._addOrganic("images.google.com", "prev");
		pageTracker._addOrganic("images.google.ca", "prev");
		pageTracker._addOrganic("images.google.com.au", "prev");
		pageTracker._addOrganic("images.google", "prev");

		// Google 
		pageTracker._addOrganic("google.com","q");
		pageTracker._addOrganic("google.co.uk", "q");
		pageTracker._addOrganic("google.es", "q");
		pageTracker._addOrganic("google.pt", "q");
		pageTracker._addOrganic("google.it", "q");
		pageTracker._addOrganic("google.fr", "q");
		pageTracker._addOrganic("google.nl", "q");
		pageTracker._addOrganic("google.be", "q");
		pageTracker._addOrganic("google.de", "q");
		pageTracker._addOrganic("google.no", "q");
		pageTracker._addOrganic("google.se", "q");
		pageTracker._addOrganic("google.dk", "q");
		pageTracker._addOrganic("google.fi", "q");
		pageTracker._addOrganic("google.ch", "q");
		pageTracker._addOrganic("google.at", "q");
		pageTracker._addOrganic("google.ie", "q");
		pageTracker._addOrganic("google.ru", "q");
		pageTracker._addOrganic("google.pl", "q");
		pageTracker._addOrganic("google.ca", "q");

		// Yahoo
		pageTracker._addOrganic("qc.search.yahoo.com", "p");
		pageTracker._addOrganic("ca.search.yahoo.com", "p");
		pageTracker._addOrganic("uk.search.yahoo.com", "p");
		pageTracker._addOrganic("es.search.yahoo.com", "p");
		pageTracker._addOrganic("pt.search.yahoo.com", "p");
		pageTracker._addOrganic("it.search.yahoo.com", "p");
		pageTracker._addOrganic("fr.search.yahoo.com", "p");
		pageTracker._addOrganic("nl.search.yahoo.com", "p");
		pageTracker._addOrganic("be.search.yahoo.com", "p");
		pageTracker._addOrganic("de.search.yahoo.com", "p");
		pageTracker._addOrganic("no.search.yahoo.com", "p");
		pageTracker._addOrganic("se.search.yahoo.com", "p");
		pageTracker._addOrganic("dk.search.yahoo.com", "p");
		pageTracker._addOrganic("fi.search.yahoo.com", "p");
		pageTracker._addOrganic("ch.search.yahoo.com", "p");
		pageTracker._addOrganic("at.search.yahoo.com", "p");
		pageTracker._addOrganic("ie.search.yahoo.com", "p");
		pageTracker._addOrganic("ru.search.yahoo.com", "p");
		pageTracker._addOrganic("pl.search.yahoo.com", "p");

		// Canada
		pageTracker._addOrganic("toile.com", "q");
		pageTracker._addOrganic("msn.ca", "q");
		pageTracker._addOrganic("mamma.ca", "query");
		pageTracker._addOrganic("aol.ca", "query");
		pageTracker._addOrganic("lycos.ca", "q");
		pageTracker._addOrganic("ca.altavista.com", "q");

		// Extras
		pageTracker._addOrganic("ananzi","qt");
		pageTracker._addOrganic("anzwers","search");
		pageTracker._addOrganic("araby.com","q");
		pageTracker._addOrganic("dogpile","q");
		pageTracker._addOrganic("elmundo.es","q");
		pageTracker._addOrganic("ezilon.com","q");
		pageTracker._addOrganic("hotbot","query");
		pageTracker._addOrganic("indiatimes.com","query");
		pageTracker._addOrganic("iafrica.funnel.co.za","q");
		pageTracker._addOrganic("mywebsearch.com","searchfor");
		pageTracker._addOrganic("rambler.ru","words");
		pageTracker._addOrganic("search.aol.com","encquery");
		pageTracker._addOrganic("search.indiatimes.com","query");
		pageTracker._addOrganic("searcheurope.com","query");
		pageTracker._addOrganic("suche.web.de","su");
		pageTracker._addOrganic("terra.es","query");
		pageTracker._addOrganic("voila.fr","kw");
		pageTracker._addOrganic("technorati.com","tag");
		pageTracker._addOrganic("technorati.com","search");
		pageTracker._addOrganic("kelkoo","siteSearchQuery");
		pageTracker._addOrganic("pricerunner","q");

		// Defaults
		for(var i in tab){
			pageTracker._addOrganic(tab[i]['zb'],tab[i]['Nb']);
		}
	},
	
	_AttachEvent: function(_mLink, _mEvent, _mMethod, _mCurrentOnclick) {
		if (_mLink.attachEvent) {
			var f = new Function(_mMethod + _mCurrentOnclick);
			_mLink.onclick = f;
		} else {
			_mLink.setAttribute(_mEvent, _mMethod + _mCurrentOnclick);
		} 
	},
	
	/****************************************************
     Based on Brian Clifton's script
	 Url: http://www.advanced-web-metrics.com
	 
	 Author: Julien Bissonnette (Magnet Search Marketing)
	 
	 Version: 2.05
	****************************************************/
	addLinkerEvents: function(gaparams) {
		var as = document.getElementsByTagName("a");
		var areas = document.getElementsByTagName("area");
		
		var tags = new Array(as.length+areas.length);
		for(var i=0; i<as.length; i++) {
			tags[i]=as[i];
		}
		for(var i=0; i<areas.length; i++) {
			tags[as.length+i]=areas[i];
		}
	
		for(var i=0; i<tags.length; i++) {
			var flag = true;
			var found = false;
			var current_host = null;
			
			var currentOnclick = '';
			if (tags[i].attachEvent)  {
				currentOnclick = tags[i].attributes['onclick'].value;
			} else {
				currentOnclick = tags[i].getAttribute("onclick");
			}
			
			tmp = (currentOnclick != null) ? String(currentOnclick) : '';
			tmp = tmp.replace(/javascript:/i, '');
			
			if (tmp.indexOf('urchinTracker') > -1 || tmp.indexOf('_trackPageview') > -1 || tmp.indexOf('customLink') > -1) continue;
			if (tags[i].href.indexOf('google-analytics.com') != -1 || tags[i].href.toLowerCase().indexOf('javascript:') != -1) continue;
			
			// Fix Magnet to prevent exit links on <a> tags without href attribute
			if (tags[i].href.length > 0) {
				// Tracking electronic documents
				for (var j=0; j<this.extDoc.length; j++) {
					if (tags[i].href.search(eval('/'+this.extDoc[j]+'/i')) != -1) {
						var result = tags[i].href.replace(/https?:\/\//, '');
						this._AttachEvent(tags[i], 'onclick', "GoogleAnalytics.customLink('download','"+result+"','"+gaparams+"');", tmp);
						found = true;
						break;
					}
				}

				// Tracking mailto links
				if (tags[i].href.search(/mailto:/i) != -1) {
					var result = tags[i].href.replace(/mailto:/i, '');
					this._AttachEvent(tags[i], 'onclick', "GoogleAnalytics.customLink('mailto','"+result+"','"+gaparams+"');", tmp);
					found = true;
				}
			
				if (found == false) {
					// Tracking outbound links
					for (var j=0; j<this.extTrack.length; j++) {					
						var regex = new RegExp('^(http|https):\/\/([^/]*)'+this.extTrack[j]+'.*', "i");
						if (regex.test(tags[i].href)) {
							flag = false;
							break;
						}
					}
				
					if (flag) {
						var result = tags[i].href.replace(/https?:\/\//, '');
						this._AttachEvent(tags[i], 'onclick', "GoogleAnalytics.customLink('exit','"+result+"','"+gaparams+"');", tmp);
					}
				}
			}
		}
	},
		
	getDirectLinkValue: function(){
		return location.pathname+location.search;
	},
	
	customLink: function(utm_action, utm_actionelement, gaparams){
		if(typeof(utm_actionelement)=="undefined"||utm_actionelement==""){
			utm_actionelement=utm_action;
		}
		this.trackPagename("utm_action="+utm_action+"&utm_actionelement="+utm_actionelement+(typeof(gaparams)!="undefined"&&gaparams.length>0?"&"+gaparams:""));
	},
	
	setDefaultPagename: function(moreparams){
		var pagename=this.getDirectLinkValue();
		this.setPagename(pagename,moreparams);
	},
	
	setPagename: function(basePagename, moreparams){
		this.utm_moreparams = typeof(moreparams)!="undefined"?moreparams:"";
		this.utm_pagename = basePagename;
	},
		
	trackPagename: function(gaparams){
		if(typeof(pageTracker)!="undefined"){			
			var queryparams = this.utm_defaultparams + (this.utm_defaultparams.length>0&&this.utm_moreparams.length>0?"&":"") + this.utm_moreparams + (typeof(gaparams)!="undefined"&&gaparams.length>0? ((this.utm_defaultparams.length>0||this.utm_moreparams.length>0?"&":"") + gaparams):"");
						
			if(this.utm_pagename == "" && queryparams==""){
				pageTracker._trackPageview();
			}
			else{
				this.setDefaultPagename("");
				var pageview = this.utm_pagename+(queryparams.length>0?((this.utm_pagename.indexOf("?")>-1?"&":"?")+queryparams):"");
				pageTracker._trackPageview(pageview);
			}
		}
	},
	
	/*
	 * getCookie(): given a cookie name, get its value. Returns null if the cookie can't be found.
	 * From http://www.webreference.com/js/column8/functions.html
	 *
	 */
	getCookie: function(name) {
		var dc = document.cookie;
		var prefix = name + "=";
		var begin = dc.indexOf("; " + prefix);
		if (begin == -1) {
			begin = dc.indexOf(prefix);
			if (begin != 0) return null;
		} else
			begin += 2;
		var end = document.cookie.indexOf(";", begin);
		if (end == -1)
			end = dc.length;
		return unescape(dc.substring(begin + prefix.length, end));
	},
	
	/*
	 * utmvCookieCheck(): given a value, read the __utmv cookie and see if
	 * that value is already set. Return true if so, false otherwise.
	 *
	 */
	utmvCookieCheck: function(value) {
		var utmvCookie = this.getCookie("__utmv"); 
	 
		if (utmvCookie == null)
			return false;
	 
		// get rid of the Google's domain prefix ID, which appear on all
		// GA cookies
		utmvCookie = utmvCookie.replace(/^\d*\./, '');
	 
		return (utmvCookie == value) ? true : false;
	},
	
	trackUserDefined: function(userDefinedValue){	
		if(typeof(pageTracker)!="undefined"){
			// from: http://www.startupcto.com/marketing-tech/google-analytics/setvar-and-the-zero-bounce-rate-bug
			if(!this.utmvCookieCheck(userDefinedValue)) {
				pageTracker._setVar(userDefinedValue);
			}
		}
	},
	
	trackEvent: function(category, action, label, value){	
		if(typeof(pageTracker)!="undefined"){
			pageTracker._trackEvent(category, action, label);
		}
	},
	
	trackCommerce: function(category,product,sku){
		if(typeof(pageTracker)=="undefined"){
			return;
		}
	
		var timeObj		= new Date;
		var unixTimeMs	= timeObj.getTime();
		var unixTime	= parseInt(unixTimeMs / 1000);
		
		var t=this.utm_defaultparams;
		var z=0;
		var utm_prefix="";
		while (t) {
			var y = t.indexOf("&");
			y = y < 0 ? t.length: y;
			t = t.substring(0, y);
			if(t.indexOf("=")){
				utm_prefix+=t.substring(t.indexOf("=")+1,t.length)+"-";
			}
			z += y + 1;
			t = this.utm_defaultparams.substring(z, this.utm_defaultparams.length);
			t = z < this.utm_defaultparams.length ? t: '';
		}
		
		var orderID = utm_prefix + pageTracker._visitCode() + '-' + unixTime;
		
		pageTracker._addTrans(
			orderID,             			// order ID - required 
			"",								// affiliation or store name
			0,            					// total - required
			"",             				// tax
			"",          					// shipping
			"",  		       				// city
			"",       						// state or province
			"" 			            		// country
		);
			
		pageTracker._addItem(
			orderID,             			// order ID - required
			sku,							// SKU/code
			product,         				// product name
			category,     					// category or variation
			0,            					// unit price - required
			1                 				// quantity - required
		);
	
		pageTracker._trackTrans();
	}
	
};
