var oneMenuOpenAtATime = true;

exmenus_addEvent(window, "load", exmenus_prepareMenus, false); 

//sets default styles and loads onclick event listeners to menus
function exmenus_prepareMenus() {
  var possibleMenus = document.getElementsByTagName('UL'); //get all ul's in document
  
  for (var ulCtr = 0; ulCtr < possibleMenus.length; ulCtr++) {
    if (possibleMenus[ulCtr].className == 'exmenus') { //If ul has 501exmenus class, then load up listeners, etc...
      var menuRoot = possibleMenus[ulCtr]; //obtain root node of menu
  
      //obtain array of its child nodes
      var firstLevel = menuRoot.childNodes;
  
      //For each <li> child node, assign it an onclick listener to toggle_display() and set all of it's children to display: none
      for (var level1Ctr = 0; level1Ctr < firstLevel.length; level1Ctr++) { 
        if (firstLevel[level1Ctr].tagName == 'LI') {
          //exmenus_addEvent(firstLevel[level1Ctr], "click", exmenus_toggle_display, false);
          //firstLevel[level1Ctr].style.cursor = 'pointer';
          var secondLevel = firstLevel[level1Ctr].childNodes;
          for (var level2Ctr = 0; level2Ctr < secondLevel.length; level2Ctr++) {
            if (secondLevel[level2Ctr].tagName == 'A') {
              exmenus_addEvent(secondLevel[level2Ctr], "click", exmenus_toggle_display, false);
              secondLevel[level2Ctr].style.cursor = 'pointer';
            }
            if (secondLevel[level2Ctr].tagName == 'UL') {
              secondLevel[level2Ctr].style.display = 'none';
            }
          }
        }
      }
    }
  }
}

//Adds event listener - Cross Browser
function exmenus_addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}

//Toggles Display of child ul
function exmenus_toggle_display(e) {
	//Obtain target of toggle event
  if (e.target) {
    node = e.target;
  } else {
    node = e.srcElement;
  }

	//Jump up the DOM until you get the <a> tag of the menu item.
  while (node.tagName != 'A' || node.parentNode.parentNode.className != 'exmenus') {
    node = node.parentNode;
  }

	//Find Submenu Node by parsing children of parent of node that was activated by toggle event
  children = node.parentNode.childNodes;
  for (var childCtr = 0; childCtr < children.length; childCtr++) {
    if (children[childCtr].tagName == 'UL') {
			subMenuNode = children[childCtr];
			subMenuState = subMenuNode.style.display;
    }
  }

	if (oneMenuOpenAtATime == true) {
		//Find Root Node of this menu and hide all it's submenus
		rootNode = node.parentNode;
		//Jump up the DOM until you get to the root <ul> of this menu.
		while (rootNode.tagName != 'UL' || rootNode.className != 'exmenus') {
			rootNode = rootNode.parentNode;
		}
		exmenus_hideallsubmenus(rootNode);
	}

	//hide/show the specific submenu that was clicked on depending on whether it was previously visible/hidden.
  subMenuNode.style.display = (subMenuState == 'none') ? 'block' : 'none';  
}

//Hides all submenus of a menu
function exmenus_hideallsubmenus(rootNode) {
	//obtain array of its child nodes
  var firstLevel = rootNode.childNodes;

  //For each <li> child node, set all of it's children to display: none
  for (var level1Ctr = 0; level1Ctr < firstLevel.length; level1Ctr++) { 
    if (firstLevel[level1Ctr].tagName == 'LI') {
      var secondLevel = firstLevel[level1Ctr].childNodes;
      for (var level2Ctr = 0; level2Ctr < secondLevel.length; level2Ctr++) {
        if (secondLevel[level2Ctr].tagName == 'UL') {
          secondLevel[level2Ctr].style.display = 'none';
        }
      }
    }
  }
}