Index: admin/auth.php
===================================================================
--- admin/auth.php	(revision 454)
+++ admin/auth.php	(revision 199)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -22,6 +22,5 @@
 # That's a tricky hack but it works ;)
 $dlang = http::getAcceptLanguage();
-$dlang = ($dlang == '' ? 'en' : $dlang);
-if ($dlang != 'en' && preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$dlang))
+if ($dlang != 'en')
 {
 	l10n::set(dirname(__FILE__).'/../locales/'.$dlang.'/main');
@@ -90,5 +89,5 @@
 		$page_url.'?akey='.$recover_key;
 		
-		$headers[] = 'From: '.(defined('DC_ADMIN_MAILFROM') && DC_ADMIN_MAILFROM ? DC_ADMIN_MAILFROM : 'dotclear@local');
+		$headers[] = 'From: dotclear@'.$_SERVER['HTTP_HOST'];
 		$headers[] = 'Content-Type: text/plain; charset=UTF-8;';
 		
@@ -126,21 +125,6 @@
 }
 # Change password and retry to log
-elseif ($change_pwd)
-{
-	try
-	{
-		$tmp_data = explode('/',$_POST['login_data']);
-		if (count($tmp_data) != 3) {
-			throw new Exception();
-		}
-		$data = array(
-			'user_id'=>base64_decode($tmp_data[0]),
-			'cookie_admin'=>$tmp_data[1],
-			'user_remember'=>$tmp_data[2]=='1'
-		);
-		if ($data['user_id'] === false) {
-			throw new Exception();
-		}
-		
+elseif ($change_pwd and $data = unserialize(base64_decode($_POST['login_data'])))
+{
 	# Check login informations
 	$check_user = false;
@@ -157,4 +141,6 @@
 	}
 	
+	try
+	{
 		if (!$core->auth->allowPassChange() || !$check_user) {
 			$change_pwd = false;
@@ -179,5 +165,9 @@
 		$_SESSION['sess_browser_uid'] = http::browserUID(DC_MASTER_KEY);
 		
-		if ($data['user_remember'])
+		if (!empty($data['blog_id'])) {
+			$_SESSION['sess_blog_id'] = $data['blog_id'];
+		}
+		
+		if (!empty($data['user_remember']))
 		{
 			setcookie('dc_admin',$data['cookie_admin'],strtotime('+15 days'),'','',DC_ADMIN_SSL);
@@ -202,9 +192,10 @@
 	if ($check_user && $core->auth->mustChangePassword())
 	{
-		$login_data = join('/',array(
-			base64_encode($user_id),
-			$cookie_admin,
-			empty($_POST['user_remember'])?'0':'1'
-		));
+		$login_data = base64_encode(serialize(array(
+			'user_id'=>$user_id,
+			'cookie_admin'=>$cookie_admin,
+			'blog_id'=>(!empty($_POST['blog']) ? $_POST['blog'] : ''),
+			'user_remember'=>!empty($_POST['user_remember'])
+		)));
 		
 		if (!$core->auth->allowPassChange()) {
@@ -257,10 +248,10 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
-xml:lang="<?php echo $dlang; ?>" lang="<?php echo $dlang; ?>">
+xml:lang="en" lang="en">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <meta http-equiv="Content-Script-Type" content="text/javascript" />
   <meta http-equiv="Content-Style-Type" content="text/css" />
-  <meta http-equiv="Content-Language" content="<?php echo $dlang; ?>" />
+  <meta http-equiv="Content-Language" content="en" />
   <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />
   <meta name="GOOGLEBOT" content="NOSNIPPET" />
@@ -301,8 +292,7 @@
 	 return true;
     };
-    $.cookie('dc_admin_test_cookie',true);
-    if ($.cookie('dc_admin_test_cookie')) {
+    
+    if (navigator.cookieEnabled) {
       $('#cookie_help').hide();
-      $.cookie('dc_admin_test_cookie', '', {'expires': -1});
     } else {
       $('#cookie_help').show();
@@ -336,15 +326,14 @@
 	'<fieldset><legend>'.__('Request a new password').'</legend>'.
 	'<p><label for="user_id">'.__('Username:').' '.
-	form::field(array('user_id','user_id'),20,32,html::escapeHTML($user_id)).'</label></p>'.
+	form::field(array('user_id','user_id'),20,32,html::escapeHTML($user_id),'',1).'</label></p>'.
 	
 	'<p><label for="user_email">'.__('Email:').' '.
-	form::field(array('user_email','user_email'),20,255,html::escapeHTML($user_email)).'</label></p>'.
-	
-	'<p><input type="submit" value="'.__('recover').'" />'.
+	form::field(array('user_email','user_email'),20,255,html::escapeHTML($user_email),'',2).'</label></p>'.
+	
+	'<p><input type="submit" value="'.__('recover').'" tabindex="3" />'.
 	form::hidden(array('recover'),1).'</p>'.
 	'</fieldset>'.
 	
-	'<div id="issue">'.
-	'<p><a href="auth.php">'.__('Back to login screen').'</a></p></div>';
+	'<p><a href="auth.php">'.__('Back to login screen').'</a></p>';
 }
 elseif ($change_pwd)
@@ -353,8 +342,8 @@
 	'<fieldset><legend>'.__('Change your password').'</legend>'.
 	'<p><label for="new_pwd">'.__('New password:').' '.
-	form::password(array('new_pwd','new_pwd'),20,255).'</label></p>'.
+	form::password(array('new_pwd','new_pwd'),20,255,'','',1).'</label></p>'.
 	
 	'<p><label for="new_pwd_c">'.__('Confirm password:').' '.
-	form::password(array('new_pwd_c','new_pwd_c'),20,255).'</label></p>'.
+	form::password(array('new_pwd_c','new_pwd_c'),20,255,'','',2).'</label></p>'.
 	'</fielset>'.
 	
@@ -382,14 +371,14 @@
 		echo
 		'<p><label for="user_id">'.__('Username:').' '.
-		form::field(array('user_id','user_id'),20,32,html::escapeHTML($user_id)).'</label></p>'.
+		form::field(array('user_id','user_id'),20,32,html::escapeHTML($user_id),'',1).'</label></p>'.
 		
 		'<p><label for="user_pwd">'.__('Password:').' '.
-		form::password(array('user_pwd','user_pwd'),20,255).'</label></p>'.
+		form::password(array('user_pwd','user_pwd'),20,255,'','',2).'</label></p>'.
 		
 		'<p><label for="user_remember" class="classic">'.
-		form::checkbox(array('user_remember','user_remember'),1).' '.
+		form::checkbox(array('user_remember','user_remember'),1,'','',3).' '.
 		__('Remember my ID on this computer').'</label></p>'.
 		
-		'<p><input type="submit" value="'.__('log in').'" /></p>';
+		'<p><input type="submit" value="'.__('log in').'" tabindex="4" /></p>';
 		
 		if (!empty($_REQUEST['blog'])) {
@@ -402,5 +391,5 @@
 		echo
 		'</fieldset>'.
-		'<p id="cookie_help" class="error">'.__('You must accept cookies in order to use the private area.').'</p>';
+		'<p id="cookie_help">'.__('You must accept cookies in order to use the private area.').'</p>';
 
 		echo '<div id="issue">';
Index: admin/blog.php
===================================================================
--- admin/blog.php	(revision 270)
+++ admin/blog.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/blog_del.php
===================================================================
--- admin/blog_del.php	(revision 270)
+++ admin/blog_del.php	(revision 38)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/blog_pref.php
===================================================================
--- admin/blog_pref.php	(revision 270)
+++ admin/blog_pref.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/blog_theme.php
===================================================================
--- admin/blog_theme.php	(revision 455)
+++ admin/blog_theme.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -156,9 +156,5 @@
 	
 	$radio_id = 'theme_'.html::escapeHTML($id);
-	if (preg_match('#^http(s)?://#',$core->blog->settings->system->themes_url)) {
-		$theme_url = http::concatURL($core->blog->settings->system->themes_url,'/'.$id);
-	} else {
-		$theme_url = http::concatURL($core->blog->url,$core->blog->settings->system->themes_url.'/'.$id);
-	}
+	$theme_url = http::concatURL($core->blog->url,$core->blog->settings->system->themes_url.'/'.$id);
 	$has_conf = file_exists(path::real($core->blog->themes_path.'/'.$id).'/_config.php');
 	$has_css = file_exists(path::real($core->blog->themes_path.'/'.$id).'/style.css');
@@ -338,18 +334,12 @@
 	try
 	{
-		# Let theme configuration set their own form(s)
-		$managed = (boolean) $core->callBehavior('adminThemeConfigManaged');
-		
-		if (!$managed)
-			echo '<form id="theme_config" action="blog_theme.php?conf=1" method="post" enctype="multipart/form-data">';
-
+		echo '<form id="theme_config" action="blog_theme.php?conf=1" method="post" enctype="multipart/form-data">';
+		
 		include $theme_conf_file;
-
-		if (!$managed)
-			echo
-			'<p class="clear"><input type="submit" value="'.__('Save').'" />'.
-			$core->formNonce().'</p>'.
-			'</form>';
-
+		
+		echo
+		'<p class="clear"><input type="submit" value="'.__('Save').'" />'.
+		$core->formNonce().'</p>'.
+		'</form>';
 	}
 	catch (Exception $e)
Index: admin/blogs.php
===================================================================
--- admin/blogs.php	(revision 270)
+++ admin/blogs.php	(revision 158)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/categories.php
===================================================================
--- admin/categories.php	(revision 270)
+++ admin/categories.php	(revision 82)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -130,7 +130,5 @@
 '<option value="0">'.__('Top level').'</option>';
 while ($rs->fetch()) {
-	echo '<option value="'.$rs->cat_id.'">'.
-		str_repeat('&nbsp;&nbsp;',$rs->level-1).($categories->level-1 == 0 ? '' : '&bull; ').
-		html::escapeHTML($rs->cat_title).'</option>';
+	echo '<option value="'.$rs->cat_id.'">'.str_repeat('&nbsp;&nbsp;',$rs->level).'&bull; '.html::escapeHTML($rs->cat_title).'</option>';
 }
 echo
Index: admin/category.php
===================================================================
--- admin/category.php	(revision 454)
+++ admin/category.php	(revision 38)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -58,5 +58,5 @@
 		if (!isset($p[$rs->cat_id])) {
 			$allowed_parents[] = new formSelectOption(
-				str_repeat('&nbsp;&nbsp;',$rs->level-1).($rs->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($rs->cat_title),
+				str_repeat('&nbsp;&nbsp;',$rs->level-1).'&bull; '.html::escapeHTML($rs->cat_title),
 				$rs->cat_id
 			);
@@ -185,5 +185,5 @@
 '<fieldset><legend>'.__('Category information').'</legend>'.
 '<p><label class="required" for="cat_title"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').' '.
-form::field('cat_title',40,255,html::escapeHTML($cat_title)).
+form::field('cat_title',40,255,html::escapeHTML($cat_title),'',2).
 '</label></p>';
 if (!$cat_id)
@@ -192,5 +192,5 @@
 	echo
 	'<p><label for="new_cat_parent">'.__('Parent:').' '.
-	'<select id="new_cat_parent" name="new_cat_parent" >'.
+	'<select id="new_cat_parent" name="new_cat_parent" tabindex="3">'.
 	'<option value="0">'.__('Top level').'</option>';
 	while ($rs->fetch()) {
@@ -204,5 +204,5 @@
 echo
 '<div class="lockable">'.
-'<p><label for="cat_url">'.__('URL:').' '.form::field('cat_url',40,255,html::escapeHTML($cat_url)).
+'<p><label for="cat_url">'.__('URL:').' '.form::field('cat_url',40,255,html::escapeHTML($cat_url),'',4).
 '</label></p>'.
 '<p class="form-note warn" id="note-cat-url">'.
@@ -211,8 +211,8 @@
 
 '<p class="area"><label for="cat_desc">'.__('Description:').'</label> '.
-form::textarea('cat_desc',50,8,html::escapeHTML($cat_desc)).
+form::textarea('cat_desc',50,8,html::escapeHTML($cat_desc),'',5).
 '</p>'.
 
-'<p><input type="submit" accesskey="s" value="'.__('Save').'" />'.
+'<p><input type="submit" accesskey="s" value="'.__('Save').'" tabindex="5" />'.
 ($cat_id ? form::hidden('id',$cat_id) : '').
 $core->formNonce().
@@ -232,5 +232,5 @@
 	'<p><label for="cat_parent" class="classic">'.__('Parent:').' '.
 	form::combo('cat_parent',$allowed_parents,$cat_parent).'</label></p>'.
-	'<p><input type="submit" accesskey="s" value="'.__('Save').'" />'.
+	'<p><input type="submit" accesskey="s" value="'.__('Save').'" tabindex="5" />'.
 	form::hidden(array('id'),$cat_id).$core->formNonce().'</p>'.
 	'</fieldset>'.
@@ -246,5 +246,5 @@
 		form::combo('cat_move',array(__('before')=>'before',__('after')=>'after'),'','','',false,'title="'.__('position: ').'"').' '.
 		form::combo('cat_sibling',$siblings).'</p>'.
-		'<p><input type="submit" accesskey="s" value="'.__('Save').'" />'.
+		'<p><input type="submit" accesskey="s" value="'.__('Save').'" tabindex="5" />'.
 		form::hidden(array('id'),$cat_id).$core->formNonce().'</p>'.
 		'</fieldset>'.
Index: admin/comment.php
===================================================================
--- admin/comment.php	(revision 270)
+++ admin/comment.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/comments.php
===================================================================
--- admin/comments.php	(revision 270)
+++ admin/comments.php	(revision 178)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/comments_actions.php
===================================================================
--- admin/comments_actions.php	(revision 270)
+++ admin/comments_actions.php	(revision 0)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/dispatcher.php
===================================================================
--- admin/dispatcher.php	(revision 270)
+++ admin/dispatcher.php	(revision 0)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/index.php
===================================================================
--- admin/index.php	(revision 454)
+++ admin/index.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -84,5 +84,5 @@
 			$title = ($fav['name'] == 'posts' ? sprintf($str_entries,$post_count) : 
 				($fav['name'] == 'comments' ? sprintf($str_comments,$comment_count) : $fav['title']));
-			$__dashboard_icons[$fav['name']] = new ArrayObject(array(__($title),$fav['url'],$fav['large-icon']));
+			$__dashboard_icons[$fav['name']] = new ArrayObject(array($title,$fav['url'],$fav['large-icon']));
 
 			# Let plugins set their own title for favorite on dashboard
@@ -99,5 +99,5 @@
 			$title = ($fav['name'] == 'posts' ? sprintf($str_entries,$post_count) : 
 				($fav['name'] == 'comments' ? sprintf($str_comments,$comment_count) : $fav['title']));
-			$__dashboard_icons[$fav['name']] = new ArrayObject(array(__($title),$fav['url'],$fav['large-icon']));
+			$__dashboard_icons[$fav['name']] = new ArrayObject(array($title,$fav['url'],$fav['large-icon']));
 
 			# Let plugins set their own title for favorite on dashboard
@@ -201,15 +201,8 @@
 }
 
-if (!defined('DC_ADMIN_URL') || !DC_ADMIN_URL) {
+if (!DC_ADMIN_URL) {
 	echo
 	'<p class="static-msg">'.
-	'DC_ADMIN_URL '.__('is not defined, you should edit your configuration file.').
-	'</p>';
-}
-
-if (!defined('DC_ADMIN_MAILFROM') || !DC_ADMIN_MAILFROM) {
-	echo
-	'<p class="static-msg">'.
-	'DC_ADMIN_MAILFROM '.__('is not defined, you should edit your configuration file.').
+	__('DC_ADMIN_URL is not defined, you should edit your configuration file.').
 	'</p>';
 }
@@ -299,6 +292,5 @@
 			while ($categories->fetch()) {
 				$categories_combo[] = new formSelectOption(
-					str_repeat('&nbsp;&nbsp;',$categories->level-1).
-					($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
+					str_repeat('&nbsp;&nbsp;',$categories->level-1).'&bull; '.html::escapeHTML($categories->cat_title),
 					$categories->cat_id
 				);
@@ -312,13 +304,13 @@
 		'<fieldset>'.
 		'<p class="col"><label for="post_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').
-		form::field('post_title',20,255,'','maximal').
+		form::field('post_title',20,255,'','maximal',2).
 		'</label></p>'.
 		'<p class="area"><label class="required" '.
 		'for="post_content"><abbr title="'.__('Required field').'">*</abbr> '.__('Content:').'</label> '.
-		form::textarea('post_content',50,7).
+		form::textarea('post_content',50,7,'','',2).
 		'</p>'.
 		'<p><label for="cat_id" class="classic">'.__('Category:').' '.
-		form::combo('cat_id',$categories_combo).'</label></p>'.
-		'<p><input type="submit" value="'.__('Save').'" name="save" /> '.
+		form::combo('cat_id',$categories_combo,'','',2).'</label></p>'.
+		'<p><input type="submit" value="'.__('Save').'" name="save" tabindex="3" /> '.
 		($core->auth->check('publish',$core->blog->id)
 			? '<input type="hidden" value="'.__('save and publish').'" name="save-publish" />'
Index: admin/install/check.php
===================================================================
--- admin/install/check.php	(revision 270)
+++ admin/install/check.php	(revision 0)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/install/index.php
===================================================================
--- admin/install/index.php	(revision 270)
+++ admin/install/index.php	(revision 199)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -191,13 +191,5 @@
 		$core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true);
 		$core->auth->user_prefs->dashboard->put('quickentry',true,'boolean','',null,true);
-
-		# Add accessibility options
-		$core->auth->user_prefs->addWorkspace('accessibility');
-		$core->auth->user_prefs->accessibility->put('nodragdrop',false,'boolean','',null,true);
-
-		# Add user interface options
-		$core->auth->user_prefs->addWorkspace('interface');
-		$core->auth->user_prefs->interface->put('enhanceduploader',false,'boolean','',null,true);
-
+		
 		# Add default favorites
 		$core->auth->user_prefs->addWorkspace('favorites');
@@ -321,18 +313,18 @@
 	'<form action="index.php" method="post">'.
 	'<fieldset><legend>'.__('User information').'</legend>'.
-	'<p><label for="u_firstname">'.__('First Name:').' '.
+	'<p><label>'.__('First Name:').' '.
 	form::field('u_firstname',30,255,html::escapeHTML($u_firstname)).'</label></p>'.
-	'<p><label for="u_name">'.__('Last Name:').' '.
+	'<p><label>'.__('Last Name:').' '.
 	form::field('u_name',30,255,html::escapeHTML($u_name)).'</label></p>'.
-	'<p><label for="u_email">'.__('Email:').' '.
+	'<p><label>'.__('Email:').' '.
 	form::field('u_email',30,255,html::escapeHTML($u_email)).'</label></p>'.
 	'</fieldset>'.
 	
 	'<fieldset><legend>'.__('Username and password').'</legend>'.
-	'<p><label for="u_login" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').' '.
+	'<p><label class="required" title="'.__('Required field').'">'.__('Username:').' '.
 	form::field('u_login',30,32,html::escapeHTML($u_login)).'</label></p>'.
-	'<p><label for="u_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Password:').' '.
+	'<p><label class="required" title="'.__('Required field').'">'.__('Password:').' '.
 	form::password('u_pwd',30,255).'</label></p>'.
-	'<p><label for="u_pwd2" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Confirm password:').' '.
+	'<p><label class="required" title="'.__('Required field').'">'.__('Confirm password:').' '.
 	form::password('u_pwd2',30,255).'</label></p>'.
 	'</fieldset>'.
Index: admin/install/wizard.php
===================================================================
--- admin/install/wizard.php	(revision 363)
+++ admin/install/wizard.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -100,5 +100,4 @@
 		$admin_url = preg_replace('%install/wizard.php$%','',$_SERVER['REQUEST_URI']);
 		writeConfigValue('DC_ADMIN_URL',http::getHost().$admin_url,$full_conf);
-		writeConfigValue('DC_ADMIN_MAILFROM','dotclear@'.$_SERVER['HTTP_HOST'],$full_conf);
 		writeConfigValue('DC_MASTER_KEY',md5(uniqid()),$full_conf);
 		
@@ -172,15 +171,15 @@
 
 '<form action="wizard.php" method="post">'.
-'<p><label class="required" for="DBDRIVER"><abbr title="'.__('Required field').'">*</abbr> '.__('Database type:').' '.
+'<p><label class="required" title="'.__('Required field').'">'.__('Database type:').' '.
 form::combo('DBDRIVER',array('MySQL'=>'mysql','PostgreSQL'=>'pgsql'),$DBDRIVER).'</label></p>'.
-'<p><label for="DBHOST">'.__('Database Host Name:').' '.
+'<p><label>'.__('Database Host Name:').' '.
 form::field('DBHOST',30,255,html::escapeHTML($DBHOST)).'</label></p>'.
-'<p><label for="DBNAME">'.__('Database Name:').' '.
+'<p><label>'.__('Database Name:').' '.
 form::field('DBNAME',30,255,html::escapeHTML($DBNAME)).'</label></p>'.
-'<p><label for="DBUSER">'.__('Database User Name:').' '.
+'<p><label>'.__('Database User Name:').' '.
 form::field('DBUSER',30,255,html::escapeHTML($DBUSER)).'</label></p>'.
-'<p><label for="DBPASSWORD">'.__('Database Password:').' '.
+'<p><label>'.__('Database Password:').' '.
 form::password('DBPASSWORD',30,255).'</label></p>'.
-'<p><label for="DBPREFIX" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Database Tables Prefix:').' '.
+'<p><label class="required" title="'.__('Required field').'">'.__('Database Tables Prefix:').' '.
 form::field('DBPREFIX',30,255,html::escapeHTML($DBPREFIX)).'</label></p>'.
 
Index: admin/js/_index.js
===================================================================
--- admin/js/_index.js	(revision 454)
+++ admin/js/_index.js	(revision 3)
@@ -4,12 +4,12 @@
 		var contentTb = new jsToolBar($('#post_content',f)[0]);
 		contentTb.switchMode($('#post_format',f).val());
-
+		
 		$('input[name=save]',f).click(function() {
 			quickPost(f,-2);
 			return false;
 		});
-
+		
 		if ($('input[name=save-publish]',f).length > 0) {
-			var btn = $('<input type="submit" value="' + $('input[name=save-publish]',f).val() + '" />');
+			var btn = $('<input type="submit" value="' + $('input[name=save-publish]',f).val() + '" tabindex="3" />');
 			$('input[name=save-publish]',f).remove();
 			$('input[name=save]',f).after(btn).after(' ');
@@ -19,10 +19,10 @@
 			});
 		}
-
+		
 		function quickPost(f,status) {
 			if (contentTb.getMode() == 'wysiwyg') {
 				contentTb.syncContents('iframe');
 			}
-
+			
 			var params = {
 				f: 'quickPost',
@@ -35,7 +35,7 @@
 				post_lang: $('#post_lang',f).val()
 			}
-
+			
 			$('p.qinfo',f).remove();
-
+			
 			$.post('services.php',params,function(data) {
 				if ($('rsp[status=failed]',data).length > 0) {
@@ -57,13 +57,13 @@
 					}
 				}
-
+				
 				$('fieldset',f).prepend(msg);
 			});
 		}
 	}
-
+	
 	// allow to hide quick entry div, and remember choice
 	$('#quick h3').toggleWithLegend($('#quick').children().not('h3'),{
-		cookie: 'dcx_quick_entry'
-	}, positionFooter);
+		cookie: 'dcx_quick_entry',
+	});
 });
