/* Dan's dynamic tree */

// select a limb of the tree
function select_limb(limb) {
	switch (limb.className) {
		case 'closed':
			limb.className = 'open';
			break;
		case 'open':
			limb.className = 'closed';
			break;
		case 'closed_last':
			limb.className = 'open_last';
			break;
		case 'open_last':
			limb.className = 'closed_last';
	}
	
	return false;
}

// open all parents of a node to make it visible
function view_node(tree_id,node_id) {
	try {
		split_node = node_id.split('_');
		if (split_node.length > 1) {
			open_node(tree_id,split_node.slice(0,-1).join('_'));
		}
	} catch (e) {}
	return false;
}

// open a node and all parents
function open_node(tree_id,node_id) {
	try {
		node = document.getElementById('tree_'+tree_id+'_'+node_id);
		
		switch (node.className) {
			case 'open':
			case 'closed':
				node.className = 'open';
				break;
			case 'open_last':
			case 'closed_last':
				node.className = 'open_last';
				break;
		}
		
		split_node = node_id.split('_');
		if (split_node.length > 1) {
			open_node(tree_id,split_node.slice(0,-1).join('_'));
		}
	} catch (e) {}
	return false;
}

// set up a tree for state persistence
function setup_tree(tree_id) {
	if (window.addEventListener) {
		window.addEventListener('unload',function() {save_state(tree_id);},false);
	} else {
		var old_unload = (document.body.onunload) ? document.body.onunload : function() {};
		document.body.onunload = function() {old_unload();save_state(tree_id);};
	}
	
	load_state(tree_id);
	
}

// save tree state to cookie
function save_state(tree_id) {
	tree = getElementById(document,'tree_'+tree_id);
	nodes = getElementsByTagName(tree,'li');
	cookie = '';
	
	for (var i in nodes) {
		if (nodes[i].className == 'open' || nodes[i].className == 'open_last') {
			cookie += nodes[i].id+':';
		}
	}
	
	document.cookie = 'tree_'+tree_id+'=' + escape(cookie);
}

// load tree state from cookie
function load_state(tree_id) {
	// alert(print_r(getElementsByTagName(document.getElementById('tree_${tree_id}'),'li')));
	
	/*var dc = document.cookie;
	var prefix = 'tree_'+tree_id+'=';
	var begin = dc.indexOf('; '+prefix);
	if (begin == -1) {
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	} else {
		begin += 2;
	}
	var end = document.cookie.indexOf(';',begin);
	if (end == -1) {
		end = dc.length;
	}
	cookie = unescape(dc.substring(begin + prefix.length, end));
	
	nodes = cookie.split(':');
	for (var i in nodes) {
		if (node = document.getElementById(nodes[i])) {
			switch (node.className) {
				case 'closed':
					node.className = 'open';
					break;
				case 'closed_last':
					node.className = 'open_last';
			}
		}
	}*/
}

// support functions for Safari
function getElementsByTagName(obj,tag) {
	if (obj.getElementsByTagName) {
		var result = obj.getElementsByTagName(tag);
		if (typeof result == 'object') {
			return result;
		}
	}
	
	var result = new Array();
	tag = tag.toLowerCase();
	if (typeof obj.firstChild == 'object') {
		var child = obj.firstChild;
		while (child != null) {
			if (child.tagName && child.tagName.toLowerCase() == tag) {
				result.push(child);
			}
			result = result.concat(getElementsByTagName(child,tag));
			child = child.nextSibling;
		}
	}
	return result;
}

function getElementById(obj,id) {
	if (obj.getElementById) {
		var result = obj.getElementById(id);
		if (typeof result == 'object') {
			return result;
		}
	}
	
	id = id.toLowerCase();
	if (typeof obj.firstChild == 'object') {
		var child = obj.firstChild;
		while (child != null) {
			if (child.id && child.id.toLowerCase() == id) {
				return child;
			}
			var result = getElementById(child,id);
			if (result != 'undefined') {
				return result;
			}
			child = child.nextSibling;
		}
	}
	return 'undefined';
}

/* End of script */
