<!-- saved from url=(0014)about:internet -->
// BACKWARD COMPATIBILITY TWEEKS start
// array push function for shit browsers (like IE 5.5)
function Array_push() {
  var A_p = 0
    for (A_p = 0; A_p < arguments.length; A_p++) {
      this[this.length] = arguments[A_p]
    }
  return this.length
    }
if (typeof Array.prototype.push == "undefined") {
  Array.prototype.push = Array_push
    }
// BACKWARD COMPATIBILITY TWEEKS end

/*
 * Copyright 2006, Nanasoft. All rights reserved.
 *
 * NANASOFT'S VERTICAL MENU (ns_vertmenu)
 * version 0.1.0
 *
 * Compatible with all browsers supporting javascript 1.1+
 * Related files: menu.css, menu-ie.css
 */
// display mode for uls if not none (inline || block)
/* default it set in main.xsl
   var dmode = 'block';
*/

// id of the menu's main div
var contendivname = 'menuframe';

// classname of the main ul
var mainulclname = "mainUl";

// triggerable uls start in this depth (if not 0, display must be not none for this depth uls)
/* default it set in main.xsl
   var startdepth = 0;
*/

// classname for trigger a when show
var showclassname = 'show';

// classname for trigger a when hide
var hideclassname = 'hide';

/* Trigger menu action
 *
 * if the ul that corresponds to the trigger has diplay:none the
 * method shows it and closes all non-parent and non-descendant uls
 * else the method closes the corresponding ul and all descandant uls
 */
function ns_vertmenuTrigger(element) {
  // trigger element id
  var elementId = element.id
    // trigger element's content holder id
    var ulId = elementId + '-content'
    // main menu DIV id
    var contentdiv = document.getElementById(contendivname);

  // if content holder not found return
  if (!document.getElementById(ulId))
    return;
  // content holder element (ul)
  var uln = document.getElementById(ulId);
  if (uln.style.display == "none") {
    // triggered action: show

    // show contentholder
    if (ns_vertmenuCheckDepth(uln)) {
      uln.style.display = dmode;
      ns_vertmenuChTriggerClass(uln.id, 'show');
    }
    // hide all non-parent and non-descendant contentholders
    var keepArray = new Array();
    keepArray.push(uln.id);
    // get all descandant uls id
    var descendants = uln.getElementsByTagName('UL');
    for (var i = 0, o; o = descendants[i]; i++) {
      keepArray.push(descendants[i].id);
    }
    // get all parent uls id
    keepArray = ns_vertmenuGetParentUlIds(uln, keepArray);

    // get all uls in contentdiv
    var alluls = contentdiv.getElementsByTagName('UL');
    for (var i = 0, o; o = alluls[i]; i++) {
      //process only if ul has id
      if (o.id) {
	// check if the ul is in the keep array
	var check = false;
	for (var j = 0, u; u = keepArray[j]; j++) {
	  if (o.id == keepArray[j]) {
	    check = true;
	  }
	}
	if (check == false && o.style.display != "none" && ns_vertmenuCheckDepth(o)) {
	  o.style.display = "none";
	  ns_vertmenuChTriggerClass(o.id, 'hide');
	}
      }
    }

  } else {
    // triggered action: hide

    // hide contentholder
    if (ns_vertmenuCheckDepth(uln)) {
      uln.style.display="none";
      ns_vertmenuChTriggerClass(uln.id, 'hide');
    }
    // hide all child uls (content holders)
    ns_vertmenuCloseChilds(uln);
  }
}

// recursive function to hide all descendant ul element
function ns_vertmenuCloseChilds(element) {
  var childs = element.childNodes;
  for (var i = 0, o; o = childs[i]; i++) {
    if (childs[i].nodeName == "UL" && childs[i].style.display != "none" && ns_vertmenuCheckDepth(o)) {
      childs[i].style.display = "none";
      ns_vertmenuChTriggerClass(childs[i].id, 'hide');
    }
    ns_vertmenuCloseChilds(childs[i]);
  }
}

// recursive function to search all parent uls
function ns_vertmenuGetParentUlIds(element, keepArray) {
  if (element.parentNode.id == contendivname) {
    return keepArray;
  }
  var curel = element.parentNode;
  if (curel.nodeName == "UL") {
    keepArray.push(curel.id);
  }
  keepArray = ns_vertmenuGetParentUlIds(curel, keepArray);

  return keepArray;
}

/* checks that the given ul element's depth in the menu is
 * greater than startdepth
 * return true if element is triggerable (depth is greater than startdepth)
 */
function ns_vertmenuCheckDepth(element) {
  depth = ns_vertmenuCheckDepthHelper(element.parentNode, 0);
  if (depth < startdepth)
    return false;
  else
    return true;
}

// counts the elements depth, toplevel ul are the one with classname = mainulclname
function ns_vertmenuCheckDepthHelper(element, depth) {
  if (element.nodeName == "UL") {
    if (element.className == mainulclname) {
      return depth;
    }
    if (element.id) {
      depth++;
    }
  }
  depth = ns_vertmenuCheckDepthHelper(element.parentNode, depth);
  return depth;
}

// gets the trigger id by contentholder's id and changes the class corresponding to action
function ns_vertmenuChTriggerClass(id, action) {
  var ilen = id.length;
  var subpart = ilen-8;
  if (subpart > 0) {
    var triggerid = id.substring(0, subpart);
    var trigger = document.getElementById(triggerid);
    var curclassname = trigger.className.split('-');

    if (curclassname.length > 1) {
      var hcl = curclassname[0] + "-" + hideclassname;
      var scl = curclassname[0] + "-" + showclassname;
    } else {
      var hcl = hideclassname;
      var scl = showclassname;
    }

    if (action == 'hide' && trigger.className != hcl) {
      trigger.className = hcl;
    }
    if (action == 'show' && trigger.className != scl) {
      trigger.className = scl;
    }
  } else {
    return false;
  }
}
