
  // global variables
  var menuBorder = 0;
  var menuTopOffset = 10;
  var currentMenu;
  var currentTrigger;

  // these values are used exclusively for the IE4 mac workaround
  var staticNavTop = 138;
  var staticMenuTop = 165;
  var totalNavWidth = 760;
  var navLeftOffset = -10;

  // this function is only used as part of a workaround for IE4 on the mac
  function getMenuXOffset(menuId) {
    if (menuId == 'dropdown_home') { return 23; }
    else if (menuId == 'dropdown_about_palliser') { return 85; }
    else if (menuId == 'dropdown_palliser_wine') { return 199; }
    else if (menuId == 'dropdown_buy_palliser') { return 304; }
    else if (menuId == 'dropdown_global_distribution') { return 403; }
    else if (menuId == 'dropdown_how_to_get_here') { return 548; }
    else if (menuId == 'dropdown_contact_us') { return 671; }
    else { return 0; }
  }

  // display a menu, and hide the previous menu (if any)
  function showMenuById(menuId, triggerElement) {
    if (currentMenu != menuId) {
      clearMenu();
      if (document.getElementById(menuId) != null) {
        currentMenu = menuId;
        currentTrigger = triggerElement;
        // get the new position of the current menu
        if (is_ie4 && is_mac) {
          menuLeft = ((document.body.offsetWidth - totalNavWidth)/2) + getMenuXOffset(menuId) + navLeftOffset;
          menuTop = staticMenuTop;
        }
        else {
          menuLeft = getAbsoluteOffset(triggerElement, false);
          menuTop = ((getAbsoluteOffset(triggerElement, true) + triggerElement.offsetHeight) + menuTopOffset);
        }
        // set up the current menu
        moveElement(document.getElementById(currentMenu), menuLeft, menuTop);
        hideSelectElementsOnCollisionWithElementId(menuId);
        fadeInElement(document.getElementById(currentMenu), 0.25);
      }
    }
  }

  // hides the menu at the level specified
  function clearMenu() {
    if (currentMenu != null) {
      setElementVisibility(document.getElementById(currentMenu), false);
      showSelectElementsOnCollisionWithElementId(currentMenu);
      currentMenu = null;
    }
    if (currentTrigger != null) {
      currentTrigger = null;
    }
  }

  function getMenuLeft(menu, trigger) {
    if (is_ie4 && is_mac) { return (((document.body.offsetWidth - totalNavWidth)/2) + getMenuXOffset(currentMenu) + navLeftOffset); }
    else { return (Math.max(getAbsoluteOffset(trigger, false), getAbsoluteOffset(menu, false)) - menuBorder); }
  }
  function getMenuRight(menu, trigger) {
    if (is_ie4 && is_mac) { return ((((document.body.offsetWidth - totalNavWidth)/2) + getMenuXOffset(currentMenu) + navLeftOffset) + getElementWidth(menu)); }
    else { return ((getAbsoluteOffset(trigger, false) + Math.max(getElementWidth(menu), getElementWidth(trigger))) + menuBorder); }
  }
  function getMenuTop(menu, trigger) {
    if (is_ie4 && is_mac) { return staticNavTop; }
    else { return (getAbsoluteOffset(trigger, true) - menuBorder); }
  }
  function getMenuBottom(menu, trigger) {
    if (is_ie4 && is_mac) { return staticMenuTop + getElementHeight(menu); }
    else { return (Math.max((getAbsoluteOffset(trigger, true) + getElementHeight(trigger)),(getAbsoluteOffset(menu, true) + getElementHeight(menu)))); }
  }

  // capture mouse movement, and if there is menu active, check if we should hide it
  function mouseMove(evt) {
    // get the current position of the cursor
    var cursorX; var cursorY;
    //if (is_ie6up) { cursorX = (event.x + document.documentElement.scrollLeft); cursorY = (event.y + document.documentElement.scrollTop); }
    if (is_ie4up) { cursorX = (event.x + document.body.scrollLeft); cursorY = (event.y + document.body.scrollTop); }
    else if (evt) { cursorX = evt.pageX; cursorY = evt.pageY; }
    // hide any menus that should be hidden
    if (currentTrigger != null) {
      // get the relevant dimensions of the current menu
      if(
      (cursorX < getMenuLeft(document.getElementById(currentMenu), currentTrigger)) ||
      (cursorX > getMenuRight(document.getElementById(currentMenu), currentTrigger)) ||
      (cursorY < getMenuTop(document.getElementById(currentMenu), currentTrigger)) ||
      (cursorY > getMenuBottom(document.getElementById(currentMenu), currentTrigger))) {
        // hide the current menu
        clearMenu();
      }
    }
  }
  // start capturing mouse movement
  document.onmousemove = mouseMove;

  function openLocation(url) {
    if (url != '') {
      window.location = url;
    }
  }
