/******************************************************************************
* popupmenu.js                                                                *
*                                                                             *
* Copyright 2000 by Mike Hall.                                                *
* Web address: http://www.brainjar.com                                        *
* Last update: August 10, 2000.                                               *
*                                                                             *
* Creates dynamic pop-up menus that can have any number of items and nested   *
* submenus of arbitrary depth. Any number of menus can be created each with   *
* its own look. Items can link to other pages or can be set to execute code.  *
* Note: requires dhtmllib.js.                                                 *
******************************************************************************/

// Need this to fix a bug with IE 5.5.

var isMinIE5_5 = (isMinIE5 && navigator.appVersion.indexOf("5.5") >= 0) ? 1 : 0;

var popUpMenuScrollbarSize = 16;    // Estimated width of scrollbars, used in NS
                                    // when positioning menus near window edge.

var popUpMenus = new Array();       // Used to track all menus.

//*****************************************************************************
// PopUpMenuItem constructor.
//*****************************************************************************

function PopUpMenuItem(text, link) {

  this.text = text;    // Item text.
  this.link = link;    // Link URL or JavaScript code.

  this.isSeparator = false;    // Separator flag.
  this.subMenu = null;         // Submenu to open when item is active.
}

//*****************************************************************************
// PopUpMenu constructor.
//*****************************************************************************

function PopUpMenu(width) {

  this.width  = width;
  this.height = 0;

  this.items = new Array();
  this.created = false;

  // Set default sizes.

  this.border    = 2;
  this.padding   = 4;
  this.spSize    = 2;
  this.spPadding = 1;

  // Set default colors.

  this.fgColor    = "#000000";
  this.bgColor    = "#c0c0c0";
  this.hiFgColor  = "#ffffff";
  //this.hiBgColor  = "#000080";
  this.hiBgColor  = "#003366";
  this.bdHiColor  = "#e0e0e0";
  this.bdShColor  = "#000000";
  this.spHiColor  = "#e0e0e0";
  this.spShColor  = "#808080";

  // Set default font.

  this.fontFamily = "MS Sans Serif,Arial,Helvetica,sans-serif";
  this.fontStyle  = "plain";
  this.fontWeight = "normal";
  this.fontSize   = "8pt";

  // Set default images.

  this.noneImage   = "/js/graphics/transparent.gif";
  this.normImage   = "/js/graphics/default_norm.gif";
  this.highImage   = "/js/graphics/default_high.gif";
  this.imageWidth  = 8;
  this.imageHeight = 12;

  // Position.

  this.left = 0;
  this.top = 0;
  this.right = this.width;
  this.bottom = this.height;

  // Child and parent menu information.

  this.parentMenu = null;
  this.openChild = null;
  this.offsetX = 0;
  this.offsetY = 0;

  // Menu flags.

  this.isStatic = false;
  this.isOpen = false;
  this.isSubmenu = false;

  // Define methods.

  this.setSizes = popUpMenuSetSizes;
  this.setColors = popUpMenuSetColors;
  this.setFont = popUpMenuSetFont;
  this.setImages = popUpMenuSetImages;
  this.addItem = popUpMenuAddItem;
  this.addSeparator = popUpMenuAddSeparator;
  this.addSubmenu = popUpMenuAddSubmenu;
  this.copyAttributes = popUpMenuCopyAttributes;
  this.create = popUpMenuCreate;
  this.open = popUpMenuOpen;
  this.close = popUpMenuClose;
  this.setStatic = popUpMenuSetStatic;
  this.moveTo = popUpMenuMoveTo;
  this.moveBy = popUpMenuMoveBy;
  this.getzIndex = popUpMenuGetzIndex;
  this.setzIndex = popUpMenuSetzIndex;

  // Add to the list.

  this.index = popUpMenus.length;
  popUpMenus[this.index] = this;
}

//*****************************************************************************
// PopUpMenu methods.
//*****************************************************************************

function popUpMenuSetSizes(border, padding, spSize, spPadding) {

  if (!this.created) {
    this.border = border;
    this.padding = padding;
    this.spSize = spSize;
    this.spPadding = spPadding;
  }
}

function popUpMenuSetColors(fgColor, bgColor, hiFgColor, hiBgColor,
                            bdHiColor, bdShColor, spHiColor, spShColor) {

  if (!this.created) {
    this.fgColor = fgColor;
    this.bgColor = bgColor;
    this.hiFgColor = hiFgColor;
    this.hiBgColor = hiBgColor;
    this.bdHiColor = bdHiColor;
    this.bdShColor = bdShColor;
    this.spHiColor = spHiColor;
    this.spShColor = spShColor;
  }
}

