/*GAautoTrack Async START */

// Asnyc - V.1.2
var gaAccount = 'UA-699717-1';	
var extId  = '/outbound/';
var docId  = '/download/';
var mailId = '/mailto/';
var domains    = ['boostwebsiteimpact', 'domain2']; //TODO: Transform easy to setup input into RegExp + Allow RegExps directly too 
var fileTypes  = [".doc",".xls",".exe",".zip",".pdf",".docx",".pptx",".xlsx"]; //TODO: Transform easy to setup input into RegExp
var vpvEnabled = true;
var evtEnabled = true;
var trackDelay = 200; // Delay after tracking request - miliseconds


/* DO NOT CHANGE BEYOND THIS POINT */

var debug = "";

var autoTrackerAsync = function(){

	//Define Global variables  & Setters
	var gaAccount ="";

	
		//Init Function
	
	//Start Listening Function
		
		//Track Documents
		
		//Track External Links
		
		//Track Emails
		
		//Linker???
	
};


var regExFlag = false;
var __gaDomains   = [/\.joseluisdavila\.(com)$/i,/\.petro-canada\.(ca|com)$/i, /\.suncor\.(ca|com)$/i, /\.pcmobilitysite\.com$/i, /^pca007($|\.|\:)/i]; 
var __gaFileTypes  = [/\.doc$/i,/\.xls$/i,/\.exe$/i,/\.zip$/i,/\.pdf$/i,/\.docx$/i,/\.pptx$/i,/\.xlsx$/i];
var __gaFileTypes  = new RegExp(/\.(docx*|xlsx*|pptx*|exe|zip|pdf|xpi)$/i);

function listenToClicks() { 
	
	// TODO: Remove testing alert
	//alert("Inside listenToClicks");
	if (document.getElementsByTagName) {
    	var aTags = document.getElementsByTagName('a'); //TODO: Use JQuery to filter out Undefined + Javascript

	    ANCHOR:
	    for (var i = 0; i < aTags.length; i++) { 
	      if (aTags[i]=="")                                      {continue ANCHOR; } //TODO:Do we need it?
	      if (typeof aTags[i].hostname == "undefined")           {continue ANCHOR; } //TODO:Do we need it?
	      if (aTags[i].protocol.indexOf("javascript") != -1)     {continue ANCHOR; }
	      if (aTags[i].protocol.indexOf("mailto") != -1)        {startListening(aTags[i],"click",trackMailto); continue ANCHOR; }
	      
	      DOMAIN:
		  for (var j = 0; j < domains.length; j++) {
	      	if (aTags[i].href.indexOf(domains[j]) != -1) {
        
		        FILE:
		          for (k = 0; k < fileTypes.length; k++){ // then check for file extensions
		            if (aTags[i].pathname.indexOf(fileTypes[k]) != -1) {
		              startListening(aTags[i],"click",trackDocuments);  continue ANCHOR; }
		          }
		          
		          if (window.location.href.indexOf(domains[j]) == -1) { // TODO: Use to implement Linker for a Family of sites. Refactor Function.
		            startListening(aTags[i],"click",useLinker);        continue ANCHOR;
		          } else                                               {continue ANCHOR; } // 
	      	}
		  }
    
    	  startListening(aTags[i],"click",trackExternalLinks);        continue ANCHOR; // 
    	}
	}
}


function startListening (obj,evnt,func) { 
  if (obj.addEventListener) obj.addEventListener(evnt,func,false);
  else if (obj.attachEvent) obj.attachEvent("on" + evnt,func);
}


function useLinker (evnt) {  //debug = "inside useLinker<br /><br />"; //TODO: Is this function needed?
	var lnk; 
	if (evnt.srcElement) { 
    	var elmnt = evnt.srcElement;
    	while (elmnt.tagName != "A") {
      		var newelmnt = elmnt.parentNode;
      		elmnt = newelmnt;
    	}
		lnk = "http://" + elmnt.hostname + "/" + elmnt.pathname + elmnt.search;
	} else {
    	lnk = "http://" + this.hostname + this.pathname + this.search;
  	}
	_gaq.push(function(){ 			
		var tracker = _gat._createTracker(gaAccount, 'pageTracker');
		tracker._trackPageview(lnk);	
		//tracker._trackEvent(extId, 'click', lnk);
	    if (evnt.preventDefault){ evnt.preventDefault();}
  		evnt.returnValue = false;
	});	
}

