Codice:
/*
* DO NOT REMOVE THIS NOTICE
*
* PROJECT: mygosuMenu
* VERSION: 1.2.0
* COPYRIGHT: (c) 2003,2004 Cezary Tomczak
* LINK: http://gosu.pl/dhtml/mygosumenu.html
* LICENSE: BSD (revised)
*/
function TreeMenu(id) {
this.init = function() {
if (!document.getElementById(this.id)) {
alert("Element '"+this.id+"' does not exist in this document. TreeMenu cannot be initialized");
return;
}
this.parse(document.getElementById(this.id).childNodes, this.tree, this.id);
}
this.parse = function(nodes, tree, id) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].nodeType != 1) {
continue;
}
if (nodes[i].tagName.toLowerCase() == "li") {
nodes[i].id = id + "-" + tree.length;
tree[tree.length] = new Array();
if (nodes[i].childNodes && this.hasUl(nodes[i].childNodes)) {
nodes[i].className = "section";
var a;
if (a = this.getA(nodes[i].childNodes)) {
a.id = nodes[i].id + "-a";
eval("document.getElementById('"+a.id+"').onclick = function() {"+
"self.click('"+nodes[i].id+"');"+
"}");
}
} else {
nodes[i].className = "box";
}
}
if (nodes[i].tagName.toLowerCase() == "ul") {
nodes[i].style.display = "none";
id = id + "-" + (tree.length - 1);
nodes[i].id = id + "-section";
tree = tree[tree.length - 1];
}
if (nodes[i].childNodes) {
this.parse(nodes[i].childNodes, tree, id);
}
}
}
this.hasUl = function(nodes) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].nodeType != 1) {
continue;
}
if (nodes[i].tagName.toLowerCase() == "ul") {
return true;
}
if (nodes[i].childNodes) {
if (this.hasUl(nodes[i].childNodes)) {
return true;
}
}
}
return false;
}
this.getA = function(nodes) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].nodeType == 1) {
if (nodes[i].tagName.toLowerCase() == "a") {
return nodes[i];
}
return false;
}
}
}
this.click = function(id) {
e1 = document.getElementById(id + "-section");
e2 = document.getElementById(id);
if (e1.style.display == "none") {
e1.style.display = "";
e2.className = "section-open";
} else {
e1.style.display = "none";
e2.className = "section";
}
}
var self = this;
this.id = id;
this.tree = new Array();
this.init();
}