Code

Added global variable
[gosa.git] / gosa-core / html / include / focus.js
1 var browserType = "Not dectected, adjust focus.js";
2 var firefoxType;
4 if (document.layers) 
5 {
6                 browserType = "nn4";
7 }
9 if (document.all) 
10 {
11                 browserType = "ie";
12 }
14 if (window.navigator.userAgent.toLowerCase().match("gecko")) 
15 {
16                 browserType= "gecko";
17 }
19 if (window.navigator.userAgent.toLowerCase().match(/opera/i)) 
20 {
21                 browserType= "gecko";
22 }
24 if (browserType=="gecko" && window.navigator.userAgent.toLowerCase().match("firefox\/2")) 
25 {
26                 firefoxType= "firefox2";
27 }else{
28                 firefoxType= "firefox";
29 }
31 netscape = "";
32 ver= navigator.appVersion; len = ver.length;
34 for (iln = 0; iln < len; iln++){
35   if (ver.charAt(iln) == "("){
36     break;
37   }
38 }
39 netscape= (ver.charAt(iln+1).toUpperCase() != "C");
42 /* Toggle checkbox that matches regex */
43 function chk_set_all(regex,value)
44 {
45         for (var i = 0; i < document.mainform.elements.length; i++) {
46                 var _id=document.mainform.elements[i].id;
47                 if(_id.match(regex)) {
48                         document.getElementById(_id).checked= value;
49                 }
50         }
51 }
54 function toggle_all_(regex,state_object)
55 {
56                 state = document.getElementById(state_object).checked;
57                 chk_set_all(regex, state);
58 }
61 function scrollDown() {
62   document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
63   timeout= setTimeout("scrollDown()", 500);
64 }
66 /* Scroll down the body frame */
67 function scrollDown2()
68 {
69     document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
70 }
73 /* Toggle checkbox that matches regex */
74 function acl_set_all(regex,value)
75 {
76                                 for (var i = 0; i < document.mainform.elements.length; i++) {
77                                                                 var _id=document.mainform.elements[i].id;
78                                                                 if(_id.match(regex)) {
79                                                                                                 document.getElementById(_id).checked= value;
80                                                                 }
81                                 }
82 }
84 /* Toggle checkbox that matches regex */
85 function acl_toggle_all(regex)
86 {
87                                 for (var i = 0; i < document.mainform.elements.length; i++) {
88                                                                 var _id=document.mainform.elements[i].id;
89                                                                 if(_id.match(regex)) {
90                                                                                                 if (document.getElementById(_id).checked == true){
91                                                                                                                                 document.getElementById(_id).checked= false;
92                                                                                                 } else {
93                                                                                                                                 document.getElementById(_id).checked= true;
94                                                                                                 }
95                                                                 }
96                                 }
97 }
100 var enable_keyPress = true;
101 function keyPress(DnEvents) {
103         /* We are forced to skip this Keyboard input filtering 
104    *  (enable_keyPress was set to false in the HTML content)
105    */
106         if(!enable_keyPress) return;
108   // determines whether Netscape or Internet Explorer
109   k = (netscape) ? DnEvents.keyCode : window.event.keyCode;
110   if (k == 13) { // enter key pressed
111                 if(typeof(nextfield)!='undefined') {
112                         if(nextfield == 'login') {
113           return true; // submit, we finished all fields
114         } else { // we are not done yet, send focus to next box
115         eval('document.mainform.' + nextfield + '.focus()');
116         return false;
117         }
118         } else {
119                         if(netscape) {
120                                 if(DnEvents.target.type == 'textarea') {
121                                         return true;
122                                 } else if (DnEvents.target.type != 'submit') {
123                                         // TAB
124                                         var thisfield = document.getElementById(DnEvents.target.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                         // Check for konqueror
138                         } else if(document.clientWidth) {
139                                 // do nothing ATM
140                         } else {
141                                 if(window.event.srcElement.type == 'textarea') {
142                                         return true;
143                                 } else if (window.event.srcElement.type != 'submit') {
144                                         // TAB
145                                         var thisfield = document.getElementById(window.event.srcElement.id);
146                                         for (i = 0; i < document.forms[0].elements.length; i++) {
147                                                 if(document.forms[0].elements[i].id==thisfield.id) {
148                                                         // Last form element on page?
149                                                         if(i!=document.forms[0].elements.length-1) {
150                                                                 document.forms[0].elements[i+1].focus();
151                                                         }
152                                                 }
153                                         }
154                                         return false;
155                                 } else {
156                                         return true;
157                                 }
158                         }
159                 }
160         } else if (k==9) {
161                 // Tab key pressed
162                 if(netscape) {
163                         if(DnEvents.target.type == 'textarea') {
164                                 document.getElementById(DnEvents.target.id).value+="\t";
165                                 return false;
166                         }
167                 // Check for konqueror
168                 } else if(document.clientWidth) {
169                         // do nothing ATM
170                 } else {
171                         if(window.event.srcElement.type == 'textarea') {
172                                 document.getElementById(window.event.srcElement.id).value+="\t";
173                                 return false;
174                         }
175                 }
176         }
179 function changeState(myField) {
180         if(document.getElementById(myField) != null){
181           document.getElementById(myField).disabled=(document.getElementById(myField).disabled)?false:true;
182         }
185 function setHidden(str) {
186         type = document.getElementById(str).style.display;
187         if((type=='')||(type=='block')) {
188                 document.getElementById(str).style.display='none';
189         }else{
190                 document.getElementById(str).style.display='block';
191         }
193 function changeSelectState(triggerField, myField) {
194   if (document.getElementById(triggerField).value != 2){
195           document.getElementById(myField).disabled= true;
196   } else {
197           document.getElementById(myField).disabled= false;
198   }
201 function changeSubselectState(triggerField, myField) {
202   if (document.getElementById(triggerField).checked == true){
203           document.getElementById(myField).disabled= false;
204   } else {
205           document.getElementById(myField).disabled= true;
206   }
209 function changeTripleSelectState(firstTriggerField, secondTriggerField, myField) {
210   if (
211         document.getElementById(firstTriggerField).checked == true &&
212         document.getElementById(secondTriggerField).checked == true){
213           document.getElementById(myField).disabled= false;
214   } else {
215           document.getElementById(myField).disabled= true;
216   }
219 <!-- Second field must be non-checked -->
220 function changeTripleSelectState_2nd_neg(firstTriggerField, secondTriggerField, myField) {
221   if (
222         document.getElementById(firstTriggerField).checked == true &&
223         document.getElementById(secondTriggerField).checked == false){
224           document.getElementById(myField).disabled= false;
225   } else {
226           document.getElementById(myField).disabled= true;
227   }
229 // work together to analyze keystrokes
230 if (netscape){
231   if(firefoxType== "firefox") {
232                 window.captureEvents(Event.KEYPRESS);
233         }
234         window.onkeypress= keyPress;
235 } else {
236         document.onkeydown= keyPress;
239 function hide(element) {
240   if (browserType == "gecko" )
241      document.poppedLayer = document.getElementById(element);
242   else if (browserType == "ie")
243      document.poppedLayer = document.all[element];
244   else
245      document.poppedLayer = document.layers[element];
246         document.poppedLayer.style.visibility = "hidden";
249 function show(element) {
250   if (browserType == "gecko" )
251      document.poppedLayer = document.getElementById(element);
252   else if (browserType == "ie")
253      document.poppedLayer = document.all[element];
254   else
255      document.poppedLayer = document.layers[element];
256   document.poppedLayer.style.visibility = "visible";
259 function GOsa_toggle(element) {
260   if (browserType == "gecko" )
261      document.poppedLayer = document.getElementById(element);
262   else if (browserType == "ie")
263      document.poppedLayer = document.all[element];
264   else
265      document.poppedLayer = document.layers[element];
267   if (document.poppedLayer.style.visibility == "visible") {
268           hide (element);
269         } else {
270           show (element);
271         }
274 function popup(target, name) {
275         var mypopup= 
276                 window.open(
277                         target,
278                         name,
279                         "width=600,height=700,location=no,toolbar=no,directories=no,menubar=no,status=no,scrollbars=yes"
280                 );
281         mypopup.focus();
282         return false;
285 function js_check(form) {
286         form.javascript.value = 'true';
289 function divGOsa_toggle(element) {
290         var cell;
291         var cellname="tr_"+(element);
293         if (browserType == "gecko" ) {
294     document.poppedLayer = document.getElementById(element);
295                 cell= document.getElementById(cellname);
297           if (document.poppedLayer.style.visibility == "visible") {
298                   hide (element);
299                         cell.style.height="0px";
300                         document.poppedLayer.style.height="0px";
301                 } else {
302                   show (element);
303                         document.poppedLayer.style.height="";
304                         if(document.defaultView) {
305                                 cell.style.height=document.defaultView.getComputedStyle(document.poppedLayer,"").getPropertyValue('height');
306                         }
307                 }
308         } else if (browserType == "ie") {
309     document.poppedLayer = document.getElementById(element);
310                 cell= document.getElementById(cellname);
311           if (document.poppedLayer.style.visibility == "visible") {
312                   hide (element);
313                         cell.style.height="0px";
314                         document.poppedLayer.style.height="0px";
315                         document.poppedLayer.style.position="absolute";
316                 } else {
317                   show (element);
318                         cell.style.height="";
319                         document.poppedLayer.style.height="";
320                         document.poppedLayer.style.position="relative";
321                 }
322         }
325 function adjust (e) {
326         adjust_height(e);
327         adjust_width(e);
330 // Automatic resize (height) of divlists
331 function adjust_height(e) {
332         if (!e) e=window.event;
333         if (document.getElementById("menucell") && document.getElementById("d_scrollbody")) {
334                 var inner_height= window.innerHeight;
335                 var min_height= 450;
336                 var px_height= min_height;
337                 var suggested= px_height;
338         
339                 // document.defaultView allows access to the rendered size of elements and should be supported by modern browsers
340                 if(document.defaultView) {
341                         var menu_height= 0;
342                         if (document.getElementById("d_height")){
343                           suggested= parseInt(document.getElementById("d_height").value);
344                         } else {
345                           menu_height=parseInt(document.defaultView.getComputedStyle(document.getElementById("menucell"),"").getPropertyValue('height'));
346                           // Minimum height for divlist should be the bottom edge of the menu
347                           min_height= menu_height-197;
348                           suggested= min_height;
349                           if((inner_height-230)-suggested>0) {
350                                 suggested= inner_height-230;
351                           }
352                 
353                         }
354         
355                 // IE uses other height specifications
356                 } else if (browserType == "ie") {
357                         suggested= document.all.menucell.offsetHeight;
358                         offset= absTop(d_scrollbody);
359                         suggested-= offset;
360                         if((inner_height-230)-suggested>0) {
361                                 suggested= inner_height-230;
362                         }
363                 }
365                 /* Reduce height if a list footer is set */
366                 if(document.getElementById("t_scrollfoot")){
367                         suggested = suggested -20;
368                 }
370                 if (!document.getElementById("list_workaround")) {
371                   document.getElementById("d_scrollbody").style.height=suggested+"px";
372                 } else {
373                   if (browserType != "ie") {
374                     current_height= parseInt(document.defaultView.getComputedStyle(document.getElementById("t_nscrollbody"),"").getPropertyValue('height'));
375                     if (current_height < menu_height) {
376                       document.getElementById("d_scrollbody").style.height=suggested+20+"px";
377                     }
378                   }
379                 }
380                 if (document.getElementById("t_nscrollbody")) {
381                         document.getElementById("t_nscrollbody").style.height=(suggested-22)+"px";
382                 }
383         }
384         return true;
387 function absTop(e) {
388         return (e.offsetParent)?e.offsetTop+absTop(e.offsetParent) : e.offsetTop;
391 // Automatic resize (width) of divlists
392 function adjust_width(e) 
394         
395         /* Get event ... it seems to be unused here ...*/
396         if (!e) {
397                 e=window.event;
398         }
400         // Known to not work with IE
401         if(document.defaultView && document.getElementById("t_scrolltable")) {
403                 // Get current width of divlist 
404                 var div_width   =       parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable"),"").getPropertyValue('width'));
405         
406                 // Get window width
407                 var width= parseInt(window.innerWidth);
409                 // Resize the body cells, 470 represents the info box and the navigation part 
410                 var save= 470;
411                 if(document.getElementById('d_save')) {
412                   save= document.getElementById('d_save').value;
413                 }
414                 var space= 600;
415                 if(document.getElementById('d_space')) {
416                   space= document.getElementById('d_space').value;
417                 }
418                 var diff= width - div_width - save;
420                 // window has been upscaled
421                 if(div_width+diff>=space) {
422                         if (width - save > space) {
423                           document.getElementById('d_scrollbody').style.width=div_width+diff+"px";
424                           if (document.getElementById('t_scrollbody') != null) {
425                             document.getElementById('t_scrollbody').style.width=(div_width-19)+diff+"px";
426                           }
427         
428                           // Resize the Header cells (only the relative-width ones)
429                           if (document.getElementById('t_scrollhead') != null) {
430                             document.getElementById('t_scrollhead').style.width=div_width+diff+"px";
431                           }
432                         } else {
433                           document.getElementById('d_scrollbody').style.width=div_width+"px";
434                           if (document.getElementById('t_scrollbody') != null) {
435                             document.getElementById('t_scrollbody').style.width=(div_width-19)+"px";
436                           }
437         
438                           // Resize the Header cells (only the relative-width ones)
439                           if (document.getElementById('t_scrollhead') != null) {
440                             document.getElementById('t_scrollhead').style.width=div_width+"px";
441                           }
442                         }
444                 // window has been downscaled, we must reset the div to 600px
445                 } else if (width < 1200) {
446                         // Reset layout (set width to 600px)
447                         div_width=space;
448                         document.getElementById('d_scrollbody').style.width=div_width+"px";
449                         if (document.getElementById('t_scrollbody') != null) {
450                           document.getElementById('t_scrollbody').style.width=(div_width-19)+"px";
451                         }
452         
453                         // Resize the Header cells (only the relative-width ones)
454                         if (document.getElementById('t_scrollhead') != null) {
455                           document.getElementById('t_scrollhead').style.width=div_width+"px";
456                         }
457                 }
458         } else if(document.defaultView && document.getElementById("t_scrolltable_onlywidth")){
459                 // Resize the div
460                 var div_width=parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable_onlywidth"),"").getPropertyValue('width'));
461                 var width= parseInt(window.innerWidth);
463                 // Resize the body cells
464                 var diff= width-div_width-200;
465                 
466                 // window has been upscaled
467                 if(div_width+diff>=600) {
468                         if(document.getElementById('d_scrollbody_onlywidth')){
469                                 document.getElementById('d_scrollbody_onlywidth').style.width=div_width+diff+"px";
470                         }
471                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+diff+"px";
472         
473                         // Resize the Header cells (only the relative-width ones)
474                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+diff+"px";
476                 // window has been downscaled, we must reset the div to 600px
477                 } else if (width < 930) {
478                         // Reset layout (set width to 600px)
479                         div_width=600;
480                         if(document.getElementById('d_scrollbody_onlywidth')){
481                                 document.getElementById('d_scrollbody_onlywidth').style.width=div_width+"px";
482                         }
483                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+"px";
484         
485                         // Resize the Header cells (only the relative-width ones)
486                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+"px";
487                 }
488         } else {
489                 // IE
491         }
495 /* Set focus to first valid input field
496     avoid IExplorer warning about hidding or disabled fields
497 */
498 function focus_field()
500     var i     = 0;
501     var e     = 0;
502     var found = false;
503     var element_name = "";
504     var element =null;
506     while(focus_field.arguments[i] && !found){
508         var tmp = document.getElementsByName(focus_field.arguments[i]);
509         for(e = 0 ; e < tmp.length ; e ++ ){
511             if(tmp[e].disabled != true &&  tmp[e].type != "none" && tmp[e].type != "hidden" ){
512                 found = true;
513                 element = tmp[e];
514             }
515         }
516         i++;
517     }
519     if(element && found){
520         element.blur();
521         element.focus();
522     }
526 /*  This function pops up messages from message queue 
527                 All messages are hidden in html output (style='display:none;').
528                 This function makes single messages visible till there are no more dialogs queued.
530                 hidden inputs: 
531                         current_msg_dialogs             - Currently visible dialog
532                         closed_msg_dialogs              - IDs of already closed dialogs 
533                         pending_msg_dialogs             - Queued dialog IDs. 
534 */
535 function next_msg_dialog()
537                 var s_pending = "";
538                 var a_pending = new Array();
539                 var i_id                        = 0;
540                 var i                                   = 0;
541                 var tmp                         = "";
542                 var ele                         = null;
543                 var ele2                        = null;
544                 var cur_id              = "";
546                 if(document.getElementById('current_msg_dialogs')){
547                                 cur_id = document.getElementById('current_msg_dialogs').value;
548                                 if(cur_id != ""){
549                                                 ele = document.getElementById('e_layer' + cur_id);
550                                                 ele.onmousemove = "";
551                                                 hide('e_layer' + cur_id);       
552                                                 document.getElementById('closed_msg_dialogs').value += "," + cur_id;
553                                                 document.getElementById('current_msg_dialogs').value= ""; 
554                                 }
555                 }
557                 if(document.getElementById('pending_msg_dialogs')){
558                                 s_pending = document.getElementById('pending_msg_dialogs').value;
559                                 a_pending = s_pending.split(",");
560                                 if(a_pending.length){
561                                                 i_id = a_pending.pop();
562                                                 for (i = 0 ; i < a_pending.length; ++i){
563                                                                 tmp = tmp + a_pending[i] + ',';
564                                                 }
565                                                 tmp = tmp.replace(/,$/g,"");
566                                                 if(i_id != ""){
567                                                                 ele = document.getElementById('e_layer' + i_id);
568                                                                 ele3 = document.getElementById('e_layerTitle' + i_id);
569                                                                 ele.style.display= 'block'      ;
570                                                                 document.getElementById('pending_msg_dialogs').value= tmp;
571                                                                 document.getElementById('current_msg_dialogs').value= i_id;
572                                                                 ele2 = document.getElementById('e_layer2') ;
573                                                                 ele3.onmousedown = start_move_div_by_cursor;
574                                                                 ele2.onmouseup  = stop_move_div_by_cursor;
575                                                                 ele2.onmousemove = move_div_by_cursor;
576                                                 }else{
577                                                                 ele2 = document.getElementById('e_layer2') ;
578                                                                 ele2.style.display ="none";
579                                                 }
580                                 }
581                 }
585 /* Drag & drop for message dialogs */
586 var enable_move_div_by_cursor = false;          // Indicates wheter the div movement is enabled or not 
587 var mouse_x_on_div      = 0;                                                                    // 
588 var mouse_y_on_div      = 0;
589 var div_offset_x        = 0;
590 var div_offset_y        = 0;
592 /* Activates msg_dialog drag & drop
593  * This function is called when clicking on a displayed msg_dialog 
594  */
595 function start_move_div_by_cursor(e)
597                 var x = 0; 
598                 var y = 0;      
599                 var cur_id = 0;
600                 var dialog = null;
601                 var event = null;
603                 /* Get current msg_dialog position
604      */
605                 cur_id = document.getElementById('current_msg_dialogs').value;
606                 if(cur_id != ""){
607                                 dialog = document.getElementById('e_layer' + cur_id);
608                                 x = dialog.style.left;
609                                 y = dialog.style.top;
610                                 x = x.replace(/[^0-9]/g,"");
611                                 y = y.replace(/[^0-9]/g,"");
612                                 if(!y) y = 1;
613                                 if(!x) x = 1;
614                 }
616                 /* Get mouse position within msg_dialog 
617      */
618                 if(window.event){
619                                 event = window.event;
620                                 if(event.offsetX){
621                                                 div_offset_x   = event.clientX -x;
622                                                 div_offset_y   = event.clientY -y;
623                                                 enable_move_div_by_cursor = true;
624                                 }
625                 }else if(e){
626                                 event = e;
627                                 if(event.layerX){
628                                                 div_offset_x    = event.screenX -x;
629                                                 div_offset_y    = event.screenY -y;
630                                                 enable_move_div_by_cursor = true;
631                                 }
632                 }
636 /* Deactivate msg_dialog movement 
637 */
638 function stop_move_div_by_cursor()
640                 mouse_x_on_div = 0;
641                 mouse_y_on_div = 0;
642                 div_offset_x = 0;
643                 div_offset_y = 0;
644                 enable_move_div_by_cursor = false;
648 /* Move msg_dialog with cursor */
649 function move_div_by_cursor(e)
651                 var event                               = false;
652                 var mouse_pos_x         = 0;
653                 var mouse_pos_y         = 0;
654                 var     cur_div_x = 0;
655                 var cur_div_y = 0;
656                 var cur_id      = 0;
657                 var dialog = null;
660                 if(undefined !== enable_move_div_by_cursor && enable_move_div_by_cursor == true){
662                                 if(document.getElementById('current_msg_dialogs')){
664                                                 /* Get mouse position on screen 
665              */
666                                                 if(window.event){
667                                                                 event = window.event;
668                                                                 mouse_pos_x  =event.clientX;
669                                                                 mouse_pos_y  =event.clientY;
670                                                 }else if (e){
671                                                                 event = e;
672                                                                 mouse_pos_x  =event.screenX;
673                                                                 mouse_pos_y  =event.screenY;
674                                                 }else{
675                                                         return;
676                                                 }
678                                                 /* Get id of current msg_dialog */
679                                                 cur_id = document.getElementById('current_msg_dialogs').value;
680                                                 if(cur_id != ""){
681                                                                 dialog = document.getElementById('e_layer' + cur_id);
682         
683                                                                 /* Calculate new position */
684                                                                 cur_div_x = mouse_pos_x - div_offset_x;
685                                                                 cur_div_y = mouse_pos_y - div_offset_y;
687                                                                 /* Ensure that dialog can't be moved out of screen */
688                                                                 if(cur_div_x < 0 ) cur_div_x = 0
689                                                                 if(cur_div_y < 0 ) cur_div_y = 0
690                                                         
691                                                                 /* Assign new values */
692                                                                 dialog.style.left = (cur_div_x ) + "px";
693                                                                 dialog.style.top  = (cur_div_y ) + "px";
694                                                 }
695                                 }
696                 }
699 function send_menu_action(str)
701                 if(str != "" && str != "#"){
702                                 if(document.getElementById('menu_action')){
703                                                 document.getElementById('menu_action').value=str;
704                                                 document.mainform.submit();
705                                 }
706         }
709 var rtimer;
711 // vim:ts=2:syntax