| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| * |
| * This Source Code Form is "Incompatible With Secondary Licenses", as |
| * defined by the Mozilla Public License, v. 2.0. |
| */ |
| |
| if (!Node) { |
| // MSIE doesn't define Node, so provide a compatibility object |
| var Node = { TEXT_NODE: 3 } |
| } |
| |
| if (!highlighted) { |
| var highlighted = 0; |
| var highlightedclass = ""; |
| var highlightedover = 0; |
| } |
| |
| function doToggle(node, event) { |
| var deep = event.altKey || event.ctrlKey; |
| |
| if (node.nodeType == Node.TEXT_NODE) |
| node = node.parentNode; |
| |
| var toggle = node.nextSibling; |
| while (toggle && toggle.tagName != "UL") |
| toggle = toggle.nextSibling; |
| |
| if (toggle) { |
| if (deep) { |
| var direction = toggleDisplay(toggle, node); |
| changeChildren(toggle, direction); |
| } else { |
| toggleDisplay(toggle, node); |
| } |
| } |
| /* avoid problems with default actions on links (mozilla's |
| * ctrl/shift-click defaults, for instance */ |
| event.preventBubble(); |
| event.preventDefault(); |
| return false; |
| } |
| |
| function changeChildren(node, direction) { |
| var item = node.firstChild; |
| while (item) { |
| /* find the LI inside the UL I got */ |
| while (item && item.tagName != "LI") |
| item = item.nextSibling; |
| if (!item) |
| return; |
| |
| /* got it, now find the first A */ |
| var child = item.firstChild; |
| while (child && child.tagName != "A") |
| child = child.nextSibling; |
| if (!child) { |
| return |
| } |
| var bullet = child; |
| |
| /* and check if it has its own sublist */ |
| var sublist = item.firstChild; |
| while (sublist && sublist.tagName != "UL") |
| sublist = sublist.nextSibling; |
| if (sublist) { |
| if (direction && isClosed(sublist)) { |
| openNode(sublist, bullet); |
| } else if (!direction && !isClosed(sublist)) { |
| closeNode(sublist, bullet); |
| } |
| changeChildren(sublist, direction) |
| } |
| item = item.nextSibling; |
| } |
| } |
| |
| function openNode(node, bullet) { |
| node.style.display = "block"; |
| bullet.className = "b b_open"; |
| } |
| |
| function closeNode(node, bullet) { |
| node.style.display = "none"; |
| bullet.className = "b b_closed"; |
| } |
| |
| function isClosed(node) { |
| /* XXX we should in fact check our *computed* style, not the display |
| * attribute of the current node, which may be inherited and not |
| * set. However, this really only matters when changing the default |
| * appearance of the tree through a parent style. */ |
| return node.style.display == "none"; |
| } |
| |
| function toggleDisplay(node, bullet) { |
| if (isClosed(node)) { |
| openNode(node, bullet); |
| return true; |
| } |
| |
| closeNode(node, bullet); |
| return false; |
| } |
| |
| function duplicated(element) { |
| var allsumm= document.getElementsByTagName("span"); |
| if (highlighted) { |
| for (i = 0;i < allsumm.length; i++) { |
| if (allsumm.item(i).id == highlighted) { |
| allsumm.item(i).className = highlightedclass; |
| } |
| } |
| if (highlighted == element) { |
| highlighted = 0; |
| return; |
| } |
| } |
| highlighted = element; |
| var elem = document.getElementById(element); |
| highlightedclass = elem.className; |
| for (var i = 0;i < allsumm.length; i++) { |
| if (allsumm.item(i).id == element) { |
| allsumm.item(i).className = "summ_h"; |
| } |
| } |
| } |
| |
| function duplicatedover(element) { |
| if (!highlighted) { |
| highlightedover = 1; |
| duplicated(element); |
| } |
| } |
| |
| function duplicatedout(element) { |
| if (highlighted == element && highlightedover) { |
| highlightedover = 0; |
| duplicated(element); |
| } |
| } |