var TreeViewConfig = Class.create();

TreeViewConfig.prototype = {

    initialize: function() {
        this.imgPath = ""; 																	//图片位置
        this.imgHeight = '16';													//图片高度
        this.vertlineImg = 'vertline.gif'; 										//竖线图片
        this.blankImg = 'blank.gif'; 												//空白图片
        this.lastnodeImg = 'lastnode.gif';										//最末叶子节点关节图片
        this.nodeImg = 'node.gif';												//普通叶子节点关节图片
        this.openfolderImg = 'o.gif'; 							//打开文件夹图片
        this.closedfolderImg = 'c.gif';							//关闭文件夹图片
        this.lastopenfolderImg = 'lastopenfolder.gif';					//最末节点文件夹打开状态关节图片
        this.openfoldernodeImg = 'openfoldernode.gif';				//普通文件夹打开状态关节图片
        this.lastclosedfolderImg = 'lastclosedfolder.gif';				//最末节点关闭文件夹图片
        this.closedfoldernodeImg = 'closedfoldernode.gif';			//普通文件夹关闭状态关节图片
        this.leafImg = 'e.gif';													//叶子节点图片
        this.rootImg = 'root.gif';
		
		this.draggable = false;
		this.table = false;

        this.descriptionTag = "description";									//xml文档中description标记
        this.extraInfo = null;																	//附加信息
        this.titleTag = 'description';												//title标记
        this.childXMLTag = "childXML";
        this.lastSelectedNode = null;
        this.fontSize = '12px';
    },

	setTable: function(table){
		this.table = table;
	},
	
	setDraggable: function(draggable) {
		this.draggable = draggable;
	},
	
    setRootImg: function(rootImg) {
        this.rootImg = rootImg;
    },

    setVertlineImg: function(vertlineImg) {
        this.vertlineImg = vertlineImg;
    },

    setBlankImg: function(blankImg) {
        this.blankImg = blankImg;
    },

    setLastnodeImg: function(lastnodeImg) {
        this.lastnodeImg = lastnodeImg;
    },

    setNodeImg: function(nodeImg) {
        this.nodeImg = nodeImg;
    },

    setOpenfolderImg: function(openfolderImg) {
        this.openfolderImg = openfolderImg;
    },

    setClosedfolderImg: function(closedfolderImg) {
        this.closedfolderImg = closedfolderImg;
    },

    setLastopenfolderImg: function(lastopenfolderImg) {
        this.lastopenfolderImg = lastopenfolderImg;
    },

    setOpenfoldernodeImg: function(openfoldernodeImg) {
        this.openfoldernodeImg = openfoldernodeImg;
    },

    setLastclosedfolderImg: function(lastclosedfolderImg) {
        this.lastclosedfolderImg = lastclosedfolderImg;
    },

    setClosedfoldernodeImg: function(closedfoldernodeImg) {
        this.closedfoldernodeImg = closedfoldernodeImg;
    },

    setLeafImg: function(leafImg) {
        this.leafImg = leafImg;
    },

    setChildXMLTag: function(childXMLTag) {
        this.childXMLTag = childXMLTag;
    },

    setDescriptionTag: function(descriptionTag) {
        this.descriptionTag = descriptionTag;
        this.titleTag = descriptionTag;
    },

    setTitleTag: function(titleTag) {
        this.titleTag = titleTag;
    },

    setImgPath: function(imgPath) {
        if (imgPath.lastIndexOf('/') != imgPath.length - 1) { //确保以"/"结尾
            imgPath += '/';
        }
        this.imgPath = imgPath;
    },

    setExtraInfo: function(extraInfo) {
        this.extraInfo = extraInfo;
    },

    setImgHeight: function(imgHeight) {
        this.imgHeight = imgHeight;
    },

    setFontSize: function(fontSize) {
        this.fontSize = fontSize;
    }
};

/**
 *dataXML
 *<rootTag>
 *	<nodeTag descriptioTag=xxx extroInfo=xxx,....>
 *		<nodeTag descriptioTag=xxx extroInfo=xxx,..../>
 *		... ...
 *	</nodeTag>
 *	.... ...
 *</rootTag>
 **/

var TreeView = Class.create();

