var popUpCurrent = null;

function getAbsolutePos(el)
{
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
}

function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    //alert("Handler could not be attached");
  }
}

function removeEvent(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    //alert("Handler could not be removed");
  }
}

function closePopUp(ev)
{
   var currentPopUp = popUpCurrent;
   var el = ev.target;
   if(window.event)
      el = window.event.srcElement;
   
   for (; el != null && el != currentPopUp; el = el.parentNode);
   if(el == null)
   {   
      currentPopUp.style.display = 'none';
      removeEvent(document, "mousedown", closePopUp, false);
   }
}

function forceClosePopUp()
{
   popUpCurrent.style.display = 'none';
   removeEvent(document, "mousedown", closePopUp, false);
}

function showPopUp(el, popUpId)
{
   var helpD = document.getElementById(popUpId);
   popUpCurrent = helpD;
   var pos = getAbsolutePos(el)
   
   if(arguments[3] != "up")
      helpD.style.top = pos.y + "px";
   else
      helpD.style.bottom = pos.y + "px";
   if(arguments[2] != "left")
      helpD.style.left = pos.x + "px";
   else
      helpD.style.left = (pos.x - parseInt(helpD.style.width)) + "px";
   helpD.style.display = "block";
   
   addEvent(document, "mousedown", closePopUp, false);   
}
