Index: wp-includes/js/fat.js
===================================================================
--- wp-includes/js/fat.js	(revision 3643)
+++ wp-includes/js/fat.js	(working copy)
@@ -11,7 +11,7 @@
 		b = b.toString(16); if (b.length == 1) b = '0' + b;
 		return "#" + r + g + b;
 	},
-	fade_all : function ()
+	fade_all : function (dur)
 	{
 		var a = document.getElementsByTagName("*");
 		for (var i = 0; i < a.length; i++) 
@@ -21,7 +21,7 @@
 			if (r)
 			{
 				if (!r[1]) r[1] = "";
-				if (o.id) Fat.fade_element(o.id,null,null,"#"+r[1]);
+				if (o.id) Fat.fade_element(o.id,null,dur,"#"+r[1]);
 			}
 		}
 	},
@@ -87,4 +87,4 @@
 
 addLoadEvent(function ()  {
 	Fat.fade_all();
-});
\ No newline at end of file
+});
Index: wp-admin/custom-fields.js
===================================================================
--- wp-admin/custom-fields.js	(revision 0)
+++ wp-admin/custom-fields.js	(revision 0)
@@ -0,0 +1,28 @@
+addLoadEvent(customFieldsAddIn);
+function customFieldsAddIn() {
+	if (!theList.theList) return false;
+	inputs = theList.theList.getElementsByTagName('input');
+	for ( var i=0; i < inputs.length; i++ ) {
+		if ('text' == inputs[i].type) {
+			inputs[i].setAttribute('autocomplete', 'off');
+		        inputs[i].onkeypress = function(e) { return killSubmit('customFieldsUpdate(' + parseInt(this.name.slice(5),10) + ');', e); };
+		}
+		if ('updatemeta' == inputs[i].className) {
+		        inputs[i].onclick = function(e) {return killSubmit('customFieldsUpdate(' + parseInt(this.parentNode.parentNode.id.slice(5),10) + ');', e); };
+		}
+	}
+	var loadingDock = document.createElement('input');
+	loadingDock.type = 'hidden';
+	loadingDock.id = 'loading-dock';
+	document.getElementById('post').appendChild(loadingDock);
+	theList.newSource = 'loading-dock';
+}
+
+function customFieldsUpdate(id) { //ToDo: abstract this by grabbing values of all input elements.
+	var theItem = document.getElementById('meta-' + id);
+	var key = theItem.getElementsByTagName('input')[0].value;
+	var value = theItem.getElementsByTagName('textarea')[0].value;
+	var loadingDock = document.getElementById('loading-dock');
+	loadingDock.value = 'id=' + id + '&key=' + encodeURIComponent(key) + '&value=' + encodeURIComponent(value);
+	theList.ajaxUpdater('meta');
+}
Index: wp-admin/edit-comments.php
===================================================================
--- wp-admin/edit-comments.php	(revision 3643)
+++ wp-admin/edit-comments.php	(working copy)
@@ -121,13 +121,13 @@
 			 | <a href="<?php echo get_permalink($comment->comment_post_ID); ?>"><?php _e('View Post') ?></a></p>
 		</li>
 
-<?php } // end foreach ?>
+<?php } // end foreach($comment) ?>
 </ol>
 
 <div id="ajax-response"></div>
 
 <?php
-	} else {
+	} else { //no comments to show
 
 		?>
 		<p>
@@ -150,19 +150,28 @@
   </tr>';
 		foreach ($comments as $comment) {
 		$authordata = get_userdata($wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = $comment->comment_post_ID"));
+		$comment_status = wp_get_comment_status($comment->comment_ID);
 		$class = ('alternate' == $class) ? '' : 'alternate';
+		$class .= ('unapproved' == $comment_status) ? ' unapproved' : '';
 ?>
-  <tr class='<?php echo $class; ?>'>
+  <tr id="comment-<?php echo $comment->comment_ID; ?>" class='<?php echo $class; ?>'>
     <td><?php if ( current_user_can('edit_post', $comment->comment_post_ID) ) { ?><input type="checkbox" name="delete_comments[]" value="<?php echo $comment->comment_ID; ?>" /><?php } ?></td>
     <td><?php comment_author_link() ?></td>
     <td><?php comment_author_email_link() ?></td>
     <td><a href="http://ws.arin.net/cgi-bin/whois.pl?queryinput=<?php comment_author_IP() ?>"><?php comment_author_IP() ?></a></td>
     <td><?php comment_excerpt(); ?></td>
-    <td><a href="<?php echo get_permalink($comment->comment_post_ID); ?>#comment-<?php comment_ID() ?>" class="edit"><?php _e('View') ?></a></td>
+    <td>
+    	<?php if ('unapproved' == $comment_status) { ?>
+    		(Unapproved)
+    	<?php } else { ?>
+    		<a href="<?php echo get_permalink($comment->comment_post_ID); ?>#comment-<?php comment_ID() ?>" class="edit"><?php _e('View') ?></a>
+    	<?php } ?>
+    </td>
     <td><?php if ( current_user_can('edit_post', $comment->comment_post_ID) ) {
 	echo "<a href='comment.php?action=editcomment&amp;comment=$comment->comment_ID' class='edit'>" .  __('Edit') . "</a>"; } ?></td>
     <td><?php if ( current_user_can('edit_post', $comment->comment_post_ID) ) {
-            echo "<a href=\"comment.php?action=deletecomment&amp;p=".$comment->comment_post_ID."&amp;comment=".$comment->comment_ID."\" onclick=\"return confirm('" . sprintf(__("You are about to delete this comment by \'%s\'\\n  \'Cancel\' to stop, \'OK\' to delete."), $comment->comment_author) . "')\"    class='delete'>" . __('Delete') . "</a>"; } ?></td>
+		echo "<a href=\"comment.php?action=deletecomment&amp;p=".$comment->comment_post_ID."&amp;comment=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . sprintf(__("You are about to delete this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), wp_specialchars( $comment->comment_author, 1 ))  . "' );\" class='edit'>" . __('Delete') . "</a> ";
+		} ?></td>
   </tr>
 		<?php 
 		} // end foreach
@@ -171,6 +180,7 @@
             <p class="submit"><input type="submit" name="delete_button" value="<?php _e('Delete Checked Comments &raquo;') ?>" onclick="return confirm('<?php _e("You are about to delete these comments permanently \\n  \'Cancel\' to stop, \'OK\' to delete.") ?>')" />
 			<input type="submit" name="spam_button" value="<?php _e('Mark Checked Comments as Spam &raquo;') ?>" onclick="return confirm('<?php _e("You are about to mark these comments as spam \\n  \'Cancel\' to stop, \'OK\' to mark as spam.") ?>')" /></p>
   </form>
