function handleEvent(obj,eventName,callback,useCapture){
return obj.addEventListener ? obj.addEventListener(eventName,callback,useCapture||false) : obj.attachEvent("on"+eventName,callback);
}
cssClass = {
_killCache : {}, _findCache : {}, add : function cssClassAdd(obj,className){ this.kill(obj,className); obj.className+=(obj.className.length?' ':'')+className; }, kill : function cssClassKill(obj,className){ var re = this._killCache[className] || (this._killCache[className]=new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)','g') ); obj.className = obj.className.replace(re,''); }, has : function cssClassHas(obj,className){ var re = this._findCache[className] || (this._findCache[className]=new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)') ); return re.test( obj.className ); }
};
function glossaryClick(evt){
if (!evt) evt=event; var target = evt.target || evt.srcElement; var term = target.getAttribute('term') || target.innerHTML; var box = document.getElementById('glossary-box'); box.style.display = 'block'; var scroll = (document.documentElement.scrollTop || document.body.scrollTop )*1; box.style.left = (evt.clientX+5) + 'px'; box.style.top = (evt.clientY+5) + scroll + 'px'; var html = $glossaryTerms[term.toLowerCase()]; box.innerHTML = html; evt.cancelBubble = true; if (evt.stopPropogation) evt.stopPropogation(); return false;
}
handleEvent(window,‘load’,function(){
for ( var spans=document.getElementsByTagName('span'),i=spans.length-1; i>=0; --i ){ var span = spans[i]; if (cssClass.has(span,'glossary')){ var term = span.getAttribute('term') || span.innerHTML; if ($glossaryTerms[term.toLowerCase()]){ handleEvent(span,'click',glossaryClick); }else{ cssClass.kill(span,'glossary'); cssClass.add(span,'glossary-missing'); } } } var box = document.getElementById('glossary-box'); handleEvent( document.body, 'click', function(){ box.style.display = 'none'; });
});