//Class for handling hitbox onclick connections
var allLpos
var hbxConnections = new Array();
var CONNECTION_NODE = 0;

var _debugHitbox = false;

var lposMap = {
    "hbx-global-nav":"GLOBAL_NAV",
    "hbx-footer":"FOOTER",
    "hbx-more-sky-sites":"MORE_SKY_SITES",
    "hbx-latest-news":"LATEST_NEWS",
    "hbx-recent-news":"RECENT_NEWS",
    "hbx-other-related-news":"OTHER_RELATED_NEWS",
    "hbx-image-gallery":"IMAGE_GALLERY",
    "hbx-hot-topics":"HOT_TOPICS",
    "hbx-breadcrumb": "BREADCRUMB",
    "hbx-homepage-link": "HOMEPAGE_BANNER",
    "hbx-category-links": "CATEGORY_LINKS"
}

//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;
}


function attachHitbox(queryString){
    if (queryString == null){
        hbxConnections = []
        queryString = ".hbx-lpos"
    }
    $(queryString).click(fireHitbox);
}

$(document).ready(function(){attachHitbox()});

function fireHitbox(evt){
    var lposNode = this;
    var lidPosition = lposNode.id;
    var lidContent;
    var realClick = evt.target;
    if($(realClick).hasClass( "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, evt);
    }
}

function _findLidInContainer(container){
    if (container){
        var tmp = $(".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 ($(upperLimitLposNode).hasClass("hbx-c")){return upperLimitLposNode;}
        return null;
    }
    if ($(currNode).hasClass("hbx-c")){
        return currNode;
    }
    return _findHbxContainerInLpos(currNode, upperLimitLposNode);
}


function debugHitbox(){
    if(!_debugHitbox){
        _debugHitbox = true;
        $('body').addClass("debugHitbox");
    }else{
        _debugHitbox = false;
        $('body').removeClass("debugHitbox");
    }
}

function debugHitboxCall(evt, lid, lpos){
    if(_debugHitbox == true){
        console.log("Lid: "+lid+" - Lpos: "+lpos);
        evt.preventDefault();
    }
}

function verifyHitbox() {
    _hbLink = function(lid, lpos, c) {
        alert('Lpos:'+lpos+'\nLid:'+lid);
        if (c) c.preventDefault();
        return false;
    }
}



