function initMenus() {
  if (!document.getElementsByTagName) return;

  var singleopen, keepopen
  var menus = document.getElementsByTagName("UL");
  for (var i = 0; i < menus.length; i++) {
    if (menus[i].className.indexOf("treemenu") > -1) {
      singleopen = menus[i].className.indexOf("singleopen") > -1
      keepopen = menus[i].className.indexOf("keepopen") > -1
      initMenu(menus[i], singleopen, keepopen);
    }
  }
  document.body.style.display = "";
}

function getChildNodes(element, tag) {
  var r = new Array();
  var nodes = element.childNodes;
  for (var i = 0; i<nodes.length; i++) {
    if (nodes[i].tagName == tag) {
      r.push(nodes[i]);
    }
  }
  return r;
}

function createA(menu) {
  var a, text;
  text = menu.firstChild;
  a = document.createElement("A");
  a.href = "#";
  menu.replaceChild(a, text);
  a.appendChild(text);
  return a;
}

function initMenu(menu, singleopen, keepopen) {
  var item, a, open;
  var items = getChildNodes(menu, "LI");
  open = false;
  for (var i = 0; i<items.length; i++) {
    item = items[i];
    a = getChildNodes(item, "A")[0];
    var submenu = getChildNodes(item, "UL")[0];
    if (submenu) {
      if (!a) {
        a = createA(item);
      }
      open = initMenu(submenu, singleopen, keepopen) || open;
      a.onclick = function() { return menuonclick(this, singleopen); }
    } else {
      if (a) open = open || (keepopen && a.href == window.location);
    }
    if (item.className == "treenodeopen") setMenu(item, true);
    open = open || item.className == "treenodeshow";
  }
  setMenu(menu.parentNode, open);
  return open;
}

function menuonclick(a, singleopen) {
  setMenu(a.parentNode, a.className == "treeclosed");
  var menus = getChildNodes(a.parentNode.parentNode, "LI");
  if (singleopen) {
    for (var i = 0; i<menus.length; i++) {
      if (menus[i] != a.parentNode) {
        setMenu(menus[i], false);
      }
    }
  }
  return false;
}

function setMenu(menu, open) {
  var a = getChildNodes(menu, "A")[0];
  var ul = getChildNodes(menu, "UL")[0];
  if (a && ul) {
    if (open) {
      a.className = "treeopen";
      ul.style.display = "block";
    } else {
      a.className = "treeclosed";
      ul.style.display = "none";
    }
  }
}

window.onload = initMenus;