function showPanel(panelId, posId, shiftX, shiftY) {
  var the_style = getStyleObject(panelId);
  var place_obj = document.getElementById(posId);
  if (the_style != false) {
    if (place_obj) {
      the_style.top = (findPosY(place_obj)+parseInt(shiftY))+'px';
      the_style.left = (findPosX(place_obj)+parseInt(shiftX))+'px';
    }
    the_style.display = 'inline';
  }
  addIFrame(document.getElementById(panelId));
}

function hidePanel(panelId) {
  var the_style = getStyleObject(panelId);
  if (the_style != false) { the_style.display = 'none'; }
  removeIFrame(document.getElementById(panelId));
}

function getStyleObject(objectId) {
  if (document.getElementById && document.getElementById(objectId)) {
    return document.getElementById(objectId).style;
  } else if (document.all && document.all(objectId)) {
    return document.all(objectId).style;
  } else {
    return false;
  }
}

function findPosX(obj) {
  var curleft = 0;
  if(obj.offsetParent)
    while(1) {
      curleft += obj.offsetLeft;
      if(!obj.offsetParent) break;
      obj = obj.offsetParent;
    }
  else if(obj.x)
    curleft += obj.x;
  return curleft;
}

function findPosY(obj) {
  var curtop = 0;
  if(obj.offsetParent)
    while(1) {
      curtop += obj.offsetTop;
      if(!obj.offsetParent) break;
      obj = obj.offsetParent;
    }
  else if(obj.y)
    curtop += obj.y;
  return curtop;
}

function addIFrame(node) {
  h = node.clientHeight;
  w = node.clientWidth;
  var iframe = document.createElement('iframe');
  with (iframe.style) {
    position = 'absolute';
    height = h + 4 + 'px';
    width = w + 4 + 'px';
    left = node.style.left;
    top = node.style.top;
    border = '0';
  }
  node.parentNode.appendChild(iframe);
}

function removeIFrame(node) {
  iframe = node.parentNode.lastChild;
  if (iframe.nodeName == "IFRAME") {
    iframe.parentNode.removeChild(iframe);
  }
}