//declare open variable to not hafta loop entire tres to close all
var treeOpenFolder = null;
Event.observe(window, "load", initTree, false);
	function checkTagName(obj, name){
		try{if(obj.tagName==name){return true;}}catch(err){return false;}
	}
	function swapEvents(obj, eventType,funcR, funcA){
		Event.stopObserving(obj, eventType, funcR, false);
		Event.observe(obj, eventType, funcA, false);
	}
	function hasChildTree(obj){
		if(obj.hasChildren){return true;}
		var hasChildren = false;
		for(var i=0;i<obj.childNodes.length;i++){
			var child = obj.childNodes.item(i);
			if(checkTagName(child, "UL")){
				hasChildren = true;
			}
		}
		obj.hasChildren = hasChildren;
		return hasChildren;
	}
	function hasChildMembers(obj){
		if(obj.getAttribute("hasChildren")){return true;}
		var hasChildren = false;
		for(var i=0;i<obj.childNodes.length;i++){
			var child = obj.childNodes.item(i);
			if(checkTagName(child, "LI")){
				hasChildren = true;
			}
		}
		obj.hasChildren = hasChildren;
		return hasChildren;
	}
	function openTree(obj){
		if(hasChildTree(obj)){
			for(var i=0;i<obj.childNodes.length;i++){
				var child = obj.childNodes.item(i);
				if(checkTagName(child, "UL")){
					child.style.display = "block";
					openTreeAjax(obj);
					
				}
			}
			obj.className = "closedHasChild"
			obj.openTree = true;
		}else{
			if(obj.className != "attachment" && obj.className != "attachmentOpen" && obj.className != "note" && obj.className != "noteOpen"){
				obj.className = "closedNoChild"
			}
		}
		return false;
	}
	function closeTree(obj){
		if(hasChildTree(obj)){
			for(var i=0;i<obj.childNodes.length;i++){
				var child = obj.childNodes.item(i);
				if(checkTagName(child, "UL")){
					child.style.display = "none";
				}
			}
			obj.className = "closedShowChild"
		}
		obj.openTree = false;
		return false;
	}
	function openTreeAjax(obj){
		var url = "ajax_kbarea.jsp";
		var pars = "ItemID=" + obj.getAttribute("ItemID") + "&List=1";
		var target = iw_DHTML.getFirstChildByName(obj, "UL");
		if(!hasChildMembers(target)){
			Element.cleanWhitespace(target);
			var myAjax = new iw_Ajax.Updater({success: target, failure: document.body}, url, {method: 'get', parameters: pars});
		}
		addDelay(target, 'attachUL', "", 500);
	}
	function addDelay(obj, func, params, timer){
		obj = $(obj);
		if(obj.id == null || obj.id == ""){
			var mytime = new Date();
			obj.id = mytime.getTime();
		}
		var myString = " " + func + "('"+obj.id+"'" + params + ");";
		setTimeout(myString, timer);
	}
	function openFolderAjax(obj){
		var url = "ajax_kbarea.jsp";
		var pars = "ItemID=" + obj.getAttribute("ItemID") + "&subType=" + obj.getAttribute("TableID") + "&Details=1";
		var target = $("kbResult");
		iw_DHTML.removeChildren(target);
		var myAjax = new iw_Ajax.Updater({success: target, failure: document.body}, url, {method: 'get', parameters: pars});
		
	}
	function openFolder(obj){
		if(treeOpenFolder){
			closeFolder(treeOpenFolder)
		}
		treeOpenFolder = obj;
		if(hasChildTree(obj)){
			if(obj.openTree){
				obj.className = "openHasChild";
			}else{
				obj.className = "openShowChild";
			}
		}else{
			if(obj.className == "attachment"){
				obj.className = "attachmentOpen";
			}else if(obj.className == "note"){
				obj.className = "noteOpen";
			}else{
				obj.className = "openNoChild";
			}
		}
		obj.openFolder = true;
		$('AreaID').value = obj.getAttribute("ItemID");
		$('AreaTableID').value = obj.getAttribute("TableID");
		openFolderAjax(obj);
		return false;
	}
	function closeFolder(obj){
		if(hasChildTree(obj)){
			if(obj.openTree){
				obj.className = "closedHasChild";
			}else{
				obj.className = "closedShowChild";
			}
			
		}else{
			if(obj.className == "attachmentOpen" || obj.className == "attachment"){
				obj.className = "attachment";
			}else if(obj.className == "noteOpen" || obj.className == "note"){
				obj.className = "note";
			}else{
				obj.className = "closedNoChild";
			}
		}
		obj.openFolder = false;
		return false;
	}
	function getMouseLeft(event){
		try{
			if (document.all) { 
				return event.clientX + document.body.scrollLeft -12;
			}else{
				return event.clientX + document.body.scrollLeft;
			}
		}catch(err){}
		 
	}
	function getMouseTop(event){
		try{
			if (document.all) { 
				return event.clientY + document.body.scrollTop;
			}else{
				return event.clientY + document.body.scrollTop;
			}
		}catch(err){}
		 
	}
	function processClick(event){
		//uses prototype to create obj.
		var obj = Event.element(event);
		if(obj.event==event){return false;}else{obj.event=event}
		var position = Position.cumulativeOffset(obj)
		var myLeft = position[0];
		var myTop = position[1];
		var clickLeft = Event.pointerX(event);
		var clickTop = Event.pointerY(event);
		var Ldiff = myLeft - clickLeft;
		var Tdiff = myTop - clickTop;
		if(Tdiff< -15){return false;}
		if(Ldiff > 0){
			if(!obj.openTree){
				openTree(obj)
			}else{
				closeTree(obj)
			}
		}else{
			if(!obj.openFolder){
				openFolder(obj);
			}else{
				closeFolder(obj);
			}
		}
		Event.stop(event)
		event.cancelBubble=true;
	}
	function attachUL(ul){
		ul = $(ul);
		for(var i=0;i<ul.getElementsByTagName("LI").length;i++){
			var li = ul.getElementsByTagName("LI").item(i);
			if(hasChildTree(li)){
				li.className = "closedShowChild"
			}
			Event.observe(li, "click", processClick, false);
		}
	}
	function openAllTree(obj){
		var tree  = $(obj);
		var ctr = 0;
		for(var i=0;i<tree.getElementsByTagName("LI").length;i++){
			var child = tree.getElementsByTagName("LI").item(i);
			openTree(child);
		}
	}
	function closeAllTree(obj){
		var tree  = $(obj);
		var ctr = 0;
		for(var i=0;i<tree.getElementsByTagName("LI").length;i++){
			var child = tree.getElementsByTagName("LI").item(i);
			closeTree(child);
		}
	}
	function initTree(){
		for(var j=0;j<document.getElementsByTagName("UL").length;j++){
			var ul = document.getElementsByTagName("UL").item(j);
			if(ul.className == "tree"){
				attachUL(ul);
			}
		}
	}