Index: admin/js/_media.js
===================================================================
--- admin/js/_media.js	(revision 250)
+++ admin/js/_media.js	(revision 224)
@@ -17,5 +17,12 @@
 	
 	if (!$.browser.opera) {
-		if (dotclear.candyUpload_force_init == '1') {
+		var cue = $('<a/>').attr({'id':'candyupload-enable','href':'#'}).append(dotclear.msg.activate_enhanced_uploader)
+		.click(function() {
+			candyUploadInit();
+			return false;
+		});
+		$('#media-upload>fieldset').append($('<div></div>').append(cue));
+		
+		if ($.cookie('dc_candy_upl') == 1) {
 			candyUploadInit();
 		}
@@ -36,6 +43,16 @@
 				createControls: function() {
 					var _this = this;
+					var cud = $('<a/>').attr({'id':'candyupload-disable','href':'#'}).append(dotclear.msg.disable_enhanced_uploader)
+					.click(function() {
+						_this.upldr.destroy();
+						_this.ctrl.block.empty().remove();
+						$('#media-upload').show();
+						delete _this;
+						$.cookie('dc_candy_upl','',{expires: -1});
+						return false;
+					});
 					this.ctrl.btn_browse.hide();
 					this.ctrl.msg.html(dotclear.msg.load_enhanced_uploader);
+					this.ctrl.disable = $('<div class="cu-disable"></div>').append(cud).appendTo(this.ctrl.block);
 				},
 				flashReady: function() {
@@ -50,4 +67,5 @@
 						});
 					});
