﻿// +--------------------------------------------+
// | wsTreeCtrl	for Javascript					|		
// +--------------------------------------------+
// | 2004, whitespray							|
// | http://whitespray.com						|
// +--------------------------------------------+
function ShowWsTreeMenu() {
	document.all.diswsTreeMenu.style.display = '';
}

function HideWsTreeMenu() {
	document.all.diswsTreeMenu.style.display = 'none';
}

var isOpened;
function InitIsOpenedArray( iMenuCount )
{
	isOpened = new Array( iMenuCount );
	
	for( var i = 0; i< iMenuCount ; i++ ) {
		isOpened[ i ] = 0;
	}
}

function OnMenuClick( ID, hreference, Target, iMenuCount ) {
	//document.all.target = Target;
	//top.parent[Target].location.href = hreference;
	parent.right.location.href = hreference;
}

function wsTreeCtrl()
{
	// Methods 
	this.initializeDocument	= initializeDocument;
	this.InsItem			= InsItem;
	this.GenerateCode		= GenerateCode;
	this.ToggleTree			= ToggleTree;
	this.ResetItem			= ResetItem;
	this.ExpandAllTree		= ExpandAllTree;
	this.RecudeAllTree		= RecudeAllTree;
	
	// constant 
	var nCount			= 0;
	var LastRootItem	= 0;
	var CtrlColor		= "#FFFFFF";
	
	// Image Define
	var ImgDir			= "./Images/";
	var RImg			= "r.gif";
	var LImg			= "l.gif";
	var TImg			= "t.gif";
	var FImg			= "f.gif";
	var IImg			= "i.gif";
	
	var RPlusImg		= "rplus.gif";
	var LPlusImg		= "lplus.gif";
	var FPlusImg		= "fplus.gif";
	var TPlusImg		= "tplus.gif";

	var RMinusImg		= "rminus.gif";
	var LMinusImg		= "lminus.gif";
	var FMinusImg		= "fminus.gif";
	var TMinusImg		= "tminus.gif";	
	
	var WhiteImg		= "white.gif";
	var ItemImg			= new Array();
	ItemImg[0]			= "html.gif";
	ItemImg[1]			= "icon_work.gif";
	ItemImg[2]			= "icon_board.gif";
	
	
	
	var RootImg			= "item.gif";
	var FolderImg		= "folder_.gif";
	var FolderOpenImg	= "folder_open.gif";
	
	
	
	// variable
	var Doc;
	var browserVersion;	
	var id		= "";
	var Item	= new Array();
	
	
	function initializeDocument() 
	{ 
		if (document.all) { //IE4
			Doc = document.all;
			browserVersion = 1;  
			
		}else if (document.layers) { //NS4 
			Doc = document.layers;
			browserVersion = 2; 

		}else if(document.getElementById) {	//NS6
			Doc = document;
			browserVersion = 3;		
			
		}else {	//other 
			Doc = document.all;
			browserVersion = 0; 
		}
	} 	
	
	function InsItem(parentItem, description, hreference, target, ImgType) {
		var iDepth = 0;
		var iLength = Item.length;
		
		if(parentItem == null) {
			parentItem = iLength;
		}
		
		if(Item[parentItem] != null) {
			iDepth = Item[parentItem][4];
			iDepth++;
		}
		
		Item[iLength]		= new Array();
		Item[iLength][0]	= parentItem;
		Item[iLength][1]	= description;
		Item[iLength][2]	= hreference;
		Item[iLength][3]	= target;
		Item[iLength][4]	= iDepth;
		Item[iLength][5]	= true;
		Item[iLength][6]	= ImgType;
		
		nCount++;
		
		return iLength;		
	}
	
	function GenerateCode() {
		var NextItemDepth	= 0;
		var CurItemDepth	= 0;
		
		DocWrite("<table border='0' cellpadding='0' cellspacing='0'>");

		for(var i=0; i<nCount; i++) {
			DocWrite("<tr id=wsTree_".concat(i, " bgcolor='", CtrlColor, "' onclick=javascript:ToggleTree('", i, "','", GetChildItems(i), "') style='cursor:hand'><td>"));
			DocWrite("<table border='0' cellpadding='0' cellspacing='0'><tr><td>");
			DocWrite(GetSpace(i, Item[i][4], false));
			DocWrite("</td><td>");

			DocWrite("<a onmouseover=\"this.style.textDecoration='Underline'\" onmouseout=\"this.style.textDecoration='none'\" onfocus='this.blur()'>");
				
			var TempNodeImg;
			if(GetItemCount(i, Item[i][4]) == 1) { 
				if(Item.length == 1) { TempNodeImg = RImg; }
				else { TempNodeImg = LImg; }
			
			} else {		
				if(i == 0) { TempNodeImg = FImg; }
				else { TempNodeImg = TImg; }
			}
			
				
			DocWrite("<img id=wsTreeNodeImg_".concat(i, " src='", ImgDir, TempNodeImg, "' border='0'>", "</a>", "</td><td>"));		
			DocWrite("<img id=wsTreeItemImg_".concat(i, " src='", ImgDir, ItemImg[Item[i][6]], "' border='0'>", "</td><td>", "&nbsp;"));		

			if(Item[i][2] != "" && Item[i][2] != null) {
				DocWrite("<a onmouseover=\"this.style.textDecoration='Underline'\" onmouseout=\"this.style.textDecoration='none'\" onclick=\"OnMenuClick(".concat(i, ",'", Item[i][2],  "','", Item[i][3], "',", nCount, " )\"  onfocus='this.blur()'>"));
				
			}else {
				DocWrite("<a onmouseover=\"this.style.textDecoration='Underline'\" onmouseout=\"this.style.textDecoration='none'\" onfocus='this.blur()'>");
			}	
					
			DocWrite(Item[i][1]);
			
			if(Item[i][2] != "" && Item[i][2] != null) {
				DocWrite("</a>");
			}

			DocWrite("</td></tr></table></td></tr>");	
		}
		DocWrite("</table>");
		
		LastRootItem = GetRootItem(nCount-1);
	}
	
	function GetSpace(CurItem, Depth, bBlank)
	{
		var Space = "";
		for(var i=0; i<Depth; i++) {
			if(bBlank == false) {
				
				if(bHaveSameDepthChild(CurItem, i)) {
					Space = Space.concat("<img src=", ImgDir, IImg, ">");
					
				}else {
					Space = Space.concat("<img src=", ImgDir, WhiteImg, ">");
				}
				
			}else {
				Space = Space.concat("<img src=", ImgDir, WhiteImg, ">");
			}
		}
		
		return Space;
	}
	
	function bHaveSameDepthChild(CurItem, Depth)
	{
		if(CurItem < 0 || CurItem > Item.length) { return false; }

		var RootItem	= GetRootItemEx(Item[CurItem][0], Depth);
		var ItemCount	= GetItemCount(RootItem, Depth);

		var nRet = 0;
		var nRet2 = 0;


		var FirstDepth = -1;
		var bCheck = false;
		
		for(var i=RootItem; i<Item.length; i++) {
			if(Item[i][4] == Depth) {
				if(i > CurItem ) nRet2++;			
				nRet++;
			}
		}

		if(nRet > 1 && nRet2 > 0 && ItemCount > 1 ) {
			return true;

		}else {
			return false;
		}
	}
	
	function GetChildItems(iNode)
	{
		var ChildItems	= "";
		var CurDepth	= Item[iNode][4];
		
		for(var i=iNode+1; i<Item.length; i++) {

			if(CurDepth >= Item[i][4]) { return ChildItems; }
			
			if(Item[i][4] > Item[iNode][4]) {
				ChildItems = ChildItems.concat(i + ";");
			}
		}

		return ChildItems;
	}
	
	function ToggleTree(CurNode, NodeItem)
	{
		if(NodeItem == "") { return; }
		
		var NodeStatus;
		var arr		= new Array();
		
		arr = NodeItem.split(";");
		
		if(Item[CurNode][5] == true) {
			ToggleDisplayLayer(arr, CurNode, "none");
			Item[CurNode][5] = false;
		}else {
			ToggleDisplayLayer(arr, CurNode, "");
			Item[CurNode][5] = true;
			ResetItem(CurNode);
		}
	}
	
	function ToggleDisplayLayer(ItemArray, CurNode, Display)
	{
		var NodeImg;
		var ItemImg;
		var bShow;
		
		if(Display == "none") { bShow = false; }
		else{ bShow = true; }

		if(!bShow) {
			ItemImg = ImgDir + FolderImg;
			
			if(GetItemCount(CurNode,Item[CurNode][4]) == 1) {
				if(GetItemCount(GetRootItemEx(CurNode, 0),0) == 1 && CurNode == 0) {
					NodeImg = ImgDir.concat(RPlusImg); 
				}else {
					NodeImg = ImgDir.concat(LPlusImg); 
				}
				
			}else {
				if(CurNode == 0) {
					NodeImg = ImgDir.concat(FPlusImg); 
				}else {
					NodeImg = ImgDir.concat(TPlusImg); 
				}
			}
			
		}
		else {
			ItemImg = ImgDir.concat(FolderOpenImg);
			
			if(GetItemCount(CurNode,Item[CurNode][4]) == 1) {
				if(GetItemCount(GetRootItemEx(CurNode, 0),0) == 1 && CurNode == 0) {
					NodeImg = ImgDir.concat(RMinusImg); 
				}else {
					NodeImg = ImgDir.concat(LMinusImg); 
				}
				
			}else {
				if(CurNode == 0) {
					NodeImg = ImgDir.concat(FMinusImg); 
				}else {		
					NodeImg = ImgDir.concat(TMinusImg); 
				}
			}
		}

		for(var i=0; i<ItemArray.length-1; i++) {
			SetTreeVisible(ItemArray[i], bShow);			
			SetImgVisible(CurNode, NodeImg, 1);
			SetImgVisible(CurNode, ItemImg, 2);		
		}
	}
	
	function ResetItem(iNode)
	{
		for(var i=iNode; i<Item.length; i++) {
	
			if(!Item[i][5]) {
				var arr = new Array();
				arr = GetChildItems(i).split(";");
				
				for(var j=0; j<arr.length-1; j++) {
					SetTreeVisible(arr[j], false);
				}
			}
		}	
	}
	
	function SetTreeVisible(iItem, bShow)
	{
		if(!bShow) {
			if(browserVersion == 1) {
				Doc["wsTree_" + iItem].style.display = "none";
				
			}else if(browserVersion == 3) {
				document.getElementById("wsTree_" + iItem).style.display = "none";
				
			}else {
				Doc["wsTree_" + iItem].visibility = "hiden";
			}
	
		}else {
			if(browserVersion == 1) {
				Doc["wsTree_" + iItem].style.display = "block";
				
			}else if(browserVersion == 3) {
				Doc.getElementById("wsTree_" + iItem).style.display = "";	
							
			}else {
				Doc["wsTree_" + iItem].visibility = "show";
			}				
		}
	}	
	
	function SetImgVisible(iItem, ImgName, iType)
	{
		var ItemName;
		switch(iType) {
			case 1:		ItemName = "wsTreeNodeImg_"; break;
			case 2:		ItemName = "wsTreeItemImg_"; break;
			default:	ItemName = "wsTreeItemImg_"; break;
		}
				
		if(Item[iItem][6] != "0") {	
			if(browserVersion == 3) {
				Doc.getElementById(ItemName + iItem).src = ImgName;
			}else {
				Doc[ItemName + iItem].src = ImgName;
			}
		}else {
			if(browserVersion == 3) {
				if(iType != 1) {
					Doc.getElementById(ItemName + iItem).src = ImgDir + RootImg;
				}else {
					Doc.getElementById(ItemName + iItem).src = ImgName;
				}
				
			}else {
				if(iType != 1) {
					Doc[ItemName + iItem].src = ImgDir + RootImg;
				}else {
					Doc[ItemName + iItem].src = ImgName;
				}
			}
		}
	}	
	
	function ExpandAllTree()
	{
		for(var i=Item.length-1; i>=0; i--) {
			Item[i][5] = false;
			ToggleTree(i, GetChildItems(i));
		}
	}
	
	function RecudeAllTree()
	{
		for(var i=Item.length-1; i>=0; i--) {
			Item[i][5] = true;
			ToggleTree(i, GetChildItems(i));
		}
	}
	
	function GetRootItem(ChildItem) {
		if(Item[ChildItem] == null || Item[ChildItem][4] == 0) {
			return ChildItem;
		}else {
			return GetRootItem(Item[ChildItem][0]);
		}
	}
	
	function GetRootItemEx(ChildItem, Depth)
	{
		if(Item[ChildItem][4] == Depth) {
			return ChildItem;
			
		}else {
			return GetRootItemEx(Item[ChildItem][0], Depth);
		}
	}
	
	function GetItemCount(CurItem, Depth) {
		var nRet = 0;

		for(var i=CurItem; i<Item.length; i++) {
			if(Item[i][4] < Depth) break;
			if(Item[i][4] == Depth) {
				nRet++;
			}
		}	
		return nRet;
	}

	function DocWrite(strHtml) {
		document.write(strHtml);
	}
}

function ToggleTree(CurNode, NodeItem) {
	m_wsTreeCtrl.ToggleTree(CurNode, NodeItem);
}