var lastGlossaryId = 0;
var glossaryArr = new Array();
var glossaryHintObj = false;
var contentWidth, contentHeight;

function getAbsoluteCoords(obj) {
	var tempObj = obj;
var absX = 0;
	var absY = 0;
	while(tempObj.offsetParent) {
	absX += tempObj.offsetLeft;
	absY += tempObj.offsetTop;
	tempObj = tempObj.offsetParent;
}
	return new Array(absX, absY);
}

function getInnerSize() {
	if(self.innerHeight) {
		contentWidth = self.innerWidth;
	contentHeight = self.innerHeight;
	} else if(document.documentElement && document.documentElement.clientHeight) {
	contentWidth = document.documentElement.clientWidth;
	contentHeight = document.documentElement.clientHeight;
	} else if(document.body) {
	contentWidth = document.body.clientWidth;
	contentHeight = document.body.clientHeight;
	}  
}

function showGlossary(e)  {
	if(!e) {
	var e = window.event;
}

	if(e.target) {
	var senderObj = e.target;
} else if(e.srcElement) {
	var senderObj = e.srcElement;
}
if(senderObj.nodeType == 3) {
		senderObj = senderObj.parentNode;
	}

if(e.pageY) {
	var mouseY = e.pageY;
} else if(e.clientY) {
	if(document.body.scrollTop) {
		var mouseY = e.clientY + document.body.scrollTop;
	} else {
		var mouseY = e.clientY + document.documentElement.scrollTop;
	}
}

if(senderObj) {
	getInnerSize();
	var senderId = senderObj.id.substr(8);
	if(glossaryHintObj.childNodes.length > 0) {
		glossaryHintObj.removeChild(glossaryHintObj.firstChild); 
	}
	var textNode = document.createTextNode(glossaryArr[senderId]);
	glossaryHintObj.appendChild(textNode);
	var coords = getAbsoluteCoords(senderObj);
	glossaryHintObj.style.left = coords[0] + 'px';
	glossaryHintObj.style.top = coords[1] + (senderObj.offsetHeight) + 'px';
	glossaryHintObj.style.display = 'block';

	if(coords[0] + glossaryHintObj.offsetWidth > contentWidth)  {
		glossaryHintObj.style.left = (coords[0] - ((coords[0] + glossaryHintObj.offsetWidth) - contentWidth)) + 'px';
	}
	if(coords[1] + glossaryHintObj.offsetHeight > contentHeight)  {
		glossaryHintObj.style.top = (coords[1] - glossaryHintObj.offsetHeight) + 'px';
	}
	
	if(parseInt(glossaryHintObj.style.top) < mouseY) {	  
	 glossaryHintObj.style.top = mouseY + 3 + 'px'; 
	}
}
}

function hideGlossary(e) {
	glossaryHintObj.style.display = 'none';  
}

window.onload = function() {
  var spanObjs = document.getElementsByTagName('SPAN');
  for(var i = 0; i < spanObjs.length; i++) {
	  if(spanObjs[i].className == 'glossary') {
		  glossaryArr[lastGlossaryId] = spanObjs[i].title;
			glossaryArr[lastGlossaryId] = glossaryArr[lastGlossaryId].replace(/\[\[/g, ''); 
			glossaryArr[lastGlossaryId] = glossaryArr[lastGlossaryId].replace(/\]\]/g, ''); 
  	  spanObjs[i].id = 'glossary' + lastGlossaryId;
		  spanObjs[i].title = '';
	    spanObjs[i].onmouseover = showGlossary;
	    spanObjs[i].onmouseout = hideGlossary;
	    lastGlossaryId++;
	  }
  }
  glossaryHintObj = document.createElement('DIV');
  glossaryHintObj.id = 'glossary-box';
  var bodyObj = document.getElementsByTagName('BODY');
  bodyObj[0].appendChild(glossaryHintObj);
}