var tree = {
	
	n : 0,
	target : null,
	home : '',
	nodes : [],
	crumbs : [],
	activenode : '',
	activetitle : '',
	highlight : '#ccccff',
	normal: '#ffffff',
		
	updateNode : function(ref){
		if(ref && this.nodes.length > 0	) {
			if(!(ref in this.nodes)) return;
			if(this.activenode != ''){
				document.getElementById(this.nodes[this.activenode].id).style.backgroundColor = this.normal;
					;
			}
			this.activenode = ref;
			this.activetitle = this.nodes[ref].label;
			document.getElementById(this.nodes[ref].id).style.backgroundColor = this.highlight;
		}
		this.crumbs = [];
		this.expandnode(this.nodes[ref]);
		this.crumbs.reverse();
	},
	
	dblclick : function(src,t){
		treedblclk(src,t);			
	},

	click : function(id){
		this.updateNode(id);
		cl="tree";
        $.get("handlers/getpage.php?id="+tree.activenode+"&lang="+lang,getpage);
	},
	
	getTree : function(file, t, active){
		this.nodes = [];
		this.home = '';
		if(active==null) this.activenode=''; else this.activenode = active;
		this.target = document.getElementById(t);
		this.target.innerHTML = '';
		var xmlHttp=tree.getRequestObject();
		if (xmlHttp==null) {
		  alert ("Your browser does not support AJAX!");
		  return;
		} 
		
		var self = this;
		xmlHttp.onreadystatechange=function (){
			if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
				var xmlDoc=xmlHttp.responseXML.documentElement;
				tree.parseTree(xmlDoc,self.target,0);
				if (!document.location.hash) {
					tree.click(tree.home); // no #page requested get home page
				}else{
					if (!(document.location.hash.substring(1) in self.nodes)) {
						tree.click(tree.home);
					}else{
						tree.click(document.location.hash.substring(1));
					}
				}
			}
		};

		xmlHttp.open("GET",file,true);
		xmlHttp.send(null);
	},
	
	parseTree : function(node,parent,pref){

		for (var x = 0; x < node.childNodes.length; x++) {

			var el = node.childNodes[x];
			if (el.nodeName == 'folder') {
				if(this.home==''){
					this.home = el.getAttribute('ref');
					this.activenode = el.getAttribute('ref');
				} 
				this.n++;
				var f = document.createElement("div");
				f.className = "node";
				var html = "<div style='overflow:hidden;width:1000px;'><div class='toggle' id='toggle"+this.n+"' onclick='tree.togglenode(this,\""+"treelabel"+this.n+"\",\"treenode"
							+this.n+"\")'>+</div><div id='"+"treelabel"+this.n+"' class='closelabel' onclick='tree.click(\""
							+el.getAttribute('ref')+"\");'  ondblclick='tree.dblclick(\""+el.getAttribute('ref')
							+"\",0);' onselectstart='return false;'>"
							+el.getAttribute('label')+"</div></div>";
				var b = document.createElement("div");
				b.id = "treenode"+this.n;
				f.innerHTML = html;		
				f.appendChild(b);	
				b.style.display = "none";	
				
				if(el.getAttribute('ref') != "")
					this.nodes[el.getAttribute('ref')] = {"ref": el.getAttribute('ref'), "id" : "treelabel"+this.n, label : el.getAttribute('label'),"pid" : parent.id, "owner" : pref};
				
			    this.parseTree(el,b,el.getAttribute('ref'));
				parent.appendChild(f);
			}
			
			if (el.nodeName == 'leaf') {
				if(this.home=='') this.home = el.getAttribute('ref');
				this.n++;
				var l = document.createElement("div");
				l.innerHTML = "<div style='overflow:hidden;width:1000px;'><div id='"+"treelabel"+this.n+"' class='leaf' onclick='tree.click(\""
							+el.getAttribute('ref')+"\");'  ondblclick='tree.dblclick(\""+el.getAttribute('ref')
							+"\",1)' onselectstart='return false;'>"
							+el.getAttribute('label')+"</div></div>";
				var ref = l.getAttribute('ref');
				parent.appendChild(l);
				if(el.getAttribute('ref') != "")
					this.nodes[el.getAttribute('ref')] = {id : "treelabel"+this.n, label : el.getAttribute('label'),pid : parent.id, owner : pref};
			}

		}
	},
	
	getRequestObject : function() {
		return $.ajax();		
	},
	togglenode : function (toggle,src,node){
		var n = document.getElementById(node);
		var s = document.getElementById(src);
		if(n.style.display=='block'){
			n.style.display =  'none'; 
			s.className="closelabel";
			toggle.innerHTML = "+";
		}else{
			n.style.display =  'block';
			s.className="nodelabel";
			toggle.innerHTML = "-";
		}
	},
	expandnode : function (node){
		if(!node) return;
		this.crumbs.push(node);
		if(node.owner == 0) return; // no more parents
		var n = document.getElementById(node.pid);
		var id = node.pid.substring(8); // treenodexxx
		var s = document.getElementById("treelabel"+id);
		var t = document.getElementById("toggle"+id);

		n.style.display =  'block';
		s.className="nodelabel";
		t.innerHTML = "-";

		this.expandnode(this.nodes[node.owner]);
	}
	
}

