// This javascript tags file downloads and external links in Google Analytics.
// Designed for Asyncronous version of GA script.
//
// Script developed by Virante Inc, GoodWebPractices.com and VKI
//
// www.virante.com


function querySt(ji) {
	hu = window.location.search.substring(1); gy = hu.split("&"); for (i = 0; i < gy.length; i++) { ft = gy[i].split("="); if (ft[0] == ji) { return ft[1]; } }
}

// If you set debug=1, then it will modify all anchor text of links so that you can see how the links are tagged.
var jsdbg = querySt('jsdbg');

if (document.getElementsByTagName) {
	// Initialize external link handlers
	var hrefs = document.getElementsByTagName("a");
	for (var l = 0; l < hrefs.length; l++) {
		// try {} catch{} block added by erikvold VKI
		try {
			//protocol, host, hostname, port, pathname, search, hash

			if (hrefs[l].protocol == "mailto:") { // Check if this is an email
				startListening(hrefs[l], "click", trackMailto);
				if (jsdbg == 1) { hrefs[l].innerHTML = hrefs[l].innerHTML + ": isMailto"; }

			} else if (hrefs[l].hostname == location.host) { // Check if this is an internal link
				var path = hrefs[l].pathname + hrefs[l].search;
				var isDoc = path.match(/\.(?:doc|docx|xls|xlsx|xlsm|ppt|pptx|pdf|zip|txt|vsd|vxd|rar|exe|tar|gz|ashx)($|\&|\?)/);
				var isImg = path.match(/\.(?:gif|eps|jpg|png|svg|bmp|jpeg|psd|tiff)($|\&|\?)/);
				var isMov = path.match(/\.(?:wma|mov|avi|wmv|mp4|webm|flv)($|\&|\?)/);
				var isMus = path.match(/\.(?:mp3|m4a|wav|aac|ogg)($|\&|\?)/);
				var isSys = path.match(/\.(?:js|css|xml)($|\&|\?)/);

				if (isDoc) {
					startListening(hrefs[l], "click", trackDocumentLinks);
					if (jsdbg == 1) { hrefs[l].innerHTML = hrefs[l].innerHTML + ": isDoc"; }
				} else if (isImg) {
					startListening(hrefs[l], "click", trackImageLinks);
					if (jsdbg == 1) { hrefs[l].innerHTML = hrefs[l].innerHTML + ": isImg"; }
				} else if (isMov) {
					startListening(hrefs[l], "click", trackMovieLinks);
					if (jsdbg == 1) { hrefs[l].innerHTML = hrefs[l].innerHTML + ": isMov"; }
				} else if (isMus) {
					startListening(hrefs[l], "click", trackMusicLinks);
					if (jsdbg == 1) { hrefs[l].innerHTML = hrefs[l].innerHTML + ": isMus"; }
				} else if (isSys) {
					startListening(hrefs[l], "click", trackSystemLinks);
					if (jsdbg == 1) { hrefs[l].innerHTML = hrefs[l].innerHTML + ": isSys"; }
				}
			} else { // Handler for external links

				// Create your list of domains that you want to check
				// Example code to check if the outbound link is Google would be:
				//
				// var isGoogle = hrefs[l].hostname.match(/google\.com/);
				//

				var isKaplan = hrefs[l].hostname.match(/kaplan\.edu/);

				// Now check the values of our domain matches above to determine
				// if we should apply a special tracker

				if (isKaplan) {
					startListening(hrefs[l], "click", trackKaplan);
					if (jsdbg == 1) { hrefs[l].innerHTML = hrefs[l].innerHTML + ": isKaplan"; }
				} else {
					startListening(hrefs[l], "click", trackExternalLinks);
					if (jsdbg == 1) { hrefs[l].innerHTML = hrefs[l].innerHTML + ": isExternal"; }
				}
			}
		}
		catch (e) {
			continue;
		}
	}
}

