/**
*构造树
*/
var TREE_HTML ;
var TREE_CONTAINER ;
var TREE_XML_DOCUMENT ;
function treeView()
{
	this.expand = expandNode ;
	this.createNode = createTreeNode ;
	this.addNode = addTreeNode ;
}
/**
*treeNode
*@param:id 节点id,image 节点前图片url,descript 节点描述,url 节点链接对象,target 节点链接对象的目标
*@return:none
*/
function treeNode(id,image,descript,url,target)
{
	//属性
	this.id = id ;
	this.image = image ;
	this.descript = descript ;
	this.url = url ;
	this.target = target ;
}
function addChildNode(parentid)
{
	var childNodes = TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+parentid+"']") ;
	var vNodeHtml = "" ;

	for(var i=0;i<childNodes.length;i++)
	{
		var treenode = createTreeNode(childNodes.item(i)) ;
		var vImgHtml = "" ;
		if(i != childNodes.length-1){
			if(TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+treenode.id+"']").length >0){
				vImgHtml = "<span id=img_"+treenode.id+"_node style=\"display:none\"><img src=\"images/node.gif\" ></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_endnode style=\"display:none\"><img src=\"images/endnode.gif\" ></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_closenodes style=\"display:block\"><img src=\"images/closenodes.gif\" onclick=\"openNode('"+treenode.id+"','0')\"></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_endclosenodes style=\"display:none\"><img src=\"images/endclosenodes.gif\" onclick=\"openNode('"+treenode.id+"','1')\"></span>" ;
			}else{
				vImgHtml = "<span id=img_"+treenode.id+"_node style=\"display:block\"><img src=\"images/node.gif\" ></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_endnode style=\"display:none\"><img src=\"images/endnode.gif\" ></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_closenodes style=\"display:none\"><img src=\"images/closenodes.gif\" onclick=\"openNode('"+treenode.id+"','0')\"></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_endclosenodes style=\"display:none\"><img src=\"images/endclosenodes.gif\" onclick=\"openNode('"+treenode.id+"','1')\"></span>" ;
			}
		}else{
			if(TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+treenode.id+"']").length >0){
				vImgHtml = "<span id=img_"+treenode.id+"_node style=\"display:none\"><img src=\"images/node.gif\" ></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_endnode style=\"display:none\"><img src=\"images/endnode.gif\" ></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_closenodes style=\"display:none\"><img src=\"images/closenodes.gif\" onclick=\"openNode('"+treenode.id+"','0')\"></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_endclosenodes style=\"display:block\"><img src=\"images/endclosenodes.gif\" onclick=\"openNode('"+treenode.id+"','1')\"></span>" ;
			}else{
				vImgHtml = "<span id=img_"+treenode.id+"_node style=\"display:none\"><img src=\"images/node.gif\" ></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_endnode style=\"display:block\"><img src=\"images/endnode.gif\" ></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_closenodes style=\"display:none\"><img src=\"images/closenodes.gif\" onclick=\"openNode('"+treenode.id+"','0')\"></span>" ;
				vImgHtml += "<span id=img_"+treenode.id+"_endclosenodes style=\"display:none\"><img src=\"images/endclosenodes.gif\" onclick=\"openNode('"+treenode.id+"','1')\"></span>" ;

			}
		}
        vImgHtml += "<span id=img_"+treenode.id+"_opennodes style=\"display:none\"><img src=\"images/opennodes.gif\" onclick=\"closeNode('"+treenode.id+"','0')\"></span>" ;
		vImgHtml += "<span id=img_"+treenode.id+"_endopennodes style=\"display:none\"><img src=\"images/endopennodes.gif\" onclick=\"closeNode('"+treenode.id+"','1')\"></span>" ;

		vNodeHtml = "<div id=node_"+treenode.id+" style=\"display:block\">" ;
		vNodeHtml += "<table border=0 cellpadding=0 cellspacing=0>" ;
	    vNodeHtml += "<tr>";
		vNodeHtml += "<td>" + vImgHtml + "</td>" ;
		vNodeHtml += "<td style=\"font-size:9pt\">";
		if(treenode.image != "") vNodeHtml += "<img src=\""+treenode.image+"\" style=\"width:20px;height:16px\">" ;
		if(treenode.url != ""){
			vNodeHtml += "<a href=\""+treenode.url+"\" title='"+treenode.descript+"'" ;
			if(treenode.target != "")
				vNodeHtml += " target="+treenode.target + ">" ;
			else
				vNodeHtml += " target=_blank>" ;
		}
		vNodeHtml += "<span id=node_descript_"+treenode.id+" onclick=\"outputNodeId('"+treenode.id+"')\">"+treenode.descript+"</span>" ;
		if(treenode.url != "") vNodeHtml += "</a>" ;
		vNodeHtml += "</td></tr>" ;
		vNodeHtml += "<tr><td id=bgimg_"+treenode.id+" style=\"background-image:url(images/vertline.gif)\"></td><td id=node_child_"+treenode.id+" style=\"display:none\"></td></tr>" ;
		vNodeHtml += "</table>" ;
		document.all["node_child_"+parentid].innerHTML += vNodeHtml ;
	}
}
/**
*生成节点的html代码
*@return:html 代码
*@param:node(treeNode).parentid(treeNode.id)
*/
function addTreeNode(node,parentid)
{
	if(TREE_XML_DOCUMENT.selectSingleNode("/tree/node[id='"+node.id+"']") != null){
		alert("该节点已存在！");
		return ;
	}
	if(parentid != ""){
		xmlInsertNode(node,parentid);
		var vParentNode = TREE_XML_DOCUMENT.selectSingleNode("/tree/node[id='"+parentid+"']") ;
		if(vParentNode != null){
			var ancestor = getAncestorId(parentid);
			ancestor = ancestor.substring(ancestor.indexOf(";")+1) + parentid + ";";
			if(ancestor != ""){
				while(ancestor.indexOf(";") > 0){
					var tempNodeId = ancestor.substring(0,ancestor.indexOf(";"));
					if(isLastNode(tempNodeId)){
						if(document.all["node_child_"+tempNodeId].style.display == 'none')
							openNode(tempNodeId,1);
						else
							addTreeNodeHtml(node,parentid);
					}else{
						if(document.all["node_child_"+tempNodeId].style.display == 'none')
							openNode(tempNodeId,0);
						else
							addTreeNodeHtml(node,parentid);
					}
					ancestor = ancestor.substring(ancestor.indexOf(";")+1,ancestor.length);
				}
			}

			if(preBrotherNodeId(node.id) != ""){
				var tempNode = TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+preBrotherNodeId(node.id)+"']") ;
				if(tempNode.length >0){
					if(document.all["node_child_"+preBrotherNodeId(node.id)].style.display == "block"){
						document.all["img_"+preBrotherNodeId(node.id)+"_opennodes"].style.display = 'block' ;
						document.all["img_"+preBrotherNodeId(node.id)+"_endopennodes"].style.display = 'none' ;
					}else{
						document.all["img_"+preBrotherNodeId(node.id)+"_closenodes"].style.display = 'block' ;
						document.all["img_"+preBrotherNodeId(node.id)+"_endclosenodes"].style.display = 'none' ;
					}
				}else{
					document.all["img_"+preBrotherNodeId(node.id)+"_node"].style.display = 'block' ;
					document.all["img_"+preBrotherNodeId(node.id)+"_endnode"].style.display = 'none' ;
				}
			}


		}else{
			alert("父节点不存在，添加失败！");
		}
	}
}
function addTreeNodeHtml(node,parentid)
{
	var vImgHtml = "<span id=img_"+node.id+"_node style=\"display:none\"><img src=\"images/node.gif\" ></span>" ;
	vImgHtml += "<span id=img_"+node.id+"_endnode style=\"display:block\"><img src=\"images/endnode.gif\" ></span>" ;
	vImgHtml += "<span id=img_"+node.id+"_closenodes style=\"display:none\"><img src=\"images/closenodes.gif\" onclick=\"openNode('"+node.id+"','0')\"></span>" ;
	vImgHtml += "<span id=img_"+node.id+"_endclosenodes style=\"display:none\"><img src=\"images/endclosenodes.gif\" onclick=\"openNode('"+node.id+"','1')\"></span>" ;
	vImgHtml += "<span id=img_"+node.id+"_opennodes style=\"display:none\"><img src=\"images/opennodes.gif\" onclick=\"closeNode('"+node.id+"','0')\"></span>" ;
	vImgHtml += "<span id=img_"+node.id+"_endopennodes style=\"display:none\"><img src=\"images/endopennodes.gif\" onclick=\"closeNode('"+node.id+"','1')\"></span>" ;
	var vNodeHtml = "<div id=node_"+node.id+">" ;
	vNodeHtml += "<table border=0 cellpadding=0 cellspacing=0>" ;
	vNodeHtml += "<tr>";
	vNodeHtml += "<td>" + vImgHtml + "</td>" ;
	vNodeHtml += "<td style=\"font-size:9pt\">";
	if(node.image != "") vNodeHtml += "<img src=\""+treenode.image+"\" style=\"width:20px;heigth:16px\">" ;
	if(node.url != ""){
		vNodeHtml += "<a href=\""+node.url+"\"" ;
		if(node.target != "")
			vNodeHtml += " target="+node.target + ">" ;
		else
			vNodeHtml += " target=_blank>" ;
	}
	vNodeHtml += "<span id=node_descript_"+node.id+" onclick=\"outputNodeId('"+node.id+"')\">"+node.descript+"</span>" ;
	if(node.url != "") vNodeHtml += "</a>" ;
	vNodeHtml += "</td></tr>" ;
	vNodeHtml += "<tr><td id=bgimg_"+node.id+" style=\"background-image:url(images/vertline.gif)\"></td><td id=node_child_"+node.id+" style=\"display:none\"></td></tr>" ;
	vNodeHtml += "</table>" ;
	document.all["node_child_"+parentid].innerHTML += vNodeHtml ;
}
/**
*创建一个treeNode
*@return:treeNode
*@param:node(treeNode)
*/
function createTreeNode(node)
{
	var treenode = new treeNode ;
	for(var i=0;i<node.childNodes.length;i++)
	{
		tempNode = node.childNodes.item(i);
		if(tempNode.nodeName == "id")
			treenode.id = tempNode.text ;
		if(tempNode.nodeName == "image")
			treenode.image = tempNode.text ;
		if(tempNode.nodeName == "descript")
			treenode.descript = tempNode.text ;
		if(tempNode.nodeName == "url")
			treenode.url = tempNode.text ;
		if(tempNode.nodeName == "target")
			treenode.target = tempNode.text ;

	}
	return treenode ;
}
/**
*收缩一个节点
*@return:none
*@param:nodeid 节点id,end 是否是尾节点 1(是) 0(否)
*/
function closeNode(nodeid,end)
{
	document.all["node_child_"+nodeid].style.display = 'none' ;
	if(end == '1'){
		document.all["img_"+nodeid+"_endopennodes"].style.display = 'none' ;
		document.all["img_"+nodeid+"_endclosenodes"].style.display = 'block' ;
	}
	else{
		document.all["img_"+nodeid+"_opennodes"].style.display = 'none' ;
		document.all["img_"+nodeid+"_closenodes"].style.display = 'block' ;
		document.all["bgimg_"+nodeid].style.backgroundImage = "url(images/vertline.gif)" ;
	}
}
function delTreeNode(nodeid)
{
	var tempNode = TREE_XML_DOCUMENT.selectSingleNode("/tree/node[id='"+nodeid+"']") ;
	var rootNode = TREE_XML_DOCUMENT.selectSingleNode("/tree");
	var vPreBrotherNodeId = preBrotherNodeId(nodeid);
	rootNode.removeChild(tempNode);
	document.all["node_"+nodeid].style.display = 'none';
	var tempNode = TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+parentNodeId(nodeid)+"']") ;
	if(tempNode.length >0){
		if(parentNodeId(nodeid) != ""){
			if(isLastNode(parentNodeId(nodeid))){
				document.all["img_"+parentNodeId(nodeid)+"_node"].style.display = 'none' ;
				document.all["img_"+parentNodeId(nodeid)+"_endnode"].style.display = 'none' ;
				document.all["img_"+parentNodeId(nodeid)+"_closenodes"].style.display = 'none' ;
				document.all["img_"+parentNodeId(nodeid)+"_endclosenodes"].style.display = 'block' ;
				document.all["img_"+parentNodeId(nodeid)+"_opennodes"].style.display = 'none' ;
				document.all["img_"+parentNodeId(nodeid)+"_endopennodes"].style.display = 'none' ;
			}else{
				document.all["img_"+parentNodeId(nodeid)+"_node"].style.display = 'none' ;
				document.all["img_"+parentNodeId(nodeid)+"_endnode"].style.display = 'none' ;
				document.all["img_"+parentNodeId(nodeid)+"_closenodes"].style.display = 'block' ;
				document.all["img_"+parentNodeId(nodeid)+"_endclosenodes"].style.display = 'none' ;
				document.all["img_"+parentNodeId(nodeid)+"_opennodes"].style.display = 'none' ;
				document.all["img_"+parentNodeId(nodeid)+"_endopennodes"].style.display = 'none' ;
			}
		}
		if(vPreBrotherNodeId != null && vPreBrotherNodeId != ""){
			var vPreBrotherNodeChildNodes = TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+vPreBrotherNodeId+"']") ;

			if(vPreBrotherNodeChildNodes.length>0){
				if(document.all["node_child_"+vPreBrotherNodeId].style.display == 'block'){
					if(isLastNode(vPreBrotherNodeId)){
						document.all["img_"+vPreBrotherNodeId+"_opennodes"].style.display = 'none' ;
						document.all["img_"+vPreBrotherNodeId+"_endopennodes"].style.display = 'block' ;
						document.all["bgimg_"+vPreBrotherNodeId].style.backgroundImage = "url()" ;
					}
				}else{
					if(isLastNode(vPreBrotherNodeId)){
						document.all["img_"+vPreBrotherNodeId+"_closenodes"].style.display = 'none' ;
						document.all["img_"+vPreBrotherNodeId+"_endclosenodes"].style.display = 'block' ;
					}
				}
			}else{
				if(isLastNode(vPreBrotherNodeId)){
					document.all["img_"+vPreBrotherNodeId+"_node"].style.display = 'none' ;
					document.all["img_"+vPreBrotherNodeId+"_endnode"].style.display = 'block' ;
				}
			}
		}
	}else{
		if(isLastNode(parentNodeId(nodeid))){
			document.all["img_"+parentNodeId(nodeid)+"_node"].style.display = 'none' ;
			document.all["img_"+parentNodeId(nodeid)+"_endnode"].style.display = 'block' ;
			document.all["img_"+parentNodeId(nodeid)+"_closenodes"].style.display = 'none' ;
			document.all["img_"+parentNodeId(nodeid)+"_endclosenodes"].style.display = 'none' ;
			document.all["img_"+parentNodeId(nodeid)+"_opennodes"].style.display = 'none' ;
			document.all["img_"+parentNodeId(nodeid)+"_endopennodes"].style.display = 'none' ;
		}else{
			document.all["img_"+parentNodeId(nodeid)+"_node"].style.display = 'block' ;
			document.all["img_"+parentNodeId(nodeid)+"_endnode"].style.display = 'none' ;
			document.all["img_"+parentNodeId(nodeid)+"_closenodes"].style.display = 'none' ;
			document.all["img_"+parentNodeId(nodeid)+"_endclosenodes"].style.display = 'none' ;
			document.all["img_"+parentNodeId(nodeid)+"_opennodes"].style.display = 'none' ;
			document.all["img_"+parentNodeId(nodeid)+"_endopennodes"].style.display = 'none' ;
		}
	}

}

