includes/clientside/static/acl.js
changeset 1227 bdac73ed481e
parent 1058 c4b057708436
--- a/includes/clientside/static/acl.js	Sun Mar 28 21:49:26 2010 -0400
+++ b/includes/clientside/static/acl.js	Sun Mar 28 23:10:46 2010 -0400
@@ -6,1836 +6,1836 @@
 
 function ajaxOpenACLManager(page_id, namespace)
 {
-  // touch these to make them available to child functions
-  void(page_id);
-  void(namespace);
-  
-  // require re-auth
-  if ( auth_level <= USER_LEVEL_MEMBER )
-  {
-    load_component(['login', 'fadefilter', 'flyin', 'jquery', 'jquery-ui', 'crypto', 'messagebox']);
-    ajaxDynamicReauth(function(key)
-      {
-        ajaxOpenACLManager(page_id, namespace);
-      }, user_level);
-    
-    return false;
-  }
-  
-  load_component(['l10n', 'messagebox', 'fadefilter', 'template-compiler', 'jquery', 'jquery-ui', 'autofill']);
-  
-  if(!page_id || !namespace)
-  {
-    var data = strToPageID(title);
-    var page_id = data[0];
-    var namespace = data[1];
-  }
-  var params = {
-      'mode' : 'listgroups',
-      'page_id' : page_id,
-      'namespace' : namespace
-    };
-  params = toJSONString(params);
-  params = ajaxEscape(params);
-  ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
-      if ( ajax.readyState == 4 && ajax.status == 200 )
-      {
-        var response = String(ajax.responseText + '');
-        if ( !check_json_response(response) )
-        {
-          handle_invalid_json(ajax.responseText);
-          return false;
-        }
-        try {
-          var groups = parseJSON(ajax.responseText);
-        } catch(e) {
-          handle_invalid_json(ajax.responseText);
-        }
-        __aclBuildWizardWindow();
-        if ( groups.mode == 'error' )
-        {
-          alert(groups.error);
-          killACLManager();
-          return false;
-        }
-        aclDataCache = groups;
-        __aclBuildSelector(groups);
-      }
-    }, true);
-  return false;
+	// touch these to make them available to child functions
+	void(page_id);
+	void(namespace);
+	
+	// require re-auth
+	if ( auth_level <= USER_LEVEL_MEMBER )
+	{
+		load_component(['login', 'fadefilter', 'flyin', 'jquery', 'jquery-ui', 'crypto', 'messagebox']);
+		ajaxDynamicReauth(function(key)
+			{
+				ajaxOpenACLManager(page_id, namespace);
+			}, user_level);
+		
+		return false;
+	}
+	
+	load_component(['l10n', 'messagebox', 'fadefilter', 'template-compiler', 'jquery', 'jquery-ui', 'autofill']);
+	
+	if(!page_id || !namespace)
+	{
+		var data = strToPageID(title);
+		var page_id = data[0];
+		var namespace = data[1];
+	}
+	var params = {
+			'mode' : 'listgroups',
+			'page_id' : page_id,
+			'namespace' : namespace
+		};
+	params = toJSONString(params);
+	params = ajaxEscape(params);
+	ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
+			if ( ajax.readyState == 4 && ajax.status == 200 )
+			{
+				var response = String(ajax.responseText + '');
+				if ( !check_json_response(response) )
+				{
+					handle_invalid_json(ajax.responseText);
+					return false;
+				}
+				try {
+					var groups = parseJSON(ajax.responseText);
+				} catch(e) {
+					handle_invalid_json(ajax.responseText);
+				}
+				__aclBuildWizardWindow();
+				if ( groups.mode == 'error' )
+				{
+					alert(groups.error);
+					killACLManager();
+					return false;
+				}
+				aclDataCache = groups;
+				__aclBuildSelector(groups);
+			}
+		}, true);
+	return false;
 }
 
 function ajaxOpenDirectACLRule(rule_id)
 {
-  load_component(['l10n', 'messagebox', 'fadefilter', 'template-compiler', 'autofill']);
-  
-  var params = {
-    target_id: rule_id,
-    mode: 'seltarget_id'
-  };
-  params = ajaxEscape(toJSONString(params));
-  ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
-      if ( ajax.readyState == 4 && ajax.status == 200 )
-      {
-        var response = String(ajax.responseText + '');
-        if ( !check_json_response(response) )
-        {
-          handle_invalid_json(ajax.responseText);
-          return false;
-        }
-        try
-        {
-          response = parseJSON(response);
-        }
-        catch(e)
-        {
-          handle_invalid_json(response);
-        }
-        if ( !document.getElementById(aclManagerID) )
-        {
-          __aclBuildWizardWindow();
-          var main = document.getElementById(aclManagerID + '_main');
-          main.style.padding = '10px';
-        }
-        else
-        {
-          var main = document.getElementById(aclManagerID + '_main');
-          main.style.backgroundImage = 'none';
-        }
-        if ( response.mode == 'error' )
-        {
-          alert(response.error);
-          killACLManager();
-          return false;
-        }
-        aclDataCache = response;
-        aclBuildRuleEditor(response, true);
-      }
-    }, true);
+	load_component(['l10n', 'messagebox', 'fadefilter', 'template-compiler', 'autofill']);
+	
+	var params = {
+		target_id: rule_id,
+		mode: 'seltarget_id'
+	};
+	params = ajaxEscape(toJSONString(params));
+	ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
+			if ( ajax.readyState == 4 && ajax.status == 200 )
+			{
+				var response = String(ajax.responseText + '');
+				if ( !check_json_response(response) )
+				{
+					handle_invalid_json(ajax.responseText);
+					return false;
+				}
+				try
+				{
+					response = parseJSON(response);
+				}
+				catch(e)
+				{
+					handle_invalid_json(response);
+				}
+				if ( !document.getElementById(aclManagerID) )
+				{
+					__aclBuildWizardWindow();
+					var main = document.getElementById(aclManagerID + '_main');
+					main.style.padding = '10px';
+				}
+				else
+				{
+					var main = document.getElementById(aclManagerID + '_main');
+					main.style.backgroundImage = 'none';
+				}
+				if ( response.mode == 'error' )
+				{
+					alert(response.error);
+					killACLManager();
+					return false;
+				}
+				aclDataCache = response;
+				aclBuildRuleEditor(response, true);
+			}
+		}, true);
 }
 
 function ajaxACLSwitchToSelector()
 {
-  params = {
-      'mode' : 'listgroups'
-    };
-  if ( aclDataCache.page_id && aclDataCache.namespace )
-  {
-    params.page_id   = aclDataCache.page_id;
-    params.namespace = aclDataCache.namespace;
-  }
-  params = toJSONString(params);
-  params = ajaxEscape(params);
-  ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
-      if ( ajax.readyState == 4 && ajax.status == 200 )
-      {
-        document.getElementById(aclManagerID+'_main').innerHTML = '';
-        document.getElementById(aclManagerID + '_back').style.display = 'none';
-        document.getElementById(aclManagerID + '_next').value = $lang.get('etc_wizard_next');
-        var groups = parseJSON(ajax.responseText);
-        if ( groups.mode == 'error' )
-        {
-          alert(groups.error);
-          killACLManager();
-          return false;
-        }
-        aclDataCache = groups;
-        thispage = strToPageID(title);
-        groups.page_id = thispage[0];
-        groups.namespace = thispage[1];
-        __aclBuildSelector(groups);
-      }
-    }, true);
+	params = {
+			'mode' : 'listgroups'
+		};
+	if ( aclDataCache.page_id && aclDataCache.namespace )
+	{
+		params.page_id   = aclDataCache.page_id;
+		params.namespace = aclDataCache.namespace;
+	}
+	params = toJSONString(params);
+	params = ajaxEscape(params);
+	ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
+			if ( ajax.readyState == 4 && ajax.status == 200 )
+			{
+				document.getElementById(aclManagerID+'_main').innerHTML = '';
+				document.getElementById(aclManagerID + '_back').style.display = 'none';
+				document.getElementById(aclManagerID + '_next').value = $lang.get('etc_wizard_next');
+				var groups = parseJSON(ajax.responseText);
+				if ( groups.mode == 'error' )
+				{
+					alert(groups.error);
+					killACLManager();
+					return false;
+				}
+				aclDataCache = groups;
+				thispage = strToPageID(title);
+				groups.page_id = thispage[0];
+				groups.namespace = thispage[1];
+				__aclBuildSelector(groups);
+			}
+		}, true);
 }
 
 function __aclBuildSelector(groups)
 {
-  thispage = strToPageID(title);
-  do_scopesel = ( thispage[0] == groups.page_id && thispage[1] == groups.namespace );
-  
-  document.getElementById(aclManagerID + '_next').style.display = 'inline';
-  
-  seed = Math.floor(Math.random() * 1000000);
-        
-  main = document.getElementById(aclManagerID + '_main');
-  main.style.padding = '10px';
-  main.style.backgroundImage = 'none';
-  
-  // the "edit existing" button
-  var editbtn_wrapper = document.createElement('div');
-  editbtn_wrapper.style.styleFloat = 'right';
-  editbtn_wrapper.style.cssFloat = 'right';
-  editbtn_wrapper.style.fontSize = 'smaller';
-  var editbtn = document.createElement('a');
-  editbtn.href = '#';
-  editbtn.innerHTML = $lang.get('acl_btn_show_existing');
-  editbtn_wrapper.appendChild(editbtn);
-  
-  // tracer button
-  var tracebtn = document.createElement('a');
-  tracebtn.href = '#';
-  tracebtn.innerHTML = $lang.get('acl_btn_view_effective');
-  editbtn_wrapper.appendChild(document.createElement('br'));
-  editbtn_wrapper.appendChild(tracebtn);
-  
-  main.appendChild(editbtn_wrapper);
-  
-  editbtn.onclick = function()
-  {
-    aclSetViewListExisting();
-    return false;
-  }
-  
-  tracebtn.onclick = function()
-  {
-    aclSetViewDebugTools();
-    return false;
-  }
-  
-  selector = document.createElement('div');
-  
-  var grpsel = __aclBuildGroupsHTML(groups);
-  grpsel.name = 'group_id';
-  
-  span = document.createElement('div');
-  span.id = "enACL_grpbox_"+seed+"";
-  
-  // Build the selector
-  grpb = document.createElement('input');
-  grpb.type = 'radio';
-  grpb.name  = 'target_type';
-  grpb.value = '1'; // ACL_TYPE_GROUP
-  grpb.checked = 'checked';
-  grpb.className = seed;
-  grpb.onclick = function() { seed = this.className; document.getElementById('enACL_grpbox_'+seed).style.display = 'block'; document.getElementById('enACL_usrbox_'+seed).style.display = 'none'; };
-  lbl = document.createElement('label');
-  lbl.appendChild(grpb);
-  lbl.appendChild(document.createTextNode($lang.get('acl_radio_usergroup')));
-  lbl.style.display = 'block';
-  span.appendChild(grpsel);
-  
-  anoninfo = document.createElement('div');
-  anoninfo.className = 'info-box-mini';
-  anoninfo.appendChild(document.createTextNode($lang.get('acl_msg_guest_howto')));
-  span.appendChild(document.createElement('br'));
-  span.appendChild(anoninfo);
-  
-  usrb = document.createElement('input');
-  usrb.type = 'radio';
-  usrb.name  = 'target_type';
-  usrb.value = '2'; // ACL_TYPE_USER
-  usrb.className = seed;
-  usrb.onclick = function() { seed = this.className; document.getElementById('enACL_grpbox_'+seed).style.display = 'none'; document.getElementById('enACL_usrbox_'+seed).style.display = 'block'; };
-  lbl2 = document.createElement('label');
-  lbl2.appendChild(usrb);
-  lbl2.appendChild(document.createTextNode($lang.get('acl_radio_user')));
-  lbl2.style.display = 'block';
-  
-  usrsel = document.createElement('input');
-  usrsel.type = 'text';
-  usrsel.name = 'username';
-  usrsel.className = 'autofill username';
-  usrsel.id = 'userfield_' + aclManagerID;
-  try {
-    usrsel.setAttribute("autocomplete","off");
-  } catch(e) {};
-  
-  span2 = document.createElement('div');
-  span2.id = "enACL_usrbox_"+seed+"";
-  span2.style.display = 'none';
-  span2.appendChild(usrsel);
-  
-  // Scope selector
-  if(do_scopesel)
-  {
-    scopediv1 = document.createElement('div');
-    scopediv2 = document.createElement('div');
-    scopediv3 = document.createElement('div');
-    scopeRadioPage = document.createElement('input');
-      scopeRadioPage.type = 'radio';
-      scopeRadioPage.name = 'scope';
-      scopeRadioPage.value = 'page';
-      scopeRadioPage.checked = 'checked';
-      scopeRadioPage.className = '1048576';
-      if ( groups.page_groups.length > 0 ) scopeRadioPage.onclick = function() { var id = 'enACL_pgsel_' + this.className; document.getElementById(id).style.display = 'none'; };
-    scopeRadioGlobal = document.createElement('input');
-      scopeRadioGlobal.type = 'radio';
-      scopeRadioGlobal.name = 'scope';
-      scopeRadioGlobal.value = 'global';
-      scopeRadioGlobal.className = '1048576';
-      if ( groups.page_groups.length > 0 ) scopeRadioGlobal.onclick = function() { var id = 'enACL_pgsel_' + this.className; document.getElementById(id).style.display = 'none'; };
-    scopeRadioGroup = document.createElement('input');
-      scopeRadioGroup.type = 'radio';
-      scopeRadioGroup.name = 'scope';
-      scopeRadioGroup.value = 'group';
-      scopeRadioGroup.className = '1048576';
-      if ( groups.page_groups.length > 0 ) scopeRadioGroup.onclick = function() { var id = 'enACL_pgsel_' + this.className; document.getElementById(id).style.display = 'block'; };
-    lblPage = document.createElement('label');
-      lblPage.style.display = 'block';
-      lblPage.appendChild(scopeRadioPage);
-      lblPage.appendChild(document.createTextNode($lang.get('acl_radio_scope_thispage')));
-    lblGlobal = document.createElement('label');
-      lblGlobal.style.display = 'block';
-      lblGlobal.appendChild(scopeRadioGlobal);
-      lblGlobal.appendChild(document.createTextNode($lang.get('acl_radio_scope_wholesite')));
-    lblGroup = document.createElement('label');
-      lblGroup.style.display = 'block';
-      lblGroup.appendChild(scopeRadioGroup);
-      lblGroup.appendChild(document.createTextNode($lang.get('acl_radio_scope_pagegroup')));
-    scopediv1.appendChild(lblPage);
-    scopediv2.appendChild(lblGroup);
-    scopediv3.appendChild(lblGlobal);
-    
-    scopedesc = document.createElement('p');
-    scopedesc.appendChild(document.createTextNode($lang.get('acl_lbl_scope')));
-    
-    scopePGrp = document.createElement('select');
-    scopePGrp.style.marginLeft = '13px';
-    scopePGrp.style.display = 'none';
-    scopePGrp.id = "enACL_pgsel_1048576";
-    
-    var opt;
-    for ( var i = 0; i < groups.page_groups.length; i++ )
-    {
-      opt = document.createElement('option');
-      opt.value = groups.page_groups[i].id;
-      opt.appendChild(document.createTextNode(groups.page_groups[i].name));
-      scopePGrp.appendChild(opt);
-    }
-    
-    scopediv2.appendChild(scopePGrp);
-    
-  }
-  
-  // Styles
-  span.style.marginLeft = '13px';
-  span.style.padding = '5px 0';
-  span2.style.marginLeft = '13px';
-  span2.style.padding = '5px 0';
-  
-  selector.appendChild(lbl);
-  selector.appendChild(span);
-  
-  selector.appendChild(lbl2);
-  selector.appendChild(span2);
-  
-  container = document.createElement('div');
-  container.style.margin = 'auto';
-  container.style.width = '360px';
-  container.style.paddingTop = '50px';
-  
-  head = document.createElement('h2');
-  head.appendChild(document.createTextNode($lang.get('acl_lbl_welcome_title')));
-  
-  desc = document.createElement('p');
-  desc.appendChild(document.createTextNode($lang.get('acl_lbl_welcome_body')));
-  
-  container.appendChild(head);
-  container.appendChild(desc);
-  container.appendChild(selector);
-  
-  if(do_scopesel)
-  {
-    container.appendChild(scopedesc);
-    container.appendChild(scopediv1);
-    if ( groups.page_groups.length > 0 )
-    {
-      container.appendChild(scopediv2);
-    }
-    container.appendChild(scopediv3);
-  }
-  
-  main.appendChild(container);
-  
-  var mode = document.createElement('input');
-  mode.name = 'mode';
-  mode.type = 'hidden';
-  mode.id = aclManagerID + '_mode';
-  mode.value = 'seltarget';
-  
-  var theform = document.getElementById(aclManagerID + '_formobj_id');
-  if ( !theform.mode )
-  {
-    theform.appendChild(mode);
-  }
-  else
-  {
-    theform.removeChild(theform.mode);
-    theform.appendChild(mode);
-  }
-  
-  autofill_init_element(usrsel, {
-      allow_anon: true
-    });
+	thispage = strToPageID(title);
+	do_scopesel = ( thispage[0] == groups.page_id && thispage[1] == groups.namespace );
+	
+	document.getElementById(aclManagerID + '_next').style.display = 'inline';
+	
+	seed = Math.floor(Math.random() * 1000000);
+				
+	main = document.getElementById(aclManagerID + '_main');
+	main.style.padding = '10px';
+	main.style.backgroundImage = 'none';
+	
+	// the "edit existing" button
+	var editbtn_wrapper = document.createElement('div');
+	editbtn_wrapper.style.styleFloat = 'right';
+	editbtn_wrapper.style.cssFloat = 'right';
+	editbtn_wrapper.style.fontSize = 'smaller';
+	var editbtn = document.createElement('a');
+	editbtn.href = '#';
+	editbtn.innerHTML = $lang.get('acl_btn_show_existing');
+	editbtn_wrapper.appendChild(editbtn);
+	
+	// tracer button
+	var tracebtn = document.createElement('a');
+	tracebtn.href = '#';
+	tracebtn.innerHTML = $lang.get('acl_btn_view_effective');
+	editbtn_wrapper.appendChild(document.createElement('br'));
+	editbtn_wrapper.appendChild(tracebtn);
+	
+	main.appendChild(editbtn_wrapper);
+	
+	editbtn.onclick = function()
+	{
+		aclSetViewListExisting();
+		return false;
+	}
+	
+	tracebtn.onclick = function()
+	{
+		aclSetViewDebugTools();
+		return false;
+	}
+	
+	selector = document.createElement('div');
+	
+	var grpsel = __aclBuildGroupsHTML(groups);
+	grpsel.name = 'group_id';
+	
+	span = document.createElement('div');
+	span.id = "enACL_grpbox_"+seed+"";
+	
+	// Build the selector
+	grpb = document.createElement('input');
+	grpb.type = 'radio';
+	grpb.name  = 'target_type';
+	grpb.value = '1'; // ACL_TYPE_GROUP
+	grpb.checked = 'checked';
+	grpb.className = seed;
+	grpb.onclick = function() { seed = this.className; document.getElementById('enACL_grpbox_'+seed).style.display = 'block'; document.getElementById('enACL_usrbox_'+seed).style.display = 'none'; };
+	lbl = document.createElement('label');
+	lbl.appendChild(grpb);
+	lbl.appendChild(document.createTextNode($lang.get('acl_radio_usergroup')));
+	lbl.style.display = 'block';
+	span.appendChild(grpsel);
+	
+	anoninfo = document.createElement('div');
+	anoninfo.className = 'info-box-mini';
+	anoninfo.appendChild(document.createTextNode($lang.get('acl_msg_guest_howto')));
+	span.appendChild(document.createElement('br'));
+	span.appendChild(anoninfo);
+	
+	usrb = document.createElement('input');
+	usrb.type = 'radio';
+	usrb.name  = 'target_type';
+	usrb.value = '2'; // ACL_TYPE_USER
+	usrb.className = seed;
+	usrb.onclick = function() { seed = this.className; document.getElementById('enACL_grpbox_'+seed).style.display = 'none'; document.getElementById('enACL_usrbox_'+seed).style.display = 'block'; };
+	lbl2 = document.createElement('label');
+	lbl2.appendChild(usrb);
+	lbl2.appendChild(document.createTextNode($lang.get('acl_radio_user')));
+	lbl2.style.display = 'block';
+	
+	usrsel = document.createElement('input');
+	usrsel.type = 'text';
+	usrsel.name = 'username';
+	usrsel.className = 'autofill username';
+	usrsel.id = 'userfield_' + aclManagerID;
+	try {
+		usrsel.setAttribute("autocomplete","off");
+	} catch(e) {};
+	
+	span2 = document.createElement('div');
+	span2.id = "enACL_usrbox_"+seed+"";
+	span2.style.display = 'none';
+	span2.appendChild(usrsel);
+	
+	// Scope selector
+	if(do_scopesel)
+	{
+		scopediv1 = document.createElement('div');
+		scopediv2 = document.createElement('div');
+		scopediv3 = document.createElement('div');
+		scopeRadioPage = document.createElement('input');
+			scopeRadioPage.type = 'radio';
+			scopeRadioPage.name = 'scope';
+			scopeRadioPage.value = 'page';
+			scopeRadioPage.checked = 'checked';
+			scopeRadioPage.className = '1048576';
+			if ( groups.page_groups.length > 0 ) scopeRadioPage.onclick = function() { var id = 'enACL_pgsel_' + this.className; document.getElementById(id).style.display = 'none'; };
+		scopeRadioGlobal = document.createElement('input');
+			scopeRadioGlobal.type = 'radio';
+			scopeRadioGlobal.name = 'scope';
+			scopeRadioGlobal.value = 'global';
+			scopeRadioGlobal.className = '1048576';
+			if ( groups.page_groups.length > 0 ) scopeRadioGlobal.onclick = function() { var id = 'enACL_pgsel_' + this.className; document.getElementById(id).style.display = 'none'; };
+		scopeRadioGroup = document.createElement('input');
+			scopeRadioGroup.type = 'radio';
+			scopeRadioGroup.name = 'scope';
+			scopeRadioGroup.value = 'group';
+			scopeRadioGroup.className = '1048576';
+			if ( groups.page_groups.length > 0 ) scopeRadioGroup.onclick = function() { var id = 'enACL_pgsel_' + this.className; document.getElementById(id).style.display = 'block'; };
+		lblPage = document.createElement('label');
+			lblPage.style.display = 'block';
+			lblPage.appendChild(scopeRadioPage);
+			lblPage.appendChild(document.createTextNode($lang.get('acl_radio_scope_thispage')));
+		lblGlobal = document.createElement('label');
+			lblGlobal.style.display = 'block';
+			lblGlobal.appendChild(scopeRadioGlobal);
+			lblGlobal.appendChild(document.createTextNode($lang.get('acl_radio_scope_wholesite')));
+		lblGroup = document.createElement('label');
+			lblGroup.style.display = 'block';
+			lblGroup.appendChild(scopeRadioGroup);
+			lblGroup.appendChild(document.createTextNode($lang.get('acl_radio_scope_pagegroup')));
+		scopediv1.appendChild(lblPage);
+		scopediv2.appendChild(lblGroup);
+		scopediv3.appendChild(lblGlobal);
+		
+		scopedesc = document.createElement('p');
+		scopedesc.appendChild(document.createTextNode($lang.get('acl_lbl_scope')));
+		
+		scopePGrp = document.createElement('select');
+		scopePGrp.style.marginLeft = '13px';
+		scopePGrp.style.display = 'none';
+		scopePGrp.id = "enACL_pgsel_1048576";
+		
+		var opt;
+		for ( var i = 0; i < groups.page_groups.length; i++ )
+		{
+			opt = document.createElement('option');
+			opt.value = groups.page_groups[i].id;
+			opt.appendChild(document.createTextNode(groups.page_groups[i].name));
+			scopePGrp.appendChild(opt);
+		}
+		
+		scopediv2.appendChild(scopePGrp);
+		
+	}
+	
+	// Styles
+	span.style.marginLeft = '13px';
+	span.style.padding = '5px 0';
+	span2.style.marginLeft = '13px';
+	span2.style.padding = '5px 0';
+	
+	selector.appendChild(lbl);
+	selector.appendChild(span);
+	
+	selector.appendChild(lbl2);
+	selector.appendChild(span2);
+	
+	container = document.createElement('div');
+	container.style.margin = 'auto';
+	container.style.width = '360px';
+	container.style.paddingTop = '50px';
+	
+	head = document.createElement('h2');
+	head.appendChild(document.createTextNode($lang.get('acl_lbl_welcome_title')));
+	
+	desc = document.createElement('p');
+	desc.appendChild(document.createTextNode($lang.get('acl_lbl_welcome_body')));
+	
+	container.appendChild(head);
+	container.appendChild(desc);
+	container.appendChild(selector);
+	
+	if(do_scopesel)
+	{
+		container.appendChild(scopedesc);
+		container.appendChild(scopediv1);
+		if ( groups.page_groups.length > 0 )
+		{
+			container.appendChild(scopediv2);
+		}
+		container.appendChild(scopediv3);
+	}
+	
+	main.appendChild(container);
+	
+	var mode = document.createElement('input');
+	mode.name = 'mode';
+	mode.type = 'hidden';
+	mode.id = aclManagerID + '_mode';
+	mode.value = 'seltarget';
+	
+	var theform = document.getElementById(aclManagerID + '_formobj_id');
+	if ( !theform.mode )
+	{
+		theform.appendChild(mode);
+	}
+	else
+	{
+		theform.removeChild(theform.mode);
+		theform.appendChild(mode);
+	}
+	
+	autofill_init_element(usrsel, {
+			allow_anon: true
+		});
 }
 
 var aclDebugWin = false;
 
 function aclDebug(text)
 {
-  if(!aclDebugWin)
-    aclDebugWin = pseudoWindowOpen("data:text/html;plain,<html><head><title>debug win</title></head><body><h1>Debug window</h1></body></html>", "aclDebugWin");
-    setTimeout(function() {
-  aclDebugWin.pre = aclDebugWin.document.createElement('pre');
-  aclDebugWin.pre.appendChild(aclDebugWin.document.createTextNode(text));
-  aclDebugWin.b = aclDebugWin.document.getElementsByTagName('body')[0];
-    aclDebugWin.b.appendChild(aclDebugWin.pre);}, 1000);
+	if(!aclDebugWin)
+		aclDebugWin = pseudoWindowOpen("data:text/html;plain,<html><head><title>debug win</title></head><body><h1>Debug window</h1></body></html>", "aclDebugWin");
+		setTimeout(function() {
+	aclDebugWin.pre = aclDebugWin.document.createElement('pre');
+	aclDebugWin.pre.appendChild(aclDebugWin.document.createTextNode(text));
+	aclDebugWin.b = aclDebugWin.document.getElementsByTagName('body')[0];
+		aclDebugWin.b.appendChild(aclDebugWin.pre);}, 1000);
 }
 
 var pseudoWindows = new Object();
 
 function pseudoWindowOpen(url, id)
 {
-  if(pseudoWindows[id])
-  {
-    document.getElementById('pseudowin_ifr_'+id).src = url;
-  }
-  else
-  {
-    win = document.createElement('iframe');
-    win.style.position='fixed';
-    win.style.width = '640px';
-    win.style.height = '480px';
-    win.style.top = '0px';
-    win.style.left = '0px';
-    win.style.zIndex = getHighestZ() + 1;
-    win.style.backgroundColor = '#FFFFFF';
-    win.name = 'pseudo_ifr_'+id;
-    win.id = 'pseudowindow_ifr_'+id;
-    win.src = url;
-    body = document.getElementsByTagName('body')[0];
-    body.appendChild(win);
-  }
-  win_obj = eval("( pseudo_ifr_"+id+" )");
-  return win_obj;
+	if(pseudoWindows[id])
+	{
+		document.getElementById('pseudowin_ifr_'+id).src = url;
+	}
+	else
+	{
+		win = document.createElement('iframe');
+		win.style.position='fixed';
+		win.style.width = '640px';
+		win.style.height = '480px';
+		win.style.top = '0px';
+		win.style.left = '0px';
+		win.style.zIndex = getHighestZ() + 1;
+		win.style.backgroundColor = '#FFFFFF';
+		win.name = 'pseudo_ifr_'+id;
+		win.id = 'pseudowindow_ifr_'+id;
+		win.src = url;
+		body = document.getElementsByTagName('body')[0];
+		body.appendChild(win);
+	}
+	win_obj = eval("( pseudo_ifr_"+id+" )");
+	return win_obj;
 }
 
 function __aclJSONSubmitAjaxHandler(params)
 {
-  params = toJSONString(params);
-  params = ajaxEscape(params);
-  ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
-      if ( ajax.readyState == 4 && ajax.status == 200 )
-      {
-        var response = String(ajax.responseText + '');
-        if ( !check_json_response(response) )
-        {
-          handle_invalid_json(ajax.responseText);
-          return false;
-        }
-        try
-        {
-          var data = parseJSON(ajax.responseText);
-        }
-        catch(e)
-        {
-          handle_invalid_json(ajax.responseText);
-          return false;
-        }
-        aclDataCache = data;
-        switch(data.mode)
-        {
-          case 'seltarget':
-            
-            // Build the ACL edit form
-            aclBuildRuleEditor(data);
-            
-            break;
-          case 'success':
-            var note = document.createElement('div');
-            note.className = 'info-box';
-            note.style.marginLeft = '0';
-            var b = document.createElement('b');
-            b.appendChild(document.createTextNode($lang.get('acl_lbl_save_success_title')));
-            note.appendChild(b);
-            note.appendChild(document.createElement('br'));
-            note.appendChild(document.createTextNode($lang.get('acl_lbl_save_success_body', { target_name: data.target_name })));
-            note.appendChild(document.createElement('br'));
-            
-            /*
-            var a = document.createElement('a');
-            a.href = '#';
-            a.id = aclManagerID + '_btn_dismiss';
-            a.appendChild(document.createTextNode('[ ' + $lang.get('acl_btn_success_dismiss') + ' :'));
-            note.appendChild(a);
-            var a2 = document.createElement('a');
-            a2.href = '#';
-            a.id = aclManagerID + '_btn_close';
-            a2.appendChild(document.createTextNode(': ' + $lang.get('acl_btn_success_close') + ' ]'));
-            note.appendChild(a2);
-            */
-            
-            var a_dismiss = document.createElement('a');
-            a_dismiss.href = '#';
-            a_dismiss.appendChild(document.createTextNode('[ ' + $lang.get('acl_btn_success_dismiss') + ' :'));
-            note.appendChild(a_dismiss);
-            
-            var a_close = document.createElement('a');
-            a_close.href = '#';
-            a_close.appendChild(document.createTextNode(': ' + $lang.get('acl_btn_success_close') + ' ]'));
-            note.appendChild(a_close);
-            
-            document.getElementById(aclManagerID + '_main').insertBefore(note, document.getElementById(aclManagerID + '_main').firstChild);
-            
-            a_dismiss.setAttribute('onclick', 'var parent = this.parentNode.parentNode; parent.removeChild(this.parentNode); return false;');
-            a_close.setAttribute('onclick', 'killACLManager(); return false;');
-            
-            if ( !document.getElementById(aclManagerID+'_deletelnk') )
-            {
-              var p = document.createElement('p');
-              p.innerHTML = '<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.id = aclManagerID + '_deletelnk';
-              p.style.textAlign = 'right';
-              
-              document.getElementById(aclManagerID + '_main').appendChild(p);
-            }
-            
-            document.getElementById(aclManagerID+'_main').scrollTop = 0;
-            document.getElementById(aclManagerID+'_main').style.backgroundImage = 'none';
-                        
-            aclDataCache.mode = 'save_edit';
-            break;
-          case 'delete':
-            
-            params = {
-              'mode' : 'listgroups'
-            };
-          params = toJSONString(params);
-          params = ajaxEscape(params);
-          ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
-              if ( ajax.readyState == 4 && ajax.status == 200 )
-              {
-                document.getElementById(aclManagerID+'_main').innerHTML = '';
-                document.getElementById(aclManagerID + '_back').style.display = 'none';
-                document.getElementById(aclManagerID + '_next').value = $lang.get('etc_wizard_next');
-                ajaxACLSwitchToSelector();
-                
-                // note
-                var note = document.createElement('div');
-                note.className = 'info-box-mini';
-                note.appendChild(document.createTextNode($lang.get('acl_lbl_delete_success')));
-                
-                // button: dismiss note
-                var a_dismiss = document.createElement('a');
-                a_dismiss.href = '#';
-                a_dismiss.onclick = function()
-                {
-                  var p = this.parentNode;
-                  domOpacity(p, 100, 0, 500);
-                  window.setTimeout(function()
-                    {
-                      p.parentNode.removeChild(p);
-                    }, 600);
-                  return false;
-                }
-                a_dismiss.appendChild(document.createTextNode($lang.get('acl_btn_success_dismiss')));
-                note.appendChild(a_dismiss);
-                // add a space
-                note.appendChild(document.createTextNode(' / '));
-                
-                // button: dismiss note
-                var a_close = document.createElement('a');
-                a_close.href = '#';
-                a_close.onclick = function()
-                {
-                  killACLManager();
-                  return false;
-                }
-                a_close.appendChild(document.createTextNode($lang.get('acl_btn_success_close')));
-                note.appendChild(a_close);
-                
-                // style note
-                domObjChangeOpac(note, 0);
-                note.style.position = 'absolute';
-                // icon padding L + icon padding R + icon width + right padding + border width L + border width R
-                note.style.width = ($dynano(aclManagerID + '_main').Width() - ( 5 + 5 + 16 + 4 + 1 + 1 )) + 'px';
-                
-                // make tangible, then calculate height and position right above button panel
-                var panel = document.getElementById(aclManagerID + '_panel');
-                panel.parentNode.parentNode.appendChild(note);
-                note.style.top = '401px';
-                note.style.left = '0px';
-                
-                opacity(note, 0, 100, 500);
-              }
-            }, true);
-            
-            break;
-          case 'error':
-            alert("Server side processing error:\n"+data.error);
-            break;
-          case 'debug':
-            aclDebug(data.text);
-            break;
-          case 'list_existing':
-            aclSetViewListExistingRespond(data);
-            break;
-          case 'trace':
-            aclDrawTraceWrapper(data);
-            break;
-          default:
-            handle_invalid_json(ajax.responseText);
-            break;
-        }
-      }
-    }, true);
+	params = toJSONString(params);
+	params = ajaxEscape(params);
+	ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
+			if ( ajax.readyState == 4 && ajax.status == 200 )
+			{
+				var response = String(ajax.responseText + '');
+				if ( !check_json_response(response) )
+				{
+					handle_invalid_json(ajax.responseText);
+					return false;
+				}
+				try
+				{
+					var data = parseJSON(ajax.responseText);
+				}
+				catch(e)
+				{
+					handle_invalid_json(ajax.responseText);
+					return false;
+				}
+				aclDataCache = data;
+				switch(data.mode)
+				{
+					case 'seltarget':
+						
+						// Build the ACL edit form
+						aclBuildRuleEditor(data);
+						
+						break;
+					case 'success':
+						var note = document.createElement('div');
+						note.className = 'info-box';
+						note.style.marginLeft = '0';
+						var b = document.createElement('b');
+						b.appendChild(document.createTextNode($lang.get('acl_lbl_save_success_title')));
+						note.appendChild(b);
+						note.appendChild(document.createElement('br'));
+						note.appendChild(document.createTextNode($lang.get('acl_lbl_save_success_body', { target_name: data.target_name })));
+						note.appendChild(document.createElement('br'));
+						
+						/*
+						var a = document.createElement('a');
+						a.href = '#';
+						a.id = aclManagerID + '_btn_dismiss';
+						a.appendChild(document.createTextNode('[ ' + $lang.get('acl_btn_success_dismiss') + ' :'));
+						note.appendChild(a);
+						var a2 = document.createElement('a');
+						a2.href = '#';
+						a.id = aclManagerID + '_btn_close';
+						a2.appendChild(document.createTextNode(': ' + $lang.get('acl_btn_success_close') + ' ]'));
+						note.appendChild(a2);
+						*/
+						
+						var a_dismiss = document.createElement('a');
+						a_dismiss.href = '#';
+						a_dismiss.appendChild(document.createTextNode('[ ' + $lang.get('acl_btn_success_dismiss') + ' :'));
+						note.appendChild(a_dismiss);
+						
+						var a_close = document.createElement('a');
+						a_close.href = '#';
+						a_close.appendChild(document.createTextNode(': ' + $lang.get('acl_btn_success_close') + ' ]'));
+						note.appendChild(a_close);
+						
+						document.getElementById(aclManagerID + '_main').insertBefore(note, document.getElementById(aclManagerID + '_main').firstChild);
+						
+						a_dismiss.setAttribute('onclick', 'var parent = this.parentNode.parentNode; parent.removeChild(this.parentNode); return false;');
+						a_close.setAttribute('onclick', 'killACLManager(); return false;');
+						
+						if ( !document.getElementById(aclManagerID+'_deletelnk') )
+						{
+							var p = document.createElement('p');
+							p.innerHTML = '<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.id = aclManagerID + '_deletelnk';
+							p.style.textAlign = 'right';
+							
+							document.getElementById(aclManagerID + '_main').appendChild(p);
+						}
+						
+						document.getElementById(aclManagerID+'_main').scrollTop = 0;
+						document.getElementById(aclManagerID+'_main').style.backgroundImage = 'none';
+												
+						aclDataCache.mode = 'save_edit';
+						break;
+					case 'delete':
+						
+						params = {
+							'mode' : 'listgroups'
+						};
+					params = toJSONString(params);
+					params = ajaxEscape(params);
+					ajaxPost(stdAjaxPrefix+'&_mode=acljson', 'acl_params='+params, function(ajax) {
+							if ( ajax.readyState == 4 && ajax.status == 200 )
+							{
+								document.getElementById(aclManagerID+'_main').innerHTML = '';
+								document.getElementById(aclManagerID + '_back').style.display = 'none';
+								document.getElementById(aclManagerID + '_next').value = $lang.get('etc_wizard_next');
+								ajaxACLSwitchToSelector();
+								
+								// note
+								var note = document.createElement('div');
+								note.className = 'info-box-mini';
+								note.appendChild(document.createTextNode($lang.get('acl_lbl_delete_success')));
+								
+								// button: dismiss note
+								var a_dismiss = document.createElement('a');
+								a_dismiss.href = '#';
+								a_dismiss.onclick = function()
+								{
+									var p = this.parentNode;
+									domOpacity(p, 100, 0, 500);
+									window.setTimeout(function()
+										{
+											p.parentNode.removeChild(p);
+										}, 600);
+									return false;
+								}
+								a_dismiss.appendChild(document.createTextNode($lang.get('acl_btn_success_dismiss')));
+								note.appendChild(a_dismiss);
+								// add a space
+								note.appendChild(document.createTextNode(' / '));
+								
+								// button: dismiss note
+								var a_close = document.createElement('a');
+								a_close.href = '#';
+								a_close.onclick = function()
+								{
+									killACLManager();
+									return false;
+								}
+								a_close.appendChild(document.createTextNode($lang.get('acl_btn_success_close')));
+								note.appendChild(a_close);
+								
+								// style note
+								domObjChangeOpac(note, 0);
+								note.style.position = 'absolute';
+								// icon padding L + icon padding R + icon width + right padding + border width L + border width R
+								note.style.width = ($dynano(aclManagerID + '_main').Width() - ( 5 + 5 + 16 + 4 + 1 + 1 )) + 'px';
+								
+								// make tangible, then calculate height and position right above button panel
+								var panel = document.getElementById(aclManagerID + '_panel');
+								panel.parentNode.parentNode.appendChild(note);
+								note.style.top = '401px';
+								note.style.left = '0px';
+								
+								opacity(note, 0, 100, 500);
+							}
+						}, true);
+						
+						break;
+					case 'error':
+						alert("Server side processing error:\n"+data.error);
+						break;
+					case 'debug':
+						aclDebug(data.text);
+						break;
+					case 'list_existing':
+						aclSetViewListExistingRespond(data);
+						break;
+					case 'trace':
+						aclDrawTraceWrapper(data);
+						break;
+					default:
+						handle_invalid_json(ajax.responseText);
+						break;
+				}
+			}
+		}, true);
 }
 
 function aclBuildRuleEditor(data, from_direct)
 {
-  var act_desc = ( data.type == 'new' ) ? $lang.get('acl_lbl_editwin_title_create') : $lang.get('acl_lbl_editwin_title_edit');
-  var target_type_t = ( data.target_type == 1 ) ? $lang.get('acl_target_type_group') : $lang.get('acl_target_type_user');
-  var target_name_t = data.target_name;
-  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');
-  
-  document.getElementById(aclManagerID + '_next').style.display = 'inline';
-  
-  html = '<h2>'+act_desc+'</h2>';
-  html += '<p>' + $lang.get('acl_lbl_editwin_body', { target_type: target_type_t, target: target_name_t, scope_type: scope_type }) + '</p>';
-  
-  // preset management
-  var load_flags = 'href="#" onclick="aclShowPresetLoader(); return false;"';
-  var save_flags = 'href="#" onclick="aclShowPresetSave(); return false;"';
-  html += '<div style="float: right;">';
-  html += $lang.get('acl_btn_edit_presets', { load_flags: load_flags, save_flags: save_flags });
-  html += '</div>';
-  html += '<div style="clear: both;"></div>';
-  
-  parser = new templateParser(data.template.acl_field_begin);
-  html += parser.run();
-  
-  cls = 'row2';
-  for(var i in data.acl_types)
-  {
-    if(typeof(data.acl_types[i]) == 'number')
-    {
-      cls = ( cls == 'row1' ) ? 'row2' : 'row1';
-      p = new templateParser(data.template.acl_field_item);
-      vars = new Object();
-      if ( data.acl_descs[i].match(/^([a-z0-9_]+)$/) )
-      {
-        vars['FIELD_DESC'] = $lang.get(data.acl_descs[i]);
-      }
-      else
-      {
-        vars['FIELD_DESC'] = data.acl_descs[i];
-      }
-      vars['FIELD_INHERIT_CHECKED'] = '';
-      vars['FIELD_DENY_CHECKED'] = '';
-      vars['FIELD_DISALLOW_CHECKED'] = '';
-      vars['FIELD_WIKIMODE_CHECKED'] = '';
-      vars['FIELD_ALLOW_CHECKED'] = '';
-      vars['FIELD_NAME'] = i;
-      if ( !data.current_perms[i] )
-      {
-        data.current_perms[i] = 'i';
-      }
-      switch(data.current_perms[i])
-      {
-        case 'i':
-        default:
-          vars['FIELD_INHERIT_CHECKED'] = 'checked="checked"';
-          break;
-        case 1:
-          vars['FIELD_DENY_CHECKED'] = 'checked="checked"';
-          break;
-        case 2:
-          vars['FIELD_DISALLOW_CHECKED'] = 'checked="checked"';
-          break;
-        case 3:
-          vars['FIELD_WIKIMODE_CHECKED'] = 'checked="checked"';
-          break;
-        case 4:
-          vars['FIELD_ALLOW_CHECKED'] = 'checked="checked"';
-          break;
-      }
-      vars['ROW_CLASS'] = cls;
-      p.assign_vars(vars);
-      html += p.run();
-    }
-  }
-  
-  var parser = new templateParser(data.template.acl_field_end);
-  html += parser.run();
-  
-  if(data.type == 'edit')
-    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>';
-  
-  var main = document.getElementById(aclManagerID + '_main');
-  main.innerHTML = html;
-  
-  var form = document.getElementById(aclManagerID + '_formobj_id');
-  
-  if ( from_direct )
-  {
-    var modeobj = document.getElementById(aclManagerID + '_mode');
-    modeobj.value = 'save_edit';
-  }
-  else
-  {
-    var modeobj = form_fetch_field(form, 'mode');
-    if ( modeobj )
-      modeobj.value = 'save_' + data.type;
-    else
-      alert('modeobj is invalid: '+modeobj);
-  }
-  
-  aclPermList = array_keys(data.acl_types);
-  
-  document.getElementById(aclManagerID + '_back').style.display = 'inline';
-  document.getElementById(aclManagerID + '_next').value = $lang.get('etc_save_changes');
+	var act_desc = ( data.type == 'new' ) ? $lang.get('acl_lbl_editwin_title_create') : $lang.get('acl_lbl_editwin_title_edit');
+	var target_type_t = ( data.target_type == 1 ) ? $lang.get('acl_target_type_group') : $lang.get('acl_target_type_user');
+	var target_name_t = data.target_name;
+	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');
+	
+	document.getElementById(aclManagerID + '_next').style.display = 'inline';
+	
+	html = '<h2>'+act_desc+'</h2>';
+	html += '<p>' + $lang.get('acl_lbl_editwin_body', { target_type: target_type_t, target: target_name_t, scope_type: scope_type }) + '</p>';
+	
+	// preset management
+	var load_flags = 'href="#" onclick="aclShowPresetLoader(); return false;"';
+	var save_flags = 'href="#" onclick="aclShowPresetSave(); return false;"';
+	html += '<div style="float: right;">';
+	html += $lang.get('acl_btn_edit_presets', { load_flags: load_flags, save_flags: save_flags });
+	html += '</div>';
+	html += '<div style="clear: both;"></div>';
+	
+	parser = new templateParser(data.template.acl_field_begin);
+	html += parser.run();
+	
+	cls = 'row2';
+	for(var i in data.acl_types)
+	{
+		if(typeof(data.acl_types[i]) == 'number')
+		{
+			cls = ( cls == 'row1' ) ? 'row2' : 'row1';
+			p = new templateParser(data.template.acl_field_item);
+			vars = new Object();
+			if ( data.acl_descs[i].match(/^([a-z0-9_]+)$/) )
+			{
+				vars['FIELD_DESC'] = $lang.get(data.acl_descs[i]);
+			}
+			else
+			{
+				vars['FIELD_DESC'] = data.acl_descs[i];
+			}
+			vars['FIELD_INHERIT_CHECKED'] = '';
+			vars['FIELD_DENY_CHECKED'] = '';
+			vars['FIELD_DISALLOW_CHECKED'] = '';
+			vars['FIELD_WIKIMODE_CHECKED'] = '';
+			vars['FIELD_ALLOW_CHECKED'] = '';
+			vars['FIELD_NAME'] = i;
+			if ( !data.current_perms[i] )
+			{
+				data.current_perms[i] = 'i';
+			}
+			switch(data.current_perms[i])
+			{
+				case 'i':
+				default:
+					vars['FIELD_INHERIT_CHECKED'] = 'checked="checked"';
+					break;
+				case 1:
+					vars['FIELD_DENY_CHECKED'] = 'checked="checked"';
+					break;
+				case 2:
+					vars['FIELD_DISALLOW_CHECKED'] = 'checked="checked"';
+					break;
+				case 3:
+					vars['FIELD_WIKIMODE_CHECKED'] = 'checked="checked"';
+					break;
+				case 4:
+					vars['FIELD_ALLOW_CHECKED'] = 'checked="checked"';
+					break;
+			}
+			vars['ROW_CLASS'] = cls;
+			p.assign_vars(vars);
+			html += p.run();
+		}
+	}
+	
+	var parser = new templateParser(data.template.acl_field_end);
+	html += parser.run();
+	
+	if(data.type == 'edit')
+		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>';
+	
+	var main = document.getElementById(aclManagerID + '_main');
+	main.innerHTML = html;
+	
+	var form = document.getElementById(aclManagerID + '_formobj_id');
+	
+	if ( from_direct )
+	{
+		var modeobj = document.getElementById(aclManagerID + '_mode');
+		modeobj.value = 'save_edit';
+	}
+	else
+	{
+		var modeobj = form_fetch_field(form, 'mode');
+		if ( modeobj )
+			modeobj.value = 'save_' + data.type;
+		else
+			alert('modeobj is invalid: '+modeobj);
+	}
+	
+	aclPermList = array_keys(data.acl_types);
+	
+	document.getElementById(aclManagerID + '_back').style.display = 'inline';
+	document.getElementById(aclManagerID + '_next').value = $lang.get('etc_save_changes');
 }
 
 function __aclBuildGroupsHTML(groups)
 {
-  var groups = groups.groups;
-  select = document.createElement('select');
-  for(var i in groups)
-  {
-    if(typeof(groups[i]['name']) == 'string' && i != 'toJSONString')
-    {
-      o = document.createElement('option');
-      o.value = groups[i]['id'];
-      t = document.createTextNode(groups[i]['name']);
-      o.appendChild(t);
-      select.appendChild(o);
-    }
-  }
-  return select;
+	var groups = groups.groups;
+	select = document.createElement('select');
+	for(var i in groups)
+	{
+		if(typeof(groups[i]['name']) == 'string' && i != 'toJSONString')
+		{
+			o = document.createElement('option');
+			o.value = groups[i]['id'];
+			t = document.createTextNode(groups[i]['name']);
+			o.appendChild(t);
+			select.appendChild(o);
+		}
+	}
+	return select;
 }
 
 function __aclBuildWizardWindow()
 {
-  darken(aclDisableTransitionFX, 70, 'acldarkener');
-  var box = document.createElement('div');
-  box.style.width = '640px'
-  box.style.height = IE ? '500px' : '440px';
-  box.style.position = 'fixed';
-  width = getWidth();
-  height = getHeight();
-  box.style.left = ( width / 2 - 320 ) + 'px';
-  box.style.top = ( height / 2 - 250 ) + 'px';
-  box.style.backgroundColor = 'white';
-  box.style.zIndex = getHighestZ() + 1;
-  box.id = aclManagerID;
-  box.style.opacity = '0';
-  box.style.filter = 'alpha(opacity=0)';
-  box.style.display = 'none';
-  
-  var mainwin = document.createElement('div');
-  mainwin.id = aclManagerID + '_main';
-  mainwin.style.clip = 'rect(0px,640px,440px,0px)';
-  mainwin.style.overflow = 'auto';
-  mainwin.style.width = '620px';
-  mainwin.style.height = '420px';
-  
-  var panel = document.createElement('div');
-  panel.style.width = '620px';
-  panel.style.padding = '10px';
-  panel.style.lineHeight = '40px';
-  panel.style.textAlign = 'right';
-  panel.style.position = 'fixed';
-  if ( IE )
-  {
-    panel.style.left = '0px';
-    panel.style.top = '440px';
-  }
-  else
-  {
-    panel.style.left = ( width / 2 - 320 ) + 'px';
-    panel.style.top = ( height / 2 + 190 ) + 'px';
-  }
-  panel.style.backgroundColor = '#D0D0D0';
-  panel.style.opacity = '0';
-  panel.style.filter = 'alpha(opacity=0)';
-  panel.id = aclManagerID + '_panel';
-  
-  var form = document.createElement('form');
-  form.method = 'post';
-  form.action = 'javascript:void(0)';
-  form.onsubmit = function() { if(this.username && !submitAuthorized) return false; __aclSubmitManager(this); return false; };
-  form.name = aclManagerID + '_formobj';
-  form.id   = aclManagerID + '_formobj_id';
-  
-  var back = document.createElement('input');
-  back.type = 'button';
-  back.value = $lang.get('etc_wizard_back');
-  back.style.fontWeight = 'normal';
-  back.onclick = function() { ajaxACLSwitchToSelector(); return false; };
-  back.style.display = 'none';
-  back.id = aclManagerID + '_back';
-  
-  var saver = document.createElement('input');
-  saver.type = 'submit';
-  saver.value = $lang.get('etc_wizard_next');
-  saver.style.fontWeight = 'bold';
-  saver.id = aclManagerID + '_next';
-  
-  var closer = document.createElement('input');
-  closer.type = 'button';
-  closer.value = $lang.get('etc_cancel_changes');
-  closer.onclick = function()
-  {
-    miniPromptMessage({
-      title: $lang.get('acl_msg_closeacl_confirm_title'),
-      message: $lang.get('acl_msg_closeacl_confirm_body'),
-      buttons: [
-        {
-          text: $lang.get('acl_btn_close'),
-          color: 'red',
-          style: {
-            fontWeight: 'bold'
-          },
-          onclick: function(e)
-          {
-            killACLManager();
-            miniPromptDestroy(this);
-          }
-        },
-        {
-          text: $lang.get('etc_cancel'),
-          onclick: function(e)
-          {
-            miniPromptDestroy(this);
-          }
-        }
-      ]
-    });
-    return false;
-  }
-  
-  var spacer1 = document.createTextNode('  ');
-  var spacer2 = document.createTextNode('  ');
-  
-  panel.appendChild(back);
-  panel.appendChild(spacer1);
-  panel.appendChild(saver);
-  panel.appendChild(spacer2);
-  panel.appendChild(closer);
-  form.appendChild(mainwin);
-  form.appendChild(panel);
-  box.appendChild(form);
-  
-  var body = document.getElementsByTagName('body')[0];
-  body.appendChild(box);
-  if ( aclDisableTransitionFX )
-  {
-    document.getElementById(aclManagerID).style.display = 'block';
-    changeOpac(100, aclManagerID);
-    changeOpac(100, aclManagerID + '_panel');
-  }
-  else
-  {
-    setTimeout("document.getElementById('"+aclManagerID+"').style.display = 'block'; opacity('"+aclManagerID+"', 0, 100, 250); opacity('"+aclManagerID + '_panel'+"', 0, 100, 250);", 500);
-  }
-  
-  console.debug(panel);
+	darken(aclDisableTransitionFX, 70, 'acldarkener');
+	var box = document.createElement('div');
+	box.style.width = '640px'
+	box.style.height = IE ? '500px' : '440px';
+	box.style.position = 'fixed';
+	width = getWidth();
+	height = getHeight();
+	box.style.left = ( width / 2 - 320 ) + 'px';
+	box.style.top = ( height / 2 - 250 ) + 'px';
+	box.style.backgroundColor = 'white';
+	box.style.zIndex = getHighestZ() + 1;
+	box.id = aclManagerID;
+	box.style.opacity = '0';
+	box.style.filter = 'alpha(opacity=0)';
+	box.style.display = 'none';
+	
+	var mainwin = document.createElement('div');
+	mainwin.id = aclManagerID + '_main';
+	mainwin.style.clip = 'rect(0px,640px,440px,0px)';
+	mainwin.style.overflow = 'auto';
+	mainwin.style.width = '620px';
+	mainwin.style.height = '420px';
+	
+	var panel = document.createElement('div');
+	panel.style.width = '620px';
+	panel.style.padding = '10px';
+	panel.style.lineHeight = '40px';
+	panel.style.textAlign = 'right';
+	panel.style.position = 'fixed';
+	if ( IE )
+	{
+		panel.style.left = '0px';
+		panel.style.top = '440px';
+	}
+	else
+	{
+		panel.style.left = ( width / 2 - 320 ) + 'px';
+		panel.style.top = ( height / 2 + 190 ) + 'px';
+	}
+	panel.style.backgroundColor = '#D0D0D0';
+	panel.style.opacity = '0';
+	panel.style.filter = 'alpha(opacity=0)';
+	panel.id = aclManagerID + '_panel';
+	
+	var form = document.createElement('form');
+	form.method = 'post';
+	form.action = 'javascript:void(0)';
+	form.onsubmit = function() { if(this.username && !submitAuthorized) return false; __aclSubmitManager(this); return false; };
+	form.name = aclManagerID + '_formobj';
+	form.id   = aclManagerID + '_formobj_id';
+	
+	var back = document.createElement('input');
+	back.type = 'button';
+	back.value = $lang.get('etc_wizard_back');
+	back.style.fontWeight = 'normal';
+	back.onclick = function() { ajaxACLSwitchToSelector(); return false; };
+	back.style.display = 'none';
+	back.id = aclManagerID + '_back';
+	
+	var saver = document.createElement('input');
+	saver.type = 'submit';
+	saver.value = $lang.get('etc_wizard_next');
+	saver.style.fontWeight = 'bold';
+	saver.id = aclManagerID + '_next';
+	
+	var closer = document.createElement('input');
+	closer.type = 'button';
+	closer.value = $lang.get('etc_cancel_changes');
+	closer.onclick = function()
+	{
+		miniPromptMessage({
+			title: $lang.get('acl_msg_closeacl_confirm_title'),
+			message: $lang.get('acl_msg_closeacl_confirm_body'),
+			buttons: [
+				{
+					text: $lang.get('acl_btn_close'),
+					color: 'red',
+					style: {
+						fontWeight: 'bold'
+					},
+					onclick: function(e)
+					{
+						killACLManager();
+						miniPromptDestroy(this);
+					}
+				},
+				{
+					text: $lang.get('etc_cancel'),
+					onclick: function(e)
+					{
+						miniPromptDestroy(this);
+					}
+				}
+			]
+		});
+		return false;
+	}
+	
+	var spacer1 = document.createTextNode('  ');
+	var spacer2 = document.createTextNode('  ');
+	
+	panel.appendChild(back);
+	panel.appendChild(spacer1);
+	panel.appendChild(saver);
+	panel.appendChild(spacer2);
+	panel.appendChild(closer);
+	form.appendChild(mainwin);
+	form.appendChild(panel);
+	box.appendChild(form);
+	
+	var body = document.getElementsByTagName('body')[0];
+	body.appendChild(box);
+	if ( aclDisableTransitionFX )
+	{
+		document.getElementById(aclManagerID).style.display = 'block';
+		changeOpac(100, aclManagerID);
+		changeOpac(100, aclManagerID + '_panel');
+	}
+	else
+	{
+		setTimeout("document.getElementById('"+aclManagerID+"').style.display = 'block'; opacity('"+aclManagerID+"', 0, 100, 250); opacity('"+aclManagerID + '_panel'+"', 0, 100, 250);", 500);
+	}
+	
+	console.debug(panel);
 }
 
 function killACLManager()
 {
-  el = document.getElementById(aclManagerID);
-  if(el)
-  {
-    if ( aclDisableTransitionFX )
-    {
-      enlighten(true, 'acldarkener');
-      el.parentNode.removeChild(el);
-    }
-    else
-    {
-      opacity(aclManagerID, 100, 0, 500);
-      setTimeout('var el = document.getElementById(aclManagerID); el.parentNode.removeChild(el); enlighten(false, "acldarkener");', 750);
-    }
-  }
+	el = document.getElementById(aclManagerID);
+	if(el)
+	{
+		if ( aclDisableTransitionFX )
+		{
+			enlighten(true, 'acldarkener');
+			el.parentNode.removeChild(el);
+		}
+		else
+		{
+			opacity(aclManagerID, 100, 0, 500);
+			setTimeout('var el = document.getElementById(aclManagerID); el.parentNode.removeChild(el); enlighten(false, "acldarkener");', 750);
+		}
+	}
 }
 
 function __aclSubmitManager(form)
 {
-  console.debug(form);
-  var thefrm = form;
-  // var thefrm = document.forms[form.name];
-  var modeobj = form_fetch_field(thefrm, 'mode');
-  if ( typeof(modeobj) == 'object' )
-  {
-    var mode = (thefrm.mode.value) ? thefrm.mode.value : 'cant_get';
-  }
-  else
-  {
-    var mode = '';
-  }
-  switch(mode)
-  {
-    case 'cant_get':
-      alert('BUG: can\'t get the state value from the form field.');
-      break;
-    case 'seltarget':
-      var target_type = parseInt(getRadioState(thefrm, 'target_type', ['1', '2']));
-      if(isNaN(target_type))
-      {
-        alert($lang.get('acl_err_pleaseselect_targettype'));
-        return false;
-      }
-      target_id = ( target_type == 1 ) ? parseInt(thefrm.group_id.value) : thefrm.username.value;
-      
-      obj = { 'mode' : mode, 'target_type' : target_type, 'target_id' : target_id };
-      
-      thispage = strToPageID(title);
-      do_scopesel = ( thispage[0] == aclDataCache.page_id && thispage[1] == aclDataCache.namespace );
-      
-      if(do_scopesel)
-      {
-        scope = getRadioState(thefrm, 'scope', ['page', 'group', 'global']);
-        if(scope == 'page')
-        {
-          pageid = strToPageID(title);
-          obj['page_id'] = pageid[0];
-          obj['namespace'] = pageid[1];
-        }
-        else if(scope == 'global')
-        {
-          obj['page_id'] = false;
-          obj['namespace'] = false;
-        }
-        else if(scope == 'group')
-        {
-          obj['page_id'] = document.getElementById('enACL_pgsel_1048576').value;
-          obj['namespace'] = '__PageGroup';
-        }
-        else
-        {
-          alert('Invalid scope');
-          return false;
-        }
-      }
-      else
-      {
-        obj['page_id'] = aclDataCache.page_id;
-        obj['namespace'] = aclDataCache.namespace;
-      }
-      if(target_id == '')
-      {
-        alert($lang.get('acl_err_pleaseselect_username'));
-        return false;
-      }
-      __aclJSONSubmitAjaxHandler(obj);
-      break;
-    case 'save_edit':
-    case 'save_new':
-      var form = document.forms[aclManagerID + '_formobj'];
-      selections = new Object();
-      var dbg = '';
-      var warned_everyone = false;
-      for(var i in aclPermList)
-      {
-        selections[aclPermList[i]] = getRadioState(form, aclPermList[i], ['i', 1, 2, 3, 4]);
-        // If we're editing permissions for everyone on the entire site and the
-        // admin selected to deny privileges, give a stern warning about it.
-        if ( selections[aclPermList[i]] == 1 && aclDataCache.target_type == 1 /* ACL_TYPE_GROUP */ && aclDataCache.target_id == 1 && !warned_everyone )
-        {
-          warned_everyone = true;
-          if ( !confirm($lang.get('acl_msg_deny_everyone_confirm')) )
-          {
-            return false;
-          }
-        }
-        dbg += aclPermList[i] + ': ' + selections[aclPermList[i]] + "\n";
-        if(!selections[aclPermList[i]])
-        {
-          alert("Invalid return from getRadioState: "+i+": "+selections[i]+" ("+typeof(selections[i])+")");
-          return false;
-        }
-      }
-      obj = new Object();
-      obj['perms'] = selections;
-      obj['mode'] = mode;
-      obj['target_type'] = aclDataCache.target_type;
-      obj['target_id'] = aclDataCache.target_id;
-      obj['target_name'] = aclDataCache.target_name;
-      obj['page_id'] = aclDataCache.page_id;
-      obj['namespace'] = aclDataCache.namespace;
-      __aclJSONSubmitAjaxHandler(obj);
-      break;
-    case 'trace':
-      var params = {
-        mode: 'trace',
-        user: document.getElementById(aclManagerID + 'trace_user').value,
-        page: document.getElementById(aclManagerID + 'trace_page').value
-      };
-      __aclJSONSubmitAjaxHandler(params);
-      break;
-    default:
-      alert("JSON form submit: invalid mode string "+mode+", stopping execution");
-      return false;
-      break;
-  }
+	console.debug(form);
+	var thefrm = form;
+	// var thefrm = document.forms[form.name];
+	var modeobj = form_fetch_field(thefrm, 'mode');
+	if ( typeof(modeobj) == 'object' )
+	{
+		var mode = (thefrm.mode.value) ? thefrm.mode.value : 'cant_get';
+	}
+	else
+	{
+		var mode = '';
+	}
+	switch(mode)
+	{
+		case 'cant_get':
+			alert('BUG: can\'t get the state value from the form field.');
+			break;
+		case 'seltarget':
+			var target_type = parseInt(getRadioState(thefrm, 'target_type', ['1', '2']));
+			if(isNaN(target_type))
+			{
+				alert($lang.get('acl_err_pleaseselect_targettype'));
+				return false;
+			}
+			target_id = ( target_type == 1 ) ? parseInt(thefrm.group_id.value) : thefrm.username.value;
+			
+			obj = { 'mode' : mode, 'target_type' : target_type, 'target_id' : target_id };
+			
+			thispage = strToPageID(title);
+			do_scopesel = ( thispage[0] == aclDataCache.page_id && thispage[1] == aclDataCache.namespace );
+			
+			if(do_scopesel)
+			{
+				scope = getRadioState(thefrm, 'scope', ['page', 'group', 'global']);
+				if(scope == 'page')
+				{
+					pageid = strToPageID(title);
+					obj['page_id'] = pageid[0];
+					obj['namespace'] = pageid[1];
+				}
+				else if(scope == 'global')
+				{
+					obj['page_id'] = false;
+					obj['namespace'] = false;
+				}
+				else if(scope == 'group')
+				{
+					obj['page_id'] = document.getElementById('enACL_pgsel_1048576').value;
+					obj['namespace'] = '__PageGroup';
+				}
+				else
+				{
+					alert('Invalid scope');
+					return false;
+				}
+			}
+			else
+			{
+				obj['page_id'] = aclDataCache.page_id;
+				obj['namespace'] = aclDataCache.namespace;
+			}
+			if(target_id == '')
+			{
+				alert($lang.get('acl_err_pleaseselect_username'));
+				return false;
+			}
+			__aclJSONSubmitAjaxHandler(obj);
+			break;
+		case 'save_edit':
+		case 'save_new':
+			var form = document.forms[aclManagerID + '_formobj'];
+			selections = new Object();
+			var dbg = '';
+			var warned_everyone = false;
+			for(var i in aclPermList)
+			{
+				selections[aclPermList[i]] = getRadioState(form, aclPermList[i], ['i', 1, 2, 3, 4]);
+				// If we're editing permissions for everyone on the entire site and the
+				// admin selected to deny privileges, give a stern warning about it.
+				if ( selections[aclPermList[i]] == 1 && aclDataCache.target_type == 1 /* ACL_TYPE_GROUP */ && aclDataCache.target_id == 1 && !warned_everyone )
+				{
+					warned_everyone = true;
+					if ( !confirm($lang.get('acl_msg_deny_everyone_confirm')) )
+					{
+						return false;
+					}
+				}
+				dbg += aclPermList[i] + ': ' + selections[aclPermList[i]] + "\n";
+				if(!selections[aclPermList[i]])
+				{
+					alert("Invalid return from getRadioState: "+i+": "+selections[i]+" ("+typeof(selections[i])+")");
+					return false;
+				}
+			}
+			obj = new Object();
+			obj['perms'] = selections;
+			obj['mode'] = mode;
+			obj['target_type'] = aclDataCache.target_type;
+			obj['target_id'] = aclDataCache.target_id;
+			obj['target_name'] = aclDataCache.target_name;
+			obj['page_id'] = aclDataCache.page_id;
+			obj['namespace'] = aclDataCache.namespace;
+			__aclJSONSubmitAjaxHandler(obj);
+			break;
+		case 'trace':
+			var params = {
+				mode: 'trace',
+				user: document.getElementById(aclManagerID + 'trace_user').value,
+				page: document.getElementById(aclManagerID + 'trace_page').value
+			};
+			__aclJSONSubmitAjaxHandler(params);
+			break;
+		default:
+			alert("JSON form submit: invalid mode string "+mode+", stopping execution");
+			return false;
+			break;
+	}
 }
 
 function getRadioState(form, name, valArray)
 {
-  // Konqueror/Safari fix
-  if ( form[name] )
-  {
-    var formitem = form[name];
-    if ( String(formitem) == '[object DOMNamedNodesCollection]' || is_Safari )
-    {
-      var i = 0;
-      var radios = new Array();
-      var radioids = new Array();
-      while(true)
-      {
-        var elem = formitem[i];
-        if ( !elem )
-          break;
-        radios.push(elem);
-        if ( !elem.id )
-        {
-          elem.id = 'autoRadioBtn_' + Math.floor(Math.random() * 1000000);
-        }
-        radioids.push(elem.id);
-        i++;
-      }
-      var cr;
-      for ( var i = 0; i < radios.length; i++ )
-      {
-        cr = document.getElementById(radioids[i]);
-        if ( cr.value == 'on' || cr.checked == true )
-        {
-          try {
-            return ( typeof ( valArray[i] ) != 'undefined' ) ? valArray[i] : false;
-          } catch(e) {
-            // alert('Didn\'t get value for index: ' + i);
-            return false;
-          }
-        }
-      }
-      return false;
-    }
-  }
-  inputs = form.getElementsByTagName('input');
-  radios = new Array();
-  for(var i in inputs)
-  {
-    if(inputs[i]) if(inputs[i].type == 'radio')
-      radios.push(inputs[i]);
-  }
-  for(var i in radios)
-  {
-    if(radios[i].checked && radios[i].name == name)
-      return radios[i].value;
-  }
-  return false;
+	// Konqueror/Safari fix
+	if ( form[name] )
+	{
+		var formitem = form[name];
+		if ( String(formitem) == '[object DOMNamedNodesCollection]' || is_Safari )
+		{
+			var i = 0;
+			var radios = new Array();
+			var radioids = new Array();
+			while(true)
+			{
+				var elem = formitem[i];
+				if ( !elem )
+					break;
+				radios.push(elem);
+				if ( !elem.id )
+				{
+					elem.id = 'autoRadioBtn_' + Math.floor(Math.random() * 1000000);
+				}
+				radioids.push(elem.id);
+				i++;
+			}
+			var cr;
+			for ( var i = 0; i < radios.length; i++ )
+			{
+				cr = document.getElementById(radioids[i]);
+				if ( cr.value == 'on' || cr.checked == true )
+				{
+					try {
+						return ( typeof ( valArray[i] ) != 'undefined' ) ? valArray[i] : false;
+					} catch(e) {
+						// alert('Didn\'t get value for index: ' + i);
+						return false;
+					}
+				}
+			}
+			return false;
+		}
+	}
+	inputs = form.getElementsByTagName('input');
+	radios = new Array();
+	for(var i in inputs)
+	{
+		if(inputs[i]) if(inputs[i].type == 'radio')
+			radios.push(inputs[i]);
+	}
+	for(var i in radios)
+	{
+		if(radios[i].checked && radios[i].name == name)
+			return radios[i].value;
+	}
+	return false;
 }
 
 function __aclSetAllRadios(val, valArray)
 {
-  val = String(val);
-  var form = document.forms[aclManagerID + '_formobj'];
-  if (!form)
-  {
-    return false;
-  }
-  var inputs = form.getElementsByTagName('input');
-  var radios = new Array();
-  var dbg = '';
-  for(var i = 0; i < inputs.length; i++)
-  {
-    dbg += String(inputs[i]) + "\n";
-    if(inputs[i].type == 'radio')
-      radios.push(inputs[i]);
-  }
-  for(var i in radios)
-  {
-    if(radios[i].value == val)
-      radios[i].checked = true;
-    else
-      radios[i].checked = false;
-  }
+	val = String(val);
+	var form = document.forms[aclManagerID + '_formobj'];
+	if (!form)
+	{
+		return false;
+	}
+	var inputs = form.getElementsByTagName('input');
+	var radios = new Array();
+	var dbg = '';
+	for(var i = 0; i < inputs.length; i++)
+	{
+		dbg += String(inputs[i]) + "\n";
+		if(inputs[i].type == 'radio')
+			radios.push(inputs[i]);
+	}
+	for(var i in radios)
+	{
+		if(radios[i].value == val)
+			radios[i].checked = true;
+		else
+			radios[i].checked = false;
+	}
 }
 
 function __aclDeleteRule()
 {
-  if(!aclDataCache) 
-  {
-    if ( window.console )
-    {
-      try{ console.error('ACL editor: can\'t load data cache on delete'); } catch(e) {};
-    }
-    return false;
-  }
-  if(aclDataCache.mode != 'seltarget' && aclDataCache.mode != 'save_new' && aclDataCache.mode != 'save_edit')
-  {
-    if ( window.console )
-    {
-      try{ console.error('ACL editor: wrong mode on aclDataCache: ' + aclDataCache.mode); } catch(e) {};
-    }
-    return false;
-  }
-  parms = {
-    'target_type' : aclDataCache.target_type,
-    'target_id' : aclDataCache.target_id,
-    'target_name' : aclDataCache.target_name,
-    'page_id' : aclDataCache.page_id,
-    'namespace' : aclDataCache.namespace,
-    'mode' : 'delete'
-  };
-  __aclJSONSubmitAjaxHandler(parms);
+	if(!aclDataCache) 
+	{
+		if ( window.console )
+		{
+			try{ console.error('ACL editor: can\'t load data cache on delete'); } catch(e) {};
+		}
+		return false;
+	}
+	if(aclDataCache.mode != 'seltarget' && aclDataCache.mode != 'save_new' && aclDataCache.mode != 'save_edit')
+	{
+		if ( window.console )
+		{
+			try{ console.error('ACL editor: wrong mode on aclDataCache: ' + aclDataCache.mode); } catch(e) {};
+		}
+		return false;
+	}
+	parms = {
+		'target_type' : aclDataCache.target_type,
+		'target_id' : aclDataCache.target_id,
+		'target_name' : aclDataCache.target_name,
+		'page_id' : aclDataCache.page_id,
+		'namespace' : aclDataCache.namespace,
+		'mode' : 'delete'
+	};
+	__aclJSONSubmitAjaxHandler(parms);
 }
 
 function aclSetViewListExisting()
 {
-  if ( !document.getElementById(aclManagerID) )
-  {
-    return false;
-  }
-  
-  var main = document.getElementById(aclManagerID + '_main');
-  main.innerHTML = '';
-  main.style.backgroundImage = 'url(' + scriptPath + '/images/loading-big.gif)';
-  main.style.backgroundRepeat = 'no-repeat';
-  main.style.backgroundPosition = 'center center';
-  
-  var parms = {
-    'mode' : 'list_existing'
-  };
-  __aclJSONSubmitAjaxHandler(parms);
+	if ( !document.getElementById(aclManagerID) )
+	{
+		return false;
+	}
+	
+	var main = document.getElementById(aclManagerID + '_main');
+	main.innerHTML = '';
+	main.style.backgroundImage = 'url(' + scriptPath + '/images/loading-big.gif)';
+	main.style.backgroundRepeat = 'no-repeat';
+	main.style.backgroundPosition = 'center center';
+	
+	var parms = {
+		'mode' : 'list_existing'
+	};
+	__aclJSONSubmitAjaxHandler(parms);
 }
 
 function aclSetViewListExistingRespond(data)
 {
-  var main = document.getElementById(aclManagerID + '_main');
-  main.style.padding = '10px';
-  main.innerHTML = '';
-  
-  var heading = document.createElement('h3');
-  heading.appendChild(document.createTextNode($lang.get('acl_msg_scale_intro_title')));
-  main.appendChild(heading);
-  
-  var p = document.createElement('p');
-  p.appendChild(document.createTextNode($lang.get('acl_msg_scale_intro_body')));
-  main.appendChild(p);
-  
-  
-  main.innerHTML += data.key;
-  main.style.backgroundImage = 'none';
-  
-  document.getElementById(aclManagerID + '_back').style.display = 'inline';
-  document.getElementById(aclManagerID + '_next').style.display = 'none';
-  
-  for ( var i = 0; i < data.rules.length; i++ )
-  {
-    var rule = data.rules[i];
-    // build the rule, this is just more boring DOM crap.
-    var div = document.createElement('div');
-    div.style.padding = '5px 3px';
-    div.style.backgroundColor = '#' + rule.color;
-    div.style.cursor = 'pointer';
-    div.rule_id = rule.rule_id;
-    div.onclick = function()
-    {
-      var main = document.getElementById(aclManagerID + '_main');
-      main.innerHTML = '';
-      main.style.backgroundImage = 'url(' + scriptPath + '/images/loading-big.gif)';
-      ajaxOpenDirectACLRule(parseInt(this.rule_id));
-    }
-    div.innerHTML = rule.score_string;
-    main.appendChild(div);
-  }
+	var main = document.getElementById(aclManagerID + '_main');
+	main.style.padding = '10px';
+	main.innerHTML = '';
+	
+	var heading = document.createElement('h3');
+	heading.appendChild(document.createTextNode($lang.get('acl_msg_scale_intro_title')));
+	main.appendChild(heading);
+	
+	var p = document.createElement('p');
+	p.appendChild(document.createTextNode($lang.get('acl_msg_scale_intro_body')));
+	main.appendChild(p);
+	
+	
+	main.innerHTML += data.key;
+	main.style.backgroundImage = 'none';
+	
+	document.getElementById(aclManagerID + '_back').style.display = 'inline';
+	document.getElementById(aclManagerID + '_next').style.display = 'none';
+	
+	for ( var i = 0; i < data.rules.length; i++ )
+	{
+		var rule = data.rules[i];
+		// build the rule, this is just more boring DOM crap.
+		var div = document.createElement('div');
+		div.style.padding = '5px 3px';
+		div.style.backgroundColor = '#' + rule.color;
+		div.style.cursor = 'pointer';
+		div.rule_id = rule.rule_id;
+		div.onclick = function()
+		{
+			var main = document.getElementById(aclManagerID + '_main');
+			main.innerHTML = '';
+			main.style.backgroundImage = 'url(' + scriptPath + '/images/loading-big.gif)';
+			ajaxOpenDirectACLRule(parseInt(this.rule_id));
+		}
+		div.innerHTML = rule.score_string;
+		main.appendChild(div);
+	}
 }
 
 function aclSetViewDebugTools()
 {
-  // selection window for viewing effective permissions
-  var main = document.getElementById(aclManagerID + '_main');
-  main.innerHTML = '';
+	// selection window for viewing effective permissions
+	var main = document.getElementById(aclManagerID + '_main');
+	main.innerHTML = '';
  
-  // set the submission handler to trace
-  var thefrm = document.forms[aclManagerID + '_formobj'];
-  var modeobj = form_fetch_field(thefrm, 'mode');
-  modeobj.value = 'trace';
-  
-  // show the back button
-  document.getElementById(aclManagerID + '_back').style.display = 'inline';
-  
-  //
-  // start building
-  //
-  
-  // selection interface
-  var selector = document.createElement('div');
-  
-    var table = document.createElement('table');
-    
-    // username
-    var tr_user = document.createElement('tr');
-    var td_user_l = document.createElement('td');
-    var lbl_user = document.createElement('label');
-    lbl_user.setAttribute('for', aclManagerID + 'trace_user');
-    lbl_user.appendChild(document.createTextNode($lang.get('acl_lbl_trace_user')));
-    td_user_l.appendChild(lbl_user);
-    tr_user.appendChild(td_user_l);
-    
-    var td_user_i = document.createElement('td');
-    var i_user = document.createElement('input');
-    i_user.type = 'text';
-    i_user.id = aclManagerID + 'trace_user';
-    i_user.onkeyup = function() { new AutofillUsername(this, true); };
-    i_user.size = '20';
-    td_user_i.appendChild(i_user);
-    tr_user.appendChild(td_user_i);
-    
-    table.appendChild(tr_user);
-    
-    // page
-    var tr_page = document.createElement('tr');
-    var td_page_l = document.createElement('td');
-    var lbl_page = document.createElement('label');
-    lbl_page.setAttribute('for', aclManagerID + 'trace_page');
-    lbl_page.appendChild(document.createTextNode($lang.get('acl_lbl_trace_page')));
-    td_page_l.appendChild(lbl_page);
-    tr_page.appendChild(td_page_l);
-    
-    var td_page_i = document.createElement('td');
-    var i_page = document.createElement('input');
-    i_page.type = 'text';
-    i_page.id = aclManagerID + 'trace_page';
-    i_page.onkeyup = function() { new AutofillPage(this); };
-    i_page.size = '20';
-    td_page_i.appendChild(i_page);
-    tr_page.appendChild(td_page_i);
-    
-    table.appendChild(tr_page);
-    
-    selector.appendChild(table);
-  
-  // wrapper
-  
-  var container = document.createElement('div');
-  
-    container.style.margin = 'auto';
-    container.style.width = '360px';
-    container.style.paddingTop = '90px';
-    
-    var head = document.createElement('h2');
-    head.appendChild(document.createTextNode($lang.get('acl_lbl_trace_title')));
-    
-    var desc = document.createElement('p');
-    desc.innerHTML = $lang.get('acl_lbl_trace_body');
-    
-    container.appendChild(head);
-    container.appendChild(desc);
-    container.appendChild(selector);
-  
-  main.appendChild(container);
+	// set the submission handler to trace
+	var thefrm = document.forms[aclManagerID + '_formobj'];
+	var modeobj = form_fetch_field(thefrm, 'mode');
+	modeobj.value = 'trace';
+	
+	// show the back button
+	document.getElementById(aclManagerID + '_back').style.display = 'inline';
+	
+	//
+	// start building
+	//
+	
+	// selection interface
+	var selector = document.createElement('div');
+	
+		var table = document.createElement('table');
+		
+		// username
+		var tr_user = document.createElement('tr');
+		var td_user_l = document.createElement('td');
+		var lbl_user = document.createElement('label');
+		lbl_user.setAttribute('for', aclManagerID + 'trace_user');
+		lbl_user.appendChild(document.createTextNode($lang.get('acl_lbl_trace_user')));
+		td_user_l.appendChild(lbl_user);
+		tr_user.appendChild(td_user_l);
+		
+		var td_user_i = document.createElement('td');
+		var i_user = document.createElement('input');
+		i_user.type = 'text';
+		i_user.id = aclManagerID + 'trace_user';
+		i_user.onkeyup = function() { new AutofillUsername(this, true); };
+		i_user.size = '20';
+		td_user_i.appendChild(i_user);
+		tr_user.appendChild(td_user_i);
+		
+		table.appendChild(tr_user);
+		
+		// page
+		var tr_page = document.createElement('tr');
+		var td_page_l = document.createElement('td');
+		var lbl_page = document.createElement('label');
+		lbl_page.setAttribute('for', aclManagerID + 'trace_page');
+		lbl_page.appendChild(document.createTextNode($lang.get('acl_lbl_trace_page')));
+		td_page_l.appendChild(lbl_page);
+		tr_page.appendChild(td_page_l);
+		
+		var td_page_i = document.createElement('td');
+		var i_page = document.createElement('input');
+		i_page.type = 'text';
+		i_page.id = aclManagerID + 'trace_page';
+		i_page.onkeyup = function() { new AutofillPage(this); };
+		i_page.size = '20';
+		td_page_i.appendChild(i_page);
+		tr_page.appendChild(td_page_i);
+		
+		table.appendChild(tr_page);
+		
+		selector.appendChild(table);
+	
+	// wrapper
+	
+	var container = document.createElement('div');
+	
+		container.style.margin = 'auto';
+		container.style.width = '360px';
+		container.style.paddingTop = '90px';
+		
+		var head = document.createElement('h2');
+		head.appendChild(document.createTextNode($lang.get('acl_lbl_trace_title')));
+		
+		var desc = document.createElement('p');
+		desc.innerHTML = $lang.get('acl_lbl_trace_body');
+		
+		container.appendChild(head);
+		container.appendChild(desc);
+		container.appendChild(selector);
+	
+	main.appendChild(container);
 }
 
 function aclTraceKey()
 {
-  var div = document.createElement('div');
-  $(div).addClass('tblholder');
-  var table = document.createElement('table');
-  $(table).attr('cellspacing', '1').attr('cellpadding', '4');
-  
-  var inherit_list = ['enano_default', 'global_everyone', 'global_group', 'global_user', 'pg_everyone', 'pg_group', 'pg_user', 'local_everyone', 'local_group', 'local_user'];
-  for ( var i = 0; i < inherit_list.length; i++ )
-  {
-    var t = inherit_list[i];
-    var tr = document.createElement('tr');
-    var td_key = document.createElement('td');
-    $(td_key).addClass('acl_' + t).addClass('acl_inherit_key');
-    tr.appendChild(td_key);
-    var td_explain = document.createElement('td');
-    $(td_explain).addClass(i % 2 == 0 ? 'row1' : 'row2');
-    td_explain.appendChild(document.createTextNode($lang.get('acl_inherit_key_' + t)));
-    tr.appendChild(td_explain);
-    table.appendChild(tr);
-  }
-  div.appendChild(table);
-  return div;
+	var div = document.createElement('div');
+	$(div).addClass('tblholder');
+	var table = document.createElement('table');
+	$(table).attr('cellspacing', '1').attr('cellpadding', '4');
+	
+	var inherit_list = ['enano_default', 'global_everyone', 'global_group', 'global_user', 'pg_everyone', 'pg_group', 'pg_user', 'local_everyone', 'local_group', 'local_user'];
+	for ( var i = 0; i < inherit_list.length; i++ )
+	{
+		var t = inherit_list[i];
+		var tr = document.createElement('tr');
+		var td_key = document.createElement('td');
+		$(td_key).addClass('acl_' + t).addClass('acl_inherit_key');
+		tr.appendChild(td_key);
+		var td_explain = document.createElement('td');
+		$(td_explain).addClass(i % 2 == 0 ? 'row1' : 'row2');
+		td_explain.appendChild(document.createTextNode($lang.get('acl_inherit_key_' + t)));
+		tr.appendChild(td_explain);
+		table.appendChild(tr);
+	}
+	div.appendChild(table);
+	return div;
 }
 
 function aclTraceModalKey()
 {
-  load_component('messagebox');
-  miniPrompt(function(parent)
-    {
-      // heading
-      var h3 = document.createElement('h3');
-      h3.appendChild(document.createTextNode($lang.get('acl_msg_trace_key')));
-      parent.appendChild(h3);
-      
-      var key = aclTraceKey();
-      parent.appendChild(key);
-      
-      var p = document.createElement('p');
-      $(p).css('text-align', 'center');
-      
-      var closer = document.createElement('a');
-      $(closer).addClass('abutton').addClass('abutton_red').css('font-weight', 'bold');
-      closer.appendChild(document.createTextNode($lang.get('etc_close')));
-      closer.href = '#';
-      $(closer).click(function(e)
-        {
-          miniPromptDestroy(this);
-          return false;
-        });
-      
-      p.appendChild(closer);
-      parent.appendChild(p);
-    });
+	load_component('messagebox');
+	miniPrompt(function(parent)
+		{
+			// heading
+			var h3 = document.createElement('h3');
+			h3.appendChild(document.createTextNode($lang.get('acl_msg_trace_key')));
+			parent.appendChild(h3);
+			
+			var key = aclTraceKey();
+			parent.appendChild(key);
+			
+			var p = document.createElement('p');
+			$(p).css('text-align', 'center');
+			
+			var closer = document.createElement('a');
+			$(closer).addClass('abutton').addClass('abutton_red').css('font-weight', 'bold');
+			closer.appendChild(document.createTextNode($lang.get('etc_close')));
+			closer.href = '#';
+			$(closer).click(function(e)
+				{
+					miniPromptDestroy(this);
+					return false;
+				});
+			
+			p.appendChild(closer);
+			parent.appendChild(p);
+		});
 }
 
 function aclDrawTraceWrapper(data)
 {
-  // hide the next button
-  document.getElementById(aclManagerID + '_next').style.display = 'none';
-  
-  var trace_by_perm = aclDrawTraceByPerm(data);
-  var trace_by_rule = aclDrawTraceByRule(data);
-  
-  trace_by_perm.id = 'aclDebugTraceViewPerm';
-  trace_by_rule.id = 'aclDebugTraceViewRule';
-  
-  var start_with_rule = ( readCookie('acl_trace_view') == 'rule' );
-  
-  if ( start_with_rule )
-  {
-    trace_by_perm.style.display = 'none';
-  }
-  else
-  {
-    trace_by_rule.style.display = 'none';
-  }
-  
-  // selection window for viewing effective permissions
-  var main = document.getElementById(aclManagerID + '_main');
-  main.innerHTML = '';
-  
-  var wrapper = document.createElement('div');
-  $(wrapper).css('padding-bottom', '20px');
-  
-  var floatlink = document.createElement('div');
-  $(floatlink).css('float', 'right').css('margin-left', '20px').css('margin-bottom', '20px').css('text-align', 'right');
-  var a_toggle = document.createElement('a');
-  $(a_toggle).attr('id', 'aclDebugTraceViewToggle');
-  a_toggle.innerHTML = '&raquo; ';
-  a_toggle.innerHTML += start_with_rule ? $lang.get('acl_btn_sort_perm') : $lang.get('acl_btn_sort_rule');
-  a_toggle.href = '#';
-  floatlink.appendChild(a_toggle);
-  floatlink.appendChild(document.createElement('br'));
-  var a_key = document.createElement('a');
-  $(a_key).css('font-size', 'smaller');
-  a_key.innerHTML = '&raquo; ';
-  a_key.innerHTML += $lang.get('acl_btn_view_key');
-  a_key.href = '#';
-  floatlink.appendChild(a_key);
-  wrapper.appendChild(floatlink);
-  
-  var h3 = document.createElement('h3');
-  h3.appendChild(document.createTextNode($lang.get('acl_msg_debug_main_title')));
-  wrapper.appendChild(h3);
-  var p = document.createElement('p');
-  p.appendChild(document.createTextNode($lang.get('acl_msg_debug_main_body')));
-  wrapper.appendChild(p);
-  
-  wrapper.appendChild(trace_by_perm);
-  wrapper.appendChild(trace_by_rule);
-  
-  main.appendChild(wrapper);
-  
-  $(a_toggle).click(function(e)
-    {
-      aclTraceToggleViews();
-      return false;
-    });
-  
-  $(a_key).click(function(e)
-    {
-      aclTraceModalKey();
-      return false;
-    });
+	// hide the next button
+	document.getElementById(aclManagerID + '_next').style.display = 'none';
+	
+	var trace_by_perm = aclDrawTraceByPerm(data);
+	var trace_by_rule = aclDrawTraceByRule(data);
+	
+	trace_by_perm.id = 'aclDebugTraceViewPerm';
+	trace_by_rule.id = 'aclDebugTraceViewRule';
+	
+	var start_with_rule = ( readCookie('acl_trace_view') == 'rule' );
+	
+	if ( start_with_rule )
+	{
+		trace_by_perm.style.display = 'none';
+	}
+	else
+	{
+		trace_by_rule.style.display = 'none';
+	}
+	
+	// selection window for viewing effective permissions
+	var main = document.getElementById(aclManagerID + '_main');
+	main.innerHTML = '';
+	
+	var wrapper = document.createElement('div');
+	$(wrapper).css('padding-bottom', '20px');
+	
+	var floatlink = document.createElement('div');
+	$(floatlink).css('float', 'right').css('margin-left', '20px').css('margin-bottom', '20px').css('text-align', 'right');
+	var a_toggle = document.createElement('a');
+	$(a_toggle).attr('id', 'aclDebugTraceViewToggle');
+	a_toggle.innerHTML = '&raquo; ';
+	a_toggle.innerHTML += start_with_rule ? $lang.get('acl_btn_sort_perm') : $lang.get('acl_btn_sort_rule');
+	a_toggle.href = '#';
+	floatlink.appendChild(a_toggle);
+	floatlink.appendChild(document.createElement('br'));
+	var a_key = document.createElement('a');
+	$(a_key).css('font-size', 'smaller');
+	a_key.innerHTML = '&raquo; ';
+	a_key.innerHTML += $lang.get('acl_btn_view_key');
+	a_key.href = '#';
+	floatlink.appendChild(a_key);
+	wrapper.appendChild(floatlink);
+	
+	var h3 = document.createElement('h3');
+	h3.appendChild(document.createTextNode($lang.get('acl_msg_debug_main_title')));
+	wrapper.appendChild(h3);
+	var p = document.createElement('p');
+	p.appendChild(document.createTextNode($lang.get('acl_msg_debug_main_body')));
+	wrapper.appendChild(p);
+	
+	wrapper.appendChild(trace_by_perm);
+	wrapper.appendChild(trace_by_rule);
+	
+	main.appendChild(wrapper);
+	
+	$(a_toggle).click(function(e)
+		{
+			aclTraceToggleViews();
+			return false;
+		});
+	
+	$(a_key).click(function(e)
+		{
+			aclTraceModalKey();
+			return false;
+		});
 }
 
 function aclTraceToggleViews()
 {
-  var trace_by_perm = document.getElementById('aclDebugTraceViewPerm');
-  var trace_by_rule = document.getElementById('aclDebugTraceViewRule');
-  
-  var toggler = document.getElementById('aclDebugTraceViewToggle');
-  var newtext;
-  
-  if ( trace_by_perm.style.display == 'none' )
-  {
-    newtext = $lang.get('acl_btn_sort_rule');
-    $(trace_by_rule).hide('blind', {}, 750, function()
-      {
-        $(trace_by_perm).show('blind', {}, 750);
-      });
-    createCookie('acl_trace_view', 'perm');
-  }
-  else
-  {
-    newtext = $lang.get('acl_btn_sort_perm');
-    $(trace_by_perm).hide('blind', {}, 750, function()
-      {
-        $(trace_by_rule).show('blind', {}, 750);
-      });
-    createCookie('acl_trace_view', 'rule');
-  }
-  $(toggler).fadeOut(500, function()
-    {
-      this.innerHTML = '&raquo; ' + newtext;
-      $(this).fadeIn(500);
-    });
+	var trace_by_perm = document.getElementById('aclDebugTraceViewPerm');
+	var trace_by_rule = document.getElementById('aclDebugTraceViewRule');
+	
+	var toggler = document.getElementById('aclDebugTraceViewToggle');
+	var newtext;
+	
+	if ( trace_by_perm.style.display == 'none' )
+	{
+		newtext = $lang.get('acl_btn_sort_rule');
+		$(trace_by_rule).hide('blind', {}, 750, function()
+			{
+				$(trace_by_perm).show('blind', {}, 750);
+			});
+		createCookie('acl_trace_view', 'perm');
+	}
+	else
+	{
+		newtext = $lang.get('acl_btn_sort_perm');
+		$(trace_by_perm).hide('blind', {}, 750, function()
+			{
+				$(trace_by_rule).show('blind', {}, 750);
+			});
+		createCookie('acl_trace_view', 'rule');
+	}
+	$(toggler).fadeOut(500, function()
+		{
+			this.innerHTML = '&raquo; ' + newtext;
+			$(this).fadeIn(500);
+		});
 }
 
 function aclDrawTraceByPerm(data)
 {
-  var wrapper = document.createElement('div');
-  // wrapper.style.display = 'none';
-  
-  // temporarily append wrapper to body to allow onclick to work
-  // var body = document.getElementsByTagName('body')[0];
-  // body.appendChild(wrapper);  
-  
-  for ( var i in data.perms )
-  {
-    var perm = data.perms[i];
-    var item = document.createElement('div');
-    item.className = perm.divclass;
-    
-    // first row - permission name + current setting
-    // use innerHTML here to allow for HTML in localized permission types
-    item.innerHTML += '<b>' + perm.perm_name + ' - ' + perm.perm_value + '</b>';
-    item.appendChild(document.createElement('br'));
-    
-    // second row - permission localized name + rule ID
-    var sm = document.createElement('small');
-    sm.innerHTML = perm.perm_src;
-    
-    item.appendChild(sm);
-    
-    wrapper.appendChild(item);
-    
-    // whole row is now in the document
-    if ( perm.rule_id != -1 )
-    {
-      sm.innerHTML += ' [';
-      // rule is editable
-      var editlink = document.createElement('a');
-      editlink.href = 'javascript:ajaxOpenDirectACLRule(' + perm.rule_id + ');';
-      editlink.appendChild(document.createTextNode($lang.get('acl_btn_edit_rule')));
-      sm.appendChild(editlink);
-      sm.innerHTML += ']';
-    }
-    
-    if ( perm.bad_deps.length > 0 )
-    {
-      var bd = document.createElement('span');
-      $(bd).addClass('acl_failed_deps');
-      var failed_deps = '';
-      for ( var i = 0; i < perm.bad_deps.length; i++ )
-      {
-        if ( i > 0 )
-          failed_deps += ', ';
-        failed_deps += data.perms[perm.bad_deps[i]].perm_name;
-      }
-      var title = document.createElement('span');
-      $(title).addClass('title');
-      title.appendChild(document.createTextNode($lang.get('acl_msg_failed_deps')));
-      bd.appendChild(title);
-      bd.appendChild(document.createTextNode(failed_deps));
-      
-      item.appendChild(document.createElement('br'));
-      item.appendChild(bd);
-    }
-  }
-  
-  // var ret = wrapper.cloneNode(true);
-  // body.removeChild(wrapper);
-  // wrapper = false;
-  // ret.style.display = 'block';
-  // console.debug(ret);
-  // return ret;
-  return wrapper;
+	var wrapper = document.createElement('div');
+	// wrapper.style.display = 'none';
+	
+	// temporarily append wrapper to body to allow onclick to work
+	// var body = document.getElementsByTagName('body')[0];
+	// body.appendChild(wrapper);  
+	
+	for ( var i in data.perms )
+	{
+		var perm = data.perms[i];
+		var item = document.createElement('div');
+		item.className = perm.divclass;
+		
+		// first row - permission name + current setting
+		// use innerHTML here to allow for HTML in localized permission types
+		item.innerHTML += '<b>' + perm.perm_name + ' - ' + perm.perm_value + '</b>';
+		item.appendChild(document.createElement('br'));
+		
+		// second row - permission localized name + rule ID
+		var sm = document.createElement('small');
+		sm.innerHTML = perm.perm_src;
+		
+		item.appendChild(sm);
+		
+		wrapper.appendChild(item);
+		
+		// whole row is now in the document
+		if ( perm.rule_id != -1 )
+		{
+			sm.innerHTML += ' [';
+			// rule is editable
+			var editlink = document.createElement('a');
+			editlink.href = 'javascript:ajaxOpenDirectACLRule(' + perm.rule_id + ');';
+			editlink.appendChild(document.createTextNode($lang.get('acl_btn_edit_rule')));
+			sm.appendChild(editlink);
+			sm.innerHTML += ']';
+		}
+		
+		if ( perm.bad_deps.length > 0 )
+		{
+			var bd = document.createElement('span');
+			$(bd).addClass('acl_failed_deps');
+			var failed_deps = '';
+			for ( var i = 0; i < perm.bad_deps.length; i++ )
+			{
+				if ( i > 0 )
+					failed_deps += ', ';
+				failed_deps += data.perms[perm.bad_deps[i]].perm_name;
+			}
+			var title = document.createElement('span');
+			$(title).addClass('title');
+			title.appendChild(document.createTextNode($lang.get('acl_msg_failed_deps')));
+			bd.appendChild(title);
+			bd.appendChild(document.createTextNode(failed_deps));
+			
+			item.appendChild(document.createElement('br'));
+			item.appendChild(bd);
+		}
+	}
+	
+	// var ret = wrapper.cloneNode(true);
+	// body.removeChild(wrapper);
+	// wrapper = false;
+	// ret.style.display = 'block';
+	// console.debug(ret);
+	// return ret;
+	return wrapper;
 }
 
 function aclDrawTraceByRule(data)
 {
-  var wrapper = document.createElement('div');
-  var groupdata = {};
-  
-  for ( var i in data.perms )
-  {
-    var perm = data.perms[i];
-    if ( !groupdata[perm['rule_id']] )
-    {
-      groupdata[perm['rule_id']] = {
-        meta: {
-          divclass: perm.divclass,
-          perm_src: perm.perm_src,
-          rule_id: perm.rule_id
-        },
-        rules: {}
-      };
-    }
-    groupdata[perm['rule_id']]['rules'][i] = perm;
-  }
-  
-  for ( var i in groupdata )
-  {
-    var group = groupdata[i];
-    var grp = document.createElement('div');
-    var head = document.createElement('div');
-    head.className = group.meta.divclass;
-    var span = document.createElement('span');
-    span.style.fontSize = 'larger';
-    span.appendChild(document.createTextNode(group.meta.perm_src));
-    head.appendChild(span);
-    if ( group.meta.rule_id != -1 )
-    {
-      head.innerHTML += ' [';
-      // rule is editable
-      var editlink = document.createElement('a');
-      editlink.href = 'javascript:ajaxOpenDirectACLRule(' + group.meta.rule_id + ');';
-      editlink.appendChild(document.createTextNode($lang.get('acl_btn_edit_rule')));
-      head.appendChild(editlink);
-      head.innerHTML += ']';
-    }
-    grp.appendChild(head);
-    for ( var i in group.rules )
-    {
-      var rule = group.rules[i];
-      var rulediv = document.createElement('div');
-      rulediv.style.padding = '3px 12px';
-      rulediv.innerHTML += rule.perm_name + ': ';
-      var b = document.createElement('strong');
-      b.appendChild(document.createTextNode(rule.perm_value));
-      rulediv.appendChild(b);
-      grp.appendChild(rulediv);
-      
-      if ( rule.bad_deps.length > 0 )
-      {
-        var bd = document.createElement('span');
-        $(bd).addClass('acl_failed_deps');
-        var failed_deps = '';
-        for ( var i = 0; i < rule.bad_deps.length; i++ )
-        {
-          if ( i > 0 )
-            failed_deps += ', ';
-          failed_deps += data.perms[rule.bad_deps[i]].perm_name;
-        }
-        var title = document.createElement('span');
-        $(title).addClass('title');
-        title.appendChild(document.createTextNode($lang.get('acl_msg_failed_deps')));
-        bd.appendChild(title);
-        bd.appendChild(document.createTextNode(failed_deps));
-        
-        rulediv.appendChild(document.createElement('br'));
-        rulediv.appendChild(bd);
-      }
-    }
-    wrapper.appendChild(grp);
-  }
-  
-  return wrapper;
+	var wrapper = document.createElement('div');
+	var groupdata = {};
+	
+	for ( var i in data.perms )
+	{
+		var perm = data.perms[i];
+		if ( !groupdata[perm['rule_id']] )
+		{
+			groupdata[perm['rule_id']] = {
+				meta: {
+					divclass: perm.divclass,
+					perm_src: perm.perm_src,
+					rule_id: perm.rule_id
+				},
+				rules: {}
+			};
+		}
+		groupdata[perm['rule_id']]['rules'][i] = perm;
+	}
+	
+	for ( var i in groupdata )
+	{
+		var group = groupdata[i];
+		var grp = document.createElement('div');
+		var head = document.createElement('div');
+		head.className = group.meta.divclass;
+		var span = document.createElement('span');
+		span.style.fontSize = 'larger';
+		span.appendChild(document.createTextNode(group.meta.perm_src));
+		head.appendChild(span);
+		if ( group.meta.rule_id != -1 )
+		{
+			head.innerHTML += ' [';
+			// rule is editable
+			var editlink = document.createElement('a');
+			editlink.href = 'javascript:ajaxOpenDirectACLRule(' + group.meta.rule_id + ');';
+			editlink.appendChild(document.createTextNode($lang.get('acl_btn_edit_rule')));
+			head.appendChild(editlink);
+			head.innerHTML += ']';
+		}
+		grp.appendChild(head);
+		for ( var i in group.rules )
+		{
+			var rule = group.rules[i];
+			var rulediv = document.createElement('div');
+			rulediv.style.padding = '3px 12px';
+			rulediv.innerHTML += rule.perm_name + ': ';
+			var b = document.createElement('strong');
+			b.appendChild(document.createTextNode(rule.perm_value));
+			rulediv.appendChild(b);
+			grp.appendChild(rulediv);
+			
+			if ( rule.bad_deps.length > 0 )
+			{
+				var bd = document.createElement('span');
+				$(bd).addClass('acl_failed_deps');
+				var failed_deps = '';
+				for ( var i = 0; i < rule.bad_deps.length; i++ )
+				{
+					if ( i > 0 )
+						failed_deps += ', ';
+					failed_deps += data.perms[rule.bad_deps[i]].perm_name;
+				}
+				var title = document.createElement('span');
+				$(title).addClass('title');
+				title.appendChild(document.createTextNode($lang.get('acl_msg_failed_deps')));
+				bd.appendChild(title);
+				bd.appendChild(document.createTextNode(failed_deps));
+				
+				rulediv.appendChild(document.createElement('br'));
+				rulediv.appendChild(bd);
+			}
+		}
+		wrapper.appendChild(grp);
+	}
+	
+	return wrapper;
 }
 
 function aclShowPresetLoader()
 {
-  var prompt = miniPrompt(function(parent)
-    {
-      parent.innerHTML = '<img style="display: block; margin: 0 auto;" src="' + cdnPath + '/images/loading-big.gif" />';
-    });
-  var request = toJSONString({
-      mode: 'list_presets'
-    });
-  ajaxPost(stdAjaxPrefix + '&_mode=acljson', 'acl_params=' + ajaxEscape(request), function(ajax)
-    {
-      if ( ajax.readyState == 4 && ajax.status == 200 )
-      {
-        if ( !check_json_response(ajax.responseText) )
-        {
-          miniPromptDestroy(prompt);
-          return handle_invalid_json(ajax.responseText);
-        }
-        var response = parseJSON(ajax.responseText);
-        if ( response.mode == 'error' )
-        {
-          alert(response.error);
-          miniPromptDestroy(prompt);
-          return false;
-        }
-        prompt = prompt.firstChild.nextSibling;
-        prompt.style.textAlign = 'center';
-        prompt.innerHTML = '<h3>' + $lang.get('acl_lbl_preset_load_title') + '</h3>';
-        
-        if ( response.presets.length > 0 )
-        {
-          // selection box
-          var para = document.createElement('p');
-          var select = document.createElement('select');
-          
-          var option = document.createElement('option');
-          option.value = '0';
-          option.appendChild(document.createTextNode($lang.get('acl_lbl_preset_load')));
-          select.appendChild(option);
-          
-          for ( var i = 0; i < response.presets.length; i++ )
-          {
-            var preset = response.presets[i];
-            var option = document.createElement('option');
-            option.value = preset.rule_id;
-            option.preset_data = preset;
-            option.appendChild(document.createTextNode($lang.get(preset.preset_name)));
-            select.appendChild(option);
-          }
-          
-          para.appendChild(select);
-          prompt.appendChild(para);
-          
-          // buttons
-          var buttons = document.createElement('p');
-          
-          // load button
-          var btn_load = document.createElement('a');
-          btn_load.className = 'abutton abutton_green';
-          btn_load.style.fontWeight = 'bold';
-          btn_load.appendChild(document.createTextNode($lang.get('acl_btn_load_preset')));
-          btn_load.selectobj = select;
-          btn_load.onclick = function()
-          {
-            if ( this.selectobj.value == '0' )
-            {
-              alert($lang.get('acl_err_select_preset'));
-              return false;
-            }
-            // retrieve preset data
-            for ( var i = 0; i < this.selectobj.childNodes.length; i++ )
-            {
-              if ( this.selectobj.childNodes[i].tagName == 'OPTION' )
-              {
-                var node = this.selectobj.childNodes[i];
-                if ( node.value == this.selectobj.value )
-                {
-                  aclSetRulesAbsolute(node.preset_data.rules);
-                  break;
-                }
-              }
-            }
-            miniPromptDestroy(this);
-            return false;
-          }
-          btn_load.href = '#';
-          buttons.appendChild(btn_load);
-          
-          buttons.appendChild(document.createTextNode(' '));
-          
-          // cancel button
-          var btn_cancel = document.createElement('a');
-          btn_cancel.className = 'abutton';
-          btn_cancel.appendChild(document.createTextNode($lang.get('etc_cancel')));
-          btn_cancel.onclick = function()
-          {
-            miniPromptDestroy(this);
-            return false;
-          }
-          btn_cancel.href = '#';
-          buttons.appendChild(btn_cancel);
-          
-          prompt.appendChild(buttons);
-        }
-        else
-        {
-          // "no presets"
-          prompt.innerHTML += '<p>' + $lang.get('acl_msg_no_presets', { close_flags: 'href="#" onclick="miniPromptDestroy(this); return false;"' }) + '</p>';
-        }
-      }
-    });
+	var prompt = miniPrompt(function(parent)
+		{
+			parent.innerHTML = '<img style="display: block; margin: 0 auto;" src="' + cdnPath + '/images/loading-big.gif" />';
+		});
+	var request = toJSONString({
+			mode: 'list_presets'
+		});
+	ajaxPost(stdAjaxPrefix + '&_mode=acljson', 'acl_params=' + ajaxEscape(request), function(ajax)
+		{
+			if ( ajax.readyState == 4 && ajax.status == 200 )
+			{
+				if ( !check_json_response(ajax.responseText) )
+				{
+					miniPromptDestroy(prompt);
+					return handle_invalid_json(ajax.responseText);
+				}
+				var response = parseJSON(ajax.responseText);
+				if ( response.mode == 'error' )
+				{
+					alert(response.error);
+					miniPromptDestroy(prompt);
+					return false;
+				}
+				prompt = prompt.firstChild.nextSibling;
+				prompt.style.textAlign = 'center';
+				prompt.innerHTML = '<h3>' + $lang.get('acl_lbl_preset_load_title') + '</h3>';
+				
+				if ( response.presets.length > 0 )
+				{
+					// selection box
+					var para = document.createElement('p');
+					var select = document.createElement('select');
+					
+					var option = document.createElement('option');
+					option.value = '0';
+					option.appendChild(document.createTextNode($lang.get('acl_lbl_preset_load')));
+					select.appendChild(option);
+					
+					for ( var i = 0; i < response.presets.length; i++ )
+					{
+						var preset = response.presets[i];
+						var option = document.createElement('option');
+						option.value = preset.rule_id;
+						option.preset_data = preset;
+						option.appendChild(document.createTextNode($lang.get(preset.preset_name)));
+						select.appendChild(option);
+					}
+					
+					para.appendChild(select);
+					prompt.appendChild(para);
+					
+					// buttons
+					var buttons = document.createElement('p');
+					
+					// load button
+					var btn_load = document.createElement('a');
+					btn_load.className = 'abutton abutton_green';
+					btn_load.style.fontWeight = 'bold';
+					btn_load.appendChild(document.createTextNode($lang.get('acl_btn_load_preset')));
+					btn_load.selectobj = select;
+					btn_load.onclick = function()
+					{
+						if ( this.selectobj.value == '0' )
+						{
+							alert($lang.get('acl_err_select_preset'));
+							return false;
+						}
+						// retrieve preset data
+						for ( var i = 0; i < this.selectobj.childNodes.length; i++ )
+						{
+							if ( this.selectobj.childNodes[i].tagName == 'OPTION' )
+							{
+								var node = this.selectobj.childNodes[i];
+								if ( node.value == this.selectobj.value )
+								{
+									aclSetRulesAbsolute(node.preset_data.rules);
+									break;
+								}
+							}
+						}
+						miniPromptDestroy(this);
+						return false;
+					}
+					btn_load.href = '#';
+					buttons.appendChild(btn_load);
+					
+					buttons.appendChild(document.createTextNode(' '));
+					
+					// cancel button
+					var btn_cancel = document.createElement('a');
+					btn_cancel.className = 'abutton';
+					btn_cancel.appendChild(document.createTextNode($lang.get('etc_cancel')));
+					btn_cancel.onclick = function()
+					{
+						miniPromptDestroy(this);
+						return false;
+					}
+					btn_cancel.href = '#';
+					buttons.appendChild(btn_cancel);
+					
+					prompt.appendChild(buttons);
+				}
+				else
+				{
+					// "no presets"
+					prompt.innerHTML += '<p>' + $lang.get('acl_msg_no_presets', { close_flags: 'href="#" onclick="miniPromptDestroy(this); return false;"' }) + '</p>';
+				}
+			}
+		});
 }
 
 function aclSetRulesAbsolute(rules)
 {
-  __aclSetAllRadios('i');
-  
-  var form = document.forms[aclManagerID + '_formobj'];
-  if (!form)
-  {
-    return false;
-  }
-  var inputs = form.getElementsByTagName('input');
-  var radios = new Array();
-  var dbg = '';
-  for(var i = 0; i < inputs.length; i++)
-  {
-    if(inputs[i].type == 'radio')
-      radios.push(inputs[i]);
-  }
-  for(var i in radios)
-  {
-    if ( typeof(rules[ radios[i]['name'] ]) == 'number' )
-    {
-      radios[i].checked = ( rules[radios[i]['name']] == radios[i].value );
-    }
-  }
+	__aclSetAllRadios('i');
+	
+	var form = document.forms[aclManagerID + '_formobj'];
+	if (!form)
+	{
+		return false;
+	}
+	var inputs = form.getElementsByTagName('input');
+	var radios = new Array();
+	var dbg = '';
+	for(var i = 0; i < inputs.length; i++)
+	{
+		if(inputs[i].type == 'radio')
+			radios.push(inputs[i]);
+	}
+	for(var i in radios)
+	{
+		if ( typeof(rules[ radios[i]['name'] ]) == 'number' )
+		{
+			radios[i].checked = ( rules[radios[i]['name']] == radios[i].value );
+		}
+	}
 }
 
 function aclShowPresetSave()
 {
-  miniPrompt(function(parent)
-    {
-      parent.style.textAlign = 'center';
-      
-      parent.innerHTML = '<h3>' + $lang.get('acl_lbl_preset_save_title') + '</h3>';
-      var input = document.createElement('input');
-      input.id = aclManagerID + '_preset_save';
-      input.type = 'text';
-      input.size = '30';
-      input.onkeypress = function(e)
-      {
-        // javascript sucks. IE and several others throw myriad errors unless it's done this way.
-        if ( e )
-        if ( e.keyCode )
-        if ( e.keyCode == 13 )
-        {
-          if ( aclSavePreset() )
-          {
-            if ( window.opera )
-            {
-              // damn weird opera bug.
-              var input = this;
-              setTimeout(function()
-                {
-                  miniPromptDestroy(input);
-                }, 10);
-            }
-            else
-            {
-              miniPromptDestroy(this);
-            }
-          }
-        }
-        else if ( e.keyCode == 27 )
-        {
-          miniPromptDestroy(this);
-        }
-      }
-      var para = document.createElement('p');
-      para.appendChild(input);
-      
-      parent.appendChild(para);
-      
-      // buttons
-      var buttons = document.createElement('p');
-      
-      // save button
-      var btn_save = document.createElement('a');
-      btn_save.className = 'abutton abutton_green';
-      btn_save.style.fontWeight = 'bold';
-      btn_save.appendChild(document.createTextNode($lang.get('acl_btn_save_preset')));
-      btn_save.selectobj = select;
-      btn_save.onclick = function()
-      {
-        if ( aclSavePreset() )
-        {
-          miniPromptDestroy(this);
-        }
-        return false;
-      }
-      btn_save.href = '#';
-      buttons.appendChild(btn_save);
-      
-      buttons.appendChild(document.createTextNode(' '));
-      
-      // cancel button
-      var btn_cancel = document.createElement('a');
-      btn_cancel.className = 'abutton';
-      btn_cancel.appendChild(document.createTextNode($lang.get('etc_cancel')));
-      btn_cancel.onclick = function()
-      {
-        miniPromptDestroy(this);
-        return false;
-      }
-      btn_cancel.href = '#';
-      buttons.appendChild(btn_cancel);
-      
-      parent.appendChild(buttons);
-      
-      var timeout = ( aclDisableTransitionFX ) ? 10 : 1000;
-      setTimeout(function()
-        {
-          input.focus();
-        }, timeout);
-    });
+	miniPrompt(function(parent)
+		{
+			parent.style.textAlign = 'center';
+			
+			parent.innerHTML = '<h3>' + $lang.get('acl_lbl_preset_save_title') + '</h3>';
+			var input = document.createElement('input');
+			input.id = aclManagerID + '_preset_save';
+			input.type = 'text';
+			input.size = '30';
+			input.onkeypress = function(e)
+			{
+				// javascript sucks. IE and several others throw myriad errors unless it's done this way.
+				if ( e )
+				if ( e.keyCode )
+				if ( e.keyCode == 13 )
+				{
+					if ( aclSavePreset() )
+					{
+						if ( window.opera )
+						{
+							// damn weird opera bug.
+							var input = this;
+							setTimeout(function()
+								{
+									miniPromptDestroy(input);
+								}, 10);
+						}
+						else
+						{
+							miniPromptDestroy(this);
+						}
+					}
+				}
+				else if ( e.keyCode == 27 )
+				{
+					miniPromptDestroy(this);
+				}
+			}
+			var para = document.createElement('p');
+			para.appendChild(input);
+			
+			parent.appendChild(para);
+			
+			// buttons
+			var buttons = document.createElement('p');
+			
+			// save button
+			var btn_save = document.createElement('a');
+			btn_save.className = 'abutton abutton_green';
+			btn_save.style.fontWeight = 'bold';
+			btn_save.appendChild(document.createTextNode($lang.get('acl_btn_save_preset')));
+			btn_save.selectobj = select;
+			btn_save.onclick = function()
+			{
+				if ( aclSavePreset() )
+				{
+					miniPromptDestroy(this);
+				}
+				return false;
+			}
+			btn_save.href = '#';
+			buttons.appendChild(btn_save);
+			
+			buttons.appendChild(document.createTextNode(' '));
+			
+			// cancel button
+			var btn_cancel = document.createElement('a');
+			btn_cancel.className = 'abutton';
+			btn_cancel.appendChild(document.createTextNode($lang.get('etc_cancel')));
+			btn_cancel.onclick = function()
+			{
+				miniPromptDestroy(this);
+				return false;
+			}
+			btn_cancel.href = '#';
+			buttons.appendChild(btn_cancel);
+			
+			parent.appendChild(buttons);
+			
+			var timeout = ( aclDisableTransitionFX ) ? 10 : 1000;
+			setTimeout(function()
+				{
+					input.focus();
+				}, timeout);
+		});
 }
 
 function aclSavePreset()
 {
-  var input = document.getElementById(aclManagerID + '_preset_save');
-  if ( trim(input.value) == '' )
-  {
-    alert($lang.get('acl_err_preset_name_empty'));
-    return false;
-  }
-  var form = document.forms[aclManagerID + '_formobj'], selections = {};
-  var dbg = '';
-  var warned_everyone = false;
-  for(var i in aclPermList)
-  {
-    selections[aclPermList[i]] = getRadioState(form, aclPermList[i], ['i', 1, 2, 3, 4]);
-    // If we're editing permissions for everyone on the entire site and the
-    // admin selected to deny privileges, give a stern warning about it.
-    if ( selections[aclPermList[i]] == 1 && aclDataCache.target_type == 1 /* ACL_TYPE_GROUP */ && aclDataCache.target_id == 1 && !warned_everyone )
-    {
-      warned_everyone = true;
-      if ( !confirm($lang.get('acl_msg_deny_everyone_confirm')) )
-      {
-        return false;
-      }
-    }
-    dbg += aclPermList[i] + ': ' + selections[aclPermList[i]] + "\n";
-    if(!selections[aclPermList[i]])
-    {
-      alert("Invalid return from getRadioState: "+i+": "+selections[i]+" ("+typeof(selections[i])+")");
-      return false;
-    }
-  }
-  
-  var packet = toJSONString({
-      mode: 'save_preset',
-      preset_name: input.value,
-      perms: selections
-    });
-  
-  var whitey = whiteOutElement(document.getElementById(aclManagerID));
-  
-  ajaxPost(stdAjaxPrefix + '&_mode=acljson', 'acl_params=' + ajaxEscape(packet), function(ajax)
-    {
-      if ( ajax.readyState == 4 && ajax.status == 200 )
-      {
-        if ( !check_json_response(ajax.responseText) )
-        {
-          whitey.parentNode.removeChild(whitey);
-          return handle_invalid_json(ajax.responseText);
-        }
-        var response = parseJSON(ajax.responseText);
-        if ( response.mode == 'error' )
-        {
-          whitey.parentNode.removeChild(whitey);
-          alert(response.error);
-          return false;
-        }
-        whiteOutReportSuccess(whitey);
-      }
-    });
-  
-  return true;
+	var input = document.getElementById(aclManagerID + '_preset_save');
+	if ( trim(input.value) == '' )
+	{
+		alert($lang.get('acl_err_preset_name_empty'));
+		return false;
+	}
+	var form = document.forms[aclManagerID + '_formobj'], selections = {};
+	var dbg = '';
+	var warned_everyone = false;
+	for(var i in aclPermList)
+	{
+		selections[aclPermList[i]] = getRadioState(form, aclPermList[i], ['i', 1, 2, 3, 4]);
+		// If we're editing permissions for everyone on the entire site and the
+		// admin selected to deny privileges, give a stern warning about it.
+		if ( selections[aclPermList[i]] == 1 && aclDataCache.target_type == 1 /* ACL_TYPE_GROUP */ && aclDataCache.target_id == 1 && !warned_everyone )
+		{
+			warned_everyone = true;
+			if ( !confirm($lang.get('acl_msg_deny_everyone_confirm')) )
+			{
+				return false;
+			}
+		}
+		dbg += aclPermList[i] + ': ' + selections[aclPermList[i]] + "\n";
+		if(!selections[aclPermList[i]])
+		{
+			alert("Invalid return from getRadioState: "+i+": "+selections[i]+" ("+typeof(selections[i])+")");
+			return false;
+		}
+	}
+	
+	var packet = toJSONString({
+			mode: 'save_preset',
+			preset_name: input.value,
+			perms: selections
+		});
+	
+	var whitey = whiteOutElement(document.getElementById(aclManagerID));
+	
+	ajaxPost(stdAjaxPrefix + '&_mode=acljson', 'acl_params=' + ajaxEscape(packet), function(ajax)
+		{
+			if ( ajax.readyState == 4 && ajax.status == 200 )
+			{
+				if ( !check_json_response(ajax.responseText) )
+				{
+					whitey.parentNode.removeChild(whitey);
+					return handle_invalid_json(ajax.responseText);
+				}
+				var response = parseJSON(ajax.responseText);
+				if ( response.mode == 'error' )
+				{
+					whitey.parentNode.removeChild(whitey);
+					alert(response.error);
+					return false;
+				}
+				whiteOutReportSuccess(whitey);
+			}
+		});
+	
+	return true;
 }
 
 function array_keys(obj)
 {
-  keys = new Array();
-  for(var i in obj)
-    keys.push(i);
-  return keys;
+	keys = new Array();
+	for(var i in obj)
+		keys.push(i);
+	return keys;
 }