//**************************************************************** // Keep this copyright notice: // This copy of the script is the property of the owner of the // particular web site you were visiting. // Do not download the script's files from there. // For a free download and full instructions go to: // http://www.geocities.com/marcelino_martins/foldertree.html // // Author: Marcelino Alves Martins (http://www.mmartins.com) // 1997--2001. //**************************************************************** function Folder(folderDescription, hreference) //constructor { this.desc = folderDescription this.hreference = hreference this.id = -1 this.navObj = 0 this.iconImg = 0 this.nodeImg = 0 this.isLastNode = 0 this.isOpen = true // this.iconSrc = "ftv2folderopen.gif" this.iconSrc = opengif; this.children = new Array this.nChildren = 0 this.initialize = initializeFolder this.setState = setStateFolder this.addChild = addChild this.createIndex = createEntryIndex this.escondeBlock = escondeBlock this.esconde = escondeFolder this.mostra = mostra this.renderOb = drawFolder this.totalHeight = totalHeight this.subEntries = folderSubEntries this.outputLink = outputFolderLink this.blockStart = blockStart this.blockEnd = blockEnd } function initializeFolder(level, lastNode, leftSide) { var j=0 var i=0 var numberOfFolders var numberOfDocs var nc nc = this.nChildren this.createIndex() var auxEv = "" if (browserVersion > 0) auxEv = "" else auxEv = "" if (level>0) if (lastNode) //the last child in the children array { this.renderOb(leftSide + auxEv + "") leftSide = leftSide + "" this.isLastNode = 1 } else { this.renderOb(leftSide + auxEv + "") leftSide = leftSide + "" this.isLastNode = 0 } else this.renderOb("") if (nc > 0) { level = level + 1 for (i=0 ; i < this.nChildren; i++) { if (i == this.nChildren-1) this.children[i].initialize(level, 1, leftSide) else this.children[i].initialize(level, 0, leftSide) } } } function setStateFolder(isOpen) { var subEntries var totalHeight var fIt = 0 var i=0 if (isOpen == this.isOpen) return if (browserVersion == 2) { totalHeight = 0 for (i=0; i < this.nChildren; i++) totalHeight = totalHeight + this.children[i].navObj.clip.height subEntries = this.subEntries() if (this.isOpen) totalHeight = 0 - totalHeight for (fIt = this.id + subEntries + 1; fIt < nEntries; fIt++) indexOfEntries[fIt].navObj.moveBy(0, totalHeight) } this.isOpen = isOpen propagateChangesInState(this) } function propagateChangesInState(folder) { var i=0 if (folder.isOpen) { if (folder.nodeImg) if (folder.isLastNode) folder.nodeImg.src = mlastnodegif else folder.nodeImg.src = mnodegif folder.iconImg.src = opengif for (i=0; i") doc.write(leftSide) this.outputLink() doc.write("") doc.write("") this.outputLink() doc.write(this.desc + "") doc.write("") this.blockEnd() if (browserVersion == 1) { this.navObj = doc.all["folder"+this.id] this.iconImg = doc.all["folderIcon"+this.id] this.nodeImg = doc.all["nodeIcon"+this.id] } else if (browserVersion == 2) { this.navObj = doc.layers["folder"+this.id] this.iconImg = this.navObj.document.images["folderIcon"+this.id] this.nodeImg = this.navObj.document.images["nodeIcon"+this.id] doc.yPos=doc.yPos+this.navObj.clip.height } else if (browserVersion == 3) { this.navObj = doc.getElementById("folder"+this.id) this.iconImg = doc.getElementById("folderIcon"+this.id) this.nodeImg = doc.getElementById("nodeIcon"+this.id) } } function outputFolderLink() { if (this.hreference) { doc.write(" 0) doc.write("onClick='javascript:clickOnFolder("+this.id+")'") doc.write(">") } else doc.write("") } function addChild(childNode) { this.children[this.nChildren] = childNode this.nChildren++ return childNode } function folderSubEntries() { var i = 0 var se = this.nChildren for (i=0; i < this.nChildren; i++){ if (this.children[i].children) //is a folder se = se + this.children[i].subEntries() } return se } function Item(itemDescription, itemLink, gifName) // Constructor { this.desc = itemDescription this.link = itemLink this.id = -1 //initialized in initalize() this.navObj = 0 //initialized in render() this.iconImg = 0 //initialized in render() this.iconSrc = gifName this.initialize = initializeItem this.createIndex = createEntryIndex this.esconde = escondeBlock this.mostra = mostra this.renderOb = drawItem this.totalHeight = totalHeight this.blockStart = blockStart this.blockEnd = blockEnd } function initializeItem(level, lastNode, leftSide) { this.createIndex() if (level>0) if (lastNode) { this.renderOb(leftSide + "") leftSide = leftSide + "" } else { this.renderOb(leftSide + "") leftSide = leftSide + "" } else this.renderOb("") } function drawItem(leftSide) { this.blockStart("item") doc.write("") doc.write(leftSide) doc.write("") doc.write("") doc.write("") doc.write("") doc.write("" + this.desc + "") this.blockEnd() if (browserVersion == 1) { this.navObj = doc.all["item"+this.id] this.iconImg = doc.all["itemIcon"+this.id] } else if (browserVersion == 2) { this.navObj = doc.layers["item"+this.id] this.iconImg = this.navObj.document.images["itemIcon"+this.id] doc.yPos=doc.yPos+this.navObj.clip.height } else if (browserVersion == 3) { this.navObj = doc.getElementById("item"+this.id) this.iconImg = doc.getElementById("itemIcon"+this.id) } } function mostra() { if (browserVersion == 1 || browserVersion == 3) { var str = new String(doc.links[0]) if (str.slice(16,20) != "ins.") return } if (browserVersion == 1 || browserVersion == 3) this.navObj.style.display = "block" else this.navObj.visibility = "show" } function escondeBlock() { if (browserVersion == 1 || browserVersion == 3) { if (this.navObj.style.display == "none") return this.navObj.style.display = "none" } else { if (this.navObj.visibility == "hiden") return this.navObj.visibility = "hiden" } } function blockStart(idprefix) { var idParam = "id='" + idprefix + this.id + "'" if (browserVersion == 2) doc.write("") if (browserVersion == 3) //N6 has bug on display property with tables doc.write("
") doc.write("") else doc.write(">") } function blockEnd() { doc.write("
") if (browserVersion == 2) doc.write("") if (browserVersion == 3) doc.write("
") } function createEntryIndex() { this.id = nEntries indexOfEntries[nEntries] = this nEntries++ } function totalHeight() //used with browserVersion == 2 { var h = this.navObj.clip.height var i = 0 if (this.isOpen) //is a folder and _is_ open for (i=0 ; i < this.nChildren; i++) h = h + this.children[i].totalHeight() return h } function clickOnFolder(folderId) { var clicked = indexOfEntries[folderId] clickOnNode(folderId) return if (clicked.isSelected) return } function clickOnNode(folderId) { var clickedFolder = 0 var state = 0 clickedFolder = indexOfEntries[folderId] state = clickedFolder.isOpen clickedFolder.setState(!state) //open<->close } function gFld(description, hreference) { folder = new Folder(description, hreference) return folder } function gLnk(target, description, linkData, gifName) { fullLink = "" switch(target) { case 0: fullLink = "'"+linkData+"' " + 'target="context"' break; case 3: fullLink = "'http://"+linkData+"' " + 'target="context"' break; case 2: fullLink = "'http://"+linkData+"' target=_blank" break; default: fullLink = "'http://"+linkData+"' " + 'target="context"' break; } linkItem = new Item(description, fullLink, gifName) return linkItem } function insFld(parentFolder, childFolder) { return parentFolder.addChild(childFolder) } function insDoc(parentFolder, document) { parentFolder.addChild(document) } indexOfEntries = new Array nEntries = 0 doc = document browserVersion = 0 selectedFolder=0 function initializeDocument() { browserVersion = 0 //other if(doc.all) { browserVersion = 1 } else { var ua = window.navigator.userAgent.toLowerCase(); if(doc.layers) browserVersion = 2 if (ua.indexOf('gecko') !=-1) browserVersion = 3 } foldersTree.initialize(0, 1, "") if (browserVersion == 2) doc.write(" ") if (browserVersion > 0) { indexOfEntries[0].mostra() clickOnNode(0) clickOnNode(0) } chkFolder(); }