function isMenuOpen() {
  var menuNodes = document.getElementById('menu').getElementsByTagName('LI');
  for(var i=0; i < menuNodes.length; i++) {
    if(menuNodes[i].className.match(/over/)) {
      return true;
    }
  }
  return false;
}

function openDefaultTree() {
  if(!isMenuOpen()) {
    for(var i=0; i < document.getElementById('menu').defaultTree.length; i++) {
      document.getElementById('menu').defaultTree[i].className = document.getElementById('menu').defaultTree[i].className.replace('over', '') + ' over';
    }
  }
}

function closeDefaultTree() {
  for(var i=0; i < document.getElementById('menu').defaultTree.length; i++) {
    document.getElementById('menu').defaultTree[i].className = document.getElementById('menu').defaultTree[i].className.replace('over', '').replace(/\s+$/, '');
  }
}

function closeAllNodes() {
  elements = document.getElementById('menu').getElementsByTagName('LI');
  for(var i=0; i<elements.length; i++) {
    elements[i].className = elements[i].className.replace('over', '').replace(/\s+$/, '');
  }
}

function buildNodes(rootNode, nodeId) {
  if (rootNode.nodeType == 1) {
    if ((rootNode.nodeName == 'UL' || rootNode.nodeName == 'OL') && rootNode.parentNode.nodeName == 'LI') {
      nodeId++;
      rootNode.parentNode.id = 'menuNode'+nodeId;
      rootNode.parentNode.onclick=function() {
        if(this.className.match(/over/)) {
          return true;
        }
        if(this.parentNode.parentNode.id == 'menu') {
          closeDefaultTree();
          closeAllNodes();
          this.className=this.className.replace('over', '').replace(/\s+$/, '') + ' over';
          return false;
        }
        return true;
      }
    }
  }
  for(var i=0; i < rootNode.childNodes.length; i++) {
    nodeId = buildNodes(rootNode.childNodes[i], nodeId);
  }
  return nodeId;
}

buildMenu = function() {
  if(document.getElementById) {
    document.getElementById('menu').defaultTree = new Array();
    buildNodes(document.getElementById('menu'), 0);
    menuLinks = document.getElementById('menu').getElementsByTagName('a');
    for(var i=0; i < menuLinks.length; i++) {
      if(menuLinks[i].className.match(/active/) || menuLinks[i].parentNode.className.match(/active/)) {
        if(menuLinks[i].className.match(/active/)) {
          menuLinks[i].className='current';
        }
        if(menuLinks[i].parentNode.className.match(/active/)) {
          menuLinks[i].parentNode.className='current';
        }
        document.getElementById('menu').defaultTree.push(menuLinks[i].parentNode);
      }
    }
    openDefaultTree();
  }
}