function expandNode(container,xmlsource)
{
	TREE_CONTAINER = container ;
	TREE_XML_DOCUMENT = xmlsource.XMLDocument ;
	var rootnode =  createTreeNode(TREE_XML_DOCUMENT.selectSingleNode("/tree/node[@parentid='']")) ;
	var rootNodeHtml = "<div id=tree_root>";
	rootNodeHtml += "<table border=0 cellpadding=0 cellspacing=0>" ;
	rootNodeHtml += "<tr><td style=\"font-size:9pt\">";
	if(rootnode.image != "") rootNodeHtml += "<img src=\""+rootnode.image+"\">" ;
	rootNodeHtml += rootnode.descript ;
	rootNodeHtml += "</td></tr>" ;
	rootNodeHtml += "<tr><td id=node_child_"+rootnode.id+"></td></tr>" ;
	rootNodeHtml += "</table>" ;
	rootNodeHtml += "</div>" ;
	document.all[container].innerHTML = rootNodeHtml ;
	addChildNode(rootnode.id)
}
function getAncestorId(nodeid)
{
	var ancestorId = "" ;
	var vParentNode = TREE_XML_DOCUMENT.selectSingleNode("/tree/node[id='"+nodeid+"']") ;
	if(vParentNode.getAttribute("parentid") != ""){
		var parentNode = TREE_XML_DOCUMENT.selectSingleNode("/tree/node[id='"+vParentNode.getAttribute("parentid")+"']") ;
		if(createTreeNode(parentNode).id != "")
			ancestorId =   getAncestorId(createTreeNode(parentNode).id)  + ancestorId ;

			ancestorId += vParentNode.getAttribute("parentid") + ";" ;
	}
	return ancestorId ;
}

