function chain(f) {
	var o = window.onload;
	window.onload = function() {
		if(o) o();
		f();
	}
}

chain(function(){
	if (typeof(pageTracker) == "object" && document.getElementsByTagName) {
		var hrefs = document.getElementsByTagName("a");
		for (var l = 0; l < hrefs.length; l++) {
			try{ //protocol, host, hostname, port, pathname, search, hash
				if (hrefs[l].protocol == "mailto:") {
					startListening(hrefs[l],"click",trackMailto);
				//} else if (hrefs[l].className=="trackClick") {
					//hrefs[l].onclick=function(ev){trackInternalLinks(ev,this);};
				} else if (hrefs[l].hostname == location.host) {
					var path = hrefs[l].pathname + hrefs[l].search;
					var isDoc = path.match(/\.(?:doc|eps|jpg|png|svg|xls|ppt|pdf|xls|zip|txt|vsd|vxd|js|css|rar|exe|wma|mov|avi|wmv|mp3)($|\&|\?)/);
					if (isDoc) { startListening(hrefs[l],"click",trackDocumentLinks); }
				} else if (hrefs[l].hostname.length > 3 && hrefs[l].hostname != location.host && hrefs[l].hostname != '#' && hrefs[l].hostname != '') {
					startListening(hrefs[l],"click",trackExternalLinks);
				}
			}
			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 findElement (tag, element) {
	while (element && element.parentNode) {
		if (element.tagName == tag) {
			return element;
		}
		
		element = element.parentNode;
	}
}
 
function trackMailto (evnt) {
	var href, mailto;
	
    href = (evnt.srcElement) ? evnt.srcElement.href : this.href;
    mailto = "/mailto/" + href.substring(7);
    
    if (typeof(pageTracker) == "object") {
    	pageTracker._trackPageview(mailto);
    }
}
 
function trackDocumentLinks (evnt) {
	var source, href, resource;
	
	if (typeof(pageTracker) == "object") {
		source = findElement("A", evnt.srcElement);
	    href = source ? source.href : (this.href ? this.href : null);
	    
	    if (href !== null) {
		    resource = "/downloads/" + href.substring(7);
		    pageTracker._trackPageview(resource);
	    }
    }
}
 
function trackInternalLinks (evnt,el) {
	var href, lnk;
	
	if (typeof(pageTracker) == "object") {
	    href = (evnt.srcElement) ? evnt.srcElement.href : el.href;
	    lnk = "/internal-link/" + href;
	    
	    pageTracker._trackPageview(lnk);
    }
}
 
function trackExternalLinks (evnt) {
	var a, lnk;
	
	if (typeof(pageTracker) == "object") {
	    e = (evnt.srcElement) ? evnt.srcElement : this;
	    while (e.tagName != "A") { e = e.parentNode; }
	    lnk = (e.pathname.charAt(0) == "/") ? e.pathname : "/" + e.pathname;
	    if (e.search && e.pathname.indexOf(e.search) == -1) lnk += e.search;
	    lnk = "/external/" + e.hostname + lnk;
	    
	    pageTracker._trackPageview(lnk);
    }
}
