Index: .hgtags
===================================================================
--- .hgtags	(revision 871)
+++ .hgtags	(revision 1219)
@@ -12,2 +12,3 @@
 6fce226121140735a51a8f447c80f1dacd2974ea 2.4.4
 514d5121a12586b7ff320924d44028b677a01020 2.4.4
+baf879af43beea9764d920c2facd7226e90c5cf3 2.5.1
Index: admin/js/_media.js
===================================================================
--- admin/js/_media.js	(revision 1191)
+++ admin/js/_media.js	(revision 1234)
@@ -40,5 +40,5 @@
 	});
 
-	var $container = $('#fileupload').parent().parent();
+	var $container = $('#add-file-f').parent().parent();
 	var $msg,label;
 
@@ -75,5 +75,5 @@
 
 		$container.toggleClass('enhanced_uploader');
-	}).appendTo($('#fileupload'));
+	}).appendTo($('#add-file-f'));
 
 	// Replace remove links by a POST on hidden form
Index: admin/js/jquery/jquery.pageTabs.js
===================================================================
--- admin/js/jquery/jquery.pageTabs.js	(revision 1140)
+++ admin/js/jquery/jquery.pageTabs.js	(revision 1223)
@@ -39,9 +39,10 @@
 				li = document.createElement('li');
 				a = document.createElement('a');
-				a.appendChild(document.createTextNode(this.title));
+				$(a).html(this.title);
 				this.title = '';
 				a.href = '#';
 				a.fn = This.showDiv;
 				a.index = this.id || i;
+				li.id = "part-tabs-"+a.index;
 				a.obj = This;
 				jQuery(a).click(function() { this.fn.call(this.obj,this.index); return false; });
Index: admin/media.php
===================================================================
--- admin/media.php	(revision 1192)
+++ admin/media.php	(revision 1234)
@@ -335,9 +335,9 @@
 
 	echo
+	'<form id="fileupload" action="'.html::escapeURL($page_url).'" method="POST" enctype="multipart/form-data">'.
 	'<fieldset id="add-file-f"><legend>'.__('Add files').'</legend>'.
 	'<p>'.__('Please take care to publish media that you own and that are not protected by copyright.').'</p>'.
-	' <form id="fileupload" action="'.html::escapeURL($page_url).'" method="POST" enctype="multipart/form-data">'.
-	'<div>'.form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE).
-	$core->formNonce().'</div>'.
+	form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE).
+	$core->formNonce().
 	'<div class="fileupload-ctrl"><div class="files"></div></div>';
 
@@ -369,5 +369,5 @@
 
 	echo
-	'<div>'.form::hidden(array('d'),$d).'</div>'.
+	form::hidden(array('d'),$d).
 	'</fieldset>'.
 	'</form>'.
@@ -428,7 +428,9 @@
 	$class = 'media-item media-col-'.($i%2);
 	
+	$alt = (!$f->d ? sprintf(__('Media details of %s'),$fname) : 
+		sprintf(__('Go to %s folder'),($fname == '..' ? __('parent') : $fname)));
 	$res =
 	'<div class="'.$class.'"><a class="media-icon media-link" href="'.$link.'">'.
-	'<img src="'.$f->media_icon.'" alt="" /></a>'.
+	'<img src="'.$f->media_icon.'" alt="'.$alt.'" /></a>'.
 	'<ul>'.
 	'<li><a class="media-link" href="'.$link.'">'.$fname.'</a></li>';
Index: admin/plugins.php
===================================================================
--- admin/plugins.php	(revision 1182)
+++ admin/plugins.php	(revision 1238)
@@ -387,4 +387,9 @@
 echo '</div>';
 
+if ($core->plugins->moduleExists('daInstaller')) {
+	echo '<p><a href="plugin.php?p=daInstaller" class="multi-part">'.__('DotAddict.org Installer').'</a></p>';
+}
+
+
 # --BEHAVIOR-- pluginsToolsTabs
 $core->callBehavior('pluginsToolsTabs',$core);
