﻿var glossary_definition = $('glossary_definition');
var glossary_terms = $$('img.glossary_term');
var activeGlossaryIndex = -1;

glossary_terms.each(function(a){
    var clickExpr = a.onclick.toString();
   
    a.onclick = null;
    
    //get the termID
    var regex = /defineTerm\x28(.*?)\,\s*(\d*)\x29/
    var termEx = /defineTerm\x28(\d*)\x29/
    var termID = -1;
    var defType = 1;
    if(regex.match(clickExpr))
    {
        termID = regex.exec(clickExpr)[1];
        defType = regex.exec(clickExpr)[2];
    }
    else if (termEx.match(clickExpr))
    {
        termID = termEx.exec(clickExpr)[1];
    }
        
    a.observe('click', function(e){
        var clickedGlossaryIndex = glossary_terms.indexOf(a);
        if(glossary_definition.visible() && clickedGlossaryIndex == activeGlossaryIndex)
        {
            glossary_definition.hide();
            return;
        }
            
        var iebody = (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
        
        var dsocleft = document.all ? iebody.scrollLeft : pageXOffset;
        var dsoctop = document.all ? iebody.scrollTop : pageYOffset;
        var element = e.element();
        var location = element.viewportOffset();
        var newLeft = dsocleft + location.left + 16;
        var newTop = dsoctop + location.top + 16;
        var overWidth = iebody.clientWidth - 310;
        
        if(overWidth < newLeft)
        {
            newLeft = newLeft + (overWidth - newLeft);
        }
        
       glossary_definition.style.left = newLeft + 'px';
       glossary_definition.style.top = newTop + 'px';
        glossary_definition.style.position = "absolute";
        glossary_definition.setOpacity(.95);
        activeGlossaryIndex = glossary_terms.indexOf(a);
        defineTerm(termID,defType);
    });
    
    glossary_definition.observe('click', function(){
        glossary_definition.hide();
    });
    
    $(document).observe('click', function(e){
        glossary_definition.hide();
    });
});

function defineTerm(termID, defType)
{
    try
    {
   
        bars.each(function(s){
        if(s.up().next().visible())
        {
        //collapse bars by default
        toggleBar(s);
        }
        });
    }
    catch(err)
    {}
    
    GetDefinition.Define(termID, defType, function (result) {
        glossary_definition.update(result); 
        glossary_definition.show();
        });
}
