1/* 2Based on Stuart Langridge's aqtree3clickable.js (http://www.kryogenix.org/code/browser/aqlists/) 3*/ 4 5 6function makeTreesC() { 7 // We don't actually need createElement, but we do 8 // need good DOM support, so this is a good check. 9 if (!document.createElement) return; 10 11 uls = document.getElementsByTagName("ul"); 12 for (uli=0;uli<uls.length;uli++) { 13 ul = uls[uli]; 14 if (ul.nodeName == "UL" && ul.className == "aqtree3clickable") { 15 processULELC(ul); 16 } 17 } 18} 19 20function processULELC(ul) { 21 if (!ul.childNodes || ul.childNodes.length == 0) return; 22 // Iterate LIs 23 for (var itemi=0;itemi<ul.childNodes.length;itemi++) { 24 var item = ul.childNodes[itemi]; 25 if (item.nodeName == "LI") { 26 // Iterate things in this LI 27 var a; 28 var subul; 29 subul = ""; 30 for (var sitemi=0;sitemi<item.childNodes.length;sitemi++) { 31 var sitem = item.childNodes[sitemi]; 32 switch (sitem.nodeName) { 33 case "A": a = sitem; break; 34 case "SPAN": a = sitem; break; 35 case "UL": subul = sitem; 36 processULELC(subul); 37 break; 38 } 39 } 40 if (subul) { 41 associateELC(a,subul); 42 } else { 43 a.parentNode.className = "bullet"; 44 } 45 } 46 } 47} 48 49function associateELC(a,ul) { 50 var el = document.createElement("a"); 51 var img = document.createElement("img"); 52 img.src="lib/plugins/fullindex/images/open.gif"; 53 el.appendChild(img); 54 el.className = "cat"; 55 a.parentNode.insertBefore(el, a.parentNode.firstChild); 56 if (a.parentNode.className.indexOf('open') == -1) 57 a.parentNode.className = 'closed'; 58 el.onclick = function () { 59 if (this.parentNode.className=='open') { 60 this.parentNode.className = "closed"; 61 this.firstChild.src="lib/plugins/fullindex/images/closed.gif"; 62 } else { 63 this.parentNode.className = "open"; 64 this.firstChild.src="lib/plugins/fullindex/images/open.gif"; 65 } 66 return false; 67 } 68} 69 70function aq_collapseAll() { 71 //walk through entire tree and change "open" to "closed" class 72 uls = document.getElementsByTagName("ul"); 73 for (uli=0;uli<uls.length;uli++) { 74 ul = uls[uli]; 75 if (ul.nodeName == "UL" && ul.className == "aqtree3clickable") { 76 if (!ul.childNodes || ul.childNodes.length == 0) return; 77 for (var itemi=0;itemi<ul.childNodes.length;itemi++) { 78 var item = ul.childNodes[itemi]; 79 item.className = 'closed'; 80 } 81 } 82 } 83} 84 85function aq_showLevel(ul, level, currLevel) { 86 currLevel = currLevel + 1; 87 if (!ul.childNodes || ul.childNodes.length == 0) return; 88 // Iterate LIs 89 for (var itemi=0;itemi<ul.childNodes.length;itemi++) { 90 var item = ul.childNodes[itemi]; 91 if (item.nodeName == "LI") { 92 // Iterate things in this LI 93 var subul; 94 subul = ""; 95 var hasChild; 96 //if not reached level look for ul and process recursively 97 if (currLevel < level){ 98 for (var sitemi=0;sitemi<item.childNodes.length;sitemi++) { 99 var sitem = item.childNodes[sitemi]; 100 switch (sitem.nodeName) { 101 case "UL": subul = sitem; 102 aq_showLevel(subul, level, currLevel); 103 hasChild = true; 104 break; 105 } 106 } 107 if (hasChild) { 108 item.className = 'open'; 109 hasChild = false; 110 } else { 111 item.className = 'bullet'; 112 } 113 } else { 114 //check to see if there's a end node 115 for (var sitemi=0;sitemi<item.childNodes.length;sitemi++) { 116 var sitem = item.childNodes[sitemi]; 117 switch (sitem.nodeName) { 118 case "UL": subul = sitem; 119 hasChild = true; 120 break; 121 } 122 } 123 if (hasChild) { 124 item.className = 'closed'; 125 item.firstChild.firstChild.src="lib/plugins/fullindex/images/closed.gif"; 126 hasChild = false; 127 } else { 128 item.className = 'bullet'; 129 } 130 } 131 } 132 } 133} 134 135 136function aq_show(level, obj) { 137 //walk through entire tree and change "open" to "closed" class based on the level passed 138 uls = document.getElementsByTagName("ul"); 139 for (uli=0;uli<uls.length;uli++) { 140 ul = uls[uli]; 141 if (ul.nodeName == "UL" && ul.className == "aqtree3clickable") { 142 if(level > 0) { 143 aq_set(obj); 144 aq_showLevel(ul, level, 0); 145 } 146 } 147 } 148} 149 150//find the clicked item and set classes accordingly 151function aq_set(obj) { 152 var ul = document.getElementById("aqNav"); 153 for (i=0;i<ul.childNodes.length;i++) { 154 var li = ul.childNodes[i]; 155 //find clicked item 156 if(li.id == obj.parentNode.id) { 157 li.className = "on"; 158 } else { 159 li.className = ""; 160 } 161 } 162} 163 164//initialize 165addInitEvent(makeTreesC); 166