function popUpMenuSetFont(family, style, weight, size) {

  if (!this.created) {
    this.fontFamily = family;
    this.fontStyle = style;
    this.fontWeight = weight;
    this.fontSize = size;
  }
}

function popUpMenuSetImages(none, norm, high, width, height) {

  if (!this.created) {
    this.noneImage = none;
    this.normImage = norm;
    this.highImage = high;
    this.imageWidth = width;
    this.imageHeight = height;
  }
}

function popUpMenuAddItem(item) {

  if (!this.created)
    this.items[this.items.length] = item;
}

function popUpMenuAddSeparator() {

  // Add a separator item.

  if (!this.created) {
    this.addItem(new PopUpMenuItem("", ""));
    this.items[this.items.length - 1].isSeparator = true;
  }
}

function popUpMenuAddSubmenu(item, menu) {

  if (!this.created && !menu.isSubmenu) {
    item.subMenu = menu;

    this.items[this.items.length] = item;
    menu.parentMenu = this;
    menu.isSubmenu = true;
  }
}

function popUpMenuCopyAttributes(menu) {

  if (!this.created && menu != null) {
    this.border = menu.border;
    this.padding = menu.padding;
    this.spSize = menu.spSize;
    this.spPadding = menu.spPadding;
    this.fgColor = menu.fgColor;
    this.bgColor = menu.bgColor;
    this.hiFgColor = menu.hiFgColor;
    this.hiBgColor = menu.hiBgColor;
    this.bdHiColor = menu.bdHiColor;
    this.bdShColor = menu.bdShColor;
    this.spHiColor = menu.spHiColor;
    this.spShColor = menu.spShColor;
    this.fontFamily = menu.fontFamily;
    this.fontStyle = menu.fontStyle;
    this.fontWeight = menu.fontWeight;
    this.fontSize = menu.fontSize;
    this.noneImage = menu.noneImage;
    this.normImage = menu.normImage;
    this.highImage = menu.highImage;
    this.imageWidth  = menu.imageWidth;
    this.imageHeight = menu.imageHeight;
  }
}

