///////
// gaAddons.js
// Stéphane Hamel - http://immeria.net
// You are free to modify and redistribute this script as long as you keep the reference to the authors
// If you have great ideas, please let me know so I can integrate them for futur releases!
//
// Changelog:
//  v2.2 - Feb. 19th 2009 - Customised for Macquarie International needs [DG].
//  v2.1 - Jan. 22nd 2009 - Set bUseEventForOutbout and bUserEventForDownload to toggle use of Events or Page Views
// 	v2.0 - Jan. 2009 - Use Google Analytics Events to track downloads and external links
//  v1.0 - Inspired by the work of Justin Cutroni - Google Analytics Short Cut - http://gashortcut.com/
///////

// Indicate each file extension that needs to be tracked, downloadFileTypes is the regular expression that matches downloadable files
var downloadFileTypes = new RegExp(/\.(doc*|xls*|ppt*|rtf|pdf)$/i);
var multimediaFileTypes = new RegExp(/\.(jpg|png|svg|wma|mov|avi|wmv|mp3|swf|flv)$/i);
var bUseEventForOutbound = true; // Set to false to use trackPageView for outbount links
var bUseEventForDownload = true; // Set to false to use trackPageView for downloads
var bUseEventForMultimedia = true; // Set to false to use trackPageView for mailto's
var bUseEventForMailto = true; // Set to false to use trackPageView for mailto's

///////
/// No need to change anything below this line
// Initialize external link and download handlers
if (document.getElementsByTagName) {
    var hrefs = document.getElementsByTagName('a');
    for (var l = 0, m = hrefs.length; l < m; l++) 
        if (hrefs[l].hostname == location.host && downloadFileTypes.test(hrefs[l].pathname)) 
            startListening(hrefs[l], "click", trackMIDownload);
        else if (hrefs[l].hostname == "mq.edu.au" && downloadFileTypes.test(hrefs[l].pathname)) 
            startListening(hrefs[l], "click", trackMQDownload);
        else if (hrefs[l].hostname != location.host && downloadFileTypes.test(hrefs[l].pathname)) 
            startListening(hrefs[l], "click", trackExternalDownload);
        else if (hrefs[l].hostname == location.host && multimediaFileTypes.test(hrefs[l].pathname)) 
            startListening(hrefs[l], "click", trackMultimeda);
        else if (hrefs[l].protocol == "mailto:")
            startListening(hrefs[l], "click", trackMailto);
        else if (hrefs[l].hostname != location.host)
            if (hrefs[l].hostname == "mq.edu.au")
              startListening(hrefs[l], "click", trackMQLink);
            else if (hrefs[l].hostname != location.host)
              startListening(hrefs[l], "click", trackExternalLink);
}

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

function trackMIDownload(evnt){
    if (typeof(pageTracker) != "object") 
        return;
    bUseEventForDownload ? pageTracker._trackEvent("download", "click", (evnt.srcElement) ? "/" + evnt.srcElement.pathname : this.pathname) : pageTracker._trackPageView("/download/" + (evnt.srcElement) ? "/" + evnt.srcElement.pathname : this.pathname);
}

function trackMQDownload(evnt){
    if (typeof(pageTracker) != "object") 
        return;
    bUseEventForDownload ? pageTracker._trackEvent("mq/download", "click", (evnt.srcElement) ? "/" + evnt.srcElement.pathname : this.pathname) : pageTracker._trackPageView("/mq/download/" + (evnt.srcElement) ? "/" + evnt.srcElement.pathname : this.pathname);
}

function trackExternalDownload(evnt){
    if (typeof(pageTracker) != "object") 
        return;
    bUseEventForDownload ? pageTracker._trackEvent("outbound/download", "click", (evnt.srcElement) ? "/" + evnt.srcElement.pathname : this.pathname) : pageTracker._trackPageView("/outbound/download/" + (evnt.srcElement) ? "/" + evnt.srcElement.pathname : this.pathname);
}

function trackMultimedia(evnt){
    if (typeof(pageTracker) != "object") 
        return;
    bUseEventForMultimedia ? pageTracker._trackEvent("multimedia", "click", (evnt.srcElement) ? "/" + evnt.srcElement.pathname : this.pathname) : pageTracker._trackPageView("/multimedia/" + (evnt.srcElement) ? "/" + evnt.srcElement.pathname : this.pathname);
}

function trackMailto(evnt) {
if (typeof(pageTracker) != "object") 
        return;
    bUseEventForMailto ? pageTracker._trackEvent("mailto", "click", (evnt.srcElement.href.substring(7)) ? "/" + evnt.srcElement.pathname : this.pathname) : pageTracker._trackPageView("/mailto/" + (evnt.srcElement.href.substring(7)) ? "/" + evnt.srcElement.pathname : this.pathname);
}

function trackExternalLink(evnt){
    if (typeof(pageTracker) != "object") 
        return;
    var elmnt = evnt.srcElement;
    if (elmnt) {
        while (elmnt.tagName != "A") 
            elmnt = elmnt.parentNode;
        bUseEventForOutbound ? pageTracker._trackEvent("outbound", "click", elmnt.hostname + "/" + elmnt.pathname + elmnt.search) : pageTracker._trackPageView("/outbound/" + elmnt.hostname + "/" + elmnt.pathname + elmnt.search);
    }
    else 
        bUseEventForOutbound ? pageTracker._trackEvent("outbound", "click", this.hostname + this.pathname + this.search) : pageTracker._trackPageView("/outbound/", this.hostname + this.pathname + this.search);
}

function trackMQLink(evnt){
    if (typeof(pageTracker) != "object") 
        return;
    var elmnt = evnt.srcElement;
    if (elmnt) {
        while (elmnt.tagName != "A") 
            elmnt = elmnt.parentNode;
        bUseEventForOutbound ? pageTracker._trackEvent("mq/outbound", "click", elmnt.hostname + "/" + elmnt.pathname + elmnt.search) : pageTracker._trackPageView("/mq/outbound/" + elmnt.hostname + "/" + elmnt.pathname + elmnt.search);
    }
    else 
        bUseEventForOutbound ? pageTracker._trackEvent("mq/outbound", "click", this.hostname + this.pathname + this.search) : pageTracker._trackPageView("/mq/outbound/", this.hostname + this.pathname + this.search);
}


/// EOF ///