Index: admin/style/default.css
===================================================================
--- admin/style/default.css	(revision 1235)
+++ admin/style/default.css	(revision 1179)
@@ -13,11 +13,8 @@
 
 /* ------------------------------------------------------------------ html */
-html {
-	font-size: 62.5%;
-}
 body {
-	font: 1.2rem/1.5 Helvetica,Arial,sans-serif;
+	font: 75%/1.5em Helvetica,Arial,sans-serif;
 	color: #333;
-	background: #fff;
+	background: #f5f5f5;
 	margin: 0;
 	padding: 0;
@@ -41,10 +38,10 @@
 h1, h2, h3, h4, h5, h6, p {
 	margin-top: 0;
-	margin-bottom: 1rem;
+	margin-bottom: 0.6em;
 }
 h2 {
 	color: #666;
-	font-size: 1.8rem;
-	padding: 0 0 .6rem;
+	font-size: 1.4em;
+	padding: 4px 0;
 }
 .page-title {
@@ -53,5 +50,5 @@
 h3 {
 	color: #333;
-	font-size: 1.2rem;
+	font-size: 1.2em;
 }
 p, div.p {
@@ -86,15 +83,15 @@
 #header {
 	background: #575859;
-	height: 3.2rem;
+	height: 3em;
 	position: relative;
 }
 #prelude {
-	background: transparent;
-	line-height: 2;
-	margin: 0;
-	padding: 0 1rem 0;
+	background: #575859;
+	line-height: 1.5em;
+	margin: 0;
+	padding: 0 1.7em 0 1em;
 	overflow: hidden;
 	position: absolute;
-	top: 3.2rem;
+	top: 1.2em;
 	left: 0;
 	}
@@ -103,5 +100,7 @@
 	margin: 0 1em 0 0;
 	background:transparent;
-	display: inline;
+	}
+#prelude li a {
+	color:#fff;
 	}
 #top {
@@ -114,5 +113,5 @@
 	padding: 0;
 	margin: 0;
-	height: 3.2rem;
+	height: 3em;
 	text-indent: -1000px;
 	background: transparent url(dc_logo.png) no-repeat 0 50%;
@@ -135,5 +134,5 @@
 #info-box1 {
 	margin: 0;
-	padding: .5em 3px 4px 1.8rem;
+	padding: .5em 3px 4px 0;
 	color: #fff;
 	float: left;
@@ -174,8 +173,8 @@
 }
 #info-box2 a.active {
-	border-bottom-color: #fff;
+	border-bottom-color: #f5f5f5;
 	margin: 0;
 	padding: 1.2em .5em;
-	background-color: #fff;
+	background-color: #f5f5f5;
 	color: #333;
 	font-weight: bold;
@@ -193,10 +192,11 @@
 	margin-left: -13em;
 	margin-top: 0;
-	background: #fff url(dc_bg.png);
 }
 #content {
-	margin: 0 0 0 13em;
-	padding: 1.8rem;
+	margin: 1.5em 1.5em .5em 13em;
+	padding: 1em;
 	background: #fff;
+	border-radius: .5em;
+	border: 1px solid #ddd;
 }
 	/* Micro clearfix thx to Nicolas Gallagher */
@@ -276,18 +276,17 @@
 	width: 13em;
 	float: left;
-	margin-top: 2rem;
-	padding-bottom: 1rem;
-	background: #f7f7f7;
+	margin-top: 1.2em;
+	margin-bottom: .5em;
 }
 #main-menu h3 {
-	margin: 0 0 1.2rem;
-	padding: 0 0 0 .5em;
+	margin: 0 0 0.5em;
+	padding: .5em 0 0 .5em;
 	text-transform: uppercase;
 	color: #666;
-	font-size: 1.4rem;
+	font-size: 1.1em;
 }
 #main-menu ul {
-	font-size: 1.2rem;
-	margin: 0 0 2rem 0;
+	font-size: .95em;
+	margin: 0 0 1em 0;
 	padding: 0;
 	list-style: none;
@@ -295,5 +294,5 @@
 #main-menu li {
 	display: block;
-	margin: 0.6rem 0 0;
+	margin: 0.5em 0 0;
 	padding: .2em 0 0 32px;
 	background-repeat: no-repeat;
