/*
 * Copyright (c) 2005-2008 Maximilian Antoni. All rights reserved.
 * http://www.maxantoni.de
 */
window.folder = {

	activeId: null,
	aniDisplay: 0,
	aniHide: 0,
	aniDisplayStop: 0,

	displayContent: function(id) {
		if(folder.activeId) {
			var n = document.getElementById(folder.activeId);
			folder.aniHide = n.offsetHeight;
			n.style.height = folder.aniHide + "px";
			n.scrollTop = folder.aniHide;
			if(folder.activeId == id) {
				folder.animate(id);
				return;
			}
		}
		var n = document.getElementById(id);
		n.style.height = "1px";
		n.scrollTop = 1;
		folder.aniDisplay = 1;
		folder.aniDisplayStop = n.scrollHeight;
		folder.animate(id);
	},

	animate: function(id) {
		if(folder.aniHide > 0) {
			var n = document.getElementById(folder.activeId);
			folder.aniHide = Math.round(folder.aniHide / 2);
			if(folder.aniHide > 1) {
				n.style.height = folder.aniHide + "px";
				n.scrollTop = n.scrollHeight;
			}
			else {
				n.style.height = "0";
				folder.aniHide = 0;
			}
		}
		if(folder.aniDisplay > 0) {
			var n = document.getElementById(id);
			folder.aniDisplay += Math.round((n.scrollHeight - folder.aniDisplay) / 2);
			if(folder.aniDisplay >= folder.aniDisplayStop) {
				n.style.height = folder.aniDisplayStop + "px";
				folder.aniDisplay = 0;
			}
			else {
				n.style.height = folder.aniDisplay + "px";
			}
			n.scrollTop = folder.aniDisplayStop;
		}
		if(folder.aniHide > 0 || folder.aniDisplay > 0)
			setTimeout("folder.animate('" + id + "')", 50);
		else
			folder.activeId = folder.activeId == id ? null : id;
	},

	initContents: function(id, linkTag, contentTag) {
		var root = document.getElementById(id);
		for(var i = 0; i < root.childNodes.length; i++) {
			var child = root.childNodes[i];
			if(child.nodeType !== 1)
				continue;
			var content = folder.getFirstChildByName(child, contentTag);
			if(!content.id)
				content.id = "folder_" + i;
			content.style.overflow = "hidden";
			content.style.height = "0";
			var link = folder.getFirstChildByName(child, linkTag);
			link.folderId = content.id;
			link.onclick = function() {
				folder.displayContent(this.folderId);
			};
		}
	},

	getFirstChildByName: function(node, tag) {
		for(var i = 0; i < node.childNodes.length; i++) {
			var child = node.childNodes[i];
			var name = child.nodeName.toLowerCase();
			if(tag instanceof Array) {
				for(var j = 0; j < tag.length; j++) {
					if(name == tag[j])
						return child;
				}
			}
			else if(name == tag)
				return child;
		}
		for(var i = 0; i < node.childNodes.length; i++) {
			try {
			 	return folder.getFirstChildByName(node.childNodes[i], tag);
			}
			catch(ignore) {}
		}
		throw new Error("Node \"" + tag + "\" not found!");
	}

}