// ######################################################################

// ## flipMenu 5.0.0 (c) J. Reijers
// ## Last modifications: 23 March 2007

// ######################################################################

// ## Degree of indentation from the left.
flipIndentation = "0px";

// ## Padding inbetween menu items.
flipVerticalPadding = "0px";

// ## Margin between the left of the browser and the menu.
flipLeftMargin = "0px";

// ## Margin between the top of the browser and the menu.
flipTopMargin = "0px";

// ## Allow multiple menus to fold out without closing all the other open ones.
flipOpenMultipleMenus = false;

// ## Preserve the current state of the menu (requires cookies).
flipSaveMenuState = true;

// ## Use custom images for bullets
flipImages = false;

// ## Images to use (specify full path)
flipImg_open   = "images/submenu-icon.gif";
flipImg_closed = "images/submenu-icon.gif";
flipImg_static = "images/submenu-icon.gif";

// ## Initialise all flipMenus onload
flipInitOnLoad = true;

// ## Message to display in status bar while loading
flipLoadingMessage = "Loading...";

// ######################################################################

function alterSize(someSize, alterAmount) {
  someSize = String(someSize);
  var tmpNr = parseFloat(someSize.replace(/\D/g, ""));
  var tmpChar = someSize.replace(/\d/g, "");
  return isNaN(tmpNr) ? someSize : ((tmpNr + alterAmount) + tmpChar);
}

isIE = (String(navigator.appVersion).indexOf("MSIE") > -1);
if (!isIE) flipIndentation = alterSize(flipIndentation, -16);
if (!isIE) flipLeftMargin = alterSize(flipLeftMargin, -16);

if (flipImages) {
  aFlipPreloads = [];
  aFlipPreloads[0] = new Image;
  aFlipPreloads[0].src = flipImg_open;
  aFlipPreloads[1] = new Image;
  aFlipPreloads[1].src = flipImg_closed;
  aFlipPreloads[2] = new Image;
  aFlipPreloads[2].src = flipImg_static;
 }

function addEvent(someObj, someEvent, someFunction) {
  if (someObj.addEventListener) { someObj.addEventListener(someEvent, someFunction, true); return true; } else if (someObj.attachEvent) return someObj.attachEvent("on" + someEvent, someFunction); else return false;
}

function openCloseFlip(theItem, newSetting, openParents) {
  if (theItem.flipID) {
    if (openParents) {
      var tmpItem = theItem;
      while (tmpItem.parentElement || tmpItem.parentNode) {
	tmpItem = (tmpItem.parentElement) ? tmpItem.parentElement : tmpItem.parentNode;
	openCloseFlip(tmpItem, newSetting);
      }
    }
    if ((theItem.className == "flipFolderOpen" && newSetting == "closed") || (theItem.className == "flipFolderClosed" && newSetting == "open")) {
      if (!theItem.childrenInitialised) {
	for (var j = 0; j < theItem.childNodes.length; j++) if (theItem.childNodes[j].nodeName == "UL" && !theItem.childNodes[j].initialised) initFlip(theItem.childNodes[j]);
	theItem.childrenInitialised = true;
      }
      theItem.getElementsByTagName("UL")[0].style.display = (newSetting == "open") ? "" : "none";
      theItem.className = newSetting == "open" ? "flipFolderOpen" : "flipFolderClosed";
    }
  }
}

function openFlip(theItem, openParents) {
  openCloseFlip(theItem, "open", openParents);
}

function closeFlip(theItem, closeParents) {
  openCloseFlip(theItem, "closed", closeParents);
}

