/* treeview.js 
 * pcardoso@mrnet.pt, 23/05/2005
 */
 

function getCookie(cookieName) 
{
	var theCookie = "" + document.cookie;
	var ind = theCookie.indexOf(cookieName);
	if (ind == -1 || cookieName=="") 
		return ""; 
	var ind1 = theCookie.indexOf(';', ind);
	if (ind1 == -1)	
		ind1=theCookie.length; 
	return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}

function setCookie(cookieName,cookieValue,nDays) 
{
	var today = new Date();
	var expire = new Date();
	if (nDays==null || nDays==0) 
		nDays=1;
	expire.setTime(today.getTime() + 3600000*24*nDays);
	document.cookie = cookieName+"="+escape(cookieValue) + ";expires="+expire.toGMTString();
}


 
 
 
 
function basename(a)
{
	if (!a)
		return '';
	var b=a.match(/[\/|\\]([^\\\/]+)$/);
	return b[1];
}

function traverseDOM(node, action) 
{
	var queue = [node];
	while (queue.length > 0) {
		var elem = queue.shift();
		action(elem);
		for (var child=elem.firstChild; child != null; child=child.nextSibling) {
			queue.push(child);
		}
	}
}

var state = "";
function saveStateHelper(node)
{
	if (node != document.getElementById('first')) {
		if (node.nodeName == 'UL') {
			state += node.id + ':' + (node.style.display ? node.style.display : "block") + " ";
		}
	}
	return false;
}


function saveTreeState() 
{	
	state = "";
	traverseDOM(document.getElementById('first'), saveStateHelper);
	setCookie("treeStatus", status, 365);
	return false;
}

function restoreTreeState() 
{	
	cookie = getCookie("treeStatus");
	
	alert(cookie);
		
	return false;
}



function expandAll(node) 
{	
	traverseDOM(node, toggleOn);
	return false;
}

function collapseAll(node) 
{
	traverseDOM(node, toggleOff);
	return false;	
}


function saveExpanded(node)
{
	traverseDOM(node, toggleOn);
}

function toggle(node)
{
	// Unfold the branch if it isn't visible
	
	while (node.nextSibling.nodeName != "UL") {
		if (node.nodeName == "IMG") {
			previous = node;
		}
		node = node.nextSibling;
	}

	
	var show;
	
	if (node.nextSibling.style.display) {
		if (node.nextSibling.style.display != 'block') show = true; else show=false; 
	} else {
		show = false;
	}
	
	if (show)  {
		switch (basename(previous.src)) {
			case "ponlynode.gif" 	: previous.src = "modules/sections/images/monlynode.gif"; break;				
			case "pfirstnode.gif" 	: previous.src = "modules/sections/images/mfirstnode.gif"; break;
			case "pnode.gif" 		: previous.src = "modules/sections/images/mnode.gif";	break;			
			case "plastnode.gif" 	: previous.src = "modules/sections/images/mlastnode.gif"; break;						
		}
		node.nextSibling.style.display = 'block';
	} else { // Collapse the branch if it IS visible
		switch (basename(previous.src)) {
			case "monlynode.gif" 	: previous.src = "modules/sections/images/ponlynode.gif"; break;						
			case "mfirstnode.gif" 	: previous.src = "modules/sections/images/pfirstnode.gif"; break;
			case "mnode.gif" 		: previous.src = "modules/sections/images/pnode.gif";	break;			
			case "mlastnode.gif" 	: previous.src = "modules/sections/images/plastnode.gif"; break;						
		}
		node.nextSibling.style.display = 'none';
	}
//	saveTreeState();		
	return false;
}

function toggleOff(node)
{
	if (node != document.getElementById('first'))			
		if (node.nodeName == 'UL')
			node.style.display = 'none';
	if (node.nodeName == 'IMG') {
		switch (basename(node.src)) {
//			case "monlynode.gif" : previous.src = "modules/sections/images/ponlynode.gif"; break;
			case "mfirstnode.gif" : node.src = "modules/sections/images/pfirstnode.gif"; break;
			case "mnode.gif" : node.src = "modules/sections/images/pnode.gif";	break;			
			case "mlastnode.gif" : node.src = "modules/sections/images/plastnode.gif"; break;						
		}
	}
	return true;
}


function toggleOn(node)
{
	if (node.nodeName == 'UL')
		node.style.display = 'block';
	if (node.nodeName == 'IMG') {
		switch (basename(node.src)) {
//			case "ponlynode.gif" : previous.src = "modules/sections/images/monlynode.gif"; break;
			case "pfirstnode.gif" : node.src = "modules/sections/images/mfirstnode.gif"; break;
			case "pnode.gif" : node.src = "modules/sections/images/mnode.gif";	break;			
			case "plastnode.gif" : node.src = "modules/sections/images/mlastnode.gif"; break;						
		}
	}		
	return true;
}