+					this.ctrl.block.append(this.ctrl.disable);
 				},
 				uploadSuccess: function(o,data) {
Index: admin/js/common.js
===================================================================
--- admin/js/common.js	(revision 343)
+++ admin/js/common.js	(revision 163)
@@ -57,5 +57,5 @@
 }
 
-jQuery.fn.toggleWithLegend = function(target,s) {
+jQuery.fn.toggleWithLegend = function(target,s, callback) {
 	var defaults = {
 		img_on_src: dotclear.img_plus_src,
@@ -79,14 +79,14 @@
 	}
 
-	var toggle = function(i,speed) {
+	var toggle = function(i,speed, callback) {
 		speed = speed || 0;
 		if (p.hide) {
 			$(i).get(0).src = p.img_on_src;
 			$(i).get(0).alt = p.img_on_alt;
-			target.hide(speed, positionFooter);
+			target.hide(speed, callback);
 		} else {
 			$(i).get(0).src = p.img_off_src;
 			$(i).get(0).alt = p.img_off_alt;
-			target.show(speed, positionFooter);
+			target.show(speed, callback);
 			if (p.fn) {
 				p.fn.apply(target);
@@ -122,5 +122,5 @@
 		$(ctarget).css('cursor','pointer');
 		$(ctarget).click(function() {
-			toggle(i,p.speed, positionFooter);
+			toggle(i,p.speed, callback);
 			return false;
 		});
@@ -316,29 +316,4 @@
 };
 
-/* Sticky footer
--------------------------------------------------------- */
-function positionFooter() {
-	$("#wrapper").css({ overflow: "auto" });
-	var page_height = $("#top").height() + $("#wrapper").height() - $("#footer").height();
-	if( page_height < $(window).height() ){
-		// calcul de la largeur
-		var page_width = $(document).width() - 30;
-		$("#footer").css({
-			position: "absolute",
-			bottom: "10px",
-			width: page_width+"px",
-			padding: ".75em 0",
-			marginbottom: "0"
-		});
-	} else {
-		$("#footer").css({
-			position: "static",
-			padding: ".75em 0",
-			width: "auto"
-		});
-	}
-
-}
-
 /* On document ready
 -------------------------------------------------------- */
@@ -356,14 +331,18 @@
 	}
 	$('#blog-menu h3:first').toggleWithLegend($('#blog-menu ul:first'),
-		$.extend({cookie:'dc_blog_menu'},menu_settings)
+		$.extend({cookie:'dc_blog_menu'},menu_settings),
+		positionFooter
 	);
 	$('#system-menu h3:first').toggleWithLegend($('#system-menu ul:first'),
-		$.extend({cookie:'dc_system_menu'},menu_settings)
+		$.extend({cookie:'dc_system_menu'},menu_settings),
+		positionFooter
 	);
 	$('#plugins-menu h3:first').toggleWithLegend($('#plugins-menu ul:first'),
-		$.extend({cookie:'dc_plugins_menu'},menu_settings)
+		$.extend({cookie:'dc_plugins_menu'},menu_settings),
+		positionFooter
 	);
 	$('#favorites-menu h3:first').toggleWithLegend($('#favorites-menu ul:first'),
-		$.extend({cookie:'dc_favorites_menu',hide:false,reverse_cookie:true},menu_settings)
+		$.extend({cookie:'dc_favorites_menu',hide:false,reverse_cookie:true},menu_settings),
+		positionFooter
 	);
 
@@ -388,5 +367,28 @@
 	// Sticky footer
 	positionFooter();
+	function positionFooter() {
+		$("#wrapper").css({ overflow: "auto" });
+		var page_height = $("#top").height() + $("#wrapper").height() - $("#footer").height();
+		if( page_height < $(window).height() ){
+			// calcul de la largeur
+			var page_width = $(document).width() - 30;
+			$("#footer").css({
+				position: "absolute",
+				bottom: "10px",
+				width: page_width+"px",
+				padding: ".75em 0",
+				marginbottom: "0"
+			});
+		} else {
+			$("#footer").css({
+				position: "static",
+				padding: ".75em 0",
+				width: "auto",
+			});
+		}
+
+	}
 	$(window).resize(positionFooter);
+
 });
 
Index: admin/js/filters.js
===================================================================
--- admin/js/filters.js	(revision 417)
+++ admin/js/filters.js	(revision 417)
@@ -0,0 +1,5 @@
+$(function() {
+	$('#toggle-filters').click(function(e) {
+		$('#filters').toggleClass('hidden');
+	});
+});
Index: admin/js/jquery/jquery.pageTabs.js
===================================================================
--- admin/js/jquery/jquery.pageTabs.js	(revision 297)
+++ admin/js/jquery/jquery.pageTabs.js	(revision 0)
@@ -9,7 +9,7 @@
 		breakerClassName: 'clear'
 	};
-
+	
 	var index = start_tab ? start_tab : 0;
-
+	
 	this.params = jQuery.extend(defaults,settings);
 	this.divs = jQuery('div.'+this.params.className);
@@ -20,10 +20,10 @@
 jQuery._pageTabs.prototype = {
 	items: new Array(),
-
+	
 	createList: function() {
 		if (this.divs.length <= 0) {
 			return;
 		}
-
+		
 		this.block = document.createElement('div');
 		this.block.className = this.params.listClassName;
@@ -32,5 +32,5 @@
 		this.block.appendChild(this.list);
 		var li, a;
-
+		
 		var This = this;
 		var i=0;
@@ -57,30 +57,30 @@
 			}
 		});
-
+		
 		this.breaker = document.createElement('br');
 		this.breaker.className = this.params.breakerClassName;
-
+		
 		jQuery(this.divs.get(0)).before(this.block);
 		jQuery(this.block).after(this.breaker);
 	},
