function Collapse()
{
	var nodes = new Array();


	var click = function(e)
	{
		e = (e || event);
		var target = (e.target || e.srcElement);
		if(!/div/i.test(target.tagName))
		{
			target = target.parentNode;
		}

		if(target.open == false)
		{
			open(target);
		}
		else
		{
			close();
		}
	}


	var open = function(target)
	{
		close();
		target.open = true;
		target.innerHTML = target.innerHTML.replace("(+)", "(-)");
		getNextSibling(target).style.display = "inline";
	};


	var close = function()
	{
		for(var i=0; i<nodes.length; ++i)
		{
			nodes[i].open = false;
			nodes[i].innerHTML = nodes[i].innerHTML.replace("(-)", "(+)");
			getNextSibling(nodes[i]).style.display = "none";
		}
	};



	this.initialize = function(collapse)
	{
		var node = getFirstChild(collapse);
		while(node != null)
		{
			var child = getFirstChild(node);
			var sup = getFirstChild(child);
			var icon = document.createElement("code");
			icon.innerHTML = "(+)";

			addEventListener(child, "click", click, false);
			if(sup) addEventListener(sup, "click", click, false);
			addEventListener(icon, "click", click, false);

			child.style.cursor = "pointer";
			child.innerHTML = ' ' + child.innerHTML;
			child.insertBefore(icon, child.firstChild);
			nodes.push(child);
			
			node = getNextSibling(node);
		}
		close();
	};
};



var collapse = null;
var regex = /\bcollapse\b/;
var lists = document.getElementsByTagName("ul");
for(var i=0; i<lists.length; ++i)
{
	if(regex.test(lists[i].className))
	{
		collapse = new Collapse();
		collapse.initialize(lists[i]);
	}
}
