function xMenu7(sUlId, aUlClasses, aLiClasses, sLiOverClass, sLiOutClass, iLabelSpacing) // Object Prototype
{
  // Public Methods
  this.paint = function()
  {
    open();
    var data = {x0:0, x1:0, p:main_ul};
    xWalkUL(main_ul, data,
      function(p,li,c,d,lvl) {
        var a = xFirstChild(li, 'a');
        if (lvl == 0) {
          xLeft(li, d.x0);
          d.x0 += a.offsetWidth + iLabelSpacing;
        }
        else if (lvl == 1) {
          if (p != d.p) {d.x1 = 0; d.p = p;}
          xWidth(p, main_ul.offsetWidth);
          var x = li.offsetParent.offsetParent.offsetLeft;
          xLeft(p, -x);
          xLeft(li, d.x1 + x);
          d.x1 += a.offsetWidth + iLabelSpacing;
        }
        else if (lvl == 2) {
          xWidth(p, p.parentNode.offsetWidth); // for IE
          xHeight(li, a.offsetHeight); // for IE6
        }
        return true;
      }
    );
    close();
  }; // end paint
  // Private Properties
  var _i = this;
  var main_ul = xGetElementById(sUlId);
  // Private Methods
  function close()
  {
    xRemoveEventListener(document, 'mousemove', close, false);
    xWalkUL(main_ul, null, function(p,li,c) {if (c) {c.style.display = 'none';} return true;});
  }
  function open()
  {
    xWalkUL(main_ul, null, function(p,li,c) {if (c) {c.style.display = 'block';} return true;});
  }
  function aMouseover()
  {
    close();
    var li = this.parentNode;
    var ul = li.xmChildUL ? li.xmChildUL : li.parentNode;
    while (ul && ul != main_ul) {
      ul.style.display = 'block';
      ul = ul.parentNode.parentNode;
    }
    xAddEventListener(document, 'mousemove', close, false);
  }
  function liMouseover() {xRemoveClass(this, sLiOutClass); xAddClass(this, sLiOverClass);}
  function liMouseout() {xRemoveClass(this, sLiOverClass); xAddClass(this, sLiOutClass);}
  // Constructor Code
  var data = {x0:0, x1:0, p:main_ul};
  xAddClass(main_ul, aUlClasses[0]);
  xWalkUL(main_ul, data,
    function(p,li,c,d,lvl) {
      var a = xFirstChild(li, 'a');
      a.onmouseover = aMouseover;
      xAddClass(li, aLiClasses[lvl]);
      xAddClass(li, sLiOutClass);
      if (c) {xAddClass(c, aUlClasses[lvl+1]);}
      li.xmParentUL = p;
      li.xmChildUL = c;
      li.onmouseover = liMouseover;
      li.onmouseout = liMouseout;
      return true;
    }
  );
  _i.paint();
  xAddEventListener(main_ul, 'mousemove', function(e){xStopPropagation(e);}, false);
  main_ul.style.visibility = 'visible';
  xAddEventListener(window, 'resize', function(){_i.paint();}, false);
}