-
+	
 	showDiv: function(index) {
 		var This = this;
 		var i = 0;
 		var to_trigger = null;
-
+		
 		this.divs.each(function() {
 			if ((this.id != '' && this.id == index) || i == index) {
-				jQuery(this).show(0, positionFooter);
+				jQuery(this).show();
 				This.items[i].className = This.params.listClassName+'-active';
 				to_trigger = i;
 			} else {
-				jQuery(this).hide(0, positionFooter);
+				jQuery(this).hide();
 				This.items[i].className = '';
 			}
-
+			
 			i++;
 		});
-
+		
 		if (to_trigger != null) {
 			jQuery(this.divs[to_trigger]).onetabload();
Index: admin/js/prelude.js
===================================================================
--- admin/js/prelude.js	(revision 447)
+++ 	(revision )
@@ -1,20 +1,0 @@
-// Accessibility links thks to vie-publique.fr
-aFocus = function() {
-	if(document.getElementById("prelude")) {
-		var aElts = document.getElementById("prelude").getElementsByTagName("A");
-		for (var i=0; i<aElts.length; i++) {
-			aElts[i].className="hidden";
-			aElts[i].onfocus=function() {
-				this.className="";
-			}
-		}
-	}
-}
-// events onload
-function addLoadEvent(func) {
-	if (window.addEventListener)
-		window.addEventListener("load", func, false);
-	else if (window.attachEvent)
-		window.attachEvent("onload", func);
-}
-addLoadEvent(aFocus);
Index: admin/langs.php
===================================================================
--- admin/langs.php	(revision 270)
+++ admin/langs.php	(revision 66)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/media.php
===================================================================
--- admin/media.php	(revision 408)
+++ admin/media.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -68,4 +68,5 @@
 	unset($post);
 }
+
 $d = isset($_REQUEST['d']) ? $_REQUEST['d'] : null;
 $dir = null;
@@ -241,16 +242,7 @@
 /* DISPLAY Main page
 -------------------------------------------------------- */
-$core->auth->user_prefs->addWorkspace('interface');
-$user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader;
-
 call_user_func($open_f,__('Media manager'),
-	'<script type="text/javascript">'."\n".
-	"//<![CDATA["."\n".
-	dcPage::jsVar('dotclear.candyUpload_force_init',$user_ui_enhanceduploader)."\n".
-	"//]]>".
-	"</script>".
 	dcPage::jsLoad('js/_media.js').
-	(($user_ui_enhanceduploader && $core_media_writable) ? dcPage::jsCandyUpload(array('d='.$d)) : '')
-	);
+	($core_media_writable ? dcPage::jsCandyUpload(array('d='.$d)) : ''));
 
 if (!empty($_GET['mkdok'])) {
@@ -336,5 +328,5 @@
 	echo
 	'<div class="col"><h3 id="add-file">'.__('Add files').'</h3>'.
-	'<p>'.__('Please take care to publish media that you own and that are not protected by copyright.').'</p>'.
+	'<p class="form-note info">'.__('Please take care to publish media that you own and that are not protected by copyright.').'</p>'.
 	'<form id="media-upload" class="clear" action="'.html::escapeURL($page_url).'" method="post" enctype="multipart/form-data">'.
 	'<div>'.form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE).
@@ -345,9 +337,7 @@
 	'<input type="file" id="upfile" name="upfile" size="20" />'.
 	'</label></p>'.
-	'<p><label for="upfiletitle">'.__('Title:').form::field(array('upfiletitle','upfiletitle'),35,255).'</label></p>'.
-	'<p><label for="upfilepriv" class="classic">'.form::checkbox(array('upfilepriv','upfilepriv'),1).' '.
+	'<p><label for="upfiletitle">'.__('Title:').form::field(array('upfiletitle'),35,255).'</label></p>'.
+	'<p><label for="upfilepriv" class="classic">'.form::checkbox(array('upfilepriv'),1).' '.
 	__('Private').'</label></p>'.
-	'<p class="form-help info">'.__('To send several files at the same time, you can activate the enhanced uploader in').
-	'<a href="preferences.php?tab=user-options"> '.__('My preferences').'</a></p>'.
 	'<p><input type="submit" value="'.__('send').'" />'.
 	form::hidden(array('d'),$d).'</p>'.
@@ -362,5 +352,5 @@
 	$core->formNonce().
 	'<p><label for="newdir">'.__('Directory Name:').
-	form::field(array('newdir','newdir'),35,255).'</label></p>'.
+	form::field(array('newdir'),35,255).'</label></p>'.
 	'<p><input type="submit" value="'.__('Save').'" />'.
 	form::hidden(array('d'),html::escapeHTML($d)).'</p>'.
Index: admin/media_item.php
===================================================================
--- admin/media_item.php	(revision 375)
+++ admin/media_item.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -394,9 +394,5 @@
 	if ($file->media_image)
 	{ # We look for thumbnails too
-		if (preg_match('#^http(s)?://#',$this->core->blog->settings->system->public_url)) {
-			$media_root = $core->blog->settings->system->public_url;
-		} else {
-			$media_root = $core->blog->host.path::clean($core->blog->settings->system->public_url).'/';
-		}
+		$media_root = $core->blog->host.path::clean($core->blog->settings->system->public_url).'/';
 		foreach ($file->media_thumb as $v) {
 			$v = preg_replace('/^'.preg_quote($media_root,'/').'/','',$v);
Index: admin/permissions.php
===================================================================
--- admin/permissions.php	(revision 454)
+++ admin/permissions.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -145,5 +145,5 @@
 	'<fieldset>'.
 	'<p><label for="your_pwd">'.__('Your password:').
-	form::password('your_pwd',20,255).'</label></p>'.
+	form::password('your_pwd',20,255,'','',15).'</label></p>'.
 	'</fieldset>'.
 	'<p><input type="submit" accesskey="s" value="'.__('Save').'" />'.
Index: admin/permissions_blog.php
===================================================================
--- admin/permissions_blog.php	(revision 270)
+++ admin/permissions_blog.php	(revision 68)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/plugin.php
===================================================================
--- admin/plugin.php	(revision 270)
+++ admin/plugin.php	(revision 0)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/plugins.php
===================================================================
--- admin/plugins.php	(revision 270)
+++ admin/plugins.php	(revision 211)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/popup_link.php
===================================================================
--- admin/popup_link.php	(revision 270)
+++ admin/popup_link.php	(revision 68)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/popup_posts.php
===================================================================
--- admin/popup_posts.php	(revision 270)
+++ admin/popup_posts.php	(revision 68)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/post.php
===================================================================
--- admin/post.php	(revision 458)
+++ admin/post.php	(revision 219)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -33,4 +33,6 @@
 $post_open_tb = $core->blog->settings->system->allow_trackbacks;
 
+$post_media = array();
+
 $page_title = __('New entry');
 
@@ -144,4 +146,5 @@
 		try {
 			$core->media = new dcMedia($core);
+			$post_media = $core->media->getPostMedia($post_id);
 		} catch (Exception $e) {}
 	}
@@ -360,23 +363,109 @@
 	echo '<div class="multi-part" title="'.__('Edit entry').'" id="edit-entry">';
 	echo '<form action="post.php" method="post" id="entry-form">';
-	echo '<div id="entry-wrapper">';
+	echo '<div id="entry-sidebar">';
+	
+	echo
+	'<p><label for="cat_id">'.__('Category:').
+	form::combo('cat_id',$categories_combo,$cat_id,'maximal',3).
+	'</label></p>'.
+	
+	'<p><label for="post_status">'.__('Entry status:').
+	form::combo('post_status',$status_combo,$post_status,'',3,!$can_publish).
+	'</label></p>'.
+	
+	'<p><label for="post_dt">'.__('Published on:').
+	form::field('post_dt',16,16,$post_dt,'',3).
+	'</label></p>'.
+	
+	'<p><label for="post_format">'.__('Text formating:').
+	form::combo('post_format',$formaters_combo,$post_format,'',3).
+	'</label>'.
+	'</p>'.
+	'<p>'.($post_id && $post_format != 'xhtml' ? '<a id="convert-xhtml" class="button" href="post.php?id='.$post_id.'&amp;xconv=1">'.__('Convert to XHTML').'</a>' : '').'</p>'.
+	
+	'<p><label for="post_open_comment" class="classic">'.form::checkbox('post_open_comment',1,$post_open_comment,'',3).' '.
+	__('Accept comments').'</label></p>'.
+	'<p><label for="post_open_tb" class="classic">'.form::checkbox('post_open_tb',1,$post_open_tb,'',3).' '.
+	__('Accept trackbacks').'</label></p>'.
+	'<p><label for="post_selected" class="classic">'.form::checkbox('post_selected',1,$post_selected,'',3).' '.
+	__('Selected entry').'</label></p>'.
+	
+	'<p><label for="post_lang">'.__('Entry lang:').
+	form::combo('post_lang',$lang_combo,$post_lang,'',5).
+	'</label></p>'.
+	
+	'<p><label for="post_password">'.__('Entry password:').
+	form::field('post_password',10,32,html::escapeHTML($post_password),'maximal',3).
+	'</label></p>'.
+	
+	'<div class="lockable">'.
+	'<p><label for="post_url">'.__('Basename:').
+	form::field('post_url',10,255,html::escapeHTML($post_url),'maximal',3).
+	'</label></p>'.
+	'<p class="form-note warn">'.
+	__('Warning: If you set the URL manually, it may conflict with another entry.').
+	'</p>'.
+	'</div>';
+	
+	if ($post_id)
+	{
+		echo
+		'<h3 class="clear">'.__('Attachments').'</h3>';
+		foreach ($post_media as $f)
+		{
+			$ftitle = $f->media_title;
+			if (strlen($ftitle) > 18) {
+				$ftitle = substr($ftitle,0,16).'...';
+			}
+			echo
+			'<div class="media-item">'.
+			'<a class="media-icon" href="media_item.php?id='.$f->media_id.'">'.
+			'<img src="'.$f->media_icon.'" alt="" title="'.$f->basename.'" /></a>'.
+			'<ul>'.
+			'<li><a class="media-link" href="media_item.php?id='.$f->media_id.'"'.
+			'title="'.$f->basename.'">'.$ftitle.'</a></li>'.
+			'<li>'.$f->media_dtstr.'</li>'.
+			'<li>'.files::size($f->size).' - '.
+			'<a href="'.$f->file_url.'">'.__('open').'</a>'.'</li>'.
+			
+			'<li class="media-action"><a class="attachment-remove" id="attachment-'.$f->media_id.'" '.
+			'href="post_media.php?post_id='.$post_id.'&amp;media_id='.$f->media_id.'&amp;remove=1">'.
+			'<img src="images/check-off.png" alt="'.__('remove').'" /></a>'.
+			'</li>'.
+			
+			'</ul>'.
+			'</div>';
+		}
+		unset($f);
+		
+		if (empty($post_media)) {
+			echo '<p>'.__('No attachment.').'</p>';
+		}
+		echo '<p><a class="button" href="media.php?post_id='.$post_id.'">'.__('Add files to this entry').'</a></p>';
+	}
+	
+	# --BEHAVIOR-- adminPostFormSidebar
+	$core->callBehavior('adminPostFormSidebar',isset($post) ? $post : null);
+	
+	echo '</div>';		// End #entry-sidebar
+	
 	echo '<div id="entry-content"><fieldset class="constrained">';
 	
 	echo
 	'<p class="col"><label class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').
