
/* ///////////////////////////////////////////////////////////
  This is a modified version of:

  Expandable Listmenu Script 
  Thomas Bakketun / http://www.bakketun.net/listmenu/
  Based on script by: Daniel Nolan http://www.bleedingego.co.uk/webdev.php
/////////////////////////////////////////////////////////// */

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]);
      r[r.length] = nodes[i];
    
    }
  }
  return r;
}

function createA(menu) {
  var a, text;
  text = menu.firstChild;
  a = document.createElement("span");
  a.className = "titlewrap";
  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) 
			{
				createA(item);
				a = document.createElement("A");
				a.href = "#";
				plus = document.createElement("SPAN");
				plus.className = "iconholder";
				plus.innerHTML = "";
				a.appendChild(plus);
				item.insertBefore(a, item.firstChild);
			} else {
				temp = a;
				a = document.createElement("A");
				a.href = "#";
				plus = document.createElement("SPAN");
				plus.innerHTML = "";
				a.appendChild(plus);
				item.insertBefore(a, item.firstChild);
			}
			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";
	}
	items[items.length-1].className +=' last'; //preserve the className, but add class="last" to the last node...
	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];
  //getChildNodes(menu, "A")[1] -> to modify the text-link itself
  if (a && ul) {
    if (open) {
      a.className = "treeopen";
      ul.style.display = "block";
    } else {
      a.className = "treeclosed";
      ul.style.display = "none";
    }
  }
}

addOnLoad("initMenus");
