1menuController = { 2 3 menus: [], 4 5 inWork: false, 6 isIE : (navigator.userAgent.indexOf("MSIE") != -1?true:false), 7 8 mouseOver: function(obj,e){ 9 10 if (this.inWork==false) this.inWork = true; 11 else return true; 12 13 var menu = this.getMenu(obj); 14 15 if (menu.timer) window.clearTimeout(menu.timer); 16 17 var target = this.getEventTarget(e); 18 19 var root = true; 20 21 var overElement = this.getElement(target,menu.submenuElementTagName); 22 23 if (!overElement) overElement = this.getElement(target,menu.menuElementTagName); 24 else root = false; 25 26 if (overElement&&target != obj&&target.nodeName!=menu.submenuContainerTagName){ 27 28 var container = this.getElement(target,menu.submenuContainerTagName); 29 30 var par; 31 32 //if (menu.opened.length >0&&menu.opened[menu.opened.length-1]==container) return true; 33 34 while (menu.opened.length >0 && (root||menu.opened[menu.opened.length-1] != container) && (par=menu.opened.pop())) 35 par.style.display='none'; 36 37 //if ((!menu.triggerElementTagName || target.nodeName == menu.triggerElementTagName) && (!menu.triggerElementClassName || menu.triggerElementClassName == target.className)){ 38 39 var submenu = this.getFirstChild(overElement,menu.submenuContainerTagName); 40 41 if (submenu) { 42 43 if (menu.positioningPoint == 'overElement'){ 44 45 target = overElement; 46 47 } 48 49 menu.opened.push(submenu); 50 51 var coords = this.getDemensions(target); 52 53 //alert(coords.toSource()); 54 55 submenu.style.zIndex = 1000 + menu.opened.length; 56 57 if (menu.position == 'left'||menu.opened.length > 1) { 58 59 submenu.style.left = (coords.x + coords.w + menu.offsetX) + 'px'; 60 submenu.style.top = (coords.y + menu.offsetY) + 'px'; 61 62 } else if (menu.position == 'top') { 63 64 submenu.style.left = (coords.x + menu.offsetX) + 'px'; 65 submenu.style.top = (coords.y + coords.h + menu.offsetY-35+(this.isIE?10:0)) + 'px'; 66 67 } 68 69 submenu.style.display='block'; 70 71 } 72 73 //} 74 75 } 76 77 this.inWork = false; 78 return true; 79 80 }, 81 82 closeAll: function(menu){ 83 84 var a = null; 85 86 while(a=menu.opened.pop()) a.style.display="none"; 87 88 }, 89 90 mouseOut: function(obj,e){ 91 92 var menu = this.getMenu(obj); 93 94 if (menu.timer) window.clearTimeout(menu.timer); 95 96 menu.timer = window.setTimeout(function(){menuController.closeAll(menu)},menu.closeDelay); 97 98 }, 99 100 getMenu: function(objOrId){ 101 102 if (objOrId){ 103 104 var obj = null; 105 var id = null; 106 107 if (typeof(objOrId) == 'string') { 108 109 id = objOrId; 110 111 } else { 112 113 obj = objOrId; 114 id = obj.id; 115 116 } 117 118 for (var i=0; i < this.menus.length; i++) { 119 120 if (obj&&this.menus[i].obj==obj||id&&this.menus[i].id==id){ 121 122 if (obj) this.menus[i].obj = obj; 123 if (id) this.menus[i].id = id; 124 return this.menus[i]; 125 126 } 127 128 } 129 130 var a = {}; 131 132 a.opened = []; 133 a.obj = obj; 134 a.id = id; 135 136 a.menuElementTagName = "TD"; 137 a.submenuElementTagName = "LI"; 138 a.submenuContainerTagName = "UL"; 139 140 /* 141 a.triggerElementTagName = null; 142 a.triggerElementClassName = null; 143 a.triggerElementExpandedClassName = null;*/ 144 145 a.offsetX = 0; 146 a.offsetY = 0; 147 a.position = "top"; 148 a.positioningPoint = "overElement"; // can position over trigger Element = "overTriggerElement"; 149 a.closeDelay = 1500; 150 151 this.menus.push(a); 152 return a; 153 154 } 155 156 return null; 157 158 }, 159 160 161 getEventTarget: function(e){ 162 163 if (!e) e = window.event; 164 165 if (e.target) { 166 167 if (e.target.nodeType == 3) e.target = e.target.parentNode; 168 return e.target; 169 170 } else if (e.srcElement) 171 172 return e.srcElement; 173 174 }, 175 176 177 getDemensions : function(obj) { 178 179 var a = new Object(); 180 181 a.h = obj.offsetHeight; 182 a.w = obj.offsetWidth; 183 a.x=0; 184 a.y=0; 185 186 if (obj.offsetParent) { 187 188 while (obj.offsetParent) { 189 190 if (obj.style.left) { 191 /*a.x += parseInt(obj.style.left); 192 a.y += parseInt(obj.style.top);*/ 193 break; 194 } 195 196 a.y += obj.offsetTop; 197 a.x += obj.offsetLeft; 198 obj = obj.offsetParent; 199 } 200 201 } else { 202 203 if (obj.x) a.x += obj.x; 204 if (obj.y) a.y += obj.y; 205 206 } 207 208 return a; 209 210 }, 211 212 getFirstChild : function(obj,tagname){ 213 214 if (obj) obj = obj.firstChild; 215 216 if (obj&&obj.nodeName==tagname) return obj; 217 218 return this.getNextSibling(obj,tagname); 219 220 }, 221 222 getNextSibling : function(obj,tagname){ 223 224 if (obj) obj = obj.nextSibling; 225 226 while (obj&&obj.nodeName!=tagname) obj = obj.nextSibling; 227 228 return obj; 229 230 }, 231 232 getElement : function(obj,tagname){ 233 234 while (obj&&obj.nodeName!=tagname) obj = obj.parentNode; 235 236 return obj; 237 238 } 239 240};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.