function toggleFlip(theElement) {
  if (theElement.flipID) {
    var theItem = theElement;
    var isContained = true;
  } else {
    if (theElement && theElement.button > 0) return false;
    var theItem = (isIE) ? event.srcElement : theElement.target;

    var isContained = false;
    if (theItem.className == "flipFolderOpen" || theItem.className == "flipFolderClosed") isContained = true; else while (theItem.parentElement || theItem.parentNode) {
	if (theItem.className == "flipStatic" || theItem.className == "flipFolderOpen" || theItem.className == "flipFolderClosed") {
	  isContained = (theItem.className == "flipFolderOpen" || theItem.className == "flipFolderClosed");
	  break;
	}
	theItem = (theItem.parentElement) ? theItem.parentElement : theItem.parentNode;
      }
  }

  var toOpenFlip = (isContained && theItem.className == "flipFolderClosed");

  if (!flipOpenMultipleMenus && (toOpenFlip || theItem.className == "flipStatic")) {
    if (theItem.parentElement || theItem.parentNode) {
      var parentUL = (theItem.parentElement) ? theItem.parentElement : theItem.parentNode;
      for (var i = 0; i < parentUL.childNodes.length; i++) closeFlip(parentUL.childNodes[i]);
    }
  }

  if (isContained) {
    if (toOpenFlip) openFlip(theItem); else closeFlip(theItem);
  }
}

function setAllFlips(startElement, newSetting) {
  if (typeof startElement == "undefined") var startElement = document;
  if (typeof newSetting == "undefined") var newSetting = "closed";

  var aUL = startElement.getElementsByTagName("UL");
  for (var i = 0; i < aUL.length; i++) {
    var parentFlip = aUL[i].parentElement ? aUL[i].parentElement : aUL[i].parentNode;
    openCloseFlip(parentFlip, newSetting);
  }
}

function openAllFlips(startElement) {
  setAllFlips(startElement, "open");
}

function closeAllFlips(startElement) {
  setAllFlips(startElement, "closed");
}

function initFlip(startElement) {
  if (!document.createElement) return false;

  if (!startElement || !startElement.nodeName) {
    var aUL = document.getElementsByTagName("UL");
    for (var i = 0; i < aUL.length; i++) {
      if (flipLoadingMessage != "") window.status = flipLoadingMessage + " " + parseInt((i / (aUL.length - 1)) * 100, 10) + "%";
      var curUL = aUL[i];
      if (curUL.className == "flipMenu") {
	initFlip(curUL);

	// ## Fix text selecting problem in Mozilla
	curUL.onselectstart = new Function("return false");
	curUL.onmousedown = new Function("return false");
	curUL.onclick = new Function("return true");
      }
    }

    if (flipSaveMenuState) loadMenuState();

    if (flipLoadingMessage != "") window.status = "";
    return true;
  }

  if (startElement.className == "flipMenu") startElement.style.display = "";

  if (!startElement.childNodes || startElement.childNodes.length == 0) return false;

  if (typeof flipIDCur == "undefined") flipIDCur = 0;
  if (!startElement.initialised) {
    var aUL = startElement.getElementsByTagName("UL");
    for (var i = 0; i < aUL.length; i++) aUL[i].style.display = "none";
  }

  for (var i = 0; i < startElement.childNodes.length; i++) {
    var curNode = startElement.childNodes[i];
    if (curNode.nodeName == "LI") {
      flipIDCur++;
      curNode.flipID = flipIDCur;

      var nodeHasChildren = curNode.getElementsByTagName("UL").length > 0;
      if (nodeHasChildren) {
	if (flipImages && curNode.flipClosed) curNode.style.listStyleImage = "url(" + curNode.flipClosed + ")";

	if (curNode.className == null || curNode.className == "") curNode.className = "flipFolderClosed";
      } else {
	curNode.className = "flipStatic";
	if (flipImages && !curNode.style.listStyleImage) {
	  if (!curNode.flipStatic) curNode.flipStatic = flipImg_static;
	  curNode.style.listStyleImage = "url(" + curNode.flipStatic + ")";
	}
      }

      if (!curNode.flipOpen) curNode.flipOpen = flipImg_open;
      if (!curNode.flipClosed) curNode.flipClosed = flipImg_closed;

      if (curNode.flipIsOpen) openFlip(curNode);
    }
  }

  startElement.initialised = true;
}

