<!--

function Popup(popup_id) {
  this.id = popup_id;

  // get the popup object, and quit if unsuccessful
  if(!(this.pop = document.getElementById(popup_id))) return false;

  this.pop.style.position = "absolute";
  this.pop.style.display = 'none';
  this.pop.style.zIndex = 1;

  this.hide_timeouts = new Array();
  this.show_timeouts = new Array();


  // show() - make the popup visible
  this.show = function(time) {
    for(var i = 0; i < this.hide_timeouts.length; i++) clearTimeout(this.hide_timeouts[i]);

    if(time)
      this.show_timeouts.push(setTimeout("document.getElementById('" + this.id + "').style.display = ''", time));
    else
      this.pop.style.display = '';
  }

  
  // hide() - make the popup invisible
  this.hide = function(time) {
    for(var i = 0; i < this.show_timeouts.length; i++) clearTimeout(this.show_timeouts[i]);

    if(time){
      this.hide_timeouts.push(setTimeout("document.getElementById('" + this.id + "').style.display = 'none'", time));
    }
    else {
      this.pop.style.display = 'none';
    }
  }

  
  // position() - moves the popup into the desired position
  this.position = function(caller, event, origin, rel_left, rel_top) {
    var callerLeft = getX(caller);
    var callerTop = getY(caller);
    
    // get left/top values
    switch(origin) {
      case '11':  var left = callerLeft;
                  var top = callerTop; break;

      case '12':  var left = callerLeft - this.pop.offsetWidth;
                  var top = callerTop; break;

      case '13':  var left = callerLeft;
                  var top = callerTop - this.pop.offsetHeight; break;
      
      case '14':  var left = callerLeft - this.pop.offsetWidth;
                  var top = callerTop - this.pop.offsetHeight; break;
      
      case '21':  var left = callerLeft + caller.offsetWidth;
                  var top = callerTop; break;
      
      case '22':  var left = callerLeft + caller.offsetWidth - this.pop.offsetWidth;
                  var top = callerTop; break;
      
      case '23':  var left = callerLeft + caller.offsetWidth;
                  var top = callerTop - this.pop.offsetHeight; break;

      case '24':  var left = callerLeft + caller.offsetWidth - this.pop.offsetWidth;
                  var top = callerTop - this.pop.offsetHeight; break;

      case '31':  var left = callerLeft;
                  var top = callerTop + caller.offsetHeight; break;
      
      case '32':  var left = callerLeft - this.pop.offsetWidth;
                  var top = callerTop + caller.offsetHeight; break;
      
      case '33':  var left = callerLeft;
                  var top = callerTop + caller.offsetHeight - this.pop.offsetHeight; break;
      
      case '34':  var left = callerLeft - this.pop.offsetWidth;
                  var top = callerTop + caller.offsetHeight - this.pop.offsetHeight; break;
      
      case '41':  var left = callerLeft + caller.offsetWidth;
                  var top = callerTop + caller.offsetHeight; break;
      
      case '42':  var left = callerLeft + caller.offsetWidth - this.pop.offsetWidth;
                  var top = callerTop + caller.offsetHeight; break;
      
      case '43':  var left = callerLeft + caller.offsetWidth;
                  var top = callerTop + caller.offsetHeight - this.pop.offsetHeight; break;
      
      case '44':  var left = callerLeft + caller.offsetWidth - this.pop.offsetWidth;
                  var top = callerTop + caller.offsetHeight - this.pop.offsetHeight; break;

      case '0': case '00': default:
                  if(event &&
                    event.clientX >= callerLeft &&
                    event.clientX <= callerLeft + caller.offsetWidth &&
                    event.clientY >= callerTop &&
                    event.clientY <= callerTop + caller.offsetHeight)
                  {
                    var left = event.clientX;
                    var top = event.clientY; break
                  }
                  else {
                    var left = callerLeft;
                    var top = callerTop + caller.offsetHeight; break;
                  }
    }

    // adjust top and left relative to origin
    left += rel_left;
    top += rel_top;

    // set left and top
    this.pop.style.left = left + "px";
    this.pop.style.top = top + "px";
  }
}

function getX(obj) {
  if(typeof(obj) == "string") obj = document.getElementById(obj);
  return obj.offsetParent == null ? obj.offsetLeft : (obj.offsetLeft + getX(obj.offsetParent));
}

function getY(obj) {
  if(typeof(obj) == "string") obj = document.getElementById(obj);
  return obj.offsetParent == null ? obj.offsetTop : (obj.offsetTop + getY(obj.offsetParent));
}

-->