+<div id="ajax-response"></div>
 <?php
 	} else {
 ?>
Index: wp-admin/list-manipulation.php
===================================================================
--- wp-admin/list-manipulation.php	(revision 3643)
+++ wp-admin/list-manipulation.php	(working copy)
@@ -1,69 +0,0 @@
-<?php
-require_once('../wp-config.php');
-require_once('admin-functions.php');
-require_once('admin-db.php');
-
-if ( !is_user_logged_in() )
-	die('-1');
-
-function get_out_now() { exit; }
-add_action( 'shutdown', 'get_out_now', -1 );
-
-//	check_admin_referer();
-
-$id = (int) $_POST['id'];
-switch ( $_POST['action'] ) :
-case 'delete-link' :
-	if ( !current_user_can( 'manage_links' ) )
-		die('-1');
-
-	if ( wp_delete_link( $id ) )
-		die('1');
-	else	die('0');
-	break;
-case 'delete-post' :
-	if ( !current_user_can( 'delete_post', $id ) )
-		die('-1');
-
-	if ( wp_delete_post( $id ) )
-		die('1');
-	else	die('0');
-	break;
-case 'delete-page' :
-	if ( !current_user_can( 'delete_page', $id ) )
-		die('-1');
-
-	if ( wp_delete_post( $id ) )
-		die('1');
-	else	die('0');
-	break;
-case 'delete-cat' :
-	if ( !current_user_can( 'manage_categories' ) )
-		die('-1');
-
-	if ( wp_delete_category( $id ) )
-		die('1');
-	else	die('0');
-	break;
-case 'delete-comment' :
-	if ( !$comment = get_comment( $id ) )
-		die('0');
-	if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) )
-		die('-1');
-
-	if ( wp_delete_comment( $comment->comment_ID ) )
-		die('1');
-	else	die('0');
-	break;
-case 'delete-comment-as-spam' :
-	if ( !$comment = get_comment( $id ) )
-		die('0');
-	if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) )
-		die('-1');
-
-	if ( wp_set_comment_status( $comment->comment_ID, 'spam' ) )
-		die('1');
-	else	die('0');
-	break;
-endswitch;
-?>
Index: wp-admin/admin-ajax.php
===================================================================
--- wp-admin/admin-ajax.php	(revision 0)
+++ wp-admin/admin-ajax.php	(revision 0)
@@ -0,0 +1,151 @@
+<?php
+require_once('../wp-config.php');
+require_once('admin-functions.php');
+require_once('admin-db.php');
+
+if ( !is_user_logged_in() )
+	die('-1');
+
+function get_out_now() { exit; }
+add_action( 'shutdown', 'get_out_now', -1 );
+
+//	check_admin_referer();
+
+$id = (int) $_POST['id'];
+$info = addslashes(rawurldecode(stripslashes($_POST['info']))); //slash the encoded slashes
+switch ( $_POST['action'] ) :
+case 'delete-link' :
+	if ( !current_user_can( 'manage_links' ) )
+		die('-1');
+
+	if ( wp_delete_link( $id ) )
+		die('1');
+	else	die('0');
+	break;
+case 'delete-post' :
+	if ( !current_user_can( 'delete_post', $id ) )
+		die('-1');
+
+	if ( wp_delete_post( $id ) )
+		die('1');
+	else	die('0');
+	break;
+case 'delete-page' :
+	if ( !current_user_can( 'delete_page', $id ) )
+		die('-1');
+
+	if ( wp_delete_post( $id ) )
+		die('1');
+	else	die('0');
+	break;
+case 'delete-cat' :
+	if ( !current_user_can( 'manage_categories' ) )
+		die('-1');
+
+	if ( wp_delete_category( $id ) )
+		die('1');
+	else	die('0');
+	break;
+case 'delete-comment' :
+	if ( !$comment = get_comment( $id ) )
+		die('0');
+	if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) )
+		die('-1');
+
+	if ( wp_delete_comment( $comment->comment_ID ) )
+		die('1');
+	else	die('0');
+	break;
+case 'delete-comment-as-spam' :
+	if ( !$comment = get_comment( $id ) )
+		die('0');
+	if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) )
+		die('-1');
+
+	if ( wp_set_comment_status( $comment->comment_ID, 'spam' ) )
+		die('1');
+	else	die('0');
+	break;
+case 'delete-meta' :
+	if ( !$meta = get_post_meta_by_id( $id ) )
+		die('0');
+	if ( !current_user_can( 'edit_post', $meta->post_id ) )
+		die('-1');
+	if ( delete_meta( $meta->meta_id ) )
+		die('1');
+	die('0');
+	break;
+case 'dim-comment' :
+	if ( !$comment = get_comment( $id ) )
+		die('0');
+	if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) )
+		die('-1');
+	if ( !current_user_can( 'moderate_comments' ) )
+		die('-1');
+
+	if ( 'unapproved' == wp_get_comment_status($comment->comment_ID) ) {
+		if ( wp_set_comment_status( $comment->comment_ID, 'approve' ) )
+			die('1');
+	} else {
+		if ( wp_set_comment_status( $comment->comment_ID, 'hold' ) )
+			die('1');
+	}
+	die('0');
+	break;
+case 'dim-plugin' :
+	if ( !current_user_can( 'activate_plugins' ) )
+		die('-1');
+	$id = urldecode(str_replace('---', '.', $_POST['id']));
+	$current = get_settings( 'active_plugins' );
+	if ( !in_array($id, $current) ) {
+		$current[] = trim($id);
+		sort($current);
+		update_option( 'active_plugins', $current );
+		include(ABSPATH . 'wp-content/plugins/' . trim($id));
+		do_action('activate_' . trim($id));
+	} else {
+		array_splice($current, array_search($id, $current), 1); // Array-fu!
+		update_option( 'active_plugins', $current );
+		do_action('deactivate_' . trim($id));
+	}
+	die('1');
+	break;
+case 'add-category' :
+	if ( !current_user_can( 'manage_categories' ) )
+		die('-1');
+	$names = explode(',', $info);
+	$return = "<?xml version='1.0' standalone='yes'?><ajaxresponse>";
+	foreach ( $names as $cat_name ) {
+		$cat_name = trim($cat_name);
+		if ( !$category_nicename = sanitize_title($cat_name) )
+			die('0');
+		if ( !$cat_id = category_exists( $cat_name ) )
+			$cat_id = wp_create_category( $cat_name );
+		$cat_name = stripslashes($cat_name);
+		$return .= "<category><id>$cat_id</id><newitem><![CDATA[<li id='category-$cat_id'><label for='in-category-$cat_id' class='selectit'><input value='$cat_id' type='checkbox' checked='checked' name='post_category[]' id='in-category-$cat_id'/> $cat_name</label></li>]]></newitem></category>";
+	}
+	$return .= '</ajaxresponse>';
+	header('Content-type: text/xml');
+	die($return);
+	break;
+case 'add-meta' : // This one's double encoded, remember
+	parse_str(stripslashes($info), $outfo);
+	if ( !$meta = get_post_meta_by_id( $outfo['id'] ) )
+		die('0');
+	if ( !current_user_can( 'edit_post', $meta->post_id ) )
+		die('-1');
+	$return = "<?xml version='1.0' standalone='yes'?><ajaxresponse>";
+	if ( update_meta( $outfo['id'], $outfo['key'], $outfo['value'] ) ) {
+		$key = wp_specialchars(stripslashes($outfo['key']), true);
+		$value = wp_specialchars(stripslashes($outfo['value']), true);
+		$return .= "<meta><id>{$outfo['id']}</id><newitem><![CDATA[<table><tr id='meta-{$outfo['id']}'><td valign='top'><input name='meta[{$outfo['id']}][key]' tabindex='6' type='text' size='20' value='$key' /></td><td><textarea name='meta[{$outfo['id']}][value]' tabindex='6' rows='2' cols='30'>$value</textarea></td><td align='center'><input name='updatemeta' type='submit' class='updatemeta' tabindex='6' value='Update' /><br /><input name='deletemeta[{$outfo['id']}]' type='submit' onclick='return deleteSomething( \"meta\", {$outfo['id']});' class='deletemeta' tabindex='6' value='Delete' /></td></tr></table>]]></newitem></meta>";
+	}
+	$return .= '</ajaxresponse>';
+	header('Content-type: text/xml');
+	die($return);
+	break;
+default :
+	die('0');
+	break;
+endswitch;
+?>
Index: wp-admin/edit-form-ajax-cat.php
===================================================================
--- wp-admin/edit-form-ajax-cat.php	(revision 3643)
+++ wp-admin/edit-form-ajax-cat.php	(working copy)
@@ -1,35 +0,0 @@
-<?php
-require_once('../wp-config.php');
-require_once('admin-functions.php');
-require_once('admin-db.php');
-
-if ( !current_user_can('manage_categories') )
-	die('-1');
-
-function get_out_now() { exit; }
-
-add_action('shutdown', 'get_out_now', -1);
-
-$names = explode(',', rawurldecode($_GET['ajaxnewcat']) );
-$ids   = array();
-
-foreach ($names as $cat_name) {
-	$cat_name = trim( $cat_name );
-
-	if ( !$category_nicename = sanitize_title($cat_name) )
-		continue;
-	if ( $already = category_exists($cat_name) ) {
-		$ids[] = (string) $already;
-		continue;
-	}
-
-	$new_cat_id = wp_create_category($cat_name);
-
-	$ids[] = (string) $new_cat_id;
-}
-
-$return = join(',', $ids);
-
-die( (string) $return );
-
-?>
\ No newline at end of file
Index: wp-admin/wp-admin.css
===================================================================
--- wp-admin/wp-admin.css	(revision 3643)
+++ wp-admin/wp-admin.css	(working copy)
@@ -91,11 +91,6 @@
 	padding: .1em .3em;
 }
 
