window.onload = initPopupLinks; 

function initPopupLinks() {
  if (!document.getElementsByTagName) return true;
  var pageLinks = document.getElementsByTagName('a');
  for (var i = 0; i < pageLinks.length; i++) {
	if (pageLinks[i].className == 'glossary') {
		pageLinks[i].onclick = function(){return popUp(this)}
        }
  }
  return true;
}

function popUp(o) {
	var oldPopUp = clearPopUps(); //clear any existing pop-ups before creating new one

	if (oldPopUp != o.innerHTML) { //create new unless click was on old
		var s = document.createElement('span');
		s.id = o.innerHTML;
		s.innerHTML = lookup(o.innerHTML);
		s.className = "gloss_popup";

		var m = document.createElement('span');
		m.id = "marker";
		o.appendChild(m);

		s.style.position = "absolute";
		s.style.top = eval(GetTop(m) + o.offsetHeight) + "px";
		s.style.left = GetLeft(o) + "px";
		s.onclick=function(){this.parentNode.removeChild(this)};

		o.removeChild(m);
		o.parentNode.appendChild(s);
		ScrollIntoView(s,false,false,0);
	}
	return false;
}

function clearPopUps() {
	var pageSpans = document.getElementsByTagName('span');
	var popUpId = '';
  	for (var i = 0; i < pageSpans.length; i++) {
		if (pageSpans[i].className == 'gloss_popup') {
			popUpId = pageSpans[i].id;
			pageSpans[i].parentNode.removeChild(pageSpans[i]);
		}
        }
	return popUpId;
}

function findPos(obj) {
	var pLeft = pTop = 0;
	if (obj.offsetParent) {
		pLeft = obj.offsetLeft;
		pTop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			pLeft += obj.offsetLeft;
			pTop += obj.offsetTop;
		}
	}
	return [pLeft,pTop];
}


function InViewV(element,margin) {
  if(!margin) margin=0;
  var Top=GetTop(element), ScrollTop=GetScrollTop();
  return !(Top<ScrollTop+margin||
    Top>ScrollTop+GetWindowHeight()-element.offsetHeight-margin);
}
function InViewH(element,margin) {
  if(!margin) margin=0;
  var Left=GetLeft(element), ScrollLeft=GetScrollLeft();
  return !(Left<ScrollLeft+margin||
    Left>ScrollLeft+GetWindowWidth()-element.offsetWidth-margin);
}
function ScrollIntoView(element,bAlignTop,bAlignLeft,margin){
  var posX=GetScrollLeft(), posY=GetScrollTop();
  if(!InViewH(element,margin)) {
    if(!margin) margin=0;
    posX=GetLeft(element);
    if(bAlignLeft) posX-=margin;
    else posX+=element.offsetWidth+margin-GetWindowWidth();
  }
  if(!InViewV(element,margin)) {
    if(!margin) margin=0;
    posY=GetTop(element);
    if(bAlignTop) posY-=margin;
    else posY+=element.offsetHeight+margin-GetWindowHeight();
  }
  window.scrollTo(posX, posY);
}
function GetWindowHeight() {
  return document.documentElement&&document.documentElement.clientHeight||
    document.body.clientHeight||
    window.innerHeight||
    0;
}
function GetWindowWidth() {
  return document.documentElement&&document.documentElement.clientWidth||
    document.body.clientWidth||
    window.innerWidth||0;
}
function GetScrollTop() {
  return window.pageYOffset||
    document.documentElement&&document.documentElement.scrollTop||
    document.body.scrollTop||0;
}
function GetScrollLeft() {
  return window.pageXOffset||
    document.documentElement&&document.documentElement.scrollLeft||
    document.body.scrollLeft||0;
}
function GetTop(element) {
  var pos=0;
  do pos+=element.offsetTop
  while(element=element.offsetParent);
  return pos;
}
function GetLeft(element) {
  var pos=0;
  do pos+=element.offsetLeft
  while(element=element.offsetParent);
  return pos;
}