-	form::field('post_title',20,255,html::escapeHTML($post_title),'maximal').
+	form::field('post_title',20,255,html::escapeHTML($post_title),'maximal',2).
 	'</label></p>'.
 	
 	'<p class="area" id="excerpt-area"><label for="post_excerpt">'.__('Excerpt:').'</label> '.
-	form::textarea('post_excerpt',50,5,html::escapeHTML($post_excerpt)).
+	form::textarea('post_excerpt',50,5,html::escapeHTML($post_excerpt),'',2).
 	'</p>'.
 	
 	'<p class="area"><label class="required" '.
 	'for="post_content"><abbr title="'.__('Required field').'">*</abbr> '.__('Content:').'</label> '.
-	form::textarea('post_content',50,$core->auth->getOption('edit_size'),html::escapeHTML($post_content)).
+	form::textarea('post_content',50,$core->auth->getOption('edit_size'),html::escapeHTML($post_content),'',2).
 	'</p>'.
 	
 	'<p class="area" id="notes-area"><label for="post_notes">'.__('Notes:').'</label>'.
-	form::textarea('post_notes',50,5,html::escapeHTML($post_notes)).
+	form::textarea('post_notes',50,5,html::escapeHTML($post_notes),'',2).
 	'</p>';
 	
@@ -387,5 +476,5 @@
 	'<p>'.
 	($post_id ? form::hidden('id',$post_id) : '').
-	'<input type="submit" value="'.__('Save').' (s)" '.
+	'<input type="submit" value="'.__('Save').' (s)" tabindex="4" '.
 	'accesskey="s" name="save" /> '.
 	($can_delete ? '<input type="submit" class="delete" value="'.__('Delete').'" name="delete" />' : '').
@@ -394,61 +483,5 @@
 	
 	echo '</fieldset></div>';		// End #entry-content
-	echo '</div>';		// End #entry-wrapper
-
-	echo '<div id="entry-sidebar">';
-	
-	echo
-	'<p><label for="cat_id">'.__('Category:').
-	form::combo('cat_id',$categories_combo,$cat_id,'maximal').
-	'</label></p>'.
-	
-	'<p><label for="post_status">'.__('Entry status:').
-	form::combo('post_status',$status_combo,$post_status,'','',!$can_publish).
-	'</label></p>'.
-	
-	'<p><label for="post_dt">'.__('Published on:').
-	form::field('post_dt',16,16,$post_dt).
-	'</label></p>'.
-	
-	'<p><label for="post_format">'.__('Text formating:').
-	form::combo('post_format',$formaters_combo,$post_format).
-	'</label>'.
-	'</p>'.
-	'<p>'.($post_id && $post_format != 'xhtml' ? '<a id="convert-xhtml" class="button" href="post.php?id='.$post_id.'&amp;xconv=1">'.__('Convert to XHTML').'</a>' : '').'</p>'.
-	
-	'<p><label for="post_open_comment" class="classic">'.form::checkbox('post_open_comment',1,$post_open_comment).' '.
-	__('Accept comments').'</label></p>'.
-	'<p><label for="post_open_tb" class="classic">'.form::checkbox('post_open_tb',1,$post_open_tb).' '.
-	__('Accept trackbacks').'</label></p>'.
-	'<p><label for="post_selected" class="classic">'.form::checkbox('post_selected',1,$post_selected).' '.
-	__('Selected entry').'</label></p>'.
-	
-	'<p><label for="post_lang">'.__('Entry lang:').
-	form::combo('post_lang',$lang_combo,$post_lang).
-	'</label></p>'.
-	
-	'<p><label for="post_password">'.__('Entry password:').
-	form::field('post_password',10,32,html::escapeHTML($post_password),'maximal').
-	'</label></p>'.
-	
-	'<div class="lockable">'.
-	'<p><label for="post_url">'.__('Basename:').
-	form::field('post_url',10,255,html::escapeHTML($post_url),'maximal').
-	'</label></p>'.
-	'<p class="form-note warn">'.
-	__('Warning: If you set the URL manually, it may conflict with another entry.').
-	'</p>'.
-	'</div>';
-	
-	# --BEHAVIOR-- adminPostFormSidebar
-	$core->callBehavior('adminPostFormSidebar',isset($post) ? $post : null);
-	
-	echo '</div>';		// End #entry-sidebar
-
 	echo '</form>';
-	
-	# --BEHAVIOR-- adminPostForm
-	$core->callBehavior('adminPostAfterForm',isset($post) ? $post : null);
-	
 	echo '</div>';
 	
@@ -458,4 +491,13 @@
 	}
 	
+	if ($post_id && !empty($post_media))
+	{
+		echo
+		'<form action="post_media.php" id="attachment-remove-hide" method="post">'.
+		'<div>'.form::hidden(array('post_id'),$post_id).
+		form::hidden(array('media_id'),'').
+		form::hidden(array('remove'),1).
+		$core->formNonce().'</div></form>';
+	}
 }
 
@@ -484,7 +526,4 @@
 		$combo_action[__('delete')] = 'delete';
 	}
-	
-	# --BEHAVIOR-- adminCommentsActionsCombo
-	$core->callBehavior('adminCommentsActionsCombo',array(&$combo_action));
 	
 	$has_action = !empty($combo_action) && (!$trackbacks->isEmpty() || !$comments->isEmpty());
Index: admin/post_media.php
===================================================================
--- admin/post_media.php	(revision 270)
+++ admin/post_media.php	(revision 70)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/posts.php
===================================================================
--- admin/posts.php	(revision 270)
+++ admin/posts.php	(revision 460)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -48,5 +48,4 @@
 	# Filter form we'll put in html_block
 	$users_combo = $categories_combo = array();