function popUpMenuCreate() {

  var hasSubmenus;
  var norm, high, end1, end2, img1, img2, sep;
  var text;
  var noimg, imgsrc;
  var width, height;
  var str;
  var x, y;
  var i;
  var bevelLayers;

  if (!isMinNS4 && !isMinIE4)
    return;

  // Create the PopUpMenu only once.

  if (this.created)
    return;

  window.status = "PopUpMenu: Building menu...";

  // See if any items have submenus. Need to know so space can be added to the
  // menu display for arrows.

  hasSubmenus = false;
  for (i = 0; i < this.items.length; i++)
    if (this.items[i].subMenu != null)
      hasSubmenus = true;

  // Set up HTML code for menu item text.

  norm = '<table border=0 cellpadding=' + this.padding
       + ' cellspacing=0 width="100%"><tr valign=top><td>'
       + '<span style="color:' + this.fgColor + ';'
       + 'font-family:' + this.fontFamily + ';'
       + 'font-size:' + this.fontSize + ';'
       + 'font-style:' + this.fontStyle + ';'
       + 'font-weight:' + this.fontWeight + ';">';
  high = '<table border=0 cellpadding=' + this.padding
       + ' cellspacing=0 width="100%"><tr valign=top><td>'
       + '<span style="color:' + this.hiFgColor + ';'
       + 'font-family:' + this.fontFamily + ';'
       + 'font-size:' + this.fontSize + ';'
       + 'font-style:' + this.fontStyle + ';'
       + 'font-weight:' + this.fontWeight + ';">';
  end1 = '</span></td>';
  end2 = '</tr></table>';
  img1 = '';
  img2 = '';
  noimg = '';
  if (hasSubmenus) {
    img1 = '<td align=right><img border=0 hspace=0 vspace=0 src="';
    img2 = '" width=' + this.imageWidth + ' height=' + this.imageHeight + '></td>';
    noimg = this.noneImage;
  }

  // Set up HTML code for separators.

  sep = '<table border=0 cellpadding=' + this.spPadding
      + ' cellspacing=0 width="100%"><tr><td align=center>'
      + '<table border=0 cellpadding=0 cellspacing=0 width="100%">'
      + '<tr bgcolor="' + this.spShColor + '"><td>'
      + '<img border=0 hspace=0 vspace=0 src="' + this.noneImage + '"'
      + ' width=1 height=' + (this.spSize - Math.round(this.spSize / 2)) + '>'
      + '</td></tr>';
  if (this.spSize - Math.round(this.spSize / 2) > 0)
    sep += '<tr bgcolor="' + this.spHiColor + '"><td>'
        + '<img border=0 hspace=0 vspace=0 src="' + this.noneImage + '"'
        + ' width=1 height=' + Math.round(this.spSize / 2) + '>'
        + '</td></tr>';
  sep += '</table></td></tr></table>';

  // Build the layers that make up the menu.

  str = "";

  // Create the base layer for Netscape.

  if (isMinNS4) {
    this.baseLayer = new Layer(this.width);
    setBgColor(this.baseLayer, this.bdShColor);
  }

  // Create layers for the border bevel.

  bevelLayers = new Array();
  if (isMinNS4)
    for (i = 0; i < this.border; i++) {
      bevelLayers[bevelLayers.length] = new Layer(this.width, this.baseLayer);
      bevelLayers[bevelLayers.length - 1].visibility = "inherit";
      bevelLayers[bevelLayers.length] = new Layer(this.width, this.baseLayer);
      bevelLayers[bevelLayers.length - 1].visibility = "inherit";
    }
  if (isMinIE4)
    for (i = 0; i < this.border; i++)
      str += '<div id="popUpMenu' + this.index + '_bevel' + (2 * i) + '"'
          +  ' style="position:absolute;'
          +  ' width:' + this.width + 'px;'
          +  ' height:100%;">'
          +  '</div>\n'
          +  '<div id="popUpMenu' + this.index + '_bevel' + (2 * i + 1) + '"'
          +  ' style="position:absolute;'
          +  ' width:' + this.width + 'px;'
          +  ' height:100%;">'
          +  '</div>\n';

  // Create the three layers used for each item.

  width = this.width - 2 * this.border;
  for (i = 0; i < this.items.length; i++) {
    if (this.items[i].subMenu == null)
      imgsrc = noimg;
    else
      imgsrc = this.normImage;
    if (this.items[i].isSeparator)
      text = sep;
    else
      text = norm + this.items[i].text + end1 + img1 + imgsrc + img2 + end2;
    if (isMinNS4) {
      this.items[i].normLayer = new Layer(width, this.baseLayer);
      this.items[i].normLayer.document.open();
      this.items[i].normLayer.document.write(text);
      this.items[i].normLayer.document.close();
      this.items[i].normLayer.visibility = "inherit";
      setBgColor(this.items[i].normLayer, this.bgColor);
    }
    if (isMinIE4)
      str += '<div id="popUpMenu' + this.index + '_norm' + i + '"'
          +  ' style="position:absolute;'
          +  ' background-color:' + this.bgColor + ';'
          +  ' width:' + width + 'px;">' + text + '</div>\n';
    if (this.items[i].subMenu == null)
      imgsrc = noimg;
    else
      imgsrc = this.highImage;
    if (this.items[i].isSeparator)
      text = sep;
    else
      text = high + this.items[i].text + end1 + img1 + imgsrc + img2 + end2;
    if (isMinNS4) {
      this.items[i].highLayer = new Layer(width, this.baseLayer);
      this.items[i].highLayer.document.open();
      this.items[i].normLayer.document.write(text);
      this.items[i].highLayer.document.close();
      this.items[i].highLayer.visibility = "hide";
      setBgColor(this.items[i].highLayer, this.hiBgColor);
    }
    if (isMinIE4)
      str += '<div id="popUpMenu' + this.index + '_high' + i + '"'
          +  ' style="position:absolute;'
          +  ' background-color:' + this.hiBgColor + ';'
          +  ' width:' + width + 'px;'
          +  ' visibility:hidden;">' + text + '</div>\n';
    if (isMinNS4) {
      this.items[i].dmmyLayer = new Layer(width, this.baseLayer);
      this.items[i].dmmyLayer.visibility = "inherit";
    }
    if (isMinIE4) {
      str += '<div id="popUpMenu' + this.index + '_dmmy' + i + '"'
          +  ' style="position:absolute;'
          +  ' width:' + width + 'px;">';
      if (isMinIE5_5)
        str += '<table cellpadding=0 cellspacing=0 width="100%" height="100%"><tr><td></td></tr></table>';
      str += '</div>\n';
    }
  }

  // Insert the HTML code for IE and get a handles to the base, bevel and
  // background layers. For IE4, need to scroll window to end of page, insert
  // and scroll back to correct bug.

  if (isMinIE4 && !isMinIE5) {
    x = getPageScrollX();
    y = getPageScrollY();
    window.scrollTo(getPageWidth(), getPageHeight());
  }
  if (isMinIE4) {
    str = '<div id="popUpMenu' + this.index + '_base"'
        + ' style="position:absolute; left:0px; top:0px;'
        + ' width:' + this.width + 'px;'
        + ' overflow:hidden;'
        + ' visibility:hidden;">'
        + str
        + '</div>\n';
    document.body.insertAdjacentHTML("beforeEnd", str);
    if (!isMinIE5)
      window.scrollTo(x, y);
    this.baseLayer = getLayer("popUpMenu" + this.index + "_base");
    for (i = 0; i < 2 * this.border; i++) {
      bevelLayers[bevelLayers.length] =
        getLayer("popUpMenu" + this.index + "_bevel" + (2 * i));
      bevelLayers[bevelLayers.length] =
        getLayer("popUpMenu" + this.index + "_bevel" + (2 * i + 1));
    }
  }

  // Do set up for each item.

  x = this.border;
  y = this.border;
  height = 0;
  for (i = 0; i < this.items.length; i++) {

    // If this is a submenu, save the parent menu and item information.

    if (this.items[i].subMenu) {
      this.items[i].subMenu.parentItem = this.items[i];
      this.items[i].subMenu.offsetX = this.width - (this.border + this.padding);
      this.items[i].subMenu.offsetY = y;
    }

    // For IE, get handles to the item layers.

    if (isMinIE4) {
      this.items[i].normLayer = getLayer("popUpMenu" + this.index + "_norm" + i);
      this.items[i].highLayer = getLayer("popUpMenu" + this.index + "_high" + i);
      this.items[i].dmmyLayer = getLayer("popUpMenu" + this.index + "_dmmy" + i);
    }

    // Position and clip the item's layers.

    moveLayerTo(this.items[i].normLayer, x, y);
    moveLayerTo(this.items[i].highLayer, x, y);
    moveLayerTo(this.items[i].dmmyLayer, x, y);
    height = getHeight(this.items[i].normLayer);
    y += height;
    clipLayer(this.items[i].normLayer, 0, 0, width, height);
    clipLayer(this.items[i].highLayer, 0, 0, width, height);
    if (isMinIE4) {
      this.items[i].dmmyLayer.style.pixelWidth = width;
      this.items[i].dmmyLayer.style.pixelHeight = height;
    }
    clipLayer(this.items[i].dmmyLayer, 0, 0, width, height);

    // Set up event handling for the item.

    if (!this.items[i].isSeparator) {
      this.items[i].dmmyLayer.index = this.index;
      this.items[i].dmmyLayer.itemIndex = i;
      this.items[i].dmmyLayer.onmouseover = popUpMenuItemOn;
      this.items[i].dmmyLayer.onmouseout = popUpMenuItemOff;
      if (isMinNS4) {
        this.items[i].dmmyLayer.document.index = this.index;
        this.items[i].dmmyLayer.document.itemIndex = i;
        this.items[i].dmmyLayer.document.captureEvents(Event.MOUSEUP);
        this.items[i].dmmyLayer.document.onmouseup = popUpMenuItemClick;
      }
      if (isMinIE4)
        this.items[i].dmmyLayer.onclick = popUpMenuItemClick;
    }
  }

  // Get final height of menu.

  this.height = y + this.border;

  // Finish set up of the base layer.

  if (isMinIE4)
    this.baseLayer.style.height = this.height;
  setBgColor(this.baseLayer, this.bdShColor);
  clipLayer(this.baseLayer, 0, 0, this.width, this.height);
  this.baseLayer.index = this.index;
  this.baseLayer.onmouseout = popUpMenuOff;

  // Finish set up of the bevel layers.

  for (i = 0; i < this.border; i++) {
    clipLayer(bevelLayers[2 * i], i, i, this.width - i, this.height - i);
    setBgColor(bevelLayers[2 * i], this.bdHiColor);
    clipLayer(bevelLayers[2 * i + 1], (i + 1), (i + 1), this.width, this.height);
    setBgColor(bevelLayers[2 * i + 1], this.bdShColor);
    if (isMinIE4) {
      bevelLayers[i].index = this.index;
      bevelLayers[i].onmouseout = popUpMenuOff;
    }
  }

  this.created = true;

  // Create any submenus (acts recursively).

  for (i = 0; i < this.items.length; i++)
    if (this.items[i].subMenu && !this.items[i].subMenu.created)
      this.items[i].subMenu.create();

  window.status = "PopUpMenu: Done.";
  if (this.parentMenu == null)
    setTimeout('window.status = window.defaultStatus', 500);
}

