// Pentad Analytics Tracking Library (PAL)

// Start Chartbeat
var _sf_startpt=(new Date()).getTime()
var _sf_async_config={uid:17921,domain:"quantumwindows.com"};
(function(){
  function loadChartbeat() {
    window._sf_endpt=(new Date()).getTime();
    var e = document.createElement('script');
    e.setAttribute('language', 'javascript');
    e.setAttribute('type', 'text/javascript');
    e.setAttribute('src',
       (("https:" == document.location.protocol) ? "https://a248.e.akamai.net/chartbeat.download.akamai.com/102508/" : "http://static.chartbeat.com/") +
       "js/chartbeat.js");
    document.body.appendChild(e);
  }
  var oldonload = window.onload;
  window.onload = (typeof window.onload != 'function') ?
     loadChartbeat : function() { oldonload(); loadChartbeat(); };
})();
// End Chartbeat

var p_acct = 'UA-23366873-1';
var p_measureExitLinks = true;
var p_measureDownloadLinks = true;
var p_measureEmailLinks = true;
var p_measureInternalLinks = false;
var p_matchExitLinks = "quantumwindows.com|webanalyticsnow.com";
var p_matchDownloadLinks = "pdf|dwg|xls|doc|zip|exe|wav|mp3|mov|mpg|avi|wmv";
var p_matchEmailLinks = "mailto:";

// standard GA initialization
var _gaq = _gaq || [];
_gaq.push(['_setAccount', p_acct]);
_gaq.push(['_trackPageview']);

// function: initialize GA objects
(function() {
	var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
	ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
	var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

// function: if p_measureExits, set all exit links to be tracked
(function() {
	if( window.document.addEventListener ) {
		window.document.addEventListener('load',p_addLinkTracking(),false);
	} else if( window.attachEvent ) {
		window.attachEvent('onload',p_addLinkTracking());
	}
})();

// function: attach link handlers for analytics
function p_addLinkTracking() {
	ls = document.getElementsByTagName('a');
	for( var l = 0; l < ls.length; l++ ) {
		var curLink = ls[l];
		var lName = curLink.href;
		//curLink.href = '#';
		
		if( curLink.addEventListener ) {
			curLink.addEventListener('click',function(e){trackLinks(e)},false);
		} else if( ls[l].attachEvent ) {
			ls[l].attachEvent('onclick',function(e){trackLinks(e)});
		} else {
			console.log( 'cannot attach onclick event to link ' + ls[l].href );
		}
	}
}

function trackLinks(e) {
	//console.log(e);
	if( p_measureExitLinks && !matchLinks(e.currentTarget,p_matchExitLinks) ) {
		sendLink( 'exit link', prepareExitLink(e.currentTarget) );
	}
	if( p_measureDownloadLinks && matchLinks(e.currentTarget,p_matchDownloadLinks) ) {
		sendLink( 'file download', prepareDownloadLink(e.currentTarget) );
	}
	if( p_measureEmailLinks && matchLinks(e.currentTarget,p_matchEmailLinks) ) {
		sendLink( 'email link', prepareEmailLink(e.currentTarget) );
	}
}

function matchLinks( o, str ) {
	patterns = str.split('|');
	while( o != document.body ) {
		if( o.href ) {
			//console.log( o.href );
			for( var np = 0; np < patterns.length; np++ ) {
				var t = new RegExp( patterns[np], 'i' );
				//console.log( t.source );
				if( t.test( o.href ) ) {
					//console.log( 'pattern matched: ' + o.hostname + ' || ' + t.source );
					return true; // matches link patterns
				}
			}
			//console.log( 'pattern not matched: ' + o.hostname );
			return false; // did not match link patterns
		} else {
			o = o.parentNode;
		}
	}
}

function prepareExitLink(o) {
	while( o != document.body ) {
		if( o.text ) { return o.text; }
		else if( o.title ) { return o.title; }
		else if( o.alt ) { return o.alt; }
		else if( o.href ) { return o.href; }
		else { o = o.parentNode }
	} 
	return 'unknown link';
}

function prepareDownloadLink(o) {
	while( o != document.body ) {
		if( o.href ) { return o.href; }
		else { o = o.parentNode }
	} 
	return 'unknown link';
}

function prepareEmailLink(o) {
	while( o != document.body ) {
		if( o.href ) { return o.href; }
		else { o = o.parentNode }
	} 
	return 'unknown link';
}

function sendLink(lt,ln) {
	_gaq.push(['_trackEvent', 'Links', lt, ln]);
}
