Code

Fixed automatic height adjusting for the IE(6). IE7 needs to be tested.
[gosa.git] / html / include / focus.js
1 var browserType;
2 var timeout;
4 if (document.layers) {browserType = "nn4"}
5 if (document.all) {browserType = "ie"}
6 if (window.navigator.userAgent.toLowerCase().match("gecko")) {browserType= "gecko"}
8 netscape = "";
9 ver= navigator.appVersion; len = ver.length;
11 for (iln = 0; iln < len; iln++){
12   if (ver.charAt(iln) == "("){
13     break;
14   }
15 }
16 netscape= (ver.charAt(iln+1).toUpperCase() != "C");
19 /* Toggle checkbox that matches regex */
20 function chk_set_all(regex,value)
21 {
22                                 for (var i = 0; i < document.mainform.elements.length; i++) {
23                                                                 var _id=document.mainform.elements[i].id;
24                                                                 if(_id.match(regex)) {
25                                                                                                 document.getElementById(_id).checked= value;
26                                                                 }
27                                 }
28 }
31 function scrollDown() {
32         document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
33         timeout= setTimeout("scrollDown()", 500);
34 }
36 /* Scroll down the body frame */
37 function scrollDown2() 
38 {
39                 document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
40 }
43 function keyPress(DnEvents) {
44   // determines whether Netscape or Internet Explorer
45   k = (netscape) ? DnEvents.keyCode : window.event.keyCode;
46   if (k == 13) { // enter key pressed
47                 if(typeof(nextfield)!='undefined') {
48                         if(nextfield == 'login') {
49           return true; // submit, we finished all fields
50         } else { // we are not done yet, send focus to next box
51         eval('document.mainform.' + nextfield + '.focus()');
52         return false;
53         }
54         } else {
55                         if(netscape) {
56                                 if(DnEvents.target.type == 'textarea') {
57                                         return true;
58                                 } else if (DnEvents.target.type != 'submit') {
59                                         // TAB
60                                         var thisfield = document.getElementById(DnEvents.target.id);
61                                         for (i = 0; i < document.forms[0].elements.length; i++) {
62                                                 if(document.forms[0].elements[i].id==thisfield.id) {
63                                                         // Last form element on page?
64                                                         if(i!=document.forms[0].elements.length-1) {
65                                                                 document.forms[0].elements[i+1].focus();
66                                                         }
67                                                 }
68                                         }
69                                         return false;
70                                 } else {
71                                         return true;
72                                 }
73                         // Check for konqueror
74                         } else if(document.clientWidth) {
75                                 // do nothing ATM
76                         } else {
77                                 if(window.event.srcElement.type == 'textarea') {
78                                         return true;
79                                 } else if (window.event.srcElement.type != 'submit') {
80                                         // TAB
81                                         var thisfield = document.getElementById(window.event.srcElement.id);
82                                         for (i = 0; i < document.forms[0].elements.length; i++) {
83                                                 if(document.forms[0].elements[i].id==thisfield.id) {
84                                                         // Last form element on page?
85                                                         if(i!=document.forms[0].elements.length-1) {
86                                                                 document.forms[0].elements[i+1].focus();
87                                                         }
88                                                 }
89                                         }
90                                         return false;
91                                 } else {
92                                         return true;
93                                 }
94                         }
95                 }
96         } else if (k==9) {
97                 // Tab key pressed
98                 if(netscape) {
99                         if(DnEvents.target.type == 'textarea') {
100                                 document.getElementById(DnEvents.target.id).value+="\t";
101                                 return false;
102                         }
103                 // Check for konqueror
104                 } else if(document.clientWidth) {
105                         // do nothing ATM
106                 } else {
107                         if(window.event.srcElement.type == 'textarea') {
108                                 document.getElementById(window.event.srcElement.id).value+="\t";
109                                 return false;
110                         }
111                 }
112         }
115 function changeState(myField) {
116         if(document.getElementById(myField) != null){
117           document.getElementById(myField).disabled=(document.getElementById(myField).disabled)?false:true;
118         }
121 function setHidden(str) {
122         type = document.getElementById(str).style.display;
123         if((type=='')||(type=='block')) {
124                 document.getElementById(str).style.display='none';
125         }else{
126                 document.getElementById(str).style.display='block';
127         }
129 function changeSelectState(triggerField, myField) {
130   if (document.getElementById(triggerField).value != 2){
131           document.getElementById(myField).disabled= true;
132   } else {
133           document.getElementById(myField).disabled= false;
134   }
137 function changeSubselectState(triggerField, myField) {
138   if (document.getElementById(triggerField).checked == true){
139           document.getElementById(myField).disabled= false;
140   } else {
141           document.getElementById(myField).disabled= true;
142   }
145 function changeTripleSelectState(firstTriggerField, secondTriggerField, myField) {
146   if (
147         document.getElementById(firstTriggerField).checked == true &&
148         document.getElementById(secondTriggerField).checked == true){
149           document.getElementById(myField).disabled= false;
150   } else {
151           document.getElementById(myField).disabled= true;
152   }
155 <!-- Second field must be non-checked -->
156 function changeTripleSelectState_2nd_neg(firstTriggerField, secondTriggerField, myField) {
157   if (
158         document.getElementById(firstTriggerField).checked == true &&
159         document.getElementById(secondTriggerField).checked == false){
160           document.getElementById(myField).disabled= false;
161   } else {
162           document.getElementById(myField).disabled= true;
163   }
165 // work together to analyze keystrokes
166 if (netscape){
167   document.captureEvents(Event.KEYPRESS);
168         document.onkeypress= keyPress;
169 } else {
170         document.onkeydown= keyPress;
173 function hide(element) {
174   if (browserType == "gecko" )
175      document.poppedLayer = document.getElementById(element);
176   else if (browserType == "ie")
177      document.poppedLayer = document.all[element];
178   else
179      document.poppedLayer = document.layers[element];
180         document.poppedLayer.style.visibility = "hidden";
183 function show(element) {
184   if (browserType == "gecko" )
185      document.poppedLayer = document.getElementById(element);
186   else if (browserType == "ie")
187      document.poppedLayer = document.all[element];
188   else
189      document.poppedLayer = document.layers[element];
190   document.poppedLayer.style.visibility = "visible";
193 function toggle(element) {
194   if (browserType == "gecko" )
195      document.poppedLayer = document.getElementById(element);
196   else if (browserType == "ie")
197      document.poppedLayer = document.all[element];
198   else
199      document.poppedLayer = document.layers[element];
201   if (document.poppedLayer.style.visibility == "visible") {
202           hide (element);
203         } else {
204           show (element);
205         }
208 function popup(target, name) {
209         var mypopup= 
210                 window.open(
211                         target,
212                         name,
213                         "width=600,height=700,location=no,toolbar=no,directories=no,menubar=no,status=no,scrollbars=yes"
214                 );
215         mypopup.focus();
216         return false;
219 function js_check(form) {
220         form.javascript.value = 'true';
223 window.onload = adjust;
224 window.onresize = adjust;
226 function adjust (e) {
227         adjust_height(e);
228         adjust_width(e);
231 // Automatic resize (height) of divlists
232 function adjust_height(e) {
233         if (!e) e=window.event;
234         if (document.getElementById("menucell") && document.getElementById("d_scrollbody")) {
235                 var inner_height= window.innerHeight;
236                 var min_height= 450;
237                 var px_height= min_height;
238                 var suggested= px_height;
239         
240                 // document.defaultView allows access to the rendered size of elements and should be supported by modern browsers
241                 if(document.defaultView) {
242                         var menu_height=parseInt(document.defaultView.getComputedStyle(document.getElementById("menucell"),"").getPropertyValue('height'));
243         
244                         // Minimum height for divlist should be the bottom edge of the menu
245                         min_height= menu_height-197;
246                         suggested= min_height;
247                         if((inner_height-230)-suggested>0) {
248                                 suggested= inner_height-230;
249                         }
250         
251                 // IE uses other height specifications
252                 } else if (browserType == "ie") {
253                         suggested= document.all.menucell.offsetHeight;
254                         offset= absTop(d_scrollbody);
255                         suggested-= offset;
256                         if((inner_height-230)-suggested>0) {
257                                 suggested= inner_height-230;
258                         }
259                 }
260                 document.getElementById("d_scrollbody").style.height=suggested+"px";
261         }
262         return true;
265 function absTop(e) {
266         return (e.offsetParent)?e.offsetTop+absTop(e.offsetParent) : e.offsetTop;
269 // Automatic resize (width) of divlists
270 function adjust_width(e) {
271         if (!e) e=window.event;
273         // Known to not work with IE
274         if(document.defaultView && document.getElementById("t_scrolltable")) {
275                 // Resize the div
276                 var div_width=parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable"),"").getPropertyValue('width'));
277                 var width= parseInt(window.innerWidth);
279                 // Resize the body cells
280                 var diff= width-div_width-470;
281                 
282                 // window has been upscaled
283                 if(div_width+diff>=600) {
284                         document.getElementById('d_scrollbody').style.width=div_width+diff+"px";
285                         document.getElementById('t_scrollbody').style.width=(div_width-19)+diff+"px";
286         
287                         // Resize the Header cells (only the relative-width ones)
288                         document.getElementById('t_scrollhead').style.width=div_width+diff+"px";
290                 // window has been downscaled, we must reset the div to 600px
291                 } else if (width < 930) {
292                         // Reset layout (set width to 600px)
293                         div_width=600;
294                         document.getElementById('d_scrollbody').style.width=div_width+"px";
295                         document.getElementById('t_scrollbody').style.width=(div_width-19)+"px";
296         
297                         // Resize the Header cells (only the relative-width ones)
298                         document.getElementById('t_scrollhead').style.width=div_width+"px";
299                 }
300         } else if(document.defaultView && document.getElementById("t_scrolltable_onlywidth")) {
301                 // Resize the div
302                 var div_width=parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable_onlywidth"),"").getPropertyValue('width'));
303                 var width= parseInt(window.innerWidth);
305                 // Resize the body cells
306                 var diff= width-div_width-470;
307                 
308                 // window has been upscaled
309                 if(div_width+diff>=600) {
310                         document.getElementById('d_scrollbody_onlywidth').style.width=div_width+diff+"px";
311                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+diff+"px";
312         
313                         // Resize the Header cells (only the relative-width ones)
314                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+diff+"px";
316                 // window has been downscaled, we must reset the div to 600px
317                 } else if (width < 930) {
318                         // Reset layout (set width to 600px)
319                         div_width=600;
320                         document.getElementById('d_scrollbody_onlywidth').style.width=div_width+"px";
321                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+"px";
322         
323                         // Resize the Header cells (only the relative-width ones)
324                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+"px";
325                 }
326         } else {
327                 // IE
329         }
332 // vim:ts=2:syntax