function popUpMenuOpen(x, y) {

  var maxX, maxY;

  if (this.created) {

    // Determine boundries of visible area.

    maxX = getPageScrollX() + getWindowWidth() - this.width;
    maxY = getPageScrollY() + getWindowHeight() - this.height;

    // Adjust for scrollbars if present (NS only).

    if (isMinNS4 && getWindowHeight() < getPageHeight())
      maxX -= popUpMenuScrollbarSize;
    if (isMinNS4 && getWindowWidth() < getPageWidth())
      maxY -= popUpMenuScrollbarSize;

    // If no coordinates were given, set them.

    if ((x == null || y == null)) {

      // If this is a static, top-level menu, use the current menu position.

      if (this.isStatic && !this.isSubmenu) {
        x = this.left;
        y = this.top;
      }

      // Otherwise, use the current mouse coordinates.

      else {
        x = mouseX - (this.border + this.padding);
        y = mouseY - (this.border + this.padding);
      }
    }

    // If this is a submenu, position according to the parent.

    if (this.isSubmenu) {
      x = this.parentMenu.left + this.offsetX;
      y = this.parentMenu.top + this.offsetY;
      if (x > maxX)
        maxX = this.parentMenu.left + this.parentMenu.border - this.width;
      this.parentMenu.openChild = this;
    }

    // If this is a submenu or a menu that is not static, fit it within the
    // browser window.

    if (this.isSubmenu || !this.isStatic) {
      x = Math.max(0, Math.min(maxX, x));
      y = Math.max(0, Math.min(maxY, y));
    }

    // Move menu into position, show it and mark it as open.

    moveLayerTo(this.baseLayer, x, y);
    showLayer(this.baseLayer);
    this.isOpen = true;

    // Save the current position. Need to fudge values for IE for reasons
    // unknown.

    this.left   = x;
    this.top    = y;
    this.right  = x + this.width;
    this.bottom = y + this.height;
    if (isMinIE4) {
      this.left += 2;
      this.top += 2;
    }
  }
}

