includes/clientside/static/acl.js
changeset 229 97ae8e9d5e29
parent 218 e878bcf0227e
child 326 ab66d6d1f1f4
equal deleted inserted replaced
147:d8156d18ac58 229:97ae8e9d5e29
     1 // Javascript routines for the ACL editor
     1 // Javascript routines for the ACL editor
     2 
     2 
     3 var aclManagerID = 'enano_aclmanager_' + Math.floor(Math.random() * 1000000);
     3 var aclManagerID = 'enano_aclmanager_' + Math.floor(Math.random() * 1000000);
     4 var aclPermList = false;
     4 var aclPermList = false;
     5 var aclDataCache = false;
     5 var aclDataCache = false;
       
     6 
       
     7 // Can be set to true by slow themes (St. Patty)
       
     8 var aclDisableTransitionFX = false;
     6 
     9 
     7 function ajaxOpenACLManager(page_id, namespace)
    10 function ajaxOpenACLManager(page_id, namespace)
     8 {
    11 {
     9   if(IE)
    12   if(IE)
    10     return true;
    13     return true;
    54   ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function() {
    57   ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function() {
    55       if(ajax.readyState == 4)
    58       if(ajax.readyState == 4)
    56       {
    59       {
    57         document.getElementById(aclManagerID+'_main').innerHTML = '';
    60         document.getElementById(aclManagerID+'_main').innerHTML = '';
    58         document.getElementById(aclManagerID + '_back').style.display = 'none';
    61         document.getElementById(aclManagerID + '_back').style.display = 'none';
    59         document.getElementById(aclManagerID + '_next').value = 'Next >';
    62         document.getElementById(aclManagerID + '_next').value = $lang.get('etc_wizard_next');
    60         groups = parseJSON(ajax.responseText);
    63         groups = parseJSON(ajax.responseText);
    61         if ( groups.mode == 'error' )
    64         if ( groups.mode == 'error' )
    62         {
    65         {
    63           alert(groups.error);
    66           alert(groups.error);
    64           killACLManager();
    67           killACLManager();
    99   grpb.checked = 'checked';
   102   grpb.checked = 'checked';
   100   grpb.className = seed;
   103   grpb.className = seed;
   101   grpb.onclick = function() { seed = this.className; document.getElementById('enACL_grpbox_'+seed).style.display = 'block'; document.getElementById('enACL_usrbox_'+seed).style.display = 'none'; };
   104   grpb.onclick = function() { seed = this.className; document.getElementById('enACL_grpbox_'+seed).style.display = 'block'; document.getElementById('enACL_usrbox_'+seed).style.display = 'none'; };
   102   lbl = document.createElement('label');
   105   lbl = document.createElement('label');
   103   lbl.appendChild(grpb);
   106   lbl.appendChild(grpb);
   104   lbl.appendChild(document.createTextNode('A usergroup'));
   107   lbl.appendChild(document.createTextNode($lang.get('acl_radio_usergroup')));
   105   lbl.style.display = 'block';
   108   lbl.style.display = 'block';
   106   span.appendChild(grpsel);
   109   span.appendChild(grpsel);
   107   
   110   
   108   anoninfo = document.createElement('div');
   111   anoninfo = document.createElement('div');
   109   anoninfo.className = 'info-box-mini';
   112   anoninfo.className = 'info-box-mini';
   110   anoninfo.appendChild(document.createTextNode('To edit permissions for guests, select "a specific user", and enter Anonymous as the username.'));
   113   anoninfo.appendChild(document.createTextNode($lang.get('acl_msg_guest_howto')));
   111   span.appendChild(document.createElement('br'));
   114   span.appendChild(document.createElement('br'));
   112   span.appendChild(anoninfo);
   115   span.appendChild(anoninfo);
   113   
   116   
   114   usrb = document.createElement('input');
   117   usrb = document.createElement('input');
   115   usrb.type = 'radio';
   118   usrb.type = 'radio';
   117   usrb.value = '2'; // ACL_TYPE_USER
   120   usrb.value = '2'; // ACL_TYPE_USER
   118   usrb.className = seed;
   121   usrb.className = seed;
   119   usrb.onclick = function() { seed = this.className; document.getElementById('enACL_grpbox_'+seed).style.display = 'none'; document.getElementById('enACL_usrbox_'+seed).style.display = 'block'; };
   122   usrb.onclick = function() { seed = this.className; document.getElementById('enACL_grpbox_'+seed).style.display = 'none'; document.getElementById('enACL_usrbox_'+seed).style.display = 'block'; };
   120   lbl2 = document.createElement('label');
   123   lbl2 = document.createElement('label');
   121   lbl2.appendChild(usrb);
   124   lbl2.appendChild(usrb);
   122   lbl2.appendChild(document.createTextNode('A specific user'));
   125   lbl2.appendChild(document.createTextNode($lang.get('acl_radio_user')));
   123   lbl2.style.display = 'block';
   126   lbl2.style.display = 'block';
   124   
   127   
   125   usrsel = document.createElement('input');
   128   usrsel = document.createElement('input');
   126   usrsel.type = 'text';
   129   usrsel.type = 'text';
   127   usrsel.name = 'username';
   130   usrsel.name = 'username';
   128   usrsel.onkeyup = function() { ajaxUserNameComplete(this); };
   131   usrsel.onkeyup = function() { new AutofillUsername(this, undefined, true); };
   129   usrsel.id = 'userfield_' + aclManagerID;
   132   usrsel.id = 'userfield_' + aclManagerID;
   130   try {
   133   try {
   131     usrsel.setAttribute("autocomplete","off");
   134     usrsel.setAttribute("autocomplete","off");
   132   } catch(e) {};
   135   } catch(e) {};
   133   
   136   
   162       scopeRadioGroup.className = '1048576';
   165       scopeRadioGroup.className = '1048576';
   163       if ( groups.page_groups.length > 0 ) scopeRadioGroup.onclick = function() { var id = 'enACL_pgsel_' + this.className; document.getElementById(id).style.display = 'block'; };
   166       if ( groups.page_groups.length > 0 ) scopeRadioGroup.onclick = function() { var id = 'enACL_pgsel_' + this.className; document.getElementById(id).style.display = 'block'; };
   164     lblPage = document.createElement('label');
   167     lblPage = document.createElement('label');
   165       lblPage.style.display = 'block';
   168       lblPage.style.display = 'block';
   166       lblPage.appendChild(scopeRadioPage);
   169       lblPage.appendChild(scopeRadioPage);
   167       lblPage.appendChild(document.createTextNode('Only this page'));
   170       lblPage.appendChild(document.createTextNode($lang.get('acl_radio_scope_thispage')));
   168     lblGlobal = document.createElement('label');
   171     lblGlobal = document.createElement('label');
   169       lblGlobal.style.display = 'block';
   172       lblGlobal.style.display = 'block';
   170       lblGlobal.appendChild(scopeRadioGlobal);
   173       lblGlobal.appendChild(scopeRadioGlobal);
   171       lblGlobal.appendChild(document.createTextNode('The entire website'));
   174       lblGlobal.appendChild(document.createTextNode($lang.get('acl_radio_scope_wholesite')));
   172     lblGroup = document.createElement('label');
   175     lblGroup = document.createElement('label');
   173       lblGroup.style.display = 'block';
   176       lblGroup.style.display = 'block';
   174       lblGroup.appendChild(scopeRadioGroup);
   177       lblGroup.appendChild(scopeRadioGroup);
   175       lblGroup.appendChild(document.createTextNode('A group of pages'));
   178       lblGroup.appendChild(document.createTextNode($lang.get('acl_radio_scope_pagegroup')));
   176     scopediv1.appendChild(lblPage);
   179     scopediv1.appendChild(lblPage);
   177     scopediv2.appendChild(lblGroup);
   180     scopediv2.appendChild(lblGroup);
   178     scopediv3.appendChild(lblGlobal);
   181     scopediv3.appendChild(lblGlobal);
   179     
   182     
   180     scopedesc = document.createElement('p');
   183     scopedesc = document.createElement('p');
   181     scopedesc.appendChild(document.createTextNode('What should this access rule control?'));
   184     scopedesc.appendChild(document.createTextNode($lang.get('acl_lbl_scope')));
   182     
   185     
   183     scopePGrp = document.createElement('select');
   186     scopePGrp = document.createElement('select');
   184     scopePGrp.style.marginLeft = '13px';
   187     scopePGrp.style.marginLeft = '13px';
   185     scopePGrp.style.display = 'none';
   188     scopePGrp.style.display = 'none';
   186     scopePGrp.id = "enACL_pgsel_1048576";
   189     scopePGrp.id = "enACL_pgsel_1048576";
   214   container.style.margin = 'auto';
   217   container.style.margin = 'auto';
   215   container.style.width = '360px';
   218   container.style.width = '360px';
   216   container.style.paddingTop = '50px';
   219   container.style.paddingTop = '50px';
   217   
   220   
   218   head = document.createElement('h2');
   221   head = document.createElement('h2');
   219   head.appendChild(document.createTextNode('Manage page access'));
   222   head.appendChild(document.createTextNode($lang.get('acl_lbl_welcome_title')));
   220   
   223   
   221   desc = document.createElement('p');
   224   desc = document.createElement('p');
   222   desc.appendChild(document.createTextNode('Please select who should be affected by this access rule.'));
   225   desc.appendChild(document.createTextNode($lang.get('acl_lbl_welcome_body')));
   223   
   226   
   224   container.appendChild(head);
   227   container.appendChild(head);
   225   container.appendChild(desc);
   228   container.appendChild(desc);
   226   container.appendChild(selector);
   229   container.appendChild(selector);
   227   
   230   
   314         {
   317         {
   315           case 'seltarget':
   318           case 'seltarget':
   316             
   319             
   317             // Build the ACL edit form
   320             // Build the ACL edit form
   318             // try {
   321             // try {
   319               act_desc = ( data.type == 'new' ) ? 'Create access rule' : 'Editing permissions';
   322             
   320               target_type_t = ( data.target_type == 1 ) ? 'group' : 'user';
   323               var act_desc = ( data.type == 'new' ) ? $lang.get('acl_lbl_editwin_title_create') : $lang.get('acl_lbl_editwin_title_edit');
   321               target_name_t = data.target_name;
   324               var target_type_t = ( data.target_type == 1 ) ? $lang.get('acl_target_type_group') : $lang.get('acl_target_type_user');
   322               var scope_type = ( data.page_id == false && data.namespace == false ) ? 'this entire site' : ( data.namespace == '__PageGroup' ) ? 'this group of pages' : 'this page';
   325               var target_name_t = data.target_name;
   323               html = '<h2>'+act_desc+'</h2><p>This panel allows you to edit what the '+target_type_t+' "<b>'+target_name_t+'</b>" can do on <b>' + scope_type + '</b>. Unless you set a permission to "Deny", these permissions may be overridden by other rules.</p>';
   326               var scope_type = ( data.page_id == false && data.namespace == false ) ? $lang.get('acl_scope_type_wholesite') : ( data.namespace == '__PageGroup' ) ? $lang.get('acl_scope_type_pagegroup') : $lang.get('acl_scope_type_thispage');
       
   327               
       
   328               html = '<h2>'+act_desc+'</h2>';
       
   329               html += '<p>' + $lang.get('acl_lbl_editwin_body', { target_type: target_type_t, target: target_name_t, scope_type: scope_type }) + '</p>';
   324               parser = new templateParser(data.template.acl_field_begin);
   330               parser = new templateParser(data.template.acl_field_begin);
   325               html += parser.run();
   331               html += parser.run();
   326               
   332               
   327               cls = 'row2';
   333               cls = 'row2';
   328               for(var i in data.acl_types)
   334               for(var i in data.acl_types)
   330                 if(typeof(data.acl_types[i]) == 'number')
   336                 if(typeof(data.acl_types[i]) == 'number')
   331                 {
   337                 {
   332                   cls = ( cls == 'row1' ) ? 'row2' : 'row1';
   338                   cls = ( cls == 'row1' ) ? 'row2' : 'row1';
   333                   p = new templateParser(data.template.acl_field_item);
   339                   p = new templateParser(data.template.acl_field_item);
   334                   vars = new Object();
   340                   vars = new Object();
   335                   vars['FIELD_DESC'] = data.acl_descs[i];
   341                   if ( data.acl_descs[i].match(/^([a-z0-9_]+)$/) )
       
   342                   {
       
   343                     vars['FIELD_DESC'] = $lang.get(data.acl_descs[i]);
       
   344                   }
       
   345                   else
       
   346                   {
       
   347                     vars['FIELD_DESC'] = data.acl_descs[i];
       
   348                   }
   336                   vars['FIELD_DENY_CHECKED'] = '';
   349                   vars['FIELD_DENY_CHECKED'] = '';
   337                   vars['FIELD_DISALLOW_CHECKED'] = '';
   350                   vars['FIELD_DISALLOW_CHECKED'] = '';
   338                   vars['FIELD_WIKIMODE_CHECKED'] = '';
   351                   vars['FIELD_WIKIMODE_CHECKED'] = '';
   339                   vars['FIELD_ALLOW_CHECKED'] = '';
   352                   vars['FIELD_ALLOW_CHECKED'] = '';
   340                   vars['FIELD_NAME'] = i;
   353                   vars['FIELD_NAME'] = i;
   362               
   375               
   363               var parser = new templateParser(data.template.acl_field_end);
   376               var parser = new templateParser(data.template.acl_field_end);
   364               html += parser.run();
   377               html += parser.run();
   365               
   378               
   366               if(data.type == 'edit')
   379               if(data.type == 'edit')
   367                 html += '<p id="'+aclManagerID+'_deletelnk" style="text-align: right;"><a href="#delete_acl_rule" onclick="if(confirm(\'Do you really want to delete this rule?\')) __aclDeleteRule(); return false;" style="color: red;">Delete this rule</a></p>';
   380                 html += '<p id="'+aclManagerID+'_deletelnk" style="text-align: right;"><a href="#delete_acl_rule" onclick="if(confirm(\'' + $lang.get('acl_msg_deleterule_confirm') + '\')) __aclDeleteRule(); return false;" style="color: red;">' + $lang.get('acl_lbl_deleterule') + '</a></p>';
   368               
   381               
   369               var main = document.getElementById(aclManagerID + '_main');
   382               var main = document.getElementById(aclManagerID + '_main');
   370               main.innerHTML = html;
   383               main.innerHTML = html;
   371               
   384               
   372               var form = document.getElementById(aclManagerID + '_formobj_id');
   385               var form = document.getElementById(aclManagerID + '_formobj_id');
   378                 alert('modeobj is invalid: '+modeobj);
   391                 alert('modeobj is invalid: '+modeobj);
   379               
   392               
   380               aclPermList = array_keys(data.acl_types);
   393               aclPermList = array_keys(data.acl_types);
   381               
   394               
   382               document.getElementById(aclManagerID + '_back').style.display = 'inline';
   395               document.getElementById(aclManagerID + '_back').style.display = 'inline';
   383               document.getElementById(aclManagerID + '_next').value = 'Save Changes';
   396               document.getElementById(aclManagerID + '_next').value = $lang.get('etc_save_changes');
   384               
   397               
   385             // } catch(e) { alert(e); aclDebug(ajax.responseText); }
   398             // } catch(e) { alert(e); aclDebug(ajax.responseText); }
   386             
   399             
   387             break;
   400             break;
   388           case 'success':
   401           case 'success':
   389             var note = document.createElement('div');
   402             var note = document.createElement('div');
   390             note.className = 'info-box';
   403             note.className = 'info-box';
   391             note.style.marginLeft = '0';
   404             note.style.marginLeft = '0';
   392             var b = document.createElement('b');
   405             var b = document.createElement('b');
   393             b.appendChild(document.createTextNode('Permissions updated'));
   406             b.appendChild(document.createTextNode($lang.get('acl_lbl_save_success_title')));
   394             note.appendChild(b);
   407             note.appendChild(b);
   395             note.appendChild(document.createElement('br'));
   408             note.appendChild(document.createElement('br'));
   396             note.appendChild(document.createTextNode('The permissions for '+data.target_name+' on this page have been updated successfully. If you changed permissions that affect your user account, you may not see changes until you reload the page.'));
   409             note.appendChild(document.createTextNode($lang.get('acl_lbl_save_success_body', { target_name: data.target_name })));
   397             note.appendChild(document.createElement('br'));
   410             note.appendChild(document.createElement('br'));
   398             var a = document.createElement('a');
   411             var a = document.createElement('a');
   399             a.href = 'javascript:void(0);';
   412             a.href = 'javascript:void(0);';
   400             a.onclick = function() { this.parentNode.parentNode.removeChild(this.parentNode); return false; };
   413             a.onclick = function() { this.parentNode.parentNode.removeChild(this.parentNode); return false; };
   401             a.appendChild(document.createTextNode('[ dismiss :'));
   414             a.appendChild(document.createTextNode('[ ' + $lang.get('acl_btn_success_dismiss') + ' :'));
   402             note.appendChild(a);
   415             note.appendChild(a);
   403             var a2 = document.createElement('a');
   416             var a2 = document.createElement('a');
   404             a2.href = 'javascript:void(0);';
   417             a2.href = 'javascript:void(0);';
   405             a2.onclick = function() { killACLManager(); return false; };
   418             a2.onclick = function() { killACLManager(); return false; };
   406             a2.appendChild(document.createTextNode(': close manager ]'));
   419             a2.appendChild(document.createTextNode(': ' + $lang.get('acl_btn_success_close') + ' ]'));
   407             note.appendChild(a2);
   420             note.appendChild(a2);
   408             document.getElementById(aclManagerID + '_main').insertBefore(note, document.getElementById(aclManagerID + '_main').firstChild);
   421             document.getElementById(aclManagerID + '_main').insertBefore(note, document.getElementById(aclManagerID + '_main').firstChild);
   409             if(!document.getElementById(aclManagerID+'_deletelnk'))
   422             if(!document.getElementById(aclManagerID+'_deletelnk'))
   410               document.getElementById(aclManagerID + '_main').innerHTML += '<p id="'+aclManagerID+'_deletelnk" style="text-align: right;"><a href="#delete_acl_rule" onclick="if(confirm(\'Do you really want to delete this rule?\')) __aclDeleteRule(); return false;" style="color: red;">Delete this rule</a></p>';
   423               document.getElementById(aclManagerID + '_main').innerHTML += '<p id="'+aclManagerID+'_deletelnk" style="text-align: right;"><a href="#delete_acl_rule" onclick="if(confirm(\'' + $lang.get('acl_msg_deleterule_confirm') + '\')) __aclDeleteRule(); return false;" style="color: red;">' + $lang.get('acl_lbl_deleterule') + '</a></p>';
   411             //fadeInfoBoxes();
   424             //fadeInfoBoxes();
   412             document.getElementById(aclManagerID+'_main').scrollTop = 0;
   425             document.getElementById(aclManagerID+'_main').scrollTop = 0;
   413             
   426             
   414             aclDataCache.mode = 'save_edit';
   427             aclDataCache.mode = 'save_edit';
   415             break;
   428             break;
   423           ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function() {
   436           ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function() {
   424               if(ajax.readyState == 4)
   437               if(ajax.readyState == 4)
   425               {
   438               {
   426                 document.getElementById(aclManagerID+'_main').innerHTML = '';
   439                 document.getElementById(aclManagerID+'_main').innerHTML = '';
   427                 document.getElementById(aclManagerID + '_back').style.display = 'none';
   440                 document.getElementById(aclManagerID + '_back').style.display = 'none';
   428                 document.getElementById(aclManagerID + '_next').value = 'Next >';
   441                 document.getElementById(aclManagerID + '_next').value = $lang.get('etc_wizard_next');
   429                 var thispage = strToPageID(title);
   442                 var thispage = strToPageID(title);
   430                 groups.page_id = thispage[0];
   443                 groups.page_id = thispage[0];
   431                 groups.namespace = thispage[1];
   444                 groups.namespace = thispage[1];
   432                 __aclBuildSelector(groups);
   445                 __aclBuildSelector(groups);
   433                 
   446                 
   436                 note.style.marginLeft = '0';
   449                 note.style.marginLeft = '0';
   437                 note.style.position = 'absolute';
   450                 note.style.position = 'absolute';
   438                 note.style.width = '558px';
   451                 note.style.width = '558px';
   439                 note.id = 'aclSuccessNotice_' + Math.floor(Math.random() * 100000);
   452                 note.id = 'aclSuccessNotice_' + Math.floor(Math.random() * 100000);
   440                 b = document.createElement('b');
   453                 b = document.createElement('b');
   441                 b.appendChild(document.createTextNode('Entry deleted'));
   454                 b.appendChild(document.createTextNode($lang.get('acl_lbl_delete_success_title')));
   442                 note.appendChild(b);
   455                 note.appendChild(b);
   443                 note.appendChild(document.createElement('br'));
   456                 note.appendChild(document.createElement('br'));
   444                 note.appendChild(document.createTextNode('The access rules for '+aclDataCache.target_name+' on this page have been deleted.'));
   457                 note.appendChild(document.createTextNode($lang.get('acl_lbl_delete_success_title', { target_name: aclDataCache.target_name })));
   445                 note.appendChild(document.createElement('br'));
   458                 note.appendChild(document.createElement('br'));
   446                 a = document.createElement('a');
   459                 a = document.createElement('a');
   447                 a.href = '#';
   460                 a.href = '#';
   448                 a.onclick = function() { opacity(this.parentNode.id, 100, 0, 1000); setTimeout('var div = document.getElementById("' + this.parentNode.id + '"); div.parentNode.removeChild(div);', 1100); return false; };
   461                 a.onclick = function() { opacity(this.parentNode.id, 100, 0, 1000); setTimeout('var div = document.getElementById("' + this.parentNode.id + '"); div.parentNode.removeChild(div);', 1100); return false; };
   449                 a.appendChild(document.createTextNode('[ dismiss :'));
   462                 a.appendChild(document.createTextNode('[ ' + $lang.get('acl_btn_success_dismiss') + ' :'));
   450                 note.appendChild(a);
   463                 note.appendChild(a);
   451                 a = document.createElement('a');
   464                 a = document.createElement('a');
   452                 a.href = '#';
   465                 a.href = '#';
   453                 a.onclick = function() { killACLManager(); return false; };
   466                 a.onclick = function() { killACLManager(); return false; };
   454                 a.appendChild(document.createTextNode(': close manager ]'));
   467                 a.appendChild(document.createTextNode(': ' + $lang.get('acl_btn_success_close') + ' ]'));
   455                 note.appendChild(a);
   468                 note.appendChild(a);
   456                 document.getElementById(aclManagerID + '_main').insertBefore(note, document.getElementById(aclManagerID + '_main').firstChild);
   469                 document.getElementById(aclManagerID + '_main').insertBefore(note, document.getElementById(aclManagerID + '_main').firstChild);
   457                 //fadeInfoBoxes();
   470                 //fadeInfoBoxes();
   458                 
   471                 
   459               }
   472               }
   492   return select;
   505   return select;
   493 }
   506 }
   494 
   507 
   495 function __aclBuildWizardWindow()
   508 function __aclBuildWizardWindow()
   496 {
   509 {
   497   darken();
   510   darken(aclDisableTransitionFX);
   498   box = document.createElement('div');
   511   box = document.createElement('div');
   499   box.style.width = '640px'
   512   box.style.width = '640px'
   500   box.style.height = '440px';
   513   box.style.height = '440px';
   501   box.style.position = 'fixed';
   514   box.style.position = 'fixed';
   502   width = getWidth();
   515   width = getWidth();
   537   form.name = aclManagerID + '_formobj';
   550   form.name = aclManagerID + '_formobj';
   538   form.id   = aclManagerID + '_formobj_id';
   551   form.id   = aclManagerID + '_formobj_id';
   539   
   552   
   540   back = document.createElement('input');
   553   back = document.createElement('input');
   541   back.type = 'button';
   554   back.type = 'button';
   542   back.value = '< Back';
   555   back.value = $lang.get('etc_wizard_back');
   543   back.style.fontWeight = 'normal';
   556   back.style.fontWeight = 'normal';
   544   back.onclick = function() { ajaxACLSwitchToSelector(); return false; };
   557   back.onclick = function() { ajaxACLSwitchToSelector(); return false; };
   545   back.style.display = 'none';
   558   back.style.display = 'none';
   546   back.id = aclManagerID + '_back';
   559   back.id = aclManagerID + '_back';
   547   
   560   
   548   saver = document.createElement('input');
   561   saver = document.createElement('input');
   549   saver.type = 'submit';
   562   saver.type = 'submit';
   550   saver.value = 'Next >';
   563   saver.value = $lang.get('etc_wizard_next');
   551   saver.style.fontWeight = 'bold';
   564   saver.style.fontWeight = 'bold';
   552   saver.id = aclManagerID + '_next';
   565   saver.id = aclManagerID + '_next';
   553   
   566   
   554   closer = document.createElement('input');
   567   closer = document.createElement('input');
   555   closer.type = 'button';
   568   closer.type = 'button';
   556   closer.value = 'Cancel Changes';
   569   closer.value = $lang.get('etc_cancel_changes');
   557   closer.onclick = function() { if(!confirm('Do you really want to close the ACL manager?')) return false; killACLManager(); return false; }
   570   closer.onclick = function() { if(!confirm($lang.get('acl_msg_closeacl_confirm'))) return false; killACLManager(); return false; }
   558   
   571   
   559   spacer1 = document.createTextNode('  ');
   572   spacer1 = document.createTextNode('  ');
   560   spacer2 = document.createTextNode('  ');
   573   spacer2 = document.createTextNode('  ');
   561   
   574   
   562   panel.appendChild(back);
   575   panel.appendChild(back);
   568   form.appendChild(panel);
   581   form.appendChild(panel);
   569   box.appendChild(form);
   582   box.appendChild(form);
   570   
   583   
   571   body = document.getElementsByTagName('body')[0];
   584   body = document.getElementsByTagName('body')[0];
   572   body.appendChild(box);
   585   body.appendChild(box);
   573   setTimeout("document.getElementById('"+aclManagerID+"').style.display = 'block'; opacity('"+aclManagerID+"', 0, 100, 500); opacity('"+aclManagerID + '_panel'+"', 0, 100, 500);", 1000);
   586   if ( aclDisableTransitionFX )
       
   587   {
       
   588     document.getElementById(aclManagerID).style.display = 'block';
       
   589     changeOpac(100, aclManagerID);
       
   590     changeOpac(100, aclManagerID + '_panel');
       
   591   }
       
   592   else
       
   593   {
       
   594     setTimeout("document.getElementById('"+aclManagerID+"').style.display = 'block'; opacity('"+aclManagerID+"', 0, 100, 500); opacity('"+aclManagerID + '_panel'+"', 0, 100, 500);", 1000);
       
   595   }
   574 }
   596 }
   575 
   597 
   576 function killACLManager()
   598 function killACLManager()
   577 {
   599 {
   578   el = document.getElementById(aclManagerID);
   600   el = document.getElementById(aclManagerID);
   579   if(el)
   601   if(el)
   580   {
   602   {
   581     opacity(aclManagerID, 100, 0, 500);
   603     if ( aclDisableTransitionFX )
   582     setTimeout('var el = document.getElementById(aclManagerID); el.parentNode.removeChild(el); enlighten();', 750);
   604     {
       
   605       enlighten(true);
       
   606       el.parentNode.removeChild(el);
       
   607     }
       
   608     else
       
   609     {
       
   610       opacity(aclManagerID, 100, 0, 500);
       
   611       setTimeout('var el = document.getElementById(aclManagerID); el.parentNode.removeChild(el); enlighten();', 750);
       
   612     }
   583   }
   613   }
   584 }
   614 }
   585 
   615 
   586 function __aclSubmitManager(form)
   616 function __aclSubmitManager(form)
   587 {
   617 {
   602       break;
   632       break;
   603     case 'seltarget':
   633     case 'seltarget':
   604       var target_type = parseInt(getRadioState(thefrm, 'target_type', ['1', '2']));
   634       var target_type = parseInt(getRadioState(thefrm, 'target_type', ['1', '2']));
   605       if(isNaN(target_type))
   635       if(isNaN(target_type))
   606       {
   636       {
   607         alert('Please select a target type.');
   637         alert($lang.get('acl_err_pleaseselect_targettype'));
   608         return false;
   638         return false;
   609       }
   639       }
   610       target_id = ( target_type == 1 ) ? parseInt(thefrm.group_id.value) : thefrm.username.value;
   640       target_id = ( target_type == 1 ) ? parseInt(thefrm.group_id.value) : thefrm.username.value;
   611       
   641       
   612       obj = { 'mode' : mode, 'target_type' : target_type, 'target_id' : target_id };
   642       obj = { 'mode' : mode, 'target_type' : target_type, 'target_id' : target_id };
   644         obj['page_id'] = aclDataCache.page_id;
   674         obj['page_id'] = aclDataCache.page_id;
   645         obj['namespace'] = aclDataCache.namespace;
   675         obj['namespace'] = aclDataCache.namespace;
   646       }
   676       }
   647       if(target_id == '')
   677       if(target_id == '')
   648       {
   678       {
   649         alert('Please enter a username.');
   679         alert($lang.get('acl_err_pleaseselect_username'));
   650         return false;
   680         return false;
   651       }
   681       }
   652       __aclJSONSubmitAjaxHandler(obj);
   682       __aclJSONSubmitAjaxHandler(obj);
   653       break;
   683       break;
   654     case 'save_edit':
   684     case 'save_edit':