Code

Removed usePrototype flag, its activated always now.
[gosa.git] / gosa-core / html / include / gosa.js
1 /*
2  * This code is part of GOsa (http://www.gosa-project.org)
3  * Copyright (C) 2003-2010 GONICUS GmbH
4  * 
5  * ID: $$Id: index.php 15301 2010-01-26 09:40:08Z cajus $$
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
22 /* Install event handlers */
23 Event.observe(window, 'resize', resizeHandler);
24 Event.observe(window, 'load', resizeHandler);
25 Event.observe(window, 'keypress', keyHandler);
28 /* Ask before switching a plugin with this function */
29 function question(text, url)
30 {
31         if(document.mainform.ignore){
32                 location.href= url;
33                 return true;
34         }
35         if(confirm(text)){
36                 location.href= url;
37                 return true;
38         }
39         return false;
40 }
43 /* Toggle checkbox that matches regex */
44 function chk_set_all(regex,value)
45 {
46         for (var i = 0; i < document.mainform.elements.length; i++) {
47                 var _id=document.mainform.elements[i].id;
48                 if(_id.match(regex)) {
49                         document.getElementById(_id).checked= value;
50                 }
51         }
52 }
55 function toggle_all_(regex,state_object)
56 {
57         state = document.getElementById(state_object).checked;
58         chk_set_all(regex, state);
59 }
62 /* Scroll down the body frame */
63 function scrollDown2()
64 {
65         document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
66 }
69 /* Toggle checkbox that matches regex */
70 function acl_set_all(regex,value)
71 {
72         for (var i = 0; i < document.mainform.elements.length; i++) {
73                 var _id=document.mainform.elements[i].id;
74                 if(_id.match(regex)) {
75                         document.getElementById(_id).checked= value;
76                 }
77         }
78 }
80 /* Toggle checkbox that matches regex */
81 function acl_toggle_all(regex)
82 {
83     for (var i = 0; i < document.mainform.elements.length; i++) {
84         var _id=document.mainform.elements[i].id;
85         if(_id.match(regex)) {
86             if (document.getElementById(_id).checked == true){
87                 document.getElementById(_id).checked= false;
88             } else {
89                 document.getElementById(_id).checked= true;
90             }
91         }
92     }
93 }
96 /* Global key handler to estimate which element gets the next focus if enter is pressed */
97 function keyHandler(DnEvents) {
99     var element = Event.element(DnEvents);
101     // determines whether Netscape or Internet Explorer
102     k = (Prototype.Browser.Gecko) ? DnEvents.keyCode : window.event.keyCode;
103     if (k == 13) { // enter key pressed
105         // Stop 'Enter' key-press from beeing processed internally
106         Event.stop(DnEvents);
108         // No nextfield explicitly specified 
109         var next_element = null;
110         if(typeof(nextfield)!='undefined') {
111             next_element = $(nextfield);
112         }
113        
114         // nextfield not given or invalid
115         if(!next_element || typeof(nextfield)=='undefined'){
116             next_element = getNextInputElement(element);
117         }
119         // If next element is of type submit, then submit the button else set focus
120         if(next_element!=null && next_element.type == 'submit'){
121             next_element.click();
122             return(false);
123         }else if(next_element){
124             next_element.focus();
125             return;
126         }
127     
128     } else if (k==9 && element.type=='textarea') {
129         Event.stop(DnEvents);
130         element.value += "\t";
131         return false;
132     }
135 function getNextInputElement(element)
137     var found = false;
138     for (var e=0;e< document.forms.length; e++){
139         for (var i = 0; i < document.forms[e].elements.length; i++) {           
140             if(found && !document.forms[e].elements[i].disabled){
141                 return(document.forms[e].elements[i]);    
142             }                                                           
143             if(document.forms[e].elements[i].id==element.id || document.forms[e].elements[i].name==element.name){        
144                 found =true;
145             }
146         }                                                              
147     }                                                              
150 function changeState() {
151         for (var i = 0; i < arguments.length; i++) { 
152                 var element = $(arguments[i]); 
153                 if (element.hasAttribute('disabled')) { 
154                         element.removeAttribute('disabled'); 
155                 } else { 
156                         element.setAttribute('disabled', 'disabled'); 
157                 } 
158         } 
161 function changeSelectState(triggerField, myField) {
162         if (document.getElementById(triggerField).value != 2){
163                 document.getElementById(myField).disabled= true;
164         } else {
165                 document.getElementById(myField).disabled= false;
166         }
169 function changeSubselectState(triggerField, myField) {
170         if (document.getElementById(triggerField).checked == true){
171                 document.getElementById(myField).disabled= false;
172         } else {
173                 document.getElementById(myField).disabled= true;
174         }
177 function changeTripleSelectState(firstTriggerField, secondTriggerField, myField) {
178         if (
179                         document.getElementById(firstTriggerField).checked == true &&
180                         document.getElementById(secondTriggerField).checked == true){
181                 document.getElementById(myField).disabled= false;
182         } else {
183                 document.getElementById(myField).disabled= true;
184         }
187 <!-- Second field must be non-checked -->
188 function changeTripleSelectState_2nd_neg(firstTriggerField, secondTriggerField, myField) {
189         if (
190                         document.getElementById(firstTriggerField).checked == true &&
191                         document.getElementById(secondTriggerField).checked == false){
192                 document.getElementById(myField).disabled= false;
193         } else {
194                 document.getElementById(myField).disabled= true;
195         }
199 function popup(target, name) {
200         var mypopup= 
201                 window.open(
202                                 target,
203                                 name,
204                                 "width=600,height=700,location=no,toolbar=no,directories=no,menubar=no,status=no,scrollbars=yes"
205                            );
206         mypopup.focus();
207         return false;
210 function js_check(form) {
211         form.javascript.value = 'true';
214 function divGOsa_toggle(element) {
215         var cell;
216         var cellname="tr_"+(element);
218         if (Prototype.Browser.Gecko) {
219                 document.poppedLayer = document.getElementById(element);
220                 cell= document.getElementById(cellname);
222                 if (document.poppedLayer.style.visibility == "visible") {
223                         $(element).hide();
224                         cell.style.height="0px";
225                         document.poppedLayer.style.height="0px";
226                 } else {
227                         $(element).show();
228                         document.poppedLayer.style.height="";
229                         if(document.defaultView) {
230                                 cell.style.height=document.defaultView.getComputedStyle(document.poppedLayer,"").getPropertyValue('height');
231                         }
232                 }
233         } else if (Prototype.Browser.IE) {
234                 document.poppedLayer = document.getElementById(element);
235                 cell= document.getElementById(cellname);
236                 if (document.poppedLayer.style.visibility == "visible") {
237                         $(element).hide();
238                         cell.style.height="0px";
239                         document.poppedLayer.style.height="0px";
240                         document.poppedLayer.style.position="absolute";
241                 } else {
242                         $(element).show();
243                         cell.style.height="";
244                         document.poppedLayer.style.height="";
245                         document.poppedLayer.style.position="relative";
246                 }
247         }
250 function resizeHandler (e) {
251         if (!e) e=window.event;
252         if ($("d_scrollbody") && $("t_nscrollbody")) {
254         var contentHeight= document.viewport.getHeight() - 216;
255         if ($$('div.plugin-actions').length != 0) {
256           var height= 0;
257           $$('div.plugin-actions').each(function(s) {
258             height+= s.getHeight();
259           });
260           contentHeight-= height + 5;
261         }
263         document.getElementById('d_scrollbody').style.height = contentHeight+23+'px';
264         document.getElementById('t_nscrollbody').style.height = contentHeight+'px';
265     }
266         return true;
269 function absTop(e) {
270         return (e.offsetParent)?e.offsetTop+absTop(e.offsetParent) : e.offsetTop;
273 /* Set focus to first valid input field
274    avoid IExplorer warning about hidding or disabled fields
275  */
276 function focus_field()
278         var i     = 0;
279         var e     = 0;
280         var found = false;
281         var element_name = "";
282         var element =null;
284         while(focus_field.arguments[i] && !found){
286                 var tmp = document.getElementsByName(focus_field.arguments[i]);
287                 for(e = 0 ; e < tmp.length ; e ++ ){
289                         if(isVisible(tmp[e])){
290                                 found = true;
291                                 element = tmp[e];
292                                 break;
293                         }
294                 }
295                 i++;
296         }
298         if(element && found){
299                 element.blur();
300                 element.focus();
301         }
305 /*  This function pops up messages from message queue 
306     All messages are hidden in html output (style='display:none;').
307     This function makes single messages visible till there are no more dialogs queued.
309     hidden inputs: 
310     current_msg_dialogs         - Currently visible dialog
311     closed_msg_dialogs          - IDs of already closed dialogs 
312     pending_msg_dialogs         - Queued dialog IDs. 
313  */
314 function next_msg_dialog()
316         var s_pending = "";
317         var a_pending = new Array();
318         var i_id                        = 0;
319         var i                                   = 0;
320         var tmp                         = "";
321         var ele                         = null;
322         var ele2                        = null;
323         var cur_id              = "";
325         if(document.getElementById('current_msg_dialogs')){
326                 cur_id = document.getElementById('current_msg_dialogs').value;
327                 if(cur_id != ""){
328                         ele = document.getElementById('e_layer' + cur_id);
329                         ele.onmousemove = "";
330                         $('e_layer' + cur_id).hide();
331                         document.getElementById('closed_msg_dialogs').value += "," + cur_id;
332                         document.getElementById('current_msg_dialogs').value= ""; 
333                 }
334         }
336         if(document.getElementById('pending_msg_dialogs')){
337                 s_pending = document.getElementById('pending_msg_dialogs').value;
338                 a_pending = s_pending.split(",");
339                 if(a_pending.length){
340                         i_id = a_pending.pop();
341                         for (i = 0 ; i < a_pending.length; ++i){
342                                 tmp = tmp + a_pending[i] + ',';
343                         }
344                         tmp = tmp.replace(/,$/g,"");
345                         if(i_id != ""){
346                                 ele = document.getElementById('e_layer' + i_id);
347                                 ele3 = document.getElementById('e_layerTitle' + i_id);
348                                 ele.style.display= 'block'      ;
349                                 document.getElementById('pending_msg_dialogs').value= tmp;
350                                 document.getElementById('current_msg_dialogs').value= i_id;
351                                 ele2 = document.getElementById('e_layer2') ;
352                                 ele3.onmousedown = start_move_div_by_cursor;
353                                 ele2.onmouseup  = stop_move_div_by_cursor;
354                                 ele2.onmousemove = move_div_by_cursor;
355                         }else{
356                                 ele2 = document.getElementById('e_layer2') ;
357                                 ele2.style.display ="none";
358                         }
359                 }
360         }
364 /* Drag & drop for message dialogs */
365 var enable_move_div_by_cursor = false;          // Indicates wheter the div movement is enabled or not 
366 var mouse_x_on_div      = 0;                                                                    // 
367 var mouse_y_on_div      = 0;
368 var div_offset_x        = 0;
369 var div_offset_y        = 0;
371 /* Activates msg_dialog drag & drop
372  * This function is called when clicking on a displayed msg_dialog 
373  */
374 function start_move_div_by_cursor(e)
376         var x = 0; 
377         var y = 0;      
378         var cur_id = 0;
379         var dialog = null;
380         var event = null;
382         /* Get current msg_dialog position
383          */
384         cur_id = document.getElementById('current_msg_dialogs').value;
385         if(cur_id != ""){
386                 dialog = document.getElementById('e_layer' + cur_id);
387                 x = dialog.style.left;
388                 y = dialog.style.top;
389                 x = x.replace(/[^0-9]/g,"");
390                 y = y.replace(/[^0-9]/g,"");
391                 if(!y) y = 1;
392                 if(!x) x = 1;
393         }
395         /* Get mouse position within msg_dialog 
396          */
397         if(window.event){
398                 event = window.event;
399                 if(event.offsetX){
400                         div_offset_x   = event.clientX -x;
401                         div_offset_y   = event.clientY -y;
402                         enable_move_div_by_cursor = true;
403                 }
404         }else if(e){
405                 event = e;
406                 if(event.layerX){
407                         div_offset_x    = event.screenX -x;
408                         div_offset_y    = event.screenY -y;
409                         enable_move_div_by_cursor = true;
410                 }
411         }
415 /* Deactivate msg_dialog movement 
416  */
417 function stop_move_div_by_cursor()
419         mouse_x_on_div = 0;
420         mouse_y_on_div = 0;
421         div_offset_x = 0;
422         div_offset_y = 0;
423         enable_move_div_by_cursor = false;
427 /* Move msg_dialog with cursor */
428 function move_div_by_cursor(e)
430         var event                               = false;
431         var mouse_pos_x         = 0;
432         var mouse_pos_y         = 0;
433         var     cur_div_x = 0;
434         var cur_div_y = 0;
435         var cur_id      = 0;
436         var dialog = null;
439         if(undefined !== enable_move_div_by_cursor && enable_move_div_by_cursor == true){
441                 if(document.getElementById('current_msg_dialogs')){
443                         /* Get mouse position on screen 
444                          */
445                         if(window.event){
446                                 event = window.event;
447                                 mouse_pos_x  =event.clientX;
448                                 mouse_pos_y  =event.clientY;
449                         }else if (e){
450                                 event = e;
451                                 mouse_pos_x  =event.screenX;
452                                 mouse_pos_y  =event.screenY;
453                         }else{
454                                 return;
455                         }
457                         /* Get id of current msg_dialog */
458                         cur_id = document.getElementById('current_msg_dialogs').value;
459                         if(cur_id != ""){
460                                 dialog = document.getElementById('e_layer' + cur_id);
462                                 /* Calculate new position */
463                                 cur_div_x = mouse_pos_x - div_offset_x;
464                                 cur_div_y = mouse_pos_y - div_offset_y;
466                                 /* Ensure that dialog can't be moved out of screen */
467                                 if(cur_div_x < 0 ) cur_div_x = 0
468                                         if(cur_div_y < 0 ) cur_div_y = 0
470                                                 /* Assign new values */
471                                                 dialog.style.left = (cur_div_x ) + "px";
472                                 dialog.style.top  = (cur_div_y ) + "px";
473                         }
474                 }
475         }
479 function isVisible(obj)
481     if (obj == document) return true
483     if (!obj) return false
484     if (!obj.parentNode) return false
485     if (obj.style) {
486         if (obj.style.display == 'none') return false
487         if (obj.style.visibility == 'hidden') return false
488     }
490     //Try the computed style in a standard way
491     if (window.getComputedStyle) {
492         var style = window.getComputedStyle(obj, "")
493         if (style.display == 'none') return false
494         if (style.visibility == 'hidden') return false
495     }
497     //Or get the computed style using IE's silly proprietary way
498     var style = obj.currentStyle
499     if (style) {
500         if (style['display'] == 'none') return false
501         if (style['visibility'] == 'hidden') return false
502     }
504     return isVisible(obj.parentNode)
508 /* Check if capslock is enabled */
509 function capslock(e) {
510     e = (e) ? e : window.event;
512     var charCode = false;
513     if (e.which) {
514         charCode = e.which;
515     } else if (e.keyCode) {
516         charCode = e.keyCode;
517     }
519     var shifton = false;
520     if (e.shiftKey) {
521         shifton = e.shiftKey;
522     } else if (e.modifiers) {
523         shifton = !!(e.modifiers & 4);
524     }
526     if (charCode >= 97 && charCode <= 122 && shifton) {
527         return true;
528     }
530     if (charCode >= 65 && charCode <= 90 && !shifton) {
531         return true;
532     }
534     return false;
539 /* Scroll down the body frame */
540 function scrollDown2()
542     document.body.scrollTop = document.body.scrollHeight - document.body.clientHeight;
546 // Global storage for baseSelector timer
547 var rtimer;
549 // vim:ts=2:syntax