/* Slashdot's Menu */

var remember = true;   //Remember menu states, and restore them on next visit. (Overrides contractall_default)
var contractall_default = true;   //Should all submenus be contracted by default? (true or false)
var filesdir = "/slashfiles";   //Directory where the images are located.
var bypixels = 3;   //Basicly it's speed.
var mark_current = true;  //  Mark current link
var oneSmOnly = true;    // Allow only one submenu to be opened (when opening one other close automatically)

/* No need to change below. */

var menu, titles, submenus, arrows, heights = new Array();

///// DD added expandall() and contractall() functions /////

function slash_expandall() {
	if (typeof menu != "undefined") {
		for(i = 0; i < Math.max(titles.length, submenus.length); i++){
			titles[i].className = "title";
			arrows[i].src = filesdir + "/expanded.gif";
			submenus[i].style.display = "";
			submenus[i].style.height = heights[i]+"px";
		}
	}
}

function slash_contractall(){
	if (typeof menu != "undefined") {
		for(i = 0; i < Math.max(titles.length, submenus.length); i++){
			titles[i].className = "titlehidden";
			arrows[i].src = filesdir + "/collapsed.gif";
			submenus[i].style.display = "none";
			submenus[i].style.height = 0;
		}
	}
}

///// End DD added functions ///////////////////////////////


function init(){
	menu = getElementsByClassName("sdmenu", "div", document)[0];
	titles = getElementsByClassName("title", "span", menu);
	submenus = getElementsByClassName("submenu", "div", menu);
	arrows = getElementsByClassName("arrow", "img", menu);
	for(i=0; i<Math.max(titles.length, submenus.length); i++) {
		titles[i].onclick = gomenu;
		arrows[i].onclick = gomenu;
		heights[i] = submenus[i].offsetHeight;
		submenus[i].style.height = submenus[i].offsetHeight+"px";
	}
	if(mark_current)
		markCurrent();
	if(remember)
		restore();
	else if (contractall_default) //DD added code
		slash_contractall(); //DD added code
}

function markCurrent() {
	var as = menu.getElementsByTagName("a");
	for(var i = 0; i < as.length; i++) {
		if(as[i].href == document.location.href) {
			as[i].className = "current";
			break;
		}
	}
}

function restore() {
	if(getcookie("menu") != null) {
		var hidden = getcookie("menu").split(",");
		for(var i in hidden) {
			titles[hidden[i]].className = "titlehidden";
			submenus[hidden[i]].style.height = "0px";
			submenus[hidden[i]].style.display = "none";
			arrows[hidden[i]].src = filesdir + "/collapsed.gif";
		}
	} else if(contractall_default) {
		slash_contractall();
	}
}

function gomenu(e) {
	if (!e)
		var e = window.event;
	var ce = (e.target) ? e.target : e.srcElement;
	var sm;
	for(var i = 0; i < titles.length; i++) {
		if(titles[i] == ce || arrows[i] == ce) {
			sm = i;
			break;
		}
	}
	if(parseInt(submenus[sm].style.height) > parseInt(heights[sm])-2) {
		hidemenu(sm);
	} else if(parseInt(submenus[sm].style.height) < 2) {
		titles[sm].className = "title";
		showmenu(sm);
	}
	if(oneSmOnly) {
		for(var i = 0; i < submenus.length; i++) {
			if(i != sm && parseInt(submenus[i].style.height) > parseInt(heights[i])-2)
				hidemenu(i);
		}
	}
}

function hidemenu(sm) {
	var nr = submenus[sm].getElementsByTagName("a").length*bypixels;
	submenus[sm].style.height = (parseInt(submenus[sm].style.height)-nr)+"px";
	var to = setTimeout("hidemenu("+sm+")", 30);
	if(parseInt(submenus[sm].style.height) <= nr) {
		clearTimeout(to);
		submenus[sm].style.display = "none";
		submenus[sm].style.height = "0px";
		arrows[sm].src = filesdir + "/collapsed.gif";
		titles[sm].className = "titlehidden";
	}
}

function showmenu(sm) {
	var nr = submenus[sm].getElementsByTagName("a").length*bypixels;
	submenus[sm].style.display = "";
	submenus[sm].style.height = (parseInt(submenus[sm].style.height)+nr)+"px";
	var to = setTimeout("showmenu("+sm+")", 30);
	if(parseInt(submenus[sm].style.height) > (parseInt(heights[sm])-nr)) {
		clearTimeout(to);
		submenus[sm].style.height = heights[sm]+"px";
		arrows[sm].src = filesdir + "/expanded.gif";
	}
		
		
}

function store() {
	var hidden = new Array();
	for(var i in titles) {
		if(titles[i].className == "titlehidden")
			hidden.push(i);
	}
	putcookie("menu", hidden.join(","), 30);
}

function getElementsByClassName(strClassName, strTagName, oElm){
	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)
}

function putcookie(c_name,value,expiredays) {
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie = c_name + "=" + escape(value) + "; path=/" + ((expiredays==null) ? "" : "; expires="+exdate);
}

function getcookie(c_name) {
	if(document.cookie.length > 0) {
		var c_start = document.cookie.indexOf(c_name + "=");
		if(c_start != -1) {
			c_start = c_start + c_name.length + 1;
			var c_end = document.cookie.indexOf(";",c_start);
			if(c_end == -1)
				c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return null;
}

window.onload = init;
if(remember) window.onunload = store;
