

var current;
var isAnimated = false;
 
function autoInit_trees() {	
	var i;
	var candidates = $$('#sidebar ul');
	
	if(typeof current_selection!="undefined") {
		var links = candidates[0].getElementsBySelector('a');
		for (i=0;i<links.length;i++)
		{
			//alert(links[i].innerHTML);
			if(links[i].innerHTML == current_selection)
			{
				//alert('value match?');
				links[i].addClassName('selected');
				$(links[i].parentNode).addClassName('open');
			}
		}
	}	
	initUL(candidates[0]);						
}
 
/*
 * Initialise a tree node, setting all its LIs appropriately
 */
function initUL(el) {
	var i,j;
	var spanA, spanB, spanC;
	var startingPoint, stoppingPoint, childUL;
	//alert('initTree');
	var children = el.childElements();
	children.last().addClassName('last');
	
	children.each(function(elmt) {
		var firstD = elmt.firstDescendant();
		
		if(firstD.inspect()=='<ul>')
		{
			initUL(firstD);
		}
		
		spanA = document.createElement('span');
		spanB = document.createElement('span');
		spanC = document.createElement('span');
		spanA.appendChild(spanB);
		spanB.appendChild(spanC);
		spanA.className = 'a ' + elmt.className.replace('open','spanOpen');		
		spanB.className = 'b';	
		spanC.className = 'c';
		
		
		if(firstD.inspect()=='<ul>')
		{				
			spanA.onclick = listClick;
			for(i=0;i<firstD.childElements().length;i++)	
				if(firstD.childElements()[i].hasClassName('open'))
					elmt.addClassName('open');
		}
		
		// Find the UL within the LI, if it exists
		stoppingPoint = elmt.childNodes.length;
		startingPoint = 0;
		childUL = null;
		for(j=0;j<elmt.childNodes.length;j++) {
			if(elmt.childNodes[j].tagName && elmt.childNodes[j].tagName.toLowerCase() == 'div') {
				startingPoint = j + 1;
				continue;
			}

			if(elmt.childNodes[j].tagName && elmt.childNodes[j].tagName.toLowerCase() == 'ul') {
				childUL = elmt.childNodes[j];
				stoppingPoint = j;
				break;					
			}
		}
		
		// Move all the nodes up until that point into spanC
		for(j=startingPoint;j<stoppingPoint;j++) {
			spanC.appendChild(elmt.childNodes[startingPoint]);
		}
		
		// Insert the outermost extra span into the tree
		if(elmt.childNodes.length > startingPoint) elmt.insertBefore(spanA, elmt.childNodes[startingPoint]);
		else elmt.appendChild(spanA);			
	});
}




function listClick (ev) {
	var el = this.parentNode;
	
	el.toggleClassName('open');
	
			
	var adjacent = el.adjacent('li');
	adjacent.each(function (item) {
		if(item.hasClassName('open')) item.toggleClassName('open');
	});
	
}

document.observe('dom:loaded', function() {
	autoInit_trees();
});
