function rollOnMenuItem(item, toShow, backgroundUrl, event) {
  item.style.backgroundPosition = "right";
  item.style.backgroundImage = "url(" + backgroundUrl + ")";
  item.style.color = "#f2f2f2";
  document.getElementById(toShow).style.visibility = "visible";
}

function rollOffMenuItem(item, toHide, event) {
  item.style.backgroundImage = "";
  item.style.color = "Black";
  document.getElementById(toHide).style.visibility = "hidden";
}

function rollOnSubMenuParent(item, subMenuId, backgroundUrl, event) {
  item.style.backgroundPosition = "right";
  item.style.backgroundImage = "url(" + backgroundUrl + ")";
  item.style.color = "#f2f2f2";
  document.getElementById(subMenuId).style.visibility = "visible";
}

function rollOffSubMenuParent(item, subMenuId, event) {
  var table = document.getElementById(subMenuId + "_table");
  if (hitTest(event, table) || hitTest(event, item)) {
    endEvent(event);
    return;
  }
  
  item.style.backgroundImage = "";
  item.style.color = "Black";
  document.getElementById(subMenuId).style.visibility = "hidden";
}

function rollOnTopMenu(menuId, event) {
    document.getElementById(menuId).style.visibility = "visible";
}

function rollOffTopMenu(menuId, event) {
  document.getElementById(menuId).style.visibility = "hidden";
}

function gotoUrl(url, event) {
    window.location = url;
    endEvent(event);
}

function hitTest(event, element) {
  // Calculate x, y relitave to the menu
  var left = 0;
  var top = 0;
  offset = element;
  while (offset != null) {
    left += offset.offsetLeft;
    top += offset.offsetTop;
    offset = offset.offsetParent;
  }
  return ((left + 2 <= event.clientX && event.clientX < left + element.clientWidth - 2 &&
             top + 2 <= event.clientY && event.clientY < top + element.clientHeight - 2));
}

function endEvent(event) {
  if (window.event) {
    event.returnValue = false;
    event.cancelBubble = true;
  } else {
    event.preventDefault();
    event.stopPropagation();
  }
}

///////////////////////////////////////////////////////////////////////////////
// Browser stuff
var g_browser = new Browser();

function registerBrowser(name, version) {
  g_browser = new Browser(name, version);
}

function Browser() {
  this.name = "";
  this.version = 0;
}

function Browser(name, version) {
  this.name = name;
  this.version = version;
  if (this.name == "IE") {
    // Account for IE bugs in the IE overrides
    hitTest = function(event, element) {
      // Calculate x, y relitave to the item
      var left = event.offsetX;
      var top = event.offsetY;
      var offset = event.srcElement;
      while (offset != null) {
        left += offset.offsetLeft;
        top += offset.offsetTop;
        offset = offset.offsetParent;
      }
      offset = element;
      while (offset != null) {
        left -= offset.offsetLeft;
        top -= offset.offsetTop;
        offset = offset.offsetParent;
      }
      return ((left >= 0 && left < element.clientWidth &&
               top >= 0 && top < element.clientHeight));
    };

    var oldRollOffTopMenu = rollOffTopMenu;
    rollOffTopMenu = function(menuId, event) {
      var table = document.getElementById(menuId + "_table");
      if (hitTest(event, table))
        return;

      oldRollOffTopMenu(menuId, event);
    };

    var oldRollOffSubMenuParent = rollOffSubMenuParent;
    rollOffSubMenuParent = function(item, subMenuId, event) {
      var table = document.getElementById(subMenuId + "_table");
      if (hitTest(event, table) || hitTest(event, item)) {
        endEvent(event);
        return;
      }

      oldRollOffSubMenuParent(item, subMenuId, event);
    };

    var oldRollOffMenuItem = rollOffMenuItem;
    rollOffMenuItem = function(item, toHide, event) {
      if (hitTest(event, item)) {
        endEvent(event);
        return;
      }

      oldRollOffMenuItem(item, toHide, event);
    }
    
  }
}