-	$users_combo['-'] = $categories_combo['-'] = '';
 	while ($users->fetch())
 	{
@@ -63,5 +62,5 @@
 	$categories_combo[__('None')] = 'NULL';
 	while ($categories->fetch()) {
-		$categories_combo[str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').
+		$categories_combo[str_repeat('&nbsp;&nbsp;',$categories->level-1).'&bull; '.
 			html::escapeHTML($categories->cat_title).
 			' ('.$categories->nb_post.')'] = $categories->cat_id;
@@ -69,5 +68,4 @@
 	
 	$status_combo = array(
-	'-' => ''
 	);
 	foreach ($core->blog->getAllPostStatus() as $k => $v) {
@@ -76,16 +74,13 @@
 	
 	$selected_combo = array(
-	'-' => '',
-	__('selected') => '1',
-	__('not selected') => '0'
+	__('is selected') => '1',
+	__('is not selected') => '0'
 	);
 	
 	# Months array
-	$dt_m_combo['-'] = '';
 	while ($dates->fetch()) {
 		$dt_m_combo[dt::str('%B %Y',$dates->ts())] = $dates->year().$dates->month();
 	}
 	
-	$lang_combo['-'] = '';
 	while ($langs->fetch()) {
 		$lang_combo[$langs->post_lang] = $langs->post_lang;
@@ -138,15 +133,4 @@
 /* Get posts
 -------------------------------------------------------- */
-$user_id = !empty($_GET['user_id']) ?	$_GET['user_id'] : '';
-$cat_id = !empty($_GET['cat_id']) ?	$_GET['cat_id'] : '';
-$status = isset($_GET['status']) ?	$_GET['status'] : '';
-$selected = isset($_GET['selected']) ?	$_GET['selected'] : '';
-$month = !empty($_GET['month']) ?		$_GET['month'] : '';
-$lang = !empty($_GET['lang']) ?		$_GET['lang'] : '';
-$sortby = !empty($_GET['sortby']) ?	$_GET['sortby'] : 'post_dt';
-$order = !empty($_GET['order']) ?		$_GET['order'] : 'desc';
-
-$show_filters = false;
-
 $page = !empty($_GET['page']) ? (integer) $_GET['page'] : 1;
 $nb_per_page =  30;
@@ -159,70 +143,59 @@
 }
 
+$params = new ArrayObject();
 $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page);
 $params['no_content'] = true;
 
-# - User filter
-if ($user_id !== '' && in_array($user_id,$users_combo)) {
-	$params['user_id'] = $user_id;
-	$show_filters = true;
-}
-
-# - Categories filter
-if ($cat_id !== '' && in_array($cat_id,$categories_combo)) {
-	$params['cat_id'] = $cat_id;
-	$show_filters = true;
-}
-
-# - Status filter
-if ($status !== '' && in_array($status,$status_combo)) {
-	$params['post_status'] = $status;
-	$show_filters = true;
-}
-
-# - Selected filter
-if ($selected !== '' && in_array($selected,$selected_combo)) {
-	$params['post_selected'] = $selected;
-	$show_filters = true;
-}
-
-# - Month filter
-if ($month !== '' && in_array($month,$dt_m_combo)) {
-	$params['post_month'] = substr($month,4,2);
-	$params['post_year'] = substr($month,0,4);
-	$show_filters = true;
-}
-
-# - Lang filter
-if ($lang !== '' && in_array($lang,$lang_combo)) {
-	$params['post_lang'] = $lang;
-	$show_filters = true;
-}
-
-# - Sortby and order filter
-if ($sortby !== '' && in_array($sortby,$sortby_combo)) {
-	if ($order !== '' && in_array($order,$order_combo)) {
-		$params['order'] = $sortby.' '.$order;
-	}
-	
-	if ($sortby != 'post_dt' || $order != 'desc') {
-		$show_filters = true;
-	}
-}
+$filterSet = new dcFilterSet('posts','posts.php');
+class monthComboFilter extends comboFilter {
+	public function applyFilter($params) {
+		$month=$this->values[0];
+		$params['post_month'] = substr($month,4,2);
+		$params['post_year'] = substr($month,0,4);
+	}
+}
+$filterSet
+	->addFilter(new comboFilter(
+		'users',__('Author'), 'user_id', $users_combo))
+	->addFilter(new comboFilter(
+		'category',__('Category'), 'cat_id', $categories_combo))
+	->addFilter(new comboFilter(
+		'post_status',__('Status'), 'post_status', $status_combo,array('singleval' => 1)))
+	->addFilter(new booleanFilter(
+		'post_selected',__('The post :'), 'post_selected', $selected_combo))
+	->addFilter(new comboFilter(
+		'lang',__('Lang'), 'post_lang', $lang_combo))
+	->addFilter(new monthComboFilter(
+		'month',__('Month'), 'post_month', $dt_m_combo,array('singleval' => 1)));
+
+$core->callBehavior('adminPostsFilters',$filterSet);
+
+$filterSet->setValues($_GET);
 
 # Get posts
 try {
+	$nfparams = $params->getArrayCopy();
+	$filtered = $filterSet->applyFilters($params);
+	$core->callBehavior('adminPostsParams',$params);
 	$posts = $core->blog->getPosts($params);
 	$counter = $core->blog->getPosts($params,true);
+	if ($filtered) {
+		$totalcounter = $core->blog->getPosts($nfparams,true);
+		$page_title = sprintf(__('Entries / %s filtered out of %s'),$counter->f(0),$totalcounter->f(0));
+	} else {
+		$page_title = __('Entries');
+	}
 	$post_list = new adminPostList($core,$posts,$counter->f(0));
 } catch (Exception $e) {
 	$core->error->add($e->getMessage());
 }
+
+$filterSet->setColumnsForm($post_list->getColumnsForm());
 
 /* DISPLAY
 -------------------------------------------------------- */
 $starting_script = dcPage::jsLoad('js/_posts_list.js');
-if (!$show_filters) {
-	$starting_script .= dcPage::jsLoad('js/filter-controls.js');
-}
+
+$starting_script .= $filterSet->header();
 
 dcPage::open(__('Entries'),$starting_script);
@@ -231,48 +204,9 @@
 {
 	echo 
-	'<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; '.__('Entries').'</h2>'.
+	'<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; '.$page_title.'</h2>'.
 	'<p class="top-add"><a class="button add" href="post.php">'.__('New entry').'</a></p>';
-	
-	if (!$show_filters) {
-		echo '<p><a id="filter-control" class="form-control" href="#">'.
-		__('Filters').'</a></p>';
-	}
-	
-	echo
-	'<form action="posts.php" method="get" id="filters-form">'.
-	'<fieldset><legend>'.__('Filters').'</legend>'.
-	'<div class="three-cols">'.
-	'<div class="col">'.
-	'<label for="user_id">'.__('Author:').
-	form::combo('user_id',$users_combo,$user_id).'</label> '.
-	'<label for="cat_id">'.__('Category:').
-	form::combo('cat_id',$categories_combo,$cat_id).'</label> '.
-	'<label for="status">'.__('Status:').
-	form::combo('status',$status_combo,$status).'</label> '.
-	'</div>'.
-	
-	'<div class="col">'.
-	'<label for="selected">'.__('Selected:').
-	form::combo('selected',$selected_combo,$selected).'</label> '.
-	'<label for="month">'.__('Month:').
-	form::combo('month',$dt_m_combo,$month).'</label> '.
-	'<label for="lang">'.__('Lang:').
-	form::combo('lang',$lang_combo,$lang).'</label> '.
-	'</div>'.
-	
-	'<div class="col">'.
-	'<p><label for="sortby">'.__('Order by:').
-	form::combo('sortby',$sortby_combo,$sortby).'</label> '.
-	'<label for="order">'.__('Sort:').
-	form::combo('order',$order_combo,$order).'</label></p>'.
-	'<p><label for="nb" class="classic">'.	form::field('nb',3,3,$nb_per_page).' '.
-	__('Entries per page').'</label></p> '.
-	'<p><input type="submit" value="'.__('Apply filters').'" /></p>'.
-	'</div>'.
-	'</div>'.
-	'<br class="clear" />'. //Opera sucks
-	'</fieldset>'.
-	'</form>';
-	
+
+	$filterSet->display();
+
 	# Show posts
 	$post_list->display($page,$nb_per_page,
@@ -284,17 +218,8 @@
 	'<p class="col checkboxes-helpers"></p>'.
 	
-	'<p class="col right"><label for="action" class="classic">'.__('Selected entries action:').'</label> '.
+	'<p class="col right"><span class="filter-title">'.__('Selected entries action:').'</span> '.
 	form::combo('action',$combo_action).
 	'<input type="submit" value="'.__('ok').'" /></p>'.
-	form::hidden(array('user_id'),$user_id).
-	form::hidden(array('cat_id'),$cat_id).
-	form::hidden(array('status'),$status).
-	form::hidden(array('selected'),$selected).
-	form::hidden(array('month'),$month).
-	form::hidden(array('lang'),$lang).
-	form::hidden(array('sortby'),$sortby).
-	form::hidden(array('order'),$order).
-	form::hidden(array('page'),$page).
-	form::hidden(array('nb'),$nb_per_page).
+	$filterSet->getFormFieldsAsHidden().
 	$core->formNonce().
 	'</div>'.
Index: admin/posts_actions.php
===================================================================
--- admin/posts_actions.php	(revision 270)
+++ admin/posts_actions.php	(revision 217)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -216,6 +216,5 @@
 		while ($categories->fetch()) {
 			$categories_combo[] = new formSelectOption(
-				str_repeat('&nbsp;&nbsp;',$categories->level-1).
-				($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
+				str_repeat('&nbsp;&nbsp;',$categories->level-1).'&bull; '.html::escapeHTML($categories->cat_title),
 				$categories->cat_id
 			);
Index: admin/preferences.php
===================================================================
--- admin/preferences.php	(revision 454)
+++ admin/preferences.php	(revision 190)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -34,13 +34,7 @@
 
 $core->auth->user_prefs->addWorkspace('accessibility');
-$user_acc_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop;
-
-$core->auth->user_prefs->addWorkspace('interface');
-$user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader;
-if ($core->auth->isSuperAdmin()) {
-	$user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon;
-}
-
-$default_tab = !empty($_GET['tab']) ? html::escapeHTML($_GET['tab']) : 'user-profile';
+$user_dm_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop;
+
+$default_tab = 'user-profile';
 
 if (!empty($_GET['append']) || !empty($_GET['removed']) || !empty($_GET['neworder']) || !empty($_GET['replaced'])) {
@@ -48,7 +42,4 @@
 } elseif (!empty($_GET['updated'])) {
 	$default_tab = 'user-options';
-}
-if (($default_tab != 'user-profile') && ($default_tab != 'user-options') && ($default_tab != 'user-favorites')) {
-	$default_tab = 'user-profile';
 }
 
@@ -153,10 +144,5 @@
 		$core->auth->user_prefs->dashboard->put('dcnews',!empty($_POST['user_dm_dcnews']),'boolean');
 		$core->auth->user_prefs->dashboard->put('quickentry',!empty($_POST['user_dm_quickentry']),'boolean');
-		$core->auth->user_prefs->accessibility->put('nodragdrop',!empty($_POST['user_acc_nodragdrop']),'boolean');
-		$core->auth->user_prefs->interface->put('enhanceduploader',!empty($_POST['user_ui_enhanceduploader']),'boolean');
-		if ($core->auth->isSuperAdmin()) {
-			# Applied to all users
-			$core->auth->user_prefs->interface->put('hide_std_favicon',!empty($_POST['user_ui_hide_std_favicon']),'boolean',null,true,true);
-		}
+		$core->auth->user_prefs->accessibility->put('nodragdrop',!empty($_POST['user_dm_nodragdrop']),'boolean');
 		
 		# Udate user
@@ -306,5 +292,5 @@
 dcPage::open($page_title,
 	dcPage::jsLoad('js/_preferences.js').
-	($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')).
+	($user_dm_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')).
 	dcPage::jsLoad('js/jquery/jquery-ui-1.8.12.custom.min.js').
 	dcPage::jsPageTabs($default_tab).
@@ -345,17 +331,17 @@
 '<div class="col">'.
 '<p><label for="user_name">'.__('Last Name:').
-form::field('user_name',20,255,html::escapeHTML($user_name)).'</label></p>'.
+form::field('user_name',20,255,html::escapeHTML($user_name),'',2).'</label></p>'.
 
 '<p><label for="user_firstname">'.__('First Name:').
-form::field('user_firstname',20,255,html::escapeHTML($user_firstname)).'</label></p>'.
+form::field('user_firstname',20,255,html::escapeHTML($user_firstname),'',3).'</label></p>'.
 
 '<p><label for="user_displayname">'.__('Display name:').
-form::field('user_displayname',20,255,html::escapeHTML($user_displayname)).'</label></p>'.
+form::field('user_displayname',20,255,html::escapeHTML($user_displayname),'',4).'</label></p>'.
 
 '<p><label for="user_email">'.__('Email:').
-form::field('user_email',20,255,html::escapeHTML($user_email)).'</label></p>'.
+form::field('user_email',20,255,html::escapeHTML($user_email),'',5).'</label></p>'.
 
 '<p><label for="user_url">'.__('URL:').
-form::field('user_url',30,255,html::escapeHTML($user_url)).'</label></p>'.
+form::field('user_url',30,255,html::escapeHTML($user_url),'',6).'</label></p>'.
 
 '</div>'.
@@ -364,8 +350,8 @@
 
 '<p><label for="user_lang">'.__('User language:').
-form::combo('user_lang',$lang_combo,$user_lang,'l10n').'</label></p>'.
+form::combo('user_lang',$lang_combo,$user_lang,'l10n',10).'</label></p>'.
 
 '<p><label for="user_tz">'.__('User timezone:').
-form::combo('user_tz',dt::getZones(true,true),$user_tz).'</label></p>'.
+form::combo('user_tz',dt::getZones(true,true),$user_tz,'',11).'</label></p>'.
 
 '</div>'.
@@ -381,8 +367,8 @@
 	
 	'<p><label for="new_pwd">'.__('New password:').
-	form::password('new_pwd',20,255).'</label></p>'.
+	form::password('new_pwd',20,255,'','',30).'</label></p>'.
 	
 	'<p><label for="new_pwd_c">'.__('Confirm password:').
-	form::password('new_pwd_c',20,255).'</label></p>'.
+	form::password('new_pwd_c',20,255,'','',31).'</label></p>'.
 	'</fieldset>'.
 	
@@ -390,5 +376,5 @@
 	'<p>'.__('If you want to change your email or password you must provide your current password.').'</p>'.
 	'<p><label for="cur_pwd">'.__('Your password:').
-	form::password('cur_pwd',20,255).'</label></p>'.
+	form::password('cur_pwd',20,255,'','',32).'</label></p>'.
 	'</fieldset>';
 }
@@ -397,5 +383,5 @@
 '<p class="clear">'.
 $core->formNonce().
-'<input type="submit" accesskey="s" value="'.__('Save').'" /></p>'.
+'<input type="submit" accesskey="s" value="'.__('Save').'" tabindex="33" /></p>'.
 '</form>';
 
@@ -410,29 +396,15 @@
 
 '<p><label for="user_post_format">'.__('Preferred format:').
-form::combo('user_post_format',$formaters_combo,$user_options['post_format']).'</label></p>'.
+form::combo('user_post_format',$formaters_combo,$user_options['post_format'],'',7).'</label></p>'.
 
 '<p><label for="user_post_status">'.__('Default entry status:').
-form::combo('user_post_status',$status_combo,$user_post_status).'</label></p>'.
+form::combo('user_post_status',$status_combo,$user_post_status,'',8).'</label></p>'.
 
 '<p><label for="user_edit_size">'.__('Entry edit field height:').
-form::field('user_edit_size',5,4,(integer) $user_options['edit_size']).'</label></p>'.
+form::field('user_edit_size',5,4,(integer) $user_options['edit_size'],'',9).'</label></p>'.
 
 '<p><label for="user_wysiwyg" class="classic">'.
-form::checkbox('user_wysiwyg',1,$user_options['enable_wysiwyg']).' '.
+form::checkbox('user_wysiwyg',1,$user_options['enable_wysiwyg'],'',12).' '.
 __('Enable WYSIWYG mode').'</label></p>'.
-
-'<p><label for="user_ui_enhanceduploader" class="classic">'.
-form::checkbox('user_ui_enhanceduploader',1,$user_ui_enhanceduploader).' '.
-__('Activate enhanced uploader in media manager').'</label></p>';
-
-if ($core->auth->isSuperAdmin()) {
-	echo
-	'<p><label for="user_ui_hide_std_favicon" class="classic">'.
-	form::checkbox('user_ui_hide_std_favicon',1,$user_ui_hide_std_favicon).' '.
-	__('Do not use standard favicon').'</label></p>'.
-	'<p class="clear form-note info">'.__('This will be applied for all users').'</p>';
-}
-
-echo 
 '<br class="clear" />'. //Opera sucks
 '</fieldset>';
@@ -441,6 +413,6 @@
 '<fieldset><legend>'.__('Accessibility options').'</legend>'.
 
-'<p><label for="user_acc_nodragdrop" class="classic">'.
-form::checkbox('user_acc_nodragdrop',1,$user_acc_nodragdrop).' '.
+'<p><label for="user_dm_nodragdrop" class="classic">'.
+form::checkbox('user_dm_nodragdrop',1,$user_dm_nodragdrop,'',13).' '.
 __('Disable javascript powered drag and drop for ordering items').'</label></p>'.
 
@@ -452,13 +424,13 @@
 
 '<p><label for="user_dm_doclinks" class="classic">'.
-form::checkbox('user_dm_doclinks',1,$user_dm_doclinks).' '.
+form::checkbox('user_dm_doclinks',1,$user_dm_doclinks,'',14).' '.
 __('Display documentation links').'</label></p>'.
 
 '<p><label for="user_dm_dcnews" class="classic">'.
-form::checkbox('user_dm_dcnews',1,$user_dm_dcnews).' '.
+form::checkbox('user_dm_dcnews',1,$user_dm_dcnews,'',15).' '.
 __('Display Dotclear news').'</label></p>'.
 
 '<p><label for="user_dm_quickentry" class="classic">'.
-form::checkbox('user_dm_quickentry',1,$user_dm_quickentry).' '.
+form::checkbox('user_dm_quickentry',1,$user_dm_quickentry,'',16).' '.
 __('Display quick entry form').'</label></p>'.
 
@@ -472,5 +444,5 @@
 '<p class="clear">'.
 $core->formNonce().
-'<input type="submit" accesskey="s" value="'.__('Save').'" /></p>'.
+'<input type="submit" accesskey="s" value="'.__('Save').'" tabindex="33" /></p>'.
 '</form>';
 
@@ -497,5 +469,5 @@
 				form::field(array('order['.$k.']'),2,3,$count,'position','',false,'title="'.sprintf(__('position of %s'),$fav['title']).'"').
 				form::hidden(array('dynorder[]','dynorder-'.$k.''),$k).
-				'<label for="fuk-'.$k.'">'.form::checkbox(array('remove[]','fuk-'.$k),$k).__($fav['title']).'</label>'.
+				'<label for="fuk-'.$k.'">'.form::checkbox(array('remove[]','fuk-'.$k),$k).$fav['title'].'</label>'.
 				'</li>';
 		}
@@ -540,5 +512,5 @@
 			$count++;
 			echo '<li id="fd-'.$k.'">'.
-			'<img src="'.$fav['small-icon'].'" alt="" /> '.__($fav['title']).'</li>';
+			'<img src="'.$fav['small-icon'].'" alt="" /> '.$fav['title'].'</li>';
 		}
 	}
@@ -553,8 +525,8 @@
 $array = $_fav;
 function cmp($a,$b) {
-    if (__($a[1]) == __($b[1])) {
+    if ($a[1] == $b[1]) {
         return 0;
     }
-    return (__($a[1]) < __($b[1])) ? -1 : 1;
+    return ($a[1] < $b[1]) ? -1 : 1;
 }
 $array=$array->getArrayCopy();
@@ -566,6 +538,6 @@
 		echo '<li id="fa-'.$fav[0].'">'.'<label for="fak-'.$fav[0].'">'.
 			form::checkbox(array('append[]','fak-'.$fav[0]),$k).
-			'<img src="'.$fav[3].'" alt="" /> '.'<span class="zoom"><img src="'.$fav[4].'" alt="" /></span>'.
-			__($fav[1]).'</label>'.'</li>';
+			'<img src="'.$fav[3].'" alt="" /> '.'<span class="zoom"><img src="'.$fav[4].'" alt="" /></span>'.$fav[1].
+			'</label>'.'</li>';
 	}
 }	
Index: admin/search.php
===================================================================
--- admin/search.php	(revision 270)
+++ admin/search.php	(revision 125)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/services.php
===================================================================
--- admin/services.php	(revision 323)
+++ admin/services.php	(revision 0)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -133,5 +133,6 @@
 			$rsp->comment_ip($rs->comment_ip);
 			$rsp->comment_email($rs->comment_email);
-			$rsp->comment_spam_disp(dcAntispam::statusMessage($rs));
+			# --BEHAVIOR-- adminAfterCommentDesc
+			$rsp->comment_spam_disp($core->callBehavior('adminAfterCommentDesc', $rs));
 		}
 		
Index: admin/style/default.css
===================================================================
--- admin/style/default.css	(revision 458)
+++ admin/style/default.css	(revision 438)
@@ -80,18 +80,4 @@
 /* LAYOUT
 -------------------------------------------------------- */
-#prelude {
-	background: #575859;
-	line-height: 1.8em;
-	margin: 0;
-	overflow: hidden;
-	}
-#prelude li {
-	list-style-type: none;
-	margin: 0 1em 0 0;
-	background:transparent;
-	}
-#prelude li a {
-	color:#fff;
-	}
 
 #top {
@@ -366,15 +352,10 @@
 
 /* POST */
-#entry-wrapper {
-	float: left;
-	width: 100%;
-	margin-right: -18em;
-}
-#entry-content {
-	margin-right: 18em;
-}
 #entry-sidebar {
 	width: 17em;
 	float: right;
