YAHOO.namespace('mzag.glossary');
YAHOO.namespace('mzag.glossaryManager');

YAHOO.mzag.glossaryManager.elements=new Array();
YAHOO.mzag.glossaryManager.process=function()
{
  //YAHOO.mzag.glossaryManager.elements=new Array();
  elements=YAHOO.util.Dom.getElementsByClassName('mzag_glossary_term_replaced');
  for(var i=0;i<elements.length;i++)
  {
    if(!YAHOO.mzag.glossaryManager.isGlossaryElement(elements[i]))
      YAHOO.mzag.glossaryManager.elements[YAHOO.mzag.glossaryManager.elements.length]=new YAHOO.mzag.glossary(elements[i]); 
  }
  if(mzagGlossaryDivs.length)
    YAHOO.mzag.ajax.NodeReplacement.subscribe(YAHOO.mzag.glossaryManager.checkAjaxReplacements, this, true);
}

YAHOO.mzag.glossaryManager.checkAjaxReplacements=function(event_, args_)
{
  // only check ajax replacements before replace
  if(!args_[0])
    return;
  var elements=YAHOO.util.Dom.getElementsByClassName('mzag_glossary_term_replaced');
  var isParent, hasNewItems=false;
  for(var t=0;t<elements.length;t++)
  {
    isParent=false;
    for(var k=0;k<mzagGlossaryDivs.length;k++)
    {
      if(YAHOO.util.Dom.isAncestor(mzagGlossaryDivs[k], elements[t]))
      {
        isParent=true;
        if(!YAHOO.mzag.glossaryManager.isGlossaryElement(elements[t]))
          hasNewItems=true;
      }
    }
    if(!isParent)
    {
      for(var j=0;j<elements[t].childNodes.length;j++)
        elements[t].parentNode.insertBefore(elements[t].childNodes[j],elements[t]);
      elements[t].parentNode.removeChild(elements[t]);
    }
  }
  if(hasNewItems)
    YAHOO.mzag.glossaryManager.process();
}
YAHOO.mzag.glossaryManager.isGlossaryElement=function(element)
{
  for(var i=0;i<YAHOO.mzag.glossaryManager.elements.length;i++)
  {
    if(YAHOO.mzag.glossaryManager.elements[i].element==element)
      return true;
  }
  return false;
}

YAHOO.mzag.glossary=function(el)
{
  this.element=el;
  this.panel=null;
  this.response=null;
  this.contentLoaded=false;
  this.content=false;
  this.title=el.title;
  el.title='';
  this.init();
}
YAHOO.mzag.glossary.prototype.init=function()
{
  this.panel=new YAHOO.widget.Tooltip(this.element.id+'-mzag_glossary_tt',{constraintoviewport:true, xyoffset: [100, 100], context:this.element,text:''});
  
  if(this.panel.contextTriggerEvent) // yui2 
  {
    this.panel.contextTriggerEvent.subscribe(this.getContent,this,true);
  }
  else if(this.panel.beforeShowEvent)
  {
    this.panel.beforeShowEvent.subscribe(this.getContent,this,true);
  }
}
YAHOO.mzag.glossary.prototype.getContent=function(context)
{
  if(this.content)
  {
    this.panel.element.innerHTML=this.content
    return;
  }
  var ths=this;
  if($('mzag_glossary_loadingIndicator'))
  {
    this.panel.element.innerHTML='';
    indicator=$('mzag_glossary_loadingIndicator').cloneNode(true);
    indicator.style.display='block';
    this.panel.element.appendChild(indicator);
  }
  this.request=new YAHOO.mzag.ajax.AjaxRequest(null, 'Glossary_Module', 'ajaxGetPanelForKeyword', [this.title], this.element.value).setSuccessCallback(function(response)
  {
    if(typeof(response)=='undefined')
    {
      ths.panel.hide();
      return;
    }
    ths.panel.element.innerHTML=response;
    ths.content=response;
  }).submit();
};