/* 

	List Expander 
	written by Alen Grakalic, provided by Css Globe (cssglobe.com)
	
*/

this.listexpander = function(){
	
	// edit 
	
	var expandTo = 1; // level up to which you want your lists to be initially expanded. 1 is minimum

	var listClass = "listexpander"; // class name that you want to assign to list(s). If you wish to change it make sure to update the css file as well  
	var itemClass = "listitem"; // class name that you want to assign to list(s). If you wish to change it make sure to update the css file as well  
	var headerClass = "listheader"; // class name that you want to assign to list(s). If you wish to change it make sure to update the css file as well  
	var contentClass = "listcontent"; // class name that you want to assign to list(s). If you wish to change it make sure to update the css file as well  
	
	// end edit (do not edit below this line)
	
	this.start = function()
	{
		var ul = getElementsByClassName(listClass, document);
		for (var i=0;i<ul.length;i++)
		{
			create(ul[i]);
		};
	};

	this.create = function(list)
	{	
		var items = getElementsByClassName(itemClass, list);
		for(var i=0;i<items.length;i++){
			listItem(items[i]);
		};
	};	

	this.listItem = function(li)
	{
		var headers = getElementsByClassName(headerClass, li);
		var contents = getElementsByClassName(contentClass, li);
		if (headers.length < 1 || contents.length < 1)
			return;

		var header = headers[0];
		var content = contents[0];
		content.style.display = "none";
		header.className = "collapsed";

		header.over = true;	
		//li.onmouseover = function(){header.over = false;} 
		//li.onmouseout = function(){header.over = true;} 
		header.onclick = function()
		{
			if(this.over)
			{
				content.style.display = (content.style.display == "none") ? "block" : "none";
				this.className = (content.style.display == "none") ? "collapsed" : "expanded";				
			};
		};
	};	
	
	this.buttons = function(list){
		var parent = list.parentNode;
		var p = document.createElement("p");
		p.className = listClass;
		var a = document.createElement("a");
		a.innerHTML = expandText;
		a.onclick = function(){expand(list)};
		p.appendChild(a);
		var a = document.createElement("a");
		a.innerHTML = collapseText;
		a.onclick = function(){collapse(list)};
		p.appendChild(a);
		parent.insertBefore(p,list);
	};
	
	this.expand = function(list){
		li = list.getElementsByTagName("li");
		for(var i=0;i<li.length;i++){
			if(li[i].getElementsByTagName("ul").length > 0){
				var ul = li[i].getElementsByTagName("ul")[0];
				ul.style.display = "block";
				li[i].className = "expanded";
			};
		};
	};
	
	this.collapse = function(list){
		li = list.getElementsByTagName("li");
		for(var i=0;i<li.length;i++){
			if(li[i].getElementsByTagName("ul").length > 0){
				var ul = li[i].getElementsByTagName("ul")[0];
				ul.style.display = "none";
				li[i].className = "collapsed";
			};
		};
	};
	
	this.depth = function(obj){
		var level = 1;
		while(obj.parentNode.className != listClass){
			if (obj.tagName == "UL") level++;
			obj = obj.parentNode;
		};
		return level;
	};	
	
	start();
	
};


function getElementsByClassName(searchClass,node,tag)
{
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}


window.onload = listexpander;

