<!-- 
//  树形菜单
//  树中的每一个节点都由一个长度>=6的数组构成
//  node[0] 取值 0/1 分别代表节点的“关闭/打开”
//  node[1] 取值 0/1 分别代表文件夹的“关闭/打开”
//  node[2] 取值 1 代表其children是文档类型
//  node[3] 文件夹的名称
//  node[4] 储存目录编号
//  node[5] 储存目录层次
//  node[6]...node[6+n] 分别代表n个 children 节点

// ***************
// Building the data in the tree

var mnuHTML;

function getMnuHTML(sHTML)
{
    mnuHTML += sHTML;
}

// Auxiliary function to build the node
function folderNode(name, info, level)
{
	var arrayAux;
	arrayAux = new Array;
	arrayAux[0] = 0;
	arrayAux[1] = 0;
	arrayAux[2] = 0;
	arrayAux[3] = name;
	arrayAux[4] = info;
	arrayAux[5] = level;
	return arrayAux;
}
function leafNode(name, info, level)
{
  var arrayAux
	arrayAux = new Array;
	arrayAux[0] = 0;
	arrayAux[1] = 0;
	arrayAux[2] = 1;
	arrayAux[3] = name;
	arrayAux[4] = info;
	arrayAux[5] = level;
	
	return arrayAux;
}
//this way the generate tree function becomes simpler and less error prone
function appendChild(parent, child)
{
	parent[parent.length] = child;
	return child
}
//these are the last entries in the hierarchy, the local and remote links to html documents
function generateDocEntry(icon, docDescription, link)
{
   var retString = ""
	if (icon==0)
		retString = "<A class=a12 href='"+link+"'><img src='images/foldertree/file.gif' align=middle alt='Opens in right frame'"
	else
		retString = "<A class=a12 href='http://"+link+"' target=_blank><img src='images/foldertree/link.gif' alt='Opens in new window'"
		
	retString = "<td nowrap>" + retString + " border=0>" + docDescription + "</a>"
	return retString
}

// **********************
// display functions
//redraws the left frame
function redrawTree()
{
  var doc = document
	mnuHTML = ""
	  
	redrawNode(foldersTree, doc, 0, 1, "")
	doc.all("menu").innerHTML = mnuHTML;
}

//recursive function over the tree structure called by redrawTree
function redrawNode(foldersNode, doc, level, lastNode, leftSide)
{
    var j=0
    var i=0
	getMnuHTML("<table border=0 cellspacing=0 cellpadding=0>")
	getMnuHTML("<tr><td valign = middle nowrap>")
	getMnuHTML(leftSide)
	if (level>0)
		if (lastNode) //the last 'brother' in the children array
		{
			getMnuHTML("<img src='images/foldertree/lastnode.gif' width=16 height=22>")
			leftSide = leftSide + "<img src='images/foldertree/blank.gif' width=16 height=22>" 
		}
		else
		{
			getMnuHTML("<img src='images/foldertree/node.gif' width=16 height=22>")
		   leftSide = leftSide + "<img src='images/foldertree/vertline.gif' width=16 height=22>"
		}
	displayIconAndLabel(foldersNode, doc)
	getMnuHTML("</table>")
	if (foldersNode.length > 6 && foldersNode[0]) //there are sub-nodes and the folder is open
	{
		if (!foldersNode[2]) //for folders with folders
		{
			level=level+1
			for (i=6; i<foldersNode.length;i++)
				if (i==foldersNode.length-1)
					redrawNode(foldersNode[i], doc, level, 1, leftSide)
				else
					redrawNode(foldersNode[i], doc, level, 0, leftSide)
		}
		else //for folders with documents
		{
			for (i=6; i<foldersNode.length;i++)
			{
				getMnuHTML("<table border=0 cellspacing=0 cellpadding=0 valign=center>")
				getMnuHTML("<tr><td nowrap>")
				getMnuHTML(leftSide)
				if (i==foldersNode.length - 1)
				 getMnuHTML("<img src='images/foldertree/lastnode.gif' width=16 height=22>")
				else
					getMnuHTML("<img src='images/foldertree/node.gif' width=16 height=22>")
				getMnuHTML(foldersNode[i])
				getMnuHTML("</table>")
			}
		}
	}
}
//builds the html code to display a folder and its label
function displayIconAndLabel(foldersNode, doc)
{
	if (foldersNode[1]) getMnuHTML("<img src=\"images/foldertree/openfolder.gif\" border=noborder align=middle>")
	else getMnuHTML("<img src=\"images/foldertree/closedfolder.gif\" border=noborder align=middle>")

	getMnuHTML("<td valign=middle align=left nowrap>")
	getMnuHTML("<b>")
	getMnuHTML("<A class=a12 href='javascript:openBranch(\"" + foldersNode[3] + "\", \"" + foldersNode[4] + "\", \"" + foldersNode[5] + "\")'")
	
	if (foldersNode[1]) getMnuHTML("onMouseOver='window.status=\"click to close\"; return true'>")
	else getMnuHTML("onMouseOver='window.status=\"click to open\"; return true'>")

	getMnuHTML(foldersNode[3]+"</a></b>")
	
}
//**********************+
// Recursive functions
//when a parent is closed all children also are
function closeFolders(foldersNode)
{
    var i=0
	if (!foldersNode[2])
	{
		for (i=6; i< foldersNode.length; i++)
			closeFolders(foldersNode[i])
	}
	foldersNode[0] = 0
	foldersNode[1] = 0
}
//recursive over the tree structure
//called by openbranch
function clickOnFolderRec(foldersNode, folderName, level)
{
    var i=0
	if (foldersNode[3] == folderName)
	{
		if (foldersNode[0]) //如果已经打开的话，关闭
			closeFolders(foldersNode)
		else
		{
			foldersNode[0] = 1
			foldersNode[1] = 1
		}
	}
	else
	{
	    if (foldersNode[5] >= level) closeFolders(foldersNode)
		if (!foldersNode[2])
			for (i=6; i< foldersNode.length; i++)
			{
				clickOnFolderRec(foldersNode[i], folderName, level)
				//closeFolders(foldersNode)
		    }
	}
}

// ********************
// Event handlers
//called when the user clicks on a folder
function openBranch(branchName, info, level)
{
	clickOnFolderRec(foldersTree, branchName, level)
	if (typeof(info) != "undefined" && info != "undefined")
	{
		window.location = info;
	}
	
	timeOutId = setTimeout("redrawTree()",100)
}
//called after this html file is loaded
function initializeTree()
{
	generateTree();
	redrawTree();
}
var foldersTree = 0
var timeOutId = 0

// end hiding contents from old browsers  -->