﻿// create object
var linkTracking = {}
  
// assign properties
linkTracking.redirectUrl = '/tracklink.aspx';

// constructor
linkTracking.init = function() {

    if(!compatible)
        return false;

    // check for support of required methods
    if (!document.getElementsByTagName) {
        return false;
    }
  
    
    //leave as non-jquery for now because of memory leaks with event handler adds
    var allLinks = $('a');
    for(var i = 0; i < allLinks.length; i++) {
      if (allLinks[i].id.indexOf('strack') != -1) {
            // assign event handlers
            AddEvent(allLinks[i], 'mouseup', linkTracking.mouseUpSide);
            AddEvent(allLinks[i], 'keypress', linkTracking.keyPressSide);
        }
      else if (allLinks[i].id.indexOf('ttrack') != -1) {
            // assign event handlers
            AddEvent(allLinks[i], 'mouseup', linkTracking.mouseUpTabs);
            AddEvent(allLinks[i], 'keypress', linkTracking.keyPressTabs);
        }
        else if(allLinks[i].id.indexOf('track') != -1) {
            // assign event handlers
            AddEvent(allLinks[i], 'mouseup', linkTracking.mouseUp);
            AddEvent(allLinks[i], 'keypress', linkTracking.keyPress);
        }
    }

    return true;
}

linkTracking.mouseUp = function(e) {
    linkTracking.redirectHandler(e, false, 0);
}

linkTracking.keyPress = function(e) {
    // check for return key press
   
    var key = e.charCode || e.keyCode || 0;

    if (key == 13) {
        linkTracking.redirectHandler(e, true, 0);
    }
}

linkTracking.mouseUpTabs = function(e) {
    linkTracking.redirectHandler(e, false, 1);
}

linkTracking.keyPressTabs = function(e) {
    // check for return key press

    var key = e.charCode || e.keyCode || 0;
    if (key == 13) {
        linkTracking.redirectHandler(e, true, 1);
    }
}

linkTracking.mouseUpSide = function(e) {
    linkTracking.redirectHandler(e, false, 2);
}

linkTracking.keyPressSide = function(e) {
    // check for return key press

    var key = e.charCode || e.keyCode || 0;
    if (key == 13) {
        linkTracking.redirectHandler(e, true, 2);
    }
}

linkTracking.redirectHandler = function(e, isKeyboardEvent, typeId) {

    var evt = e || window.event;
    var evtTarget = evt.target || evt.srcElement;
    
    // make sure we have a reference to the A tag.
    // (if an image was clicked evtTarget will reference the image
    // rather than the surrounding anchor.)
    if(evtTarget.nodeName != "A")
        evtTarget = evtTarget.parentNode;
        
    if(evtTarget.nodeName != 'A') { 
        while(evtTarget.nodeType != 3)  {
            evtTarget = evtTarget.parentNode;
        }
    }
    
    // if we still don't have a reference to the a tag, bail out.
    if(evtTarget.nodeName != "A")
        return;

    // check for valid href, don't want to track anchors
    if (evtTarget.href) {
        var url = evtTarget.href;
        var page = location.href;
        var code = evtTarget.id.split('_')[1];

        if (!isKeyboardEvent){
            // stop the (default) href behaviour of this link 
            //(ie; browser navigates to address in href attribute)
            if (evt.preventDefault) {
                evt.preventDefault();
            }
            evt.returnValue = false; 
        }
       
        // track click by requesting URL through new image object
        var trackImg = new Image();
        trackImg.onload = function() {
            window.open(evt.href, '_self');
        }
        if (typeId == 0) {        
        trackImg.src = linkTracking.redirectUrl + '?bannerid=' + code + '&linkurl=' + escape(url) + '&pageurl=' + escape(page);
        }
        else{
        //    selCatId = 0;
        if (page.toLowerCase().indexOf('&categoryselectedid') != -1)
        {
            startId = page.toLowerCase().indexOf('&categoryselectedid') + 20;
            selCatId = page.substring(startId, startId + 5);
            }
            else{
            selCatId = 0;
            }
           //selCatId = page;
            trackImg.src = linkTracking.redirectUrl + '?catId=' + code + '&typeId=' + typeId + '&selectedCatId=' + selCatId + '&pageurl=' + escape(page) ;
        }
    }
}

AddEvent(window, 'load', linkTracking.init);

// systematically release all event handlers to stop IE memory leaks
window.onunload = EventCache.flush;