function rootOfFlip(flipID, startElement) {

  function containsFlip(startElement, flipID) {
    var flipFound = false;
    var i = 0;
    while (i < startElement.childNodes.length && !flipFound) {
      var curNode = startElement.childNodes[i];
      flipFound = (curNode.flipID == flipID) ? true : containsFlip(curNode, flipID);
      i++;
    }
    return flipFound;
  }

  var rootFlip = null;

  if (!startElement || !startElement.nodeName) {
    var aUL = document.getElementsByTagName("UL");
    var i = 0;
    while (rootFlip == null && i < aUL.length) {
      var curUL = aUL[i];
      if (curUL.nodeName == "UL" && curUL.className == "flipMenu") rootFlip = rootOfFlip(flipID, curUL);
      i++;
    }
    return rootFlip;
  }

  if (startElement.childNodes) for (var i = 0; i < startElement.childNodes.length; i++) {
      var curNode = startElement.childNodes[i];
      if (curNode.flipID == flipID || containsFlip(curNode, flipID)) rootFlip = curNode;
    }

  return rootFlip;
}

function getCookie(cookieName) {
  var allCookies = document.cookie;
  var indexStr = allCookies.indexOf(cookieName + "=");
  if (indexStr == -1) return "";
  indexStr = allCookies.indexOf("=", indexStr) + 1;
  var endStr = allCookies.indexOf(";", indexStr);
  if (endStr == -1) endStr = allCookies.length;
  return unescape(allCookies.substring(indexStr, endStr));
}

function inArray(someID, someArray) {
  for (var i = 0; i < someArray.length; i++) if (someArray[i] == someID) return true;
  return false;
}

function getMenuState(startElement) {
  if (!startElement.childNodes || startElement.childNodes.length == 0) return "";

  var openItems = "";
  var aUL = startElement.getElementsByTagName("UL");
  for (var i = 0; i < aUL.length; i++) {
    var curNode = aUL[i];
    var parentFlip = (curNode.parentElement) ? curNode.parentElement : curNode.parentNode;
    if (curNode.style.display == "" && parentFlip.flipID) openItems += " " + parentFlip.flipID;		
  }
  return openItems;
}

function putMenuState(startElement) {
  if (!startElement.childNodes || startElement.childNodes.length == 0) return false;

  var aUL = startElement.getElementsByTagName("UL");
  for (var i = 0; i < aUL.length; i++) {
    var curNode = aUL[i];
    var parentFlip = (curNode.parentElement) ? curNode.parentElement : curNode.parentNode;
    if (inArray(parentFlip.flipID, aOpenItems)) {
      openFlip(parentFlip);
      if (typeof prevFlipRoot == "undefined") {
	var testRoot = rootOfFlip(parentFlip.flipID);
	if (testRoot.flipID == parentFlip.flipID) prevFlipRoot = testRoot;
      }
    }
  }
}

function saveMenuState() {
  if (flipSaveMenuState) {
    var aUL = document.getElementsByTagName("UL");
    for (var i = 0; i < aUL.length; i++) {
      var curUL = aUL[i];
      var curID = curUL.id ? curUL.id : i;
      if (curUL.className == "flipMenu") document.cookie = cookiePrefix + curID + "=" + getMenuState(curUL) + ";";
    }
  }
}

function loadMenuState() {
  var aUL = document.getElementsByTagName("UL");
  for (var i = 0; i < aUL.length; i++) {
    var curUL = aUL[i];
    var curID = curUL.id ? curUL.id : i;
    if (curUL.className == "flipMenu") {
      var savedState = String(getCookie(cookiePrefix + curID));
      if (savedState != "") {
	aOpenItems = savedState.split(" ");
	putMenuState(curUL);
      }
    }
  }

  addEvent(window, "unload", saveMenuState);
}

function clearMenuState(flipMenuID) {
  if (typeof flipMenuID == "undefined") {
    var aUL = document.getElementsByTagName("UL");
    for (var i = 0; i < aUL.length; i++) {
      var curUL = aUL[i];
      var curID = curUL.id ? curUL.id : i;
      if (curUL.className == "flipMenu") document.cookie = cookiePrefix + curID + "=;";
    }
  } else document.cookie = cookiePrefix + flipMenuID + "=;";
}

cookiePrefix = document.location.pathname + "_";

addEvent(document, "click", toggleFlip);
if (flipInitOnLoad) addEvent(window, "load", initFlip);
