bug fixes found by Test/System.Web.UI.WebControls/BoundFieldTest
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / Menu.js
1
2 function Menu_OverItem (menuId, itemId, parentId) {
3         var menu = getMenu (menuId);
4         var subm = getSubMenu (menuId, itemId);
5         if (subm.parentMenu == null && parentId != null)
6                 subm.parentMenu = getSubMenu (menuId, parentId);
7         
8         if (subm.firstShown != true) {
9                 var item = getMenuItem (menuId, itemId);
10                 var offx; var offy;
11                 if (subm.parentMenu != null) {
12                         offx = parseInt (subm.parentMenu.style.left);
13                         offy = parseInt (subm.parentMenu.style.top);
14                 } else {
15                         offx = offy = 0;
16                 }
17                 
18                 if (menu.dho != null) offx += menu.dho;
19                 if (menu.dvo != null) offy += menu.dvo;
20                 
21                 if (menu.vertical || parentId != null)
22                         Menu_Reposition (item, subm, item.offsetWidth + offx, offy);
23                 else
24                         Menu_Reposition (item, subm, offx, item.offsetHeight + offy);
25                         
26                 subm.initialLeft = subm.style.left;
27                 subm.initialTop = subm.style.top;
28                 subm.initialContentHeight = getMenuScrollBox (menuId, itemId, "b").offsetHeight;
29                 subm.scrollButtonsHeight = subm.offsetHeight - subm.initialContentHeight;
30                 var submMargin = subm.offsetHeight - subm.clientHeight;
31                 subm.initialOffsetHeight = subm.offsetHeight - subm.scrollButtonsHeight + submMargin;
32                 subm.firstShown = true;
33         }
34         
35         Menu_SetActive (menu, subm);
36         Menu_ShowMenu (subm);
37         Menu_Resize (subm, menuId, itemId);
38
39         if (parentId != null && menu.dynamicHover != null)
40                 Menu_HilighItem (menuId, itemId, menu.dynamicHover);
41         else if (parentId == null && menu.staticHover != null)
42                 Menu_HilighItem (menuId, itemId, menu.staticHover);
43 }
44
45 function Menu_OverDynamicLeafItem (menuId, itemId, parentId) {
46         var menu = getMenu (menuId);
47         var subm = getSubMenu (menuId, parentId);
48         Menu_SetActive (menu, subm);
49         Menu_ShowMenu (subm);
50         if (menu.dynamicHover != null)
51                 Menu_HilighItem (menuId, itemId, menu.dynamicHover);
52 }
53
54 function Menu_OverStaticLeafItem (menuId, itemId) {
55         var menu = getMenu (menuId);
56         Menu_SetActive (menu, null);
57         if (menu.dynamicHover != null)
58                 Menu_HilighItem (menuId, itemId, menu.staticHover);
59 }
60
61 function Menu_HilighItem (menuId, itemId, hoverClass)
62 {
63         var item = getMenuItem (menuId, itemId);
64         if (item.normalClass == null)
65                 item.normalClass = item.className;
66         item.className = item.normalClass + " " + hoverClass;
67 }
68
69 function Menu_OutItem (menuId, itemId, parentId) {
70         var menu = getMenu (menuId);
71         var subm = getSubMenu (menuId, itemId);
72         if (subm == null && parentId != null)
73                 subm = getSubMenu (menuId, parentId);
74         if (subm != null)
75                 Menu_HideMenu (menu, subm, menu.disappearAfter);
76         var item = getMenuItem (menuId, itemId);
77         if (item != null && item.normalClass != null)
78                 item.className = item.normalClass;
79 }
80
81 function Menu_OverScrollBtn (menuId, parentId, updown) {
82         var menu = getMenu (menuId);
83         var subm = getSubMenu (menuId, parentId);
84         Menu_SetActive (menu, subm);
85         Menu_ShowMenu (subm);
86         if (subm.scrollThread != null)
87                 clearInterval (subm.scrollThread);
88         var box = getMenuScrollBox (menuId, parentId, "b");
89         subm.scrollThread = setInterval ("Menu_ScrollMenu ('" + box.id + "','" + updown + "')", 60);
90 }
91
92 function Menu_OutScrollBtn (menuId, parentId, updown) {
93         var menu = getMenu (menuId);
94         var subm = getSubMenu (menuId, parentId);
95         if (subm.scrollThread != null)
96                 clearInterval (subm.scrollThread);
97         Menu_HideMenu (menu, subm, menu.disappearAfter);
98 }
99
100 function Menu_ScrollMenu (boxId, updown) {
101         var box = document.getElementById (boxId);
102         if (updown == "u") box.scrollTop -= 5;
103         else box.scrollTop += 5;
104 }
105
106
107 function Menu_SetActive (menu, subm) {
108         if (menu.active != null && subm != menu.active)
109                 Menu_HideMenu (menu, menu.active, 0);
110         menu.active = subm;
111 }
112
113 function Menu_HideMenu (menu, subm, time)
114 {
115         if (subm.timer != null) clearTimeout (subm.timer);
116         if (time > 0) subm.timer = setTimeout ("Menu_HideMenuCallback ('" + subm.id + "')", time);
117         else Menu_HideMenuCallback (subm.id);
118         
119         if (subm.parentMenu != null)
120                 Menu_HideMenu (menu, subm.parentMenu, time);
121 }
122
123 function Menu_HideMenuCallback (spanId)
124 {
125         var subm = document.getElementById (spanId);
126         subm.style.visibility = "hidden";
127 }
128
129 function Menu_ShowMenu (subm)
130 {
131         if (subm.timer != null)
132                 clearTimeout (subm.timer);
133                 
134         subm.style.visibility = "visible";
135
136         if (subm.parentMenu != null)
137                 Menu_ShowMenu (subm.parentMenu);
138 }
139
140 function Menu_Reposition (it, elem, offx, offy)
141 {
142         var le = 0;
143         var to = 0;
144         while (it != null && it.style.position != "absolute") {
145                 le += it.offsetLeft;
146                 to += it.offsetTop;
147                 it = it.offsetParent;
148         }
149         elem.style.left = (le + offx) + "px";
150         elem.style.top = (to + offy) + "px";
151 }
152
153 function Menu_Resize (subm, menuId, itemId)
154 {
155         subm.style.top = subm.initialTop;
156         var parent = subm.offsetParent;
157         var box = getMenuScrollBox (menuId, itemId, "b");
158         box.scrollTop = 0;
159         var bottom = subm.offsetTop + subm.initialOffsetHeight - parent.scrollTop;
160         var displayScroll;
161         
162         if (bottom > parent.clientHeight /* && parent.scrollHeight > parent.clientHeight*/) {
163                 var overflow = bottom - parent.clientHeight;
164                 var freeTop = subm.offsetTop - parent.scrollTop;
165                 if (overflow <= freeTop) {
166                         subm.style.top = (subm.offsetTop - overflow) + "px";
167                         displayScroll = "none";
168                         box.style.height = subm.initialContentHeight + "px";
169                 } else {
170                         subm.style.top = (subm.offsetTop - freeTop) + "px";
171                         var bh = (parent.clientHeight - subm.offsetTop + parent.scrollTop) - subm.scrollButtonsHeight;
172                         box.style.overflow = "hidden";
173                         box.style.height = bh + "px";
174                         displayScroll = "block";
175                 }
176         } else {
177                 displayScroll = "none";
178                 box.style.height = subm.initialContentHeight + "px";
179         }
180         var btn = getMenuScrollBox (menuId, itemId, "u");
181         btn.style.display = displayScroll;
182         btn = getMenuScrollBox (menuId, itemId, "d");
183         btn.style.display = displayScroll;
184 }
185
186 function getMenu (menuId) { return eval (menuId + "_data"); }
187 function getSubMenu (menuId, itemId) { return document.getElementById (menuId + "_" + itemId + "s"); }
188 function getMenuItem (menuId, itemId) { return document.getElementById (menuId + "_" + itemId + "i"); }
189 function getMenuScrollBox (menuId, itemId, btn) { return document.getElementById (menuId + "_" + itemId + "c" + btn); }
190