/* Disclaimier och hjälp -> jgtree.txt */
var expandToLevel=2;
var indent=10;
var selectedNode=null;
var arrows=false;
var selectable=true;
function ParseTree(tree, expandTo)
{
	tree.style.display = "";
	arrows = toBool(tree.arrows);
	selectable=toBool(tree.selectable);
	if(expandTo!=null)
		expandToLevel = expandTo;
	parseSubtree(tree, 0);
}
function GetSelectedNode()
{
	return selectedNode;
}
function SelectNode(tree, path)
{
	var thisIndex = parseInt(path);
	if(tree.children.tags("DIV").length > thisIndex)
	{
		if(path.indexOf(".") != -1)
			selectNodePath(tree.children.tags("DIV")(thisIndex), path.substring(path.indexOf(".")+1) );
		else
			selectNodePath(tree.children.tags("DIV")(thisIndex), "" );
	}
}
function SelectHref(tree, href)
{
	href = new String(href);
	var divColl = tree.all.tags("DIV");
	var x=0;
	var node;
	var bestnode=null;
	while(x < divColl.length)
	{
		node = divColl[x++];
		if(node.href == href)
		{
			bestnode=node;
			break;
		} else if (href.indexOf(node.href)>=0)
		{
			bestnode=node;
		} else if (new String(node.href).indexOf(href)>=0)
		{
			bestnode=node;
		}
	}
	if(bestnode!=null)
	{
		deselectAll(tree);
		SelectNode(tree, findPath(bestnode));
	}
}
function NodeClick(tree)
{
	
	if(window.event.srcElement.tagName == "SPAN" && selectable)
		if(window.event.srcElement.parentNode.tagName=="DIV")
		{
			deselectAll(tree);
			SelectNode(tree, findPath(window.event.srcElement.parentNode));
		}
	if(window.event.srcElement.tagName == "IMG")
		if(window.event.srcElement.parentNode.tagName=="DIV")
			toggleNode(window.event.srcElement.parentNode);
	redrawTree(tree);
}
function selectNodePath(subtree, path)
{
	if(path==null)
		return "end";
	var thisIndex = parseInt(path);
	if(!subtree.expanded)
		toggleNode(subtree);
	if(subtree.children.tags("DIV").length > thisIndex)
	{
		if(path.indexOf(".") != -1)
			r=selectNodePath(subtree.children.tags("DIV")(thisIndex), path.substring(path.indexOf(".")+1) );
		else
			r=selectNodePath(subtree.children.tags("DIV")(thisIndex), "" );
		if(r==null)
			return null;
	}
	selectedNode=subtree;
	subtree.span.style.backgroundColor="#C0D0EE";
	return null;
}
function deselectAll(tree)
{
	var divColl = tree.all.tags("DIV");
	var x=0;
	var node;
	var temp;
	while(x < divColl.length)
	{
		node = divColl[x++];
		node.span.style.backgroundColor="";
	}
}
function findPath(wantedNode)
{
	var parent = wantedNode.parentElement;
	if(parent==null || parent.tagName!="DIV" || wantedNode.name=="root")
		return "";
	var divColl = parent.children.tags("DIV");
	var x=0;
	var node;
	while(x < divColl.length)
	{
		node = divColl[x];
		if( node == wantedNode )
			return findPath(parent) + x + ".";
		x++;
	}
}
function parseSubtree(subtree, level)
{
	var element;
	var text;
	var node;
	var x=0;	
	var parent;
	var indent;
	var coll = subtree.children.tags("DIV");
	while(x < coll.length)
	{
		node = coll[x++];
		if(node==null)
			alert("noll?");
		if(node.children.length>0)
			parent=true;
		else
			parent=false;

		if(node.title=="" || node.title==null)
		{
			a = new String(node.noplus).toLowerCase();
			if(parent && level>0 && a.localeCompare("true")!=0)
				node.title="Tryck på +/- för att visa/dölja delträd";
			else
				node.title="";
			delete a;
		}
		
		if(parent)
		{
			if(expandToLevel>level)
				node.expanded=true;
			else
				node.expanded=false;
		}
				
		if(expandToLevel>=level)
			node.style.display="";
		else
			node.style.display="none";
		
		if(node.href != null)
		{
			element=document.createElement("A");
			element.href = node.href;
			if(node.target != null)
				element.target = node.target;
			element.innerText = trim(node.replaceAdjacentText("afterBegin", ""));
			if(arrows==true)
				element.innerText += " >";
			element.style.textDecoration="none";
			node.span = element;
			node.insertAdjacentElement("afterBegin", element);
		} else {
			element=document.createElement("SPAN");
			element.innerText = node.replaceAdjacentText("afterBegin", "");
			node.span = element;
			node.insertAdjacentElement("afterBegin", element);
		}

		indent=level*10;//indent;
		if(node.img!=null)
		{
			//indent-=20;
			element=document.createElement("IMG");
			element.src = node.img;
			element.style.cursor="hand";
			element.style.verticalAlign="middle";
			element.style.overflow="hidden";
			element.style.position="relative";
			element.style.top="-2px";
			node.insertAdjacentElement("afterBegin", element);
		}
		if(parent && node.noplus!="true")
		{
			indent-=14;
			element=document.createElement("IMG");
			element.style.cursor="hand";
			element.style.verticalAlign="middle";
			element.style.overflow="hidden";
			element.style.position="relative";
			element.style.width="9px";
			element.style.marginRight="5px";
			//element.style.top="-2px";
			//element.style.left="2px";
			node.expandImg = element;
			setImage(node);
			node.insertAdjacentElement("afterBegin", element);
		}

		node.style.textIndent=indent;

		//node.insertAdjacentText("afterBegin", getSpaces(level));

		if(parent)
			parseSubtree(node, level+1);
	}
}
function trim(text)
{
	while(text.indexOf(" ")==0)
		text = text.substring(1);
	while(text.lastIndexOf(" ")==text.length-1)
		text = text.substring(0, text.length-1);
	return text;
}
function setImage(node)
{
	if(node.expandImg==null)
		return;

	if(node.expanded)
		node.expandImg.src="./images/minus.gif";
	else
		node.expandImg.src="./images/plus.gif";
}
function toggleNode(subTree)
{
	subTree.expanded=!subTree.expanded;
	var divColl = subTree.children.tags("DIV");
	var x=0;
	var node;
	var disp;
	var img;
	setImage(subTree);
	if(subTree.expanded==false)
		disp="none";
	else
		disp="";

	while(x < divColl.length)
	{
		node = divColl[x++];
		node.style.display=disp;
	}
}
function redrawTree(tree)
{
	temp = tree.style.display;
	tree.style.display = "none";
	tree.style.display = temp;
}
function toBool(val)
{
	return new String(val).toUpperCase()=="true"?true:false;
}