function trackDocuments (evnt) { 
	evnt = evnt || event;
  	var elmnt = evnt.srcElement || evnt.target;
    if (elmnt) {
         while (elmnt.tagName != "A") elmnt = elmnt.parentNode;
	}
    var docPathName = ("/" + elmnt.pathname).replace(/\/\//,'');
     
		evtEnabled ? _gaq.push(['_trackEvent',docId, 'click', docPathName]) : debug=1 ; 
		vpvEnabled ? _gaq.push(['_trackPageview', docId + docPathName]) : debug=1;
		window.setTimeout(function(){ return; },trackDelay);
}

function trackExternalLinks (evnt) {
	evnt = evnt || event;
    var elmnt = evnt.srcElement || evnt.target;
	if (elmnt) {
         while (elmnt.tagName != "A") elmnt = elmnt.parentNode;
         
         if (/http/.test(elmnt.protocol)) { 
         	url = extId + elmnt.href.substr(elmnt.href.indexOf('//')+2,Infinity);
         }
	}
	else {
    	if (/http/.test(this.protocol)) { 
    		url = extId + this.href.substr(this.href.indexOf('//')+2,Infinity);
    	}
     }
     
     if (url.length > 0){
	 	evtEnabled ? _gaq.push(['_trackEvent', extId,'click', url]) : debug=1;
		vpvEnabled ? _gaq.push(['_trackPageview', url]) : debug=1;
		window.setTimeout(function(){ return; },trackDelay);
     }

}

function trackMailto (evnt) {
	evnt = evnt || event;
    var elmnt = evnt.srcElement || evnt.target;
	if (elmnt) {
         while (elmnt.tagName != "A") elmnt = elmnt.parentNode;
         
         if (elmnt.protocol == "mailto:") { 
         	url = mailId + elmnt.href.replace(/mailto:/, "");
         }
	}
	else {
    	if (this.protocol == "mailto:"){ 
    		url = mailId + this.href.replace(/mailto:/, ""); 
    	}
     }
     
     if (url.length > 0){
	 	evtEnabled ? _gaq.push(['_trackEvent', mailId,'click', url]) : debug=1;
		vpvEnabled ? _gaq.push(['_trackPageview', url]) : debug=1;
		window.setTimeout(function(){ return; },trackDelay);
     }
	
	/*
	if (navigator.appName == "Microsoft Internet Explorer"){

  		_gaq.push(function(){
  		var lnk;
    	if (evnt.srcElement) { 
    		var elmnt = evnt.srcElement; 
    		while (elmnt.tagName != "A") { 
      			var newelmnt = elmnt.parentNode; 
     			elmnt = newelmnt; 
    		} 
    		lnk = mailId + elmnt.href; 
			} else { 
    			lnk = mailId + this.href; 
  			} 
  			if (typeof(_gaq) == "object" && typeof(_gaq) != "undefined") {
  			var tracker = _gat._createTracker(gaAccount, 'pageTracker');
			tracker._trackPageview(lnk);
			tracker._trackEvent( mailId, 'click', lnk);
			}
		});
	}else{
  		var lnk;
    	if (evnt.srcElement) { 
    		var elmnt = evnt.srcElement; 
    		while (elmnt.tagName != "A") { 
      			var newelmnt = elmnt.parentNode; 
     			elmnt = newelmnt; 
    		} 
    		lnk = mailId + elmnt.href; 
			} else { 
    			lnk = mailId + this.href; 
  			} 
   		_gaq.push(function(){ 			
  			var tracker = _gat._createTracker(gaAccount, 'pageTracker');
				tracker._trackPageview(lnk);
				tracker._trackEvent(mailId, 'click', lnk);
		});
		}*/
}

function __gaIsMatch(s, regexes) {
	var returnValue = false;
	for(var i=0; i<regexes.length && !returnValue; i++)
 	{
  		if(regexes[i].test(s)) { returnValue=true;}
 	}
 	return returnValue;
}

startListening(window, 'load', listenToClicks); 



/* GA Autotrack Async END */