TreeView.prototype = {

    initialize: function(xmlURL, containerId, treeViewConfig) {
        this.treeViewConfig = treeViewConfig;
        this.xmlURL = xmlURL; 													//xml数据源url
        this.containerId = containerId;											//放置树容器的id

        this.treeName = "treeNode";											//树名,如果同一页有多个树可以通过名称区分
        this.loadXML = false;
        if (typeof(xmlURL) == 'string') {
            this.dataxml = this.createXmlDocument();
            this.loadXML = true;
        } else {
            this.dataxml = xmlURL;
        }
        this.deepth = 0; 																//保存当前层深
        this.length = new Array();													//保存当前层的当前位置
        this.deepNode = new Array();	 										//保存最末节点所在层
        this.showRoot = true;														//是否显示根节点
        this.parentNode = null;													//该树的父节点
        this.async = false;
        this.isExpandAll = false;
        this.root = null;
        this.nodeCount = 0;
        this.nodeInfoArray = new Array();
        this.nodeArray = new Array();
        this.parentTree = null;
		
		this.tableCategory = [];
    },

    setRoot: function(root) {
        this.root = root; //XPath
    },

    setAsync: function(async) {
        this.async = async;
    },

    setParentNode: function(parentNode) {
        this.parentNode = parentNode;
    },

    setShowRoot: function(showRoot) {
        this.showRoot = showRoot;
    },

    setTreeName: function(treeName) {
        this.treeName = treeName;
    },

    setXmlURL: function(xmlURL) {
        this.xmlURL = xmlURL;
    },

    setContainerId: function(containerId) {
        this.containerId = containerId;
    },

    getTreeName: function() {
        return this.treeName;
    },

    createXmlDocument : function() {
        if (document.implementation && document.implementation.createDocument) {
            var doc = document.implementation.createDocument("", "", null);
			
            if (!doc.readyState) {
                doc.readyState = 1;
                doc.addEventListener("load", function () {
                    doc.readyState = 4;
                    if (typeof doc.onreadystatechange == "function")
                        doc.onreadystatechange();
                }, false);
            }
            return doc;
        }

        if (window.ActiveXObject)
            return Try.these(
                    function() {
                        return new ActiveXObject('MSXML2.DomDocument')
                    },
                    function() {
                        return new ActiveXObject('Microsoft.DomDocument')
                    },
                    function() {
                        return new ActiveXObject('MSXML.DomDocument')
                    },
                    function() {
                        return new ActiveXObject('MSXML3.DomDocument')
                    }
                    ) || false;
        return null;
    },

    draw: function() {
        if (this.loadXML) {
            this.dataxml.async = this.async;
            if (this.async) {
                this.dataxml.onreadystatechange = this.fnLoadComplete.bind(this);
                this.dataxml.load(this.xmlURL);
            } else {
                this.dataxml.load(this.xmlURL);
                this.beginDraw();
            }
        } else this.beginDraw();
    },

    fnLoadComplete: function() {
        if (this.dataxml.readyState != 4)  return;
        this.dataLoaded();
        this.beginDraw();
    },

    //遍历树
    beginDraw: function() {
        var container = document.getElementById(this.containerId);
        var loadingSpan = document.getElementById(this.treeName + "_loading"); //删除Loading
        if (loadingSpan) {
            container.removeChild(loadingSpan);
        }
        var item = this.dataxml.documentElement;

        if (this.root) {
            item = item.selectSingleNode(this.root);
            if (!item || !item.firstChild) return;
        }

        var rootElement = item;
		//alert(rootElement.getAttribute("code"));

        var finished = false;
        this.length[0] = 0;

        if (this.showRoot) {
            this.deepth++;
            this.length[1] = 1;
            this.drawNode(item, container, '#');
        }

        while (!finished) {
            var tempParentCode; //自动生成code和parent
            do{
                while (item.firstChild) { //到本层最深
                    tempParentCode = this.treeName + "_" + this.deepth + '_' + this.length[this.deepth]; 
					item = item.firstChild;
                    if (!this.length[++this.deepth]) {
                        this.length[this.deepth] = 0;
                    }
                    this.length[this.deepth]++;
                    this.drawNode(item, container, tempParentCode);
                }

                if (item.nextSibling) { //横向遍历
                    item = item.nextSibling;
                    this.length[this.deepth]++;
                    this.drawNode(item, container, tempParentCode);
                }
            } while (item.firstChild || item.nextSibling)
            
			do {
                item = item.parentNode; //回溯
                if (item == rootElement) { //到根节点了,遍历完成
                    finished = true;
                    break;
                }
                this.deepth--;
            } while (!item.nextSibling)

            if (!finished) {
                tempParentCode = this.treeName + "_" + (this.deepth - 1) + '_' + this.length[(this.deepth - 1)];
                this.length[this.deepth]++;
                item = item.nextSibling; //找父亲的兄弟
                this.drawNode(item, container, tempParentCode);
            }
        }

        if (!this.isExpandAll) {
            this.collapseAll();
        }

		 if (this.treeViewConfig.table) {
			var aa11 = [];
		 	for(var i = 0; i < this.nodeArray.length; i++){
				var nodecode1 = this.getNodeInfo(this.nodeArray[i],"code");
				var firstCode1 = nodecode1.substring(0,3);
				var isFather = false;
				var isFatherBrother = false;
				
				for(var j = 0; j < this.tableCategory.length; j++){
					var nodecode2 = this.getNodeInfo(this.tableCategory[j],"code");
					var firstCode2 = nodecode2.substring(0,3);
					var xiaoyu = (firstCode1 == firstCode2) && (nodecode1.length < nodecode2.length);
					
					if (!isFather && (nodecode1 == nodecode2 || xiaoyu)) {
						isFather = true;
					}
					if(!isFatherBrother && xiaoyu && (nodecode2.substring(0,nodecode1.length) != nodecode1)){
						var ish = false;
						for(var k = 0; k < this.tableCategory.length; k++){
							var nodecode3 = this.getNodeInfo(this.tableCategory[k],"code");
							if(nodecode1 == nodecode3)
								ish = true;
						}
						if(!ish)
							isFatherBrother = true;
					}	
					
				}
				if(isFatherBrother)
					aa11.push(this.getNodeInfo(this.nodeArray[i],"code"));
				if(isFather){
					if(isFatherBrother)
						this.nodeArray[i].parentNode.removeChild(this.nodeArray[i]);
				}else{this.nodeArray[i].parentNode.removeChild(this.nodeArray[i]);}
			}
			//alert(aa11+">>>")
		 }
    },

    //画节点
    drawNode: function (element, container, tempParentCode) {
        if (!element.attributes) {
            return;
        }

        var isRoot = element.parentNode.nodeType == 9; //是否是根节点
        var nodeSpan = document.createElement("div");	//装一层的元素
        var code = this.treeName + "_" + this.deepth + "_" + this.length[this.deepth]; //如果数据源没有code属性则生成code
        nodeSpan.id = code;
        container.appendChild(nodeSpan);
        this.nodeArray.push(nodeSpan);

        this.nodeInfoArray[code] = new Array();

        var lineTypeList = ''; //保存线的类型给子树用
        if (this.parentNode) { //继承父节点的线类型
            lineTypeList = this.parentTree.getNodeInfo(this.parentNode, "lineTypeList");
            for (var i = 0; i < lineTypeList.length; i++) {
                var imgLine = document.createElement("img"); //线
                //imgLine.style.border = "1px solid red";
                imgLine.src = this.treeViewConfig.imgPath + this.treeViewConfig.vertlineImg; //默认为竖线
                if (lineTypeList.charAt(i) == '1') { //保存其所在层，判断是画竖线还是画空白时使用
                    imgLine.src = this.treeViewConfig.imgPath + this.treeViewConfig.blankImg;
                }
                nodeSpan.appendChild(imgLine);
            }
        }

        for (var i = 0; i < this.deepth - 1; i++) { //填充文字前面的图片
            var imgLine = document.createElement("img"); //线
            //imgLine.style.border = "1px solid red";
            imgLine.src = this.treeViewConfig.imgPath + this.treeViewConfig.vertlineImg; //默认为竖线
            lineTypeList += this.deepNode[i + 1];
            if (this.deepNode[i + 1] == 1) { //保存其所在层，判断是画竖线还是画空白时使用
                imgLine.src = this.treeViewConfig.imgPath + this.treeViewConfig.blankImg;
            }
            nodeSpan.appendChild(imgLine);
        }

        var childXMLAttr = element.attributes.getNamedItem(this.treeViewConfig.childXMLTag);

        var imgNode = document.createElement("img"); //节点图片,+或-
        var imgFolder = document.createElement("img"); //文件夹图片
        var hasChild = !((!element.firstChild) && (!childXMLAttr || isBlank(childXMLAttr.value)));
        this.setNodeInfo(nodeSpan, "showChild", 'true'); //是否显示其所有子节点
        var noNextSibling = ISIE ? !element.nextSibling : !element.nextSibling.nextSibling;
        if (isRoot) {
            imgNode.src = this.treeViewConfig.imgPath + this.treeViewConfig.blankImg;
            imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.rootImg;
            this.deepNode[this.deepth] = 1;
        } else {
            if (hasChild) { //有孩子的节点
                imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.openfolderImg;
                if (noNextSibling) {//无右兄弟，本层最末节点
                    this.deepNode[this.deepth] = 1;
                    imgNode.src = this.treeViewConfig.imgPath + this.treeViewConfig.lastopenfolderImg;
                    lineTypeList += '1';
                    if (childXMLAttr && !isBlank(childXMLAttr.value)) {
                        imgNode.src = this.treeViewConfig.imgPath + this.treeViewConfig.lastclosedfolderImg;
                        imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg;
                        this.setNodeInfo(nodeSpan, "showChild", 'false'); //是否显示其所有子节点
                    }
                } else { //普通节点
                    this.deepNode[this.deepth] = 0;
                    imgNode.src = this.treeViewConfig.imgPath + this.treeViewConfig.openfoldernodeImg;
                    lineTypeList += '0';
                    if (childXMLAttr && !isBlank(childXMLAttr.value)) {
                        imgNode.src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfoldernodeImg;
                        imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg;
                        this.setNodeInfo(nodeSpan, "showChild", 'false'); //是否显示其所有子节点
                    }
                }
            }
            else { //叶子节
                imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.leafImg;
                if (noNextSibling) {//无孩子，无右兄弟，为整棵树的最末节点
                    this.deepNode[this.deepth] = 1;
                    imgNode.src = this.treeViewConfig.imgPath + this.treeViewConfig.lastnodeImg;
                } else { //普通叶子节点
                    this.deepNode[this.deepth] = 0;
                    imgNode.src = this.treeViewConfig.imgPath + this.treeViewConfig.nodeImg;
                }
            }
        }

        var spanText = document.createElement("span");  //节点的文字描述
        if (element.attributes.getNamedItem(this.treeViewConfig.titleTag)) {
            spanText.setAttribute("title", element.attributes.getNamedItem(this.treeViewConfig.titleTag).value); //title信息
        }
        var text = document.createTextNode(" " + element.attributes.getNamedItem(this.treeViewConfig.descriptionTag).value + " ");
        spanText.appendChild(text);
        if (hasChild) {
            spanText.className = 'treeFolder';
        } else {
            spanText.className = 'treeLeaf';
        }
        var space = document.createElement("span");
        space.innerHTML = '&nbsp;';

        nodeSpan.appendChild(imgNode);
        nodeSpan.appendChild(imgFolder);
        nodeSpan.appendChild(space);
        nodeSpan.appendChild(spanText);
        nodeSpan.appendChild(document.createElement("br"));
        this.setNodeInfo(nodeSpan, "parentNodeCode", tempParentCode);
        this.setNodeInfo(nodeSpan, "parentNode", $(tempParentCode));
        this.setNodeInfo(nodeSpan, "lineTypeList", lineTypeList); //保存线的类型
        this.setNodeInfo(nodeSpan, "desc", element.attributes.getNamedItem(this.treeViewConfig.descriptionTag).value);

        if (isRoot) { //节点类型
            this.setNodeInfo(nodeSpan, "nodeType", 'root');
        } else if (!hasChild) {
            this.setNodeInfo(nodeSpan, "nodeType", 'leaf');
        } else if (noNextSibling) {
            this.setNodeInfo(nodeSpan, "nodeType", 'lastnode');
        } else {
            this.setNodeInfo(nodeSpan, "nodeType", 'normalnode');
        }
        nodeSpan.style.cursor = 'pointer';

        this.setNodeInfo(nodeSpan, "deepth", this.deepth);

        nodeSpan.className = 'treeNode';
        if (this.treeViewConfig.extraInfo) { //如果有附加信息,添加附加信息
            for (var i = 0; i < this.treeViewConfig.extraInfo.length; i++) {
                var data = element.attributes.getNamedItem(this.treeViewConfig.extraInfo[i]);
                var dataValue = '';
                if (data) {
                    dataValue = data.value;
                }
                this.setNodeInfo(nodeSpan, this.treeViewConfig.extraInfo[i], dataValue);
            }
        }

        imgNode.id = this.treeName + '_imgNode_' + code; //确保唯一的名称
        imgFolder.id = this.treeName + '_imgFolder_' + code;
        spanText.id = this.treeName + '_text_' + code;

        nodeSpan.style.height = this.treeViewConfig.imgHeight;
        nodeSpan.style.width = '100%';
        nodeSpan.style.overflow = 'hidden';
        spanText.style.fontSize = this.treeViewConfig.fontSize;
        spanText.style.verticalAlign = 'top';
        spanText.style.zoom = '1';
        spanText.style.padding = '0 3px 0 3px';
//        nodeSpan.style.border="1px solid red";
        //        spanText.style.border='1px solid green'
        //        imgNode.style.border="1px solid yellow"
        //        imgFolder.style.border="1px solid blue"
        //if(!ISIE) {
        spanText.style.lineHeight = this.treeViewConfig.imgHeight + "px";
        nodeSpan.style.lineHeight = "12px";
        //}

        if (!isRoot) {
            imgNode.onclick = function() {
                this.toggleNode();
                this.nodeImgClicked();
            }.bind(this); //点击+-号事件
            imgFolder.onclick = function() {
                this.toggleNode();
                this.folderImgClicked();
            }.bind(this); //点击文件夹事件
            spanText.onclick = function() {
                this.setSelectedNodeStyle();
                this.toggleNode();
                this.textClicked();
            }.bind(this); //点击文本事件
            spanText.onmousedown = this.setOnContextMenuStyle;
        } else {
            spanText.onclick = function() {
                this.rootClicked();
            }.bind(this); //点击文本事件
        }
		
        //spanText.onmousemove = this.setMouseOverStyle;
        //spanText.onmouseout = this.setMouseOutStyle;
		
		//spanText.oncontextmenu = function() { this.setSelectedNodeStyle(); this.functionSelect(); this.onTextContextMenu(); }.bind(this);

        //有子树
        if (childXMLAttr && !isBlank(childXMLAttr.value)) {
            this.setNodeInfo(nodeSpan, "childXML", childXMLAttr.value);
            this.setNodeInfo(nodeSpan, "childXMLLoaded", 'false'); //子树XML是否已经加载
            this.initSubTree(nodeSpan);
        }
    },

    initSubTree: function(parentNode) {
        var parent = parentNode.id;
        var container = document.getElementById(this.containerId);
        var treeSpan = document.createElement("span"); //装子树
        var nodeSpan = document.createElement("span");
        treeSpan.id = this.treeName + "_" + parent + "_container";
        nodeSpan.id = this.treeName + "_" + parent + "_loading";
        container.appendChild(treeSpan);
        treeSpan.appendChild(nodeSpan);

        var lineTypeList = this.getNodeInfo(parentNode, "lineTypeList");
        for (var i = 0; i < lineTypeList.length; i++) {
            var imgLine = document.createElement("img"); //线
            imgLine.src = this.treeViewConfig.imgPath + this.treeViewConfig.vertlineImg; //默认为竖线
            if (lineTypeList.charAt(i) == '1') { //保存其所在层，判断是画竖线还是画空白时使用
                imgLine.src = this.treeViewConfig.imgPath + this.treeViewConfig.blankImg;
            }
            nodeSpan.appendChild(imgLine);
        }

        var imgNode = document.createElement("img"); //节点图片,+或-
        var imgFolder = document.createElement("img"); //文件夹图片
        imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.leafImg;
        imgNode.src = this.treeViewConfig.imgPath + this.treeViewConfig.lastnodeImg;

        var spanText = document.createElement("span");
        spanText.innerHTML = "<font color=gray>Loading...</font>";
        spanText.className = 'treeLeaf';
        spanText.id = "loadingSpanText_" + parent;

        var space = document.createElement("span");
        space.innerHTML = '&nbsp;';

        nodeSpan.appendChild(imgNode);
        nodeSpan.appendChild(imgFolder);
        nodeSpan.appendChild(space);
        nodeSpan.appendChild(spanText);
        nodeSpan.appendChild(document.createElement("br"));
        nodeSpan.className = 'treeNode';
        treeSpan.style.display = 'none';

        nodeSpan.style.height = this.treeViewConfig.imgHeight;
        nodeSpan.style.width = '100%';
        nodeSpan.style.overflow = 'hidden';
        nodeSpan.style.textVerticalAlign = 'middle';
        spanText.style.fontSize = this.treeViewConfig.fontSize;
        spanText.style.height = this.treeViewConfig.imgHeight;
    },

    nodeImgClicked : function() { //默认+-号被点击的方法,可以被覆盖

    },

    folderImgClicked: function() { //默认文件夹被点击的方法,可以被覆盖

    },

    dataLoaded: function() { //数据加载完成,可以被覆盖

    },

    rootClicked: function() {

    },

    textClicked: function() {
        //文本被点击,可以通过treeView.textClicked = newTextClicked; 覆盖
    },

    setSelectedNodeStyle: function() {
        var lastSelectedNode = this.treeViewConfig.lastSelectedNode;
        if (lastSelectedNode) {
            lastSelectedNode.style.color = '';
            lastSelectedNode.style.backgroundColor = '';
            lastSelectedNode.style.border = '';
            //lastSelectedNode.onmousemove = this.setMouseOverStyle;
            //lastSelectedNode.onmouseout = this.setMouseOutStyle;
		}
        var node = window.event.srcElement;
        this.treeViewConfig.lastSelectedNode = node;
        node.onmousemove = null;
        node.onmouseout = null;
        this.setOnContextMenuStyle(node);
    },

    onTextContextMenu: function() {

    },

    functionSelect: function() {
        //var left = window.event.clientX +10;
        //var top = window.event.clientY - 10;
        window.event.returnValue = false;
        var node = window.event.srcElement.parentNode;
        var left = node.offsetLeft;
        var top = node.offsetTop;
        this.setOnContextMenuStyle(node);
        var contextMenu = document.getElementById("treeViewContextMenu");
        if (!contextMenu) {
            this.initFunctionSelectMenu();
            contextMenu = document.getElementById("treeViewContextMenu");
        }
        contextMenu.style.display = 'inline';
        contextMenu.style.left = left + 'px';
        contextMenu.style.top = top + 'px';
        document.body.onclick = this.hideContextMenu;

		//alert(contextMenu.outerHTML);
    },

    hideContextMenu: function() {
        try {
            document.getElementById('treeViewContextMenu').style.display = 'none'
        } catch(e) {

        }
    },

    initFunctionSelectMenu: function() {
        var contextMenu = document.createElement("div");
        document.getElementById(this.containerId).appendChild(contextMenu);
        var tb = document.createElement("table");
        tb.border = 0;
        tb.width = '100%';

        var tr1 = tb.insertRow();
        var td1 = tr1.insertCell();
        td1.className = 'lastcell';
        td1.innerHTML = '添加子节点';

        var tr2 = tb.insertRow();
        var td2 = tr2.insertCell();
        td2.className = 'lastrow';
        td2.innerHTML = '修改节点属性';

        contextMenu.appendChild(tb);

        with (contextMenu) {
            id = "treeViewContextMenu";

            with (style) {
                position = 'absolute';
                backgroundColor = "#CCCCCC";
				//height = '100px';
                width = '90px';
            }
        }
        Rico.Corner.round("treeViewContextMenu", {compact:true});
    },

    toggleNode: function() { //开合文件夹,code为被点击节点的代码
        this.hideContextMenu();
        window.event.cancelBubble = true;
        var me = window.event.srcElement.parentElement; //被点击的节点

        var childXML = this.getNodeInfo(me, "childXML");

        if (childXML && !isBlank(childXML)) {
            if (this.getNodeInfo(me, "showChild") == 'true') { //需要关闭文件夹
                this.hideSubTree(me);
            } else { //需要打开文件夹
                this.displaySubTree(me);
            }
            return;
        }

        if (this.getNodeInfo(me, "showChild") == 'true') { //需要关闭文件夹
            this.collapseNode(me);
        } else { //需要打开文件夹
            this.expandNode(me);
        }
    },

    displaySubTree: function(parentNode) {
        var parent = parentNode.id;
        var treeName = this.treeName + "_" + parent;
        var treeSpan = document.getElementById(treeName + "_container");
        treeSpan.style.display = 'inline';

        this.setNodeInfo(parentNode, "showChild", 'true'); //显示孩子节点
        document.getElementById(this.treeName + '_imgNode_' + parent).src = this.treeViewConfig.imgPath + this.treeViewConfig.lastopenfolderImg;
        document.getElementById(this.treeName + '_imgFolder_' + parent).src = this.treeViewConfig.imgPath + this.treeViewConfig.openfolderImg;

        if (this.getNodeInfo(parentNode, "childXMLLoaded") == 'false') {
            var subTree = new TreeView(this.getNodeInfo(parentNode, "childXML"), treeName + "_container", this.treeViewConfig);
            subTree.treeName = treeName;
            subTree.setShowRoot(false);
            subTree.setAsync(true);
            subTree.setParentNode(parentNode);
            subTree.textClicked = this.textClicked;
            subTree.folderImgClicked = this.folderImgClicked;
            subTree.nodeImgClicked = this.nodeImgClicked;
            subTree.onContextMenu = this.onContextMenu;
            subTree.parentTree = this;
            this.setNodeInfo(parentNode, "childXMLLoaded", 'true');
            subTree.draw();
        }
    },

    hideSubTree: function(parentNode) {
        if (!this.getNodeInfo(parentNode, "childXML") || isBlank(this.getNodeInfo(parentNode, "childXML"))) {
            return; //父节点无子树
        }
        var parent = parentNode.id;
        var treeSpan = document.getElementById(this.treeName + "_" + parent + "_container");
        treeSpan.style.display = 'none';

        this.setNodeInfo(parentNode, "showChild", 'false'); //显示孩子节点
        document.getElementById(this.treeName + '_imgNode_' + parent).src = this.treeViewConfig.imgPath + this.treeViewConfig.lastclosedfolderImg;
        document.getElementById(this.treeName + '_imgFolder_' + parent).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg;
    },

    expandNode: function(node) {
        var childXML = this.getNodeInfo(node, "childXML");
        if (childXML && !isBlank(childXML)) {
            return;
        }

        var code = node.id;
        var nodes = this.nodeArray;//找到所有属于该树的元素
        if (!nodes.length) {
            return;
        }

        for (var i = 0; i < nodes.length; i++) { //遍历树元素
            var id = nodes[i].id;
            if (this.getNodeInfo(nodes[i], "parentNodeCode") == code) { //是显示被点击节点的儿子节点
                nodes[i].style.display = 'block';
                this.setNodeInfo(nodes[i], "showChild", 'false');
                if (this.getNodeInfo(nodes[i], "nodeType") != 'leaf') { //如果是文件夹需要改变+-号状态和文件夹状态
                    document.getElementById(this.treeName + '_imgNode_' + id).src = this.treeViewConfig.imgPath + (this.getNodeInfo(nodes[i], "nodeType") == 'lastnode' ? this.treeViewConfig.lastclosedfolderImg : this.treeViewConfig.closedfoldernodeImg); //变+为-
                    document.getElementById(this.treeName + '_imgFolder_' + id).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg; //文件夹状态改变为闭合
                }
            }
        }
        if (this.getNodeInfo(node, "nodeType") != 'leaf') { //如果被点击节点是文件夹节点还需要改变+-号状态和文件夹状态
            this.setNodeInfo(node, "showChild", 'true'); //显示孩子节点
            document.getElementById(this.treeName + '_imgNode_' + code).src = this.treeViewConfig.imgPath + (this.getNodeInfo(node, "nodeType") == 'lastnode' ? this.treeViewConfig.lastopenfolderImg : this.treeViewConfig.openfoldernodeImg);
            document.getElementById(this.treeName + '_imgFolder_' + code).src = this.treeViewConfig.imgPath + this.treeViewConfig.openfolderImg;
        }
    },

    collapseNode: function(me) {
        var code = me.id;
        var deepth = this.getNodeInfo(me, "deepth");
        var nodes = this.nodeArray; //找到所有属于该树的元素

        if (!nodes.length) {
            return;
        }

        var index = 0;
        for (; index < nodes.length; index++) { //遍历树元素
            if (nodes[index].id == code) {
                break; //找到被点击元素所在位置，从该位置往下查找
            }
        }
        for (++index; index < nodes.length; index++) {
            if (this.getNodeInfo(nodes[index], "deepth") > deepth) { //深度比自己大为自己的子孙
                nodes[index].style.display = 'none';
                this.hideSubTree(nodes[index]);
            } else { //直到找到自己的右兄弟
                break;
            }
        }
        this.setNodeInfo(me, "showChild", 'false');
        if (this.getNodeInfo(me, "nodeType") != 'leaf') { //如果是文件夹需要改变+-号状态和文件夹状态
            document.getElementById(this.treeName + '_imgNode_' + code).src = this.treeViewConfig.imgPath + (this.getNodeInfo(me, "nodeType") == 'lastnode' ? this.treeViewConfig.lastclosedfolderImg : this.treeViewConfig.closedfoldernodeImg); //变-为+
            document.getElementById(this.treeName + '_imgFolder_' + code).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg; //文件夹状态改变为闭合
        }
    },

    expandAll: function() {
        var nodes = this.nodeArray; //找到所有属于该树的元素
        if (!nodes.length) {
            return;
        }

		 //根节点不动
        for (var i = this.showRoot ? 1 : 0; i < nodes.length; i++) { //遍历树元素
            var code = nodes[i].id;
            nodes[i].style.display = 'block';
            if (this.getNodeInfo(nodes[i], "nodeType") != 'leaf' && (!this.getNodeInfo(nodes[i], "childXML") || isBlank(this.getNodeInfo(nodes[i], "childXML")))) { //如果被点击节点是文件夹节点且无子树还需要改变+-号状态和文件夹状态
                this.setNodeInfo(nodes[i], "showChild", 'true'); //显示孩子节点
                document.getElementById(this.treeName + '_imgNode_' + code).src = this.treeViewConfig.imgPath + (this.getNodeInfo(nodes[i], "nodeType") == 'lastnode' ? this.treeViewConfig.lastopenfolderImg : this.treeViewConfig.openfoldernodeImg);
                document.getElementById(this.treeName + '_imgFolder_' + code).src = this.treeViewConfig.imgPath + this.treeViewConfig.openfolderImg;
            }
        }
        this.isExpandAll = true;
    },

    collapseAll: function() {
        var nodes = this.nodeArray; //找到所有属于该树的元素
        if (!nodes.length) {
            return;
        }

        for (var i = this.showRoot ? 1 : 0; i < nodes.length; i++) { //遍历树元素
            var code = nodes[i].id;
            if (this.getNodeInfo(nodes[i], "deepth") > (this.showRoot ? 2 : 1)) {
                nodes[i].style.display = 'none'; //隐藏
                this.hideSubTree(nodes[i]);
            } else { //第一层元素要显示
                this.setNodeInfo(nodes[i], "showChild", 'false');
                if (this.getNodeInfo(nodes[i], "nodeType") != 'leaf') { //如果是文件夹需要改变+-号状态和文件夹状态
                    document.getElementById(this.treeName + '_imgNode_' + code).src = this.treeViewConfig.imgPath + (this.getNodeInfo(nodes[i], "nodeType") == 'lastnode' ? this.treeViewConfig.lastclosedfolderImg : this.treeViewConfig.closedfoldernodeImg); //变-为+
                    document.getElementById(this.treeName + '_imgFolder_' + code).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg; //文件夹状态改变为闭合
                }
            }
        }
        this.isExpandAll = false;
    },

    doExpandNode: function(jsonObj) {
        this.expandAll();	//先全部展开
        var nodes = this.nodeArray; //找到所有属于该树的元素
        if (!nodes.length) {
            return;
        }

        var node;
        for (var i = 0; i < nodes.length; i++) {
            nodes[i].style.display = 'none'; //先全部隐藏
            if (this.getNodeInfo(nodes[i], jsonObj.tag) == jsonObj.value) {
                node = nodes[i];
            }
        }

        if (node) {
            var textNode = document.getElementById(this.treeName + "_text_" + node.id);
            this.setOnContextMenuStyle(textNode);
            this.treeViewConfig.lastSelectedNode = textNode;
            this.PreExpandNode(node.id, nodes);
        }
    },

    getClickedNodeInfo:function(tag) {
        return this.getNodeInfo(this.getClickedNode(), tag);
    },

    getClickedNode:function() {
        return window.event.srcElement.parentElement;
    },

    doExpandFolders:function(jsonArray) {
        this.collapseAll();
        var nodes = this.nodeArray;
        var nodeInfoArray = new Array(); //记录要打开节点的所有直接祖先及其本身
        for (var i = 0; i < jsonArray.length; i++) {
            for (var j = 0; j < nodes.length; j++) {
                if (this.getNodeInfo(nodes[j], jsonArray[i].tag) == jsonArray[i].value) {
                    //找到要打开的节点
                    nodeInfoArray.push({node:nodes[j],index:j});
                }
            }

            if (nodeInfoArray.length == 0) {
                break
            }
            ; //没找到

            for (var j = 0; j < nodeInfoArray.length; j++) {
                var node = nodeInfoArray[j].node;
                for (var n = nodeInfoArray[j].index; n >= 0; n--) {
                    if (nodes[n].id == this.getNodeInfo(node, "parentNodeCode")) { //找到父亲
                        nodeInfoArray.push({node:nodes[n],index:0});
                        node = nodes[n];
                    }
                }
            }
        }
        for (var i = nodeInfoArray.length - 1; i >= 0; i--) {
            this.expandNode(nodeInfoArray[i].node);
        }
    },

    /**
     *打开code为code的节点,用于画完树后预先打开一个节点
     */
    PreExpandNode: function (code, nodes) {
        var node = null;
        for (var i = 0; i < nodes.length; i++) { //找到节点
            if (code == nodes[i].id) {
                node = nodes[i];
                nodes[i].style.display = 'block';	 //显示本节点
                break;
            }
        }

        if (!node) {
            return; //没找到，返回
        }

        for (var i = 0; i < nodes.length; i++) {
            if (node != nodes[i] && this.getNodeInfo(node, "parentNodeCode") == this.getNodeInfo(nodes[i], "parentNodeCode")) { //显示亲兄弟，亲兄弟文件夹状态为关闭
                nodes[i].style.display = 'block';
                if (this.getNodeInfo(nodes[i], "nodeType") != 'leaf') { //如果是文件夹需要改变+-号状态和文件夹状态
                    this.setNodeInfo(nodes[i], "showChild", 'false');
                    document.getElementById(this.treeName + '_imgNode_' + nodes[i].id).src = this.treeViewConfig.imgPath + (this.getNodeInfo(nodes[i], "nodeType") == 'lastnode' ? this.treeViewConfig.lastclosedfolderImg : this.treeViewConfig.closedfoldernodeImg); //变-为+
                    document.getElementById(this.treeName + '_imgFolder_' + nodes[i].id).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg; //文件夹状态改变为闭合
                }
            }
        }

        this.PreExpandNode(this.getNodeInfo(node, "parentNodeCode"), nodes);
    },

    setMouseOverStyle: function () {
        with (window.event.srcElement.style) {
            //paddingTop = '3px';
            //backgroundColor = '#bbebad';
            color = "#000000";
            border = '1px solid #1c5e82';
            overflow = 'visible';
        }
    },

    setMouseOutStyle: function () {
        with (window.event.srcElement.style) {
            backgroundColor = '';
            color = "#1c5e82";
            border = '';
            overflow = 'hidden';
        }
    },

    setOnContextMenuStyle: function (node) {
        if (!node) {
            node = window.event.srcElement;
        }
        if (!node.style) {
            return;
        }
        with (node.style) {
            //paddingTop = '3px';
            backgroundColor = '#FFFFFF';
            border = '1px solid #999999';
            color = 'black';
            overflow = 'visible';
        }
    },

    setNodeInfo: function(node, tag, value) {
        this.nodeInfoArray[node.id][tag] = value;
    },

    getNodeInfo: function(node, tag) {
        return this.nodeInfoArray[node.id][tag];
    },
	
	getAllChildNode: function(nodeid){//nodeid=code= treeNode_1_1
		var nodes = this.nodeArray; //找到所有属于该树的元素
        if (!nodes.length) {
            return;
        }
		var childList = [];
        for (var i = 0; i < nodes.length; i++) { //遍历树元素
            var id = nodes[i].id;
            if (this.getNodeInfo(nodes[i], "parentNodeCode") == nodeid) { //是显示被点击节点的儿子节点
                childList.push(nodes[i]);
            }
        }
		return childList;
	}
};

