function initializeLiMenu() { var linkArray = $$('#liMenu a[href="'+location.pathname+'"]'); //this will have 0 or 1 elements if (linkArray.length > 0) { expandTree(linkArray[0]); } } function toggleBranch(link) { link = $(link); //gives element extra Prototype functionality if (findPlusMinus(link).innerHTML.include('+')) { expandBranch(link); } else { collapseBranch(link); } } function expandBranch(element) { var plusMinus = findPlusMinus(element); if (plusMinus) { plusMinus.update('-'); } else { return; //it is a branch } var childrenUl = element.match('ul') ? element : element.next('ul'); if (childrenUl) { childrenUl.show(); } } function collapseBranch(link) { findPlusMinus(link).update('+'); var childrenUl = link.next('ul'); if (childrenUl) { childrenUl.hide(); } } function expandTree(link) { link = $(link); //gives element extra Prototype functionality expandBranch(link); var parentUl = link.up('ul'); //this loop will expand all ancestors while (parentUl && parentUl.descendantOf('liMenu')) { expandBranch(parentUl); parentUl = parentUl.up('ul'); } } function findPlusMinus(element) { element = $(element); return (element.match('a.plusminus') ? element : element.previous('a.plusminus')); }