var toggleMenu = {
	init : function(sContainerClass, sHiddenClass) {
		// Check for DOM support
		if (!document.getElementById || !document.createTextNode) {return;}
		var arrMenus = this.getElementsByClassName(document, 'ul', sContainerClass);
		var arrSubMenus, oSubMenu, oLink;
		for (var i = 0; i < arrMenus.length; i++) {
			arrSubMenus = arrMenus[i].getElementsByTagName('ul');
			for (var j = 0; j < arrSubMenus.length; j++) {
				oSubMenu = arrSubMenus[j];
				oLink = oSubMenu.parentNode.getElementsByTagName('a')[0];
				oLink.className = "closedMarker";
				oLink.onclick = function() {
					toggleMenu.hideAll(arrSubMenus, this.parentNode.getElementsByTagName('ul')[0], sHiddenClass);
					toggleMenu.closeAll(arrSubMenus, this, "closedMarker");
					toggleMenu.toggle(this.parentNode.getElementsByTagName('ul')[0], sHiddenClass);
					toggleMenu.toggleOpenClosed(this);
					return false;
				}
				this.toggle(oSubMenu, sHiddenClass);
			}
		}
	},
	
	toggle : function(el, sHiddenClass) {
		var oRegExp = new RegExp("(^|\\s)" + sHiddenClass + "(\\s|$)");
		// Add or remove the class name that hides the element
		el.className = (oRegExp.test(el.className)) ? el.className.replace(oRegExp, '') : el.className + ' ' + sHiddenClass;
	},
	
/* forces all menus to be hidden */
	hideAll : function(arrSubMenus, clickedMenu, sHiddenClass) {
		for (var i=0; i<arrSubMenus.length; i++) {
			var oSubMenu = arrSubMenus[i];
			if (oSubMenu != clickedMenu) {
				var oRegExp = new RegExp("(^|\\s)" + sHiddenClass + "(\\s|$)");
				if (!oRegExp.test(oSubMenu.className)) {
					oSubMenu.className += (' ' + sHiddenClass);
				}
			}
		}
	},
	
/* forces all menus to show the closed icon */
	closeAll : function(arrSubMenus, clickedLink, sClosedClass) {
		for (var i=0; i<arrSubMenus.length; i++) {
			var oSubMenu = arrSubMenus[i];
			var oLink = oSubMenu.parentNode.getElementsByTagName('a')[0];
			if (oLink != clickedLink) {
				var oRegExp = new RegExp("(^|\\s)" + sClosedClass + "(\\s|$)");
				if (!oRegExp.test(oLink.className)) {
					toggleMenu.setClosed(oLink);
				}
			}
		}
	},
	
/* toggles the open and closed marker on a top-level menu item */
	toggleOpenClosed : function(el) {
		el.className = (el.className == "openMarker") ? "closedMarker" : "openMarker";
	},
	
/* forces a top-level menu item to display the closed marker*/
	setClosed: function(el) {
		el.className = "closedMarker";
	},

/* addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html */
	addEvent : function(obj, type, fn) {
		if (obj.addEventListener)
			obj.addEventListener(type, fn, false);
		else if (obj.attachEvent) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() {obj["e"+type+fn](window.event);}
			obj.attachEvent("on"+type, obj[type+fn]);
		}
	},
	
/*
Written by Jonathan Snook, http://www.snook.ca/jonathan
Add-ons by Robert Nyman, http://www.robertnyman.com
*/
	getElementsByClassName : function(oElm, strTagName, strClassName){
	    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	    var arrReturnElements = new Array();
	    strClassName = strClassName.replace(/\-/g, "\\-");
	    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++){
	        oElement = arrElements[i];      
	        if(oRegExp.test(oElement.className)){
	            arrReturnElements.push(oElement);
	        }   
	    }
	    return (arrReturnElements)
	}
};

toggleMenu.addEvent(window, 'load', function(){toggleMenu.init('menu','hidden');});