Code

Added blank element. Removed old "new" pic.
[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) {
98         // determines whether Netscape or Internet Explorer
99         k = (Prototype.Browser.Gecko) ? DnEvents.keyCode : window.event.keyCode;
100         if (k == 13) { // enter key pressed
101                 if(typeof(nextfield)!='undefined') {
102                         if(nextfield == 'login') {
103                                 return true; // submit, we finished all fields
104                         } else { // we are not done yet, send focus to next box
105                                 eval('document.mainform.' + nextfield + '.focus()');
106                                 return false;
107                         }
108                 } else {
109                         if(Prototype.Browser.Gecko) {
110                                 if(DnEvents.target.type == 'textarea') {
111                                         return true;
112                                 } else if (DnEvents.target.type != 'submit') {
113                                         // TAB
114                                         var thisfield = document.getElementById(DnEvents.target.id);
115                                         for (i = 0; i < document.forms[0].elements.length; i++) {
116                                                 if(document.forms[0].elements[i].id==thisfield.id) {
117                                                         // Last form element on page?
118                                                         if(i!=document.forms[0].elements.length-1) {
119                                                                 document.forms[0].elements[i+1].focus();
120                                                         }
121                                                 }
122                                         }
123                                         return false;
124                                 } else {
125                                         return true;
126                                 }
127                                 // Check for konqueror
128                         } else if(document.clientWidth) {
129                                 // do nothing ATM
130                         } else {
131                                 if(window.event.srcElement.type == 'textarea') {
132                                         return true;
133                                 } else if (window.event.srcElement.type != 'submit') {
134                                         // TAB
135                                         var thisfield = document.getElementById(window.event.srcElement.id);
136                                         for (i = 0; i < document.forms[0].elements.length; i++) {
137                                                 if(document.forms[0].elements[i].id==thisfield.id) {
138                                                         // Last form element on page?
139                                                         if(i!=document.forms[0].elements.length-1) {
140                                                                 document.forms[0].elements[i+1].focus();
141                                                         }
142                                                 }
143                                         }
144                                         return false;
145                                 } else {
146                                         return true;
147                                 }
148                         }
149                 }
150         } else if (k==9) {
151                 // Tab key pressed
152                 if(Prototype.Browser.Gecko) {
153                         if(DnEvents.target.type == 'textarea') {
154                                 document.getElementById(DnEvents.target.id).value+="\t";
155                                 return false;
156                         }
157                         // Check for konqueror
158                 } else if(document.clientWidth) {
159                         // do nothing ATM
160                 } else {
161                         if(window.event.srcElement.type == 'textarea') {
162                                 document.getElementById(window.event.srcElement.id).value+="\t";
163                                 return false;
164                         }
165                 }
166         }
169 function changeState() {
170         for (var i = 0; i < arguments.length; i++) { 
171                 var element = $(arguments[i]); 
172                 if (element.hasAttribute('disabled')) { 
173                         element.removeAttribute('disabled'); 
174                 } else { 
175                         element.setAttribute('disabled', 'disabled'); 
176                 } 
177         } 
180 function changeSelectState(triggerField, myField) {
181         if (document.getElementById(triggerField).value != 2){
182                 document.getElementById(myField).disabled= true;
183         } else {
184                 document.getElementById(myField).disabled= false;
185         }
188 function changeSubselectState(triggerField, myField) {
189         if (document.getElementById(triggerField).checked == true){
190                 document.getElementById(myField).disabled= false;
191         } else {
192                 document.getElementById(myField).disabled= true;
193         }
196 function changeTripleSelectState(firstTriggerField, secondTriggerField, myField) {
197         if (
198                         document.getElementById(firstTriggerField).checked == true &&
199                         document.getElementById(secondTriggerField).checked == true){
200                 document.getElementById(myField).disabled= false;
201         } else {
202                 document.getElementById(myField).disabled= true;
203         }
206 <!-- Second field must be non-checked -->
207 function changeTripleSelectState_2nd_neg(firstTriggerField, secondTriggerField, myField) {
208         if (
209                         document.getElementById(firstTriggerField).checked == true &&
210                         document.getElementById(secondTriggerField).checked == false){
211                 document.getElementById(myField).disabled= false;
212         } else {
213                 document.getElementById(myField).disabled= true;
214         }
217 // work together to analyze keystrokes
218 if (Prototype.Browser.Gecko){
219         window.onkeypress= keyHandler;
220 } else {
221         document.onkeydown= keyHandler;
225 function popup(target, name) {
226         var mypopup= 
227                 window.open(
228                                 target,
229                                 name,
230                                 "width=600,height=700,location=no,toolbar=no,directories=no,menubar=no,status=no,scrollbars=yes"
231                            );
232         mypopup.focus();
233         return false;
236 function js_check(form) {
237         form.javascript.value = 'true';
240 function divGOsa_toggle(element) {
241         var cell;
242         var cellname="tr_"+(element);
244         if (Prototype.Browser.Gecko) {
245                 document.poppedLayer = document.getElementById(element);
246                 cell= document.getElementById(cellname);
248                 if (document.poppedLayer.style.visibility == "visible") {
249                         $(element).hide();
250                         cell.style.height="0px";
251                         document.poppedLayer.style.height="0px";
252                 } else {
253                         $(element).show();
254                         document.poppedLayer.style.height="";
255                         if(document.defaultView) {
256                                 cell.style.height=document.defaultView.getComputedStyle(document.poppedLayer,"").getPropertyValue('height');
257                         }
258                 }
259         } else if (Prototype.Browser.IE) {
260                 document.poppedLayer = document.getElementById(element);
261                 cell= document.getElementById(cellname);
262                 if (document.poppedLayer.style.visibility == "visible") {
263                         $(element).hide();
264                         cell.style.height="0px";
265                         document.poppedLayer.style.height="0px";
266                         document.poppedLayer.style.position="absolute";
267                 } else {
268                         $(element).show();
269                         cell.style.height="";
270                         document.poppedLayer.style.height="";
271                         document.poppedLayer.style.position="relative";
272                 }
273         }
276 function resizeHandler (e) {
277         if (!e) e=window.event;
278         if (document.getElementById("menucell") && document.getElementById("d_scrollbody")) {
279                 var inner_height= window.innerHeight;
280                 var min_height= 450;
281                 var px_height= min_height;
282                 var suggested= px_height;
284                 // document.defaultView allows access to the rendered size of elements and should be supported by modern browsers
285                 if(document.defaultView) {
286                         var menu_height= 0;
287                         if (document.getElementById("d_height")){
288                                 suggested= parseInt(document.getElementById("d_height").value);
289                         } else {
290                                 menu_height=parseInt(document.defaultView.getComputedStyle(document.getElementById("menucell"),"").getPropertyValue('height'));
291                                 // Minimum height for divlist should be the bottom edge of the menu
292                                 min_height= menu_height-197;
293                                 suggested= min_height;
294                                 if((inner_height-230)-suggested>0) {
295                                         suggested= inner_height-230;
296                                 }
298                         }
300                         // IE uses other height specifications
301                 } else if (Prototype.Browser.IE) {
302                         suggested= document.all.menucell.offsetHeight;
303                         offset= absTop(d_scrollbody);
304                         suggested-= offset;
305                         if((inner_height-230)-suggested>0) {
306                                 suggested= inner_height-230;
307                         }
308                 }
310                 /* Reduce height if a list footer is set */
311                 if(document.getElementById("t_scrollfoot")){
312                         suggested = suggested -20;
313                 }
315                 if (!document.getElementById("list_workaround")) {
316                         document.getElementById("d_scrollbody").style.height=suggested+"px";
317                 } else {
318                         if (!Prototype.Browser.IE) {
319                                 current_height= parseInt(document.defaultView.getComputedStyle(document.getElementById("t_nscrollbody"),"").getPropertyValue('height'));
320                                 if (current_height < menu_height) {
321                                         document.getElementById("d_scrollbody").style.height=suggested+20+"px";
322                                 }
323                         }
324                 }
325                 if (document.getElementById("t_nscrollbody")) {
326                         document.getElementById("t_nscrollbody").style.height=(suggested-22)+"px";
327                 }
328         }
329         return true;
332 function absTop(e) {
333         return (e.offsetParent)?e.offsetTop+absTop(e.offsetParent) : e.offsetTop;
336 /* Set focus to first valid input field
337    avoid IExplorer warning about hidding or disabled fields
338  */
339 function focus_field()
341         var i     = 0;
342         var e     = 0;
343         var found = false;
344         var element_name = "";
345         var element =null;
347         while(focus_field.arguments[i] && !found){
349                 var tmp = document.getElementsByName(focus_field.arguments[i]);
350                 for(e = 0 ; e < tmp.length ; e ++ ){
352                         if(isVisible(tmp[e])){
353                                 found = true;
354                                 element = tmp[e];
355                                 break;
356                         }
357                 }
358                 i++;
359         }
361         if(element && found){
362                 element.blur();
363                 element.focus();
364         }
368 /*  This function pops up messages from message queue 
369     All messages are hidden in html output (style='display:none;').
370     This function makes single messages visible till there are no more dialogs queued.
372     hidden inputs: 
373     current_msg_dialogs         - Currently visible dialog
374     closed_msg_dialogs          - IDs of already closed dialogs 
375     pending_msg_dialogs         - Queued dialog IDs. 
376  */
377 function next_msg_dialog()
379         var s_pending = "";
380         var a_pending = new Array();
381         var i_id                        = 0;
382         var i                                   = 0;
383         var tmp                         = "";
384         var ele                         = null;
385         var ele2                        = null;
386         var cur_id              = "";
388         if(document.getElementById('current_msg_dialogs')){
389                 cur_id = document.getElementById('current_msg_dialogs').value;
390                 if(cur_id != ""){
391                         ele = document.getElementById('e_layer' + cur_id);
392                         ele.onmousemove = "";
393                         $('e_layer' + cur_id).hide();
394                         document.getElementById('closed_msg_dialogs').value += "," + cur_id;
395                         document.getElementById('current_msg_dialogs').value= ""; 
396                 }
397         }
399         if(document.getElementById('pending_msg_dialogs')){
400                 s_pending = document.getElementById('pending_msg_dialogs').value;
401                 a_pending = s_pending.split(",");
402                 if(a_pending.length){
403                         i_id = a_pending.pop();
404                         for (i = 0 ; i < a_pending.length; ++i){
405                                 tmp = tmp + a_pending[i] + ',';
406                         }
407                         tmp = tmp.replace(/,$/g,"");
408                         if(i_id != ""){
409                                 ele = document.getElementById('e_layer' + i_id);
410                                 ele3 = document.getElementById('e_layerTitle' + i_id);
411                                 ele.style.display= 'block'      ;
412                                 document.getElementById('pending_msg_dialogs').value= tmp;
413                                 document.getElementById('current_msg_dialogs').value= i_id;
414                                 ele2 = document.getElementById('e_layer2') ;
415                                 ele3.onmousedown = start_move_div_by_cursor;
416                                 ele2.onmouseup  = stop_move_div_by_cursor;
417                                 ele2.onmousemove = move_div_by_cursor;
418                         }else{
419                                 ele2 = document.getElementById('e_layer2') ;
420                                 ele2.style.display ="none";
421                         }
422                 }
423         }
427 /* Drag & drop for message dialogs */
428 var enable_move_div_by_cursor = false;          // Indicates wheter the div movement is enabled or not 
429 var mouse_x_on_div      = 0;                                                                    // 
430 var mouse_y_on_div      = 0;
431 var div_offset_x        = 0;
432 var div_offset_y        = 0;
434 /* Activates msg_dialog drag & drop
435  * This function is called when clicking on a displayed msg_dialog 
436  */
437 function start_move_div_by_cursor(e)
439         var x = 0; 
440         var y = 0;      
441         var cur_id = 0;
442         var dialog = null;
443         var event = null;
445         /* Get current msg_dialog position
446          */
447         cur_id = document.getElementById('current_msg_dialogs').value;
448         if(cur_id != ""){
449                 dialog = document.getElementById('e_layer' + cur_id);
450                 x = dialog.style.left;
451                 y = dialog.style.top;
452                 x = x.replace(/[^0-9]/g,"");
453                 y = y.replace(/[^0-9]/g,"");
454                 if(!y) y = 1;
455                 if(!x) x = 1;
456         }
458         /* Get mouse position within msg_dialog 
459          */
460         if(window.event){
461                 event = window.event;
462                 if(event.offsetX){
463                         div_offset_x   = event.clientX -x;
464                         div_offset_y   = event.clientY -y;
465                         enable_move_div_by_cursor = true;
466                 }
467         }else if(e){
468                 event = e;
469                 if(event.layerX){
470                         div_offset_x    = event.screenX -x;
471                         div_offset_y    = event.screenY -y;
472                         enable_move_div_by_cursor = true;
473                 }
474         }
478 /* Deactivate msg_dialog movement 
479  */
480 function stop_move_div_by_cursor()
482         mouse_x_on_div = 0;
483         mouse_y_on_div = 0;
484         div_offset_x = 0;
485         div_offset_y = 0;
486         enable_move_div_by_cursor = false;
490 /* Move msg_dialog with cursor */
491 function move_div_by_cursor(e)
493         var event                               = false;
494         var mouse_pos_x         = 0;
495         var mouse_pos_y         = 0;
496         var     cur_div_x = 0;
497         var cur_div_y = 0;
498         var cur_id      = 0;
499         var dialog = null;
502         if(undefined !== enable_move_div_by_cursor && enable_move_div_by_cursor == true){
504                 if(document.getElementById('current_msg_dialogs')){
506                         /* Get mouse position on screen 
507                          */
508                         if(window.event){
509                                 event = window.event;
510                                 mouse_pos_x  =event.clientX;
511                                 mouse_pos_y  =event.clientY;
512                         }else if (e){
513                                 event = e;
514                                 mouse_pos_x  =event.screenX;
515                                 mouse_pos_y  =event.screenY;
516                         }else{
517                                 return;
518                         }
520                         /* Get id of current msg_dialog */
521                         cur_id = document.getElementById('current_msg_dialogs').value;
522                         if(cur_id != ""){
523                                 dialog = document.getElementById('e_layer' + cur_id);
525                                 /* Calculate new position */
526                                 cur_div_x = mouse_pos_x - div_offset_x;
527                                 cur_div_y = mouse_pos_y - div_offset_y;
529                                 /* Ensure that dialog can't be moved out of screen */
530                                 if(cur_div_x < 0 ) cur_div_x = 0
531                                         if(cur_div_y < 0 ) cur_div_y = 0
533                                                 /* Assign new values */
534                                                 dialog.style.left = (cur_div_x ) + "px";
535                                 dialog.style.top  = (cur_div_y ) + "px";
536                         }
537                 }
538         }
542 function isVisible(obj)
544     if (obj == document) return true
546     if (!obj) return false
547     if (!obj.parentNode) return false
548     if (obj.style) {
549         if (obj.style.display == 'none') return false
550         if (obj.style.visibility == 'hidden') return false
551     }
553     //Try the computed style in a standard way
554     if (window.getComputedStyle) {
555         var style = window.getComputedStyle(obj, "")
556         if (style.display == 'none') return false
557         if (style.visibility == 'hidden') return false
558     }
560     //Or get the computed style using IE's silly proprietary way
561     var style = obj.currentStyle
562     if (style) {
563         if (style['display'] == 'none') return false
564         if (style['visibility'] == 'hidden') return false
565     }
567     return isVisible(obj.parentNode)
572 // Global storage for baseSelector timer
573 var rtimer;
575 // vim:ts=2:syntax