/*
	Expandable Listmenu Script
	Author : Daniel Nolan
	http://www.bleedingego.co.uk/webdev.php
*/

var openMenus = new Hash();
var lastMenus = getCookie("openMenus");
if (lastMenus) {
    lastMenus = lastMenus.evalJSON(true);
    if (lastMenus) {
	openMenus = new Hash(lastMenus);
    }
}

function initMenus() {
    if (!document.getElementsByTagName) return;
	
    var aMenus = document.getElementsByTagName("LI");
    for (var i = 0; i < aMenus.length; i++) {
	var mclass = aMenus[i].className;
	if (mclass.indexOf("treenode") > -1) {
	    var whichFolder = mclass.split(" ").detect(function (s) {
							   return s.match(/^folder-\d+$/);
						       }
						       );
	    var submenu = aMenus[i].childNodes;
	    for (var j = 0; j < submenu.length; j++) {
		if (submenu[j].tagName == "A") {
		    submenu[j].onclick = function() {
			var thisFolder = this.parentNode.className.split(" ").detect(function (s) { return s.match(/^folder-\d+$/) });
			openMenus.set(thisFolder, openMenus.get(thisFolder) ? 0 : 1);
			setCookie("openMenus", openMenus.toJSON(), 0, "/");
			var node = this.nextSibling;
			while (node != null) {
			    if (node.tagName == "UL") {
				var d = (node.style.display == "none");
				node.style.display = (d) ? "block" : "none";
				this.className = (d) ? "treeopen" : "treeclosed";
				return false;
			    }
			    node = node.nextSibling;
			}
			return false;
		    }

		    submenu[j].className = (mclass.indexOf("open") > -1 ||
					    openMenus.get(whichFolder)
					   ) ? "treeopen" : "treeclosed";
		}

		if (submenu[j].tagName == "UL") {
		    submenu[j].style.display = (mclass.indexOf("open") > -1 ||
						openMenus.get(whichFolder)
						) ? "block" : "none";
		}
	    }
	}
    }
}

function makeDoubleDelegate(function1, function2) {
    return function() {
        if (function1)
            function1();
        if (function2)
            function2();
    }
}

window.onload = makeDoubleDelegate(window.onload, initMenus);

