// PRODUCED BY ADAPT A/S 26.09.2003 //
function closeallsubs() {
	var i;
	var divs = document.getElementsByTagName('div');
	for(var i= 0; i < divs.length; i++) {
		if (divs[i].className == "showsub") {
			divs[i].className = "hidesub";
		}
	}
}

function showsub(layerid) {
	var layername = 'sub' + layerid;
	document.getElementById(layername).className = "showsub";
}

function hidesub(layerid) {
	var layername = 'sub' + layerid;
	document.getElementById(layername).className = "hidesub";
}

var thide;

function findParent(node) {
	while(node && !(node.nodeName.toLowerCase() == "tr" || (node.nodeName.toLowerCase() == "div" && (node.className == "top" || node.className == "showsub")))) {
		node= node.parentNode;
	}
	return node;
}

function findParentSub(node) {
	while(node && !(node.nodeName.toLowerCase() == "div" && (node.className == "top" || node.className == "showsub"))) {
		node= node.parentNode;
	}
	return node;
}

function findChildren(node) {
	if(node.nodeName.toLowerCase() == "table" || !node.hasChildNodes()) {
		return [];
	}
	var divs= new Array();
	for (var i= 0; i < node.childNodes.length; i++) {
		var child= node.childNodes[i];
		if(child.className && (child.className == 'showsub' || child.className == 'hidesub')) {
			// alert("got one" + child.id);
			divs.push(child);
		} else if(child.hasChildNodes()) {
			// seems to be broken...
			// alert("diving into: " + child.nodeName);
			var q= findChildren(child);
			// var q= arguments.callee(child);
			for (var j= 0; j < q.length; j++) {
				divs.push(q[j]);
			}
		} else {
			// alert("skipping "+child.nodeName);
		}
	}
	// alert("divs: " + divs.join(", "));
	return(divs);
}

var openNodes= [];
var openNode= "";
var parentNode= { foo: "bar" };

function cleanupsubs() {
	var okNodes= {};
	if(openNode) {
		// for debugging
		var foo = openNode;
		var bar = parentNode;

		okNodes[openNode]= true;
		var id= openNode;
		while(parentNode[id]) {
			okNodes[id]= true;
			id= parentNode[id];
		}
		for (var i in parentNode){
			if(openNode == parentNode[i]) {
				okNodes[i]= true;
			}
		}
	}
	
	var q= new Array();
	for (var i in okNodes){
		q.push( i );
	}
	// alert("ok ("+openNode+"): " + q.join(", "));
	
	var divs = document.getElementsByTagName('div');
	for(var i= 0; i < divs.length; i++) {
		if (divs[i].className == "showsub" && !okNodes[ divs[i].id ]) {
			divs[i].className = "hidesub";
		}
	}
}

function toggle(node, on) {
	if(on) {
		var toggleNode= findParent(node);
		if(thide) {
			clearTimeout(thide);
			thide= 0;
		}

		var q= findParentSub(toggleNode);
		if(toggleNode.id) {
			// avoid beeing cleaned up
			if(q.id && toggleNode.id != q.id) {
				parentNode[ toggleNode.id ]= q.id;
			}
			if(openNode) {
				// ignore?
				var ignore= false;
				var q= openNode;
				while(parentNode[q]) {
					if(parentNode[q] == toggleNode.id) {
						ignore= true;
					}
					q= parentNode[q];
				}
				if(!ignore) {
					openNode= toggleNode.id;
				} else {
					return;
				}
			} else {
				openNode= toggleNode.id;
			}
		} else if(!openNode) {
			if(q.id) {
				openNode= q.id;
			} else {
				openNode= "top";
			}
		}

		// if( toggleNode.className == "top" ) {
		// 	closeallsubs();
		// }

		// if(openNodes.length > 0) {
		// 	var id= openNodes.pop();
		// 	if(toggleNode.id && id == toggleNode.id) {
		// 		openNodes.push(id);
		// 	} else if(node.id && id == node.id) {
		// 		openNodes.push(id);
		// 	} else {
		// 		var q= document.getElementById(id);
		// 		if(q.className == 'showsub') {
		// 			// q.className= 'hidesub';
		// 		}
		// 	}
		// }

		var divs= findChildren(toggleNode);
		for(var i= 0; i < divs.length; i++) {
			parentNode[ divs[i].id ] = openNode;
			if(divs[i].className == 'hidesub') {
				divs[i].className= 'showsub';
			}
		}
		cleanupsubs();
		// document.title= openNode;
	} else {
		// alert("onmouseout");
		// var divs= findChildren(toggleNode);
		// if(divs.length > 0) {
		// 	if(thide) {
		// 		clearTimeout(thide);
		// 		thide= 0;
		// 	}
		// 	thide = setTimeout("document.getElementById('"+divs[0].id+"').className= 'hidesub'", 1000);
		// }
		// var toggleNode= findParent(node);
		// var id;
		// if(toggleNode.id) {
		// 	id= toggleNode.id;
		// } else {
		// 	var q= findParentSub(toggleNode);
		// 	id= q.id;
		// }
 		// if(openNode == id) {
		// 	openNode= "";
		// }

		openNode= "";
		if(thide) {
			clearTimeout(thide);
		}
		thide = setTimeout("closeallsubs()", 1000);
	}
}

function showhide(layerid,on,level) {
	if (on) {
//		closeallsubs();
		showsub(layerid);
		if (thide) {
			clearTimeout(thide);
			thide = null;
		}
		var layername = 'sub' + layerid;
	}
	else {
		thide = setInterval("hidesub("+layerid+")",1000);
	}
}
