Index: admin/js/_posts_actions.js
===================================================================
--- admin/js/_posts_actions.js	(revision 1638)
+++ admin/js/_posts_actions.js	(revision 1806)
@@ -1,9 +1,12 @@
 $(function() {
-	$('#new_auth_id').autocomplete(usersList,
-	{
-		delay: 1000,
-		matchSubset: true,
-		matchContains: true
-	});
+	new_auth_id = $('#new_auth_id');
+	if (new_auth_id.length) {
+		new_auth_id.autocomplete(usersList,
+		{
+			delay: 1000,
+			matchSubset: true,
+			matchContains: true
+		});
+	}
 	$('#new_cat').toggleWithLegend($('#new_cat').parent().children().not('#new_cat'), {
 		// no cookie on new category as we don't use this every day
Index: admin/js/common.js
===================================================================
--- admin/js/common.js	(revision 1871)
+++ admin/js/common.js	(revision 1862)
@@ -352,5 +352,5 @@
 	$('#wrapper').contents().each(function() {
 		if (this.nodeType==8) {
-			$('#footer a[href!="help.php"]').attr('title', $('#footer a[href!="help.php"]').attr('title') + this.data );
+			$('#footer a').attr('title', $('#footer a').attr('title') + this.data );
 		}
 	});
Index: admin/posts.php
===================================================================
--- admin/posts.php	(revision 1792)
+++ admin/posts.php	(revision 1806)
@@ -103,33 +103,8 @@
 
 # Actions combo box
-$combo_action = array();
-if ($core->auth->check('publish,contentadmin',$core->blog->id))
-{
-	$combo_action[__('Status')] = array(
-		__('Publish') => 'publish',
-		__('Unpublish') => 'unpublish',
-		__('Schedule') => 'schedule',
-		__('Mark as pending') => 'pending'
-	);
-}
-$combo_action[__('Mark')] = array(
-	__('Mark as selected') => 'selected',
-	__('Mark as unselected') => 'unselected'
-);
-$combo_action[__('Change')] = array(
-	__('Change category') => 'category',
-	__('Change language') => 'lang');
-if ($core->auth->check('admin',$core->blog->id))
-{
-	$combo_action[__('Change')] = array_merge($combo_action[__('Change')],
-		array(__('Change author') => 'author'));
-}
-if ($core->auth->check('delete,contentadmin',$core->blog->id))
-{
-	$combo_action[__('Delete')] = array(__('Delete') => 'delete');
-}
-
-# --BEHAVIOR-- adminPostsActionsCombo
-$core->callBehavior('adminPostsActionsCombo',array(&$combo_action));
+
+$posts_actions_page = new dcPostsActionsPage($core,'posts.php');
+
+$posts_actions_page->process();
 
 /* Get posts
@@ -304,5 +279,5 @@
 	# Show posts
 	$post_list->display($page,$nb_per_page,
-	'<form action="posts_actions.php" method="post" id="form-entries">'.
+	'<form action="posts.php" method="post" id="form-entries">'.
 	
 	'%s'.
@@ -312,5 +287,5 @@
 	
 	'<p class="col right"><label for="action" class="classic">'.__('Selected entries action:').'</label> '.
-	form::combo('action',$combo_action).
+	form::combo('action',$posts_actions_page->getCombo()).
 	'<input type="submit" value="'.__('ok').'" /></p>'.
 	form::hidden(array('user_id'),$user_id).
Index: admin/posts_actions.php
===================================================================
--- admin/posts_actions.php	(revision 1719)
+++ admin/posts_actions.php	(revision 1806)
@@ -11,490 +11,14 @@
 # -- END LICENSE BLOCK -----------------------------------------
 
+/* ### THIS FILE IS DEPRECATED 					### */
+/* ### IT IS ONLY USED FOR PLUGINS COMPATIBILITY ### */
+
 require dirname(__FILE__).'/../inc/admin/prepend.php';
 
 dcPage::check('usage,contentadmin');
 
-$params = array();
+$posts_actions_page = new dcPostsActionsPage($core,'posts.php');
 
-/**
-* FieldsList - Compatibility class for hidden fields & entries[] fields
-*
-*/
-class FieldsList {
-	/** @var array list of hidden fields */
-	protected $hidden;
-	/** @var array list of selected entries */
-	protected $entries;
+$posts_actions_page->process();
 
-
-   /**
-     * Class constructor
-	*/
-	public function __construct() {
-		$this->hidden=array();
-		$this->entries =array();
-	}
-
-    /**
-     * addHidden - adds a hidden field
-     * 
-     * @param string $name the field name.
-     * @param mixed $value the field value.
-     *
-     * @access public
-	 * @return the FieldsList instance, enabling to chain requests
-     */	
-	 public function addHidden($name,$value) {
-		$this->hidden[] = form::hidden($name,$value);
-		return $this;
-	}
-
-    /**
-     * addEntry - adds a antry field
-     * 
-     * @param string $id the entry id.
-     * @param mixed $title the entry title.
-     *
-     * @access public
-	 * @return the FieldsList instance, enabling to chain requests
-     */	
-	 public function addEntry($id,$title) {
-		$this->entries[$id]=$title;
-		return $this;
-	}
-
-    /**
-     * getHidden - returns the list of hidden fields, html encoded
-     *
-     * @access public
-	 * @return the list of hidden fields, html encoded
-     */
-	 public function getHidden() {
-		return join('',$this->hidden);
-	}
-	
-    /**
-     * getEntries - returns the list of entry fields, html encoded
-     *
-	 * @param boolean $hidden if set to true, returns entries as a list of hidden field
-	 *                if set to false, returns html code displaying the list of entries
-	 *                with a list of checkboxes to enable to select/deselect entries
-     * @access public
-	 * @return the list of entry fields, html encoded
-     */
-	public function getEntries ($hidden=false) {
-		$ret = '';
-		if ($hidden) {
-			foreach ($this->entries as $id=> $e) {
-				$ret .= form::hidden('entries[]',$id);
-			}
-		} else {
-			$ret = 
-				'<table class="posts-list"><tr>'.
-				'<th colspan="2">'.__('Title').'</th>'.
-				'</tr>';
-			foreach ($this->entries as $id=>$title) {
-				$ret .= 
-					'<tr><td>'.
-					form::checkbox(array('entries[]'),$id,true,'','').'</td>'.
-					'<td>'.	$title.'</td></tr>';
-			}
-			$ret .= '</table>';
-		}
-		return $ret;
-	}
-	
-    /**
-     * getEntriesQS - returns the list of entry fields as query string
-     *
-     * @access public
-	 * @return the list of entry fields, html encoded
-     */
-	public function getEntriesQS() {
-		$ret=array();
-		foreach ($this->entries as $id=>$title) {
-			$ret[] = 'entries[]='.$id;
-		}
-		return join('&',$ret);
-	}
-	
-    /**
-     * __toString - magic method. -- DEPRECATED here
-	 *              This method is only used to preserve compatibility with plugins 
-	 *				relying on previous versions of adminPostsActionsContent behavior, 
-	 *
-     * @access public
-	 * @return the list of hidden fields and entries (as hidden fields too), html encoded
-     */
-	public function __toString() {
-		return join('',$this->hidden).$this->getEntries(true);
-	}
-}
-
-$fields = new FieldsList();
-$posts_ids = array();
-
-if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false)
-{
-	$redir = $_POST['redir'];
-}
-else
-{
-	$redir =
-	'posts.php?user_id='.$_POST['user_id'].
-	'&cat_id='.$_POST['cat_id'].
-	'&status='.$_POST['status'].
-	'&selected='.$_POST['selected'].
-	'&month='.$_POST['month'].
-	'&lang='.$_POST['lang'].
-	'&sortby='.$_POST['sortby'].
-	'&order='.$_POST['order'].
-	'&page='.$_POST['page'].
-	'&nb='.$_POST['nb'];
-}
-$redir_sel = $redir;
-
-if (!empty($_POST['entries']))
-{
-	$entries = $_POST['entries'];
-	
-	foreach ($entries as $k => $v) {
-		$entries[$k] = (integer) $v;
-	}
-	
-	$params['sql'] = 'AND P.post_id IN('.implode(',',$entries).') ';
-	
-	if (!isset($_POST['full_content']) || empty($_POST['full_content'])) {
-		$params['no_content'] = true;
-	}
-	
-	if (isset($_POST['post_type'])) {
-		$params['post_type'] = $_POST['post_type'];
-	}
-	
-	$posts = $core->blog->getPosts($params);
-	while ($posts->fetch())	{
-		$posts_ids[] = $posts->post_id;
-		$fields->addEntry($posts->post_id,$posts->post_title);
-	}
-	// Redirection including selected entries
-	$redir_sel = $redir.'&'.$fields->getEntriesQS();
-
-} else {
-	$posts = $core->con->select("SELECT blog_id FROM ".$core->prefix."blog WHERE false");;
-}
-
-/* Actions
--------------------------------------------------------- */
-if (!empty($_POST['action']))
-{
-	$action = $_POST['action'];
-} 
-else
-{
-	$core->error->add(__('No action specified.'));
-	dcPage::open(
-		__('Entries'),'',dcPage::breadcrumb(
-		array(
-			html::escapeHTML($core->blog->name) => '',
-			__('Entries') => 'posts.php',
-			'<span class="page-title">'.__('Entries actions').'</span>' => ''
-		))
-	);
-	
-	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
-
-	dcPage::close();
-	exit;
-}
-
-# --BEHAVIOR-- adminPostsActions
-$core->callBehavior('adminPostsActions',$core,$posts,$action,$redir);
-
-if (preg_match('/^(publish|unpublish|schedule|pending)$/',$action))
-{
-	switch ($action) {
-		case 'unpublish' : $status = 0; break;
-		case 'schedule' : $status = -1; break;
-		case 'pending' : $status = -2; break;
-		default : $status = 1; break;
-	}
-	
-	try
-	{
-		$core->blog->updPostsStatus($posts_ids,$status);
-		
-		http::redirect($redir_sel.'&upd=1');
-	}
-	catch (Exception $e)
-	{
-		$core->error->add($e->getMessage());
-	}
-}
-elseif ($action == 'selected' || $action == 'unselected')
-{
-	try
-	{
-		$core->blog->updPostsSelected($posts_ids,$action == 'selected');
-		
-		http::redirect($redir_sel."&upd=1");
-	}
-	catch (Exception $e)
-	{
-		$core->error->add($e->getMessage());
-	}
-}
-elseif ($action == 'delete')
-{
-	try
-	{
-		// Backward compatibility
-		foreach($posts_ids as $post_id)
-		{
-			# --BEHAVIOR-- adminBeforePostDelete
-			$core->callBehavior('adminBeforePostDelete',(integer) $post_id);
-		}
-		
-		# --BEHAVIOR-- adminBeforePostsDelete
-		$core->callBehavior('adminBeforePostsDelete',$posts_ids);
-		
-		$core->blog->delPosts($posts_ids);
-		
-		http::redirect($redir."&del=1");
-	}
-	catch (Exception $e)
-	{
-		$core->error->add($e->getMessage());
-	}
-	
-}
-elseif ($action == 'category' && isset($_POST['new_cat_id']))
-{
-	$new_cat_id = $_POST['new_cat_id'];
-	
-	try
-	{
-		if (!empty($_POST['new_cat_title']) && $core->auth->check('categories', $core->blog->id))
-		{
-			$cur_cat = $core->con->openCursor($core->prefix.'category');
-			$cur_cat->cat_title = $_POST['new_cat_title'];
-			$cur_cat->cat_url = '';
-			
-			$parent_cat = !empty($_POST['new_cat_parent']) ? $_POST['new_cat_parent'] : '';
-			
-			# --BEHAVIOR-- adminBeforeCategoryCreate
-			$core->callBehavior('adminBeforeCategoryCreate', $cur_cat);
-			
-			$new_cat_id = $core->blog->addCategory($cur_cat, (integer) $parent_cat);
-			
-			# --BEHAVIOR-- adminAfterCategoryCreate
-			$core->callBehavior('adminAfterCategoryCreate', $cur_cat, $new_cat_id);
-		}
-		
-		$core->blog->updPostsCategory($posts_ids, $new_cat_id);
-		
-		http::redirect($redir_sel."&upd=1");
-	}
-	catch (Exception $e)
-	{
-		$core->error->add($e->getMessage());
-	}
-}
-elseif ($action == 'author' && isset($_POST['new_auth_id'])
-&& $core->auth->check('admin',$core->blog->id))
-{
-	$new_user_id = $_POST['new_auth_id'];
-	
-	try
-	{
-		if ($core->getUser($new_user_id)->isEmpty()) {
-			throw new Exception(__('This user does not exist'));
-		}
-		
-		$cur = $core->con->openCursor($core->prefix.'post');
-		$cur->user_id = $new_user_id;
-		$cur->update('WHERE post_id '.$core->con->in($posts_ids));
-		
-		http::redirect($redir_sel."&upd=1");
-	}
-	catch (Exception $e)
-	{
-		$core->error->add($e->getMessage());
-	}
-}
-elseif ($action == 'lang' && isset($_POST['new_lang']))
-{
-	$new_lang = $_POST['new_lang'];
-	try
-	{
-		$cur = $core->con->openCursor($core->prefix.'post');
-		$cur->post_lang = $new_lang;
-		$cur->update('WHERE post_id '.$core->con->in($posts_ids));
-		
-		http::redirect($redir_sel."&upd=1");
-	}
-	catch (Exception $e)
-	{
-		$core->error->add($e->getMessages());
-	}
-}
-
-/* DISPLAY
--------------------------------------------------------- */
-// Get current users list
-$usersList = '';
-if ($action == 'author' && $core->auth->check('admin',$core->blog->id)) {
-	$params = array(
-		'limit' => 100,
-		'order' => 'nb_post DESC'
-		);
-	$rs = $core->getUsers($params);
-	while ($rs->fetch())
-	{
-		$usersList .= ($usersList != '' ? ',' : '').'"'.$rs->user_id.'"';
-	}
-}
-dcPage::open(
-	__('Entries'),
-	'<script type="text/javascript">'."\n".
-	"//<![CDATA[\n".
-	'usersList = ['.$usersList.']'."\n".
-	"\n//]]>\n".
-	"</script>\n".
-	dcPage::jsLoad('js/jquery/jquery.autocomplete.js').
-	dcPage::jsLoad('js/_posts_actions.js').
-	dcPage::jsMetaEditor().
-	# --BEHAVIOR-- adminBeforePostDelete
-	$core->callBehavior('adminPostsActionsHeaders')
-);
-
-if (!isset($action)) {
-	dcPage::close();
-	exit;
-}
-
-if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false)
-{
-	$fields->addHidden(array('redir'),html::escapeURL($_POST['redir']));
-}
-else
-{
-	$fields
-		->addHidden(array('user_id'),$_POST['user_id'])
-		->addHidden(array('cat_id'),$_POST['cat_id'])
-		->addHidden(array('status'),$_POST['status'])
-		->addHidden(array('selected'),$_POST['selected'])
-		->addHidden(array('month'),$_POST['month'])
-		->addHidden(array('lang'),$_POST['lang'])
-		->addHidden(array('sortby'),$_POST['sortby'])
-		->addHidden(array('order'),$_POST['order'])
-		->addHidden(array('page'),$_POST['page'])
-		->addHidden(array('nb'),$_POST['nb'])
-	;
-}
-
-if (isset($_POST['post_type'])) {
-	$fields->addHidden(array('post_type'),$_POST['post_type']);
-}
-
-# --BEHAVIOR-- adminPostsActionsContent
-$core->callBehavior('adminPostsActionsContent',$core,$action,$fields);
-
-if ($action == 'category')
-{
-	echo dcPage::breadcrumb(
-		array(
-			html::escapeHTML($core->blog->name) => '',
-			__('Entries') => 'posts.php',
-			'<span class="page-title">'.__('Change category for this selection').'</span>' => ''
-	));
-	
-	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
-
-	# categories list
-	# Getting categories
-	$categories_combo = dcAdminCombos::getCategoriesCombo(
-		$core->blog->getCategories(array('post_type'=>'post'))
-	);
-	
-	echo
-	'<form action="posts_actions.php" method="post">'.
-	$fields->getEntries().
-	'<p><label for="new_cat_id" class="classic">'.__('Category:').'</label> '.
-	form::combo('new_cat_id',$categories_combo,'');
-	
-	if ($core->auth->check('categories', $core->blog->id)) {
-		echo 
-		'<div>'.
-		'<p id="new_cat">'.__('Create a new category for the post(s)').'</p>'.
-		'<p><label for="new_cat_title">'.__('Title:').'</label> '.
-		form::field('new_cat_title',30,255,'','').'</p>'.
-		'<p><label for="new_cat_parent">'.__('Parent:').'</label> '.
-		form::combo('new_cat_parent',$categories_combo,'','').
-		'</p>'.
-		'</div>';
-	}
-	
-	echo
-	$fields->getHidden().
-	$core->formNonce().
-	form::hidden(array('action'),'category').
-	'<input type="submit" value="'.__('Save').'" /></p>'.
-	'</form>';
-}
-elseif ($action == 'lang')
-{
-	echo dcPage::breadcrumb(
-		array(
-			html::escapeHTML($core->blog->name) => '',
-			__('Entries') => 'posts.php',
-			'<span class="page-title">'.__('Change language for this selection').'</span>' => ''
-	));
-	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
-
-	# lang list
-	# Languages combo
-	$rs = $core->blog->getLangs(array('order'=>'asc'));
-	$lang_combo = dcAdminCombos::getLangsCombo($rs,true);
-	
-	echo
-	'<form action="posts_actions.php" method="post">'.
-	$fields->getEntries().
-	
-	'<p><label for="new_lang" class="classic">'.__('Entry lang:').'</label> '.
-	form::combo('new_lang',$lang_combo,'');
-	
-	echo
-	$fields->getHidden().
-	$core->formNonce().
-	form::hidden(array('action'),'lang').
-	'<input type="submit" value="'.__('Save').'" /></p>'.
-	'</form>';
-
-}
-elseif ($action == 'author' && $core->auth->check('admin',$core->blog->id))
-{
-	echo dcPage::breadcrumb(
-		array(
-			html::escapeHTML($core->blog->name) => '',
-			__('Entries') => 'posts.php',
-			'<span class="page-title">'.__('Change author for this selection').'</span>' => ''
-	));
-	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
-
-	echo
-	'<form action="posts_actions.php" method="post">'.
-	$fields->getEntries().
-	'<p><label for="new_auth_id" class="classic">'.__('New author (author ID):').'</label> '.
-	form::field('new_auth_id',20,255);
-	
-	echo
-	$fields->getHidden().
-	$core->formNonce().
-	form::hidden(array('action'),'author').
-	'<input type="submit" value="'.__('Save').'" /></p>'.
-	'</form>';
-}
-
-dcPage::close();
 ?>
Index: admin/style/default.css
===================================================================
--- admin/style/default.css	(revision 1873)
+++ admin/style/default.css	(revision 1869)
@@ -67,5 +67,5 @@
 	text-align: left;
 	overflow: hidden;
-	padding-top: 16px;
+	padding-top: 22px;
 	}
 .expand-mm {
@@ -272,5 +272,5 @@
 	font-size: 1.2rem;
 	line-height: 1.5;
-	font-family: Arial,"Helvetica Neue",Helvetica,sans-serif;
+	font-family: Arial,Helvetica,sans-serif;
 	color: #333;
 	background: #fff;
@@ -313,5 +313,6 @@
 	color: #D33800;
 	font-weight: normal;
-	font-size: 1.34em;
+	font-size: 16px; /* ie < 9 sucks */
+	font-size: 1.6rem;
 	}
 	#main-menu h3 {
@@ -325,9 +326,11 @@
 	.fieldset h3, .fieldset h4, .pretty-title { /* variante */
 		color: #D33800;
-		font-size: 1em;
+		font-size: 12px;
+		font-size: 1.2rem;
 		font-weight: bold;
 		}
 		.fieldset h3 {
-			font-size: 1.17em;
+			font-size: 14px;
+			font-size: 1.4rem;
 			}
 	.fieldset h3.smart-title, .fieldset h4.smart-title, .smart-title { /* variante */
@@ -598,14 +601,16 @@
 input[type=submit] {
 	border: 1px solid #ccc;
-	font-family: "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;
+	font-family: arial, helvetica, sans-serif;
 	padding: 4px 10px;
 	line-height: normal !important;
 	display: inline-block;
 	vertical-align: middle;
-	font-size: 100%;
+	font-size: 12px; /* ie < 9 sucks */
+	font-size: 1.2rem;
 	text-align: center;
 	text-decoration: none;
 	border-radius: 3px;
 	cursor: pointer;
+	font: 100% "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;
 	}
 button,
@@ -766,5 +771,5 @@
 		color: #fff;
 		}
-		.message a, .static-msg a, .message h3, .static-msg h3 {
+		.message a, .static-msg a {
 			color: #fff;
 			}
Index: admin/users_actions.php
===================================================================
--- admin/users_actions.php	(revision 1870)
+++ admin/users_actions.php	(revision 1620)
@@ -287,5 +287,5 @@
 	'<div class="fieldset">'.
 	'<h3>'.__('Validate permissions').'</h3>'.
-	'<p><label for="your_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label>'.
+	'<p><label for="your_pwd">'.__('Your password:').'</label>'.
 	form::password('your_pwd',20,255).'</p>'.
 	'<p><input type="submit" accesskey="s" value="'.__('Save').'" />'.
