/*
* Builds and visualise horizontal menu from XML file
* Max recurse level unlimited
* Require tree.css style file attached to project
* HTMLDOM object can be acessed via DOMObject property
*/

function Tree(xmlDoc){
	_this=this;
	this.root=xmlDoc.documentElement;	
	var DIV=document.createElement('DIV');
		DIV.className="tree";
		DIV.onclick=function(e){
			e = e || window.event;
			target = e.target || e.srcElement; 
			
			if(target.tagName=="IMG"){				
				if(target.className=="tree_dot")
					return;
				if(target.className=="tree_plus")
					_this.Expand(target);
				else 
					_this.Collapse(target)
			}
		}
		
	this.DOMObject=DIV;	
	
	subMenu=document.createElement('UL');		
	subMenu.appendChild(this.buildSubMenu(this.root));
	
	this.DOMObject.appendChild(subMenu);
	return this;	
}

Tree.prototype={
	buildSubMenu: function(parentNode){
		node=parentNode.getElementsByTagName("TEXT")[0];		
		text=node.text || node.textContent;	
		
		node=parentNode.getElementsByTagName("HREF")[0];
		href=node.text || node.textContent;	
		
		hasChilds=parentNode.getElementsByTagName("ITEM").length!=0;
		visible=parentNode.getAttribute("visible")=="true";
		
		var item=this.buildMenuItem(text, href, hasChilds, visible, false);	

		if (hasChilds){	
			var subMenu=document.createElement('UL');				
			if (!visible){
				subMenu.style.display="none";
				subMenu.style.visibility="hidden";
			}
			
			item.appendChild(subMenu);
			var child;		
			for (var i=0;i<parentNode.childNodes.length;i++){				
				child=parentNode.childNodes[i];
				if (child.nodeType==1){
					if (child.nodeName=="ITEM"){									
						subMenu.appendChild(this.buildSubMenu(child));
					}
				}		
			}		
		}
		
		return item;
	}, 
	
	buildMenuItem: function (text, url, hasChilds, visible, isSelected){
		var li=document.createElement('LI');
		var img=document.createElement('IMG');
			img.setAttribute("src","Images/clear.gif");
			img.className=(hasChilds)?((visible)?"tree_minus":"tree_plus"):"tree_dot";

		var a=document.createElement('A');		
			a.setAttribute("href", url);
			a.innerHTML=text;		
			
		li.appendChild(img);
		li.appendChild(a);	
		return li;
	},
	
	Expand: function (el){
		subsection=el.parentNode.getElementsByTagName("UL")[0];
		el.className="tree_minus";
		subsection.style.display="block";
		subsection.style.visibility="visible";
	},
	
	Collapse: function (el){	
		subsection=subsection=el.parentNode.getElementsByTagName("UL")[0];
		el.className="tree_plus";
		subsection.style.display="none";
		subsection.style.visibility="hidden"
	}
}