function getPos(e) {
  var x = 0;
  var y  = 0;

  do {
    x += e.offsetLeft;
    y  += e.offsetTop;
    e = e.offsetParent;
  } while(e);

  return [x,y];
}

function hideFrame() {
  document.getElementById("frame").style.display = 'none';
}

function showFrame(targetElement, url) {
  var ew = 400;
  var x = 0;
  var y = 0;
  var xhr = createXHR();
  xhr.onreadystatechange = function() { 
                             if(xhr.readyState == 4) {
                               if(xhr.status == 200) {
                                 var e = document.getElementById("frame");
                                 var position = getPos(targetElement);
                                 var content = document.getElementById("content");
                                 var contentPosition = getPos(content);
                                 if((position[0] + ew) > (contentPosition[0] + content.offsetWidth)) {
                                   position[0] = contentPosition[0] + content.offsetWidth - ew;
                                 }

                                 var main = document.getElementById("main");
                                 var mainPosition = getPos(main);

                                 e.style.display = 'block';
                                 e.style.position = 'absolute';
                                 e.style.top = (position[1] - mainPosition[1] + 20)+'px';
                                 e.style.left = (position[0] - mainPosition[0] - 22) +'px';
                                 e.style.width = ew+'px';
                                 e.className = "showFrame";
                                 var closer = "<span id=\"closer\" onclick=\"hideFrame()\">x</span>";
                                 e.innerHTML = closer + xhr.responseText;
                               }
                             }
                           };
  xhr.open("GET", url , true);
  xhr.send(null); 
}

function createXHR() {
  var r = false;
  try { r = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) {
  try { r = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {
  try { r = new XMLHttpRequest(); } catch (e) {
  r = false; } } }
  return r;
}
