//Class for handling hitbox onclick connections
var allLpos
var hbxConnections = new Array();
var CONNECTION_NODE = 0;

var _debugHitbox = false;

var lposMap = {
    "hbx-gnav"   :"Global Nav",
    "hbx-tnav"   :"Top Nav",
    "hbx-top"    :"Top",
    "hbx-lnav-a" :"Left Hand Nav",
    "hbx-lnav-b" :"Left Hand Nav",
    "hbx-lnav-c" :"Left Hand Nav",
    "hbx-lnav-d" :"Left Hand Nav",
    "hbx-lnav-fav":"Left Hand Nav",
    "hbx-mod1"   :"Module",
    "hbx-mod2"   :"Module",
    "hbx-mod3"   :"Module",
    "hbx-mod4"   :"Module",
    "hbx-mod5"   :"Module",
    "hbx-mod6"   :"Module",
    "hbx-rnav-posn1"   :"Right Hand Nav",
    "hbx-rnav-posn2"   :"Right Hand Nav",
    "hbx-rnav-sub"   :"Right Hand Nav",
    "hbx-con"    :"Console",
    "hbx-foot"   :"Footer"
}

//Mozilla emulator for innerText
if (! window.ActiveXObject) {
  HTMLElement.prototype.__defineGetter__("innerText",
			  function () { return(this.textContent); });
  HTMLElement.prototype.__defineSetter__("innerText",
			  function (txt) { this.textContent = txt; });
}

function findLpos(node){
    //function to take hbx-xxx and turn it into lpos
    var classes = node.className.split(" ");
    for (var i=0; i<classes.length;i++){
        if(lposMap[classes[i]]!=null){
            return lposMap[classes[i]];
        }
    }
    return lposMap["hbx-mod"];
}

function getAllListeners() {
    return hbxConnections;
}

function getListenerForNode(nodeId){
    for(var i=0; i<hbxConnections.length;i++){
        if(hbxConnections[i][CONNECTION_NODE].id==nodeId){
            return hbxConnections[i];
        }
    }
    return null;
}

dojo.addOnLoad(attachHitbox);

function attachHitbox(dojoQueryString){
    if (dojoQueryString == null){
        hbxConnections = []
        dojoQueryString = ".hbx-lpos"
    }
    allLpos = dojo.query(dojoQueryString);
    for(var i = 0; i<allLpos.length; i++){
        hbxConnections.push(dojo.connect(allLpos[i], "onclick", fireHitbox));
    }
}

function fireHitbox(evt){
    var lposNode = evt.currentTarget;
    var lidPosition = lposNode.id;
    var lidContent;
    var realClick = evt.target;
    if(dojo.hasClass(realClick, "hbx-lid")){
        lidContent=realClick.innerText;
    }else{
        var container = _findHbxContainerInLpos(realClick, lposNode);
        lidContent = _findLidInContainer(container);
    }
    if((realClick.tagName=="A" || realClick.parentNode.tagName=="A") && lidPosition!=null && lidContent != null ){
        var hbxLid = _generateLid(lidPosition,lidContent)
        var hbxLpos = findLpos(lposNode);
        debugHitboxCall(evt, hbxLid, hbxLpos);
        _hbLink(hbxLid, hbxLpos);
    }
    return false;
}

function _findLidInContainer(container){
    if (container){
        var tmp = dojo.query(".hbx-lid", container)
        for(var i=0;i<tmp.length;i++){
            var lidContainer = _findHbxContainerInLpos(tmp[i],  container);
            if(lidContainer == container){
                var textInLink = tmp[i].innerText
                if (!textInLink) {
                    return tmp[i].firstChild.getAttribute('alt')
                }
                return textInLink
            }
        }
    }
}

function _generateLid(position, content){
    return (position +"_"+ content).replace("\u2026","").toUpperCase();
}

function _findHbxContainerInLpos(domNode, upperLimitLposNode){
    var currNode = domNode.parentNode;
    if (currNode == upperLimitLposNode){
        if (dojo.hasClass(upperLimitLposNode,"hbx-c")){return upperLimitLposNode;}
        return null;
    }
    if (dojo.hasClass(currNode,"hbx-c")){
        return currNode;
    }
    return _findHbxContainerInLpos(currNode, upperLimitLposNode);
}


function debugHitbox(){
    if(!_debugHitbox){
        _debugHitbox = true;
        dojo.addClass(dojo.query("body")[0],"debugHitbox");
    }else{
        _debugHitbox = false;
        dojo.removeClass(dojo.query("body")[0],"debugHitbox");
    }
}

function debugHitboxCall(evt, lid, lpos){
    if(_debugHitbox == true){
        console.log("Lid: "+lid+" - Lpos: "+lpos);
        dojo.stopEvent(evt);
    }
}

function _setHitBoxLoginTrackingVariables(hbxMap,cvMap) {
    var loginStatus = ""

    if (sky_fGetCookie("skySSO")) {
        loginStatus = "logged in"

        var userType = sky_fGetCookie("ust")
        if (userType) {
            hbxMap.hc2 = loginStatus + " | " + userType;
        }

        var ageGroup = sky_fGetCookie("apd")
        if (ageGroup) {
            hbxMap.hc3 = ageGroup;
        }

        var gender = sky_fGetCookie("gpd")
        if (gender) {
            hbxMap.hc4 = gender
        }

        var samUsername = sky_fGetCookie("hant")
        if (samUsername) {
            cvMap.c9 = samUsername
        }
    }
}

