//--------------------------------------------------
// PROJECT: Simple Javascript Tree Menu
// AUTHOR:  Roman Schulz (rschulz@centrum.cz)
// LICENCE: Public Domain (This script can be used
//          freely as long as all copyright messages
//          are intact.
// DATE:    2004-04-26
//--------------------------------------------------


treenodes = [];

// Node object
function Node(id, pid, name, url, title) {
	this.id = id;
	this.pid = pid;
	this.name = name;
	this.url = url;
	this.title = title;
	this.selected = false;
};

//--------------------------------------------------
// Name: idswitch
// Desc: Switch visiblity/invisiblity of item
//--------------------------------------------------
function idswitch(id) {
	if(document.getElementById(id).style.display == 'inline')
		document.getElementById(id).style.display = 'none';
	else {
		document.getElementById(id).style.display = 'inline';
	}
}


//--------------------------------------------------
// Name: idshow
// Desc: Set visiblity/invisiblity of item
//--------------------------------------------------
function idshow(id, show) {
	var elem = document.getElementById(id);

	if (elem) {
		if (show) {
			elem.style.display = 'inline';
		}
		else
			elem.style.display = 'none';
	}
}


//--------------------------------------------------
// Name: tree_add
// Desc: Adds new item into interface
//--------------------------------------------------
tree_add = function(id, pid, name, url, title) {
	this.treenodes[this.treenodes.length] = new Node(id, pid, name, url, title, false);
};


//--------------------------------------------------
// Name: tree_get_num_children
// Desc: Computes number of childrens
//--------------------------------------------------
tree_get_num_children = function(id) {
	var i = 0;
	var num = 0;
	for (i in this.treenodes) {
		if (this.treenodes[i].pid == id) {
			num ++;
		}
	}
	return num;
}


//--------------------------------------------------
// Name: tree_open
// Desc: Opens specific root
//--------------------------------------------------
tree_open = function(id) {
	for (i in this.treenodes) {
		//node.selected = false;
		var node = this.treenodes[i];
		if (id == node.id && id != 0)
		{
			idshow(id, 1);
			tree_open(node.pid);
		}
	}
}


//--------------------------------------------------
// Name: tree_build
// Desc: Creates tree based on interface's items
//--------------------------------------------------
tree_build = function(id, level, selected) {
	var i = 0;
	for (i in this.treenodes) {
		var node = this.treenodes[i];
		if (node.pid == id) {
			if (tree_get_num_children(node.id) > 0)
			{
				if (node.id == selected) {
					document.write("<a class=\"menu"+level+"\" href=\"javascript:idswitch('"+node.id+"')\"><img src=\"images/menu-plus.bmp\" border=\"0\" width=\"12\" height=\"10\"/></a><a class=\"menux\" style=\"color: #F00;\" href=\""+node.url+"\">"+node.name+"</a><br/>");				} else {
					document.write("<a class=\"menu"+level+"\" href=\"javascript:idswitch('"+node.id+"')\"><img src=\"images/menu-plus.bmp\" border=\"0\" width=\"12\" height=\"10\"/></a><a class=\"menux\" href=\""+node.url+"\">"+node.name+"</a><br/>");
				}

				document.write("<div id=\""+node.id+"\" style=\"display: none\">");
				tree_build(node.id, level+1, selected);
				document.write("</div>");
			}
			else
			{
				if (node.id == selected) {
					document.write("<a class=\"menu"+level+"\" href=\"\"><img src=\"images/tree/empty.gif\" border=\"0\" width=\"12\" height=\"10\"/></a><a class=\"menux\" style=\"color: #F00;\" href=\""+node.url+"\">"+node.name+"</a><br/>");
				}else{
					document.write("<a class=\"menu"+level+"\" href=\"\"><img src=\"images/tree/empty.gif\" border=\"0\" width=\"12\" height=\"10\"/></a><a class=\"menux\" href=\""+node.url+"\">"+node.name+"</a><br/>");
				}
			}
		}
	}
}