function popUpMenuClose() {

  if (this.created) {

    // If a child menu is open, close it (will recursively close all child
    // menus).

    if (this.openChild != null) {
      this.openChild.close();
      this.openChild = null;
    }

    // Hide this menu.

    hideLayer(this.baseLayer);
    this.isOpen = false;

    // If this is a submenu, unhighlight the parent item and clear the pointer.

    if (this.isSubmenu) {
      hideLayer(this.parentItem.highLayer);
      this.parentMenu.openChild = null;
    }
  }
}

function popUpMenuSetStatic(flag) {

  // If this is not a submenu, set static flag.

  if (!this.isSubmenu)
    this.isStatic = flag;
}

function popUpMenuMoveTo(x, y) {

  // Move menu and reset position.

  if (this.created)
    moveLayerTo(this.baseLayer, x, y);
  this.left = x;
  this.top = y;
  this.right = this.left + this.width;
  this.bottom = this.top + this.height;
}

function popUpMenuMoveBy(dx, dy) {

  // Move menu and reset position.

  if (this.created)
    moveLayerBy(this.baseLayer, dx, dy);
  this.left += dx;
  this.top += dy;
  this.right += dx;
  this.bottom += dy;
}

function popUpMenuGetzIndex() {

  if (this.created)
    return(getzIndex(this.baseLayer));
  else
    return(0);
}

function popUpMenuSetzIndex(z) {

  var i;

  if (this.created) {
    setzIndex(this.baseLayer, z);

    // Recursively set zIndex of any submenus.

    for (i = 0; i < this.items.length; i++)
      if (this.items[i].subMenu != null)
        this.items[i].subMenu.setzIndex(z);
  }
}

//*****************************************************************************
// Event handlers.
//*****************************************************************************

