Code

710d741d5cdcca5f1af62b7427c0f32de471a5c4
[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");
18 function toggle_all_(regex,state_object)
19 {
20     state = document.getElementById(state_object).checked;
21     chk_set_all(regex, state);
22 }
25 /* Toggle checkbox that matches regex */
26 function chk_set_all(regex,value)
27 {
28                                 for (var i = 0; i < document.mainform.elements.length; i++) {
29                                                                 var _id=document.mainform.elements[i].id;
30                                                                 if(_id.match(regex)) {
31                                                                                                 document.getElementById(_id).checked= value;
32                                                                 }
33                                 }
34 }
37 function scrollDown() {
38         document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
39         timeout= setTimeout("scrollDown()", 500);
40 }
42 /* Scroll down the body frame */
43 function scrollDown2() 
44 {
45                 document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
46 }
49 function keyPress(DnEvents) {
50   // determines whether Netscape or Internet Explorer
51   k = (netscape) ? DnEvents.keyCode : window.event.keyCode;
52   if (k == 13) { // enter key pressed
53                 if(typeof(nextfield)!='undefined') {
54                         if(nextfield == 'login') {
55           return true; // submit, we finished all fields
56         } else { // we are not done yet, send focus to next box
57         eval('document.mainform.' + nextfield + '.focus()');
58         return false;
59         }
60         } else {
61                         if(netscape) {
62                                 if(DnEvents.target.type == 'textarea') {
63                                         return true;
64                                 } else if (DnEvents.target.type != 'submit') {
65                                         // TAB
66                                         var thisfield = document.getElementById(DnEvents.target.id);
67                                         for (i = 0; i < document.forms[0].elements.length; i++) {
68                                                 if(document.forms[0].elements[i].id==thisfield.id) {
69                                                         // Last form element on page?
70                                                         if(i!=document.forms[0].elements.length-1) {
71                                                                 document.forms[0].elements[i+1].focus();
72                                                         }
73                                                 }
74                                         }
75                                         return false;
76                                 } else {
77                                         return true;
78                                 }
79                         // Check for konqueror
80                         } else if(document.clientWidth) {
81                                 // do nothing ATM
82                         } else {
83                                 if(window.event.srcElement.type == 'textarea') {
84                                         return true;
85                                 } else if (window.event.srcElement.type != 'submit') {
86                                         // TAB
87                                         var thisfield = document.getElementById(window.event.srcElement.id);
88                                         for (i = 0; i < document.forms[0].elements.length; i++) {
89                                                 if(document.forms[0].elements[i].id==thisfield.id) {
90                                                         // Last form element on page?
91                                                         if(i!=document.forms[0].elements.length-1) {
92                                                                 document.forms[0].elements[i+1].focus();
93                                                         }
94                                                 }
95                                         }
96                                         return false;
97                                 } else {
98                                         return true;
99                                 }
100                         }
101                 }
102         } else if (k==9) {
103                 // Tab key pressed
104                 if(netscape) {
105                         if(DnEvents.target.type == 'textarea') {
106                                 document.getElementById(DnEvents.target.id).value+="\t";
107                                 return false;
108                         }
109                 // Check for konqueror
110                 } else if(document.clientWidth) {
111                         // do nothing ATM
112                 } else {
113                         if(window.event.srcElement.type == 'textarea') {
114                                 document.getElementById(window.event.srcElement.id).value+="\t";
115                                 return false;
116                         }
117                 }
118         }
121 function changeState(myField) {
122         if(document.getElementById(myField) != null){
123           document.getElementById(myField).disabled=(document.getElementById(myField).disabled)?false:true;
124         }
127 function setHidden(str) {
128         type = document.getElementById(str).style.display;
129         if((type=='')||(type=='block')) {
130                 document.getElementById(str).style.display='none';
131         }else{
132                 document.getElementById(str).style.display='block';
133         }
135 function changeSelectState(triggerField, myField) {
136   if (document.getElementById(triggerField).value != 2){
137           document.getElementById(myField).disabled= true;
138   } else {
139           document.getElementById(myField).disabled= false;
140   }
143 function changeSubselectState(triggerField, myField) {
144   if (document.getElementById(triggerField).checked == true){
145           document.getElementById(myField).disabled= false;
146   } else {
147           document.getElementById(myField).disabled= true;
148   }
151 function changeTripleSelectState(firstTriggerField, secondTriggerField, myField) {
152   if (
153         document.getElementById(firstTriggerField).checked == true &&
154         document.getElementById(secondTriggerField).checked == true){
155           document.getElementById(myField).disabled= false;
156   } else {
157           document.getElementById(myField).disabled= true;
158   }
161 <!-- Second field must be non-checked -->
162 function changeTripleSelectState_2nd_neg(firstTriggerField, secondTriggerField, myField) {
163   if (
164         document.getElementById(firstTriggerField).checked == true &&
165         document.getElementById(secondTriggerField).checked == false){
166           document.getElementById(myField).disabled= false;
167   } else {
168           document.getElementById(myField).disabled= true;
169   }
171 // work together to analyze keystrokes
172 if (netscape){
173   document.captureEvents(Event.KEYPRESS);
174         document.onkeypress= keyPress;
175 } else {
176         document.onkeydown= keyPress;
179 function hide(element) {
180   if (browserType == "gecko" )
181      document.poppedLayer = document.getElementById(element);
182   else if (browserType == "ie")
183      document.poppedLayer = document.all[element];
184   else
185      document.poppedLayer = document.layers[element];
186         document.poppedLayer.style.visibility = "hidden";
189 function show(element) {
190   if (browserType == "gecko" )
191      document.poppedLayer = document.getElementById(element);
192   else if (browserType == "ie")
193      document.poppedLayer = document.all[element];
194   else
195      document.poppedLayer = document.layers[element];
196   document.poppedLayer.style.visibility = "visible";
199 function toggle(element) {
200   if (browserType == "gecko" )
201      document.poppedLayer = document.getElementById(element);
202   else if (browserType == "ie")
203      document.poppedLayer = document.all[element];
204   else
205      document.poppedLayer = document.layers[element];
207   if (document.poppedLayer.style.visibility == "visible") {
208           hide (element);
209         } else {
210           show (element);
211         }
214 function popup(target, name) {
215         var mypopup= 
216                 window.open(
217                         target,
218                         name,
219                         "width=600,height=700,location=no,toolbar=no,directories=no,menubar=no,status=no,scrollbars=yes"
220                 );
221         mypopup.focus();
222         return false;
225 function js_check(form) {
226         form.javascript.value = 'true';
229 window.onload = adjust;
230 window.onresize = adjust;
232 function adjust (e) {
233         adjust_height(e);
234         adjust_width(e);
237 // Automatic resize (height) of divlists
238 function adjust_height(e) {
239         if (!e) e=window.event;
240         if (document.getElementById("menucell") && document.getElementById("d_scrollbody")) {
241                 var inner_height= window.innerHeight;
242                 var min_height= 450;
243                 var px_height= min_height;
244                 var suggested= px_height;
245         
246                 // document.defaultView allows access to the rendered size of elements and should be supported by modern browsers
247                 if(document.defaultView) {
248                         var menu_height=parseInt(document.defaultView.getComputedStyle(document.getElementById("menucell"),"").getPropertyValue('height'));
249         
250                         // Minimum height for divlist should be the bottom edge of the menu
251                         min_height= menu_height-197;
252                         suggested= min_height;
253                         if((inner_height-230)-suggested>0) {
254                                 suggested= inner_height-230;
255                         }
256         
257                 // IE uses other height specifications
258                 } else if (browserType == "ie") {
259                         suggested= document.all.menucell.offsetHeight;
260                         offset= absTop(d_scrollbody);
261                         suggested-= offset;
262                         if((inner_height-230)-suggested>0) {
263                                 suggested= inner_height-230;
264                         }
265                 }
266                 document.getElementById("d_scrollbody").style.height=suggested+"px";
267         }
268         return true;
271 function absTop(e) {
272         return (e.offsetParent)?e.offsetTop+absTop(e.offsetParent) : e.offsetTop;
275 // Automatic resize (width) of divlists
276 function adjust_width(e) {
277         if (!e) e=window.event;
279         // Known to not work with IE
280         if(document.defaultView && document.getElementById("t_scrolltable")) {
281                 // Resize the div
282                 var div_width=parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable"),"").getPropertyValue('width'));
283                 var width= parseInt(window.innerWidth);
285                 // Resize the body cells
286                 var diff= width-div_width-470;
287                 
288                 // window has been upscaled
289                 if(div_width+diff>=600) {
290                         document.getElementById('d_scrollbody').style.width=div_width+diff+"px";
291                         document.getElementById('t_scrollbody').style.width=(div_width-19)+diff+"px";
292         
293                         // Resize the Header cells (only the relative-width ones)
294                         document.getElementById('t_scrollhead').style.width=div_width+diff+"px";
296                 // window has been downscaled, we must reset the div to 600px
297                 } else if (width < 930) {
298                         // Reset layout (set width to 600px)
299                         div_width=600;
300                         document.getElementById('d_scrollbody').style.width=div_width+"px";
301                         document.getElementById('t_scrollbody').style.width=(div_width-19)+"px";
302         
303                         // Resize the Header cells (only the relative-width ones)
304                         document.getElementById('t_scrollhead').style.width=div_width+"px";
305                 }
306         } else if(document.defaultView && document.getElementById("t_scrolltable_onlywidth")) {
307                 // Resize the div
308                 var div_width=parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable_onlywidth"),"").getPropertyValue('width'));
309                 var width= parseInt(window.innerWidth);
311                 // Resize the body cells
312                 var diff= width-div_width-470;
313                 
314                 // window has been upscaled
315                 if(div_width+diff>=600) {
316                         document.getElementById('d_scrollbody_onlywidth').style.width=div_width+diff+"px";
317                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+diff+"px";
318         
319                         // Resize the Header cells (only the relative-width ones)
320                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+diff+"px";
322                 // window has been downscaled, we must reset the div to 600px
323                 } else if (width < 930) {
324                         // Reset layout (set width to 600px)
325                         div_width=600;
326                         document.getElementById('d_scrollbody_onlywidth').style.width=div_width+"px";
327                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+"px";
328         
329                         // Resize the Header cells (only the relative-width ones)
330                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+"px";
331                 }
332         } else {
333                 // IE
335         }
340 /* Set focus to first valid input field 
341                 avoid IExplorer warning about hidding or disabled fields 
342 */
343 function focus_field()
344 {       
345                 var i           = 0;
346                 var e           = 0;
347                 var found = false; 
348                 var element_name = "";
349                 var element =null;
351                 while(focus_field.arguments[i] && !found){
353                                 var tmp = document.getElementsByName(focus_field.arguments[i]); 
354                                 for(e = 0 ; e < tmp.length ; e ++ ){
356                                                 if(tmp[e].disabled != true &&  tmp[e].type != "none" && tmp[e].type != "hidden" ){
357                                                                 found = true;
358                                                                 element = tmp[e];
359                                                 }
360                                 }
361                                 i++;
362                 }
364                 if(element && found){
365                                 element.blur();         
366                                 element.focus();                
367                 }
370 // vim:ts=2:syntax