includes/clientside/static/theme-manager.js
changeset 1227 bdac73ed481e
parent 823 4596c40aaa94
equal deleted inserted replaced
1226:de56132c008d 1227:bdac73ed481e
     1 function ajaxToggleSystemThemes()
     1 function ajaxToggleSystemThemes()
     2 {
     2 {
     3   var theme_list = document.getElementById('theme_list_edit');
     3 	var theme_list = document.getElementById('theme_list_edit');
     4   var mode = ( theme_list.sys_shown ) ? 'hide' : 'show';
     4 	var mode = ( theme_list.sys_shown ) ? 'hide' : 'show';
     5   for ( var i = 0; i < theme_list.childNodes.length; i++ )
     5 	for ( var i = 0; i < theme_list.childNodes.length; i++ )
     6   {
     6 	{
     7     var child = theme_list.childNodes[i];
     7 		var child = theme_list.childNodes[i];
     8     if ( child.tagName == 'DIV' )
     8 		if ( child.tagName == 'DIV' )
     9     {
     9 		{
    10       if ( $dynano(child).hasClass('themebutton_theme_system') )
    10 			if ( $dynano(child).hasClass('themebutton_theme_system') )
    11       {
    11 			{
    12         if ( $dynano(child).hasClass('themebutton_theme_disabled') )
    12 				if ( $dynano(child).hasClass('themebutton_theme_disabled') )
    13         {
    13 				{
    14           $dynano(child).rmClass('themebutton_theme_disabled')
    14 					$dynano(child).rmClass('themebutton_theme_disabled')
    15         }
    15 				}
    16         if ( mode == 'show' )
    16 				if ( mode == 'show' )
    17         {
    17 				{
    18           domObjChangeOpac(0, child);
    18 					domObjChangeOpac(0, child);
    19           child.style.display = 'block';
    19 					child.style.display = 'block';
    20           domOpacity(child, 0, 100, 1000);
    20 					domOpacity(child, 0, 100, 1000);
    21         }
    21 				}
    22         else
    22 				else
    23         {
    23 				{
    24           domOpacity(child, 100, 0, 1000);
    24 					domOpacity(child, 100, 0, 1000);
    25           setTimeout("document.getElementById('" + child.id + "').style.display = 'none';", 1050);
    25 					setTimeout("document.getElementById('" + child.id + "').style.display = 'none';", 1050);
    26         }
    26 				}
    27       }
    27 			}
    28     }
    28 		}
    29   }
    29 	}
    30   theme_list.sys_shown = ( mode == 'show' );
    30 	theme_list.sys_shown = ( mode == 'show' );
    31   document.getElementById('systheme_toggler').innerHTML = ( mode == 'hide' ) ? $lang.get('acptm_btn_system_themes_show') : $lang.get('acptm_btn_system_themes_hide');
    31 	document.getElementById('systheme_toggler').innerHTML = ( mode == 'hide' ) ? $lang.get('acptm_btn_system_themes_show') : $lang.get('acptm_btn_system_themes_hide');
    32 }
    32 }
    33 
    33 
    34 function ajaxInstallTheme(theme_id)
    34 function ajaxInstallTheme(theme_id)
    35 {
    35 {
    36   var thediv = document.getElementById('themebtn_install_' + theme_id);
    36 	var thediv = document.getElementById('themebtn_install_' + theme_id);
    37   if ( !thediv )
    37 	if ( !thediv )
    38     return false;
    38 		return false;
    39   thediv.removeChild(thediv.getElementsByTagName('a')[0]);
    39 	thediv.removeChild(thediv.getElementsByTagName('a')[0]);
    40   var status = document.createElement('div');
    40 	var status = document.createElement('div');
    41   status.className = 'status';
    41 	status.className = 'status';
    42   thediv.appendChild(status);
    42 	thediv.appendChild(status);
    43   
    43 	
    44   var req = toJSONString({
    44 	var req = toJSONString({
    45       mode: 'install',
    45 			mode: 'install',
    46       theme_id: theme_id
    46 			theme_id: theme_id
    47     });
    47 		});
    48   // we've finished nukeing the existing interface, request editor data
    48 	// we've finished nukeing the existing interface, request editor data
    49   ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + ajaxEscape(req), function(ajax)
    49 	ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + ajaxEscape(req), function(ajax)
    50     {
    50 		{
    51       if ( ajax.readyState == 4 && ajax.status == 200 )
    51 			if ( ajax.readyState == 4 && ajax.status == 200 )
    52       {
    52 			{
    53         var response = String(ajax.responseText + '');
    53 				var response = String(ajax.responseText + '');
    54         if ( response.substr(0, 1) == '{' )
    54 				if ( response.substr(0, 1) == '{' )
    55         {
    55 				{
    56           response = parseJSON(response);
    56 					response = parseJSON(response);
    57           if ( response.mode == 'error' )
    57 					if ( response.mode == 'error' )
    58           {
    58 					{
    59             alert(response.error);
    59 						alert(response.error);
    60             return false;
    60 						return false;
    61           }
    61 					}
    62         }
    62 				}
    63         
    63 				
    64         var theme_list = document.getElementById('theme_list_edit');
    64 				var theme_list = document.getElementById('theme_list_edit');
    65   
    65 	
    66         var btn = document.createElement('div');
    66 				var btn = document.createElement('div');
    67         btn.className = 'themebutton';
    67 				btn.className = 'themebutton';
    68         btn.style.backgroundImage = thediv.style.backgroundImage;
    68 				btn.style.backgroundImage = thediv.style.backgroundImage;
    69         btn.id = 'themebtn_edit_' + theme_id;
    69 				btn.id = 'themebtn_edit_' + theme_id;
    70         
    70 				
    71         var a = document.createElement('a');
    71 				var a = document.createElement('a');
    72         a.className = 'tb-inner';
    72 				a.className = 'tb-inner';
    73         a.appendChild(document.createTextNode($lang.get('acptm_btn_theme_edit')));
    73 				a.appendChild(document.createTextNode($lang.get('acptm_btn_theme_edit')));
    74         a.appendChild(document.createTextNode("\n"));
    74 				a.appendChild(document.createTextNode("\n"));
    75         a.theme_id = theme_id;
    75 				a.theme_id = theme_id;
    76         a.onclick = function()
    76 				a.onclick = function()
    77         {
    77 				{
    78           ajaxEditTheme(this.theme_id);
    78 					ajaxEditTheme(this.theme_id);
    79           return false;
    79 					return false;
    80         }
    80 				}
    81         a.href = '#';
    81 				a.href = '#';
    82         var span = document.createElement('span');
    82 				var span = document.createElement('span');
    83         span.className = 'themename';
    83 				span.className = 'themename';
    84         span.appendChild(document.createTextNode(thediv.getAttribute('enano:themename')));
    84 				span.appendChild(document.createTextNode(thediv.getAttribute('enano:themename')));
    85         a.appendChild(span);
    85 				a.appendChild(span);
    86         btn.appendChild(a);
    86 				btn.appendChild(a);
    87         btn.setAttribute('enano:themename', thediv.getAttribute('enano:themename'));
    87 				btn.setAttribute('enano:themename', thediv.getAttribute('enano:themename'));
    88         theme_list.appendChild(btn);
    88 				theme_list.appendChild(btn);
    89         
    89 				
    90         thediv.parentNode.removeChild(thediv);
    90 				thediv.parentNode.removeChild(thediv);
    91       }
    91 			}
    92     });
    92 		});
    93 }
    93 }
    94 
    94 
    95 function ajaxEditTheme(theme_id)
    95 function ajaxEditTheme(theme_id)
    96 {
    96 {
    97   // Fade out and subsequently destroy the entire list, then make an
    97 	// Fade out and subsequently destroy the entire list, then make an
    98   // ajax request to the theme manager for the theme info via JSON
    98 	// ajax request to the theme manager for the theme info via JSON
    99   var theme_list = document.getElementById('theme_list_edit').parentNode;
    99 	var theme_list = document.getElementById('theme_list_edit').parentNode;
   100   var backgroundImage = document.getElementById('themebtn_edit_' + theme_id).style.backgroundImage;
   100 	var backgroundImage = document.getElementById('themebtn_edit_' + theme_id).style.backgroundImage;
   101   /*
   101 	/*
   102   for ( var i = 0; i < theme_list.childNodes.length; i++ )
   102 	for ( var i = 0; i < theme_list.childNodes.length; i++ )
   103   {
   103 	{
   104     var el = theme_list.childNodes[i];
   104 		var el = theme_list.childNodes[i];
   105     if ( el.tagName )
   105 		if ( el.tagName )
   106       domOpacity(el, 100, 0, 1000);
   106 			domOpacity(el, 100, 0, 1000);
   107   }
   107 	}
   108   */
   108 	*/
   109   var thediv = document.getElementById('themebtn_edit_' + theme_id);
   109 	var thediv = document.getElementById('themebtn_edit_' + theme_id);
   110   if ( !thediv )
   110 	if ( !thediv )
   111     return false;
   111 		return false;
   112   thediv.removeChild(thediv.getElementsByTagName('a')[0]);
   112 	thediv.removeChild(thediv.getElementsByTagName('a')[0]);
   113   var status = document.createElement('div');
   113 	var status = document.createElement('div');
   114   status.className = 'status';
   114 	status.className = 'status';
   115   thediv.appendChild(status);
   115 	thediv.appendChild(status);
   116   
   116 	
   117   setTimeout(function()
   117 	setTimeout(function()
   118     {
   118 		{
   119       var req = toJSONString({
   119 			var req = toJSONString({
   120           mode: 'fetch_theme',
   120 					mode: 'fetch_theme',
   121           theme_id: theme_id
   121 					theme_id: theme_id
   122         });
   122 				});
   123       // we've finished nukeing the existing interface, request editor data
   123 			// we've finished nukeing the existing interface, request editor data
   124       ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + ajaxEscape(req), function(ajax)
   124 			ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + ajaxEscape(req), function(ajax)
   125         {
   125 				{
   126           if ( ajax.readyState == 4 && ajax.status == 200 )
   126 					if ( ajax.readyState == 4 && ajax.status == 200 )
   127           {
   127 					{
   128             theme_list.innerHTML = '';
   128 						theme_list.innerHTML = '';
   129             var response = String(ajax.responseText + '');
   129 						var response = String(ajax.responseText + '');
   130             if ( !check_json_response(response) )
   130 						if ( !check_json_response(response) )
   131             {
   131 						{
   132               alert(response);
   132 							alert(response);
   133               return false;
   133 							return false;
   134             }
   134 						}
   135             response = parseJSON(response);
   135 						response = parseJSON(response);
   136             if ( response.mode == 'error' )
   136 						if ( response.mode == 'error' )
   137             {
   137 						{
   138               alert(response.error);
   138 							alert(response.error);
   139               return false;
   139 							return false;
   140             }
   140 						}
   141             response.background_image = backgroundImage;
   141 						response.background_image = backgroundImage;
   142             ajaxBuildThemeEditor(response, theme_list);
   142 						ajaxBuildThemeEditor(response, theme_list);
   143           }
   143 					}
   144         });
   144 				});
   145     }, 200);
   145 		}, 200);
   146 }
   146 }
   147 
   147 
   148 function ajaxBuildThemeEditor(data, target)
   148 function ajaxBuildThemeEditor(data, target)
   149 {
   149 {
   150   // Build the theme editor interface
   150 	// Build the theme editor interface
   151   // Init opacity
   151 	// Init opacity
   152   domObjChangeOpac(0, target);
   152 	domObjChangeOpac(0, target);
   153   
   153 	
   154   // Theme preview
   154 	// Theme preview
   155   var preview = document.createElement('div');
   155 	var preview = document.createElement('div');
   156   preview.style.border = '1px solid #F0F0F0';
   156 	preview.style.border = '1px solid #F0F0F0';
   157   preview.style.padding = '5px';
   157 	preview.style.padding = '5px';
   158   preview.style.width = '216px';
   158 	preview.style.width = '216px';
   159   preview.style.height = '150px';
   159 	preview.style.height = '150px';
   160   preview.style.backgroundImage = data.background_image;
   160 	preview.style.backgroundImage = data.background_image;
   161   preview.style.backgroundRepeat = 'no-repeat';
   161 	preview.style.backgroundRepeat = 'no-repeat';
   162   preview.style.backgroundPosition = 'center center';
   162 	preview.style.backgroundPosition = 'center center';
   163   preview.style.cssFloat = 'right';
   163 	preview.style.cssFloat = 'right';
   164   preview.style.styleFloat = 'right';
   164 	preview.style.styleFloat = 'right';
   165   
   165 	
   166   target.appendChild(preview);
   166 	target.appendChild(preview);
   167   
   167 	
   168   // Heading
   168 	// Heading
   169   var h3 = document.createElement('h3');
   169 	var h3 = document.createElement('h3');
   170   h3.appendChild(document.createTextNode($lang.get('acptm_heading_theme_edit', { theme_name: data.theme_name })));
   170 	h3.appendChild(document.createTextNode($lang.get('acptm_heading_theme_edit', { theme_name: data.theme_name })));
   171   target.appendChild(h3);
   171 	target.appendChild(h3);
   172   
   172 	
   173   // Field: Theme name
   173 	// Field: Theme name
   174   var l_name = document.createElement('label');
   174 	var l_name = document.createElement('label');
   175   l_name.appendChild(document.createTextNode($lang.get('acptm_field_theme_name') + ' '));
   175 	l_name.appendChild(document.createTextNode($lang.get('acptm_field_theme_name') + ' '));
   176   var f_name = document.createElement('input');
   176 	var f_name = document.createElement('input');
   177   f_name.type = 'text';
   177 	f_name.type = 'text';
   178   f_name.id = 'themeed_field_name';
   178 	f_name.id = 'themeed_field_name';
   179   f_name.value = data.theme_name;
   179 	f_name.value = data.theme_name;
   180   f_name.size = '40';
   180 	f_name.size = '40';
   181   l_name.appendChild(f_name);
   181 	l_name.appendChild(f_name);
   182   target.appendChild(l_name);
   182 	target.appendChild(l_name);
   183   
   183 	
   184   target.appendChild(document.createElement('br'));
   184 	target.appendChild(document.createElement('br'));
   185   target.appendChild(document.createElement('br'));
   185 	target.appendChild(document.createElement('br'));
   186   
   186 	
   187   // Field: default style
   187 	// Field: default style
   188   var l_style = document.createElement('label');
   188 	var l_style = document.createElement('label');
   189   l_style.appendChild(document.createTextNode($lang.get('acptm_field_default_style') + ' '));
   189 	l_style.appendChild(document.createTextNode($lang.get('acptm_field_default_style') + ' '));
   190   var f_style = document.createElement('select');
   190 	var f_style = document.createElement('select');
   191   f_style.id = 'themeed_field_style';
   191 	f_style.id = 'themeed_field_style';
   192   var opts = [];
   192 	var opts = [];
   193   for ( var i = 0; i < data.css.length; i++ )
   193 	for ( var i = 0; i < data.css.length; i++ )
   194   {
   194 	{
   195     if ( data.css[i] == '_printable' )
   195 		if ( data.css[i] == '_printable' )
   196       continue;
   196 			continue;
   197     
   197 		
   198     opts[i] = document.createElement('option');
   198 		opts[i] = document.createElement('option');
   199     opts[i].value = data.css[i];
   199 		opts[i].value = data.css[i];
   200     opts[i].appendChild(document.createTextNode(data.css[i]));
   200 		opts[i].appendChild(document.createTextNode(data.css[i]));
   201     if ( data.default_style == data.css[i] )
   201 		if ( data.default_style == data.css[i] )
   202     {
   202 		{
   203       opts[i].selected = true;
   203 			opts[i].selected = true;
   204     }
   204 		}
   205     f_style.appendChild(opts[i]);
   205 		f_style.appendChild(opts[i]);
   206   }
   206 	}
   207   l_style.appendChild(f_style);
   207 	l_style.appendChild(f_style);
   208   target.appendChild(l_style);
   208 	target.appendChild(l_style);
   209   
   209 	
   210   target.appendChild(document.createElement('br'));
   210 	target.appendChild(document.createElement('br'));
   211   target.appendChild(document.createElement('br'));
   211 	target.appendChild(document.createElement('br'));
   212   
   212 	
   213   // Default theme
   213 	// Default theme
   214   target.appendChild(document.createTextNode($lang.get('acptm_field_default_theme') + ' '));
   214 	target.appendChild(document.createTextNode($lang.get('acptm_field_default_theme') + ' '));
   215   if ( data.is_default )
   215 	if ( data.is_default )
   216   {
   216 	{
   217     var l_default = document.createElement('b');
   217 		var l_default = document.createElement('b');
   218     l_default.appendChild(document.createTextNode($lang.get('acptm_field_default_msg_current')));
   218 		l_default.appendChild(document.createTextNode($lang.get('acptm_field_default_msg_current')));
   219   }
   219 	}
   220   else
   220 	else
   221   {
   221 	{
   222     var l_default = document.createElement('label');
   222 		var l_default = document.createElement('label');
   223     var f_default = document.createElement('input');
   223 		var f_default = document.createElement('input');
   224     f_default.type = 'checkbox';
   224 		f_default.type = 'checkbox';
   225     f_default.id = 'themeed_field_default';
   225 		f_default.id = 'themeed_field_default';
   226     l_default.appendChild(f_default);
   226 		l_default.appendChild(f_default);
   227     l_default.appendChild(document.createTextNode($lang.get('acptm_field_default_btn_make_default')));
   227 		l_default.appendChild(document.createTextNode($lang.get('acptm_field_default_btn_make_default')));
   228   }
   228 	}
   229   target.appendChild(l_default);
   229 	target.appendChild(l_default);
   230   
   230 	
   231   target.appendChild(document.createElement('br'));
   231 	target.appendChild(document.createElement('br'));
   232   target.appendChild(document.createElement('br'));
   232 	target.appendChild(document.createElement('br'));
   233   
   233 	
   234   // Disable theme
   234 	// Disable theme
   235   var disable_span = document.createElement('span');
   235 	var disable_span = document.createElement('span');
   236   disable_span.appendChild(document.createTextNode($lang.get('acptm_field_disable_title') + ' '));
   236 	disable_span.appendChild(document.createTextNode($lang.get('acptm_field_disable_title') + ' '));
   237   target.appendChild(disable_span);
   237 	target.appendChild(disable_span);
   238   var l_disable = document.createElement('label');
   238 	var l_disable = document.createElement('label');
   239   var f_disable = document.createElement('input');
   239 	var f_disable = document.createElement('input');
   240   f_disable.type = 'checkbox';
   240 	f_disable.type = 'checkbox';
   241   f_disable.id = 'themeed_field_disable';
   241 	f_disable.id = 'themeed_field_disable';
   242   if ( !data.enabled )
   242 	if ( !data.enabled )
   243     f_disable.setAttribute('checked', 'checked');
   243 		f_disable.setAttribute('checked', 'checked');
   244   l_disable.style.fontWeight = 'bold';
   244 	l_disable.style.fontWeight = 'bold';
   245   l_disable.appendChild(f_disable);
   245 	l_disable.appendChild(f_disable);
   246   l_disable.appendChild(document.createTextNode($lang.get('acptm_field_disable')));
   246 	l_disable.appendChild(document.createTextNode($lang.get('acptm_field_disable')));
   247   target.appendChild(l_disable);
   247 	target.appendChild(l_disable);
   248   
   248 	
   249   // Availability policy
   249 	// Availability policy
   250   var h3 = document.createElement('h3');
   250 	var h3 = document.createElement('h3');
   251   h3.appendChild(document.createTextNode($lang.get('acptm_heading_theme_groups')));
   251 	h3.appendChild(document.createTextNode($lang.get('acptm_heading_theme_groups')));
   252   target.appendChild(h3);
   252 	target.appendChild(h3);
   253   
   253 	
   254   // Label for the whole field
   254 	// Label for the whole field
   255   var p_d_policy = document.createElement('p');
   255 	var p_d_policy = document.createElement('p');
   256   p_d_policy.style.fontWeight = 'bold';
   256 	p_d_policy.style.fontWeight = 'bold';
   257   p_d_policy.appendChild(document.createTextNode($lang.get('acptm_field_policy')));
   257 	p_d_policy.appendChild(document.createTextNode($lang.get('acptm_field_policy')));
   258   target.appendChild(p_d_policy);
   258 	target.appendChild(p_d_policy);
   259   
   259 	
   260   // Wrapper for options
   260 	// Wrapper for options
   261   var p_f_policy = document.createElement('p');
   261 	var p_f_policy = document.createElement('p');
   262   
   262 	
   263   // Option: allow all
   263 	// Option: allow all
   264   var l_policy_allow_all = document.createElement('label');
   264 	var l_policy_allow_all = document.createElement('label');
   265   var f_policy_allow_all = document.createElement('input');
   265 	var f_policy_allow_all = document.createElement('input');
   266   f_policy_allow_all.type = 'radio';
   266 	f_policy_allow_all.type = 'radio';
   267   f_policy_allow_all.id = 'themeed_field_policy_allow_all';
   267 	f_policy_allow_all.id = 'themeed_field_policy_allow_all';
   268   f_policy_allow_all.name = 'themeed_field_policy';
   268 	f_policy_allow_all.name = 'themeed_field_policy';
   269   f_policy_allow_all.value = 'allow_all';
   269 	f_policy_allow_all.value = 'allow_all';
   270   l_policy_allow_all.appendChild(f_policy_allow_all);
   270 	l_policy_allow_all.appendChild(f_policy_allow_all);
   271   l_policy_allow_all.appendChild(document.createTextNode(' ' + $lang.get('acptm_field_policy_allow_all')));
   271 	l_policy_allow_all.appendChild(document.createTextNode(' ' + $lang.get('acptm_field_policy_allow_all')));
   272   if ( data.group_policy == 'allow_all' )
   272 	if ( data.group_policy == 'allow_all' )
   273   {
   273 	{
   274     f_policy_allow_all.setAttribute('checked', 'checked');
   274 		f_policy_allow_all.setAttribute('checked', 'checked');
   275   }
   275 	}
   276   
   276 	
   277   // Option: whitelist
   277 	// Option: whitelist
   278   var l_policy_whitelist = document.createElement('label');
   278 	var l_policy_whitelist = document.createElement('label');
   279   var f_policy_whitelist = document.createElement('input');
   279 	var f_policy_whitelist = document.createElement('input');
   280   f_policy_whitelist.type = 'radio';
   280 	f_policy_whitelist.type = 'radio';
   281   f_policy_whitelist.id = 'themeed_field_policy_whitelist';
   281 	f_policy_whitelist.id = 'themeed_field_policy_whitelist';
   282   f_policy_whitelist.name = 'themeed_field_policy';
   282 	f_policy_whitelist.name = 'themeed_field_policy';
   283   f_policy_whitelist.value = 'whitelist';
   283 	f_policy_whitelist.value = 'whitelist';
   284   l_policy_whitelist.appendChild(f_policy_whitelist);
   284 	l_policy_whitelist.appendChild(f_policy_whitelist);
   285   l_policy_whitelist.appendChild(document.createTextNode(' ' + $lang.get('acptm_field_policy_whitelist')));
   285 	l_policy_whitelist.appendChild(document.createTextNode(' ' + $lang.get('acptm_field_policy_whitelist')));
   286   if ( data.group_policy == 'whitelist' )
   286 	if ( data.group_policy == 'whitelist' )
   287   {
   287 	{
   288     f_policy_whitelist.setAttribute('checked', 'checked');
   288 		f_policy_whitelist.setAttribute('checked', 'checked');
   289   }
   289 	}
   290   
   290 	
   291   // Option: blacklist
   291 	// Option: blacklist
   292   var l_policy_blacklist = document.createElement('label');
   292 	var l_policy_blacklist = document.createElement('label');
   293   var f_policy_blacklist = document.createElement('input');
   293 	var f_policy_blacklist = document.createElement('input');
   294   f_policy_blacklist.type = 'radio';
   294 	f_policy_blacklist.type = 'radio';
   295   f_policy_blacklist.id = 'themeed_field_policy_blacklist';
   295 	f_policy_blacklist.id = 'themeed_field_policy_blacklist';
   296   f_policy_blacklist.name = 'themeed_field_policy';
   296 	f_policy_blacklist.name = 'themeed_field_policy';
   297   f_policy_blacklist.value = 'blacklist';
   297 	f_policy_blacklist.value = 'blacklist';
   298   l_policy_blacklist.appendChild(f_policy_blacklist);
   298 	l_policy_blacklist.appendChild(f_policy_blacklist);
   299   l_policy_blacklist.appendChild(document.createTextNode(' ' + $lang.get('acptm_field_policy_blacklist')));
   299 	l_policy_blacklist.appendChild(document.createTextNode(' ' + $lang.get('acptm_field_policy_blacklist')));
   300   if ( data.group_policy == 'blacklist' )
   300 	if ( data.group_policy == 'blacklist' )
   301   {
   301 	{
   302     f_policy_blacklist.setAttribute('checked', 'checked');
   302 		f_policy_blacklist.setAttribute('checked', 'checked');
   303   }
   303 	}
   304   f_policy_allow_all.onclick = ajaxThemeManagerHandlePolicyClick;
   304 	f_policy_allow_all.onclick = ajaxThemeManagerHandlePolicyClick;
   305   f_policy_whitelist.onclick = ajaxThemeManagerHandlePolicyClick;
   305 	f_policy_whitelist.onclick = ajaxThemeManagerHandlePolicyClick;
   306   f_policy_blacklist.onclick = ajaxThemeManagerHandlePolicyClick;
   306 	f_policy_blacklist.onclick = ajaxThemeManagerHandlePolicyClick;
   307   
   307 	
   308   p_f_policy.appendChild(l_policy_allow_all);
   308 	p_f_policy.appendChild(l_policy_allow_all);
   309   p_f_policy.appendChild(document.createElement('br'));
   309 	p_f_policy.appendChild(document.createElement('br'));
   310   p_f_policy.appendChild(l_policy_whitelist);
   310 	p_f_policy.appendChild(l_policy_whitelist);
   311   p_f_policy.appendChild(document.createElement('br'));
   311 	p_f_policy.appendChild(document.createElement('br'));
   312   p_f_policy.appendChild(l_policy_blacklist);
   312 	p_f_policy.appendChild(l_policy_blacklist);
   313   
   313 	
   314   target.appendChild(p_d_policy);
   314 	target.appendChild(p_d_policy);
   315   target.appendChild(p_f_policy);
   315 	target.appendChild(p_f_policy);
   316   
   316 	
   317   var div_acl = document.createElement('div');
   317 	var div_acl = document.createElement('div');
   318   div_acl.id = 'themeed_acl_box';
   318 	div_acl.id = 'themeed_acl_box';
   319   div_acl.style.margin = '0 0 10px 30px';
   319 	div_acl.style.margin = '0 0 10px 30px';
   320   
   320 	
   321   var h3_g = document.createElement('h3');
   321 	var h3_g = document.createElement('h3');
   322   h3_g.appendChild(document.createTextNode($lang.get('acptm_field_acl_heading_groups')));
   322 	h3_g.appendChild(document.createTextNode($lang.get('acptm_field_acl_heading_groups')));
   323   div_acl.appendChild(h3_g);
   323 	div_acl.appendChild(h3_g);
   324   
   324 	
   325   var div_groups = document.createElement('div');
   325 	var div_groups = document.createElement('div');
   326   div_groups.style.border = '1px solid #E8E8E8';
   326 	div_groups.style.border = '1px solid #E8E8E8';
   327   div_groups.id = 'themeed_group_list';
   327 	div_groups.id = 'themeed_group_list';
   328   
   328 	
   329   // Group list
   329 	// Group list
   330   for ( var i in data.group_names )
   330 	for ( var i in data.group_names )
   331   {
   331 	{
   332     var g_name = data.group_names[i];
   332 		var g_name = data.group_names[i];
   333     var check = document.createElement('input');
   333 		var check = document.createElement('input');
   334     check.type = 'checkbox';
   334 		check.type = 'checkbox';
   335     if ( in_array("g:" + i, data.group_list) )
   335 		if ( in_array("g:" + i, data.group_list) )
   336     {
   336 		{
   337       check.setAttribute('checked', 'checked');
   337 			check.setAttribute('checked', 'checked');
   338     }
   338 		}
   339     check.group_id = parseInt(i);
   339 		check.group_id = parseInt(i);
   340     var lbl_g_acl = document.createElement('label');
   340 		var lbl_g_acl = document.createElement('label');
   341     lbl_g_acl.appendChild(check);
   341 		lbl_g_acl.appendChild(check);
   342     var str = 'groupcp_grp_' + g_name.toLowerCase();
   342 		var str = 'groupcp_grp_' + g_name.toLowerCase();
   343     var g_name_l10n = ( $lang.get(str) != str ) ? $lang.get(str) : g_name;
   343 		var g_name_l10n = ( $lang.get(str) != str ) ? $lang.get(str) : g_name;
   344     lbl_g_acl.appendChild(document.createTextNode(g_name_l10n));
   344 		lbl_g_acl.appendChild(document.createTextNode(g_name_l10n));
   345     div_groups.appendChild(lbl_g_acl);
   345 		div_groups.appendChild(lbl_g_acl);
   346     div_groups.appendChild(document.createElement('br'));
   346 		div_groups.appendChild(document.createElement('br'));
   347   }
   347 	}
   348   div_acl.appendChild(div_groups);
   348 	div_acl.appendChild(div_groups);
   349   
   349 	
   350   var h3_u = document.createElement('h3');
   350 	var h3_u = document.createElement('h3');
   351   h3_u.appendChild(document.createTextNode($lang.get('acptm_field_acl_heading_users')));
   351 	h3_u.appendChild(document.createTextNode($lang.get('acptm_field_acl_heading_users')));
   352   div_acl.appendChild(h3_u);
   352 	div_acl.appendChild(h3_u);
   353   
   353 	
   354   // User addition field
   354 	// User addition field
   355   var frm = document.createElement('form');
   355 	var frm = document.createElement('form');
   356   frm.action = 'javascript:ajaxThemeManagerHandleUserAdd();';
   356 	frm.action = 'javascript:ajaxThemeManagerHandleUserAdd();';
   357   frm.appendChild(document.createTextNode($lang.get('acptm_field_acl_add_user')));
   357 	frm.appendChild(document.createTextNode($lang.get('acptm_field_acl_add_user')));
   358   var f_useradd = document.createElement('input');
   358 	var f_useradd = document.createElement('input');
   359   f_useradd.type = 'text';
   359 	f_useradd.type = 'text';
   360   f_useradd.id = 'themeed_field_adduser';
   360 	f_useradd.id = 'themeed_field_adduser';
   361   f_useradd.onkeyup = function(e)
   361 	f_useradd.onkeyup = function(e)
   362   {
   362 	{
   363     new AutofillUsername(this, e, false);
   363 		new AutofillUsername(this, e, false);
   364   }
   364 	}
   365   
   365 	
   366   frm.appendChild(f_useradd);
   366 	frm.appendChild(f_useradd);
   367   div_acl.appendChild(frm);
   367 	div_acl.appendChild(frm);
   368   
   368 	
   369   div_acl.appendChild(document.createElement('br'));
   369 	div_acl.appendChild(document.createElement('br'));
   370   
   370 	
   371   // User list
   371 	// User list
   372   var div_users = document.createElement('div');
   372 	var div_users = document.createElement('div');
   373   div_users.style.border = '1px solid #E8E8E8';
   373 	div_users.style.border = '1px solid #E8E8E8';
   374   div_users.style.padding = '4px';
   374 	div_users.style.padding = '4px';
   375   div_users.id = 'themeed_user_list';
   375 	div_users.id = 'themeed_user_list';
   376   for ( var i = 0; i < data.group_list.length; i++ )
   376 	for ( var i = 0; i < data.group_list.length; i++ )
   377   {
   377 	{
   378     var id = data.group_list[i];
   378 		var id = data.group_list[i];
   379     if ( id.substr(0, 2) != 'u:' )
   379 		if ( id.substr(0, 2) != 'u:' )
   380       continue;
   380 			continue;
   381     var uid = id.substr(2);
   381 		var uid = id.substr(2);
   382     var username = data.usernames[uid];
   382 		var username = data.usernames[uid];
   383     
   383 		
   384     var useritem = document.createElement('span');
   384 		var useritem = document.createElement('span');
   385     useritem.appendChild(document.createTextNode(username + ' '));
   385 		useritem.appendChild(document.createTextNode(username + ' '));
   386     useritem.userid = parseInt(uid);
   386 		useritem.userid = parseInt(uid);
   387     var deleter = document.createElement('a');
   387 		var deleter = document.createElement('a');
   388     deleter.href = '#';
   388 		deleter.href = '#';
   389     deleter.onclick = function()
   389 		deleter.onclick = function()
   390     {
   390 		{
   391       ajaxThemeManagerHandleUserRemoval(this);
   391 			ajaxThemeManagerHandleUserRemoval(this);
   392       return false;
   392 			return false;
   393     }
   393 		}
   394     deleter.appendChild(document.createTextNode('[X]'));
   394 		deleter.appendChild(document.createTextNode('[X]'));
   395     useritem.appendChild(deleter);
   395 		useritem.appendChild(deleter);
   396     div_users.appendChild(useritem);
   396 		div_users.appendChild(useritem);
   397     div_users.appendChild(document.createElement('br'));
   397 		div_users.appendChild(document.createElement('br'));
   398   }
   398 	}
   399   div_acl.appendChild(div_users);
   399 	div_acl.appendChild(div_users);
   400   
   400 	
   401   target.appendChild(div_acl);
   401 	target.appendChild(div_acl);
   402   
   402 	
   403   ajaxThemeManagerHandlePolicyClick();
   403 	ajaxThemeManagerHandlePolicyClick();
   404   
   404 	
   405   var clearer = document.createElement('span');
   405 	var clearer = document.createElement('span');
   406   clearer.className = 'menuclear';
   406 	clearer.className = 'menuclear';
   407   target.appendChild(clearer);
   407 	target.appendChild(clearer);
   408   
   408 	
   409   // Theme ID
   409 	// Theme ID
   410   var tid = document.createElement('input');
   410 	var tid = document.createElement('input');
   411   tid.type = 'hidden';
   411 	tid.type = 'hidden';
   412   tid.id = 'themeed_theme_id';
   412 	tid.id = 'themeed_theme_id';
   413   tid.value = data.theme_id;
   413 	tid.value = data.theme_id;
   414   target.appendChild(tid);
   414 	target.appendChild(tid);
   415   
   415 	
   416   // Save button
   416 	// Save button
   417   var raquo = unescape('%BB');
   417 	var raquo = unescape('%BB');
   418   var savebtn = document.createElement('input');
   418 	var savebtn = document.createElement('input');
   419   savebtn.type = 'button';
   419 	savebtn.type = 'button';
   420   savebtn.style.fontWeight = 'bold';
   420 	savebtn.style.fontWeight = 'bold';
   421   savebtn.value = $lang.get('etc_save_changes') + ' ' + raquo;
   421 	savebtn.value = $lang.get('etc_save_changes') + ' ' + raquo;
   422   savebtn.onclick = function()
   422 	savebtn.onclick = function()
   423   {
   423 	{
   424     ajaxThemeManagerHandleSaveRequest();
   424 		ajaxThemeManagerHandleSaveRequest();
   425   }
   425 	}
   426   target.appendChild(savebtn);
   426 	target.appendChild(savebtn);
   427   
   427 	
   428   target.appendChild(document.createTextNode(' '));
   428 	target.appendChild(document.createTextNode(' '));
   429   
   429 	
   430   // Cancel button
   430 	// Cancel button
   431   var savebtn = document.createElement('input');
   431 	var savebtn = document.createElement('input');
   432   savebtn.type = 'button';
   432 	savebtn.type = 'button';
   433   savebtn.value = $lang.get('etc_cancel');
   433 	savebtn.value = $lang.get('etc_cancel');
   434   savebtn.onclick = function()
   434 	savebtn.onclick = function()
   435   {
   435 	{
   436     ajaxPage(namespace_list['Admin'] + 'ThemeManager');
   436 		ajaxPage(namespace_list['Admin'] + 'ThemeManager');
   437   }
   437 	}
   438   target.appendChild(savebtn);
   438 	target.appendChild(savebtn);
   439   
   439 	
   440   target.appendChild(document.createTextNode(' '));
   440 	target.appendChild(document.createTextNode(' '));
   441   
   441 	
   442   // Uninstall button
   442 	// Uninstall button
   443   var savebtn = document.createElement('input');
   443 	var savebtn = document.createElement('input');
   444   savebtn.type = 'button';
   444 	savebtn.type = 'button';
   445   savebtn.value = $lang.get('acptm_btn_uninstall_theme');
   445 	savebtn.value = $lang.get('acptm_btn_uninstall_theme');
   446   savebtn.style.color = '#D84308';
   446 	savebtn.style.color = '#D84308';
   447   savebtn.onclick = function()
   447 	savebtn.onclick = function()
   448   {
   448 	{
   449     if ( !confirm($lang.get('acptm_msg_uninstall_confirm')) )
   449 		if ( !confirm($lang.get('acptm_msg_uninstall_confirm')) )
   450       return false;
   450 			return false;
   451     ajaxThemeManagerHandleUninstallClick();
   451 		ajaxThemeManagerHandleUninstallClick();
   452   }
   452 	}
   453   target.appendChild(savebtn);
   453 	target.appendChild(savebtn);
   454   
   454 	
   455   // Fade it all in
   455 	// Fade it all in
   456   domOpacity(target, 0, 100, 500);
   456 	domOpacity(target, 0, 100, 500);
   457   f_name.focus();
   457 	f_name.focus();
   458 }
   458 }
   459 
   459 
   460 function ajaxThemeManagerHandlePolicyClick()
   460 function ajaxThemeManagerHandlePolicyClick()
   461 {
   461 {
   462   if ( document.getElementById('themeed_field_policy_allow_all').checked )
   462 	if ( document.getElementById('themeed_field_policy_allow_all').checked )
   463   {
   463 	{
   464     document.getElementById('themeed_acl_box').style.display = 'none';
   464 		document.getElementById('themeed_acl_box').style.display = 'none';
   465   }
   465 	}
   466   else if ( document.getElementById('themeed_field_policy_whitelist').checked || document.getElementById('themeed_field_policy_blacklist').checked )
   466 	else if ( document.getElementById('themeed_field_policy_whitelist').checked || document.getElementById('themeed_field_policy_blacklist').checked )
   467   {
   467 	{
   468     document.getElementById('themeed_acl_box').style.display = 'block';
   468 		document.getElementById('themeed_acl_box').style.display = 'block';
   469   }
   469 	}
   470 }
   470 }
   471 
   471 
   472 function ajaxThemeManagerHandleUserAdd()
   472 function ajaxThemeManagerHandleUserAdd()
   473 {
   473 {
   474   var f_useradd = document.getElementById('themeed_field_adduser');
   474 	var f_useradd = document.getElementById('themeed_field_adduser');
   475   f_useradd.setAttribute('disabled', 'disabled');
   475 	f_useradd.setAttribute('disabled', 'disabled');
   476   var parent = f_useradd.parentNode;
   476 	var parent = f_useradd.parentNode;
   477   var img = document.createElement('img');
   477 	var img = document.createElement('img');
   478   img.src = ajax_load_icon;
   478 	img.src = ajax_load_icon;
   479   img.id = 'themeed_useradd_status';
   479 	img.id = 'themeed_useradd_status';
   480   img.style.marginLeft = '10px';
   480 	img.style.marginLeft = '10px';
   481   insertAfter(parent, img, f_useradd);
   481 	insertAfter(parent, img, f_useradd);
   482   
   482 	
   483   var req = toJSONString({
   483 	var req = toJSONString({
   484       mode: 'uid_lookup',
   484 			mode: 'uid_lookup',
   485       username: f_useradd.value
   485 			username: f_useradd.value
   486     });
   486 		});
   487   ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + ajaxEscape(req), function(ajax)
   487 	ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + ajaxEscape(req), function(ajax)
   488     {
   488 		{
   489       if ( ajax.readyState == 4 && ajax.status == 200 )
   489 			if ( ajax.readyState == 4 && ajax.status == 200 )
   490       {
   490 			{
   491         var img = document.getElementById('themeed_useradd_status');
   491 				var img = document.getElementById('themeed_useradd_status');
   492         var f_useradd = document.getElementById('themeed_field_adduser');
   492 				var f_useradd = document.getElementById('themeed_field_adduser');
   493         
   493 				
   494         f_useradd.disabled = null;
   494 				f_useradd.disabled = null;
   495         img.parentNode.removeChild(img);
   495 				img.parentNode.removeChild(img);
   496         
   496 				
   497         // process response
   497 				// process response
   498         var response = String(ajax.responseText + '');
   498 				var response = String(ajax.responseText + '');
   499         if ( !check_json_response(response) )
   499 				if ( !check_json_response(response) )
   500         {
   500 				{
   501           alert(response);
   501 					alert(response);
   502           return false;
   502 					return false;
   503         }
   503 				}
   504         response = parseJSON(response);
   504 				response = parseJSON(response);
   505         if ( response.mode == 'error' )
   505 				if ( response.mode == 'error' )
   506         {
   506 				{
   507           alert(response.error);
   507 					alert(response.error);
   508           return false;
   508 					return false;
   509         }
   509 				}
   510             
   510 						
   511         var uid = parseInt(response.uid);
   511 				var uid = parseInt(response.uid);
   512         var username = response.username;
   512 				var username = response.username;
   513         
   513 				
   514         // Loop through the list of users and remove any existing ones with the same uid
   514 				// Loop through the list of users and remove any existing ones with the same uid
   515         var div_users = document.getElementById('themeed_user_list');
   515 				var div_users = document.getElementById('themeed_user_list');
   516         var children = div_users.getElementsByTagName('span');
   516 				var children = div_users.getElementsByTagName('span');
   517         for ( var i = 0; i < children.length; i++ )
   517 				for ( var i = 0; i < children.length; i++ )
   518         {
   518 				{
   519           var child = children[i];
   519 					var child = children[i];
   520           if ( child.userid == uid )
   520 					if ( child.userid == uid )
   521           {
   521 					{
   522             // the sister is the br element next to the span with the checkbox/text
   522 						// the sister is the br element next to the span with the checkbox/text
   523             var sister = child.nextSibling;
   523 						var sister = child.nextSibling;
   524             div_users.removeChild(child);
   524 						div_users.removeChild(child);
   525             div_users.removeChild(sister);
   525 						div_users.removeChild(sister);
   526             break;
   526 						break;
   527           }
   527 					}
   528         }
   528 				}
   529         
   529 				
   530         var useritem = document.createElement('span');
   530 				var useritem = document.createElement('span');
   531         useritem.appendChild(document.createTextNode(username + ' '));
   531 				useritem.appendChild(document.createTextNode(username + ' '));
   532         useritem.userid = parseInt(uid);
   532 				useritem.userid = parseInt(uid);
   533         var deleter = document.createElement('a');
   533 				var deleter = document.createElement('a');
   534         deleter.href = '#';
   534 				deleter.href = '#';
   535         deleter.onclick = function()
   535 				deleter.onclick = function()
   536         {
   536 				{
   537           ajaxThemeManagerHandleUserRemoval(this);
   537 					ajaxThemeManagerHandleUserRemoval(this);
   538           return false;
   538 					return false;
   539         }
   539 				}
   540         deleter.appendChild(document.createTextNode('[X]'));
   540 				deleter.appendChild(document.createTextNode('[X]'));
   541         useritem.appendChild(deleter);
   541 				useritem.appendChild(deleter);
   542         div_users.appendChild(useritem);
   542 				div_users.appendChild(useritem);
   543         div_users.appendChild(document.createElement('br'));
   543 				div_users.appendChild(document.createElement('br'));
   544       }
   544 			}
   545     });
   545 		});
   546 }
   546 }
   547 
   547 
   548 function ajaxThemeManagerHandleUserRemoval(el)
   548 function ajaxThemeManagerHandleUserRemoval(el)
   549 {
   549 {
   550   var parent = el.parentNode;
   550 	var parent = el.parentNode;
   551   var uid = parent.userid;
   551 	var uid = parent.userid;
   552   
   552 	
   553   var grandparent = parent.parentNode;
   553 	var grandparent = parent.parentNode;
   554   var sister = parent.nextSibling;
   554 	var sister = parent.nextSibling;
   555   grandparent.removeChild(parent);
   555 	grandparent.removeChild(parent);
   556   grandparent.removeChild(sister);
   556 	grandparent.removeChild(sister);
   557 }
   557 }
   558 
   558 
   559 function ajaxThemeManagerHandleSaveRequest()
   559 function ajaxThemeManagerHandleSaveRequest()
   560 {
   560 {
   561   // Build a JSON condensed request
   561 	// Build a JSON condensed request
   562   var md = false;
   562 	var md = false;
   563   if ( document.getElementById('themeed_field_default') )
   563 	if ( document.getElementById('themeed_field_default') )
   564   {
   564 	{
   565     if ( document.getElementById('themeed_field_default').checked )
   565 		if ( document.getElementById('themeed_field_default').checked )
   566     {
   566 		{
   567       md = true;
   567 			md = true;
   568     }
   568 		}
   569   }
   569 	}
   570   var policy = 'allow_all';
   570 	var policy = 'allow_all';
   571   if ( document.getElementById('themeed_field_policy_whitelist').checked )
   571 	if ( document.getElementById('themeed_field_policy_whitelist').checked )
   572     policy = 'whitelist';
   572 		policy = 'whitelist';
   573   else if ( document.getElementById('themeed_field_policy_blacklist').checked )
   573 	else if ( document.getElementById('themeed_field_policy_blacklist').checked )
   574     policy = 'blacklist';
   574 		policy = 'blacklist';
   575   var json_packet = {
   575 	var json_packet = {
   576     theme_id: document.getElementById('themeed_theme_id').value,
   576 		theme_id: document.getElementById('themeed_theme_id').value,
   577     theme_name: document.getElementById('themeed_field_name').value,
   577 		theme_name: document.getElementById('themeed_field_name').value,
   578     default_style: document.getElementById('themeed_field_style').value,
   578 		default_style: document.getElementById('themeed_field_style').value,
   579     make_default: md,
   579 		make_default: md,
   580     group_policy: policy,
   580 		group_policy: policy,
   581     enabled: ( document.getElementById('themeed_field_disable').checked ? false : true )
   581 		enabled: ( document.getElementById('themeed_field_disable').checked ? false : true )
   582   };
   582 	};
   583   var acl_list = [];
   583 	var acl_list = [];
   584   var checks = document.getElementById('themeed_group_list').getElementsByTagName('input');
   584 	var checks = document.getElementById('themeed_group_list').getElementsByTagName('input');
   585   for ( var i = 0; i < checks.length; i++ )
   585 	for ( var i = 0; i < checks.length; i++ )
   586   {
   586 	{
   587     if ( checks[i].checked )
   587 		if ( checks[i].checked )
   588       acl_list.push('g:' + checks[i].group_id);
   588 			acl_list.push('g:' + checks[i].group_id);
   589   }
   589 	}
   590   var spans = document.getElementById('themeed_user_list').getElementsByTagName('span');
   590 	var spans = document.getElementById('themeed_user_list').getElementsByTagName('span');
   591   for ( var i = 0; i < spans.length; i++ )
   591 	for ( var i = 0; i < spans.length; i++ )
   592   {
   592 	{
   593     if ( spans[i].userid )
   593 		if ( spans[i].userid )
   594       acl_list.push('u:' + spans[i].userid);
   594 			acl_list.push('u:' + spans[i].userid);
   595   }
   595 	}
   596   json_packet.group_list = acl_list;
   596 	json_packet.group_list = acl_list;
   597   
   597 	
   598   var json_send = {
   598 	var json_send = {
   599     mode: 'save_theme',
   599 		mode: 'save_theme',
   600     theme_data: json_packet
   600 		theme_data: json_packet
   601   };
   601 	};
   602   
   602 	
   603   json_send = ajaxEscape(toJSONString(json_send));
   603 	json_send = ajaxEscape(toJSONString(json_send));
   604   
   604 	
   605   // Request the save
   605 	// Request the save
   606   var parent = document.getElementById('ajaxPageContainer');
   606 	var parent = document.getElementById('ajaxPageContainer');
   607   ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + json_send, function(ajax)
   607 	ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + json_send, function(ajax)
   608     {
   608 		{
   609       if ( ajax.readyState == 4 && ajax.status == 200 )
   609 			if ( ajax.readyState == 4 && ajax.status == 200 )
   610       {
   610 			{
   611         // process response
   611 				// process response
   612         var response = String(ajax.responseText + '');
   612 				var response = String(ajax.responseText + '');
   613         if ( !check_json_response(response) )
   613 				if ( !check_json_response(response) )
   614         {
   614 				{
   615           // For this we actually *expect* an HTML response.
   615 					// For this we actually *expect* an HTML response.
   616           parent.innerHTML = response;
   616 					parent.innerHTML = response;
   617           return false;
   617 					return false;
   618         }
   618 				}
   619         response = parseJSON(response);
   619 				response = parseJSON(response);
   620         if ( response.mode == 'error' )
   620 				if ( response.mode == 'error' )
   621         {
   621 				{
   622           alert(response.error);
   622 					alert(response.error);
   623           return false;
   623 					return false;
   624         }
   624 				}
   625       }
   625 			}
   626     });
   626 		});
   627 }
   627 }
   628 
   628 
   629 function ajaxThemeManagerHandleUninstallClick()
   629 function ajaxThemeManagerHandleUninstallClick()
   630 {
   630 {
   631   var theme_id = document.getElementById('themeed_theme_id').value;
   631 	var theme_id = document.getElementById('themeed_theme_id').value;
   632   var json_send = {
   632 	var json_send = {
   633     mode: 'uninstall',
   633 		mode: 'uninstall',
   634     theme_id: theme_id
   634 		theme_id: theme_id
   635   };
   635 	};
   636   
   636 	
   637   json_send = ajaxEscape(toJSONString(json_send));
   637 	json_send = ajaxEscape(toJSONString(json_send));
   638   
   638 	
   639   // Request the action
   639 	// Request the action
   640   var parent = document.getElementById('ajaxPageContainer');
   640 	var parent = document.getElementById('ajaxPageContainer');
   641   ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + json_send, function(ajax)
   641 	ajaxPost(makeUrlNS('Admin', 'ThemeManager/action.json'), 'r=' + json_send, function(ajax)
   642     {
   642 		{
   643       if ( ajax.readyState == 4 && ajax.status == 200 )
   643 			if ( ajax.readyState == 4 && ajax.status == 200 )
   644       {
   644 			{
   645         // process response
   645 				// process response
   646         var response = String(ajax.responseText + '');
   646 				var response = String(ajax.responseText + '');
   647         if ( !check_json_response(response) )
   647 				if ( !check_json_response(response) )
   648         {
   648 				{
   649           // For this we actually *expect* an HTML response.
   649 					// For this we actually *expect* an HTML response.
   650           parent.innerHTML = response;
   650 					parent.innerHTML = response;
   651           return false;
   651 					return false;
   652         }
   652 				}
   653         response = parseJSON(response);
   653 				response = parseJSON(response);
   654         if ( response.mode == 'error' )
   654 				if ( response.mode == 'error' )
   655         {
   655 				{
   656           alert(response.error);
   656 					alert(response.error);
   657           return false;
   657 					return false;
   658         }
   658 				}
   659       }
   659 			}
   660     });
   660 		});
   661 }
   661 }