  // create menu manager object .
  function TmxmenuManager()
  {
    // array to hold list of menus in a page
    this.trappedMouse = false;
    this.menus=new Array();
    this.mxActive = true;
    this.mxTimeout = 0;
    this.mxActiveMenu = null;
    this.mxActiveItem = null;
    this.mxLastItemOut = null;
  }

  var mxmenuManager = new TmxmenuManager();

  // Add mxmenu object to menu
  TmxmenuManager.prototype.addMenu = function(AMenu)
  {
    if (AMenu)
    {
      this.menus[this.menus.length]=AMenu;
      if (!this.trappedMouse)
      {
        documentX.events.addOnMouseMove(mxmenuMouseMove);
        documentX.events.addOnScroll(mxmenuOnScroll);
        documentX.events.addOnResize(mxmenuWinResize);
        this.trappedMouse = true;
      }
    }
  }

  TmxmenuManager.prototype.activate = function(AActive)
  {
    this.mxActive = AActive;
    var col = documentX.getElementsByTagName('SELECT');
    if (col && (col.length > 0)) {
      var i;
      for (i=0;i<col.length;i++) {
        if (AActive) {
          if ((!col[i].isMxMenuSelect) && ((col[i].style.visibility != "hidden") || (col[i].style.display != "none"))) {
            documentX.hideElement(col[i]);
            col[i].isMenuMgrHidden = true;
          }
        } else {
          if (col[i].isMenuMgrHidden) {
            documentX.showElement(col[i]);
          }
        }
      }
    }
  }

  // De-activeate/hide all menus
  TmxmenuManager.prototype.deactivateAll = function()
  {
    if (!this.mxActive) {return;}
    var i,mn;
    for (i=0;i<this.menus.length;++i)
    {
      mn = this.menus[i];
      if (mn)
      {
        mn.deactivateAll();
      }
    }
    this.mxActiveMenu = null;
    this.mxActiveItem = null;
    this.mxLastItemOut = null;
    this.activate(false);
  }

  TmxmenuManager.prototype.doOnWinResize = function()
  {
    var i,mn;
    for (i=0;i<this.menus.length;++i)
    {
      mn = this.menus[i];
      if (mn)
      {
        mn.doOnWinResize();
      }
    }
  }

  TmxmenuManager.prototype.doOnScroll = function()
  {
    var i,mn;
    for (i=0;i<this.menus.length;++i)
    {
      mn = this.menus[i];
      if (mn) {
        mn.doOnScroll();
      }
    }
  }

  var mxmenuOutTimer = 0;

  function mxmenuClick(evt) {
    if (!evt) return;
    var ele;
    if (evt.isxEvent) {
      ele = evt.target;
    } else {
      ele = evt;
    }
    if (!ele) return;
    if (ele.mxmenu) {
      // process the mouse move for the menu
      clearTimeout(mxmenuOutTimer);
      //clearTimeout(this.mxTimeout);
      if (mxmenuManager.mxActiveMenu != ele.mxmenu) {
        mxmenuManager.mxActive = false;
        timeOutMenus();
      }
      ele.mxmenu.mxTracking = true;
      mxmenuMouseMove(ele);
    }
  }

  function mxmenuMouseMove(evt) {
    if (!evt) return;
    var ele;
    if (evt.isxEvent) {
      ele = evt.target;
    } else {
      ele = evt;
    }
    if (!ele) return;
    // if mouse moved over element in a menu .
    if (ele.mxmenu)
    {
      // process the mouse move for the menu
      clearTimeout(mxmenuOutTimer);
      //clearTimeout(this.mxTimeout);
      if (mxmenuManager.mxActiveMenu != ele.mxmenu) {
        mxmenuManager.mxActive = false;
        timeOutMenus();
      }

      mxmenuManager.activate(true);
      mxmenuManager.mxActiveMenu = ele.mxmenu;
      mxmenuManager.mxActiveItem = ele;
      ele.mxmenu.doMouseMove(evt);
    }
    else {
      // mouse moved on element not in a menu . Deactivate all menus .
      //if (mxmenuManager.mxActive) {
      //  clearTimeout(this.mxTimeout);
      //  this.mxTimeout = setTimeout("javaScript: timeOutMenus();",1000);
      //  mxmenuManager.mxActive = false;
      //}
    }
  }

  function mxmenuMouseOut(oEvent) {
    clearTimeout(mxmenuOutTimer);
    mxmenuManager.mxLastItemOut = oEvent;
    mxmenuOutTimer = setTimeout('javaScript: mxmenuTimeOutCheck();',1000);
  }

  function mxmenuTimeOutCheck() {
    if (mxmenuManager.mxLastItemOut == mxmenuManager.mxActiveItem) {
      mxmenuManager.mxActive = false;
      timeOutMenus();
    }
  }

  function timeOutMenus() {
    if (!mxmenuManager.mxActive) {
      mxmenuManager.mxActive = true;
      mxmenuManager.deactivateAll();
    }
  }

  function mxmenuWinResize() {
    if (mxmenuManager) {
      mxmenuManager.doOnWinResize();
    }
    mxmenuOnScroll();
  }

  function mxmenuOnScroll() {
    if (mxmenuManager) {
      mxmenuManager.doOnScroll();
    }
  }
