Code

129e6162571f0e8d2f6d505599dd48f3cbabfd85
[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 }
78 function keyPress(DnEvents) {
79   // determines whether Netscape or Internet Explorer
80   k = (netscape) ? DnEvents.keyCode : window.event.keyCode;
81   if (k == 13) { // enter key pressed
82                 if(typeof(nextfield)!='undefined') {
83                         if(nextfield == 'login') {
84           return true; // submit, we finished all fields
85         } else { // we are not done yet, send focus to next box
86         eval('document.mainform.' + nextfield + '.focus()');
87         return false;
88         }
89         } else {
90                         if(netscape) {
91                                 if(DnEvents.target.type == 'textarea') {
92                                         return true;
93                                 } else if (DnEvents.target.type != 'submit') {
94                                         // TAB
95                                         var thisfield = document.getElementById(DnEvents.target.id);
96                                         for (i = 0; i < document.forms[0].elements.length; i++) {
97                                                 if(document.forms[0].elements[i].id==thisfield.id) {
98                                                         // Last form element on page?
99                                                         if(i!=document.forms[0].elements.length-1) {
100                                                                 document.forms[0].elements[i+1].focus();
101                                                         }
102                                                 }
103                                         }
104                                         return false;
105                                 } else {
106                                         return true;
107                                 }
108                         // Check for konqueror
109                         } else if(document.clientWidth) {
110                                 // do nothing ATM
111                         } else {
112                                 if(window.event.srcElement.type == 'textarea') {
113                                         return true;
114                                 } else if (window.event.srcElement.type != 'submit') {
115                                         // TAB
116                                         var thisfield = document.getElementById(window.event.srcElement.id);
117                                         for (i = 0; i < document.forms[0].elements.length; i++) {
118                                                 if(document.forms[0].elements[i].id==thisfield.id) {
119                                                         // Last form element on page?
120                                                         if(i!=document.forms[0].elements.length-1) {
121                                                                 document.forms[0].elements[i+1].focus();
122                                                         }
123                                                 }
124                                         }
125                                         return false;
126                                 } else {
127                                         return true;
128                                 }
129                         }
130                 }
131         } else if (k==9) {
132                 // Tab key pressed
133                 if(netscape) {
134                         if(DnEvents.target.type == 'textarea') {
135                                 document.getElementById(DnEvents.target.id).value+="\t";
136                                 return false;
137                         }
138                 // Check for konqueror
139                 } else if(document.clientWidth) {
140                         // do nothing ATM
141                 } else {
142                         if(window.event.srcElement.type == 'textarea') {
143                                 document.getElementById(window.event.srcElement.id).value+="\t";
144                                 return false;
145                         }
146                 }
147         }
150 function changeState(myField) {
151         if(document.getElementById(myField) != null){
152           document.getElementById(myField).disabled=(document.getElementById(myField).disabled)?false:true;
153         }
156 function setHidden(str) {
157         type = document.getElementById(str).style.display;
158         if((type=='')||(type=='block')) {
159                 document.getElementById(str).style.display='none';
160         }else{
161                 document.getElementById(str).style.display='block';
162         }
164 function changeSelectState(triggerField, myField) {
165   if (document.getElementById(triggerField).value != 2){
166           document.getElementById(myField).disabled= true;
167   } else {
168           document.getElementById(myField).disabled= false;
169   }
172 function changeSubselectState(triggerField, myField) {
173   if (document.getElementById(triggerField).checked == true){
174           document.getElementById(myField).disabled= false;
175   } else {
176           document.getElementById(myField).disabled= true;
177   }
180 function changeTripleSelectState(firstTriggerField, secondTriggerField, myField) {
181   if (
182         document.getElementById(firstTriggerField).checked == true &&
183         document.getElementById(secondTriggerField).checked == true){
184           document.getElementById(myField).disabled= false;
185   } else {
186           document.getElementById(myField).disabled= true;
187   }
190 <!-- Second field must be non-checked -->
191 function changeTripleSelectState_2nd_neg(firstTriggerField, secondTriggerField, myField) {
192   if (
193         document.getElementById(firstTriggerField).checked == true &&
194         document.getElementById(secondTriggerField).checked == false){
195           document.getElementById(myField).disabled= false;
196   } else {
197           document.getElementById(myField).disabled= true;
198   }
200 // work together to analyze keystrokes
201 if (netscape){
202   if(firefoxType== "firefox") {
203                 window.captureEvents(Event.KEYPRESS);
204         }
205         window.onkeypress= keyPress;
206 } else {
207         document.onkeydown= keyPress;
210 function hide(element) {
211   if (browserType == "gecko" )
212      document.poppedLayer = document.getElementById(element);
213   else if (browserType == "ie")
214      document.poppedLayer = document.all[element];
215   else
216      document.poppedLayer = document.layers[element];
217         document.poppedLayer.style.visibility = "hidden";
220 function show(element) {
221   if (browserType == "gecko" )
222      document.poppedLayer = document.getElementById(element);
223   else if (browserType == "ie")
224      document.poppedLayer = document.all[element];
225   else
226      document.poppedLayer = document.layers[element];
227   document.poppedLayer.style.visibility = "visible";
230 function toggle(element) {
231   if (browserType == "gecko" )
232      document.poppedLayer = document.getElementById(element);
233   else if (browserType == "ie")
234      document.poppedLayer = document.all[element];
235   else
236      document.poppedLayer = document.layers[element];
238   if (document.poppedLayer.style.visibility == "visible") {
239           hide (element);
240         } else {
241           show (element);
242         }
245 function popup(target, name) {
246         var mypopup= 
247                 window.open(
248                         target,
249                         name,
250                         "width=600,height=700,location=no,toolbar=no,directories=no,menubar=no,status=no,scrollbars=yes"
251                 );
252         mypopup.focus();
253         return false;
256 function js_check(form) {
257         form.javascript.value = 'true';
260 function divtoggle(element) {
261         var cell;
262         var cellname="tr_"+(element);
264         if (browserType == "gecko" ) {
265     document.poppedLayer = document.getElementById(element);
266                 cell= document.getElementById(cellname);
268           if (document.poppedLayer.style.visibility == "visible") {
269                   hide (element);
270                         cell.style.height="0px";
271                         document.poppedLayer.style.height="0px";
272                 } else {
273                   show (element);
274                         document.poppedLayer.style.height="";
275                         if(document.defaultView) {
276                                 cell.style.height=document.defaultView.getComputedStyle(document.poppedLayer,"").getPropertyValue('height');
277                         }
278                 }
279         } else if (browserType == "ie") {
280     document.poppedLayer = document.getElementById(element);
281                 cell= document.getElementById(cellname);
282           if (document.poppedLayer.style.visibility == "visible") {
283                   hide (element);
284                         cell.style.height="0px";
285                         document.poppedLayer.style.height="0px";
286                         document.poppedLayer.style.position="absolute";
287                 } else {
288                   show (element);
289                         cell.style.height="";
290                         document.poppedLayer.style.height="";
291                         document.poppedLayer.style.position="relative";
292                 }
293         }
296 function adjust (e) {
297         adjust_height(e);
298         adjust_width(e);
301 // Automatic resize (height) of divlists
302 function adjust_height(e) {
303         if (!e) e=window.event;
304         if (document.getElementById("menucell") && document.getElementById("d_scrollbody")) {
305                 var inner_height= window.innerHeight;
306                 var min_height= 450;
307                 var px_height= min_height;
308                 var suggested= px_height;
309         
310                 // document.defaultView allows access to the rendered size of elements and should be supported by modern browsers
311                 if(document.defaultView) {
312                         var menu_height=parseInt(document.defaultView.getComputedStyle(document.getElementById("menucell"),"").getPropertyValue('height'));
313         
314                         // Minimum height for divlist should be the bottom edge of the menu
315                         min_height= menu_height-197;
316                         suggested= min_height;
317                         if((inner_height-230)-suggested>0) {
318                                 suggested= inner_height-230;
319                         }
320                 
321                 // IE uses other height specifications
322                 } else if (browserType == "ie") {
323                         suggested= document.all.menucell.offsetHeight;
324                         offset= absTop(d_scrollbody);
325                         suggested-= offset;
326                         if((inner_height-230)-suggested>0) {
327                                 suggested= inner_height-230;
328                         }
329                 }
331                 /* Reduce height if a list footer is set */
332                 if(document.getElementById("t_scrollfoot")){
333                         suggested = suggested -20;
334                 }
336                 document.getElementById("d_scrollbody").style.height=suggested+"px";
337         }
338         return true;
341 function absTop(e) {
342         return (e.offsetParent)?e.offsetTop+absTop(e.offsetParent) : e.offsetTop;
345 // Automatic resize (width) of divlists
346 function adjust_width(e) 
348         
349         /* Get event ... it seems to be unused here ...*/
350         if (!e) {
351                 e=window.event;
352         }
354         // Known to not work with IE
355         if(document.defaultView && document.getElementById("t_scrolltable")) {
357                 // Get current width of divlist 
358                 var div_width   =       parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable"),"").getPropertyValue('width'));
359         
360                 // Get window width
361                 var width= parseInt(window.innerWidth);
363                 // Resize the body cells, 470 represents the info box and the navigation part 
364                 var diff= width -       div_width       -       470;
365                 
366                 // window has been upscaled
367                 if(div_width+diff>=600) {
368                         document.getElementById('d_scrollbody').style.width=div_width+diff+"px";
369                         document.getElementById('t_scrollbody').style.width=(div_width-19)+diff+"px";
370         
371                         // Resize the Header cells (only the relative-width ones)
372                         document.getElementById('t_scrollhead').style.width=div_width+diff+"px";
374                 // window has been downscaled, we must reset the div to 600px
375                 } else if (width < 930) {
376                         // Reset layout (set width to 600px)
377                         div_width=600;
378                         document.getElementById('d_scrollbody').style.width=div_width+"px";
379                         document.getElementById('t_scrollbody').style.width=(div_width-19)+"px";
380         
381                         // Resize the Header cells (only the relative-width ones)
382                         document.getElementById('t_scrollhead').style.width=div_width+"px";
383                 }
384         } else if(document.defaultView && document.getElementById("t_scrolltable_onlywidth")){
385                 // Resize the div
386                 var div_width=parseInt(document.defaultView.getComputedStyle(document.getElementById("t_scrolltable_onlywidth"),"").getPropertyValue('width'));
387                 var width= parseInt(window.innerWidth);
389                 // Resize the body cells
390                 var diff= width-div_width-200;
391                 
392                 // window has been upscaled
393                 if(div_width+diff>=600) {
394                         if(document.getElementById('d_scrollbody_onlywidth')){
395                                 document.getElementById('d_scrollbody_onlywidth').style.width=div_width+diff+"px";
396                         }
397                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+diff+"px";
398         
399                         // Resize the Header cells (only the relative-width ones)
400                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+diff+"px";
402                 // window has been downscaled, we must reset the div to 600px
403                 } else if (width < 930) {
404                         // Reset layout (set width to 600px)
405                         div_width=600;
406                         if(document.getElementById('d_scrollbody_onlywidth')){
407                                 document.getElementById('d_scrollbody_onlywidth').style.width=div_width+"px";
408                         }
409                         document.getElementById('t_scrollbody_onlywidth').style.width=(div_width-19)+"px";
410         
411                         // Resize the Header cells (only the relative-width ones)
412                         document.getElementById('t_scrollhead_onlywidth').style.width=div_width+"px";
413                 }
414         } else {
415                 // IE
417         }
421 /* Set focus to first valid input field
422     avoid IExplorer warning about hidding or disabled fields
423 */
424 function focus_field()
426     var i     = 0;
427     var e     = 0;
428     var found = false;
429     var element_name = "";
430     var element =null;
432     while(focus_field.arguments[i] && !found){
434         var tmp = document.getElementsByName(focus_field.arguments[i]);
435         for(e = 0 ; e < tmp.length ; e ++ ){
437             if(tmp[e].disabled != true &&  tmp[e].type != "none" && tmp[e].type != "hidden" ){
438                 found = true;
439                 element = tmp[e];
440             }
441         }
442         i++;
443     }
445     if(element && found){
446         element.blur();
447         element.focus();
448     }
452 /*  This function pops up messages from message queue 
453                 All messages are hidden in html output (style='display:none;').
454                 This function makes single messages visible till there are no more dialogs queued.
456                 hidden inputs: 
457                         current_msg_dialogs             - Currently visible dialog
458                         closed_msg_dialogs              - IDs of already closed dialogs 
459                         pending_msg_dialogs             - Queued dialog IDs. 
460 */
461 function next_msg_dialog()
463                 var s_pending = "";
464                 var a_pending = new Array();
465                 var i_id                        = 0;
466                 var i                                   = 0;
467                 var tmp                         = "";
468                 var ele                         = null;
469                 var ele2                        = null;
470                 var cur_id              = "";
472                 if(document.getElementById('current_msg_dialogs')){
473                                 cur_id = document.getElementById('current_msg_dialogs').value;
474                                 if(cur_id != ""){
475                                                 ele = document.getElementById('e_layer' + cur_id);
476                                                 ele.onmousemove = "";
477                                                 hide('e_layer' + cur_id);       
478                                                 document.getElementById('closed_msg_dialogs').value += "," + cur_id;
479                                                 document.getElementById('current_msg_dialogs').value= ""; 
480                                 }
481                 }
483                 if(document.getElementById('pending_msg_dialogs')){
484                                 s_pending = document.getElementById('pending_msg_dialogs').value;
485                                 a_pending = s_pending.split(",");
486                                 if(a_pending.length){
487                                                 i_id = a_pending.pop();
488                                                 for (i = 0 ; i < a_pending.length; ++i){
489                                                                 tmp = tmp + a_pending[i] + ',';
490                                                 }
491                                                 tmp = tmp.replace(/,$/g,"");
492                                                 if(i_id != ""){
493                                                                 ele = document.getElementById('e_layer' + i_id);
494                                                                 ele3 = document.getElementById('e_layerTitle' + i_id);
495                                                                 ele.style.display= 'block'      ;
496                                                                 document.getElementById('pending_msg_dialogs').value= tmp;
497                                                                 document.getElementById('current_msg_dialogs').value= i_id;
498                                                                 ele2 = document.getElementById('e_layer2') ;
499                                                                 ele3.onmousedown = start_move_div_by_cursor;
500                                                                 ele2.onmouseup  = stop_move_div_by_cursor;
501                                                                 ele2.onmousemove = move_div_by_cursor;
502                                                 }else{
503                                                                 ele2 = document.getElementById('e_layer2') ;
504                                                                 ele2.style.display ="none";
505                                                 }
506                                 }
507                 }
511 /* Drag & drop for message dialogs */
512 var enable_move_div_by_cursor = false;          // Indicates wheter the div movement is enabled or not 
513 var mouse_x_on_div      = 0;                                                                    // 
514 var mouse_y_on_div      = 0;
515 var div_offset_x        = 0;
516 var div_offset_y        = 0;
518 /* Activates msg_dialog drag & drop
519  * This function is called when clicking on a displayed msg_dialog 
520  */
521 function start_move_div_by_cursor(e)
523                 var x = 0; 
524                 var y = 0;      
525                 var cur_id = 0;
526                 var dialog = null;
527                 var event = null;
529                 /* Get current msg_dialog position
530      */
531                 cur_id = document.getElementById('current_msg_dialogs').value;
532                 if(cur_id != ""){
533                                 dialog = document.getElementById('e_layer' + cur_id);
534                                 x = dialog.style.left;
535                                 y = dialog.style.top;
536                                 x = x.replace(/[^0-9]/g,"");
537                                 y = y.replace(/[^0-9]/g,"");
538                                 if(!y) y = 1;
539                                 if(!x) x = 1;
540                 }
542                 /* Get mouse position within msg_dialog 
543      */
544                 if(window.event){
545                                 event = window.event;
546                                 if(event.offsetX){
547                                                 div_offset_x   = event.clientX -x;
548                                                 div_offset_y   = event.clientY -y;
549                                                 enable_move_div_by_cursor = true;
550                                 }
551                 }else if(e){
552                                 event = e;
553                                 if(event.layerX){
554                                                 div_offset_x    = event.screenX -x;
555                                                 div_offset_y    = event.screenY -y;
556                                                 enable_move_div_by_cursor = true;
557                                 }
558                 }
562 /* Deactivate msg_dialog movement 
563 */
564 function stop_move_div_by_cursor()
566                 mouse_x_on_div = 0;
567                 mouse_y_on_div = 0;
568                 div_offset_x = 0;
569                 div_offset_y = 0;
570                 enable_move_div_by_cursor = false;
574 /* Move msg_dialog with cursor */
575 function move_div_by_cursor(e)
577                 var event                               = false;
578                 var mouse_pos_x         = 0;
579                 var mouse_pos_y         = 0;
580                 var     cur_div_x = 0;
581                 var cur_div_y = 0;
582                 var cur_id      = 0;
583                 var dialog = null;
586                 if(undefined !== enable_move_div_by_cursor && enable_move_div_by_cursor == true){
588                                 if(document.getElementById('current_msg_dialogs')){
590                                                 /* Get mouse position on screen 
591              */
592                                                 if(window.event){
593                                                                 event = window.event;
594                                                                 mouse_pos_x  =event.clientX;
595                                                                 mouse_pos_y  =event.clientY;
596                                                 }else if (e){
597                                                                 event = e;
598                                                                 mouse_pos_x  =event.screenX;
599                                                                 mouse_pos_y  =event.screenY;
600                                                 }else{
601                                                         return;
602                                                 }
604                                                 /* Get id of current msg_dialog */
605                                                 cur_id = document.getElementById('current_msg_dialogs').value;
606                                                 if(cur_id != ""){
607                                                                 dialog = document.getElementById('e_layer' + cur_id);
608         
609                                                                 /* Calculate new position */
610                                                                 cur_div_x = mouse_pos_x - div_offset_x;
611                                                                 cur_div_y = mouse_pos_y - div_offset_y;
613                                                                 /* Ensure that dialog can't be moved out of screen */
614                                                                 if(cur_div_x < 0 ) cur_div_x = 0
615                                                                 if(cur_div_y < 0 ) cur_div_y = 0
616                                                         
617                                                                 /* Assign new values */
618                                                                 dialog.style.left = (cur_div_x ) + "px";
619                                                                 dialog.style.top  = (cur_div_y ) + "px";
620                                                 }
621                                 }
622                 }
625 function send_menu_action(str)
627                 if(str != "" && str != "#"){
628                                 if(document.getElementById('menu_action')){
629                                                 document.getElementById('menu_action').value=str;
630                                                 document.mainform.submit();
631                                 }
632         }
635 // vim:ts=2:syntax