function removeClassName(elem, className) {
	elem.className = elem.className.replace(className, "").trim();
}

function addCSSClass(elem, className) {
	removeClassName (elem, className);
	elem.className = (elem.className + " " + className).trim();
}

String.prototype.trim = function() {
	return this.replace( /^\s+|\s+$/, "" );
}

function inlineTree(treeNode) {
	if (document.getElementById && document.createElement) {
		var thisTree = document.getElementById(treeNode);
		var thisBody = document.getElementsByTagName("body").item(0);
		collapsedNodes = new Array(thisTree.childNodes.length);
		for (j=0; j<thisTree.childNodes.length; j++) {
			if (thisTree.childNodes[j].nodeType == 1) {
				var thisAnchor = thisTree.childNodes[j].firstChild;
				if (thisAnchor.id && thisBody.id && (thisAnchor.id == thisBody.id)) {
					addCSSClass(thisBranch.parentNode, "selectedNav");
				}
				var thisSubTree = thisTree.childNodes[j].firstChild.nextSibling.nextSibling;
				thisSubTree.id = "subTree" + [j];
				var onClickAction = "toggleSubTree('" + thisSubTree.id + "', " + j +"); return false;";
				thisAnchor.onclick = new Function(onClickAction); thisAnchor.hideFocus = true;
			}
		}
	return collapsedNodes;
	}
}

function recollapseTree(thisCookie) {
	recollapseThis = thisCookie.split(',');
	for(i=0; i<recollapseThis.length; i++) {
		if (recollapseThis[i] != "") {
			toggleSubTree(recollapseThis[i], i);
		}
	}
}

function toggleSubTree(thisSubTree, position) {
	var thisBranch = document.getElementById(thisSubTree);
	if (thisBranch.style.display == "none" || thisBranch.style.display == null) {
		thisBranch.style.display = "block";
		removeClassName(thisBranch.previousSibling.previousSibling, "collapsed");
		collapsedNodes[position] = "";
	} else if (thisBranch.style.display == "block" || thisBranch.style.display == "") {
		thisBranch.style.display = "none";
		addCSSClass(thisBranch.previousSibling.previousSibling, "collapsed");
		collapsedNodes[position] = thisSubTree;
	}
}

function readCookie(name) {
	var re = new RegExp(name + "=([^;]+)");
	var value = re.exec(document.cookie);
	return (value != null) ? unescape(value[1]) : null;
}

function createCookie(name, value) {
	var today = new Date();
	var expiry = new Date(today.getTime() + 28 * 24 * 60 * 60 * 1000);
	document.cookie = name + "=" + escape(value) + "; expires=" + expiry.toGMTString();
}

window.onload = function() {
	inlineTree('pageNavigation');
	var collapsedTree = readCookie("collapsedTree");
	if (collapsedTree) { recollapseTree(collapsedTree); }
}

window.onunload = function() {
	createCookie("collapsedTree", collapsedNodes);
}