2 function Menu_OverItem (menuId, itemId, parentId) {
3 var menu = getMenu (menuId);
6 var subm = getSubMenu (menuId, itemId);
7 if (subm.parentMenu == null && parentId != null)
8 subm.parentMenu = getSubMenu (menuId, parentId);
10 if (parentId != null && menu.dynamicHover != null)
11 Menu_HilighItem (menuId, itemId, menu.dynamicHover, menu.dynamicLinkHover);
12 else if (parentId == null && menu.staticHover != null)
13 Menu_HilighItem (menuId, itemId, menu.staticHover, menu.staticLinkHover);
15 if (subm.firstShown != true) {
16 var item = getMenuItem (menuId, itemId);
20 if (menu.dho != null) offx += menu.dho;
21 if (menu.dvo != null) offy += menu.dvo;
23 if (menu.vertical || parentId != null)
24 Menu_Reposition (menu, item, subm, item.offsetWidth + offx, offy);
26 Menu_Reposition (menu, item, subm, offx, item.offsetHeight + offy);
28 subm.initialLeft = subm.style.left;
29 subm.initialTop = subm.style.top;
30 subm.initialContentHeight = getMenuScrollBox (menuId, itemId, "b").offsetHeight;
31 subm.scrollButtonsHeight = subm.offsetHeight - subm.initialContentHeight;
32 var submMargin = subm.offsetHeight - subm.clientHeight;
33 subm.initialOffsetHeight = subm.offsetHeight - subm.scrollButtonsHeight + submMargin;
34 subm.firstShown = true;
38 Menu_SetActive (menu, subm);
40 Menu_Resize (subm, menuId, itemId);
43 function Menu_OverDynamicLeafItem (menuId, itemId, parentId) {
44 var menu = getMenu (menuId);
47 var subm = getSubMenu (menuId, parentId);
48 Menu_SetActive (menu, subm);
50 if (menu.dynamicHover != null)
51 Menu_HilighItem (menuId, itemId, menu.dynamicHover, menu.dynamicLinkHover);
54 function Menu_OverStaticLeafItem (menuId, itemId) {
55 var menu = getMenu (menuId);
58 Menu_SetActive (menu, null);
59 if (menu.dynamicHover != null)
60 Menu_HilighItem (menuId, itemId, menu.staticHover, menu.staticLinkHover);
63 function Menu_HilighItem (menuId, itemId, hoverClass, hoverLinkClass)
65 var item = getMenuItem (menuId, itemId);
66 if (item.normalClass == null)
67 item.normalClass = item.className;
68 item.className = item.normalClass + " " + hoverClass;
70 var itemLink = getMenuItemLink (menuId, itemId);
71 if (itemLink.normalClass == null)
72 itemLink.normalClass = itemLink.className;
73 itemLink.className = itemLink.normalClass + " " + hoverLinkClass;
76 function Menu_OutItem (menuId, itemId, parentId) {
77 var menu = getMenu (menuId);
80 var subm = getSubMenu (menuId, itemId);
81 if (subm == null && parentId != null)
82 subm = getSubMenu (menuId, parentId);
84 Menu_HideMenu (menu, subm, menu.disappearAfter);
85 var item = getMenuItem (menuId, itemId);
86 if (item != null && item.normalClass != null)
87 item.className = item.normalClass;
88 var itemLink = getMenuItemLink (menuId, itemId);
89 if (itemLink != null && itemLink.normalClass != null)
90 itemLink.className = itemLink.normalClass;
93 function Menu_OverScrollBtn (menuId, parentId, updown) {
94 var menu = getMenu (menuId);
97 var subm = getSubMenu (menuId, parentId);
98 Menu_SetActive (menu, subm);
100 if (subm.scrollThread != null)
101 clearInterval (subm.scrollThread);
102 var box = getMenuScrollBox (menuId, parentId, "b");
103 subm.scrollThread = setInterval ("Menu_ScrollMenu ('" + box.id + "','" + updown + "')", 60);
106 function Menu_OutScrollBtn (menuId, parentId, updown) {
107 var menu = getMenu (menuId);
110 var subm = getSubMenu (menuId, parentId);
111 if (subm.scrollThread != null)
112 clearInterval (subm.scrollThread);
113 Menu_HideMenu (menu, subm, menu.disappearAfter);
116 function Menu_ScrollMenu (boxId, updown) {
117 var box = document.getElementById (boxId);
118 if (updown == "u") box.scrollTop -= 5;
119 else box.scrollTop += 5;
123 function Menu_SetActive (menu, subm) {
124 if (menu.active != null && subm != menu.active)
125 Menu_HideMenu (menu, menu.active, 0);
129 function Menu_HideMenu (menu, subm, time)
131 if (subm.timer != null) clearTimeout (subm.timer);
132 if (time > 0) subm.timer = setTimeout ("Menu_HideMenuCallback ('" + subm.id + "')", time);
133 else Menu_HideMenuCallback (subm.id);
135 if (subm.parentMenu != null)
136 Menu_HideMenu (menu, subm.parentMenu, time);
139 function Menu_HideMenuCallback (spanId)
141 var subm = document.getElementById (spanId);
142 subm.style.visibility = "hidden";
145 function Menu_ShowMenu (subm)
147 if (subm.timer != null)
148 clearTimeout (subm.timer);
150 subm.style.visibility = "visible";
152 if (subm.parentMenu != null)
153 Menu_ShowMenu (subm.parentMenu);
156 function Menu_Reposition (menu, it, elem, offx, offy)
158 var itPos = menu.webForm.WebForm_GetElementPosition(it);
159 var elemPos = menu.webForm.WebForm_GetElementPosition(elem);
160 elem.style.left = (elem.offsetLeft - elemPos.x + itPos.x + offx) + "px";
161 elem.style.top = (elem.offsetTop - elemPos.y + itPos.y + offy) + "px";
164 function Menu_Resize (subm, menuId, itemId)
166 var parent = subm.offsetParent;
167 var box = getMenuScrollBox (menuId, itemId, "b");
169 var bottom = subm.offsetTop + subm.initialOffsetHeight - parent.scrollTop;
173 * This is a workaround for an IE bug. IE recalculates the box offsetWidth when
174 * the box _height_ is set below - which in case of boxes with overflowing content
175 * results in a value that's just slightly smaller than the client window width.
176 * In effect, a long submenu will also be very wide, which isn't desirable.
178 var newWidth = box.offsetWidth;
180 if (bottom > parent.clientHeight /* && parent.scrollHeight > parent.clientHeight*/) {
181 var overflow = bottom - parent.clientHeight;
182 var freeTop = subm.offsetTop - parent.scrollTop;
183 if (overflow <= freeTop) {
184 subm.style.top = (subm.offsetTop - overflow) + "px";
185 displayScroll = "none";
186 box.style.height = subm.initialContentHeight + "px";
188 subm.style.top = (subm.offsetTop - freeTop) + "px";
189 var bh = (parent.clientHeight - subm.offsetTop + parent.scrollTop) - subm.scrollButtonsHeight;
190 box.style.overflow = "hidden";
191 box.style.height = bh + "px";
192 displayScroll = "block";
196 displayScroll = "none";
197 box.style.height = subm.initialContentHeight + "px";
199 subm.style.width = newWidth + "px";
201 var btn = getMenuScrollBox (menuId, itemId, "u");
202 btn.style.display = displayScroll;
203 btn = getMenuScrollBox (menuId, itemId, "d");
204 btn.style.display = displayScroll;
207 function getMenu (menuId) { try { return eval (menuId + "_data"); } catch(e) { return null; } }
208 function getSubMenu (menuId, itemId) { return document.getElementById (menuId + "_" + itemId + "s"); }
209 function getMenuItem (menuId, itemId) { return document.getElementById (menuId + "_" + itemId + "i"); }
210 function getMenuItemLink (menuId, itemId) { return document.getElementById (menuId + "_" + itemId + "l"); }
211 function getMenuScrollBox (menuId, itemId, btn) { return document.getElementById (menuId + "_" + itemId + "c" + btn); }