var gaFiletypes = "pdf,doc,docx,xls,xlsx,ppt,pptx,zip,txt,csv,exe,wmv,mpg,swf";

gaClimbDOM=function(evt,tag){
    var e=evt.target||evt.srcElement;
    while (e.tagName&&(e.tagName!=tag)){
        e=e.parentElement||e.parentNode;
    }
    return e;
};
gaParseChildren=function(element,tag){
    var children = element.childNodes,
        i, numChildren = children.length;
    for(i=0;i<numChildren;i++){
        if(children[i].tagName&&children[i].tagName===tag){
            return children[i];
        }
    }
    return null;
};
gaBindFunction=function(event,func){
    if ((typeof(func)=="function")&&document.body){
        if (document.body.addEventListener){
            document.body.addEventListener(event, func.gabind(this), true);
        }
        else if(document.body.attachEvent){
            document.body.attachEvent("on"+event, func.gabind(this));
        }
    }
};
gaBindEventTrackingFunctions=function(){
    var e=(navigator.appVersion.indexOf("MSIE")!=-1)?"click":"mousedown";
    gaBindFunction(e,this.gaTrackEvents);
};
gaSplitList=function(list){
    var items=list.toLowerCase().split(",");
    var len=items.length;
    for (var i=0;i<len;i++){
        items[i]=items[i].replace(/^\s*/,"").replace(/\s*$/,"");
    }
    return items;
};
gaTypeMatch=function(pth){
    var type=pth.substring(pth.lastIndexOf(".")+1,(pth.indexOf('?') > -1) ? pth.indexOf('?') : pth.length).toLowerCase();
    var types=gaSplitList(gaFiletypes);
    var tlen=types.length;
    for (var i=0;i<tlen;i++){
        if (type==types[i]){
            return type;
        }
    }
    return null;
};
gaTrackEvents=function(evt){
    if( typeof _gaq !== "undefined" || true) {
        evt=evt||(window.event||"");
        if (evt&&((typeof(evt.which)!="number")||(evt.which==1||evt.which==2))){
            var e = gaClimbDOM(evt,"A");
            if(e && e.href){
                var currentHref = document.location.href.toLowerCase().split("://")[1],
                    linkHref = e.href.toLowerCase().split("://")[1];
                if (linkHref){
                    // Regular Download Tracking
                    if (linkHref.indexOf("javascript") === -1){
                        var fileType = gaTypeMatch(linkHref);
                        if(fileType !== null){
                            var uri = location.pathname?((location.pathname.indexOf("/")!=0)?"/"+location.pathname:location.pathname):"/"
                                pth = e.pathname?((e.pathname.indexOf("/")!=0)?"/"+e.pathname:e.pathname):"/";
                            uri = uri.replace(/\/[^\/]*$/,pth.substring(pth.lastIndexOf('/')));
                            _gaq.push(['corp._trackEvent','Downloads',fileType,uri]);
                            gaPauseBrowser(150);
                        }
                    }
                    // Offsite Links and Lit Docs
                    if (linkHref.indexOf(document.domain) === -1){
                        if(linkHref.indexOf("lit.powerware.com") > -1 || linkHref.indexOf("pqlit.eaton.com") > -1){ // Literature Download
                            var parameter = (linkHref.match("doc_id") !== null) ? "doc_id" : "file",
                                litLib = gaGetUrlVariable(parameter,linkHref);
                            if(litLib !== null && litLib !== ""){
                                _gaq.push(['corp._trackEvent','Downloads','Literature',litLib]);
                                gaPauseBrowser(150);
                            }
                        } else { // Offsite Link
                            _gaq.push(['corp._trackEvent','Offsite Link',linkHref,currentHref]);
                            gaPauseBrowser(150);
                        }
                    }
                    // idcplg Service Downloads
                    if (linkHref.indexOf("/idcplg") > -1){
                        _gaq.push(['corp._trackEvent','Downloads','idcplg Service',e.innerHTML]);
                        gaPauseBrowser(150);
                    }
                    // Large Window Popup Link Clicks
                    if(linkHref.indexOf("/popuppages/largewindow/") > -1){
                        _gaq.push(['corp._trackEvent','Downloads','Large Window Popup',e.innerHTML]);
                        gaPauseBrowser(150);
                    }
                    // Success Story Download
                    if(linkHref.indexOf("/successstories/") > -1 && e.innerHTML.indexOf("Download Success Story") > -1){
                        _gaq.push(['corp._trackEvent','Downloads','Success Stories',document.title]);
                    }
                }
                // Tab Tracking
                if( e.href.indexOf("#tabs-") > -1){
                    var s = gaClimbDOM(evt,"SPAN"),
                        pageTab = s.innerHTML,
                        linkPage = (linkHref.indexOf("?") > -1) ? linkHref.split('?')[0] : linkHref;
                    linkPage = (linkPage.indexOf("#") > -1) ? linkPage.split('#')[0] : linkPage;
                    _gaq.push(['corp._trackEvent','PageTabs',pageTab,linkPage]);
                    gaPauseBrowser(150);
                }
                // Homepage Dynamic Navigation Tracking
                var dl = gaClimbDOM(evt,"DL");
                if( dl.className === "dropdown" ){
                    _gaq.push(['corp._trackEvent','Main Nav',e.innerHTML.replace(/(<(\/|)span>|amp;)/gi,""),currentHref]);
                    gaPauseBrowser(150);
                }
            }
        }
    }
};
gaGetUrlVariable = function(parameter,linkHref){
    var regexS = "[\\?&]"+parameter+"=([^$#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(linkHref);
    if (results==null) {
        return '';
    } else {
        return results[1];
    }
};
gaPauseBrowser = function (milliseconds) {
    var oldDate = new Date(),
        currentDate;
    do { currentDate = new Date(); }
    while( (currentDate - oldDate) < milliseconds);
};
Function.prototype.gabind = function(obj){
    var method=this;
    var temp=function(){
        return method.apply(obj,arguments);
    };
    return temp;
};

gaBindEventTrackingFunctions();
