currentDiv = null;

function redoMenus(event) {

  //get element
  var element;
  if (!event) var event = window.event;
  if (event.target) {
    element = event.target;
  } else if (event.srcElement) {
    element = event.srcElement;
  }
  if (element.nodeType == 3) // defeat Safari bug
      element = element.parentNode;


  //ok, now we have the clicked element.  the plan is to close all divs, the open 'em up in the chain.

  closeAll();
  openMenu(element);

  return false;

}

function closeAll() {
  var containerTable = document.getElementById("mainContent");
  var divTags = containerTable.getElementsByTagName("DIV");
  for (var i = 0; i < divTags.length; i++) {
    if (divTags.item(i).parentNode.parentNode.tagName == "TD") {
      divTags.item(i).style.display = 'none';
      childDivs = getRecursiveDivs(divTags.item(i));
      for (var j = 0; j < childDivs.length; j++) {
        childDivs[j].style.display = 'none';
      }
    }
  }
}

function openMenu(element) {

  //ascend to parent div
  var parentDiv = element;
  while (parentDiv.tagName != 'DIV') {
    parentDiv = parentDiv.parentNode;
  }

  grandparent = parentDiv.parentNode;
  if (grandparent.tagName != "TD") {
    showChildren(grandparent);
  }
  showChildren(parentDiv);


  //determine whether to open or close immediate children
  if (!parentDiv.isOpened) {

    for (var i = 0; i < parentDiv.childNodes.length; i++) {
      showChildren(parentDiv.childNodes.item(i));
    }        
    parentDiv.isOpened = true;
  } else {

    parentDiv.isOpened = false;
  }
  

  //open up through the parent chain
  var parentElement = element;
  while (parentElement != null && parentElement.tagName != "TD") {
    parentElement.style.display = 'block';
    parentElement = parentElement.parentNode;
  }

  //deal with last-opened div
  if (currentDiv != null && currentDiv != parentDiv) {
    while (currentDiv.tagName != "TD") {
      currentDiv.isOpened = false;
      currentDiv = currentDiv.parentNode;
    }
  }

  currentDiv = parentDiv;

  //set top-level divs to unopened
  var containerTable = document.getElementById("mainContent");
  var divTags = containerTable.getElementsByTagName("DIV");
  for (var i = 0; i < divTags.length; i++) {
    if (divTags.item(i).parentNode.tagName == "TD" && divTags.item(i) != parentDiv) {
      divTags.item(i).isOpened = false;
    }
  }

}

function showChildren(element) {
  var children = element.childNodes;
  for (var i = 0; i < children.length; i++) {
    if (children.item(i).nodeType == 1) {
      children.item(i).style.display = 'block';
    }
  }  
}

function closeChildren(element) {
  divs = getRecursiveDivs(element);
  for (var i = 0; i < divs.length; i++) {
    divs[i].style.display = 'none';
  }
}

//assigns an onClick event to each a tag which is a child of an li element.
function initMenus() {

  //make sure the DOM is supported
  if (!document.getElementsByTagName) return;

  //get all div tags
  var containerTable = document.getElementById("mainContent");
  //var divTags = containerTable.getElementsByTagName("DIV");
  var divTags = getRecursiveDivs(containerTable);

  //step through each div tag...
  for (var i = 0; i < divTags.length; i++) {

    var divTag = divTags[i];
    //get children of the div tag that are links
    for (var j = 0; j < divTag.childNodes.length; j++) {

      //if it's an a tag...
      if (divTag.childNodes.item(j).tagName == "A" ) {
        var aTag = divTag.childNodes.item(j);
        if (aTag.href.toLowerCase().indexOf("javascript") >= 0) {
          continue;
        }

        //assign event handler
        aTag.onclick = redoMenus;
      }
    }
  }
}

function getRecursiveDivs(parent) {
  var divTags = parent.getElementsByTagName("DIV");
  var divArray = new Array();
  for (var i = 0; i < divTags.length; i++) {
    divArray.push(divTags.item(i));
  }
  for (var i = 0; i < divTags.length; i++) {
    divArray = divArray.concat(getRecursiveDivs(divTags.item(i)));
  }
  return divArray;
}


window.onload = initMenus;
