/**
 * Dynamic non-library dependent event tracking for Google Analytics, 
 * (c) 2011- Avaus Consulting
 */
var gaTrackLinks = function(gaPageName) {
	var gaType = 'async', // Default, set to "sync" for old mode. Check line 11 for the correct measurement object name ("_gaq" default for "async", "pageTracker" default for "sync")
		gaDownloadTypes = 'pdf,zip,rar,exe,xpi,msi', // Comma separated list of e.g. file extensions in anchor links or dynamic download URLs
		gaRSSTypes = 'rss', // Comma separated lists of items to use to recognize an RSS feed link
		downloadRegExp = new RegExp('\.('+gaDownloadTypes.replace(/\,/, '|')+')'),
		rssRegExp = new RegExp('\.('+gaRSSTypes.replace(/\,/, '')+')'),
		gaObjectName = gaType === 'async' ? '_gaq' : 'pageTracker', // GA Object name, first value for "async", second for "sync", see "gaType" for details
		isCurrentDomain = new RegExp(document.domain, 'i'),
		a = document.getElementsByTagName('a');

	if(!gaPageName) gaPageName = location.pathname.toLowerCase();

	for(var i=0;i<a.length;i++){
		if(a[i].protocol !== "javascript:") {
			if(a[i].protocol === "mailto:") {
				gaBinder(a[i], 'email', a[i].href.substring(7), gaPageName, gaType, gaObjectName);
			} else if(rssRegExp.test(a[i].href)) {
				gaBinder(a[i], 'rss', a[i].href.replace(/^https?:\/\/([a-z\-\.0-9]+)\//i, ''), gaPageName, gaType, gaObjectName);
			} else if(downloadRegExp.test(a[i].href)){
				gaBinder(a[i], 'tiedosto-lataukset', a[i].href.replace(/^https?:\/\/([a-z\-\.0-9]+)\//i, ''), gaPageName, gaType, gaObjectName);
			} else if(!isCurrentDomain.test(a[i].href)) {
				gaBinder(a[i], 'ulosmenevat-linkit', a[i].href.replace(/^https?:\/\//i, ''), gaPageName, gaType, gaObjectName);
			}
		}
	}
}
// Standard event binder
var gaEventBind = function(obj, evt, newhandler, captures) {
	if (obj.attachEvent) {
		obj.attachEvent('on' + evt, newhandler);
	} else if (obj.addEventListener) {
		obj.addEventListener(evt, newhandler, captures);
	} else {
		var oldhandler;
		if (oldhandler = obj['on' + evt]) {
			obj['on' + evt] = function() { oldhandler(); newhandler(); }
		} else { 
			obj['on' + evt] = newhandler;
		}
	}
}
// End of event binder

// Event helper
var gaBinder = function(pageItem, pageType, pageName, gaPageName, gaType, gaObjectName) {
	if(gaType === 'async' && typeof(window[gaObjectName] === 'object')) gaEventBind(pageItem, 'click', function(){ window[gaObjectName].push(['_trackEvent', pageType, pageName, gaPageName]); }, false);
	else if(gaType === 'sync' && typeof(window[gaObjectName] === 'object')) gaEventBind(pageItem, 'click', function(){ window[gaObjectName]._trackEvent(pageType, pageName, gaPageName); }, false);
}
// End event helper	

// Bind event tracking at onLoad
gaEventBind(window, 'load', gaTrackLinks, false);