+}
+#entry-content {
+	margin-right: 18em;
 }
 #comments {
@@ -963,4 +944,8 @@
 	margin: 0 0 1em 0;
 }
+table caption {
+	position: absolute;
+	left: -9999px;
+}
 tr.line:hover {
 	background: #ddd;
@@ -973,7 +958,12 @@
 	vertical-align: top;
 }
-th {
+thead th {
 	text-align: left;
 	border-bottom-color: #666;
+}
+tbody th {
+	text-align: left;
+	font-weight: normal;
+	border-bottom-color: #ccc;
 }
 
@@ -1100,4 +1090,7 @@
 	display: block;
 }
+#filters-form label {
+	display: inline;
+}
 p.form-note {
 	font-style:italic;
@@ -1189,5 +1182,4 @@
 	height: 50px;
 	margin-bottom: .5em;
-	margin-left: .5em;
 }
 #login-screen fieldset {
@@ -1320,2 +1312,23 @@
 	background-color: #2373A8;
 }
+
+form#filters {font-size: 100%; background: #f0f0f0; padding: 1em; border-radius: .5em; border: 1px solid #ddd;}
+form#filters .margintop {padding-top: 1.33em;}
+form#filters ul {list-style-type:none;margin: 0; padding: 0; margin-left: 1em;}
+form#filters .col30 {border-left: 1px solid #999;}
+form#filters .col30 h3 {margin-left: 1em;}
+p.line, li.line { position: relative; padding: 3px 0 0 28px; margin: 0 0 1em 0;}
+li.line input[type=submit] {position: absolute; left:0;top:0; padding: 0 .1em; margin: 0;}
+li.line input[type=checkbox], li.line input[type=checkbox] {position: absolute; left: 0; top: .2em; padding: 0 .1em; margin: 0;}
+li.line select { margin-right: 2em;}
+li.line label { display: block; width: 8em; float: left;}
+li.line label img {margin-right: 8px;}
+li.line span.or {
+	text-align: right;
+	margin-left: 5em;
+	font-weight: bold;
+}
+p.line label.or + select {margin-left: 2em;}
+li.line { padding: 0 0 0 20px; height: 1em;}
+li.line label {width: auto;}
+#available_filters input[type=submit] {padding: 0 .1em; margin-left: .5em;}
Index: admin/style/install.css
===================================================================
--- admin/style/install.css	(revision 269)
+++ admin/style/install.css	(revision 69)
@@ -7,11 +7,10 @@
 */
 body.install {
-	font: 0.875em Helvetica,Arial,sans-serif;
+	font: 0.8em "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;
 	color: #000;
 	background-color: #fff;
-	line-height: 1.5em;
 }
 body.install #content {