/**
 *dataXML
 *<rootTag>
 *	<nodeTag descriptioTag=xxx extroInfo=xxx,....>
 *		<nodeTag descriptioTag=xxx extroInfo=xxx,..../>
 *		... ...
 *	</nodeTag>
 *	.... ...
 *</rootTag>
 **/

var SimpleTreeView = Class.create();

Object.extend(Object.extend(SimpleTreeView.prototype, TreeView.prototype), {
	
    //SimpleTreeView.prototype = (new TreeView()).extend({
    //画节点
    drawNode: function (element, container, tempParentCode) {
        if (!element.attributes) {
            return;
        }

        var isRoot = element.parentNode.nodeType == 9; //是否是根节点

        var nodeSpan = document.createElement("span");	//装一层的元素

        var code = this.treeName + "_" + this.deepth + "_" + this.length[this.deepth]; //如果数据源没有code属性则生成code

        nodeSpan.id = code;
        this.nodeInfoArray[code] = new Array();

		if(this.treeViewConfig.table){
			if(this.treeViewConfig.table == element.attributes.getNamedItem("rel_table").value)
				this.tableCategory.push(nodeSpan);
		}

        this.nodeArray.push(nodeSpan);
        container.appendChild(nodeSpan);

        var lineTypeList = ''; //保存线的类型给子树用
        if (this.parentNode) { //继承父节点的线类型
            lineTypeList = this.parentTree.getNodeInfo(this.parentNode, "lineTypeList");
            for (var i = 0; i < lineTypeList.length; i++) {
                if (!this.treeViewConfig.imgPath) {
                    var imgLine = document.createElement("span"); //线
                    imgLine.innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;';
                    imgLine.style.styleFloat = 'left';
                    imgLine.setAttribute("style", "float:left");
                    nodeSpan.appendChild(imgLine);
                } else {
                    var imgLine = document.createElement("img"); //线
                    imgLine.src = this.treeViewConfig.imgPath + this.treeViewConfig.blankImg;
                    nodeSpan.appendChild(imgLine);
                }
            }
        }

        for (var i = 0; i < this.deepth - 1; i++) { //填充文字前面的图片
            if (!this.treeViewConfig.imgPath) {
                var imgLine = document.createElement("span"); //线
                imgLine.innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;';
                nodeSpan.appendChild(imgLine);
                imgLine.style.styleFloat = 'left';
                imgLine.setAttribute("style", "float:left");
            } else {
                var imgLine = document.createElement("img"); //线
                imgLine.src = this.treeViewConfig.imgPath + this.treeViewConfig.blankImg;
                nodeSpan.appendChild(imgLine);
            }
            lineTypeList += "1";
        }
        lineTypeList += "1";
        var childXMLAttr = element.attributes.getNamedItem(this.treeViewConfig.childXMLTag);
        var imgFolder;
        var hasChild = !(!element.firstChild && (!childXMLAttr || isBlank(childXMLAttr.value)));

        this.setNodeInfo(nodeSpan, "showChild", 'true'); //是否显示其所有子节点
        if (this.treeViewConfig.imgPath) {
            imgFolder = document.createElement("img"); //文件夹图片
            if (isRoot) {
                imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.rootImg;
            } else if (hasChild && (!childXMLAttr || isBlank(childXMLAttr.value))) { //有孩子的节点
                imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.openfolderImg;
            } else if (hasChild) {
                imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg;
                this.setNodeInfo(nodeSpan, "showChild", 'false');
            }
            else { //叶子节点, 用叶子节点图片代替文件夹图片
                imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.leafImg;
            }
			//imgFolder.height = "10";
			//imgFolder.width = "10";
        } else {
            imgFolder = document.createElement("span"); //文件夹图片

            imgFolder.style.styleFloat = 'left';
            imgFolder.setAttribute("style", "float:left");

            if (hasChild && (!childXMLAttr || isBlank(childXMLAttr.value))) { //有孩子的节点
                imgFolder.appendChild(document.createTextNode("-"));
                this.setExpandStyle(imgFolder);
            } else if (hasChild) {
                imgFolder.appendChild(document.createTextNode("+"));
                this.setCollapseStyle(imgFolder);
                this.setNodeInfo(nodeSpan, "showChild", 'false');

            } else { //叶子节点, 用叶子节点图片代替文件夹图片
                imgFolder.appendChild(document.createTextNode("."));
                this.setLeafStyle(imgFolder);
            }
        }

		//nodeSpan.style.border = '1px solid green';

        var spanText = document.createElement("span");  //节点的文字描述

        if (hasChild) {
            spanText.className = 'treeFolder';
        } else {
            spanText.className = 'treeLeaf';
        }

        if (element.attributes.getNamedItem(this.treeViewConfig.titleTag)) {
            spanText.setAttribute("title", element.attributes.getNamedItem(this.treeViewConfig.titleTag).value); //title信息
        }
        var text = document.createTextNode(" " + element.attributes.getNamedItem(this.treeViewConfig.descriptionTag).value + " ");
        spanText.appendChild(text);
		
		spanText.style.color = "#1c5e82";
		
        var space = document.createElement("span");
        space.innerHTML = '&nbsp;';

        nodeSpan.appendChild(imgFolder);
        nodeSpan.appendChild(space);
        nodeSpan.appendChild(spanText);
        nodeSpan.appendChild(document.createElement("br"));

        this.setNodeInfo(nodeSpan, "parentNodeCode", tempParentCode);
        this.setNodeInfo(nodeSpan, "parentNode", $(tempParentCode));
        this.setNodeInfo(nodeSpan, "desc", element.attributes.getNamedItem(this.treeViewConfig.descriptionTag).value);
		if (element.attributes.getNamedItem("link_add")) {
			this.setNodeInfo(nodeSpan, "link_add", element.attributes.getNamedItem("link_add").value);
		}else{
			this.setNodeInfo(nodeSpan, "link_add", "");
		}
		
		if (element.attributes.getNamedItem("sign")) {
			this.setNodeInfo(nodeSpan, "sign", element.attributes.getNamedItem("sign").value);
		}else{
			this.setNodeInfo(nodeSpan, "sign", "");
		}
		
        if (isRoot) { //节点类型
            this.setNodeInfo(nodeSpan, "nodeType", 'root');
        } else if (!hasChild) {
            this.setNodeInfo(nodeSpan, "nodeType", 'leaf');
        } else if (!element.nextSibling) {
            this.setNodeInfo(nodeSpan, "nodeType", 'lastnode');
        } else {
            this.setNodeInfo(nodeSpan, "normalnode", 'root');
        }
        this.setNodeInfo(nodeSpan, "lineTypeList", lineTypeList); //保存线的类型
        nodeSpan.style.cursor = 'pointer';
		//nodeSpan.style.position = 'relative';

        this.setNodeInfo(nodeSpan, "deepth", this.deepth);
        nodeSpan.className = 'treeNode';
        if (this.treeViewConfig.extraInfo) { //如果有附加信息,添加附加信息
            for (var i = 0; i < this.treeViewConfig.extraInfo.length; i++) {
                var data = element.attributes.getNamedItem(this.treeViewConfig.extraInfo[i]);
                var dataValue = '';
                if (data) {
                    dataValue = data.value;
                }
                this.setNodeInfo(nodeSpan, this.treeViewConfig.extraInfo[i], dataValue);
				//nodeSpan.style.setAttribute(this.treeViewConfig.extraInfo[i], dataValue);
            }
        }
        imgFolder.id = this.treeName + '_imgFolder_' + code;
        spanText.id = this.treeName + '_text_' + code;

        if (!isRoot) {
            imgFolder.onclick = function() {
                this.toggleNode();
                this.folderImgClicked();
            }.bind(this); //点击文件夹事件
            spanText.onclick = function() {
                this.setSelectedNodeStyle();
                this.toggleNode();
                this.textClicked();
            }.bind(this); //点击文本事件
            spanText.onmousedown = this.setOnContextMenuStyle;
        } else {
            spanText.onclick = function() {
                this.rootClicked();
            }.bind(this); //点击文本事件
        }
		
        spanText.onmousemove = this.setMouseOverStyle;
        spanText.onmouseout = this.setMouseOutStyle;
		//spanText.oncontextmenu = function() { this.setSelectedNodeStyle(); this.functionSelect(); this.onTextContextMenu(); }.bind(this);
		
		spanText.setAttribute("code",this.getNodeInfo(nodeSpan,"code"));
		spanText.setAttribute("text",this.getNodeInfo(nodeSpan,"desc"));
		spanText.setAttribute("type",2);

		if(element.attributes.getNamedItem("rel_table"))
			spanText.setAttribute("table",element.attributes.getNamedItem("rel_table").value);
		if(element.attributes.getNamedItem("p_table_type"))
			spanText.setAttribute("tableType",element.attributes.getNamedItem("p_table_type").value);
		if(this.treeViewConfig.draggable) {
			new Draggable(spanText, { revert: true });
		}
        //有子树
        if (childXMLAttr && !isBlank(childXMLAttr.value)) {
            this.setNodeInfo(nodeSpan, "childXML", childXMLAttr.value);
            this.setNodeInfo(nodeSpan, "childXMLLoaded", 'false'); //子树XML是否已经加载
            this.initSubTree(nodeSpan);
        }
    },

    initSubTree: function(parentNode) {
        var parent = parentNode.id;
        var container = document.getElementById(this.containerId);
        var treeSpan = document.createElement("span"); //装子树
        var nodeSpan = document.createElement("span");
        treeSpan.id = this.treeName + "_" + parent + "_container";
        nodeSpan.id = this.treeName + "_" + parent + "_loading";
        container.appendChild(treeSpan);
        treeSpan.appendChild(nodeSpan);


        var lineTypeList = this.getNodeInfo(parentNode, "lineTypeList");
        for (var i = 0; i < lineTypeList.length; i++) {
            if (!this.treeViewConfig.imgPath) {
                var imgLine = document.createElement("span"); //线
                imgLine.innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;';
                imgLine.style.styleFloat = 'left';
                imgLine.setAttribute("style", "float:left");
                nodeSpan.appendChild(imgLine);
            } else {
                var imgLine = document.createElement("img"); //线
                imgLine.src = this.treeViewConfig.imgPath + this.treeViewConfig.blankImg;
                nodeSpan.appendChild(imgLine);
            }
        }

        var imgFolder = null;
        if (this.treeViewConfig.imgPath) {
            imgFolder = document.createElement("img"); //文件夹图片
            imgFolder.src = this.treeViewConfig.imgPath + this.treeViewConfig.leafImg;
        } else {
            imgFolder = document.createElement("span"); //文件夹图片
            imgFolder.appendChild(document.createTextNode("."));
            imgFolder.style.styleFloat = 'left';
            imgFolder.setAttribute("style", "float:left");
            this.setLeafStyle(imgFolder);
        }

        var spanText = document.createElement("span");
        spanText.innerHTML = "<font color=gray>Loading...</font>";
        spanText.className = 'treeLeaf';
        spanText.id = "loadingSpanText_" + parent;

        var space = document.createElement("span");
        space.innerHTML = '&nbsp;';

        nodeSpan.appendChild(imgFolder);
        nodeSpan.appendChild(space);
        nodeSpan.appendChild(spanText);
        nodeSpan.appendChild(document.createElement("br"));
        nodeSpan.className = 'treeNode';
        treeSpan.style.display = 'none';
    },

    displaySubTree: function(parentNode) {
        var parent = parentNode.id;
        var treeName = this.treeName + "_" + parent;

        var treeSpan = document.getElementById(treeName + "_container");
        treeSpan.style.display = 'inline';

        this.setNodeInfo(parentNode, "showChild", 'true'); //显示孩子节点
        if (!this.treeViewConfig.imgPath) {
            var imgFolder = document.getElementById(this.treeName + '_imgFolder_' + parent);
            imgFolder.innerHTML = '-';
            this.setExpandStyle(imgFolder);
        } else {
            document.getElementById(this.treeName + '_imgFolder_' + parent).src = this.treeViewConfig.imgPath + this.treeViewConfig.openfolderImg; //文件夹状态改变为闭合
        }

        if (this.getNodeInfo(parentNode, "childXMLLoaded") == 'false') {
            var subTree = new SimpleTreeView(this.getNodeInfo(parentNode, "childXML"), treeName + "_container", this.treeViewConfig);
            subTree.treeName = treeName;
            subTree.setShowRoot(false);
            subTree.setAsync(true);
            subTree.setParentNode(parentNode);
            subTree.textClicked = this.textClicked;
            subTree.folderImgClicked = this.folderImgClicked;
            subTree.parentTree = this;
            this.setNodeInfo(parentNode, "childXMLLoaded", 'true');
            subTree.draw();
        }
    },

    hideSubTree: function(parentNode) {
        if (!this.getNodeInfo(parentNode, "childXML") || isBlank(this.getNodeInfo(parentNode, "childXML"))) {
            return; //父节点无子树
        }
        var parent = parentNode.id;
        var treeSpan = document.getElementById(this.treeName + "_" + parent + "_container");
        treeSpan.style.display = 'none';

        this.setNodeInfo(parentNode, "showChild", 'false'); //显示孩子节点
        if (!this.treeViewConfig.imgPath) {
            var imgFolder = document.getElementById(this.treeName + '_imgFolder_' + parent);
            imgFolder.innerHTML = '+';
            this.setCollapseStyle(imgFolder);
        } else {
            document.getElementById(this.treeName + '_imgFolder_' + parent).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg;
        }
    },

    expandNode: function(node) {
        var childXML = this.getNodeInfo(node, "childXML");
        if (childXML && !isBlank(childXML)) {
            return;
        }

        var code = node.id;

        var nodes = this.nodeArray; //找到所有属于该树的元素

        if (!nodes.length) {
            return;
        }

        for (var i = 0; i < nodes.length; i++) { //遍历树元素
            var id = nodes[i].id;
            if (this.getNodeInfo(nodes[i], "parentNodeCode") == code) { //是显示被点击节点的儿子节点
                nodes[i].style.display = 'inline';
                this.setNodeInfo(nodes[i], "showChild", 'false');
                if (this.getNodeInfo(nodes[i], "nodeType") != 'leaf') { //如果是文件夹需要改变+-号状态和文件夹状态
                    if (!this.treeViewConfig.imgPath) {
                        var imgFolder = document.getElementById(this.treeName + '_imgFolder_' + id);
						if (imgFolder) {/////////////////////////zhanghuitao/////////////////////////////////////////////
							imgFolder.innerHTML = '+';
							this.setCollapseStyle(imgFolder);
						}
                    } else {
                        document.getElementById(this.treeName + '_imgFolder_' + id).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg; //文件夹状态改变为闭合
                    }
                }
            }
        }

        if (this.getNodeInfo(node, "nodeType") != 'leaf') { //如果被点击节点是文件夹节点还需要改变+-号状态和文件夹状态
            this.setNodeInfo(node, "showChild", 'true'); //显示孩子节点
            if (!this.treeViewConfig.imgPath) {
                var imgFolder = document.getElementById(this.treeName + '_imgFolder_' + code);
                imgFolder.innerHTML = '-';
                this.setExpandStyle(imgFolder);
            } else {
                document.getElementById(this.treeName + '_imgFolder_' + code).src = this.treeViewConfig.imgPath + this.treeViewConfig.openfolderImg; //文件夹状态改变为闭合
            }
        }
    },

    collapseNode: function(me) {
        var code = me.id;

        var deepth = this.getNodeInfo(me, "deepth");

        var nodes = this.nodeArray; //找到所有属于该树的元素
        if (!nodes.length) {
            return;
        }

        var index = 0;
        for (; index < nodes.length; index++) { //遍历树元素
            if (nodes[index].id == code) {
                break; //找到被点击元素所在位置，从该位置往下查找
            }
        }
        for (++index; index < nodes.length; index++) {
            if (this.getNodeInfo(nodes[index], "deepth") > deepth) {
                nodes[index].style.display = 'none';
                this.hideSubTree(nodes[index]);
            } else {
                break;
            }
        }
        this.setNodeInfo(me, "showChild", 'false');
        if (this.getNodeInfo(me, "nodeType") != 'leaf') { //如果是文件夹需要改变+-号状态和文件夹状态
            if (!this.treeViewConfig.imgPath) {
                var imgFolder = document.getElementById(this.treeName + '_imgFolder_' + code);
                imgFolder.innerHTML = '+';
                this.setCollapseStyle(imgFolder);
            } else {
                document.getElementById(this.treeName + '_imgFolder_' + code).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg; //文件夹状态改变为闭合
            }
        }
    },

    expandAll: function() {
        var nodes = this.nodeArray; //找到所有属于该树的元素
        if (!nodes.length) {
            return;
        }

        for (var i = this.showRoot ? 1 : 0; i < nodes.length; i++) { //遍历树元素
            var code = nodes[i].id;
            nodes[i].style.display = 'inline';
            if (this.getNodeInfo(nodes[i], "nodeType") != 'leaf' && (!this.getNodeInfo(nodes[i], "childXML") || isBlank(this.getNodeInfo(nodes[i], "childXML")))) { //如果被点击节点是文件夹节点且无子树还需要改变+-号状态和文件夹状态
                this.setNodeInfo(nodes[i], "showChild", 'true'); //显示孩子节点
                if (!this.treeViewConfig.imgPath) {
                    var imgFolder = document.getElementById(this.treeName + '_imgFolder_' + code);
                    imgFolder.innerHTML = '-';
                    this.setExpandStyle(imgFolder);
                } else {
                    document.getElementById(this.treeName + '_imgFolder_' + code).src = this.treeViewConfig.imgPath + this.treeViewConfig.openfolderImg; //文件夹状态改变为闭合
                }
            }
        }
        this.isExpandAll = true;
    },

    setCollapseStyle: function (node) {
        with (node.style) {
            top = '3px';
            fontFamily = 'verdana';
            width = '8px';
            height = '8px';
            fontSize = '9px';
            overflow = 'hidden';
            border = 'solid 1px #000000';
            paddingTop = '1px';
            paddingLeft = '1px';
            backgroundColor = 'white';
            position = 'relative';
            lineHeight = '6px';
        }
    },

    setExpandStyle: function (node) {
        with (node.style) {
            top = '3px';
            fontFamily = 'verdana';
            width = '8px';
            height = '7px';
            fontSize = '14px';
            overflow = 'hidden';
            border = 'solid 1px #000000';
            paddingTop = '2px';
            paddingLeft = '1px';

            backgroundColor = 'white';
            position = 'relative';
            lineHeight = '3px';
        }
    },

    setLeafStyle: function (node) {
        with (node.style) {
			top = '3px';
 			fontFamily = 'verdana';
            border = 'solid 1px #000000';
            backgroundColor = 'white';
			width = '6px';
            fontSize = '9px';
            overflow = 'visible';
            border = 'solid 1px #000000';
            padding = '0px 0px 4px 3px';
            backgroundColor = 'white';
            position = 'relative';
            lineHeight = '5px';
        }
    },

    collapseAll: function() {
        var nodes = this.nodeArray; //找到所有属于该树的元素
        if (!nodes.length) {
            return;
        }

        for (var i = this.showRoot ? 1 : 0; i < nodes.length; i++) { //遍历树元素
            var code = nodes[i].id;
            if (this.getNodeInfo(nodes[i], "deepth") > (this.showRoot ? 2 : 1)) {
                nodes[i].style.display = 'none'; //隐藏
                this.hideSubTree(nodes[i]);
            } else { //第一层元素要显示
                this.setNodeInfo(nodes[i], "showChild", 'false');
                if (this.getNodeInfo(nodes[i], "nodeType") != 'leaf') { //如果是文件夹需要改变+-号状态和文件夹状态
                    if (!this.treeViewConfig.imgPath) {
                        var imgFolder = document.getElementById(this.treeName + '_imgFolder_' + code);
                        imgFolder.innerHTML = '+';
                        this.setCollapseStyle(imgFolder);
                    } else {
                        document.getElementById(this.treeName + '_imgFolder_' + code).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg; //文件夹状态改变为闭合
                    }
                }
            }
        }
        this.isExpandAll = false;
    },

    /**
     *打开code为code的节点,用于画完树后预先打开一个节点
     */
    PreExpandNode: function (code, nodes) {
        var node = null;
        for (var i = 0; i < nodes.length; i++) { //找到节点
            if (code == nodes[i].id) {
                node = nodes[i];
                nodes[i].style.display = 'inline';	 //显示本节点
                break;
            }
        }

        if (!node) {
            return; //没找到，返回
        }

        for (var i = 0; i < nodes.length; i++) {
            if (node != nodes[i] && this.getNodeInfo(node, "parentNodeCode") == this.getNodeInfo(nodes[i], "parentNodeCode")) { //显示亲兄弟，亲兄弟文件夹状态为关闭
                nodes[i].style.display = 'inline';
                if (this.getNodeInfo(nodes[i], "nodeType") != 'leaf') { //如果是文件夹需要改变+-号状态和文件夹状态
                    this.setNodeInfo(nodes[i], "showChild", 'false');
                    if (!this.treeViewConfig.imgPath) {
                        var imgFolder = document.getElementById(this.treeName + '_imgFolder_' + nodes[i].id);
                        imgFolder.innerHTML = '+';
                        this.setCollapseStyle(imgFolder);
                    } else {
                        document.getElementById(this.treeName + '_imgFolder_' + nodes[i].id).src = this.treeViewConfig.imgPath + this.treeViewConfig.closedfolderImg; //文件夹状态改变为闭合
                    }
                }
            }
        }

        this.PreExpandNode(this.getNodeInfo(node, "parentNodeCode"), nodes);
    }
});


function clickedNodeIsLeaf() {
    return window.event.srcElement.className == "treeLeaf";
}

function getTreeNodeInfo() {
    return window.event.srcElement.className == "treeLeaf";
}

function getTreeNodeByCode(scope,objClassName,code){
	var divs = getElementsByClassNamesScope(scope,objClassName);
	for(var i = 0; i < divs.length; i++){
		if(divs[i].code == code)
			return divs[i];
	}
}