/**
*判断是否为尾节点
*@return:boolean
*@param:nodeid 节点id
*/
function isLastNode(nodeid)
{
	var tempNode =  TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+parentNodeId(nodeid)+"']") ;
	if(tempNode.length>0){
		if(createTreeNode(tempNode.item(tempNode.length-1)).id != nodeid)
			return false;
		else
			return true ;
	}else{
		return false ;
	}
}
function lastNodeId(nodeid)
{
	var tempNode = TREE_XML_DOCUMENT.selectSingleNode("/tree/node[id='"+nodeid+"']") ;
	var parentNodeId = tempNode.getAttribute("parentid");
	var parentChildNode = TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+parentNodeId+"']") ;
	var lastNodeId = "";
	lasetNodId = createTreeNode(parentChildNode.item(parentChildNode.length-1)).id;
	return lastNodeId ;

}
function modifyNodeDescript(nodeid,descript)
{
	var tempNode = TREE_XML_DOCUMENT.selectSingleNode("/tree/node[id='"+nodeid+"']") ;
	for(var i=0;i<tempNode.childNodes.length;i++)
	{
		node = tempNode.childNodes.item(i);
		if(node.nodeName == "descript"){
			node.text = descript;
		}
	}
	document.all["node_descript_"+nodeid].innerHTML = descript ;
}
/**
*展开一个节点,并添加该节点的child
*@return:none
*@param:nodeid 节点id,end 是否是尾节点 1(是) 0(否)
*/
function openNode(nodeid,end)
{
	document.all["node_child_"+nodeid].innerHTML = "" ;
	if(TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+nodeid+"']").length>0)
		addChildNode(nodeid);
	document.all["node_child_"+nodeid].style.display = 'block' ;
	if(end == '1'){
		document.all["img_"+nodeid+"_node"].style.display = 'none' ;
		document.all["img_"+nodeid+"_endnode"].style.display = 'none' ;
		document.all["img_"+nodeid+"_closenodes"].style.display = 'none' ;
		document.all["img_"+nodeid+"_endclosenodes"].style.display = 'none' ;
		document.all["img_"+nodeid+"_opennodes"].style.display = 'none' ;
		document.all["img_"+nodeid+"_endopennodes"].style.display = 'block' ;
		document.all["bgimg_"+nodeid].style.backgroundImage = "url()" ;
	}
	else{
		document.all["img_"+nodeid+"_node"].style.display = 'none' ;
		document.all["img_"+nodeid+"_endnode"].style.display = 'none' ;
		document.all["img_"+nodeid+"_closenodes"].style.display = 'none' ;
		document.all["img_"+nodeid+"_endclosenodes"].style.display = 'none' ;
		document.all["img_"+nodeid+"_opennodes"].style.display = 'block' ;
		document.all["img_"+nodeid+"_endopennodes"].style.display = 'none' ;

	}

}
/**
*得到节点前一个节点的id
*@return:treeNode.id
*@param:parentid 父节点id
*/
function preBrotherNodeId(nodeid)
{
	var tempNodeId = "" ;
	var tempNode = TREE_XML_DOCUMENT.selectSingleNode("/tree/node[id='"+nodeid+"']") ;
	var parentNodeId = tempNode.getAttribute("parentid");
	var parentChildNode = TREE_XML_DOCUMENT.selectNodes("/tree/node[@parentid='"+parentNodeId+"']") ;
	tempNodeId = createTreeNode(parentChildNode.item(parentChildNode.length-2)).id ;
	return tempNodeId ;
}
/**
*得到父节点id
*@return:treeNode.id
*@param:nodeid 节点id
*/
function parentNodeId(nodeid)
{
	var tempNodeId = "" ;
	if(nodeid != ""){
		var tempNode = TREE_XML_DOCUMENT.selectSingleNode("/tree/node[id='"+nodeid+"']") ;
		if(tempNode != null){
			tempNodeId = tempNode.getAttribute("parentid") ;
		}
	}
	return tempNodeId ;
}