@@ -301,9 +300,9 @@
 }
 #main-menu a {
-	color: #333;
+	font-weight: bold;
 }
 #main-menu .active a {
 	border-bottom: none;
-	color: #d30e60;
+	color: #333;
 }
 #main-menu .active {
@@ -314,5 +313,4 @@
 	border-bottom: 1px solid #ddd;
 	margin-right: -1px;
-	font-weight: bolder;
 }
 #favorites-menu {
@@ -337,7 +335,6 @@
 #footer {
 	clear: both;
-	padding: .6rem 1.2rem .6rem 0;
+	padding: .75em .75em 0 0;
 	text-align: right;
-	border-top: .1rem solid #ccc;
 }
 #footer p {
@@ -785,13 +782,16 @@
 #help-button {
 	position: fixed;
-	top: 5.6rem;
+	top: 3.2em;
 	right: 0px;
 	cursor: pointer;
-	background: #FFD478 url(../images/page_help.png) no-repeat .6rem center;
+	background: #fc3;
 	border: 1px solid #dde;
 	border-right: none;
-	padding: .3rem 1rem .3rem 3rem;
-	border-radius: 1rem 0 0 1rem;
-	color: #000;
+	font-size: 1.1em;
+	font-weight: bold;
+	text-transform: capitalize;
+	padding: .33em .75em .33em 1em;
+	border-radius: 1em 0 0 1em;
+	color: #444;
 }
 .help-box {
@@ -808,8 +808,8 @@
 	display: block;
 	position: absolute;
-	top: 4rem;
+	top: 40px;
 	right: 0;
 	width: 280px;
-	border-left: 2px solid #FFD478;
+	border-left: 2px solid #fc3;
 	margin-top: 0;
 	padding: 10px 0 0 0;
@@ -992,5 +992,5 @@
 -------------------------------------------------------- */
 table {
-	font-size: 1.2rem;
+	font-size: 1em;
 	border-collapse: collapse;
 	margin: 0 0 1em 0;
@@ -1001,4 +1001,5 @@
 caption {
 	color: #333;
+	font-size: 1.2em;
 	font-weight: bold;
 	text-align: left;
@@ -1010,5 +1011,5 @@
 	border-style: solid;
 	border-color: #ccc;
-	padding: .4rem .5rem;
+	padding: 3px 5px;
 	vertical-align: top;
 }
@@ -1130,5 +1131,5 @@
 }
 input, textarea, select, option {
-	font: 100% "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;
+	font: 1em "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;
 }
 input[type=text], input[type=password], textarea {
@@ -1342,11 +1343,11 @@
 	border-radius: .5em;
 	margin-bottom: .1em;	
-	background: #AAce21 url(../images/add.png) no-repeat 6px center;
-	padding: .4rem 16px .4rem 30px;
-	border: 1px solid #ccc;
-	color: #000;
+	background: #2C8FD1 url(../images/add.png) no-repeat 6px center;
+	color: #fff;
+	padding: .2em 16px .2em 30px;
+	border: 1px solid #2373A8;
 }
 a.button.add:hover, a.button.add:focus {
-	background-color: #fff;
+	background-color: #2373A8;
 }
 
Index: admin/update.php
===================================================================
--- admin/update.php	(revision 1179)
+++ admin/update.php	(revision 1231)
@@ -27,5 +27,5 @@
 
 $updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions');
-$new_v = $updater->check(DC_VERSION);
+$new_v = $updater->check(DC_VERSION, !empty($_GET['nocache']));
 $zip_file = $new_v ? DC_BACKUP_PATH.'/'.basename($updater->getFileURL()) : '';
 $version_info = $new_v ? $updater->getInfoURL() : '';
@@ -173,4 +173,8 @@
 if (!$core->error->flag()) {
 	echo '<h2>'.__('Dotclear update').'</h2>';
+	
+	if (!empty($_GET['nocache'])) {
+		dcPage::message(__('Manual checking of update done successfully.'));
+	}
 }
 
@@ -180,5 +184,9 @@
 	if (empty($new_v))
 	{
-		echo '<p><strong>'.__('No newer Dotclear version available.').'</strong></p>';
+		echo '<p><strong>'.__('No newer Dotclear version available.').'</strong></p>'.
+		'<form action="'.$p_url.'" method="get">'.
+		'<p><input type="hidden" name="nocache" value="1" />'.
+		'<input type="submit" value="'.__('Force checking update Dotclear').'" /></p>'.
+		'</form>';
 	}
 	else
Index: admin/users.php
===================================================================
--- admin/users.php	(revision 1179)
+++ admin/users.php	(revision 1237)
@@ -106,5 +106,5 @@
 	
 	echo 
-	'<h2 class="post-title">'.__('Users').'</h2>'.
+	'<h2 class="page-title">'.__('Users').'</h2>'.
 	'<p class="top-add"><strong><a class="button add" href="user.php">'.__('Create a new user').'</a></strong></p>';
 	
Index: inc/core/class.dc.blog.php
===================================================================
--- inc/core/class.dc.blog.php	(revision 1244)
+++ inc/core/class.dc.blog.php	(revision 1228)
@@ -81,5 +81,5 @@
 			$this->desc = $b->blog_desc;
 			$this->url = $b->blog_url;
-			$this->host = http::getHostFromURL($this->url);
+			$this->host = preg_replace('|^([a-z]{3,}://)(.*?)/.*$|','$1$2',$this->url);
 			$this->creadt = strtotime($b->blog_creadt);
 			$this->upddt = strtotime($b->blog_upddt);
@@ -2267,6 +2267,8 @@
 		
 		if ($cur->comment_site !== null && $cur->comment_site != '') {
-			if (!preg_match('|^http(s?)://|',$cur->comment_site)) {
+			if (!preg_match('|^http(s?)://|i',$cur->comment_site, $matches)) {
 				$cur->comment_site = 'http://'.$cur->comment_site;
+			}else{
+				$cur->comment_site = strtolower($matches[0]).substr($cur->comment_site, strlen($matches[0]));
 			}
 		}
Index: inc/core/class.dc.media.php
===================================================================
--- inc/core/class.dc.media.php	(revision 1179)
+++ inc/core/class.dc.media.php	(revision 1220)
@@ -515,5 +515,5 @@
 			$f = $this->fileRecord($rs);
 			if ($f !== null) {
-				$res[] = $f;
+				$res[] = new ArrayObject($f);
 			}
 		}
Index: inc/core/class.dc.update.php
===================================================================
--- inc/core/class.dc.update.php	(revision 1179)
+++ inc/core/class.dc.update.php	(revision 1231)
@@ -32,4 +32,5 @@
 	
 	protected $cache_ttl = '-6 hours';
+	protected $nocache_ttl = '-2 mins';
 	protected $forced_files = array();
 	
@@ -55,9 +56,10 @@
 	 * 
 	 * @param version		string	Current version to compare
+	 * @param nocache		boolean	Force checking
 	 * @return string				Latest version if available
 	 */
-	public function check($version)
-	{
-		$this->getVersionInfo();
+	public function check($version, $nocache=false)
+	{
+		$this->getVersionInfo($nocache);
 		$v = $this->getVersion();
 		if ($v && version_compare($version,$v,'<')) {
@@ -68,8 +70,13 @@
 	}
 	
-	public function getVersionInfo()
-	{
+	public function getVersionInfo($nocache=false)
+	{
+		# Check minimum time without cache (prevents from server flood)
+		if ($nocache && is_readable($this->cache_file) && filemtime($this->cache_file) > strtotime($this->nocache_ttl)) {
+			$nocache = false;
+		}
+		
 		# Check cached file
-		if (is_readable($this->cache_file) && filemtime($this->cache_file) > strtotime($this->cache_ttl))
+		if (is_readable($this->cache_file) && filemtime($this->cache_file) > strtotime($this->cache_ttl) && !$nocache)
 		{
 			$c = @file_get_contents($this->cache_file);
Index: inc/load_plugin_file.php
===================================================================
--- inc/load_plugin_file.php	(revision 1179)
+++ inc/load_plugin_file.php	(revision 1241)
@@ -86,5 +86,5 @@
 }
 
-http::$cache_max_age = 7200;
+http::$cache_max_age = (!defined('DC_CACHE_MAX_AGE') ? 604800 : DC_CACHE_MAX_AGE);
 http::cache(array_merge(array($PF),get_included_files()));
 
Index: inc/prepend.php
===================================================================
--- inc/prepend.php	(revision 1218)
+++ inc/prepend.php	(revision 1233)
@@ -123,5 +123,5 @@
 # Constants
 define('DC_ROOT',path::real(dirname(__FILE__).'/..'));
-define('DC_VERSION','2.6-dev');
+define('DC_VERSION','2.5.2-dev');
 define('DC_DIGESTS',dirname(__FILE__).'/digests');
 define('DC_L10N_ROOT',dirname(__FILE__).'/../locales');
Index: locales/fr/main.po
===================================================================
--- locales/fr/main.po	(revision 1193)
+++ locales/fr/main.po	(revision 1233)
@@ -1193,4 +1193,10 @@
 msgstr "Gestionnaire de médias"
 
+msgid "Go to %s folder"
+msgstr "Aller au dossier %s"
+
+msgid "Media details of %s"
+msgstr "Détails du média %s"
+
 msgid "confirm removal"
 msgstr "Confirmer la suppression"
@@ -1991,6 +1997,12 @@
 msgstr "Les fichiers suivants de votre installation de Dotclear ne peuvent pas être écrits. Veuillez corriger la situation ou <a href=\"http://fr.dotclear.org/download\">mettre à jour manuellement</a>."
 
+msgid "Manual checking of update done successfully."
+msgstr "Vérification manuelle de mise à jour effectuée avec succès."
+
 msgid "No newer Dotclear version available."
 msgstr "Aucune nouvelle version de Dotclear n'est disponible."
+
+msgid "Force checking update Dotclear"
+msgstr "Forcer la vérification de mise à jour de Dotclear"
 
 #, php-format
Index: locales/fr/plugins.po
===================================================================
--- locales/fr/plugins.po	(revision 1200)
+++ locales/fr/plugins.po	(revision 1226)
@@ -1131,5 +1131,5 @@
 
 msgid "Vacuum tables"
-msgstr "Vidage des tables"
+msgstr "Optimiser les tables"
 
 msgid "Counters"
@@ -1137,5 +1137,5 @@
 
 msgid "Reset comments and ping counters"
-msgstr "Remet à zéro les compteurs de commentaires et de signalements"
+msgstr "Recalculer les compteurs de commentaires et de signalements"
 
 msgid "Search engine index"
@@ -1146,8 +1146,8 @@
 
 msgid "Index all posts"
-msgstr "Indexation de tous les billets"
+msgstr "Indexer tous les billets"
 
 msgid "Index all comments"
-msgstr "Indexation de tous les commentaires"
+msgstr "Indexer tous les commentaires"
 
 msgid "Vacuum logs"
@@ -1155,5 +1155,5 @@
 
 msgid "Delete all logs"
-msgstr "Suppression de tous les journaux"
+msgstr "Supprimer tous les journaux"
 
 msgid "Empty templates cache directory"
@@ -1161,5 +1161,5 @@
 
 msgid "Empty directory"
-msgstr "Vidage du répertoire"
+msgstr "Vider le répertoire"
 
 msgid "Pages"
Index: plugins/attachments/_public.php
===================================================================
--- plugins/attachments/_public.php	(revision 1179)
+++ plugins/attachments/_public.php	(revision 1221)
@@ -40,12 +40,16 @@
 		"<?php\n".
 		'if ($_ctx->posts !== null && $core->media) {'."\n".
-			'$_ctx->attachments = new ArrayObject($core->media->getPostMedia($_ctx->posts->post_id));'."\n".
+		'$_ctx->attachments = staticRecord::newFromArray($core->media->getPostMedia($_ctx->posts->post_id));'."\n".
 		"?>\n".
 		
-		'<?php foreach ($_ctx->attachments as $attach_i => $attach_f) : '.
-		'$GLOBALS[\'attach_i\'] = $attach_i; $GLOBALS[\'attach_f\'] = $attach_f;'.
-		'$_ctx->file_url = $attach_f->file_url; ?>'.
+		'<?php $attach_i = 0; ?>'. // LEGACY
+		'<?php while ($_ctx->attachments->fetch()) : ?>'.
+		
+		'<?php $GLOBALS[\'attach_i\'] = $attach_i; $attach_f = $_ctx->attachments->row(); $GLOBALS[\'attach_f\'] = $attach_f;'. // LEGACY
+		'$_ctx->file_url = $attach_f->file_url; ?>'. // LEGACY
 		$content.
-		'<?php endforeach; $_ctx->attachments = null; unset($attach_i,$attach_f,$_ctx->file_url); ?>'.
+		'<?php $attach_i++; ?>'. // LEGACY
+		'<?php endwhile; '.
+		'$_ctx->attachments = null; ?>'.
 		
 		"<?php } ?>\n";
@@ -60,5 +64,5 @@
 	{
 		return
-		"<?php if (\$attach_i == 0) : ?>".
+		"<?php if (\$_ctx->attachments->isStart()) : ?>".
 		$content.
 		"<?php endif; ?>";
@@ -71,5 +75,5 @@
 	{
 		return
-		"<?php if (\$attach_i+1 == count(\$_ctx->attachments)) : ?>".
+		"<?php if (\$_ctx->attachments->isEnd()) : ?>".
 		$content.
 		"<?php endif; ?>";
@@ -93,15 +97,15 @@
 		if (isset($attr['is_image'])) {
 			$sign = (boolean) $attr['is_image'] ? '' : '!';
-			$if[] = $sign.'$attach_f->media_image';
+			$if[] = $sign.'$_ctx->attachments->media_image';
 		}
 		
 		if (isset($attr['has_thumb'])) {
 			$sign = (boolean) $attr['has_thumb'] ? '' : '!';
-			$if[] = $sign.'isset($attach_f->media_thumb[\'sq\'])';
+			$if[] = $sign.'isset($_ctx->attachments->media_thumb[\'sq\'])';
 		}
 		
 		if (isset($attr['is_mp3'])) {
 			$sign = (boolean) $attr['is_mp3'] ? '==' : '!=';
-			$if[] = '$attach_f->type '.$sign.' "audio/mpeg3"';
+			$if[] = '$_ctx->attachments->type '.$sign.' "audio/mpeg3"';
 		}
 		
@@ -109,7 +113,7 @@
 			$sign = (boolean) $attr['is_flv'] ? '' : '!';
 			$if[] = $sign.
-				'($attach_f->type == "video/x-flv" || '.
-				'$attach_f->type == "video/mp4" || '.
-				'$attach_f->type == "video/x-m4v")';
+				'($_ctx->attachments->type == "video/x-flv" || '.
+				'$_ctx->attachments->type == "video/mp4" || '.
+				'$_ctx->attachments->type == "video/x-m4v")';
 		}
 		
@@ -127,5 +131,5 @@
 	{
 		$f = $GLOBALS['core']->tpl->getFilters($attr);
-		return '<?php echo '.sprintf($f,'$attach_f->type').'; ?>';
+		return '<?php echo '.sprintf($f,'$_ctx->attachments->type').'; ?>';
 	}
 	
@@ -136,5 +140,5 @@
 	{
 		$f = $GLOBALS['core']->tpl->getFilters($attr);
-		return '<?php echo '.sprintf($f,'$attach_f->media_type').'; ?>';
+		return '<?php echo '.sprintf($f,'$_ctx->attachments->media_type').'; ?>';
 	}
 	
@@ -145,5 +149,5 @@
 	{
 		$f = $GLOBALS['core']->tpl->getFilters($attr);
-		return '<?php echo '.sprintf($f,'$attach_f->basename').'; ?>';
+		return '<?php echo '.sprintf($f,'$_ctx->attachments->basename').'; ?>';
 	}
 	
@@ -158,7 +162,7 @@
 		$f = $GLOBALS['core']->tpl->getFilters($attr);
 		if (!empty($attr['full'])) {
-			return '<?php echo '.sprintf($f,'$attach_f->size').'; ?>';
-		}
-		return '<?php echo '.sprintf($f,'files::size($attach_f->size)').'; ?>';
+			return '<?php echo '.sprintf($f,'$_ctx->attachments->size').'; ?>';
+		}
+		return '<?php echo '.sprintf($f,'files::size($_ctx->attachments->size)').'; ?>';
 	}
 	
@@ -169,5 +173,5 @@
 	{
 		$f = $GLOBALS['core']->tpl->getFilters($attr);
-		return '<?php echo '.sprintf($f,'$attach_f->media_title').'; ?>';
+		return '<?php echo '.sprintf($f,'$_ctx->attachments->media_title').'; ?>';
 	}
 	
@@ -180,6 +184,6 @@
 		return
 		'<?php '.
-		'if (isset($attach_f->media_thumb[\'sq\'])) {'.
-			'echo '.sprintf($f,'$attach_f->media_thumb[\'sq\']').';'.
+		'if (isset($_ctx->attachments->media_thumb[\'sq\'])) {'.
+			'echo '.sprintf($f,'$_ctx->attachments->media_thumb[\'sq\']').';'.
 		'}'.
 		'?>';
@@ -192,5 +196,5 @@
 	{
 		$f = $GLOBALS['core']->tpl->getFilters($attr);
-		return '<?php echo '.sprintf($f,'$attach_f->file_url').'; ?>';
+		return '<?php echo '.sprintf($f,'$_ctx->attachments->file_url').'; ?>';
 	}
 	
Index: plugins/daInstaller/index.php
===================================================================
--- plugins/daInstaller/index.php	(revision 1046)
+++ plugins/daInstaller/index.php	(revision 1237)
@@ -256,5 +256,5 @@
 '<body>'.
 infoMessages().
-'<h2>'.__('DotAddict.org Installer').'</h2>'.
+'<h2 class="page-title">'.__('DotAddict.org Installer').'</h2>'.
 '<p>'.__('Install and update your extensions live from DotAddict.org').'</p>';
 
Index: plugins/pages/page.php
===================================================================
--- plugins/pages/page.php	(revision 1215)
+++ plugins/pages/page.php	(revision 1239)
@@ -302,4 +302,5 @@
   dcPage::jsToolBar().
   dcPage::jsModal().
+  dcPage::jsMetaEditor().
   dcPage::jsLoad('js/_post.js').
   dcPage::jsConfirmClose('entry-form','comment-form').
Index: plugins/tags/_admin.php
===================================================================
--- plugins/tags/_admin.php	(revision 1179)
+++ plugins/tags/_admin.php	(revision 1239)
@@ -23,4 +23,6 @@
 $core->addBehavior('adminAfterPostUpdate',array('tagsBehaviors','setTags'));
 
+$core->addBehavior('adminPageHeaders',array('tagsBehaviors','pageHeaders'));
+
 $core->addBehavior('adminPostHeaders',array('tagsBehaviors','postHeaders'));
 $core->addBehavior('adminPostsActionsHeaders',array('tagsBehaviors','postsActionsHeaders'));
@@ -99,4 +101,33 @@
 			}
 		}
+	}
+
+	public static function pageHeaders()
+	{
+		$tag_url = $GLOBALS['core']->blog->url.$GLOBALS['core']->url->getURLFor('tag');
+		
+		$opts = $GLOBALS['core']->auth->getOptions();
+		$type = isset($opts['tag_list_format']) ? $opts['tag_list_format'] : 'more';
+		
+		return 
+		'<script type="text/javascript" src="index.php?pf=tags/js/jquery.autocomplete.js"></script>'.
+		'<script type="text/javascript" src="index.php?pf=tags/js/page.js"></script>'.
+		'<script type="text/javascript">'."\n".
+		"//<![CDATA[\n".
+		"metaEditor.prototype.meta_url = 'plugin.php?p=tags&m=tag_posts&amp;tag=';\n".
+		"metaEditor.prototype.meta_type = '".html::escapeJS($type)."';\n".
+		"metaEditor.prototype.text_confirm_remove = '".html::escapeJS(__('Are you sure you want to remove this %s?'))."';\n".
+		"metaEditor.prototype.text_add_meta = '".html::escapeJS(__('Add a %s to this entry'))."';\n".
+		"metaEditor.prototype.text_choose = '".html::escapeJS(__('Choose from list'))."';\n".
+		"metaEditor.prototype.text_all = '".html::escapeJS(__('all'))."';\n".
+		"metaEditor.prototype.text_separation = '';\n".
+		"jsToolBar.prototype.elements.tag.title = '".html::escapeJS(__('Tag'))."';\n".
+		"jsToolBar.prototype.elements.tag.url = '".html::escapeJS($tag_url)."';\n".
+		"dotclear.msg.tags_autocomplete = '".html::escapeJS(__('used in %e - frequency %p%'))."';\n".
+		"dotclear.msg.entry = '".html::escapeJS(__('entry'))."';\n".
+		"dotclear.msg.entries = '".html::escapeJS(__('entries'))."';\n".
+		"\n//]]>\n".
+		"</script>\n".
+		'<link rel="stylesheet" type="text/css" href="index.php?pf=tags/style.css" />';
 	}
 	
Index: plugins/tags/js/page.js
===================================================================
--- plugins/tags/js/page.js	(revision 1240)
+++ plugins/tags/js/page.js	(revision 1240)
@@ -0,0 +1,70 @@
+$(function () {
+    $('#edit-entry').onetabload(function () {
+        var tags_edit = $('#tags-edit');
+        var post_id = $('#id');
+        var meta_field = null;
+        if (tags_edit.length > 0) {
+            post_id = (post_id.length > 0) ? post_id.get(0).value : false;
+            if (post_id == false) {
+                meta_field = $('<input type="hidden" name="post_tags" />');
+                meta_field.val($('#post_tags').val());
+            }
+            var mEdit = new metaEditor(tags_edit, meta_field, 'tag');
+            mEdit.meta_url = 'plugin.php?p=tags&m=tag_posts&amp;tag=';
+            mEdit.displayMeta('tag', post_id);
+            window.dc_tag_editor = mEdit;
+        }
+    });
+});
+jsToolBar.prototype.elements.tagSpace = {
+    type: 'space'
+};
+jsToolBar.prototype.elements.tag = {
+    type: 'button',
+    title: 'Keyword',
+    fn: {}
+};
+jsToolBar.prototype.elements.tag.context = 'post';
+jsToolBar.prototype.elements.tag.icon = 'index.php?pf=tags/img/tag-add.png';
+jsToolBar.prototype.elements.tag.fn.wiki = function () {
+    this.encloseSelection('', '', function (str) {
+        if (str == '') {
+            window.alert(dotclear.msg.no_selection);
+            return '';
+        }
+        if (str.indexOf(',') != -1) {
+            return str;
+        } else {
+            return '[' + str + '|tag:' + str + ']';
+        }
+    });
+};
+jsToolBar.prototype.elements.tag.fn.xhtml = function () {
+    var url = this.elements.tag.url;
+    this.encloseSelection('', '', function (str) {
+        if (str == '') {
+            window.alert(dotclear.msg.no_selection);
+            return '';
+        }
+        if (str.indexOf(',') != -1) {
+            return str;
+        } else {
+            return '<a href="' + this.stripBaseURL(url + '/' + str) + '">' + str + '</a>';
+        }
+    });
+};
+jsToolBar.prototype.elements.tag.fn.wysiwyg = function () {
+    var t = this.getSelectedText();
+    if (t == '') {
+        window.alert(dotclear.msg.no_selection);
+        return;
+    }
+    if (t.indexOf(',') != -1) {
+        return;
+    }
+    var n = this.getSelectedNode();
+    var a = document.createElement('a');
+    a.href = this.stripBaseURL(this.elements.tag.url + '/' + t);
+    a.appendChild(n);
+    this.insertNode(a);
+};
