/* Core */
Tree = function (treeID, depthLevel) {
    this.LEVEL = new Array();
    this.treeObj = document.getElementById(treeID);
    for (var i = 0; i < depthLevel ; i++) {
        this.LEVEL[i] = new Array();
    }
    initTree(this);
}
Node = function () {
    this.depth = 0;
    this.value;
}

function initTree (tree) {
    var allNodes = tree.treeObj.getElementsByTagName("li");
	var treeNodes = new Array();
    for (var i = 0; i < allNodes.length ; i++) {
		if (allNodes[i].parentNode.id == tree.treeObj.id || allNodes[i].parentNode.parentNode.nodeName.toLowerCase() == "li") {
			treeNodes.push(allNodes[i]);
		}
	}
    for (var i = 0; i < treeNodes.length ; i++) {
        var node = new Node();
        node.value = treeNodes[i];
        tree.LEVEL[getNodeDepth(node, tree)].push(node.value);
    }
}
function getNodeDepth (node, tree) {
    NODE_VALUE = node.value;
    while (NODE_VALUE.parentNode.id != tree.treeObj.id && NODE_VALUE.parentNode.parentNode.nodeName.toLowerCase() == "li") {
        node.depth += 1;
        NODE_VALUE = NODE_VALUE.parentNode.parentNode;
    }
    return node.depth;
}

/* TREE Methods */
//Access One Node
Tree.prototype.accessNode = function (nodeDepth, nodeIndex) {
	try {
		//alert(this.LEVEL[nodeDepth-1][nodeIndex-1].innerHTML)
		if (typeof(this.LEVEL[nodeDepth-1][nodeIndex-1]) != "undefined")
			return this.LEVEL[nodeDepth-1][nodeIndex-1];
		else 
			alert("This node does not exist !");
	}
	catch (e) {
		alert("This node does not exist !");
		return false;
	}
}