/**
*向xml中插入接点
*@return:none
*@param:parentid 节点的父节点id,nodeid 节点id
*/
function xmlInsertNode(node,parentid)
{
	var treeNode = TREE_XML_DOCUMENT.selectSingleNode("/tree");
	var xmlNode = TREE_XML_DOCUMENT.createElement("node");
	var xmlNodeId = TREE_XML_DOCUMENT.createElement("id");
	xmlNodeId.text = node.id ;
	var xmlNodeImage = TREE_XML_DOCUMENT.createElement("image");
	xmlNodeImage.text = node.image;
	var xmlNodeDescript = TREE_XML_DOCUMENT.createElement("descript");
	xmlNodeDescript.text = node.descript ;
	var xmlNodeUrl = TREE_XML_DOCUMENT.createElement("url");
	xmlNodeUrl.text = node.url ;
	var xmlNodeTarget = TREE_XML_DOCUMENT.createElement("target");
	xmlNodeTarget.text = node.target ;
	var xmlNodeAttribute = TREE_XML_DOCUMENT.createAttribute("parentid");
	xmlNodeAttribute.text = parentid ;
	xmlNode.appendChild(xmlNodeId) ;
	xmlNode.appendChild(xmlNodeImage) ;
	xmlNode.appendChild(xmlNodeDescript) ;
	xmlNode.appendChild(xmlNodeUrl) ;
	xmlNode.appendChild(xmlNodeTarget) ;
	xmlNode.attributes.setNamedItem(xmlNodeAttribute) ;
	treeNode.appendChild(xmlNode);
}
function outputNodeId(nodeid){

	document.all["nodeidinput"].value = nodeid ;
}