I myself was looking for the solution for your second problem and after reading this post decided too give it a try myself since it didn't exist yet.
I don't know if it is "correctly" programmed for I am not a javascript programmer but it is working as I want it too.
I've created the function contractRest by taking a good look at the flatten function.
Code:
ddtreemenu.contractRest = function(treeid, ulelement)
{
var ultags = document.getElementById(treeid).getElementsByTagName("ul")
for (var i=0; i<ultags.length; i++)
{
ultags[i].style.display=(ulelement==ultags[i])? "block" : "none"
var relvalue = (ulelement==ultags[i])? "open" : "closed"
if (relvalue=="open")
{
ddtreemenu.expandSubTree(treeid, ultags[i])
}
else
{
ultags[i].setAttribute("rel", "closed")
ultags[i].parentNode.style.backgroundImage = "url("+ddtreemenu.closefolder+")"
}
}
}
I call this on the onclick open event:
Code:
ulelement.parentNode.onclick = function(e)
{
var submenu=this.getElementsByTagName("ul")[0]
if (submenu.getAttribute("rel")=="closed")
{
ddtreemenu.contractRest(treeid, ulelement)
submenu.style.display="block"
submenu.setAttribute("rel", "open")
ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
}
...
I've only tested this for the particular site I'm using it on, haven't tested on a "standard" tree menu.
Hope it helps.
Attachment 2027
Bookmarks