var i = 0;
function show(el) {
  Element.setStyle($(el),{'display':'block'});
}
function hide(el) {
  Element.setStyle($(el),{'display':'none'});
}

function walkTheDOM(node, func, level){
  if (typeof(level) == 'undefined') var level=0;
  func(node,level);
  node  = node.firstChild;
  while (node) {
    walkTheDOM(node,func,level+1);
    node=node.nextSibling;
  }
}

menuInitialize  = function(){

  var id_menu = 'menulist_root_main';
  var root  = $(id_menu);

  hasNestedList = function(li){
    if (!li.firstChild) return false;
    node  = li.firstChild;
    while (node) {
      if (node.tagName.toUpperCase() == 'UL') return node;
      node  = node.nextSibling;
    }
    return false;
  }
  
  walkTheDOM(root,
    function(node,level){
      if (node.id == id_menu) return;
      var nestedNode;
      if (node.tagName && (node.tagName.toUpperCase() == 'UL')) {
        Event.observe(node, 'mouseover', function(){
          show(node.id);
          if (level>2) Element.addClassName(node.parentNode,'expanded');
        });
        Event.observe(node, 'mouseout', function(){
          if (level>2) Element.removeClassName(node.parentNode,'expanded');
          hide(node.id);
        });
      } else if (node.tagName && (node.tagName.toUpperCase() == 'LI')) {
          if (nestedNode = hasNestedList(node)){
            if (level==3) Element.addClassName(node,'parent');
            Event.observe(node, 'mouseover', function(){show(nestedNode.id)});
            Event.observe(node, 'mouseout', function(){hide(nestedNode.id)});
          }
      }
    }
  );
  
}