<!--
function TreeNode(_id, _label)
{
  this.parent;
  this.children;
  this.depth = 0;
  this.label = _label;
  this.id = _id;

  this.findChild = function(_id)
  {
	// document.write('Depth: ' + this.depth + ', Calling findchild with: ' + _id + "\n");
	if (!this.children)
	{
	  // document.write("No children, " + this.label + "\n");
	  return;
	}
	else if (this.children[_id])
	{
	  // document.write("Found node: " + _id + "\n");
	  return this.children[_id];
	}
	else
	{
	  // document.write("Didn't find the node\n");
	  for (id in this.children)
	  {
		//		document.write("Trying child: " + id + "\n");
		var tmp = this.children[id].findChild(_id);
		if (tmp)
		  return tmp;
	  }
	}	
  }
  
  this.addChild = function(_id, _label)
  {
	if (!this.children)
	  this.children = new Array();

	_label = _label.trim();
	_id = _id.trim();

	//	document.write("Adding child: " + this.label + " -> " + _label + "\n");

	this.children[_id] = new TreeNode(_id, _label);
	this.children[_id].parent = this;
	this.children[_id].depth = this.depth + 1;

	return this.children[_id];
  }
}

function listToTree(tag, treenode, levels)
{
  if (!tag.childNodes || tag.childNodes.length == 0) 
	return;

  for (var i=0; i< tag.childNodes.length; i++)
  {
	var item = tag.childNodes[i];
	//    document.write("NodeName: " + item.nodeName + "\n");

	if (item.nodeName == "LI")
	{
	  var newnode = treenode;

	  if (item.id && !item.id.match(/^\s+$/))
		newnode = treenode.addChild(item.id, item.id); // firstChild.nodeValue);
	  else if (levels.length)
		//		document.write("Popping\n");
		newnode = levels.pop();
	  //	  else
		//		document.write("Errr...\n");
		
	  for (var j=0; j< item.childNodes.length; j++)
	  {
		var sitem = item.childNodes[j];
		if (sitem.nodeName == "UL")
		  listToTree(sitem, newnode, levels);
	  }
	}
  }
}

function findFirstId(tag)
{
  if (!tag.childNodes || tag.childNodes.length == 0) { return; }

  for (var i=0; i< tag.childNodes.length; i++)
  {
	var item = tag.childNodes[i];
	if (item.nodeName == "LI")
	{
	  if (item.id)
	  {
		var tmp = item.id;
		//		document.write("Found tmp: " + tmp + "\n");
		tmp = tmp.replace(/\.\d+$/, '');
		//		document.write("Rep tmp: " + tmp + "\n");
		return tmp;
	  }
	  else
	  {
		for (var j=0; j< item.childNodes.length; j++)
		  if (item.childNodes[j].nodeName == "UL")
			return findFirstId(item.childNodes[j]);
	  }
	}
  }
}

function setChildImages(node, img_file, checked)
{
  if (!node.children)
  {
	document.getElementById('cbx_' + node.id).checked = checked;	
  }
  for (id in node.children)
  {
	getImgNode(document.getElementById(id)).src = img_file;
	setChildImages(node.children[id], img_file, checked);
  }
}

function setParentImages(node)
{
  if (!node)
	return;

  // Is this all, partial, none?
  var new_img_src = 'images/chk_all2.png';
  var nchecked = 0;
  var nunchecked = 0;
  var nsome = 0;
  for (id in node.children)
  {
	var img_src = getImgNode(document.getElementById(id)).src;
	if (img_src.match(/all2.png$/))
	  nchecked++;
	else if (img_src.match(/some.png$/))
	  nsome++;
	else if(img_src.match(/none.png$/))
	  nunchecked++;
  }

  if (nsome)
	new_img_src = 'images/chk_some.png';
  else if (nchecked == 0)
	new_img_src = 'images/chk_none.png';
  else if (nunchecked > 0)
	new_img_src = 'images/chk_some.png';

  if (node.id != 0)
	getImgNode(document.getElementById(node.id)).src = new_img_src;

  // Cascade onto higher nodes
  setParentImages(node.parent);
}

function getImgNode(node)
{
  if (!node)
	return;

  for (i=0; i< node.childNodes.length; i++)
  {
	if (node.childNodes[i].nodeName == 'IMG')
	{
	  return node.childNodes[i];
	}
  }
}

function imgClick(_id)
{
  var img = getImgNode(document.getElementById(_id));
  var checked = (img.src.match(/chk_(some|none).png$/));
  new_img_src = (checked) ? 'images/chk_all2.png' : 'images/chk_none.png';

  // Set the new image for this node
  img.src = new_img_src;
  var node = tree.findChild(_id);

  if (node.children)
  {
	// Do the same for all child images
	setChildImages(node, new_img_src, checked);
  }
  else // If leaf node, toggle checkbox status
  {
	//	alert(	document.getElementById('cbx_' + _id).checked );
	document.getElementById('cbx_' + _id).checked = checked;
  }

  setParentImages(node.parent);
}

// Build the tree structure in javascript
function buildTree()
{
  tree = new TreeNode(0, 'root');
  listToTree(document.getElementById('tree1'), tree);
  var html_tree2 = document.getElementById('tree2');
  if (html_tree2)
  {
	var child = tree.findChild(findFirstId(html_tree2));
	var levels = new Array();
	while (child && child.id != 0)
	{
	  levels.push(child);
	  child = child.parent;
	}
	listToTree(html_tree2, tree, levels);
  }
}

function checkTree()
{
  var checkboxes = document.forms['oselect'].elements['organism[]'];
  var count = 0;
  for (var i=0; i < checkboxes.length; i++)
  {
	if (checkboxes[i].checked)
	{
	  var id = checkboxes[i].id.replace(/^cbx_/, '');
	  imgClick(id);
	}  
  }
}

window.onload = function() { checkTree(); }

//-->