-fieldset span.cat-nest {
-	display: block;
-	margin-left: 10px;
-}
-
 fieldset.options {
 	padding: 1em;
 }
@@ -326,6 +321,18 @@
 	color: #009ef0;
 }
 
+.approve {
+	display: none;
+}
+
+.unapproved .approve {
+	display: inline;
+}
+
+.unapproved .unapprove {
+	display: none;
+}
+
 .updated {
 	background: #CFEBF7 url(images/notice.gif) no-repeat 1em ;
 	border: 1px solid #2580B2;
@@ -709,6 +716,7 @@
 	background: #BEB;
 }
 .active .name {
+	font-weight: bold;
 	background: #9C9;
 }
 .alternate.active td {
@@ -717,6 +725,15 @@
 .alternate.active .name {
 	background: #8B8;
 }
+.deactivate {
+	display: none;
+}
+.active .activate {
+	display: none;
+}
+.active .deactivate {
+	display: inline;
+}
 
 /* A handy div class for hiding controls.
    Some browsers will disable them when you
@@ -804,11 +821,20 @@
 	margin-top: .5em;
 }
 
-#categorydiv div div {
+#categorydiv ul {
+	list-style: none;
+	padding: 0;
+	margin-left:10px;
+}
+#categorychecklist {
 	height: 12em;
 	overflow: auto;
+	margin-top: 8px;
 }
-
+#categorychecklist li {
+	margin: 0;
+	padding: 0;
+}
 #ajaxcat input {
 	border: 1px solid #ccc;
 }
@@ -951,4 +977,4 @@
 #jaxcat {
 	margin: 0;
 	padding: 0;
-}
\ No newline at end of file
+}
Index: wp-admin/admin.php
===================================================================
--- wp-admin/admin.php	(revision 3643)
+++ wp-admin/admin.php	(working copy)
@@ -40,7 +40,7 @@
     }
 }
 
-$xfn_js = $sack_js = $list_js = $cat_js = $dbx_js = $editing = false;
+$xfn_js = $sack_js = $list_js = $cat_js = $dbx_js = $pmeta_js = $editing = false;
 
 require(ABSPATH . '/wp-admin/menu.php');
 
Index: wp-admin/admin-functions.php
===================================================================
--- wp-admin/admin-functions.php	(revision 3643)
+++ wp-admin/admin-functions.php	(working copy)
@@ -602,12 +602,12 @@
 
 function write_nested_categories($categories) {
 	foreach ($categories as $category) {
-		echo '<label for="category-', $category['cat_ID'], '" class="selectit"><input value="', $category['cat_ID'], '" type="checkbox" name="post_category[]" id="category-', $category['cat_ID'], '"', ($category['checked'] ? ' checked="checked"' : ""), '/> ', wp_specialchars($category['cat_name']), "</label>\n";
+		echo '<li id="category-', $category['cat_ID'], '"><label for="in-category-', $category['cat_ID'], '" class="selectit"><input value="', $category['cat_ID'], '" type="checkbox" name="post_category[]" id="in-category-', $category['cat_ID'], '"', ($category['checked'] ? ' checked="checked"' : ""), '/> ', wp_specialchars($category['cat_name']), "</label></li>\n";
 
-		if (isset ($category['children'])) {
-			echo "\n<span class='cat-nest'>\n";
+		if ( $category['children'] ) {
+			echo "<ul>\n";
 			write_nested_categories($category['children']);
-			echo "</span>\n";
+			echo "</ul>\n";
 		}
 	}
 }
@@ -832,7 +832,7 @@
 		return;
 	$count = 0;
 ?>
-<table id='meta-list' cellpadding="3">
+<table id='the-list-x' cellpadding="3">
 	<tr>
 		<th><?php _e('Key') ?></th>
 		<th><?php _e('Value') ?></th>
@@ -849,12 +849,14 @@
 			$style = '';
 		if ('_' == $entry['meta_key'] { 0 })
 			$style .= ' hidden';
+		$entry['meta_key'] = wp_specialchars( $entry['meta_key'], true );
+		$entry['meta_value'] = wp_specialchars( $entry['meta_value'], true );
 		echo "
-			<tr class='$style'>
+			<tr id='meta-{$entry['meta_id']}' class='$style'>
 				<td valign='top'><input name='meta[{$entry['meta_id']}][key]' tabindex='6' type='text' size='20' value='{$entry['meta_key']}' /></td>
 				<td><textarea name='meta[{$entry['meta_id']}][value]' tabindex='6' rows='2' cols='30'>{$entry['meta_value']}</textarea></td>
 				<td align='center'><input name='updatemeta' type='submit' class='updatemeta' tabindex='6' value='".__('Update')."' /><br />
-				<input name='deletemeta[{$entry['meta_id']}]' type='submit' class='deletemeta' tabindex='6' value='".__('Delete')."' /></td>
+				<input name='deletemeta[{$entry['meta_id']}]' type='submit' onclick='return deleteSomething( \"meta\", {$entry['meta_id']});' class='deletemeta' tabindex='6' value='".__('Delete')."' /></td>
 			</tr>
 		";
 	}
@@ -917,6 +919,7 @@
 
 function add_meta($post_ID) {
 	global $wpdb;
+	$post_ID = (int) $post_ID;
 
 	$metakeyselect = $wpdb->escape(stripslashes(trim($_POST['metakeyselect'])));
 	$metakeyinput = $wpdb->escape(stripslashes(trim($_POST['metakeyinput'])));
@@ -942,16 +945,25 @@
 
 function delete_meta($mid) {
 	global $wpdb;
+	$mid = (int) $mid;
 
-	$result = $wpdb->query("DELETE FROM $wpdb->postmeta WHERE meta_id = '$mid'");
+	return $wpdb->query("DELETE FROM $wpdb->postmeta WHERE meta_id = '$mid'");
 }
 
 function update_meta($mid, $mkey, $mvalue) {
 	global $wpdb;
+	$mid = (int) $mid;
 
 	return $wpdb->query("UPDATE $wpdb->postmeta SET meta_key = '$mkey', meta_value = '$mvalue' WHERE meta_id = '$mid'");
 }
 
+function get_post_meta_by_id($mid) {
+	global $wpdb;
+	$mid = (int) $mid;
+
+	return $wpdb->get_row("SELECT * FROM $wpdb->postmeta WHERE meta_id = '$mid'");
+}
+
 function touch_time($edit = 1, $for_post = 1) {
 	global $month, $post, $comment;
 
Index: wp-admin/admin-db.php
===================================================================
--- wp-admin/admin-db.php	(revision 3643)
+++ wp-admin/admin-db.php	(working copy)
@@ -174,7 +174,8 @@
 	$parent = $category->category_parent;
 
 	// Delete the category.
-	$wpdb->query("DELETE FROM $wpdb->categories WHERE cat_ID = '$cat_ID'");
+	if ( !$wpdb->query("DELETE FROM $wpdb->categories WHERE cat_ID = '$cat_ID'") )
+		return 0;
 
 	// Update children to point to new parent.
 	$wpdb->query("UPDATE $wpdb->categories SET category_parent = '$parent' WHERE category_parent = '$cat_ID'");
Index: wp-admin/edit-form-advanced.php
===================================================================
--- wp-admin/edit-form-advanced.php	(revision 3643)
+++ wp-admin/edit-form-advanced.php	(working copy)
@@ -93,7 +93,7 @@
 <h3 class="dbx-handle"><?php _e('Categories') ?></h3>
 <div class="dbx-content">
 <p id="jaxcat"></p>
-<div id="categorychecklist"><?php dropdown_categories(get_settings('default_category')); ?></div></div>
+<ul id="categorychecklist"><?php dropdown_categories(get_settings('default_category')); ?></ul></div>
 </fieldset>
 
 <fieldset class="dbx-box">
@@ -258,6 +258,7 @@
 }
 	meta_form();
 ?>
+<div id="ajax-response"></div>
 </div>
 </fieldset>
 
Index: wp-admin/admin-header.php
===================================================================
--- wp-admin/admin-header.php	(revision 3643)
+++ wp-admin/admin-header.php	(working copy)
@@ -3,10 +3,13 @@
 if (!isset($_GET["page"])) require_once('admin.php');
 if ( $editing ) {
 	$dbx_js = true;
-	if ( current_user_can('manage_categories') )
+	$pmeta_js = true;
+	if ( current_user_can('manage_categories') ) {
+		$list_js = true;
 		$cat_js = true;
+	}
 }
-if ( $list_js || $cat_js )
+if ( $list_js )
 	$sack_js = true;
 ?>
 <?php get_admin_page_title(); ?>
@@ -29,8 +32,11 @@
 <script type="text/javascript" src="../wp-includes/js/tw-sack.js"></script>
 <?php } ?>
 <?php if ( $list_js ) { ?>
-<script type="text/javascript" src="list-manipulation.js"></script>
+<script type="text/javascript" src="list-manipulation-js.php"></script>
 <?php } ?>
+<?php if ( $pmeta_js ) { ?>
+<script type="text/javascript" src="custom-fields.js"></script>
+<?php } ?>
 <?php if ( $dbx_js ) { ?>
 <script type="text/javascript" src="../wp-includes/js/dbx.js"></script>
 <script type="text/javascript">
Index: wp-admin/plugins.php
===================================================================
--- wp-admin/plugins.php	(revision 3643)
+++ wp-admin/plugins.php	(working copy)
@@ -25,6 +25,7 @@
 }
 
 $title = __('Manage Plugins');
+$list_js = true;
 require_once('admin-header.php');
 
 // Clean up options
@@ -95,19 +96,16 @@
 	uksort($plugins, 'sort_plugins');
 
 	foreach($plugins as $plugin_file => $plugin_data) {
+		$sanitized_file = str_replace('.', '---', urlencode($plugin_file));
 		$style = ('class="alternate"' == $style|| 'class="alternate active"' == $style) ? '' : 'alternate';
 
-		if (!empty($current_plugins) && in_array($plugin_file, $current_plugins)) {
-			$action = "<a href='plugins.php?action=deactivate&amp;plugin=$plugin_file' title='".__('Deactivate this plugin')."' class='delete'>".__('Deactivate')."</a>";
-			$plugin_data['Title'] = "<strong>{$plugin_data['Title']}</strong>";
+		if (!empty($current_plugins) && in_array($plugin_file, $current_plugins))
 			$style .= $style == 'alternate' ? ' active' : 'active';
-		} else {
-			$action = "<a href='plugins.php?action=activate&amp;plugin=$plugin_file' title='".__('Activate this plugin')."' class='edit'>".__('Activate')."</a>";
-		}
+		$action = "<span class='deactivate'><a href='plugins.php?action=deactivate&amp;plugin=$plugin_file' onclick='return dimSomething( \"plugin\", \"$sanitized_file\", \"active\" );' title='" . __('Deactivate this plugin') . "' class='delete'>" . __('Deactivate') . "</a></span><span class='activate'><a href='plugins.php?action=activate&amp;plugin=$plugin_file' onclick='return dimSomething( \"plugin\", \"$sanitized_file\", \"active\" );' title='" . __('Activate this plugin') . "' class='edit'>" . __('Activate') . "</a></span>";
 		$plugin_data['Description'] = wp_kses($plugin_data['Description'], array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array()) ); ;
 		if ($style != '') $style = 'class="' . $style . '"';
 		echo "
-	<tr $style>
+	<tr $style id='plugin-$sanitized_file'>
 		<td class='name'>{$plugin_data['Title']}</td>
 		<td class='vers'>{$plugin_data['Version']}</td>
 		<td class='desc'>{$plugin_data['Description']} <cite>".sprintf(__('By %s'), $plugin_data['Author']).".</cite></td>
@@ -117,6 +115,9 @@
 ?>
 
 </table>
+
+<div id='ajax-response'></div>
+
 <?php
 }
 ?>
Index: wp-admin/cat-js.php
===================================================================
--- wp-admin/cat-js.php	(revision 3643)
+++ wp-admin/cat-js.php	(working copy)
@@ -2,9 +2,8 @@
 require_once('admin.php');
 header('Content-type: text/javascript; charset=' . get_settings('blog_charset'), true);
 ?>
-var ajaxCat = new sack();
-var newcat;
- 
+addLoadEvent(function(){catList=new listMan('categorychecklist');catList.ajaxRespEl='jaxcat';catList.newSource='newcat';});
+addLoadEvent(newCatAddIn);
 function newCatAddIn() {
 	if ( !document.getElementById('jaxcat') ) return false;
 	var ajaxcat = document.createElement('span');
@@ -16,163 +15,21 @@
 	newcat.id = 'newcat';
 	newcat.size = '16';
 	newcat.setAttribute('autocomplete', 'off');
-	newcat.onkeypress = ajaxNewCatKeyPress;
+	newcat.onkeypress = function(e) { return killSubmit("catList.ajaxAdder('category');", e); };
 
 	var newcatSub = document.createElement('input');
 	newcatSub.type = 'button';
 	newcatSub.name = 'Button';
 	newcatSub.id = 'catadd';
-	newcatSub.value = '<?php echo addslashes(__('Add')); ?>';
-	newcatSub.onclick = ajaxNewCat;
+	newcatSub.value = 'Add';
+	newcatSub.onclick = function() { catList.ajaxAdder('category'); };
 
 	ajaxcat.appendChild(newcat);
 	ajaxcat.appendChild(newcatSub);
 	document.getElementById('jaxcat').appendChild(ajaxcat);
 
 	howto = document.createElement('span');
-	howto.innerHTML = '<?php echo addslashes(__('Separate multiple categories with commas.')); ?>';
+	howto.innerHTML = 'Separate multiple categories with commas.';
 	howto.id = 'howto';
 	ajaxcat.appendChild(howto);
 }
-
-addLoadEvent(newCatAddIn);
-
-function getResponseElement() {
-	var p = document.getElementById('ajaxcatresponse');
-	if (!p) {
-		p = document.createElement('span');
-		document.getElementById('jaxcat').appendChild(p);
-		p.id = 'ajaxcatresponse';
-	}
-	return p;
-}
-
-function newCatLoading() {
-	var p = getResponseElement();
-	p.innerHTML = '<?php echo addslashes(__('Sending Data...')); ?>';
-}
-
-function newCatLoaded() {
-	var p = getResponseElement();
-	p.innerHTML = '<?php echo addslashes(__('Data Sent...')); ?>';
-}
-
-function newCatInteractive() {
-	var p = getResponseElement();
-	p.innerHTML = '<?php echo addslashes(__('Processing Request...')); ?>';
-}
-
-function newCatCompletion() {
-	var p = getResponseElement();
-	var id    = 0;
-	var ids   = new Array();
-	var names = new Array();
-
-	ids   = myPload( ajaxCat.response );
-	names = myPload( newcat.value );
-	for ( i = 0; i < ids.length; i++ ) {
-		id = ids[i].replace(/[\n\r]+/g, "");
-		if ( id == '-1' ) {
-			p.innerHTML = "<?php echo addslashes(__("You don't have permission to do that.")); ?>";
-			return;
-		}
-		if ( id == '0' ) {
-			p.innerHTML = "<?php echo addslashes(__('That category name is invalid.  Try something else.')); ?>";
-			return;
-		}
-
-		var exists = document.getElementById('category-' + id);
-
-		if (exists) {
-			var moveIt = exists.parentNode;
-			var container = moveIt.parentNode;
-			container.removeChild(moveIt);
-			container.insertBefore(moveIt, container.firstChild);
-			moveIt.id = 'new-category-' + id;
-			exists.checked = 'checked';
-			var nowClass = moveIt.className;
-			moveIt.className = nowClass + ' fade';
-			Fat.fade_all();
-			moveIt.className = nowClass;
-		} else {
-			var catDiv = document.getElementById('categorychecklist');
-			var newLabel = document.createElement('label');
-			newLabel.setAttribute('for', 'category-' + id);
-			newLabel.id = 'new-category-' + id;
-			newLabel.className = 'selectit fade';
-
-			var newCheck = document.createElement('input');
-			newCheck.type = 'checkbox';
-			newCheck.value = id;
-			newCheck.name = 'post_category[]';
-			newCheck.id = 'category-' + id;
-			newLabel.appendChild(newCheck);
-
-			var newLabelText = document.createTextNode(' ' + names[i]);
-			newLabel.appendChild(newLabelText);
-
-			catDiv.insertBefore(newLabel, catDiv.firstChild);
-			newCheck.checked = 'checked';
-
-			Fat.fade_all();
-			newLabel.className = 'selectit';
-		}
-		newcat.value = '';
-	}
-	p.parentNode.removeChild(p);
-//	var id = parseInt(ajaxCat.response, 10);
-}
-
-function ajaxNewCatKeyPress(e) {
-	if (!e) {
-		if (window.event) {
-			e = window.event;
-		} else {
-			return;
-		}
-	}
-	if (e.keyCode == 13) {
-		ajaxNewCat();
-		e.returnValue = false;
-		e.cancelBubble = true;
-		return false;
-	}
-}
-
-function ajaxNewCat() {
-	var newcat = document.getElementById('newcat');
-	var split_cats = new Array(1);
-	var catString = '';
-
-	catString = 'ajaxnewcat=' + encodeURIComponent(newcat.value);
-	ajaxCat.requestFile = 'edit-form-ajax-cat.php';
-	ajaxCat.method = 'GET';
-	ajaxCat.onLoading = newCatLoading;
-	ajaxCat.onLoaded = newCatLoaded;
-	ajaxCat.onInteractive = newCatInteractive;
-	ajaxCat.onCompletion = newCatCompletion;
-	ajaxCat.runAJAX(catString);
-}
-
-function myPload( str ) {
-	var fixedExplode = new Array();
-	var comma = new String(',');
-	var count = 0;
-	var currentElement = '';
-
-	for( x=0; x < str.length; x++) {
-		andy = str.charAt(x);
-		if ( comma.indexOf(andy) != -1 ) {
-			currentElement = currentElement.replace(new RegExp('^\\s*(.*?)\\s*$', ''), '$1'); // trim
-			fixedExplode[count] = currentElement;
-			currentElement = "";
-			count++;
-		} else {
-			currentElement += andy;
-		}
-	}
-
-	if ( currentElement != "" )
-		fixedExplode[count] = currentElement;
-	return fixedExplode;
-}
\ No newline at end of file
Index: wp-admin/list-manipulation-js.php
===================================================================
--- wp-admin/list-manipulation-js.php	(revision 0)
+++ wp-admin/list-manipulation-js.php	(revision 0)
@@ -0,0 +1,163 @@
+<?php
+require_once('admin.php');
+header('Content-type: text/javascript; charset=' . get_settings('blog_charset'), true);
+?>
+addLoadEvent(function(){theList=new listMan();});
+function deleteSomething( what, id, message ) {
+	what.replace('-', ' ');
+	if (!message) message = 'Are you sure you want to delete this ' + what + '?';
+	if ( confirm(message) ) return theList.ajaxDelete( what.replace(' ', '-'), id );
+	else return false;
+}
+function dimSomething( what, id, dimClass ) { return theList.ajaxDimmer( what, id, dimClass ); }
+
+function WPAjax(file, responseEl) { // class WPAjax extends sack
+	this.getResponseElement = function(r) {
+		var p = document.getElementById(r + '-p');
+		if (!p) { p = document.createElement('span'); p.id = r + 'ajax-response-p'; document.getElementById(r).appendChild(p); }
+		this.myResponseElement = p;
+	}
+	this.parseAjaxResponse = function() {
+		if ( isNaN(this.response) ) { this.myResponseElement.innerHTML = 'Error: ' + this.response; return false; }
+		this.response = parseInt(this.response, 10);
+		if ( -1 == this.response ) { this.myResponseElement.innerHTML = "You don't have permission to do that."; return false; }
+		else if ( 0 == this.response ) { this.myResponseElement.innerHTML = "Something odd happened.  Try refreshing the page? Either that or what you tried to change never existed in the first place."; return false; }
+		return true;
+	}
+	this.parseAjaxResponseXML = function() {
+		if ( this.responseXML && typeof this.responseXML == 'object' ) return true;
+		if ( isNaN(this.response) ) { this.myResponseElement.innerHTML = 'Error: ' + this.response; return false; }
+		var r = parseInt(this.response, 10);
+		if ( -1 == r ) { this.myResponseElement.innerHTML = "You don't have permission to do that."; }
+		else if ( 0 == r ) { this.myResponseElement.innerHTML = "Invalid Entry."; }
+		return false; // Anything else need to be caught?
+	}
+	this.init(file, responseEl);
+}	WPAjax.prototype = new sack;
+	WPAjax.prototype.init = function(f, r) {
+		this.requestFile = f;
+		this.getResponseElement(r);
+		this.method = 'POST';
+		this.onLoading = function() { this.myResponseElement.innerHTML = 'Sending Data...'; };
+		this.onLoaded = function() { this.myResponseElement.innerHTML = 'Data Sent...'; };
+		this.onInteractive = function() { this.myResponseElement.innerHTML = 'Processing Data...'; };
+	}
+
+function listMan(theListId) {
+	this.theListId = theListId;
+	this.theList = null;
+	this.ajaxRespEl = null;
+	this.newSource = null;
+	var reg_color = '#FFFFFF';
+	var alt_color = '#F1F1F1';
+	var listItems;
+
+	this.ajaxAdder = function(what, update) { //if server returns TR, server must wrap it in TABLE TBODY.  this.makeEl cleans it
+		this.ajaxAdd = new WPAjax('admin-ajax.php', this.ajaxRespEl ? this.ajaxRespEl : 'ajax-response');
+		if ( this.ajaxAdd.failed ) return true;
+		var newInfo = document.getElementById(this.newSource);
+		var tempObj = this;
+		this.ajaxAdd.onCompletion = function() {
+			if ( !this.parseAjaxResponseXML() ) return;
+			var newItems = this.responseXML.getElementsByTagName(what);
+			for ( c=0; c < newItems.length; c++ ) {
+				var id = parseInt(getNodeValue(newItems[c], 'id'),10);
+				var exists = document.getElementById(what + '-' + id);
+				if (exists) tempObj.replaceListItem(exists.id, getNodeValue(newItems[c], 'newitem'), update);
+				else tempObj.addListItem(getNodeValue(newItems[c], 'newitem'));
+			}
+			newInfo.value = '';
+			this.myResponseElement.innerHTML = '';
+		}
+		this.ajaxAdd.runAJAX('action=add-' + what + '&info=' + encodeURIComponent(newInfo.value));
+		return false;
+	}
+	this.ajaxUpdater = function(what) {
+		return this.ajaxAdder(what, true);
+	}
+	this.ajaxDelete = function(what, id) {
+		this.ajaxDel = new WPAjax('admin-ajax.php', this.ajaxRespEl ? this.ajaxRespEl : 'ajax-response');
+		if ( this.ajaxDel.failed ) return true;
+		var tempObj = this;
+		this.ajaxDel.onCompletion = function() { if ( this.parseAjaxResponse() ) { tempObj.removeListItem( what.replace('-as-spam', '') + '-' + id, tempObj ); this.myResponseElement.innerHTML = '';} };
+		this.ajaxDel.runAJAX('action=delete-' + what + '&id=' + id);
+		return false;
+	}
+	this.ajaxDimmer = function(what, id, dimClass) {
+		this.ajaxDim = new WPAjax('admin-ajax.php', this.ajaxRespEl ? this.ajaxRespEl : 'ajax-response');
+		if ( this.ajaxDim.failed ) return true;
+		var tempObj = this;
+		this.ajaxDim.onCompletion = function() { if ( this.parseAjaxResponse() ) { tempObj.dimItem( what + '-' + id, dimClass); this.myResponseElement.innerHTML = '';} };
+		this.ajaxDim.runAJAX('action=dim-' + what + '&id=' + id);
+		return false;
+	}
+	this.makeEl = function(chunk) {
+		var fakeItem = document.createElement('div');
+		fakeItem.innerHTML = chunk;
+		var ret = fakeItem.firstChild;
+		while ( ret.tagName.match(/(table|tbody)/i) ) { ret = ret.firstChild; }
+		return ret;
+	}
+	this.addListItem = function(chunk) {
+		newItem = this.makeEl(chunk);
+		this.theList.insertBefore(newItem, this.theList.firstChild);
+		listItems.unshift(newItem.id);
+		Fat.fade_element(newItem.id);
+	}
+	this.removeListItem = function(id, listObj,noFade) {
+		if (!listObj) listObj = this;
+		if (!noFade) Fat.fade_element(id,null,700,'#FF3333');
+		if ( !self.theItem ) self.theItem = new Array(); //grumble: global
+		self.theItem[id] = document.getElementById(id);
+		if (!noFade) setTimeout('theItem["' + id + '"].parentNode.removeChild(theItem["' + id + '"]); delete(theItem["' + id + '"])', 705);
+		else { self.theItem[id].parentNode.removeChild(theItem[id]); delete(theItem[id]); }
+		var pos = listObj.getListPos(id);
+		listItems.splice(pos,1);
+		if (!noFade) listObj.recolorList(pos);
+	}
+	this.replaceListItem = function(id, chunk, update) {
+		if (!update) { this.removeListItem(id, false, true); this.addListItem(chunk); return; }
+		var newItem = this.makeEl(chunk);
+		var oldItem = document.getElementById(id);
+		oldItem.parentNode.replaceChild(newItem,oldItem);
+		Fat.fade_element(newItem.id);
+	}
+	this.dimItem = function(id, dimClass, noFade) {
+		var theItem = document.getElementById(id);
+		if ( theItem.className.match(dimClass) ) { if (!noFade) Fat.fade_element(id,null,700,null); theItem.className = theItem.className.replace(dimClass, ''); }
+		else { if (!noFade) Fat.fade_element(id,null,700,'#FF3333'); theItem.className = theItem.className + ' ' + dimClass; }
+	}
+	this.getListPos = function(id) {
+		for (var i = 0; i < listItems.length; i++) { if (id == listItems[i]) { var pos = i; break; } }
+		return pos;
+	}
+	this.getListItems = function(id,extraRows) {
+		if (this.theList) return;
+		listItems = new Array();
+		if (isNaN(extraRows)) extraRows = 0;
+		if (id) { this.theList = document.getElementById(id); if (!this.theList) return false; }
+		else { this.theList = document.getElementById('the-list'); if (this.theList) this.theListId = 'the-list'; }
+		if (!this.theList) { this.theList = document.getElementById('the-list-x'); extraRows += 1; if (this.theList) this.theListId = 'the-list-x'; } 
+		if (this.theList) {
+			var items = this.theList.getElementsByTagName('tr');
+			if (!items[0]) { items = this.theList.getElementsByTagName('li'); }
+			for (var i=0; i<items.length; i++) { listItems.push(items[i].id); }
+			if (extraRows) { listItems.splice(0,extraRows); }
+		}
+	}
+	this.recolorList = function(pos,dur,from) {
+		if (!pos) pos = 0;
+		if (!from) { reg_from = alt_color; alt_from = reg_color; }
+		else { reg_from = from; alt_from = from; }
+		var listItemsAsString = ''
+		for (var i = pos; i < listItems.length; i++) { listItemsAsString += "'" + listItems[i] + "',"; var theI = document.getElementById(listItems[i]); if (i % 2) theI.className = theI.className.replace('alternate','fade-' + alt_color.slice(1)); else theI.className += ' alternate fade-' + reg_color.slice(1); theI.style.backgroundColor = ''; }
+		listItemsAsString = listItemsAsString.slice(0,-1);
+		Fat.fade_all(1000); // fade_all seems to work better when many categories, but necessitates ugly next line.
+		setTimeout("var listItems=new Array(" + listItemsAsString + "); for (var i = 0; i < listItems.length; i++) { var theI = document.getElementById(listItems[i]); theI.className = theI.className.replace(/fade-[a-f0-9]{6}/i, ''); }", 1005);
+	}
+	this.getListItems(this.theListId);
+}
+//Don't submit, eval(code) instead
+function killSubmit(code,e){if(!e){if(window.event)e=window.event;else return;}var t=e.target?e.target:e.srcElement;if(('text'==t.type&&e.keyCode==13)||('submit'==t.type&&'click'== e.type)){eval(code);e.returnValue=false;e.cancelBubble=true;return false;}}
+//Pretty function from ALA http://www.alistapart.com/articles/gettingstartedwithajax
+function getNodeValue(tree,el){return tree.getElementsByTagName(el)[0].firstChild.nodeValue;}
Index: wp-admin/edit.php
===================================================================
--- wp-admin/edit.php	(revision 3643)
+++ wp-admin/edit.php	(working copy)
@@ -114,7 +114,6 @@
 <br style="clear:both;" />
 
 <?php
-
 // define the columns to display, the syntax is 'internal name' => 'display name'
 $posts_columns = array(
   'id'         => __('ID'),
@@ -246,26 +245,26 @@
 	if ($comments) {
 	?> 
 <h3><?php _e('Comments') ?></h3> 
-<ol id="comments"> 
+<ol id="the-list"> 
 <?php
+$i = 0;
 foreach ($comments as $comment) {
-$comment_status = wp_get_comment_status($comment->comment_ID);
+$class = ( ++$i % 2 ) ? array('alternate') : array();
+if ( 'unapproved' == $comment_status = wp_get_comment_status($comment->comment_ID) )
+	$class[] = 'unapproved';
 ?> 
 
-<li <?php if ("unapproved" == $comment_status) echo "class='unapproved'"; ?> >
+<li id='comment-<?php echo $comment->comment_ID; ?>'<?php if ( $class ) echo " class='" . join(' ', $class) . "'"; ?>>
   <?php comment_date('Y-n-j') ?> 
   @
   <?php comment_time('g:m:s a') ?> 
   <?php 
 			if ( current_user_can('edit_post', $post->ID) ) {
-				echo "[ <a href=\"post.php?action=editcomment&amp;comment=".$comment->comment_ID."\">" .  __('Edit') . "</a>";
-				echo " - <a href=\"post.php?action=deletecomment&amp;p=".$post->ID."&amp;comment=".$comment->comment_ID."\" onclick=\"return confirm('" . sprintf(__("You are about to delete this comment by \'%s\'\\n  \'OK\' to delete, \'Cancel\' to stop."), $comment->comment_author) . "')\">" . __('Delete') . "</a> ";
+				echo "[ <a href='post.php?action=editcomment&amp;comment=".$comment->comment_ID."\'>" .  __('Edit') . '</a>';
+				echo ' - <a href="post.php?action=deletecomment&amp;p=' . $post->ID . '&amp;comment=' . $comment->comment_ID . '" onclick="return deleteSomething( \'comment\', ' . $comment->comment_ID . ', \'' . sprintf(__("You are about to delete this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), wp_specialchars($comment->comment_author, 1)) . "' );\">" . __('Delete') . '</a> ';
 				if ( ('none' != $comment_status) && ( current_user_can('moderate_comments') ) ) {
-					if ('approved' == wp_get_comment_status($comment->comment_ID)) {
-						echo " - <a href=\"post.php?action=unapprovecomment&amp;p=".$post->ID."&amp;comment=".$comment->comment_ID."\">" . __('Unapprove') . "</a> ";
-					} else {
-						echo " - <a href=\"post.php?action=approvecomment&amp;p=".$post->ID."&amp;comment=".$comment->comment_ID."\">" . __('Approve') . "</a> ";
-					}
+					echo '<span class="unapprove"> - <a href="comment.php?action=unapprovecomment&amp;p=' . $post->ID . '&amp;comment=' . $comment->comment_ID . '" onclick="return dimSomething( \'comment\', ' . $comment->comment_ID . ', \'unapproved\' );">' . __('Unapprove') . '</a> </span>';
+					echo '<span class="approve"> - <a href="comment.php?action=approvecomment&amp;p=' . $post->ID . '&amp;comment=' . $comment->comment_ID . '" onclick="return dimSomething( \'comment\', ' . $comment->comment_ID . ', \'unapproved\' );">' . __('Approve') . '</a> </span>';
 				}
 				echo "]";
 			} // end if any comments to show
Index: wp-admin/list-manipulation.js
===================================================================
--- wp-admin/list-manipulation.js	(revision 3643)
+++ wp-admin/list-manipulation.js	(working copy)
@@ -1,96 +0,0 @@
-var listItems;
-var reg_color = '#FFFFFF';
-var alt_color = '#F1F1F1';
-
-addLoadEvent(getListItems);
-
-function deleteSomething( what, id, message ) {
-	what.replace('-', ' ');
-	if (!message) message = 'Are you sure you want to delete this ' + what + '?';
-	if ( confirm(message) ) {
-		return ajaxDelete( what.replace(' ', '-'), id );
-	} else {
-		return false;
-	}
-}
-
-function getResponseElement() {
-	var p = document.getElementById('ajax-response-p');
-	if (!p) {
-		p = document.createElement('p');
-		p.id = 'ajax-response-p';
-		document.getElementById('ajax-response').appendChild(p);
-		return p;
-	}
-}
-
-function ajaxDelete(what, id) {
-	ajaxDel = new sack('list-manipulation.php');
-	if ( ajaxDel.failed ) return true;
-	ajaxDel.myResponseElement = getResponseElement();
-	ajaxDel.method = 'POST';
-	ajaxDel.onLoading = function() { ajaxDel.myResponseElement.innerHTML = 'Sending Data...'; };
-	ajaxDel.onLoaded = function() { ajaxDel.myResponseElement.innerHTML = 'Data Sent...'; };
-	ajaxDel.onInteractive = function() { ajaxDel.myResponseElement.innerHTML = 'Processing Data...'; };
-	ajaxDel.onCompletion = function() { removeThisItem( what.replace('-as-spam', '') + '-' + id ); };
-	ajaxDel.runAJAX('action=delete-' + what + '&id=' + id);
-	return false;
-}
-
-function removeThisItem(id) {
-	var response = ajaxDel.response;
-	if ( isNaN(response) ) { alert(response); }
-	response = parseInt(response, 10);
-	if ( -1 == response ) { ajaxDel.myResponseElement.innerHTML = "You don't have permission to do that."; }
-	else if ( 0 == response ) { ajaxDel.myResponseElement.interHTML = "Something odd happened.  Try refreshing the page? Either that or what you tried to delete never existed in the first place."; }
-	else if ( 1 == response ) {
-		theItem = document.getElementById(id);
-		Fat.fade_element(id,null,700,'#FF3333');
-		setTimeout('theItem.parentNode.removeChild(theItem)', 705);
-		var pos = getListPos(id);
-		listItems.splice(pos,1);
-		recolorList(pos);
-		ajaxDel.myResponseElement.parentNode.removeChild(ajaxDel.myResponseElement);
-
-	}
-}
-
-function getListPos(id) {
-	for (var i = 0; i < listItems.length; i++) {
-		if (id == listItems[i]) {
-			var pos = i;
-			break;
-		}
-	}
-	return pos;
-}
-
-function getListItems() {
-	if (list) return;
-	listItems = new Array();
-	var extra = false;
-	var list = document.getElementById('the-list');
-	if (!list) { var list = document.getElementById('the-list-x'); extra = true; }
-	if (list) {
-		var items = list.getElementsByTagName('tr');
-		if (!items[0]) { items = list.getElementsByTagName('li'); }
-		for (var i=0; i<items.length; i++) { listItems.push(items[i].id); }
-		if (extra) { listItems.splice(0,1); }
-	}
-}
-
-function recolorList(pos,dur,from) {
-	if (!pos) pos = 0;
-
-	if (!from) {
-		reg_from = alt_color;
-		alt_from = reg_color;
-	} else {
-		reg_from = from;
-		alt_from = from;
-	}
-	for (var i = pos; i < listItems.length; i++) {
-		if (i % 2 == 1) Fat.fade_element(listItems[i],null,dur,reg_from,reg_color);
-		else Fat.fade_element(listItems[i],null,dur,alt_from,alt_color);
-	}
-}
