// How many pixels to the right/left of the cursor to show the popup
// Values between 3 and 12 are best
if (typeof offsetx == 'undefined') { var offsetx = 10;}

// How many pixels to the below the cursor to show the popup
// Values between 3 and 12 are best
if (typeof offsety == 'undefined') { var offsety = 10;}

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false

// Microsoft Stupidity Check
if (ie4) {
  if (navigator.userAgent.indexOf('MSIE 5') > 0) {
    ie5 = true;
  } else {
    ie5 = false;
  }
} else {
  ie5 = false;
}

var x = 0;
var y = 0;
var snow = 0;
var sw = 0;
var cnt = 0;
var dir = 1;

if ((ns4) || (ie4)) {
  /*if (ns4) over = document.overDiv;
  if (ie4) over = overDiv.style;*/
  document.onmousemove = mouseMove;
  if (ns4) document.captureEvents(Event.MOUSEMOVE);
}

// Public functions to be used on pages.

// Caption popup
function showPopupDiv(d, width, text) {
  txt = "<table width="+width+" border=0 cellpadding=2 cellspacing=1 bgcolor=\"#97C58A\"><tr><td class=\"PopupBlock\">"+text+"</td></tr></table>";
  layerWrite(txt);
  dir = d;
  disp();
}

// Clears popups if appropriate
function hidePopupDiv() {
  if (cnt >= 1) { sw = 0 };
  if ((ns4) || (ie4)) {
    if (sw == 0) {
      snow = 0;
      hideObject(document.getElementById( 'overDiv' ).style);
    } else {
      cnt++;
    }
  }
}

// Non public functions. These are called by other functions etc.

// Common calls
function disp() {
  if ((ns4) || (ie4)) {
    if (snow == 0)  {
      if (dir == 2) { // Center
        moveTo(document.getElementById( 'overDiv' ).style, x+offsetx-(width/2), y+offsety);
      }
      if (dir == 1) { // Right
        moveTo(document.getElementById( 'overDiv' ).style, x+offsetx, y+offsety);
      }
      if (dir == 0) { // Left
        moveTo(document.getElementById( 'overDiv' ).style, x-offsetx-width, y+offsety);
      }
      showObject(document.getElementById( 'overDiv' ).style);
      snow = 1;
    }
  }
// Here you can make the text goto the statusbar.
}

// Moves the layer
function mouseMove(e) {
  if (ns4) { x = e.pageX; y = e.pageY; }
  if (ie4) { x = event.x; y = event.y; }
  if (ie5) { x = event.x + document.body.scrollLeft; y = event.y + document.body.scrollTop; }
  if (snow) {
    if (dir == 2) { // Center
      moveTo(document.getElementById( 'overDiv' ).style, x+offsetx-(width/2), y+offsety);
    }
    if (dir == 1) { // Right
      moveTo(document.getElementById( 'overDiv' ).style, x+offsetx, y+offsety);
    }
    if (dir == 0) { // Left
      moveTo(document.getElementById( 'overDiv' ).style, x-offsetx-width, y+offsety);
    }
  }
}

// Writes to a layer
function layerWrite(txt) {
  if (ns4) {
    var lyr = document.overDiv.document;
    lyr.write(txt);
    lyr.close();
  } else if (ie4) {
    document.getElementById( 'overDiv' ).innerHTML = txt;
  }
}

// Make an object visible
function showObject(obj) {
  if (ns4) obj.visibility = "show";
  else if (ie4) obj.visibility = "visible";
}

// Hides an object
function hideObject(obj) {
  if (ns4) obj.visibility = "hide";
  else if (ie4) obj.visibility = "hidden";
}

// Move a layer
function moveTo(obj, xL, yL) {
  obj.left = xL + document.body.scrollLeft;
  obj.top = yL + document.body.scrollTop;
}
