/*
 Glossary definitions are lazy-loaded when tooltip is first activated
 Glossary definitions are cached to avoid subsequent invocations.
  */
var glossaryDefinitionsCache = new Array();

// Cache loading image
var loadingImage = new Image();
loadingImage.src = "/s/img/loading.gif";

function getGlossaryDefinitions(){
    return glossaryDefinitionsCache;
}

function glossaryLookup(){
    var glossaryElems = $by(function(){return true;}, "acronym", document.body);
    if(isDefined(glossaryElems)){
        for(var i = 0; i < glossaryElems.length; i++){
            YAHOO.util.Event.addListener(
                    glossaryElems[i],
                    "mouseover",
                    loadGlossaryTooltip,
                    glossaryElems[i]);
        }
    }
}

function renderGlossaryTooltip(response){
    var responseText = response.responseText.trim();
    if(responseText != ""){
        try{
            var glossary = YAHOO.lang.JSON.parse(responseText);
            var glossaryTag = "GL_" + glossary.glossary_tag;
            var glossaryDefinition = glossary.glossary_definition;

            glossaryDefinitionsCache[glossaryTag] = glossaryDefinition;

            var glossaryElems = $by(function(elem){return elem.id==glossaryTag;}, "acronym", document.body);
            if(isDefined(glossaryElems)){
                for(var i = 0; i < glossaryElems.length; i++){
                    var toolTipBottomElem = YAHOO.util.Dom.getLastChild(glossaryElems[i].tooltip);
                    toolTipBottomElem.innerHTML = glossaryDefinition;
                    YAHOO.util.Event.removeListener(
                            glossaryElems[i],
                            "mouseover",
                            loadGlossaryTooltip);
                }
            }
        }catch(error){}
    }
}

function loadGlossaryTooltip(event, elem){
    var tooltip = elem.tooltip;
    if(tooltip.innerHTML.indexOf("GL_" != -1)){
        var toolTipBottomElem = YAHOO.util.Dom.getLastChild(tooltip);
        if(isDefined(glossaryDefinitionsCache[elem.id])){
            toolTipBottomElem.innerHTML = glossaryDefinitionsCache[elem.id];
        }else{
            toolTipBottomElem.innerHTML = "<img src=\"/s/img/loading.gif\" border=\"0\" style=\"width:20px\"/><br><br>";
            YAHOO.util.Connect.asyncRequest("GET", "/d/glossaryLookup.jsp?gl_tag=" +
                       elem.id.substring(3, elem.id.length),{success:renderGlossaryTooltip,cache:true});
        }
    }
}