function popUpMenuOff(e) {

  var menu;
  var wasClosed;

  menu = popUpMenus[this.index];

  // For IE, update the current mouse coordinates and exit if the pointer is
  // still on the menu (because this event may fire even if still on the menu).

  if (isMinIE4) {
    mouseX = window.event.clientX + document.body.scrollLeft;
    mouseY = window.event.clientY + document.body.scrollTop;
    if (mouseX > menu.left  &&
        mouseX < menu.right &&
        mouseY > menu.top  &&
        mouseY < menu.bottom)
      return true;
  }

  wasClosed = false;

  // Is a child menu open?

  if (menu.openChild == null) {

    // No, close this menu if it is not static.

    if (!menu.isStatic) {
      menu.close();
      wasClosed = true;
    }
  }

  else {

    // Yes. Check the current mouse position to see if the pointer is over that
    // child.

    if (mouseX < menu.openChild.left  ||
        mouseX > menu.openChild.right ||
        mouseY < menu.openChild.top   ||
        mouseY > menu.openChild.bottom) {

      // Mouse is not on the child menu. Close this menu if it is not static,
      // otherwise close the child (because it should no longer be active).

      if (!menu.isStatic) {
        menu.close();
        wasClosed = true;
      }
      else
        menu.openChild.close();
    }
  }

  // If this menu was closed, start looping up the menu hierarchy checking each
  // parent. If the mouse is not over the parent, close it. This will continue
  // until all menus are closed or an active or static menu is found.

  while (wasClosed && menu.isSubmenu && !menu.parentMenu.isStatic) {
    wasClosed = false;
    if (mouseX < menu.parentMenu.left  ||
        mouseX > menu.parentMenu.right ||
        mouseY < menu.parentMenu.top   ||
        mouseY > menu.parentMenu.bottom) {
      menu.parentMenu.close();
      wasClosed = true;
      menu = menu.parentMenu;
    }
  }

  return true;
}

function popUpMenuItemOn(e) {

  var menu, item;

  // Get handles to target menu and item.

  menu = popUpMenus[this.index];
  item = menu.items[this.itemIndex];

  // If a child menu is open, close it (it may belong to some other item).

  if (menu.openChild)
    menu.openChild.close();

  // Show the highlight layer for this item.

  showLayer(item.highLayer);

  // If this item has a submenu open it.

  if (item.subMenu)
    item.subMenu.open(null, null);
}

function popUpMenuItemOff(e) {

  var menu, item;

  // Get handles to target menu and item.

  menu = popUpMenus[this.index];
  item = menu.items[this.itemIndex];

  // If this item has a submenu and it is open, exit.

  if (item.subMenu != null && item.subMenu.isOpen)
    return;

  // Hide the highlight layer for this item.

  hideLayer(item.highLayer);
}

function popUpMenuItemClick(e) {

  var menu, item;

  // Get handles to target menu and item.

  menu = popUpMenus[this.index];
  item = menu.items[this.itemIndex];

  // If there is no link, exit.

  if (item.link == "")
    return true;

  // Close the entire chain of menus.

  hideLayer(item.highLayer);
  while(menu.isSubmenu)
    menu = menu.parentMenu;
  if (!menu.isStatic)
    menu.close();
  else if (menu.openChild != null)
    menu.openChild.close();

  // If the link starts with "javascript:" execute the code. Otherwise just
  // link to the URL.

  if (item.link.indexOf("javascript:") == 0)
    eval(item.link);
  else
    window.location.href = item.link;

  return true;
}

//*****************************************************************************
// Code for tracking the mouse position.
//*****************************************************************************

// These variables will hold the current mouse pointer position.

var mouseX = 0;
var mouseY = 0;

// Set up event capturing.

if (isMinNS4)
  document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = popUpMenuGetMousePosition;

function popUpMenuGetMousePosition(e) {

  // Save mouse pointer position.

  if (isMinNS4) {
    mouseX = e.pageX;
    mouseY = e.pageY;
  }
  if (isMinIE4) {
    mouseX = window.event.clientX + document.body.scrollLeft;
    mouseY = window.event.clientY + document.body.scrollTop;
  }
}

//*****************************************************************************
// Code to handle a window resize.
//*****************************************************************************

// These variables are used to determine if a resize event is a true one in
// older releases of NS4.

var origWidth;
var origHeight;

// Reload page in case of a browser resize.

if (isMinNS4) {
  origWidth  = window.innerWidth;
  origHeight = window.innerHeight;
}
window.onresize = popUpMenuReload;

function popUpMenuReload() {

  if (isMinNS4 && origWidth == window.innerWidth && origHeight == window.innerHeight)
    return;

  // For IE, reload on a timer in case the Windows 'Show window contents while
  // dragging' display option is on.

/*  if (isMinIE4)
    setTimeout('window.location.href = window.location.href', 2000);
  else
    window.location.href = window.location.href;
*/
}