function startListening(obj, evnt, func) {
	if (obj.addEventListener) {
		obj.addEventListener(evnt, func, false);
	} else if (obj.attachEvent) {
		obj.attachEvent("on" + evnt, func);
	}
}

function trackKaplan(evnt) {
	var e = (evnt.srcElement) ? evnt.srcElement : this;
	while (e.tagName != "A") {
		e = e.parentNode;
	}
	var lnk = (e.pathname.charAt(0) == "/") ? e.pathname : "/" + e.pathname;
	if (e.search && e.pathname.indexOf(e.search) == -1) lnk += e.search;
	if (e.hostname != location.host) lnk = e.hostname + lnk;
	if (typeof (_gaq) == "object") _gaq.push(['_trackPageview', lnk]);
}

function trackMailto(evnt) {
	var href = (evnt.srcElement) ? evnt.srcElement.href : this.href;
	var mailto = "/mailto/" + href.substring(7);
	if (typeof (_gaq) == "object") _gaq.push(['_trackEvent', 'Mailto', mailto]);
}

function trackDocumentLinks(evnt) {
	var e = (evnt.srcElement) ? evnt.srcElement : this;
	while (e.tagName != "A") {
		e = e.parentNode;
	}
	var lnk = (e.pathname.charAt(0) == "/") ? e.pathname : "/" + e.pathname;
	if (e.search && e.pathname.indexOf(e.search) == -1) lnk += e.search;
	if (typeof (_gaq) == "object") _gaq.push(['_trackEvent', 'Document Download', lnk]);
}

function trackImageLinks(evnt) {
	var e = (evnt.srcElement) ? evnt.srcElement : this;
	while (e.tagName != "A") {
		e = e.parentNode;
	}
	var lnk = (e.pathname.charAt(0) == "/") ? e.pathname : "/" + e.pathname;
	if (e.search && e.pathname.indexOf(e.search) == -1) lnk += e.search;
	if (typeof (_gaq) == "object") _gaq.push(['_trackEvent', 'Image Download', lnk]);
}

function trackMovieLinks(evnt) {
	var e = (evnt.srcElement) ? evnt.srcElement : this;
	while (e.tagName != "A") {
		e = e.parentNode;
	}
	var lnk = (e.pathname.charAt(0) == "/") ? e.pathname : "/" + e.pathname;
	if (e.search && e.pathname.indexOf(e.search) == -1) lnk += e.search;
	if (typeof (_gaq) == "object") _gaq.push(['_trackEvent', 'Movie Download', lnk]);
}

function trackMusicLinks(evnt) {
	var e = (evnt.srcElement) ? evnt.srcElement : this;
	while (e.tagName != "A") {
		e = e.parentNode;
	}
	var lnk = (e.pathname.charAt(0) == "/") ? e.pathname : "/" + e.pathname;
	if (e.search && e.pathname.indexOf(e.search) == -1) lnk += e.search;
	if (typeof (_gaq) == "object") _gaq.push(['_trackEvent', 'Music Download', lnk]);
}

function trackSystemLinks(evnt) {
	var e = (evnt.srcElement) ? evnt.srcElement : this;
	while (e.tagName != "A") {
		e = e.parentNode;
	}
	var lnk = (e.pathname.charAt(0) == "/") ? e.pathname : "/" + e.pathname;
	if (e.search && e.pathname.indexOf(e.search) == -1) lnk += e.search;
	if (typeof (_gaq) == "object") _gaq.push(['_trackEvent', 'System File Download', lnk]);
}

function trackExternalLinks(evnt) {
	var e = (evnt.srcElement) ? evnt.srcElement : this;
	while (e.tagName != "A") {
		e = e.parentNode;
	}
	var lnk = (e.pathname.charAt(0) == "/") ? e.pathname : "/" + e.pathname;
	if (e.search && e.pathname.indexOf(e.search) == -1) lnk += e.search;
	if (e.hostname != location.host) lnk = e.hostname + lnk;
	if (typeof (_gaq) == "object") _gaq.push(['_trackEvent', 'External Link', lnk, 'Other External Link', 5]);
}
