var req;

// INPUT:
// xOffset and yOffset - Parameters that control the relative position of the 
//                       pop-up window that's created.  If not set, the default values 
//                       of xOffset=15 and yOffset=-5 will be used.
function showAtCursor(e,id, xOffset, yOffset) {
  var obj = document.getElementById(id);
  var maxX;
  var maxY;
  
  if (typeof xOffset == 'undefined') xOffset = 15;
  if (typeof yOffset == 'undefined') yOffset = -5;
  
  obj.style.position = "absolute";
  obj.style.display = "block";
  if (document.all&&!window.opera) { 
    if (document.documentElement && document.documentElement.scrollTop) {
      maxX = document.documentElement.clientWidth + document.documentElement.scrollLeft
      maxY = document.documentElement.clientHeight + document.documentElement.scrollTop
      y = event.clientY + document.documentElement.scrollTop;
      x = event.clientX + document.documentElement.scrollLeft ;
    } else {
      y = event.clientY + document.body.scrollTop;
      x = event.clientX + document.body.scrollLeft;
    }
  } else {
    maxX = window.innerWidth + document.documentElement.scrollLeft;
    maxY = window.innerHeight + document.documentElement.scrollTop;
    y = e.pageY;
    x = e.pageX;
  }
  var divW = parseInt(obj.offsetWidth);
  var divH = parseInt(obj.offsetHeight);
  while (maxX > 200 && x + divW > (maxX - 10)) {
    x = x - (divW +30);
  }
  while (maxY > 300 && y + divH > (maxY - 30)) {
    y = y - 1;
  }
  x += xOffset;
  y += yOffset;
  obj.style.top = y +"px";
  obj.style.left = x +"px";
}

// INPUT:
// xOffset and yOffset - optional parameters that control the relative position of the 
//                       pop-up window that's created.  If not set, the default values 
//                       of xOffset=15 and yOffset=-5 will be used.
function initPage(event,id,xOffset,yOffset) {
  if (typeof xOffset == 'undefined') xOffset = 15;
  if (typeof yOffset == 'undefined') yOffset = -5;

  cancelClearPage();
  document.getElementById('tmpPageFrame').innerHTML = "<div>loading...</div>";
  retrieveURL(id);
  
  showAtCursor(event,"tmpPageFrame", xOffset, yOffset);
}

function clearPage (i) {  document.getElementById(i).style.display = 'none'; }
function delayClearPage (i) { delayhide=setTimeout("clearPage('"+i+"')",250); }
function cancelClearPage(){ if (typeof delayhide!="undefined") { clearTimeout(delayhide); } }

function retrieveURL(url) {
  if (window.XMLHttpRequest) { // Non-IE browsers
    req = new XMLHttpRequest();
    req.onreadystatechange = processStateChange;
    try {
      req.open("GET", url, true);
    } catch (e) {
      //      alert(e);
    }
    req.send(null);
  } else if (window.ActiveXObject) { // IE
    req = new ActiveXObject("Microsoft.XMLHTTP");
    if (req) {
      req.onreadystatechange = processStateChange;
      req.open("GET", url, true);
      req.send();
    }
  }
}

function processStateChange() {
  if (req.readyState == 4) { // Complete
    if (req.status == 200) { // OK response
      document.getElementById('tmpPageFrame').innerHTML = req.responseText;
    } else {
      //      alert("Problem: " + req.statusText);
    }
  }
}