// Acronyms and definitions
var cancelHideDef;
var defContainer;
var defFixer;

function prepareAcronyms() {    
  var acs = $A(document.getElementsByTagName('acronym'));    
  if(acs.length > 0) { 
  
    new Insertion.Bottom(document.body, '<div id="defcontainer" style="display:none;z-index:999"><div id="deftitle"></div><div id="definner"></div></div>');
    new Insertion.Bottom(document.body, '<iframe id="defFixer" src="about:blank" scrolling="no" frameborder="0" style="position:absolute;display:none;z-index:998"></iframe>');
    
    defContainer = $('defcontainer');
    defFixer = $('defFixer');
    
    Event.observe(defContainer, 'mouseout', hideDef, true);
    Event.observe(defContainer, 'mouseover', function(e) { cancelHideDef = true; }, true);
    
    acs.each(     
      function(e) {         
        if(e.title != '') {
          e.setAttribute('abbrtitle', e.title);
          e.title = '';      
        }     
        Event.observe(e, 'mouseover', showDef, true);        
      });
  }
}
  
function showDef(e) {
  if(Event && Event.element) {
    if(elem = Event.element(e)) {         
      pos = Position.cumulativeOffset(elem);          
      Element.update('deftitle', elem.innerHTML.replace(/\w+/g, function(a){return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();}));    
      var abbrtitle = elem.getAttribute('abbrtitle');    
      if(abbrtitle == null) return;      
      Element.update('definner', abbrtitle.replace(/\\n/g, '<br /><br />'));
      Element.setStyle(defContainer, {left: (pos[0] + 5) + 'px', top: (pos[1] + elem.offsetHeight + 5) + 'px'});      
      Event.observe(elem, 'mouseout', hideDef, true);            
      Event.stop(e);
      
      
      cancelHideDef = true;          
      window.setTimeout('showDef2()', 500);
    }
  }
}    
function showDef2() {
  Element.show(defContainer);  
  $('definner').clientHeight > 190 ? $('definner').style.height = '190px' : $('definner').style.height = 'auto' ;  
  Position.clone(defContainer, defFixer);
  Element.show(defFixer);  
}
function hideDef(e) {
  cancelHideDef = false;
  setTimeout('hideDef2()', 1000);
}
function hideDef2(e) {  
  if(!cancelHideDef) {   
    Element.hide(defContainer);       
    Element.hide(defFixer);       
  }
}  

if(typeof(Event) != 'undefined' && Event.observe) {
  Event.observe(window, 'load', prepareAcronyms, true);
}