-	width:32em;
+	width:500px;
 	margin:1em auto;
 }
@@ -21,5 +20,4 @@
 	-moz-border-radius:8px;
 	-webkit-border-radius:8px;
-	border-radius: 8px;
 }
 body.install h1,h2 {
@@ -42,9 +40,10 @@
 }
 body.install label {
+	font-weight: bold;
 	color: #555;
 }
 
 body.install .msg {
-	padding:10px 10px 10px 60px;
+	padding:10px 10px 10px 42px;
 	-moz-border-radius:8px;
 	-webkit-border-radius:8px;
@@ -56,15 +55,7 @@
 	background: #eef url(install/note.png) no-repeat 10px 10px;
 }
-a, a:link, a:visited {
-	color: #2373A8;
-	text-decoration: none;
-	border-bottom: 1px dotted #f90;
-}
-a:hover, a:active, a:focus {
-	text-decoration: underline;
-}
 
 div.error, p.error, div.message, p.message, div.static-msg, p.static-msg {
-	padding: 0.5em 0.5em 0.5em 60px;
+	padding: 0.5em 0.5em 0.5em 40px;
 	margin-bottom: 1em;
 	-moz-border-radius: 8px;
@@ -76,9 +67,9 @@
 }
 div.error, p.error {
-	background: #e5bfbf url(install/process_warning.png) no-repeat 5px 5px;
+	background: #e5bfbf url(msg-error.png) no-repeat 5px 5px;
 	color: #600;
 }
 div.message, p.message, div.static-msg, p.static-msg {
-	background: #666 url(install/note.png) no-repeat 5px 5px;
+	background: #666 url(msg-std.png) no-repeat 5px 5px;
 	color: #fff;
 }
@@ -96,7 +87,7 @@
 	font-weight : bold;
 }
-label.required abbr {
-	color: #dd0000;
-	font-size: 1.3em;
+label.required:before {
+	content : '* ';
+	color : #c00;
 }
 
@@ -132,31 +123,2 @@
 	-webkit-border-radius: 2px;
 }
-
-input[type=submit]{
-	font-size: 1.05em;
-	display: inline-block;
-	outline: none;
-	cursor: pointer;
-	text-align: center;
-	text-decoration: none;
-	padding: .1em .5em;
-	text-shadow: 0 1px 1px rgba(0,0,0,.3);
-	-webkit-border-radius: .2em;
-	-moz-border-radius: .2em;
-	border-radius: .2em;
-	margin-bottom: .1em;
-	color: #fff;
-	border: 1px solid #2373A8;
-	background: #2373A8;
-	background: -webkit-gradient(linear, left top, left bottom, from(#2C8FD1), to(#2373A8));
-	background: -moz-linear-gradient(top,  #2C8FD1,  #2373A8);
-	width: 100%;
-}
-input[type=submit]:hover,
-input[type=submit]:focus {
-	background: #2373A8;
-	background: -webkit-gradient(linear, left top, left bottom, from(#2373A8), to(#2C8FD1));
-	background: -moz-linear-gradient(top,  #2373A8,  #2C8FD1);
-	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#2373A8', endColorstr='#2C8FD1');
-	border: 1px solid #2C8FD1;
-}
Index: admin/trackbacks.php
===================================================================
--- admin/trackbacks.php	(revision 270)
+++ admin/trackbacks.php	(revision 196)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/update.php
===================================================================
--- admin/update.php	(revision 270)
+++ admin/update.php	(revision 166)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
Index: admin/user.php
===================================================================
--- admin/user.php	(revision 454)
+++ admin/user.php	(revision 181)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -96,8 +96,4 @@
 		$cur->user_post_status = $user_post_status = $_POST['user_post_status'];
 		
-		if ($cur->user_id == $core->auth->userID() && $core->auth->isSuperAdmin()) {
-			// force super_user to true if current user
-			$cur->user_super = $user_super = true;
-		}
 		if ($core->auth->allowPassChange()) {
 			$cur->user_change_pwd = !empty($_POST['user_change_pwd']) ? 1 : 0;
@@ -195,5 +191,5 @@
 '<div class="col">'.
 '<p><label for="user_id" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').' '.
-form::field('user_id',20,255,html::escapeHTML($user_id)).
+form::field('user_id',20,255,html::escapeHTML($user_id),'',2).
 '</label></p>'.
 '<p class="form-note">'.__('At least 2 characters using letters, numbers or symbols.').'</p>'.
@@ -202,5 +198,5 @@
 ($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').
 ($user_id != '' ? __('New password:') : __('Password:')).' '.
-form::password('new_pwd',20,255).
+form::password('new_pwd',20,255,'','',3).
 '</label></p>'.
 '<p class="form-note">'.__('Password must contain at least 6 characters.').'</p>'.
@@ -208,21 +204,21 @@
 '<p><label for="new_pwd_c" '.($user_id != '' ? '' : 'class="required"').'>'.
 ($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').__('Confirm password:').' '.
-form::password('new_pwd_c',20,255).
+form::password('new_pwd_c',20,255,'','',4).
 '</label></p>'.
 
 '<p><label for="user_name">'.__('Last Name:').' '.
-form::field('user_name',20,255,html::escapeHTML($user_name)).
+form::field('user_name',20,255,html::escapeHTML($user_name),'',5).
 '</label></p>'.
 
 '<p><label for="user_firstname">'.__('First Name:').' '.
-form::field('user_firstname',20,255,html::escapeHTML($user_firstname)).
+form::field('user_firstname',20,255,html::escapeHTML($user_firstname),'',6).
 '</label></p>'.
 
 '<p><label for="user_displayname">'.__('Display name:').' '.
-form::field('user_displayname',20,255,html::escapeHTML($user_displayname)).
+form::field('user_displayname',20,255,html::escapeHTML($user_displayname),'',7).
 '</label></p>'.
 
 '<p><label for="user_email">'.__('Email:').' '.
-form::field('user_email',20,255,html::escapeHTML($user_email)).
+form::field('user_email',20,255,html::escapeHTML($user_email),'',8).
 '</label></p>'.
 '</div>'.
@@ -230,24 +226,24 @@
 '<div class="col">'.
 '<p><label for="user_url">'.__('URL:').' '.
-form::field('user_url',30,255,html::escapeHTML($user_url)).
+form::field('user_url',30,255,html::escapeHTML($user_url),'',9).
 '</label></p>'.
 '<p><label for="user_post_format">'.__('Preferred format:').' '.
-form::combo('user_post_format',$formaters_combo,$user_options['post_format']).
+form::combo('user_post_format',$formaters_combo,$user_options['post_format'],'',10).
 '</label></p>'.
 
 '<p><label for="user_post_status">'.__('Default entry status:').' '.
-form::combo('user_post_status',$status_combo,$user_post_status).
-'</label></p>'.
-
-'<p><label for="user_edit_size">'.__('Entry edit field height:').' '.
-form::field('user_edit_size',5,4,(integer) $user_options['edit_size']).
-'</label></p>'.
-
-'<p><label for="user_lang">'.__('User language:').' '.
-form::combo('user_lang',$lang_combo,$user_lang,'l10n').
+form::combo('user_post_status',$status_combo,$user_post_status,'',11).
+'</label></p>'.
+
+'<p><label>'.__('Entry edit field height:').' '.
+form::field('user_edit_size',5,4,(integer) $user_options['edit_size'],'',12).
+'</label></p>'.
+
+'<p><label for="user_edit_size">'.__('User language:').' '.
+form::combo('user_lang',$lang_combo,$user_lang,'l10n',13).
 '</label></p>'.
 
 '<p><label for="user_tz">'.__('User timezone:').' '.
-form::combo('user_tz',dt::getZones(true,true),$user_tz).
+form::combo('user_tz',dt::getZones(true,true),$user_tz,'',14).
 '</label></p>';
 
@@ -255,12 +251,10 @@
 	echo
 	'<p><label for="user_change_pwd" class="classic">'.
-	form::checkbox('user_change_pwd','1',$user_change_pwd).' '.
+	form::checkbox('user_change_pwd','1',$user_change_pwd,'',15).' '.
 	__('Password change required to connect').'</label></p>';
 }
 
-$super_disabled = $user_super && $user_id == $core->auth->userID();
-
 echo
-'<p><label for="user_super" class="classic">'.form::checkbox('user_super','1',$user_super,'','',$super_disabled).' '.
+'<p><label for="user_super" class="classic">'.form::checkbox('user_super','1',$user_super,'',16).' '.
 __('Super administrator').'</label></p>'.
 '</div>'.
@@ -275,7 +269,7 @@
 '<p><label for="your_pwd" '.($user_id != '' ? '' : 'class="required"').'>'.
 ($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').__('Your password:').
-form::password('your_pwd',20,255).'</label></p>'.
+form::password('your_pwd',20,255,'','',17).'</label></p>'.
 '</fieldset>'.
-'<p class="clear"><input type="submit" accesskey="s" value="'.__('Save').'" />'.
+'<p class="clear"><input type="submit" accesskey="s" value="'.__('Save').'" tabindex="16" />'.
 ($user_id != '' ? form::hidden('id',$user_id) : '').
 $core->formNonce().
Index: admin/users.php
===================================================================
--- admin/users.php	(revision 313)
+++ admin/users.php	(revision 158)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -24,7 +24,6 @@
 			# --BEHAVIOR-- adminBeforeUserDelete
 			$core->callBehavior('adminBeforeUserDelete',$u);
-			if ($u != $core->auth->userID()) {
-				$core->delUser($u);
-			}
+			
+			$core->delUser($u);
 		}
 		catch (Exception $e)
@@ -33,4 +32,5 @@
 		}
 	}
+	
 	if (!$core->error->flag()) {
 		http::redirect('users.php?del=1');
Index: admin/xmlrpc.php
===================================================================
--- admin/xmlrpc.php	(revision 270)
+++ admin/xmlrpc.php	(revision 0)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2010 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
