 var XMLConst = {
	ELEMENT_NODE					:1,
	ATTRIBUTE_NODE					:2,
	TEXT_NODE						:3,
	CDATA_SECTION_NODE				:4,
	ENTITY_REFERENCE_NODE			:5,
	ENTITY_NODE						:6,
	PROCESSING_INSTRUCTION_NODE		:7,
	COMMENT_NODE					:8,
	DOCUMENT_NODE					:9,
	DOCUMENT_TYPE_NODE				:10,
	DOCUMENT_FRAGMENT_NODE			:11,
	NOTATION_NODE					:12
}
var xml_file = "tree.asp";
var favoriteGen = {
	xmlDoc            : null,
	Tree    : null,

	importXML     : function(){
		if (document.implementation && document.implementation.createDocument){
			xmlDoc = document.implementation.createDocument("", "", null);
			xmlDoc.onload = favoriteGen.generateXML;
		}
		else if (window.ActiveXObject) {
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.onreadystatechange = function () {
				if (xmlDoc.readyState == 4) favoriteGen.generateXML()
			};
		}
		else {
			alert('ºê¶ó¿ìÀú°¡ ½ºÅ©¸³Æ®¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.');
		}
		xmlDoc.load(xml_file);
	},

	generateXML : function() {
		if(xmlDoc != null) {
			if(xmlDoc.hasChildNodes()) {
				var xChildNodes = "";

				// ÀÌÅ©.. Âü.. º°°Ô ´Ù Æ²¸®³×.
				if(document.all)
					xChildNodes = xmlDoc.childNodes[1].childNodes;
				else
					xChildNodes = xmlDoc.childNodes[0].childNodes;

				for(var i=0 ; i < xChildNodes.length ; i++) {
					var node = xChildNodes[i];

					if(node.nodeType == XMLConst.ELEMENT_NODE) {
						var title = getAttribute(node,"title");
						var link_url = getAttribute(node,"url");
						var script_name = getAttribute(node,"script");
						var serviceyn = getAttribute(node,"serviceyn");
						var target_link = getAttribute(node,"target");

						if(node.nodeName == "folder") {
							// recursive
							var folderNode = getFolder("true",title, link_url, script_name, serviceyn, target_link);
							favoriteGen.Tree.appendChild(folderNode);

							favoriteGen.generateXML_R(node,folderNode);
						}
						else {
							// var url = getAttribute(node,"url");
							var docNode = getDoc(title,link_url, script_name, serviceyn, target_link);
							favoriteGen.Tree.appendChild(docNode);
						}
					}
				}
			}
		}
	// allNodeReduction();
	var tree = new DynamicTree("tree");
    tree.init();
	},

	generateXML_R : function(pNode,pAppendNode) {
		if(pNode.hasChildNodes()) {
			var xChildNodes = pNode.childNodes;

			for(var i=0 ; i < xChildNodes.length ; i++) {
				var node = xChildNodes[i];

				if(node.nodeType == XMLConst.ELEMENT_NODE) {
					var title = getAttribute(node,"title");
					var link_url = getAttribute(node,"url");
					var script_name = getAttribute(node,"script");
					var serviceyn = getAttribute(node,"serviceyn");
					var target_link = getAttribute(node,"target");

					if(node.nodeName == "folder") {
						// recursive
						var folderNode = getFolder("true",title, link_url, script_name, serviceyn, target_link);
						pAppendNode.appendChild(folderNode);
						favoriteGen.generateXML_R(node,folderNode);
					}
					else {
						// var url = getAttribute(node,"url");
						var docNode = getDoc(title,link_url, script_name, serviceyn, target_link);
						pAppendNode.appendChild(docNode);
					}
				}
			}
		}
	}
};

function getFolder(pIsOpen,pText,pUrl,script_name, pServieYN, pTarget) {
	var div                 = document.createElement("div");
	var isOpenAtt            = document.createAttribute("isOpen");
	isOpenAtt.value            = "true";
	var classNameAtt        = document.createAttribute("class");
	classNameAtt.value        = "folder";

	div.setAttributeNode(isOpenAtt);
	div.setAttributeNode(classNameAtt);

	/* IE ÀÌ»óÇÏ³×... attribute µî·ÏÀ¸·Î onClick event°¡ ¾È¸Ô³× */
	if ( script_name ) {
		div.innerHTML            = "<span class=\"folder\" onClick=\"setOpen(this);\">[+]</span><a href=\"#\" onclick=\""+script_name+"; return false;\"'>" + pText + "</a>";
	}
	else {
		div.innerHTML            = "<span class=\"folder\" onClick=\"setOpen(this);\">[+]</span><a href=\"" + pUrl + "\" target='"+pTarget+"'>" + pText + "</a>";
	}

	return div;
}

function allNodeReduction () {
	var vItem = document.getElementsByTagName("span");
	for ( var i = 0 ; i < vItem.length ; i++){
		setOpen(vItem[i]);
	}
}

function getDoc(pText,pUrl,script_name, pServieYN, pTarget) {
	var div                 = document.createElement("div");
	var classNameAtt        = document.createAttribute("class");

	classNameAtt.value        = "doc";
	div.setAttributeNode(classNameAtt);
	// div.innerHTML            = "[¹®¼­]<a href=\"" + pUrl + "\">" + pText + "</a>";
	if ( script_name ){
		div.innerHTML            = "<img src='/images/common/root.gif' width='16' height='16' border=0 /><a href=\"#\" onclick=\""+script_name+";return false;\">" + pText + "</a>";
	}
	else {
		div.innerHTML            = "<img src='/images/common/root.gif' width='16' height='16' border=0 /><a href=\"" + pUrl + "\" target='"+pTarget+"'>" + pText + "</a>";
	}
	

	return div;
}

function setOpen(pObj) {
	var folderNode = pObj.parentNode;
	var isOpen = getAttribute(folderNode,"isOpen");

	if(folderNode.hasChildNodes()) {
		var xChildNodes = folderNode.childNodes;

		for(var i=0 ; i < xChildNodes.length ; i++) {
			var node = xChildNodes[i];

			if(node.nodeType == XMLConst.ELEMENT_NODE) {
				if(node.nodeName == "DIV") {
					var className = getAttribute(node,"class");
					if(isOpen == "true") {
						if(className.substr(0,3) == "doc")
							setAttribute(node,"class","doc");
						else
							setAttribute(node,"class","folder");
					}
					else {
						if(className.substr(0,3) == "doc")
							setAttribute(node,"class","doc");
						else
							setAttribute(node,"class","folder");
					}
				}
			}
		}
	}

	setAttribute(pObj,"class",(isOpen=="true" ? "folder" : "folder"));
	setAttribute(folderNode,"isOpen",(isOpen=="true" ? "false" : "true"));
}

function getAttribute(pNode,pAttributeName) {
	var attributes = pNode.attributes;
	var attNode = attributes.getNamedItem(pAttributeName);

	return attNode != null ? attNode.nodeValue: null;
}

function setAttribute(pNode,pAttributeName,pValue) {
	var attributes = pNode.attributes;
	var attNode = attributes.getNamedItem(pAttributeName);

	if(attNode != null)
		attNode.value = pValue;
}