Code

Updated focus.js
[gosa.git] / gosa-core / html / include / focus.js
1 var browserType;
2 var firefoxType;
4 if (document.layers) {browserType = "nn4"}
5 if (document.all) {browserType = "ie"}
6 if (window.navigator.userAgent.toLowerCase().match("gecko")) {browserType= "gecko"}
7 if (browserType=="gecko" && window.navigator.userAgent.toLowerCase().match("firefox\/2")) {firefoxType= "firefox2"}
8 else {firefoxType= "firefox"};
10 netscape = "";
11 ver= navigator.appVersion; len = ver.length;
13 for (iln = 0; iln < len; iln++){
14   if (ver.charAt(iln) == "("){
15     break;
16   }
17 }
18 netscape= (ver.charAt(iln+1).toUpperCase() != "C");
21 /* Toggle checkbox that matches regex */
22 function chk_set_all(regex,value)
23 {
24         for (var i = 0; i < document.mainform.elements.length; i++) {
25                 var _id=document.mainform.elements[i].id;
26                 if(_id.match(regex)) {
27                         document.getElementById(_id).checked= value;
28                 }
29         }
30 }
33 function toggle_all_(regex,state_object)
34 {
35                 state = document.getElementById(state_object).checked;
36                 chk_set_all(regex, state);
37 }
40 function scrollDown() {
41   document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
42   timeout= setTimeout("scrollDown()", 500);
43 }
45 /* Scroll down the body frame */
46 function scrollDown2()
47 {
48     document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
49 }
52 /* Toggle checkbox that matches regex */
53 function acl_set_all(regex,value)
54 {
55                                 for (var i = 0; i < document.mainform.elements.length; i++) {
56                                                                 var _id=document.mainform.elements[i].id;
57                                                                 if(_id.match(regex)) {
58                                                                                                 document.getElementById(_id).checked= value;
59                                                                 }
60                                 }
61 }
63 /* Toggle checkbox that matches regex */
64 function acl_toggle_all(regex)
65 {
66                                 for (var i = 0; i < document.mainform.elements.length; i++) {
67                                                                 var _id=document.mainform.elements[i].id;
68                                                                 if(_id.match(regex)) {
69                                                                                                 if (document.getElementById(_id).checked == true){
70                                                                                                                                 document.getElementById(_id).checked= false;
71                                                                                                 } else {
72                                                                                                                                 document.getElementById(_id).checked= true;
73                                                                                                 }
74                                                                 }
75                                 }
76 }
79 var enable_keyPress = true;
80 function keyPress(DnEvents) {
82         /* We are forced to skip this Keyboard input filtering 
83    *  (enable_keyPress was set to false in the HTML content)
84    */
85         if(!enable_keyPress) return;
87   // determines whether Netscape or Internet Explorer
88   k = (netscape) ? DnEvents.keyCode : window.event.keyCode;
89   if (k == 13) { // enter key pressed
90                 if(typeof(nextfield)!='undefined') {
91                         if(nextfield == 'login') {
92           return true; // submit, we finished all fields
93         } else { // we are not done yet, send focus to next box
94         eval('document.mainform.' + nextfield + '.focus()');
95         return false;
96         }
97         } else {
98                         if(netscape) {
99                                 if(DnEvents.target.type == 'textarea') {
100                                         return true;
101                                 } else if (DnEvents.target.type != 'submit') {
102                                         // TAB
103                                         var thisfield = document.getElementById(DnEvents.target.id);
104                                         for (i = 0; i < document.forms[0].elements.length; i++) {
105                                                 if(document.forms[0].elements[i].id==thisfield.id) {
106                                                         // Last form element on page?
107                                                         if(i!=document.forms[0].elements.length-1) {
108                                                                 document.forms[0].elements[i+1].focus();
109                                                         }
110                                                 }
111                                         }
112                                         return false;
113                                 } else {
114                                         return true;
115                                 }
116                         // Check for konqueror
117                         } else if(document.clientWidth) {
118                                 // do nothing ATM
119                         } else {
120                                 if(window.event.srcElement.type == 'textarea') {
121                                         return true;
122                                 } else if (window.event.srcElement.type != 'submit') {
123                                         // TAB
124                                         var thisfield = document.getElementById(window.event.srcElement.id);
125                                         for (i = 0; i < document.forms[0].elements.length; i++) {
126                                                 if(document.forms[0].elements[i].id==thisfield.id) {
127                                                         // Last form element on page?
128                                                         if(i!=document.forms[0].elements.length-1) {
129                                                                 document.forms[0].elements[i+1].focus();
130                                                         }
131                                                 }
132                                         }
133                                         return false;
134                                 } else {
135                                         return true;
136                                 }
137                         }
138                 }
139         } else if (k==9) {
140                 // Tab key pressed
141                 if(netscape) {
142                         if(DnEvents.target.type == 'textarea') {
143                                 document.getElementById(DnEvents.target.id).value+="\t";
144                                 return false;
145                         }
146                 // Check for konqueror
147                 } else if(document.clientWidth) {
148                         // do nothing ATM
149                 } else {
150                         if(window.event.srcElement.type == 'textarea') {
151                                 document.getElementById(window.event.srcElement.id).value+="\t";
152                                 return false;
153                         }
154                 }
155         }
158 function changeState(myField) {
159         if(document.getElementById(myField) != null){
160           document.getElementById(myField).disabled=(document.getElementById(myField).disabled)?false:true;
161         }
164 function setHidden(str) {
165         type = document.getElementById(str).style.display;
166         if((type=='')||(type=='block')) {
167                 document.getElementById(str).style.display='none';
168         }else{
169                 document.getElementById(str).style.display='block';
170         }
172 function changeSelectState(triggerField, myField) {
173   if (document.getElementById(triggerField).value != 2){
174           document.getElementById(myField).disabled= true;
175   } else {
176           document.getElementById(myField).disabled= false;
177   }
180 function changeSubselectState(triggerField, myField) {
181   if (document.getElementById(triggerField).checked == true){
182           document.getElementById(myField).disabled= false;
183   } else {
184           document.getElementById(myField).disabled= true;
185   }
188 function changeTripleSelectState(firstTriggerField, secondTriggerField, myField) {
189   if (
190         document.getElementById(firstTriggerField).checked == true &&
191         document.getElementById(secondTriggerField).checked == true){
192           document.getElementById(myField).disabled= false;
193   } else {
194           document.getElementById(myField).disabled= true;
195   }
198 <!-- Second field must be non-checked -->
199 function changeTripleSelectState_2nd_neg(firstTriggerField, secondTriggerField, myField) {
200   if (
201         document.getElementById(firstTriggerField).checked == true &&
202         document.getElementById(secondTriggerField).checked == false){
203           document.getElementById(myField).disabled= false;
204   } else {
205           document.getElementById(myField).disabled= true;
206   }
208 // work together to analyze keystrokes
209 if (netscape){
210   if(firefoxType== "firefox") {
211                 window.captureEvents(Event.KEYPRESS);
212         }
213         window.onkeypress= keyPress;
214 } else {
215         document.onkeydown= keyPress;
218 function hide(element) {
219   if (browserType == "gecko" )
220      document.poppedLayer = document.getElementById(element);
221   else if (browserType == "ie")
222      document.poppedLayer = document.all[element];
223   else
224      document.poppedLayer = document.layers[element];
225         document.poppedLayer.style.visibility = "hidden";
228 function show(element) {
229   if (browserType == "gecko" )
230      document.poppedLayer = document.getElementById(element);
231   else if (browserType == "ie")
232      document.poppedLayer = document.all[element];
233   else
234      document.poppedLayer = document.layers[element];
235   document.poppedLayer.style.visibility = "visible";
238 function toggle(element) {
239   if (browserType == "gecko" )
240      document.poppedLayer = document.getElementById(element);
241   else if (browserType == "ie")
242      document.poppedLayer = document.all[element];
243   else
244      document.poppedLayer = document.layers[element];
246   if (document.poppedLayer.style.visibility == "visible") {
247           hide (element);
248         } else {
249           show (element);
250         }
253 function popup(target, name) {
254         var mypopup= 
255                 window.open(
256                         target,
257                         name,
258                         "width=600,height=700,location=no,toolbar=no,directories=no,menubar=no,status=no,scrollbars=yes"
259                 );
260         mypopup.focus();
261         return false;
264 function js_check(form) {
265         form.javascript.value = 'true';
268 function divtoggle(element) {
269         var cell;
270         var cellname="tr_"+(element);
272         if (browserType == "gecko" ) {
273     document.poppedLayer = document.getElementById(element);
274                 cell= document.getElementById(cellname);
276           if (document.poppedLayer.style.visibility == "visible") {
277                   hide (element);
278                         cell.style.height="0px";
279                         document.poppedLayer.style.height="0px";
280                 } else {
281                   show (element);
282                         document.poppedLayer.style.height="";
283                         if(document.defaultView) {
284                                 cell.style.height=document.defaultView.getComputedStyle(document.poppedLayer,"").getPropertyValue('height');
285                         }
286                 }
287         } else if (browserType == "ie") {
288     document.poppedLayer = document.getElementById(element);
289                 cell= document.getElementById(cellname);
290           if (document.poppedLayer.style.visibility == "visible") {
291                   hide (element);
292                         cell.style.height="0px";
293                         document.poppedLayer.style.height="0px";
294                         document.poppedLayer.style.position="absolute";
295                 } else {
296                   show (element);
297                         cell.style.height="";
298                         document.poppedLayer.style.height="";
299                         document.poppedLayer.style.position="relative";
300                 }
301         }
304 function adjust (e) {
305         adjust_height(e);
306         adjust_width(e);
309 // Automatic resize (height) of divlists
310 function adjust_height(e) {
311         if (!e) e=window.event;
312         if (document.getElementById("menucell") && document.getElementById("d_scrollbody")) {
313                 var inner_height= window.innerHeight;
314                 var min_height= 450;
315                 var px_height= min_height;
316                 var suggested= px_height;
317         
318                 // document.defaultView allows access to the rendered size of elements and should be supported by modern browsers
319                 if(document.defaultView) {
320                         var menu_height=parseInt(document.defaultView.getComputedStyle(document.getElementById("menucell"),"").getPropertyValue('height'));
321         
322                         // Minimum height for divlist should be the bottom edge of the menu
323                         min_height= menu_height-197;
324                         suggested= min_height;
325                         if((inner_height-230)-suggested>0) {
326                                 suggested= inner_height-230;
327                         }
328                 
329                 // IE uses other height specifications
330                 } else if (browserType == "ie") {
331                         suggested= document.all.menucell.offsetHeight;
332                         offset= absTop(d_scrollbody);
333                         suggested-= offset;
334                         if((inner_height-230)-suggested>0) {
335                                 suggested= inner_height-230;
336                         }
337                 }
339                 /* Reduce height if a list footer is set */
340                 if(document.getElementById("t_scrollfoot")){
341                         suggested = suggested -20;
342                 }
344                 document.getElementById("d_scrollbody").style.height=suggested+"px";
345         }
346         return true;
349 function absTop(e) {
350         return (e.offsetParent)?e.offsetTop+absTop(e.offsetParent) : e.offsetTop;
353 // Automatic resize (width) of divlists
354 function adjust_width(e) 
356         
357         /* Get event ... it seems to be unused here ...*/
358         if (!e) {
359                 e=window.event;
360         }
362         // Known to not work with IE
363         if(document.defaultView && document.getElementById("t_scrolltable")) {
365                 // Get current width of divlist 
366                 var div_width   =       parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable"),"").getPropertyValue('width'));
367         
368                 // Get window width
369                 var width= parseInt(window.innerWidth);
371                 // Resize the body cells, 470 represents the info box and the navigation part 
372                 var diff= width -       div_width       -       470;
373                 
374                 // window has been upscaled
375                 if(div_width+diff>=600) {
376                         document.getElementById('d_scrollbody').style.width=div_width+diff+"px";
377                         document.getElementById('t_scrollbody').style.width=(div_width-19)+diff+"px";
378         
379                         // Resize the Header cells (only the relative-width ones)
380                         document.getElementById('t_scrollhead').style.width=div_width+diff+"px";
382                 // window has been downscaled, we must reset the div to 600px
383                 } else if (width < 930) {
384                         // Reset layout (set width to 600px)
385                         div_width=600;
386                         document.getElementById('d_scrollbody').style.width=div_width+"px";
387                         document.getElementById('t_scrollbody').style.width=(div_width-19)+"px";
388         
389                         // Resize the Header cells (only the relative-width ones)
390                         document.getElementById('t_scrollhead').style.width=div_width+"px";
391                 }
392         } else if(document.defaultView && document.getElementById("t_scrolltable_onlywidth")){
393                 // Resize the div
394                 var div_width=parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable_onlywidth"),"").getPropertyValue('width'));
395                 var width= parseInt(window.innerWidth);
397                 // Resize the body cells
398                 var diff= width-div_width-200;
399                 
400                 // window has been upscaled
401                 if(div_width+diff>=600) {
402                         if(document.getElementById('d_scrollbody_onlywidth')){
403                                 document.getElementById('d_scrollbody_onlywidth').style.width=div_width+diff+"px";
404                         }
405                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+diff+"px";
406         
407                         // Resize the Header cells (only the relative-width ones)
408                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+diff+"px";
410                 // window has been downscaled, we must reset the div to 600px
411                 } else if (width < 930) {
412                         // Reset layout (set width to 600px)
413                         div_width=600;
414                         if(document.getElementById('d_scrollbody_onlywidth')){
415                                 document.getElementById('d_scrollbody_onlywidth').style.width=div_width+"px";
416                         }
417                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+"px";
418         
419                         // Resize the Header cells (only the relative-width ones)
420                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+"px";
421                 }
422         } else {
423                 // IE
425         }
429 /* Set focus to first valid input field
430     avoid IExplorer warning about hidding or disabled fields
431 */
432 function focus_field()
434     var i     = 0;
435     var e     = 0;
436     var found = false;
437     var element_name = "";
438     var element =null;
440     while(focus_field.arguments[i] && !found){
442         var tmp = document.getElementsByName(focus_field.arguments[i]);
443         for(e = 0 ; e < tmp.length ; e ++ ){
445             if(tmp[e].disabled != true &&  tmp[e].type != "none" && tmp[e].type != "hidden" ){
446                 found = true;
447                 element = tmp[e];
448             }
449         }
450         i++;
451     }
453     if(element && found){
454         element.blur();
455         element.focus();
456     }
460 /*  This function pops up messages from message queue 
461                 All messages are hidden in html output (style='display:none;').
462                 This function makes single messages visible till there are no more dialogs queued.
464                 hidden inputs: 
465                         current_msg_dialogs             - Currently visible dialog
466                         closed_msg_dialogs              - IDs of already closed dialogs 
467                         pending_msg_dialogs             - Queued dialog IDs. 
468 */
469 function next_msg_dialog()
471                 var s_pending = "";
472                 var a_pending = new Array();
473                 var i_id                        = 0;
474                 var i                                   = 0;
475                 var tmp                         = "";
476                 var ele                         = null;
477                 var ele2                        = null;
478                 var cur_id              = "";
480                 if(document.getElementById('current_msg_dialogs')){
481                                 cur_id = document.getElementById('current_msg_dialogs').value;
482                                 if(cur_id != ""){
483                                                 ele = document.getElementById('e_layer' + cur_id);
484                                                 ele.onmousemove = "";
485                                                 hide('e_layer' + cur_id);       
486                                                 document.getElementById('closed_msg_dialogs').value += "," + cur_id;
487                                                 document.getElementById('current_msg_dialogs').value= ""; 
488                                 }
489                 }
491                 if(document.getElementById('pending_msg_dialogs')){
492                                 s_pending = document.getElementById('pending_msg_dialogs').value;
493                                 a_pending = s_pending.split(",");
494                                 if(a_pending.length){
495                                                 i_id = a_pending.pop();
496                                                 for (i = 0 ; i < a_pending.length; ++i){
497                                                                 tmp = tmp + a_pending[i] + ',';
498                                                 }
499                                                 tmp = tmp.replace(/,$/g,"");
500                                                 if(i_id != ""){
501                                                                 ele = document.getElementById('e_layer' + i_id);
502                                                                 ele3 = document.getElementById('e_layerTitle' + i_id);
503                                                                 ele.style.display= 'block'      ;
504                                                                 document.getElementById('pending_msg_dialogs').value= tmp;
505                                                                 document.getElementById('current_msg_dialogs').value= i_id;
506                                                                 ele2 = document.getElementById('e_layer2') ;
507                                                                 ele3.onmousedown = start_move_div_by_cursor;
508                                                                 ele2.onmouseup  = stop_move_div_by_cursor;
509                                                                 ele2.onmousemove = move_div_by_cursor;
510                                                 }else{
511                                                                 ele2 = document.getElementById('e_layer2') ;
512                                                                 ele2.style.display ="none";
513                                                 }
514                                 }
515                 }
519 /* Drag & drop for message dialogs */
520 var enable_move_div_by_cursor = false;          // Indicates wheter the div movement is enabled or not 
521 var mouse_x_on_div      = 0;                                                                    // 
522 var mouse_y_on_div      = 0;
523 var div_offset_x        = 0;
524 var div_offset_y        = 0;
526 /* Activates msg_dialog drag & drop
527  * This function is called when clicking on a displayed msg_dialog 
528  */
529 function start_move_div_by_cursor(e)
531                 var x = 0; 
532                 var y = 0;      
533                 var cur_id = 0;
534                 var dialog = null;
535                 var event = null;
537                 /* Get current msg_dialog position
538      */
539                 cur_id = document.getElementById('current_msg_dialogs').value;
540                 if(cur_id != ""){
541                                 dialog = document.getElementById('e_layer' + cur_id);
542                                 x = dialog.style.left;
543                                 y = dialog.style.top;
544                                 x = x.replace(/[^0-9]/g,"");
545                                 y = y.replace(/[^0-9]/g,"");
546                                 if(!y) y = 1;
547                                 if(!x) x = 1;
548                 }
550                 /* Get mouse position within msg_dialog 
551      */
552                 if(window.event){
553                                 event = window.event;
554                                 if(event.offsetX){
555                                                 div_offset_x   = event.clientX -x;
556                                                 div_offset_y   = event.clientY -y;
557                                                 enable_move_div_by_cursor = true;
558                                 }
559                 }else if(e){
560                                 event = e;
561                                 if(event.layerX){
562                                                 div_offset_x    = event.screenX -x;
563                                                 div_offset_y    = event.screenY -y;
564                                                 enable_move_div_by_cursor = true;
565                                 }
566                 }
570 /* Deactivate msg_dialog movement 
571 */
572 function stop_move_div_by_cursor()
574                 mouse_x_on_div = 0;
575                 mouse_y_on_div = 0;
576                 div_offset_x = 0;
577                 div_offset_y = 0;
578                 enable_move_div_by_cursor = false;
582 /* Move msg_dialog with cursor */
583 function move_div_by_cursor(e)
585                 var event                               = false;
586                 var mouse_pos_x         = 0;
587                 var mouse_pos_y         = 0;
588                 var     cur_div_x = 0;
589                 var cur_div_y = 0;
590                 var cur_id      = 0;
591                 var dialog = null;
594                 if(undefined !== enable_move_div_by_cursor && enable_move_div_by_cursor == true){
596                                 if(document.getElementById('current_msg_dialogs')){
598                                                 /* Get mouse position on screen 
599              */
600                                                 if(window.event){
601                                                                 event = window.event;
602                                                                 mouse_pos_x  =event.clientX;
603                                                                 mouse_pos_y  =event.clientY;
604                                                 }else if (e){
605                                                                 event = e;
606                                                                 mouse_pos_x  =event.screenX;
607                                                                 mouse_pos_y  =event.screenY;
608                                                 }else{
609                                                         return;
610                                                 }
612                                                 /* Get id of current msg_dialog */
613                                                 cur_id = document.getElementById('current_msg_dialogs').value;
614                                                 if(cur_id != ""){
615                                                                 dialog = document.getElementById('e_layer' + cur_id);
616         
617                                                                 /* Calculate new position */
618                                                                 cur_div_x = mouse_pos_x - div_offset_x;
619                                                                 cur_div_y = mouse_pos_y - div_offset_y;
621                                                                 /* Ensure that dialog can't be moved out of screen */
622                                                                 if(cur_div_x < 0 ) cur_div_x = 0
623                                                                 if(cur_div_y < 0 ) cur_div_y = 0
624                                                         
625                                                                 /* Assign new values */
626                                                                 dialog.style.left = (cur_div_x ) + "px";
627                                                                 dialog.style.top  = (cur_div_y ) + "px";
628                                                 }
629                                 }
630                 }
633 function send_menu_action(str)
635                 if(str != "" && str != "#"){
636                                 if(document.getElementById('menu_action')){
637                                                 document.getElementById('menu_action').value=str;
638                                                 document.mainform.submit();
639                                 }
640         }
643 // vim:ts=2:syntax