Index: .hgsubstate
===================================================================
--- .hgsubstate	(revision 2666)
+++ .hgsubstate	(revision 2618)
@@ -1,1 +1,1 @@
-023222b445b78b875f9f49041e7bd136cebd042e inc/libs/clearbricks
+94b97f44f94e951b8b6392bd76d8c9a3791388e2 inc/libs/clearbricks
Index: .hgtags
===================================================================
--- .hgtags	(revision 2714)
+++ .hgtags	(revision 2637)
@@ -19,3 +19,2 @@
 185f7650c1d86e4a5680c2d3b1da5628253091f5 2.6.1
 1f8978ee39fc70bf9a6c345cf3b550722b819173 2.6.2
-121f94747a10af7f58a88c00537eafc4e0d29685 2.6.3
Index: CHANGELOG
===================================================================
--- CHANGELOG	(revision 2718)
+++ CHANGELOG	(revision 2712)
@@ -1,6 +1,6 @@
 Dotclear 2.6.3 - 2014-05-16
 ===========================================================
-* Security fix: Strengthened xmlrpc auth. Thanks to Egidio Romano
-* Security fix: Strengthened categories ordering. Thanks to Egidio Romano
+* Security fix: Strenghened xmlrpc auth. Thanks to Egidio Romano
+* Security fix: Strenghened categories ordering. Thanks to Egidio Romano
 
 Dotclear 2.6.2 - 2014-01-20
Index: Makefile
===================================================================
--- Makefile	(revision 2642)
+++ Makefile	(revision 2558)
@@ -38,11 +38,25 @@
 	./themes/customCSS \
 	./themes/ductile \
-	./themes/berlin \
 	./$(DC)/themes/
 
-	## Copy built-in plugins based on DC_DISTRIB_PLUGINS constant
-	cp -pRf $$(grep DC_DISTRIB_PLUGINS inc/prepend.php | \
-		sed -e "s/.*,'//" -e "s/'.*//" | \
-		sed -e  's/\(^\|,\)/ .\/plugins\//g') \
+	## Copy built-in plugins
+	cp -pRf \
+	./plugins/aboutConfig \
+	./plugins/akismet \
+	./plugins/antispam \
+	./plugins/attachments \
+	./plugins/blogroll \
+	./plugins/blowupConfig \
+	./plugins/dclegacy \
+	./plugins/fairTrackbacks \
+	./plugins/importExport \
+	./plugins/maintenance \
+	./plugins/tags \
+	./plugins/pages \
+	./plugins/pings \
+	./plugins/simpleMenu \
+	./plugins/themeEditor \
+	./plugins/userPref \
+	./plugins/widgets \
 	./$(DC)/plugins/
 
@@ -54,4 +68,5 @@
 	find $(DC)/admin/js/ie7/*.js -exec ./build-tools/min-js.php \{\} \;
 	find $(DC)/admin/js/jquery/*.js -exec ./build-tools/min-js.php \{\} \;
+	find $(DC)/admin/js/jsToolBar/*.js -exec ./build-tools/min-js.php \{\} \;
 	find $(DC)/admin/js/jsUpload/*.js -exec ./build-tools/min-js.php \{\} \;
 	find $(DC)/plugins -name '*.js' -exec ./build-tools/min-js.php \{\} \;
@@ -119,3 +134,2 @@
 
 
-copy-plugins: clean
Index: README.md
===================================================================
--- README.md	(revision 2686)
+++ README.md	(revision 1743)
@@ -82,10 +82,4 @@
 You can submit a pull request, or feel free to use any other way you'd prefer.
 
-Repositories:
--------------
-https://hg.dotclear.org/dotclear/ (official)
-https://bitbucket.org/dotclear/dotclear (Bitbucket)
-https://github.com/dotclear/dotclear (Github, sync'ed with Bitbucket)
-
 
 [1]: http://download.dotclear.org/loader/dotclear-loader.php
Index: admin/_charte.php
===================================================================
--- admin/_charte.php	(revision 2504)
+++ admin/_charte.php	(revision 2501)
@@ -31,5 +31,4 @@
 	<script type="text/javascript" src="js/jquery/jquery.js"></script>
 	<script type="text/javascript" src="js/jquery/jquery-ui.custom.js"></script>
-	<script type="text/javascript" src="js/jquery/jquery.ui.touch-punch.js"></script>
 	<script type="text/javascript" src="js/jquery/jquery.pageTabs.js"></script>
 	<script type="text/javascript" src="js/jquery/jquery.biscuit.js"></script>
Index: admin/auth.php
===================================================================
--- admin/auth.php	(revision 2720)
+++ admin/auth.php	(revision 2566)
@@ -16,5 +16,5 @@
 if (isset($_SESSION['sess_user_id']))
 {
-	http::redirect($core->adminurl->get('admin.home'));
+	http::redirect('index.php');
 }
 
@@ -185,5 +185,5 @@
 		}
 
-		http::redirect($core->adminurl->get('admin.home'));
+		http::redirect('index.php');
 	}
 	catch (Exception $e)
@@ -243,5 +243,5 @@
 		}
 
-		http::redirect($core->adminurl->get('admin.home'));
+		http::redirect('index.php');
 	}
 	else
@@ -326,5 +326,5 @@
 <body id="dotclear-admin" class="auth">
 
-<form action="<?php echo $core->adminurl->get('admin.auth'); ?>" method="post" id="login-screen">
+<form action="auth.php" method="post" id="login-screen">
 <h1><?php echo html::escapeHTML(DC_VENDOR_NAME); ?></h1>
 
@@ -339,5 +339,5 @@
 if ($akey)
 {
-	echo '<p><a href="'.$core->adminurl->get('admin.auth').'">'.__('Back to login screen').'</a></p>';
+	echo '<p><a href="auth.php">'.__('Back to login screen').'</a></p>';
 }
 elseif ($recover)
@@ -356,5 +356,5 @@
 
 	'<div id="issue">'.
-	'<p><a href="'.$core->adminurl->get('admin.auth').'">'.__('Back to login screen').'</a></p>'.
+	'<p><a href="auth.php">'.__('Back to login screen').'</a></p>'.
 	'</div>';
 }
@@ -426,11 +426,11 @@
 		if ($safe_mode) {
 			echo
-			'<p><a href="'.$core->adminurl->get('admin.auth').'" id="normal_mode_link">'.__('Get back to normal authentication').'</a></p>';
+			'<p><a href="auth.php" id="normal_mode_link">'.__('Get back to normal authentication').'</a></p>';
 		} else {
 			echo '<p id="more"><strong>'.__('Connection issue?').'</strong></p>';
 			if ($core->auth->allowPassChange()) {
-				echo '<p><a href="'.$core->adminurl->get('admin.auth',array('recover' => 1)).'">'.__('I forgot my password').'</a></p>';
+				echo '<p><a href="auth.php?recover=1">'.__('I forgot my password').'</a></p>';
 			}
-			echo '<p><a href="'.$core->adminurl->get('admin.auth',array('safe_mode' => 1)).'" id="safe_mode_link">'.__('I want to log in in safe mode').'</a></p>';
+			echo '<p><a href="auth.php?safe_mode=1" id="safe_mode_link">'.__('I want to log in in safe mode').'</a></p>';
 		}
 
Index: admin/blog.php
===================================================================
--- admin/blog.php	(revision 2720)
+++ admin/blog.php	(revision 2566)
@@ -21,5 +21,5 @@
 
 # Create a blog
-if (!isset($_POST['id']) && (isset($_POST['create'])))
+if (!isset($_POST['id']) && !empty($_POST['blog_id']))
 {
 	$cur = $core->con->openCursor($core->prefix.'blog');
@@ -52,5 +52,5 @@
 		$core->callBehavior('adminAfterBlogCreate',$cur,$blog_id,$blog_settings);
 		dcPage::addSuccessNotice(sprintf(__('Blog "%s" successfully created'), html::escapeHTML($cur->blog_name)));
-		http::redirect($core->adminurl->get("admin.blog", array('id' => $cur->blog_id)));
+		http::redirect('blog.php?id='.$cur->blog_id);
 	}
 	catch (Exception $e)
@@ -71,5 +71,5 @@
 			array(
 				__('System') => '',
-				__('Blogs') => $core->adminurl->get("admin.blogs"),
+				__('Blogs') => 'blogs.php',
 				__('New blog') => ''
 			))
@@ -77,5 +77,5 @@
 
 	echo
-	'<form action="'.$core->adminurl->get("admin.blog").'" method="post" id="blog-form">'.
+	'<form action="blog.php" method="post" id="blog-form">'.
 
 	'<div>'.$core->formNonce().'</div>'.
@@ -83,4 +83,9 @@
 	form::field('blog_id',30,32,html::escapeHTML($blog_id)).'</p>'.
 	'<p class="form-note">'.__('At least 2 characters using letters, numbers or symbols.').'</p> ';
+
+	if ($blog_id) {
+		echo
+		'<p class="form-note warn">'.__('Please note that changing your blog ID may require changes in your public index.php file.').'</p>';
+	}
 
 	echo
@@ -94,5 +99,5 @@
 	form::textarea('blog_desc',60,5,html::escapeHTML($blog_desc)).'</p>'.
 
-	'<p><input type="submit" accesskey="s" name="create" value="'.__('Create').'" /></p>'.
+	'<p><input type="submit" accesskey="s" value="'.__('Create').'" /></p>'.
 	'</form>';
 
Index: admin/blog_del.php
===================================================================
--- admin/blog_del.php	(revision 2720)
+++ admin/blog_del.php	(revision 2566)
@@ -44,5 +44,5 @@
 			dcPage::addSuccessNotice(sprintf(__('Blog "%s" successfully deleted'), html::escapeHTML($blog_name)));
 
-			http::redirect($core->adminurl->get("admin.blogs"));
+			http::redirect('blogs.php');
 		} catch (Exception $e) {
 			$core->error->add($e->getMessage());
@@ -55,5 +55,5 @@
 		array(
 			__('System') => '',
-			__('Blogs') => $core->adminurl->get("admin.blogs"),
+			__('Blogs') => 'blogs.php',
 			__('Delete a blog') => ''
 		))
@@ -69,5 +69,5 @@
 
 	echo
-	'<form action="'.$core->adminurl->get("admin.blog.del").'" method="post">'.
+	'<form action="blog_del.php" method="post">'.
 	'<div>'.$core->formNonce().'</div>'.
 	'<p><label for="pwd">'.__('Your password:').'</label> '.
Index: admin/blog_pref.php
===================================================================
--- admin/blog_pref.php	(revision 2720)
+++ admin/blog_pref.php	(revision 2566)
@@ -26,6 +26,6 @@
 	$blog_url = $core->blog->url;
 
-	$action = $core->adminurl->get("admin.blog.pref");
-	$redir = $core->adminurl->get("admin.blog.pref");
+	$action = 'blog_pref.php';
+	$redir = 'blog_pref.php';
 }
 else
@@ -55,6 +55,6 @@
 	}
 
-	$action = $core->adminurl->get("admin.blog");
-	$redir = $core->adminurl->get("admin.blog",array('id' => "%s"));
+	$action = 'blog.php';
+	$redir = 'blog.php?id=%s';
 }
 
@@ -166,7 +166,4 @@
 	$media_img_m_size = abs((integer) $_POST['media_img_m_size']);
 	if ($media_img_m_size < 0) { $media_img_m_size = 448; }
-
-	$nb_post_for_home = abs((integer) $_POST['nb_post_for_home']);
-	if ($nb_post_for_home <= 1) { $nb_post_for_home = 1; }
 
 	$nb_post_per_page = abs((integer) $_POST['nb_post_per_page']);
@@ -234,5 +231,4 @@
 		$blog_settings->system->put('note_title_tag',$_POST['note_title_tag']);
 
-		$blog_settings->system->put('nb_post_for_home',$nb_post_for_home);
 		$blog_settings->system->put('nb_post_per_page',$nb_post_per_page);
 		$blog_settings->system->put('use_smilies',!empty($_POST['use_smilies']));
@@ -281,5 +277,5 @@
 		array(
 			__('System') => '',
-			__('Blogs') => $core->adminurl->get("admin.blogs"),
+			__('Blogs') => 'blogs.php',
 			__('Blog settings').' : '.html::escapeHTML($blog_name) => ''
 		));
@@ -296,5 +292,4 @@
 	"</script>".
 	dcPage::jsConfirmClose('blog-form').
-	$core->callBehavior('adminPostEditor').
 	dcPage::jsLoad('js/_blog_pref.js').
 
@@ -517,8 +512,4 @@
 
 	'<div class="col">'.
-	'<p><label for="nb_post_for_home" class="classic">'.sprintf(__('Display %s entries on home page'),
-	form::field('nb_post_for_home',2,3,$blog_settings->system->nb_post_for_home)).
-	'</label></p>'.
-
 	'<p><label for="nb_post_per_page" class="classic">'.sprintf(__('Display %s entries per page'),
 	form::field('nb_post_per_page',2,3,$blog_settings->system->nb_post_per_page)).
@@ -615,5 +606,5 @@
 	{
 		echo
-		'<form action="'.$core->adminurl->get("admin.blog.del").'" method="post">'.
+		'<form action="blog_del.php" method="post">'.
 		'<p><input type="submit" class="delete" value="'.__('Delete this blog').'" />'.
 		form::hidden(array('blog_id'),$blog_id).
@@ -647,5 +638,5 @@
 	{
 		if ($core->auth->isSuperAdmin()) {
-			$user_url_p = '<a href="'.$core->adminurl->get("admin.user",array('id' => '%1$s')).'">%1$s</a>';
+			$user_url_p = '<a href="user.php?id=%1$s">%1$s</a>';
 		} else {
 			$user_url_p = '%1$s';
@@ -719,5 +710,5 @@
 					'<form action="users_actions.php" method="post">'.
 					'<p class="change-user-perm"><input type="submit" class="reset" value="'.__('Change permissions').'" />'.
-					form::hidden(array('redir'),$core->adminurl->get("admin.blog.pref",array('id' => $k))).
+					form::hidden(array('redir'),'blog_pref.php?id='.$k).
 					form::hidden(array('action'),'perms').
 					form::hidden(array('users[]'),$k).
Index: admin/blog_theme.php
===================================================================
--- admin/blog_theme.php	(revision 2677)
+++ admin/blog_theme.php	(revision 2579)
@@ -133,5 +133,5 @@
 		'<p class="info vertical-separator">'.sprintf(
 			__("Visit %s repository, the resources center for Dotclear."),
-			'<a href="http://themes.dotaddict.org/galerie-dc2/">Dotaddict</a>'
+			'<a href="http://themes.dotaddict.org/dc2/">Dotaddict</a>'
 			).
 		'</p>'.
Index: admin/blogs.php
===================================================================
--- admin/blogs.php	(revision 2720)
+++ admin/blogs.php	(revision 2566)
@@ -99,9 +99,9 @@
 {
 	if ($core->auth->isSuperAdmin()) {
-		echo '<p class="top-add"><a class="button add" href="'.$core->adminurl->get("admin.blog").'">'.__('Create a new blog').'</a></p>';
+		echo '<p class="top-add"><a class="button add" href="blog.php">'.__('Create a new blog').'</a></p>';
 	}
 
 	echo
-	'<form action="'.$core->adminurl->get("admin.blogs").'" method="get" id="filters-form">'.
+	'<form action="blogs.php" method="get" id="filters-form">'.
 	'<h3 class="hidden">'.__('Filter blogs list').'</h3>'.
 
@@ -183,5 +183,5 @@
 	if ($GLOBALS['core']->auth->isSuperAdmin()) {
 		$edit_link =
-		'<a href="'.$core->adminurl->get("admin.blog",array('id' => $blog_id)).'"  title="'.sprintf(__('Edit blog settings for %s'),$blog_id).'">'.
+		'<a href="blog.php?id='.$blog_id.'"  title="'.sprintf(__('Edit blog settings for %s'),$blog_id).'">'.
 		'<img src="images/edit-mini.png" alt="'.__('Edit blog settings').'" /> '.$blog_id.'</a> ';
 	} else {
@@ -198,5 +198,5 @@
 	'<tr class="line">'.
 	'<td class="nowrap">'.$edit_link.'</td>'.
-	'<td class="maximal"><a href="'.$core->adminurl->get("admin.home",array('switchblog' => $rs->blog_id)).'" '.
+	'<td class="maximal"><a href="index.php?switchblog='.$rs->blog_id.'" '.
 	'title="'.sprintf(__('Switch to blog %s'),$rs->blog_id).'">'.
 	html::escapeHTML($rs->blog_name).'</a></td>'.
Index: admin/categories.php
===================================================================
--- admin/categories.php	(revision 2720)
+++ admin/categories.php	(revision 2709)
@@ -24,5 +24,5 @@
 	if ($c->isEmpty()) {
 		dcPage::addErrorNotice(__('This category does not exist.'));
-		http::redirect($core->adminurl->get("admin.categories"));
+		http::redirect('categories.php');
 	}
 	$name = $c->cat_title;
@@ -33,5 +33,5 @@
 		$core->blog->delCategory($cat_id);
 		dcPage::addSuccessNotice(sprintf(__('The category "%s" has been successfully deleted.'),html::escapeHTML($name)));
-		http::redirect($core->adminurl->get("admin.categories"));
+		http::redirect('categories.php');
 	} catch (Exception $e) {
 		$core->error->add($e->getMessage());
@@ -62,5 +62,5 @@
 		dcPage::addSuccessNotice(sprintf(__('The entries have been successfully moved to category "%s"'),
 			html::escapeHTML($name)));
-		http::redirect($core->adminurl->get("admin.categories"));
+		http::redirect('categories.php');
 	} catch (Exception $e) {
 		$core->error->add($e->getMessage());
@@ -79,5 +79,5 @@
 
 	dcPage::addSuccessNotice(__('Categories have been successfully reordered.'));
-	http::redirect($core->adminurl->get("admin.categories"));
+	http::redirect('categories.php');
 }
 
@@ -89,5 +89,5 @@
 		$core->blog->resetCategoriesOrder();
 		dcPage::addSuccessNotice(__('Categories order has been successfully reset.'));
-		http::redirect($core->adminurl->get("admin.categories"));
+		http::redirect('categories.php');
 	}
 	catch (Exception $e)
@@ -109,5 +109,4 @@
 	&& $rs->count()>1) {
 		$starting_script .= dcPage::jsLoad('js/jquery/jquery-ui.custom.js');
-		$starting_script .= dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js');
 		$starting_script .= dcPage::jsLoad('js/jquery/jquery.mjs.nestedSortable.js');
 }
@@ -135,5 +134,5 @@
 
 echo
-'<p class="top-add"><a class="button add" href="'.$core->adminurl->get("admin.category").'">'.__('New category').'</a></p>';
+'<p class="top-add"><a class="button add" href="category.php">'.__('New category').'</a></p>';
 
 echo
@@ -146,5 +145,5 @@
 {
 	echo
-	'<form action="'.$core->adminurl->get("admin.categories").'" method="post" id="form-categories">'.
+	'<form action="categories.php" method="post" id="form-categories">'.
 	'<div id="categories">';
 
@@ -165,8 +164,6 @@
 
 		echo
-		'<p class="cat-title"><label class="classic" for="cat_'.$rs->cat_id.'"><a href="'.
-		$core->adminurl->get("admin.category",array('id' => $rs->cat_id)).'">'.html::escapeHTML($rs->cat_title).
-		'</a></label> </p>'.
-		'<p class="cat-nb-posts">(<a href="'.$core->adminurl->get("admin.posts",array('cat_id' => $rs->cat_id)).'">'.
+		'<p class="cat-title"><label class="classic" for="cat_'.$rs->cat_id.'"><a href="category.php?id='.$rs->cat_id.'">'.html::escapeHTML($rs->cat_title).'</a></label> </p>'.
+		'<p class="cat-nb-posts">(<a href="posts.php?cat_id='.$rs->cat_id.'">'.
 		sprintf(($rs->nb_post > 1 ? __('%d entries') : __('%d entry') ),$rs->nb_post).'</a>'.
 		', '.__('total:').' '.$rs->nb_total.')</p>'.
Index: admin/category.php
===================================================================
--- admin/category.php	(revision 2720)
+++ admin/category.php	(revision 2566)
@@ -85,5 +85,5 @@
 			$core->blog->setCategoryParent($cat_id,$new_parent);
 			dcPage::addSuccessNotice(__('The category has been successfully moved'));
-			http::redirect($core->adminurl->get("admin.categories"));
+			http::redirect('categories.php');
 		} catch (Exception $e) {
 			$core->error->add($e->getMessage());
@@ -98,5 +98,5 @@
 		$core->blog->setCategoryPosition($cat_id,(integer) $_POST['cat_sibling'],$_POST['cat_move']);
 		dcPage::addSuccessNotice(__('The category has been successfully moved'));
-		http::redirect($core->adminurl->get("admin.categories"));
+		http::redirect('categories.php');
 	} catch (Exception $e) {
 		$core->error->add($e->getMessage());
@@ -136,5 +136,5 @@
 			dcPage::addSuccessNotice(__('The category has been successfully updated.'));
 
-			http::redirect($core->adminurl->get("admin.category",array('id' => $_POST['id'])));
+			http::redirect('category.php?id='.$_POST['id']);
 		}
 		# Create category
@@ -151,5 +151,5 @@
 			dcPage::addSuccessNotice(sprintf(__('The category "%s" has been successfully created.'),
 				html::escapeHTML($cur->cat_title)));
-			http::redirect($core->adminurl->get("admin.categories"));
+			http::redirect('categories.php');
 		}
 	}
@@ -165,9 +165,9 @@
 $elements = array(
 	html::escapeHTML($core->blog->name) => '',
-	__('Categories') => $core->adminurl->get("admin.categories")
+	__('Categories') => 'categories.php'
 	);
 if ($cat_id) {
 	while($parents->fetch()) {
-		$elements[html::escapeHTML($parents->cat_title)] = $core->adminurl->get("admin.category",array('id'=> $parents->cat_id));
+		$elements[html::escapeHTML($parents->cat_title)] = 'category.php?id='.$parents->cat_id;
 	}
 }
@@ -176,6 +176,6 @@
 dcPage::open($title,
 	dcPage::jsConfirmClose('category-form').
+	dcPage::jsToolBar().
 	dcPage::jsLoad('js/_category.js'),
-	$core->callBehavior('adminPostEditor').
 	dcPage::breadcrumb($elements)
 );
@@ -186,5 +186,5 @@
 
 echo
-'<form action="'.$core->adminurl->get("admin.category").'" method="post" id="category-form">'.
+'<form action="category.php" method="post" id="category-form">'.
 '<h3>'.__('Category information').'</h3>'.
 '<p><label class="required" for="cat_title"><abbr title="'.__('Required field').'">*</abbr> '.__('Name:').'</label> '.
@@ -232,5 +232,5 @@
 	'<div class="col">'.
 
-	'<form action="'.$core->adminurl->get("admin.category").'" method="post" class="fieldset">'.
+	'<form action="category.php" method="post" class="fieldset">'.
 	'<h4>'.__('Category parent').'</h4>'.
 	'<p><label for="cat_parent" class="classic">'.__('Parent:').'</label> '.
@@ -244,5 +244,5 @@
 		echo
 		'<div class="col">'.
-		'<form action="'.$core->adminurl->get("admin.category").'" method="post" class="fieldset">'.
+		'<form action="category.php" method="post" class="fieldset">'.
 		'<h4>'.__('Category sibling').'</h4>'.
 		'<p><label class="classic" for="cat_sibling">'.__('Move current category').'</label> '.
Index: admin/comment.php
===================================================================
--- admin/comment.php	(revision 2720)
+++ admin/comment.php	(revision 2566)
@@ -91,5 +91,5 @@
 
 if (!$comment_id && !$core->error->flag()) {
-	$core->error->add(__('No comments'));
+	$core->error->add(__('No comment'));
 }
 
@@ -133,5 +133,5 @@
 
 			dcPage::addSuccessNotice(__('Comment has been successfully updated.'));
-			http::redirect($core->adminurl->get("admin.comment",array('id' => $comment_id)));
+			http::redirect('comment.php?id='.$comment_id);
 		}
 		catch (Exception $e)
@@ -181,6 +181,6 @@
 dcPage::open(__('Edit comment'),
 	dcPage::jsConfirmClose('comment-form').
+	dcPage::jsToolBar().
 	dcPage::jsLoad('js/_comment.js').
-	$core->callBehavior('adminPostEditor').
 	# --BEHAVIOR-- adminCommentHeaders
 	$core->callBehavior('adminCommentHeaders'),
@@ -205,9 +205,9 @@
 
 	echo
-	'<form action="'.$core->adminurl->get("admin.comment").'" method="post" id="comment-form">'.
+	'<form action="comment.php" method="post" id="comment-form">'.
 	'<div class="fieldset">'.
 	'<h3>'.__('Information collected').'</h3>'.
 	'<p>'.__('IP address:').' '.
-	'<a href="'.$core->adminurl->get("admin.comments",array('ip' => $comment_ip)).'">'.$comment_ip.'</a></p>'.
+	'<a href="comments.php?ip='.$comment_ip.'">'.$comment_ip.'</a></p>'.
 
 	'<p>'.__('Date:').' '.
Index: admin/comments.php
===================================================================
--- admin/comments.php	(revision 2720)
+++ admin/comments.php	(revision 2566)
@@ -20,5 +20,5 @@
 		$core->blog->delJunkComments();
 		$_SESSION['comments_del_spam'] = true;
-		http::redirect($core->adminurl->get("admin.comments"));
+		http::redirect('comments.php');
 	} catch (Exception $e) {
 		$core->error->add($e->getMessage());
@@ -136,5 +136,5 @@
 }
 
-$comments_actions_page = new dcCommentsActionsPage($core,$core->adminurl->get("admin.comments"));
+$comments_actions_page = new dcCommentsActionsPage($core,'comments.php');
 
 if ($comments_actions_page->process()) {
@@ -191,13 +191,13 @@
 
 		echo
-			'<form action="'.$core->adminurl->get("admin.comments").'" method="post" class="fieldset">';
+			'<form action="comments.php" method="post" class="fieldset">';
 
 		if (!$with_spam || ($status != -2)) {
 			if ($spam_count == 1) {
 				echo '<p>'.sprintf(__('You have one spam comment.'),'<strong>'.$spam_count.'</strong>').' '.
-				'<a href="'.$core->adminurl->get("admin.comments",array('status' => -2)).'">'.__('Show it.').'</a>.</p>';
+				'<a href="comments.php?status=-2">'.__('Show it.').'</a>.</p>';
 			} elseif ($spam_count > 1) {
 				echo '<p>'.sprintf(__('You have %s spam comments.'),'<strong>'.$spam_count.'</strong>').' '.
-				'<a href="'.$core->adminurl->get("admin.comments",array('status' => -2)).'">'.__('Show them.').'</a>.</p>';
+				'<a href="comments.php?status=-2">'.__('Show them.').'</a>.</p>';
 			}
 		}
@@ -215,5 +215,5 @@
 
 	echo
-	'<form action="'.$core->adminurl->get("admin.comments").'" method="get" id="filters-form">'.
+	'<form action="comments.php" method="get" id="filters-form">'.
 	'<h3 class="hidden">'.__('Filter comments and trackbacks list').'</h3>'.
 	'<div class="table">'.
@@ -252,5 +252,5 @@
 	# Show comments
 	$comment_list->display($page,$nb_per_page,
-	'<form action="'.$core->adminurl->get("admin.comments").'" method="post" id="form-comments">'.
+	'<form action="comments.php" method="post" id="form-comments">'.
 
 	'%s'.
Index: admin/comments_actions.php
===================================================================
--- admin/comments_actions.php	(revision 2720)
+++ admin/comments_actions.php	(revision 2566)
@@ -24,5 +24,5 @@
 	$args['redir'] = $_REQUEST['redir'];
 } else {
-	$uri = $core->adminurl->get("admin.comments");
+	$uri = 'comments.php';
 	$args=array();
 }
Index: admin/help.php
===================================================================
--- admin/help.php	(revision 2720)
+++ admin/help.php	(revision 2566)
@@ -76,5 +76,5 @@
 	$breadcrumb = dcPage::breadcrumb(
 		array(
-			__('Global help') => $core->adminurl->get("admin.help"),
+			__('Global help') => 'help.php',
 			$content_array['title'] => ''
 		));
Index: admin/index.php
===================================================================
--- admin/index.php	(revision 2720)
+++ admin/index.php	(revision 2566)
@@ -21,5 +21,5 @@
 	try {
 		$core->setUserDefaultBlog($core->auth->userID(),$core->blog->id);
-		http::redirect($core->adminurl->get("admin.home"));
+		http::redirect('index.php');
 	} catch (Exception $e) {
 		$core->error->add($e->getMessage());
@@ -36,5 +36,5 @@
 		setcookie('dc_admin',false,-600,'','',DC_ADMIN_SSL);
 	}
-	http::redirect($core->adminurl->get("admin.auth"));
+	http::redirect('auth.php');
 	exit;
 }
@@ -171,6 +171,6 @@
 -------------------------------------------------------- */
 dcPage::open(__('Dashboard'),
+	dcPage::jsToolBar().
 	dcPage::jsLoad('js/_index.js').
-	$core->callBehavior('adminPostEditor').
 	# --BEHAVIOR-- adminDashboardHeaders
 	$core->callBehavior('adminDashboardHeaders'),
@@ -193,6 +193,6 @@
 		echo
 		'<div class="dc-update"><h3>'.sprintf(__('Dotclear %s is available!'),$new_v).'</h3> '.
-		'<p><a class="button submit" href="'.$core->adminurl->get("admin.update").'">'.sprintf(__('Upgrade now'),$new_v).'</a> '.
-		'<a class="button" href="'.$core->adminurl->get("admin.update", array('hide_msg' => 1)).'">'.__('Remind me later').'</a>'.
+		'<p><a class="button submit" href="update.php">'.sprintf(__('Upgrade now'),$new_v).'</a> '.
+		'<a class="button" href="update.php?hide_msg=1">'.__('Remind me later').'</a>'.
 		($version_info ? ' </p>'.
 		'<p class="updt-info"><a href="'.$version_info.'">'.__('Information about this version').'</a>' : '').'</p>'.
@@ -203,5 +203,5 @@
 if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->getBlogCount() > 1) {
 	echo
-	'<p><a href="'.$core->adminurl->get("admin.home",array('default_blog' => 1)).'" class="button">'.__('Make this blog my default blog').'</a></p>';
+	'<p><a href="index.php?default_blog=1" class="button">'.__('Make this blog my default blog').'</a></p>';
 }
 
@@ -325,5 +325,5 @@
 		'<div id="quick">'.
 		'<h3>'.__('Quick entry').'</h3>'.
-		'<form id="quick-entry" action="'.$core->adminurl->get('admin.post').'" method="post" class="fieldset">'.
+		'<form id="quick-entry" action="post.php" method="post" class="fieldset">'.
 		'<h4>'.__('New entry').'</h4>'.
 		'<p class="col"><label for="post_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label>'.
Index: admin/js/_category.js
===================================================================
--- admin/js/_category.js	(revision 2614)
+++ admin/js/_category.js	(revision 2566)
@@ -2,7 +2,5 @@
 	dotclear.hideLockable();
 
-	if ($.isFunction('jsToolBar')) {
-		var tbCategory = new jsToolBar(document.getElementById('cat_desc'));
-		tbCategory.draw('xhtml');
-	}
+	var tbCategory = new jsToolBar(document.getElementById('cat_desc'));
+	tbCategory.draw('xhtml');
 });
Index: admin/js/_comment.js
===================================================================
--- admin/js/_comment.js	(revision 2614)
+++ admin/js/_comment.js	(revision 2566)
@@ -1,7 +1,7 @@
 $(function() {
-	if ($.isFunction('jsToolBar')) {
-		var tbComment = new jsToolBar(document.getElementById('comment_content'));
-		tbComment.draw('xhtml');
-	}
+	if (!document.getElementById) { return; }
+
+	var tbComment = new jsToolBar(document.getElementById('comment_content'));
+	tbComment.draw('xhtml');
 
 	$('#comment-form input[name="delete"]').click(function() {
Index: admin/js/_index.js
===================================================================
--- admin/js/_index.js	(revision 2614)
+++ admin/js/_index.js	(revision 1699)
@@ -2,8 +2,6 @@
 	var f = $('#quick-entry');
 	if (f.length > 0) {
-		if ($.isFunction('jsToolBar')) {
-			var contentTb = new jsToolBar($('#post_content',f)[0]);
-			contentTb.switchMode($('#post_format',f).val());
-		}
+		var contentTb = new jsToolBar($('#post_content',f)[0]);
+		contentTb.switchMode($('#post_format',f).val());
 
 		$('input[name=save]',f).click(function() {
@@ -23,5 +21,5 @@
 
 		function quickPost(f,status) {
-			if ($.isFunction('jsToolBar') && (contentTb.getMode() == 'wysiwyg')) {
+			if (contentTb.getMode() == 'wysiwyg') {
 				contentTb.syncContents('iframe');
 			}
@@ -57,5 +55,5 @@
 					$('#post_title',f).val('');
 					$('#post_content',f).val('');
-					if ($.isFunction('jsToolBar') &&  (contentTb.getMode() == 'wysiwyg')) {
+					if (contentTb.getMode() == 'wysiwyg') {
 						contentTb.syncContents('textarea');
 					}
Index: admin/js/_post.js
===================================================================
--- admin/js/_post.js	(revision 2614)
+++ admin/js/_post.js	(revision 2556)
@@ -51,4 +51,36 @@
 
 $(function() {
+	if (!document.getElementById) { return; }
+
+	if (document.getElementById('edit-entry'))
+	{
+		// Get document format and prepare toolbars
+		var formatField = $('#post_format').get(0);
+		var last_post_format = $(formatField).val();
+		$(formatField).change(function() {
+			// Confirm post format change
+			if(window.confirm(dotclear.msg.confirm_change_post_format_noconvert)){
+				excerptTb.switchMode(this.value);
+				contentTb.switchMode(this.value);
+				last_post_format = $(this).val();
+			}else{
+				// Restore last format if change cancelled
+				$(this).val(last_post_format);
+			}
+
+			$('.format_control > *').addClass('hide');
+			$('.format_control:not(.control_no_'+$(this).val()+') > *').removeClass('hide');
+		});
+
+		var excerptTb = new jsToolBar(document.getElementById('post_excerpt'));
+		var contentTb = new jsToolBar(document.getElementById('post_content'));
+		excerptTb.context = contentTb.context = 'post';
+	}
+
+	if (document.getElementById('comment_content')) {
+		var commentTb = new jsToolBar(document.getElementById('comment_content'));
+		commentTb.draw('xhtml');
+	}
+
 	// Post preview
 	$('#post-preview').modalWeb($(window).width()-40,$(window).height()-40);
@@ -67,4 +99,72 @@
 			return window.confirm(dotclear.msg.confirm_delete_post);
 		});
+
+		// Markup validator
+		var v = $('<div class="format_control"><p><a id="a-validator"></a></p><div/>').get(0);
+		$('.format_control').before(v);
+		var a = $('#a-validator').get(0);
+		a.href = '#';
+		a.className = 'button ';
+		$(a).click(function() {
+
+			excerpt_content = $('#post_excerpt').css('display') != 'none' ? $('#post_excerpt').val() : $('#excerpt-area iframe').contents().find('body').html();
+			post_content	= $('#post_content').css('display') != 'none' ? $('#post_content').val() : $('#content-area iframe').contents().find('body').html();
+
+			var params = {
+				xd_check: dotclear.nonce,
+				f: 'validatePostMarkup',
+				excerpt: excerpt_content,
+				content: post_content,
+				format: $('#post_format').get(0).value,
+				lang: $('#post_lang').get(0).value
+			};
+
+			$.post('services.php',params,function(data) {
+				if ($(data).find('rsp').attr('status') != 'ok') {
+					alert($(data).find('rsp message').text());
+					return false;
+				}
+
+				$('.message, .success, .error, .warning-msg').remove();
+
+				if ($(data).find('valid').text() == 1) {
+					var p = document.createElement('p');
+					p.id = 'markup-validator';
+
+					$(p).addClass('success');
+					$(p).text(dotclear.msg.xhtml_valid);
+					$('#entry-content h3').after(p);
+					$(p).backgroundFade({sColor: dotclear.fadeColor.beginValidatorMsg, eColor: dotclear.fadeColor.endValidatorMsg, steps: 50},function() {
+							$(this).backgroundFade({sColor: dotclear.fadeColor.endValidatorMsg, eColor: dotclear.fadeColor.beginValidatorMsg});
+					});
+				} else {
+					var div = document.createElement('div');
+					div.id = 'markup-validator';
+
+					$(div).addClass('error');
+					$(div).html('<p><strong>' + dotclear.msg.xhtml_not_valid + '</strong></p>' + $(data).find('errors').text());
+					$('#entry-content h3').after(div);
+					$(div).backgroundFade({sColor: dotclear.fadeColor.beginValidatorErr,eColor: dotclear.fadeColor.endValidatorErr, steps: 50},function() {
+							$(this).backgroundFade({sColor: dotclear.fadeColor.endValidatorErr, eColor: dotclear.fadeColor.beginValidatorErr});
+					});
+				}
+
+				if ( $('#post_excerpt').text() != excerpt_content || $('#post_content').text() != post_content ) {
+					var pn = document.createElement('p');
+					$(pn).addClass('warning-msg');
+					$(pn).text(dotclear.msg.warning_validate_no_save_content);
+					$('#entry-content h3').after(pn);
+				}
+
+				return false;
+			});
+
+			return false;
+		});
+
+		a.appendChild(document.createTextNode(dotclear.msg.xhtml_validator));
+
+		$('.format_control > *').addClass('hide');
+		$('.format_control:not(.control_no_'+last_post_format+') > *').removeClass('hide');
 
 		// Hide some fields
@@ -117,4 +217,8 @@
 			hide: $('#post_excerpt').val() == ''
 		});
+
+		// Load toolbars
+		contentTb.switchMode(formatField.value);
+		excerptTb.switchMode(formatField.value);
 
 		// Replace attachment remove links by a POST form submit
@@ -129,4 +233,13 @@
 			return false;
 		});
+
+		// Check unsaved changes before XHTML conversion
+		var excerpt = $('#post_excerpt').val();
+		var content = $('#post_content').val();
+		$('#convert-xhtml').click(function() {
+			if (excerpt != $('#post_excerpt').val() || content != $('#post_content').val()) {
+				return window.confirm(dotclear.msg.confirm_change_post_format);
+			}
+		});
 	});
 
Index: admin/js/_preferences.js
===================================================================
--- admin/js/_preferences.js	(revision 2679)
+++ admin/js/_preferences.js	(revision 2566)
@@ -20,17 +20,3 @@
 		return true;
 	});
-
-	// choose format depending of editor based on formats_by_editor defined in preferences.php
-	if (formats_by_editor !== undefined) {
-		var _editors = $.parseJSON(formats_by_editor);
-	
-		$('#user_editor').change(function() {
-			if (!_editors[$(this).val()]) {return;}
-			
-			$('#user_post_format option').remove();
-			for (var format in _editors[$(this).val()]) {
-				$('#user_post_format').append('<option value="'+format+'">'+format+'</option>');
-			}
-		});
-	}
 });
Index: admin/js/common.js
===================================================================
--- admin/js/common.js	(revision 2689)
+++ admin/js/common.js	(revision 2566)
@@ -290,5 +290,5 @@
 	var peInPage = $('#help-button').offset().top;
 	$('#help-button').addClass("floatable");
-	var peInFloat = $('#help-button').offset().top - $(window).scrollTop();
+	var peInFloat = $('#help-button').offset().top;
 	$('#help-button').removeClass("floatable");
 	$(window).scroll(
Index: dmin/js/jquery/jquery.ui.touch-punch.js
===================================================================
--- admin/js/jquery/jquery.ui.touch-punch.js	(revision 2495)
+++ 	(revision )
@@ -1,160 +1,0 @@
-/*!
- * jQuery UI Touch Punch 0.2.2
- *
- * Copyright 2011, Dave Furfero
- * Dual licensed under the MIT or GPL Version 2 licenses.
- *
- * Depends:
- *  jquery.ui.widget.js
- *  jquery.ui.mouse.js
- */
-(function ($) {
-
-  // Detect touch support
-  $.support.touch = 'ontouchend' in document;
-
-  // Ignore browsers without touch support
-  if (!$.support.touch) {
-    return;
-  }
-
-  var mouseProto = $.ui.mouse.prototype,
-      _mouseInit = mouseProto._mouseInit,
-      touchHandled;
-
-  /**
-   * Simulate a mouse event based on a corresponding touch event
-   * @param {Object} event A touch event
-   * @param {String} simulatedType The corresponding mouse event
-   */
-  function simulateMouseEvent (event, simulatedType) {
-
-    // Ignore multi-touch events
-    if (event.originalEvent.touches.length > 1) {
-      return;
-    }
-
-    event.preventDefault();
-
-    var touch = event.originalEvent.changedTouches[0],
-        simulatedEvent = document.createEvent('MouseEvents');
-    
-    // Initialize the simulated mouse event using the touch event's coordinates
-    simulatedEvent.initMouseEvent(
-      simulatedType,    // type
-      true,             // bubbles                    
-      true,             // cancelable                 
-      window,           // view                       
-      1,                // detail                     
-      touch.screenX,    // screenX                    
-      touch.screenY,    // screenY                    
-      touch.clientX,    // clientX                    
-      touch.clientY,    // clientY                    
-      false,            // ctrlKey                    
-      false,            // altKey                     
-      false,            // shiftKey                   
-      false,            // metaKey                    
-      0,                // button                     
-      null              // relatedTarget              
-    );
-
-    // Dispatch the simulated event to the target element
-    event.target.dispatchEvent(simulatedEvent);
-  }
-
-  /**
-   * Handle the jQuery UI widget's touchstart events
-   * @param {Object} event The widget element's touchstart event
-   */
-  mouseProto._touchStart = function (event) {
-
-    var self = this;
-
-    // Ignore the event if another widget is already being handled
-    if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {
-      return;
-    }
-
-    // Set the flag to prevent other widgets from inheriting the touch event
-    touchHandled = true;
-
-    // Track movement to determine if interaction was a click
-    self._touchMoved = false;
-
-    // Simulate the mouseover event
-    simulateMouseEvent(event, 'mouseover');
-
-    // Simulate the mousemove event
-    simulateMouseEvent(event, 'mousemove');
-
-    // Simulate the mousedown event
-    simulateMouseEvent(event, 'mousedown');
-  };
-
-  /**
-   * Handle the jQuery UI widget's touchmove events
-   * @param {Object} event The document's touchmove event
-   */
-  mouseProto._touchMove = function (event) {
-
-    // Ignore event if not handled
-    if (!touchHandled) {
-      return;
-    }
-
-    // Interaction was not a click
-    this._touchMoved = true;
-
-    // Simulate the mousemove event
-    simulateMouseEvent(event, 'mousemove');
-  };
-
-  /**
-   * Handle the jQuery UI widget's touchend events
-   * @param {Object} event The document's touchend event
-   */
-  mouseProto._touchEnd = function (event) {
-
-    // Ignore event if not handled
-    if (!touchHandled) {
-      return;
-    }
-
-    // Simulate the mouseup event
-    simulateMouseEvent(event, 'mouseup');
-
-    // Simulate the mouseout event
-    simulateMouseEvent(event, 'mouseout');
-
-    // If the touch interaction did not move, it should trigger a click
-    if (!this._touchMoved) {
-
-      // Simulate the click event
-      simulateMouseEvent(event, 'click');
-    }
-
-    // Unset the flag to allow other widgets to inherit the touch event
-    touchHandled = false;
-  };
-
-  /**
-   * A duck punch of the $.ui.mouse _mouseInit method to support touch events.
-   * This method extends the widget with bound touch event handlers that
-   * translate touch events to mouse events and pass them to the widget's
-   * original mouse event handling methods.
-   */
-  mouseProto._mouseInit = function () {
-    
-    var self = this;
-
-    // Delegate the touch handlers to the widget's element
-    self.element
-      .bind('touchstart', $.proxy(self, '_touchStart'))
-      .bind('touchmove', $.proxy(self, '_touchMove'))
-      .bind('touchend', $.proxy(self, '_touchEnd'));
-
-    // Call the original $.ui.mouse init method
-    _mouseInit.call(self);
-  };
-
-})(jQuery);
Index: admin/js/jsToolBar/jsToolBar.dotclear.js
===================================================================
--- admin/js/jsToolBar/jsToolBar.dotclear.js	(revision 2566)
+++ admin/js/jsToolBar/jsToolBar.dotclear.js	(revision 2566)
@@ -0,0 +1,386 @@
+/* Change link button actions
+-------------------------------------------------------- */
+jsToolBar.prototype.elements.link.data = {};
+jsToolBar.prototype.elements.link.fncall = {};
+jsToolBar.prototype.elements.link.open_url = 'popup_link.php';
+
+jsToolBar.prototype.elements.link.popup = function (args) {
+	window.the_toolbar = this;
+	args = args || '';
+
+	this.elements.link.data = {};
+	var url = this.elements.link.open_url+args;
+
+	var p_win = window.open(url,'dc_popup',
+	'alwaysRaised=yes,dependent=yes,toolbar=yes,height=420,width=520,'+
+	'menubar=no,resizable=yes,scrollbars=yes,status=no');
+};
+
+jsToolBar.prototype.elements.link.fn.wiki = function() {
+	this.elements.link.popup.call(this,'?hreflang='+this.elements.link.default_hreflang);
+};
+jsToolBar.prototype.elements.link.fncall.wiki = function() {
+	var data = this.elements.link.data;
+
+	if (data.href == '') { return; }
+
+	var etag = '|'+data.href;
+	if (data.hreflang) { etag += '|'+data.hreflang; }
+
+	if (data.title) {
+		if (!data.hreflang) { etag += '|'; }
+		etag += '|'+data.title;
+	}
+
+	if (data.content) {
+		this.encloseSelection('['+data.content,etag+']');
+	} else {
+		this.encloseSelection('[',etag+']');
+	}
+};
+
+jsToolBar.prototype.elements.link.fn.xhtml = function() {
+	this.elements.link.popup.call(this,'?hreflang='+this.elements.link.default_hreflang);
+};
+jsToolBar.prototype.elements.link.fncall.xhtml = function() {
+	var data = this.elements.link.data;
+
+	if (data.href == '') { return; }
+
+	var stag = '<a href="'+data.href+'"';
+
+	if (data.hreflang) { stag += ' hreflang="'+data.hreflang+'"'; }
+	if (data.title) { stag += ' title="'+data.title+'"'; }
+	stag += '>';
+	var etag = '</a>';
+
+	if (data.content) {
+		this.encloseSelection('','',function() {
+			return stag + data.content + etag;
+		});
+	} else {
+		this.encloseSelection(stag,etag);
+	}
+};
+
+jsToolBar.prototype.elements.link.fn.wysiwyg = function() {
+	var href, title, hreflang;
+	href = title = hreflang = '';
+	hreflang = this.elements.link.default_hreflang;
+
+	var a = this.getAncestor();
+
+	if (a.tagName == 'a') {
+		href= a.tag.href || '';
+		title = a.tag.title || '';
+		hreflang = a.tag.hreflang || '';
+	}
+
+	this.elements.link.popup.call(this,'?href='+href+'&hreflang='+hreflang+'&title='+title);
+};
+jsToolBar.prototype.elements.link.fncall.wysiwyg = function() {
+	var data = this.elements.link.data;
+
+	var a = this.getAncestor();
+
+	if (a.tagName == 'a') {
+		if (data.href == '') {
+			// Remove link
+			this.replaceNodeByContent(a.tag);
+			this.iwin.focus();
+			return;
+		} else {
+			// Update link
+			a.tag.href = data.href;
+			if (data.hreflang) {
+				a.tag.setAttribute('hreflang',data.hreflang);
+			} else {
+				a.tag.removeAttribute('hreflang');
+			}
+			if (data.title) {
+				a.tag.setAttribute('title',data.title);
+			} else {
+				a.tag.removeAttribute('title');
+			}
+			return;
+		}
+	}
+
+	// Create link
+	if (data.content) {
+		var n = document.createTextNode(data.content);
+	} else {
+		var n = this.getSelectedNode();
+	}
+	var a = this.iwin.document.createElement('a');
+	a.href = data.href;
+	if (data.hreflang) a.setAttribute('hreflang',data.hreflang);
+	if (data.title) a.setAttribute('title',data.title);
+	a.appendChild(n);
+	this.insertNode(a);
+};
+jsToolBar.prototype.getAncestor = function() {
+	var res = {};
+	var range, commonAncestorContainer;
+
+	if (this.iwin.getSelection) { //gecko
+		var selection = this.iwin.getSelection();
+		range = selection.getRangeAt(0);
+		commonAncestorContainer = range.commonAncestorContainer;
+		while (commonAncestorContainer.nodeType != 1) {
+			commonAncestorContainer = commonAncestorContainer.parentNode;
+		}
+	} else { //ie
+		range = this.iwin.document.selection.createRange();
+		commonAncestorContainer = range.parentElement();
+	}
+
+	var ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
+	while (ancestorTagName!='a' && ancestorTagName!='body') {
+		commonAncestorContainer = commonAncestorContainer.parentNode;
+		ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
+	}
+
+	res.tag = commonAncestorContainer;
+	res.tagName = ancestorTagName;
+
+	return res;
+};
+
+/* Image selector
+-------------------------------------------------------- */
+jsToolBar.prototype.elements.img_select = {
+	type: 'button',
+	title: 'Image chooser',
+	fn: {},
+	fncall: {},
+	open_url: 'media.php?popup=1',
+	data: {},
+	popup: function() {
+		window.the_toolbar = this;
+		this.elements.img_select.data = {};
+
+		var p_win = window.open(this.elements.img_select.open_url,'dc_popup',
+		'alwaysRaised=yes,dependent=yes,toolbar=yes,height=500,width=760,'+
+		'menubar=no,resizable=yes,scrollbars=yes,status=no');
+	}
+};
+jsToolBar.prototype.elements.img_select.fn.wiki = function() {
+	this.elements.img_select.popup.call(this);
+};
+jsToolBar.prototype.elements.img_select.fncall.wiki = function() {
+	var d = this.elements.img_select.data;
+	if (d.src == undefined) { return; }
+
+	this.encloseSelection('','',function(str) {
+		var alt = (str) ? str : d.title;
+		var res = '(('+d.src+'|'+alt;
+
+		if (d.alignment == 'left') {
+			res += '|L';
+		} else if (d.alignment == 'right') {
+			res += '|R';
+		} else if (d.alignment == 'center') {
+			res += '|C';
+		} else if (d.description) {
+			res += '|';
+		}
+
+		if (d.description) {
+			res += '|'+d.description;
+		}
+
+		res += '))';
+
+		if (d.link) {
+			var ltitle = (alt) ? '||'+alt : '';
+			res = '['+res+'|'+d.url+ltitle+']';
+		}
+
+		return res;
+	});
+};
+jsToolBar.prototype.elements.img_select.fn.xhtml = function() {
+	this.elements.img_select.popup.call(this);
+};
+jsToolBar.prototype.elements.img_select.fncall.xhtml = function() {
+	var d = this.elements.img_select.data;
+	if (d.src == undefined) { return; }
+
+	this.encloseSelection('','',function(str) {
+		var alt = (str) ? str : d.title;
+		var res = '<img src="'+d.src+'" alt="'+alt.replace('&','&amp;').replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')+'"';
+
+		if (d.alignment == 'left') {
+			res += ' style="float: left; margin: 0 1em 1em 0;"';
+		} else if (d.alignment == 'right') {
+			res += ' style="float: right; margin: 0 0 1em 1em;"';
+		} else if (d.alignment == 'center') {
+			res += ' style="margin: 0 auto; display: block;"';
+		}
+
+		if (d.description) {
+			res += ' title="'+d.description.replace('&','&amp;').replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')+'"';
+		}
+
+		res += ' />';
+
+		if (d.link) {
+			var ltitle = (alt) ? ' title="'+alt.replace('&','&amp;').replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')+'"' : '';
+			res = '<a href="'+d.url+'"'+ltitle+'>'+res+'</a>';
+		}
+
+		return res;
+	});
+};
+
+jsToolBar.prototype.elements.img.fn.wysiwyg = function() {
+	var src = this.elements.img.prompt.call(this);
+	if (!src) { return; }
+
+	var img = this.iwin.document.createElement('img');
+	img.src = src;
+	img.setAttribute('alt',this.getSelectedText());
+
+	this.insertNode(img);
+};
+
+jsToolBar.prototype.elements.img_select.fn.wysiwyg = function() {
+	this.elements.img_select.popup.call(this);
+};
+jsToolBar.prototype.elements.img_select.fncall.wysiwyg = function() {
+	var d = this.elements.img_select.data;
+	var alt = (this.getSelectedText()) ? this.getSelectedText() : d.title;
+	if (d.src == undefined) { return; }
+
+	var img = this.iwin.document.createElement('img');
+	img.src = d.src;
+	img.setAttribute('alt',alt);
+
+
+	if (d.alignment == 'left') {
+		if (img.style.styleFloat != undefined) {
+			img.style.styleFloat = 'left';
+		} else {
+			img.style.cssFloat = 'left';
+		}
+		img.style.marginTop = 0;
+		img.style.marginRight = '1em';
+		img.style.marginBottom = '1em';
+		img.style.marginLeft = 0;
+	} else if (d.alignment == 'right') {
+		if (img.style.styleFloat != undefined) {
+			img.style.styleFloat = 'right';
+		} else {
+			img.style.cssFloat = 'right';
+		}
+		img.style.marginTop = 0;
+		img.style.marginRight = 0;
+		img.style.marginBottom = '1em';
+		img.style.marginLeft = '1em';
+	} else if (d.alignment == 'center') {
+		img.style.marginTop = 0;
+		img.style.marginRight = 'auto';
+		img.style.marginBottom = 0;
+		img.style.marginLeft = 'auto';
+		img.style.display = 'block';
+	}
+
+	if (d.description) {
+		img.setAttribute('title',d.description);
+	}
+
+	if (d.link) {
+		var a = this.iwin.document.createElement('a');
+		a.href = d.url;
+		if (alt) {
+			a.setAttribute('title',alt);
+		}
+		a.appendChild(img);
+		this.insertNode(a);
+	} else {
+		this.insertNode(img);
+	}
+};
+
+// MP3 helpers
+jsToolBar.prototype.elements.mp3_insert = { fncall: {}, data: {} };
+jsToolBar.prototype.elements.mp3_insert.fncall.wiki = function() {
+	var d = this.elements.mp3_insert.data;
+	if (d.player == undefined) { return; }
+
+	this.encloseSelection('','',function(str) {
+		return '\n///html\n' + d.player + '///\n';
+	});
+};
+jsToolBar.prototype.elements.mp3_insert.fncall.xhtml = function() {
+	var d = this.elements.mp3_insert.data;
+	if (d.player == undefined) { return; }
+
+	this.encloseSelection('','',function(str) {
+		return '\n' + d.player + '\n';
+	});
+};
+jsToolBar.prototype.elements.mp3_insert.fncall.wysiwyg = function() {
+	return;
+};
+
+// FLV helpers
+jsToolBar.prototype.elements.flv_insert = { fncall: {}, data: {} };
+jsToolBar.prototype.elements.flv_insert.fncall.wiki = function() {
+	var d = this.elements.flv_insert.data;
+	if (d.player == undefined) { return; }
+
+	this.encloseSelection('','',function(str) {
+		return '\n///html\n' + d.player + '///\n';
+	});
+};
+jsToolBar.prototype.elements.flv_insert.fncall.xhtml = function() {
+	var d = this.elements.flv_insert.data;
+	if (d.player == undefined) { return; }
+
+	this.encloseSelection('','',function(str) {
+		return '\n' + d.player + '\n';
+	});
+};
+jsToolBar.prototype.elements.flv_insert.fncall.wysiwyg = function() {
+	return;
+};
+
+
+/* Posts selector
+-------------------------------------------------------- */
+jsToolBar.prototype.elements.post_link = {
+	type: 'button',
+	title: 'Link to an entry',
+	fn: {},
+	open_url: 'popup_posts.php',
+	data: {},
+	popup: function() {
+		window.the_toolbar = this;
+		this.elements.img_select.data = {};
+
+		var p_win = window.open(this.elements.post_link.open_url,'dc_popup',
+		'alwaysRaised=yes,dependent=yes,toolbar=yes,height=500,width=760,'+
+		'menubar=no,resizable=yes,scrollbars=yes,status=no');
+	}
+};
+jsToolBar.prototype.elements.post_link.fn.wiki = function() {
+	this.elements.post_link.popup.call(this);
+};
+jsToolBar.prototype.elements.post_link.fn.xhtml = function() {
+	this.elements.post_link.popup.call(this);
+};
+jsToolBar.prototype.elements.post_link.fn.wysiwyg = function() {
+	this.elements.post_link.popup.call(this);
+};
+
+// Last space element
+jsToolBar.prototype.elements.space3 = {
+	type:'space',
+	format:{
+		wysiwyg:true,
+		wiki:true,
+		xhtml:true
+	}
+};
Index: admin/js/jsToolBar/jsToolBar.js
===================================================================
--- admin/js/jsToolBar/jsToolBar.js	(revision 2566)
+++ admin/js/jsToolBar/jsToolBar.js	(revision 2566)
@@ -0,0 +1,612 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * This file is part of DotClear.
+ * Copyright (c) 2005 Nicolas Martin & Olivier Meunier and contributors. All
+ * rights reserved.
+ *
+ * DotClear is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DotClear is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DotClear; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * ***** END LICENSE BLOCK *****
+*/
+
+function jsToolBar(textarea) {
+	if (!document.createElement) { return; }
+
+	if (!textarea) { return; }
+
+	if ((typeof(document["selection"]) == "undefined")
+	&& (typeof(textarea["setSelectionRange"]) == "undefined")) {
+		return;
+	}
+
+	this.textarea = textarea;
+
+	this.editor = document.createElement('div');
+	this.editor.className = 'jstEditor';
+
+	this.textarea.parentNode.insertBefore(this.editor,this.textarea);
+	this.editor.appendChild(this.textarea);
+
+	this.toolbar = document.createElement("div");
+	this.toolbar.className = 'jstElements';
+	this.editor.parentNode.insertBefore(this.toolbar,this.editor);
+
+	// Dragable resizing (only for gecko)
+	if (navigator.appName == 'Microsoft Internet Explorer')
+	{
+		if (this.editor.addEventListener)
+		{
+			this.handle = document.createElement('div');
+			this.handle.className = 'jstHandle';
+			var dragStart = this.resizeDragStart;
+			var This = this;
+			this.handle.addEventListener('mousedown',function(event) { dragStart.call(This,event); },false);
+			this.editor.parentNode.insertBefore(this.handle,this.editor.nextSibling);
+		}
+	}
+
+	this.context = null;
+	this.toolNodes = {}; // lorsque la toolbar est dessinée , cet objet est garni
+					// de raccourcis vers les éléments DOM correspondants aux outils.
+};
+
+function jsButton(title, fn, scope, className) {
+	this.title = title || null;
+	this.fn = fn || function(){};
+	this.scope = scope || null;
+	this.className = className || null;
+};
+jsButton.prototype.draw = function() {
+	if (!this.scope) return null;
+
+	var button = document.createElement('button');
+	button.setAttribute('type','button');
+	if (this.className) button.className = this.className;
+	button.title = this.title;
+	var span = document.createElement('span');
+	span.appendChild(document.createTextNode(this.title));
+	button.appendChild(span);
+
+	if (this.icon != undefined) {
+		button.style.backgroundImage = 'url('+this.icon+')';
+	}
+	if (typeof(this.fn) == 'function') {
+		var This = this;
+		button.onclick = function() { try { This.fn.apply(This.scope, arguments) } catch (e) {} return false; };
+	}
+	return button;
+};
+
+function jsSpace(id) {
+	this.id = id || null;
+	this.width = null;
+};
+jsSpace.prototype.draw = function() {
+	var span = document.createElement('span');
+	if (this.id) span.id = this.id;
+	span.appendChild(document.createTextNode(String.fromCharCode(160)));
+	span.className = 'jstSpacer';
+	if (this.width) span.style.marginRight = this.width+'px';
+
+	return span;
+};
+
+function jsCombo(title, options, scope, fn, className) {
+	this.title = title || null;
+	this.options = options || null;
+	this.scope = scope || null;
+	this.fn = fn || function(){};
+	this.className = className || null;
+};
+jsCombo.prototype.draw = function() {
+	if (!this.scope || !this.options) return null;
+
+	var select = document.createElement('select');
+	if (this.className) select.className = className;
+	select.title = this.title;
+
+	for (var o in this.options) {
+		//var opt = this.options[o];
+		var option = document.createElement('option');
+		option.value = o;
+		option.appendChild(document.createTextNode(this.options[o]));
+		select.appendChild(option);
+	}
+
+	var This = this;
+	select.onchange = function() {
+		try {
+			This.fn.call(This.scope, this.value);
+		} catch (e) { alert(e); }
+
+		return false;
+	};
+
+	return select;
+};
+
+
+jsToolBar.prototype = {
+	base_url: '',
+	mode: 'xhtml',
+	elements: {},
+
+	getMode: function() {
+		return this.mode;
+	},
+
+	setMode: function(mode) {
+		this.mode = mode || 'xhtml';
+	},
+
+	switchMode: function(mode) {
+		mode = mode || 'xhtml';
+		this.draw(mode);
+	},
+
+	button: function(toolName) {
+		var tool = this.elements[toolName];
+		if (typeof tool.fn[this.mode] != 'function') return null;
+		var b = new jsButton(tool.title, tool.fn[this.mode], this, 'jstb_'+toolName);
+		if (tool.icon != undefined) {
+			b.icon = tool.icon;
+		}
+		return b;
+	},
+	space: function(toolName) {
+		var tool = new jsSpace(toolName);
+		if (this.elements[toolName].format != undefined && !this.elements[toolName].format[this.mode]) return null;
+		if (this.elements[toolName].width !== undefined) {
+			tool.width = this.elements[toolName].width;
+		}
+		return tool;
+	},
+	combo: function(toolName) {
+		var tool = this.elements[toolName];
+
+		if( tool[this.mode] != undefined) {
+
+			var length = tool[this.mode].list.length;
+
+			if (typeof tool[this.mode].fn != 'function' || length == 0) {
+				return null;
+			} else {
+				var options = {};
+				for (var i=0; i < length; i++) {
+					var opt = tool[this.mode].list[i];
+					options[opt] = tool.options[opt];
+				}
+				return new jsCombo(tool.title, options, this, tool[this.mode].fn);
+			}
+
+		}
+
+	},
+	draw: function(mode) {
+		this.setMode(mode);
+
+		// Empty toolbar
+		while (this.toolbar.hasChildNodes()) {
+			this.toolbar.removeChild(this.toolbar.firstChild)
+		}
+		this.toolNodes = {}; // vide les raccourcis DOM/**/
+
+		// Draw toolbar elements
+		var b, tool, newTool;
+
+		for (var i in this.elements) {
+			b = this.elements[i];
+
+			var disabled =
+			b.type == undefined || b.type == ''
+			|| (b.disabled != undefined && b.disabled)
+			|| (b.context != undefined && b.context != null && b.context != this.context);
+
+			if (!disabled && typeof this[b.type] == 'function') {
+				tool = this[b.type](i);
+				if (tool) newTool = tool.draw();
+				if (newTool) {
+					this.toolNodes[i] = newTool; //mémorise l'accès DOM pour usage éventuel ultérieur
+					this.toolbar.appendChild(newTool);
+				}
+			}
+		}
+	},
+
+	singleTag: function(stag,etag) {
+		stag = stag || null;
+		etag = etag || stag;
+
+		if (!stag || !etag) { return; }
+
+		this.encloseSelection(stag,etag);
+	},
+
+	encloseSelection: function(prefix, suffix, fn) {
+		this.textarea.focus();
+
+		prefix = prefix || '';
+		suffix = suffix || '';
+
+		var start, end, sel, scrollPos, subst, res;
+
+		if (typeof(document["selection"]) != "undefined") {
+			sel = document.selection.createRange().text;
+		} else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
+			start = this.textarea.selectionStart;
+			end = this.textarea.selectionEnd;
+			scrollPos = this.textarea.scrollTop;
+			sel = this.textarea.value.substring(start, end);
+		}
+
+		if (sel.match(/ $/)) { // exclude ending space char, if any
+			sel = sel.substring(0, sel.length - 1);
+			suffix = suffix + " ";
+		}
+
+		if (typeof(fn) == 'function') {
+			res = (sel) ? fn.call(this,sel) : fn('');
+		} else {
+			res = (sel) ? sel : '';
+		}
+
+		subst = prefix + res + suffix;
+
+		if (typeof(document["selection"]) != "undefined") {
+			var range = document.selection.createRange().text = subst;
+			this.textarea.caretPos -= suffix.length;
+		} else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
+			this.textarea.value = this.textarea.value.substring(0, start) + subst +
+			this.textarea.value.substring(end);
+			if (sel) {
+				this.textarea.setSelectionRange(start + subst.length, start + subst.length);
+			} else {
+				this.textarea.setSelectionRange(start + prefix.length, start + prefix.length);
+			}
+			this.textarea.scrollTop = scrollPos;
+		}
+	},
+
+	stripBaseURL: function(url) {
+		if (this.base_url != '') {
+			var pos = url.indexOf(this.base_url);
+			if (pos == 0) {
+				url = url.substr(this.base_url.length);
+			}
+		}
+
+		return url;
+	}
+};
+
+/** Resizer
+-------------------------------------------------------- */
+jsToolBar.prototype.resizeSetStartH = function() {
+	this.dragStartH = this.textarea.offsetHeight + 0;
+};
+jsToolBar.prototype.resizeDragStart = function(event) {
+	var This = this;
+	this.dragStartY = event.clientY;
+	this.resizeSetStartH();
+	document.addEventListener('mousemove', this.dragMoveHdlr=function(event){This.resizeDragMove(event);}, false);
+	document.addEventListener('mouseup', this.dragStopHdlr=function(event){This.resizeDragStop(event);}, false);
+};
+
+jsToolBar.prototype.resizeDragMove = function(event) {
+	this.textarea.style.height = (this.dragStartH+event.clientY-this.dragStartY)+'px';
+};
+
+jsToolBar.prototype.resizeDragStop = function(event) {
+	document.removeEventListener('mousemove', this.dragMoveHdlr, false);
+	document.removeEventListener('mouseup', this.dragStopHdlr, false);
+};
+
+// Elements definition ------------------------------------
+// block format (paragraph, headers)
+jsToolBar.prototype.elements.blocks = {
+	type: 'combo',
+	title: 'block format',
+	options: {
+		none: '-- none --', // only for wysiwyg mode
+		nonebis: '- block format -', // only for xhtml mode
+		p: 'Paragraph',
+		h1: 'Header 1',
+		h2: 'Header 2',
+		h3: 'Header 3',
+		h4: 'Header 4',
+		h5: 'Header 5',
+		h6: 'Header 6'
+	},
+	xhtml: {
+		list: ['nonebis','p','h1','h2','h3','h4','h5','h6'],
+		fn: function(opt) {
+			if (opt=='nonebis')
+				this.textarea.focus();
+			else
+				try {this.singleTag('<'+opt+'>','</'+opt+'>');} catch(e){};
+			this.toolNodes.blocks.value = 'nonebis';
+		}
+	},
+	wiki: {
+		list: ['nonebis','h3','h4','h5'],
+		fn: function(opt) {
+			switch (opt) {
+				case 'nonebis': this.textarea.focus(); break;
+				case 'h3': this.encloseSelection('!!!'); break;
+				case 'h4': this.encloseSelection('!!'); break;
+				case 'h5': this.encloseSelection('!'); break;
+			}
+			this.toolNodes.blocks.value = 'nonebis';
+		}
+	}
+};
+
+// spacer
+jsToolBar.prototype.elements.space0 = {
+	type:'space',
+	format:{
+		wysiwyg:true,
+		wiki:true,
+		xhtml:true
+	}
+};
+
+// strong
+jsToolBar.prototype.elements.strong = {
+	type: 'button',
+	title: 'Strong emphasis',
+	fn: {
+		wiki: function() { this.singleTag('__') },
+		xhtml: function() { this.singleTag('<strong>','</strong>') }
+	}
+};
+
+// em
+jsToolBar.prototype.elements.em = {
+	type: 'button',
+	title: 'Emphasis',
+	fn: {
+		wiki: function() { this.singleTag("''") },
+		xhtml: function() { this.singleTag('<em>','</em>') }
+	}
+};
+
+// ins
+jsToolBar.prototype.elements.ins = {
+	type: 'button',
+	title: 'Inserted',
+	fn: {
+		wiki: function() { this.singleTag('++') },
+		xhtml: function() { this.singleTag('<ins>','</ins>') }
+	}
+};
+
+// del
+jsToolBar.prototype.elements.del = {
+	type: 'button',
+	title: 'Deleted',
+	fn: {
+		wiki: function() { this.singleTag('--') },
+		xhtml: function() { this.singleTag('<del>','</del>') }
+	}
+};
+
+// quote
+jsToolBar.prototype.elements.quote = {
+	type: 'button',
+	title: 'Inline quote',
+	fn: {
+		wiki: function() { this.singleTag('{{','}}') },
+		xhtml: function() { this.singleTag('<q>','</q>') }
+	}
+};
+
+// code
+jsToolBar.prototype.elements.code = {
+	type: 'button',
+	title: 'Code',
+	fn: {
+		wiki: function() { this.singleTag('@@') },
+		xhtml: function() { this.singleTag('<code>','</code>')}
+	}
+};
+
+// spacer
+jsToolBar.prototype.elements.space1 = {
+	type:'space',
+	format:{
+		wysiwyg:true,
+		wiki:true,
+		xhtml:true
+	}
+};
+
+// br
+jsToolBar.prototype.elements.br = {
+	type: 'button',
+	title: 'Line break',
+	fn: {
+		wiki: function() { this.encloseSelection("%%%\n",'') },
+		xhtml: function() { this.encloseSelection("<br />\n",'')}
+	}
+};
+
+// spacer
+jsToolBar.prototype.elements.space2 = {
+	type:'space',
+	format:{
+		wysiwyg:true,
+		wiki:true,
+		xhtml:true
+	}
+};
+
+// blockquote
+jsToolBar.prototype.elements.blockquote = {
+	type: 'button',
+	title: 'Blockquote',
+	fn: {
+		xhtml: function() { this.singleTag('<blockquote>','</blockquote>') },
+		wiki: function() {
+			this.encloseSelection("\n",'',
+			function(str) {
+				str = str.replace(/\r/g,'');
+				return '> '+str.replace(/\n/g,"\n> ");
+			});
+		}
+	}
+};
+
+// pre
+jsToolBar.prototype.elements.pre = {
+	type: 'button',
+	title: 'Preformated text',
+	fn: {
+		wiki: function() { this.singleTag("///\n","\n///") },
+		xhtml: function() { this.singleTag('<pre>','</pre>') }
+	}
+};
+
+// ul
+jsToolBar.prototype.elements.ul = {
+	type: 'button',
+	title: 'Unordered list',
+	fn: {
+		wiki: function() {
+			this.encloseSelection('','',function(str) {
+				str = str.replace(/\r/g,'');
+				return '* '+str.replace(/\n/g,"\n* ");
+			});
+		},
+		xhtml: function() {
+			this.encloseSelection('','',function(str) {
+				str = str.replace(/\r/g,'');
+				str = str.replace(/\n/g,"</li>\n <li>");
+				return "<ul>\n <li>"+str+"</li>\n</ul>";
+			});
+		}
+	}
+};
+
+// ol
+jsToolBar.prototype.elements.ol = {
+	type: 'button',
+	title: 'Ordered list',
+	fn: {
+		wiki: function() {
+			this.encloseSelection('','',function(str) {
+				str = str.replace(/\r/g,'');
+				return '# '+str.replace(/\n/g,"\n# ");
+			});
+		},
+		xhtml: function() {
+			this.encloseSelection('','',function(str) {
+				str = str.replace(/\r/g,'');
+				str = str.replace(/\n/g,"</li>\n <li>");
+				return "<ol>\n <li>"+str+"</li>\n</ol>";
+			});
+		}
+	}
+};
+
+// spacer
+jsToolBar.prototype.elements.space3 = {
+	type:'space',
+	format:{
+		wysiwyg:true,
+		wiki:true,
+		xhtml:true
+	}
+};
+
+// link
+jsToolBar.prototype.elements.link = {
+	type: 'button',
+	title: 'Link',
+	fn: {},
+	href_prompt: 'Please give page URL:',
+	hreflang_prompt: 'Language of this page:',
+	default_hreflang: '',
+	prompt: function(href,hreflang) {
+		href = href || '';
+		hreflang = hreflang || this.elements.link.default_hreflang;
+
+		href = window.prompt(this.elements.link.href_prompt,href);
+		if (!href) { return false; }
+
+		hreflang = window.prompt(this.elements.link.hreflang_prompt,
+		hreflang);
+
+		return { href: this.stripBaseURL(href), hreflang: hreflang };
+	}
+};
+
+jsToolBar.prototype.elements.link.fn.xhtml = function() {
+	var link = this.elements.link.prompt.call(this);
+	if (link) {
+		var stag = '<a href="'+link.href+'"';
+		if (link.hreflang) { stag = stag+' hreflang="'+link.hreflang+'"'; }
+		stag = stag+'>';
+		var etag = '</a>';
+
+		this.encloseSelection(stag,etag);
+	}
+};
+jsToolBar.prototype.elements.link.fn.wiki = function() {
+	var link = this.elements.link.prompt.call(this);
+	if (link) {
+		var stag = '[';
+		var etag = '|'+link.href;
+		if (link.hreflang) { etag = etag+'|'+link.hreflang; }
+		etag = etag+']';
+
+		this.encloseSelection(stag,etag);
+	}
+};
+
+// img
+jsToolBar.prototype.elements.img = {
+		type: 'button',
+		title: 'External image',
+		src_prompt: 'Please give image URL:',
+		fn: {},
+		prompt: function(src) {
+			src = src || '';
+			return this.stripBaseURL(window.prompt(this.elements.img.src_prompt,src));
+		}
+};
+jsToolBar.prototype.elements.img.fn.xhtml = function() {
+	var src = this.elements.img.prompt.call(this);
+	if (src) {
+		this.encloseSelection('','',function(str) {
+			if (str) {
+				return '<img src="'+src+'" alt="'+str+'" />';
+			} else {
+				return '<img src="'+src+'" alt="" />';
+			}
+		});
+	}
+};
+jsToolBar.prototype.elements.img.fn.wiki = function() {
+	var src = this.elements.img.prompt.call(this);
+	if (src) {
+		this.encloseSelection('','',function(str) {
+			if (str) {
+				return '(('+src+'|'+str+'))';
+			} else {
+				return '(('+src+'))';
+			}
+		});
+	}
+};
Index: admin/js/jsToolBar/jsToolBar.wysiwyg.js
===================================================================
--- admin/js/jsToolBar/jsToolBar.wysiwyg.js	(revision 2589)
+++ admin/js/jsToolBar/jsToolBar.wysiwyg.js	(revision 2589)
@@ -0,0 +1,801 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * This file is part of DotClear.
+ * Copyright (c) 2005 Nicolas Martin & Olivier Meunier and contributors. All
+ * rights reserved.
+ *
+ * DotClear is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DotClear is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DotClear; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * ***** END LICENSE BLOCK *****
+*/
+
+jsToolBar.prototype.can_wwg = (document.designMode != undefined);
+jsToolBar.prototype.iframe = null;
+jsToolBar.prototype.iwin = null;
+jsToolBar.prototype.ibody = null;
+jsToolBar.prototype.iframe_css = null;
+
+/* Editor methods
+-------------------------------------------------------- */
+jsToolBar.prototype.drawToolBar = jsToolBar.prototype.draw;
+jsToolBar.prototype.draw = function(mode) {
+	mode = mode || 'xhtml';
+
+	if (this.can_wwg) {
+		this.mode = 'wysiwyg';
+		this.drawToolBar('wysiwyg');
+		this.initWindow();
+	} else {
+		this.drawToolBar(mode);
+	}
+};
+
+jsToolBar.prototype.switchMode = function(mode) {
+	mode = mode || 'xhtml';
+
+	if (mode == 'xhtml') {
+		this.wwg_mode = true;
+		this.draw(mode);
+	} else {
+		if (this.wwg_mode) {
+			this.syncContents('iframe');
+		}
+		this.wwg_mode = false;
+		this.removeEditor();
+		this.textarea.style.display = '';
+		this.drawToolBar(mode);
+	}
+};
+
+jsToolBar.prototype.syncContents = function(from) {
+	from = from || 'textarea';
+	var This = this;
+	if (from == 'textarea') {
+		initContent();
+	} else {
+		this.validBlockquote();
+		var html = this.applyHtmlFilters(this.ibody.innerHTML);
+		if (html == '<br />') { html = '<p></p>'; }
+		this.textarea.value = html;
+	}
+
+	function initContent() {
+		if (!This.iframe.contentWindow.document || !This.iframe.contentWindow.document.body) {
+			setTimeout(initContent, 1);
+			return;
+		}
+		This.ibody = This.iframe.contentWindow.document.body;
+
+		if (This.textarea.value != '' && This.textarea.value != '<p></p>') {
+			This.ibody.innerHTML = This.applyWysiwygFilters(This.textarea.value);
+			if (This.ibody.createTextRange) { //cursor at the begin for IE
+				var IErange = This.ibody.createTextRange();
+				IErange.execCommand("SelectAll");
+				IErange.collapse();
+				IErange.select();
+			}
+		} else {
+			var idoc = This.iwin.document;
+			var para = idoc.createElement('p');
+			para.appendChild(idoc.createElement('br'));
+			while (idoc.body.hasChildNodes()) {
+				idoc.body.removeChild(idoc.body.lastChild);
+			}
+			idoc.body.appendChild(para);
+		}
+	}
+};
+jsToolBar.prototype.htmlFilters = {
+	tagsoup: function(str){
+		return this.tagsoup2xhtml(str);
+	}
+};
+jsToolBar.prototype.applyHtmlFilters = function(str) {
+	for (var fn in this.htmlFilters) {
+		 str = this.htmlFilters[fn].call(this, str);
+	}
+	return str;
+};
+jsToolBar.prototype.wysiwygFilters = {};
+jsToolBar.prototype.applyWysiwygFilters = function( str) {
+	for (var fn in this.wysiwygFilters) {
+		 str = this.wysiwygFilters[fn].call(this, str);
+	}
+	return str;
+};
+
+jsToolBar.prototype.switchEdit = function() {
+	if (this.wwg_mode) {
+		this.textarea.style.display = '';
+		this.iframe.style.display = 'none';
+		this.syncContents('iframe');
+		this.drawToolBar('xhtml');
+		this.wwg_mode = false;
+		this.focusEditor();
+	} else {
+		this.iframe.style.display = '';
+		this.textarea.style.display = 'none';
+		this.syncContents('textarea');
+		this.drawToolBar('wysiwyg');
+		this.wwg_mode = true;
+		this.focusEditor();
+	}
+	this.setSwitcher();
+};
+
+/** Creates iframe for editor, inits a blank document
+*/
+jsToolBar.prototype.initWindow = function() {
+	var This = this;
+
+	this.iframe = document.createElement('iframe');
+	this.textarea.parentNode.insertBefore(this.iframe,this.textarea.nextSibling);
+
+	this.switcher = document.createElement('ul');
+	this.switcher.className = 'jstSwitcher';
+	this.editor.appendChild(this.switcher);
+
+	this.iframe.height = this.textarea.offsetHeight + 0;
+	this.iframe.width = this.textarea.offsetWidth + 0;
+
+	if (this.textarea.tabIndex != undefined) {
+		this.iframe.tabIndex = this.textarea.tabIndex;
+	}
+
+	function initIframe() {
+		var doc = This.iframe.contentWindow.document;
+		if (!doc) {
+			setTimeout(initIframe,1);
+			return false;
+		}
+
+		doc.open();
+		var html =
+		'<html>\n'+
+		'<head>\n'+
+		'<style type="text/css">'+This.iframe_css+'</style>\n'+
+		(This.base_url != '' ? '<base href="'+This.base_url+'" />' : '')+
+		'</head>\n'+
+		'<body>\n'+
+		'</body>\n'+
+		'</html>';
+
+		doc.write(html);
+		doc.close();
+		if (document.all) { // for IE
+			doc.designMode = 'on';
+			// warning : doc is now inaccessible for IE6 sp1
+		}
+
+		This.iwin = This.iframe.contentWindow;
+
+		This.syncContents('textarea');
+
+		if (This.wwg_mode == undefined) {
+			This.wwg_mode = true;
+		}
+
+		if (This.wwg_mode) {
+			This.textarea.style.display = 'none';
+		} else {
+			This.iframe.style.display = 'none';
+		}
+
+		// update textarea on submit
+		if (This.textarea.form) {
+			chainHandler(This.textarea.form,'onsubmit', function() {
+				if (This.wwg_mode) {
+					This.syncContents('iframe');
+				}
+			});
+		}
+
+		for (var evt in This.iwinEvents) {
+			var event = This.iwinEvents[evt];
+			This.addIwinEvent(This.iframe.contentWindow.document, event.type, event.fn, This);
+		}
+
+		This.setSwitcher();
+		try { This.iwin.document.designMode = 'on'; } catch (e) {}; // Firefox needs this
+
+		return true;
+	}
+	initIframe();
+};
+jsToolBar.prototype.addIwinEvent = function(target, type, fn, scope) {
+	var myFn = function(e){fn.call(scope, e)};
+	addEvent(target, type, myFn, true);
+	// fix memory leak
+	addEvent(scope.iwin, 'unload', function(){
+		removeEvent(target, type, myFn, true);
+	}, true);
+};
+jsToolBar.prototype.iwinEvents = {
+	block1: {
+		type: 'mouseup',
+		fn: function(){ this.adjustBlockLevelCombo() }
+	},
+	block2: {
+		type: 'keyup',
+		fn: function(){ this.adjustBlockLevelCombo() }
+	}
+};
+
+/** Insert a mode switcher after editor area
+*/
+jsToolBar.prototype.switcher_visual_title = 'visual';
+jsToolBar.prototype.switcher_source_title = 'source';
+jsToolBar.prototype.setSwitcher = function() {
+	while (this.switcher.hasChildNodes()) {
+		this.switcher.removeChild(this.switcher.firstChild);
+	}
+
+	var This = this;
+	function setLink(title,link) {
+		var li = document.createElement('li');
+		if (link) {
+			var a = document.createElement('a');
+			a.href = '#';
+			a.editor = This;
+			a.onclick = function() { this.editor.switchEdit(); return false; };
+			a.appendChild(document.createTextNode(title));
+		} else {
+			li.className = 'jstSwitcherCurrent';
+			a = document.createTextNode(title);
+		}
+
+		li.appendChild(a);
+		This.switcher.appendChild(li);
+	}
+
+	setLink(this.switcher_visual_title,!this.wwg_mode);
+	setLink(this.switcher_source_title,this.wwg_mode);
+};
+
+/** Removes editor area and mode switcher
+*/
+jsToolBar.prototype.removeEditor = function() {
+	if (this.iframe != null) {
+		this.iframe.parentNode.removeChild(this.iframe);
+		this.iframe = null;
+	}
+
+	if (this.switcher != undefined && this.switcher.parentNode != undefined) {
+		this.switcher.parentNode.removeChild(this.switcher);
+	}
+};
+
+/** Focus on the editor area
+*/
+jsToolBar.prototype.focusEditor = function() {
+	if (this.wwg_mode) {
+		try { this.iwin.document.designMode = 'on'; } catch (e) {}; // Firefox needs this
+		var This = this;
+		setTimeout(function() {This.iframe.contentWindow.focus()},1);
+	} else {
+		this.textarea.focus();
+	}
+};
+
+/** Resizer
+*/
+jsToolBar.prototype.resizeSetStartH = function() {
+	if (this.wwg_mode && this.iframe != undefined) {
+		this.dragStartH = this.iframe.offsetHeight;
+		return;
+	}
+	this.dragStartH = this.textarea.offsetHeight + 0;
+};
+jsToolBar.prototype.resizeDragMove = function(event) {
+	var new_height = (this.dragStartH+event.clientY-this.dragStartY)+'px';
+	if (this.iframe != undefined) {
+		this.iframe.style.height = new_height;
+	}
+	this.textarea.style.height = new_height;
+};
+
+/* Editing methods
+-------------------------------------------------------- */
+/** Replaces current selection by given node
+*/
+jsToolBar.prototype.insertNode = function(node) {
+	var range;
+
+	if (this.iwin.getSelection) { // Gecko
+		var sel = this.iwin.getSelection();
+		range = sel.getRangeAt(0);
+
+		// deselect all ranges
+		sel.removeAllRanges();
+
+		// empty range
+		range.deleteContents();
+
+		// Insert node
+		range.insertNode(node);
+
+		range.selectNodeContents(node);
+		range.setEndAfter(node);
+		if (range.endContainer.childNodes.length > range.endOffset &&
+		range.endContainer.nodeType != Node.TEXT_NODE) {
+			range.setEnd(range.endContainer.childNodes[range.endOffset], 0);
+		} else {
+			range.setEnd(range.endContainer.childNodes[0]);
+		}
+		sel.addRange(range);
+
+		sel.collapseToEnd();
+	} else { // IE
+		// lambda element
+		var p = this.iwin.document.createElement('div');
+		p.appendChild(node);
+		range = this.iwin.document.selection.createRange();
+		range.execCommand('delete');
+		// insert innerHTML from element
+		range.pasteHTML(p.innerHTML);
+		range.collapse(false);
+		range.select();
+	}
+	this.iwin.focus();
+};
+
+/** Returns a document fragment with selected nodes
+*/
+jsToolBar.prototype.getSelectedNode = function() {
+	if (this.iwin.getSelection) { // Gecko
+		var sel = this.iwin.getSelection();
+		var range = sel.getRangeAt(0);
+		var content = range.cloneContents();
+	} else { // IE
+		var sel = this.iwin.document.selection;
+		var d = this.iwin.document.createElement('div');
+		d.innerHTML = sel.createRange().htmlText;
+		var content = this.iwin.document.createDocumentFragment();
+		for (var i=0; i < d.childNodes.length; i++) {
+			content.appendChild(d.childNodes[i].cloneNode(true));
+		}
+	}
+	return content;
+};
+
+/** Returns string representation for selected node
+*/
+jsToolBar.prototype.getSelectedText = function() {
+	if (this.iwin.getSelection) { // Gecko
+		return this.iwin.getSelection().toString();
+	} else { // IE
+		var range = this.iwin.document.selection.createRange();
+		return range.text;
+	}
+};
+
+jsToolBar.prototype.replaceNodeByContent = function(node) {
+	var content = this.iwin.document.createDocumentFragment();
+	for (var i=0; i < node.childNodes.length; i++) {
+		content.appendChild(node.childNodes[i].cloneNode(true));
+	}
+	node.parentNode.replaceChild(content, node);
+};
+
+jsToolBar.prototype.getBlockLevel = function() {
+	var blockElts = ['p','h1','h2','h3','h4','h5','h6'];
+
+	var range, commonAncestorContainer;
+	if (this.iwin.getSelection) { //gecko
+		var selection = this.iwin.getSelection();
+		range = selection.getRangeAt(0);
+		commonAncestorContainer = range.commonAncestorContainer;
+		while (commonAncestorContainer.nodeType != 1) {
+			commonAncestorContainer = commonAncestorContainer.parentNode;
+		}
+	} else { //ie
+		range = this.iwin.document.selection.createRange();
+		commonAncestorContainer = range.parentElement();
+	}
+
+	var ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
+	while (arrayIndexOf(blockElts, ancestorTagName)==-1 && ancestorTagName!='body') {
+		commonAncestorContainer = commonAncestorContainer.parentNode;
+		ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
+	}
+	if (ancestorTagName == 'body') return null;
+	else return commonAncestorContainer;
+};
+jsToolBar.prototype.adjustBlockLevelCombo = function() {
+	var blockLevel = this.getBlockLevel();
+	if (blockLevel !== null)
+		this.toolNodes.blocks.value = blockLevel.tagName.toLowerCase();
+	else {
+		if (this.mode == 'wysiwyg') this.toolNodes.blocks.value = 'none';
+		if (this.mode == 'xhtml') this.toolNodes.blocks.value = 'nonebis';
+	}
+};
+
+/** HTML code cleanup
+-------------------------------------------------------- */
+jsToolBar.prototype.simpleCleanRegex = new Array(
+	/* Remove every tags we don't need */
+	[/<meta[\w\W]*?>/gim,''],
+	[/<style[\w\W]*?>[\w\W]*?<\/style>/gim, ''],
+	[/<\/?font[\w\W]*?>/gim, ''],
+
+
+	/* Replacements */
+	[/<(\/?)(B|b|STRONG)([\s>\/])/g, "<$1strong$3"],
+	[/<(\/?)(I|i|EM)([\s>\/])/g, "<$1em$3"],
+	[/<IMG ([^>]*?[^\/])>/gi, "<img $1 />"],
+	[/<INPUT ([^>]*?[^\/])>/gi, "<input $1 />"],
+	[/<COL ([^>]*?[^\/])>/gi, "<col $1 />"],
+	[/<AREA ([^>]*?[^\/])>/gi, "<area $1 />"],
+	[/<PARAM ([^>]*?[^\/])>/gi, "<param $1 />"],
+	[/<HR ([^>]*?[^\/])>/gi, "<hr $1/>"],
+	[/<BR ([^>]*?[^\/])>/gi, "<br $1/>"],
+	[/<(\/?)U([\s>\/])/gi, "<$1ins$2"],
+	[/<(\/?)STRIKE([\s>\/])/gi, "<$1del$2"],
+	[/<span style="font-weight: normal;">([\w\W]*?)<\/span>/gm, "$1"],
+	[/<span style="font-weight: bold;">([\w\W]*?)<\/span>/gm, "<strong>$1</strong>"],
+	[/<span style="font-style: italic;">([\w\W]*?)<\/span>/gm, "<em>$1</em>"],
+	[/<span style="text-decoration: underline;">([\w\W]*?)<\/span>/gm, "<ins>$1</ins>"],
+	[/<span style="text-decoration: line-through;">([\w\W]*?)<\/span>/gm, "<del>$1</del>"],
+	[/<span style="text-decoration: underline line-through;">([\w\W]*?)<\/span>/gm, "<del><ins>$1</ins></del>"],
+	[/<span style="(font-weight: bold; ?|font-style: italic; ?){2}">([\w\W]*?)<\/span>/gm, "<strong><em>$2</em></strong>"],
+	[/<span style="(font-weight: bold; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/span>/gm, "<ins><strong>$2</strong></ins>"],
+	[/<span style="(font-weight: italic; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/span>/gm, "<ins><em>$2</em></ins>"],
+	[/<span style="(font-weight: bold; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/span>/gm, "<del><strong>$2</strong></del>"],
+	[/<span style="(font-weight: italic; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/span>/gm, "<del><em>$2</em></del>"],
+	[/<span style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline; ?){3}">([\w\W]*?)<\/span>/gm, "<ins><strong><em>$2</em></strong></ins>"],
+	[/<span style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: line-through; ?){3}">([\w\W]*?)<\/span>/gm, "<del><strong><em>$2</em></strong></del>"],
+	[/<span style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline line-through; ?){3}">([\w\W]*?)<\/span>/gm, "<del><ins><strong><em>$2</em></strong></ins></del>"],
+	[/<strong style="font-weight: normal;">([\w\W]*?)<\/strong>/gm, "$1"],
+	[/<([a-z]+) style="font-weight: normal;">([\w\W]*?)<\/\1>/gm, "<$1>$2</$1>"],
+	[/<([a-z]+) style="font-weight: bold;">([\w\W]*?)<\/\1>/gm, "<$1><strong>$2</strong></$1>"],
+	[/<([a-z]+) style="font-style: italic;">([\w\W]*?)<\/\1>/gm, "<$1><em>$2</em></$1>"],
+	[/<([a-z]+) style="text-decoration: underline;">([\w\W]*?)<\/\1>/gm, "<ins><$1>$2</$1></ins>"],
+	[/<([a-z]+) style="text-decoration: line-through;">([\w\W]*?)<\/\1>/gm, "<del><$1>$2</$1></del>"],
+	[/<([a-z]+) style="text-decoration: underline line-through;">([\w\W]*?)<\/\1>/gm, "<del><ins><$1>$2</$1></ins></del>"],
+	[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?){2}">([\w\W]*?)<\/\1>/gm, "<$1><strong><em>$3</em></strong></$1>"],
+	[/<([a-z]+) style="(font-weight: bold; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/\1>/gm, "<ins><$1><strong>$3</strong></$1></ins>"],
+	[/<([a-z]+) style="(font-weight: italic; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/\1>/gm, "<ins><$1><em>$3</em></$1></ins>"],
+	[/<([a-z]+) style="(font-weight: bold; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/\1>/gm, "<del><$1><strong>$3</strong></$1></del>"],
+	[/<([a-z]+) style="(font-weight: italic; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/\1>/gm, "<del><$1><em>$3</em></$1></del>"],
+	[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline; ?){3}">([\w\W]*?)<\/\1>/gm, "<ins><$1><strong><em>$3</em></strong></$1></ins>"],
+	[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: line-through; ?){3}">([\w\W]*?)<\/\1>/gm, "<del><$1><strong><em>$3</em></strong></$1></del>"],
+	[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline line-through; ?){3}">([\w\W]*?)<\/\1>/gm, "<del><ins><$1><strong><em>$3</em></strong></$1></ins></del>"],
+	[/<p><blockquote>(.*)(\n)+<\/blockquote><\/p>/i,"<blockquote>$1</blockquote>\n"],
+	/* mise en forme identique contigue */
+	[/<\/(strong|em|ins|del|q|code)>(\s*?)<\1>/gim, "$2"],
+	[/<(br|BR)>/g, "<br />"],
+	[/<(hr|HR)>/g, "<hr />"],
+	/* opera est trop strict ;)) */
+	[/([^\s])\/>/g, "$1 />"],
+	/* br intempestifs de fin de block */
+	[/<br \/>\s*<\/(h1|h2|h3|h4|h5|h6|ul|ol|li|p|blockquote|div)/gi, "</$1"],
+	[/<\/(h1|h2|h3|h4|h5|h6|ul|ol|li|p|blockquote)>([^\n\u000B\r\f])/gi, "</$1>\n$2"],
+	[/<hr style="width: 100%; height: 2px;" \/>/g, "<hr />"]
+);
+
+/** Cleanup HTML code
+*/
+jsToolBar.prototype.tagsoup2xhtml = function(html) {
+	for (var reg in this.simpleCleanRegex) {
+		html = html.replace(this.simpleCleanRegex[reg][0], this.simpleCleanRegex[reg][1]);
+	}
+	/* tags vides */
+	/* note : on tente de ne pas tenir compte des commentaires html, ceux-ci
+	   permettent entre autre d'inserer des commentaires conditionnels pour ie */
+	while ( /(<[^\/!]>|<[^\/!][^>]*[^\/]>)\s*<\/[^>]*[^-]>/.test(html) ) {
+		html = html.replace(/(<[^\/!]>|<[^\/!][^>]*[^\/]>)\s*<\/[^>]*[^-]>/g, "");
+	}
+
+	/* tous les tags en minuscule */
+	html = html.replace(/<(\/?)([A-Z0-9]+)/g,
+			function(match0, match1, match2) {
+				return "<" + match1 + match2.toLowerCase();
+			});
+
+	/* IE laisse souvent des attributs sans guillemets */
+	var myRegexp = /<[^>]+((\s+\w+\s*=\s*)([^"'][\w~@+$,%\/:.#?=&;!*()-]*))[^>]*?>/;
+	while ( myRegexp.test(html)) {
+		html = html.replace(
+			myRegexp,
+			function (str, val1, val2, val3){
+				var tamponRegex = new RegExp(regexpEscape(val1));
+				return str.replace(tamponRegex, val2+'"'+val3+'"');
+			}
+		)
+	}
+
+	/* les navigateurs rajoutent une unite aux longueurs css nulles */
+	/* note: a ameliorer ! */
+	while ( /(<[^>]+style=(["'])[^>]+[\s:]+)0(pt|px)(\2|\s|;)/.test(html)) {
+		html = html.replace(/(<[^>]+style=(["'])[^>]+[\s:]+)0(pt|px)(\2|\s|;)/gi, "$1"+"0$4");
+	}
+
+	/* correction des fins de lignes : le textarea edite contient des \n
+	* le wysiwyg des \r\n , et le textarea mis a jour SANS etre affiche des \r\n ! */
+	html = html.replace(/\r\n/g,"\n");
+
+	/* Trim only if there's no pre tag */
+	pattern_pre = /<pre>[\s\S]*<\/pre>/gi;
+	if (!pattern_pre.test(html)) {
+		html = html.replace(/^\s+/gm,'');
+		html = html.replace(/\s+$/gm,'');
+	}
+
+	return html;
+};
+jsToolBar.prototype.validBlockquote = function() {
+	var blockElts = ['address','blockquote','dl','div','fieldset','form','h1',
+	                 'h2','h3','h4','h5','h6','hr','ol','p','pre','table','ul'];
+	var BQs = this.iwin.document.getElementsByTagName('blockquote');
+	var bqChilds;
+
+	for (var bq = 0; bq < BQs.length; bq++) {
+		bqChilds = BQs[bq].childNodes;
+		var frag = this.iwin.document.createDocumentFragment();
+		for (var i = (bqChilds.length-1); i >= 0; i--) {
+			if (bqChilds[i].nodeType == 1 && // Node.ELEMENT_NODE
+			    arrayIndexOf(blockElts, bqChilds[i].tagName.toLowerCase()) >= 0)
+			{
+				if (frag.childNodes.length > 0) {
+					var p = this.iwin.document.createElement('p');
+					p.appendChild(frag);
+					BQs[bq].replaceChild(p, bqChilds[i+1]);
+					frag = this.iwin.document.createDocumentFragment();
+				}
+			} else {
+				if (frag.childNodes.length > 0) BQs[bq].removeChild(bqChilds[i+1]);
+				frag.insertBefore(bqChilds[i].cloneNode(true), frag.firstChild);
+			}
+		}
+		if (frag.childNodes.length > 0) {
+			var p = this.iwin.document.createElement('p');
+			p.appendChild(frag);
+			BQs[bq].replaceChild(p, bqChilds[0]);
+		}
+	}
+};
+
+/* Removing text formating */
+jsToolBar.prototype.removeFormatRegexp = new Array(
+	[/(<[a-z][^>]*)margin\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)margin-bottom\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)margin-left\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)margin-right\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)margin-top\s*:[^;]*;/mg, "$1"],
+
+	[/(<[a-z][^>]*)padding\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)padding-bottom\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)padding-left\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)padding-right\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)padding-top\s*:[^;]*;/mg, "$1"],
+
+	[/(<[a-z][^>]*)font\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)font-family\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)font-size\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)font-style\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)font-variant\s*:[^;]*;/mg, "$1"],
+	[/(<[a-z][^>]*)font-weight\s*:[^;]*;/mg, "$1"],
+
+	[/(<[a-z][^>]*)color\s*:[^;]*;/mg, "$1"]
+);
+
+jsToolBar.prototype.removeTextFormating = function(html) {
+	for (var reg in this.removeFormatRegexp) {
+		html = html.replace(this.removeFormatRegexp[reg][0], this.removeFormatRegexp[reg][1]);
+	}
+
+	html = this.tagsoup2xhtml(html);
+	html = html.replace(/style="\s*?"/mgi,'');
+	return html;
+};
+
+/** Toolbar elements
+-------------------------------------------------------- */
+jsToolBar.prototype.elements.blocks.wysiwyg = {
+	list: ['none','p','h1','h2','h3','h4','h5','h6'],
+	fn: function(opt) {
+		if (opt=='none') {
+			var blockLevel = this.getBlockLevel();
+			if (blockLevel !== null) {
+				this.replaceNodeByContent(blockLevel);
+			}
+			this.iwin.focus();
+		} else {
+			try { this.iwin.document.execCommand('formatblock',false,'<'+opt+'>');
+			} catch(e){};
+			this.iwin.focus();
+		}
+	}
+};
+
+jsToolBar.prototype.elements.strong.fn.wysiwyg = function() {
+	this.iwin.document.execCommand('bold', false, null);
+	this.iwin.focus();
+};
+
+jsToolBar.prototype.elements.em.fn.wysiwyg = function() {
+	this.iwin.document.execCommand('italic', false, null);
+	this.iwin.focus();
+};
+
+jsToolBar.prototype.elements.ins.fn.wysiwyg = function() {
+	this.iwin.document.execCommand('underline', false, null);
+	this.iwin.focus();
+};
+
+jsToolBar.prototype.elements.del.fn.wysiwyg = function() {
+	this.iwin.document.execCommand('strikethrough', false, null);
+	this.iwin.focus();
+};
+
+jsToolBar.prototype.elements.quote.fn.wysiwyg = function() {
+	var n = this.getSelectedNode();
+	var q = this.iwin.document.createElement('q');
+	q.appendChild(n);
+	this.insertNode(q);
+};
+
+jsToolBar.prototype.elements.code.fn.wysiwyg = function() {
+	var n = this.getSelectedNode();
+	var code = this.iwin.document.createElement('code');
+	code.appendChild(n);
+	this.insertNode(code);
+};
+
+jsToolBar.prototype.elements.br.fn.wysiwyg = function() {
+	var n = this.iwin.document.createElement('br');
+	this.insertNode(n);
+};
+
+jsToolBar.prototype.elements.blockquote.fn.wysiwyg = function() {
+	var n = this.getSelectedNode();
+	var q = this.iwin.document.createElement('blockquote');
+	q.appendChild(n);
+	this.insertNode(q);
+};
+
+jsToolBar.prototype.elements.pre.fn.wysiwyg = function() {
+	this.iwin.document.execCommand('formatblock',false,'<pre>');
+	this.iwin.focus();
+};
+
+jsToolBar.prototype.elements.ul.fn.wysiwyg = function() {
+	this.iwin.document.execCommand('insertunorderedlist',false,null);
+	this.iwin.focus();
+};
+
+jsToolBar.prototype.elements.ol.fn.wysiwyg = function() {
+	this.iwin.document.execCommand('insertorderedlist',false,null);
+	this.iwin.focus();
+};
+
+jsToolBar.prototype.elements.link.fn.wysiwyg = function() {
+	var href, hreflang;
+	var range, commonAncestorContainer;
+	if (this.iwin.getSelection) { //gecko
+		var selection = this.iwin.getSelection();
+		range = selection.getRangeAt(0);
+		commonAncestorContainer = range.commonAncestorContainer;
+		while (commonAncestorContainer.nodeType != 1) {
+			commonAncestorContainer = commonAncestorContainer.parentNode;
+		}
+	} else { //ie
+		range = this.iwin.document.selection.createRange();
+		commonAncestorContainer = range.parentElement();
+	}
+
+	var ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
+	while (ancestorTagName!='a' && ancestorTagName!='body') {
+		commonAncestorContainer = commonAncestorContainer.parentNode;
+		ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
+	}
+
+	// Update or remove link?
+	if (ancestorTagName == 'a') {
+		href = commonAncestorContainer.href || '';
+		hreflang = commonAncestorContainer.hreflang || '';
+	}
+
+	href = window.prompt(this.elements.link.href_prompt,href);
+
+	// Remove link
+	if (ancestorTagName == 'a' && href=='') {
+		this.replaceNodeByContent(commonAncestorContainer);
+	}
+	if (!href) return; // user cancel
+
+	hreflang = window.prompt(this.elements.link.hreflang_prompt, hreflang);
+
+	// Update link
+	if (ancestorTagName == 'a' && href) {
+		commonAncestorContainer.setAttribute('href', href);
+		if (hreflang) {
+			commonAncestorContainer.setAttribute('hreflang', hreflang);
+		} else {
+			commonAncestorContainer.removeAttribute('hreflang');
+		}
+		return;
+	}
+
+	// Create link
+	var n = this.getSelectedNode();
+	var a = this.iwin.document.createElement('a');
+	a.href = href;
+	if (hreflang) a.setAttribute('hreflang',hreflang);
+	a.appendChild(n);
+	this.insertNode(a);
+};
+
+
+
+// Remove format and Toggle
+jsToolBar.prototype.elements.removeFormat = {
+	type: 'button',
+	title: 'Remove text formating',
+	fn: {}
+};
+jsToolBar.prototype.elements.removeFormat.disabled = !jsToolBar.prototype.can_wwg;
+jsToolBar.prototype.elements.removeFormat.fn.xhtml = function() {
+	var html = this.textarea.value;
+	html = this.removeTextFormating(html);
+	this.textarea.value = html;
+};
+jsToolBar.prototype.elements.removeFormat.fn.wysiwyg = function() {
+	var html = this.iwin.document.body.innerHTML;
+	html = this.removeTextFormating(html);
+	this.iwin.document.body.innerHTML = html;
+};
+/** Utilities
+-------------------------------------------------------- */
+function arrayIndexOf(aArray, aValue){
+	if (typeof Array.indexOf == 'function') {
+		return aArray.indexOf(aValue);
+	} else {
+		var index = -1;
+		var l = aArray.length;
+		for (var i = 0; i < l ; i++) {
+			if (aArray[i] === aValue) {
+				index = i;
+				break;
+			}
+		}
+		return index;
+	}
+};
+function addEvent(obj, evType, fn, useCapture) {
+	if (obj.addEventListener){
+		obj.addEventListener(evType, fn, useCapture);
+		return true;
+	} else if (obj.attachEvent){
+		var r = obj.attachEvent("on"+evType, fn);
+		return r;
+	} else {
+		return false;
+	}
+};
+function removeEvent(obj, evType, fn, useCapture) {
+	if (obj.removeEventListener){
+		obj.removeEventListener(evType, fn, useCapture);
+		return true;
+	} else if (obj.detachEvent){
+		var r = obj.detachEvent("on"+evType, fn);
+		return r;
+	} else {
+		return false;
+  }
+};
+function regexpEscape(s) {
+	return s.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g,"\\$1")
+};
Index: admin/js/jsToolBar/popup_link.js
===================================================================
--- admin/js/jsToolBar/popup_link.js	(revision 2566)
+++ admin/js/jsToolBar/popup_link.js	(revision 2566)
@@ -0,0 +1,23 @@
+$(function() {
+	$('#link-insert-cancel').click(function() {
+		window.close();
+	});
+
+	$('#link-insert-ok').click(function() {
+		sendClose();
+		window.close();
+	});
+
+	function sendClose() {
+		var insert_form = $('#link-insert-form').get(0);
+		if (insert_form == undefined) { return; }
+
+		var tb = window.opener.the_toolbar;
+		var data = tb.elements.link.data;
+
+		data.href = tb.stripBaseURL(insert_form.elements.href.value);
+		data.title = insert_form.elements.title.value;
+		data.hreflang = insert_form.elements.hreflang.value;
+		tb.elements.link.fncall[tb.mode].call(tb);
+	};
+});
Index: admin/js/jsToolBar/popup_media.js
===================================================================
--- admin/js/jsToolBar/popup_media.js	(revision 2566)
+++ admin/js/jsToolBar/popup_media.js	(revision 2566)
@@ -0,0 +1,92 @@
+$(function() {
+	var toolBar = window.opener.the_toolbar.textarea;
+
+	$('#media-insert').onetabload(function() {
+		$('#media-insert-cancel').click(function() {
+			window.close();
+		});
+
+		$('#media-insert-ok').click(function() {
+			sendClose();
+			window.close();
+		});
+	});
+
+	function sendClose() {
+		var insert_form = $('#media-insert-form').get(0);
+		if (insert_form == undefined) { return; }
+
+		var tb = window.opener.the_toolbar;
+		var type = insert_form.elements.type.value;
+
+		var media_align_grid = {
+			left: 'float: left; margin: 0 1em 1em 0;',
+			right: 'float: right; margin: 0 0 1em 1em;',
+			center: 'text-align: center;'
+		};
+
+		if (type == 'image')
+		{
+			tb.elements.img_select.data.src = tb.stripBaseURL($('input[name="src"]:checked',insert_form).val());
+			tb.elements.img_select.data.alignment = $('input[name="alignment"]:checked',insert_form).val();
+			tb.elements.img_select.data.link = $('input[name="insertion"]:checked',insert_form).val() == 'link';
+
+			tb.elements.img_select.data.title = insert_form.elements.title.value;
+			tb.elements.img_select.data.description = $('input[name="description"]',insert_form).val();
+			tb.elements.img_select.data.url = tb.stripBaseURL(insert_form.elements.url.value);
+			tb.elements.img_select.fncall[tb.mode].call(tb);
+		}
+		else if (type == 'mp3')
+		{
+			var player = $('#public_player').val();
+			var align = $('input[name="alignment"]:checked',insert_form).val();
+
+			if (align != undefined && align != 'none') {
+				player = '<div style="' + media_align_grid[align] + '">' + player + '</div>';
+			}
+
+			tb.elements.mp3_insert.data.player = player.replace(/>/g,'>\n');
+			tb.elements.mp3_insert.fncall[tb.mode].call(tb);
+		}
+		else if (type == 'flv')
+		{
+			var oplayer = $('<div>'+$('#public_player').val()+'</div>');
+			var flashvars = $("[name=FlashVars]",oplayer).val();
+
+			var align = $('input[name="alignment"]:checked',insert_form).val();
+			var title = insert_form.elements.title.value;
+
+			if (title) {
+				flashvars = 'title='+encodeURI(title)+'&amp;'+flashvars;
+			}
+			$('object',oplayer).attr('width',$('#video_w').val());
+			$('object',oplayer).attr('height',$('#video_h').val());
+			flashvars = flashvars.replace(/(width=\d*)/,'width='+$('#video_w').val());
+			flashvars = flashvars.replace(/(height=\d*)/,'height='+$('#video_h').val());
+
+			$("[name=FlashVars]",oplayer).val(flashvars);
+			var player = oplayer.html();
+
+			if (align != undefined && align != 'none') {
+				player = '<div style="' + media_align_grid[align] + '">' + player + '</div>';
+			}
+
+			tb.elements.flv_insert.data.player = player.replace(/>/g,'>\n');
+			tb.elements.flv_insert.fncall[tb.mode].call(tb);
+		}
+		else
+		{
+			tb.elements.link.data.href = tb.stripBaseURL(insert_form.elements.url.value);
+			tb.elements.link.data.content = insert_form.elements.title.value;
+			tb.elements.link.fncall[tb.mode].call(tb);
+		}
+	};
+
+	function playerFormat(s) {
+		s = s.replace(/&lt;/g,'<');
+		s = s.replace(/&gt;/g,'>\n');
+		s = s.replace(/&amp;/g,'&');
+
+		return s;
+	};
+});
Index: admin/js/jsToolBar/popup_posts.js
===================================================================
--- admin/js/jsToolBar/popup_posts.js	(revision 2566)
+++ admin/js/jsToolBar/popup_posts.js	(revision 2566)
@@ -0,0 +1,16 @@
+$(function() {
+	$('#link-insert-cancel').click(function() {
+		window.close();
+	});
+
+	$('#form-entries tr>td.maximal>a').click(function() {
+		// Get post_id
+		var tb = window.opener.the_toolbar;
+		var data = tb.elements.link.data;
+
+		data.href = tb.stripBaseURL($(this).attr('title'));
+
+		tb.elements.link.fncall[tb.mode].call(tb);
+		window.close();
+	});
+});
Index: admin/langs.php
===================================================================
--- admin/langs.php	(revision 2720)
+++ admin/langs.php	(revision 2594)
@@ -50,5 +50,5 @@
 
 		dcPage::addSuccessNotice(__('Language has been successfully deleted.'));
-		http::redirect($core->adminurl->get("admin.langs"));
+		http::redirect('langs.php');
 	}
 	catch (Exception $e)
@@ -93,5 +93,5 @@
 			dcPage::addSuccessNotice(__('Language has been successfully installed.'));
 		}
-		http::redirect($core->adminurl->get("admin.langs"));
+		http::redirect('langs.php');
 	}
 	catch (Exception $e)
@@ -129,5 +129,5 @@
 			dcPage::addSuccessNotice(__('Language has been successfully installed.'));
 		}
-		http::redirect($core->adminurl->get("admin.langs"));
+		http::redirect('langs.php');
 	}
 	catch (Exception $e)
@@ -161,5 +161,5 @@
 '<p>'.sprintf(__('You can change your user language in your <a href="%1$s">preferences</a> or '.
 'change your blog\'s main language in your <a href="%2$s">blog settings</a>.'),
-$core->adminurl->get("admin.user.preferences"),$core->adminurl->get("admin.blog.pref")).'</p>';
+'preferences.php','blog_pref.php').'</p>';
 
 echo
@@ -203,5 +203,5 @@
 		{
 			echo
-			'<form action="'.$core->adminurl->get("admin.langs").'" method="post">'.
+			'<form action="langs.php" method="post">'.
 			'<div>'.
 			$core->formNonce().
@@ -234,5 +234,5 @@
 
 	echo
-	'<form method="post" action="'.$core->adminurl->get("admin.langs").'" enctype="multipart/form-data" class="fieldset">'.
+	'<form method="post" action="langs.php" enctype="multipart/form-data" class="fieldset">'.
 	'<h4>'.__('Available languages').'</h4>'.
 	'<p>'.sprintf(__('You can download and install a additional language directly from Dotclear.net. '.
@@ -252,5 +252,5 @@
 	# 'Upload language pack' form
 	echo
-	'<form method="post" action="'.$core->adminurl->get("admin.langs").'" enctype="multipart/form-data" class="fieldset">'.
+	'<form method="post" action="langs.php" enctype="multipart/form-data" class="fieldset">'.
 	'<h4>'.__('Upload a zip file').'</h4>'.
 	'<p>'.__('You can install languages by uploading zip files.').'</p>'.
Index: admin/media.php
===================================================================
--- admin/media.php	(revision 2720)
+++ admin/media.php	(revision 2529)
@@ -74,8 +74,5 @@
 $popup = (integer) !empty($_GET['popup']);
 
-$page_url = $core->adminurl->get("admin.media",array('popup' => $popup,'post_id' => $post_id));
-if (($temp = $core->callBehavior('adminMediaURL',$page_url))!='') {
-	$page_url = $temp;
-}
+$page_url = 'media.php?popup='.$popup.'&post_id='.$post_id;
 
 if ($popup) {
@@ -365,17 +362,7 @@
 }
 
-// Remove hidden directories (unless DC_SHOW_HIDDEN_DIRS is set to true)
-if (!defined('DC_SHOW_HIDDEN_DIRS') || (DC_SHOW_HIDDEN_DIRS == false)) {
-	for ($i = count($dir['dirs']) - 1; $i >= 0; $i--) {
-		if ($dir['dirs'][$i]->d) {
-			if (strpos($dir['dirs'][$i]->relname,'.') !== false) {
-				unset($dir['dirs'][$i]);
-			}
-		}
-	}
-}
 $items = array_values(array_merge($dir['dirs'],$dir['files']));
 
-$fmt_form_media = '<form action="'.$core->adminurl->get("admin.media").'" method="post" id="form-medias">'.
+$fmt_form_media = '<form action="media.php" method="post" id="form-medias">'.
 	'<div class="files-group">%s</div>'.
 	'<p class="hidden">'.$core->formNonce() . form::hidden(array('d'),$d).'</p>';
@@ -403,5 +390,5 @@
 
 	echo
-	'<form action="'.$core->adminurl->get("admin.media").'" method="get" id="filters-form">'.
+	'<form action="media.php" method="get" id="filters-form">'.
 	'<p class="two-boxes"><label for="file_sort" class="classic">'.__('Sort files:').'</label> '.
 	form::combo('file_sort',$sort_combo,$file_sort).'</p>'.
@@ -439,12 +426,12 @@
 '</div>';
 
+if ($core_media_writable || $core_media_archivable) {
+	echo
+	'<div class="vertical-separator">'.
+	'<h3 class="out-of-screen-if-js">'.sprintf(__('In %s:'),($d == '' ? '“'.__('Media manager').'”' : '“'.$d.'”')).'</h3>';
+}
+
 $core_media_archivable = $core->auth->check('media_admin',$core->blog->id) &&
 	!(count($items) == 0 || (count($items) == 1 && $items[0]->parent));
-
-if ($core_media_writable || $core_media_archivable) {
-	echo
-	'<div class="vertical-separator">'.
-	'<h3 class="out-of-screen-if-js">'.sprintf(__('In %s:'),($d == '' ? '“'.__('Media manager').'”' : '“'.$d.'”')).'</h3>';
-}
 
 if ($core_media_writable || $core_media_archivable) {
@@ -522,5 +509,5 @@
 		echo
 		'<p class="one-file form-help info">'.__('To send several files at the same time, you can activate the enhanced uploader in').
-		' <a href="'.$core->adminurl->get("admin.user.preferences",array('tab' => 'user-options')).'">'.__('My preferences').'</a></p>';
+		' <a href="preferences.php?tab=user-options">'.__('My preferences').'</a></p>';
 	}
 
@@ -555,5 +542,5 @@
 if (!$popup) {
 	echo '<div class="info"><p>'.sprintf(__('Current settings for medias and images are defined in %s'),
-	'<a href="'.$core->adminurl->get("admin.blog.pref").'#medias-settings">'.__('Blog parameters').'</a>').'</p></div>';
+	'<a href="blog_pref.php#medias-settings">'.__('Blog parameters').'</a>').'</p></div>';
 }
 
@@ -578,8 +565,6 @@
 		}
 	} else {
-		$link = $core->adminurl->get("admin.media.item", array('id' => $f->media_id,'popup' => $popup,'post_id' => $post_id));
-        if (($temp = $core->callBehavior('adminMediaURL',$link))!='') {
-            $link = $temp;
-        }
+		$link =
+		'media_item.php?id='.$f->media_id.'&amp;popup='.$popup.'&amp;post_id='.$post_id;
 	}
 
@@ -608,7 +593,6 @@
 	if ($post_id && !$f->d) {
 		$act .=
-		'<a class="attach-media" title="'.__('Attach this file to entry').'" href="'.
-		$core->adminurl->get("admin.post.media", array('media_id' => $f->media_id, 'post_id' => $post_id,'attach' => 1)).
-		'">'.
+		'<a class="attach-media" title="'.__('Attach this file to entry').'" href="post_media.php?media_id='.$f->media_id.
+		'&amp;post_id='.$post_id.'&amp;attach=1">'.
 		'<img src="images/plus.png" alt="'.__('Attach this file to entry').'"/>'.
 		'</a>';
@@ -634,5 +618,5 @@
 
 	if ($f->type == 'audio/mpeg3') {
-		$lst .= '<li>'.dcMedia::mp3player($f->file_url,$core->adminurl->get("admin.home",array('pf' => 'player_mp3.swf'))).'</li>';
+		$lst .= '<li>'.dcMedia::mp3player($f->file_url,'index.php?pf=player_mp3.swf').'</li>';
 	}
 
Index: admin/media_item.php
===================================================================
--- admin/media_item.php	(revision 2723)
+++ admin/media_item.php	(revision 2566)
@@ -29,6 +29,6 @@
 $file = null;
 $popup = (integer) !empty($_GET['popup']);
-$page_url = $core->adminurl->get("admin.media.item",array('popup' => $popup,'post_id' => $post_id));
-$media_page_url = $core->adminurl->get("admin.media",array('popup' => $popup,'post_id' => $post_id));
+$page_url = 'media_item.php?popup='.$popup.'&post_id='.$post_id;
+$media_page_url = 'media.php?popup='.$popup.'&post_id='.$post_id;
 
 $id = !empty($_REQUEST['id']) ? (integer) $_REQUEST['id'] : '';
@@ -209,5 +209,5 @@
 if ($popup) {
 	$starting_scripts .=
-	$core->callBehavior('adminPopupMedia');
+	dcPage::jsLoad('js/jsToolBar/popup_media.js');
 }
 call_user_func($open_f,__('Media manager'),
@@ -469,10 +469,10 @@
 if ($file->type == 'audio/mpeg3')
 {
-	echo dcMedia::mp3player($file->file_url,$core->adminurl->get("admin.home",array('pf' => 'player_mp3.swf')));
+	echo dcMedia::mp3player($file->file_url,'index.php?pf=player_mp3.swf');
 }
 
 if ($file->type == 'video/x-flv' || $file->type == 'video/mp4' || $file->type == 'video/x-m4v')
 {
-	echo dcMedia::flvplayer($file->file_url,$core->adminurl->get("admin.home",array('pf' => 'player_flv.swf')));
+	echo dcMedia::flvplayer($file->file_url,'index.php?pf=player_flv.swf');
 }
 
Index: admin/plugin.php
===================================================================
--- admin/plugin.php	(revision 2708)
+++ admin/plugin.php	(revision 2566)
@@ -36,5 +36,4 @@
 	$p_info = $core->plugins->getModules($p);
 
-	$p_name = $p;
 	$p_url = 'plugin.php?p='.$p;
 
Index: admin/popup_link.php
===================================================================
--- admin/popup_link.php	(revision 2614)
+++ admin/popup_link.php	(revision 2566)
@@ -19,5 +19,5 @@
 $title = !empty($_GET['title']) ? $_GET['title'] : '';
 
-dcPage::openPopup(__('Add a link'),$core->callBehavior('adminPopupLink'));
+dcPage::openPopup(__('Add a link'),dcPage::jsLoad('js/jsToolBar/popup_link.js'));
 
 echo '<h2 class="page-title">'.__('Add a link').'</h2>';
Index: admin/popup_posts.php
===================================================================
--- admin/popup_posts.php	(revision 2614)
+++ admin/popup_posts.php	(revision 2566)
@@ -48,5 +48,5 @@
 dcPage::openPopup(__('Add a link to an entry'),
 	dcPage::jsLoad('js/_posts_list.js').
-	$core->callBehavior('adminPopupPosts'));
+	dcPage::jsLoad('js/jsToolBar/popup_posts.js'));
 
 echo '<h2 class="page-title">'.__('Add a link to an entry').'</h2>';
Index: admin/post.php
===================================================================
--- admin/post.php	(revision 2722)
+++ admin/post.php	(revision 2566)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2014 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -19,5 +19,4 @@
 $post_dt = '';
 $post_format = $core->auth->getOption('post_format');
-$post_editor = $core->auth->getOption('editor');
 $post_password = '';
 $post_url = '';
@@ -41,6 +40,6 @@
 $can_delete = false;
 
-$post_headlink = '<link rel="%s" title="%s" href="'.$core->adminurl->get('admin.post',array('id' => "%s"),'&').'" />';
-$post_link = '<a href="'.$core->adminurl->get('admin.post',array('id' => "%s"),'&').'" title="%s">%s</a>';
+$post_headlink = '<link rel="%s" title="%s" href="post.php?id=%s" />';
+$post_link = '<a href="post.php?id=%s" title="%s">%s</a>';
 
 $next_link = $prev_link = $next_headlink = $prev_headlink = null;
@@ -62,9 +61,4 @@
 # Formaters combo
 $formaters_combo = dcAdminCombos::getFormatersCombo();
-foreach ($formaters_combo as $editor => $formats) {
-	foreach ($formats as $format) {
-		$formaters_combo[$editor][$format] = "$editor:$format";
-	}
-}
 
 # Languages combo
@@ -79,14 +73,7 @@
 $tb_urls = $tb_excerpt = '';
 
-if (count($formaters_combo)==0 || !$core->auth->getOption('editor') || $core->auth->getOption('editor')=='') {
-	dcPage::addNotice("message",
-					  sprintf(__('Choose an active editor in %s.'),
-								  '<a href="'.$core->adminurl->get("admin.user.preferences").'#user-options">'.__('your preferences').'</a>'
-								  )
-					  );
-}
-
 # Get entry informations
-if (!empty($_REQUEST['id'])) {
+if (!empty($_REQUEST['id']))
+{
 	$page_title = __('Edit entry');
 
@@ -95,8 +82,11 @@
 	$post = $core->blog->getPosts($params);
 
-	if ($post->isEmpty()) {
+	if ($post->isEmpty())
+	{
 		$core->error->add(__('This entry does not exist.'));
 		$can_view_page = false;
-	} else {
+	}
+	else
+	{
 		$post_id = $post->post_id;
 		$cat_id = $post->cat_id;
@@ -158,5 +148,5 @@
 }
 
-$comments_actions_page = new dcCommentsActionsPage($core,$core->adminurl->get('admin.post'),array('id' => $post_id, '_ANCHOR'=>$anchor,'section' => $anchor));
+$comments_actions_page = new dcCommentsActionsPage($core,'post.php',array('id' => $post_id, '_ANCHOR'=>$anchor,'section' => $anchor));
 
 if ($comments_actions_page->process()) {
@@ -185,8 +175,5 @@
 		if (!$core->error->flag()) {
 			dcPage::addSuccessNotice(__('All pings sent.'));
-			http::redirect($core->adminurl->get(
-				'admin.post',
-				array('id' => $post_id, 'tb'=> '1')
-			));
+			http::redirect('post.php?id='.$post_id.'&tb=1');
 		}
 	}
@@ -194,6 +181,7 @@
 
 # Format excerpt and content
-elseif (!empty($_POST) && $can_edit_post) {
-    list(, $post_format) = explode(':', $_POST['post_format']);
+elseif (!empty($_POST) && $can_edit_post)
+{
+	$post_format = $_POST['post_format'];
 	$post_excerpt = $_POST['post_excerpt'];
 	$post_content = $_POST['post_content'];
@@ -250,5 +238,5 @@
 		$core->callBehavior('adminBeforePostDelete',$post_id);
 		$core->blog->delPost($post_id);
-		http::redirect($core->adminurl->get("admin.posts"));
+		http::redirect('posts.php');
 	} catch (Exception $e) {
 		$core->error->add($e->getMessage());
@@ -301,6 +289,8 @@
 
 	# Update post
-	if ($post_id) {
-		try {
+	if ($post_id)
+	{
+		try
+		{
 			# --BEHAVIOR-- adminBeforePostUpdate
 			$core->callBehavior('adminBeforePostUpdate',$cur,$post_id);
@@ -311,15 +301,17 @@
 			$core->callBehavior('adminAfterPostUpdate',$cur,$post_id);
 			dcPage::addSuccessNotice (sprintf(__('The post "%s" has been successfully updated'),html::escapeHTML($cur->post_title)));
-			http::redirect($core->adminurl->get(
-				'admin.post',
-				array('id' => $post_id)
-			));
-		} catch (Exception $e) {
+			http::redirect('post.php?id='.$post_id);
+		}
+		catch (Exception $e)
+		{
 			$core->error->add($e->getMessage());
 		}
-	} else {
+	}
+	else
+	{
 		$cur->user_id = $core->auth->userID();
 
-		try {
+		try
+		{
 			# --BEHAVIOR-- adminBeforePostCreate
 			$core->callBehavior('adminBeforePostCreate',$cur);
@@ -331,9 +323,8 @@
 
 			dcPage::addSuccessNotice(__('Entry has been successfully created.'));
-			http::redirect($core->adminurl->get(
-				'admin.post',
-				array('id' => $return_id)
-			));
-		} catch (Exception $e) {
+			http::redirect('post.php?id='.$return_id);
+		}
+		catch (Exception $e)
+		{
 			$core->error->add($e->getMessage());
 		}
@@ -381,15 +372,10 @@
 }
 
-$admin_post_behavior = '';
-if (($core->auth->getOption('editor')==$post_editor)
-    && in_array($post_format, $core->getFormaters($core->auth->getOption('editor')))) {
-    $admin_post_behavior = $core->callBehavior('adminPostEditor');
-}
 
 dcPage::open($page_title.' - '.__('Entries'),
 	dcPage::jsDatePicker().
+	dcPage::jsToolBar().
 	dcPage::jsModal().
 	dcPage::jsMetaEditor().
-    $admin_post_behavior.
 	dcPage::jsLoad('js/_post.js').
 	dcPage::jsConfirmClose('entry-form','comment-form').
@@ -401,5 +387,5 @@
 		array(
 			html::escapeHTML($core->blog->name) => '',
-			__('Entries') => $core->adminurl->get("admin.posts"),
+			__('Entries') => 'posts.php',
 			($post_id ? $page_title_edit : $page_title) => ''
 		))
@@ -460,14 +446,6 @@
 /* Post form if we can edit post
 -------------------------------------------------------- */
-if ($can_edit_post) {
-	if (count($formaters_combo)>0 && ($core->auth->getOption('editor') && $core->auth->getOption('editor')!='')) {
-        $post_format_field = form::combo('post_format',$formaters_combo,"$post_editor:$post_format",'maximal');
-	} else {
-		$post_format_field = sprintf(__('Choose an active editor in %s.'),
-		'<a href="'.$core->adminurl->get("admin.user.preferences").'#user-options">'.__('your preferences').'</a>'
-		);
-		$post_format_field .= form::hidden('post_format','xhtml');
-	}
-
+if ($can_edit_post)
+{
 	$sidebar_items = new ArrayObject(array(
 		'status-box' => array(
@@ -489,9 +467,8 @@
 					'<div>'.
 					'<h5 id="label_format"><label for="post_format" class="classic">'.__('Text formatting').'</label></h5>'.
-					'<p>'.$post_format_field.'</p>'.
+					'<p>'.form::combo('post_format',$formaters_combo,$post_format,'maximal').
+					'</p>'.
 					'<p class="format_control control_no_xhtml">'.
-					'<a id="convert-xhtml" class="button'.($post_id && $post_format != 'wiki' ? ' hide' : '').'" href="'.
-					$core->adminurl->get('admin.post',array('id'=> $post_id,'xconv'=> '1')).
-					'">'.
+					'<a id="convert-xhtml" class="button'.($post_id && $post_format != 'wiki' ? ' hide' : '').'" href="post.php?id='.$post_id.'&amp;xconv=1">'.
 					__('Convert to XHTML').'</a></p></div>')),
 		'metas-box' => array(
@@ -590,5 +567,5 @@
 
 	echo '<div class="multi-part" title="'.($post_id ? __('Edit entry') : __('New entry')).'" id="edit-entry">';
-	echo '<form action="'.$core->adminurl->get('admin.post').'" method="post" id="entry-form">';
+	echo '<form action="post.php" method="post" id="entry-form">';
 	echo '<div id="entry-wrapper">';
 	echo '<div id="entry-content"><div class="constrained">';
@@ -616,5 +593,5 @@
 	} else {
 		echo
-		'<a id="post-cancel" href="'.$core->adminurl->get("admin.home").'" class="button" accesskey="c">'.__('Cancel').' (c)</a>';
+		'<a id="post-cancel" href="index.php" class="button" accesskey="c">'.__('Cancel').' (c)</a>';
 	}
 
@@ -668,5 +645,5 @@
 
 	if ($has_action) {
-		echo '<form action="'.$core->adminurl->get('admin.post').'" id="form-comments" method="post">';
+		echo '<form action="post.php" id="form-comments" method="post">';
 	}
 
@@ -675,5 +652,5 @@
 		showComments($comments,$has_action);
 	} else {
-		echo '<p>'.__('No comments').'</p>';
+		echo '<p>'.__('No comment').'</p>';
 	}
 
@@ -699,5 +676,5 @@
 	'<h3>'.__('Add a comment').'</h3>'.
 
-	'<form action="'.$core->adminurl->get("admin.comment").'" method="post" id="comment-form">'.
+	'<form action="comment.php" method="post" id="comment-form">'.
 	'<div class="constrained">'.
 	'<p><label for="comment_author" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Name:').'</label>'.
@@ -751,5 +728,5 @@
 	# tracbacks actions
 	if ($has_action) {
-		echo '<form action="'.$core->adminurl->get("admin.post").'" id="form-trackbacks" method="post">';
+		echo '<form action="post.php" id="form-trackbacks" method="post">';
 	}
 
@@ -785,5 +762,5 @@
 		echo
 		'<h3>'.__('Ping blogs').'</h3>'.
-		'<form action="'.$core->adminurl->get("admin.post",array('id' => $post_id)).'" id="trackback-form" method="post">'.
+		'<form action="post.php?id='.$post_id.'" id="trackback-form" method="post">'.
 		'<p><label for="tb_urls" class="area">'.__('URLs to ping:').'</label>'.
 		form::textarea('tb_urls', 60, 5, $tb_urls).
@@ -798,5 +775,5 @@
 		(empty($_GET['tb_auto']) ?
 			'&nbsp;&nbsp;<a class="button" href="'.
-			$core->adminurl->get("admin.post",array('id'=> $post_id,'tb_auto' => 1,'tb' => 1)).
+			'post.php?id='.$post_id.'&amp;tb_auto=1&amp;tb=1'.
 			'">'.__('Auto discover ping URLs').'</a>'
 		: '').
@@ -850,5 +827,4 @@
 function showComments($rs,$has_action,$tb=false)
 {
-	global $core;
 	echo
 	'<div class="table-outer">'.
@@ -869,5 +845,5 @@
 	while($rs->fetch())
 	{
-		$comment_url = $core->adminurl->get("admin.comment",array('id' => $rs->comment_id));
+		$comment_url = 'comment.php?id='.$rs->comment_id;
 
 		$img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
@@ -895,5 +871,5 @@
 		'<td class="maximal">'.html::escapeHTML($rs->comment_author).'</td>'.
 		'<td class="nowrap">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$rs->comment_dt).'</td>'.
-		'<td class="nowrap"><a href="'.$core->adminurl->get("admin.comments",array('ip' => $rs->comment_ip)).'">'.$rs->comment_ip.'</a></td>'.
+		'<td class="nowrap"><a href="comments.php?ip='.$rs->comment_ip.'">'.$rs->comment_ip.'</a></td>'.
 		'<td class="nowrap status">'.$img_status.'</td>'.
 		'<td class="nowrap status"><a href="'.$comment_url.'">'.
Index: admin/post_media.php
===================================================================
--- admin/post_media.php	(revision 2720)
+++ admin/post_media.php	(revision 2566)
@@ -72,5 +72,5 @@
 
 		echo
-		'<form action="'.$core->adminurl->get("admin.post.media").'" method="post">'.
+		'<form action="post_media.php" method="post">'.
 		'<p>'.__('Are you sure you want to remove this attachment?').'</p>'.
 		'<p><input type="submit" class="reset" value="'.__('Cancel').'" /> '.
Index: admin/posts.php
===================================================================
--- admin/posts.php	(revision 2720)
+++ admin/posts.php	(revision 2566)
@@ -112,5 +112,5 @@
 # Actions combo box
 
-$posts_actions_page = new dcPostsActionsPage($core,$core->adminurl->get("admin.posts"));
+$posts_actions_page = new dcPostsActionsPage($core,'posts.php');
 
 if ($posts_actions_page->process()) {
@@ -258,6 +258,6 @@
 {
 	echo
-	'<p class="top-add"><a class="button add" href="'.$core->adminurl->get("admin.post").'">'.__('New entry').'</a></p>'.
-	'<form action="'.$core->adminurl->get("admin.posts").'" method="get" id="filters-form">'.
+	'<p class="top-add"><a class="button add" href="post.php">'.__('New entry').'</a></p>'.
+	'<form action="posts.php" method="get" id="filters-form">'.
 	'<h3 class="out-of-screen-if-js">'.$form_filter_title.'</h3>'.
 
@@ -302,5 +302,5 @@
 	# Show posts
 	$post_list->display($page,$nb_per_page,
-	'<form action="'.$core->adminurl->get("admin.posts").'" method="post" id="form-entries">'.
+	'<form action="posts.php" method="post" id="form-entries">'.
 
 	'%s'.
Index: admin/posts_actions.php
===================================================================
--- admin/posts_actions.php	(revision 2720)
+++ admin/posts_actions.php	(revision 2566)
@@ -26,5 +26,5 @@
 	$args['redir'] = $_REQUEST['redir'];
 } else {
-	$uri = $core->adminurl->get("admin.posts");
+	$uri = 'posts.php';
 	$args=array();
 }
Index: admin/preferences.php
===================================================================
--- admin/preferences.php	(revision 2720)
+++ admin/preferences.php	(revision 2566)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2014 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -27,7 +27,4 @@
 
 $user_options = $core->auth->getOptions();
-if (empty($user_options['editor'])) {
-    $user_options['editor'] = '';
-}
 
 $core->auth->user_prefs->addWorkspace('dashboard');
@@ -61,19 +58,6 @@
 }
 
-# Editors combo
-$editors_combo = dcAdminCombos::getEditorsCombo();
-$editors = array_keys($editors_combo);
-
 # Formaters combo
 $formaters_combo = dcAdminCombos::getFormatersCombo();
-$formaters_combo_editor = array();
-
-if (!empty($user_options['editor']) && !empty($formaters_combo[$user_options['editor']])) {
-    $formaters_combo_editor = $formaters_combo[$user_options['editor']];
-} elseif (count($editors)!=0) {
-    $formaters_combo_editor = $formaters_combo[$editors[0]];
-} else {
-    $formaters_combo = array();
-}
 
 $status_combo = dcAdminCombos::getPostStatusescombo();
@@ -141,5 +125,5 @@
 		dcPage::addSuccessNotice(__('Personal information has been successfully updated.'));
 
-		http::redirect($core->adminurl->get("admin.user.preferences"));
+		http::redirect('preferences.php');
 	}
 	catch (Exception $e)
@@ -171,5 +155,4 @@
 		}
 		$user_options['post_format'] = $_POST['user_post_format'];
-		$user_options['editor'] = $_POST['user_editor'];
 		$user_options['enable_wysiwyg'] = !empty($_POST['user_wysiwyg']);
 
@@ -195,5 +178,5 @@
 
 		dcPage::addSuccessNotice(__('Personal options has been successfully updated.'));
-		http::redirect($core->adminurl->get("admin.user.preferences").'#user-options');
+		http::redirect('preferences.php#user-options');
 	}
 	catch (Exception $e)
@@ -221,5 +204,5 @@
 
 		dcPage::addSuccessNotice(__('Dashboard options has been successfully updated.'));
-		http::redirect($core->adminurl->get("admin.user.preferences").'#user-favorites');
+		http::redirect('preferences.php#user-favorites');
 	}
 	catch (Exception $e)
@@ -247,5 +230,5 @@
 		if (!$core->error->flag()) {
 			dcPage::addSuccessNotice(__('Favorites have been successfully added.'));
-			http::redirect($core->adminurl->get("admin.user.preferences").'#user-favorites');
+			http::redirect('preferences.php#user-favorites');
 		}
 	} catch (Exception $e) {
@@ -274,5 +257,5 @@
 		if (!$core->error->flag()) {
 			dcPage::addSuccessNotice(__('Favorites have been successfully removed.'));
-			http::redirect($core->adminurl->get("admin.user.preferences").'#user-favorites');
+			http::redirect('preferences.php#user-favorites');
 		}
 	} catch (Exception $e) {
@@ -301,5 +284,5 @@
 	if (!$core->error->flag()) {
 		dcPage::addSuccessNotice(__('Favorites have been successfully updated.'));
-		http::redirect($core->adminurl->get("admin.user.preferences").'#user-favorites');
+		http::redirect('preferences.php#user-favorites');
 	}
 }
@@ -312,5 +295,5 @@
 	if (!$core->error->flag()) {
 		dcPage::addSuccessNotice(__('Default favorites have been successfully updated.'));
-		http::redirect($core->adminurl->get("admin.user.preferences").'#user-favorites');
+		http::redirect('preferences.php#user-favorites');
 	}
 }
@@ -322,5 +305,4 @@
 	($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')).
 	dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
-	dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
 	dcPage::jsLoad('js/jquery/jquery.pwstrength.js').
 		'<script type="text/javascript">'."\n".
@@ -334,5 +316,4 @@
 				sprintf(__('Password strength: %s'),__('very strong'))."']});\n".
 		"});\n".
-        'var formats_by_editor = \''.json_encode($formaters_combo).'\';'.
 		"\n//]]>\n".
 		"</script>\n".
@@ -377,5 +358,5 @@
 echo
 '<h3>'.__('My profile').'</h3>'.
-'<form action="'.$core->adminurl->get("admin.user.preferences").'" method="post" id="user-form">'.
+'<form action="preferences.php" method="post" id="user-form">'.
 
 '<p><label for="user_name">'.__('Last Name:').'</label>'.
@@ -437,5 +418,5 @@
 
 echo
-'<form action="'.$core->adminurl->get("admin.user.preferences").'#user-options" method="post" id="opts-forms">'.
+'<form action="preferences.php" method="post" id="opts-forms">'.
 '<h3>'.__('My options').'</h3>';
 
@@ -473,9 +454,6 @@
 '<h4>'.__('Edition').'</h4>'.
 
-'<p class="field"><label for="user_editor">'.__('Preferred editor:').'</label>'.
-form::combo('user_editor',array_merge(array(__('Choose an editor') => ''),$editors_combo),$user_options['editor']).'</p>'.
-
 '<p class="field"><label for="user_post_format">'.__('Preferred format:').'</label>'.
-form::combo('user_post_format',array_merge(array('' => ''), $formaters_combo_editor),$user_options['post_format']).'</p>'.
+form::combo('user_post_format',$formaters_combo,$user_options['post_format']).'</p>'.
 
 '<p class="field"><label for="user_post_status">'.__('Default entry status:').'</label>'.
@@ -510,5 +488,5 @@
 echo '<h3>'.__('My dashboard').'</h3>';
 
-echo '<form action="'.$core->adminurl->get("admin.user.preferences").'" method="post" id="favs-form" class="two-boxes odd">';
+echo '<form action="preferences.php" method="post" id="favs-form" class="two-boxes odd">';
 
 echo '<div id="my-favs" class="fieldset"><h4>'.__('My favorites').'</h4>';
@@ -602,5 +580,5 @@
 
 echo
-'<form action="'.$core->adminurl->get("admin.user.preferences").'" method="post" id="db-forms" class="two-boxes even">'.
+'<form action="preferences.php" method="post" id="db-forms" class="two-boxes even">'.
 
 '<div class="fieldset">'.
Index: admin/search.php
===================================================================
--- admin/search.php	(revision 2720)
+++ admin/search.php	(revision 2727)
@@ -29,4 +29,6 @@
 if ($q)
 {
+	$q = html::escapeHTML($q);
+
 	$params = array();
 
@@ -70,5 +72,5 @@
 
 if ($qtype == 'p') {
-	$posts_actions_page = new dcPostsActionsPage($core,$core->adminurl->get("admin.search"),array('q'=>$q,'qtype'=>$qtype));
+	$posts_actions_page = new dcPostsActionsPage($core,'search.php',array('q'=>$q,'qtype'=>$qtype));
 
 	if ($posts_actions_page->process()) {
@@ -76,5 +78,5 @@
 	}
 } else {
-	$comments_actions_page = new dcCommentsActionsPage($core,$core->adminurl->get("admin.search"),array('q'=>$q,'qtype'=>$qtype));
+	$comments_actions_page = new dcCommentsActionsPage($core,'search.php',array('q'=>$q,'qtype'=>$qtype));
 
 	if ($comments_actions_page->process()) {
@@ -92,7 +94,7 @@
 
 echo
-'<form action="'.$core->adminurl->get("admin.search").'" method="get">'.
+'<form action="search.php" method="get">'.
 '<div class="fieldset"><h3>'.__('Search options').'</h3>'.
-'<p><label for="q">'.__('Query:').' </label>'.form::field('q',30,255,html::escapeHTML($q)).'</p>'.
+'<p><label for="q">'.__('Query:').' </label>'.form::field('q',30,255,$q).'</p>'.
 '<p><label for="qtype1" class="classic">'.form::radio(array('qtype','qtype1'),'p',$qtype == 'p').' '.__('Search in entries').'</label> '.
 '<label for="qtype2" class="classic">'.form::radio(array('qtype','qtype2'),'c',$qtype == 'c').' '.__('Search in comments').'</label></p>'.
@@ -116,5 +118,5 @@
 
 		$post_list->display($page,$nb_per_page,
-		'<form action="'.$core->adminurl->get("admin.search").'" method="post" id="form-entries">'.
+		'<form action="search.php" method="post" id="form-entries">'.
 
 		'%s'.
@@ -144,5 +146,5 @@
 
 		$comment_list->display($page,$nb_per_page,
-		'<form action="'.$core->adminurl->get("admin.search").'" method="post" id="form-comments">'.
+		'<form action="search.php" method="post" id="form-comments">'.
 
 		'%s'.
Index: admin/style/jsToolBar/jsToolBar.css
===================================================================
--- admin/style/jsToolBar/jsToolBar.css	(revision 2566)
+++ admin/style/jsToolBar/jsToolBar.css	(revision 2566)
@@ -0,0 +1,184 @@
+.jstEditor {
+	border-width : 0 1px 1px 1px;
+	border-style : solid;
+	border-color : #ddd;
+	background : #f7f7f7;
+}
+.jstEditor textarea, .jstEditor iframe {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	margin: 0;
+	border: 1px solid #fbfbfb;
+  	width: 100%;
+  	padding: .5em 0 0 0;
+  	min-height: 100px;
+}
+.jstHandle {
+	height: 8px;
+	background: #ccc url(resize.png) no-repeat center center;
+	font-size: 0.1em;
+	cursor: s-resize;
+	border-color: #ccc #ccc #ccc #000;
+	border-width: 0 1px 1px 1px;
+	border-style: solid;
+}
+.jstEditor textarea:focus, .jstEditor iframe:focus {
+	border-color: #bee74b;
+}
+.jstElements {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	padding: 0 32px 0 1rem;
+	border: 1px solid #dfdfdf;
+	overflow: hidden;
+	background: #f5f5f5;
+	border-radius: 4px 4px 0 0;
+	position: relative;
+	line-height: 30px;
+}
+.jstElements select, .jstElements button {
+	vertical-align: middle;
+}
+.jstElements select {
+	width: 12em;
+	margin-right: .6rem;
+	border: 1px solid #ddd;
+}
+.jstElements button {
+	width: 30px;
+	height: 28px;
+	border-style: solid;
+	border-width: 1px;
+	margin-left: 2px;
+	margin-bottom: 2px;
+	border-color: #e5e5e5 #ccc #ccc #e5e5e5;
+	background-color : #f7f7f7;
+	background-position : 50% 50%;
+	background-repeat: no-repeat;
+}
+.jstElements button:hover, .jstElements button:focus {
+	border-color : #ddd;
+	background-color: #fff;
+}
+.jstElements button span {
+	display: none;
+}
+.jstElements span {
+	display : inline-block;
+	vertical-align: top;
+}
+span.jstSpacer {
+	width : 8px;
+}
+.jstSwitcher {
+	display: block;
+	list-style: none;
+	margin: 0;
+	padding: 0 0 5px 0;
+	background: #dfdfdf;
+	border-top: 1px solid #999;
+}
+.jstSwitcher li {
+	display: inline;
+	margin: 0 0 0 5px;
+	padding: 2px 8px;
+}
+.jstSwitcher li.jstSwitcherCurrent {
+	color: #fff;
+	background: #677374;
+	border-radius: 0 0 2px 2px;
+}
+.jstSwitcher a {
+	font-weight: normal;
+	border-bottom: none !important;
+}
+
+/* Buttons
+-------------------------------------------------------- */
+button.jstb_strong {
+	background-image: url(bt_strong.png);
+}
+button.jstb_em {
+	background-image: url(bt_em.png);
+}
+button.jstb_ins {
+	background-image: url(bt_ins.png);
+}
+button.jstb_del {
+	background-image: url(bt_del.png);
+}
+button.jstb_quote {
+	background-image: url(bt_quote.png);
+}
+button.jstb_code {
+	background-image: url(bt_code.png);
+}
+button.jstb_paragraph {
+	background-image: url(bt_paragraph.png);
+}
+button.jstb_br {
+	background-image: url(bt_br.png);
+}
+button.jstb_blockquote {
+	background-image: url(bt_bquote.png);
+}
+button.jstb_pre {
+	background-image: url(bt_pre.png);
+}
+button.jstb_ul {
+	background-image: url(bt_ul.png);
+}
+button.jstb_ol {
+	background-image: url(bt_ol.png);
+}
+button.jstb_link {
+	background-image: url(bt_link.png);
+}
+button.jstb_img {
+	background-image: url(bt_img.png);
+}
+button.jstb_img_select {
+	background-image: url(bt_img_select.png);
+}
+button.jstb_post_link {
+	background-image: url(bt_post.png);
+}
+button.jstb_removeFormat {
+	background-color: #e5e5e5;
+	background-image: url(bt_clean.png);
+	position: absolute;
+	right: 2px;
+	top: 1px;
+	border-color: #ccc;
+}
+
+/* WYSIWYG Iframe */
+.wysiwygIframe {
+	border-width : 1px;
+	border-style : solid;
+	border-color : #000 #ccc #ccc #000;
+	width : 100%;
+}
+
+/* WYSIWYG Document */
+body.wysiwygDoc {
+	font: 12px "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;
+	color : #000;
+	background: #f9f9f9;
+	margin: 0;
+	padding : 2px;
+	border: none;
+}
+.wysiwygDoc pre, .wysiwygDoc code, .wysiwygDoc kbd, .wysiwygDoc samp {
+	font-family:"Courier New",Courier,monospace;
+	font-size : 1.1em;
+}
+.wysiwygDoc code {
+	color : #666;
+	font-weight : bold;
+}
+body.wysiwygDoc  > p:first-child {
+	margin-top: 0;
+}
Index: admin/user.php
===================================================================
--- admin/user.php	(revision 2720)
+++ admin/user.php	(revision 2566)
@@ -131,5 +131,5 @@
 
 			dcPage::addSuccessNotice(__('User has been successfully updated.'));
-			http::redirect($core->adminurl->get("admin.user",array('id' => $new_id)));
+			http::redirect('user.php?id='.$new_id);
 		}
 		# Add user
@@ -150,7 +150,7 @@
 			dcPage::addSuccessNotice(__('User has been successfully created.'));
 			if (!empty($_POST['saveplus'])) {
-				http::redirect($core->adminurl->get("admin.user"));
+				http::redirect('user.php');
 			} else {
-				http::redirect($core->adminurl->get("admin.user",array('id' => $new_id)));
+				http::redirect('user.php?id='.$new_id);
 			}
 		}
@@ -187,5 +187,5 @@
 		array(
 			__('System') => '',
-			__('Users') => $core->adminurl->get("admin.users"),
+			__('Users') => 'users.php',
 			$page_title => ''
 		))
@@ -201,5 +201,5 @@
 
 echo
-'<form action="'.$core->adminurl->get("admin.user").'" method="post" id="user-form">'.
+'<form action="user.php" method="post" id="user-form">'.
 '<div class="two-cols">'.
 
@@ -324,7 +324,7 @@
 	{
 		echo
-		'<form action="'.$core->adminurl->get("admin.user.actions").'" method="post">'.
+		'<form action="users_actions.php" method="post">'.
 		'<p><input type="submit" value="'.__('Add new permissions').'" />'.
-		form::hidden(array('redir'),$core->adminurl->get("admin.user",array('id' => $user_id))).
+		form::hidden(array('redir'),'user.php?id='.$user_id).
 		form::hidden(array('action'),'blogs').
 		form::hidden(array('users[]'),$user_id).
@@ -347,7 +347,6 @@
 				{
 					echo
-					'<form action="'.$core->adminurl->get("admin.user.actions").'" method="post" class="perm-block">'.
-					'<p class="blog-perm">'.__('Blog:').' <a href="'.
-					$core->adminurl->get("admin.blog",array('id' => html::escapeHTML($k)))'">'.
+					'<form action="users_actions.php" method="post" class="perm-block">'.
+					'<p class="blog-perm">'.__('Blog:').' <a href="blog.php?id='.html::escapeHTML($k).'">'.
 					html::escapeHTML($v['name']).'</a> ('.html::escapeHTML($k).')</p>';
 
@@ -361,5 +360,5 @@
 					'</ul>'.
 					'<p class="add-perm"><input type="submit" class="reset" value="'.__('Change permissions').'" />'.
-					form::hidden(array('redir'),$core->adminurl->get("admin.user",array('id' => $user_id))).
+					form::hidden(array('redir'),'user.php?id='.$user_id).
 					form::hidden(array('action'),'perms').
 					form::hidden(array('users[]'),$user_id).
Index: admin/users.php
===================================================================
--- admin/users.php	(revision 2720)
+++ admin/users.php	(revision 2566)
@@ -123,6 +123,6 @@
 
 	echo
-	'<p class="top-add"><strong><a class="button add" href="'.$core->adminurl->get("admin.user").'">'.__('New user').'</a></strong></p>'.
-	'<form action="'.$core->adminurl->get("admin.users").'" method="get" id="filters-form">'.
+	'<p class="top-add"><strong><a class="button add" href="user.php">'.__('New user').'</a></strong></p>'.
+	'<form action="users.php" method="get" id="filters-form">'.
 	'<h3 class="out-of-screen-if-js">'.$form_filter_title.'</h3>'.
 
@@ -151,5 +151,5 @@
 	# Show users
 	$user_list->display($page,$nb_per_page,
-	'<form action="'.$core->adminurl->get("admin.user.actions").'" method="post" id="form-users">'.
+	'<form action="users_actions.php" method="post" id="form-users">'.
 
 	'%s'.
Index: admin/users_actions.php
===================================================================
--- admin/users_actions.php	(revision 2720)
+++ admin/users_actions.php	(revision 2566)
@@ -49,11 +49,10 @@
 	else
 	{
-		$redir = $core->adminurl->get("admin.users", array(
-			'q'      => $_POST['q'],
-			'sortby' => $_POST['sortby'],
-			'order'  => $_POST['order'],
-			'page'   => $_POST['page'],
-			'nb'     => $_POST['nb']
-		));
+		$redir =
+		'users.php?q='.$_POST['q'].
+		'&sortby='.$_POST['sortby'].
+		'&order='.$_POST['order'].
+		'&page='.$_POST['page'].
+		'&nb='.$_POST['nb'];
 	}
 
@@ -138,5 +137,5 @@
 		array(
 			__('System') => '',
-			__('Users') => $core->adminurl->get("admin.users"),
+			__('Users') => 'users.php',
 			__('Permissions') => ''
 		));
@@ -145,5 +144,5 @@
 		array(
 			__('System') => '',
-			__('Users') => $core->adminurl->get("admin.users"),
+			__('Users') => 'users.php',
 			__('Actions') => ''
 		));
@@ -196,5 +195,5 @@
 
 	foreach ($users as $u) {
-		$user_list[] = '<a href="'.$core->adminurl->get("admin.user",array('id' => $u)).'">'.$u.'</a>';
+		$user_list[] = '<a href="user.php?id='.$u.'">'.$u.'</a>';
 	}
 
@@ -212,5 +211,5 @@
 	{
 		echo
-		'<form action="'.$core->adminurl->get("admin.user.actions").'" method="post" id="form-blogs">'.
+		'<form action="users_actions.php" method="post" id="form-blogs">'.
 		'<div class="table-outer clear">'.
 		'<table><tr>'.
@@ -257,5 +256,5 @@
 
 	foreach ($users as $u) {
-		$user_list[] = '<a href="'.$core->adminurl->get("admin.user",array('id' => $u)).'">'.$u.'</a>';
+		$user_list[] = '<a href="user.php?id='.$u.'">'.$u.'</a>';
 	}
 
@@ -265,9 +264,9 @@
 		implode(', ',$user_list)
 	).'</p>'.
-	'<form id="permissions-form" action="'.$core->adminurl->get("admin.user.actions").'" method="post">';
+	'<form id="permissions-form" action="users_actions.php" method="post">';
 
 	foreach ($blogs as $b)
 	{
-		echo '<h3>'.('Blog:').' <a href="'.$core->adminurl->get("admin.blog",array('id' => html::escapeHTML($b))).'">'.html::escapeHTML($b).'</a>'.
+		echo '<h3>'.('Blog:').' <a href="blog.php?id='.html::escapeHTML($b).'">'.html::escapeHTML($b).'</a>'.
 		form::hidden(array('blogs[]'),$b).'</h3>';
 		$unknown_perms = $user_perm;
Index: inc/admin/class.dc.favorites.php
===================================================================
--- inc/admin/class.dc.favorites.php	(revision 2725)
+++ inc/admin/class.dc.favorites.php	(revision 2566)
@@ -65,4 +65,5 @@
 			$this->migrateFavorites();
 		}
+		defaultFavorites::initDefaultFavorites($this);
 	}
 
@@ -76,5 +77,4 @@
      */
 	 public function setup() {
-		defaultFavorites::initDefaultFavorites($this);
 		$this->legacyFavorites();
 		$this->core->callBehavior('adminDashboardFavorites', $this->core, $this);
@@ -396,14 +396,13 @@
 {
 	public static function initDefaultFavorites($favs) {
-		$core =& $GLOBALS['core'];
 		$favs->registerMultiple(array(
 			'prefs' => array(
 				'title' => __('My preferences'),
-				'url' => $core->adminurl->get("admin.user.preferences"),
+				'url' => 'preferences.php',
 				'small-icon' => 'images/menu/user-pref.png',
 				'large-icon' => 'images/menu/user-pref-b.png'),
 			'new_post' => array(
 				'title' => __('New entry'),
-				'url' => $core->adminurl->get("admin.post"),
+				'url' => 'post.php',
 				'small-icon' => 'images/menu/edit.png',
 				'large-icon' => 'images/menu/edit-b.png',
@@ -411,5 +410,5 @@
 			'posts' => array(
 				'title' => __('Entries'),
-				'url' => $core->adminurl->get("admin.posts"),
+				'url' => 'posts.php',
 				'small-icon' => 'images/menu/entries.png',
 				'large-icon' => 'images/menu/entries-b.png',
@@ -418,5 +417,5 @@
 			'comments' => array(
 				'title' => __('Comments'),
-				'url' => $core->adminurl->get("admin.comments"),
+				'url' => 'comments.php',
 				'small-icon' => 'images/menu/comments.png',
 				'large-icon' => 'images/menu/comments-b.png',
@@ -425,5 +424,5 @@
 			'search' => array(
 				'title' => __('Search'),
-				'url' => $core->adminurl->get("admin.search"),
+				'url' => 'search.php',
 				'small-icon' => 'images/menu/search.png',
 				'large-icon' => 'images/menu/search-b.png',
@@ -431,5 +430,5 @@
 			'categories' => array(
 				'title' => __('Categories'),
-				'url' => $core->adminurl->get("admin.categories"),
+				'url' => 'categories.php',
 				'small-icon' => 'images/menu/categories.png',
 				'large-icon' => 'images/menu/categories-b.png',
@@ -437,5 +436,5 @@
 			'media' => array(
 				'title' => __('Media manager'),
-				'url' => $core->adminurl->get("admin.media"),
+				'url' => 'media.php',
 				'small-icon' => 'images/menu/media.png',
 				'large-icon' => 'images/menu/media-b.png',
@@ -443,5 +442,5 @@
 			'blog_pref' => array(
 				'title' => __('Blog settings'),
-				'url' => $core->adminurl->get("admin.blog.pref"),
+				'url' => 'blog_pref.php',
 				'small-icon' => 'images/menu/blog-pref.png',
 				'large-icon' => 'images/menu/blog-pref-b.png',
@@ -449,5 +448,5 @@
 			'blog_theme' => array(
 				'title' => __('Blog appearance'),
-				'url' => $core->adminurl->get("admin.blog.theme"),
+				'url' => 'blog_theme.php',
 				'small-icon' => 'images/menu/themes.png',
 				'large-icon' => 'images/menu/blog-theme-b.png',
@@ -455,5 +454,5 @@
 			'blogs' => array(
 				'title' => __('Blogs'),
-				'url' => $core->adminurl->get("admin.blogs"),
+				'url' => 'blogs.php',
 				'small-icon' => 'images/menu/blogs.png',
 				'large-icon' => 'images/menu/blogs-b.png',
@@ -461,20 +460,20 @@
 			'users' => array(
 				'title' => __('Users'),
-				'url' => $core->adminurl->get("admin.users"),
+				'url' => 'users.php',
 				'small-icon' => 'images/menu/users.png',
 				'large-icon' => 'images/menu/users-b.png'),
 			'plugins' => array(
 				'title' => __('Plugins management'),
-				'url' => $core->adminurl->get("admin.plugins"),
+				'url' => 'plugins.php',
 				'small-icon' => 'images/menu/plugins.png',
 				'large-icon' => 'images/menu/plugins-b.png'),
 			'langs' => array(
 				'title' => __('Languages'),
-				'url' => $core->adminurl->get("admin.langs"),
+				'url' => 'langs.php',
 				'small-icon' => 'images/menu/langs.png',
 				'large-icon' => 'images/menu/langs-b.png'),
 			'help' => array(
 				'title' => __('Global help'),
-				'url' => $core->adminurl->get("admin.help"),
+				'url' => 'help.php',
 				'small-icon' => 'images/menu/help.png',
 				'large-icon' => 'images/menu/help-b.png')
Index: inc/admin/lib.admincombos.php
===================================================================
--- inc/admin/lib.admincombos.php	(revision 2679)
+++ inc/admin/lib.admincombos.php	(revision 2566)
@@ -51,5 +51,5 @@
 	*/
 	public static function getPostStatusesCombo() {
-		$status_combo =	 array();
+		$status_combo =  array();
 		foreach (self::$core->blog->getAllPostStatus() as $k => $v) {
 			$status_combo[$v] = (string) $k;
@@ -141,41 +141,12 @@
 
 	/**
-	Returns a combo containing all available editors in admin
+	Returns a combo containing all available formaters in admin
 
 	@return	<b>array</b> the combo box (form::combo -compatible format)
 	*/
-	public static function getEditorsCombo()
-	{
-		$editors_combo = array();
-
-		foreach (self::$core->getEditors() as $v) {
-			$editors_combo[$v] = $v;
+	public static function getFormatersCombo() {
+		foreach (self::$core->getFormaters() as $v) {
+			$formaters_combo[$v] = $v;
 		}
-		
-		return $editors_combo;
-	}
-
-	/**
-	Returns a combo containing all available formaters by editor in admin
-
-	@param	editor_id	<b>string</b>	Editor id (dcLegacyEditor, dcCKEditor, ...)
-	@return	<b>array</b> the combo box (form::combo -compatible format)
-	*/
-	public static function getFormatersCombo($editor_id='')
-	{
-		$formaters_combo = array();
-
-        if (!empty($editor_id)) {
-            foreach (self::$core->getFormaters($editor_id) as $formater) {
-                $formaters_combo[$formater] = $formater;
-            }
-        } else {
-            foreach (self::$core->getFormaters() as $editor => $formaters) {
-                foreach ($formaters as $formater) {
-                    $formaters_combo[$editor][$formater] = $formater;
-                }
-            }
-        }
-
 		return $formaters_combo;
 	}
Index: nc/admin/lib.dc.adminurl.php
===================================================================
--- inc/admin/lib.dc.adminurl.php	(revision 2708)
+++ 	(revision )
@@ -1,90 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-if (!defined('DC_RC_PATH')) { return; }
-
-
-/**
-@ingroup DC_CORE
-@nosubgrouping
-@brief URL Handler for admin urls
-
-*/
-class dcAdminURL
-{
-	/** @var dcCore dcCore instance */
-	protected $core;
-	protected $urls;
-
-	/**
-	Inits dcAdminURL object
-
-	@param	core		<b>dcCore</b>		Dotclear core reference
-	*/
-	public function __construct($core)
-	{
-		$this->core = $core;
-		$this->urls = new ArrayObject();
-	}
-
-	/**
-	 * Registers a new url
-	 * @param  string $name   the url name
-	 * @param  string $url    url value
-	 * @param  array  $params query string params (optional)
-	 */
-	public function register ($name,$url,$params = array()) {
-		$this->urls[$name] = array('url' => $url, 'qs' => $params);
-	}
-
-	/**
-	 * Registers a new url as a copy of an existing one
-	 * @param  string $name   url name
-	 * @param  streing $orig   url to copy information from
-	 * @param  array  $params extra parameters to add
-	 * @param  string $newurl new url if different from the original
-	 */
-	public function registercopy ($name,$orig,$params = array(),$newurl='') {
-		if (!isset($this->urls[$orig])) {
-			throw new exception ('Unknown URL handler for '.$orig);
-		}
-		$url = $this->urls[$orig];
-		$url['qs'] = array_merge($url['qs'],$params);
-		if ($newurl != '') {
-			$url['url'] = $newurl;
-		}
-		$this->urls[$name] = $url;
-
-	}
-
-	/**
-	 * retrieves a URL given its name, and optional parameters
-	 *
-	 * @param  string $name      URL Name
-	 * @param  array  $params    query string parameters, given as an associative array
-	 * @param  string $separator separator to use between QS parameters
-	 * @return string            the forged url
-	 */
-	public function get ($name,$params=array(),$separator='&amp;') {
-		if (!isset($this->urls[$name])) {
-			throw new exception ('Unknown URL handler for '.$name);
-		}
-		$url = $this->urls[$name];
-		$p = array_merge($url['qs'],$params);
-		$u = $url['url'];
-		if (!empty($p)) {
-			$u .= '?'.http_build_query($p,'',$separator);
-		}
-		return $u;
-	}
-
-}
-
Index: inc/admin/lib.dc.page.php
===================================================================
--- inc/admin/lib.dc.page.php	(revision 2720)
+++ inc/admin/lib.dc.page.php	(revision 2513)
@@ -66,5 +66,5 @@
 
 			if ($core->auth->getBlogCount() > 20) {
-				$blog_box .= ' - <a href="'.$core->adminurl->get("admin.blogs").'">'.__('Change blog').'</a>';
+				$blog_box .= ' - <a href="blogs.php">'.__('Change blog').'</a>';
 			}
 			$blog_box .= '</p>';
@@ -137,8 +137,8 @@
 		'</ul>'."\n".
 		'<div id="header">'.
-		'<h1><a href="'.$core->adminurl->get("admin.home").'"><span class="hidden">'.DC_VENDOR_NAME.'</span></a></h1>'."\n";
-
-		echo
-		'<form action="'.$core->adminurl->get("admin.home").'" method="post" id="top-info-blog">'.
+		'<h1><a href="index.php"><span class="hidden">'.DC_VENDOR_NAME.'</span></a></h1>'."\n";
+
+		echo
+		'<form action="index.php" method="post" id="top-info-blog">'.
 		$blog_box.
 		'<p><a href="'.$core->blog->url.'" class="outgoing" title="'.__('Go to site').
@@ -146,8 +146,8 @@
 		'</p></form>'.
 		'<ul id="top-info-user">'.
-		'<li><a class="'.(preg_match('/index.php$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="'.$core->adminurl->get("admin.home").'">'.__('My dashboard').'</a></li>'.
+		'<li><a class="'.(preg_match('/index.php$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="index.php">'.__('My dashboard').'</a></li>'.
 		'<li><a class="smallscreen'.(preg_match('/preferences.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' active' : '').
-		'" href="'.$core->adminurl->get("admin.user.preferences").'">'.__('My preferences').'</a></li>'.
-		'<li><a href="'.$core->adminurl->get("admin.home",array('logout' => 1)).'" class="logout"><span class="nomobile">'.sprintf(__('Logout %s'),$core->auth->userID()).
+		'" href="preferences.php">'.__('My preferences').'</a></li>'.
+		'<li><a href="index.php?logout=1" class="logout"><span class="nomobile">'.sprintf(__('Logout %s'),$core->auth->userID()).
 		'</span><img src="images/logout.png" alt="" /></a></li>'.
 		'</ul>'.
@@ -255,5 +255,5 @@
 		if (!$GLOBALS['__resources']['ctxhelp']) {
 			echo
-			'<p id="help-button"><a href="'.$core->adminurl->get("admin.help").'" class="outgoing" title="'.
+			'<p id="help-button"><a href="help.php" class="outgoing" title="'.
 			__('Global help').'">'.__('Global help').'</a></p>';
 		}
@@ -267,5 +267,5 @@
 		'<div id="main-menu">'."\n".
 
-		'<form id="search-menu" action="'.$core->adminurl->get("admin.search").'" method="get">'.
+		'<form id="search-menu" action="search.php" method="get">'.
 		'<p><label for="qx" class="hidden">'.__('Search:').' </label>'.form::field('qx',30,255,'').
 		'<input type="submit" value="'.__('OK').'" /></p>'.
@@ -374,5 +374,4 @@
 	public static function breadcrumb($elements=null,$options=array())
 	{
-		global $core;
 		$with_home_link = isset($options['home_link'])?$options['home_link']:true;
 		$hl = isset($options['hl'])?$options['hl']:true;
@@ -380,5 +379,5 @@
 		// First item of array elements should be blog's name, System or Plugins
 		$res = '<h2>'.($with_home_link ?
-			'<a class="go_home" href="'.$core->adminurl->get("admin.home").'"><img src="style/dashboard.png" alt="'.__('Go to dashboard').'" /></a>' :
+			'<a class="go_home" href="index.php"><img src="style/dashboard.png" alt="'.__('Go to dashboard').'" /></a>' :
 			'<img src="style/dashboard-alt.png" alt="" />');
 		$index = 0;
@@ -474,5 +473,4 @@
 	public static function helpBlock()
 	{
-		global $core;
 		$args = func_get_args();
 
@@ -528,5 +526,5 @@
 		'<div id="helplink"><hr />'.
 		'<p>'.
-		sprintf(__('See also %s'),sprintf('<a href="'.$core->adminurl->get("admin.help").'">%s</a>',__('the global help'))).
+		sprintf(__('See also %s'),sprintf('<a href="help.php">%s</a>',__('the global help'))).
 		'.</p>'.
 		'</div></div>';
@@ -591,5 +589,4 @@
 		'<script type="text/javascript">'."\n".
 		"//<![CDATA[\n".
-		'jsToolBar = {}, jsToolBar.prototype = { elements : {} };'."\n".
 		self::jsVar('dotclear.nonce',$GLOBALS['core']->getNonce()).
 		self::jsVar('dotclear.img_plus_src','images/expand.png').
@@ -831,8 +828,88 @@
 	}
 
-
 	public static function jsToolBar()
 	{
-		# Deprecated but we keep this for plugins.
+		$res =
+		'<link rel="stylesheet" type="text/css" href="style/jsToolBar/jsToolBar.css" />'.
+		'<script type="text/javascript" src="js/jsToolBar/jsToolBar.js"></script>';
+
+		if (isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('enable_wysiwyg')) {
+			$res .= '<script type="text/javascript" src="js/jsToolBar/jsToolBar.wysiwyg.js"></script>';
+		}
+
+		$res .=
+		'<script type="text/javascript" src="js/jsToolBar/jsToolBar.dotclear.js"></script>'.
+		'<script type="text/javascript">'."\n".
+		"//<![CDATA[\n".
+		"jsToolBar.prototype.dialog_url = 'popup.php'; ".
+		"jsToolBar.prototype.iframe_css = '".
+		'body{'.
+		'font: 12px "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;'.
+		'color : #000;'.
+		'background: #f9f9f9;'.
+		'margin: 0;'.
+		'padding : 2px;'.
+		'border: none;'.
+		(l10n::getTextDirection($GLOBALS['_lang']) == 'rtl' ? 'direction:rtl;' : '').
+		'}'.
+		'pre, code, kbd, samp {'.
+		'font-family:"Courier New",Courier,monospace;'.
+		'font-size : 1.1em;'.
+		'}'.
+		'code {'.
+		'color : #666;'.
+		'font-weight : bold;'.
+		'}'.
+		'body > p:first-child {'.
+		'margin-top: 0;'.
+		'}'.
+		"'; ".
+		"jsToolBar.prototype.base_url = '".html::escapeJS($GLOBALS['core']->blog->host)."'; ".
+		"jsToolBar.prototype.switcher_visual_title = '".html::escapeJS(__('visual'))."'; ".
+		"jsToolBar.prototype.switcher_source_title = '".html::escapeJS(__('source'))."'; ".
+		"jsToolBar.prototype.legend_msg = '".
+		html::escapeJS(__('You can use the following shortcuts to format your text.'))."'; ".
+		"jsToolBar.prototype.elements.blocks.options.none = '".html::escapeJS(__('-- none --'))."'; ".
+		"jsToolBar.prototype.elements.blocks.options.nonebis = '".html::escapeJS(__('-- block format --'))."'; ".
+		"jsToolBar.prototype.elements.blocks.options.p = '".html::escapeJS(__('Paragraph'))."'; ".
+		"jsToolBar.prototype.elements.blocks.options.h1 = '".html::escapeJS(__('Level 1 header'))."'; ".
+		"jsToolBar.prototype.elements.blocks.options.h2 = '".html::escapeJS(__('Level 2 header'))."'; ".
+		"jsToolBar.prototype.elements.blocks.options.h3 = '".html::escapeJS(__('Level 3 header'))."'; ".
+		"jsToolBar.prototype.elements.blocks.options.h4 = '".html::escapeJS(__('Level 4 header'))."'; ".
+		"jsToolBar.prototype.elements.blocks.options.h5 = '".html::escapeJS(__('Level 5 header'))."'; ".
+		"jsToolBar.prototype.elements.blocks.options.h6 = '".html::escapeJS(__('Level 6 header'))."'; ".
+		"jsToolBar.prototype.elements.strong.title = '".html::escapeJS(__('Strong emphasis'))."'; ".
+		"jsToolBar.prototype.elements.em.title = '".html::escapeJS(__('Emphasis'))."'; ".
+		"jsToolBar.prototype.elements.ins.title = '".html::escapeJS(__('Inserted'))."'; ".
+		"jsToolBar.prototype.elements.del.title = '".html::escapeJS(__('Deleted'))."'; ".
+		"jsToolBar.prototype.elements.quote.title = '".html::escapeJS(__('Inline quote'))."'; ".
+		"jsToolBar.prototype.elements.code.title = '".html::escapeJS(__('Code'))."'; ".
+		"jsToolBar.prototype.elements.br.title = '".html::escapeJS(__('Line break'))."'; ".
+		"jsToolBar.prototype.elements.blockquote.title = '".html::escapeJS(__('Blockquote'))."'; ".
+		"jsToolBar.prototype.elements.pre.title = '".html::escapeJS(__('Preformated text'))."'; ".
+		"jsToolBar.prototype.elements.ul.title = '".html::escapeJS(__('Unordered list'))."'; ".
+		"jsToolBar.prototype.elements.ol.title = '".html::escapeJS(__('Ordered list'))."'; ".
+
+		"jsToolBar.prototype.elements.link.title = '".html::escapeJS(__('Link'))."'; ".
+		"jsToolBar.prototype.elements.link.href_prompt = '".html::escapeJS(__('URL?'))."'; ".
+		"jsToolBar.prototype.elements.link.hreflang_prompt = '".html::escapeJS(__('Language?'))."'; ".
+
+		"jsToolBar.prototype.elements.img.title = '".html::escapeJS(__('External image'))."'; ".
+		"jsToolBar.prototype.elements.img.src_prompt = '".html::escapeJS(__('URL?'))."'; ".
+
+		"jsToolBar.prototype.elements.img_select.title = '".html::escapeJS(__('Media chooser'))."'; ".
+		"jsToolBar.prototype.elements.post_link.title = '".html::escapeJS(__('Link to an entry'))."'; ".
+
+		"jsToolBar.prototype.elements.removeFormat.title = '".html::escapeJS(__('Remove text formating'))."'; ";
+
+		if (!$GLOBALS['core']->auth->check('media,media_admin',$GLOBALS['core']->blog->id)) {
+			$res .= "jsToolBar.prototype.elements.img_select.disabled = true;\n";
+		}
+
+		$res .=
+		"\n//]]>\n".
+		"</script>\n";
+
+		return $res;
 	}
 
Index: inc/admin/lib.pager.php
===================================================================
--- inc/admin/lib.pager.php	(revision 2666)
+++ inc/admin/lib.pager.php	(revision 2566)
@@ -381,5 +381,5 @@
 				echo '<p><strong>'.__('No comments or trackbacks matches the filter').'</strong></p>';
 			} else {
-				echo '<p><strong>'.__('No comments').'</strong></p>';
+				echo '<p><strong>'.__('No comment').'</strong></p>';
 			}
 		}
Index: nc/admin/lib.themeconfig.php
===================================================================
--- inc/admin/lib.themeconfig.php	(revision 2660)
+++ 	(revision )
@@ -1,488 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2014 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-if (!defined('DC_ADMIN_CONTEXT')) { return; }
-
-/**
- * @ingroup DC_CORE
- * @brief Helper for theme configurators.
- * @since 2.7
- *
- * Provides helper tools for theme configurators.
- */
-class dcThemeConfig
-{
-
-/**
- * Compute contrast ratio between two colors
- *
- * @param  string $color      text color
- * @param  string $background background color
- *
- * @return float             computed ratio
- */
-	public static function computeContrastRatio($color,$background)
-	{
-		// Compute contrast ratio between two colors
-
-		$color = self::adjustColor($color);
-		if (($color == '') || (strlen($color) != 7)) return 0;
-		$background = self::adjustColor($background);
-		if (($background == '') || (strlen($background) != 7)) return 0;
-
-		$l1 = (0.2126 * pow(hexdec(substr($color,1,2))/255,2.2)) +
-			(0.7152 * pow(hexdec(substr($color,3,2))/255,2.2)) +
-			(0.0722 * pow(hexdec(substr($color,5,2))/255,2.2));
-
-		$l2 = (0.2126 * pow(hexdec(substr($background,1,2))/255,2.2)) +
-		 	(0.7152 * pow(hexdec(substr($background,3,2))/255,2.2)) +
-			(0.0722 * pow(hexdec(substr($background,5,2))/255,2.2));
-
-		if ($l1 > $l2) {
-			$ratio = ($l1 + 0.05) / ($l2 + 0.05);
-		} else {
-			$ratio = ($l2 + 0.05) / ($l1 + 0.05);
-		}
-		return $ratio;
-	}
-
-/**
- * Compute WCAG contrast ration level
- *
- * @param  float  $ratio computed ratio between foreground and backround color
- * @param  string  $size  font size as defined in CSS
- * @param  boolean $bold  true if bold font
- *
- * @return string         WCAG contrast ratio level (AAA, AA or <nothing>)
- */
-	public static function contrastRatioLevel($ratio,$size,$bold=false)
-	{
-		if ($size == '') {
-			return '';
-		}
-
-		// Eval font size in em (assume base font size in pixels equal to 16)
-		if (preg_match('/^([0-9.]+)\s*(%|pt|px|em|ex)?$/',$size,$m)) {
-			if (empty($m[2])) {
-				$m[2] = 'em';
-			}
-		} else {
-			return '';
-		}
-		switch ($m[2]) {
-			case '%':
-				$s = (float) $m[1] / 100;
-				break;
-			case 'pt':
-				$s = (float) $m[1] / 12;
-				break;
-			case 'px':
-				$s = (float) $m[1] / 16;
-				break;
-			case 'em':
-				$s = (float) $m[1];
-				break;
-			case 'ex':
-				$s = (float) $m[1] / 2;
-				break;
-			default:
-				return '';
-		}
-
-		$large = ((($s > 1.5) && ($bold == false)) || (($s > 1.2) && ($bold == true)));
-
-		// Check ratio
-		if ($ratio > 7) {
-			return 'AAA';
-		} elseif (($ratio > 4.5) && $large) {
-			return 'AAA';
-		} elseif ($ratio > 4.5) {
-			return 'AA';
-		} elseif (($ratio > 3) && $large) {
-			return 'AA';
-		}
-		return '';
-	}
-
-/**
- * Return full information about constrat ratio
- *
- * @param  string  $color      text color
- * @param  string  $background background color
- * @param  string  $size       font size
- * @param  boolean $bold       bold font
- *
- * @return string              contrast ratio including WCAG level
- */
-	public static function contrastRatio($color,$background,$size='',$bold=false)
-	{
-		if (($color != '') && ($background != '')) {
-			$ratio = self::computeContrastRatio($color,$background);
-			$level = self::contrastRatioLevel($ratio,$size,$bold);
-			return
-				sprintf(__('ratio %.1f'),$ratio).
-				($level != '' ? ' '.sprintf(__('(%s)'),$level) : '');
-		}
-		return '';
-	}
-
-/**
- * Check font size
- *
- * @param  string $s font size
- *
- * @return string    checked font size
- */
-	public static function adjustFontSize($s)
-	{
-		if (preg_match('/^([0-9.]+)\s*(%|pt|px|em|ex)?$/',$s,$m)) {
-			if (empty($m[2])) {
-				$m[2] = 'em';
-			}
-			return $m[1].$m[2];
-		}
-		return null;
-	}
-
-/**
- * Check object position, should be x:y
- *
- * @param  string $p position
- *
- * @return string    checked position
- */
-	public static function adjustPosition($p)
-	{
-		if (!preg_match('/^[0-9]+(:[0-9]+)?$/',$p)) {
-			return null;
-		}
-		$p = explode(':',$p);
-
-		return $p[0].(count($p) == 1 ? ':0' : ':'.$p[1]);
-	}
-
-/**
- * Check a CSS color
- *
- * @param  string $c CSS color
- *
- * @return string    checked CSS color
- */
-	public static function adjustColor($c)
-	{
-		if ($c === '') {
-			return '';
-		}
-
-		$c = strtoupper($c);
-
-		if (preg_match('/^[A-F0-9]{3,6}$/',$c)) {
-			$c = '#'.$c;
-		}
-		if (preg_match('/^#[A-F0-9]{6}$/',$c)) {
-			return $c;
-		}
-		if (preg_match('/^#[A-F0-9]{3,}$/',$c)) {
-			return '#'.substr($c,1,1).substr($c,1,1).substr($c,2,1).substr($c,2,1).substr($c,3,1).substr($c,3,1);
-		}
-
-		return '';
-	}
-
-/**
- * Check and clean CSS
- *
- * @param  string $css CSS to be checked
- *
- * @return string      checked CSS
- */
-	public static function cleanCSS($css)
-	{
-		// TODO ?
-		return $css;
-	}
-
-/**
- * Return real path of a user defined CSS
- *
- * @param  string $folder CSS folder
- *
- * @return string         real path of CSS
- */
-	public static function cssPath($folder)
-	{
-		global $core;
-		return path::real($core->blog->public_path).'/'.$folder;
-	}
-
-/**
- * Retirn URL of a user defined CSS
- *
- * @param  string $folder CSS folder
- *
- * @return string         CSS URL
- */
-	public static function cssURL($folder)
-	{
-		global $core;
-		return $core->blog->settings->system->public_url.'/'.$folder;
-	}
-
-/**
- * Check if user defined CSS may be written
- *
- * @param  string  $folder CSS folder
- * @param  boolean $create create CSS folder if necessary
- *
- * @return boolean          true if CSS folder exists and may be written, else false
- */
-	public static function canWriteCss($folder,$create=false)
-	{
-		global $core;
-
-		$public = path::real($core->blog->public_path);
-		$css = self::cssPath($folder);
-
-		if (!is_dir($public)) {
-			$core->error->add(__('The \'public\' directory does not exist.'));
-			return false;
-		}
-
-		if (!is_dir($css)) {
-			if (!is_writable($public)) {
-				$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public'));
-				return false;
-			}
-			if ($create) {
-				files::makeDir($css);
-			}
-			return true;
-		}
-
-		if (!is_writable($css)) {
-			$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public/'.$folder));
-			return false;
-		}
-
-		return true;
-	}
-
-/**
- * Store CSS property value in associated array
- *
- * @param  array $css       CSS associated array
- * @param  string $selector selector
- * @param  string $prop     property
- * @param  string $value    value
- */
-	public static function prop(&$css,$selector,$prop,$value)
-	{
-		if ($value) {
-			$css[$selector][$prop] = $value;
-		}
-	}
-
-/**
- * Store background image property in CSS associated array
- *
- * @param  string $folder   image folder
- * @param  array $css       CSS associated array
- * @param  string $selector selector
- * @param  boolean $value   false for default, true if image should be set
- * @param  string $image    image filename
- */
-	public static function backgroundImg($folder,&$css,$selector,$value,$image)
-	{
-		$file = self::imagesPath($folder).'/'.$image;
-		if ($value && file_exists($file)){
-			$css[$selector]['background-image'] = 'url('.self::imagesURL($folder).'/'.$image.')';
-		}
-	}
-
-/**
- * Write CSS file
- *
- * @param  string $folder CSS folder
- * @param  string $theme  CSS filename
- * @param  string $css    CSS file content
- */
-	public static function writeCss($folder,$theme,$css)
-	{
-		file_put_contents(self::cssPath($folder).'/'.$theme.'.css', $css);
-	}
-
-/**
- * Delete CSS file
- *
- * @param  string $folder CSS folder
- * @param  string $theme  CSS filename to be removed
- */
-	public static function dropCss($folder,$theme)
-	{
-		$file = path::real(self::cssPath($folder).'/'.$theme.'.css');
-		if (is_writable(dirname($file))) {
-			@unlink($file);
-		}
-	}
-
-/**
- * Return public URL of user defined CSS
- *
- * @param  string $folder CSS folder
- *
- * @return string         CSS file URL
- */
-	public static function publicCssUrlHelper($folder)
-	{
-		$theme = $GLOBALS['core']->blog->settings->system->theme;
-		$url = self::cssURL($folder);
-		$path = self::cssPath($folder);
-
-		if (file_exists($path.'/'.$theme.'.css')) {
-			return $url.'/'.$theme.'.css';
-		}
-
-		return null;
-	}
-
-/**
- * Return real path of folder images
- *
- * @param  string $folder images folder
- *
- * @return string         real path of folder
- */
-	public static function imagesPath($folder)
-	{
-		global $core;
-		return path::real($core->blog->public_path).'/'.$folder;
-	}
-
-/**
- * Return URL of images folder
- *
- * @param  string $folder images folder
- *
- * @return string         URL of images folder
- */
-	public static function imagesURL($folder)
-	{
-		global $core;
-		return $core->blog->settings->system->public_url.'/'.$folder;
-	}
-
-/**
- * Check if images folder exists and may be written
- *
- * @param  string  $folder images folder
- * @param  boolean $create create the folder if not exists
- *
- * @return boolean          true if folder exists and may be written
- */
-	public static function canWriteImages($folder,$create=false)
-	{
-		global $core;
-
-		$public = path::real($core->blog->public_path);
-		$imgs = self::imagesPath($folder);
-
-		if (!function_exists('imagecreatetruecolor') || !function_exists('imagepng') || !function_exists('imagecreatefrompng')) {
-			$core->error->add(__('At least one of the following functions is not available: '.
-				'imagecreatetruecolor, imagepng & imagecreatefrompng.'));
-			return false;
-		}
-
-		if (!is_dir($public)) {
-			$core->error->add(__('The \'public\' directory does not exist.'));
-			return false;
-		}
-
-		if (!is_dir($imgs)) {
-			if (!is_writable($public)) {
-				$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public'));
-				return false;
-			}
-			if ($create) {
-				files::makeDir($imgs);
-			}
-			return true;
-		}
-
-		if (!is_writable($imgs)) {
-			$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public/'.$folder));
-			return false;
-		}
-
-		return true;
-	}
-
-/**
- * Upload an image in images folder
- *
- * @param  string $folder images folder
- * @param  string $f      selected image file (as $_FILES[<file input fieldname>])
- * @param  int    $width  check accurate width of uploaded image if <> 0
- *
- * @return string         full pathname of uploaded image
- */
-	public static function uploadImage($folder,$f,$width=0)
-	{
-		if (!self::canWriteImages($folder,true)) {
-			throw new Exception(__('Unable to create images.'));
-		}
-
-		$name = $f['name'];
-		$type = files::getMimeType($name);
-
-		if ($type != 'image/jpeg' && $type != 'image/png') {
-			throw new Exception(__('Invalid file type.'));
-		}
-
-		$dest = self::imagesPath($folder).'/uploaded'.($type == 'image/png' ? '.png' : '.jpg');
-
-		if (@move_uploaded_file($f['tmp_name'],$dest) === false) {
-			throw new Exception(__('An error occurred while writing the file.'));
-		}
-
-		if ($width) {
-			$s = getimagesize($dest);
-			if ($s[0] != $width) {
-				throw new Exception(sprintf(__('Uploaded image is not %s pixels wide.'),$width));
-			}
-		}
-
-		return $dest;
-	}
-
-/**
- * Delete an image from images folder (with its thumbnails if any)
- *
- * @param  string $folder images folder
- * @param  string $img    image filename
- */
-	public static function dropImage($folder,$img)
-	{
-		global $core;
-
-		$img = path::real(self::imagesPath($folder).'/'.$img);
-		if (is_writable(dirname($img))) {
-			// Delete thumbnails if any
-			try {
-				$media = new dcMedia($core);
-				$media->imageThumbRemove($img);
-			} catch (Exception $e) {
-				$core->error->add($e->getMessage());
-			}
-			// Delete image
-			@unlink($img);
-		}
-	}
-}
Index: inc/admin/prepend.php
===================================================================
--- inc/admin/prepend.php	(revision 2724)
+++ inc/admin/prepend.php	(revision 2566)
@@ -61,14 +61,4 @@
 }
 
-
-function addMenuItem($section,$desc,$adminurl,$icon,$perm) {
-	global $core,$_menu;
-	$url=$core->adminurl->get($adminurl);
-	$_menu[$section]->prependItem(
-		$desc, $url, $icon, preg_match('/'.$url.'(\?.*)?$/',
-		$_SERVER['REQUEST_URI']), $perm
-	);
-}
-
 if (defined('DC_AUTH_SESS_ID') && defined('DC_AUTH_SESS_UID'))
 {
@@ -185,34 +175,4 @@
 }
 
-$core->adminurl = new dcAdminURL($core);
-
-$core->adminurl->register('admin.posts','posts.php');
-$core->adminurl->register('admin.post','post.php');
-$core->adminurl->register('admin.post.media','post_media.php');
-$core->adminurl->register('admin.blog.theme','blog_theme.php');
-$core->adminurl->register('admin.blog.pref','blog_pref.php');
-$core->adminurl->register('admin.blog.del','blog_del.php');
-$core->adminurl->register('admin.blog','blog.php');
-$core->adminurl->register('admin.blogs','blogs.php');
-$core->adminurl->register('admin.categories','categories.php');
-$core->adminurl->register('admin.category','category.php');
-$core->adminurl->register('admin.comments','comments.php');
-$core->adminurl->register('admin.comment','comment.php');
-$core->adminurl->register('admin.help','help.php');
-$core->adminurl->register('admin.home','index.php');
-$core->adminurl->register('admin.langs','langs.php');
-$core->adminurl->register('admin.media','media.php');
-$core->adminurl->register('admin.media.item','media_item.php');
-$core->adminurl->register('admin.plugins','plugins.php');
-$core->adminurl->register('admin.plugin','plugin.php');
-$core->adminurl->register('admin.search','search.php');
-$core->adminurl->register('admin.user.preferences','preferences.php');
-$core->adminurl->register('admin.user','user.php');
-$core->adminurl->register('admin.user.actions','user_actions.php');
-$core->adminurl->register('admin.users','users.php');
-$core->adminurl->register('admin.auth','auth.php');
-$core->adminurl->register('admin.help','help.php');
-$core->adminurl->register('admin.update','update.php');
-
 if ($core->auth->userID() && $core->blog !== null)
 {
@@ -271,31 +231,44 @@
 	$_menu['Plugins']->title = __('Plugins');
 
-	$url = $core->adminurl->get('admin.blog.theme');
-	addMenuItem('Blog',__('Blog appearance'),'admin.blog.theme','images/menu/themes.png',
+
+	$_menu['Blog']->prependItem(__('Blog appearance'),'blog_theme.php','images/menu/themes.png',
+		preg_match('/blog_theme.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
 		$core->auth->check('admin',$core->blog->id));
-	addMenuItem('Blog',__('Blog settings'),'admin.blog.pref','images/menu/blog-pref.png',
+	$_menu['Blog']->prependItem(__('Blog settings'),'blog_pref.php','images/menu/blog-pref.png',
+		preg_match('/blog_pref.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
 		$core->auth->check('admin',$core->blog->id));
-	addMenuItem('Blog',__('Media manager'),'admin.media','images/menu/media.png',
+	$_menu['Blog']->prependItem(__('Media manager'),'media.php','images/menu/media.png',
+		preg_match('/media(_item)?.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
 		$core->auth->check('media,media_admin',$core->blog->id));
-	addMenuItem('Blog',__('Categories'),'admin.categories','images/menu/categories.png',
+	$_menu['Blog']->prependItem(__('Categories'),'categories.php','images/menu/categories.png',
+		preg_match('/categories.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
 		$core->auth->check('categories',$core->blog->id));
-	addMenuItem('Blog',__('Search'),'admin.search','images/menu/search.png',
-		$core->auth->check('usage,contentadmin',$core->blog->id));
-	addMenuItem('Blog',__('Comments'),'admin.comments','images/menu/comments.png',
-		$core->auth->check('usage,contentadmin',$core->blog->id));
-	addMenuItem('Blog',__('Entries'),'admin.posts','images/menu/entries.png',
-		$core->auth->check('usage,contentadmin',$core->blog->id));
-	addMenuItem('Blog',__('New entry'),'admin.post','images/menu/edit.png',
-		$core->auth->check('usage,contentadmin',$core->blog->id));
-
-	addMenuItem('System',__('Update'),'admin.update','images/menu/update.png',
+	$_menu['Blog']->prependItem(__('Search'),'search.php','images/menu/search.png',
+		preg_match('/search.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
+		$core->auth->check('usage,contentadmin',$core->blog->id));
+	$_menu['Blog']->prependItem(__('Comments'),'comments.php','images/menu/comments.png',
+		preg_match('/comments.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
+		$core->auth->check('usage,contentadmin',$core->blog->id));
+	$_menu['Blog']->prependItem(__('Entries'),'posts.php','images/menu/entries.png',
+		preg_match('/posts.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
+		$core->auth->check('usage,contentadmin',$core->blog->id));
+	$_menu['Blog']->prependItem(__('New entry'),'post.php','images/menu/edit.png',
+		preg_match('/post.php$/',$_SERVER['REQUEST_URI']),
+		$core->auth->check('usage,contentadmin',$core->blog->id));
+
+	$_menu['System']->prependItem(__('Update'),'update.php','images/menu/update.png',
+		preg_match('/update.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
 		$core->auth->isSuperAdmin() && is_readable(DC_DIGESTS));
-	addMenuItem('System',__('Languages'),'admin.langs','images/menu/langs.png',
+	$_menu['System']->prependItem(__('Languages'),'langs.php','images/menu/langs.png',
+		preg_match('/langs.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
 		$core->auth->isSuperAdmin());
-	addMenuItem('System',__('Plugins management'),'admin.plugins','images/menu/plugins.png',
+	$_menu['System']->prependItem(__('Plugins management'),'plugins.php','images/menu/plugins.png',
+		preg_match('/plugins.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
 		$core->auth->isSuperAdmin());
-	addMenuItem('System',__('Users'),'admin.users','images/menu/users.png',
+	$_menu['System']->prependItem(__('Users'),'users.php','images/menu/users.png',
+		preg_match('/users.php$/',$_SERVER['REQUEST_URI']),
 		$core->auth->isSuperAdmin());
-	addMenuItem('System',__('Blogs'),'admin.blogs','images/menu/blogs.png',
+	$_menu['System']->prependItem(__('Blogs'),'blogs.php','images/menu/blogs.png',
+		preg_match('/blogs.php$/',$_SERVER['REQUEST_URI']),
 		$core->auth->isSuperAdmin() ||
 		$core->auth->check('usage,contentadmin',$core->blog->id) && $core->auth->getBlogCount() > 1);
@@ -305,3 +278,2 @@
 	}
 }
-
Index: inc/core/class.dc.blog.php
===================================================================
--- inc/core/class.dc.blog.php	(revision 2628)
+++ inc/core/class.dc.blog.php	(revision 2626)
@@ -1894,5 +1894,5 @@
 	- post_id: (integer) Get comments belonging to given post_id
 	- cat_id: (integer or array) Get comments belonging to entries of given category ID
-	- comment_id: (integer or array) Get comment with given ID (or IDs)
+	- comment_id: (integer) Get comment with given ID
 	- comment_site: (string) Get comments with given comment_site
 	- comment_status: (integer) Get comments with given comment_status
@@ -1984,10 +1984,5 @@
 
 		if (isset($params['comment_id']) && $params['comment_id'] !== '') {
-			if (is_array($params['comment_id'])) {
-				array_walk($params['comment_id'],create_function('&$v,$k','if($v!==null){$v=(integer)$v;}'));
-			} else {
-				$params['comment_id'] = array((integer) $params['comment_id']);
-			}
-			$strReq .= 'AND comment_id '.$this->con->in($params['comment_id']);
+			$strReq .= 'AND comment_id = '.(integer) $params['comment_id'].' ';
 		}
 
Index: inc/core/class.dc.core.php
===================================================================
--- inc/core/class.dc.core.php	(revision 2706)
+++ inc/core/class.dc.core.php	(revision 2566)
@@ -4,5 +4,5 @@
 # This file is part of Dotclear 2.
 #
-# Copyright (c) 2003-2014 Olivier Meunier & Association Dotclear
+# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
 # Licensed under the GPL version 2.0 license.
 # See LICENSE file or
@@ -39,5 +39,4 @@
 	public $rest;		///< <b>dcRestServer</b>	dcRestServer object
 	public $log;		///< <b>dcLog</b>			dcLog object
-	public $stime;		///< <b>float</b>			starting time
 
 	private $versions = null;
@@ -60,10 +59,4 @@
 	public function __construct($driver, $host, $db, $user, $password, $prefix, $persist)
 	{
-		if (defined('DC_START_TIME')) {
-			$this->stime=DC_START_TIME;
-		} else {
-			$this->stime = microtime(true);
-		}
-
 		$this->con = dbLayer::init($driver,$host,$db,$user,$password,$persist);
 
@@ -101,4 +94,7 @@
 
 		$this->log = new dcLog($this);
+
+		$this->addFormater('xhtml', create_function('$s','return $s;'));
+		$this->addFormater('wiki', array($this,'wikiTransform'));
 	}
 
@@ -208,4 +204,5 @@
 	//@}
 
+
 	/// @name Text Formatters methods
 	//@{
@@ -215,22 +212,4 @@
 	argument: the string to transform. It returns the transformed string.
 
-	@param	editor_id	<b>string</b>	Editor id (dcLegacyEditor, dcCKEditor, ...)
-	@param	name		<b>string</b>	Formater name
-	@param	func		<b>callback</b>	Function to use, must be a valid and callable callback
-	*/
-	public function addEditorFormater($editor_id,$name,$func)
-	{
-		if (is_callable($func)) {
-			$this->formaters[$editor_id][$name] = $func;
-		}
-	}
-
-	/// @name Text Formatters methods
-	//@{
-	/**
-	Adds a new text formater which will call the function <var>$func</var> to
-	transform text. The function must be a valid callback and takes one
-	argument: the string to transform. It returns the transformed string.
-
 	@param	name		<b>string</b>		Formater name
 	@param	func		<b>callback</b>	Function to use, must be a valid and callable callback
@@ -238,53 +217,17 @@
 	public function addFormater($name,$func)
 	{
-		$this->addEditorFormater('dcLegacyEditor',$name,$func);
-	}
-
-	/**
-	Returns editors list
-
-	@return	<b>array</b> An array of editors values.
-	*/
-	public function getEditors()
-	{
-		$editors = array();
-
-		foreach (array_keys($this->formaters) as $editor_id) {
-			$editors[$editor_id] = $this->plugins->moduleInfo($editor_id,'name');
-		}
-
-		return $editors;
-	}
-
-	/**
-	Returns formaters list by editor
-
-	@param	editor_id	<b>string</b>	Editor id (dcLegacyEditor, dcCKEditor, ...)
+		if (is_callable($func)) {
+			$this->formaters[$name] = $func;
+		}
+	}
+
+	/**
+	Returns formaters list.
+
 	@return	<b>array</b> An array of formaters names in values.
-
-    /**
-    if @param editor_id is empty:
-    return all formaters sorted by actives editors
-    
-    if @param editor_id is not empty
-    return formaters for an editor if editor is active
-    return empty() array if editor is not active. 
-    It can happens when a user choose an editor and admin deactivate that editor later
-	*/
-	public function getFormaters($editor_id='')
-	{
-		$formaters_list = array();
-
-		if (!empty($editor_id)) {
-            if (isset($this->formaters[$editor_id])) {
-                $formaters_list = array_keys($this->formaters[$editor_id]);
-            }
-		} else {
-			foreach ($this->formaters as $editor => $formaters) {
-				$formaters_list[$editor] = array_keys($formaters);
-			}
-		}
-
-		return $formaters_list;
+	*/
+	public function getFormaters()
+	{
+		return array_keys($this->formaters);
 	}
 
@@ -293,30 +236,15 @@
 	transformed using that formater.
 
-	@param	editor_id	<b>string</b>	Editor id (dcLegacyEditor, dcCKEditor, ...)
 	@param	name		<b>string</b>		Formater name
 	@param	str		<b>string</b>		String to transform
 	@return	<b>string</b>	String transformed
 	*/
-	public function callEditorFormater($editor_id,$name,$str)
-	{
-		if (isset($this->formaters[$editor_id]) && isset($this->formaters[$editor_id][$name])) {
-			return call_user_func($this->formaters[$editor_id][$name],$str);
+	public function callFormater($name,$str)
+	{
+		if (isset($this->formaters[$name])) {
+			return call_user_func($this->formaters[$name],$str);
 		}
 
 		return $str;
-	}
-	//@}
-
-	/**
-	If <var>$name</var> is a valid formater, it returns <var>$str</var>
-	transformed using that formater.
-
-	@param	name		<b>string</b>		Formater name
-	@param	str		<b>string</b>		String to transform
-	@return	<b>string</b>	String transformed
-	*/
-	public function callFormater($name,$str)
-	{
-		return $this->callEditorFormater('dcLegacyEditor',$name,$str);
 	}
 	//@}
@@ -713,5 +641,5 @@
 	   - [url] => Blog URL
 	   - [p]
-		- [permission] => true
+	   	- [permission] => true
 		- ...
 
@@ -865,5 +793,4 @@
 			'edit_size' => 24,
 			'enable_wysiwyg' => true,
-            'editor' => 'dcLegacyEditor',
 			'post_format' => 'wiki'
 		);
@@ -882,5 +809,5 @@
 	   - [super] => (true|false) super admin
 	   - [p]
-		- [permission] => true
+	   	- [permission] => true
 		- ...
 
@@ -1055,17 +982,14 @@
 	private function getBlogCursor($cur)
 	{
-		if (($cur->blog_id !== null
-			&& !preg_match('/^[A-Za-z0-9._-]{2,}$/',$cur->blog_id)) ||
-			(!$cur->blog_id)) {
+		if ($cur->blog_id !== null
+		&& !preg_match('/^[A-Za-z0-9._-]{2,}$/',$cur->blog_id)) {
 			throw new Exception(__('Blog ID must contain at least 2 characters using letters, numbers or symbols.'));
 		}
 
-		if (($cur->blog_name !== null && $cur->blog_name == '') ||
-			(!$cur->blog_name)) {
+		if ($cur->blog_name !== null && $cur->blog_name == '') {
 			throw new Exception(__('No blog name'));
 		}
 
-		if (($cur->blog_url !== null && $cur->blog_url == '') ||
-			(!$cur->blog_url)) {
+		if ($cur->blog_url !== null && $cur->blog_url == '') {
 			throw new Exception(__('No blog URL'));
 		}
@@ -1382,8 +1306,6 @@
 				array('media_img_title_pattern','string','Title ;; Date(%b %Y) ;; separator(, )',
 				'Pattern to set image title when you insert it in a post'),
-				array('nb_post_for_home','integer',20,
-				'Number of entries on first home page'),
 				array('nb_post_per_page','integer',20,
-				'Number of entries on home pages and category pages'),
+				'Number of entries on home page and category pages'),
 				array('nb_post_per_feed','integer',20,
 				'Number of entries on feeds'),
@@ -1400,5 +1322,5 @@
 				array('short_feed_items','boolean',false,
 				'Display short feed items'),
-				array('theme','string','berlin',
+				array('theme','string','default',
 				'Blog theme'),
 				array('themes_path','string','themes',
@@ -1547,21 +1469,4 @@
 		}
 	}
-
-	/**
-	 Return elapsed time since script has been started
-	 @param	  $mtime <b>float</b> timestamp (microtime format) to evaluate delta from
-								  current time is taken if null
-	 @return <b>float</b>		 elapsed time
-	 */
-	public function getElapsedTime ($mtime=null) {
-		if ($mtime !== null) {
-			return $mtime-$this->stime;
-		} else {
-			return microtime(true)-$this->stime;
-		}
-	}
 	//@}
-
-
-
 }
Index: inc/core/class.dc.media.php
===================================================================
--- inc/core/class.dc.media.php	(revision 2659)
+++ inc/core/class.dc.media.php	(revision 2566)
@@ -1002,5 +1002,5 @@
 	}
 
-	public function imageThumbRemove($f)
+	protected function imageThumbRemove($f)
 	{
 		$p = path::info($f);
Index: inc/core/class.dc.modules.php
===================================================================
--- inc/core/class.dc.modules.php	(revision 2708)
+++ inc/core/class.dc.modules.php	(revision 2566)
@@ -131,5 +131,4 @@
 			if ($ns == 'admin') {
 				$this->loadModuleL10Nresources($id,$lang);
-				$this->core->adminurl->register('admin.plugin.'.$id,'plugin.php',array('p'=>$id));
 			}
 			$this->loadNsFile($id,$ns);
Index: inc/core/class.dc.namespace.php
===================================================================
--- inc/core/class.dc.namespace.php	(revision 2567)
+++ inc/core/class.dc.namespace.php	(revision 2566)
@@ -125,34 +125,4 @@
 
 	/**
-	Returns global setting value if exists.
-
-	@param	n		<b>string</b>		setting name
-	@return	<b>mixed</b>
-	*/
-	public function getGlobal($n)
-	{
-		if (isset($this->global_settings[$n]['value'])) {
-			return $this->global_settings[$n]['value'];
-		}
-
-		return null;
-	}
-
-	/**
-	Returns local setting value if exists.
-
-	@param	n		<b>string</b>		setting name
-	@return	<b>mixed</b>
-	*/
-	public function getLocal($n)
-	{
-		if (isset($this->local_settings[$n]['value'])) {
-			return $this->local_settings[$n]['value'];
-		}
-
-		return null;
-	}
-
-	/**
 	Magic __get method.
 	@copydoc ::get
Index: inc/core/class.dc.themes.php
===================================================================
--- inc/core/class.dc.themes.php	(revision 2607)
+++ inc/core/class.dc.themes.php	(revision 2566)
@@ -59,5 +59,5 @@
 		# Themes specifics properties
 		$properties = array_merge(
-			array('parent' => null, 'tplset' => DC_DEFAULT_TPLSET),
+			array('parent' => null),
 			$properties,
 			array('permissions' => 'admin') // force themes perms
Index: inc/core/class.dc.trackback.php
===================================================================
--- inc/core/class.dc.trackback.php	(revision 2674)
+++ inc/core/class.dc.trackback.php	(revision 2566)
@@ -482,7 +482,7 @@
 	}
 
-	private static function detectCharset($content)
-	{
-		return mb_detect_encoding($content,
+	private static function detectCharset($string)
+	{
+		return mb_detect_encoding($remote_content,
 				'UTF-8,ISO-8859-1,ISO-8859-2,ISO-8859-3,'.
 				'ISO-8859-4,ISO-8859-5,ISO-8859-6,ISO-8859-7,ISO-8859-8,'.
Index: inc/prepend.php
===================================================================
--- inc/prepend.php	(revision 2711)
+++ inc/prepend.php	(revision 2713)
@@ -11,7 +11,4 @@
 # -- END LICENSE BLOCK -----------------------------------------
 
-/* Start tick  */
-define('DC_START_TIME',microtime(true));
-
 /* ------------------------------------------------------------------------------------------- */
 #  ClearBricks, DotClear classes auto-loader
@@ -29,55 +26,53 @@
 
 require CLEARBRICKS_PATH.'/_common.php';
-$__autoload['dcCore']        = dirname(__FILE__).'/core/class.dc.core.php';
-$__autoload['dcAuth']        = dirname(__FILE__).'/core/class.dc.auth.php';
-$__autoload['dcBlog']        = dirname(__FILE__).'/core/class.dc.blog.php';
-$__autoload['dcCategories']  = dirname(__FILE__).'/core/class.dc.categories.php';
-$__autoload['dcError']       = dirname(__FILE__).'/core/class.dc.error.php';
-$__autoload['dcMeta']        = dirname(__FILE__).'/core/class.dc.meta.php';
-$__autoload['dcMedia']       = dirname(__FILE__).'/core/class.dc.media.php';
-$__autoload['dcPostMedia']   = dirname(__FILE__).'/core/class.dc.postmedia.php';
-$__autoload['dcModules']     = dirname(__FILE__).'/core/class.dc.modules.php';
-$__autoload['dcPlugins']     = dirname(__FILE__).'/core/class.dc.plugins.php';
-$__autoload['dcThemes']      = dirname(__FILE__).'/core/class.dc.themes.php';
-$__autoload['dcRestServer']  = dirname(__FILE__).'/core/class.dc.rest.php';
-$__autoload['dcNamespace']   = dirname(__FILE__).'/core/class.dc.namespace.php';
-$__autoload['dcSettings']    = dirname(__FILE__).'/core/class.dc.settings.php';
-$__autoload['dcTrackback']   = dirname(__FILE__).'/core/class.dc.trackback.php';
-$__autoload['dcUpdate']      = dirname(__FILE__).'/core/class.dc.update.php';
-$__autoload['dcUtils']       = dirname(__FILE__).'/core/class.dc.utils.php';
-$__autoload['dcXmlRpc']      = dirname(__FILE__).'/core/class.dc.xmlrpc.php';
-$__autoload['dcLog']         = dirname(__FILE__).'/core/class.dc.log.php';
-$__autoload['dcWorkspace']   = dirname(__FILE__).'/core/class.dc.workspace.php';
-$__autoload['dcPrefs']       = dirname(__FILE__).'/core/class.dc.prefs.php';
-$__autoload['dcStore']       = dirname(__FILE__).'/core/class.dc.store.php';
-$__autoload['dcStoreReader'] = dirname(__FILE__).'/core/class.dc.store.reader.php';
-$__autoload['dcStoreParser'] = dirname(__FILE__).'/core/class.dc.store.parser.php';
-$__autoload['dcFavorites']   = dirname(__FILE__).'/admin/class.dc.favorites.php';
-
-$__autoload['rsExtPost']    = dirname(__FILE__).'/core/class.dc.rs.extensions.php';
-$__autoload['rsExtComment'] = dirname(__FILE__).'/core/class.dc.rs.extensions.php';
-$__autoload['rsExtDates']   = dirname(__FILE__).'/core/class.dc.rs.extensions.php';
-$__autoload['rsExtUser']    = dirname(__FILE__).'/core/class.dc.rs.extensions.php';
-
-$__autoload['dcMenu']            = dirname(__FILE__).'/admin/class.dc.menu.php';
-$__autoload['dcPage']            = dirname(__FILE__).'/admin/lib.dc.page.php';
-$__autoload['adminGenericList']  = dirname(__FILE__).'/admin/lib.pager.php';
-$__autoload['adminPostList']     = dirname(__FILE__).'/admin/lib.pager.php';
-$__autoload['adminPostMiniList'] = dirname(__FILE__).'/admin/lib.pager.php';
-$__autoload['adminCommentList']  = dirname(__FILE__).'/admin/lib.pager.php';
-$__autoload['adminUserList']     = dirname(__FILE__).'/admin/lib.pager.php';
-$__autoload['dcPager']           = dirname(__FILE__).'/admin/lib.pager.php';
-$__autoload['dcAdminCombos']     = dirname(__FILE__).'/admin/lib.admincombos.php';
-$__autoload['adminModulesList']  = dirname(__FILE__).'/admin/lib.moduleslist.php';
-$__autoload['adminThemesList']   = dirname(__FILE__).'/admin/lib.moduleslist.php';
-$__autoload['dcThemeConfig']     = dirname(__FILE__).'/admin/lib.themeconfig.php';
-
-$__autoload['dcTemplate']            = dirname(__FILE__).'/public/class.dc.template.php';
-$__autoload['context']               = dirname(__FILE__).'/public/lib.tpl.context.php';
-$__autoload['dcUrlHandlers']         = dirname(__FILE__).'/public/lib.urlhandlers.php';
-$__autoload['dcAdminURL']            = dirname(__FILE__).'/admin/lib.dc.adminurl.php';
-$__autoload['dcPostsActionsPage']    = dirname(__FILE__).'/admin/actions/class.dcactionposts.php';
-$__autoload['dcCommentsActionsPage'] = dirname(__FILE__).'/admin/actions/class.dcactioncomments.php';
-$__autoload['dcActionsPage']         = dirname(__FILE__).'/admin/actions/class.dcaction.php';
+$__autoload['dcCore']				= dirname(__FILE__).'/core/class.dc.core.php';
+$__autoload['dcAuth']				= dirname(__FILE__).'/core/class.dc.auth.php';
+$__autoload['dcBlog']				= dirname(__FILE__).'/core/class.dc.blog.php';
+$__autoload['dcCategories']			= dirname(__FILE__).'/core/class.dc.categories.php';
+$__autoload['dcError']				= dirname(__FILE__).'/core/class.dc.error.php';
+$__autoload['dcMeta']				= dirname(__FILE__).'/core/class.dc.meta.php';
+$__autoload['dcMedia']				= dirname(__FILE__).'/core/class.dc.media.php';
+$__autoload['dcPostMedia']				= dirname(__FILE__).'/core/class.dc.postmedia.php';
+$__autoload['dcModules']				= dirname(__FILE__).'/core/class.dc.modules.php';
+$__autoload['dcPlugins']				= dirname(__FILE__).'/core/class.dc.plugins.php';
+$__autoload['dcThemes']				= dirname(__FILE__).'/core/class.dc.themes.php';
+$__autoload['dcRestServer']			= dirname(__FILE__).'/core/class.dc.rest.php';
+$__autoload['dcNamespace']			= dirname(__FILE__).'/core/class.dc.namespace.php';
+$__autoload['dcSettings']			= dirname(__FILE__).'/core/class.dc.settings.php';
+$__autoload['dcTrackback']			= dirname(__FILE__).'/core/class.dc.trackback.php';
+$__autoload['dcUpdate']				= dirname(__FILE__).'/core/class.dc.update.php';
+$__autoload['dcUtils']				= dirname(__FILE__).'/core/class.dc.utils.php';
+$__autoload['dcXmlRpc']				= dirname(__FILE__).'/core/class.dc.xmlrpc.php';
+$__autoload['dcLog']				= dirname(__FILE__).'/core/class.dc.log.php';
+$__autoload['dcWorkspace']			= dirname(__FILE__).'/core/class.dc.workspace.php';
+$__autoload['dcPrefs']				= dirname(__FILE__).'/core/class.dc.prefs.php';
+$__autoload['dcStore']			= dirname(__FILE__).'/core/class.dc.store.php';
+$__autoload['dcStoreReader']		= dirname(__FILE__).'/core/class.dc.store.reader.php';
+$__autoload['dcStoreParser']		= dirname(__FILE__).'/core/class.dc.store.parser.php';
+$__autoload['dcFavorites']			= dirname(__FILE__).'/admin/class.dc.favorites.php';
+
+$__autoload['rsExtPost']				= dirname(__FILE__).'/core/class.dc.rs.extensions.php';
+$__autoload['rsExtComment']			= dirname(__FILE__).'/core/class.dc.rs.extensions.php';
+$__autoload['rsExtDates']			= dirname(__FILE__).'/core/class.dc.rs.extensions.php';
+$__autoload['rsExtUser']				= dirname(__FILE__).'/core/class.dc.rs.extensions.php';
+
+$__autoload['dcMenu']				= dirname(__FILE__).'/admin/class.dc.menu.php';
+$__autoload['dcPage']				= dirname(__FILE__).'/admin/lib.dc.page.php';
+$__autoload['adminGenericList']		= dirname(__FILE__).'/admin/lib.pager.php';
+$__autoload['adminPostList']			= dirname(__FILE__).'/admin/lib.pager.php';
+$__autoload['adminPostMiniList']		= dirname(__FILE__).'/admin/lib.pager.php';
+$__autoload['adminCommentList']		= dirname(__FILE__).'/admin/lib.pager.php';
+$__autoload['adminUserList']			= dirname(__FILE__).'/admin/lib.pager.php';
+$__autoload['dcPager']		= dirname(__FILE__).'/admin/lib.pager.php';
+$__autoload['dcAdminCombos']			= dirname(__FILE__).'/admin/lib.admincombos.php';
+$__autoload['adminModulesList']			= dirname(__FILE__).'/admin/lib.moduleslist.php';
+$__autoload['adminThemesList']			= dirname(__FILE__).'/admin/lib.moduleslist.php';
+
+$__autoload['dcTemplate']			= dirname(__FILE__).'/public/class.dc.template.php';
+$__autoload['context']				= dirname(__FILE__).'/public/lib.tpl.context.php';
+$__autoload['dcUrlHandlers']			= dirname(__FILE__).'/public/lib.urlhandlers.php';
+$__autoload['dcPostsActionsPage']			= dirname(__FILE__).'/admin/actions/class.dcactionposts.php';
+$__autoload['dcCommentsActionsPage']			= dirname(__FILE__).'/admin/actions/class.dcactioncomments.php';
+$__autoload['dcActionsPage']			= dirname(__FILE__).'/admin/actions/class.dcaction.php';
 
 # Clearbricks extensions
@@ -140,11 +135,10 @@
 # Constants
 define('DC_ROOT',path::real(dirname(__FILE__).'/..'));
-define('DC_VERSION','2.7-dev');
+define('DC_VERSION','2.6.4');
 define('DC_DIGESTS',dirname(__FILE__).'/digests');
 define('DC_L10N_ROOT',dirname(__FILE__).'/../locales');
 define('DC_L10N_UPDATE_URL','http://services.dotclear.net/dc2.l10n/?version=%s');
-define('DC_DISTRIB_PLUGINS','aboutConfig,akismet,antispam,attachments,blogroll,blowupConfig,dclegacy,fairTrackbacks,importExport,maintenance,pages,pings,simpleMenu,tags,themeEditor,userPref,widgets,dcLegacyEditor');
-define('DC_DISTRIB_THEMES','berlin,blueSilence,blowupConfig,customCSS,default,ductile');
-define('DC_DEFAULT_TPLSET','mustek');
+define('DC_DISTRIB_PLUGINS','aboutConfig,akismet,antispam,attachments,blogroll,blowupConfig,dclegacy,fairTrackbacks,importExport,maintenance,pages,pings,simpleMenu,tags,themeEditor,userPref,widgets');
+define('DC_DISTRIB_THEMES','blueSilence,blowupConfig,customCSS,default,ductile');
 
 if (!defined('DC_VENDOR_NAME')) {
Index: inc/public/class.dc.template.php
===================================================================
--- inc/public/class.dc.template.php	(revision 2666)
+++ inc/public/class.dc.template.php	(revision 2590)
@@ -235,4 +235,102 @@
 	}
 
+	protected function compileFile($file)
+	{
+		$fc = file_get_contents($file);
+
+		$this->compile_stack[] = $file;
+
+		# Remove every PHP tags
+		if ($this->remove_php)
+		{
+			$fc = preg_replace('/<\?(?=php|=|\s).*?\?>/ms','',$fc);
+		}
+
+		# Transform what could be considered as PHP short tags
+		$fc = preg_replace('/(<\?(?!php|=|\s))(.*?)(\?>)/ms',
+		'<?php echo "$1"; ?>$2<?php echo "$3"; ?>',$fc);
+
+		# Remove template comments <!-- #... -->
+		$fc = preg_replace('/(^\s*)?<!-- #(.*?)-->/ms','',$fc);
+
+		# Lexer part : split file into small pieces
+		# each array entry will be either a tag or plain text
+		$blocks = preg_split(
+			'#(<tpl:\w+[^>]*>)|(</tpl:\w+>)|({{tpl:\w+[^}]*}})#msu',$fc,-1,
+			PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
+
+		# Next : build semantic tree from tokens.
+		$rootNode = new tplNode();
+		$node = $rootNode;
+		$errors = array();
+		foreach ($blocks as $id => $block) {
+			$isblock = preg_match('#<tpl:(\w+)(?:(\s+.*?)>|>)|</tpl:(\w+)>|{{tpl:(\w+)(\s(.*?))?}}#ms',$block,$match);
+			if ($isblock == 1) {
+				if (substr($match[0],1,1) == '/') {
+					// Closing tag, check if it matches current opened node
+					$tag = $match[3];
+					if (($node instanceof tplNodeBlock) && $node->getTag() == $tag) {
+						$node->setClosing();
+						$node = $node->getParent();
+					} else {
+						// Closing tag does not match opening tag
+						// Search if it closes a parent tag
+						$search = $node;
+						while($search->getTag() != 'ROOT' && $search->getTag() != $tag) {
+							$search = $search->getParent();
+						}
+						if ($search->getTag() == $tag) {
+							$errors[] = sprintf(
+								__('Did not find closing tag for block <tpl:%s>. Content has been ignored.'),
+								html::escapeHTML($node->getTag()));
+							$search->setClosing();
+							$node = $search->getParent();
+						} else {
+							$errors[]=sprintf(
+								__('Unexpected closing tag </tpl:%s> found.'),
+								$tag);;
+						}
+					}
+				} elseif (substr($match[0],0,1) == '{') {
+					// Value tag
+					$tag = $match[4];
+					$str_attr = '';
+					$attr = array();
+					if (isset($match[6])) {
+						$str_attr = $match[6];
+						$attr = $this->getAttrs($match[6]);
+					}
+					$node->addChild(new tplNodeValue($tag,$attr,$str_attr));
+				} else {
+					// Opening tag, create new node and dive into it
+					$tag = $match[1];
+					$newnode = new tplNodeBlock($tag,isset($match[2])?$this->getAttrs($match[2]):array());
+					$node->addChild($newnode);
+					$node = $newnode;
+				}
+			} else {
+				// Simple text
+				$node->addChild(new tplNodeText($block));
+			}
+		}
+
+		if (($node instanceof tplNodeBlock) && !$node->isClosed()) {
+			$errors[] = sprintf(
+				__('Did not find closing tag for block <tpl:%s>. Content has been ignored.'),
+				html::escapeHTML($node->getTag()));
+		}
+
+		$err = "";
+		if (count($errors) > 0) {
+			$err = "\n\n<!-- \n".
+				__('WARNING: the following errors have been found while parsing template file :').
+				"\n * ".
+				join("\n * ",$errors).
+				"\n -->\n";
+		}
+
+		return $rootNode->compile($this).$err;
+	}
+
 	public function compileBlockNode($tag,$attr,$content)
 	{
@@ -245,5 +343,9 @@
 		$this->core->callBehavior('templateInsideBlock',$this->core,$this->current_tag,$attr,array(&$content));
 
-		$res .= parent::compileBlockNode($this->current_tag,$attr,$content);
+		if (isset($this->blocks[$this->current_tag])) {
+			$res .= call_user_func($this->blocks[$this->current_tag],$attr,$content);
+		} elseif ($this->unknown_block_handler != null) {
+			$res .= call_user_func($this->unknown_block_handler,$this->current_tag,$attr,$content);
+		}
 
 		# --BEHAVIOR-- templateAfterBlock
@@ -261,5 +363,9 @@
 		$res = $this->core->callBehavior('templateBeforeValue',$this->core,$this->current_tag,$attr);
 
-		$res .= parent::compileValueNode($this->current_tag,$attr,$str_attr);
+		if (isset($this->values[$this->current_tag])) {
+			$res .= call_user_func($this->values[$this->current_tag],$attr,ltrim($str_attr));
+		} elseif ($this->unknown_value_handler != null) {
+			$res .= call_user_func($this->unknown_value_handler,$this->current_tag,$attr,$str_attr);
+		}
 
 		# --BEHAVIOR-- templateAfterValue
@@ -267,4 +373,18 @@
 
 		return $res;
+	}
+
+	public function setUnknownValueHandler($callback)
+	{
+		if (is_callable($callback)) {
+			$this->unknown_value_handler = $callback;
+		}
+	}
+
+	public function setUnknownBlockHandler($callback)
+	{
+		if (is_callable($callback)) {
+			$this->unknown_block_handler = $callback;
+		}
 	}
 
@@ -276,5 +396,4 @@
 		$p[3] = '0';	# lower_case
 		$p[4] = '0';	# upper_case or capitalize
-		$p[5] = '0';    # encode_url
 
 		$p[0] = (integer) (!empty($attr['encode_xml']) || !empty($attr['encode_html']));
@@ -288,5 +407,4 @@
 		$p[4] = (integer) !empty($attr['upper_case']);
 		$p[4] = (!empty($attr['capitalize']) ? 2 : $p[4]);
-		$p[5] = (integer) !empty($attr['encode_url']);
 
 		return "context::global_filter(%s,".implode(",",$p).",'".addslashes($this->current_tag)."')";
@@ -387,33 +505,4 @@
 	}
 
-	public function displayCounter($variable,$values,$attr,$count_only_by_default=false) {
-		if (isset($attr['count_only'])) {
-			$count_only=($attr['count_only']==1);
-		} else {
-			$count_only = $count_only_by_default;
-		}
-		if ($count_only) {
-			return "<?php echo ".$variable."; ?>";
-		} else {
-			$v=$values;
-			if (isset($attr['none'])) {
-				$v['none'] = addslashes($attr['none']);
-			}
-			if (isset($attr['one'])) {
-				$v['one'] = addslashes($attr['one']);
-			}
-			if (isset($attr['more'])) {
-				$v['more'] = addslashes($attr['more']);
-			}
-			return
-				"<?php if (".$variable." == 0) {\n".
-				"  printf(__('".$v['none']."'),".$variable.");\n".
-				"} elseif (".$variable." == 1) {\n".
-				"  printf(__('".$v['one']."'),".$variable.");\n".
-				"} else {\n".
-				"  printf(__('".$v['more']."'),".$variable.");\n".
-				"} ?>";
-		}
-	}
 	/* TEMPLATE FUNCTIONS
 	------------------------------------------------------- */
@@ -576,14 +665,5 @@
 	{
 		$f = $this->getFilters($attr);
-		return $this->displayCounter(
-			sprintf($f,'$_ctx->archives->nb_post'),
-			array(
-				'none' => 'no archive',
-				'one'  => 'one archive',
-				'more' => '%d archives'
-			),
-			$attr,
-			true
-		);
+		return '<?php echo '.sprintf($f,'$_ctx->archives->nb_post').'; ?>';
 	}
 
@@ -1061,14 +1141,5 @@
 	{
 		$f = $this->getFilters($attr);
-		return $this->displayCounter(
-			sprintf($f,'$_ctx->categories->nb_post'),
-			array(
-				'none' => 'No post',
-				'one'  => 'One post',
-				'more' => '%d posts'
-			),
-			$attr,
-			true
-		);
+		return '<?php echo '.sprintf($f,'$_ctx->categories->nb_post').'; ?>';
 	}
 
@@ -1102,18 +1173,13 @@
 
 		if ($lastn != 0) {
-			// Set limit (aka nb of entries needed)
 			if ($lastn > 0) {
-				// nb of entries per page specified in template -> regular pagination
 				$p .= "\$params['limit'] = ".$lastn.";\n";
 			} else {
-				// nb of entries per page not specified -> use ctx settings
-				$p .= "\$params['limit'] = (\$_page_number == 1 ? \$_ctx->nb_entry_first_page : \$_ctx->nb_entry_per_page);\n";
+				$p .= "\$params['limit'] = \$_ctx->nb_entry_per_page;\n";
 			}
-			// Set offset (aka index of first entry)
+
 			if (!isset($attr['ignore_pagination']) || $attr['ignore_pagination'] == "0") {
-				// standard pagination, set offset
-				$p .= "\$params['limit'] = array((\$_page_number == 1 ? 0 : (\$_page_number - 2) * \$_ctx->nb_entry_per_page + \$_ctx->nb_entry_first_page),\$params['limit']);\n";
+				$p .= "\$params['limit'] = array(((\$_page_number-1)*\$params['limit']),\$params['limit']);\n";
 			} else {
-				// no pagination, get all posts from 0 to limit
 				$p .= "\$params['limit'] = array(0, \$params['limit']);\n";
 			}
@@ -1769,7 +1835,4 @@
 	}
 
-
-
-
 	/*dtd
 	<!ELEMENT tpl:EntryCommentCount - O -- Number of comments for entry -->
@@ -1783,4 +1846,18 @@
 	public function EntryCommentCount($attr)
 	{
+		$none = 'no comment';
+		$one = 'one comment';
+		$more = '%d comments';
+
+		if (isset($attr['none'])) {
+			$none = addslashes($attr['none']);
+		}
+		if (isset($attr['one'])) {
+			$one = addslashes($attr['one']);
+		}
+		if (isset($attr['more'])) {
+			$more = addslashes($attr['more']);
+		}
+
 		if (empty($attr['count_all'])) {
 			$operation = '$_ctx->posts->nb_comment';
@@ -1789,14 +1866,12 @@
 		}
 
-		return $this->displayCounter(
-			$operation,
-			array(
-				'none' => 'no comments',
-				'one'  => 'one comment',
-				'more' => '%d comments'
-				),
-			$attr,
-			false
-		);
+		return
+		"<?php if (".$operation." == 0) {\n".
+		"  printf(__('".$none."'),".$operation.");\n".
+		"} elseif (".$operation." == 1) {\n".
+		"  printf(__('".$one."'),".$operation.");\n".
+		"} else {\n".
+		"  printf(__('".$more."'),".$operation.");\n".
+		"} ?>";
 	}
 
@@ -1811,14 +1886,26 @@
 	public function EntryPingCount($attr)
 	{
-		return $this->displayCounter(
-			'$_ctx->posts->nb_trackback',
-			array(
-				'none' => 'no trackback',
-				'one'  => 'one trackback',
-				'more' => '%d trackbacks'
-				),
-			$attr,
-			false
-		);
+		$none = 'no trackback';
+		$one = 'one trackback';
+		$more = '%d trackbacks';
+
+		if (isset($attr['none'])) {
+			$none = addslashes($attr['none']);
+		}
+		if (isset($attr['one'])) {
+			$one = addslashes($attr['one']);
+		}
+		if (isset($attr['more'])) {
+			$more = addslashes($attr['more']);
+		}
+
+		return
+		"<?php if (\$_ctx->posts->nb_trackback == 0) {\n".
+		"  printf(__('".$none."'),(integer) \$_ctx->posts->nb_trackback);\n".
+		"} elseif (\$_ctx->posts->nb_trackback == 1) {\n".
+		"  printf(__('".$one."'),(integer) \$_ctx->posts->nb_trackback);\n".
+		"} else {\n".
+		"  printf(__('".$more."'),(integer) \$_ctx->posts->nb_trackback);\n".
+		"} ?>";
 	}
 
Index: inc/public/default-templates/404.html
===================================================================
--- inc/public/default-templates/404.html	(revision 2566)
+++ inc/public/default-templates/404.html	(revision 2566)
@@ -0,0 +1,62 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX,NOARCHIVE"}}" />
+
+  <title>{{tpl:lang Document not found}} - {{tpl:BlogName encode_html="1"}}</title>
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Document not found}} - {{tpl:BlogName encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  <link rel="contents" title="{{tpl:lang Archives}}" href="{{tpl:BlogArchiveURL}}" />
+  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
+
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-404">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <div id="content-info">
+    <h2>{{tpl:lang Document not found}}</h2>
+  </div>
+
+  <div class="content-inner">
+    <p>{{tpl:lang The document you are looking for does not exist.}}</p>
+  </div>
+
+  </div>
+</div>
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: inc/public/default-templates/_flv_player.html
===================================================================
--- inc/public/default-templates/_flv_player.html	(revision 2566)
+++ inc/public/default-templates/_flv_player.html	(revision 2566)
@@ -0,0 +1,8 @@
+<object type="application/x-shockwave-flash" data="{{tpl:BlogQmarkURL}}pf=player_flv.swf"
+width="400" height="300">
+<param name="movie" value="{{tpl:BlogQmarkURL}}pf=player_flv.swf" />
+<param name="wmode" value="transparent" />
+<param name="allowFullScreen" value="true" />
+<param name="FlashVars" value="flv={{tpl:MediaURL}}&amp;width=400&amp;height=300&amp;margin=1&amp;showfullscreen=1&amp;showvolume=1&amp;showtime=1" />
+{{tpl:lang Embedded Audio Player}}
+</object>
Index: inc/public/default-templates/_footer.html
===================================================================
--- inc/public/default-templates/_footer.html	(revision 2566)
+++ inc/public/default-templates/_footer.html	(revision 2566)
@@ -0,0 +1,5 @@
+<div id="footer">
+  <p>{{tpl:SysPoweredBy}}</p>
+</div>
+
+{{tpl:SysBehavior behavior="publicFooterContent"}}
Index: inc/public/default-templates/_head.html
===================================================================
--- inc/public/default-templates/_head.html	(revision 2566)
+++ inc/public/default-templates/_head.html	(revision 2566)
@@ -0,0 +1,8 @@
+<link rel="stylesheet" type="text/css" href="{{tpl:BlogThemeURL}}/style.css" media="screen" />
+<link rel="stylesheet" type="text/css" href="{{tpl:BlogThemeURL}}/../default/print.css" media="print" />
+
+<script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/jquery.js"></script>
+<script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/jquery.cookie.js"></script>
+
+{{tpl:include src="user_head.html"}}
+{{tpl:SysBehavior behavior="publicHeadContent"}}
Index: inc/public/default-templates/_mp3_player.html
===================================================================
--- inc/public/default-templates/_mp3_player.html	(revision 2566)
+++ inc/public/default-templates/_mp3_player.html	(revision 2566)
@@ -0,0 +1,6 @@
+<object type="application/x-shockwave-flash" data="{{tpl:BlogQmarkURL}}pf=player_mp3.swf" width="200" height="20">
+<param name="movie" value="{{tpl:BlogQmarkURL}}pf=player_mp3.swf" />
+<param name="wmode" value="transparent" />
+<param name="FlashVars" value="mp3={{tpl:MediaURL}}&amp;showvolume=1&amp;loadingcolor=ff9900&amp;bgcolor1=eeeeee&amp;bgcolor2=cccccc&amp;buttoncolor=0066cc&amp;buttonovercolor=ff9900&amp;slidercolor1=cccccc&amp;slidercolor2=999999&amp;sliderovercolor=0066cc" />
+{{tpl:lang Embedded Audio Player}}
+</object>
Index: inc/public/default-templates/_top.html
===================================================================
--- inc/public/default-templates/_top.html	(revision 2566)
+++ inc/public/default-templates/_top.html	(revision 2566)
@@ -0,0 +1,10 @@
+<div id="top">
+  <h1><span><a href="{{tpl:BlogURL}}">{{tpl:BlogName encode_html="1"}}</a></span></h1>
+
+  <!-- # --BEHAVIOR-- publicTopAfterContent -->
+  {{tpl:SysBehavior behavior="publicTopAfterContent"}}
+</div>
+
+<p id="prelude"><a href="#main">{{tpl:lang To content}}</a> |
+<a href="#blognav">{{tpl:lang To menu}}</a> |
+<a href="#search">{{tpl:lang To search}}</a></p>
Index: inc/public/default-templates/archive.html
===================================================================
--- inc/public/default-templates/archive.html	(revision 2566)
+++ inc/public/default-templates/archive.html	(revision 2566)
@@ -0,0 +1,79 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
+
+  <title>{{tpl:lang Archives}} - {{tpl:BlogName encode_html="1"}}</title>
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Archives}} - {{tpl:BlogName encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+
+  <tpl:Archives>
+    <link rel="chapter" href="{{tpl:ArchiveURL}}" title="{{tpl:ArchiveDate encode_html="1"}}" />
+  </tpl:Archives>
+
+  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
+
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-archive">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <div id="content-info">
+    <h2>{{tpl:lang Archives}}</h2>
+  </div>
+
+  <div class="content-inner">
+  <tpl:Archives>
+    <tpl:ArchivesYearHeader>
+      <h3>{{tpl:ArchiveDate format="%Y"}}</h3>
+      <ul>
+    </tpl:ArchivesYearHeader>
+      <li><a href="{{tpl:ArchiveURL}}"
+      title="{{tpl:ArchiveDate encode_html="1"}}">{{tpl:ArchiveDate encode_html="1" format="%B"}}</a>
+      ({{tpl:ArchiveEntriesCount}})</li>
+    <tpl:ArchivesYearFooter>
+      </ul>
+    </tpl:ArchivesYearFooter>
+  </tpl:Archives>
+  </div>
+
+  </div>
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: inc/public/default-templates/archive_month.html
===================================================================
--- inc/public/default-templates/archive_month.html	(revision 2566)
+++ inc/public/default-templates/archive_month.html	(revision 2566)
@@ -0,0 +1,96 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
+
+  <title>{{tpl:lang Archives}} - {{tpl:ArchiveDate}} - {{tpl:BlogName encode_html="1"}}</title>
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Archives}} - {{tpl:ArchiveDate}} - {{tpl:BlogName encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  <link rel="up" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+
+
+  <tpl:ArchiveNext><link rel="next" href="{{tpl:ArchiveURL}}"
+  title="{{tpl:ArchiveDate encode_html="1"}}" /></tpl:ArchiveNext>
+  <tpl:ArchivePrevious><link rel="prev" href="{{tpl:ArchiveURL}}"
+  title="{{tpl:ArchiveDate encode_html="1"}}" /></tpl:ArchivePrevious>
+
+  <tpl:Entries no_content="1">
+  <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
+  </tpl:Entries>
+
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-archive-month">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <p id="navlinks">
+  <tpl:ArchivePrevious><a href="{{tpl:ArchiveURL}}" class="prev">&#171; {{tpl:ArchiveDate encode_html="1"}}</a>
+  - </tpl:ArchivePrevious>
+  <a href="{{tpl:BlogArchiveURL}}">{{tpl:lang Archives}}</a>
+  <tpl:ArchiveNext> - <a href="{{tpl:ArchiveURL}}" class="next">{{tpl:ArchiveDate encode_html="1"}} &#187;</a></tpl:ArchiveNext>
+  </p>
+
+  <div id="content-info">
+    <h2>{{tpl:ArchiveDate}}</h2>
+  </div>
+
+  <div class="content-inner">
+  <tpl:Entries no_content="1">
+    <!-- # New day date -->
+    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
+
+    <h2 id="p{{tpl:EntryID}}" class="post-title" lang="{{tpl:EntryLang}}" xml:lang="{{tpl:EntryLang}}"><a
+    href="{{tpl:EntryURL}}" title="{{tpl:lang Read}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
+
+    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
+    <tpl:EntryIf show_comments="1">
+    - <a href="{{tpl:EntryURL}}#comments">{{tpl:EntryCommentCount}}</a>
+    </tpl:EntryIf>
+    <tpl:EntryIf show_pings="1">
+    - <a href="{{tpl:EntryURL}}#pings">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf has_attachment="1">
+    - <a href="{{tpl:EntryURL}}#attachments">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
+    </p>
+  </tpl:Entries>
+  </div>
+  </div>
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: inc/public/default-templates/atom-comments.xml
===================================================================
--- inc/public/default-templates/atom-comments.xml	(revision 2566)
+++ inc/public/default-templates/atom-comments.xml	(revision 2566)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="{{tpl:BlogLanguage}}">
+
+  <title type="html">{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}
+  - {{tpl:lang Comments}}</title>
+  <subtitle type="html">{{tpl:BlogDescription encode_xml="1"}}</subtitle>
+  <link href="{{tpl:SysSelfURI}}" rel="self" type="application/atom+xml"/>
+  <link href="{{tpl:BlogURL}}" rel="alternate" type="text/html"
+  title="{{tpl:BlogDescription encode_xml="1"}}"/>
+  <updated>{{tpl:BlogUpdateDate iso8601="1"}}</updated>
+  <author>
+    <name>{{tpl:BlogEditor encode_xml="1"}}</name>
+  </author>
+  <id>{{tpl:BlogFeedID}}</id>
+  <generator uri="http://www.dotclear.org/">Dotclear</generator>
+
+  <tpl:Comments order="desc" with_pings="1">
+
+  <tpl:CommentIf is_ping="1">
+  <entry>
+    <title>[ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}}</title>
+    <link href="{{tpl:PingPostURL encode_xml="1"}}#c{{tpl:PingID}}" rel="alternate" type="text/html"
+    title="[ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}}" />
+    <id>{{tpl:PingFeedID}}</id>
+    <published>{{tpl:PingDate iso8601="1"}}</published>
+    <updated>{{tpl:PingDate iso8601="1" upddt="1"}}</updated>
+    <author><name>{{tpl:PingBlogName encode_xml="1"}}</name></author>
+    <content type="html">&lt;p&gt;&lt;a href="{{tpl:PingAuthorURL encode_xml="1"}}"&gt;{{tpl:PingTitle encode_xml="1"}}&lt;/a&gt;&lt;/p&gt; {{tpl:PingContent encode_xml="1"}}</content>
+  </entry>
+
+  </tpl:CommentIf>
+
+  <tpl:CommentIf is_ping="0">
+  <entry>
+    <title>{{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}}</title>
+    <link href="{{tpl:CommentPostURL encode_xml="1"}}#c{{tpl:CommentID}}" rel="alternate" type="text/html"
+    title="{{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}}" />
+    <id>{{tpl:CommentFeedID}}</id>
+    <published>{{tpl:CommentDate iso8601="1"}}</published>
+    <updated>{{tpl:CommentDate iso8601="1" upddt="1"}}</updated>
+    <author><name>{{tpl:CommentAuthor encode_xml="1"}}</name></author>
+    <content type="html">{{tpl:CommentContent absolute_urls="1" encode_xml="1"}}</content>
+  </entry>
+  </tpl:CommentIf>
+  </tpl:Comments>
+
+</feed>
Index: inc/public/default-templates/atom.xml
===================================================================
--- inc/public/default-templates/atom.xml	(revision 2566)
+++ inc/public/default-templates/atom.xml	(revision 2566)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom"
+  xmlns:dc="http://purl.org/dc/elements/1.1/"
+  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+  xml:lang="{{tpl:BlogLanguage}}">
+
+  <title type="html">{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}</title>
+  <subtitle type="html">{{tpl:BlogDescription encode_xml="1"}}</subtitle>
+  <link href="{{tpl:SysSelfURI}}" rel="self" type="application/atom+xml"/>
+  <link href="{{tpl:BlogURL}}" rel="alternate" type="text/html"
+  title="{{tpl:BlogDescription encode_xml="1"}}"/>
+  <updated>{{tpl:BlogUpdateDate iso8601="1"}}</updated>
+  <author>
+    <name>{{tpl:BlogEditor encode_xml="1"}}</name>
+  </author>
+  <id>{{tpl:BlogFeedID}}</id>
+  <generator uri="http://www.dotclear.org/">Dotclear</generator>
+
+  <tpl:Entries>
+
+  <entry>
+    <title>{{tpl:EntryTitle encode_xml="1"}}</title>
+    <link href="{{tpl:EntryURL}}" rel="alternate" type="text/html"
+    title="{{tpl:EntryTitle encode_xml="1"}}" />
+    <id>{{tpl:EntryFeedID}}</id>
+    <published>{{tpl:EntryDate iso8601="1"}}</published>
+    <tpl:EntryIf republished="1">
+      <updated>{{tpl:EntryDate iso8601="1" upddt="1"}}</updated>
+    </tpl:EntryIf>
+    <tpl:EntryIf republished="0">
+      <updated>{{tpl:EntryDate iso8601="1"}}</updated>
+    </tpl:EntryIf>
+    <author><name>{{tpl:EntryAuthorCommonName encode_xml="1"}}</name></author>
+    <tpl:EntryIf has_category="1">
+    <dc:subject>{{tpl:EntryCategory encode_html="1"}}</dc:subject>
+    </tpl:EntryIf>
+    <tpl:EntryTags><dc:subject>{{tpl:TagID}}</dc:subject></tpl:EntryTags>
+
+    <content type="html">{{tpl:EntryExcerpt absolute_urls="1" encode_xml="1"}}
+    {{tpl:EntryContent absolute_urls="1" encode_xml="1"}}</content>
+
+    <tpl:Attachments>
+      <link rel="enclosure" href="{{tpl:AttachmentURL}}"
+      length="{{tpl:AttachmentSize full="1"}}" type="{{tpl:AttachmentMimeType}}" />
+    </tpl:Attachments>
+
+
+    <tpl:EntryIf comments_active="1">
+      <wfw:comment>{{tpl:EntryURL}}#comment-form</wfw:comment>
+      <wfw:commentRss>{{tpl:BlogFeedURL type="atom"}}/comments/{{tpl:EntryID}}</wfw:commentRss>
+    </tpl:EntryIf>
+  </entry>
+  </tpl:Entries>
+
+</feed>
Index: inc/public/default-templates/category.html
===================================================================
--- inc/public/default-templates/category.html	(revision 2566)
+++ inc/public/default-templates/category.html	(revision 2566)
@@ -0,0 +1,167 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
+
+  <title>{{tpl:CategoryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
+  <meta name="description" lang="{{tpl:BlogLanguage}}" content="{{tpl:CategoryDescription cut_string="180" remove_html="1"}}" />
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:CategoryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
+  <meta name="dc.description" lang="{{tpl:BlogLanguage}}" content="{{tpl:CategoryDescription remove_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+
+  <tpl:Entries no_content="1">
+    <tpl:EntriesHeader>
+      <tpl:Pagination>
+        <tpl:PaginationIf end="0">
+        <link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
+        </tpl:PaginationIf>
+
+        <tpl:PaginationIf start="0">
+        <link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
+        </tpl:PaginationIf>
+      </tpl:Pagination>
+    </tpl:EntriesHeader>
+
+    <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
+  </tpl:Entries>
+
+  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:CategoryFeedURL type="atom"}}" />
+
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-category">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <div id="content-info">
+    <h2><tpl:CategoryParents><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a> &rsaquo; </tpl:CategoryParents>
+    {{tpl:CategoryTitle encode_html="1"}}</h2>
+    {{tpl:CategoryDescription}}
+
+    <tpl:CategoryIf has_entries="1">
+      <p><a type="application/atom+xml" href="{{tpl:CategoryFeedURL type="atom"}}"
+      title="{{tpl:lang This category's entries Atom feed}}" class="feed">{{tpl:lang Entries feed}}</a>
+
+      <tpl:SysIf operator="or" comments_active="1" pings_active="1">
+      - <a type="application/atom+xml" href="{{tpl:CategoryFeedURL type="atom"}}/comments"
+      title="{{tpl:lang This category's comments Atom feed}}" class="feed">{{tpl:lang Comments feed}}</a>
+      </tpl:SysIf>
+      </p>
+    </tpl:CategoryIf>
+  </div>
+
+  <tpl:CategoryFirstChildren>
+    <tpl:CategoriesHeader>
+      <div id="subcategories">
+      <h3>{{tpl:lang Subcategories}}</h3>
+      <ul>
+    </tpl:CategoriesHeader>
+    <li><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a></li>
+    <tpl:CategoriesFooter>
+      </ul>
+      </div>
+    </tpl:CategoriesFooter>
+  </tpl:CategoryFirstChildren>
+
+  <tpl:Entries>
+    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}}" lang="{{tpl:EntryLang}}" xml:lang="{{tpl:EntryLang}}">
+    <!-- # New day date -->
+    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
+
+    <h2 class="post-title"><a
+    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
+
+    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
+    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}</p>
+
+    <tpl:EntryTags>
+    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
+    <li><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
+    <tpl:TagsFooter></ul></tpl:TagsFooter>
+    </tpl:EntryTags>
+
+    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
+    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
+
+    <!-- # Entry with an excerpt -->
+    <tpl:EntryIf extended="1">
+      <div class="post-content">{{tpl:EntryExcerpt}}</div>
+      <p class="read-it"><a href="{{tpl:EntryURL}}"
+      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
+      reading}}</a>...</p>
+    </tpl:EntryIf>
+
+    <!-- # Entry without excerpt -->
+    <tpl:EntryIf extended="0">
+      <div class="post-content">{{tpl:EntryContent}}</div>
+    </tpl:EntryIf>
+
+    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
+    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
+
+    <!-- # Number of comments, trackbacks and attachments -->
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      <p class="post-info-co">
+    </tpl:EntryIf>
+    <tpl:EntryIf show_comments="1">
+      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
+    </tpl:EntryIf>
+    <tpl:EntryIf show_pings="1">
+      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf has_attachment="1">
+      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      </p>
+    </tpl:EntryIf>
+    </div>
+
+    <tpl:EntriesFooter>
+      <tpl:Pagination>
+        <p class="pagination"><tpl:PaginationIf end="0"><a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
+        {{tpl:lang previous entries}}</a> - </tpl:PaginationIf>
+        {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
+        <tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}}
+        &#187;</a></tpl:PaginationIf></p>
+      </tpl:Pagination>
+    </tpl:EntriesFooter>
+  </tpl:Entries>
+  </div>
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: nc/public/default-templates/currywurst/404.html
===================================================================
--- inc/public/default-templates/currywurst/404.html	(revision 2704)
+++ 	(revision )
@@ -1,38 +1,0 @@
-{{tpl:extends parent="__layout.html"}}
-
-<tpl:Block name="head-title">
-	<title>{{tpl:lang Document not found}} - {{tpl:BlogName encode_html="1"}}</title>
-</tpl:Block>
-
-<tpl:Block name="meta-robots">
-	<meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX,NOARCHIVE"}}" />
-</tpl:Block>
-
-<tpl:Block name="dc-entry">
-	<meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Document not found}} - {{tpl:BlogName encode_html="1"}}" />
-	<meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-</tpl:Block>
-
-<tpl:Block name="head-linkrel">
-	<link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-	<link rel="contents" title="{{tpl:lang Archives}}" href="{{tpl:BlogArchiveURL}}" />
-	<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-</tpl:Block>
-
-<tpl:block name="body-tag"><body class="dc-404"></tpl:Block>
-
-<tpl:Block name="main-content">
-	<div id="content-info">
-		<h2>{{tpl:lang Document not found}}</h2>
-		<p>{{tpl:lang URL you've tried has typos, or the page has been deleted or moved.}}</p>
-	</div>
-
-	<div class="content-inner">
-		<h3>{{tpl:lang Suggestions:}}</h3>
-		<ul>
-			<li><a href="{{tpl:BlogURL}}">{{tpl:lang Go to homepage}}</a></li>
-			<li><a href="#search">{{tpl:lang Use search form}}</a></li>
-			<li><a href="{{tpl:BlogURL}}archive">{{tpl:lang Explore archives}}</a></li>
-		</ul>
-	</div> <!-- End #content-inner -->
-</tpl:Block>
Index: nc/public/default-templates/currywurst/README.md
===================================================================
--- inc/public/default-templates/currywurst/README.md	(revision 2692)
+++ 	(revision )
@@ -1,108 +1,0 @@
-# Currywurst
-
-Un nouveau jeu de templates par défaut pour Dotclear (versions ≥ 2.7)
-
-## Motivations
-
-Le jeu de templates Currywurst répond à divers objectifs :
-
-- Proposer un jeu de templates en HTML 5.
-- Pouvoir ainsi y introduire des balises [http://fr.wikipedia.org/wiki/Accessible_Rich_Internet_Applications](ARIA) pour une meilleure accessibilité.
-- Améliorer la sémantique des tags html (par exemple ne plus présenter les commentaires dans une liste de définition).
-- Factoriser les éléments récurrents dès que c'est possible sans pâtir à la compréhension.
-- Préparer le passage à la syntaxe [http://twig.sensiolabs.org/](twig).
-- Adopter une nomenclature inspirée de [http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/](BEM) – sans en faire une religion dogmatique toutefois. Voir aussi [http://coding.smashingmagazine.com/2011/12/12/an-introduction-to-object-oriented-css-oocss/](OOCSS).
-- Faire en sorte de réduire l'obligation de recourir aux sélecteurs enfants (`#top h1 {}` par exemple) ou aux ID dans les CSS.
-
-## Revue fichier par fichier
-
-Ne sont pas listées les modifications systématiques : ajout de classes sur tous les éléments « probablement stylés » ou ne possédant qu'un id ; syntaxe html5.
-
-Les modifications nécessitant des explications sont listées de la façon suivante :
-
-    <Description courte> : <motivation>. <Explication>.
-
-Les motivations sont abrégées en :
-- a11y : amélioration accessibilité
-- sém. : amélioration ou correction sémantique (html)
-- cont. : amélioration du contenu
-- ergo : amélioration ergonomique
-
-Par convention l'ordre des attributs dans les balises html est *class, id, autres attributs*.
-
-Toutes les listes (ul ou ol) comportent le terme "list" dans leur nom de class.
-
-### _top.html
-
-Déplacement des liens d'accès rapides au-dessus du titre du blog : **a11y**, **ergo**. *Le titre de fenêtre étant lu avant tout par les aides techniques, l'internaute sait déjà où il se trouve. L'accès est également plus rapide au clavier. Côté design, la plupart des créateurs de thèmes ont pris l'habitude de déplacer ce bloc en haut de la page ; ils n'auront plus besoin de passer par des position absolute pour ce faire.*
-
-### _simple-entry.html
-
-(aka contexte du billet seul entier avec commentaires etc.)
-
-Formulaire de dépôt de commentaire :
-- remplacement des inputs par des buttons
-- typage des champs
-- ajout des attributs required quand nécessaire
-
-Découpage en deux grandes div : post et post-feedback.
-- post
-  - post-title : titre
-  - post-meta
-    - post-info
-    - post-tags-list
-  - post-excerpt
-  - post-content
-  - post-attachments
-    - post-attachments-title
-    - post-attachments-list
-- post-feedback
-  - feedback__comments
-    - comments-feed
-    - comments-list
-  - comment-form
-  - send-trackback
-
-### __layout.html
-
-Reprend l'intégralité du home.html et définit les blocs permettant l'héritage et extension
-
-La liste des noms utilisés pour les blocs sont les suivants (les noms sont composés de deux termes, le nom du parent direct du bloc et le nom du bloc en question, sachant que le nom 'attr' est réservé aux attributs des balises, comme par exemple 'body-attr', et 'tag' pour encadrer une balise ouvrante seule) :
-
-- html-head : contenu de la balise head
-  - head-title : balise title
-  - head-meta : liste des balises meta du head
-    - meta-robots : consigne pour les robots
-    - meta-entry : partie spécifique au contexte
-  - head-dc : liste des balises dublin core du head
-    - dc-entry : partie spécifique au contexte
-  - head-linkrel : liste des balises link rel du head
-- body-tag : balise body (sans contenu ni balise fermante)
-- html-body : contenu de la balise body
-  - body-page : contenu de la div #page
-    - page-top : contenu d'entête de la div #page (en général inclusion du _top.html)
-    - page-wrapper : contenu principal de la div #page, soit le contenu de la div #wrapper
-      - wrapper-main : contenu principal de la div #wrapper, soit le contenu de la div #main
-        - main-content : contenu de la div #content
-      - wrapper-sidebar : contenu annexe de la div #wrapper (en général inclusion de _sidebar.html)
-    - page-footer : contenu de pied de page de la div #page (en général inclusion du _footer.html)
-
-Pour rappel, la hiérarchie des blocs html est la suivante :
-
-- html
-  - head
-  - body
-    - #page
-      - .header
-      - #wrapper
-        - #main
-          - #content
-        - #sidebar/.sidebar
-      - #footer/.footer
-
-
-***
-
-A réfléchir : inclusion par défaut de liens "sociaux" ?
-
-***
Index: nc/public/default-templates/currywurst/__layout.html
===================================================================
--- inc/public/default-templates/currywurst/__layout.html	(revision 2692)
+++ 	(revision )
@@ -1,127 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-	<tpl:Block name="html-head">
-		<meta charset="UTF-8" />
-
-		<tpl:Block name="head-title">
-			<title>{{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
-		</tpl:Block>	<!-- head-title -->
-
-		<tpl:Block name="head-meta">
-			<meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-			<tpl:Block name="meta-robots">
-				<meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
-			</tpl:Block>	<!-- meta-robots -->
-			<tpl:Block name="meta-entry">
-				<meta name="description" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogDescription cut_string="180" encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-				<meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-				<meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-			</tpl:Block>	<!-- meta-entry -->
-		</tpl:Block>	<!-- head-meta -->
-
-		<tpl:Block name="head-dc">
-			<link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-			<meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-			<meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-			<meta property="dc.type" content="text" />
-			<meta property="dc.format" content="text/html" />
-			<tpl:Block name="dc-entry">
-				<meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-				<meta property="dc.description" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogDescription encode_html="1"}}" />
-				<meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-				<meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-			</tpl:Block>	<!-- dc-title-head -->
-		</tpl:Block>	<!-- head-dc -->
-
-		<tpl:Block name"head-linkrel">
-			<link rel="contents" title="{{tpl:lang Archives}}" href="{{tpl:BlogArchiveURL}}" />
-			<tpl:Categories>
-				<link rel="section" href="{{tpl:CategoryURL}}" title="{{tpl:CategoryTitle encode_html="1"}}" />
-			</tpl:Categories>
-
-			<tpl:Entries no_content="1">
-				<tpl:EntriesHeader>
-					<tpl:Pagination>
-						<tpl:PaginationIf end="0">
-							<link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
-						</tpl:PaginationIf>
-
-						<tpl:PaginationIf start="0">
-							<link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
-						</tpl:PaginationIf>
-					</tpl:Pagination>
-				</tpl:EntriesHeader>
-
-				<link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-			</tpl:Entries>
-
-			<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-			<link rel="EditURI" type="application/rsd+xml" title="RSD" href="{{tpl:BlogRSDURL}}" />
-			<link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
-		</tpl:Block>	<!-- head-linkrel -->
-
-		{{tpl:include src="_head.html"}}
-	</tpl:Block>	<!-- html-head -->
-</head>
-<tpl:block name="body-tag">
-	<body class="dc-home <tpl:SysIf current_mode="default">dc-home-first</tpl:SysIf>">
-</tpl:block>
-	<tpl:Block name="html-body">
-		<div id="page">
-			<tpl:Block name="body-page">
-				<tpl:Block name="page-top">
-					{{tpl:include src="_top.html"}}
-				</tpl:Block>	<!-- page-top -->
-
-				<div id="wrapper">
-					<tpl:Block name="page-wrapper">
-						<div id="main" role="main">
-							<tpl:Block name="wrapper-main">
-								<div id="content">
-									<tpl:Block name="main-content">
-
-										<tpl:Entries>
-
-											<!-- First page -->
-											<tpl:SysIf current_mode="default">
-												<tpl:LoopPosition start="1" length="1">
-													{{tpl:include src="_entry-full.html"}}
-												</tpl:LoopPosition>
-
-												<tpl:LoopPosition start="2">
-													{{tpl:include src="_entry-short.html"}}
-												</tpl:LoopPosition>
-											</tpl:SysIf>
-
-											<!-- Next pages -->
-											<tpl:SysIf current_mode="!default">
-												{{tpl:include src="_entry-short.html"}}
-											</tpl:SysIf>
-
-											<!-- Pagination -->
-											<tpl:EntriesFooter>
-												{{tpl:include src="_pagination.html"}}
-											</tpl:EntriesFooter>
-
-										</tpl:Entries>
-
-									</tpl:Block>	<!-- page-content -->
-								</div> <!-- End #content -->
-							</tpl:Block>	<!-- wrapper-main -->
-						</div> <!-- End #main -->
-
-						<tpl:Block name="wrapper-sidebar">
-							{{tpl:include src="_sidebar.html"}}
-						</tpl:Block>	<!-- wrapper-sidebar -->
-					</tpl:Block>	<!-- page-wrapper -->
-				</div> <!-- End #wrapper -->
-
-				<tpl:Block name="page-footer">
-					{{tpl:include src="_footer.html"}}
-				</tpl:Block>	<!-- page-footer -->
-			</tpl:Block>	<!-- body-page -->
-		</div> <!-- End #page -->
-	</tpl:Block>	<!-- html-body -->
-</body>
-</html>
Index: nc/public/default-templates/currywurst/_entry-full.html
===================================================================
--- inc/public/default-templates/currywurst/_entry-full.html	(revision 2623)
+++ 	(revision )
@@ -1,55 +1,0 @@
-<div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}} full" lang="{{tpl:EntryLang}}" role="article">
-
-	<!-- # New day date -->
-	<tpl:DateHeader><p class="post-day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
-
-	<h2 class="post-title"><a href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
-
-	<!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-	{{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-	<tpl:EntryIf extended="1">
-	<div class="post-excerpt">{{tpl:EntryExcerpt}}</div>
-	</tpl:EntryIf>
-
-	<div class="post-content">{{tpl:EntryContent}}</div>
-
-	<!-- # --BEHAVIOR-- publicEntryAfterContent -->
-	{{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-
-	<div class="post-meta">
-		<p class="post-info">
-			<span class="post-author">{{tpl:lang By}} {{tpl:EntryAuthorLink}}, </span>
-			<span class="post-date">{{tpl:EntryDate}}.</span>
-			<tpl:EntryIf has_category="1">
-			<span class="post-cat"><tpl:EntryCategoriesBreadcrumb><a
-				href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a> › </tpl:EntryCategoriesBreadcrumb><a
-				href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a>
-			</span>
-			</tpl:EntryIf>
-		</p>
-
-		<tpl:EntryTags>
-			<tpl:TagsHeader>
-			<ul class="post-tags-list">
-			</tpl:TagsHeader>
-				<li class="post-tags-item"><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
-			<tpl:TagsFooter>
-			</ul>
-			</tpl:TagsFooter>
-		</tpl:EntryTags>
-
-		<!-- # Number of comments, trackbacks and attachments -->
-		<tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-			<p class="post-info-co">
-			<tpl:EntryIf show_comments="1">
-			<a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
-			</tpl:EntryIf>
-			<tpl:EntryIf show_pings="1">
-			<a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
-			<tpl:EntryIf has_attachment="1">
-			<a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
-			</p>
-		</tpl:EntryIf>
-	</div>
-</div>
Index: nc/public/default-templates/currywurst/_entry-short.html
===================================================================
--- inc/public/default-templates/currywurst/_entry-short.html	(revision 2625)
+++ 	(revision )
@@ -1,72 +1,0 @@
-<div id="p{{tpl:EntryID}}" class="post short {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}}" lang="{{tpl:EntryLang}}" role="article">
-
-	<!-- # New day date -->
-	<tpl:DateHeader><p class="post-day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
-
-	<h2 class="post-title"><a href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
-
-	<!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-	{{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-	<!-- # Entry with an excerpt -->
-	<tpl:EntryIf extended="1">
-		<div class="post-content">
-			{{tpl:EntryFirstImage size="t" class="post-icon"}}
-			{{tpl:EntryExcerpt}}
-		</div>
-		<p class="post-read-it"><a href="{{tpl:EntryURL}}"
-		 title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue reading}}</a></p>
-	</tpl:EntryIf>
-
-	<!-- # Entry without excerpt -->
-	<tpl:EntryIf extended="0">
-		<div class="post-content">
-			{{tpl:EntryFirstImage size="t" class="post-icon"}}
-			<p>
-				{{tpl:EntryContent encode_html="1" remove_html="1" cut_string="300"}}
-			</p>
-		</div>
-		<p class="post-read-it"><a href="{{tpl:EntryURL}}"
-		 title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue reading}}</a></p>
-	</tpl:EntryIf>
-
-	<!-- # --BEHAVIOR-- publicEntryAfterContent -->
-	{{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-
-	<div class="post-meta">
-		<p class="post-info">
-			<span class="post-author">{{tpl:lang By}} {{tpl:EntryAuthorLink}}, </span>
-			<span class="post-date">{{tpl:EntryDate}}.</span>
-			<tpl:EntryIf has_category="1">
-			<span class="post-cat"><tpl:EntryCategoriesBreadcrumb><a
-				href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a> › </tpl:EntryCategoriesBreadcrumb><a
-				href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a></span>
-			</tpl:EntryIf>
-		</p>
-
-		<tpl:EntryTags>
-			<tpl:TagsHeader>
-				<ul class="post-tags-list">
-			</tpl:TagsHeader>
-				<li class="post-tags-item"><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
-			<tpl:TagsFooter>
-				</ul>
-			</tpl:TagsFooter>
-		</tpl:EntryTags>
-
-		<!-- # Number of comments, trackbacks and attachments -->
-		<tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-			<p class="post-info-co">
-		</tpl:EntryIf>
-			<tpl:EntryIf show_comments="1">
-				<a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
-			</tpl:EntryIf>
-			<tpl:EntryIf show_pings="1">
-				<a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
-			<tpl:EntryIf has_attachment="1">
-				<a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
-		<tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-			</p>
-		</tpl:EntryIf>
-	</div>
-</div>
Index: nc/public/default-templates/currywurst/_entry-title.html
===================================================================
--- inc/public/default-templates/currywurst/_entry-title.html	(revision 2619)
+++ 	(revision )
@@ -1,41 +1,0 @@
-<div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}} title" lang="{{tpl:EntryLang}}" role="article">
-
-	<!-- # New day date -->
-	<tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
-
-	<h2 class="post-title"><a href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
-
-	<div class="post-meta">
-		<p class="post-info">
-			<span class="post-author">{{tpl:lang By}} {{tpl:EntryAuthorLink}}, </span>
-			<span class="post-date">{{tpl:EntryDate}}. </span>
-			<tpl:EntryIf has_category="1">
-				<tpl:EntryCategoriesBreadcrumb>
-					<span class="post-breadcrumb-cat"><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a></span> ›
-				</tpl:EntryCategoriesBreadcrumb>
-				<span class="post-cat"><a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a></span>
-			</tpl:EntryIf>
-		</p>
-	</div>
-
-	<!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-	{{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-	<!-- # --BEHAVIOR-- publicEntryAfterContent -->
-	{{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-
-	<!-- # Number of comments, trackbacks and attachments -->
-	<tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-		<p class="post-info-co">
-	</tpl:EntryIf>
-	<tpl:EntryIf show_comments="1">
-			<a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
-	</tpl:EntryIf>
-	<tpl:EntryIf show_pings="1">
-			<a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
-	<tpl:EntryIf has_attachment="1">
-			<a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
-	<tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-		</p>
-	</tpl:EntryIf>
-</div>
Index: nc/public/default-templates/currywurst/_flv_player.html
===================================================================
--- inc/public/default-templates/currywurst/_flv_player.html	(revision 2600)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<object type="application/x-shockwave-flash" data="{{tpl:BlogQmarkURL}}pf=player_flv.swf"
-width="400" height="300">
-<param name="movie" value="{{tpl:BlogQmarkURL}}pf=player_flv.swf" />
-<param name="wmode" value="transparent" />
-<param name="allowFullScreen" value="true" />
-<param name="FlashVars" value="flv={{tpl:MediaURL}}&amp;width=400&amp;height=300&amp;margin=1&amp;showfullscreen=1&amp;showvolume=1&amp;showtime=1" />
-{{tpl:lang Embedded Audio Player}}
-</object>
Index: nc/public/default-templates/currywurst/_footer.html
===================================================================
--- inc/public/default-templates/currywurst/_footer.html	(revision 2670)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<p id="gotop"><a href="#top">Haut de page</a></p>
-
-<div class="footer" id="footer" role="contentinfo">
-	<div class="widgets footer__widgets" id="blogcustom">
-        <h2 class="blogcustom__title">{{tpl:lang Blog info}}</h2>
-		{{tpl:Widgets type="custom"}}
-	</div> <!-- End #custom widgets -->
-
-	{{tpl:SysBehavior behavior="publicInsideFooter"}}
-
-	<p>{{tpl:SysPoweredBy}}</p>
-</div>
-{{tpl:SysBehavior behavior="publicFooterContent"}}
-
-{{tpl:include src="user_footer.html"}}
Index: nc/public/default-templates/currywurst/_head.html
===================================================================
--- inc/public/default-templates/currywurst/_head.html	(revision 2600)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<!-- media queries -->
-<meta name="viewport" content="width=device-width, initial-scale=1.0" />
-
-<!-- compat media queries -->
-<!--[if lt IE 9]>
-	<script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
-	<link rel="stylesheet" type="text/css" href="{{tpl:BlogThemeURL}}/ie.css" media="screen" />
-<![endif]-->
-
-<link rel="stylesheet" type="text/css" href="{{tpl:BlogThemeURL}}/style.css" media="screen" />
-<link rel="stylesheet" type="text/css" href="{{tpl:BlogThemeURL}}/../default/print.css" media="print" />
-
-<script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/jquery.js"></script>
-<script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/jquery.cookie.js"></script>
-
-{{tpl:include src="user_head.html"}}
-{{tpl:SysBehavior behavior="publicHeadContent"}}
Index: nc/public/default-templates/currywurst/_mp3_player.html
===================================================================
--- inc/public/default-templates/currywurst/_mp3_player.html	(revision 2600)
+++ 	(revision )
@@ -1,6 +1,0 @@
-<object type="application/x-shockwave-flash" data="{{tpl:BlogQmarkURL}}pf=player_mp3.swf" width="200" height="20">
-<param name="movie" value="{{tpl:BlogQmarkURL}}pf=player_mp3.swf" />
-<param name="wmode" value="transparent" />
-<param name="FlashVars" value="mp3={{tpl:MediaURL}}&amp;showvolume=1&amp;loadingcolor=ff9900&amp;bgcolor1=eeeeee&amp;bgcolor2=cccccc&amp;buttoncolor=0066cc&amp;buttonovercolor=ff9900&amp;slidercolor1=cccccc&amp;slidercolor2=999999&amp;sliderovercolor=0066cc" />
-{{tpl:lang Embedded Audio Player}}
-</object>
Index: nc/public/default-templates/currywurst/_pagination.html
===================================================================
--- inc/public/default-templates/currywurst/_pagination.html	(revision 2600)
+++ 	(revision )
@@ -1,13 +1,0 @@
-<tpl:Pagination>
-	<p class="pagination">
-		<tpl:PaginationIf end="0">
-			<a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171; {{tpl:lang previous entries}}</a> -
-		</tpl:PaginationIf>
-
-		{{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
-
-		<tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">
-			{{tpl:lang next entries}} &#187;</a>
-		</tpl:PaginationIf>
-	</p>
-</tpl:Pagination>
Index: nc/public/default-templates/currywurst/_sidebar.html
===================================================================
--- inc/public/default-templates/currywurst/_sidebar.html	(revision 2670)
+++ 	(revision )
@@ -1,10 +1,0 @@
-<div class="sidebar" id="sidebar" role="complementary">
-	<div class="widgets blognav__widgets" id="blognav">
-        <h2 class="blognav__title">{{tpl:lang Blog menu}}</h2>
-		{{tpl:Widgets type="nav"}}
-	</div> <!-- End #blognav -->
-	<div class="widgets blogextra__widgets" id="blogextra">
-        <h2 class="blogextra__title">{{tpl:lang Extra menu}}</h2>
-		{{tpl:Widgets type="extra"}}
-	</div> <!-- End #blogextra -->
-</div>
Index: nc/public/default-templates/currywurst/_simple-entry.html
===================================================================
--- inc/public/default-templates/currywurst/_simple-entry.html	(revision 2641)
+++ 	(revision )
@@ -1,182 +1,0 @@
-<div class="post simple" id="p{{tpl:EntryID}}" role="article">
-	<h2 class="post-title">{{tpl:EntryTitle encode_html="1"}}</h2>
-
-	<div class="post-meta">
-		<p class="post-info">
-			<span class="post-author">{{tpl:lang By}} {{tpl:EntryAuthorLink}}, </span>
-			<span class="post-date">{{tpl:EntryDate}}. </span>
-			<span class="post-permalink"><a href="{{tpl:EntryURL}}">{{tpl:lang Permalink}}</a></span>
-			<tpl:EntryIf has_category="1">
-				<span class="post-cat"><tpl:EntryCategoriesBreadcrumb><a
-				href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a> › </tpl:EntryCategoriesBreadcrumb><a
-				href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a></span>
-			</tpl:EntryIf>
-		</p>
-
-		<tpl:EntryTags>
-			<tpl:TagsHeader>
-				<ul class="post-tags-list">
-			</tpl:TagsHeader>
-				<li class="post-tags-item"><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
-			<tpl:TagsFooter>
-				</ul>
-			</tpl:TagsFooter>
-		</tpl:EntryTags>
-	</div>
-
-	<!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-	{{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-	<!-- # Entry with an excerpt -->
-	<tpl:EntryIf extended="1">
-		<div class="post-excerpt">{{tpl:EntryExcerpt}}</div>
-	</tpl:EntryIf>
-
-	<div class="post-content">{{tpl:EntryContent}}</div>
-
-	<!-- # --BEHAVIOR-- publicEntryAfterContent -->
-	{{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-
-<!-- # Attachments -->
-<tpl:Attachments>
-	<tpl:AttachmentsHeader>
-	<div class="post-attachments" id="attachments">
-		<h3 class="post-attachments-title">{{tpl:lang Attachments}}</h3>
-		<ul class="post-attachments-list">
-	</tpl:AttachmentsHeader>
-				<li class="post-attachments-item {{tpl:AttachmentType}}">
-					<tpl:AttachmentIf is_mp3="1">
-						{{tpl:include src="_mp3_player.html"/}} -
-					</tpl:AttachmentIf>
-					<tpl:AttachmentIf is_flv="1">
-						{{tpl:include src="_flv_player.html"/}}
-					</tpl:AttachmentIf>
-					<tpl:AttachmentIf is_flv="0">
-						<a href="{{tpl:AttachmentURL}}"
-						 title="{{tpl:AttachmentFileName}} ({{tpl:AttachmentSize}})">{{tpl:AttachmentTitle}}</a>
-					</tpl:AttachmentIf>
-				</li>
-	<tpl:AttachmentsFooter>
-			</ul>
-		</div>
-	</tpl:AttachmentsFooter>
-</tpl:Attachments>
-</div>
-
-<tpl:EntryIf operator="or" show_comments="1" show_pings="1">
-	<div class="post-feedback">
-</tpl:EntryIf>
-
-<!-- # Comments -->
-<tpl:EntryIf show_comments="1">
-	<tpl:Comments with_pings="1">
-		<tpl:CommentsHeader>
-			<div class="feedback__comments" id="comments">
-				<h3>{{tpl:EntryCommentCount count_all="1" none="no reactions" one="one reaction" more="%s reactions"}}</h3>
-				<tpl:EntryIf operator="or" comments_active="1" pings_active="1">
-					<p id="comments-feed"><a class="feed" href="{{tpl:BlogFeedURL type="atom"}}/comments/{{tpl:EntryID}}"
-						title="{{tpl:lang This post's comments Atom feed}}">{{tpl:lang This post's comments feed}}</a></p>
-				</tpl:EntryIf>
-				<ul class="comments-list">
-		</tpl:CommentsHeader>
-					<tpl:CommentIf is_ping="0">
-						<li id="c{{tpl:CommentID}}" class="comment {{tpl:CommentIfMe}} {{tpl:CommentIfOdd}} {{tpl:CommentIfFirst}}">
-					</tpl:CommentIf>
-					<tpl:CommentIf is_ping="1">
-						<li id="c{{tpl:PingID}}" class="ping {{tpl:PingIfOdd}} {{tpl:PingIfFirst}}">
-					</tpl:CommentIf>
-							<p class="comment-info"><a href="#c{{tpl:CommentID}}" class="comment-number">{{tpl:CommentOrderNumber}}</a>
-								{{tpl:lang From}} {{tpl:CommentAuthorLink}} - {{tpl:CommentDate format="%d"}}/{{tpl:CommentDate format="%m"}}/{{tpl:CommentDate format="%Y"}}, {{tpl:CommentTime}}
-							</p>
-							<div class="comment-content">
-								<!-- # --BEHAVIOR-- publicCommentBeforeContent -->
-								{{tpl:SysBehavior behavior="publicCommentBeforeContent"}}
-
-								{{tpl:CommentContent}}
-
-								<!-- # --BEHAVIOR-- publicCommentAfterContent -->
-								{{tpl:SysBehavior behavior="publicCommentAfterContent"}}
-							</div>
-						</li>
-		<tpl:CommentsFooter>
-					</ul>
-				</div>
-		</tpl:CommentsFooter>
-	</tpl:Comments>
-</tpl:EntryIf>
-
-<tpl:EntryIf comments_active="1">
-	<tpl:SysIfFormError>
-		<p class="error" id="pr">{{tpl:SysFormError}}</p>
-	</tpl:SysIfFormError>
-
-	<tpl:SysIfCommentPublished>
-		<p class="message" id="pr">{{tpl:lang Your comment has been published.}}</p>
-	</tpl:SysIfCommentPublished>
-
-	<tpl:SysIfCommentPending>
-		<p class="message" id="pr">{{tpl:lang Your comment has been submitted and will be reviewed for publication.}}</p>
-	</tpl:SysIfCommentPending>
-
-	<!-- # Comment form -->
-	<form class="comment-form" action="{{tpl:EntryURL}}#pr" method="post" id="comment-form" role="form">
-		<tpl:IfCommentPreview>
-			<div id="pr">
-				<h3>{{tpl:lang Your comment}}</h3>
-				<div class="comment-preview">{{tpl:CommentPreviewContent}}</div>
-				<p class="buttons"><button type="submit" class="submit" value="{{tpl:lang Send}}">{{tpl:lang Send}}</button></p>
-			</div>
-		</tpl:IfCommentPreview>
-
-		<h3>{{tpl:lang Add a comment}}</h3>
-			<!-- # --BEHAVIOR-- publicCommentFormBeforeContent -->
-			{{tpl:SysBehavior behavior="publicCommentFormBeforeContent"}}
-
-			<p class="field name-field"><label for="c_name">{{tpl:lang Name or nickname}}<abbr title="{{tpl:lang Required field}}">*</abbr>&nbsp;:</label>
-				<input name="c_name" id="c_name" type="text" size="30" maxlength="255"
-				 value="{{tpl:CommentPreviewName encode_html="1"}}" required />
-			</p>
-
-			<p class="field mail-field"><label for="c_mail">{{tpl:lang Email address}}<abbr title="{{tpl:lang Required field}}">*</abbr>&nbsp;:</label>
-				<input name="c_mail" id="c_mail" type="email" size="30" maxlength="255"
-				 value="{{tpl:CommentPreviewEmail encode_html="1"}}" required />
-			</p>
-
-			<p class="field site-field"><label for="c_site">{{tpl:lang Website}}&nbsp;:</label>
-				<input name="c_site" id="c_site" type="url" size="30" maxlength="255"
-				 value="{{tpl:CommentPreviewSite encode_html="1"}}" />
-			</p>
-
-			<p style="display:none">
-				<input name="f_mail" type="text" size="30" maxlength="255" value="" />
-			</p>
-
-			<p class="field field-content"><label for="c_content" aria-describedby="c_help">{{tpl:lang Comment}}<abbr title="{{tpl:lang Required field}}">*</abbr>&nbsp;:</label>
-				<textarea name="c_content" id="c_content" cols="35"
-				 rows="7" required>{{tpl:CommentPreviewContent raw="1" encode_html="1"}}</textarea>
-			</p>
-
-			<p class="form-help" id="c_help">{{tpl:CommentHelp}}</p>
-
-			<!-- # --BEHAVIOR-- publicCommentFormAfterContent -->
-			{{tpl:SysBehavior behavior="publicCommentFormAfterContent"}}
-
-			<p class="buttons">
-				<button type="submit" class="preview" name="preview" value="{{tpl:lang Preview}}">{{tpl:lang Preview}}</button>
-		        <tpl:IfCommentPreview>
-		        	<button type="submit" class="submit" value="{{tpl:lang Send}}">{{tpl:lang Send}}</button>
-		        </tpl:IfCommentPreview>
-			</p>
-	</form>
-</tpl:EntryIf>
-
-<tpl:EntryIf pings_active="1">
-	<div class="send-ping">
-		<h3>{{tpl:lang Add ping}}</h3>
-		<p id="ping-url">{{tpl:lang Trackback URL}}&nbsp;: {{tpl:EntryPingLink}}</p>
-	</div>
-</tpl:EntryIf>
-
-<tpl:EntryIf operator="or" show_comments="1" show_pings="1">
-	</div> <!-- end post-feedback -->
-</tpl:EntryIf>
Index: nc/public/default-templates/currywurst/_top.html
===================================================================
--- inc/public/default-templates/currywurst/_top.html	(revision 2621)
+++ 	(revision )
@@ -1,18 +1,0 @@
-<div class="header">
-	<ul class="skip-links" id="prelude" role="navigation">
-		<li><a href="#main">{{tpl:lang To content}}</a></li>
-		<li><a href="#blognav">{{tpl:lang To menu}}</a></li>
-		<li><a href="#search">{{tpl:lang To search}}</a></li>
-	</ul>
-
-	<div class="banner" role="banner">
-		<h1 class="site-title"><a class="site-title__link"
-			href="{{tpl:BlogURL}}"><span class="site-title__text">{{tpl:BlogName encode_html="1"}}</span></a></h1>
-		<p class="site-baseline">{{tpl:BlogDescription}}</p>
-	</div>
-
-	<!-- # --BEHAVIOR-- publicTopAfterContent -->
-	{{tpl:SysBehavior behavior="publicTopAfterContent"}}
-
-	{{tpl:SimpleMenu class="nav header__nav"}}
-</div>
Index: nc/public/default-templates/currywurst/archive.html
===================================================================
--- inc/public/default-templates/currywurst/archive.html	(revision 2693)
+++ 	(revision )
@@ -1,122 +1,0 @@
-{{tpl:extends parent="__layout.html"}}
-
-<tpl:Block name="head-title">
-	<title>{{tpl:lang Archives}} - {{tpl:BlogName encode_html="1"}}</title>
-</tpl:Block>
-
-<tpl:Block name="dc-entry">
-	<meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Archives}} - {{tpl:BlogName encode_html="1"}}" />
-	<meta property="dc.description" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogDescription encode_html="1"}}" />
-	<meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-	<meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="head-linkrel">
-	<link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-	<tpl:Archives>
-		<link rel="chapter" href="{{tpl:ArchiveURL}}" title="{{tpl:ArchiveDate encode_html="1"}}" />
-	</tpl:Archives>
-	<link rel="contents" title="{{tpl:lang Archives}}" href="{{tpl:BlogArchiveURL}}" />
-	<tpl:Categories>
-		<link rel="section" href="{{tpl:CategoryURL}}" title="{{tpl:CategoryTitle encode_html="1"}}" />
-	</tpl:Categories>
-	<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-</tpl:Block>
-
-<tpl:Block name="body-tag"><body class="dc-archive"></tpl:Block>
-
-<tpl:Block name="main-content">
-	<div id="content-info">
-		<h2>{{tpl:lang Archives}}</h2>
-	</div>
-
-	<div class="content-inner">
-
-		<div id="time-criteria"><!-- entries sorted by date -->
-			<div id="arch-by-year" class="arch-block arch-by-year">
-				<h3>{{tpl:lang By date}}</h3>
-				<p class="fromto">{{tpl:lang FromDay}} <tpl:Entries no_content="1" order="asc" lastn="1"><a href="{{tpl:EntryURL}}">{{tpl:EntryDate format="%e %B %Y"}}</a></tpl:Entries> {{tpl:lang toDay}} <tpl:Entries no_content="1" order="desc" lastn="1"><a href="{{tpl:EntryURL}}">{{tpl:EntryDate format="%e %B %Y"}}</a></tpl:Entries></p>
-				<tpl:Archives order="asc">
-					<tpl:ArchivesYearHeader>
-						<div class="arch-by-year__each-year">
-							<h4>{{tpl:ArchiveDate format="%Y"}}</h4>
-							<ul class="arch-list arch-year-list">
-					</tpl:ArchivesYearHeader>
-								<li><a href="{{tpl:ArchiveURL}}" title="{{tpl:ArchiveDate encode_html="1"}}">{{tpl:ArchiveDate encode_html="1" format="%B"}}</a>
-									<span>({{tpl:ArchiveEntriesCount}})</span></li>
-					<tpl:ArchivesYearFooter>
-							</ul>
-						</div>
-					</tpl:ArchivesYearFooter>
-				</tpl:Archives>
-			</div>
-		</div>
-
-		<div id="other-criteria"><!-- entries sorted by others criterias -->
-			<tpl:Categories level="1">
-				<tpl:CategoriesHeader>
-					<div id="arch-by-cat" class="arch-block arch-by-cat">
-						<h3>{{tpl:lang By category}}</h3>
-						<ul class="arch-list arch-cat-list">
-							</tpl:CategoriesHeader>
-							<li><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a>
-							<tpl:CategoryFirstChildren>
-								<tpl:CategoriesHeader>
-								<ul class="arch-list arch-sub-cat-list">
-								</tpl:CategoriesHeader>
-									<li><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a></li>
-								<tpl:CategoriesFooter>
-								</ul>
-								</tpl:CategoriesFooter>
-							</tpl:CategoryFirstChildren>
-							</li>
-					<tpl:CategoriesFooter>
-						</ul>
-					</div>
-					</tpl:CategoriesFooter>
-			</tpl:Categories>
-
-			<tpl:Tags sortby="count" order="desc">
-				<tpl:TagsHeader>
-					<div id="arch-by-tag" class="arch-block arch-by-tag">
-						<h3>{{tpl:lang By tag}}</h3>
-						<ul class="arch-list arch-tag-list">
-				</tpl:TagsHeader>
-							<li><a href="{{tpl:TagURL}}" class="tag{{tpl:TagRoundPercent}}">{{tpl:TagID}}</a></li>
-				<tpl:TagsFooter>
-						</ul>
-					</div>
-				</tpl:TagsFooter>
-			</tpl:Tags>
-		</div>
-
-		<div id="more-arch"><!-- others things -->
-			<div id="arch-by-page" class="arch-block arch-by-page">
-				<tpl:Entries type="page" no_content="1" lastn="0" selected="0">
-					<tpl:EntriesHeader>
-						<h3>{{tpl:lang Pages}}</h3>
-						<ul class="arch-list arch-page-list">
-					</tpl:EntriesHeader>
-							<li><a href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></li>
-					<tpl:EntriesFooter>
-						</ul>
-					</tpl:EntriesFooter>
-				</tpl:Entries>
-			</div>
-		</div>
-	</div> <!-- End .content-inner -->
-</tpl:Block>
-
-<tpl:Block name="wrapper-sidebar">
-	<div id="sidebar" role="complementary">
-		<div id="blognav">
-			<tpl:Widget id="search">
-			</tpl:Widget>
-		</div> <!-- End #blognav -->
-
-		<div id="blogextra">
-			{{tpl:Widgets type="extra"}}
-		</div> <!-- End #blogextra -->
-
-	</div> <!-- End #sidebar -->
-</tpl:Block>
Index: nc/public/default-templates/currywurst/archive_month.html
===================================================================
--- inc/public/default-templates/currywurst/archive_month.html	(revision 2692)
+++ 	(revision )
@@ -1,54 +1,0 @@
-{{tpl:extends parent="__layout.html"}}
-
-<tpl:Block name="head-title">
-	<title>{{tpl:lang Archives}} - {{tpl:ArchiveDate}} - {{tpl:BlogName encode_html="1"}}</title>
-</tpl:Block>
-
-<tpl:Block name="meta-robots">
-	<meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
-</tpl:Block>
-
-<tpl:Block name="dc-entry">
-	<meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Archives}} - {{tpl:ArchiveDate}} - {{tpl:BlogName encode_html="1"}}" />
-	<meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-	<meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="head-linkrel">
-	<link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-	<link rel="up" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-	<link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-
-	<tpl:ArchiveNext><link rel="next" href="{{tpl:ArchiveURL}}" title="{{tpl:ArchiveDate encode_html="1"}}" /></tpl:ArchiveNext>
-	<tpl:ArchivePrevious><link rel="prev" href="{{tpl:ArchiveURL}}" title="{{tpl:ArchiveDate encode_html="1"}}" /></tpl:ArchivePrevious>
-
-	<tpl:Entries no_content="1">
-		<link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-	</tpl:Entries>
-</tpl:Block>
-
-<tpl:Block name="body-tag"><body class="dc-archive-month"></body></tpl:Block>
-
-<tpl:Block name="main-content">
-	<p class="navlinks topnl">
-		<tpl:ArchivePrevious><a href="{{tpl:ArchiveURL}}" class="prev">&#171; {{tpl:ArchiveDate encode_html="1"}}</a> - </tpl:ArchivePrevious>
-		{{tpl:ArchiveDate}}
-		<tpl:ArchiveNext> - <a href="{{tpl:ArchiveURL}}" class="next">{{tpl:ArchiveDate encode_html="1"}} &#187;</a></tpl:ArchiveNext>
-	</p>
-
-	<div id="content-info">
-		<h2>{{tpl:ArchiveDate}} <span>({{tpl:ArchiveEntriesCount}})</span></h2>
-	</div>
-
-	<div class="content-inner">
-		<tpl:Entries>
-			{{tpl:include src="_entry-short.html"}}
-		</tpl:Entries>
-	</div>
-
-	<p class="navlinks">
-		<tpl:ArchivePrevious><a href="{{tpl:ArchiveURL}}" class="prev">&#171; {{tpl:ArchiveDate encode_html="1"}}</a> - </tpl:ArchivePrevious>
-		{{tpl:ArchiveDate}}
-		<tpl:ArchiveNext> - <a href="{{tpl:ArchiveURL}}" class="next">{{tpl:ArchiveDate encode_html="1"}} &#187;</a></tpl:ArchiveNext>
-	</p>
-</tpl:Block>
Index: nc/public/default-templates/currywurst/atom-comments.xml
===================================================================
--- inc/public/default-templates/currywurst/atom-comments.xml	(revision 2600)
+++ 	(revision )
@@ -1,47 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="{{tpl:BlogLanguage}}">
-
-  <title type="html">{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}
-  - {{tpl:lang Comments}}</title>
-  <subtitle type="html">{{tpl:BlogDescription encode_xml="1"}}</subtitle>
-  <link href="{{tpl:SysSelfURI}}" rel="self" type="application/atom+xml"/>
-  <link href="{{tpl:BlogURL}}" rel="alternate" type="text/html"
-  title="{{tpl:BlogDescription encode_xml="1"}}"/>
-  <updated>{{tpl:BlogUpdateDate iso8601="1"}}</updated>
-  <author>
-    <name>{{tpl:BlogEditor encode_xml="1"}}</name>
-  </author>
-  <id>{{tpl:BlogFeedID}}</id>
-  <generator uri="http://www.dotclear.org/">Dotclear</generator>
-
-  <tpl:Comments order="desc" with_pings="1">
-
-  <tpl:CommentIf is_ping="1">
-  <entry>
-    <title>[ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}}</title>
-    <link href="{{tpl:PingPostURL encode_xml="1"}}#c{{tpl:PingID}}" rel="alternate" type="text/html"
-    title="[ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}}" />
-    <id>{{tpl:PingFeedID}}</id>
-    <published>{{tpl:PingDate iso8601="1"}}</published>
-    <updated>{{tpl:PingDate iso8601="1" upddt="1"}}</updated>
-    <author><name>{{tpl:PingBlogName encode_xml="1"}}</name></author>
-    <content type="html">&lt;p&gt;&lt;a href="{{tpl:PingAuthorURL encode_xml="1"}}"&gt;{{tpl:PingTitle encode_xml="1"}}&lt;/a&gt;&lt;/p&gt; {{tpl:PingContent encode_xml="1"}}</content>
-  </entry>
-
-  </tpl:CommentIf>
-
-  <tpl:CommentIf is_ping="0">
-  <entry>
-    <title>{{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}}</title>
-    <link href="{{tpl:CommentPostURL encode_xml="1"}}#c{{tpl:CommentID}}" rel="alternate" type="text/html"
-    title="{{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}}" />
-    <id>{{tpl:CommentFeedID}}</id>
-    <published>{{tpl:CommentDate iso8601="1"}}</published>
-    <updated>{{tpl:CommentDate iso8601="1" upddt="1"}}</updated>
-    <author><name>{{tpl:CommentAuthor encode_xml="1"}}</name></author>
-    <content type="html">{{tpl:CommentContent absolute_urls="1" encode_xml="1"}}</content>
-  </entry>
-  </tpl:CommentIf>
-  </tpl:Comments>
-
-</feed>
Index: nc/public/default-templates/currywurst/atom.xml
===================================================================
--- inc/public/default-templates/currywurst/atom.xml	(revision 2600)
+++ 	(revision )
@@ -1,55 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom"
-  xmlns:dc="http://purl.org/dc/elements/1.1/"
-  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
-  xml:lang="{{tpl:BlogLanguage}}">
-
-  <title type="html">{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}</title>
-  <subtitle type="html">{{tpl:BlogDescription encode_xml="1"}}</subtitle>
-  <link href="{{tpl:SysSelfURI}}" rel="self" type="application/atom+xml"/>
-  <link href="{{tpl:BlogURL}}" rel="alternate" type="text/html"
-  title="{{tpl:BlogDescription encode_xml="1"}}"/>
-  <updated>{{tpl:BlogUpdateDate iso8601="1"}}</updated>
-  <author>
-    <name>{{tpl:BlogEditor encode_xml="1"}}</name>
-  </author>
-  <id>{{tpl:BlogFeedID}}</id>
-  <generator uri="http://www.dotclear.org/">Dotclear</generator>
-
-  <tpl:Entries>
-
-  <entry>
-    <title>{{tpl:EntryTitle encode_xml="1"}}</title>
-    <link href="{{tpl:EntryURL}}" rel="alternate" type="text/html"
-    title="{{tpl:EntryTitle encode_xml="1"}}" />
-    <id>{{tpl:EntryFeedID}}</id>
-    <published>{{tpl:EntryDate iso8601="1"}}</published>
-    <tpl:EntryIf republished="1">
-      <updated>{{tpl:EntryDate iso8601="1" upddt="1"}}</updated>
-    </tpl:EntryIf>
-    <tpl:EntryIf republished="0">
-      <updated>{{tpl:EntryDate iso8601="1"}}</updated>
-    </tpl:EntryIf>
-    <author><name>{{tpl:EntryAuthorCommonName encode_xml="1"}}</name></author>
-    <tpl:EntryIf has_category="1">
-    <dc:subject>{{tpl:EntryCategory encode_html="1"}}</dc:subject>
-    </tpl:EntryIf>
-    <tpl:EntryTags><dc:subject>{{tpl:TagID}}</dc:subject></tpl:EntryTags>
-
-    <content type="html">{{tpl:EntryExcerpt absolute_urls="1" encode_xml="1"}}
-    {{tpl:EntryContent absolute_urls="1" encode_xml="1"}}</content>
-
-    <tpl:Attachments>
-      <link rel="enclosure" href="{{tpl:AttachmentURL}}"
-      length="{{tpl:AttachmentSize full="1"}}" type="{{tpl:AttachmentMimeType}}" />
-    </tpl:Attachments>
-
-
-    <tpl:EntryIf comments_active="1">
-      <wfw:comment>{{tpl:EntryURL}}#comment-form</wfw:comment>
-      <wfw:commentRss>{{tpl:BlogFeedURL type="atom"}}/comments/{{tpl:EntryID}}</wfw:commentRss>
-    </tpl:EntryIf>
-  </entry>
-  </tpl:Entries>
-
-</feed>
Index: nc/public/default-templates/currywurst/category.html
===================================================================
--- inc/public/default-templates/currywurst/category.html	(revision 2704)
+++ 	(revision )
@@ -1,98 +1,0 @@
-{{tpl:extends parent="__layout.html"}}
-
-<tpl:Block name="head-title">
-	<title>{{tpl:CategoryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
-</tpl:Block>
-
-<tpl:Block name="meta-robots">
-	<meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
-</tpl:Block>
-
-<tpl:Block name="meta-entry">
-	<meta name="description" lang="{{tpl:BlogLanguage}}" content="{{tpl:CategoryDescription cut_string="180" remove_html="1"}}" />
-	<meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-	<meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="dc-entry">
-	<meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:CategoryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-	<meta property="dc.description" lang="{{tpl:BlogLanguage}}" content="{{tpl:CategoryDescription remove_html="1"}}" />
-	<meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-	<meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="head-linkrel">
-	<link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-	<link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-
-	<tpl:Entries no_content="1">
-		<tpl:EntriesHeader>
-			<tpl:Pagination>
-				<tpl:PaginationIf end="0">
-					<link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
-				</tpl:PaginationIf>
-
-				<tpl:PaginationIf start="0">
-					<link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
-				</tpl:PaginationIf>
-			</tpl:Pagination>
-		</tpl:EntriesHeader>
-
-		<link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-	</tpl:Entries>
-
-	<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:CategoryFeedURL type="atom"}}" />
-</tpl:Block>
-
-<tpl:block name="body-tag"><body class="dc-category"></tpl:Block>
-
-<tpl:Block name="main-content">
-	<div id="content-info">
-		<h2>
-			<tpl:CategoryParents>
-				<a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a> &rsaquo;
-			</tpl:CategoryParents>
-			{{tpl:CategoryTitle encode_html="1"}}
-		</h2>
-
-		<tpl:CategoryIf has_entries="1">
-			<ul class="content-info__feed">
-				<li><a type="application/atom+xml" href="{{tpl:CategoryFeedURL type="atom"}}"
-				 title="{{tpl:lang This category's entries Atom feed}}" class="feed">{{tpl:lang Entries feed}}</a></li>
-
-				<tpl:SysIf operator="or" comments_active="1" pings_active="1">
-					 <li><a type="application/atom+xml" href="{{tpl:CategoryFeedURL type="atom"}}/comments"
-					 title="{{tpl:lang This category's comments Atom feed}}" class="feed">{{tpl:lang Comments feed}}</a></li>
-				</tpl:SysIf>
-			</ul>
-		</tpl:CategoryIf>
-
-		<div class="content-info__cat-desc">
-			{{tpl:CategoryDescription}}
-		</div>
-
-
-		<tpl:CategoryFirstChildren>
-			<tpl:CategoriesHeader>
-				<div id="subcategories" class="content-info__sub-cat">
-					<h3>{{tpl:lang Subcategories}}</h3>
-					<ul>
-			</tpl:CategoriesHeader>
-						<li class="post-cat"><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a></li>
-			<tpl:CategoriesFooter>
-					</ul>
-				</div>
-			</tpl:CategoriesFooter>
-		</tpl:CategoryFirstChildren>
-	</div>	<!-- End #content-info -->
-
-	<div class="content-inner">
-		<tpl:Entries>
-			{{tpl:include src="_entry-short.html"}}
-
-			<tpl:EntriesFooter>
-				{{tpl:include src="_pagination.html"}}
-			</tpl:EntriesFooter>
-		</tpl:Entries>
-	</div> <!-- End #content-inner -->
-</tpl:Block>
Index: nc/public/default-templates/currywurst/home.html
===================================================================
--- inc/public/default-templates/currywurst/home.html	(revision 2675)
+++ 	(revision )
@@ -1,1 +1,0 @@
-{{tpl:extends parent="__layout.html"}}
Index: nc/public/default-templates/currywurst/password-form.html
===================================================================
--- inc/public/default-templates/currywurst/password-form.html	(revision 2603)
+++ 	(revision )
@@ -1,40 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />
-  <title>{{tpl:lang Password needed}} - {{tpl:BlogName encode_html="1"}}</title>
-
-  <style type="text/css">
-  body {
-  font: 0.8em Verdana,Arial,Geneva,sans-serif;
-  }
-
-  form {
-  display : block;
-  width : 500px;
-  margin : 0 auto;
-  padding : 1em;
-  background : #eee;
-  }
-
-  h2 { font : 140% Arial,Helvetica,sans-serif; margin : 0; }
-
-  label { font-weight : bold; }
-
-  input { border-width : 1px; }
-  </style>
-</head>
-
-<body>
-
-<form action="{{tpl:EntryURL}}" method="post" role="form">
-<h2>{{tpl:lang Password needed}}</h2>
-
-<p>{{tpl:lang You must give a password to access this area.}}</p>
-<p><label>{{tpl:lang Password:}} <input type="password" name="password" value="" /></label> <input type="submit" value="ok" /></p>
-
-</form>
-
-</body>
-</html>
Index: nc/public/default-templates/currywurst/post.html
===================================================================
--- inc/public/default-templates/currywurst/post.html	(revision 2693)
+++ 	(revision )
@@ -1,67 +1,0 @@
-{{tpl:extends parent="__layout.html"}}
-
-<tpl:Block name="head-title">
-	<title>{{tpl:EntryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}</title>
-</tpl:Block>
-
-<tpl:Block name="meta-entry">
-	<meta name="description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
-	<meta name="author" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
-	<meta name="date" content="{{tpl:EntryDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="dc-entry">
-	<meta property="dc.title" content="{{tpl:EntryTitle encode_html="1"}}" />
-	<meta property="dc.description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
-	<meta property="dc.creator" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
-	<meta property="dc.language" content="{{tpl:EntryLang}}" />
-	<meta property="dc.date" content="{{tpl:EntryDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="head-linkrel">
-	<link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-	<link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-	<tpl:EntryNext><link rel="next" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" /></tpl:EntryNext>
-	<tpl:EntryPrevious><link rel="prev" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" /></tpl:EntryPrevious>
-	<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-</tpl:Block>
-
-<tpl:Block name="html-head">
-	{{tpl:parent}}
-
-	<script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/post.js"></script>
-	<script type="text/javascript">
-		//<![CDATA[
-		var post_remember_str = '{{tpl:lang Remember me on this blog}}';
-		//]]>
-	</script>
-</tpl:Block>
-
-<tpl:block name="body-tag"><body class="dc-post"></tpl:Block>
-
-<tpl:Block name="page-top">
-	{{tpl:EntryPingData}}
-	{{tpl:parent}}
-</tpl:Block>
-
-<tpl:Block name="main-content">
-	<p class="navlinks topnl">
-		<tpl:EntryPrevious><a href="{{tpl:EntryURL}}"
-		 title="{{tpl:EntryTitle encode_html="1"}}" class="prev">&#171; {{tpl:EntryTitle encode_html="1"
-		 cut_string="50"}}</a></tpl:EntryPrevious>
-		<tpl:EntryNext> <span>-</span> <a href="{{tpl:EntryURL}}"
-		 title="{{tpl:EntryTitle encode_html="1"}}" class="next">{{tpl:EntryTitle encode_html="1"
-		 cut_string="50"}} &#187;</a></tpl:EntryNext>
-	</p>
-
-	{{tpl:include src="_simple-entry.html"}}
-
-	<p class="navlinks">
-		<tpl:EntryPrevious><a href="{{tpl:EntryURL}}"
-		 title="{{tpl:EntryTitle encode_html="1"}}" class="prev">&#171; {{tpl:EntryTitle encode_html="1"
-		 cut_string="50"}}</a></tpl:EntryPrevious>
-		<tpl:EntryNext> <span>-</span> <a href="{{tpl:EntryURL}}"
-		 title="{{tpl:EntryTitle encode_html="1"}}" class="next">{{tpl:EntryTitle encode_html="1"
-		 cut_string="50"}} &#187;</a></tpl:EntryNext>
-	</p>
-</tpl:Block>
Index: nc/public/default-templates/currywurst/rss2-comments.xml
===================================================================
--- inc/public/default-templates/currywurst/rss2-comments.xml	(revision 2600)
+++ 	(revision )
@@ -1,48 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<?xml-stylesheet title="XSL formatting" type="text/xsl" href="{{tpl:BlogURL}}feed/rss2/xslt" ?>
-<rss version="2.0"
-  xmlns:dc="http://purl.org/dc/elements/1.1/"
-  xmlns:content="http://purl.org/rss/1.0/modules/content/"
-  xmlns:atom="http://www.w3.org/2005/Atom">
-<channel>
-  <title>{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}
-  - {{tpl:lang Comments}}</title>
-  <link>{{tpl:BlogURL}}</link>
-  <atom:link href="{{tpl:SysSelfURI}}" rel="self" type="application/rss+xml"/>
-  <description>{{tpl:BlogDescription encode_xml="1"}}</description>
-  <language>{{tpl:BlogLanguage}}</language>
-  <pubDate>{{tpl:BlogUpdateDate rfc822="1"}}</pubDate>
-  <copyright>{{tpl:BlogCopyrightNotice encode_xml="1"}}</copyright>
-  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
-  <generator>Dotclear</generator>
-
-  <tpl:Comments order="desc" with_pings="1">
-
-  <tpl:CommentIf is_ping="1">
-  <item>
-    <title>[ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}}</title>
-    <link>{{tpl:PingPostURL encode_xml="1"}}#c{{tpl:PingID}}</link>
-    <guid isPermaLink="false">{{tpl:PingFeedID}}</guid>
-    <pubDate>{{tpl:PingDate rfc822="1"}}</pubDate>
-    <dc:creator>{{tpl:PingBlogName encode_xml="1"}}</dc:creator>
-
-    <description>&lt;p&gt;&lt;a href="{{tpl:PingAuthorURL encode_xml="1"}}"&gt;{{tpl:PingTitle encode_xml="1"}}&lt;/a&gt;&lt;/p&gt;
-    {{tpl:PingContent encode_xml="1"}}</description>
-  </item>
-  </tpl:CommentIf>
-
-  <tpl:CommentIf is_ping="0">
-  <item>
-    <title>{{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}}</title>
-    <link>{{tpl:CommentPostURL encode_xml="1"}}#c{{tpl:CommentID}}</link>
-    <guid isPermaLink="false">{{tpl:CommentFeedID}}</guid>
-    <pubDate>{{tpl:CommentDate rfc822="1"}}</pubDate>
-    <dc:creator>{{tpl:CommentAuthor encode_xml="1"}}</dc:creator>
-
-    <description>{{tpl:CommentContent absolute_urls="1" encode_xml="1"}}</description>
-  </item>
-  </tpl:CommentIf>
-  </tpl:Comments>
-
-</channel>
-</rss>
Index: nc/public/default-templates/currywurst/rss2.xml
===================================================================
--- inc/public/default-templates/currywurst/rss2.xml	(revision 2600)
+++ 	(revision )
@@ -1,49 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<?xml-stylesheet title="XSL formatting" type="text/xsl" href="{{tpl:BlogURL}}feed/rss2/xslt" ?>
-<rss version="2.0"
-  xmlns:dc="http://purl.org/dc/elements/1.1/"
-  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
-  xmlns:content="http://purl.org/rss/1.0/modules/content/"
-  xmlns:atom="http://www.w3.org/2005/Atom">
-<channel>
-  <title>{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}</title>
-  <link>{{tpl:BlogURL}}</link>
-  <atom:link href="{{tpl:SysSelfURI}}" rel="self" type="application/rss+xml"/>
-  <description>{{tpl:BlogDescription encode_xml="1"}}</description>
-  <language>{{tpl:BlogLanguage}}</language>
-  <pubDate>{{tpl:BlogUpdateDate rfc822="1"}}</pubDate>
-  <copyright>{{tpl:BlogCopyrightNotice encode_xml="1"}}</copyright>
-  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
-  <generator>Dotclear</generator>
-
-  <tpl:Entries>
-
-  <item>
-    <title>{{tpl:EntryTitle encode_xml="1"}}</title>
-    <link>{{tpl:EntryURL}}</link>
-    <guid isPermaLink="false">{{tpl:EntryFeedID}}</guid>
-    <pubDate>{{tpl:EntryDate rfc822="1"}}</pubDate>
-    <dc:creator>{{tpl:EntryAuthorCommonName encode_xml="1"}}</dc:creator>
-    <tpl:EntryIf has_category="1">
-    <category>{{tpl:EntryCategory encode_html="1"}}</category>
-    </tpl:EntryIf>
-    <tpl:EntryTags><category>{{tpl:TagID}}</category></tpl:EntryTags>
-
-    <description>{{tpl:EntryExcerpt absolute_urls="1" encode_xml="1"}}
-    {{tpl:EntryContent absolute_urls="1" encode_xml="1"}}</description>
-
-    <tpl:Attachments>
-      <enclosure url="{{tpl:AttachmentURL}}"
-      length="{{tpl:AttachmentSize full="1"}}" type="{{tpl:AttachmentMimeType}}" />
-    </tpl:Attachments>
-
-    <tpl:EntryIf comments_active="1">
-      <comments>{{tpl:EntryURL}}#comment-form</comments>
-      <wfw:comment>{{tpl:EntryURL}}#comment-form</wfw:comment>
-      <wfw:commentRss>{{tpl:BlogFeedURL}}/comments/{{tpl:EntryID}}</wfw:commentRss>
-    </tpl:EntryIf>
-  </item>
-  </tpl:Entries>
-
-</channel>
-</rss>
Index: nc/public/default-templates/currywurst/rss2.xsl
===================================================================
--- inc/public/default-templates/currywurst/rss2.xsl	(revision 2600)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-xmlns:content="http://purl.org/rss/1.0/modules/content/"
-xmlns="http://www.w3.org/1999/xhtml">
-
-<xsl:output method="html"/>
-
-<xsl:template match="/">
-<html>
-  <head>
-    <title>{{tpl:lang Subscribe to}} <xsl:value-of select="/rss/channel/title"/></title>
-    <style type="text/css">
-    <![CDATA[
-    body {
-      font: 80% Verdana,Arial,sans-serif;
-      margin: 20px 0;
-      padding: 0 0;
-      background: #fff;
-      color: #000;
-    }
-    a { color: #039; }
-    h1, h2 { font-family: Arial,sans-serif; }
-    h1 { font-size: 160%; margin: 0; }
-    h2 { font-size: 140%; font-weight: bold; margin: 0.5em 0 0.2em 0; }
-    h2 a { text-decoration: none; }
-    p { margin: 0 0 0.5em 0; }
-    #page {
-      margin: 0 80px;
-    }
-    #top {
-      background: #036;
-      padding : 1em;
-      color: #fff;
-    }
-    #top a {
-      color: #fff;
-      text-decoration: none;
-    }
-    #what {
-      padding: 1em;
-      background: #eee;
-      border-bottom: 1px solid #000;
-      font-size: 80%;
-    }
-    #what p {
-      margin: 0 0 0.5em 0;
-    }
-    #footer {
-      border-top: 1px solid #000;
-    }
-    #items {
-      background: #fff;
-      color: inherit;
-    }
-    #items div {
-      margin: 0 0 1em 0;
-    }
-    ]]>
-    </style>
-    <script type="text/javascript"><![CDATA[
-    window.onload = function() {
-      document.getElementById('feedurl').value = window.location.href;
-
-      // Ugly but works ;)
-      var c = document.getElementsByTagName('div');
-      var t = '';
-      for (var i=0; c.length-i != 0; i++) {
-        if (c[i].className == 'item-content') {
-          if (c[i].textContent) {
-            t = c[i].textContent;
-          } else if (c[i].innerText) {
-            t = c[i].innerText;
-          } else {
-            t = '';
-          }
-
-          if (t) { c[i].innerHTML = t; }
-        }
-      }
-    };
-    ]]></script>
-  </head>
-  <body>
-    <div id="page">
-      <div id="top">
-        <h1><a href="{/rss/channel/link}"><xsl:value-of select="/rss/channel/title"/></a></h1>
-        <p><xsl:value-of select="/rss/channel/description"/></p>
-      </div>
-      <div id="what">
-      <h3>{{tpl:lang What is an RSS feed?}}</h3>
-      <p>{{tpl:lang RSS feed is a free blog summary. It provides content
-      (either posts or comments) or  summaries of content, together with links
-      to the full versions, and other metadata. The last published items may
-      then be read by your favorite RSS
-      <a href="http://en.wikipedia.org/wiki/Aggregator">aggregator</a>.}}</p>
-      <h3>{{tpl:lang Subscribe}}</h3>
-      <p>{{tpl:lang Simply copy the following URL into your aggregator:}}</p>
-      <p><input type="text" size="60" value="" id="feedurl" /></p>
-      </div>
-      <div id="items">
-        <xsl:apply-templates select="//item"/>
-      </div>
-      <div id="footer">
-        <p><xsl:value-of select="/rss/channel/copyright"/></p>
-      </div>
-    </div>
-  </body>
-</html>
-</xsl:template>
-
-<!-- Item template -->
-<xsl:template match="item">
-  <div>
-    <h2><a href="{link}"><xsl:value-of select="title"/></a></h2>
-    <div class="item-content"><xsl:value-of select="description" /></div>
-  </div>
-</xsl:template>
-
-</xsl:stylesheet>
Index: nc/public/default-templates/currywurst/search.html
===================================================================
--- inc/public/default-templates/currywurst/search.html	(revision 2675)
+++ 	(revision )
@@ -1,78 +1,0 @@
-{{tpl:extends parent="__layout.html"}}
-
-<tpl:Block name="head-title">{{tpl:lang Search}} - {{tpl:SysSearchString encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></tpl:Block>
-
-<tpl:Block name="head-meta">
-	<meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX,NOARCHIVE"}}" />
-	<meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-	<meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-	<meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="head-dc">
-	<link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-	<meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Search}} - {{tpl:SysSearchString encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-	<meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-	<meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-	<meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-	<meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-	<meta property="dc.type" content="text" />
-	<meta property="dc.format" content="text/html" />
-</tpl:Block>
-
-<tpl:Block name="head-linkrel">
-	<link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-	<link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-	<tpl:Entries no_content="1">
-		<tpl:EntriesHeader>
-			<tpl:Pagination>
-				<tpl:PaginationIf end="0">
-					<link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
-				</tpl:PaginationIf>
-				<tpl:PaginationIf start="0">
-					<link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
-				</tpl:PaginationIf>
-			</tpl:Pagination>
-		</tpl:EntriesHeader>
-		<link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-	</tpl:Entries>
-	<link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
-</tpl:Block>
-
-<tpl:Block name="body-attr">class="dc-search"</tpl:Block>
-
-<tpl:Block name="main-content">
-	<div id="content-info">
-		<h2>{{tpl:lang Search}}</h2>
-		<tpl:SysIf search_count="==0">
-			<p>{{tpl:SysSearchString encode_html="1" string="Your search for <em>%1$s</em> returned no result."}}</p>
-		</tpl:SysIf>
-		<tpl:SysIf search_count="==1">
-			<p>{{tpl:SysSearchString encode_html="1" string="Your search for <em>%1$s</em> returned <strong>%2$s</strong> result."}}</p>
-		</tpl:SysIf>
-		<tpl:SysIf search_count="&gt;1">
-			<p>{{tpl:SysSearchString encode_html="1" string="Your search for <em>%1$s</em> returned <strong>%2$s</strong> results."}}</p>
-		</tpl:SysIf>
-	</div>
-
-	<div class="content-inner">
-		<tpl:Entries type="post,page">
-
-			{{tpl:include src="_entry-short.html"}}
-
-			<tpl:EntriesFooter>
-				<tpl:Pagination>
-					<p class="pagination">
-						<tpl:PaginationIf end="0">
-							<a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171; {{tpl:lang previous entries}}</a> -
-						</tpl:PaginationIf>
-						 {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
-						<tpl:PaginationIf start="0">
-							 - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}} &#187;</a>
-						</tpl:PaginationIf>
-					</p>
-				</tpl:Pagination>
-			</tpl:EntriesFooter>
-		</tpl:Entries>
-	</div> <!-- End #content-inner -->
-</tpl:Block>
Index: nc/public/default-templates/currywurst/user_head.html
===================================================================
--- inc/public/default-templates/currywurst/user_head.html	(revision 2600)
+++ 	(revision )
@@ -1,1 +1,0 @@
-<!-- # This template is included at the end of _head.html template -->
Index: inc/public/default-templates/home.html
===================================================================
--- inc/public/default-templates/home.html	(revision 2566)
+++ inc/public/default-templates/home.html	(revision 2566)
@@ -0,0 +1,144 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
+
+  <title>{{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
+  <meta name="description" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogDescription cut_string="180" encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
+  <meta name="dc.description" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogDescription encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="contents" title="{{tpl:lang Archives}}" href="{{tpl:BlogArchiveURL}}" />
+  <tpl:Categories>
+  <link rel="section" href="{{tpl:CategoryURL}}" title="{{tpl:CategoryTitle encode_html="1"}}" />
+  </tpl:Categories>
+
+  <tpl:Entries no_content="1">
+    <tpl:EntriesHeader>
+      <tpl:Pagination>
+        <tpl:PaginationIf end="0">
+        <link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
+        </tpl:PaginationIf>
+
+        <tpl:PaginationIf start="0">
+        <link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
+        </tpl:PaginationIf>
+      </tpl:Pagination>
+    </tpl:EntriesHeader>
+
+    <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
+  </tpl:Entries>
+
+  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
+  <link rel="EditURI" type="application/rsd+xml" title="RSD" href="{{tpl:BlogRSDURL}}" />
+  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
+
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-home">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+  <tpl:Entries>
+    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}}" lang="{{tpl:EntryLang}}" xml:lang="{{tpl:EntryLang}}">
+    <!-- # New day date -->
+    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
+
+    <h2 class="post-title"><a
+    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
+
+    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
+    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}
+    <tpl:EntryIf has_category="1">
+    - <a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a>
+    </tpl:EntryIf>
+    </p>
+
+    <tpl:EntryTags>
+    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
+    <li><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
+    <tpl:TagsFooter></ul></tpl:TagsFooter>
+    </tpl:EntryTags>
+
+    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
+    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
+
+    <!-- # Entry with an excerpt -->
+    <tpl:EntryIf extended="1">
+      <div class="post-content">{{tpl:EntryExcerpt}}</div>
+      <p class="read-it"><a href="{{tpl:EntryURL}}"
+      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
+      reading}}</a>...</p>
+    </tpl:EntryIf>
+
+    <!-- # Entry without excerpt -->
+    <tpl:EntryIf extended="0">
+      <div class="post-content">{{tpl:EntryContent}}</div>
+    </tpl:EntryIf>
+
+    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
+    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
+
+    <!-- # Number of comments, trackbacks and attachments -->
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      <p class="post-info-co">
+    </tpl:EntryIf>
+    <tpl:EntryIf show_comments="1">
+      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
+    </tpl:EntryIf>
+    <tpl:EntryIf show_pings="1">
+      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf has_attachment="1">
+      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      </p>
+    </tpl:EntryIf>
+    </div>
+
+    <tpl:EntriesFooter>
+      <tpl:Pagination>
+        <p class="pagination"><tpl:PaginationIf end="0"><a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
+        {{tpl:lang previous entries}}</a> - </tpl:PaginationIf>
+        {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
+        <tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}}
+        &#187;</a></tpl:PaginationIf></p>
+      </tpl:Pagination>
+    </tpl:EntriesFooter>
+  </tpl:Entries>
+  </div>
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: nc/public/default-templates/mustek/404.html
===================================================================
--- inc/public/default-templates/mustek/404.html	(revision 2603)
+++ 	(revision )
@@ -1,61 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX,NOARCHIVE"}}" />
-
-  <title>{{tpl:lang Document not found}} - {{tpl:BlogName encode_html="1"}}</title>
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Document not found}} - {{tpl:BlogName encode_html="1"}}" />
-  <meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="contents" title="{{tpl:lang Archives}}" href="{{tpl:BlogArchiveURL}}" />
-  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-
-  {{tpl:include src="_head.html"}}
-</head>
-
-<body class="dc-404">
-<div id="page">
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-
-  <div id="content-info">
-    <h2>{{tpl:lang Document not found}}</h2>
-  </div>
-
-  <div class="content-inner">
-    <p>{{tpl:lang The document you are looking for does not exist.}}</p>
-  </div>
-
-  </div>
-</div>
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: nc/public/default-templates/mustek/_flv_player.html
===================================================================
--- inc/public/default-templates/mustek/_flv_player.html	(revision 2599)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<object type="application/x-shockwave-flash" data="{{tpl:BlogQmarkURL}}pf=player_flv.swf"
-width="400" height="300">
-<param name="movie" value="{{tpl:BlogQmarkURL}}pf=player_flv.swf" />
-<param name="wmode" value="transparent" />
-<param name="allowFullScreen" value="true" />
-<param name="FlashVars" value="flv={{tpl:MediaURL}}&amp;width=400&amp;height=300&amp;margin=1&amp;showfullscreen=1&amp;showvolume=1&amp;showtime=1" />
-{{tpl:lang Embedded Audio Player}}
-</object>
Index: nc/public/default-templates/mustek/_footer.html
===================================================================
--- inc/public/default-templates/mustek/_footer.html	(revision 2603)
+++ 	(revision )
@@ -1,5 +1,0 @@
-<div id="footer" role="contentinfo">
-  <p>{{tpl:SysPoweredBy}}</p>
-</div>
-
-{{tpl:SysBehavior behavior="publicFooterContent"}}
Index: nc/public/default-templates/mustek/_head.html
===================================================================
--- inc/public/default-templates/mustek/_head.html	(revision 2599)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<link rel="stylesheet" type="text/css" href="{{tpl:BlogThemeURL}}/style.css" media="screen" />
-<link rel="stylesheet" type="text/css" href="{{tpl:BlogThemeURL}}/../default/print.css" media="print" />
-
-<script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/jquery.js"></script>
-<script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/jquery.cookie.js"></script>
-
-{{tpl:include src="user_head.html"}}
-{{tpl:SysBehavior behavior="publicHeadContent"}}
Index: nc/public/default-templates/mustek/_mp3_player.html
===================================================================
--- inc/public/default-templates/mustek/_mp3_player.html	(revision 2599)
+++ 	(revision )
@@ -1,6 +1,0 @@
-<object type="application/x-shockwave-flash" data="{{tpl:BlogQmarkURL}}pf=player_mp3.swf" width="200" height="20">
-<param name="movie" value="{{tpl:BlogQmarkURL}}pf=player_mp3.swf" />
-<param name="wmode" value="transparent" />
-<param name="FlashVars" value="mp3={{tpl:MediaURL}}&amp;showvolume=1&amp;loadingcolor=ff9900&amp;bgcolor1=eeeeee&amp;bgcolor2=cccccc&amp;buttoncolor=0066cc&amp;buttonovercolor=ff9900&amp;slidercolor1=cccccc&amp;slidercolor2=999999&amp;sliderovercolor=0066cc" />
-{{tpl:lang Embedded Audio Player}}
-</object>
Index: nc/public/default-templates/mustek/_top.html
===================================================================
--- inc/public/default-templates/mustek/_top.html	(revision 2603)
+++ 	(revision )
@@ -1,10 +1,0 @@
-<div id="top" role="banner">
-  <h1><span><a href="{{tpl:BlogURL}}">{{tpl:BlogName encode_html="1"}}</a></span></h1>
-
-  <!-- # --BEHAVIOR-- publicTopAfterContent -->
-  {{tpl:SysBehavior behavior="publicTopAfterContent"}}
-</div>
-
-<p id="prelude" role="navigation"><a href="#main">{{tpl:lang To content}}</a> |
-<a href="#blognav">{{tpl:lang To menu}}</a> |
-<a href="#search">{{tpl:lang To search}}</a></p>
Index: nc/public/default-templates/mustek/archive.html
===================================================================
--- inc/public/default-templates/mustek/archive.html	(revision 2603)
+++ 	(revision )
@@ -1,78 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
-
-  <title>{{tpl:lang Archives}} - {{tpl:BlogName encode_html="1"}}</title>
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Archives}} - {{tpl:BlogName encode_html="1"}}" />
-  <meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-
-  <tpl:Archives>
-    <link rel="chapter" href="{{tpl:ArchiveURL}}" title="{{tpl:ArchiveDate encode_html="1"}}" />
-  </tpl:Archives>
-
-  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-
-  {{tpl:include src="_head.html"}}
-</head>
-
-<body class="dc-archive">
-<div id="page">
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-
-  <div id="content-info">
-    <h2>{{tpl:lang Archives}}</h2>
-  </div>
-
-  <div class="content-inner">
-  <tpl:Archives>
-    <tpl:ArchivesYearHeader>
-      <h3>{{tpl:ArchiveDate format="%Y"}}</h3>
-      <ul>
-    </tpl:ArchivesYearHeader>
-      <li><a href="{{tpl:ArchiveURL}}"
-      title="{{tpl:ArchiveDate encode_html="1"}}">{{tpl:ArchiveDate encode_html="1" format="%B"}}</a>
-      ({{tpl:ArchiveEntriesCount}})</li>
-    <tpl:ArchivesYearFooter>
-      </ul>
-    </tpl:ArchivesYearFooter>
-  </tpl:Archives>
-  </div>
-
-  </div>
-</div> <!-- End #main -->
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: nc/public/default-templates/mustek/archive_month.html
===================================================================
--- inc/public/default-templates/mustek/archive_month.html	(revision 2604)
+++ 	(revision )
@@ -1,95 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
-
-  <title>{{tpl:lang Archives}} - {{tpl:ArchiveDate}} - {{tpl:BlogName encode_html="1"}}</title>
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Archives}} - {{tpl:ArchiveDate}} - {{tpl:BlogName encode_html="1"}}" />
-  <meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="up" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-
-
-  <tpl:ArchiveNext><link rel="next" href="{{tpl:ArchiveURL}}"
-  title="{{tpl:ArchiveDate encode_html="1"}}" /></tpl:ArchiveNext>
-  <tpl:ArchivePrevious><link rel="prev" href="{{tpl:ArchiveURL}}"
-  title="{{tpl:ArchiveDate encode_html="1"}}" /></tpl:ArchivePrevious>
-
-  <tpl:Entries no_content="1">
-  <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-  </tpl:Entries>
-
-  {{tpl:include src="_head.html"}}
-</head>
-
-<body class="dc-archive-month">
-<div id="page">
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-
-  <p id="navlinks">
-  <tpl:ArchivePrevious><a href="{{tpl:ArchiveURL}}" class="prev">&#171; {{tpl:ArchiveDate encode_html="1"}}</a>
-  - </tpl:ArchivePrevious>
-  <a href="{{tpl:BlogArchiveURL}}">{{tpl:lang Archives}}</a>
-  <tpl:ArchiveNext> - <a href="{{tpl:ArchiveURL}}" class="next">{{tpl:ArchiveDate encode_html="1"}} &#187;</a></tpl:ArchiveNext>
-  </p>
-
-  <div id="content-info">
-    <h2>{{tpl:ArchiveDate}}</h2>
-  </div>
-
-  <div class="content-inner">
-  <tpl:Entries no_content="1">
-    <!-- # New day date -->
-    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
-
-    <h2 id="p{{tpl:EntryID}}" class="post-title" lang="{{tpl:EntryLang}}"><a
-    href="{{tpl:EntryURL}}" title="{{tpl:lang Read}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
-
-    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
-    <tpl:EntryIf show_comments="1">
-    - <a href="{{tpl:EntryURL}}#comments">{{tpl:EntryCommentCount}}</a>
-    </tpl:EntryIf>
-    <tpl:EntryIf show_pings="1">
-    - <a href="{{tpl:EntryURL}}#pings">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
-    <tpl:EntryIf has_attachment="1">
-    - <a href="{{tpl:EntryURL}}#attachments">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
-    </p>
-  </tpl:Entries>
-  </div>
-  </div>
-</div> <!-- End #main -->
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: nc/public/default-templates/mustek/atom-comments.xml
===================================================================
--- inc/public/default-templates/mustek/atom-comments.xml	(revision 2599)
+++ 	(revision )
@@ -1,47 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="{{tpl:BlogLanguage}}">
-
-  <title type="html">{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}
-  - {{tpl:lang Comments}}</title>
-  <subtitle type="html">{{tpl:BlogDescription encode_xml="1"}}</subtitle>
-  <link href="{{tpl:SysSelfURI}}" rel="self" type="application/atom+xml"/>
-  <link href="{{tpl:BlogURL}}" rel="alternate" type="text/html"
-  title="{{tpl:BlogDescription encode_xml="1"}}"/>
-  <updated>{{tpl:BlogUpdateDate iso8601="1"}}</updated>
-  <author>
-    <name>{{tpl:BlogEditor encode_xml="1"}}</name>
-  </author>
-  <id>{{tpl:BlogFeedID}}</id>
-  <generator uri="http://www.dotclear.org/">Dotclear</generator>
-
-  <tpl:Comments order="desc" with_pings="1">
-
-  <tpl:CommentIf is_ping="1">
-  <entry>
-    <title>[ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}}</title>
-    <link href="{{tpl:PingPostURL encode_xml="1"}}#c{{tpl:PingID}}" rel="alternate" type="text/html"
-    title="[ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}}" />
-    <id>{{tpl:PingFeedID}}</id>
-    <published>{{tpl:PingDate iso8601="1"}}</published>
-    <updated>{{tpl:PingDate iso8601="1" upddt="1"}}</updated>
-    <author><name>{{tpl:PingBlogName encode_xml="1"}}</name></author>
-    <content type="html">&lt;p&gt;&lt;a href="{{tpl:PingAuthorURL encode_xml="1"}}"&gt;{{tpl:PingTitle encode_xml="1"}}&lt;/a&gt;&lt;/p&gt; {{tpl:PingContent encode_xml="1"}}</content>
-  </entry>
-
-  </tpl:CommentIf>
-
-  <tpl:CommentIf is_ping="0">
-  <entry>
-    <title>{{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}}</title>
-    <link href="{{tpl:CommentPostURL encode_xml="1"}}#c{{tpl:CommentID}}" rel="alternate" type="text/html"
-    title="{{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}}" />
-    <id>{{tpl:CommentFeedID}}</id>
-    <published>{{tpl:CommentDate iso8601="1"}}</published>
-    <updated>{{tpl:CommentDate iso8601="1" upddt="1"}}</updated>
-    <author><name>{{tpl:CommentAuthor encode_xml="1"}}</name></author>
-    <content type="html">{{tpl:CommentContent absolute_urls="1" encode_xml="1"}}</content>
-  </entry>
-  </tpl:CommentIf>
-  </tpl:Comments>
-
-</feed>
Index: nc/public/default-templates/mustek/atom.xml
===================================================================
--- inc/public/default-templates/mustek/atom.xml	(revision 2599)
+++ 	(revision )
@@ -1,55 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom"
-  xmlns:dc="http://purl.org/dc/elements/1.1/"
-  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
-  xml:lang="{{tpl:BlogLanguage}}">
-
-  <title type="html">{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}</title>
-  <subtitle type="html">{{tpl:BlogDescription encode_xml="1"}}</subtitle>
-  <link href="{{tpl:SysSelfURI}}" rel="self" type="application/atom+xml"/>
-  <link href="{{tpl:BlogURL}}" rel="alternate" type="text/html"
-  title="{{tpl:BlogDescription encode_xml="1"}}"/>
-  <updated>{{tpl:BlogUpdateDate iso8601="1"}}</updated>
-  <author>
-    <name>{{tpl:BlogEditor encode_xml="1"}}</name>
-  </author>
-  <id>{{tpl:BlogFeedID}}</id>
-  <generator uri="http://www.dotclear.org/">Dotclear</generator>
-
-  <tpl:Entries>
-
-  <entry>
-    <title>{{tpl:EntryTitle encode_xml="1"}}</title>
-    <link href="{{tpl:EntryURL}}" rel="alternate" type="text/html"
-    title="{{tpl:EntryTitle encode_xml="1"}}" />
-    <id>{{tpl:EntryFeedID}}</id>
-    <published>{{tpl:EntryDate iso8601="1"}}</published>
-    <tpl:EntryIf republished="1">
-      <updated>{{tpl:EntryDate iso8601="1" upddt="1"}}</updated>
-    </tpl:EntryIf>
-    <tpl:EntryIf republished="0">
-      <updated>{{tpl:EntryDate iso8601="1"}}</updated>
-    </tpl:EntryIf>
-    <author><name>{{tpl:EntryAuthorCommonName encode_xml="1"}}</name></author>
-    <tpl:EntryIf has_category="1">
-    <dc:subject>{{tpl:EntryCategory encode_html="1"}}</dc:subject>
-    </tpl:EntryIf>
-    <tpl:EntryTags><dc:subject>{{tpl:TagID}}</dc:subject></tpl:EntryTags>
-
-    <content type="html">{{tpl:EntryExcerpt absolute_urls="1" encode_xml="1"}}
-    {{tpl:EntryContent absolute_urls="1" encode_xml="1"}}</content>
-
-    <tpl:Attachments>
-      <link rel="enclosure" href="{{tpl:AttachmentURL}}"
-      length="{{tpl:AttachmentSize full="1"}}" type="{{tpl:AttachmentMimeType}}" />
-    </tpl:Attachments>
-
-
-    <tpl:EntryIf comments_active="1">
-      <wfw:comment>{{tpl:EntryURL}}#comment-form</wfw:comment>
-      <wfw:commentRss>{{tpl:BlogFeedURL type="atom"}}/comments/{{tpl:EntryID}}</wfw:commentRss>
-    </tpl:EntryIf>
-  </entry>
-  </tpl:Entries>
-
-</feed>
Index: nc/public/default-templates/mustek/category.html
===================================================================
--- inc/public/default-templates/mustek/category.html	(revision 2604)
+++ 	(revision )
@@ -1,166 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
-
-  <title>{{tpl:CategoryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
-  <meta name="description" lang="{{tpl:BlogLanguage}}" content="{{tpl:CategoryDescription cut_string="180" remove_html="1"}}" />
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:CategoryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-  <meta property="dc.description" lang="{{tpl:BlogLanguage}}" content="{{tpl:CategoryDescription remove_html="1"}}" />
-  <meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-
-  <tpl:Entries no_content="1">
-    <tpl:EntriesHeader>
-      <tpl:Pagination>
-        <tpl:PaginationIf end="0">
-        <link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
-        </tpl:PaginationIf>
-
-        <tpl:PaginationIf start="0">
-        <link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
-        </tpl:PaginationIf>
-      </tpl:Pagination>
-    </tpl:EntriesHeader>
-
-    <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-  </tpl:Entries>
-
-  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:CategoryFeedURL type="atom"}}" />
-
-  {{tpl:include src="_head.html"}}
-</head>
-
-<body class="dc-category">
-<div id="page">
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-
-  <div id="content-info">
-    <h2><tpl:CategoryParents><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a> &rsaquo; </tpl:CategoryParents>
-    {{tpl:CategoryTitle encode_html="1"}}</h2>
-    {{tpl:CategoryDescription}}
-
-    <tpl:CategoryIf has_entries="1">
-      <p><a type="application/atom+xml" href="{{tpl:CategoryFeedURL type="atom"}}"
-      title="{{tpl:lang This category's entries Atom feed}}" class="feed">{{tpl:lang Entries feed}}</a>
-
-      <tpl:SysIf operator="or" comments_active="1" pings_active="1">
-      - <a type="application/atom+xml" href="{{tpl:CategoryFeedURL type="atom"}}/comments"
-      title="{{tpl:lang This category's comments Atom feed}}" class="feed">{{tpl:lang Comments feed}}</a>
-      </tpl:SysIf>
-      </p>
-    </tpl:CategoryIf>
-  </div>
-
-  <tpl:CategoryFirstChildren>
-    <tpl:CategoriesHeader>
-      <div id="subcategories">
-      <h3>{{tpl:lang Subcategories}}</h3>
-      <ul>
-    </tpl:CategoriesHeader>
-    <li><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a></li>
-    <tpl:CategoriesFooter>
-      </ul>
-      </div>
-    </tpl:CategoriesFooter>
-  </tpl:CategoryFirstChildren>
-
-  <tpl:Entries>
-    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}}" lang="{{tpl:EntryLang}}" role="article">
-    <!-- # New day date -->
-    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
-
-    <h2 class="post-title"><a
-    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
-
-    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
-    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}</p>
-
-    <tpl:EntryTags>
-    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
-    <li><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
-    <tpl:TagsFooter></ul></tpl:TagsFooter>
-    </tpl:EntryTags>
-
-    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-    <!-- # Entry with an excerpt -->
-    <tpl:EntryIf extended="1">
-      <div class="post-content">{{tpl:EntryExcerpt}}</div>
-      <p class="read-it"><a href="{{tpl:EntryURL}}"
-      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
-      reading}}</a>...</p>
-    </tpl:EntryIf>
-
-    <!-- # Entry without excerpt -->
-    <tpl:EntryIf extended="0">
-      <div class="post-content">{{tpl:EntryContent}}</div>
-    </tpl:EntryIf>
-
-    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
-    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-
-    <!-- # Number of comments, trackbacks and attachments -->
-    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-      <p class="post-info-co">
-    </tpl:EntryIf>
-    <tpl:EntryIf show_comments="1">
-      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
-    </tpl:EntryIf>
-    <tpl:EntryIf show_pings="1">
-      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
-    <tpl:EntryIf has_attachment="1">
-      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
-    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-      </p>
-    </tpl:EntryIf>
-    </div>
-
-    <tpl:EntriesFooter>
-      <tpl:Pagination>
-        <p class="pagination"><tpl:PaginationIf end="0"><a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
-        {{tpl:lang previous entries}}</a> - </tpl:PaginationIf>
-        {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
-        <tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}}
-        &#187;</a></tpl:PaginationIf></p>
-      </tpl:Pagination>
-    </tpl:EntriesFooter>
-  </tpl:Entries>
-  </div>
-</div> <!-- End #main -->
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: nc/public/default-templates/mustek/home.html
===================================================================
--- inc/public/default-templates/mustek/home.html	(revision 2604)
+++ 	(revision )
@@ -1,143 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
-
-  <title>{{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
-  <meta name="description" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogDescription cut_string="180" encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-  <meta property="dc.description" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogDescription encode_html="1"}}" />
-  <meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="contents" title="{{tpl:lang Archives}}" href="{{tpl:BlogArchiveURL}}" />
-  <tpl:Categories>
-  <link rel="section" href="{{tpl:CategoryURL}}" title="{{tpl:CategoryTitle encode_html="1"}}" />
-  </tpl:Categories>
-
-  <tpl:Entries no_content="1">
-    <tpl:EntriesHeader>
-      <tpl:Pagination>
-        <tpl:PaginationIf end="0">
-        <link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
-        </tpl:PaginationIf>
-
-        <tpl:PaginationIf start="0">
-        <link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
-        </tpl:PaginationIf>
-      </tpl:Pagination>
-    </tpl:EntriesHeader>
-
-    <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-  </tpl:Entries>
-
-  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-  <link rel="EditURI" type="application/rsd+xml" title="RSD" href="{{tpl:BlogRSDURL}}" />
-  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
-
-  {{tpl:include src="_head.html"}}
-</head>
-
-<body class="dc-home">
-<div id="page">
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-  <tpl:Entries>
-    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}}" lang="{{tpl:EntryLang}}" role="article">
-    <!-- # New day date -->
-    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
-
-    <h2 class="post-title"><a
-    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
-
-    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
-    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}
-    <tpl:EntryIf has_category="1">
-    - <a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a>
-    </tpl:EntryIf>
-    </p>
-
-    <tpl:EntryTags>
-    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
-    <li><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
-    <tpl:TagsFooter></ul></tpl:TagsFooter>
-    </tpl:EntryTags>
-
-    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-    <!-- # Entry with an excerpt -->
-    <tpl:EntryIf extended="1">
-      <div class="post-content">{{tpl:EntryExcerpt}}</div>
-      <p class="read-it"><a href="{{tpl:EntryURL}}"
-      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
-      reading}}</a>...</p>
-    </tpl:EntryIf>
-
-    <!-- # Entry without excerpt -->
-    <tpl:EntryIf extended="0">
-      <div class="post-content">{{tpl:EntryContent}}</div>
-    </tpl:EntryIf>
-
-    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
-    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-
-    <!-- # Number of comments, trackbacks and attachments -->
-    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-      <p class="post-info-co">
-    </tpl:EntryIf>
-    <tpl:EntryIf show_comments="1">
-      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
-    </tpl:EntryIf>
-    <tpl:EntryIf show_pings="1">
-      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
-    <tpl:EntryIf has_attachment="1">
-      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
-    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-      </p>
-    </tpl:EntryIf>
-    </div>
-
-    <tpl:EntriesFooter>
-      <tpl:Pagination>
-        <p class="pagination"><tpl:PaginationIf end="0"><a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
-        {{tpl:lang previous entries}}</a> - </tpl:PaginationIf>
-        {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
-        <tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}}
-        &#187;</a></tpl:PaginationIf></p>
-      </tpl:Pagination>
-    </tpl:EntriesFooter>
-  </tpl:Entries>
-  </div>
-</div> <!-- End #main -->
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: nc/public/default-templates/mustek/password-form.html
===================================================================
--- inc/public/default-templates/mustek/password-form.html	(revision 2603)
+++ 	(revision )
@@ -1,40 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />
-  <title>{{tpl:lang Password needed}} - {{tpl:BlogName encode_html="1"}}</title>
-
-  <style type="text/css">
-  body {
-  font: 0.8em Verdana,Arial,Geneva,sans-serif;
-  }
-
-  form {
-  display : block;
-  width : 500px;
-  margin : 0 auto;
-  padding : 1em;
-  background : #eee;
-  }
-
-  h2 { font : 140% Arial,Helvetica,sans-serif; margin : 0; }
-
-  label { font-weight : bold; }
-
-  input { border-width : 1px; }
-  </style>
-</head>
-
-<body>
-
-<form action="{{tpl:EntryURL}}" method="post" role="form">
-<h2>{{tpl:lang Password needed}}</h2>
-
-<p>{{tpl:lang You must give a password to access this area.}}</p>
-<p><label>{{tpl:lang Password:}} <input type="password" name="password" value="" /></label> <input type="submit" value="ok" /></p>
-
-</form>
-
-</body>
-</html>
Index: nc/public/default-templates/mustek/post.html
===================================================================
--- inc/public/default-templates/mustek/post.html	(revision 2603)
+++ 	(revision )
@@ -1,274 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
-
-  <title>{{tpl:EntryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}</title>
-  <meta name="description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
-  <meta name="date" content="{{tpl:EntryDate iso8601="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" content="{{tpl:EntryTitle encode_html="1"}}" />
-  <meta property="dc.description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
-  <meta property="dc.creator" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
-  <meta property="dc.language" content="{{tpl:EntryLang}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.date" content="{{tpl:EntryDate iso8601="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-  <tpl:EntryIf pings_active="1"><link rel="pingback" href="{{tpl:BlogXMLRPCURL}}" /></tpl:EntryIf>
-
-  <tpl:EntryNext><link rel="next" href="{{tpl:EntryURL}}"
-  title="{{tpl:EntryTitle encode_html="1"}}" /></tpl:EntryNext>
-
-  <tpl:EntryPrevious><link rel="prev" href="{{tpl:EntryURL}}"
-  title="{{tpl:EntryTitle encode_html="1"}}" /></tpl:EntryPrevious>
-
-  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-
-  {{tpl:include src="_head.html"}}
-
-  <script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/post.js"></script>
-  <script type="text/javascript">
-  //<![CDATA[
-  var post_remember_str = '{{tpl:lang Remember me on this blog}}';
-  //]]>
-  </script>
-</head>
-
-<body class="dc-post">
-<div id="page">
-{{tpl:EntryPingData}}
-
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-
-  <p id="navlinks">
-  <tpl:EntryPrevious><a href="{{tpl:EntryURL}}"
-  title="{{tpl:EntryTitle encode_html="1"}}" class="prev">&#171; {{tpl:EntryTitle encode_html="1"
-  cut_string="50"}}</a></tpl:EntryPrevious>
-  <tpl:EntryNext> <span>-</span> <a href="{{tpl:EntryURL}}"
-  title="{{tpl:EntryTitle encode_html="1"}}" class="next">{{tpl:EntryTitle encode_html="1"
-  cut_string="50"}} &#187;</a></tpl:EntryNext>
-  </p>
-
-  <div id="p{{tpl:EntryID}}" class="post" role="article">
-    <h2 class="post-title">{{tpl:EntryTitle encode_html="1"}}</h2>
-
-    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
-    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}
-    <tpl:EntryIf has_category="1">
-    - <a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a>
-    </tpl:EntryIf>
-    - <a href="{{tpl:EntryURL}}">{{tpl:lang Permalink}}</a>
-    </p>
-
-    <tpl:EntryTags>
-    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
-    <li><a href="{{tpl:TagURL}}" rel="tag">{{tpl:TagID}}</a></li>
-    <tpl:TagsFooter></ul></tpl:TagsFooter>
-    </tpl:EntryTags>
-
-    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-    <!-- # Entry with an excerpt -->
-    <tpl:EntryIf extended="1">
-      <div class="post-excerpt">{{tpl:EntryExcerpt}}</div>
-    </tpl:EntryIf>
-
-    <div class="post-content">{{tpl:EntryContent}}</div>
-
-    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
-    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-  </div>
-
-  <!-- # Attachments -->
-  <tpl:Attachments>
-    <tpl:AttachmentsHeader>
-      <div id="attachments">
-      <h3>{{tpl:lang Attachments}}</h3>
-      <ul>
-    </tpl:AttachmentsHeader>
-      <li class="{{tpl:AttachmentType}}">
-        <tpl:AttachmentIf is_mp3="1">
-          {{tpl:include src="_mp3_player.html"/}} -
-        </tpl:AttachmentIf>
-        <tpl:AttachmentIf is_flv="1">
-	     {{tpl:include src="_flv_player.html"/}}
-	   </tpl:AttachmentIf>
-	   <tpl:AttachmentIf is_flv="0">
-	   	<a href="{{tpl:AttachmentURL}}"
-		title="{{tpl:AttachmentFileName}} ({{tpl:AttachmentSize}})">{{tpl:AttachmentTitle}}</a>
-        </tpl:AttachmentIf>
-      </li>
-    <tpl:AttachmentsFooter>
-      </ul>
-      </div>
-    </tpl:AttachmentsFooter>
-  </tpl:Attachments>
-
-  <!-- # Comments -->
-  <tpl:EntryIf show_comments="1">
-    <tpl:Comments>
-    <tpl:CommentsHeader>
-      <div id="comments">
-        <h3>{{tpl:lang Comments}}</h3>
-      <dl>
-    </tpl:CommentsHeader>
-      <dt id="c{{tpl:CommentID}}" class="{{tpl:CommentIfMe}} {{tpl:CommentIfOdd}} {{tpl:CommentIfFirst}}"><a
-      href="#c{{tpl:CommentID}}" class="comment-number">{{tpl:CommentOrderNumber}}.</a>
-      {{tpl:lang On}} {{tpl:CommentDate}}, {{tpl:CommentTime}}
-      {{tpl:lang by}} {{tpl:CommentAuthorLink}}</dt>
-
-      <dd class="{{tpl:CommentIfMe}} {{tpl:CommentIfOdd}} {{tpl:CommentIfFirst}}">
-      <!-- # --BEHAVIOR-- publicCommentBeforeContent -->
-      {{tpl:SysBehavior behavior="publicCommentBeforeContent"}}
-
-      {{tpl:CommentContent}}
-
-      <!-- # --BEHAVIOR-- publicCommentAfterContent -->
-      {{tpl:SysBehavior behavior="publicCommentAfterContent"}}
-      </dd>
-    <tpl:CommentsFooter>
-      </dl>
-      </div>
-    </tpl:CommentsFooter>
-    </tpl:Comments>
-  </tpl:EntryIf>
-
-  <tpl:EntryIf comments_active="1">
-    <tpl:SysIfFormError>
-      <p class="error" id="pr">{{tpl:SysFormError}}</p>
-    </tpl:SysIfFormError>
-
-    <tpl:SysIfCommentPublished>
-      <p class="message" id="pr">{{tpl:lang Your comment has been published.}}</p>
-    </tpl:SysIfCommentPublished>
-
-    <tpl:SysIfCommentPending>
-      <p class="message" id="pr">{{tpl:lang Your comment has been submitted and
-      will be reviewed for publication.}}</p>
-    </tpl:SysIfCommentPending>
-
-    <!-- # Comment form -->
-    <form action="{{tpl:EntryURL}}#pr" method="post" id="comment-form" role="form">
-      <tpl:IfCommentPreview>
-        <div id="pr">
-          <h3>{{tpl:lang Your comment}}</h3>
-          <dl>
-            <dd class="comment-preview">{{tpl:CommentPreviewContent}}</dd>
-          </dl>
-          <p class="buttons"><input type="submit" class="submit" value="{{tpl:lang send}}" /></p>
-        </div>
-      </tpl:IfCommentPreview>
-
-      <h3>{{tpl:lang Add a comment}}</h3>
-      <fieldset>
-        <!-- # --BEHAVIOR-- publicCommentFormBeforeContent -->
-        {{tpl:SysBehavior behavior="publicCommentFormBeforeContent"}}
-
-        <p class="field"><label for="c_name">{{tpl:lang Name or nickname}}&nbsp;:</label>
-        <input name="c_name" id="c_name" type="text" size="30" maxlength="255"
-        value="{{tpl:CommentPreviewName encode_html="1"}}" />
-        </p>
-
-        <p class="field"><label for="c_mail">{{tpl:lang Email address}}&nbsp;:</label>
-        <input name="c_mail" id="c_mail" type="text" size="30" maxlength="255"
-        value="{{tpl:CommentPreviewEmail encode_html="1"}}" />
-        </p>
-
-        <p class="field"><label for="c_site">{{tpl:lang Website}} ({{tpl:lang optional}})&nbsp;:</label>
-        <input name="c_site" id="c_site" type="text" size="30" maxlength="255"
-        value="{{tpl:CommentPreviewSite encode_html="1"}}" />
-        </p>
-
-        <p style="display:none"><input name="f_mail" type="text" size="30"
-        maxlength="255" value="" /></p>
-
-        <p class="field"><label for="c_content">{{tpl:lang Comment}}&nbsp;:</label>
-        <textarea name="c_content" id="c_content" cols="35"
-        rows="7">{{tpl:CommentPreviewContent raw="1" encode_html="1"}}</textarea>
-        </p>
-        <p class="form-help">{{tpl:CommentHelp}}</p>
-
-        <!-- # --BEHAVIOR-- publicCommentFormAfterContent -->
-        {{tpl:SysBehavior behavior="publicCommentFormAfterContent"}}
-      </fieldset>
-
-      <fieldset>
-        <p class="buttons"><input type="submit" class="preview" name="preview" value="{{tpl:lang preview}}" />
-        <tpl:IfCommentPreview><input type="submit" class="submit" value="{{tpl:lang send}}" /></tpl:IfCommentPreview></p>
-      </fieldset>
-    </form>
-  </tpl:EntryIf>
-
-  <!-- # Trackbacks -->
-  <tpl:EntryIf show_pings="1">
-    <div id="pings">
-    <h3>{{tpl:lang They posted on the same topic}}</h3>
-    <tpl:Pings>
-      <tpl:PingsHeader>
-      <dl>
-      </tpl:PingsHeader>
-        <dt id="c{{tpl:PingID}}" class="{{tpl:PingIfOdd}} {{tpl:PingIfFirst}}"><a href="#c{{tpl:PingID}}"
-        class="ping-number">{{tpl:PingOrderNumber}}.</a>
-        {{tpl:lang On}} {{tpl:PingDate}}, {{tpl:PingTime}}
-        {{tpl:lang by}} {{tpl:PingBlogName encode_html="1"}}</dt>
-
-        <dd class="{{tpl:PingIfOdd}} {{tpl:PingIfFirst}}">
-        <!-- # --BEHAVIOR-- publicPingBeforeContent -->
-        {{tpl:SysBehavior behavior="publicPingBeforeContent"}}
-
-        <p><a href="{{tpl:PingAuthorURL}}"
-        {{tpl:PingNoFollow}}>{{tpl:PingTitle encode_html="1"}}</a></p>
-        {{tpl:PingContent}}
-
-        <!-- # --BEHAVIOR-- publicPingAfterContent -->
-        {{tpl:SysBehavior behavior="publicPingAfterContent"}}
-        </dd>
-      <tpl:PingsFooter>
-      </dl>
-      </tpl:PingsFooter>
-    </tpl:Pings>
-    </div>
-  </tpl:EntryIf>
-
-  <tpl:EntryIf pings_active="1">
-    <p id="ping-url">{{tpl:lang Trackback URL}}&nbsp;: {{tpl:EntryPingLink}}</p>
-  </tpl:EntryIf>
-
-  <tpl:EntryIf operator="or" comments_active="1" pings_active="1">
-  <p id="comments-feed"><a class="feed" href="{{tpl:BlogFeedURL type="atom"}}/comments/{{tpl:EntryID}}"
-  title="{{tpl:lang This post's comments Atom feed}}">{{tpl:lang This post's comments feed}}</a></p>
-  </tpl:EntryIf>
-  </div>
-</div> <!-- End #main -->
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: nc/public/default-templates/mustek/rss2-comments.xml
===================================================================
--- inc/public/default-templates/mustek/rss2-comments.xml	(revision 2599)
+++ 	(revision )
@@ -1,48 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<?xml-stylesheet title="XSL formatting" type="text/xsl" href="{{tpl:BlogURL}}feed/rss2/xslt" ?>
-<rss version="2.0"
-  xmlns:dc="http://purl.org/dc/elements/1.1/"
-  xmlns:content="http://purl.org/rss/1.0/modules/content/"
-  xmlns:atom="http://www.w3.org/2005/Atom">
-<channel>
-  <title>{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}
-  - {{tpl:lang Comments}}</title>
-  <link>{{tpl:BlogURL}}</link>
-  <atom:link href="{{tpl:SysSelfURI}}" rel="self" type="application/rss+xml"/>
-  <description>{{tpl:BlogDescription encode_xml="1"}}</description>
-  <language>{{tpl:BlogLanguage}}</language>
-  <pubDate>{{tpl:BlogUpdateDate rfc822="1"}}</pubDate>
-  <copyright>{{tpl:BlogCopyrightNotice encode_xml="1"}}</copyright>
-  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
-  <generator>Dotclear</generator>
-
-  <tpl:Comments order="desc" with_pings="1">
-
-  <tpl:CommentIf is_ping="1">
-  <item>
-    <title>[ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}}</title>
-    <link>{{tpl:PingPostURL encode_xml="1"}}#c{{tpl:PingID}}</link>
-    <guid isPermaLink="false">{{tpl:PingFeedID}}</guid>
-    <pubDate>{{tpl:PingDate rfc822="1"}}</pubDate>
-    <dc:creator>{{tpl:PingBlogName encode_xml="1"}}</dc:creator>
-
-    <description>&lt;p&gt;&lt;a href="{{tpl:PingAuthorURL encode_xml="1"}}"&gt;{{tpl:PingTitle encode_xml="1"}}&lt;/a&gt;&lt;/p&gt;
-    {{tpl:PingContent encode_xml="1"}}</description>
-  </item>
-  </tpl:CommentIf>
-
-  <tpl:CommentIf is_ping="0">
-  <item>
-    <title>{{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}}</title>
-    <link>{{tpl:CommentPostURL encode_xml="1"}}#c{{tpl:CommentID}}</link>
-    <guid isPermaLink="false">{{tpl:CommentFeedID}}</guid>
-    <pubDate>{{tpl:CommentDate rfc822="1"}}</pubDate>
-    <dc:creator>{{tpl:CommentAuthor encode_xml="1"}}</dc:creator>
-
-    <description>{{tpl:CommentContent absolute_urls="1" encode_xml="1"}}</description>
-  </item>
-  </tpl:CommentIf>
-  </tpl:Comments>
-
-</channel>
-</rss>
Index: nc/public/default-templates/mustek/rss2.xml
===================================================================
--- inc/public/default-templates/mustek/rss2.xml	(revision 2599)
+++ 	(revision )
@@ -1,49 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<?xml-stylesheet title="XSL formatting" type="text/xsl" href="{{tpl:BlogURL}}feed/rss2/xslt" ?>
-<rss version="2.0"
-  xmlns:dc="http://purl.org/dc/elements/1.1/"
-  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
-  xmlns:content="http://purl.org/rss/1.0/modules/content/"
-  xmlns:atom="http://www.w3.org/2005/Atom">
-<channel>
-  <title>{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}</title>
-  <link>{{tpl:BlogURL}}</link>
-  <atom:link href="{{tpl:SysSelfURI}}" rel="self" type="application/rss+xml"/>
-  <description>{{tpl:BlogDescription encode_xml="1"}}</description>
-  <language>{{tpl:BlogLanguage}}</language>
-  <pubDate>{{tpl:BlogUpdateDate rfc822="1"}}</pubDate>
-  <copyright>{{tpl:BlogCopyrightNotice encode_xml="1"}}</copyright>
-  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
-  <generator>Dotclear</generator>
-
-  <tpl:Entries>
-
-  <item>
-    <title>{{tpl:EntryTitle encode_xml="1"}}</title>
-    <link>{{tpl:EntryURL}}</link>
-    <guid isPermaLink="false">{{tpl:EntryFeedID}}</guid>
-    <pubDate>{{tpl:EntryDate rfc822="1"}}</pubDate>
-    <dc:creator>{{tpl:EntryAuthorCommonName encode_xml="1"}}</dc:creator>
-    <tpl:EntryIf has_category="1">
-    <category>{{tpl:EntryCategory encode_html="1"}}</category>
-    </tpl:EntryIf>
-    <tpl:EntryTags><category>{{tpl:TagID}}</category></tpl:EntryTags>
-
-    <description>{{tpl:EntryExcerpt absolute_urls="1" encode_xml="1"}}
-    {{tpl:EntryContent absolute_urls="1" encode_xml="1"}}</description>
-
-    <tpl:Attachments>
-      <enclosure url="{{tpl:AttachmentURL}}"
-      length="{{tpl:AttachmentSize full="1"}}" type="{{tpl:AttachmentMimeType}}" />
-    </tpl:Attachments>
-
-    <tpl:EntryIf comments_active="1">
-      <comments>{{tpl:EntryURL}}#comment-form</comments>
-      <wfw:comment>{{tpl:EntryURL}}#comment-form</wfw:comment>
-      <wfw:commentRss>{{tpl:BlogFeedURL}}/comments/{{tpl:EntryID}}</wfw:commentRss>
-    </tpl:EntryIf>
-  </item>
-  </tpl:Entries>
-
-</channel>
-</rss>
Index: nc/public/default-templates/mustek/rss2.xsl
===================================================================
--- inc/public/default-templates/mustek/rss2.xsl	(revision 2599)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-xmlns:content="http://purl.org/rss/1.0/modules/content/"
-xmlns="http://www.w3.org/1999/xhtml">
-
-<xsl:output method="html"/>
-
-<xsl:template match="/">
-<html>
-  <head>
-    <title>{{tpl:lang Subscribe to}} <xsl:value-of select="/rss/channel/title"/></title>
-    <style type="text/css">
-    <![CDATA[
-    body {
-      font: 80% Verdana,Arial,sans-serif;
-      margin: 20px 0;
-      padding: 0 0;
-      background: #fff;
-      color: #000;
-    }
-    a { color: #039; }
-    h1, h2 { font-family: Arial,sans-serif; }
-    h1 { font-size: 160%; margin: 0; }
-    h2 { font-size: 140%; font-weight: bold; margin: 0.5em 0 0.2em 0; }
-    h2 a { text-decoration: none; }
-    p { margin: 0 0 0.5em 0; }
-    #page {
-      margin: 0 80px;
-    }
-    #top {
-      background: #036;
-      padding : 1em;
-      color: #fff;
-    }
-    #top a {
-      color: #fff;
-      text-decoration: none;
-    }
-    #what {
-      padding: 1em;
-      background: #eee;
-      border-bottom: 1px solid #000;
-      font-size: 80%;
-    }
-    #what p {
-      margin: 0 0 0.5em 0;
-    }
-    #footer {
-      border-top: 1px solid #000;
-    }
-    #items {
-      background: #fff;
-      color: inherit;
-    }
-    #items div {
-      margin: 0 0 1em 0;
-    }
-    ]]>
-    </style>
-    <script type="text/javascript"><![CDATA[
-    window.onload = function() {
-      document.getElementById('feedurl').value = window.location.href;
-
-      // Ugly but works ;)
-      var c = document.getElementsByTagName('div');
-      var t = '';
-      for (var i=0; c.length-i != 0; i++) {
-        if (c[i].className == 'item-content') {
-          if (c[i].textContent) {
-            t = c[i].textContent;
-          } else if (c[i].innerText) {
-            t = c[i].innerText;
-          } else {
-            t = '';
-          }
-
-          if (t) { c[i].innerHTML = t; }
-        }
-      }
-    };
-    ]]></script>
-  </head>
-  <body>
-    <div id="page">
-      <div id="top">
-        <h1><a href="{/rss/channel/link}"><xsl:value-of select="/rss/channel/title"/></a></h1>
-        <p><xsl:value-of select="/rss/channel/description"/></p>
-      </div>
-      <div id="what">
-      <h3>{{tpl:lang What is an RSS feed?}}</h3>
-      <p>{{tpl:lang RSS feed is a free blog summary. It provides content
-      (either posts or comments) or  summaries of content, together with links
-      to the full versions, and other metadata. The last published items may
-      then be read by your favorite RSS
-      <a href="http://en.wikipedia.org/wiki/Aggregator">aggregator</a>.}}</p>
-      <h3>{{tpl:lang Subscribe}}</h3>
-      <p>{{tpl:lang Simply copy the following URL into your aggregator:}}</p>
-      <p><input type="text" size="60" value="" id="feedurl" /></p>
-      </div>
-      <div id="items">
-        <xsl:apply-templates select="//item"/>
-      </div>
-      <div id="footer">
-        <p><xsl:value-of select="/rss/channel/copyright"/></p>
-      </div>
-    </div>
-  </body>
-</html>
-</xsl:template>
-
-<!-- Item template -->
-<xsl:template match="item">
-  <div>
-    <h2><a href="{link}"><xsl:value-of select="title"/></a></h2>
-    <div class="item-content"><xsl:value-of select="description" /></div>
-  </div>
-</xsl:template>
-
-</xsl:stylesheet>
Index: nc/public/default-templates/mustek/search.html
===================================================================
--- inc/public/default-templates/mustek/search.html	(revision 2604)
+++ 	(revision )
@@ -1,151 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX,NOARCHIVE"}}" />
-
-  <title>{{tpl:lang Search}} - {{tpl:SysSearchString encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Search}} - {{tpl:SysSearchString encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-  <meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-
-  <tpl:Entries no_content="1">
-    <tpl:EntriesHeader>
-      <tpl:Pagination>
-        <tpl:PaginationIf end="0">
-        <link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
-        </tpl:PaginationIf>
-
-        <tpl:PaginationIf start="0">
-        <link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
-        </tpl:PaginationIf>
-      </tpl:Pagination>
-    </tpl:EntriesHeader>
-
-    <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-  </tpl:Entries>
-
-  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
-
-  {{tpl:include src="_head.html"}}
-</head>
-
-<body class="dc-search">
-<div id="page">
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-
-  <div id="content-info">
-    <h2>{{tpl:lang Search}}</h2>
-    <tpl:SysIf search_count="==0">
-      <p>{{tpl:SysSearchString encode_html="1" string="Your search for <em>%1$s</em> returned no result."}}</p>
-    </tpl:SysIf>
-    <tpl:SysIf search_count="==1">
-      <p>{{tpl:SysSearchString encode_html="1" string="Your search for <em>%1$s</em> returned <strong>%2$s</strong> result."}}</p>
-    </tpl:SysIf>
-    <tpl:SysIf search_count="&gt;1">
-      <p>{{tpl:SysSearchString encode_html="1" string="Your search for <em>%1$s</em> returned <strong>%2$s</strong> results."}}</p>
-    </tpl:SysIf>
-  </div>
-
-  <tpl:Entries>
-    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}}" lang="{{tpl:EntryLang}}" role="article">
-    <!-- # New day date -->
-    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
-
-    <h2 class="post-title"><a
-    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
-
-    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
-    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}
-    <tpl:EntryIf has_category="1">
-    - <a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a>
-    </tpl:EntryIf>
-    </p>
-
-    <tpl:EntryTags>
-    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
-    <li><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
-    <tpl:TagsFooter></ul></tpl:TagsFooter>
-    </tpl:EntryTags>
-
-    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-    <!-- # Entry with an excerpt -->
-    <tpl:EntryIf extended="1">
-      <div class="post-content">{{tpl:EntryExcerpt}}</div>
-      <p class="read-it"><a href="{{tpl:EntryURL}}"
-      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
-      reading}}</a>...</p>
-    </tpl:EntryIf>
-
-    <!-- # Entry without excerpt -->
-    <tpl:EntryIf extended="0">
-      <div class="post-content">{{tpl:EntryContent}}</div>
-    </tpl:EntryIf>
-
-    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
-    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-
-    <!-- # Number of comments, trackbacks and attachments -->
-    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-      <p class="post-info-co">
-    </tpl:EntryIf>
-    <tpl:EntryIf show_comments="1">
-      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
-    </tpl:EntryIf>
-    <tpl:EntryIf show_pings="1">
-      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
-    <tpl:EntryIf has_attachment="1">
-      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
-    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-      </p>
-    </tpl:EntryIf>
-    </div>
-
-    <tpl:EntriesFooter>
-      <tpl:Pagination>
-        <p class="pagination"><tpl:PaginationIf end="0"><a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
-        {{tpl:lang previous entries}}</a> - </tpl:PaginationIf>
-        {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
-        <tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}}
-        &#187;</a></tpl:PaginationIf></p>
-      </tpl:Pagination>
-    </tpl:EntriesFooter>
-  </tpl:Entries>
-  </div>
-</div> <!-- End #main -->
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: nc/public/default-templates/mustek/user_head.html
===================================================================
--- inc/public/default-templates/mustek/user_head.html	(revision 2599)
+++ 	(revision )
@@ -1,1 +1,0 @@
-<!-- # This template is included at the end of _head.html template -->
Index: inc/public/default-templates/password-form.html
===================================================================
--- inc/public/default-templates/password-form.html	(revision 2566)
+++ inc/public/default-templates/password-form.html	(revision 2566)
@@ -0,0 +1,41 @@
+<!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="en" lang="en">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />
+  <title>{{tpl:lang Password needed}} - {{tpl:BlogName encode_html="1"}}</title>
+
+  <style type="text/css">
+  body {
+  font: 0.8em Verdana,Arial,Geneva,sans-serif;
+  }
+
+  form {
+  display : block;
+  width : 500px;
+  margin : 0 auto;
+  padding : 1em;
+  background : #eee;
+  }
+
+  h2 { font : 140% Arial,Helvetica,sans-serif; margin : 0; }
+
+  label { font-weight : bold; }
+
+  input { border-width : 1px; }
+  </style>
+</head>
+
+<body>
+
+<form action="{{tpl:EntryURL}}" method="post">
+<h2>{{tpl:lang Password needed}}</h2>
+
+<p>{{tpl:lang You must give a password to access this area.}}</p>
+<p><label>{{tpl:lang Password:}} <input type="password" name="password" value="" /></label> <input type="submit" value="ok" /></p>
+
+</form>
+
+</body>
+</html>
Index: inc/public/default-templates/post.html
===================================================================
--- inc/public/default-templates/post.html	(revision 2566)
+++ inc/public/default-templates/post.html	(revision 2566)
@@ -0,0 +1,275 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
+
+  <title>{{tpl:EntryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}</title>
+  <meta name="description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:EntryDate iso8601="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" content="{{tpl:EntryTitle encode_html="1"}}" />
+  <meta name="dc.description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
+  <meta name="dc.creator" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:EntryLang}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:EntryDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+  <tpl:EntryIf pings_active="1"><link rel="pingback" href="{{tpl:BlogXMLRPCURL}}" /></tpl:EntryIf>
+
+  <tpl:EntryNext><link rel="next" href="{{tpl:EntryURL}}"
+  title="{{tpl:EntryTitle encode_html="1"}}" /></tpl:EntryNext>
+
+  <tpl:EntryPrevious><link rel="prev" href="{{tpl:EntryURL}}"
+  title="{{tpl:EntryTitle encode_html="1"}}" /></tpl:EntryPrevious>
+
+  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
+
+  {{tpl:include src="_head.html"}}
+
+  <script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/post.js"></script>
+  <script type="text/javascript">
+  //<![CDATA[
+  var post_remember_str = '{{tpl:lang Remember me on this blog}}';
+  //]]>
+  </script>
+</head>
+
+<body class="dc-post">
+<div id="page">
+{{tpl:EntryPingData}}
+
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <p id="navlinks">
+  <tpl:EntryPrevious><a href="{{tpl:EntryURL}}"
+  title="{{tpl:EntryTitle encode_html="1"}}" class="prev">&#171; {{tpl:EntryTitle encode_html="1"
+  cut_string="50"}}</a></tpl:EntryPrevious>
+  <tpl:EntryNext> <span>-</span> <a href="{{tpl:EntryURL}}"
+  title="{{tpl:EntryTitle encode_html="1"}}" class="next">{{tpl:EntryTitle encode_html="1"
+  cut_string="50"}} &#187;</a></tpl:EntryNext>
+  </p>
+
+  <div id="p{{tpl:EntryID}}" class="post">
+    <h2 class="post-title">{{tpl:EntryTitle encode_html="1"}}</h2>
+
+    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
+    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}
+    <tpl:EntryIf has_category="1">
+    - <a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a>
+    </tpl:EntryIf>
+    - <a href="{{tpl:EntryURL}}">{{tpl:lang Permalink}}</a>
+    </p>
+
+    <tpl:EntryTags>
+    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
+    <li><a href="{{tpl:TagURL}}" rel="tag">{{tpl:TagID}}</a></li>
+    <tpl:TagsFooter></ul></tpl:TagsFooter>
+    </tpl:EntryTags>
+
+    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
+    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
+
+    <!-- # Entry with an excerpt -->
+    <tpl:EntryIf extended="1">
+      <div class="post-excerpt">{{tpl:EntryExcerpt}}</div>
+    </tpl:EntryIf>
+
+    <div class="post-content">{{tpl:EntryContent}}</div>
+
+    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
+    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
+  </div>
+
+  <!-- # Attachments -->
+  <tpl:Attachments>
+    <tpl:AttachmentsHeader>
+      <div id="attachments">
+      <h3>{{tpl:lang Attachments}}</h3>
+      <ul>
+    </tpl:AttachmentsHeader>
+      <li class="{{tpl:AttachmentType}}">
+        <tpl:AttachmentIf is_mp3="1">
+          {{tpl:include src="_mp3_player.html"/}} -
+        </tpl:AttachmentIf>
+        <tpl:AttachmentIf is_flv="1">
+	     {{tpl:include src="_flv_player.html"/}}
+	   </tpl:AttachmentIf>
+	   <tpl:AttachmentIf is_flv="0">
+	   	<a href="{{tpl:AttachmentURL}}"
+		title="{{tpl:AttachmentFileName}} ({{tpl:AttachmentSize}})">{{tpl:AttachmentTitle}}</a>
+        </tpl:AttachmentIf>
+      </li>
+    <tpl:AttachmentsFooter>
+      </ul>
+      </div>
+    </tpl:AttachmentsFooter>
+  </tpl:Attachments>
+
+  <!-- # Comments -->
+  <tpl:EntryIf show_comments="1">
+    <tpl:Comments>
+    <tpl:CommentsHeader>
+      <div id="comments">
+        <h3>{{tpl:lang Comments}}</h3>
+      <dl>
+    </tpl:CommentsHeader>
+      <dt id="c{{tpl:CommentID}}" class="{{tpl:CommentIfMe}} {{tpl:CommentIfOdd}} {{tpl:CommentIfFirst}}"><a
+      href="#c{{tpl:CommentID}}" class="comment-number">{{tpl:CommentOrderNumber}}.</a>
+      {{tpl:lang On}} {{tpl:CommentDate}}, {{tpl:CommentTime}}
+      {{tpl:lang by}} {{tpl:CommentAuthorLink}}</dt>
+
+      <dd class="{{tpl:CommentIfMe}} {{tpl:CommentIfOdd}} {{tpl:CommentIfFirst}}">
+      <!-- # --BEHAVIOR-- publicCommentBeforeContent -->
+      {{tpl:SysBehavior behavior="publicCommentBeforeContent"}}
+
+      {{tpl:CommentContent}}
+
+      <!-- # --BEHAVIOR-- publicCommentAfterContent -->
+      {{tpl:SysBehavior behavior="publicCommentAfterContent"}}
+      </dd>
+    <tpl:CommentsFooter>
+      </dl>
+      </div>
+    </tpl:CommentsFooter>
+    </tpl:Comments>
+  </tpl:EntryIf>
+
+  <tpl:EntryIf comments_active="1">
+    <tpl:SysIfFormError>
+      <p class="error" id="pr">{{tpl:SysFormError}}</p>
+    </tpl:SysIfFormError>
+
+    <tpl:SysIfCommentPublished>
+      <p class="message" id="pr">{{tpl:lang Your comment has been published.}}</p>
+    </tpl:SysIfCommentPublished>
+
+    <tpl:SysIfCommentPending>
+      <p class="message" id="pr">{{tpl:lang Your comment has been submitted and
+      will be reviewed for publication.}}</p>
+    </tpl:SysIfCommentPending>
+
+    <!-- # Comment form -->
+    <form action="{{tpl:EntryURL}}#pr" method="post" id="comment-form">
+      <tpl:IfCommentPreview>
+        <div id="pr">
+          <h3>{{tpl:lang Your comment}}</h3>
+          <dl>
+            <dd class="comment-preview">{{tpl:CommentPreviewContent}}</dd>
+          </dl>
+          <p class="buttons"><input type="submit" class="submit" value="{{tpl:lang send}}" /></p>
+        </div>
+      </tpl:IfCommentPreview>
+
+      <h3>{{tpl:lang Add a comment}}</h3>
+      <fieldset>
+        <!-- # --BEHAVIOR-- publicCommentFormBeforeContent -->
+        {{tpl:SysBehavior behavior="publicCommentFormBeforeContent"}}
+
+        <p class="field"><label for="c_name">{{tpl:lang Name or nickname}}&nbsp;:</label>
+        <input name="c_name" id="c_name" type="text" size="30" maxlength="255"
+        value="{{tpl:CommentPreviewName encode_html="1"}}" />
+        </p>
+
+        <p class="field"><label for="c_mail">{{tpl:lang Email address}}&nbsp;:</label>
+        <input name="c_mail" id="c_mail" type="text" size="30" maxlength="255"
+        value="{{tpl:CommentPreviewEmail encode_html="1"}}" />
+        </p>
+
+        <p class="field"><label for="c_site">{{tpl:lang Website}} ({{tpl:lang optional}})&nbsp;:</label>
+        <input name="c_site" id="c_site" type="text" size="30" maxlength="255"
+        value="{{tpl:CommentPreviewSite encode_html="1"}}" />
+        </p>
+
+        <p style="display:none"><input name="f_mail" type="text" size="30"
+        maxlength="255" value="" /></p>
+
+        <p class="field"><label for="c_content">{{tpl:lang Comment}}&nbsp;:</label>
+        <textarea name="c_content" id="c_content" cols="35"
+        rows="7">{{tpl:CommentPreviewContent raw="1" encode_html="1"}}</textarea>
+        </p>
+        <p class="form-help">{{tpl:CommentHelp}}</p>
+
+        <!-- # --BEHAVIOR-- publicCommentFormAfterContent -->
+        {{tpl:SysBehavior behavior="publicCommentFormAfterContent"}}
+      </fieldset>
+
+      <fieldset>
+        <p class="buttons"><input type="submit" class="preview" name="preview" value="{{tpl:lang preview}}" />
+        <tpl:IfCommentPreview><input type="submit" class="submit" value="{{tpl:lang send}}" /></tpl:IfCommentPreview></p>
+      </fieldset>
+    </form>
+  </tpl:EntryIf>
+
+  <!-- # Trackbacks -->
+  <tpl:EntryIf show_pings="1">
+    <div id="pings">
+    <h3>{{tpl:lang They posted on the same topic}}</h3>
+    <tpl:Pings>
+      <tpl:PingsHeader>
+      <dl>
+      </tpl:PingsHeader>
+        <dt id="c{{tpl:PingID}}" class="{{tpl:PingIfOdd}} {{tpl:PingIfFirst}}"><a href="#c{{tpl:PingID}}"
+        class="ping-number">{{tpl:PingOrderNumber}}.</a>
+        {{tpl:lang On}} {{tpl:PingDate}}, {{tpl:PingTime}}
+        {{tpl:lang by}} {{tpl:PingBlogName encode_html="1"}}</dt>
+
+        <dd class="{{tpl:PingIfOdd}} {{tpl:PingIfFirst}}">
+        <!-- # --BEHAVIOR-- publicPingBeforeContent -->
+        {{tpl:SysBehavior behavior="publicPingBeforeContent"}}
+
+        <p><a href="{{tpl:PingAuthorURL}}"
+        {{tpl:PingNoFollow}}>{{tpl:PingTitle encode_html="1"}}</a></p>
+        {{tpl:PingContent}}
+
+        <!-- # --BEHAVIOR-- publicPingAfterContent -->
+        {{tpl:SysBehavior behavior="publicPingAfterContent"}}
+        </dd>
+      <tpl:PingsFooter>
+      </dl>
+      </tpl:PingsFooter>
+    </tpl:Pings>
+    </div>
+  </tpl:EntryIf>
+
+  <tpl:EntryIf pings_active="1">
+    <p id="ping-url">{{tpl:lang Trackback URL}}&nbsp;: {{tpl:EntryPingLink}}</p>
+  </tpl:EntryIf>
+
+  <tpl:EntryIf operator="or" comments_active="1" pings_active="1">
+  <p id="comments-feed"><a class="feed" href="{{tpl:BlogFeedURL type="atom"}}/comments/{{tpl:EntryID}}"
+  title="{{tpl:lang This post's comments Atom feed}}">{{tpl:lang This post's comments feed}}</a></p>
+  </tpl:EntryIf>
+  </div>
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: inc/public/default-templates/rss2-comments.xml
===================================================================
--- inc/public/default-templates/rss2-comments.xml	(revision 2566)
+++ inc/public/default-templates/rss2-comments.xml	(revision 2566)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?xml-stylesheet title="XSL formatting" type="text/xsl" href="{{tpl:BlogURL}}feed/rss2/xslt" ?>
+<rss version="2.0"
+  xmlns:dc="http://purl.org/dc/elements/1.1/"
+  xmlns:content="http://purl.org/rss/1.0/modules/content/"
+  xmlns:atom="http://www.w3.org/2005/Atom">
+<channel>
+  <title>{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}
+  - {{tpl:lang Comments}}</title>
+  <link>{{tpl:BlogURL}}</link>
+  <atom:link href="{{tpl:SysSelfURI}}" rel="self" type="application/rss+xml"/>
+  <description>{{tpl:BlogDescription encode_xml="1"}}</description>
+  <language>{{tpl:BlogLanguage}}</language>
+  <pubDate>{{tpl:BlogUpdateDate rfc822="1"}}</pubDate>
+  <copyright>{{tpl:BlogCopyrightNotice encode_xml="1"}}</copyright>
+  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
+  <generator>Dotclear</generator>
+
+  <tpl:Comments order="desc" with_pings="1">
+
+  <tpl:CommentIf is_ping="1">
+  <item>
+    <title>[ping] {{tpl:PingEntryTitle encode_xml="1"}} - {{tpl:PingBlogName encode_xml="1"}}</title>
+    <link>{{tpl:PingPostURL encode_xml="1"}}#c{{tpl:PingID}}</link>
+    <guid isPermaLink="false">{{tpl:PingFeedID}}</guid>
+    <pubDate>{{tpl:PingDate rfc822="1"}}</pubDate>
+    <dc:creator>{{tpl:PingBlogName encode_xml="1"}}</dc:creator>
+
+    <description>&lt;p&gt;&lt;a href="{{tpl:PingAuthorURL encode_xml="1"}}"&gt;{{tpl:PingTitle encode_xml="1"}}&lt;/a&gt;&lt;/p&gt;
+    {{tpl:PingContent encode_xml="1"}}</description>
+  </item>
+  </tpl:CommentIf>
+
+  <tpl:CommentIf is_ping="0">
+  <item>
+    <title>{{tpl:CommentEntryTitle encode_xml="1"}} - {{tpl:CommentAuthor encode_xml="1"}}</title>
+    <link>{{tpl:CommentPostURL encode_xml="1"}}#c{{tpl:CommentID}}</link>
+    <guid isPermaLink="false">{{tpl:CommentFeedID}}</guid>
+    <pubDate>{{tpl:CommentDate rfc822="1"}}</pubDate>
+    <dc:creator>{{tpl:CommentAuthor encode_xml="1"}}</dc:creator>
+
+    <description>{{tpl:CommentContent absolute_urls="1" encode_xml="1"}}</description>
+  </item>
+  </tpl:CommentIf>
+  </tpl:Comments>
+
+</channel>
+</rss>
Index: inc/public/default-templates/rss2.xml
===================================================================
--- inc/public/default-templates/rss2.xml	(revision 2566)
+++ inc/public/default-templates/rss2.xml	(revision 2566)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?xml-stylesheet title="XSL formatting" type="text/xsl" href="{{tpl:BlogURL}}feed/rss2/xslt" ?>
+<rss version="2.0"
+  xmlns:dc="http://purl.org/dc/elements/1.1/"
+  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+  xmlns:content="http://purl.org/rss/1.0/modules/content/"
+  xmlns:atom="http://www.w3.org/2005/Atom">
+<channel>
+  <title>{{tpl:BlogName encode_xml="1"}}{{tpl:SysFeedSubtitle encode_xml="1"}}</title>
+  <link>{{tpl:BlogURL}}</link>
+  <atom:link href="{{tpl:SysSelfURI}}" rel="self" type="application/rss+xml"/>
+  <description>{{tpl:BlogDescription encode_xml="1"}}</description>
+  <language>{{tpl:BlogLanguage}}</language>
+  <pubDate>{{tpl:BlogUpdateDate rfc822="1"}}</pubDate>
+  <copyright>{{tpl:BlogCopyrightNotice encode_xml="1"}}</copyright>
+  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
+  <generator>Dotclear</generator>
+
+  <tpl:Entries>
+
+  <item>
+    <title>{{tpl:EntryTitle encode_xml="1"}}</title>
+    <link>{{tpl:EntryURL}}</link>
+    <guid isPermaLink="false">{{tpl:EntryFeedID}}</guid>
+    <pubDate>{{tpl:EntryDate rfc822="1"}}</pubDate>
+    <dc:creator>{{tpl:EntryAuthorCommonName encode_xml="1"}}</dc:creator>
+    <tpl:EntryIf has_category="1">
+    <category>{{tpl:EntryCategory encode_html="1"}}</category>
+    </tpl:EntryIf>
+    <tpl:EntryTags><category>{{tpl:TagID}}</category></tpl:EntryTags>
+
+    <description>{{tpl:EntryExcerpt absolute_urls="1" encode_xml="1"}}
+    {{tpl:EntryContent absolute_urls="1" encode_xml="1"}}</description>
+
+    <tpl:Attachments>
+      <enclosure url="{{tpl:AttachmentURL}}"
+      length="{{tpl:AttachmentSize full="1"}}" type="{{tpl:AttachmentMimeType}}" />
+    </tpl:Attachments>
+
+    <tpl:EntryIf comments_active="1">
+      <comments>{{tpl:EntryURL}}#comment-form</comments>
+      <wfw:comment>{{tpl:EntryURL}}#comment-form</wfw:comment>
+      <wfw:commentRss>{{tpl:BlogFeedURL}}/comments/{{tpl:EntryID}}</wfw:commentRss>
+    </tpl:EntryIf>
+  </item>
+  </tpl:Entries>
+
+</channel>
+</rss>
Index: inc/public/default-templates/rss2.xsl
===================================================================
--- inc/public/default-templates/rss2.xsl	(revision 2566)
+++ inc/public/default-templates/rss2.xsl	(revision 2566)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+xmlns:content="http://purl.org/rss/1.0/modules/content/"
+xmlns="http://www.w3.org/1999/xhtml">
+
+<xsl:output method="html"/>
+
+<xsl:template match="/">
+<html>
+  <head>
+    <title>{{tpl:lang Subscribe to}} <xsl:value-of select="/rss/channel/title"/></title>
+    <style type="text/css">
+    <![CDATA[
+    body {
+      font: 80% Verdana,Arial,sans-serif;
+      margin: 20px 0;
+      padding: 0 0;
+      background: #fff;
+      color: #000;
+    }
+    a { color: #039; }
+    h1, h2 { font-family: Arial,sans-serif; }
+    h1 { font-size: 160%; margin: 0; }
+    h2 { font-size: 140%; font-weight: bold; margin: 0.5em 0 0.2em 0; }
+    h2 a { text-decoration: none; }
+    p { margin: 0 0 0.5em 0; }
+    #page {
+      margin: 0 80px;
+    }
+    #top {
+      background: #036;
+      padding : 1em;
+      color: #fff;
+    }
+    #top a {
+      color: #fff;
+      text-decoration: none;
+    }
+    #what {
+      padding: 1em;
+      background: #eee;
+      border-bottom: 1px solid #000;
+      font-size: 80%;
+    }
+    #what p {
+      margin: 0 0 0.5em 0;
+    }
+    #footer {
+      border-top: 1px solid #000;
+    }
+    #items {
+      background: #fff;
+      color: inherit;
+    }
+    #items div {
+      margin: 0 0 1em 0;
+    }
+    ]]>
+    </style>
+    <script type="text/javascript"><![CDATA[
+    window.onload = function() {
+      document.getElementById('feedurl').value = window.location.href;
+
+      // Ugly but works ;)
+      var c = document.getElementsByTagName('div');
+      var t = '';
+      for (var i=0; c.length-i != 0; i++) {
+        if (c[i].className == 'item-content') {
+          if (c[i].textContent) {
+            t = c[i].textContent;
+          } else if (c[i].innerText) {
+            t = c[i].innerText;
+          } else {
+            t = '';
+          }
+
+          if (t) { c[i].innerHTML = t; }
+        }
+      }
+    };
+    ]]></script>
+  </head>
+  <body>
+    <div id="page">
+      <div id="top">
+        <h1><a href="{/rss/channel/link}"><xsl:value-of select="/rss/channel/title"/></a></h1>
+        <p><xsl:value-of select="/rss/channel/description"/></p>
+      </div>
+      <div id="what">
+      <h3>{{tpl:lang What is an RSS feed?}}</h3>
+      <p>{{tpl:lang RSS feed is a free blog summary. It provides content
+      (either posts or comments) or  summaries of content, together with links
+      to the full versions, and other metadata. The last published items may
+      then be read by your favorite RSS
+      <a href="http://en.wikipedia.org/wiki/Aggregator">aggregator</a>.}}</p>
+      <h3>{{tpl:lang Subscribe}}</h3>
+      <p>{{tpl:lang Simply copy the following URL into your aggregator:}}</p>
+      <p><input type="text" size="60" value="" id="feedurl" /></p>
+      </div>
+      <div id="items">
+        <xsl:apply-templates select="//item"/>
+      </div>
+      <div id="footer">
+        <p><xsl:value-of select="/rss/channel/copyright"/></p>
+      </div>
+    </div>
+  </body>
+</html>
+</xsl:template>
+
+<!-- Item template -->
+<xsl:template match="item">
+  <div>
+    <h2><a href="{link}"><xsl:value-of select="title"/></a></h2>
+    <div class="item-content"><xsl:value-of select="description" /></div>
+  </div>
+</xsl:template>
+
+</xsl:stylesheet>
Index: inc/public/default-templates/search.html
===================================================================
--- inc/public/default-templates/search.html	(revision 2566)
+++ inc/public/default-templates/search.html	(revision 2566)
@@ -0,0 +1,152 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX,NOARCHIVE"}}" />
+
+  <title>{{tpl:lang Search}} - {{tpl:SysSearchString encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Search}} - {{tpl:SysSearchString encode_html="1"}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+
+  <tpl:Entries no_content="1">
+    <tpl:EntriesHeader>
+      <tpl:Pagination>
+        <tpl:PaginationIf end="0">
+        <link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
+        </tpl:PaginationIf>
+
+        <tpl:PaginationIf start="0">
+        <link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
+        </tpl:PaginationIf>
+      </tpl:Pagination>
+    </tpl:EntriesHeader>
+
+    <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
+  </tpl:Entries>
+
+  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
+
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-search">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <div id="content-info">
+    <h2>{{tpl:lang Search}}</h2>
+    <tpl:SysIf search_count="==0">
+      <p>{{tpl:SysSearchString encode_html="1" string="Your search for <em>%1$s</em> returned no result."}}</p>
+    </tpl:SysIf>
+    <tpl:SysIf search_count="==1">
+      <p>{{tpl:SysSearchString encode_html="1" string="Your search for <em>%1$s</em> returned <strong>%2$s</strong> result."}}</p>
+    </tpl:SysIf>
+    <tpl:SysIf search_count="&gt;1">
+      <p>{{tpl:SysSearchString encode_html="1" string="Your search for <em>%1$s</em> returned <strong>%2$s</strong> results."}}</p>
+    </tpl:SysIf>
+  </div>
+
+  <tpl:Entries>
+    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}}" lang="{{tpl:EntryLang}}" xml:lang="{{tpl:EntryLang}}">
+    <!-- # New day date -->
+    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
+
+    <h2 class="post-title"><a
+    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
+
+    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
+    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}
+    <tpl:EntryIf has_category="1">
+    - <a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a>
+    </tpl:EntryIf>
+    </p>
+
+    <tpl:EntryTags>
+    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
+    <li><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
+    <tpl:TagsFooter></ul></tpl:TagsFooter>
+    </tpl:EntryTags>
+
+    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
+    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
+
+    <!-- # Entry with an excerpt -->
+    <tpl:EntryIf extended="1">
+      <div class="post-content">{{tpl:EntryExcerpt}}</div>
+      <p class="read-it"><a href="{{tpl:EntryURL}}"
+      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
+      reading}}</a>...</p>
+    </tpl:EntryIf>
+
+    <!-- # Entry without excerpt -->
+    <tpl:EntryIf extended="0">
+      <div class="post-content">{{tpl:EntryContent}}</div>
+    </tpl:EntryIf>
+
+    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
+    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
+
+    <!-- # Number of comments, trackbacks and attachments -->
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      <p class="post-info-co">
+    </tpl:EntryIf>
+    <tpl:EntryIf show_comments="1">
+      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
+    </tpl:EntryIf>
+    <tpl:EntryIf show_pings="1">
+      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf has_attachment="1">
+      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      </p>
+    </tpl:EntryIf>
+    </div>
+
+    <tpl:EntriesFooter>
+      <tpl:Pagination>
+        <p class="pagination"><tpl:PaginationIf end="0"><a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
+        {{tpl:lang previous entries}}</a> - </tpl:PaginationIf>
+        {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
+        <tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}}
+        &#187;</a></tpl:PaginationIf></p>
+      </tpl:Pagination>
+    </tpl:EntriesFooter>
+  </tpl:Entries>
+  </div>
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: inc/public/default-templates/user_head.html
===================================================================
--- inc/public/default-templates/user_head.html	(revision 2566)
+++ inc/public/default-templates/user_head.html	(revision 2566)
@@ -0,0 +1,1 @@
+<!-- # This template is included at the end of _head.html template -->
Index: inc/public/lib.tpl.context.php
===================================================================
--- inc/public/lib.tpl.context.php	(revision 2676)
+++ inc/public/lib.tpl.context.php	(revision 2566)
@@ -100,51 +100,44 @@
 
 
-        # Static methods
-        public static function global_filter($str,
-        $encode_xml, $remove_html, $cut_string, $lower_case, $upper_case ,$encode_url ,$tag='')
-        {
-                $args = func_get_args();
-                array_pop($args);
-                $args[0] =& $str;
-
-                # --BEHAVIOR-- publicBeforeContentFilter
-                $res = $GLOBALS['core']->callBehavior('publicBeforeContentFilter',$GLOBALS['core'],$tag,$args);
-
-                if ($remove_html) {
-                        $str = self::remove_html($str);
-                        $str = preg_replace('/\s+/',' ',$str);
-                }
-
-                if ($encode_xml) {
-                        $str = self::encode_xml($str);
-                }
-
-                if ($cut_string) {
-                        $str = self::cut_string($str,(integer) $cut_string);
-                }
-
-                if ($lower_case) {
-                        $str = self::lower_case($str);
-                } elseif ($upper_case) {
-                        if ($upper_case == 2) {
-                                $str = self::capitalize($str);
-                        } else {
-                                $str = self::upper_case($str);
-                        }
-                }
-                if ($encode_url) {
-                        $str = self::encode_url($str);
-                }
-
-                # --BEHAVIOR-- publicAfterContentFilter
-                $res = $GLOBALS['core']->callBehavior('publicAfterContentFilter',$GLOBALS['core'],$tag,$args);
-
-                return $str;
-        }
-
-        public static function encode_url($str)
-        {
-                return urlencode($str);
-        }
+	# Static methods
+	public static function global_filter($str,
+	$encode_xml, $remove_html, $cut_string, $lower_case, $upper_case ,$tag='')
+	{
+		$args = func_get_args();
+		array_pop($args);
+		$args[0] =& $str;
+
+		# --BEHAVIOR-- publicBeforeContentFilter
+		$res = $GLOBALS['core']->callBehavior('publicBeforeContentFilter',$GLOBALS['core'],$tag,$args);
+
+		if ($remove_html) {
+			$str = self::remove_html($str);
+			$str = preg_replace('/\s+/',' ',$str);
+		}
+
+		if ($encode_xml) {
+			$str = self::encode_xml($str);
+		}
+
+		if ($cut_string) {
+			$str = self::cut_string($str,(integer) $cut_string);
+		}
+
+		if ($lower_case) {
+			$str = self::lower_case($str);
+		} elseif ($upper_case) {
+			if ($upper_case == 2) {
+				$str = self::capitalize($str);
+			} else {
+				$str = self::upper_case($str);
+			}
+		}
+
+		# --BEHAVIOR-- publicAfterContentFilter
+		$res = $GLOBALS['core']->callBehavior('publicAfterContentFilter',$GLOBALS['core'],$tag,$args);
+
+		return $str;
+	}
+
 
 	public static function cut_string($str,$l)
@@ -213,5 +206,7 @@
 
 		$nb_posts = $_ctx->pagination->f(0);
-		$nb_pages = ceil(($nb_posts - $_ctx->nb_entry_first_page) / $_ctx->nb_entry_per_page + 1);
+		$nb_per_page = $_ctx->post_params['limit'][1];
+
+		$nb_pages = ceil($nb_posts/$nb_per_page);
 
 		return $nb_pages;
@@ -311,7 +306,4 @@
 		if (isset($GLOBALS['__theme'])) {
 			$path[] = $GLOBALS['__theme'];
-			if (isset($GLOBALS['__parent_theme'])) {
-				$path[] = $GLOBALS['__parent_theme'];
-			}
 		}
 		$path[] = 'default';
@@ -509,8 +501,4 @@
 			{
 				$res = '.'.$base.'_'.$size.'.jpg';
-			}
-			elseif ($size != 'o' && file_exists($root.'/'.$info['dirname'].'/.'.$base.'_'.$size.'.png'))
-			{
-				$res = '.'.$base.'_'.$size.'.png';
 			}
 			else
Index: inc/public/lib.urlhandlers.php
===================================================================
--- inc/public/lib.urlhandlers.php	(revision 2635)
+++ inc/public/lib.urlhandlers.php	(revision 2634)
@@ -86,7 +86,4 @@
 			$_ctx->nb_entry_per_page = $core->blog->settings->system->nb_post_per_page;
 		}
-		if ($_ctx->nb_entry_first_page === null) {
-			$_ctx->nb_entry_first_page = $_ctx->nb_entry_per_page;
-		}
 
 		$tpl_file = $core->tpl->getFilePath($tpl);
@@ -191,5 +188,4 @@
 		else
 		{
-			$_ctx =& $GLOBALS['_ctx'];
 			$core =& $GLOBALS['core'];
 
@@ -200,7 +196,4 @@
 
 			if (empty($_GET['q'])) {
-				if ($core->blog->settings->system->nb_post_for_home !== null) {
-					$_ctx->nb_entry_first_page = $core->blog->settings->system->nb_post_for_home;
-				}
 				self::serveDocument('home.html');
 				$core->blog->publishScheduledEntries();
@@ -423,16 +416,10 @@
 					if ($content != '')
 					{
-						# --BEHAVIOR-- publicBeforeCommentTransform
-						$buffer = $core->callBehavior('publicBeforeCommentTransform',$content);
-						if ($buffer != '') {
-							$content = $buffer;
+						if ($core->blog->settings->system->wiki_comments) {
+							$core->initWikiComment();
 						} else {
-							if ($core->blog->settings->system->wiki_comments) {
-								$core->initWikiComment();
-							} else {
-								$core->initWikiSimpleComment();
-							}
-							$content = $core->wikiTransform($content);
+							$core->initWikiSimpleComment();
 						}
+						$content = $core->wikiTransform($content);
 						$content = $core->HTMLfilter($content);
 					}
Index: inc/public/prepend.php
===================================================================
--- inc/public/prepend.php	(revision 2567)
+++ inc/public/prepend.php	(revision 2566)
@@ -134,15 +134,10 @@
 	$__theme_tpl_path[] = $core->blog->themes_path.'/'.$__parent_theme.'/tpl';
 }
-$tplset = $core->themes->moduleInfo($core->blog->settings->system->theme,'tplset');
-if (!empty($tplset) && is_dir(dirname(__FILE__).'/default-templates/'.$tplset)) {
-	$core->tpl->setPath(
-		$__theme_tpl_path,
-		dirname(__FILE__).'/default-templates/'.$tplset,
-		$core->tpl->getPath());
-} else {
-	$core->tpl->setPath(
-		$__theme_tpl_path,
-		$core->tpl->getPath());
-}
+
+$core->tpl->setPath(
+	$__theme_tpl_path,
+	dirname(__FILE__).'/default-templates',
+	$core->tpl->getPath());
+
 $core->url->mode = $core->blog->settings->system->url_scan;
 
Index: locales/bn/main.po
===================================================================
--- locales/bn/main.po	(revision 2666)
+++ locales/bn/main.po	(revision 2432)
@@ -676,5 +676,5 @@
 msgstr "এই এন্ট্রিটি নেই।"
 
-msgid "No comments"
+msgid "No comment"
 msgstr "শূণ্য মন্তব্য"
 
Index: locales/bn/public.po
===================================================================
--- locales/bn/public.po	(revision 2666)
+++ locales/bn/public.po	(revision 221)
@@ -42,5 +42,5 @@
 msgstr "বিস্তারিত"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "শূণ্য মন্তব্য"
 
Index: locales/ca/main.po
===================================================================
--- locales/ca/main.po	(revision 2666)
+++ locales/ca/main.po	(revision 2432)
@@ -703,5 +703,5 @@
 msgstr ""
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Sense comentaris"
 
Index: locales/ca/public.po
===================================================================
--- locales/ca/public.po	(revision 2666)
+++ locales/ca/public.po	(revision 221)
@@ -41,5 +41,5 @@
 msgstr "Continuar llegint"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "Sense comentaris"
 
Index: locales/cs/main.po
===================================================================
--- locales/cs/main.po	(revision 2666)
+++ locales/cs/main.po	(revision 2432)
@@ -675,5 +675,5 @@
 msgstr "Položka neexistuje!"
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Žádné komentáře"
 
Index: locales/cs/public.po
===================================================================
--- locales/cs/public.po	(revision 2666)
+++ locales/cs/public.po	(revision 221)
@@ -43,5 +43,5 @@
 msgstr "Číst dál..."
 
-msgid "no comments"
+msgid "no comment"
 msgstr "žádné komentáře"
 
Index: locales/da/main.po
===================================================================
--- locales/da/main.po	(revision 2666)
+++ locales/da/main.po	(revision 2432)
@@ -677,5 +677,5 @@
 msgstr "Indlægget eksisterer ikke."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Ingen kommentar"
 
Index: locales/da/public.po
===================================================================
--- locales/da/public.po	(revision 2666)
+++ locales/da/public.po	(revision 221)
@@ -42,5 +42,5 @@
 msgstr ""
 
-msgid "no comments"
+msgid "no comment"
 msgstr ""
 
Index: locales/de/main.po
===================================================================
--- locales/de/main.po	(revision 2666)
+++ locales/de/main.po	(revision 2432)
@@ -674,5 +674,5 @@
 msgstr "Eintrag existiert nicht."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Kein Kommentar"
 
Index: locales/de/plugins.po
===================================================================
--- locales/de/plugins.po	(revision 2687)
+++ locales/de/plugins.po	(revision 1668)
@@ -7,13 +7,14 @@
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-11-13 15:13+0100\n"
-"PO-Revision-Date: 2014-03-29 17:10+0100\n"
-"Last-Translator: llune <luce@carevic.eu>\n"
+"PO-Revision-Date: 2010-08-09 19:49-0000\n"
+"Last-Translator: ben_griffith <ben_griffith@topmail.co.uk>\n"
 "Language-Team: \n"
-"Language: de_DE\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: German\n"
+"X-Poedit-Country: GERMANY\n"
 "X-Poedit-SourceCharset: utf-8\n"
-"X-Generator: Poedit 1.6.4\n"
 
 msgid "no"
@@ -21,5 +22,5 @@
 
 msgid "yes"
-msgstr "ja"
+msgstr ""
 
 msgid "Configuration successfully updated"
@@ -39,8 +40,8 @@
 
 msgid "Goto:"
-msgstr "Gehe zu:"
+msgstr ""
 
 msgid "Ok"
-msgstr "Ok"
+msgstr ""
 
 msgid "global settings"
@@ -67,5 +68,5 @@
 
 msgid "Antispam"
-msgstr "Antispam"
+msgstr "Anitspam"
 
 msgid "Delete junk comments older than"
@@ -94,6 +95,7 @@
 msgstr "Whitelist"
 
+#, fuzzy
 msgid "Add an IP address: "
-msgstr "Eine IP-Adresse einfügen"
+msgstr "Gib eine IP-Adresse ein"
 
 msgid "Global IP"
@@ -141,6 +143,7 @@
 msgstr "Wörter wurden erfolgreich entfernt."
 
+#, fuzzy
 msgid "Add a word "
-msgstr "Ein Wort einfügen"
+msgstr "Füge ein Wort ein"
 
 msgid "Global word"
@@ -151,5 +154,5 @@
 
 msgid "List of bad words"
-msgstr "Wörter-Blacklist"
+msgstr ""
 
 msgid "Delete selected words"
@@ -219,7 +222,5 @@
 #, php-format
 msgid "All spam comments older than %s day(s) will be automatically deleted."
-msgstr ""
-"Alle Spam-Kommentare, die älter als %s Tag(e) sind, werden automatisch "
-"gelöscht."
+msgstr "Alle Spam-Kommentare, die älter als %s Tag(e) sind, werden automatisch gelöscht."
 
 msgid "You can modify this duration in the %s"
@@ -228,5 +229,5 @@
 #, fuzzy
 msgid "Blog preferences"
-msgstr "Benutzer-Einstellungen"
+msgstr "Globale Einstellungen"
 
 msgid "Filters configuration has been successfully saved."
@@ -251,6 +252,7 @@
 msgstr "Filter-Einstellungen"
 
+#, fuzzy
 msgid "position"
-msgstr "Stelle"
+msgstr "Position der Seite"
 
 msgid "Syndication"
@@ -264,14 +266,15 @@
 
 msgid "Attachments"
-msgstr "Anlagen"
+msgstr ""
 
 msgid "remove"
-msgstr "entfernen"
+msgstr ""
 
 msgid "No attachment."
-msgstr "Keine Anlage."
-
+msgstr ""
+
+#, fuzzy
 msgid "Add files to this entry"
-msgstr "Dateien in diesen Beitrag einfügen"
+msgstr "Füge Dateien in die Seite ein"
 
 msgid "Blogroll"
@@ -425,6 +428,7 @@
 msgstr "Sprache"
 
+#, fuzzy
 msgid "select this link"
-msgstr "diesen Link wählen"
+msgstr "Diesen Link auswählen"
 
 msgid "Delete selected links"
@@ -476,13 +480,10 @@
 msgstr "Code einfügen"
 
+#, fuzzy
 msgid "Choose a predefined style"
-msgstr "Vordefinierter Style wählen"
-
-msgid ""
-"For the following reasons, images cannot be created. You won't be able to "
-"change some background properties."
-msgstr ""
-"Aus folgenden Gründen konnten keine Grafiken erstellt werden. Du kannst "
-"bestimmte Hintergrund-Eigenschaften nicht ändern."
+msgstr "Vordefinierter Style"
+
+msgid "For the following reasons, images cannot be created. You won't be able to change some background properties."
+msgstr "Aus folgenden Gründen konnten keine Grafiken erstellt werden. Du kannst bestimmte Hintergrund-Eigenschaften nicht ändern."
 
 msgid "Theme configuration has been successfully updated."
@@ -559,11 +560,9 @@
 
 msgid "Add your image:"
-msgstr "Gib dein Bild ein:"
+msgstr "Gib deine Grafik ein:"
 
 #, php-format
 msgid "JPEG or PNG file, 800 pixels wide, maximum size %s"
-msgstr ""
-"JPEG-(*.jpeg/*.jpg) oder PNG-(*.png)Datei, Breite 800 Pixel, maximale "
-"Dateigröße %s"
+msgstr "JPEG-(*.jpeg/*.jpg) oder PNG-(*.png)Datei, Breite 800 Pixel, maximale Dateigröße %s"
 
 msgid "Sidebar"
@@ -661,16 +660,11 @@
 
 msgid "Additional CSS"
-msgstr "Zusätzliche CSS"
+msgstr ""
 
 msgid "Configuration import / export"
 msgstr "Konfiguration importieren / exportieren"
 
-msgid ""
-"You can share your configuration using the following code. To apply a "
-"configuration, paste the code, click on \"Apply code\" and save."
-msgstr ""
-"Du kannst zum Schützen deiner Konfiguration den folgenden Code benutzen und "
-"in eine Datei speichern. Um eine Konfiguration zu importieren, füge den Code "
-"ein, klicke auf \"Code einfügen\" und \"speichern\"."
+msgid "You can share your configuration using the following code. To apply a configuration, paste the code, click on \"Apply code\" and save."
+msgstr "Du kannst zum Schützen deiner Konfiguration den folgenden Code benutzen und in eine Datei speichern. Um eine Konfiguration zu importieren, füge den Code ein, klicke auf \"Code einfügen\" und \"speichern\"."
 
 msgid "Copy this code:"
@@ -680,10 +674,6 @@
 msgstr "Vorgabe"
 
-msgid ""
-"At least one of the following functions is not available: "
-"imagecreatetruecolor, imagepng & imagecreatefrompng."
-msgstr ""
-"Eine der folgenden Funktionen ist nicht vorhanden: imagecreatetruecolor, "
-"imagepng, imagecreatefrompng."
+msgid "At least one of the following functions is not available: imagecreatetruecolor, imagepng & imagecreatefrompng."
+msgstr "Eine der folgenden Funktionen ist nicht vorhanden: imagecreatetruecolor, imagepng, imagecreatefrompng."
 
 msgid "The 'public' directory does not exist."
@@ -716,7 +706,5 @@
 
 msgid "Exports a blog or a full Dotclear installation to flat file."
-msgstr ""
-"Exportiere einen Blog oder eine komplette Dotclear-Installation in eine "
-"Datei."
+msgstr "Exportiere einen Blog oder eine komplette Dotclear-Installation in eine Datei."
 
 msgid "Export file not found."
@@ -761,17 +749,9 @@
 
 #, php-format
-msgid ""
-"This will import your Dotclear 1.2 content as new content in the current "
-"blog: %s."
-msgstr ""
-"Dies wird den Inhalt von Dotclear 1.2 als neuen Inhalt in deinen aktuellen "
-"Blog (%s) importieren."
-
-msgid ""
-"Please note that this process will empty your categories, blogroll, entries "
-"and comments on the current blog."
-msgstr ""
-"Beachte: Dieser Prozess leert die Kategorien, Blogrolls, Einträge und "
-"Kommentare deines aktuellen Blogs!"
+msgid "This will import your Dotclear 1.2 content as new content in the current blog: %s."
+msgstr "Dies wird den Inhalt von Dotclear 1.2 als neuen Inhalt in deinen aktuellen Blog (%s) importieren."
+
+msgid "Please note that this process will empty your categories, blogroll, entries and comments on the current blog."
+msgstr "Beachte: Dieser Prozess leert die Kategorien, Blogrolls, Einträge und Kommentare deines aktuellen Blogs!"
 
 msgid "Depending on the size of your blog, it could take a few minutes."
@@ -784,9 +764,6 @@
 msgstr "Jetzt den Blog importieren"
 
-msgid ""
-"We first need some information about your old Dotclear 1.2 installation."
-msgstr ""
-"Wir brauchen erst einige Informationen über deine alte Dotclear 1.2-"
-"Installation."
+msgid "We first need some information about your old Dotclear 1.2 installation."
+msgstr "Wir brauchen erst einige Informationen über deine alte Dotclear 1.2-Installation."
 
 msgid "Entries import options"
@@ -812,23 +789,10 @@
 msgstr "Bitte genau lesen"
 
-msgid ""
-"Every newly imported user has received a random password and will need to "
-"ask for a new one by following the \"I forgot my password\" link on the "
-"login page (Their registered email address has to be valid.)"
-msgstr ""
-"Jeder neu importierte User hat ein zufällig generiertes Passwort erhalten; "
-"dies wird ihm mitgeteilt, wenn er den Link \"Ich habe mein Passwort vergessen"
-"\" auf der Login-Seite folgt. (Die registrierte E-Mail-Adresse muss gültig "
-"sein.)"
-
-#, php-format
-msgid ""
-"Please note that Dotclear 2 has a new URL layout. You can avoid broken links "
-"by installing <a href=\"%s\">DC1 redirect</a> plugin and activate it in your "
-"blog configuration."
-msgstr ""
-"Beachte: Dotclear 2 hat eine neue Struktur für URLs. Du kannst defekte Links "
-"durch Installieren und Aktivieren des <a href=\"%s\">DC1 redirect-Plugins</"
-"a> vermeiden."
+msgid "Every newly imported user has received a random password and will need to ask for a new one by following the \"I forgot my password\" link on the login page (Their registered email address has to be valid.)"
+msgstr "Jeder neu importierte User hat ein zufällig generiertes Passwort erhalten; dies wird ihm mitgeteilt, wenn er den Link \"Ich habe mein Passwort vergessen\" auf der Login-Seite folgt. (Die registrierte E-Mail-Adresse muss gültig sein.)"
+
+#, php-format
+msgid "Please note that Dotclear 2 has a new URL layout. You can avoid broken links by installing <a href=\"%s\">DC1 redirect</a> plugin and activate it in your blog configuration."
+msgstr "Beachte: Dotclear 2 hat eine neue Struktur für URLs. Du kannst defekte Links durch Installieren und Aktivieren des <a href=\"%s\">DC1 redirect-Plugins</a> vermeiden."
 
 msgid "next step"
@@ -857,10 +821,6 @@
 
 #, php-format
-msgid ""
-"This will import a feed (RSS or Atom) a as new content in the current blog: "
-"%s."
-msgstr ""
-"Dies wird einen Feed (RSS oder Atom) als neuen Inhalt in den aktuellen Blog "
-"importieren: %s"
+msgid "This will import a feed (RSS or Atom) a as new content in the current blog: %s."
+msgstr "Dies wird einen Feed (RSS oder Atom) als neuen Inhalt in den aktuellen Blog importieren: %s"
 
 msgid "Feed URL:"
@@ -871,7 +831,5 @@
 
 msgid "Imports a blog or a full Dotclear installation from flat file."
-msgstr ""
-"Importiert einen Blog oder einer komplette Dotclear-Installation aus einem "
-"Flat-File."
+msgstr "Importiert einen Blog oder einer komplette Dotclear-Installation aus einem Flat-File."
 
 msgid "Single blog successfully imported."
@@ -885,10 +843,6 @@
 
 #, php-format
-msgid ""
-"This will import a single blog backup as new content in the current blog: "
-"<strong>%s</strong>."
-msgstr ""
-"Dies wird einen einzelnen Blog als neuen Inhalt in den aktuellen Blog "
-"importieren: %s."
+msgid "This will import a single blog backup as new content in the current blog: <strong>%s</strong>."
+msgstr "Dies wird einen einzelnen Blog als neuen Inhalt in den aktuellen Blog importieren: %s."
 
 msgid "Upload a backup file"
@@ -901,9 +855,6 @@
 msgstr "Importiere eine komplette Backup-Datei"
 
-msgid ""
-"Warning: This will reset all the content of your database, except users."
-msgstr ""
-"Achtung: Dies wird den gesamten Inhalt, außer Benutzer, in deiner Datenbank "
-"zurücksetzen."
+msgid "Warning: This will reset all the content of your database, except users."
+msgstr "Achtung: Dies wird den gesamten Inhalt, außer Benutzer, in deiner Datenbank zurücksetzen."
 
 msgid "WordPress import"
@@ -914,43 +865,15 @@
 
 #, php-format
-msgid ""
-"This will import your WordPress content as new content in the current blog: "
-"%s."
-msgstr ""
-"Dies wird deinen Wordpress-Inhalt als neuen Inhalt in den aktuellen Blog "
-"importieren: %s."
+msgid "This will import your WordPress content as new content in the current blog: %s."
+msgstr "Dies wird deinen Wordpress-Inhalt als neuen Inhalt in den aktuellen Blog importieren: %s."
 
 msgid "We first need some information about your old WordPress installation."
-msgstr ""
-"Wir benötigen erst ein paar Informationen über deine alte Wordpress-"
-"Installation."
-
-msgid ""
-"WordPress and Dotclear's handling of categories are quite different. You can "
-"assign several categories to a single post in WordPress. In the Dotclear "
-"world, we see it more like \"One category, several tags.\" Therefore "
-"Dotclear can only import one category per post and will chose the lowest "
-"numbered one. If you want to keep a trace of every category, you can import "
-"them as tags, with an optional prefix."
-msgstr ""
-"Wordpress und Dotclear behandelt Kategorien unterschiedlich. Du kannst in "
-"Wordpress einen einzelnen Eintrag mehrere Kategorien zuweisen. Bei Dotclear "
-"wird \"eine Kategorie und mehrere Tags\" verwendet. Für Dotclear wird nur "
-"eine Kategorie pro Eintrag importiert, diejenige mit der niedrigsten Nummer. "
-"Wenn du dennoch alle Kategorien verwenden willst, kannst du diese als Tags "
-"mit optionalem Präfix importieren."
-
-msgid ""
-"On the other hand, in WordPress, a post can not be uncategorized, and a "
-"default installation has a first category labelised <i>\"Uncategorized\"</"
-"i>. If you did not change that category, you can just ignore it while "
-"importing your blog, as Dotclear allows you to actually keep your posts "
-"uncategorized."
-msgstr ""
-"Noch etwas ist anders bei Wordpress: Es kann kein Eintrag ohne Kategorie "
-"angelegt werden und bei der ersten Installation wird automatisch die erste "
-"Kategorie \"Allgemein\" angelegt. Hast du diese Kategorie nicht geändert, "
-"dann kannst du diese beim Importieren ignorieren, denn Dotclear erlaubt dir "
-"Einträge ohne Kategorie. "
+msgstr "Wir benötigen erst ein paar Informationen über deine alte Wordpress-Installation."
+
+msgid "WordPress and Dotclear's handling of categories are quite different. You can assign several categories to a single post in WordPress. In the Dotclear world, we see it more like \"One category, several tags.\" Therefore Dotclear can only import one category per post and will chose the lowest numbered one. If you want to keep a trace of every category, you can import them as tags, with an optional prefix."
+msgstr "Wordpress und Dotclear behandelt Kategorien unterschiedlich. Du kannst in Wordpress einen einzelnen Eintrag mehrere Kategorien zuweisen. Bei Dotclear wird \"eine Kategorie und mehrere Tags\" verwendet. Für Dotclear wird nur eine Kategorie pro Eintrag importiert, diejenige mit der niedrigsten Nummer. Wenn du dennoch alle Kategorien verwenden willst, kannst du diese als Tags mit optionalem Präfix importieren."
+
+msgid "On the other hand, in WordPress, a post can not be uncategorized, and a default installation has a first category labelised <i>\"Uncategorized\"</i>. If you did not change that category, you can just ignore it while importing your blog, as Dotclear allows you to actually keep your posts uncategorized."
+msgstr "Noch etwas ist anders bei Wordpress: Es kann kein Eintrag ohne Kategorie angelegt werden und bei der ersten Installation wird automatisch die erste Kategorie \"Allgemein\" angelegt. Hast du diese Kategorie nicht geändert, dann kannst du diese beim Importieren ignorieren, denn Dotclear erlaubt dir Einträge ohne Kategorie. "
 
 msgid "Ignore the first category:"
@@ -969,9 +892,6 @@
 msgstr "Inhaltsfilter"
 
-msgid ""
-"You may want to process your post and/or comment content with the following "
-"filters."
-msgstr ""
-"Du kannst deine Einträge und Kommentare nach folgenden Kriterien sortieren."
+msgid "You may want to process your post and/or comment content with the following filters."
+msgstr "Du kannst deine Einträge und Kommentare nach folgenden Kriterien sortieren."
 
 msgid "Post content formatter:"
@@ -1063,5 +983,5 @@
 #, fuzzy
 msgid "Vacuum logs"
-msgstr "Bereinige Tabellen"
+msgstr "Logs bereinigen"
 
 msgid "Delete all logs"
@@ -1077,11 +997,11 @@
 msgstr "Seiten"
 
-#, php-format
+#, fuzzy, php-format
 msgid "%d page"
-msgstr "%d Seite"
-
-#, php-format
+msgstr "Seite bearbeiten"
+
+#, fuzzy, php-format
 msgid "%d pages"
-msgstr "%d Seiten"
+msgstr "Seiten bearbeiten"
 
 msgid "manage pages"
@@ -1100,4 +1020,7 @@
 msgstr "Seitentitel"
 
+msgid "Page position"
+msgstr "Position der Seite"
+
 msgid "Publication date"
 msgstr "Datum der Veröffentlichung"
@@ -1106,6 +1029,7 @@
 msgstr "Keine Seite"
 
+#, fuzzy
 msgid "select this page"
-msgstr "diese Seite wählen"
+msgstr "Diese Seite auswählen"
 
 msgid "Are you sure you want to delete selected pages?"
@@ -1139,7 +1063,6 @@
 msgstr "Die Seite wurde erfolgreich erstellt."
 
-#, fuzzy
 msgid "Go to this page on the site"
-msgstr "Gehe zu diese Seite "
+msgstr ""
 
 msgid "Page status"
@@ -1147,5 +1070,5 @@
 
 msgid "Page position"
-msgstr "Stelle der Seite:"
+msgstr "Position der Seite:"
 
 msgid "Page lang"
@@ -1155,9 +1078,6 @@
 msgstr "Passwort der Seite:"
 
-msgid ""
-"Warning: If you set the URL manually, it may conflict with another page."
-msgstr ""
-"Achtung: Wenn du den URL manuell einfügst, kann es zu Konflikten mit anderen "
-"Seiten kommen."
+msgid "Warning: If you set the URL manually, it may conflict with another page."
+msgstr "Achtung: Wenn du den URL manuell einfügst, kann es zu Konflikten mit anderen Seiten kommen."
 
 msgid "Add files to this page"
@@ -1195,11 +1115,12 @@
 
 msgid "Simple menu"
-msgstr "Einfach Menü"
+msgstr ""
 
 msgid "Menu"
-msgstr "Menü"
-
+msgstr ""
+
+#, fuzzy
 msgid "All months"
-msgstr "Alle Monate"
+msgstr "Alle Tags"
 
 msgid "All tags"
@@ -1209,113 +1130,125 @@
 msgstr "Startseite"
 
+#, fuzzy
 msgid "Archive"
-msgstr "Archiv"
-
+msgstr "Archive"
+
+#, fuzzy
 msgid "Page"
-msgstr "Seite"
+msgstr "Seiten"
 
 msgid "Tags"
 msgstr "Tags"
 
-#, fuzzy
 msgid "User defined"
-msgstr "Benutzer-Einstellungen"
+msgstr ""
 
 msgid "Label"
-msgstr "Wortlaut"
+msgstr ""
 
 msgid "Recent posts"
-msgstr "Kürzliche Einträge"
+msgstr ""
 
 #, php-format
 msgid "Switch to %s language"
-msgstr "%s Sprache wechseln:"
-
-#, fuzzy
+msgstr ""
+
 msgid "Recent Posts from this category"
-msgstr "Importiere die niedrigste nummerierte Kategorie bei Beiträgen."
+msgstr ""
 
 msgid "Archives"
 msgstr "Archive"
 
-#, php-format
+#, fuzzy, php-format
 msgid "Posts from %s"
-msgstr "Einträge von %s"
+msgstr "Aus der Liste wählen"
 
 #, php-format
 msgid "Recent posts for %s tag"
-msgstr "Kürzlich Einträge für %s Tag"
+msgstr ""
 
 msgid "Label and URL of menu item are mandatory."
-msgstr "Die Wortlaute und URL des Menü-Item sind benötigt:"
-
+msgstr ""
+
+#, fuzzy
 msgid "No menu items selected."
-msgstr "Kein Menü-Item ausgewählt."
+msgstr "Keine Einträge im Feed."
 
 msgid "Label is mandatory."
-msgstr "Der Wortlaut ist benötigt."
+msgstr ""
 
 msgid "URL is mandatory."
-msgstr "URL ist benötigt."
-
+msgstr ""
+
+#, fuzzy
 msgid "Menu item has been successfully added."
-msgstr "Menü-Item wurde erfolgreich eingefügt."
-
+msgstr "Wort wurde erfolgreich eingefügt."
+
+#, fuzzy
 msgid "Menu items have been successfully removed."
-msgstr "Menü-Items wurden erfolgreich entfernt."
-
+msgstr "Einträge wurden erfolgreich entfernt."
+
+#, fuzzy
 msgid "Menu items have been successfully updated."
-msgstr "Menü-Items wurden erfolgreich aktualisiert."
-
+msgstr "Einstellungen wurden erfolgreich aktualisiert."
+
+#, fuzzy
 msgid "Add item"
-msgstr "Item einfügen"
-
+msgstr "Tags hinzufügen"
+
+#, fuzzy
 msgid "Select type"
-msgstr "Typ wählen"
+msgstr "Diese Seite auswählen"
 
 msgid "Type of item menu:"
-msgstr "Typ des Menü-Item:"
+msgstr ""
 
 msgid "Continue..."
-msgstr "Fortsetzen..."
-
+msgstr ""
+
+#, fuzzy
 msgid "Select language:"
-msgstr "Sprache wählen:"
-
+msgstr "Sprachen des Blogs"
+
+#, fuzzy
 msgid "Select category:"
-msgstr "Kategorie wählen:"
+msgstr "Bearbeite Kategorie"
 
 msgid "Select month (if necessary):"
-msgstr "Monat nötigenfalls wählen:"
-
+msgstr ""
+
+#, fuzzy
 msgid "Select page:"
-msgstr "Seite wählen:"
+msgstr "Diese Seite auswählen"
 
 msgid "Select tag (if necessary):"
-msgstr "Tag nötigenfalls wählen:"
+msgstr ""
 
 msgid "Label of item menu:"
-msgstr "Wortlaut des Menü-Item:"
-
+msgstr ""
+
+#, fuzzy
 msgid "Description of item menu:"
-msgstr "Beschreibung des Menü-Item:"
+msgstr "Beschreibung"
 
 msgid "URL of item menu:"
-msgstr "URL des Menü-Item:"
+msgstr ""
 
 msgid "Add this item"
-msgstr "Füge ein"
-
+msgstr ""
+
+#, fuzzy
 msgid "Add an item"
-msgstr "Ein Item einfügen"
+msgstr "Neuen Link einfügen"
 
 msgid "Menu items list"
-msgstr "Menü-Items Liste"
+msgstr ""
 
 msgid "Update menu"
-msgstr "Menü aktualisieren"
-
+msgstr ""
+
+#, fuzzy
 msgid "Delete selected menu items"
-msgstr "Ausgewählte Menu Items löschen"
+msgstr "Ausgewählte Links löschen"
 
 #, fuzzy
@@ -1324,5 +1257,5 @@
 
 msgid "No menu items so far."
-msgstr "Kein Item Menü bisher."
+msgstr ""
 
 msgid "Tags:"
@@ -1358,7 +1291,9 @@
 msgstr "Trage Tags mit Komma getrennt ein"
 
+#, fuzzy
 msgid "Add tags"
-msgstr "Tags einfügen"
-
+msgstr "Tags hinzufügen"
+
+#, fuzzy
 msgid "Remove tags"
 msgstr "Tags entfernen"
@@ -1415,19 +1350,21 @@
 msgstr "Zurück zur Tagliste"
 
+#, fuzzy
 msgid "Actions for this tag"
-msgstr "Handlungen für diesen Tag"
-
+msgstr "Füge Dateien in die Seite ein"
+
+#, fuzzy
 msgid "Edit tag name:"
-msgstr "Name des Tags bearbeiten"
+msgstr "Tag bearbeiten"
 
 msgid "Rename"
-msgstr "Umbenennen"
-
+msgstr ""
+
+#, fuzzy
 msgid "Delete this tag:"
 msgstr "Diesen Tag löschen"
 
-#, fuzzy
 msgid "List of entries with this tag"
-msgstr "Die Einträge dieses Tags als Atom-Feed abonnieren"
+msgstr ""
 
 msgid "Tag has been successfully removed"
@@ -1451,10 +1388,6 @@
 
 #, php-format
-msgid ""
-"Unable to write file %s. Please check your theme files and folders "
-"permissions."
-msgstr ""
-"Datei %s kann nicht geschrieben werden. Bitte überprüfe die Rechte der "
-"Dateien und Verzeichnisse für Themen."
+msgid "Unable to write file %s. Please check your theme files and folders permissions."
+msgstr "Datei %s kann nicht geschrieben werden. Bitte überprüfe die Rechte der Dateien und Verzeichnisse für Themen."
 
 msgid "Saving document..."
@@ -1485,7 +1418,5 @@
 
 msgid "This file is not writable. Please check your theme files permissions."
-msgstr ""
-"Diese Datei ist nicht beschreibbar. Bitte überprüfe die Rechte der Theme-"
-"Datei."
+msgstr "Diese Datei ist nicht beschreibbar. Bitte überprüfe die Rechte der Theme-Datei."
 
 msgid "Templates files"
@@ -1500,5 +1431,5 @@
 #, fuzzy
 msgid "Preferences successfully updated"
-msgstr "Konfiguration wurden erfolgreich aktualisiert"
+msgstr "Die Seite wurde erfolgreiche aktualisiert."
 
 #, fuzzy
@@ -1511,5 +1442,5 @@
 #, fuzzy
 msgid "global preferences"
-msgstr "Benutzer-Einstellungen"
+msgstr "Globale Einstellungen"
 
 msgid "Presentation widgets"
@@ -1593,6 +1524,7 @@
 msgstr "Extra"
 
+#, fuzzy
 msgid "custom"
-msgstr "speziell"
+msgstr "Speziell..."
 
 msgid "Widgets"
@@ -1608,6 +1540,7 @@
 msgstr "Hinzufügen zu:"
 
+#, fuzzy
 msgid "Add widgets to sidebars"
-msgstr "Widgets in Sidebars einfügen"
+msgstr "Hinzfügen von Widgets zu den Sidebars"
 
 msgid "Navigation sidebar"
@@ -1617,27 +1550,24 @@
 msgstr "Extra-Sidebar"
 
+#, fuzzy
 msgid "Custom sidebar"
-msgstr "Spezielle Sidebar"
-
+msgstr "Sidebars zurücksetzen"
+
+#, fuzzy
 msgid "Update sidebars"
 msgstr "Sidebars aktualisieren"
 
+#, fuzzy
 msgid "Reset sidebars"
 msgstr "Sidebars zurücksetzen"
 
+#, fuzzy
 msgid "Use of widgets"
-msgstr "Widgets Benutzung"
-
-msgid ""
-"Widgets may be used to add various blocks of content to be displayed on your "
-"public pages. To add a widget, drag it from the Available widgets list on "
-"the left to one of the sidebars on the right of this page. You can order "
-"your widgets in a sidebar by dragging them up or down. You must update "
-"sidebars to apply your changes."
-msgstr ""
-
-msgid ""
-"Once included in a sidebar, widgets have configuration options that you can "
-"reach by clicking on the arrow next to their name."
+msgstr "Kein Widget."
+
+msgid "Widgets may be used to add various blocks of content to be displayed on your public pages. To add a widget, drag it from the Available widgets list on the left to one of the sidebars on the right of this page. You can order your widgets in a sidebar by dragging them up or down. You must update sidebars to apply your changes."
+msgstr ""
+
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
@@ -1648,16 +1578,9 @@
 msgstr "Widget-Templates-Tags"
 
-msgid ""
-"If you are allowed to edit your theme templates, you can directly add "
-"widgets as templates tags, with their own configuration."
-msgstr ""
-"Solltest du das Recht haben, die Templates des Themes zu bearbeiten, dann "
-"kannst du Widgets direkt als Template-Tags mit deinen eigenen Einstellungen "
-"eingeben."
+msgid "If you are allowed to edit your theme templates, you can directly add widgets as templates tags, with their own configuration."
+msgstr "Solltest du das Recht haben, die Templates des Themes zu bearbeiten, dann kannst du Widgets direkt als Template-Tags mit deinen eigenen Einstellungen eingeben."
 
 msgid "To add a widget in your template, you need to write code like this:"
-msgstr ""
-"Wenn du ein Widget in das Template einfügen möchtest, dann benutze Code mit "
-"folgender Schreibweise:"
+msgstr "Wenn du ein Widget in das Template einfügen möchtest, dann benutze Code mit folgender Schreibweise:"
 
 msgid "Widget ID"
@@ -1690,2 +1613,56 @@
 msgid "Remove widget"
 msgstr "Widget entfernen"
+
+#~ msgid "List"
+#~ msgstr "Liste"
+
+#~ msgid "Return to filters"
+#~ msgstr "Zurück zu den Filtern"
+
+#~ msgid "import"
+#~ msgstr "importieren"
+
+#~ msgid "Preview"
+#~ msgstr "Vorschau"
+
+#~ msgid "Send"
+#~ msgstr "Senden"
+
+#~ msgid "View page"
+#~ msgstr "Seite anzeigen"
+
+#~ msgid "Preview page"
+#~ msgstr "Seitenvorschau"
+
+#~ msgid "Rename this tag:"
+#~ msgstr "Diesen Tag umbenennen"
+
+#~ msgid "Save order"
+#~ msgstr "Anordnung speichern"
+
+#~ msgid "External media"
+#~ msgstr "Externes Medium"
+
+#~ msgid "External media selector"
+#~ msgstr "Externe Medienauswahl"
+
+#~ msgid "Supported media services"
+#~ msgstr "Unterstützte Medienservices"
+
+#~ msgid "Please enter the URL of the page containing the video you want to include in your post."
+#~ msgstr "Bitte gib die URL der Seite ein, von der du das Video einfügen willst."
+
+#~ msgid "Page URL:"
+#~ msgstr "URL der Seite:"
+
+#~ msgid "Media alignment"
+#~ msgstr "Ausrichtung des Mediums"
+
+#~ msgid "Media title"
+#~ msgstr "Titel des Mediums"
+
+#~ msgid "Unsupported service"
+#~ msgstr "Nicht unterstützter Service"
+
+#~ msgid "Invalid page URL"
+#~ msgstr "Falscher URL der Seite"
Index: locales/de/public.po
===================================================================
--- locales/de/public.po	(revision 2666)
+++ locales/de/public.po	(revision 759)
@@ -43,5 +43,5 @@
 msgstr "Weiterlesen"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "Kein Kommentar"
 
Index: locales/en/main.po
===================================================================
--- locales/en/main.po	(revision 2666)
+++ locales/en/main.po	(revision 2487)
@@ -763,5 +763,5 @@
 msgstr ""
 
-msgid "No comments"
+msgid "No comment"
 msgstr ""
 
Index: locales/en/plugins.po
===================================================================
--- locales/en/plugins.po	(revision 2647)
+++ locales/en/plugins.po	(revision 2516)
@@ -1965,11 +1965,2 @@
 msgid "Drag widgets here to remove."
 msgstr ""
-
-msgid "From theme:"
-msgstr ""
-
-msgid "From parent:"
-msgstr ""
-
-msgid "From template set:"
-msgstr ""
Index: locales/en/public.po
===================================================================
--- locales/en/public.po	(revision 2666)
+++ locales/en/public.po	(revision 2285)
@@ -43,5 +43,5 @@
 msgstr ""
 
-msgid "no comments"
+msgid "no comment"
 msgstr ""
 
Index: locales/eo/main.po
===================================================================
--- locales/eo/main.po	(revision 2666)
+++ locales/eo/main.po	(revision 2432)
@@ -667,5 +667,5 @@
 msgstr ""
 
-msgid "No comments"
+msgid "No comment"
 msgstr ""
 
Index: locales/eo/public.po
===================================================================
--- locales/eo/public.po	(revision 2666)
+++ locales/eo/public.po	(revision 221)
@@ -42,5 +42,5 @@
 msgstr "Legi plu"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "neniu komento"
 
Index: locales/es-ar/main.po
===================================================================
--- locales/es-ar/main.po	(revision 2666)
+++ locales/es-ar/main.po	(revision 2432)
@@ -678,5 +678,5 @@
 msgstr "La entrada no existe."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Ningún comentario"
 
Index: locales/es-ar/public.po
===================================================================
--- locales/es-ar/public.po	(revision 2666)
+++ locales/es-ar/public.po	(revision 221)
@@ -42,5 +42,5 @@
 msgstr "Continuar leyendo"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "sin comentarios"
 
Index: locales/es/main.po
===================================================================
--- locales/es/main.po	(revision 2666)
+++ locales/es/main.po	(revision 2432)
@@ -680,5 +680,5 @@
 msgstr "La entrada no existe."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Ningún comentario"
 
Index: locales/es/public.po
===================================================================
--- locales/es/public.po	(revision 2666)
+++ locales/es/public.po	(revision 221)
@@ -45,5 +45,5 @@
 msgstr "Seguir leyendo"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "sin comentarios"
 
Index: locales/eu/main.po
===================================================================
--- locales/eu/main.po	(revision 2666)
+++ locales/eu/main.po	(revision 2432)
@@ -667,5 +667,5 @@
 msgstr ""
 
-msgid "No comments"
+msgid "No comment"
 msgstr ""
 
Index: locales/eu/public.po
===================================================================
--- locales/eu/public.po	(revision 2666)
+++ locales/eu/public.po	(revision 221)
@@ -41,5 +41,5 @@
 msgstr "Jarraitu irakurketa"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "iruzkinik ez "
 
Index: locales/fr/main.po
===================================================================
--- locales/fr/main.po	(revision 2694)
+++ locales/fr/main.po	(revision 2512)
@@ -399,8 +399,4 @@
 
 #, php-format
-msgid "Display %s entries on home page"
-msgstr "Afficher %s billets sur la page d'accueil"
-
-#, php-format
 msgid "Display %s entries per page"
 msgstr "Afficher %s billets par page"
@@ -771,5 +767,5 @@
 msgstr "Le commentaire a été créé."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Aucun commentaire"
 
@@ -2030,7 +2026,4 @@
 msgstr "Édition"
 
-msgid "Preferred editor:"
-msgstr "Editeur préféré :"
-
 msgid "Preferred format:"
 msgstr "Format d'édition préféré :"
@@ -3664,10 +3657,4 @@
 msgstr "L'erreur suivante a été rencontrée lors de la tentative d'accès à la base de données :"
 
-msgid "Choose an active editor in %s."
-msgstr "Choisissez un éditeur dans %s."
-
-msgid "your preferences"
-msgstr "vos préférences"
-
 #~ msgid "You don't have permissions to deactivate this plugin."
 #~ msgstr "Vous n'avez pas les permissions pour désactiver ce plugin."
Index: locales/fr/plugins.po
===================================================================
--- locales/fr/plugins.po	(revision 2663)
+++ locales/fr/plugins.po	(revision 2546)
@@ -1983,22 +1983,4 @@
 msgstr "Glisser les widgets ici pour les retirer du volet."
 
-msgid "From theme:"
-msgstr "Du thème :"
-
-msgid "From parent:"
-msgstr "Du thème parent :"
-
-msgid "From template set:"
-msgstr "Du jeu de template :"
-
-msgid "Reset"
-msgstr "Réinitialiser"
-
-msgid "Are you sure you want to reset this file?"
-msgstr "Êtes-vous sûr de vouloir réinitialiser ce fichier ?"
-
-msgid "The file has been reset."
-msgstr "Le fichier a été réinitialisé."
-
 #~ msgid "RSS or Atom feed subscription links"
 #~ msgstr "Liens d'abonnement aux flux RSS ou Atom"
Index: locales/fr/public.po
===================================================================
--- locales/fr/public.po	(revision 2666)
+++ locales/fr/public.po	(revision 2503)
@@ -41,5 +41,5 @@
 msgstr "Lire la suite"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "aucun commentaire"
 
Index: locales/hu/main.po
===================================================================
--- locales/hu/main.po	(revision 2666)
+++ locales/hu/main.po	(revision 2432)
@@ -698,5 +698,5 @@
 msgstr "A bejegyzés nem létezik."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Nincs hozzászólás"
 
Index: locales/hu/public.po
===================================================================
--- locales/hu/public.po	(revision 2666)
+++ locales/hu/public.po	(revision 221)
@@ -43,5 +43,5 @@
 msgstr "Folytatás"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "nincs hozzászólás"
 
Index: locales/it/main.po
===================================================================
--- locales/it/main.po	(revision 2666)
+++ locales/it/main.po	(revision 2432)
@@ -674,5 +674,5 @@
 msgstr "Questo articolo non esiste."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Nessun commento"
 
Index: locales/it/public.po
===================================================================
--- locales/it/public.po	(revision 2666)
+++ locales/it/public.po	(revision 221)
@@ -42,5 +42,5 @@
 msgstr "Continua lettura"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "nessuno commento"
 
Index: locales/ja/main.po
===================================================================
--- locales/ja/main.po	(revision 2666)
+++ locales/ja/main.po	(revision 2432)
@@ -683,5 +683,5 @@
 msgstr "エントリは存在しません。"
 
-msgid "No comments"
+msgid "No comment"
 msgstr "コメントはありません"
 
Index: locales/ja/public.po
===================================================================
--- locales/ja/public.po	(revision 2666)
+++ locales/ja/public.po	(revision 221)
@@ -43,5 +43,5 @@
 msgstr "続きを読む -"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "コメント(0)"
 
Index: locales/ko/main.po
===================================================================
--- locales/ko/main.po	(revision 2666)
+++ locales/ko/main.po	(revision 2432)
@@ -682,5 +682,5 @@
 msgstr "존재하지 않는 글꼭지입니다."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "댓글이 없습니다."
 
Index: locales/lt/main.po
===================================================================
--- locales/lt/main.po	(revision 2666)
+++ locales/lt/main.po	(revision 2432)
@@ -643,5 +643,5 @@
 msgstr "Įrašas neegzistuoja."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Komentarų nėra."
 
Index: locales/lt/public.po
===================================================================
--- locales/lt/public.po	(revision 2666)
+++ locales/lt/public.po	(revision 813)
@@ -42,5 +42,5 @@
 msgstr "Skaityti toliau"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "komentarų nėra"
 
Index: locales/nl/main.po
===================================================================
--- locales/nl/main.po	(revision 2666)
+++ locales/nl/main.po	(revision 2432)
@@ -670,5 +670,5 @@
 msgstr ""
 
-msgid "No comments"
+msgid "No comment"
 msgstr ""
 
Index: locales/nl/public.po
===================================================================
--- locales/nl/public.po	(revision 2666)
+++ locales/nl/public.po	(revision 820)
@@ -43,5 +43,5 @@
 msgstr "Lees verder"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "geen comments"
 
Index: locales/oc/main.po
===================================================================
--- locales/oc/main.po	(revision 2666)
+++ locales/oc/main.po	(revision 2432)
@@ -674,5 +674,5 @@
 msgstr ""
 
-msgid "No comments"
+msgid "No comment"
 msgstr ""
 
Index: locales/oc/public.po
===================================================================
--- locales/oc/public.po	(revision 2666)
+++ locales/oc/public.po	(revision 221)
@@ -41,5 +41,5 @@
 msgstr ""
 
-msgid "no comments"
+msgid "no comment"
 msgstr "0 comentaris"
 
Index: locales/pl/main.po
===================================================================
--- locales/pl/main.po	(revision 2666)
+++ locales/pl/main.po	(revision 2432)
@@ -671,5 +671,5 @@
 msgstr "Wpis nie istnieje."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Brak komentarzy"
 
Index: locales/pl/public.po
===================================================================
--- locales/pl/public.po	(revision 2666)
+++ locales/pl/public.po	(revision 516)
@@ -42,5 +42,5 @@
 msgstr "Kontynuuj czytanie"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "brak komentarzy"
 
Index: locales/pt-br/main.po
===================================================================
--- locales/pt-br/main.po	(revision 2666)
+++ locales/pt-br/main.po	(revision 2432)
@@ -706,5 +706,5 @@
 msgstr "Este post não existe."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Nenhum comentário"
 
Index: locales/pt-br/public.po
===================================================================
--- locales/pt-br/public.po	(revision 2666)
+++ locales/pt-br/public.po	(revision 221)
@@ -42,5 +42,5 @@
 msgstr "Continue a leitura"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "nenhum comentário"
 
Index: locales/pt/main.po
===================================================================
--- locales/pt/main.po	(revision 2666)
+++ locales/pt/main.po	(revision 2432)
@@ -679,5 +679,5 @@
 msgstr "A entrada não existe."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Sem comentário"
 
Index: locales/pt/public.po
===================================================================
--- locales/pt/public.po	(revision 2666)
+++ locales/pt/public.po	(revision 221)
@@ -44,5 +44,5 @@
 msgstr "Continuar leitura"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "sem comentário"
 
Index: locales/ro/main.po
===================================================================
--- locales/ro/main.po	(revision 2666)
+++ locales/ro/main.po	(revision 2432)
@@ -669,5 +669,5 @@
 msgstr ""
 
-msgid "No comments"
+msgid "No comment"
 msgstr ""
 
Index: locales/ro/public.po
===================================================================
--- locales/ro/public.po	(revision 2666)
+++ locales/ro/public.po	(revision 834)
@@ -43,5 +43,5 @@
 msgstr "Citește în continuare"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "niciun comentariu"
 
Index: locales/ru/main.po
===================================================================
--- locales/ru/main.po	(revision 2666)
+++ locales/ru/main.po	(revision 2432)
@@ -678,5 +678,5 @@
 msgstr "Эта запись не существует."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Нет комментариев"
 
Index: locales/ru/public.po
===================================================================
--- locales/ru/public.po	(revision 2666)
+++ locales/ru/public.po	(revision 221)
@@ -40,5 +40,5 @@
 msgstr "Читать дальше"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "нет комментариев"
 
Index: locales/sr/main.po
===================================================================
--- locales/sr/main.po	(revision 2666)
+++ locales/sr/main.po	(revision 2432)
@@ -695,5 +695,5 @@
 msgstr "Ce billet n'existe pas."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Aucun commentaire"
 
Index: locales/sr/public.po
===================================================================
--- locales/sr/public.po	(revision 2666)
+++ locales/sr/public.po	(revision 221)
@@ -42,5 +42,5 @@
 msgstr ""
 
-msgid "no comments"
+msgid "no comment"
 msgstr ""
 
Index: locales/sv/main.po
===================================================================
--- locales/sv/main.po	(revision 2666)
+++ locales/sv/main.po	(revision 2432)
@@ -667,5 +667,5 @@
 msgstr ""
 
-msgid "No comments"
+msgid "No comment"
 msgstr ""
 
Index: locales/sv/public.po
===================================================================
--- locales/sv/public.po	(revision 2666)
+++ locales/sv/public.po	(revision 221)
@@ -42,5 +42,5 @@
 msgstr ""
 
-msgid "no comments"
+msgid "no comment"
 msgstr ""
 
Index: locales/te/main.po
===================================================================
--- locales/te/main.po	(revision 2666)
+++ locales/te/main.po	(revision 2432)
@@ -692,5 +692,5 @@
 msgstr "టపా లేనే లేదు."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "వ్యాఖ్యలు లేవు"
 
Index: locales/te/public.po
===================================================================
--- locales/te/public.po	(revision 2666)
+++ locales/te/public.po	(revision 221)
@@ -41,5 +41,5 @@
 msgstr "చదవడం కొనసాగించండి"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "వ్యాఖ్యలు లేవు"
 
Index: locales/tr/main.po
===================================================================
--- locales/tr/main.po	(revision 2666)
+++ locales/tr/main.po	(revision 2432)
@@ -678,5 +678,5 @@
 msgstr "Yazı mevcut değil."
 
-msgid "No comments"
+msgid "No comment"
 msgstr "Ahkam yok"
 
Index: locales/tr/public.po
===================================================================
--- locales/tr/public.po	(revision 2666)
+++ locales/tr/public.po	(revision 221)
@@ -39,5 +39,5 @@
 msgstr "Tamamını oku"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "ahkam yok"
 
Index: locales/zh-cn/main.po
===================================================================
--- locales/zh-cn/main.po	(revision 2666)
+++ locales/zh-cn/main.po	(revision 2432)
@@ -676,5 +676,5 @@
 msgstr "文章不存在。"
 
-msgid "No comments"
+msgid "No comment"
 msgstr "没有评论"
 
Index: locales/zh-cn/public.po
===================================================================
--- locales/zh-cn/public.po	(revision 2666)
+++ locales/zh-cn/public.po	(revision 253)
@@ -42,5 +42,5 @@
 msgstr "继续阅读"
 
-msgid "no comments"
+msgid "no comment"
 msgstr "没有评论"
 
Index: plugins/antispam/filters/class.dc.filter.linkslookup.php
===================================================================
--- plugins/antispam/filters/class.dc.filter.linkslookup.php	(revision 2567)
+++ plugins/antispam/filters/class.dc.filter.linkslookup.php	(revision 2566)
@@ -48,8 +48,4 @@
 
 			$i = count($domain_elem) - 1;
-			if ($i == 0) {
-				// "domain" is 1 word long, don't check it
-				return null;
-			}
 			$host = $domain_elem[$i];
 			do
Index: plugins/antispam/index.php
===================================================================
--- plugins/antispam/index.php	(revision 2567)
+++ plugins/antispam/index.php	(revision 2566)
@@ -117,5 +117,4 @@
 	echo
 		dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
-		dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
 		dcPage::jsLoad('index.php?pf=antispam/antispam.js');
   }
Index: plugins/attachments/_public.php
===================================================================
--- plugins/attachments/_public.php	(revision 2646)
+++ plugins/attachments/_public.php	(revision 2566)
@@ -211,15 +211,26 @@
 	public static function EntryAttachmentCount($attr)
 	{
-		global $core;
-		return $core->tpl->displayCounter(
-			'$_ctx->posts->countMedia()',
-			array(
-				'none' => 'no attachment',
-				'one'  => 'one attachment',
-				'more' => '%d attachments'
-			),
-			$attr,
-			false
-		);
+		$none = 'no attachment';
+		$one = 'one attachment';
+		$more = '%d attachments';
+
+		if (isset($attr['none'])) {
+			$none = addslashes($attr['none']);
+		}
+		if (isset($attr['one'])) {
+			$one = addslashes($attr['one']);
+		}
+		if (isset($attr['more'])) {
+			$more = addslashes($attr['more']);
+		}
+
+		return
+		"<?php if (\$_ctx->posts->countMedia() == 0) {\n".
+		"  printf(__('".$none."'),(integer) \$_ctx->posts->countMedia());\n".
+		"} elseif (\$_ctx->posts->countMedia() == 1) {\n".
+		"  printf(__('".$one."'),(integer) \$_ctx->posts->countMedia());\n".
+		"} else {\n".
+		"  printf(__('".$more."'),(integer) \$_ctx->posts->countMedia());\n".
+		"} ?>";
 	}
 }
Index: plugins/blogroll/_define.php
===================================================================
--- plugins/blogroll/_define.php	(revision 2662)
+++ plugins/blogroll/_define.php	(revision 2566)
@@ -16,5 +16,5 @@
 	/* Description*/		"Manage your blogroll",
 	/* Author */			"Olivier Meunier",
-	/* Version */			'1.4',
+	/* Version */			'1.3.1',
 	array(
 		'permissions' =>	'blogroll',
Index: plugins/blogroll/_public.php
===================================================================
--- plugins/blogroll/_public.php	(revision 2667)
+++ plugins/blogroll/_public.php	(revision 2566)
@@ -145,5 +145,5 @@
 		}
 
-		$links = self::getList($w->renderSubtitle('',false),'<ul>%s</ul>','<li%2$s>%1$s</li>',$w->category);
+		$links = self::getList('<h3>%s</h3>','<ul>%s</ul>','<li%2$s>%1$s</li>',$w->category);
 
 		if (empty($links)) {
@@ -151,7 +151,9 @@
 		}
 
-		return $w->renderDiv($w->content_only,'links '.$w->class,'',
-			($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
-			$links);
+		return
+		($w->content_only ? '' : '<div class="links'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
+		$links.
+		($w->content_only ? '' : '</div>');
 	}
 }
Index: plugins/blogroll/index.php
===================================================================
--- plugins/blogroll/index.php	(revision 2567)
+++ plugins/blogroll/index.php	(revision 2566)
@@ -177,5 +177,4 @@
 	echo
 		dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
-		dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
 		dcPage::jsLoad('index.php?pf=blogroll/blogroll.js');
 	}
Index: plugins/blowupConfig/index.php
===================================================================
--- plugins/blowupConfig/index.php	(revision 2657)
+++ plugins/blowupConfig/index.php	(revision 2566)
@@ -108,7 +108,7 @@
 	{
 		$blowup_user['body_txt_f'] = $_POST['body_txt_f'];
-		$blowup_user['body_txt_s'] = dcThemeConfig::adjustFontSize($_POST['body_txt_s']);
-		$blowup_user['body_txt_c'] = dcThemeConfig::adjustColor($_POST['body_txt_c']);
-		$blowup_user['body_line_height'] = dcThemeConfig::adjustFontSize($_POST['body_line_height']);
+		$blowup_user['body_txt_s'] = blowupConfig::adjustFontSize($_POST['body_txt_s']);
+		$blowup_user['body_txt_c'] = blowupConfig::adjustColor($_POST['body_txt_c']);
+		$blowup_user['body_line_height'] = blowupConfig::adjustFontSize($_POST['body_line_height']);
 
 		$blowup_user['blog_title_hide'] = (integer) !empty($_POST['blog_title_hide']);
@@ -122,49 +122,49 @@
 		{
 			$blowup_user['blog_title_f'] = $_POST['blog_title_f'];
-			$blowup_user['blog_title_s'] = dcThemeConfig::adjustFontSize($_POST['blog_title_s']);
-			$blowup_user['blog_title_c'] = dcThemeConfig::adjustColor($_POST['blog_title_c']);
+			$blowup_user['blog_title_s'] = blowupConfig::adjustFontSize($_POST['blog_title_s']);
+			$blowup_user['blog_title_c'] = blowupConfig::adjustColor($_POST['blog_title_c']);
 			$blowup_user['blog_title_a'] = preg_match('/^(left|center|right)$/',$_POST['blog_title_a']) ? $_POST['blog_title_a'] : null;
-			$blowup_user['blog_title_p'] = dcThemeConfig::adjustPosition($_POST['blog_title_p']);
+			$blowup_user['blog_title_p'] = blowupConfig::adjustPosition($_POST['blog_title_p']);
 		}
 
-		$blowup_user['body_link_c'] = dcThemeConfig::adjustColor($_POST['body_link_c']);
-		$blowup_user['body_link_f_c'] = dcThemeConfig::adjustColor($_POST['body_link_f_c']);
-		$blowup_user['body_link_v_c'] = dcThemeConfig::adjustColor($_POST['body_link_v_c']);
+		$blowup_user['body_link_c'] = blowupConfig::adjustColor($_POST['body_link_c']);
+		$blowup_user['body_link_f_c'] = blowupConfig::adjustColor($_POST['body_link_f_c']);
+		$blowup_user['body_link_v_c'] = blowupConfig::adjustColor($_POST['body_link_v_c']);
 
 		$blowup_user['sidebar_text_f'] = $_POST['sidebar_text_f'];
-		$blowup_user['sidebar_text_s'] = dcThemeConfig::adjustFontSize($_POST['sidebar_text_s']);
-		$blowup_user['sidebar_text_c'] = dcThemeConfig::adjustColor($_POST['sidebar_text_c']);
+		$blowup_user['sidebar_text_s'] = blowupConfig::adjustFontSize($_POST['sidebar_text_s']);
+		$blowup_user['sidebar_text_c'] = blowupConfig::adjustColor($_POST['sidebar_text_c']);
 		$blowup_user['sidebar_title_f'] = $_POST['sidebar_title_f'];
-		$blowup_user['sidebar_title_s'] = dcThemeConfig::adjustFontSize($_POST['sidebar_title_s']);
-		$blowup_user['sidebar_title_c'] = dcThemeConfig::adjustColor($_POST['sidebar_title_c']);
+		$blowup_user['sidebar_title_s'] = blowupConfig::adjustFontSize($_POST['sidebar_title_s']);
+		$blowup_user['sidebar_title_c'] = blowupConfig::adjustColor($_POST['sidebar_title_c']);
 		$blowup_user['sidebar_title2_f'] = $_POST['sidebar_title2_f'];
-		$blowup_user['sidebar_title2_s'] = dcThemeConfig::adjustFontSize($_POST['sidebar_title2_s']);
-		$blowup_user['sidebar_title2_c'] = dcThemeConfig::adjustColor($_POST['sidebar_title2_c']);
-		$blowup_user['sidebar_line_c'] = dcThemeConfig::adjustColor($_POST['sidebar_line_c']);
-		$blowup_user['sidebar_link_c'] = dcThemeConfig::adjustColor($_POST['sidebar_link_c']);
-		$blowup_user['sidebar_link_f_c'] = dcThemeConfig::adjustColor($_POST['sidebar_link_f_c']);
-		$blowup_user['sidebar_link_v_c'] = dcThemeConfig::adjustColor($_POST['sidebar_link_v_c']);
+		$blowup_user['sidebar_title2_s'] = blowupConfig::adjustFontSize($_POST['sidebar_title2_s']);
+		$blowup_user['sidebar_title2_c'] = blowupConfig::adjustColor($_POST['sidebar_title2_c']);
+		$blowup_user['sidebar_line_c'] = blowupConfig::adjustColor($_POST['sidebar_line_c']);
+		$blowup_user['sidebar_link_c'] = blowupConfig::adjustColor($_POST['sidebar_link_c']);
+		$blowup_user['sidebar_link_f_c'] = blowupConfig::adjustColor($_POST['sidebar_link_f_c']);
+		$blowup_user['sidebar_link_v_c'] = blowupConfig::adjustColor($_POST['sidebar_link_v_c']);
 
 		$blowup_user['sidebar_position'] = ($_POST['sidebar_position'] == 'left') ? 'left' : null;
 
 		$blowup_user['date_title_f'] = $_POST['date_title_f'];
-		$blowup_user['date_title_s'] = dcThemeConfig::adjustFontSize($_POST['date_title_s']);
-		$blowup_user['date_title_c'] = dcThemeConfig::adjustColor($_POST['date_title_c']);
+		$blowup_user['date_title_s'] = blowupConfig::adjustFontSize($_POST['date_title_s']);
+		$blowup_user['date_title_c'] = blowupConfig::adjustColor($_POST['date_title_c']);
 
 		$blowup_user['post_title_f'] = $_POST['post_title_f'];
-		$blowup_user['post_title_s'] = dcThemeConfig::adjustFontSize($_POST['post_title_s']);
-		$blowup_user['post_title_c'] = dcThemeConfig::adjustColor($_POST['post_title_c']);
-		$blowup_user['post_comment_c'] = dcThemeConfig::adjustColor($_POST['post_comment_c']);
-		$blowup_user['post_commentmy_c'] = dcThemeConfig::adjustColor($_POST['post_commentmy_c']);
+		$blowup_user['post_title_s'] = blowupConfig::adjustFontSize($_POST['post_title_s']);
+		$blowup_user['post_title_c'] = blowupConfig::adjustColor($_POST['post_title_c']);
+		$blowup_user['post_comment_c'] = blowupConfig::adjustColor($_POST['post_comment_c']);
+		$blowup_user['post_commentmy_c'] = blowupConfig::adjustColor($_POST['post_commentmy_c']);
 
 
 		$blowup_user['footer_f'] = $_POST['footer_f'];
-		$blowup_user['footer_s'] = dcThemeConfig::adjustFontSize($_POST['footer_s']);
-		$blowup_user['footer_c'] = dcThemeConfig::adjustColor($_POST['footer_c']);
-		$blowup_user['footer_l_c'] = dcThemeConfig::adjustColor($_POST['footer_l_c']);
-		$blowup_user['footer_bg_c'] = dcThemeConfig::adjustColor($_POST['footer_bg_c']);
-
-
-		$blowup_user['extra_css'] = dcThemeConfig::cleanCSS($_POST['extra_css']);
+		$blowup_user['footer_s'] = blowupConfig::adjustFontSize($_POST['footer_s']);
+		$blowup_user['footer_c'] = blowupConfig::adjustColor($_POST['footer_c']);
+		$blowup_user['footer_l_c'] = blowupConfig::adjustColor($_POST['footer_l_c']);
+		$blowup_user['footer_bg_c'] = blowupConfig::adjustColor($_POST['footer_bg_c']);
+
+
+		$blowup_user['extra_css'] = blowupConfig::cleanCSS($_POST['extra_css']);
 
 		if ($can_write_images)
@@ -183,9 +183,9 @@
 			$blowup_user['top_image'] = in_array($_POST['top_image'],$top_images) ? $_POST['top_image'] : 'default';
 
-			$blowup_user['body_bg_c'] = dcThemeConfig::adjustColor($_POST['body_bg_c']);
+			$blowup_user['body_bg_c'] = blowupConfig::adjustColor($_POST['body_bg_c']);
 			$blowup_user['body_bg_g'] = in_array($_POST['body_bg_g'],$gradient_types) ? $_POST['body_bg_g'] : '';
-			$blowup_user['post_comment_bg_c'] = dcThemeConfig::adjustColor($_POST['post_comment_bg_c']);
-			$blowup_user['post_commentmy_bg_c'] = dcThemeConfig::adjustColor($_POST['post_commentmy_bg_c']);
-			$blowup_user['prelude_c'] = dcThemeConfig::adjustColor($_POST['prelude_c']);
+			$blowup_user['post_comment_bg_c'] = blowupConfig::adjustColor($_POST['post_comment_bg_c']);
+			$blowup_user['post_commentmy_bg_c'] = blowupConfig::adjustColor($_POST['post_commentmy_bg_c']);
+			$blowup_user['prelude_c'] = blowupConfig::adjustColor($_POST['prelude_c']);
 			blowupConfig::createImages($blowup_user,$uploaded);
 		}
Index: plugins/blowupConfig/lib/class.blowup.config.php
===================================================================
--- plugins/blowupConfig/lib/class.blowup.config.php	(revision 2659)
+++ plugins/blowupConfig/lib/class.blowup.config.php	(revision 2566)
@@ -14,7 +14,4 @@
 class blowupConfig
 {
-	protected static $css_folder = 'blowup-css';
-	protected static $img_folder = 'blowup-images';
-
 	protected static $fonts = array(
 		'sans-serif' => array(
@@ -93,62 +90,97 @@
 	}
 
+	public static function adjustFontSize($s)
+	{
+		if (preg_match('/^([0-9.]+)\s*(%|pt|px|em|ex)?$/',$s,$m)) {
+			if (empty($m[2])) {
+				$m[2] = 'px';
+			}
+			return $m[1].$m[2];
+		}
+
+		return null;
+	}
+
+	public static function adjustPosition($p)
+	{
+		if (!preg_match('/^[0-9]+(:[0-9]+)?$/',$p)) {
+			return null;
+		}
+
+		$p = explode(':',$p);
+
+		return $p[0].(count($p) == 1 ? ':0' : ':'.$p[1]);
+	}
+
+	public static function adjustColor($c)
+	{
+		if ($c === '') {
+			return '';
+		}
+
+		$c = strtoupper($c);
+
+		if (preg_match('/^[A-F0-9]{3,6}$/',$c)) {
+			$c = '#'.$c;
+		}
+
+		if (preg_match('/^#[A-F0-9]{6}$/',$c)) {
+			return $c;
+		}
+
+		if (preg_match('/^#[A-F0-9]{3,}$/',$c)) {
+			return '#'.substr($c,1,1).substr($c,1,1).substr($c,2,1).substr($c,2,1).substr($c,3,1).substr($c,3,1);
+		}
+
+		return '';
+	}
+
+	public static function cleanCSS($css)
+	{
+		// TODO ?
+		return $css;
+	}
+
 	public static function cssPath()
 	{
-		return dcThemeConfig::cssPath(self::$css_folder);
+		global $core;
+		return path::real($core->blog->public_path).'/blowup-css';
 	}
 
 	public static function cssURL()
 	{
-		return dcThemeConfig::cssURL(self::$css_folder);
+		global $core;
+		return $core->blog->settings->system->public_url.'/blowup-css';
 	}
 
 	public static function canWriteCss($create=false)
 	{
-		return dcThemeConfig::canWriteCss(self::$css_folder,$create);
-	}
-
-	protected static function backgroundImg(&$css,$selector,$value,$image)
-	{
-		dcThemeConfig::backgroundImg(self::$img_folder,$css,$selector,$value,$image);
-	}
-
-	private static function writeCss($theme,$css)
-	{
-		dcThemeConfig::writeCSS(self::$css_folder,$theme,$css);
-	}
-
-	public static function dropCss($theme)
-	{
-		dcThemeConfig::dropCss(self::$css_folder,$theme);
-	}
-
-	public static function publicCssUrlHelper()
-	{
-		return dcThemeConfig::publicCssUrlHelper(self::$css_folder);
-	}
-
-	public static function imagesPath()
-	{
-		return dcThemeConfig::imagesPath(self::$img_folder);
-	}
-
-	public static function imagesURL()
-	{
-		return dcThemeConfig::imagesURL(self::$img_folder);
-	}
-
-	public static function canWriteImages($create=false)
-	{
-		return dcThemeConfig::canWriteImages(self::$img_folder,$create);
-	}
-
-	public static function uploadImage($f)
-	{
-		return dcThemeConfig::uploadImage(self::$img_folder,$f,800);
-	}
-
-	public static function dropImage($img)
-	{
-		dcThemeConfig::dropImage(self::$img_folder,$img);
+		global $core;
+
+		$public = path::real($core->blog->public_path);
+		$css = self::cssPath();
+
+		if (!is_dir($public)) {
+			$core->error->add(__('The \'public\' directory does not exist.'));
+			return false;
+		}
+
+		if (!is_dir($css)) {
+			if (!is_writable($public)) {
+				$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public'));
+				return false;
+			}
+			if ($create) {
+				files::makeDir($css);
+			}
+			return true;
+		}
+
+		if (!is_writable($css)) {
+			$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public/blowup-css'));
+			return false;
+		}
+
+		return true;
 	}
 
@@ -173,18 +205,18 @@
 		/* Properties
 		---------------------------------------------- */
-		dcThemeConfig::prop($css,'body','background-color',$s['body_bg_c']);
-
-		dcThemeConfig::prop($css,'body','color',$s['body_txt_c']);
-		dcThemeConfig::prop($css,'.post-tags li a:link, .post-tags li a:visited, .post-info-co a:link, .post-info-co a:visited','color',$s['body_txt_c']);
-		dcThemeConfig::prop($css,'#page','font-size',$s['body_txt_s']);
-		dcThemeConfig::prop($css,'body','font-family',self::fontDef($s['body_txt_f']));
-
-		dcThemeConfig::prop($css,'.post-content, .post-excerpt, #comments dd, #pings dd, dd.comment-preview','line-height',$s['body_line_height']);
+		self::prop($css,'body','background-color',$s['body_bg_c']);
+
+		self::prop($css,'body','color',$s['body_txt_c']);
+		self::prop($css,'.post-tags li a:link, .post-tags li a:visited, .post-info-co a:link, .post-info-co a:visited','color',$s['body_txt_c']);
+		self::prop($css,'#page','font-size',$s['body_txt_s']);
+		self::prop($css,'body','font-family',self::fontDef($s['body_txt_f']));
+
+		self::prop($css,'.post-content, .post-excerpt, #comments dd, #pings dd, dd.comment-preview','line-height',$s['body_line_height']);
 
 		if (!$s['blog_title_hide'])
 		{
-			dcThemeConfig::prop($css,'#top h1 a','color',$s['blog_title_c']);
-			dcThemeConfig::prop($css,'#top h1','font-size',$s['blog_title_s']);
-			dcThemeConfig::prop($css,'#top h1','font-family',self::fontDef($s['blog_title_f']));
+			self::prop($css,'#top h1 a','color',$s['blog_title_c']);
+			self::prop($css,'#top h1','font-size',$s['blog_title_s']);
+			self::prop($css,'#top h1','font-family',self::fontDef($s['blog_title_f']));
 
 			if ($s['blog_title_a'] == 'right' || $s['blog_title_a'] == 'left') {
@@ -205,6 +237,6 @@
 		else
 		{
-			dcThemeConfig::prop($css,'#top h1 span','text-indent','-5000px');
-			dcThemeConfig::prop($css,'#top h1','top','0px');
+			self::prop($css,'#top h1 span','text-indent','-5000px');
+			self::prop($css,'#top h1','top','0px');
 			$css['#top h1 a'] = array(
 				'display' => 'block',
@@ -213,63 +245,63 @@
 			);
 		}
-		dcThemeConfig::prop($css,'#top','height',$s['top_height']);
-
-		dcThemeConfig::prop($css,'.day-date','color',$s['date_title_c']);
-		dcThemeConfig::prop($css,'.day-date','font-family',self::fontDef($s['date_title_f']));
-		dcThemeConfig::prop($css,'.day-date','font-size',$s['date_title_s']);
-
-		dcThemeConfig::prop($css,'a','color',$s['body_link_c']);
-		dcThemeConfig::prop($css,'a:visited','color',$s['body_link_v_c']);
-		dcThemeConfig::prop($css,'a:hover, a:focus, a:active','color',$s['body_link_f_c']);
-
-		dcThemeConfig::prop($css,'#comment-form input, #comment-form textarea','color',$s['body_link_c']);
-		dcThemeConfig::prop($css,'#comment-form input.preview','color',$s['body_link_c']);
-		dcThemeConfig::prop($css,'#comment-form input.preview:hover','background',$s['body_link_f_c']);
-		dcThemeConfig::prop($css,'#comment-form input.preview:hover','border-color',$s['body_link_f_c']);
-		dcThemeConfig::prop($css,'#comment-form input.submit','color',$s['body_link_c']);
-		dcThemeConfig::prop($css,'#comment-form input.submit:hover','background',$s['body_link_f_c']);
-		dcThemeConfig::prop($css,'#comment-form input.submit:hover','border-color',$s['body_link_f_c']);
-
-		dcThemeConfig::prop($css,'#sidebar','font-family',self::fontDef($s['sidebar_text_f']));
-		dcThemeConfig::prop($css,'#sidebar','font-size',$s['sidebar_text_s']);
-		dcThemeConfig::prop($css,'#sidebar','color',$s['sidebar_text_c']);
-
-		dcThemeConfig::prop($css,'#sidebar h2','font-family',self::fontDef($s['sidebar_title_f']));
-		dcThemeConfig::prop($css,'#sidebar h2','font-size',$s['sidebar_title_s']);
-		dcThemeConfig::prop($css,'#sidebar h2','color',$s['sidebar_title_c']);
-
-		dcThemeConfig::prop($css,'#sidebar h3','font-family',self::fontDef($s['sidebar_title2_f']));
-		dcThemeConfig::prop($css,'#sidebar h3','font-size',$s['sidebar_title2_s']);
-		dcThemeConfig::prop($css,'#sidebar h3','color',$s['sidebar_title2_c']);
-
-		dcThemeConfig::prop($css,'#sidebar ul','border-top-color',$s['sidebar_line_c']);
-		dcThemeConfig::prop($css,'#sidebar li','border-bottom-color',$s['sidebar_line_c']);
-		dcThemeConfig::prop($css,'#topnav ul','border-bottom-color',$s['sidebar_line_c']);
-
-		dcThemeConfig::prop($css,'#sidebar li a','color',$s['sidebar_link_c']);
-		dcThemeConfig::prop($css,'#sidebar li a:visited','color',$s['sidebar_link_v_c']);
-		dcThemeConfig::prop($css,'#sidebar li a:hover, #sidebar li a:focus, #sidebar li a:active','color',$s['sidebar_link_f_c']);
-		dcThemeConfig::prop($css,'#search input','color',$s['sidebar_link_c']);
-		dcThemeConfig::prop($css,'#search .submit','color',$s['sidebar_link_c']);
-		dcThemeConfig::prop($css,'#search .submit:hover','background',$s['sidebar_link_f_c']);
-		dcThemeConfig::prop($css,'#search .submit:hover','border-color',$s['sidebar_link_f_c']);
-
-		dcThemeConfig::prop($css,'.post-title','color',$s['post_title_c']);
-		dcThemeConfig::prop($css,'.post-title a, .post-title a:visited','color',$s['post_title_c']);
-		dcThemeConfig::prop($css,'.post-title','font-family',self::fontDef($s['post_title_f']));
-		dcThemeConfig::prop($css,'.post-title','font-size',$s['post_title_s']);
-
-		dcThemeConfig::prop($css,'#comments dd','background-color',$s['post_comment_bg_c']);
-		dcThemeConfig::prop($css,'#comments dd','color',$s['post_comment_c']);
-		dcThemeConfig::prop($css,'#comments dd.me','background-color',$s['post_commentmy_bg_c']);
-		dcThemeConfig::prop($css,'#comments dd.me','color',$s['post_commentmy_c']);
-
-		dcThemeConfig::prop($css,'#prelude, #prelude a','color',$s['prelude_c']);
-
-		dcThemeConfig::prop($css,'#footer p','background-color',$s['footer_bg_c']);
-		dcThemeConfig::prop($css,'#footer p','color',$s['footer_c']);
-		dcThemeConfig::prop($css,'#footer p','font-size',$s['footer_s']);
-		dcThemeConfig::prop($css,'#footer p','font-family',self::fontDef($s['footer_f']));
-		dcThemeConfig::prop($css,'#footer p a','color',$s['footer_l_c']);
+		self::prop($css,'#top','height',$s['top_height']);
+
+		self::prop($css,'.day-date','color',$s['date_title_c']);
+		self::prop($css,'.day-date','font-family',self::fontDef($s['date_title_f']));
+		self::prop($css,'.day-date','font-size',$s['date_title_s']);
+
+		self::prop($css,'a','color',$s['body_link_c']);
+		self::prop($css,'a:visited','color',$s['body_link_v_c']);
+		self::prop($css,'a:hover, a:focus, a:active','color',$s['body_link_f_c']);
+
+		self::prop($css,'#comment-form input, #comment-form textarea','color',$s['body_link_c']);
+		self::prop($css,'#comment-form input.preview','color',$s['body_link_c']);
+		self::prop($css,'#comment-form input.preview:hover','background',$s['body_link_f_c']);
+		self::prop($css,'#comment-form input.preview:hover','border-color',$s['body_link_f_c']);
+		self::prop($css,'#comment-form input.submit','color',$s['body_link_c']);
+		self::prop($css,'#comment-form input.submit:hover','background',$s['body_link_f_c']);
+		self::prop($css,'#comment-form input.submit:hover','border-color',$s['body_link_f_c']);
+
+		self::prop($css,'#sidebar','font-family',self::fontDef($s['sidebar_text_f']));
+		self::prop($css,'#sidebar','font-size',$s['sidebar_text_s']);
+		self::prop($css,'#sidebar','color',$s['sidebar_text_c']);
+
+		self::prop($css,'#sidebar h2','font-family',self::fontDef($s['sidebar_title_f']));
+		self::prop($css,'#sidebar h2','font-size',$s['sidebar_title_s']);
+		self::prop($css,'#sidebar h2','color',$s['sidebar_title_c']);
+
+		self::prop($css,'#sidebar h3','font-family',self::fontDef($s['sidebar_title2_f']));
+		self::prop($css,'#sidebar h3','font-size',$s['sidebar_title2_s']);
+		self::prop($css,'#sidebar h3','color',$s['sidebar_title2_c']);
+
+		self::prop($css,'#sidebar ul','border-top-color',$s['sidebar_line_c']);
+		self::prop($css,'#sidebar li','border-bottom-color',$s['sidebar_line_c']);
+		self::prop($css,'#topnav ul','border-bottom-color',$s['sidebar_line_c']);
+
+		self::prop($css,'#sidebar li a','color',$s['sidebar_link_c']);
+		self::prop($css,'#sidebar li a:visited','color',$s['sidebar_link_v_c']);
+		self::prop($css,'#sidebar li a:hover, #sidebar li a:focus, #sidebar li a:active','color',$s['sidebar_link_f_c']);
+		self::prop($css,'#search input','color',$s['sidebar_link_c']);
+		self::prop($css,'#search .submit','color',$s['sidebar_link_c']);
+		self::prop($css,'#search .submit:hover','background',$s['sidebar_link_f_c']);
+		self::prop($css,'#search .submit:hover','border-color',$s['sidebar_link_f_c']);
+
+		self::prop($css,'.post-title','color',$s['post_title_c']);
+		self::prop($css,'.post-title a, .post-title a:visited','color',$s['post_title_c']);
+		self::prop($css,'.post-title','font-family',self::fontDef($s['post_title_f']));
+		self::prop($css,'.post-title','font-size',$s['post_title_s']);
+
+		self::prop($css,'#comments dd','background-color',$s['post_comment_bg_c']);
+		self::prop($css,'#comments dd','color',$s['post_comment_c']);
+		self::prop($css,'#comments dd.me','background-color',$s['post_commentmy_bg_c']);
+		self::prop($css,'#comments dd.me','color',$s['post_commentmy_c']);
+
+		self::prop($css,'#prelude, #prelude a','color',$s['prelude_c']);
+
+		self::prop($css,'#footer p','background-color',$s['footer_bg_c']);
+		self::prop($css,'#footer p','color',$s['footer_c']);
+		self::prop($css,'#footer p','font-size',$s['footer_s']);
+		self::prop($css,'#footer p','font-family',self::fontDef($s['footer_f']));
+		self::prop($css,'#footer p a','color',$s['footer_l_c']);
 
 		/* Images
@@ -311,4 +343,121 @@
 	}
 
+	protected static function prop(&$css,$selector,$prop,$value)
+	{
+		if ($value) {
+			$css[$selector][$prop] = $value;
+		}
+	}
+
+	protected static function backgroundImg(&$css,$selector,$value,$image)
+	{
+		$file = self::imagesPath().'/'.$image;
+		if ($value && file_exists($file)){
+			$css[$selector]['background-image'] = 'url('.self::imagesURL().'/'.$image.')';
+		}
+	}
+
+	private static function writeCss($theme,$css)
+	{
+		file_put_contents(self::cssPath().'/'.$theme.'.css', $css);
+	}
+
+	public static function dropCss($theme)
+	{
+		$file = path::real(self::cssPath().'/'.$theme.'.css');
+		if (is_writable(dirname($file))) {
+			@unlink($file);
+		}
+	}
+
+	public static function publicCssUrlHelper()
+	{
+		$theme = $GLOBALS['core']->blog->settings->system->theme;
+		$url = blowupConfig::cssURL();
+		$path = blowupConfig::cssPath();
+
+		if (file_exists($path.'/'.$theme.'.css')) {
+			return $url.'/'.$theme.'.css';
+		}
+
+		return null;
+	}
+
+	public static function imagesPath()
+	{
+		global $core;
+		return path::real($core->blog->public_path).'/blowup-images';
+	}
+
+	public static function imagesURL()
+	{
+		global $core;
+		return $core->blog->settings->system->public_url.'/blowup-images';
+	}
+
+	public static function canWriteImages($create=false)
+	{
+		global $core;
+
+		$public = path::real($core->blog->public_path);
+		$imgs = self::imagesPath();
+
+		if (!function_exists('imagecreatetruecolor') || !function_exists('imagepng') || !function_exists('imagecreatefrompng')) {
+			$core->error->add(__('At least one of the following functions is not available: '.
+				'imagecreatetruecolor, imagepng & imagecreatefrompng.'));
+			return false;
+		}
+
+		if (!is_dir($public)) {
+			$core->error->add(__('The \'public\' directory does not exist.'));
+			return false;
+		}
+
+		if (!is_dir($imgs)) {
+			if (!is_writable($public)) {
+				$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public'));
+				return false;
+			}
+			if ($create) {
+				files::makeDir($imgs);
+			}
+			return true;
+		}
+
+		if (!is_writable($imgs)) {
+			$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public/blowup-images'));
+			return false;
+		}
+
+		return true;
+	}
+
+	public static function uploadImage($f)
+	{
+		if (!self::canWriteImages(true)) {
+			throw new Exception(__('Unable to create images.'));
+		}
+
+		$name = $f['name'];
+		$type = files::getMimeType($name);
+
+		if ($type != 'image/jpeg' && $type != 'image/png') {
+			throw new Exception(__('Invalid file type.'));
+		}
+
+		$dest = self::imagesPath().'/uploaded'.($type == 'image/png' ? '.png' : '.jpg');
+
+		if (@move_uploaded_file($f['tmp_name'],$dest) === false) {
+			throw new Exception(__('An error occurred while writing the file.'));
+		}
+
+		$s = getimagesize($dest);
+		if ($s[0] != 800) {
+			throw new Exception(__('Uploaded image is not 800 pixels wide.'));
+		}
+
+		return $dest;
+	}
+
 	public static function createImages(&$config,$uploaded)
 	{
@@ -361,7 +510,7 @@
 		self::dropImage(basename($comment_b));
 
-		$body_color = dcThemeConfig::adjustColor($body_color);
-		$prelude_color = dcThemeConfig::adjustColor($prelude_color);
-		$comment_color = dcThemeConfig::adjustColor($comment_color);
+		$body_color = self::adjustColor($body_color);
+		$prelude_color = self::adjustColor($prelude_color);
+		$comment_color = self::adjustColor($comment_color);
 
 		if ($top_image || $body_color || $gradient != 'light' || $prelude_color || $uploaded)
@@ -508,3 +657,15 @@
 	}
 
+	public static function dropImage($img)
+	{
+		$img = path::real(self::imagesPath().'/'.$img);
+		if (is_writable(dirname($img))) {
+			@unlink($img);
+			@unlink(dirname($img).'/.'.basename($img,'.png').'_sq.jpg');
+			@unlink(dirname($img).'/.'.basename($img,'.png').'_m.jpg');
+			@unlink(dirname($img).'/.'.basename($img,'.png').'_s.jpg');
+			@unlink(dirname($img).'/.'.basename($img,'.png').'_sq.jpg');
+			@unlink(dirname($img).'/.'.basename($img,'.png').'_t.jpg');
+		}
+	}
 }
Index: lugins/dcLegacyEditor/_admin.php
===================================================================
--- plugins/dcLegacyEditor/_admin.php	(revision 2679)
+++ 	(revision )
@@ -1,34 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-if (!defined('DC_CONTEXT_ADMIN')) { return; }
-
-$_menu['Plugins']->addItem('dcLegacyEditor',
-'plugin.php?p=dcLegacyEditor',
-'index.php?pf=dcLegacyEditor/imgs/icon.png',
-preg_match('/plugin.php\?p=dcLegacyEditor/', $_SERVER['REQUEST_URI']),
-$core->auth->check('admin,contentadmin', $core->blog->id)
-);
-
-$self_ns = $core->blog->settings->addNamespace('dclegacyeditor');
-
-if ($self_ns->active) {
-	$wiki2xhtml = new wiki2xhtml();
-
-	$core->addEditorFormater('dcLegacyEditor','xhtml',create_function('$s','return $s;'));
-	$core->addEditorFormater('dcLegacyEditor','wiki',array($wiki2xhtml,'transform'));
-
-	$core->addBehavior('adminPostEditor',array('dcLegacyEditorBehaviors','adminPostEditor'));
-	$core->addBehavior('adminPopupMedia',array('dcLegacyEditorBehaviors','adminPopupMedia'));
-	$core->addBehavior('adminPopupLink',array('dcLegacyEditorBehaviors','adminPopupLink'));
-	$core->addBehavior('adminPopupPosts',array('dcLegacyEditorBehaviors','adminPopupPosts'));
-}
Index: lugins/dcLegacyEditor/_define.php
===================================================================
--- plugins/dcLegacyEditor/_define.php	(revision 2614)
+++ 	(revision )
@@ -1,20 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-if (!defined('DC_RC_PATH')) { return; }
-
-$this->registerModule(
-	/* Name */			"dcLegacyEditor",
-	/* Description*/	"dotclear legacy editor",
-	/* Author */		"dotclear Team",
-	/* Version */		'0.1.0',
-	/* Options */       array('permissions' => 'admin', 'type' => 'plugin')
-);
Index: lugins/dcLegacyEditor/_install.php
===================================================================
--- plugins/dcLegacyEditor/_install.php	(revision 2706)
+++ 	(revision )
@@ -1,25 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-if (!defined('DC_CONTEXT_ADMIN')) { return; }
-
-$version = $core->plugins->moduleInfo('dcLegacyEditor', 'version');
-if (version_compare($core->getVersion('dcLegacyEditor'), $version,'>=')) {
-  return;
-}
-
-$settings = $core->blog->settings;
-$settings->addNamespace('dclegacyeditor');
-$settings->dclegacyeditor->put('active', true, 'boolean', 'dcLegacyEditor plugin activated ?', false);
-
-$core->setVersion('dcLegacyEditor', $version);
-return true;
Index: lugins/dcLegacyEditor/_prepend.php
===================================================================
--- plugins/dcLegacyEditor/_prepend.php	(revision 2614)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-if (!defined('DC_RC_PATH')) { return; }
-
-$__autoload['dcLegacyEditorBehaviors'] = dirname(__FILE__).'/inc/dc.legacy.editor.behaviors.php';
Index: lugins/dcLegacyEditor/css/jsToolBar/jsToolBar.css
===================================================================
--- plugins/dcLegacyEditor/css/jsToolBar/jsToolBar.css	(revision 2614)
+++ 	(revision )
@@ -1,184 +1,0 @@
-.jstEditor {
-	border-width : 0 1px 1px 1px;
-	border-style : solid;
-	border-color : #ddd;
-	background : #f7f7f7;
-}
-.jstEditor textarea, .jstEditor iframe {
-	-webkit-box-sizing: border-box;
-	-moz-box-sizing: border-box;
-	box-sizing: border-box;
-	margin: 0;
-	border: 1px solid #fbfbfb;
-  	width: 100%;
-  	padding: .5em 0 0 0;
-  	min-height: 100px;
-}
-.jstHandle {
-	height: 8px;
-	background: #ccc url(?pf=dcLegacyEditor/css/jsToolBar/resize.png) no-repeat center center;
-	font-size: 0.1em;
-	cursor: s-resize;
-	border-color: #ccc #ccc #ccc #000;
-	border-width: 0 1px 1px 1px;
-	border-style: solid;
-}
-.jstEditor textarea:focus, .jstEditor iframe:focus {
-	border-color: #bee74b;
-}
-.jstElements {
-	-webkit-box-sizing: border-box;
-	-moz-box-sizing: border-box;
-	box-sizing: border-box;
-	padding: 0 32px 0 1rem;
-	border: 1px solid #dfdfdf;
-	overflow: hidden;
-	background: #f5f5f5;
-	border-radius: 4px 4px 0 0;
-	position: relative;
-	line-height: 30px;
-}
-.jstElements select, .jstElements button {
-	vertical-align: middle;
-}
-.jstElements select {
-	width: 12em;
-	margin-right: .6rem;
-	border: 1px solid #ddd;
-}
-.jstElements button {
-	width: 30px;
-	height: 28px;
-	border-style: solid;
-	border-width: 1px;
-	margin-left: 2px;
-	margin-bottom: 2px;
-	border-color: #e5e5e5 #ccc #ccc #e5e5e5;
-	background-color : #f7f7f7;
-	background-position : 50% 50%;
-	background-repeat: no-repeat;
-}
-.jstElements button:hover, .jstElements button:focus {
-	border-color : #ddd;
-	background-color: #fff;
-}
-.jstElements button span {
-	display: none;
-}
-.jstElements span {
-	display : inline-block;
-	vertical-align: top;
-}
-span.jstSpacer {
-	width : 8px;
-}
-.jstSwitcher {
-	display: block;
-	list-style: none;
-	margin: 0;
-	padding: 0 0 5px 0;
-	background: #dfdfdf;
-	border-top: 1px solid #999;
-}
-.jstSwitcher li {
-	display: inline;
-	margin: 0 0 0 5px;
-	padding: 2px 8px;
-}
-.jstSwitcher li.jstSwitcherCurrent {
-	color: #fff;
-	background: #677374;
-	border-radius: 0 0 2px 2px;
-}
-.jstSwitcher a {
-	font-weight: normal;
-	border-bottom: none !important;
-}
-
-/* Buttons
--------------------------------------------------------- */
-button.jstb_strong {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_strong.png);
-}
-button.jstb_em {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_em.png);
-}
-button.jstb_ins {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_ins.png);
-}
-button.jstb_del {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_del.png);
-}
-button.jstb_quote {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_quote.png);
-}
-button.jstb_code {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_code.png);
-}
-button.jstb_paragraph {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_paragraph.png);
-}
-button.jstb_br {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_br.png);
-}
-button.jstb_blockquote {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_bquote.png);
-}
-button.jstb_pre {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_pre.png);
-}
-button.jstb_ul {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_ul.png);
-}
-button.jstb_ol {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_ol.png);
-}
-button.jstb_link {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_link.png);
-}
-button.jstb_img {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_img.png);
-}
-button.jstb_img_select {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_img_select.png);
-}
-button.jstb_post_link {
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_post.png);
-}
-button.jstb_removeFormat {
-	background-color: #e5e5e5;
-	background-image: url(?pf=dcLegacyEditor/css/jsToolBar/bt_clean.png);
-	position: absolute;
-	right: 2px;
-	top: 1px;
-	border-color: #ccc;
-}
-
-/* WYSIWYG Iframe */
-.wysiwygIframe {
-	border-width : 1px;
-	border-style : solid;
-	border-color : #000 #ccc #ccc #000;
-	width : 100%;
-}
-
-/* WYSIWYG Document */
-body.wysiwygDoc {
-	font: 12px "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;
-	color : #000;
-	background: #f9f9f9;
-	margin: 0;
-	padding : 2px;
-	border: none;
-}
-.wysiwygDoc pre, .wysiwygDoc code, .wysiwygDoc kbd, .wysiwygDoc samp {
-	font-family:"Courier New",Courier,monospace;
-	font-size : 1.1em;
-}
-.wysiwygDoc code {
-	color : #666;
-	font-weight : bold;
-}
-body.wysiwygDoc  > p:first-child {
-	margin-top: 0;
-}
Index: lugins/dcLegacyEditor/inc/dc.legacy.editor.behaviors.php
===================================================================
--- plugins/dcLegacyEditor/inc/dc.legacy.editor.behaviors.php	(revision 2681)
+++ 	(revision )
@@ -1,123 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-class dcLegacyEditorBehaviors
-{
-	protected static $p_url = 'index.php?pf=dcLegacyEditor';
-
-	public static function adminPostEditor($editor='') {
-        global $core;
-
-		if (!$core->auth->getOption('editor') || $core->auth->getOption('editor')!='dcLegacyEditor') {return;}
-
-		return
-			self::jsToolBar().
-			dcPage::jsLoad(self::$p_url.'/js/_post_editor.js');
-	}
-
-	public static function adminPopupMedia() {
-		return dcPage::jsLoad(self::$p_url.'/js/jsToolBar/popup_media.js');
-	}
-
-	public static function adminPopupLink() {
-		return dcPage::jsLoad(self::$p_url.'/js/jsToolBar/popup_link.js');
-	}
-
-	public static function adminPopupPosts() {
-		return dcPage::jsLoad(self::$p_url.'/js/jsToolBar/popup_posts.js');
-	}
-
-	protected static function jsToolBar() {
-		$res =
-		'<link rel="stylesheet" type="text/css" href="'.self::$p_url.'/css/jsToolBar/jsToolBar.css" />'.
-		'<script type="text/javascript" src="'.self::$p_url.'/js/jsToolBar/jsToolBar.js"></script>';
-
-		if (isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('enable_wysiwyg')) {
-			$res .= '<script type="text/javascript" src="'.self::$p_url.'/js/jsToolBar/jsToolBar.wysiwyg.js"></script>';
-		}
-
-		$res .=
-		'<script type="text/javascript" src="'.self::$p_url.'/js/jsToolBar/jsToolBar.dotclear.js"></script>'.
-		'<script type="text/javascript">'."\n".
-		"//<![CDATA[\n".
-		"jsToolBar.prototype.dialog_url = 'popup.php'; ".
-		"jsToolBar.prototype.iframe_css = '".
-		'body{'.
-		'font: 12px "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;'.
-		'color : #000;'.
-		'background: #f9f9f9;'.
-		'margin: 0;'.
-		'padding : 2px;'.
-		'border: none;'.
-		(l10n::getTextDirection($GLOBALS['_lang']) == 'rtl' ? 'direction:rtl;' : '').
-		'}'.
-		'pre, code, kbd, samp {'.
-		'font-family:"Courier New",Courier,monospace;'.
-		'font-size : 1.1em;'.
-		'}'.
-		'code {'.
-		'color : #666;'.
-		'font-weight : bold;'.
-		'}'.
-		'body > p:first-child {'.
-		'margin-top: 0;'.
-		'}'.
-		"'; ".
-		"jsToolBar.prototype.base_url = '".html::escapeJS($GLOBALS['core']->blog->host)."'; ".
-		"jsToolBar.prototype.switcher_visual_title = '".html::escapeJS(__('visual'))."'; ".
-		"jsToolBar.prototype.switcher_source_title = '".html::escapeJS(__('source'))."'; ".
-		"jsToolBar.prototype.legend_msg = '".
-		html::escapeJS(__('You can use the following shortcuts to format your text.'))."'; ".
-		"jsToolBar.prototype.elements.blocks.options.none = '".html::escapeJS(__('-- none --'))."'; ".
-		"jsToolBar.prototype.elements.blocks.options.nonebis = '".html::escapeJS(__('-- block format --'))."'; ".
-		"jsToolBar.prototype.elements.blocks.options.p = '".html::escapeJS(__('Paragraph'))."'; ".
-		"jsToolBar.prototype.elements.blocks.options.h1 = '".html::escapeJS(__('Level 1 header'))."'; ".
-		"jsToolBar.prototype.elements.blocks.options.h2 = '".html::escapeJS(__('Level 2 header'))."'; ".
-		"jsToolBar.prototype.elements.blocks.options.h3 = '".html::escapeJS(__('Level 3 header'))."'; ".
-		"jsToolBar.prototype.elements.blocks.options.h4 = '".html::escapeJS(__('Level 4 header'))."'; ".
-		"jsToolBar.prototype.elements.blocks.options.h5 = '".html::escapeJS(__('Level 5 header'))."'; ".
-		"jsToolBar.prototype.elements.blocks.options.h6 = '".html::escapeJS(__('Level 6 header'))."'; ".
-		"jsToolBar.prototype.elements.strong.title = '".html::escapeJS(__('Strong emphasis'))."'; ".
-		"jsToolBar.prototype.elements.em.title = '".html::escapeJS(__('Emphasis'))."'; ".
-		"jsToolBar.prototype.elements.ins.title = '".html::escapeJS(__('Inserted'))."'; ".
-		"jsToolBar.prototype.elements.del.title = '".html::escapeJS(__('Deleted'))."'; ".
-		"jsToolBar.prototype.elements.quote.title = '".html::escapeJS(__('Inline quote'))."'; ".
-		"jsToolBar.prototype.elements.code.title = '".html::escapeJS(__('Code'))."'; ".
-		"jsToolBar.prototype.elements.br.title = '".html::escapeJS(__('Line break'))."'; ".
-		"jsToolBar.prototype.elements.blockquote.title = '".html::escapeJS(__('Blockquote'))."'; ".
-		"jsToolBar.prototype.elements.pre.title = '".html::escapeJS(__('Preformated text'))."'; ".
-		"jsToolBar.prototype.elements.ul.title = '".html::escapeJS(__('Unordered list'))."'; ".
-		"jsToolBar.prototype.elements.ol.title = '".html::escapeJS(__('Ordered list'))."'; ".
-
-		"jsToolBar.prototype.elements.link.title = '".html::escapeJS(__('Link'))."'; ".
-		"jsToolBar.prototype.elements.link.href_prompt = '".html::escapeJS(__('URL?'))."'; ".
-		"jsToolBar.prototype.elements.link.hreflang_prompt = '".html::escapeJS(__('Language?'))."'; ".
-
-		"jsToolBar.prototype.elements.img.title = '".html::escapeJS(__('External image'))."'; ".
-		"jsToolBar.prototype.elements.img.src_prompt = '".html::escapeJS(__('URL?'))."'; ".
-
-		"jsToolBar.prototype.elements.img_select.title = '".html::escapeJS(__('Media chooser'))."'; ".
-		"jsToolBar.prototype.elements.post_link.title = '".html::escapeJS(__('Link to an entry'))."'; ".
-		"jsToolBar.prototype.elements.removeFormat = jsToolBar.prototype.elements.removeFormat || {}; ".
-		"jsToolBar.prototype.elements.removeFormat.title = '".html::escapeJS(__('Remove text formating'))."'; ";
-
-		if (!$GLOBALS['core']->auth->check('media,media_admin',$GLOBALS['core']->blog->id)) {
-			$res .= "jsToolBar.prototype.elements.img_select.disabled = true;\n";
-		}
-
-		$res .=
-		"\n//]]>\n".
-		"</script>\n";
-
-		return $res;
-	}
-}
Index: lugins/dcLegacyEditor/index.php
===================================================================
--- plugins/dcLegacyEditor/index.php	(revision 2614)
+++ 	(revision )
@@ -1,32 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-if (!defined('DC_CONTEXT_ADMIN')) { return; }
-
-$is_super_admin = $core->auth->isSuperAdmin();
-$core->blog->settings->addNameSpace('dclegacyeditor');
-$dclegacyeditor_active = $core->blog->settings->dclegacyeditor->active;
-
-if (!empty($_POST['saveconfig'])) {
-    try {
-        $dclegacyeditor_active = (empty($_POST['dclegacyeditor_active']))?false:true;
-        $core->blog->settings->dclegacyeditor->put('active', $dclegacyeditor_active, 'boolean');
-
-        dcPage::addSuccessNotice(__('The configuration has been updated.'));
-        http::redirect($p_url);
-    } catch(Exception $e) {
-		$core->error->add($e->getMessage());
-    }
-}
-
-include dirname(__FILE__).'/tpl/index.tpl';
-
Index: lugins/dcLegacyEditor/js/_post_editor.js
===================================================================
--- plugins/dcLegacyEditor/js/_post_editor.js	(revision 2705)
+++ 	(revision )
@@ -1,125 +1,0 @@
-$(function() {
-	if ($('#edit-entry').length==0) {return;}
-
-	// remove editor prefix
-	var getPostFormat = function getPostFormat(post_format) {
-		return post_format.replace(/[^:]*:/,'');
-	};
-	var getPostEditor = function getPostEditor(post_format) {
-		return post_format.replace(/:.*/,'');
-	};
-
-	// Get document format and prepare toolbars
-	var formatField = $('#post_format').get(0);
-	var last_post_format = $(formatField).val();
-	$(formatField).change(function() {
-		if (getPostEditor(this.value)!='dcLegacyEditor') { return;}
-
-		var post_format = getPostFormat(this.value);
-
-		// Confirm post format change
-		if (window.confirm(dotclear.msg.confirm_change_post_format_noconvert)) {
-			excerptTb.switchMode(post_format);
-			contentTb.switchMode(post_format);
-			last_post_format = $(this).val();
-		} else {
-			// Restore last format if change cancelled
-			$(this).val(last_post_format);
-		}
-
-		$('.format_control > *').addClass('hide');
-		$('.format_control:not(.control_no_'+post_format+') > *').removeClass('hide');
-	});
-
-	var excerptTb = new jsToolBar(document.getElementById('post_excerpt'));
-	var contentTb = new jsToolBar(document.getElementById('post_content'));
-	excerptTb.context = contentTb.context = 'post';
-
-	$('.format_control > *').addClass('hide');
-	$('.format_control:not(.control_no_'+getPostFormat(last_post_format)+') > *').removeClass('hide');
-
-	if ($('#comment_content').length>0) {
-		var commentTb = new jsToolBar(document.getElementById('comment_content'));
-		commentTb.draw('xhtml');
-	}
-
-	$('#edit-entry').onetabload(function() {
-		// Markup validator
-		var v = $('<div class="format_control"><p><a id="a-validator"></a></p><div/>').get(0);
-		$('.format_control').before(v);
-		var a = $('#a-validator').get(0);
-		a.href = '#';
-		a.className = 'button ';
-		$(a).click(function() {
-
-			excerpt_content = $('#post_excerpt').css('display') != 'none' ? $('#post_excerpt').val() : $('#excerpt-area iframe').contents().find('body').html();
-			post_content	= $('#post_content').css('display') != 'none' ? $('#post_content').val() : $('#content-area iframe').contents().find('body').html();
-
-			var params = {
-				xd_check: dotclear.nonce,
-				f: 'validatePostMarkup',
-				excerpt: excerpt_content,
-				content: post_content,
-				format: getPostFormat($('#post_format').get(0).value),
-				lang: $('#post_lang').get(0).value
-			};
-
-			$.post('services.php',params,function(data) {
-				if ($(data).find('rsp').attr('status') != 'ok') {
-					alert($(data).find('rsp message').text());
-					return false;
-				}
-
-				$('.message, .success, .error, .warning-msg').remove();
-
-				if ($(data).find('valid').text() == 1) {
-					var p = document.createElement('p');
-					p.id = 'markup-validator';
-
-					$(p).addClass('success');
-					$(p).text(dotclear.msg.xhtml_valid);
-					$('#entry-content h3').after(p);
-					$(p).backgroundFade({sColor: dotclear.fadeColor.beginValidatorMsg, eColor: dotclear.fadeColor.endValidatorMsg, steps: 50},function() {
-						$(this).backgroundFade({sColor: dotclear.fadeColor.endValidatorMsg, eColor: dotclear.fadeColor.beginValidatorMsg});
-					});
-				} else {
-					var div = document.createElement('div');
-					div.id = 'markup-validator';
-
-					$(div).addClass('error');
-					$(div).html('<p><strong>' + dotclear.msg.xhtml_not_valid + '</strong></p>' + $(data).find('errors').text());
-					$('#entry-content h3').after(div);
-					$(div).backgroundFade({sColor: dotclear.fadeColor.beginValidatorErr,eColor: dotclear.fadeColor.endValidatorErr, steps: 50},function() {
-						$(this).backgroundFade({sColor: dotclear.fadeColor.endValidatorErr, eColor: dotclear.fadeColor.beginValidatorErr});
-					});
-				}
-
-				if ( $('#post_excerpt').text() != excerpt_content || $('#post_content').text() != post_content ) {
-					var pn = document.createElement('p');
-					$(pn).addClass('warning-msg');
-					$(pn).text(dotclear.msg.warning_validate_no_save_content);
-					$('#entry-content h3').after(pn);
-				}
-
-				return false;
-			});
-
-			return false;
-		});
-
-		a.appendChild(document.createTextNode(dotclear.msg.xhtml_validator));
-
-		// Load toolbars
-		contentTb.switchMode(getPostFormat(formatField.value));
-		excerptTb.switchMode(getPostFormat(formatField.value));
-
-		// Check unsaved changes before XHTML conversion
-		var excerpt = $('#post_excerpt').val();
-		var content = $('#post_content').val();
-		$('#convert-xhtml').click(function() {
-			if (excerpt != $('#post_excerpt').val() || content != $('#post_content').val()) {
-				return window.confirm(dotclear.msg.confirm_change_post_format);
-			}
-		});
-	});
-});
Index: lugins/dcLegacyEditor/js/jsToolBar/jsToolBar.dotclear.js
===================================================================
--- plugins/dcLegacyEditor/js/jsToolBar/jsToolBar.dotclear.js	(revision 2614)
+++ 	(revision )
@@ -1,386 +1,0 @@
-/* Change link button actions
--------------------------------------------------------- */
-jsToolBar.prototype.elements.link.data = {};
-jsToolBar.prototype.elements.link.fncall = {};
-jsToolBar.prototype.elements.link.open_url = 'popup_link.php';
-
-jsToolBar.prototype.elements.link.popup = function (args) {
-	window.the_toolbar = this;
-	args = args || '';
-
-	this.elements.link.data = {};
-	var url = this.elements.link.open_url+args;
-
-	var p_win = window.open(url,'dc_popup',
-	'alwaysRaised=yes,dependent=yes,toolbar=yes,height=420,width=520,'+
-	'menubar=no,resizable=yes,scrollbars=yes,status=no');
-};
-
-jsToolBar.prototype.elements.link.fn.wiki = function() {
-	this.elements.link.popup.call(this,'?hreflang='+this.elements.link.default_hreflang);
-};
-jsToolBar.prototype.elements.link.fncall.wiki = function() {
-	var data = this.elements.link.data;
-
-	if (data.href == '') { return; }
-
-	var etag = '|'+data.href;
-	if (data.hreflang) { etag += '|'+data.hreflang; }
-
-	if (data.title) {
-		if (!data.hreflang) { etag += '|'; }
-		etag += '|'+data.title;
-	}
-
-	if (data.content) {
-		this.encloseSelection('['+data.content,etag+']');
-	} else {
-		this.encloseSelection('[',etag+']');
-	}
-};
-
-jsToolBar.prototype.elements.link.fn.xhtml = function() {
-	this.elements.link.popup.call(this,'?hreflang='+this.elements.link.default_hreflang);
-};
-jsToolBar.prototype.elements.link.fncall.xhtml = function() {
-	var data = this.elements.link.data;
-
-	if (data.href == '') { return; }
-
-	var stag = '<a href="'+data.href+'"';
-
-	if (data.hreflang) { stag += ' hreflang="'+data.hreflang+'"'; }
-	if (data.title) { stag += ' title="'+data.title+'"'; }
-	stag += '>';
-	var etag = '</a>';
-
-	if (data.content) {
-		this.encloseSelection('','',function() {
-			return stag + data.content + etag;
-		});
-	} else {
-		this.encloseSelection(stag,etag);
-	}
-};
-
-jsToolBar.prototype.elements.link.fn.wysiwyg = function() {
-	var href, title, hreflang;
-	href = title = hreflang = '';
-	hreflang = this.elements.link.default_hreflang;
-
-	var a = this.getAncestor();
-
-	if (a.tagName == 'a') {
-		href= a.tag.href || '';
-		title = a.tag.title || '';
-		hreflang = a.tag.hreflang || '';
-	}
-
-	this.elements.link.popup.call(this,'?href='+href+'&hreflang='+hreflang+'&title='+title);
-};
-jsToolBar.prototype.elements.link.fncall.wysiwyg = function() {
-	var data = this.elements.link.data;
-
-	var a = this.getAncestor();
-
-	if (a.tagName == 'a') {
-		if (data.href == '') {
-			// Remove link
-			this.replaceNodeByContent(a.tag);
-			this.iwin.focus();
-			return;
-		} else {
-			// Update link
-			a.tag.href = data.href;
-			if (data.hreflang) {
-				a.tag.setAttribute('hreflang',data.hreflang);
-			} else {
-				a.tag.removeAttribute('hreflang');
-			}
-			if (data.title) {
-				a.tag.setAttribute('title',data.title);
-			} else {
-				a.tag.removeAttribute('title');
-			}
-			return;
-		}
-	}
-
-	// Create link
-	if (data.content) {
-		var n = document.createTextNode(data.content);
-	} else {
-		var n = this.getSelectedNode();
-	}
-	var a = this.iwin.document.createElement('a');
-	a.href = data.href;
-	if (data.hreflang) a.setAttribute('hreflang',data.hreflang);
-	if (data.title) a.setAttribute('title',data.title);
-	a.appendChild(n);
-	this.insertNode(a);
-};
-jsToolBar.prototype.getAncestor = function() {
-	var res = {};
-	var range, commonAncestorContainer;
-
-	if (this.iwin.getSelection) { //gecko
-		var selection = this.iwin.getSelection();
-		range = selection.getRangeAt(0);
-		commonAncestorContainer = range.commonAncestorContainer;
-		while (commonAncestorContainer.nodeType != 1) {
-			commonAncestorContainer = commonAncestorContainer.parentNode;
-		}
-	} else { //ie
-		range = this.iwin.document.selection.createRange();
-		commonAncestorContainer = range.parentElement();
-	}
-
-	var ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
-	while (ancestorTagName!='a' && ancestorTagName!='body') {
-		commonAncestorContainer = commonAncestorContainer.parentNode;
-		ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
-	}
-
-	res.tag = commonAncestorContainer;
-	res.tagName = ancestorTagName;
-
-	return res;
-};
-
-/* Image selector
--------------------------------------------------------- */
-jsToolBar.prototype.elements.img_select = {
-	type: 'button',
-	title: 'Image chooser',
-	fn: {},
-	fncall: {},
-	open_url: 'media.php?popup=1',
-	data: {},
-	popup: function() {
-		window.the_toolbar = this;
-		this.elements.img_select.data = {};
-
-		var p_win = window.open(this.elements.img_select.open_url,'dc_popup',
-		'alwaysRaised=yes,dependent=yes,toolbar=yes,height=500,width=760,'+
-		'menubar=no,resizable=yes,scrollbars=yes,status=no');
-	}
-};
-jsToolBar.prototype.elements.img_select.fn.wiki = function() {
-	this.elements.img_select.popup.call(this);
-};
-jsToolBar.prototype.elements.img_select.fncall.wiki = function() {
-	var d = this.elements.img_select.data;
-	if (d.src == undefined) { return; }
-
-	this.encloseSelection('','',function(str) {
-		var alt = (str) ? str : d.title;
-		var res = '(('+d.src+'|'+alt;
-
-		if (d.alignment == 'left') {
-			res += '|L';
-		} else if (d.alignment == 'right') {
-			res += '|R';
-		} else if (d.alignment == 'center') {
-			res += '|C';
-		} else if (d.description) {
-			res += '|';
-		}
-
-		if (d.description) {
-			res += '|'+d.description;
-		}
-
-		res += '))';
-
-		if (d.link) {
-			var ltitle = (alt) ? '||'+alt : '';
-			res = '['+res+'|'+d.url+ltitle+']';
-		}
-
-		return res;
-	});
-};
-jsToolBar.prototype.elements.img_select.fn.xhtml = function() {
-	this.elements.img_select.popup.call(this);
-};
-jsToolBar.prototype.elements.img_select.fncall.xhtml = function() {
-	var d = this.elements.img_select.data;
-	if (d.src == undefined) { return; }
-
-	this.encloseSelection('','',function(str) {
-		var alt = (str) ? str : d.title;
-		var res = '<img src="'+d.src+'" alt="'+alt.replace('&','&amp;').replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')+'"';
-
-		if (d.alignment == 'left') {
-			res += ' style="float: left; margin: 0 1em 1em 0;"';
-		} else if (d.alignment == 'right') {
-			res += ' style="float: right; margin: 0 0 1em 1em;"';
-		} else if (d.alignment == 'center') {
-			res += ' style="margin: 0 auto; display: block;"';
-		}
-
-		if (d.description) {
-			res += ' title="'+d.description.replace('&','&amp;').replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')+'"';
-		}
-
-		res += ' />';
-
-		if (d.link) {
-			var ltitle = (alt) ? ' title="'+alt.replace('&','&amp;').replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')+'"' : '';
-			res = '<a href="'+d.url+'"'+ltitle+'>'+res+'</a>';
-		}
-
-		return res;
-	});
-};
-
-jsToolBar.prototype.elements.img.fn.wysiwyg = function() {
-	var src = this.elements.img.prompt.call(this);
-	if (!src) { return; }
-
-	var img = this.iwin.document.createElement('img');
-	img.src = src;
-	img.setAttribute('alt',this.getSelectedText());
-
-	this.insertNode(img);
-};
-
-jsToolBar.prototype.elements.img_select.fn.wysiwyg = function() {
-	this.elements.img_select.popup.call(this);
-};
-jsToolBar.prototype.elements.img_select.fncall.wysiwyg = function() {
-	var d = this.elements.img_select.data;
-	var alt = (this.getSelectedText()) ? this.getSelectedText() : d.title;
-	if (d.src == undefined) { return; }
-
-	var img = this.iwin.document.createElement('img');
-	img.src = d.src;
-	img.setAttribute('alt',alt);
-
-
-	if (d.alignment == 'left') {
-		if (img.style.styleFloat != undefined) {
-			img.style.styleFloat = 'left';
-		} else {
-			img.style.cssFloat = 'left';
-		}
-		img.style.marginTop = 0;
-		img.style.marginRight = '1em';
-		img.style.marginBottom = '1em';
-		img.style.marginLeft = 0;
-	} else if (d.alignment == 'right') {
-		if (img.style.styleFloat != undefined) {
-			img.style.styleFloat = 'right';
-		} else {
-			img.style.cssFloat = 'right';
-		}
-		img.style.marginTop = 0;
-		img.style.marginRight = 0;
-		img.style.marginBottom = '1em';
-		img.style.marginLeft = '1em';
-	} else if (d.alignment == 'center') {
-		img.style.marginTop = 0;
-		img.style.marginRight = 'auto';
-		img.style.marginBottom = 0;
-		img.style.marginLeft = 'auto';
-		img.style.display = 'block';
-	}
-
-	if (d.description) {
-		img.setAttribute('title',d.description);
-	}
-
-	if (d.link) {
-		var a = this.iwin.document.createElement('a');
-		a.href = d.url;
-		if (alt) {
-			a.setAttribute('title',alt);
-		}
-		a.appendChild(img);
-		this.insertNode(a);
-	} else {
-		this.insertNode(img);
-	}
-};
-
-// MP3 helpers
-jsToolBar.prototype.elements.mp3_insert = { fncall: {}, data: {} };
-jsToolBar.prototype.elements.mp3_insert.fncall.wiki = function() {
-	var d = this.elements.mp3_insert.data;
-	if (d.player == undefined) { return; }
-
-	this.encloseSelection('','',function(str) {
-		return '\n///html\n' + d.player + '///\n';
-	});
-};
-jsToolBar.prototype.elements.mp3_insert.fncall.xhtml = function() {
-	var d = this.elements.mp3_insert.data;
-	if (d.player == undefined) { return; }
-
-	this.encloseSelection('','',function(str) {
-		return '\n' + d.player + '\n';
-	});
-};
-jsToolBar.prototype.elements.mp3_insert.fncall.wysiwyg = function() {
-	return;
-};
-
-// FLV helpers
-jsToolBar.prototype.elements.flv_insert = { fncall: {}, data: {} };
-jsToolBar.prototype.elements.flv_insert.fncall.wiki = function() {
-	var d = this.elements.flv_insert.data;
-	if (d.player == undefined) { return; }
-
-	this.encloseSelection('','',function(str) {
-		return '\n///html\n' + d.player + '///\n';
-	});
-};
-jsToolBar.prototype.elements.flv_insert.fncall.xhtml = function() {
-	var d = this.elements.flv_insert.data;
-	if (d.player == undefined) { return; }
-
-	this.encloseSelection('','',function(str) {
-		return '\n' + d.player + '\n';
-	});
-};
-jsToolBar.prototype.elements.flv_insert.fncall.wysiwyg = function() {
-	return;
-};
-
-
-/* Posts selector
--------------------------------------------------------- */
-jsToolBar.prototype.elements.post_link = {
-	type: 'button',
-	title: 'Link to an entry',
-	fn: {},
-	open_url: 'popup_posts.php',
-	data: {},
-	popup: function() {
-		window.the_toolbar = this;
-		this.elements.img_select.data = {};
-
-		var p_win = window.open(this.elements.post_link.open_url,'dc_popup',
-		'alwaysRaised=yes,dependent=yes,toolbar=yes,height=500,width=760,'+
-		'menubar=no,resizable=yes,scrollbars=yes,status=no');
-	}
-};
-jsToolBar.prototype.elements.post_link.fn.wiki = function() {
-	this.elements.post_link.popup.call(this);
-};
-jsToolBar.prototype.elements.post_link.fn.xhtml = function() {
-	this.elements.post_link.popup.call(this);
-};
-jsToolBar.prototype.elements.post_link.fn.wysiwyg = function() {
-	this.elements.post_link.popup.call(this);
-};
-
-// Last space element
-jsToolBar.prototype.elements.space3 = {
-	type:'space',
-	format:{
-		wysiwyg:true,
-		wiki:true,
-		xhtml:true
-	}
-};
Index: lugins/dcLegacyEditor/js/jsToolBar/jsToolBar.js
===================================================================
--- plugins/dcLegacyEditor/js/jsToolBar/jsToolBar.js	(revision 2614)
+++ 	(revision )
@@ -1,612 +1,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * This file is part of DotClear.
- * Copyright (c) 2005 Nicolas Martin & Olivier Meunier and contributors. All
- * rights reserved.
- *
- * DotClear is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * DotClear is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with DotClear; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * ***** END LICENSE BLOCK *****
-*/
-
-function jsToolBar(textarea) {
-	if (!document.createElement) { return; }
-
-	if (!textarea) { return; }
-
-	if ((typeof(document["selection"]) == "undefined")
-	&& (typeof(textarea["setSelectionRange"]) == "undefined")) {
-		return;
-	}
-
-	this.textarea = textarea;
-
-	this.editor = document.createElement('div');
-	this.editor.className = 'jstEditor';
-
-	this.textarea.parentNode.insertBefore(this.editor,this.textarea);
-	this.editor.appendChild(this.textarea);
-
-	this.toolbar = document.createElement("div");
-	this.toolbar.className = 'jstElements';
-	this.editor.parentNode.insertBefore(this.toolbar,this.editor);
-
-	// Dragable resizing (only for gecko)
-	if (navigator.appName == 'Microsoft Internet Explorer')
-	{
-		if (this.editor.addEventListener)
-		{
-			this.handle = document.createElement('div');
-			this.handle.className = 'jstHandle';
-			var dragStart = this.resizeDragStart;
-			var This = this;
-			this.handle.addEventListener('mousedown',function(event) { dragStart.call(This,event); },false);
-			this.editor.parentNode.insertBefore(this.handle,this.editor.nextSibling);
-		}
-	}
-
-	this.context = null;
-	this.toolNodes = {}; // lorsque la toolbar est dessinée , cet objet est garni
-					// de raccourcis vers les éléments DOM correspondants aux outils.
-};
-
-function jsButton(title, fn, scope, className) {
-	this.title = title || null;
-	this.fn = fn || function(){};
-	this.scope = scope || null;
-	this.className = className || null;
-};
-jsButton.prototype.draw = function() {
-	if (!this.scope) return null;
-
-	var button = document.createElement('button');
-	button.setAttribute('type','button');
-	if (this.className) button.className = this.className;
-	button.title = this.title;
-	var span = document.createElement('span');
-	span.appendChild(document.createTextNode(this.title));
-	button.appendChild(span);
-
-	if (this.icon != undefined) {
-		button.style.backgroundImage = 'url('+this.icon+')';
-	}
-	if (typeof(this.fn) == 'function') {
-		var This = this;
-		button.onclick = function() { try { This.fn.apply(This.scope, arguments) } catch (e) {} return false; };
-	}
-	return button;
-};
-
-function jsSpace(id) {
-	this.id = id || null;
-	this.width = null;
-};
-jsSpace.prototype.draw = function() {
-	var span = document.createElement('span');
-	if (this.id) span.id = this.id;
-	span.appendChild(document.createTextNode(String.fromCharCode(160)));
-	span.className = 'jstSpacer';
-	if (this.width) span.style.marginRight = this.width+'px';
-
-	return span;
-};
-
-function jsCombo(title, options, scope, fn, className) {
-	this.title = title || null;
-	this.options = options || null;
-	this.scope = scope || null;
-	this.fn = fn || function(){};
-	this.className = className || null;
-};
-jsCombo.prototype.draw = function() {
-	if (!this.scope || !this.options) return null;
-
-	var select = document.createElement('select');
-	if (this.className) select.className = className;
-	select.title = this.title;
-
-	for (var o in this.options) {
-		//var opt = this.options[o];
-		var option = document.createElement('option');
-		option.value = o;
-		option.appendChild(document.createTextNode(this.options[o]));
-		select.appendChild(option);
-	}
-
-	var This = this;
-	select.onchange = function() {
-		try {
-			This.fn.call(This.scope, this.value);
-		} catch (e) { alert(e); }
-
-		return false;
-	};
-
-	return select;
-};
-
-
-jsToolBar.prototype = {
-	base_url: '',
-	mode: 'xhtml',
-	elements: {},
-
-	getMode: function() {
-		return this.mode;
-	},
-
-	setMode: function(mode) {
-		this.mode = mode || 'xhtml';
-	},
-
-	switchMode: function(mode) {
-		mode = mode || 'xhtml';
-		this.draw(mode);
-	},
-
-	button: function(toolName) {
-		var tool = this.elements[toolName];
-		if (typeof tool.fn[this.mode] != 'function') return null;
-		var b = new jsButton(tool.title, tool.fn[this.mode], this, 'jstb_'+toolName);
-		if (tool.icon != undefined) {
-			b.icon = tool.icon;
-		}
-		return b;
-	},
-	space: function(toolName) {
-		var tool = new jsSpace(toolName);
-		if (this.elements[toolName].format != undefined && !this.elements[toolName].format[this.mode]) return null;
-		if (this.elements[toolName].width !== undefined) {
-			tool.width = this.elements[toolName].width;
-		}
-		return tool;
-	},
-	combo: function(toolName) {
-		var tool = this.elements[toolName];
-
-		if( tool[this.mode] != undefined) {
-
-			var length = tool[this.mode].list.length;
-
-			if (typeof tool[this.mode].fn != 'function' || length == 0) {
-				return null;
-			} else {
-				var options = {};
-				for (var i=0; i < length; i++) {
-					var opt = tool[this.mode].list[i];
-					options[opt] = tool.options[opt];
-				}
-				return new jsCombo(tool.title, options, this, tool[this.mode].fn);
-			}
-
-		}
-
-	},
-	draw: function(mode) {
-		this.setMode(mode);
-
-		// Empty toolbar
-		while (this.toolbar.hasChildNodes()) {
-			this.toolbar.removeChild(this.toolbar.firstChild)
-		}
-		this.toolNodes = {}; // vide les raccourcis DOM/**/
-
-		// Draw toolbar elements
-		var b, tool, newTool;
-
-		for (var i in this.elements) {
-			b = this.elements[i];
-
-			var disabled =
-			b.type == undefined || b.type == ''
-			|| (b.disabled != undefined && b.disabled)
-			|| (b.context != undefined && b.context != null && b.context != this.context);
-
-			if (!disabled && typeof this[b.type] == 'function') {
-				tool = this[b.type](i);
-				if (tool) newTool = tool.draw();
-				if (newTool) {
-					this.toolNodes[i] = newTool; //mémorise l'accès DOM pour usage éventuel ultérieur
-					this.toolbar.appendChild(newTool);
-				}
-			}
-		}
-	},
-
-	singleTag: function(stag,etag) {
-		stag = stag || null;
-		etag = etag || stag;
-
-		if (!stag || !etag) { return; }
-
-		this.encloseSelection(stag,etag);
-	},
-
-	encloseSelection: function(prefix, suffix, fn) {
-		this.textarea.focus();
-
-		prefix = prefix || '';
-		suffix = suffix || '';
-
-		var start, end, sel, scrollPos, subst, res;
-
-		if (typeof(document["selection"]) != "undefined") {
-			sel = document.selection.createRange().text;
-		} else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
-			start = this.textarea.selectionStart;
-			end = this.textarea.selectionEnd;
-			scrollPos = this.textarea.scrollTop;
-			sel = this.textarea.value.substring(start, end);
-		}
-
-		if (sel.match(/ $/)) { // exclude ending space char, if any
-			sel = sel.substring(0, sel.length - 1);
-			suffix = suffix + " ";
-		}
-
-		if (typeof(fn) == 'function') {
-			res = (sel) ? fn.call(this,sel) : fn('');
-		} else {
-			res = (sel) ? sel : '';
-		}
-
-		subst = prefix + res + suffix;
-
-		if (typeof(document["selection"]) != "undefined") {
-			var range = document.selection.createRange().text = subst;
-			this.textarea.caretPos -= suffix.length;
-		} else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
-			this.textarea.value = this.textarea.value.substring(0, start) + subst +
-			this.textarea.value.substring(end);
-			if (sel) {
-				this.textarea.setSelectionRange(start + subst.length, start + subst.length);
-			} else {
-				this.textarea.setSelectionRange(start + prefix.length, start + prefix.length);
-			}
-			this.textarea.scrollTop = scrollPos;
-		}
-	},
-
-	stripBaseURL: function(url) {
-		if (this.base_url != '') {
-			var pos = url.indexOf(this.base_url);
-			if (pos == 0) {
-				url = url.substr(this.base_url.length);
-			}
-		}
-
-		return url;
-	}
-};
-
-/** Resizer
--------------------------------------------------------- */
-jsToolBar.prototype.resizeSetStartH = function() {
-	this.dragStartH = this.textarea.offsetHeight + 0;
-};
-jsToolBar.prototype.resizeDragStart = function(event) {
-	var This = this;
-	this.dragStartY = event.clientY;
-	this.resizeSetStartH();
-	document.addEventListener('mousemove', this.dragMoveHdlr=function(event){This.resizeDragMove(event);}, false);
-	document.addEventListener('mouseup', this.dragStopHdlr=function(event){This.resizeDragStop(event);}, false);
-};
-
-jsToolBar.prototype.resizeDragMove = function(event) {
-	this.textarea.style.height = (this.dragStartH+event.clientY-this.dragStartY)+'px';
-};
-
-jsToolBar.prototype.resizeDragStop = function(event) {
-	document.removeEventListener('mousemove', this.dragMoveHdlr, false);
-	document.removeEventListener('mouseup', this.dragStopHdlr, false);
-};
-
-// Elements definition ------------------------------------
-// block format (paragraph, headers)
-jsToolBar.prototype.elements.blocks = {
-	type: 'combo',
-	title: 'block format',
-	options: {
-		none: '-- none --', // only for wysiwyg mode
-		nonebis: '- block format -', // only for xhtml mode
-		p: 'Paragraph',
-		h1: 'Header 1',
-		h2: 'Header 2',
-		h3: 'Header 3',
-		h4: 'Header 4',
-		h5: 'Header 5',
-		h6: 'Header 6'
-	},
-	xhtml: {
-		list: ['nonebis','p','h1','h2','h3','h4','h5','h6'],
-		fn: function(opt) {
-			if (opt=='nonebis')
-				this.textarea.focus();
-			else
-				try {this.singleTag('<'+opt+'>','</'+opt+'>');} catch(e){};
-			this.toolNodes.blocks.value = 'nonebis';
-		}
-	},
-	wiki: {
-		list: ['nonebis','h3','h4','h5'],
-		fn: function(opt) {
-			switch (opt) {
-				case 'nonebis': this.textarea.focus(); break;
-				case 'h3': this.encloseSelection('!!!'); break;
-				case 'h4': this.encloseSelection('!!'); break;
-				case 'h5': this.encloseSelection('!'); break;
-			}
-			this.toolNodes.blocks.value = 'nonebis';
-		}
-	}
-};
-
-// spacer
-jsToolBar.prototype.elements.space0 = {
-	type:'space',
-	format:{
-		wysiwyg:true,
-		wiki:true,
-		xhtml:true
-	}
-};
-
-// strong
-jsToolBar.prototype.elements.strong = {
-	type: 'button',
-	title: 'Strong emphasis',
-	fn: {
-		wiki: function() { this.singleTag('__') },
-		xhtml: function() { this.singleTag('<strong>','</strong>') }
-	}
-};
-
-// em
-jsToolBar.prototype.elements.em = {
-	type: 'button',
-	title: 'Emphasis',
-	fn: {
-		wiki: function() { this.singleTag("''") },
-		xhtml: function() { this.singleTag('<em>','</em>') }
-	}
-};
-
-// ins
-jsToolBar.prototype.elements.ins = {
-	type: 'button',
-	title: 'Inserted',
-	fn: {
-		wiki: function() { this.singleTag('++') },
-		xhtml: function() { this.singleTag('<ins>','</ins>') }
-	}
-};
-
-// del
-jsToolBar.prototype.elements.del = {
-	type: 'button',
-	title: 'Deleted',
-	fn: {
-		wiki: function() { this.singleTag('--') },
-		xhtml: function() { this.singleTag('<del>','</del>') }
-	}
-};
-
-// quote
-jsToolBar.prototype.elements.quote = {
-	type: 'button',
-	title: 'Inline quote',
-	fn: {
-		wiki: function() { this.singleTag('{{','}}') },
-		xhtml: function() { this.singleTag('<q>','</q>') }
-	}
-};
-
-// code
-jsToolBar.prototype.elements.code = {
-	type: 'button',
-	title: 'Code',
-	fn: {
-		wiki: function() { this.singleTag('@@') },
-		xhtml: function() { this.singleTag('<code>','</code>')}
-	}
-};
-
-// spacer
-jsToolBar.prototype.elements.space1 = {
-	type:'space',
-	format:{
-		wysiwyg:true,
-		wiki:true,
-		xhtml:true
-	}
-};
-
-// br
-jsToolBar.prototype.elements.br = {
-	type: 'button',
-	title: 'Line break',
-	fn: {
-		wiki: function() { this.encloseSelection("%%%\n",'') },
-		xhtml: function() { this.encloseSelection("<br />\n",'')}
-	}
-};
-
-// spacer
-jsToolBar.prototype.elements.space2 = {
-	type:'space',
-	format:{
-		wysiwyg:true,
-		wiki:true,
-		xhtml:true
-	}
-};
-
-// blockquote
-jsToolBar.prototype.elements.blockquote = {
-	type: 'button',
-	title: 'Blockquote',
-	fn: {
-		xhtml: function() { this.singleTag('<blockquote>','</blockquote>') },
-		wiki: function() {
-			this.encloseSelection("\n",'',
-			function(str) {
-				str = str.replace(/\r/g,'');
-				return '> '+str.replace(/\n/g,"\n> ");
-			});
-		}
-	}
-};
-
-// pre
-jsToolBar.prototype.elements.pre = {
-	type: 'button',
-	title: 'Preformated text',
-	fn: {
-		wiki: function() { this.singleTag("///\n","\n///") },
-		xhtml: function() { this.singleTag('<pre>','</pre>') }
-	}
-};
-
-// ul
-jsToolBar.prototype.elements.ul = {
-	type: 'button',
-	title: 'Unordered list',
-	fn: {
-		wiki: function() {
-			this.encloseSelection('','',function(str) {
-				str = str.replace(/\r/g,'');
-				return '* '+str.replace(/\n/g,"\n* ");
-			});
-		},
-		xhtml: function() {
-			this.encloseSelection('','',function(str) {
-				str = str.replace(/\r/g,'');
-				str = str.replace(/\n/g,"</li>\n <li>");
-				return "<ul>\n <li>"+str+"</li>\n</ul>";
-			});
-		}
-	}
-};
-
-// ol
-jsToolBar.prototype.elements.ol = {
-	type: 'button',
-	title: 'Ordered list',
-	fn: {
-		wiki: function() {
-			this.encloseSelection('','',function(str) {
-				str = str.replace(/\r/g,'');
-				return '# '+str.replace(/\n/g,"\n# ");
-			});
-		},
-		xhtml: function() {
-			this.encloseSelection('','',function(str) {
-				str = str.replace(/\r/g,'');
-				str = str.replace(/\n/g,"</li>\n <li>");
-				return "<ol>\n <li>"+str+"</li>\n</ol>";
-			});
-		}
-	}
-};
-
-// spacer
-jsToolBar.prototype.elements.space3 = {
-	type:'space',
-	format:{
-		wysiwyg:true,
-		wiki:true,
-		xhtml:true
-	}
-};
-
-// link
-jsToolBar.prototype.elements.link = {
-	type: 'button',
-	title: 'Link',
-	fn: {},
-	href_prompt: 'Please give page URL:',
-	hreflang_prompt: 'Language of this page:',
-	default_hreflang: '',
-	prompt: function(href,hreflang) {
-		href = href || '';
-		hreflang = hreflang || this.elements.link.default_hreflang;
-
-		href = window.prompt(this.elements.link.href_prompt,href);
-		if (!href) { return false; }
-
-		hreflang = window.prompt(this.elements.link.hreflang_prompt,
-		hreflang);
-
-		return { href: this.stripBaseURL(href), hreflang: hreflang };
-	}
-};
-
-jsToolBar.prototype.elements.link.fn.xhtml = function() {
-	var link = this.elements.link.prompt.call(this);
-	if (link) {
-		var stag = '<a href="'+link.href+'"';
-		if (link.hreflang) { stag = stag+' hreflang="'+link.hreflang+'"'; }
-		stag = stag+'>';
-		var etag = '</a>';
-
-		this.encloseSelection(stag,etag);
-	}
-};
-jsToolBar.prototype.elements.link.fn.wiki = function() {
-	var link = this.elements.link.prompt.call(this);
-	if (link) {
-		var stag = '[';
-		var etag = '|'+link.href;
-		if (link.hreflang) { etag = etag+'|'+link.hreflang; }
-		etag = etag+']';
-
-		this.encloseSelection(stag,etag);
-	}
-};
-
-// img
-jsToolBar.prototype.elements.img = {
-		type: 'button',
-		title: 'External image',
-		src_prompt: 'Please give image URL:',
-		fn: {},
-		prompt: function(src) {
-			src = src || '';
-			return this.stripBaseURL(window.prompt(this.elements.img.src_prompt,src));
-		}
-};
-jsToolBar.prototype.elements.img.fn.xhtml = function() {
-	var src = this.elements.img.prompt.call(this);
-	if (src) {
-		this.encloseSelection('','',function(str) {
-			if (str) {
-				return '<img src="'+src+'" alt="'+str+'" />';
-			} else {
-				return '<img src="'+src+'" alt="" />';
-			}
-		});
-	}
-};
-jsToolBar.prototype.elements.img.fn.wiki = function() {
-	var src = this.elements.img.prompt.call(this);
-	if (src) {
-		this.encloseSelection('','',function(str) {
-			if (str) {
-				return '(('+src+'|'+str+'))';
-			} else {
-				return '(('+src+'))';
-			}
-		});
-	}
-};
Index: lugins/dcLegacyEditor/js/jsToolBar/jsToolBar.wysiwyg.js
===================================================================
--- plugins/dcLegacyEditor/js/jsToolBar/jsToolBar.wysiwyg.js	(revision 2614)
+++ 	(revision )
@@ -1,801 +1,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * This file is part of DotClear.
- * Copyright (c) 2005 Nicolas Martin & Olivier Meunier and contributors. All
- * rights reserved.
- *
- * DotClear is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * DotClear is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with DotClear; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * ***** END LICENSE BLOCK *****
-*/
-
-jsToolBar.prototype.can_wwg = (document.designMode != undefined);
-jsToolBar.prototype.iframe = null;
-jsToolBar.prototype.iwin = null;
-jsToolBar.prototype.ibody = null;
-jsToolBar.prototype.iframe_css = null;
-
-/* Editor methods
--------------------------------------------------------- */
-jsToolBar.prototype.drawToolBar = jsToolBar.prototype.draw;
-jsToolBar.prototype.draw = function(mode) {
-	mode = mode || 'xhtml';
-
-	if (this.can_wwg) {
-		this.mode = 'wysiwyg';
-		this.drawToolBar('wysiwyg');
-		this.initWindow();
-	} else {
-		this.drawToolBar(mode);
-	}
-};
-
-jsToolBar.prototype.switchMode = function(mode) {
-	mode = mode || 'xhtml';
-
-	if (mode == 'xhtml') {
-		this.wwg_mode = true;
-		this.draw(mode);
-	} else {
-		if (this.wwg_mode) {
-			this.syncContents('iframe');
-		}
-		this.wwg_mode = false;
-		this.removeEditor();
-		this.textarea.style.display = '';
-		this.drawToolBar(mode);
-	}
-};
-
-jsToolBar.prototype.syncContents = function(from) {
-	from = from || 'textarea';
-	var This = this;
-	if (from == 'textarea') {
-		initContent();
-	} else {
-		this.validBlockquote();
-		var html = this.applyHtmlFilters(this.ibody.innerHTML);
-		if (html == '<br />') { html = '<p></p>'; }
-		this.textarea.value = html;
-	}
-
-	function initContent() {
-		if (!This.iframe.contentWindow.document || !This.iframe.contentWindow.document.body) {
-			setTimeout(initContent, 1);
-			return;
-		}
-		This.ibody = This.iframe.contentWindow.document.body;
-
-		if (This.textarea.value != '' && This.textarea.value != '<p></p>') {
-			This.ibody.innerHTML = This.applyWysiwygFilters(This.textarea.value);
-			if (This.ibody.createTextRange) { //cursor at the begin for IE
-				var IErange = This.ibody.createTextRange();
-				IErange.execCommand("SelectAll");
-				IErange.collapse();
-				IErange.select();
-			}
-		} else {
-			var idoc = This.iwin.document;
-			var para = idoc.createElement('p');
-			para.appendChild(idoc.createElement('br'));
-			while (idoc.body.hasChildNodes()) {
-				idoc.body.removeChild(idoc.body.lastChild);
-			}
-			idoc.body.appendChild(para);
-		}
-	}
-};
-jsToolBar.prototype.htmlFilters = {
-	tagsoup: function(str){
-		return this.tagsoup2xhtml(str);
-	}
-};
-jsToolBar.prototype.applyHtmlFilters = function(str) {
-	for (var fn in this.htmlFilters) {
-		 str = this.htmlFilters[fn].call(this, str);
-	}
-	return str;
-};
-jsToolBar.prototype.wysiwygFilters = {};
-jsToolBar.prototype.applyWysiwygFilters = function( str) {
-	for (var fn in this.wysiwygFilters) {
-		 str = this.wysiwygFilters[fn].call(this, str);
-	}
-	return str;
-};
-
-jsToolBar.prototype.switchEdit = function() {
-	if (this.wwg_mode) {
-		this.textarea.style.display = '';
-		this.iframe.style.display = 'none';
-		this.syncContents('iframe');
-		this.drawToolBar('xhtml');
-		this.wwg_mode = false;
-		this.focusEditor();
-	} else {
-		this.iframe.style.display = '';
-		this.textarea.style.display = 'none';
-		this.syncContents('textarea');
-		this.drawToolBar('wysiwyg');
-		this.wwg_mode = true;
-		this.focusEditor();
-	}
-	this.setSwitcher();
-};
-
-/** Creates iframe for editor, inits a blank document
-*/
-jsToolBar.prototype.initWindow = function() {
-	var This = this;
-
-	this.iframe = document.createElement('iframe');
-	this.textarea.parentNode.insertBefore(this.iframe,this.textarea.nextSibling);
-
-	this.switcher = document.createElement('ul');
-	this.switcher.className = 'jstSwitcher';
-	this.editor.appendChild(this.switcher);
-
-	this.iframe.height = this.textarea.offsetHeight + 0;
-	this.iframe.width = this.textarea.offsetWidth + 0;
-
-	if (this.textarea.tabIndex != undefined) {
-		this.iframe.tabIndex = this.textarea.tabIndex;
-	}
-
-	function initIframe() {
-		var doc = This.iframe.contentWindow.document;
-		if (!doc) {
-			setTimeout(initIframe,1);
-			return false;
-		}
-
-		doc.open();
-		var html =
-		'<html>\n'+
-		'<head>\n'+
-		'<style type="text/css">'+This.iframe_css+'</style>\n'+
-		(This.base_url != '' ? '<base href="'+This.base_url+'" />' : '')+
-		'</head>\n'+
-		'<body>\n'+
-		'</body>\n'+
-		'</html>';
-
-		doc.write(html);
-		doc.close();
-		if (document.all) { // for IE
-			doc.designMode = 'on';
-			// warning : doc is now inaccessible for IE6 sp1
-		}
-
-		This.iwin = This.iframe.contentWindow;
-
-		This.syncContents('textarea');
-
-		if (This.wwg_mode == undefined) {
-			This.wwg_mode = true;
-		}
-
-		if (This.wwg_mode) {
-			This.textarea.style.display = 'none';
-		} else {
-			This.iframe.style.display = 'none';
-		}
-
-		// update textarea on submit
-		if (This.textarea.form) {
-			chainHandler(This.textarea.form,'onsubmit', function() {
-				if (This.wwg_mode) {
-					This.syncContents('iframe');
-				}
-			});
-		}
-
-		for (var evt in This.iwinEvents) {
-			var event = This.iwinEvents[evt];
-			This.addIwinEvent(This.iframe.contentWindow.document, event.type, event.fn, This);
-		}
-
-		This.setSwitcher();
-		try { This.iwin.document.designMode = 'on'; } catch (e) {}; // Firefox needs this
-
-		return true;
-	}
-	initIframe();
-};
-jsToolBar.prototype.addIwinEvent = function(target, type, fn, scope) {
-	var myFn = function(e){fn.call(scope, e)};
-	addEvent(target, type, myFn, true);
-	// fix memory leak
-	addEvent(scope.iwin, 'unload', function(){
-		removeEvent(target, type, myFn, true);
-	}, true);
-};
-jsToolBar.prototype.iwinEvents = {
-	block1: {
-		type: 'mouseup',
-		fn: function(){ this.adjustBlockLevelCombo() }
-	},
-	block2: {
-		type: 'keyup',
-		fn: function(){ this.adjustBlockLevelCombo() }
-	}
-};
-
-/** Insert a mode switcher after editor area
-*/
-jsToolBar.prototype.switcher_visual_title = 'visual';
-jsToolBar.prototype.switcher_source_title = 'source';
-jsToolBar.prototype.setSwitcher = function() {
-	while (this.switcher.hasChildNodes()) {
-		this.switcher.removeChild(this.switcher.firstChild);
-	}
-
-	var This = this;
-	function setLink(title,link) {
-		var li = document.createElement('li');
-		if (link) {
-			var a = document.createElement('a');
-			a.href = '#';
-			a.editor = This;
-			a.onclick = function() { this.editor.switchEdit(); return false; };
-			a.appendChild(document.createTextNode(title));
-		} else {
-			li.className = 'jstSwitcherCurrent';
-			a = document.createTextNode(title);
-		}
-
-		li.appendChild(a);
-		This.switcher.appendChild(li);
-	}
-
-	setLink(this.switcher_visual_title,!this.wwg_mode);
-	setLink(this.switcher_source_title,this.wwg_mode);
-};
-
-/** Removes editor area and mode switcher
-*/
-jsToolBar.prototype.removeEditor = function() {
-	if (this.iframe != null) {
-		this.iframe.parentNode.removeChild(this.iframe);
-		this.iframe = null;
-	}
-
-	if (this.switcher != undefined && this.switcher.parentNode != undefined) {
-		this.switcher.parentNode.removeChild(this.switcher);
-	}
-};
-
-/** Focus on the editor area
-*/
-jsToolBar.prototype.focusEditor = function() {
-	if (this.wwg_mode) {
-		try { this.iwin.document.designMode = 'on'; } catch (e) {}; // Firefox needs this
-		var This = this;
-		setTimeout(function() {This.iframe.contentWindow.focus()},1);
-	} else {
-		this.textarea.focus();
-	}
-};
-
-/** Resizer
-*/
-jsToolBar.prototype.resizeSetStartH = function() {
-	if (this.wwg_mode && this.iframe != undefined) {
-		this.dragStartH = this.iframe.offsetHeight;
-		return;
-	}
-	this.dragStartH = this.textarea.offsetHeight + 0;
-};
-jsToolBar.prototype.resizeDragMove = function(event) {
-	var new_height = (this.dragStartH+event.clientY-this.dragStartY)+'px';
-	if (this.iframe != undefined) {
-		this.iframe.style.height = new_height;
-	}
-	this.textarea.style.height = new_height;
-};
-
-/* Editing methods
--------------------------------------------------------- */
-/** Replaces current selection by given node
-*/
-jsToolBar.prototype.insertNode = function(node) {
-	var range;
-
-	if (this.iwin.getSelection) { // Gecko
-		var sel = this.iwin.getSelection();
-		range = sel.getRangeAt(0);
-
-		// deselect all ranges
-		sel.removeAllRanges();
-
-		// empty range
-		range.deleteContents();
-
-		// Insert node
-		range.insertNode(node);
-
-		range.selectNodeContents(node);
-		range.setEndAfter(node);
-		if (range.endContainer.childNodes.length > range.endOffset &&
-		range.endContainer.nodeType != Node.TEXT_NODE) {
-			range.setEnd(range.endContainer.childNodes[range.endOffset], 0);
-		} else {
-			range.setEnd(range.endContainer.childNodes[0]);
-		}
-		sel.addRange(range);
-
-		sel.collapseToEnd();
-	} else { // IE
-		// lambda element
-		var p = this.iwin.document.createElement('div');
-		p.appendChild(node);
-		range = this.iwin.document.selection.createRange();
-		range.execCommand('delete');
-		// insert innerHTML from element
-		range.pasteHTML(p.innerHTML);
-		range.collapse(false);
-		range.select();
-	}
-	this.iwin.focus();
-};
-
-/** Returns a document fragment with selected nodes
-*/
-jsToolBar.prototype.getSelectedNode = function() {
-	if (this.iwin.getSelection) { // Gecko
-		var sel = this.iwin.getSelection();
-		var range = sel.getRangeAt(0);
-		var content = range.cloneContents();
-	} else { // IE
-		var sel = this.iwin.document.selection;
-		var d = this.iwin.document.createElement('div');
-		d.innerHTML = sel.createRange().htmlText;
-		var content = this.iwin.document.createDocumentFragment();
-		for (var i=0; i < d.childNodes.length; i++) {
-			content.appendChild(d.childNodes[i].cloneNode(true));
-		}
-	}
-	return content;
-};
-
-/** Returns string representation for selected node
-*/
-jsToolBar.prototype.getSelectedText = function() {
-	if (this.iwin.getSelection) { // Gecko
-		return this.iwin.getSelection().toString();
-	} else { // IE
-		var range = this.iwin.document.selection.createRange();
-		return range.text;
-	}
-};
-
-jsToolBar.prototype.replaceNodeByContent = function(node) {
-	var content = this.iwin.document.createDocumentFragment();
-	for (var i=0; i < node.childNodes.length; i++) {
-		content.appendChild(node.childNodes[i].cloneNode(true));
-	}
-	node.parentNode.replaceChild(content, node);
-};
-
-jsToolBar.prototype.getBlockLevel = function() {
-	var blockElts = ['p','h1','h2','h3','h4','h5','h6'];
-
-	var range, commonAncestorContainer;
-	if (this.iwin.getSelection) { //gecko
-		var selection = this.iwin.getSelection();
-		range = selection.getRangeAt(0);
-		commonAncestorContainer = range.commonAncestorContainer;
-		while (commonAncestorContainer.nodeType != 1) {
-			commonAncestorContainer = commonAncestorContainer.parentNode;
-		}
-	} else { //ie
-		range = this.iwin.document.selection.createRange();
-		commonAncestorContainer = range.parentElement();
-	}
-
-	var ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
-	while (arrayIndexOf(blockElts, ancestorTagName)==-1 && ancestorTagName!='body') {
-		commonAncestorContainer = commonAncestorContainer.parentNode;
-		ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
-	}
-	if (ancestorTagName == 'body') return null;
-	else return commonAncestorContainer;
-};
-jsToolBar.prototype.adjustBlockLevelCombo = function() {
-	var blockLevel = this.getBlockLevel();
-	if (blockLevel !== null)
-		this.toolNodes.blocks.value = blockLevel.tagName.toLowerCase();
-	else {
-		if (this.mode == 'wysiwyg') this.toolNodes.blocks.value = 'none';
-		if (this.mode == 'xhtml') this.toolNodes.blocks.value = 'nonebis';
-	}
-};
-
-/** HTML code cleanup
--------------------------------------------------------- */
-jsToolBar.prototype.simpleCleanRegex = new Array(
-	/* Remove every tags we don't need */
-	[/<meta[\w\W]*?>/gim,''],
-	[/<style[\w\W]*?>[\w\W]*?<\/style>/gim, ''],
-	[/<\/?font[\w\W]*?>/gim, ''],
-
-
-	/* Replacements */
-	[/<(\/?)(B|b|STRONG)([\s>\/])/g, "<$1strong$3"],
-	[/<(\/?)(I|i|EM)([\s>\/])/g, "<$1em$3"],
-	[/<IMG ([^>]*?[^\/])>/gi, "<img $1 />"],
-	[/<INPUT ([^>]*?[^\/])>/gi, "<input $1 />"],
-	[/<COL ([^>]*?[^\/])>/gi, "<col $1 />"],
-	[/<AREA ([^>]*?[^\/])>/gi, "<area $1 />"],
-	[/<PARAM ([^>]*?[^\/])>/gi, "<param $1 />"],
-	[/<HR ([^>]*?[^\/])>/gi, "<hr $1/>"],
-	[/<BR ([^>]*?[^\/])>/gi, "<br $1/>"],
-	[/<(\/?)U([\s>\/])/gi, "<$1ins$2"],
-	[/<(\/?)STRIKE([\s>\/])/gi, "<$1del$2"],
-	[/<span style="font-weight: normal;">([\w\W]*?)<\/span>/gm, "$1"],
-	[/<span style="font-weight: bold;">([\w\W]*?)<\/span>/gm, "<strong>$1</strong>"],
-	[/<span style="font-style: italic;">([\w\W]*?)<\/span>/gm, "<em>$1</em>"],
-	[/<span style="text-decoration: underline;">([\w\W]*?)<\/span>/gm, "<ins>$1</ins>"],
-	[/<span style="text-decoration: line-through;">([\w\W]*?)<\/span>/gm, "<del>$1</del>"],
-	[/<span style="text-decoration: underline line-through;">([\w\W]*?)<\/span>/gm, "<del><ins>$1</ins></del>"],
-	[/<span style="(font-weight: bold; ?|font-style: italic; ?){2}">([\w\W]*?)<\/span>/gm, "<strong><em>$2</em></strong>"],
-	[/<span style="(font-weight: bold; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/span>/gm, "<ins><strong>$2</strong></ins>"],
-	[/<span style="(font-weight: italic; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/span>/gm, "<ins><em>$2</em></ins>"],
-	[/<span style="(font-weight: bold; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/span>/gm, "<del><strong>$2</strong></del>"],
-	[/<span style="(font-weight: italic; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/span>/gm, "<del><em>$2</em></del>"],
-	[/<span style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline; ?){3}">([\w\W]*?)<\/span>/gm, "<ins><strong><em>$2</em></strong></ins>"],
-	[/<span style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: line-through; ?){3}">([\w\W]*?)<\/span>/gm, "<del><strong><em>$2</em></strong></del>"],
-	[/<span style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline line-through; ?){3}">([\w\W]*?)<\/span>/gm, "<del><ins><strong><em>$2</em></strong></ins></del>"],
-	[/<strong style="font-weight: normal;">([\w\W]*?)<\/strong>/gm, "$1"],
-	[/<([a-z]+) style="font-weight: normal;">([\w\W]*?)<\/\1>/gm, "<$1>$2</$1>"],
-	[/<([a-z]+) style="font-weight: bold;">([\w\W]*?)<\/\1>/gm, "<$1><strong>$2</strong></$1>"],
-	[/<([a-z]+) style="font-style: italic;">([\w\W]*?)<\/\1>/gm, "<$1><em>$2</em></$1>"],
-	[/<([a-z]+) style="text-decoration: underline;">([\w\W]*?)<\/\1>/gm, "<ins><$1>$2</$1></ins>"],
-	[/<([a-z]+) style="text-decoration: line-through;">([\w\W]*?)<\/\1>/gm, "<del><$1>$2</$1></del>"],
-	[/<([a-z]+) style="text-decoration: underline line-through;">([\w\W]*?)<\/\1>/gm, "<del><ins><$1>$2</$1></ins></del>"],
-	[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?){2}">([\w\W]*?)<\/\1>/gm, "<$1><strong><em>$3</em></strong></$1>"],
-	[/<([a-z]+) style="(font-weight: bold; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/\1>/gm, "<ins><$1><strong>$3</strong></$1></ins>"],
-	[/<([a-z]+) style="(font-weight: italic; ?|text-decoration: underline; ?){2}">([\w\W]*?)<\/\1>/gm, "<ins><$1><em>$3</em></$1></ins>"],
-	[/<([a-z]+) style="(font-weight: bold; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/\1>/gm, "<del><$1><strong>$3</strong></$1></del>"],
-	[/<([a-z]+) style="(font-weight: italic; ?|text-decoration: line-through; ?){2}">([\w\W]*?)<\/\1>/gm, "<del><$1><em>$3</em></$1></del>"],
-	[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline; ?){3}">([\w\W]*?)<\/\1>/gm, "<ins><$1><strong><em>$3</em></strong></$1></ins>"],
-	[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: line-through; ?){3}">([\w\W]*?)<\/\1>/gm, "<del><$1><strong><em>$3</em></strong></$1></del>"],
-	[/<([a-z]+) style="(font-weight: bold; ?|font-style: italic; ?|text-decoration: underline line-through; ?){3}">([\w\W]*?)<\/\1>/gm, "<del><ins><$1><strong><em>$3</em></strong></$1></ins></del>"],
-	[/<p><blockquote>(.*)(\n)+<\/blockquote><\/p>/i,"<blockquote>$1</blockquote>\n"],
-	/* mise en forme identique contigue */
-	[/<\/(strong|em|ins|del|q|code)>(\s*?)<\1>/gim, "$2"],
-	[/<(br|BR)>/g, "<br />"],
-	[/<(hr|HR)>/g, "<hr />"],
-	/* opera est trop strict ;)) */
-	[/([^\s])\/>/g, "$1 />"],
-	/* br intempestifs de fin de block */
-	[/<br \/>\s*<\/(h1|h2|h3|h4|h5|h6|ul|ol|li|p|blockquote|div)/gi, "</$1"],
-	[/<\/(h1|h2|h3|h4|h5|h6|ul|ol|li|p|blockquote)>([^\n\u000B\r\f])/gi, "</$1>\n$2"],
-	[/<hr style="width: 100%; height: 2px;" \/>/g, "<hr />"]
-);
-
-/** Cleanup HTML code
-*/
-jsToolBar.prototype.tagsoup2xhtml = function(html) {
-	for (var reg in this.simpleCleanRegex) {
-		html = html.replace(this.simpleCleanRegex[reg][0], this.simpleCleanRegex[reg][1]);
-	}
-	/* tags vides */
-	/* note : on tente de ne pas tenir compte des commentaires html, ceux-ci
-	   permettent entre autre d'inserer des commentaires conditionnels pour ie */
-	while ( /(<[^\/!]>|<[^\/!][^>]*[^\/]>)\s*<\/[^>]*[^-]>/.test(html) ) {
-		html = html.replace(/(<[^\/!]>|<[^\/!][^>]*[^\/]>)\s*<\/[^>]*[^-]>/g, "");
-	}
-
-	/* tous les tags en minuscule */
-	html = html.replace(/<(\/?)([A-Z0-9]+)/g,
-			function(match0, match1, match2) {
-				return "<" + match1 + match2.toLowerCase();
-			});
-
-	/* IE laisse souvent des attributs sans guillemets */
-	var myRegexp = /<[^>]+((\s+\w+\s*=\s*)([^"'][\w~@+$,%\/:.#?=&;!*()-]*))[^>]*?>/;
-	while ( myRegexp.test(html)) {
-		html = html.replace(
-			myRegexp,
-			function (str, val1, val2, val3){
-				var tamponRegex = new RegExp(regexpEscape(val1));
-				return str.replace(tamponRegex, val2+'"'+val3+'"');
-			}
-		)
-	}
-
-	/* les navigateurs rajoutent une unite aux longueurs css nulles */
-	/* note: a ameliorer ! */
-	while ( /(<[^>]+style=(["'])[^>]+[\s:]+)0(pt|px)(\2|\s|;)/.test(html)) {
-		html = html.replace(/(<[^>]+style=(["'])[^>]+[\s:]+)0(pt|px)(\2|\s|;)/gi, "$1"+"0$4");
-	}
-
-	/* correction des fins de lignes : le textarea edite contient des \n
-	* le wysiwyg des \r\n , et le textarea mis a jour SANS etre affiche des \r\n ! */
-	html = html.replace(/\r\n/g,"\n");
-
-	/* Trim only if there's no pre tag */
-	pattern_pre = /<pre>[\s\S]*<\/pre>/gi;
-	if (!pattern_pre.test(html)) {
-		html = html.replace(/^\s+/gm,'');
-		html = html.replace(/\s+$/gm,'');
-	}
-
-	return html;
-};
-jsToolBar.prototype.validBlockquote = function() {
-	var blockElts = ['address','blockquote','dl','div','fieldset','form','h1',
-	                 'h2','h3','h4','h5','h6','hr','ol','p','pre','table','ul'];
-	var BQs = this.iwin.document.getElementsByTagName('blockquote');
-	var bqChilds;
-
-	for (var bq = 0; bq < BQs.length; bq++) {
-		bqChilds = BQs[bq].childNodes;
-		var frag = this.iwin.document.createDocumentFragment();
-		for (var i = (bqChilds.length-1); i >= 0; i--) {
-			if (bqChilds[i].nodeType == 1 && // Node.ELEMENT_NODE
-			    arrayIndexOf(blockElts, bqChilds[i].tagName.toLowerCase()) >= 0)
-			{
-				if (frag.childNodes.length > 0) {
-					var p = this.iwin.document.createElement('p');
-					p.appendChild(frag);
-					BQs[bq].replaceChild(p, bqChilds[i+1]);
-					frag = this.iwin.document.createDocumentFragment();
-				}
-			} else {
-				if (frag.childNodes.length > 0) BQs[bq].removeChild(bqChilds[i+1]);
-				frag.insertBefore(bqChilds[i].cloneNode(true), frag.firstChild);
-			}
-		}
-		if (frag.childNodes.length > 0) {
-			var p = this.iwin.document.createElement('p');
-			p.appendChild(frag);
-			BQs[bq].replaceChild(p, bqChilds[0]);
-		}
-	}
-};
-
-/* Removing text formating */
-jsToolBar.prototype.removeFormatRegexp = new Array(
-	[/(<[a-z][^>]*)margin\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)margin-bottom\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)margin-left\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)margin-right\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)margin-top\s*:[^;]*;/mg, "$1"],
-
-	[/(<[a-z][^>]*)padding\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)padding-bottom\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)padding-left\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)padding-right\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)padding-top\s*:[^;]*;/mg, "$1"],
-
-	[/(<[a-z][^>]*)font\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)font-family\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)font-size\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)font-style\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)font-variant\s*:[^;]*;/mg, "$1"],
-	[/(<[a-z][^>]*)font-weight\s*:[^;]*;/mg, "$1"],
-
-	[/(<[a-z][^>]*)color\s*:[^;]*;/mg, "$1"]
-);
-
-jsToolBar.prototype.removeTextFormating = function(html) {
-	for (var reg in this.removeFormatRegexp) {
-		html = html.replace(this.removeFormatRegexp[reg][0], this.removeFormatRegexp[reg][1]);
-	}
-
-	html = this.tagsoup2xhtml(html);
-	html = html.replace(/style="\s*?"/mgi,'');
-	return html;
-};
-
-/** Toolbar elements
--------------------------------------------------------- */
-jsToolBar.prototype.elements.blocks.wysiwyg = {
-	list: ['none','p','h1','h2','h3','h4','h5','h6'],
-	fn: function(opt) {
-		if (opt=='none') {
-			var blockLevel = this.getBlockLevel();
-			if (blockLevel !== null) {
-				this.replaceNodeByContent(blockLevel);
-			}
-			this.iwin.focus();
-		} else {
-			try { this.iwin.document.execCommand('formatblock',false,'<'+opt+'>');
-			} catch(e){};
-			this.iwin.focus();
-		}
-	}
-};
-
-jsToolBar.prototype.elements.strong.fn.wysiwyg = function() {
-	this.iwin.document.execCommand('bold', false, null);
-	this.iwin.focus();
-};
-
-jsToolBar.prototype.elements.em.fn.wysiwyg = function() {
-	this.iwin.document.execCommand('italic', false, null);
-	this.iwin.focus();
-};
-
-jsToolBar.prototype.elements.ins.fn.wysiwyg = function() {
-	this.iwin.document.execCommand('underline', false, null);
-	this.iwin.focus();
-};
-
-jsToolBar.prototype.elements.del.fn.wysiwyg = function() {
-	this.iwin.document.execCommand('strikethrough', false, null);
-	this.iwin.focus();
-};
-
-jsToolBar.prototype.elements.quote.fn.wysiwyg = function() {
-	var n = this.getSelectedNode();
-	var q = this.iwin.document.createElement('q');
-	q.appendChild(n);
-	this.insertNode(q);
-};
-
-jsToolBar.prototype.elements.code.fn.wysiwyg = function() {
-	var n = this.getSelectedNode();
-	var code = this.iwin.document.createElement('code');
-	code.appendChild(n);
-	this.insertNode(code);
-};
-
-jsToolBar.prototype.elements.br.fn.wysiwyg = function() {
-	var n = this.iwin.document.createElement('br');
-	this.insertNode(n);
-};
-
-jsToolBar.prototype.elements.blockquote.fn.wysiwyg = function() {
-	var n = this.getSelectedNode();
-	var q = this.iwin.document.createElement('blockquote');
-	q.appendChild(n);
-	this.insertNode(q);
-};
-
-jsToolBar.prototype.elements.pre.fn.wysiwyg = function() {
-	this.iwin.document.execCommand('formatblock',false,'<pre>');
-	this.iwin.focus();
-};
-
-jsToolBar.prototype.elements.ul.fn.wysiwyg = function() {
-	this.iwin.document.execCommand('insertunorderedlist',false,null);
-	this.iwin.focus();
-};
-
-jsToolBar.prototype.elements.ol.fn.wysiwyg = function() {
-	this.iwin.document.execCommand('insertorderedlist',false,null);
-	this.iwin.focus();
-};
-
-jsToolBar.prototype.elements.link.fn.wysiwyg = function() {
-	var href, hreflang;
-	var range, commonAncestorContainer;
-	if (this.iwin.getSelection) { //gecko
-		var selection = this.iwin.getSelection();
-		range = selection.getRangeAt(0);
-		commonAncestorContainer = range.commonAncestorContainer;
-		while (commonAncestorContainer.nodeType != 1) {
-			commonAncestorContainer = commonAncestorContainer.parentNode;
-		}
-	} else { //ie
-		range = this.iwin.document.selection.createRange();
-		commonAncestorContainer = range.parentElement();
-	}
-
-	var ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
-	while (ancestorTagName!='a' && ancestorTagName!='body') {
-		commonAncestorContainer = commonAncestorContainer.parentNode;
-		ancestorTagName = commonAncestorContainer.tagName.toLowerCase();
-	}
-
-	// Update or remove link?
-	if (ancestorTagName == 'a') {
-		href = commonAncestorContainer.href || '';
-		hreflang = commonAncestorContainer.hreflang || '';
-	}
-
-	href = window.prompt(this.elements.link.href_prompt,href);
-
-	// Remove link
-	if (ancestorTagName == 'a' && href=='') {
-		this.replaceNodeByContent(commonAncestorContainer);
-	}
-	if (!href) return; // user cancel
-
-	hreflang = window.prompt(this.elements.link.hreflang_prompt, hreflang);
-
-	// Update link
-	if (ancestorTagName == 'a' && href) {
-		commonAncestorContainer.setAttribute('href', href);
-		if (hreflang) {
-			commonAncestorContainer.setAttribute('hreflang', hreflang);
-		} else {
-			commonAncestorContainer.removeAttribute('hreflang');
-		}
-		return;
-	}
-
-	// Create link
-	var n = this.getSelectedNode();
-	var a = this.iwin.document.createElement('a');
-	a.href = href;
-	if (hreflang) a.setAttribute('hreflang',hreflang);
-	a.appendChild(n);
-	this.insertNode(a);
-};
-
-
-
-// Remove format and Toggle
-jsToolBar.prototype.elements.removeFormat = {
-	type: 'button',
-	title: 'Remove text formating',
-	fn: {}
-};
-jsToolBar.prototype.elements.removeFormat.disabled = !jsToolBar.prototype.can_wwg;
-jsToolBar.prototype.elements.removeFormat.fn.xhtml = function() {
-	var html = this.textarea.value;
-	html = this.removeTextFormating(html);
-	this.textarea.value = html;
-};
-jsToolBar.prototype.elements.removeFormat.fn.wysiwyg = function() {
-	var html = this.iwin.document.body.innerHTML;
-	html = this.removeTextFormating(html);
-	this.iwin.document.body.innerHTML = html;
-};
-/** Utilities
--------------------------------------------------------- */
-function arrayIndexOf(aArray, aValue){
-	if (typeof Array.indexOf == 'function') {
-		return aArray.indexOf(aValue);
-	} else {
-		var index = -1;
-		var l = aArray.length;
-		for (var i = 0; i < l ; i++) {
-			if (aArray[i] === aValue) {
-				index = i;
-				break;
-			}
-		}
-		return index;
-	}
-};
-function addEvent(obj, evType, fn, useCapture) {
-	if (obj.addEventListener){
-		obj.addEventListener(evType, fn, useCapture);
-		return true;
-	} else if (obj.attachEvent){
-		var r = obj.attachEvent("on"+evType, fn);
-		return r;
-	} else {
-		return false;
-	}
-};
-function removeEvent(obj, evType, fn, useCapture) {
-	if (obj.removeEventListener){
-		obj.removeEventListener(evType, fn, useCapture);
-		return true;
-	} else if (obj.detachEvent){
-		var r = obj.detachEvent("on"+evType, fn);
-		return r;
-	} else {
-		return false;
-  }
-};
-function regexpEscape(s) {
-	return s.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g,"\\$1")
-};
Index: lugins/dcLegacyEditor/js/jsToolBar/popup_link.js
===================================================================
--- plugins/dcLegacyEditor/js/jsToolBar/popup_link.js	(revision 2614)
+++ 	(revision )
@@ -1,23 +1,0 @@
-$(function() {
-	$('#link-insert-cancel').click(function() {
-		window.close();
-	});
-
-	$('#link-insert-ok').click(function() {
-		sendClose();
-		window.close();
-	});
-
-	function sendClose() {
-		var insert_form = $('#link-insert-form').get(0);
-		if (insert_form == undefined) { return; }
-
-		var tb = window.opener.the_toolbar;
-		var data = tb.elements.link.data;
-
-		data.href = tb.stripBaseURL(insert_form.elements.href.value);
-		data.title = insert_form.elements.title.value;
-		data.hreflang = insert_form.elements.hreflang.value;
-		tb.elements.link.fncall[tb.mode].call(tb);
-	};
-});
Index: lugins/dcLegacyEditor/js/jsToolBar/popup_media.js
===================================================================
--- plugins/dcLegacyEditor/js/jsToolBar/popup_media.js	(revision 2614)
+++ 	(revision )
@@ -1,92 +1,0 @@
-$(function() {
-	var toolBar = window.opener.the_toolbar.textarea;
-
-	$('#media-insert').onetabload(function() {
-		$('#media-insert-cancel').click(function() {
-			window.close();
-		});
-
-		$('#media-insert-ok').click(function() {
-			sendClose();
-			window.close();
-		});
-	});
-
-	function sendClose() {
-		var insert_form = $('#media-insert-form').get(0);
-		if (insert_form == undefined) { return; }
-
-		var tb = window.opener.the_toolbar;
-		var type = insert_form.elements.type.value;
-
-		var media_align_grid = {
-			left: 'float: left; margin: 0 1em 1em 0;',
-			right: 'float: right; margin: 0 0 1em 1em;',
-			center: 'text-align: center;'
-		};
-
-		if (type == 'image')
-		{
-			tb.elements.img_select.data.src = tb.stripBaseURL($('input[name="src"]:checked',insert_form).val());
-			tb.elements.img_select.data.alignment = $('input[name="alignment"]:checked',insert_form).val();
-			tb.elements.img_select.data.link = $('input[name="insertion"]:checked',insert_form).val() == 'link';
-
-			tb.elements.img_select.data.title = insert_form.elements.title.value;
-			tb.elements.img_select.data.description = $('input[name="description"]',insert_form).val();
-			tb.elements.img_select.data.url = tb.stripBaseURL(insert_form.elements.url.value);
-			tb.elements.img_select.fncall[tb.mode].call(tb);
-		}
-		else if (type == 'mp3')
-		{
-			var player = $('#public_player').val();
-			var align = $('input[name="alignment"]:checked',insert_form).val();
-
-			if (align != undefined && align != 'none') {
-				player = '<div style="' + media_align_grid[align] + '">' + player + '</div>';
-			}
-
-			tb.elements.mp3_insert.data.player = player.replace(/>/g,'>\n');
-			tb.elements.mp3_insert.fncall[tb.mode].call(tb);
-		}
-		else if (type == 'flv')
-		{
-			var oplayer = $('<div>'+$('#public_player').val()+'</div>');
-			var flashvars = $("[name=FlashVars]",oplayer).val();
-
-			var align = $('input[name="alignment"]:checked',insert_form).val();
-			var title = insert_form.elements.title.value;
-
-			if (title) {
-				flashvars = 'title='+encodeURI(title)+'&amp;'+flashvars;
-			}
-			$('object',oplayer).attr('width',$('#video_w').val());
-			$('object',oplayer).attr('height',$('#video_h').val());
-			flashvars = flashvars.replace(/(width=\d*)/,'width='+$('#video_w').val());
-			flashvars = flashvars.replace(/(height=\d*)/,'height='+$('#video_h').val());
-
-			$("[name=FlashVars]",oplayer).val(flashvars);
-			var player = oplayer.html();
-
-			if (align != undefined && align != 'none') {
-				player = '<div style="' + media_align_grid[align] + '">' + player + '</div>';
-			}
-
-			tb.elements.flv_insert.data.player = player.replace(/>/g,'>\n');
-			tb.elements.flv_insert.fncall[tb.mode].call(tb);
-		}
-		else
-		{
-			tb.elements.link.data.href = tb.stripBaseURL(insert_form.elements.url.value);
-			tb.elements.link.data.content = insert_form.elements.title.value;
-			tb.elements.link.fncall[tb.mode].call(tb);
-		}
-	};
-
-	function playerFormat(s) {
-		s = s.replace(/&lt;/g,'<');
-		s = s.replace(/&gt;/g,'>\n');
-		s = s.replace(/&amp;/g,'&');
-
-		return s;
-	};
-});
Index: lugins/dcLegacyEditor/js/jsToolBar/popup_posts.js
===================================================================
--- plugins/dcLegacyEditor/js/jsToolBar/popup_posts.js	(revision 2614)
+++ 	(revision )
@@ -1,16 +1,0 @@
-$(function() {
-	$('#link-insert-cancel').click(function() {
-		window.close();
-	});
-
-	$('#form-entries tr>td.maximal>a').click(function() {
-		// Get post_id
-		var tb = window.opener.the_toolbar;
-		var data = tb.elements.link.data;
-
-		data.href = tb.stripBaseURL($(this).attr('title'));
-
-		tb.elements.link.fncall[tb.mode].call(tb);
-		window.close();
-	});
-});
Index: lugins/dcLegacyEditor/locales/en/help/legacy_editor.html
===================================================================
--- plugins/dcLegacyEditor/locales/en/help/legacy_editor.html	(revision 2614)
+++ 	(revision )
@@ -1,9 +1,0 @@
-<html>
-  <head>
-    <title>dcLegacyEditor</title>
-  </head>
-  <body>
-    <h4>dcLegacyEditor</h4>
-    <p>Legacy dotclear editor.</p>
-  </body>
-</html>
Index: lugins/dcLegacyEditor/locales/en/resources.php
===================================================================
--- plugins/dcLegacyEditor/locales/en/resources.php	(revision 2614)
+++ 	(revision )
@@ -1,13 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-$__resources['help']['dcLegacyEditor'] = dirname(__FILE__).'/help/legacy_editor.html';
Index: lugins/dcLegacyEditor/locales/fr/help/legacy_editor.html
===================================================================
--- plugins/dcLegacyEditor/locales/fr/help/legacy_editor.html	(revision 2614)
+++ 	(revision )
@@ -1,9 +1,0 @@
-<html>
-  <head>
-    <title>dcLegacyEditor</title>
-  </head>
-  <body>
-    <h4>Editeur</h4>
-    <p>Editeur historique de dotclear.</p>
-  </body>
-</html>
Index: lugins/dcLegacyEditor/locales/fr/resources.php
===================================================================
--- plugins/dcLegacyEditor/locales/fr/resources.php	(revision 2614)
+++ 	(revision )
@@ -1,13 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-$__resources['help']['dcLegacyEditor'] = dirname(__FILE__).'/help/legacy_editor.html';
Index: lugins/dcLegacyEditor/tpl/index.tpl
===================================================================
--- plugins/dcLegacyEditor/tpl/index.tpl	(revision 2614)
+++ 	(revision )
@@ -1,33 +1,0 @@
-<html>
-  <head>
-    <title>dcLegacyEditor</title>
-  </head>
-  <body>
-    <h2><?php echo html::escapeHTML($core->blog->name);?> &gt; dcLegacyEditor</h2>
-    <?php if (!empty($message)):?>
-    <p class="message"><?php echo $message;?></p>
-    <?php endif;?>
-
-    <?php if ($is_super_admin):?>
-    <h3 class="hidden-if-js"><?php echo __('Settings');?></h3>
-    <form action="<?php echo $p_url;?>" method="post" enctype="multipart/form-data">
-      <div class="fieldset">
-	<h3><?php echo __('Plugin activation');?></h3>
-	<p>
-	  <label class="classic" for="dclegacyeditor_active">
-	    <?php echo form::checkbox('dclegacyeditor_active', 1, $dclegacyeditor_active);?>
-	    <?php echo __('Enable dcLegacyEditor plugin');?>
-	  </label>
-	</p>
-      </div>
-      
-      <p>
-	<input type="hidden" name="p" value="dcLegacyEditor"/>
-	<?php echo $core->formNonce();?>
-	<input type="submit" name="saveconfig" value="<?php echo __('Save configuration');?>" />
-      </p>
-    </form>
-    <?php endif;?>
-    <?php dcPage::helpBlock('dcLegacyEditor');?>
-  </body>
-</html>
Index: plugins/pages/_define.php
===================================================================
--- plugins/pages/_define.php	(revision 2662)
+++ plugins/pages/_define.php	(revision 2566)
@@ -16,5 +16,5 @@
 	/* Description*/	"Serve entries as simple web pages",
 	/* Author */		"Olivier Meunier",
-	/* Version */		'1.4',
+	/* Version */		'1.3',
 	array(
 		'permissions' =>	'contentadmin,pages',
Index: plugins/pages/_public.php
===================================================================
--- plugins/pages/_public.php	(revision 2667)
+++ plugins/pages/_public.php	(revision 2634)
@@ -117,16 +117,10 @@
 					if ($content != '')
 					{
-						# --BEHAVIOR-- publicBeforeCommentTransform
-						$buffer = $core->callBehavior('publicBeforeCommentTransform',$content);
-						if ($buffer != '') {
-							$content = $buffer;
+						if ($core->blog->settings->system->wiki_comments) {
+							$core->initWikiComment();
 						} else {
-							if ($core->blog->settings->system->wiki_comments) {
-								$core->initWikiComment();
-							} else {
-								$core->initWikiSimpleComment();
-							}
-							$content = $core->wikiTransform($content);
-						}
+							$core->initWikiSimpleComment();
+						}
+						$content = $core->wikiTransform($content);
 						$content = $core->HTMLfilter($content);
 					}
@@ -195,11 +189,5 @@
 					header('X-Pingback: '.$core->blog->url.$core->url->getURLFor("xmlrpc",$core->blog->id));
 				}
-
-				$tplset = $core->themes->moduleInfo($core->blog->settings->system->theme,'tplset');
-				if (!empty($tplset) && is_dir(dirname(__FILE__).'/default-templates/'.$tplset)) {
-					$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'.$tplset);
-				} else {
-					$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'.DC_DEFAULT_TPLSET);
-				}
+				$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates');
 				self::serveDocument('page.html');
 			}
@@ -268,5 +256,8 @@
 		}
 
-		$res = ($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').'<ul>';
+		$res =
+		($w->content_only ? '' : '<div class="pages'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
+		'<ul>';
 
 		while ($rs->fetch()) {
@@ -279,7 +270,7 @@
 		}
 
-		$res .= '</ul>';
-
-		return $w->renderDiv($w->content_only,'pages '.$w->class,'',$res);
+		$res .= '</ul>'.($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 }
Index: plugins/pages/_widgets.php
===================================================================
--- plugins/pages/_widgets.php	(revision 2671)
+++ plugins/pages/_widgets.php	(revision 2566)
@@ -44,5 +44,5 @@
 	public static function initDefaultWidgets($w,$d)
 	{
-		$d['nav']->append($w->pages);
+		$d['extra']->append($w->pages);
 	}
 }
Index: lugins/pages/default-templates/currywurst/page.html
===================================================================
--- plugins/pages/default-templates/currywurst/page.html	(revision 2693)
+++ 	(revision )
@@ -1,13 +1,0 @@
-{{tpl:extends parent="post.html"}}
-
-<tpl:Block name="head-linkrel">
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-</tpl:Block>
-
-<tpl:Block name="body-tag"><body class="dc-page"></tpl:Block>
-
-<tpl:Block name="main-content">
-  {{tpl:include src="_simple-entry.html"}}
-</tpl:Block>
Index: lugins/pages/default-templates/mustek/page.html
===================================================================
--- plugins/pages/default-templates/mustek/page.html	(revision 2603)
+++ 	(revision )
@@ -1,247 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
-
-  <title>{{tpl:EntryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}</title>
-  <meta name="description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
-  <meta name="date" content="{{tpl:EntryDate iso8601="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" content="{{tpl:EntryTitle encode_html="1"}}" />
-  <meta property="dc.description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
-  <meta property="dc.creator" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
-  <meta property="dc.language" content="{{tpl:EntryLang}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.date" content="{{tpl:EntryDate iso8601="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-  <tpl:EntryIf pings_active="1"><link rel="pingback" href="{{tpl:BlogXMLRPCURL}}" /></tpl:EntryIf>
-
-  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
-
-  {{tpl:include src="_head.html"}}
-
-  <script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/post.js"></script>
-  <script type="text/javascript">
-  //<![CDATA[
-  var post_remember_str = '{{tpl:lang Remember me on this blog}}';
-  //]]>
-  </script>
-</head>
-
-<body class="dc-page">
-<div id="page">
-{{tpl:EntryPingData}}
-
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-
-  <div id="p{{tpl:EntryID}}" class="post" role="article">
-    <h2 class="post-title">{{tpl:EntryTitle encode_html="1"}}</h2>
-
-    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-    <tpl:EntryIf extended="1">
-      <div class="post-excerpt">{{tpl:EntryExcerpt}}</div>
-    </tpl:EntryIf>
-    <div class="post-content">{{tpl:EntryContent}}</div>
-
-    <p class="page-info">{{tpl:lang Published on}} {{tpl:EntryDate}}
-    {{tpl:lang by}} {{tpl:EntryAuthorLink}}</p>
-
-    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
-    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-  </div>
-
-  <!-- # Attachments -->
-  <tpl:Attachments>
-    <tpl:AttachmentsHeader>
-      <div id="attachments">
-      <h3>{{tpl:lang Attachments}}</h3>
-      <ul>
-    </tpl:AttachmentsHeader>
-      <li class="{{tpl:AttachmentType}}">
-        <tpl:AttachmentIf is_mp3="1">
-          {{tpl:include src="_mp3_player.html"/}} -
-        </tpl:AttachmentIf>
-        <tpl:AttachmentIf is_flv="1">
-	     {{tpl:include src="_flv_player.html"/}}
-	   </tpl:AttachmentIf>
-	   <tpl:AttachmentIf is_flv="0">
-	   	<a href="{{tpl:AttachmentURL}}"
-		title="{{tpl:AttachmentFileName}} ({{tpl:AttachmentSize}})">{{tpl:AttachmentTitle}}</a>
-        </tpl:AttachmentIf>
-      </li>
-    <tpl:AttachmentsFooter>
-      </ul>
-      </div>
-    </tpl:AttachmentsFooter>
-  </tpl:Attachments>
-
-  <!-- # Comments -->
-  <tpl:EntryIf show_comments="1">
-    <tpl:Comments>
-    <tpl:CommentsHeader>
-    <div id="comments">
-      <h3>{{tpl:lang Comments}}</h3>
-      <dl>
-    </tpl:CommentsHeader>
-      <dt id="c{{tpl:CommentID}}" class="{{tpl:CommentIfMe}} {{tpl:CommentIfOdd}} {{tpl:CommentIfFirst}}"><a
-      href="#c{{tpl:CommentID}}" class="comment-number">{{tpl:CommentOrderNumber}}.</a>
-      {{tpl:lang On}} {{tpl:CommentDate}}, {{tpl:CommentTime}}
-      {{tpl:lang by}} {{tpl:CommentAuthorLink}}</dt>
-
-      <dd class="{{tpl:CommentIfMe}} {{tpl:CommentIfOdd}} {{tpl:CommentIfFirst}}">
-      <!-- # --BEHAVIOR-- publicCommentBeforeContent -->
-      {{tpl:SysBehavior behavior="publicCommentBeforeContent"}}
-
-      {{tpl:CommentContent}}
-
-      <!-- # --BEHAVIOR-- publicCommentAfterContent -->
-      {{tpl:SysBehavior behavior="publicCommentAfterContent"}}
-      </dd>
-    <tpl:CommentsFooter>
-      </dl>
-    </div>
-    </tpl:CommentsFooter>
-    </tpl:Comments>
-  </tpl:EntryIf>
-
-  <tpl:EntryIf comments_active="1">
-    <tpl:SysIfFormError>
-      <p class="error" id="pr">{{tpl:SysFormError}}</p>
-    </tpl:SysIfFormError>
-
-    <tpl:SysIfCommentPublished>
-      <p class="message" id="pr">{{tpl:lang Your comment has been published.}}</p>
-    </tpl:SysIfCommentPublished>
-
-    <tpl:SysIfCommentPending>
-      <p class="message" id="pr">{{tpl:lang Your comment has been submitted and
-      will be reviewed for publication.}}</p>
-    </tpl:SysIfCommentPending>
-
-    <!-- # Comment form -->
-    <form action="{{tpl:EntryURL}}#pr" method="post" id="comment-form" role="form">
-      <tpl:IfCommentPreview>
-        <div id="pr">
-          <h3>{{tpl:lang Your comment}}</h3>
-          <dl>
-            <dd class="comment-preview">{{tpl:CommentPreviewContent}}</dd>
-          </dl>
-          <p class="buttons"><input type="submit" class="submit" value="{{tpl:lang send}}" /></p>
-        </div>
-      </tpl:IfCommentPreview>
-
-      <h3>{{tpl:lang Add a comment}}</h3>
-      <fieldset>
-        <!-- # --BEHAVIOR-- publicCommentFormBeforeContent -->
-        {{tpl:SysBehavior behavior="publicCommentFormBeforeContent"}}
-
-        <p class="field"><label for="c_name">{{tpl:lang Name or nickname}}&nbsp;:</label>
-        <input name="c_name" id="c_name" type="text" size="30" maxlength="255"
-        value="{{tpl:CommentPreviewName encode_html="1"}}" />
-        </p>
-
-        <p class="field"><label for="c_mail">{{tpl:lang Email address}}&nbsp;:</label>
-        <input name="c_mail" id="c_mail" type="text" size="30" maxlength="255"
-        value="{{tpl:CommentPreviewEmail encode_html="1"}}" />
-        </p>
-
-        <p class="field"><label for="c_site">{{tpl:lang Website}} ({{tpl:lang optional}})&nbsp;:</label>
-        <input name="c_site" id="c_site" type="text" size="30" maxlength="255"
-        value="{{tpl:CommentPreviewSite encode_html="1"}}" />
-        </p>
-
-        <p style="display:none"><input name="f_mail" type="text" size="30"
-        maxlength="255" value="" /></p>
-
-        <p class="field"><label for="c_content">{{tpl:lang Comment}}&nbsp;:</label>
-        <textarea name="c_content" id="c_content" cols="35"
-        rows="7">{{tpl:CommentPreviewContent raw="1" encode_html="1"}}</textarea>
-        </p>
-
-        <p class="form-help">{{tpl:CommentHelp}}</p>
-
-        <!-- # --BEHAVIOR-- publicCommentFormAfterContent -->
-        {{tpl:SysBehavior behavior="publicCommentFormAfterContent"}}
-      </fieldset>
-
-      <fieldset>
-        <p class="buttons"><input type="submit" class="preview" name="preview" value="{{tpl:lang preview}}" />
-        <tpl:IfCommentPreview><input type="submit" class="submit" value="{{tpl:lang send}}" /></tpl:IfCommentPreview></p>
-      </fieldset>
-    </form>
-  </tpl:EntryIf>
-
-  <!-- # Trackbacks -->
-  <tpl:EntryIf show_pings="1">
-    <div id="pings">
-    <h3>{{tpl:lang They posted on the same topic}}</h3>
-    <tpl:Pings>
-      <tpl:PingsHeader>
-      <dl>
-      </tpl:PingsHeader>
-        <dt id="c{{tpl:PingID}}" class="{{tpl:PingIfOdd}} {{tpl:PingIfFirst}}"><a href="#c{{tpl:PingID}}"
-        class="ping-number">{{tpl:PingOrderNumber}}.</a>
-        {{tpl:lang On}} {{tpl:PingDate}}, {{tpl:PingTime}}
-        {{tpl:lang by}} {{tpl:PingBlogName encode_html="1"}}</dt>
-
-        <dd class="{{tpl:PingIfOdd}} {{tpl:PingIfFirst}}">
-        <!-- # --BEHAVIOR-- publicPingBeforeContent -->
-        {{tpl:SysBehavior behavior="publicPingBeforeContent"}}
-
-        <p><a href="{{tpl:PingAuthorURL}}"
-        {{tpl:PingNoFollow}}>{{tpl:PingTitle encode_html="1"}}</a></p>
-        {{tpl:PingContent}}
-
-        <!-- # --BEHAVIOR-- publicPingAfterContent -->
-        {{tpl:SysBehavior behavior="publicPingAfterContent"}}
-        </dd>
-      <tpl:PingsFooter>
-      </dl>
-      </tpl:PingsFooter>
-    </tpl:Pings>
-    </div>
-  </tpl:EntryIf>
-
-  <tpl:EntryIf pings_active="1">
-    <p id="ping-url">{{tpl:lang Trackback URL}}&nbsp;: {{tpl:EntryPingLink}}</p>
-  </tpl:EntryIf>
-
-  <tpl:EntryIf operator="or" comments_active="1" pings_active="1">
-  <p id="comments-feed"><a class="feed" href="{{tpl:BlogFeedURL type="atom"}}/comments/{{tpl:EntryID}}"
-  title="{{tpl:lang This page's comments feed}}">{{tpl:lang This page's comments feed}}</a></p>
-  </tpl:EntryIf>
-  </div>
-</div> <!-- End #main -->
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: plugins/pages/default-templates/page.html
===================================================================
--- plugins/pages/default-templates/page.html	(revision 2566)
+++ plugins/pages/default-templates/page.html	(revision 2566)
@@ -0,0 +1,248 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
+
+  <title>{{tpl:EntryTitle encode_html="1"}} - {{tpl:BlogName encode_html="1"}}</title>
+  <meta name="description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:EntryDate iso8601="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" content="{{tpl:EntryTitle encode_html="1"}}" />
+  <meta name="dc.description" lang="{{tpl:EntryLang}}" content="{{tpl:EntryContent full="1" encode_html="1" remove_html="1" cut_string="180"}}" />
+  <meta name="dc.creator" content="{{tpl:EntryAuthorCommonName encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:EntryLang}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:EntryDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+  <tpl:EntryIf pings_active="1"><link rel="pingback" href="{{tpl:BlogXMLRPCURL}}" /></tpl:EntryIf>
+
+  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
+
+  {{tpl:include src="_head.html"}}
+
+  <script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/post.js"></script>
+  <script type="text/javascript">
+  //<![CDATA[
+  var post_remember_str = '{{tpl:lang Remember me on this blog}}';
+  //]]>
+  </script>
+</head>
+
+<body class="dc-page">
+<div id="page">
+{{tpl:EntryPingData}}
+
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <div id="p{{tpl:EntryID}}" class="post">
+    <h2 class="post-title">{{tpl:EntryTitle encode_html="1"}}</h2>
+
+    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
+    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
+
+    <tpl:EntryIf extended="1">
+      <div class="post-excerpt">{{tpl:EntryExcerpt}}</div>
+    </tpl:EntryIf>
+    <div class="post-content">{{tpl:EntryContent}}</div>
+
+    <p class="page-info">{{tpl:lang Published on}} {{tpl:EntryDate}}
+    {{tpl:lang by}} {{tpl:EntryAuthorLink}}</p>
+
+    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
+    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
+  </div>
+
+  <!-- # Attachments -->
+  <tpl:Attachments>
+    <tpl:AttachmentsHeader>
+      <div id="attachments">
+      <h3>{{tpl:lang Attachments}}</h3>
+      <ul>
+    </tpl:AttachmentsHeader>
+      <li class="{{tpl:AttachmentType}}">
+        <tpl:AttachmentIf is_mp3="1">
+          {{tpl:include src="_mp3_player.html"/}} -
+        </tpl:AttachmentIf>
+        <tpl:AttachmentIf is_flv="1">
+	     {{tpl:include src="_flv_player.html"/}}
+	   </tpl:AttachmentIf>
+	   <tpl:AttachmentIf is_flv="0">
+	   	<a href="{{tpl:AttachmentURL}}"
+		title="{{tpl:AttachmentFileName}} ({{tpl:AttachmentSize}})">{{tpl:AttachmentTitle}}</a>
+        </tpl:AttachmentIf>
+      </li>
+    <tpl:AttachmentsFooter>
+      </ul>
+      </div>
+    </tpl:AttachmentsFooter>
+  </tpl:Attachments>
+
+  <!-- # Comments -->
+  <tpl:EntryIf show_comments="1">
+    <tpl:Comments>
+    <tpl:CommentsHeader>
+    <div id="comments">
+      <h3>{{tpl:lang Comments}}</h3>
+      <dl>
+    </tpl:CommentsHeader>
+      <dt id="c{{tpl:CommentID}}" class="{{tpl:CommentIfMe}} {{tpl:CommentIfOdd}} {{tpl:CommentIfFirst}}"><a
+      href="#c{{tpl:CommentID}}" class="comment-number">{{tpl:CommentOrderNumber}}.</a>
+      {{tpl:lang On}} {{tpl:CommentDate}}, {{tpl:CommentTime}}
+      {{tpl:lang by}} {{tpl:CommentAuthorLink}}</dt>
+
+      <dd class="{{tpl:CommentIfMe}} {{tpl:CommentIfOdd}} {{tpl:CommentIfFirst}}">
+      <!-- # --BEHAVIOR-- publicCommentBeforeContent -->
+      {{tpl:SysBehavior behavior="publicCommentBeforeContent"}}
+
+      {{tpl:CommentContent}}
+
+      <!-- # --BEHAVIOR-- publicCommentAfterContent -->
+      {{tpl:SysBehavior behavior="publicCommentAfterContent"}}
+      </dd>
+    <tpl:CommentsFooter>
+      </dl>
+    </div>
+    </tpl:CommentsFooter>
+    </tpl:Comments>
+  </tpl:EntryIf>
+
+  <tpl:EntryIf comments_active="1">
+    <tpl:SysIfFormError>
+      <p class="error" id="pr">{{tpl:SysFormError}}</p>
+    </tpl:SysIfFormError>
+
+    <tpl:SysIfCommentPublished>
+      <p class="message" id="pr">{{tpl:lang Your comment has been published.}}</p>
+    </tpl:SysIfCommentPublished>
+
+    <tpl:SysIfCommentPending>
+      <p class="message" id="pr">{{tpl:lang Your comment has been submitted and
+      will be reviewed for publication.}}</p>
+    </tpl:SysIfCommentPending>
+
+    <!-- # Comment form -->
+    <form action="{{tpl:EntryURL}}#pr" method="post" id="comment-form">
+      <tpl:IfCommentPreview>
+        <div id="pr">
+          <h3>{{tpl:lang Your comment}}</h3>
+          <dl>
+            <dd class="comment-preview">{{tpl:CommentPreviewContent}}</dd>
+          </dl>
+          <p class="buttons"><input type="submit" class="submit" value="{{tpl:lang send}}" /></p>
+        </div>
+      </tpl:IfCommentPreview>
+
+      <h3>{{tpl:lang Add a comment}}</h3>
+      <fieldset>
+        <!-- # --BEHAVIOR-- publicCommentFormBeforeContent -->
+        {{tpl:SysBehavior behavior="publicCommentFormBeforeContent"}}
+
+        <p class="field"><label for="c_name">{{tpl:lang Name or nickname}}&nbsp;:</label>
+        <input name="c_name" id="c_name" type="text" size="30" maxlength="255"
+        value="{{tpl:CommentPreviewName encode_html="1"}}" />
+        </p>
+
+        <p class="field"><label for="c_mail">{{tpl:lang Email address}}&nbsp;:</label>
+        <input name="c_mail" id="c_mail" type="text" size="30" maxlength="255"
+        value="{{tpl:CommentPreviewEmail encode_html="1"}}" />
+        </p>
+
+        <p class="field"><label for="c_site">{{tpl:lang Website}} ({{tpl:lang optional}})&nbsp;:</label>
+        <input name="c_site" id="c_site" type="text" size="30" maxlength="255"
+        value="{{tpl:CommentPreviewSite encode_html="1"}}" />
+        </p>
+
+        <p style="display:none"><input name="f_mail" type="text" size="30"
+        maxlength="255" value="" /></p>
+
+        <p class="field"><label for="c_content">{{tpl:lang Comment}}&nbsp;:</label>
+        <textarea name="c_content" id="c_content" cols="35"
+        rows="7">{{tpl:CommentPreviewContent raw="1" encode_html="1"}}</textarea>
+        </p>
+
+        <p class="form-help">{{tpl:CommentHelp}}</p>
+
+        <!-- # --BEHAVIOR-- publicCommentFormAfterContent -->
+        {{tpl:SysBehavior behavior="publicCommentFormAfterContent"}}
+      </fieldset>
+
+      <fieldset>
+        <p class="buttons"><input type="submit" class="preview" name="preview" value="{{tpl:lang preview}}" />
+        <tpl:IfCommentPreview><input type="submit" class="submit" value="{{tpl:lang send}}" /></tpl:IfCommentPreview></p>
+      </fieldset>
+    </form>
+  </tpl:EntryIf>
+
+  <!-- # Trackbacks -->
+  <tpl:EntryIf show_pings="1">
+    <div id="pings">
+    <h3>{{tpl:lang They posted on the same topic}}</h3>
+    <tpl:Pings>
+      <tpl:PingsHeader>
+      <dl>
+      </tpl:PingsHeader>
+        <dt id="c{{tpl:PingID}}" class="{{tpl:PingIfOdd}} {{tpl:PingIfFirst}}"><a href="#c{{tpl:PingID}}"
+        class="ping-number">{{tpl:PingOrderNumber}}.</a>
+        {{tpl:lang On}} {{tpl:PingDate}}, {{tpl:PingTime}}
+        {{tpl:lang by}} {{tpl:PingBlogName encode_html="1"}}</dt>
+
+        <dd class="{{tpl:PingIfOdd}} {{tpl:PingIfFirst}}">
+        <!-- # --BEHAVIOR-- publicPingBeforeContent -->
+        {{tpl:SysBehavior behavior="publicPingBeforeContent"}}
+
+        <p><a href="{{tpl:PingAuthorURL}}"
+        {{tpl:PingNoFollow}}>{{tpl:PingTitle encode_html="1"}}</a></p>
+        {{tpl:PingContent}}
+
+        <!-- # --BEHAVIOR-- publicPingAfterContent -->
+        {{tpl:SysBehavior behavior="publicPingAfterContent"}}
+        </dd>
+      <tpl:PingsFooter>
+      </dl>
+      </tpl:PingsFooter>
+    </tpl:Pings>
+    </div>
+  </tpl:EntryIf>
+
+  <tpl:EntryIf pings_active="1">
+    <p id="ping-url">{{tpl:lang Trackback URL}}&nbsp;: {{tpl:EntryPingLink}}</p>
+  </tpl:EntryIf>
+
+  <tpl:EntryIf operator="or" comments_active="1" pings_active="1">
+  <p id="comments-feed"><a class="feed" href="{{tpl:BlogFeedURL type="atom"}}/comments/{{tpl:EntryID}}"
+  title="{{tpl:lang This page's comments feed}}">{{tpl:lang This page's comments feed}}</a></p>
+  </tpl:EntryIf>
+  </div>
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: plugins/pages/list.php
===================================================================
--- plugins/pages/list.php	(revision 2567)
+++ plugins/pages/list.php	(revision 2566)
@@ -55,7 +55,5 @@
   <title><?php echo __('Pages'); ?></title>
   <?php
-  	echo
-  		dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
-		dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
+  	echo dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
 		dcPage::jsLoad('index.php?pf=pages/list.js').
 		'<script type="text/javascript">'.
Index: plugins/pages/page.php
===================================================================
--- plugins/pages/page.php	(revision 2694)
+++ plugins/pages/page.php	(revision 2511)
@@ -18,5 +18,4 @@
 $post_dt = '';
 $post_format = $core->auth->getOption('post_format');
-$editor = $core->auth->getOption('editor');
 $post_password = '';
 $post_url = '';
@@ -59,5 +58,5 @@
 
 # Formaters combo
-$formaters_combo = dcAdminCombos::getFormatersCombo($editor);
+$formaters_combo = dcAdminCombos::getFormatersCombo();
 
 # Languages combo
@@ -65,15 +64,7 @@
 $lang_combo = dcAdminCombos::getLangsCombo($rs,true);
 
+
 # Validation flag
 $bad_dt = false;
-
-if (count($formaters_combo)==0 || !$core->auth->getOption('editor') || $core->auth->getOption('editor')=='') {
-	dcPage::addNotice("message", 
-					  sprintf(__('Choose an active editor in %s.'), 
-								  '<a href="preferences.php#user-options">'.__('your preferences').'</a>'
-								  )
-					  );
-
-}
 
 # Get page informations
@@ -298,7 +289,7 @@
   <?php echo
   dcPage::jsDatePicker().
+  dcPage::jsToolBar().
   dcPage::jsModal().
   dcPage::jsLoad('js/_post.js').
-  $core->callBehavior('adminPostEditor').
   dcPage::jsConfirmClose('entry-form','comment-form').
   # --BEHAVIOR-- adminPageHeaders
@@ -619,5 +610,5 @@
 		showComments($comments,$has_action);
 	} else {
-		echo '<p>'.__('No comments').'</p>';
+		echo '<p>'.__('No comment').'</p>';
 	}
 
Index: plugins/simpleMenu/_define.php
===================================================================
--- plugins/simpleMenu/_define.php	(revision 2662)
+++ plugins/simpleMenu/_define.php	(revision 2576)
@@ -16,5 +16,5 @@
 	/* Description*/		"Simple menu for Dotclear",
 	/* Author */			"Franck Paul",
-	/* Version */			'1.2',
+	/* Version */			'1.1.2',
 	array(
 		'permissions' =>	'admin',
Index: plugins/simpleMenu/_public.php
===================================================================
--- plugins/simpleMenu/_public.php	(revision 2667)
+++ plugins/simpleMenu/_public.php	(revision 2576)
@@ -52,6 +52,8 @@
 		}
 
-		return $w->renderDiv($w->content_only,'simple-menu '.$w->class,'',
-			($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').$menu);
+		return
+			($w->content_only ? '' : '<div class="simple-menu'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+			($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').$menu.
+			($w->content_only ? '' : '</div>');
 	}
 
@@ -125,5 +127,5 @@
 			// Final rendering
 			if ($ret) {
-				$ret = '<ul '.($id ? 'id="'.$id.'"' : '').' class="simple-menu'.($class ? ' '.$class : '').'" role="navigation">'."\n".$ret."\n".'</ul>';
+				$ret = '<ul '.($id ? 'id="'.$id.'"' : '').' class="simple-menu'.($class ? ' '.$class : '').'">'."\n".$ret."\n".'</ul>';
 			}
 		}
Index: plugins/simpleMenu/index.php
===================================================================
--- plugins/simpleMenu/index.php	(revision 2701)
+++ plugins/simpleMenu/index.php	(revision 2576)
@@ -220,7 +220,5 @@
 					http::redirect($p_url);
 				} else {
-					$step = 3;
-					$item_select_label = $item_label;
-					dcPage::addErrorNotice(__('Label and URL of menu item are mandatory.'));
+					throw new Exception(__('Label and URL of menu item are mandatory.'));
 				}
 			}
@@ -349,5 +347,4 @@
 			echo
 				dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
-				dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
 				dcPage::jsLoad('index.php?pf=simpleMenu/simplemenu.js');
 		}
Index: plugins/tags/_admin.php
===================================================================
--- plugins/tags/_admin.php	(revision 2680)
+++ plugins/tags/_admin.php	(revision 2566)
@@ -40,20 +40,7 @@
 $core->addBehavior('adminPageHelpBlock', array('tagsBehaviors', 'adminPageHelpBlock'));
 
-$core->addBehavior('ckeditorExtraPlugins', array('tagsBehaviors', 'ckeditorExtraPlugins'));
-
 # BEHAVIORS
 class tagsBehaviors
 {
-    public static function ckeditorExtraPlugins(ArrayObject $extraPlugins)
-    {
-        global $core;
-
-        $extraPlugins[] = array(
-            'name' => 'dctags',
-            'button' => 'dcTags',
-            'url' => html::stripHostURL($core->blog->getQmarkURL().'pf=tags/js/ckeditor-tags-plugin.js')
-        );
-    }
-
 	public static function adminPageHelpBlock($blocks)
 	{
Index: plugins/tags/_define.php
===================================================================
--- plugins/tags/_define.php	(revision 2662)
+++ plugins/tags/_define.php	(revision 2566)
@@ -16,5 +16,5 @@
 	/* Description*/		"Tags for posts",
 	/* Author */			"Olivier Meunier",
-	/* Version */			'1.3',
+	/* Version */			'1.2.1',
 	array(
 		'permissions' =>	'usage,contentadmin',
Index: plugins/tags/_public.php
===================================================================
--- plugins/tags/_public.php	(revision 2667)
+++ plugins/tags/_public.php	(revision 2566)
@@ -82,10 +82,5 @@
 	public static function addTplPath($core)
 	{
-		$tplset = $core->themes->moduleInfo($core->blog->settings->system->theme,'tplset');
-		if (!empty($tplset) && is_dir(dirname(__FILE__).'/default-templates/'.$tplset)) {
-			$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'.$tplset);
-		} else {
-			$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'.DC_DEFAULT_TPLSET);
-		}
+		$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates');
 	}
 
@@ -234,5 +229,5 @@
 	public static function tagsWidget($w)
 	{
-		global $core, $_ctx;
+		global $core;
 
 		if (($w->homeonly == 1 && $core->url->type != 'default') ||
@@ -267,23 +262,12 @@
 
 		$res =
-		($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
+		($w->content_only ? '' : '<div class="tags'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
 		'<ul>';
 
-		if ($core->url->type == 'post' && $_ctx->posts instanceof record) {
-			$_ctx->meta = $core->meta->getMetaRecordset($_ctx->posts->post_meta,'tag');
-		}
 		while ($rs->fetch())
 		{
-			$class = '';
-			if ($core->url->type == 'post' && $_ctx->posts instanceof record) {
-				while ($_ctx->meta->fetch()) {
-					if ($_ctx->meta->meta_id == $rs->meta_id) {
-						$class = ' class="tag-current"';
-						break;
-					}
-				}
-			}
 			$res .=
-			'<li'.$class.'><a href="'.$core->blog->url.$core->url->getURLFor('tag',rawurlencode($rs->meta_id)).'" '.
+			'<li><a href="'.$core->blog->url.$core->url->getURLFor('tag',rawurlencode($rs->meta_id)).'" '.
 			'class="tag'.$rs->roundpercent.'">'.
 			$rs->meta_id.'</a> </li>';
@@ -299,5 +283,7 @@
 		}
 
-		return $w->renderDiv($w->content_only,'tags '.$w->class,'',$res);
+		$res .= ($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 }
Index: lugins/tags/default-templates/currywurst/tag.html
===================================================================
--- plugins/tags/default-templates/currywurst/tag.html	(revision 2704)
+++ 	(revision )
@@ -1,66 +1,0 @@
-{{tpl:extends parent="__layout.html"}}
-
-<tpl:Block name="head-title">
-	<title>{{tpl:lang Tag}} - {{tpl:TagID}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
-</tpl:Block>
-
-<tpl:Block name="meta-entry">
-	<meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-	<meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="dc-entry">
-	<meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Tag}} - {{tpl:TagID}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-	<meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-	<meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="head-linkrel">
-	<link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-	<link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-
-	<tpl:Entries no_content="1">
-		<tpl:EntriesHeader>
-			<tpl:Pagination>
-				<tpl:PaginationIf end="0">
-					<link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
-				</tpl:PaginationIf>
-
-				<tpl:PaginationIf start="0">
-					<link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
-				</tpl:PaginationIf>
-			</tpl:Pagination>
-		</tpl:EntriesHeader>
-
-		<link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-	</tpl:Entries>
-
-	<link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:TagFeedURL type="atom"}}" />
-	<link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
-</tpl:Block>
-
-<tpl:block name="body-tag"><body class="dc-tag"></tpl:Block>
-
-<tpl:Block name="main-content">
-	<div id="content-info">
-		<h2>{{tpl:lang Tag}} - {{tpl:TagID}}</h2>
-		<p><a type="application/atom+xml" href="{{tpl:TagFeedURL type="atom"}}"
-			title="{{tpl:lang This tag's entries Atom feed}}" class="feed">{{tpl:lang Entries feed}}</a>
-			<tpl:SysIf operator="or" comments_active="1" pings_active="1">
-				 - <a type="application/atom+xml" href="{{tpl:TagFeedURL type="atom"}}/comments"
-				title="{{tpl:lang This tag's comments Atom feed}}" class="feed">{{tpl:lang Comments feed}}</a>
-			</tpl:SysIf>
-		</p>
-	</div>
-
-	<div class"content-inner">
-		<tpl:Entries>
-			{{tpl:include src="_entry-short.html"}}
-
-			<tpl:EntriesFooter>
-				{{tpl:include src="_pagination.html"}}
-			</tpl:EntriesFooter>
-
-		</tpl:Entries>
-	</div> <!-- End #content-inner -->
-</tpl:Block>
Index: lugins/tags/default-templates/currywurst/tags.html
===================================================================
--- plugins/tags/default-templates/currywurst/tags.html	(revision 2704)
+++ 	(revision )
@@ -1,37 +1,0 @@
-{{tpl:extends parent="__layout.html"}}
-
-<tpl:Block name="head-title">
-	<title>{{tpl:lang Tags}} - {{tpl:BlogName encode_html="1"}}</title>
-</tpl:Block>
-
-<tpl:Block name="meta-robots">
-	<meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
-</tpl:Block>
-
-<tpl:Block name="dc-entry">
-	<meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Tags}} - {{tpl:BlogName encode_html="1"}}" />
-	<meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-	<meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-</tpl:Block>
-
-<tpl:Block name="head-linkrel">
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
-</tpl:Block>
-
-<tpl:block name="body-tag"><body class="dc-tags"></tpl:Block>
-
-<tpl:Block name="main-content">
-  <div id="content-info">
-	<h2>{{tpl:lang Tags}}</h2>
-  </div>
-
-  <div class="content-inner">
-	<ul class="tags">
-	  <tpl:Tags>
-		<li><a href="{{tpl:TagURL}}" class="tag{{tpl:TagRoundPercent}}">{{tpl:TagID}}</a></li>
-	  </tpl:Tags>
-	</ul>
-  </div>
-</tpl:Block>
Index: lugins/tags/default-templates/mustek/tag.html
===================================================================
--- plugins/tags/default-templates/mustek/tag.html	(revision 2604)
+++ 	(revision )
@@ -1,152 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
-
-  <title>{{tpl:lang Tag}} - {{tpl:TagID}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Tag}} - {{tpl:TagID}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
-  <meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-
-  <tpl:Entries no_content="1">
-    <tpl:EntriesHeader>
-      <tpl:Pagination>
-        <tpl:PaginationIf end="0">
-        <link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
-        </tpl:PaginationIf>
-
-        <tpl:PaginationIf start="0">
-        <link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
-        </tpl:PaginationIf>
-      </tpl:Pagination>
-    </tpl:EntriesHeader>
-
-    <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
-  </tpl:Entries>
-
-  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:TagFeedURL type="atom"}}" />
-  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
-
-  {{tpl:include src="_head.html"}}
-</head>
-
-<body class="dc-tag">
-<div id="page">
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-
-  <div id="content-info">
-    <h2>{{tpl:lang Tag}} - {{tpl:TagID}}</h2>
-
-    <p><a type="application/atom+xml" href="{{tpl:TagFeedURL type="atom"}}"
-    title="{{tpl:lang This tag's entries Atom feed}}" class="feed">{{tpl:lang Entries feed}}</a>
-
-    <tpl:SysIf operator="or" comments_active="1" pings_active="1">
-    - <a type="application/atom+xml" href="{{tpl:TagFeedURL type="atom"}}/comments"
-    title="{{tpl:lang This tag's comments Atom feed}}" class="feed">{{tpl:lang Comments feed}}</a>
-    </tpl:SysIf>
-    </p>
-  </div>
-
-  <tpl:Entries>
-    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}}" lang="{{tpl:EntryLang}}" role="article">
-    <!-- # New day date -->
-    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
-
-    <h2 class="post-title"><a
-    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
-
-    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
-    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}
-    <tpl:EntryIf has_category="1">
-    - <a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a>
-    </tpl:EntryIf>
-    </p>
-
-    <tpl:EntryTags>
-    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
-    <li><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
-    <tpl:TagsFooter></ul></tpl:TagsFooter>
-    </tpl:EntryTags>
-
-    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
-    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
-
-    <!-- # Entry with an excerpt -->
-    <tpl:EntryIf extended="1">
-      <div class="post-content">{{tpl:EntryExcerpt}}</div>
-      <p class="read-it"><a href="{{tpl:EntryURL}}"
-      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
-      reading}}</a>...</p>
-    </tpl:EntryIf>
-
-    <!-- # Entry without excerpt -->
-    <tpl:EntryIf extended="0">
-      <div class="post-content">{{tpl:EntryContent}}</div>
-    </tpl:EntryIf>
-
-    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
-    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
-
-    <!-- # Number of comments, trackbacks and attachments -->
-    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-      <p class="post-info-co">
-    </tpl:EntryIf>
-    <tpl:EntryIf show_comments="1">
-      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
-    </tpl:EntryIf>
-    <tpl:EntryIf show_pings="1">
-      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
-    <tpl:EntryIf has_attachment="1">
-      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
-    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
-      </p>
-    </tpl:EntryIf>
-    </div>
-
-    <tpl:EntriesFooter>
-      <tpl:Pagination>
-        <p class="pagination"><tpl:PaginationIf end="0"><a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
-        {{tpl:lang previous entries}}</a> - </tpl:PaginationIf>
-        {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
-        <tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}}
-        &#187;</a></tpl:PaginationIf></p>
-      </tpl:Pagination>
-    </tpl:EntriesFooter>
-  </tpl:Entries>
-  </div>
-</div> <!-- End #main -->
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: lugins/tags/default-templates/mustek/tags.html
===================================================================
--- plugins/tags/default-templates/mustek/tags.html	(revision 2603)
+++ 	(revision )
@@ -1,68 +1,0 @@
-<!DOCTYPE html>
-<html lang="{{tpl:BlogLanguage}}">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
-
-  <title>{{tpl:lang Tags}} - {{tpl:BlogName encode_html="1"}}</title>
-  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta name="date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-
-  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
-  <meta property="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Tags}} - {{tpl:BlogName encode_html="1"}}" />
-  <meta property="dc.language" content="{{tpl:BlogLanguage}}" />
-  <meta property="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
-  <meta property="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
-  <meta property="dc.date" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
-  <meta property="dc.type" content="text" />
-  <meta property="dc.format" content="text/html" />
-
-  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
-  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
-
-  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
-
-  {{tpl:include src="_head.html"}}
-</head>
-
-<body class="dc-tags">
-<div id="page">
-{{tpl:include src="_top.html"}}
-
-<div id="wrapper">
-
-<div id="main" role="main">
-  <div id="content">
-
-  <div id="content-info">
-    <h2>{{tpl:lang Tags}}</h2>
-  </div>
-
-  <div class="content-inner">
-  <ul class="tags">
-    <tpl:Tags>
-      <li><a href="{{tpl:TagURL}}" class="tag{{tpl:TagRoundPercent}}">{{tpl:TagID}}</a></li>
-    </tpl:Tags>
-    </ul>
-  </div>
-
-  </div>
-</div> <!-- End #main -->
-
-<div id="sidebar" role="complementary">
-  <div id="blognav">
-    {{tpl:Widgets type="nav"}}
-  </div> <!-- End #blognav -->
-
-  <div id="blogextra">
-    {{tpl:Widgets type="extra"}}
-  </div> <!-- End #blogextra -->
-</div>
-
-</div> <!-- End #wrapper -->
-
-{{tpl:include src="_footer.html"}}
-</div> <!-- End #page -->
-</body>
-</html>
Index: plugins/tags/default-templates/tag.html
===================================================================
--- plugins/tags/default-templates/tag.html	(revision 2566)
+++ plugins/tags/default-templates/tag.html	(revision 2566)
@@ -0,0 +1,153 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
+
+  <title>{{tpl:lang Tag}} - {{tpl:TagID}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Tag}} - {{tpl:TagID}} - {{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+
+  <tpl:Entries no_content="1">
+    <tpl:EntriesHeader>
+      <tpl:Pagination>
+        <tpl:PaginationIf end="0">
+        <link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
+        </tpl:PaginationIf>
+
+        <tpl:PaginationIf start="0">
+        <link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
+        </tpl:PaginationIf>
+      </tpl:Pagination>
+    </tpl:EntriesHeader>
+
+    <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
+  </tpl:Entries>
+
+  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:TagFeedURL type="atom"}}" />
+  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
+
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-tag">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <div id="content-info">
+    <h2>{{tpl:lang Tag}} - {{tpl:TagID}}</h2>
+
+    <p><a type="application/atom+xml" href="{{tpl:TagFeedURL type="atom"}}"
+    title="{{tpl:lang This tag's entries Atom feed}}" class="feed">{{tpl:lang Entries feed}}</a>
+
+    <tpl:SysIf operator="or" comments_active="1" pings_active="1">
+    - <a type="application/atom+xml" href="{{tpl:TagFeedURL type="atom"}}/comments"
+    title="{{tpl:lang This tag's comments Atom feed}}" class="feed">{{tpl:lang Comments feed}}</a>
+    </tpl:SysIf>
+    </p>
+  </div>
+
+  <tpl:Entries>
+    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}}" lang="{{tpl:EntryLang}}" xml:lang="{{tpl:EntryLang}}">
+    <!-- # New day date -->
+    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
+
+    <h2 class="post-title"><a
+    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
+
+    <p class="post-info">{{tpl:lang By}} {{tpl:EntryAuthorLink}}
+    {{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}
+    <tpl:EntryIf has_category="1">
+    - <a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a>
+    </tpl:EntryIf>
+    </p>
+
+    <tpl:EntryTags>
+    <tpl:TagsHeader><ul class="post-tags"></tpl:TagsHeader>
+    <li><a href="{{tpl:TagURL}}">{{tpl:TagID}}</a></li>
+    <tpl:TagsFooter></ul></tpl:TagsFooter>
+    </tpl:EntryTags>
+
+    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
+    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
+
+    <!-- # Entry with an excerpt -->
+    <tpl:EntryIf extended="1">
+      <div class="post-content">{{tpl:EntryExcerpt}}</div>
+      <p class="read-it"><a href="{{tpl:EntryURL}}"
+      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
+      reading}}</a>...</p>
+    </tpl:EntryIf>
+
+    <!-- # Entry without excerpt -->
+    <tpl:EntryIf extended="0">
+      <div class="post-content">{{tpl:EntryContent}}</div>
+    </tpl:EntryIf>
+
+    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
+    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
+
+    <!-- # Number of comments, trackbacks and attachments -->
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      <p class="post-info-co">
+    </tpl:EntryIf>
+    <tpl:EntryIf show_comments="1">
+      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
+    </tpl:EntryIf>
+    <tpl:EntryIf show_pings="1">
+      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf has_attachment="1">
+      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      </p>
+    </tpl:EntryIf>
+    </div>
+
+    <tpl:EntriesFooter>
+      <tpl:Pagination>
+        <p class="pagination"><tpl:PaginationIf end="0"><a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
+        {{tpl:lang previous entries}}</a> - </tpl:PaginationIf>
+        {{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
+        <tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">{{tpl:lang next entries}}
+        &#187;</a></tpl:PaginationIf></p>
+      </tpl:Pagination>
+    </tpl:EntriesFooter>
+  </tpl:Entries>
+  </div>
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: plugins/tags/default-templates/tags.html
===================================================================
--- plugins/tags/default-templates/tags.html	(revision 2566)
+++ plugins/tags/default-templates/tags.html	(revision 2566)
@@ -0,0 +1,69 @@
+<!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="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
+
+  <title>{{tpl:lang Tags}} - {{tpl:BlogName encode_html="1"}}</title>
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Tags}} - {{tpl:BlogName encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+
+  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
+
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-tags">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <div id="content-info">
+    <h2>{{tpl:lang Tags}}</h2>
+  </div>
+
+  <div class="content-inner">
+  <ul class="tags">
+    <tpl:Tags>
+      <li><a href="{{tpl:TagURL}}" class="tag{{tpl:TagRoundPercent}}">{{tpl:TagID}}</a></li>
+    </tpl:Tags>
+    </ul>
+  </div>
+
+  </div>
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: lugins/tags/js/ckeditor-tags-plugin.js
===================================================================
--- plugins/tags/js/ckeditor-tags-plugin.js	(revision 2680)
+++ 	(revision )
@@ -1,25 +1,0 @@
-(function() {
-	CKEDITOR.plugins.add('dctags', {
-		init: function(editor) {
-			editor.addCommand('dcTagsCommand', {
-				exec: function(editor) {
-					if (editor.getSelection().getNative().toString().replace(/\s*/,'')!='') {
-						var str = editor.getSelection().getNative().toString().replace(/\s*/,'');
-						var url = jsToolBar.prototype.elements.tag.url;
-						window.dc_tag_editor.addMeta(str);
-						var link = '<a href="'+$.stripBaseURL(url+'/'+str)+'">'+str+'</a>';
-						var element = CKEDITOR.dom.element.createFromHtml(link);
-						editor.insertElement(element);
-					}
-				}
-			});
-
-			editor.ui.addButton('dcTags', {
-				label: 'Tag',
-				command: 'dcTagsCommand',
-				toolbar: 'insert',
-				icon: this.path + 'tag.png'
-			});
-		}
-	});
-})();
Index: plugins/themeEditor/_define.php
===================================================================
--- plugins/themeEditor/_define.php	(revision 2663)
+++ plugins/themeEditor/_define.php	(revision 2566)
@@ -16,5 +16,5 @@
 	/* Description*/		"Theme Editor",
 	/* Author */			"Olivier Meunier",
-	/* Version */			'1.1',
+	/* Version */			'1.0',
 	array(
 		'type'		=>		'plugin'
Index: plugins/themeEditor/class.themeEditor.php
===================================================================
--- plugins/themeEditor/class.themeEditor.php	(revision 2663)
+++ plugins/themeEditor/class.themeEditor.php	(revision 2566)
@@ -16,8 +16,9 @@
 	protected $core;
 
+	protected $default_theme;
 	protected $user_theme;
 	protected $parent_theme;
-	protected $tplset_theme;
-
+
+	protected $default_tpl = array();
 	public $tpl = array();
 	public $css = array();
@@ -30,5 +31,4 @@
 		$this->default_theme = path::real($this->core->blog->themes_path.'/default');
 		$this->user_theme = path::real($this->core->blog->themes_path.'/'.$this->core->blog->settings->system->theme);
-		$this->tplset_theme = DC_ROOT.'/inc/public/default-templates/'.DC_DEFAULT_TPLSET;
 		if (null !== $this->core->themes) {
 			$parent_theme = $this->core->themes->moduleInfo($this->core->blog->settings->system->theme,'parent');
@@ -36,8 +36,4 @@
 				$this->parent_theme = path::real($this->core->blog->themes_path.'/'.$parent_theme);
 			}
-			$tplset = $this->core->themes->moduleInfo($this->core->blog->settings->system->theme,'tplset');
-			if ($tplset) {
-				$this->tplset_theme = DC_ROOT.'/inc/public/default-templates/'.$tplset;
-			}
 		}
 		$this->findTemplates();
@@ -47,5 +43,5 @@
 	}
 
-	public function filesList($type,$item='%1$s',$split=true)
+	public function filesList($type,$item='%1$s')
 	{
 		$files = $this->getFilesFromType($type);
@@ -56,36 +52,14 @@
 
 		$list = '';
-		if ($split) {
-			$list_theme = '';	// Files from current theme
-			$list_parent = '';	// Files from parent of current theme
-			$list_tpl = '';		// Files from template set used by current theme
-			foreach ($files as $k => $v)
-			{
-				if (strpos($v,$this->user_theme) === 0) {
-					$li = sprintf('<li class="default-file">%s</li>',$item);
-					$list_theme .= sprintf($li,$k,html::escapeHTML($k));
-				} elseif ($this->parent_theme && strpos($v,$this->parent_theme) === 0) {
-					$li = sprintf('<li class="parent-file">%s</li>',$item);
-					$list_parent .= sprintf($li,$k,html::escapeHTML($k));
-				} else {
-					$li = sprintf('<li>%s</li>',$item);
-					$list_tpl .= sprintf($li,$k,html::escapeHTML($k));
-				}
-			}
-			$list .= ($list_theme != '' ? sprintf('<li class="group-file">'.__('From theme:').'<ul>%s</ul></li>',$list_theme) : '');
-			$list .= ($list_parent != '' ? sprintf('<li class="group-file">'.__('From parent:').'<ul>%s</ul></li>',$list_parent) : '');
-			$list .= ($list_tpl != '' ? sprintf('<li class="group-file">'.__('From template set:').'<ul>%s</ul></li>',$list_tpl) : '');
-		} else {
-			foreach ($files as $k => $v)
-			{
-				if (strpos($v,$this->user_theme) === 0) {
-					$li = sprintf('<li class="default-file">%s</li>',$item);
-				} elseif ($this->parent_theme && strpos($v,$this->parent_theme) === 0) {
-					$li = sprintf('<li class="parent-file">%s</li>',$item);
-				} else {
-					$li = sprintf('<li>%s</li>',$item);
-				}
-				$list .= sprintf($li,$k,html::escapeHTML($k));
-			}
+		foreach ($files as $k => $v)
+		{
+			if (strpos($v,$this->user_theme) === 0) {
+				$li = sprintf('<li class="default-file">%s</li>',$item);
+			} elseif ($this->parent_theme && strpos($v,$this->parent_theme) === 0) {
+				$li = sprintf('<li class="parent-file">%s</li>',$item);
+			} else {
+				$li = sprintf('<li>%s</li>',$item);
+			}
+			$list .= sprintf($li,$k,html::escapeHTML($k));
 		}
 
@@ -155,55 +129,4 @@
 		{
 			throw new Exception(sprintf(__('Unable to write file %s. Please check your theme files and folders permissions.'),$f));
-		}
-	}
-
-	public function deletableFile($type,$f)
-	{
-		if ($type != 'tpl') {
-			// Only tpl files may be deleted
-			return false;
-		}
-
-		$files = $this->getFilesFromType($type);
-		if (isset($files[$f])) {
-			$dest = $this->getDestinationFile($type,$f);
-			if ($dest) {
-				if (file_exists($dest) && is_writable($dest)) {
-					// Is there a model (parent theme or template set) ?
-					if (isset($this->tpl_model[$f])) {
-						return true;
-					}
-				}
-			}
-		}
-		return false;
-	}
-
-	public function deleteFile($type,$f)
-	{
-		if ($type != 'tpl') {
-			// Only tpl files may be deleted
-			return;
-		}
-
-		$files = $this->getFilesFromType($type);
-		if (!isset($files[$f])) {
-			throw new Exception(__('File does not exist.'));
-		}
-
-		try
-		{
-			$dest = $this->getDestinationFile($type,$f);
-			if ($dest) {
-				// File exists and may be deleted
-				unlink($dest);
-
-				// Updating template files list
-				$this->findTemplates();
-			}
-		}
-		catch (Exception $e)
-		{
-			throw new Exception(sprintf(__('Unable to delete file %s. Please check your theme files and folders permissions.'),$f));
 		}
 	}
@@ -284,11 +207,13 @@
 	protected function findTemplates()
 	{
+		# First, we look in template paths
+		$this->default_tpl = $this->getFilesInDir($this->default_theme.'/tpl');
+
 		$this->tpl = array_merge(
-			$this->getFilesInDir($this->tplset_theme),
-			$this->getFilesInDir($this->parent_theme.'/tpl')
+			$this->default_tpl,
+			$this->getFilesInDir($this->parent_theme.'/tpl'),
+			$this->getFilesInDir($this->user_theme.'/tpl')
 			);
-		$this->tpl_model = $this->tpl;
-
-		$this->tpl = array_merge($this->tpl,$this->getFilesInDir($this->user_theme.'/tpl'));
+		$this->tpl = array_merge($this->getFilesInDir(DC_ROOT.'/inc/public/default-templates'),$this->tpl);
 
 		# Then we look in 'default-templates' plugins directory
@@ -296,5 +221,4 @@
 		foreach ($plugins as $p) {
 			$this->tpl = array_merge($this->getFilesInDir($p['root'].'/default-templates'),$this->tpl);
-			$this->tpl_model = array_merge($this->getFilesInDir($p['root'].'/default-templates'),$this->tpl_model);
 		}
 
Index: plugins/themeEditor/index.php
===================================================================
--- plugins/themeEditor/index.php	(revision 2663)
+++ plugins/themeEditor/index.php	(revision 2566)
@@ -52,12 +52,4 @@
 		$o->writeFile($file['type'],$file['f'],$file['c']);
 	}
-
-	# Delete file
-	if (!empty($_POST['delete']))
-	{
-		$o->deleteFile($file['type'],$file['f']);
-		dcPage::addSuccessNotice(__('The file has been deleted.'));
-		http::redirect($p_url.'&'.$file['type'].'='.$file['f']);
-	}
 }
 catch (Exception $e)
@@ -76,5 +68,4 @@
   <?php echo dcPage::jsVar('dotclear.msg.document_saved',__("Document saved")); ?>
   <?php echo dcPage::jsVar('dotclear.msg.error_occurred',__("An error occurred:")); ?>
-  <?php echo dcPage::jsVar('dotclear.msg.confirm_reset_file',__("Are you sure you want to reset this file?")); ?>
   <?php echo dcPage::jsVar('dotclear.colorsyntax',$user_ui_colorsyntax); ?>
   //]]>
@@ -131,5 +122,4 @@
 		echo
 		'<p><input type="submit" name="write" value="'.__('Save').' (s)" accesskey="s" /> '.
-		($o->deletableFile($file['type'],$file['f']) ? '<input type="submit" name="delete" class="delete" value="'.__('Reset').'" />' : '').
 		$core->formNonce().
 		($file['type'] ? form::hidden(array($file['type']),$file['f']) : '').
Index: plugins/themeEditor/locales/en/help/help.html
===================================================================
--- plugins/themeEditor/locales/en/help/help.html	(revision 2647)
+++ plugins/themeEditor/locales/en/help/help.html	(revision 2534)
@@ -17,19 +17,10 @@
 </ul>
 
-<p>Each section of files may have three sub-sections :</p>
-<ul>
-	<li>Files belonging to the current theme</li>
-	<li>Files belonging to the parent theme</li>
-	<li>Files belonging to the template set</li>
-</ul>
-
 <p>The bullet in front of each file can have three different colors:</p>
 <ul>
-<li><strong>Yellow </strong> means it belongs to the current theme.</li>
+<li><strong>Black</strong> means it is in the <code>default</code> theme.</li>
+<li><strong>Yellow </strong> means it belongs to the current theme.</li> 
 <li><strong>Red </strong> means it belongs to a parent theme.</li>
-<li><strong>Black</strong> means it is in the template set.</li>
 </ul>
-
-<p>The files belonging to the current theme are also in bold.</p>
 
 <h4>File mofidication</h4>
@@ -38,5 +29,5 @@
 <p>Be careful: Modifications are applied immediately after saving.</p>
 
-<p>If you modify a file that comes from the template set or the parent theme, the file will be copied into your current theme.</p>
+<p>If you modify a file that comes from the <code>default</code> theme, the file will be copied into your current theme.</p>
 
 <h4>Syntax highlighting</h4>
Index: plugins/themeEditor/locales/fr/help/help.html
===================================================================
--- plugins/themeEditor/locales/fr/help/help.html	(revision 2647)
+++ plugins/themeEditor/locales/fr/help/help.html	(revision 2433)
@@ -13,23 +13,14 @@
   <li>fichiers du thème&nbsp;: les templates,</li>
   <li>fichiers CSS&nbsp;: les feuilles de style,</li>
-  <li>fichiers JavaScript,</li>
+  <li>fichiers JavaScript.</li>
   <li>fichiers de traduction.</li>
-</ul>
-
-<p>Chaque groupe de fichiers peut contenir trois sous-groupes :</p>
-<ul>
-	<li>fichiers du thème actif,</li>
-	<li>fichiers du thème parent,</li>
-	<li>fichiers du jeu de "template".</li>
 </ul>
 
 <p>A la gauche de chaque fichier, chaque puce se voit attribuée une couleur :</p>
 <ul>
-<li><b>jaune</b> indique qu'il fait partie du thème actif.</li>
-<li><b>rouge</b> indique qu'il fait partie du thème parent.</li>
-<li><b>noire</b> indique qu'il se trouve dans le jeu de "template".</li>
+<li><b>noire</b> indique qu'il se trouve dans le thème "default".</li>
+<li><b>jaune</b> indique qu'il fait partie du thème actif.</li> 
+<li><b>rouge</b> indique qu'il fait partie d'un thème parent.</li>
 </ul>
-
-<p>Les fichiers du thème actif sont également repérés en gras.</p>
 
 <h4>Modification des fichiers</h4>
@@ -40,5 +31,5 @@
 <p>Les modifications sont immédiatement appliquées lors de la sauvegarde, soyez vigilants.</p>
 
-<p>A noter que si vous modifiez un fichier se trouvant dans le jeu de "template" ou dans le thème parent, celui-ci sera copié dans votre thème en cours d'utilisation.</p>
+<p>A noter que si vous modifiez un fichier se trouvant dans le thème "default", celui-ci sera copié dans votre thème en cours d'utilisation.</p>
 
 <h4>Coloration syntaxique</h4>
Index: plugins/themeEditor/script.js
===================================================================
--- plugins/themeEditor/script.js	(revision 2663)
+++ plugins/themeEditor/script.js	(revision 2566)
@@ -1,4 +1,3 @@
 $(function() {
-	// Cope with saving
 	var msg = false;
 	$('#file-form input[name="write"]').click(function() {
@@ -32,9 +31,3 @@
 		return false;
 	});
-
-	// Confirm for deleting current file
-	$('#file-form input[name="delete"]').click(function() {
-		return window.confirm(dotclear.msg.confirm_reset_file);
-	});
-
 });
Index: plugins/themeEditor/style.css
===================================================================
--- plugins/themeEditor/style.css	(revision 2647)
+++ plugins/themeEditor/style.css	(revision 2566)
@@ -21,16 +21,8 @@
 #file-chooser li.default-file {
 	color: #f90;
-	font-weight: bold;
 }
 #file-chooser li.parent-file {
 	color:#c00;
 }
-#file-chooser li.group-file {
-	list-style: none;
-	margin-bottom: 1em;
-}
-#file-chooser li.group-file ul {
-	margin-top: .5em;
-}
 textarea {
 	font: 1em Monaco,"Courier New",Courier,monospace;
Index: plugins/userPref/index.php
===================================================================
--- plugins/userPref/index.php	(revision 2685)
+++ plugins/userPref/index.php	(revision 2566)
@@ -98,14 +98,12 @@
 	//<![CDATA[
 	$(function() {
-		$("#gp_submit,#lp_submit").hide();
-		$('#part-local,#part-global').tabload(function() {
-			$('.multi-part.active select.navigation option:first').attr('selected',true);
-		});		   
+		$("#gp_submit").hide();
+		$("#lp_submit").hide();
 		$("#gp_nav").change(function() {
 			window.location = $("#gp_nav option:selected").val();
-		});
+		})
 		$("#lp_nav").change(function() {
 			window.location = $("#lp_nav option:selected").val();
-		});
+		})
 	});
 	//]]>
@@ -156,5 +154,5 @@
 		'<form action="plugin.php" method="post">'.
 		'<p class="anchor-nav">'.
-		'<label for="lp_nav" class="classic">'.__('Goto:').'</label> '.form::combo('lp_nav',$ws_combo,'','navigation').
+		'<label for="lp_nav" class="classic">'.__('Goto:').'</label> '.form::combo('lp_nav',$ws_combo).
 		' <input type="submit" value="'.__('Ok').'" id="lp_submit" />'.
 		'<input type="hidden" name="p" value="userPref" />'.
@@ -206,5 +204,5 @@
 		'<form action="plugin.php" method="post">'.
 		'<p class="anchor-nav">'.
-		'<label for="gp_nav" class="classic">'.__('Goto:').'</label> '.form::combo('gp_nav',$ws_combo,'','navigation').
+		'<label for="gp_nav" class="classic">'.__('Goto:').'</label> '.form::combo('gp_nav',$ws_combo).
 		' <input type="submit" value="'.__('Ok').'" id="gp_submit" />'.
 		'<input type="hidden" name="p" value="userPref" />'.
Index: plugins/widgets/_default_widgets.php
===================================================================
--- plugins/widgets/_default_widgets.php	(revision 2671)
+++ plugins/widgets/_default_widgets.php	(revision 2566)
@@ -116,7 +116,8 @@
 
 $__default_widgets['nav']->append($__widgets->search);
+$__default_widgets['nav']->append($__widgets->navigation);
 $__default_widgets['nav']->append($__widgets->bestof);
 $__default_widgets['nav']->append($__widgets->categories);
-$__default_widgets['custom']->append($__widgets->subscribe);
+$__default_widgets['extra']->append($__widgets->subscribe);
 
 # --BEHAVIOR-- initDefaultWidgets
Index: plugins/widgets/_define.php
===================================================================
--- plugins/widgets/_define.php	(revision 2662)
+++ plugins/widgets/_define.php	(revision 2566)
@@ -16,5 +16,5 @@
 	/* Description*/		"Widgets for your blog sidebars",
 	/* Author */			"Olivier Meunier & Dotclear Team",
-	/* Version */			'3.2',
+	/* Version */			'3.1',
 	array(
 		'permissions' =>	'admin',
Index: plugins/widgets/_widgets_functions.php
===================================================================
--- plugins/widgets/_widgets_functions.php	(revision 2668)
+++ plugins/widgets/_widgets_functions.php	(revision 2565)
@@ -26,12 +26,14 @@
 		$value = isset($GLOBALS['_search']) ? html::escapeHTML($GLOBALS['_search']) : '';
 
-		return $w->renderDiv($w->content_only,$w->class,'id="search"',
-			($w->title ? $w->renderTitle('<label for="q">'.html::escapeHTML($w->title).'</label>') : '').
-			'<form action="'.$core->blog->url.'" method="get" role="search">'.
-			'<fieldset>'.
-			'<p><input type="text" size="10" maxlength="255" id="q" name="q" value="'.$value.'" /> '.
-			'<input type="submit" class="submit" value="ok" /></p>'.
-			'</fieldset>'.
-			'</form>');
+		return
+		($w->content_only ? '' : '<div id="search"'.($w->class ? ' class="'.html::escapeHTML($w->class).'"' : '').'>').
+		($w->title ? '<h2><label for="q">'.html::escapeHTML($w->title).'</label></h2>' : '').
+		'<form action="'.$core->blog->url.'" method="get">'.
+		'<fieldset>'.
+		'<p><input type="text" size="10" maxlength="255" id="q" name="q" value="'.$value.'" /> '.
+		'<input type="submit" class="submit" value="ok" /></p>'.
+		'</fieldset>'.
+		'</form>'.
+		($w->content_only ? '' : '</div>');
 	}
 
@@ -46,6 +48,7 @@
 
 		$res =
-		($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
-		'<ul role="navigation">';
+		($w->content_only ? '' : '<div id="topnav"'.($w->class ? ' class="'.html::escapeHTML($w->class).'"' : '').'>').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
+		'<ul>';
 
 		if ($core->url->type != 'default') {
@@ -53,5 +56,5 @@
 			'<li class="topnav-home">'.
 			'<a href="'.$core->blog->url.'">'.__('Home').'</a>'.
-			'</li>';
+			'<span> - </span></li>';
 		}
 
@@ -60,7 +63,8 @@
 		'<a href="'.$core->blog->url.$core->url->getURLFor("archive").'">'.
 		__('Archives').'</a></li>'.
-		'</ul>';
-
-		return $w->renderDiv($w->content_only,$w->class,'id="topnav"',$res);
+		'</ul>'.
+		($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 
@@ -80,5 +84,6 @@
 
 		$res =
-		($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '');
+		($w->content_only ? '' : '<div class="categories'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '');
 
 		$ref_level = $level = $rs->level-1;
@@ -113,11 +118,12 @@
 			$res .= str_repeat('</li></ul>',-($ref_level - $level));
 		}
-
-		return $w->renderDiv($w->content_only,'categories '.$w->class,'',$res);
+		$res .= ($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 
 	public static function bestof($w)
 	{
-		global $core, $_ctx;
+		global $core;
 
 		if (($w->homeonly == 1 && $core->url->type != 'default') ||
@@ -139,18 +145,15 @@
 
 		$res =
-		($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
+		($w->content_only ? '' : '<div class="selected'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
 		'<ul>';
 
 		while ($rs->fetch()) {
-			$class = '';
-			if ($core->url->type == 'post' && $_ctx->posts instanceof record && $_ctx->posts->post_id == $rs->post_id) {
-				$class = ' class="post-current"';
-			}
-			$res .= ' <li'.$class.'><a href="'.$rs->getURL().'">'.html::escapeHTML($rs->post_title).'</a></li> ';
-		}
-
-		$res .= '</ul>';
-
-		return $w->renderDiv($w->content_only,'selected '.$w->class,'',$res);
+			$res .= ' <li><a href="'.$rs->getURL().'">'.html::escapeHTML($rs->post_title).'</a></li> ';
+		}
+
+		$res .= '</ul>'.($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 
@@ -172,5 +175,6 @@
 		$langs = l10n::getISOcodes();
 		$res =
-		($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
+		($w->content_only ? '' : '<div class="langs'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
 		'<ul>';
 
@@ -190,7 +194,7 @@
 		}
 
-		$res .= '</ul>';
-
-		return $w->renderDiv($w->content_only,'langs '.$w->class,'',$res);
+		$res .= '</ul>'.($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 
@@ -211,5 +215,6 @@
 
 		$res =
-		($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
+		($w->content_only ? '' : '<div class="syndicate'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
 		'<ul>';
 
@@ -229,7 +234,7 @@
 		}
 
-		$res .= '</ul>';
-
-		return $w->renderDiv($w->content_only,'syndicate '.$w->class,'',$res);
+		$res .= '</ul>'.($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 
@@ -259,5 +264,6 @@
 
 		$res =
-		($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
+		($w->content_only ? '' : '<div class="feed'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
 		'<ul>';
 
@@ -283,7 +289,7 @@
 		}
 
-		$res .= '</ul>';
-
-		return $w->renderDiv($w->content_only,'feed '.$w->class,'',$res);
+		$res .= '</ul>'.($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 
@@ -297,12 +303,16 @@
 		}
 
-		$res = ($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').$w->text;
-
-		return $w->renderDiv($w->content_only,'text '.$w->class,'',$res);
+		$res =
+		($w->content_only ? '' : '<div class="text'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
+		$w->text.
+		($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 
 	public static function lastposts($w)
 	{
-		global $core, $_ctx;
+		global $core;
 
 		if (($w->homeonly == 1 && $core->url->type != 'default') ||
@@ -341,19 +351,16 @@
 
 		$res =
-		($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').
+		($w->content_only ? '' : '<div class="lastposts'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
 		'<ul>';
 
 		while ($rs->fetch()) {
-			$class = '';
-			if ($core->url->type == 'post' && $_ctx->posts instanceof record && $_ctx->posts->post_id == $rs->post_id) {
-				$class = ' class="post-current"';
-			}
-			$res .= '<li'.$class.'><a href="'.$rs->getURL().'">'.
+			$res .= '<li><a href="'.$rs->getURL().'">'.
 			html::escapeHTML($rs->post_title).'</a></li>';
 		}
 
-		$res .= '</ul>';
-
-		return $w->renderDiv($w->content_only,'lastposts '.$w->class,'',$res);
+		$res .= '</ul>'.($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 
@@ -375,5 +382,7 @@
 		}
 
-		$res = ($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').'<ul>';
+		$res = ($w->content_only ? '' : '<div class="lastcomments'.($w->class ? ' '.html::escapeHTML($w->class) : '').'">').
+		($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
+		'<ul>';
 
 		while ($rs->fetch())
@@ -387,7 +396,7 @@
 		}
 
-		$res .= '</ul>';
-
-		return $w->renderDiv($w->content_only,'lastcomments '.$w->class,'',$res);
+		$res .= '</ul>'.($w->content_only ? '' : '</div>');
+
+		return $res;
 	}
 }
Index: plugins/widgets/class.widgets.php
===================================================================
--- plugins/widgets/class.widgets.php	(revision 2667)
+++ plugins/widgets/class.widgets.php	(revision 2566)
@@ -185,69 +185,4 @@
 	}
 
-	/* Widget rendering tool
-	--------------------------------------------------- */
-	public function renderDiv($content_only,$class,$attr,$content)
-	{
-		if ($content_only) {
-			return $content;
-		}
-		$ret = '<div class="widget'.($class ? ' '.html::escapeHTML($class) : '').'"'.($attr ? ' '.$attr : '').'>'."\n";
-		$ret .= $content."\n";
-		$ret .= '</div>'."\n";
-
-		return $ret;
-	}
-
-	public function renderTitle($title)
-	{
-		global $core;
-
-		if (!$title) {
-			return '';
-		}
-
-		$wtscheme = $core->themes->moduleInfo($core->blog->settings->system->theme,'widgettitleformat');
-		if (empty($wtscheme)) {
-			$tplset = $core->themes->moduleInfo($core->blog->settings->system->theme,'tplset');
-			if (empty($tplset) || $tplset == DC_DEFAULT_TPLSET) {
-				// Use H2 for mustek based themes
-				$wtscheme = '<h2>%s</h2>';
-			} else {
-				// Use H3 for currywurst based themes
-				$wtscheme = '<h3>%s</h3>';
-			}
-		}
-		$ret = sprintf($wtscheme,$title);
-
-		return $ret;
-	}
-
-	public function renderSubtitle($title,$render=true)
-	{
-		global $core;
-
-		if (!$title && $render) {
-			return '';
-		}
-
-		$wtscheme = $core->themes->moduleInfo($core->blog->settings->system->theme,'widgetsubtitleformat');
-		if (empty($wtscheme)) {
-			$tplset = $core->themes->moduleInfo($core->blog->settings->system->theme,'tplset');
-			if (empty($tplset) || $tplset == DC_DEFAULT_TPLSET) {
-				// Use H2 for mustek based themes
-				$wtscheme = '<h3>%s</h3>';
-			} else {
-				// Use H3 for currywurst based themes
-				$wtscheme = '<h4>%s</h4>';
-			}
-		}
-		if (!$render) {
-			return $wtscheme;
-		}
-
-		$ret = sprintf($wtscheme,$title);
-		return $ret;
-	}
-
 	/* Widget settings
 	--------------------------------------------------- */
Index: plugins/widgets/index.php
===================================================================
--- plugins/widgets/index.php	(revision 2702)
+++ plugins/widgets/index.php	(revision 2509)
@@ -218,5 +218,4 @@
 		echo
 			dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
-			dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js').
 			dcPage::jsLoad('index.php?pf=widgets/widgets.js');
   ?>
@@ -234,5 +233,4 @@
   //]]>
   </script>
-  <?php echo $core->callBehavior('adminPostEditor');?>
   <?php echo(dcPage::jsConfirmClose('sidebarsWidgets')); ?>
 </head>
@@ -368,5 +366,5 @@
 		$altUp = $i == 0 ? ' alt=""' : ' alt="'.__('Up the widget').'"';
 		$altDown = $i == count($widgets->elements())-1 ? ' alt=""' : ' alt="'.__('Down the widget').'"';
-		
+
 		$iname = 'w['.$pr.']['.$i.']';
 
Index: tests/functional/css/jasmine.css
===================================================================
--- tests/functional/css/jasmine.css	(revision 2726)
+++ tests/functional/css/jasmine.css	(revision 1602)
@@ -1,55 +1,82 @@
 body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
 
-.html-reporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
-.html-reporter a { text-decoration: none; }
-.html-reporter a:hover { text-decoration: underline; }
-.html-reporter p, .html-reporter h1, .html-reporter h2, .html-reporter h3, .html-reporter h4, .html-reporter h5, .html-reporter h6 { margin: 0; line-height: 14px; }
-.html-reporter .banner, .html-reporter .symbol-summary, .html-reporter .summary, .html-reporter .result-message, .html-reporter .spec .description, .html-reporter .spec-detail .description, .html-reporter .alert .bar, .html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; }
-.html-reporter .banner .version { margin-left: 14px; }
-.html-reporter #jasmine_content { position: fixed; right: 100%; }
-.html-reporter .version { color: #aaaaaa; }
-.html-reporter .banner { margin-top: 14px; }
-.html-reporter .duration { color: #aaaaaa; float: right; }
-.html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; }
-.html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; }
-.html-reporter .symbol-summary li.passed { font-size: 14px; }
-.html-reporter .symbol-summary li.passed:before { color: #5e7d00; content: "\02022"; }
-.html-reporter .symbol-summary li.failed { line-height: 9px; }
-.html-reporter .symbol-summary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
-.html-reporter .symbol-summary li.disabled { font-size: 14px; }
-.html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; }
-.html-reporter .symbol-summary li.pending { line-height: 17px; }
-.html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; }
-.html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; }
-.html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
-.html-reporter .bar.failed { background-color: #b03911; }
-.html-reporter .bar.passed { background-color: #a6b779; }
-.html-reporter .bar.skipped { background-color: #bababa; }
-.html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; }
-.html-reporter .bar.menu a { color: #333333; }
-.html-reporter .bar a { color: white; }
-.html-reporter.spec-list .bar.menu.failure-list, .html-reporter.spec-list .results .failures { display: none; }
-.html-reporter.failure-list .bar.menu.spec-list, .html-reporter.failure-list .summary { display: none; }
-.html-reporter .running-alert { background-color: #666666; }
-.html-reporter .results { margin-top: 14px; }
-.html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
-.html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
-.html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
-.html-reporter.showDetails .summary { display: none; }
-.html-reporter.showDetails #details { display: block; }
-.html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
-.html-reporter .summary { margin-top: 14px; }
-.html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; }
-.html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; }
-.html-reporter .summary li.passed a { color: #5e7d00; }
-.html-reporter .summary li.failed a { color: #b03911; }
-.html-reporter .summary li.pending a { color: #ba9d37; }
-.html-reporter .description + .suite { margin-top: 0; }
-.html-reporter .suite { margin-top: 14px; }
-.html-reporter .suite a { color: #333333; }
-.html-reporter .failures .spec-detail { margin-bottom: 28px; }
-.html-reporter .failures .spec-detail .description { background-color: #b03911; }
-.html-reporter .failures .spec-detail .description a { color: white; }
-.html-reporter .result-message { padding-top: 14px; color: #333333; white-space: pre; }
-.html-reporter .result-message span.result { display: block; }
-.html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
+#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
+#HTMLReporter a { text-decoration: none; }
+#HTMLReporter a:hover { text-decoration: underline; }
+#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; }
+#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; }
+#HTMLReporter #jasmine_content { position: fixed; right: 100%; }
+#HTMLReporter .version { color: #aaaaaa; }
+#HTMLReporter .banner { margin-top: 14px; }
+#HTMLReporter .duration { color: #aaaaaa; float: right; }
+#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; }
+#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; }
+#HTMLReporter .symbolSummary li.passed { font-size: 14px; }
+#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; }
+#HTMLReporter .symbolSummary li.failed { line-height: 9px; }
+#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
+#HTMLReporter .symbolSummary li.skipped { font-size: 14px; }
+#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; }
+#HTMLReporter .symbolSummary li.pending { line-height: 11px; }
+#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; }
+#HTMLReporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; }
+#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
+#HTMLReporter .runningAlert { background-color: #666666; }
+#HTMLReporter .skippedAlert { background-color: #aaaaaa; }
+#HTMLReporter .skippedAlert:first-child { background-color: #333333; }
+#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; }
+#HTMLReporter .passingAlert { background-color: #a6b779; }
+#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; }
+#HTMLReporter .failingAlert { background-color: #cf867e; }
+#HTMLReporter .failingAlert:first-child { background-color: #b03911; }
+#HTMLReporter .results { margin-top: 14px; }
+#HTMLReporter #details { display: none; }
+#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; }
+#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
+#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
+#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
+#HTMLReporter.showDetails .summary { display: none; }
+#HTMLReporter.showDetails #details { display: block; }
+#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
+#HTMLReporter .summary { margin-top: 14px; }
+#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; }
+#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; }
+#HTMLReporter .summary .specSummary.failed a { color: #b03911; }
+#HTMLReporter .description + .suite { margin-top: 0; }
+#HTMLReporter .suite { margin-top: 14px; }
+#HTMLReporter .suite a { color: #333333; }
+#HTMLReporter #details .specDetail { margin-bottom: 28px; }
+#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; }
+#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; }
+#HTMLReporter .resultMessage span.result { display: block; }
+#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
+
+#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ }
+#TrivialReporter a:visited, #TrivialReporter a { color: #303; }
+#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; }
+#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; }
+#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; }
+#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; }
+#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; }
+#TrivialReporter .runner.running { background-color: yellow; }
+#TrivialReporter .options { text-align: right; font-size: .8em; }
+#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; }
+#TrivialReporter .suite .suite { margin: 5px; }
+#TrivialReporter .suite.passed { background-color: #dfd; }
+#TrivialReporter .suite.failed { background-color: #fdd; }
+#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; }
+#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; }
+#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; }
+#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; }
+#TrivialReporter .spec.skipped { background-color: #bbb; }
+#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; }
+#TrivialReporter .passed { background-color: #cfc; display: none; }
+#TrivialReporter .failed { background-color: #fbb; }
+#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; }
+#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; }
+#TrivialReporter .resultMessage .mismatch { color: black; }
+#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; }
+#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; }
+#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; }
+#TrivialReporter #jasmine_content { position: fixed; right: 100%; }
+#TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; }
Index: tests/functional/index.html
===================================================================
--- tests/functional/index.html	(revision 2726)
+++ tests/functional/index.html	(revision 2113)
@@ -7,5 +7,4 @@
     <script type="text/javascript" src="lib/jasmine.js"></script>
     <script type="text/javascript" src="lib/jasmine-html.js"></script>
-    <script type="text/javascript" src="lib/boot.js"></script>
 
     <!-- use same jquery -->
Index: ests/functional/lib/boot.js
===================================================================
--- tests/functional/lib/boot.js	(revision 2726)
+++ 	(revision )
@@ -1,181 +1,0 @@
-/**
- Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project.
-
- If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms.
-
- The location of `boot.js` can be specified and/or overridden in `jasmine.yml`.
-
- [jasmine-gem]: http://github.com/pivotal/jasmine-gem
- */
-
-(function() {
-
-  /**
-   * ## Require &amp; Instantiate
-   *
-   * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference.
-   */
-  window.jasmine = jasmineRequire.core(jasmineRequire);
-
-  /**
-   * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference.
-   */
-  jasmineRequire.html(jasmine);
-
-  /**
-   * Create the Jasmine environment. This is used to run all specs in a project.
-   */
-  var env = jasmine.getEnv();
-
-  /**
-   * ## The Global Interface
-   *
-   * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged.
-   */
-  var jasmineInterface = {
-    describe: function(description, specDefinitions) {
-      return env.describe(description, specDefinitions);
-    },
-
-    xdescribe: function(description, specDefinitions) {
-      return env.xdescribe(description, specDefinitions);
-    },
-
-    it: function(desc, func) {
-      return env.it(desc, func);
-    },
-
-    xit: function(desc, func) {
-      return env.xit(desc, func);
-    },
-
-    beforeEach: function(beforeEachFunction) {
-      return env.beforeEach(beforeEachFunction);
-    },
-
-    afterEach: function(afterEachFunction) {
-      return env.afterEach(afterEachFunction);
-    },
-
-    expect: function(actual) {
-      return env.expect(actual);
-    },
-
-    pending: function() {
-      return env.pending();
-    },
-
-    spyOn: function(obj, methodName) {
-      return env.spyOn(obj, methodName);
-    },
-
-    jsApiReporter: new jasmine.JsApiReporter({
-      timer: new jasmine.Timer()
-    })
-  };
-
-  /**
-   * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`.
-   */
-  if (typeof window == "undefined" && typeof exports == "object") {
-    extend(exports, jasmineInterface);
-  } else {
-    extend(window, jasmineInterface);
-  }
-
-  /**
-   * Expose the interface for adding custom equality testers.
-   */
-  jasmine.addCustomEqualityTester = function(tester) {
-    env.addCustomEqualityTester(tester);
-  };
-
-  /**
-   * Expose the interface for adding custom expectation matchers
-   */
-  jasmine.addMatchers = function(matchers) {
-    return env.addMatchers(matchers);
-  };
-
-  /**
-   * Expose the mock interface for the JavaScript timeout functions
-   */
-  jasmine.clock = function() {
-    return env.clock;
-  };
-
-  /**
-   * ## Runner Parameters
-   *
-   * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface.
-   */
-
-  var queryString = new jasmine.QueryString({
-    getWindowLocation: function() { return window.location; }
-  });
-
-  var catchingExceptions = queryString.getParam("catch");
-  env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions);
-
-  /**
-   * ## Reporters
-   * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any).
-   */
-  var htmlReporter = new jasmine.HtmlReporter({
-    env: env,
-    onRaiseExceptionsClick: function() { queryString.setParam("catch", !env.catchingExceptions()); },
-    getContainer: function() { return document.body; },
-    createElement: function() { return document.createElement.apply(document, arguments); },
-    createTextNode: function() { return document.createTextNode.apply(document, arguments); },
-    timer: new jasmine.Timer()
-  });
-
-  /**
-   * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results  from JavaScript.
-   */
-  env.addReporter(jasmineInterface.jsApiReporter);
-  env.addReporter(htmlReporter);
-
-  /**
-   * Filter which specs will be run by matching the start of the full name against the `spec` query param.
-   */
-  var specFilter = new jasmine.HtmlSpecFilter({
-    filterString: function() { return queryString.getParam("spec"); }
-  });
-
-  env.specFilter = function(spec) {
-    return specFilter.matches(spec.getFullName());
-  };
-
-  /**
-   * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack.
-   */
-  window.setTimeout = window.setTimeout;
-  window.setInterval = window.setInterval;
-  window.clearTimeout = window.clearTimeout;
-  window.clearInterval = window.clearInterval;
-
-  /**
-   * ## Execution
-   *
-   * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded.
-   */
-  var currentWindowOnload = window.onload;
-
-  window.onload = function() {
-    if (currentWindowOnload) {
-      currentWindowOnload();
-    }
-    htmlReporter.initialize();
-    env.execute();
-  };
-
-  /**
-   * Helper function for readability above.
-   */
-  function extend(destination, source) {
-    for (var property in source) destination[property] = source[property];
-    return destination;
-  }
-
-}());
Index: tests/functional/lib/jasmine-html.js
===================================================================
--- tests/functional/lib/jasmine-html.js	(revision 2726)
+++ tests/functional/lib/jasmine-html.js	(revision 1602)
@@ -1,359 +1,681 @@
-/*
-Copyright (c) 2008-2013 Pivotal Labs
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-jasmineRequire.html = function(j$) {
-  j$.ResultsNode = jasmineRequire.ResultsNode();
-  j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);
-  j$.QueryString = jasmineRequire.QueryString();
-  j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();
-};
-
-jasmineRequire.HtmlReporter = function(j$) {
-
-  var noopTimer = {
-    start: function() {},
-    elapsed: function() { return 0; }
-  };
-
-  function HtmlReporter(options) {
-    var env = options.env || {},
-      getContainer = options.getContainer,
-      createElement = options.createElement,
-      createTextNode = options.createTextNode,
-      onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {},
-      timer = options.timer || noopTimer,
-      results = [],
-      specsExecuted = 0,
-      failureCount = 0,
-      pendingSpecCount = 0,
-      htmlReporterMain,
-      symbols;
-
-    this.initialize = function() {
-      htmlReporterMain = createDom("div", {className: "html-reporter"},
-        createDom("div", {className: "banner"},
-          createDom("span", {className: "title"}, "Jasmine"),
-          createDom("span", {className: "version"}, j$.version)
-        ),
-        createDom("ul", {className: "symbol-summary"}),
-        createDom("div", {className: "alert"}),
-        createDom("div", {className: "results"},
-          createDom("div", {className: "failures"})
-        )
+jasmine.HtmlReporterHelpers = {};
+
+jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) {
+  var el = document.createElement(type);
+
+  for (var i = 2; i < arguments.length; i++) {
+    var child = arguments[i];
+
+    if (typeof child === 'string') {
+      el.appendChild(document.createTextNode(child));
+    } else {
+      if (child) {
+        el.appendChild(child);
+      }
+    }
+  }
+
+  for (var attr in attrs) {
+    if (attr == "className") {
+      el[attr] = attrs[attr];
+    } else {
+      el.setAttribute(attr, attrs[attr]);
+    }
+  }
+
+  return el;
+};
+
+jasmine.HtmlReporterHelpers.getSpecStatus = function(child) {
+  var results = child.results();
+  var status = results.passed() ? 'passed' : 'failed';
+  if (results.skipped) {
+    status = 'skipped';
+  }
+
+  return status;
+};
+
+jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) {
+  var parentDiv = this.dom.summary;
+  var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite';
+  var parent = child[parentSuite];
+
+  if (parent) {
+    if (typeof this.views.suites[parent.id] == 'undefined') {
+      this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views);
+    }
+    parentDiv = this.views.suites[parent.id].element;
+  }
+
+  parentDiv.appendChild(childElement);
+};
+
+
+jasmine.HtmlReporterHelpers.addHelpers = function(ctor) {
+  for(var fn in jasmine.HtmlReporterHelpers) {
+    ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn];
+  }
+};
+
+jasmine.HtmlReporter = function(_doc) {
+  var self = this;
+  var doc = _doc || window.document;
+
+  var reporterView;
+
+  var dom = {};
+
+  // Jasmine Reporter Public Interface
+  self.logRunningSpecs = false;
+
+  self.reportRunnerStarting = function(runner) {
+    var specs = runner.specs() || [];
+
+    if (specs.length == 0) {
+      return;
+    }
+
+    createReporterDom(runner.env.versionString());
+    doc.body.appendChild(dom.reporter);
+    setExceptionHandling();
+
+    reporterView = new jasmine.HtmlReporter.ReporterView(dom);
+    reporterView.addSpecs(specs, self.specFilter);
+  };
+
+  self.reportRunnerResults = function(runner) {
+    reporterView && reporterView.complete();
+  };
+
+  self.reportSuiteResults = function(suite) {
+    reporterView.suiteComplete(suite);
+  };
+
+  self.reportSpecStarting = function(spec) {
+    if (self.logRunningSpecs) {
+      self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
+    }
+  };
+
+  self.reportSpecResults = function(spec) {
+    reporterView.specComplete(spec);
+  };
+
+  self.log = function() {
+    var console = jasmine.getGlobal().console;
+    if (console && console.log) {
+      if (console.log.apply) {
+        console.log.apply(console, arguments);
+      } else {
+        console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
+      }
+    }
+  };
+
+  self.specFilter = function(spec) {
+    if (!focusedSpecName()) {
+      return true;
+    }
+
+    return spec.getFullName().indexOf(focusedSpecName()) === 0;
+  };
+
+  return self;
+
+  function focusedSpecName() {
+    var specName;
+
+    (function memoizeFocusedSpec() {
+      if (specName) {
+        return;
+      }
+
+      var paramMap = [];
+      var params = jasmine.HtmlReporter.parameters(doc);
+
+      for (var i = 0; i < params.length; i++) {
+        var p = params[i].split('=');
+        paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
+      }
+
+      specName = paramMap.spec;
+    })();
+
+    return specName;
+  }
+
+  function createReporterDom(version) {
+    dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' },
+      dom.banner = self.createDom('div', { className: 'banner' },
+        self.createDom('span', { className: 'title' }, "Jasmine "),
+        self.createDom('span', { className: 'version' }, version)),
+
+      dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}),
+      dom.alert = self.createDom('div', {className: 'alert'},
+        self.createDom('span', { className: 'exceptions' },
+          self.createDom('label', { className: 'label', 'for': 'no_try_catch' }, 'No try/catch'),
+          self.createDom('input', { id: 'no_try_catch', type: 'checkbox' }))),
+      dom.results = self.createDom('div', {className: 'results'},
+        dom.summary = self.createDom('div', { className: 'summary' }),
+        dom.details = self.createDom('div', { id: 'details' }))
+    );
+  }
+
+  function noTryCatch() {
+    return window.location.search.match(/catch=false/);
+  }
+
+  function searchWithCatch() {
+    var params = jasmine.HtmlReporter.parameters(window.document);
+    var removed = false;
+    var i = 0;
+
+    while (!removed && i < params.length) {
+      if (params[i].match(/catch=/)) {
+        params.splice(i, 1);
+        removed = true;
+      }
+      i++;
+    }
+    if (jasmine.CATCH_EXCEPTIONS) {
+      params.push("catch=false");
+    }
+
+    return params.join("&");
+  }
+
+  function setExceptionHandling() {
+    var chxCatch = document.getElementById('no_try_catch');
+
+    if (noTryCatch()) {
+      chxCatch.setAttribute('checked', true);
+      jasmine.CATCH_EXCEPTIONS = false;
+    }
+    chxCatch.onclick = function() {
+      window.location.search = searchWithCatch();
+    };
+  }
+};
+jasmine.HtmlReporter.parameters = function(doc) {
+  var paramStr = doc.location.search.substring(1);
+  var params = [];
+
+  if (paramStr.length > 0) {
+    params = paramStr.split('&');
+  }
+  return params;
+}
+jasmine.HtmlReporter.sectionLink = function(sectionName) {
+  var link = '?';
+  var params = [];
+
+  if (sectionName) {
+    params.push('spec=' + encodeURIComponent(sectionName));
+  }
+  if (!jasmine.CATCH_EXCEPTIONS) {
+    params.push("catch=false");
+  }
+  if (params.length > 0) {
+    link += params.join("&");
+  }
+
+  return link;
+};
+jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);
+jasmine.HtmlReporter.ReporterView = function(dom) {
+  this.startedAt = new Date();
+  this.runningSpecCount = 0;
+  this.completeSpecCount = 0;
+  this.passedCount = 0;
+  this.failedCount = 0;
+  this.skippedCount = 0;
+
+  this.createResultsMenu = function() {
+    this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'},
+      this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'),
+      ' | ',
+      this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing'));
+
+    this.summaryMenuItem.onclick = function() {
+      dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, '');
+    };
+
+    this.detailsMenuItem.onclick = function() {
+      showDetails();
+    };
+  };
+
+  this.addSpecs = function(specs, specFilter) {
+    this.totalSpecCount = specs.length;
+
+    this.views = {
+      specs: {},
+      suites: {}
+    };
+
+    for (var i = 0; i < specs.length; i++) {
+      var spec = specs[i];
+      this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views);
+      if (specFilter(spec)) {
+        this.runningSpecCount++;
+      }
+    }
+  };
+
+  this.specComplete = function(spec) {
+    this.completeSpecCount++;
+
+    if (isUndefined(this.views.specs[spec.id])) {
+      this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom);
+    }
+
+    var specView = this.views.specs[spec.id];
+
+    switch (specView.status()) {
+      case 'passed':
+        this.passedCount++;
+        break;
+
+      case 'failed':
+        this.failedCount++;
+        break;
+
+      case 'skipped':
+        this.skippedCount++;
+        break;
+    }
+
+    specView.refresh();
+    this.refresh();
+  };
+
+  this.suiteComplete = function(suite) {
+    var suiteView = this.views.suites[suite.id];
+    if (isUndefined(suiteView)) {
+      return;
+    }
+    suiteView.refresh();
+  };
+
+  this.refresh = function() {
+
+    if (isUndefined(this.resultsMenu)) {
+      this.createResultsMenu();
+    }
+
+    // currently running UI
+    if (isUndefined(this.runningAlert)) {
+      this.runningAlert = this.createDom('a', { href: jasmine.HtmlReporter.sectionLink(), className: "runningAlert bar" });
+      dom.alert.appendChild(this.runningAlert);
+    }
+    this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount);
+
+    // skipped specs UI
+    if (isUndefined(this.skippedAlert)) {
+      this.skippedAlert = this.createDom('a', { href: jasmine.HtmlReporter.sectionLink(), className: "skippedAlert bar" });
+    }
+
+    this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
+
+    if (this.skippedCount === 1 && isDefined(dom.alert)) {
+      dom.alert.appendChild(this.skippedAlert);
+    }
+
+    // passing specs UI
+    if (isUndefined(this.passedAlert)) {
+      this.passedAlert = this.createDom('span', { href: jasmine.HtmlReporter.sectionLink(), className: "passingAlert bar" });
+    }
+    this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount);
+
+    // failing specs UI
+    if (isUndefined(this.failedAlert)) {
+      this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"});
+    }
+    this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount);
+
+    if (this.failedCount === 1 && isDefined(dom.alert)) {
+      dom.alert.appendChild(this.failedAlert);
+      dom.alert.appendChild(this.resultsMenu);
+    }
+
+    // summary info
+    this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount);
+    this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing";
+  };
+
+  this.complete = function() {
+    dom.alert.removeChild(this.runningAlert);
+
+    this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
+
+    if (this.failedCount === 0) {
+      dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount)));
+    } else {
+      showDetails();
+    }
+
+    dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"));
+  };
+
+  return this;
+
+  function showDetails() {
+    if (dom.reporter.className.search(/showDetails/) === -1) {
+      dom.reporter.className += " showDetails";
+    }
+  }
+
+  function isUndefined(obj) {
+    return typeof obj === 'undefined';
+  }
+
+  function isDefined(obj) {
+    return !isUndefined(obj);
+  }
+
+  function specPluralizedFor(count) {
+    var str = count + " spec";
+    if (count > 1) {
+      str += "s"
+    }
+    return str;
+  }
+
+};
+
+jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);
+
+
+jasmine.HtmlReporter.SpecView = function(spec, dom, views) {
+  this.spec = spec;
+  this.dom = dom;
+  this.views = views;
+
+  this.symbol = this.createDom('li', { className: 'pending' });
+  this.dom.symbolSummary.appendChild(this.symbol);
+
+  this.summary = this.createDom('div', { className: 'specSummary' },
+    this.createDom('a', {
+      className: 'description',
+      href: jasmine.HtmlReporter.sectionLink(this.spec.getFullName()),
+      title: this.spec.getFullName()
+    }, this.spec.description)
+  );
+
+  this.detail = this.createDom('div', { className: 'specDetail' },
+      this.createDom('a', {
+        className: 'description',
+        href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
+        title: this.spec.getFullName()
+      }, this.spec.getFullName())
+  );
+};
+
+jasmine.HtmlReporter.SpecView.prototype.status = function() {
+  return this.getSpecStatus(this.spec);
+};
+
+jasmine.HtmlReporter.SpecView.prototype.refresh = function() {
+  this.symbol.className = this.status();
+
+  switch (this.status()) {
+    case 'skipped':
+      break;
+
+    case 'passed':
+      this.appendSummaryToSuiteDiv();
+      break;
+
+    case 'failed':
+      this.appendSummaryToSuiteDiv();
+      this.appendFailureDetail();
+      break;
+  }
+};
+
+jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() {
+  this.summary.className += ' ' + this.status();
+  this.appendToSummary(this.spec, this.summary);
+};
+
+jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
+  this.detail.className += ' ' + this.status();
+
+  var resultItems = this.spec.results().getItems();
+  var messagesDiv = this.createDom('div', { className: 'messages' });
+
+  for (var i = 0; i < resultItems.length; i++) {
+    var result = resultItems[i];
+
+    if (result.type == 'log') {
+      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
+    } else if (result.type == 'expect' && result.passed && !result.passed()) {
+      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
+
+      if (result.trace.stack) {
+        messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
+      }
+    }
+  }
+
+  if (messagesDiv.childNodes.length > 0) {
+    this.detail.appendChild(messagesDiv);
+    this.dom.details.appendChild(this.detail);
+  }
+};
+
+jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);jasmine.HtmlReporter.SuiteView = function(suite, dom, views) {
+  this.suite = suite;
+  this.dom = dom;
+  this.views = views;
+
+  this.element = this.createDom('div', { className: 'suite' },
+    this.createDom('a', { className: 'description', href: jasmine.HtmlReporter.sectionLink(this.suite.getFullName()) }, this.suite.description)
+  );
+
+  this.appendToSummary(this.suite, this.element);
+};
+
+jasmine.HtmlReporter.SuiteView.prototype.status = function() {
+  return this.getSpecStatus(this.suite);
+};
+
+jasmine.HtmlReporter.SuiteView.prototype.refresh = function() {
+  this.element.className += " " + this.status();
+};
+
+jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);
+
+/* @deprecated Use jasmine.HtmlReporter instead
+ */
+jasmine.TrivialReporter = function(doc) {
+  this.document = doc || document;
+  this.suiteDivs = {};
+  this.logRunningSpecs = false;
+};
+
+jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
+  var el = document.createElement(type);
+
+  for (var i = 2; i < arguments.length; i++) {
+    var child = arguments[i];
+
+    if (typeof child === 'string') {
+      el.appendChild(document.createTextNode(child));
+    } else {
+      if (child) { el.appendChild(child); }
+    }
+  }
+
+  for (var attr in attrs) {
+    if (attr == "className") {
+      el[attr] = attrs[attr];
+    } else {
+      el.setAttribute(attr, attrs[attr]);
+    }
+  }
+
+  return el;
+};
+
+jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
+  var showPassed, showSkipped;
+
+  this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' },
+      this.createDom('div', { className: 'banner' },
+        this.createDom('div', { className: 'logo' },
+            this.createDom('span', { className: 'title' }, "Jasmine"),
+            this.createDom('span', { className: 'version' }, runner.env.versionString())),
+        this.createDom('div', { className: 'options' },
+            "Show ",
+            showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
+            this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
+            showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
+            this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
+            )
+          ),
+
+      this.runnerDiv = this.createDom('div', { className: 'runner running' },
+          this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
+          this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
+          this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
       );
-      getContainer().appendChild(htmlReporterMain);
-
-      symbols = find(".symbol-summary");
-    };
-
-    var totalSpecsDefined;
-    this.jasmineStarted = function(options) {
-      totalSpecsDefined = options.totalSpecsDefined || 0;
-      timer.start();
-    };
-
-    var summary = createDom("div", {className: "summary"});
-
-    var topResults = new j$.ResultsNode({}, "", null),
-      currentParent = topResults;
-
-    this.suiteStarted = function(result) {
-      currentParent.addChild(result, "suite");
-      currentParent = currentParent.last();
-    };
-
-    this.suiteDone = function(result) {
-      if (currentParent == topResults) {
-        return;
-      }
-
-      currentParent = currentParent.parent;
-    };
-
-    this.specStarted = function(result) {
-      currentParent.addChild(result, "spec");
-    };
-
-    var failures = [];
-    this.specDone = function(result) {
-      if (result.status != "disabled") {
-        specsExecuted++;
-      }
-
-      symbols.appendChild(createDom("li", {
-          className: result.status,
-          id: "spec_" + result.id,
-          title: result.fullName
-        }
-      ));
-
-      if (result.status == "failed") {
-        failureCount++;
-
-        var failure =
-          createDom("div", {className: "spec-detail failed"},
-            createDom("div", {className: "description"},
-              createDom("a", {title: result.fullName, href: specHref(result)}, result.fullName)
-            ),
-            createDom("div", {className: "messages"})
-          );
-        var messages = failure.childNodes[1];
-
-        for (var i = 0; i < result.failedExpectations.length; i++) {
-          var expectation = result.failedExpectations[i];
-          messages.appendChild(createDom("div", {className: "result-message"}, expectation.message));
-          messages.appendChild(createDom("div", {className: "stack-trace"}, expectation.stack));
-        }
-
-        failures.push(failure);
-      }
-
-      if (result.status == "pending") {
-        pendingSpecCount++;
-      }
-    };
-
-    this.jasmineDone = function() {
-      var banner = find(".banner");
-      banner.appendChild(createDom("span", {className: "duration"}, "finished in " + timer.elapsed() / 1000 + "s"));
-
-      var alert = find(".alert");
-
-      alert.appendChild(createDom("span", { className: "exceptions" },
-        createDom("label", { className: "label", 'for': "raise-exceptions" }, "raise exceptions"),
-        createDom("input", {
-          className: "raise",
-          id: "raise-exceptions",
-          type: "checkbox"
-        })
-      ));
-      var checkbox = find("input");
-
-      checkbox.checked = !env.catchingExceptions();
-      checkbox.onclick = onRaiseExceptionsClick;
-
-      if (specsExecuted < totalSpecsDefined) {
-        var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all";
-        alert.appendChild(
-          createDom("span", {className: "bar skipped"},
-            createDom("a", {href: "?", title: "Run all specs"}, skippedMessage)
-          )
-        );
-      }
-      var statusBarMessage = "" + pluralize("spec", specsExecuted) + ", " + pluralize("failure", failureCount);
-      if (pendingSpecCount) { statusBarMessage += ", " + pluralize("pending spec", pendingSpecCount); }
-
-      var statusBarClassName = "bar " + ((failureCount > 0) ? "failed" : "passed");
-      alert.appendChild(createDom("span", {className: statusBarClassName}, statusBarMessage));
-
-      var results = find(".results");
-      results.appendChild(summary);
-
-      summaryList(topResults, summary);
-
-      function summaryList(resultsTree, domParent) {
-        var specListNode;
-        for (var i = 0; i < resultsTree.children.length; i++) {
-          var resultNode = resultsTree.children[i];
-          if (resultNode.type == "suite") {
-            var suiteListNode = createDom("ul", {className: "suite", id: "suite-" + resultNode.result.id},
-              createDom("li", {className: "suite-detail"},
-                createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
-              )
-            );
-
-            summaryList(resultNode, suiteListNode);
-            domParent.appendChild(suiteListNode);
-          }
-          if (resultNode.type == "spec") {
-            if (domParent.getAttribute("class") != "specs") {
-              specListNode = createDom("ul", {className: "specs"});
-              domParent.appendChild(specListNode);
-            }
-            specListNode.appendChild(
-              createDom("li", {
-                  className: resultNode.result.status,
-                  id: "spec-" + resultNode.result.id
-                },
-                createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description)
-              )
-            );
-          }
-        }
-      }
-
-      if (failures.length) {
-        alert.appendChild(
-          createDom('span', {className: "menu bar spec-list"},
-            createDom("span", {}, "Spec List | "),
-            createDom('a', {className: "failures-menu", href: "#"}, "Failures")));
-        alert.appendChild(
-          createDom('span', {className: "menu bar failure-list"},
-            createDom('a', {className: "spec-list-menu", href: "#"}, "Spec List"),
-            createDom("span", {}, " | Failures ")));
-
-        find(".failures-menu").onclick = function() {
-          setMenuModeTo('failure-list');
-        };
-        find(".spec-list-menu").onclick = function() {
-          setMenuModeTo('spec-list');
-        };
-
-        setMenuModeTo('failure-list');
-
-        var failureNode = find(".failures");
-        for (var i = 0; i < failures.length; i++) {
-          failureNode.appendChild(failures[i]);
-        }
-      }
-    };
-
-    return this;
-
-    function find(selector) {
-      return getContainer().querySelector(selector);
-    }
-
-    function createDom(type, attrs, childrenVarArgs) {
-      var el = createElement(type);
-
-      for (var i = 2; i < arguments.length; i++) {
-        var child = arguments[i];
-
-        if (typeof child === 'string') {
-          el.appendChild(createTextNode(child));
-        } else {
-          if (child) {
-            el.appendChild(child);
-          }
-        }
-      }
-
-      for (var attr in attrs) {
-        if (attr == "className") {
-          el[attr] = attrs[attr];
-        } else {
-          el.setAttribute(attr, attrs[attr]);
-        }
-      }
-
-      return el;
-    }
-
-    function pluralize(singular, count) {
-      var word = (count == 1 ? singular : singular + "s");
-
-      return "" + count + " " + word;
-    }
-
-    function specHref(result) {
-      return "?spec=" + encodeURIComponent(result.fullName);
-    }
-
-    function setMenuModeTo(mode) {
-      htmlReporterMain.setAttribute("class", "html-reporter " + mode);
-    }
-  }
-
-  return HtmlReporter;
-};
-
-jasmineRequire.HtmlSpecFilter = function() {
-  function HtmlSpecFilter(options) {
-    var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
-    var filterPattern = new RegExp(filterString);
-
-    this.matches = function(specName) {
-      return filterPattern.test(specName);
-    };
-  }
-
-  return HtmlSpecFilter;
-};
-
-jasmineRequire.ResultsNode = function() {
-  function ResultsNode(result, type, parent) {
-    this.result = result;
-    this.type = type;
-    this.parent = parent;
-
-    this.children = [];
-
-    this.addChild = function(result, type) {
-      this.children.push(new ResultsNode(result, type, this));
-    };
-
-    this.last = function() {
-      return this.children[this.children.length - 1];
-    };
-  }
-
-  return ResultsNode;
-};
-
-jasmineRequire.QueryString = function() {
-  function QueryString(options) {
-
-    this.setParam = function(key, value) {
-      var paramMap = queryStringToParamMap();
-      paramMap[key] = value;
-      options.getWindowLocation().search = toQueryString(paramMap);
-    };
-
-    this.getParam = function(key) {
-      return queryStringToParamMap()[key];
-    };
-
-    return this;
-
-    function toQueryString(paramMap) {
-      var qStrPairs = [];
-      for (var prop in paramMap) {
-        qStrPairs.push(encodeURIComponent(prop) + "=" + encodeURIComponent(paramMap[prop]));
-      }
-      return "?" + qStrPairs.join('&');
-    }
-
-    function queryStringToParamMap() {
-      var paramStr = options.getWindowLocation().search.substring(1),
-        params = [],
-        paramMap = {};
-
-      if (paramStr.length > 0) {
-        params = paramStr.split('&');
-        for (var i = 0; i < params.length; i++) {
-          var p = params[i].split('=');
-          var value = decodeURIComponent(p[1]);
-          if (value === "true" || value === "false") {
-            value = JSON.parse(value);
-          }
-          paramMap[decodeURIComponent(p[0])] = value;
-        }
-      }
-
-      return paramMap;
-    }
-
-  }
-
-  return QueryString;
-};
+
+  this.document.body.appendChild(this.outerDiv);
+
+  var suites = runner.suites();
+  for (var i = 0; i < suites.length; i++) {
+    var suite = suites[i];
+    var suiteDiv = this.createDom('div', { className: 'suite' },
+        this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
+        this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
+    this.suiteDivs[suite.id] = suiteDiv;
+    var parentDiv = this.outerDiv;
+    if (suite.parentSuite) {
+      parentDiv = this.suiteDivs[suite.parentSuite.id];
+    }
+    parentDiv.appendChild(suiteDiv);
+  }
+
+  this.startedAt = new Date();
+
+  var self = this;
+  showPassed.onclick = function(evt) {
+    if (showPassed.checked) {
+      self.outerDiv.className += ' show-passed';
+    } else {
+      self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
+    }
+  };
+
+  showSkipped.onclick = function(evt) {
+    if (showSkipped.checked) {
+      self.outerDiv.className += ' show-skipped';
+    } else {
+      self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
+    }
+  };
+};
+
+jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
+  var results = runner.results();
+  var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
+  this.runnerDiv.setAttribute("class", className);
+  //do it twice for IE
+  this.runnerDiv.setAttribute("className", className);
+  var specs = runner.specs();
+  var specCount = 0;
+  for (var i = 0; i < specs.length; i++) {
+    if (this.specFilter(specs[i])) {
+      specCount++;
+    }
+  }
+  var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
+  message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
+  this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
+
+  this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
+};
+
+jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
+  var results = suite.results();
+  var status = results.passed() ? 'passed' : 'failed';
+  if (results.totalCount === 0) { // todo: change this to check results.skipped
+    status = 'skipped';
+  }
+  this.suiteDivs[suite.id].className += " " + status;
+};
+
+jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
+  if (this.logRunningSpecs) {
+    this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
+  }
+};
+
+jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
+  var results = spec.results();
+  var status = results.passed() ? 'passed' : 'failed';
+  if (results.skipped) {
+    status = 'skipped';
+  }
+  var specDiv = this.createDom('div', { className: 'spec '  + status },
+      this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
+      this.createDom('a', {
+        className: 'description',
+        href: '?spec=' + encodeURIComponent(spec.getFullName()),
+        title: spec.getFullName()
+      }, spec.description));
+
+
+  var resultItems = results.getItems();
+  var messagesDiv = this.createDom('div', { className: 'messages' });
+  for (var i = 0; i < resultItems.length; i++) {
+    var result = resultItems[i];
+
+    if (result.type == 'log') {
+      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
+    } else if (result.type == 'expect' && result.passed && !result.passed()) {
+      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
+
+      if (result.trace.stack) {
+        messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
+      }
+    }
+  }
+
+  if (messagesDiv.childNodes.length > 0) {
+    specDiv.appendChild(messagesDiv);
+  }
+
+  this.suiteDivs[spec.suite.id].appendChild(specDiv);
+};
+
+jasmine.TrivialReporter.prototype.log = function() {
+  var console = jasmine.getGlobal().console;
+  if (console && console.log) {
+    if (console.log.apply) {
+      console.log.apply(console, arguments);
+    } else {
+      console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
+    }
+  }
+};
+
+jasmine.TrivialReporter.prototype.getLocation = function() {
+  return this.document.location;
+};
+
+jasmine.TrivialReporter.prototype.specFilter = function(spec) {
+  var paramMap = {};
+  var params = this.getLocation().search.substring(1).split('&');
+  for (var i = 0; i < params.length; i++) {
+    var p = params[i].split('=');
+    paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
+  }
+
+  if (!paramMap.spec) {
+    return true;
+  }
+  return spec.getFullName().indexOf(paramMap.spec) === 0;
+};
Index: tests/functional/lib/jasmine-jquery-bootstrap.js
===================================================================
--- tests/functional/lib/jasmine-jquery-bootstrap.js	(revision 2726)
+++ tests/functional/lib/jasmine-jquery-bootstrap.js	(revision 1724)
@@ -2,3 +2,28 @@
 	jasmine.getFixtures().fixturesPath = 'fixtures';
 	jasmine.getStyleFixtures().fixturesPath = '../../admin/style';
+
+	var jasmineEnv = jasmine.getEnv();
+	jasmineEnv.updateInterval = 1000;
+
+	var htmlReporter = new jasmine.HtmlReporter();
+
+	jasmineEnv.addReporter(htmlReporter);
+
+	jasmineEnv.specFilter = function(spec) {
+		return htmlReporter.specFilter(spec);
+	};
+
+	var currentWindowOnload = window.onload;
+
+	window.onload = function() {
+		if (currentWindowOnload) {
+			currentWindowOnload();
+		}
+		execJasmine();
+	};
+
+	function execJasmine() {
+		jasmineEnv.execute();
+	}
+
 })();
Index: tests/functional/lib/jasmine-jquery.js
===================================================================
--- tests/functional/lib/jasmine-jquery.js	(revision 2726)
+++ tests/functional/lib/jasmine-jquery.js	(revision 1602)
@@ -1,298 +1,336 @@
 /*!
-Jasmine-jQuery: a set of jQuery helpers for Jasmine tests.
-
-Version 2.0.5
-
-https://github.com/velesin/jasmine-jquery
-
-Copyright (c) 2010-2014 Wojciech Zawistowski, Travis Jeffery
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ Jasmine-jQuery: a set of jQuery helpers for Jasmine tests.
+
+ Version 1.5.8
+
+ https://github.com/velesin/jasmine-jquery
+
+ Copyright (c) 2010-2013 Wojciech Zawistowski, Travis Jeffery
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
-
-+function (window, jasmine, $) { "use strict";
-
-  jasmine.spiedEventsKey = function (selector, eventName) {
-    return [$(selector).selector, eventName].toString()
-  }
-
-  jasmine.getFixtures = function () {
-    return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures()
-  }
-
-  jasmine.getStyleFixtures = function () {
-    return jasmine.currentStyleFixtures_ = jasmine.currentStyleFixtures_ || new jasmine.StyleFixtures()
-  }
-
-  jasmine.Fixtures = function () {
-    this.containerId = 'jasmine-fixtures'
-    this.fixturesCache_ = {}
-    this.fixturesPath = 'spec/javascripts/fixtures'
-  }
-
-  jasmine.Fixtures.prototype.set = function (html) {
-    this.cleanUp()
-    return this.createContainer_(html)
-  }
-
-  jasmine.Fixtures.prototype.appendSet= function (html) {
-    this.addToContainer_(html)
-  }
-
-  jasmine.Fixtures.prototype.preload = function () {
-    this.read.apply(this, arguments)
-  }
-
-  jasmine.Fixtures.prototype.load = function () {
-    this.cleanUp()
-    this.createContainer_(this.read.apply(this, arguments))
-  }
-
-  jasmine.Fixtures.prototype.appendLoad = function () {
-    this.addToContainer_(this.read.apply(this, arguments))
-  }
-
-  jasmine.Fixtures.prototype.read = function () {
-    var htmlChunks = []
-      , fixtureUrls = arguments
-
-    for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
-      htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]))
-    }
-
-    return htmlChunks.join('')
-  }
-
-  jasmine.Fixtures.prototype.clearCache = function () {
-    this.fixturesCache_ = {}
-  }
-
-  jasmine.Fixtures.prototype.cleanUp = function () {
-    $('#' + this.containerId).remove()
-  }
-
-  jasmine.Fixtures.prototype.sandbox = function (attributes) {
-    var attributesToSet = attributes || {}
-    return $('<div id="sandbox" />').attr(attributesToSet)
-  }
-
-  jasmine.Fixtures.prototype.createContainer_ = function (html) {
-    var container = $('<div>')
+var readFixtures = function() {
+  return jasmine.getFixtures().proxyCallTo_('read', arguments)
+}
+
+var preloadFixtures = function() {
+  jasmine.getFixtures().proxyCallTo_('preload', arguments)
+}
+
+var loadFixtures = function() {
+  jasmine.getFixtures().proxyCallTo_('load', arguments)
+}
+
+var appendLoadFixtures = function() {
+  jasmine.getFixtures().proxyCallTo_('appendLoad', arguments)
+}
+
+var setFixtures = function(html) {
+  return jasmine.getFixtures().proxyCallTo_('set', arguments)
+}
+
+var appendSetFixtures = function() {
+  jasmine.getFixtures().proxyCallTo_('appendSet', arguments)
+}
+
+var sandbox = function(attributes) {
+  return jasmine.getFixtures().sandbox(attributes)
+}
+
+var spyOnEvent = function(selector, eventName) {
+  return jasmine.JQuery.events.spyOn(selector, eventName)
+}
+
+var preloadStyleFixtures = function() {
+  jasmine.getStyleFixtures().proxyCallTo_('preload', arguments)
+}
+
+var loadStyleFixtures = function() {
+  jasmine.getStyleFixtures().proxyCallTo_('load', arguments)
+}
+
+var appendLoadStyleFixtures = function() {
+  jasmine.getStyleFixtures().proxyCallTo_('appendLoad', arguments)
+}
+
+var setStyleFixtures = function(html) {
+  jasmine.getStyleFixtures().proxyCallTo_('set', arguments)
+}
+
+var appendSetStyleFixtures = function(html) {
+  jasmine.getStyleFixtures().proxyCallTo_('appendSet', arguments)
+}
+
+var loadJSONFixtures = function() {
+  return jasmine.getJSONFixtures().proxyCallTo_('load', arguments)
+}
+
+var getJSONFixture = function(url) {
+  return jasmine.getJSONFixtures().proxyCallTo_('read', arguments)[url]
+}
+
+jasmine.spiedEventsKey = function (selector, eventName) {
+  return [$(selector).selector, eventName].toString()
+}
+
+jasmine.getFixtures = function() {
+  return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures()
+}
+
+jasmine.getStyleFixtures = function() {
+  return jasmine.currentStyleFixtures_ = jasmine.currentStyleFixtures_ || new jasmine.StyleFixtures()
+}
+
+jasmine.Fixtures = function() {
+  this.containerId = 'jasmine-fixtures'
+  this.fixturesCache_ = {}
+  this.fixturesPath = 'spec/javascripts/fixtures'
+}
+
+jasmine.Fixtures.prototype.set = function(html) {
+  this.cleanUp()
+  return this.createContainer_(html)
+}
+
+jasmine.Fixtures.prototype.appendSet= function(html) {
+  this.addToContainer_(html)
+}
+
+jasmine.Fixtures.prototype.preload = function() {
+  this.read.apply(this, arguments)
+}
+
+jasmine.Fixtures.prototype.load = function() {
+  this.cleanUp()
+  this.createContainer_(this.read.apply(this, arguments))
+}
+
+jasmine.Fixtures.prototype.appendLoad = function() {
+  this.addToContainer_(this.read.apply(this, arguments))
+}
+
+jasmine.Fixtures.prototype.read = function() {
+  var htmlChunks = []
+
+  var fixtureUrls = arguments
+  for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
+    htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]))
+  }
+
+  return htmlChunks.join('')
+}
+
+jasmine.Fixtures.prototype.clearCache = function() {
+  this.fixturesCache_ = {}
+}
+
+jasmine.Fixtures.prototype.cleanUp = function() {
+  $('#' + this.containerId).remove()
+}
+
+jasmine.Fixtures.prototype.sandbox = function(attributes) {
+  var attributesToSet = attributes || {}
+  return $('<div id="sandbox" />').attr(attributesToSet)
+}
+
+jasmine.Fixtures.prototype.createContainer_ = function(html) {
+  var container = $('<div>')
     .attr('id', this.containerId)
-    .html(html)
-
-    $(document.body).append(container)
-    return container
-  }
-
-  jasmine.Fixtures.prototype.addToContainer_ = function (html){
-    var container = $(document.body).find('#'+this.containerId).append(html)
-
-    if (!container.length) {
-      this.createContainer_(html)
-    }
-  }
-
-  jasmine.Fixtures.prototype.getFixtureHtml_ = function (url) {
-    if (typeof this.fixturesCache_[url] === 'undefined') {
-      this.loadFixtureIntoCache_(url)
-    }
-    return this.fixturesCache_[url]
-  }
-
-  jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
-    var self = this
-      , url = this.makeFixtureUrl_(relativeUrl)
-      , htmlText = ''
-      , request = $.ajax({
-        async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
-        cache: false,
-        url: url,
-        success: function (data, status, $xhr) {
-          htmlText = $xhr.responseText
-        }
-      }).fail(function ($xhr, status, err) {
-          throw new Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + err.message + ')')
-      })
-
-      var scripts = $($.parseHTML(htmlText, true)).find('script[src]') || [];
-
-      scripts.each(function(){
-        $.ajax({
-            async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
-            cache: false,
-            dataType: 'script',
-            url: $(this).attr('src'),
-            success: function (data, status, $xhr) {
-                htmlText += '<script>' + $xhr.responseText + '</script>'
-            },
-            error: function ($xhr, status, err) {
-                throw new Error('Script could not be loaded: ' + scriptSrc + ' (status: ' + status + ', message: ' + err.message + ')')
-            }
-        });
-      })
-
-      self.fixturesCache_[relativeUrl] = htmlText;
-  }
-
-  jasmine.Fixtures.prototype.makeFixtureUrl_ = function (relativeUrl){
-    return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
-  }
-
-  jasmine.Fixtures.prototype.proxyCallTo_ = function (methodName, passedArguments) {
-    return this[methodName].apply(this, passedArguments)
-  }
-
-
-  jasmine.StyleFixtures = function () {
-    this.fixturesCache_ = {}
-    this.fixturesNodes_ = []
-    this.fixturesPath = 'spec/javascripts/fixtures'
-  }
-
-  jasmine.StyleFixtures.prototype.set = function (css) {
-    this.cleanUp()
-    this.createStyle_(css)
-  }
-
-  jasmine.StyleFixtures.prototype.appendSet = function (css) {
-    this.createStyle_(css)
-  }
-
-  jasmine.StyleFixtures.prototype.preload = function () {
-    this.read_.apply(this, arguments)
-  }
-
-  jasmine.StyleFixtures.prototype.load = function () {
-    this.cleanUp()
-    this.createStyle_(this.read_.apply(this, arguments))
-  }
-
-  jasmine.StyleFixtures.prototype.appendLoad = function () {
-    this.createStyle_(this.read_.apply(this, arguments))
-  }
-
-  jasmine.StyleFixtures.prototype.cleanUp = function () {
-    while(this.fixturesNodes_.length) {
-      this.fixturesNodes_.pop().remove()
-    }
-  }
-
-  jasmine.StyleFixtures.prototype.createStyle_ = function (html) {
-    var styleText = $('<div></div>').html(html).text()
-      , style = $('<style>' + styleText + '</style>')
-
-    this.fixturesNodes_.push(style)
-    $('head').append(style)
-  }
-
-  jasmine.StyleFixtures.prototype.clearCache = jasmine.Fixtures.prototype.clearCache
-  jasmine.StyleFixtures.prototype.read_ = jasmine.Fixtures.prototype.read
-  jasmine.StyleFixtures.prototype.getFixtureHtml_ = jasmine.Fixtures.prototype.getFixtureHtml_
-  jasmine.StyleFixtures.prototype.loadFixtureIntoCache_ = jasmine.Fixtures.prototype.loadFixtureIntoCache_
-  jasmine.StyleFixtures.prototype.makeFixtureUrl_ = jasmine.Fixtures.prototype.makeFixtureUrl_
-  jasmine.StyleFixtures.prototype.proxyCallTo_ = jasmine.Fixtures.prototype.proxyCallTo_
-
-  jasmine.getJSONFixtures = function () {
-    return jasmine.currentJSONFixtures_ = jasmine.currentJSONFixtures_ || new jasmine.JSONFixtures()
-  }
-
-  jasmine.JSONFixtures = function () {
-    this.fixturesCache_ = {}
-    this.fixturesPath = 'spec/javascripts/fixtures/json'
-  }
-
-  jasmine.JSONFixtures.prototype.load = function () {
-    this.read.apply(this, arguments)
-    return this.fixturesCache_
-  }
-
-  jasmine.JSONFixtures.prototype.read = function () {
-    var fixtureUrls = arguments
-
-    for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
-      this.getFixtureData_(fixtureUrls[urlIndex])
-    }
-
-    return this.fixturesCache_
-  }
-
-  jasmine.JSONFixtures.prototype.clearCache = function () {
-    this.fixturesCache_ = {}
-  }
-
-  jasmine.JSONFixtures.prototype.getFixtureData_ = function (url) {
-    if (!this.fixturesCache_[url]) this.loadFixtureIntoCache_(url)
-    return this.fixturesCache_[url]
-  }
-
-  jasmine.JSONFixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
-    var self = this
-      , url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
-
-    $.ajax({
-      async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
-      cache: false,
-      dataType: 'json',
-      url: url,
-      success: function (data) {
-        self.fixturesCache_[relativeUrl] = data
-      },
-      error: function ($xhr, status, err) {
-        throw new Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + err.message + ')')
-      }
-    })
-  }
-
-  jasmine.JSONFixtures.prototype.proxyCallTo_ = function (methodName, passedArguments) {
-    return this[methodName].apply(this, passedArguments)
-  }
-
-  jasmine.jQuery = function () {}
-
-  jasmine.jQuery.browserTagCaseIndependentHtml = function (html) {
-    return $('<div/>').append(html).html()
-  }
-
-  jasmine.jQuery.elementToString = function (element) {
-    return $(element).map(function () { return this.outerHTML; }).toArray().join(', ')
-  }
-
+    .html(html);
+  $(document.body).append(container)
+  return container
+}
+
+jasmine.Fixtures.prototype.addToContainer_ = function(html){
+  var container = $(document.body).find('#'+this.containerId).append(html)
+  if(!container.length){
+    this.createContainer_(html)
+  }
+}
+
+jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) {
+  if (typeof this.fixturesCache_[url] === 'undefined') {
+    this.loadFixtureIntoCache_(url)
+  }
+  return this.fixturesCache_[url]
+}
+
+jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) {
+  var url = this.makeFixtureUrl_(relativeUrl)
+  var request = $.ajax({
+    type: "GET",
+    url: url + "?" + new Date().getTime(),
+    async: false
+  })
+  this.fixturesCache_[relativeUrl] = request.responseText
+}
+
+jasmine.Fixtures.prototype.makeFixtureUrl_ = function(relativeUrl){
+  return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
+}
+
+jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) {
+  return this[methodName].apply(this, passedArguments)
+}
+
+
+jasmine.StyleFixtures = function() {
+  this.fixturesCache_ = {}
+  this.fixturesNodes_ = []
+  this.fixturesPath = 'spec/javascripts/fixtures'
+}
+
+jasmine.StyleFixtures.prototype.set = function(css) {
+  this.cleanUp()
+  this.createStyle_(css)
+}
+
+jasmine.StyleFixtures.prototype.appendSet = function(css) {
+  this.createStyle_(css)
+}
+
+jasmine.StyleFixtures.prototype.preload = function() {
+  this.read_.apply(this, arguments)
+}
+
+jasmine.StyleFixtures.prototype.load = function() {
+  this.cleanUp()
+  this.createStyle_(this.read_.apply(this, arguments))
+}
+
+jasmine.StyleFixtures.prototype.appendLoad = function() {
+  this.createStyle_(this.read_.apply(this, arguments))
+}
+
+jasmine.StyleFixtures.prototype.cleanUp = function() {
+  while(this.fixturesNodes_.length) {
+    this.fixturesNodes_.pop().remove()
+  }
+}
+
+jasmine.StyleFixtures.prototype.createStyle_ = function(html) {
+  var styleText = $('<div></div>').html(html).text(),
+    style = $('<style>' + styleText + '</style>')
+
+  this.fixturesNodes_.push(style)
+
+  $('head').append(style)
+}
+
+jasmine.StyleFixtures.prototype.clearCache = jasmine.Fixtures.prototype.clearCache
+
+jasmine.StyleFixtures.prototype.read_ = jasmine.Fixtures.prototype.read
+
+jasmine.StyleFixtures.prototype.getFixtureHtml_ = jasmine.Fixtures.prototype.getFixtureHtml_
+
+jasmine.StyleFixtures.prototype.loadFixtureIntoCache_ = jasmine.Fixtures.prototype.loadFixtureIntoCache_
+
+jasmine.StyleFixtures.prototype.makeFixtureUrl_ = jasmine.Fixtures.prototype.makeFixtureUrl_
+
+jasmine.StyleFixtures.prototype.proxyCallTo_ = jasmine.Fixtures.prototype.proxyCallTo_
+
+jasmine.getJSONFixtures = function() {
+  return jasmine.currentJSONFixtures_ = jasmine.currentJSONFixtures_ || new jasmine.JSONFixtures()
+}
+
+jasmine.JSONFixtures = function() {
+  this.fixturesCache_ = {}
+  this.fixturesPath = 'spec/javascripts/fixtures/json'
+}
+
+jasmine.JSONFixtures.prototype.load = function() {
+  this.read.apply(this, arguments)
+  return this.fixturesCache_
+}
+
+jasmine.JSONFixtures.prototype.read = function() {
+  var fixtureUrls = arguments
+  for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
+    this.getFixtureData_(fixtureUrls[urlIndex])
+  }
+  return this.fixturesCache_
+}
+
+jasmine.JSONFixtures.prototype.clearCache = function() {
+  this.fixturesCache_ = {}
+}
+
+jasmine.JSONFixtures.prototype.getFixtureData_ = function(url) {
+  this.loadFixtureIntoCache_(url)
+  return this.fixturesCache_[url]
+}
+
+jasmine.JSONFixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) {
+  var self = this
+  var url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
+  $.ajax({
+    async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
+    cache: false,
+    dataType: 'json',
+    url: url,
+    success: function(data) {
+      self.fixturesCache_[relativeUrl] = data
+    },
+    error: function(jqXHR, status, errorThrown) {
+        throw Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')')
+    }
+  })
+}
+
+jasmine.JSONFixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) {
+  return this[methodName].apply(this, passedArguments)
+}
+
+jasmine.JQuery = function() {}
+
+jasmine.JQuery.browserTagCaseIndependentHtml = function(html) {
+  return $('<div/>').append(html).html()
+}
+
+jasmine.JQuery.elementToString = function(element) {
+  var domEl = $(element).get(0)
+  if (domEl == undefined || domEl.cloneNode)
+    return $('<div />').append($(element).clone()).html()
+  else
+    return element.toString()
+}
+
+jasmine.JQuery.matchersClass = {}
+
+!function(namespace) {
   var data = {
-      spiedEvents: {}
-    , handlers:    []
-  }
-
-  jasmine.jQuery.events = {
-    spyOn: function (selector, eventName) {
-      var handler = function (e) {
+    spiedEvents: {},
+    handlers:    []
+  }
+
+  namespace.events = {
+    spyOn: function(selector, eventName) {
+      var handler = function(e) {
         data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = jasmine.util.argsToArray(arguments)
       }
-
       $(selector).on(eventName, handler)
       data.handlers.push(handler)
-
       return {
         selector: selector,
         eventName: eventName,
         handler: handler,
-        reset: function (){
+        reset: function(){
           delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
         }
@@ -300,514 +338,336 @@
     },
 
-    args: function (selector, eventName) {
-      var actualArgs = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
+    args: function(selector, eventName) {
+      var actualArgs = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)];
 
       if (!actualArgs) {
-        throw "There is no spy for " + eventName + " on " + selector.toString() + ". Make sure to create a spy using spyOnEvent."
-      }
-
-      return actualArgs
-    },
-
-    wasTriggered: function (selector, eventName) {
+        throw "There is no spy for " + eventName + " on " + selector.toString() + ". Make sure to create a spy using spyOnEvent.";
+      }
+
+      return actualArgs;
+    },
+
+    wasTriggered: function(selector, eventName) {
       return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)])
     },
 
-    wasTriggeredWith: function (selector, eventName, expectedArgs, util, customEqualityTesters) {
-      var actualArgs = jasmine.jQuery.events.args(selector, eventName).slice(1)
-
-      if (Object.prototype.toString.call(expectedArgs) !== '[object Array]')
-        actualArgs = actualArgs[0]
-
-      return util.equals(expectedArgs, actualArgs, customEqualityTesters)
-    },
-
-    wasPrevented: function (selector, eventName) {
-      var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
-        , e = args ? args[0] : undefined
-
+    wasTriggeredWith: function(selector, eventName, expectedArgs, env) {
+      var actualArgs = jasmine.JQuery.events.args(selector, eventName).slice(1);
+      if (Object.prototype.toString.call(expectedArgs) !== '[object Array]') {
+        actualArgs = actualArgs[0];
+      }
+      return env.equals_(expectedArgs, actualArgs);
+    },
+
+    wasPrevented: function(selector, eventName) {
+      var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)],
+          e = args ? args[0] : undefined;
       return e && e.isDefaultPrevented()
     },
 
-    wasStopped: function (selector, eventName) {
-      var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
-        , e = args ? args[0] : undefined
+    wasStopped: function(selector, eventName) {
+      var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)],
+          e = args ? args[0] : undefined;
       return e && e.isPropagationStopped()
     },
 
-    cleanUp: function () {
+    cleanUp: function() {
       data.spiedEvents = {}
       data.handlers    = []
     }
   }
-
-  var hasProperty = function (actualValue, expectedValue) {
-    if (expectedValue === undefined)
-      return actualValue !== undefined
-
-    return actualValue === expectedValue
-  }
-
-  beforeEach(function () {
-    jasmine.addMatchers({
-      toHaveClass: function () {
-        return {
-          compare: function (actual, className) {
-            return { pass: $(actual).hasClass(className) }
+}(jasmine.JQuery)
+
+!function(){
+  var jQueryMatchers = {
+    toHaveClass: function(className) {
+      return this.actual.hasClass(className)
+    },
+
+    toHaveCss: function(css){
+      for (var prop in css){
+        if (this.actual.css(prop) !== css[prop]) return false
+      }
+      return true
+    },
+
+    toBeVisible: function() {
+      return this.actual.is(':visible')
+    },
+
+    toBeHidden: function() {
+      return this.actual.is(':hidden')
+    },
+
+    toBeSelected: function() {
+      return this.actual.is(':selected')
+    },
+
+    toBeChecked: function() {
+      return this.actual.is(':checked')
+    },
+
+    toBeEmpty: function() {
+      return this.actual.is(':empty')
+    },
+
+    toExist: function() {
+      return $(document).find(this.actual).length
+    },
+
+    toHaveLength: function(length) {
+      return this.actual.length === length
+    },
+
+    toHaveAttr: function(attributeName, expectedAttributeValue) {
+      return hasProperty(this.actual.attr(attributeName), expectedAttributeValue)
+    },
+
+    toHaveProp: function(propertyName, expectedPropertyValue) {
+      return hasProperty(this.actual.prop(propertyName), expectedPropertyValue)
+    },
+
+    toHaveId: function(id) {
+      return this.actual.attr('id') == id
+    },
+
+    toHaveHtml: function(html) {
+      return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html)
+    },
+
+    toContainHtml: function(html){
+      var actualHtml = this.actual.html()
+      var expectedHtml = jasmine.JQuery.browserTagCaseIndependentHtml(html)
+      return (actualHtml.indexOf(expectedHtml) >= 0)
+    },
+
+    toHaveText: function(text) {
+      var trimmedText = $.trim(this.actual.text())
+      if (text && $.isFunction(text.test)) {
+        return text.test(trimmedText)
+      } else {
+        return trimmedText == text
+      }
+    },
+
+    toContainText: function(text) {
+      var trimmedText = $.trim(this.actual.text())
+      if (text && $.isFunction(text.test)) {
+        return text.test(trimmedText)
+      } else {
+        return trimmedText.indexOf(text) != -1;
+      }
+    },
+
+    toHaveValue: function(value) {
+      return this.actual.val() === value
+    },
+
+    toHaveData: function(key, expectedValue) {
+      return hasProperty(this.actual.data(key), expectedValue)
+    },
+
+    toBe: function(selector) {
+      return this.actual.is(selector)
+    },
+
+    toContain: function(selector) {
+      return this.actual.find(selector).length
+    },
+    
+    toBeMatchedBy: function(selector) {
+      return this.actual.filter(selector).length
+    },
+
+    toBeDisabled: function(selector){
+      return this.actual.is(':disabled')
+    },
+
+    toBeFocused: function(selector) {
+      return this.actual[0] === this.actual[0].ownerDocument.activeElement
+    },
+
+    toHandle: function(event) {
+
+      var events = $._data(this.actual.get(0), "events")
+
+      if(!events || !event || typeof event !== "string") {
+        return false
+      }
+
+      var namespaces = event.split(".")
+      var eventType = namespaces.shift()
+      var sortedNamespaces = namespaces.slice(0).sort()
+      var namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)")
+
+      if(events[eventType] && namespaces.length) {
+        for(var i = 0; i < events[eventType].length; i++) {
+          var namespace = events[eventType][i].namespace
+          if(namespaceRegExp.test(namespace)) {
+            return true
           }
         }
-      },
-
-      toHaveCss: function () {
-        return {
-          compare: function (actual, css) {
-            for (var prop in css){
-              var value = css[prop]
-              // see issue #147 on gh
-              ;if (value === 'auto' && $(actual).get(0).style[prop] === 'auto') continue
-              if ($(actual).css(prop) !== value) return { pass: false }
-            }
-            return { pass: true }
-          }
-        }
-      },
-
-      toBeVisible: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':visible') }
-          }
-        }
-      },
-
-      toBeHidden: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':hidden') }
-          }
-        }
-      },
-
-      toBeSelected: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':selected') }
-          }
-        }
-      },
-
-      toBeChecked: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':checked') }
-          }
-        }
-      },
-
-      toBeEmpty: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':empty') }
-          }
-        }
-      },
-
-      toBeInDOM: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $.contains(document.documentElement, $(actual)[0]) }
-          }
-        }
-      },
-
-      toExist: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).length }
-          }
-        }
-      },
-
-      toHaveLength: function () {
-        return {
-          compare: function (actual, length) {
-            return { pass: $(actual).length === length }
-          }
-        }
-      },
-
-      toHaveAttr: function () {
-        return {
-          compare: function (actual, attributeName, expectedAttributeValue) {
-            return { pass: hasProperty($(actual).attr(attributeName), expectedAttributeValue) }
-          }
-        }
-      },
-
-      toHaveProp: function () {
-        return {
-          compare: function (actual, propertyName, expectedPropertyValue) {
-            return { pass: hasProperty($(actual).prop(propertyName), expectedPropertyValue) }
-          }
-        }
-      },
-
-      toHaveId: function () {
-        return {
-          compare: function (actual, id) {
-            return { pass: $(actual).attr('id') == id }
-          }
-        }
-      },
-
-      toHaveHtml: function () {
-        return {
-          compare: function (actual, html) {
-            return { pass: $(actual).html() == jasmine.jQuery.browserTagCaseIndependentHtml(html) }
-          }
-        }
-      },
-
-      toContainHtml: function () {
-        return {
-          compare: function (actual, html) {
-            var actualHtml = $(actual).html()
-              , expectedHtml = jasmine.jQuery.browserTagCaseIndependentHtml(html)
-
-            return { pass: (actualHtml.indexOf(expectedHtml) >= 0) }
-          }
-        }
-      },
-
-      toHaveText: function () {
-        return {
-          compare: function (actual, text) {
-            var actualText = $(actual).text()
-            var trimmedText = $.trim(actualText)
-
-            if (text && $.isFunction(text.test)) {
-              return { pass: text.test(actualText) || text.test(trimmedText) }
-            } else {
-              return { pass: (actualText == text || trimmedText == text) }
-            }
-          }
-        }
-      },
-
-      toContainText: function () {
-        return {
-          compare: function (actual, text) {
-            var trimmedText = $.trim($(actual).text())
-
-            if (text && $.isFunction(text.test)) {
-              return { pass: text.test(trimmedText) }
-            } else {
-              return { pass: trimmedText.indexOf(text) != -1 }
-            }
-          }
-        }
-      },
-
-      toHaveValue: function () {
-        return {
-          compare: function (actual, value) {
-            return { pass: $(actual).val() === value }
-          }
-        }
-      },
-
-      toHaveData: function () {
-        return {
-          compare: function (actual, key, expectedValue) {
-            return { pass: hasProperty($(actual).data(key), expectedValue) }
-          }
-        }
-      },
-
-      toContainElement: function () {
-        return {
-          compare: function (actual, selector) {
-            if (window.debug) debugger
-            return { pass: $(actual).find(selector).length }
-          }
-        }
-      },
-
-      toBeMatchedBy: function () {
-        return {
-          compare: function (actual, selector) {
-            return { pass: $(actual).filter(selector).length }
-          }
-        }
-      },
-
-      toBeDisabled: function () {
-        return {
-          compare: function (actual, selector) {
-            return { pass: $(actual).is(':disabled') }
-          }
-        }
-      },
-
-      toBeFocused: function (selector) {
-        return {
-          compare: function (actual, selector) {
-            return { pass: $(actual)[0] === $(actual)[0].ownerDocument.activeElement }
-          }
-        }
-      },
-
-      toHandle: function () {
-        return {
-          compare: function (actual, event) {
-            var events = $._data($(actual).get(0), "events")
-
-            if (!events || !event || typeof event !== "string") {
-              return { pass: false }
-            }
-
-            var namespaces = event.split(".")
-              , eventType = namespaces.shift()
-              , sortedNamespaces = namespaces.slice(0).sort()
-              , namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)")
-
-            if (events[eventType] && namespaces.length) {
-              for (var i = 0; i < events[eventType].length; i++) {
-                var namespace = events[eventType][i].namespace
-
-                if (namespaceRegExp.test(namespace))
-                  return { pass: true }
-              }
-            } else {
-              return { pass: (events[eventType] && events[eventType].length > 0) }
-            }
-
-            return { pass: false }
-          }
-        }
-      },
-
-      toHandleWith: function () {
-        return {
-          compare: function (actual, eventName, eventHandler) {
-            var normalizedEventName = eventName.split('.')[0]
-              , stack = $._data($(actual).get(0), "events")[normalizedEventName]
-
-            for (var i = 0; i < stack.length; i++) {
-              if (stack[i].handler == eventHandler) return { pass: true }
-            }
-
-            return { pass: false }
-          }
-        }
-      },
-
-      toHaveBeenTriggeredOn: function () {
-        return {
-          compare: function (actual, selector) {
-            var result = { pass: jasmine.jQuery.events.wasTriggered(selector, actual) }
-
-            result.message = result.pass ?
-              "Expected event " + $(actual) + " not to have been triggered on " + selector :
-              "Expected event " + $(actual) + " to have been triggered on " + selector
-
-            return result;
-          }
-        }
-      },
-
-      toHaveBeenTriggered: function (){
-        return {
-          compare: function (actual) {
-            var eventName = actual.eventName
-              , selector = actual.selector
-              , result = { pass: jasmine.jQuery.events.wasTriggered(selector, eventName) }
-
-            result.message = result.pass ?
-            "Expected event " + eventName + " not to have been triggered on " + selector :
-              "Expected event " + eventName + " to have been triggered on " + selector
-
+      } else {
+        return events[eventType] && events[eventType].length > 0
+      }
+    },
+
+    // tests the existence of a specific event binding + handler
+    toHandleWith: function(eventName, eventHandler) {
+      var normalizedEventName = eventName.split('.')[0];
+      var stack = $._data(this.actual.get(0), "events")[normalizedEventName]
+      for (var i = 0; i < stack.length; i++) {
+        if (stack[i].handler == eventHandler) return true
+      }
+      return false
+    }
+  }
+
+  var hasProperty = function(actualValue, expectedValue) {
+    if (expectedValue === undefined) return actualValue !== undefined
+    return actualValue == expectedValue
+  }
+
+  var bindMatcher = function(methodName) {
+    var builtInMatcher = jasmine.Matchers.prototype[methodName]
+
+    jasmine.JQuery.matchersClass[methodName] = function() {
+      if (this.actual
+        && (this.actual instanceof $
+          || jasmine.isDomNode(this.actual))) {
+            this.actual = $(this.actual)
+            var result = jQueryMatchers[methodName].apply(this, arguments)
+            var element
+            if (this.actual.get && (element = this.actual.get()[0]) && !$.isWindow(element) && element.tagName !== "HTML")
+              this.actual = jasmine.JQuery.elementToString(this.actual)
             return result
           }
+
+          if (builtInMatcher) {
+            return builtInMatcher.apply(this, arguments)
+          }
+
+          return false
+    }
+  }
+
+  for(var methodName in jQueryMatchers) {
+    bindMatcher(methodName)
+  }
+}()
+
+beforeEach(function() {
+  this.addMatchers(jasmine.JQuery.matchersClass)
+  this.addMatchers({
+    toHaveBeenTriggeredOn: function(selector) {
+      this.message = function() {
+        return [
+          "Expected event " + this.actual + " to have been triggered on " + selector,
+          "Expected event " + this.actual + " not to have been triggered on " + selector
+        ]
+      }
+      return jasmine.JQuery.events.wasTriggered(selector, this.actual)
+    }
+  })
+  this.addMatchers({
+    toHaveBeenTriggered: function(){
+      var eventName = this.actual.eventName,
+          selector = this.actual.selector
+      this.message = function() {
+        return [
+          "Expected event " + eventName + " to have been triggered on " + selector,
+          "Expected event " + eventName + " not to have been triggered on " + selector
+        ]
+      }
+      return jasmine.JQuery.events.wasTriggered(selector, eventName)
+     }
+  })
+  this.addMatchers({
+    toHaveBeenTriggeredOnAndWith: function() {
+      var selector = arguments[0],
+          expectedArgs = arguments[1],
+          wasTriggered = jasmine.JQuery.events.wasTriggered(selector, this.actual);
+      this.message = function() {
+        if (wasTriggered) {
+          var actualArgs = jasmine.JQuery.events.args(selector, this.actual, expectedArgs)[1];
+          return [
+            "Expected event " + this.actual + " to have been triggered with " + jasmine.pp(expectedArgs) + "  but it was triggered with " + jasmine.pp(actualArgs),
+            "Expected event " + this.actual + " not to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs)
+          ]
+        } else {
+          return [
+            "Expected event " + this.actual + " to have been triggered on " + selector,
+            "Expected event " + this.actual + " not to have been triggered on " + selector
+          ]
         }
-      },
-
-      toHaveBeenTriggeredOnAndWith: function (j$, customEqualityTesters) {
-        return {
-          compare: function (actual, selector, expectedArgs) {
-            var wasTriggered = jasmine.jQuery.events.wasTriggered(selector, actual)
-              , result = { pass: wasTriggered && jasmine.jQuery.events.wasTriggeredWith(selector, actual, expectedArgs, j$, customEqualityTesters) }
-
-              if (wasTriggered) {
-                var actualArgs = jasmine.jQuery.events.args(selector, actual, expectedArgs)[1]
-                result.message = result.pass ?
-                  "Expected event " + actual + " not to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs) :
-                  "Expected event " + actual + " to have been triggered with " + jasmine.pp(expectedArgs) + "  but it was triggered with " + jasmine.pp(actualArgs)
-
-              } else {
-                // todo check on this
-                result.message = result.pass ?
-                  "Expected event " + actual + " not to have been triggered on " + selector :
-                  "Expected event " + actual + " to have been triggered on " + selector
-              }
-
-              return result
-          }
-        }
-      },
-
-      toHaveBeenPreventedOn: function () {
-        return {
-          compare: function (actual, selector) {
-            var result = { pass: jasmine.jQuery.events.wasPrevented(selector, actual) }
-
-            result.message = result.pass ?
-              "Expected event " + actual + " not to have been prevented on " + selector :
-              "Expected event " + actual + " to have been prevented on " + selector
-
-            return result
-          }
-        }
-      },
-
-      toHaveBeenPrevented: function () {
-        return {
-          compare: function (actual) {
-            var eventName = actual.eventName
-              , selector = actual.selector
-              , result = { pass: jasmine.jQuery.events.wasPrevented(selector, eventName) }
-
-            result.message = result.pass ?
-              "Expected event " + eventName + " not to have been prevented on " + selector :
-              "Expected event " + eventName + " to have been prevented on " + selector
-
-            return result
-          }
-        }
-      },
-
-      toHaveBeenStoppedOn: function () {
-        return {
-          compare: function (actual, selector) {
-            var result = { pass: jasmine.jQuery.events.wasStopped(selector, actual) }
-
-            result.message = result.pass ?
-              "Expected event " + actual + " not to have been stopped on " + selector :
-              "Expected event " + actual + " to have been stopped on " + selector
-
-            return result;
-          }
-        }
-      },
-
-      toHaveBeenStopped: function () {
-        return {
-          compare: function (actual) {
-            var eventName = actual.eventName
-              , selector = actual.selector
-              , result = { pass: jasmine.jQuery.events.wasStopped(selector, eventName) }
-
-            result.message = result.pass ?
-              "Expected event " + eventName + " not to have been stopped on " + selector :
-              "Expected event " + eventName + " to have been stopped on " + selector
-
-            return result
-          }
-        }
-      }
-    })
-
-    jasmine.getEnv().addCustomEqualityTester(function(a, b) {
-     if (a && b) {
-       if (a instanceof $ || jasmine.isDomNode(a)) {
-         var $a = $(a)
-
-         if (b instanceof $)
-           return $a.length == b.length && a.is(b)
-
-         return $a.is(b);
-       }
-
-       if (b instanceof $ || jasmine.isDomNode(b)) {
-         var $b = $(b)
-
-         if (a instanceof $)
-           return a.length == $b.length && $b.is(a)
-
-         return $(b).is(a);
-       }
-     }
-    })
-
-    jasmine.getEnv().addCustomEqualityTester(function (a, b) {
-     if (a instanceof $ && b instanceof $ && a.size() == b.size())
-        return a.is(b)
-    })
-  })
-
-  afterEach(function () {
-    jasmine.getFixtures().cleanUp()
-    jasmine.getStyleFixtures().cleanUp()
-    jasmine.jQuery.events.cleanUp()
-  })
-
-  window.readFixtures = function () {
-    return jasmine.getFixtures().proxyCallTo_('read', arguments)
-  }
-
-  window.preloadFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('preload', arguments)
-  }
-
-  window.loadFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('load', arguments)
-  }
-
-  window.appendLoadFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('appendLoad', arguments)
-  }
-
-  window.setFixtures = function (html) {
-    return jasmine.getFixtures().proxyCallTo_('set', arguments)
-  }
-
-  window.appendSetFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('appendSet', arguments)
-  }
-
-  window.sandbox = function (attributes) {
-    return jasmine.getFixtures().sandbox(attributes)
-  }
-
-  window.spyOnEvent = function (selector, eventName) {
-    return jasmine.jQuery.events.spyOn(selector, eventName)
-  }
-
-  window.preloadStyleFixtures = function () {
-    jasmine.getStyleFixtures().proxyCallTo_('preload', arguments)
-  }
-
-  window.loadStyleFixtures = function () {
-    jasmine.getStyleFixtures().proxyCallTo_('load', arguments)
-  }
-
-  window.appendLoadStyleFixtures = function () {
-    jasmine.getStyleFixtures().proxyCallTo_('appendLoad', arguments)
-  }
-
-  window.setStyleFixtures = function (html) {
-    jasmine.getStyleFixtures().proxyCallTo_('set', arguments)
-  }
-
-  window.appendSetStyleFixtures = function (html) {
-    jasmine.getStyleFixtures().proxyCallTo_('appendSet', arguments)
-  }
-
-  window.loadJSONFixtures = function () {
-    return jasmine.getJSONFixtures().proxyCallTo_('load', arguments)
-  }
-
-  window.getJSONFixture = function (url) {
-    return jasmine.getJSONFixtures().proxyCallTo_('read', arguments)[url]
-  }
-}(window, window.jasmine, window.jQuery);
+      }
+      return wasTriggered && jasmine.JQuery.events.wasTriggeredWith(selector, this.actual, expectedArgs, this.env);
+    }
+  })
+  this.addMatchers({
+    toHaveBeenPreventedOn: function(selector) {
+      this.message = function() {
+        return [
+          "Expected event " + this.actual + " to have been prevented on " + selector,
+          "Expected event " + this.actual + " not to have been prevented on " + selector
+        ]
+      }
+      return jasmine.JQuery.events.wasPrevented(selector, this.actual)
+    }
+  })
+  this.addMatchers({
+    toHaveBeenPrevented: function() {
+      var eventName = this.actual.eventName,
+          selector = this.actual.selector
+      this.message = function() {
+        return [
+          "Expected event " + eventName + " to have been prevented on " + selector,
+          "Expected event " + eventName + " not to have been prevented on " + selector
+        ]
+      }
+      return jasmine.JQuery.events.wasPrevented(selector, eventName)
+    }
+  })
+  this.addMatchers({
+    toHaveBeenStoppedOn: function(selector) {
+      this.message = function() {
+        return [
+          "Expected event " + this.actual + " to have been stopped on " + selector,
+          "Expected event " + this.actual + " not to have been stopped on " + selector
+        ]
+      }
+      return jasmine.JQuery.events.wasStopped(selector, this.actual)
+    }
+  })
+  this.addMatchers({
+    toHaveBeenStopped: function() {
+      var eventName = this.actual.eventName,
+          selector = this.actual.selector
+      this.message = function() {
+        return [
+          "Expected event " + eventName + " to have been stopped on " + selector,
+          "Expected event " + eventName + " not to have been stopped on " + selector
+        ]
+      }
+      return jasmine.JQuery.events.wasStopped(selector, eventName)
+    }
+  })
+  jasmine.getEnv().addEqualityTester(function(a, b) {
+    if(a instanceof jQuery && b instanceof jQuery) {
+      if(a.size() != b.size()) {
+        return jasmine.undefined;
+      }
+      else if(a.is(b)) {
+        return true;
+      }
+    }
+    return jasmine.undefined;
+    
+  })
+})
+
+afterEach(function() {
+  jasmine.getFixtures().cleanUp()
+  jasmine.getStyleFixtures().cleanUp()
+  jasmine.JQuery.events.cleanUp()
+})
Index: tests/functional/lib/jasmine.js
===================================================================
--- tests/functional/lib/jasmine.js	(revision 2726)
+++ tests/functional/lib/jasmine.js	(revision 1602)
@@ -1,2402 +1,2600 @@
-/*
-Copyright (c) 2008-2013 Pivotal Labs
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-function getJasmineRequireObj() {
-  if (typeof module !== "undefined" && module.exports) {
-    return exports;
+var isCommonJS = typeof window == "undefined" && typeof exports == "object";
+
+/**
+ * Top level namespace for Jasmine, a lightweight JavaScript BDD/spec/testing framework.
+ *
+ * @namespace
+ */
+var jasmine = {};
+if (isCommonJS) exports.jasmine = jasmine;
+/**
+ * @private
+ */
+jasmine.unimplementedMethod_ = function() {
+  throw new Error("unimplemented method");
+};
+
+/**
+ * Use <code>jasmine.undefined</code> instead of <code>undefined</code>, since <code>undefined</code> is just
+ * a plain old variable and may be redefined by somebody else.
+ *
+ * @private
+ */
+jasmine.undefined = jasmine.___undefined___;
+
+/**
+ * Show diagnostic messages in the console if set to true
+ *
+ */
+jasmine.VERBOSE = false;
+
+/**
+ * Default interval in milliseconds for event loop yields (e.g. to allow network activity or to refresh the screen with the HTML-based runner). Small values here may result in slow test running. Zero means no updates until all tests have completed.
+ *
+ */
+jasmine.DEFAULT_UPDATE_INTERVAL = 250;
+
+/**
+ * Maximum levels of nesting that will be included when an object is pretty-printed
+ */
+jasmine.MAX_PRETTY_PRINT_DEPTH = 40;
+
+/**
+ * Default timeout interval in milliseconds for waitsFor() blocks.
+ */
+jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
+
+/**
+ * By default exceptions thrown in the context of a test are caught by jasmine so that it can run the remaining tests in the suite.
+ * Set to false to let the exception bubble up in the browser.
+ *
+ */
+jasmine.CATCH_EXCEPTIONS = true;
+
+jasmine.getGlobal = function() {
+  function getGlobal() {
+    return this;
+  }
+
+  return getGlobal();
+};
+
+/**
+ * Allows for bound functions to be compared.  Internal use only.
+ *
+ * @ignore
+ * @private
+ * @param base {Object} bound 'this' for the function
+ * @param name {Function} function to find
+ */
+jasmine.bindOriginal_ = function(base, name) {
+  var original = base[name];
+  if (original.apply) {
+    return function() {
+      return original.apply(base, arguments);
+    };
   } else {
-    window.jasmineRequire = window.jasmineRequire || {};
-    return window.jasmineRequire;
-  }
-}
-
-getJasmineRequireObj().core = function(jRequire) {
-  var j$ = {};
-
-  jRequire.base(j$);
-  j$.util = jRequire.util();
-  j$.Any = jRequire.Any();
-  j$.CallTracker = jRequire.CallTracker();
-  j$.Clock = jRequire.Clock();
-  j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
-  j$.Env = jRequire.Env(j$);
-  j$.ExceptionFormatter = jRequire.ExceptionFormatter();
-  j$.Expectation = jRequire.Expectation();
-  j$.buildExpectationResult = jRequire.buildExpectationResult();
-  j$.JsApiReporter = jRequire.JsApiReporter();
-  j$.matchersUtil = jRequire.matchersUtil(j$);
-  j$.ObjectContaining = jRequire.ObjectContaining(j$);
-  j$.pp = jRequire.pp(j$);
-  j$.QueueRunner = jRequire.QueueRunner();
-  j$.ReportDispatcher = jRequire.ReportDispatcher();
-  j$.Spec = jRequire.Spec(j$);
-  j$.SpyStrategy = jRequire.SpyStrategy();
-  j$.Suite = jRequire.Suite();
-  j$.Timer = jRequire.Timer();
-  j$.version = jRequire.version();
-
-  j$.matchers = jRequire.requireMatchers(jRequire, j$);
-
-  return j$;
-};
-
-getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
-  var availableMatchers = [
-      "toBe",
-      "toBeCloseTo",
-      "toBeDefined",
-      "toBeFalsy",
-      "toBeGreaterThan",
-      "toBeLessThan",
-      "toBeNaN",
-      "toBeNull",
-      "toBeTruthy",
-      "toBeUndefined",
-      "toContain",
-      "toEqual",
-      "toHaveBeenCalled",
-      "toHaveBeenCalledWith",
-      "toMatch",
-      "toThrow",
-      "toThrowError"
-    ],
-    matchers = {};
-
-  for (var i = 0; i < availableMatchers.length; i++) {
-    var name = availableMatchers[i];
-    matchers[name] = jRequire[name](j$);
-  }
-
-  return matchers;
-};
-
-getJasmineRequireObj().base = function(j$) {
-  j$.unimplementedMethod_ = function() {
-    throw new Error("unimplemented method");
+    // IE support
+    return jasmine.getGlobal()[name];
+  }
+};
+
+jasmine.setTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'setTimeout');
+jasmine.clearTimeout = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearTimeout');
+jasmine.setInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'setInterval');
+jasmine.clearInterval = jasmine.bindOriginal_(jasmine.getGlobal(), 'clearInterval');
+
+jasmine.MessageResult = function(values) {
+  this.type = 'log';
+  this.values = values;
+  this.trace = new Error(); // todo: test better
+};
+
+jasmine.MessageResult.prototype.toString = function() {
+  var text = "";
+  for (var i = 0; i < this.values.length; i++) {
+    if (i > 0) text += " ";
+    if (jasmine.isString_(this.values[i])) {
+      text += this.values[i];
+    } else {
+      text += jasmine.pp(this.values[i]);
+    }
+  }
+  return text;
+};
+
+jasmine.ExpectationResult = function(params) {
+  this.type = 'expect';
+  this.matcherName = params.matcherName;
+  this.passed_ = params.passed;
+  this.expected = params.expected;
+  this.actual = params.actual;
+  this.message = this.passed_ ? 'Passed.' : params.message;
+
+  var trace = (params.trace || new Error(this.message));
+  this.trace = this.passed_ ? '' : trace;
+};
+
+jasmine.ExpectationResult.prototype.toString = function () {
+  return this.message;
+};
+
+jasmine.ExpectationResult.prototype.passed = function () {
+  return this.passed_;
+};
+
+/**
+ * Getter for the Jasmine environment. Ensures one gets created
+ */
+jasmine.getEnv = function() {
+  var env = jasmine.currentEnv_ = jasmine.currentEnv_ || new jasmine.Env();
+  return env;
+};
+
+/**
+ * @ignore
+ * @private
+ * @param value
+ * @returns {Boolean}
+ */
+jasmine.isArray_ = function(value) {
+  return jasmine.isA_("Array", value);
+};
+
+/**
+ * @ignore
+ * @private
+ * @param value
+ * @returns {Boolean}
+ */
+jasmine.isString_ = function(value) {
+  return jasmine.isA_("String", value);
+};
+
+/**
+ * @ignore
+ * @private
+ * @param value
+ * @returns {Boolean}
+ */
+jasmine.isNumber_ = function(value) {
+  return jasmine.isA_("Number", value);
+};
+
+/**
+ * @ignore
+ * @private
+ * @param {String} typeName
+ * @param value
+ * @returns {Boolean}
+ */
+jasmine.isA_ = function(typeName, value) {
+  return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
+};
+
+/**
+ * Pretty printer for expecations.  Takes any object and turns it into a human-readable string.
+ *
+ * @param value {Object} an object to be outputted
+ * @returns {String}
+ */
+jasmine.pp = function(value) {
+  var stringPrettyPrinter = new jasmine.StringPrettyPrinter();
+  stringPrettyPrinter.format(value);
+  return stringPrettyPrinter.string;
+};
+
+/**
+ * Returns true if the object is a DOM Node.
+ *
+ * @param {Object} obj object to check
+ * @returns {Boolean}
+ */
+jasmine.isDomNode = function(obj) {
+  return obj.nodeType > 0;
+};
+
+/**
+ * Returns a matchable 'generic' object of the class type.  For use in expecations of type when values don't matter.
+ *
+ * @example
+ * // don't care about which function is passed in, as long as it's a function
+ * expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function));
+ *
+ * @param {Class} clazz
+ * @returns matchable object of the type clazz
+ */
+jasmine.any = function(clazz) {
+  return new jasmine.Matchers.Any(clazz);
+};
+
+/**
+ * Returns a matchable subset of a JSON object. For use in expectations when you don't care about all of the
+ * attributes on the object.
+ *
+ * @example
+ * // don't care about any other attributes than foo.
+ * expect(mySpy).toHaveBeenCalledWith(jasmine.objectContaining({foo: "bar"});
+ *
+ * @param sample {Object} sample
+ * @returns matchable object for the sample
+ */
+jasmine.objectContaining = function (sample) {
+    return new jasmine.Matchers.ObjectContaining(sample);
+};
+
+/**
+ * Jasmine Spies are test doubles that can act as stubs, spies, fakes or when used in an expecation, mocks.
+ *
+ * Spies should be created in test setup, before expectations.  They can then be checked, using the standard Jasmine
+ * expectation syntax. Spies can be checked if they were called or not and what the calling params were.
+ *
+ * A Spy has the following fields: wasCalled, callCount, mostRecentCall, and argsForCall (see docs).
+ *
+ * Spies are torn down at the end of every spec.
+ *
+ * Note: Do <b>not</b> call new jasmine.Spy() directly - a spy must be created using spyOn, jasmine.createSpy or jasmine.createSpyObj.
+ *
+ * @example
+ * // a stub
+ * var myStub = jasmine.createSpy('myStub');  // can be used anywhere
+ *
+ * // spy example
+ * var foo = {
+ *   not: function(bool) { return !bool; }
+ * }
+ *
+ * // actual foo.not will not be called, execution stops
+ * spyOn(foo, 'not');
+
+ // foo.not spied upon, execution will continue to implementation
+ * spyOn(foo, 'not').andCallThrough();
+ *
+ * // fake example
+ * var foo = {
+ *   not: function(bool) { return !bool; }
+ * }
+ *
+ * // foo.not(val) will return val
+ * spyOn(foo, 'not').andCallFake(function(value) {return value;});
+ *
+ * // mock example
+ * foo.not(7 == 7);
+ * expect(foo.not).toHaveBeenCalled();
+ * expect(foo.not).toHaveBeenCalledWith(true);
+ *
+ * @constructor
+ * @see spyOn, jasmine.createSpy, jasmine.createSpyObj
+ * @param {String} name
+ */
+jasmine.Spy = function(name) {
+  /**
+   * The name of the spy, if provided.
+   */
+  this.identity = name || 'unknown';
+  /**
+   *  Is this Object a spy?
+   */
+  this.isSpy = true;
+  /**
+   * The actual function this spy stubs.
+   */
+  this.plan = function() {
   };
-
-  j$.MAX_PRETTY_PRINT_DEPTH = 40;
-  j$.DEFAULT_TIMEOUT_INTERVAL = 5000;
-
-  j$.getGlobal = (function() {
-    var jasmineGlobal = eval.call(null, "this");
-    return function() {
-      return jasmineGlobal;
-    };
-  })();
-
-  j$.getEnv = function(options) {
-    var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options);
-    //jasmine. singletons in here (setTimeout blah blah).
-    return env;
+  /**
+   * Tracking of the most recent call to the spy.
+   * @example
+   * var mySpy = jasmine.createSpy('foo');
+   * mySpy(1, 2);
+   * mySpy.mostRecentCall.args = [1, 2];
+   */
+  this.mostRecentCall = {};
+
+  /**
+   * Holds arguments for each call to the spy, indexed by call count
+   * @example
+   * var mySpy = jasmine.createSpy('foo');
+   * mySpy(1, 2);
+   * mySpy(7, 8);
+   * mySpy.mostRecentCall.args = [7, 8];
+   * mySpy.argsForCall[0] = [1, 2];
+   * mySpy.argsForCall[1] = [7, 8];
+   */
+  this.argsForCall = [];
+  this.calls = [];
+};
+
+/**
+ * Tells a spy to call through to the actual implemenatation.
+ *
+ * @example
+ * var foo = {
+ *   bar: function() { // do some stuff }
+ * }
+ *
+ * // defining a spy on an existing property: foo.bar
+ * spyOn(foo, 'bar').andCallThrough();
+ */
+jasmine.Spy.prototype.andCallThrough = function() {
+  this.plan = this.originalValue;
+  return this;
+};
+
+/**
+ * For setting the return value of a spy.
+ *
+ * @example
+ * // defining a spy from scratch: foo() returns 'baz'
+ * var foo = jasmine.createSpy('spy on foo').andReturn('baz');
+ *
+ * // defining a spy on an existing property: foo.bar() returns 'baz'
+ * spyOn(foo, 'bar').andReturn('baz');
+ *
+ * @param {Object} value
+ */
+jasmine.Spy.prototype.andReturn = function(value) {
+  this.plan = function() {
+    return value;
   };
-
-  j$.isArray_ = function(value) {
-    return j$.isA_("Array", value);
+  return this;
+};
+
+/**
+ * For throwing an exception when a spy is called.
+ *
+ * @example
+ * // defining a spy from scratch: foo() throws an exception w/ message 'ouch'
+ * var foo = jasmine.createSpy('spy on foo').andThrow('baz');
+ *
+ * // defining a spy on an existing property: foo.bar() throws an exception w/ message 'ouch'
+ * spyOn(foo, 'bar').andThrow('baz');
+ *
+ * @param {String} exceptionMsg
+ */
+jasmine.Spy.prototype.andThrow = function(exceptionMsg) {
+  this.plan = function() {
+    throw exceptionMsg;
   };
-
-  j$.isString_ = function(value) {
-    return j$.isA_("String", value);
+  return this;
+};
+
+/**
+ * Calls an alternate implementation when a spy is called.
+ *
+ * @example
+ * var baz = function() {
+ *   // do some stuff, return something
+ * }
+ * // defining a spy from scratch: foo() calls the function baz
+ * var foo = jasmine.createSpy('spy on foo').andCall(baz);
+ *
+ * // defining a spy on an existing property: foo.bar() calls an anonymnous function
+ * spyOn(foo, 'bar').andCall(function() { return 'baz';} );
+ *
+ * @param {Function} fakeFunc
+ */
+jasmine.Spy.prototype.andCallFake = function(fakeFunc) {
+  this.plan = fakeFunc;
+  return this;
+};
+
+/**
+ * Resets all of a spy's the tracking variables so that it can be used again.
+ *
+ * @example
+ * spyOn(foo, 'bar');
+ *
+ * foo.bar();
+ *
+ * expect(foo.bar.callCount).toEqual(1);
+ *
+ * foo.bar.reset();
+ *
+ * expect(foo.bar.callCount).toEqual(0);
+ */
+jasmine.Spy.prototype.reset = function() {
+  this.wasCalled = false;
+  this.callCount = 0;
+  this.argsForCall = [];
+  this.calls = [];
+  this.mostRecentCall = {};
+};
+
+jasmine.createSpy = function(name) {
+
+  var spyObj = function() {
+    spyObj.wasCalled = true;
+    spyObj.callCount++;
+    var args = jasmine.util.argsToArray(arguments);
+    spyObj.mostRecentCall.object = this;
+    spyObj.mostRecentCall.args = args;
+    spyObj.argsForCall.push(args);
+    spyObj.calls.push({object: this, args: args});
+    return spyObj.plan.apply(this, arguments);
   };
 
-  j$.isNumber_ = function(value) {
-    return j$.isA_("Number", value);
+  var spy = new jasmine.Spy(name);
+
+  for (var prop in spy) {
+    spyObj[prop] = spy[prop];
+  }
+
+  spyObj.reset();
+
+  return spyObj;
+};
+
+/**
+ * Determines whether an object is a spy.
+ *
+ * @param {jasmine.Spy|Object} putativeSpy
+ * @returns {Boolean}
+ */
+jasmine.isSpy = function(putativeSpy) {
+  return putativeSpy && putativeSpy.isSpy;
+};
+
+/**
+ * Creates a more complicated spy: an Object that has every property a function that is a spy.  Used for stubbing something
+ * large in one call.
+ *
+ * @param {String} baseName name of spy class
+ * @param {Array} methodNames array of names of methods to make spies
+ */
+jasmine.createSpyObj = function(baseName, methodNames) {
+  if (!jasmine.isArray_(methodNames) || methodNames.length === 0) {
+    throw new Error('createSpyObj requires a non-empty array of method names to create spies for');
+  }
+  var obj = {};
+  for (var i = 0; i < methodNames.length; i++) {
+    obj[methodNames[i]] = jasmine.createSpy(baseName + '.' + methodNames[i]);
+  }
+  return obj;
+};
+
+/**
+ * All parameters are pretty-printed and concatenated together, then written to the current spec's output.
+ *
+ * Be careful not to leave calls to <code>jasmine.log</code> in production code.
+ */
+jasmine.log = function() {
+  var spec = jasmine.getEnv().currentSpec;
+  spec.log.apply(spec, arguments);
+};
+
+/**
+ * Function that installs a spy on an existing object's method name.  Used within a Spec to create a spy.
+ *
+ * @example
+ * // spy example
+ * var foo = {
+ *   not: function(bool) { return !bool; }
+ * }
+ * spyOn(foo, 'not'); // actual foo.not will not be called, execution stops
+ *
+ * @see jasmine.createSpy
+ * @param obj
+ * @param methodName
+ * @return {jasmine.Spy} a Jasmine spy that can be chained with all spy methods
+ */
+var spyOn = function(obj, methodName) {
+  return jasmine.getEnv().currentSpec.spyOn(obj, methodName);
+};
+if (isCommonJS) exports.spyOn = spyOn;
+
+/**
+ * Creates a Jasmine spec that will be added to the current suite.
+ *
+ * // TODO: pending tests
+ *
+ * @example
+ * it('should be true', function() {
+ *   expect(true).toEqual(true);
+ * });
+ *
+ * @param {String} desc description of this specification
+ * @param {Function} func defines the preconditions and expectations of the spec
+ */
+var it = function(desc, func) {
+  return jasmine.getEnv().it(desc, func);
+};
+if (isCommonJS) exports.it = it;
+
+/**
+ * Creates a <em>disabled</em> Jasmine spec.
+ *
+ * A convenience method that allows existing specs to be disabled temporarily during development.
+ *
+ * @param {String} desc description of this specification
+ * @param {Function} func defines the preconditions and expectations of the spec
+ */
+var xit = function(desc, func) {
+  return jasmine.getEnv().xit(desc, func);
+};
+if (isCommonJS) exports.xit = xit;
+
+/**
+ * Starts a chain for a Jasmine expectation.
+ *
+ * It is passed an Object that is the actual value and should chain to one of the many
+ * jasmine.Matchers functions.
+ *
+ * @param {Object} actual Actual value to test against and expected value
+ * @return {jasmine.Matchers}
+ */
+var expect = function(actual) {
+  return jasmine.getEnv().currentSpec.expect(actual);
+};
+if (isCommonJS) exports.expect = expect;
+
+/**
+ * Defines part of a jasmine spec.  Used in cominbination with waits or waitsFor in asynchrnous specs.
+ *
+ * @param {Function} func Function that defines part of a jasmine spec.
+ */
+var runs = function(func) {
+  jasmine.getEnv().currentSpec.runs(func);
+};
+if (isCommonJS) exports.runs = runs;
+
+/**
+ * Waits a fixed time period before moving to the next block.
+ *
+ * @deprecated Use waitsFor() instead
+ * @param {Number} timeout milliseconds to wait
+ */
+var waits = function(timeout) {
+  jasmine.getEnv().currentSpec.waits(timeout);
+};
+if (isCommonJS) exports.waits = waits;
+
+/**
+ * Waits for the latchFunction to return true before proceeding to the next block.
+ *
+ * @param {Function} latchFunction
+ * @param {String} optional_timeoutMessage
+ * @param {Number} optional_timeout
+ */
+var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
+  jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments);
+};
+if (isCommonJS) exports.waitsFor = waitsFor;
+
+/**
+ * A function that is called before each spec in a suite.
+ *
+ * Used for spec setup, including validating assumptions.
+ *
+ * @param {Function} beforeEachFunction
+ */
+var beforeEach = function(beforeEachFunction) {
+  jasmine.getEnv().beforeEach(beforeEachFunction);
+};
+if (isCommonJS) exports.beforeEach = beforeEach;
+
+/**
+ * A function that is called after each spec in a suite.
+ *
+ * Used for restoring any state that is hijacked during spec execution.
+ *
+ * @param {Function} afterEachFunction
+ */
+var afterEach = function(afterEachFunction) {
+  jasmine.getEnv().afterEach(afterEachFunction);
+};
+if (isCommonJS) exports.afterEach = afterEach;
+
+/**
+ * Defines a suite of specifications.
+ *
+ * Stores the description and all defined specs in the Jasmine environment as one suite of specs. Variables declared
+ * are accessible by calls to beforeEach, it, and afterEach. Describe blocks can be nested, allowing for specialization
+ * of setup in some tests.
+ *
+ * @example
+ * // TODO: a simple suite
+ *
+ * // TODO: a simple suite with a nested describe block
+ *
+ * @param {String} description A string, usually the class under test.
+ * @param {Function} specDefinitions function that defines several specs.
+ */
+var describe = function(description, specDefinitions) {
+  return jasmine.getEnv().describe(description, specDefinitions);
+};
+if (isCommonJS) exports.describe = describe;
+
+/**
+ * Disables a suite of specifications.  Used to disable some suites in a file, or files, temporarily during development.
+ *
+ * @param {String} description A string, usually the class under test.
+ * @param {Function} specDefinitions function that defines several specs.
+ */
+var xdescribe = function(description, specDefinitions) {
+  return jasmine.getEnv().xdescribe(description, specDefinitions);
+};
+if (isCommonJS) exports.xdescribe = xdescribe;
+
+
+// Provide the XMLHttpRequest class for IE 5.x-6.x:
+jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() {
+  function tryIt(f) {
+    try {
+      return f();
+    } catch(e) {
+    }
+    return null;
+  }
+
+  var xhr = tryIt(function() {
+    return new ActiveXObject("Msxml2.XMLHTTP.6.0");
+  }) ||
+    tryIt(function() {
+      return new ActiveXObject("Msxml2.XMLHTTP.3.0");
+    }) ||
+    tryIt(function() {
+      return new ActiveXObject("Msxml2.XMLHTTP");
+    }) ||
+    tryIt(function() {
+      return new ActiveXObject("Microsoft.XMLHTTP");
+    });
+
+  if (!xhr) throw new Error("This browser does not support XMLHttpRequest.");
+
+  return xhr;
+} : XMLHttpRequest;
+/**
+ * @namespace
+ */
+jasmine.util = {};
+
+/**
+ * Declare that a child class inherit it's prototype from the parent class.
+ *
+ * @private
+ * @param {Function} childClass
+ * @param {Function} parentClass
+ */
+jasmine.util.inherit = function(childClass, parentClass) {
+  /**
+   * @private
+   */
+  var subclass = function() {
   };
-
-  j$.isA_ = function(typeName, value) {
-    return Object.prototype.toString.apply(value) === '[object ' + typeName + ']';
+  subclass.prototype = parentClass.prototype;
+  childClass.prototype = new subclass();
+};
+
+jasmine.util.formatException = function(e) {
+  var lineNumber;
+  if (e.line) {
+    lineNumber = e.line;
+  }
+  else if (e.lineNumber) {
+    lineNumber = e.lineNumber;
+  }
+
+  var file;
+
+  if (e.sourceURL) {
+    file = e.sourceURL;
+  }
+  else if (e.fileName) {
+    file = e.fileName;
+  }
+
+  var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString();
+
+  if (file && lineNumber) {
+    message += ' in ' + file + ' (line ' + lineNumber + ')';
+  }
+
+  return message;
+};
+
+jasmine.util.htmlEscape = function(str) {
+  if (!str) return str;
+  return str.replace(/&/g, '&amp;')
+    .replace(/</g, '&lt;')
+    .replace(/>/g, '&gt;');
+};
+
+jasmine.util.argsToArray = function(args) {
+  var arrayOfArgs = [];
+  for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]);
+  return arrayOfArgs;
+};
+
+jasmine.util.extend = function(destination, source) {
+  for (var property in source) destination[property] = source[property];
+  return destination;
+};
+
+/**
+ * Environment for Jasmine
+ *
+ * @constructor
+ */
+jasmine.Env = function() {
+  this.currentSpec = null;
+  this.currentSuite = null;
+  this.currentRunner_ = new jasmine.Runner(this);
+
+  this.reporter = new jasmine.MultiReporter();
+
+  this.updateInterval = jasmine.DEFAULT_UPDATE_INTERVAL;
+  this.defaultTimeoutInterval = jasmine.DEFAULT_TIMEOUT_INTERVAL;
+  this.lastUpdate = 0;
+  this.specFilter = function() {
+    return true;
   };
 
-  j$.isDomNode = function(obj) {
-    return obj.nodeType > 0;
+  this.nextSpecId_ = 0;
+  this.nextSuiteId_ = 0;
+  this.equalityTesters_ = [];
+
+  // wrap matchers
+  this.matchersClass = function() {
+    jasmine.Matchers.apply(this, arguments);
   };
-
-  j$.any = function(clazz) {
-    return new j$.Any(clazz);
+  jasmine.util.inherit(this.matchersClass, jasmine.Matchers);
+
+  jasmine.Matchers.wrapInto_(jasmine.Matchers.prototype, this.matchersClass);
+};
+
+
+jasmine.Env.prototype.setTimeout = jasmine.setTimeout;
+jasmine.Env.prototype.clearTimeout = jasmine.clearTimeout;
+jasmine.Env.prototype.setInterval = jasmine.setInterval;
+jasmine.Env.prototype.clearInterval = jasmine.clearInterval;
+
+/**
+ * @returns an object containing jasmine version build info, if set.
+ */
+jasmine.Env.prototype.version = function () {
+  if (jasmine.version_) {
+    return jasmine.version_;
+  } else {
+    throw new Error('Version not set');
+  }
+};
+
+/**
+ * @returns string containing jasmine version build info, if set.
+ */
+jasmine.Env.prototype.versionString = function() {
+  if (!jasmine.version_) {
+    return "version unknown";
+  }
+
+  var version = this.version();
+  var versionString = version.major + "." + version.minor + "." + version.build;
+  if (version.release_candidate) {
+    versionString += ".rc" + version.release_candidate;
+  }
+  versionString += " revision " + version.revision;
+  return versionString;
+};
+
+/**
+ * @returns a sequential integer starting at 0
+ */
+jasmine.Env.prototype.nextSpecId = function () {
+  return this.nextSpecId_++;
+};
+
+/**
+ * @returns a sequential integer starting at 0
+ */
+jasmine.Env.prototype.nextSuiteId = function () {
+  return this.nextSuiteId_++;
+};
+
+/**
+ * Register a reporter to receive status updates from Jasmine.
+ * @param {jasmine.Reporter} reporter An object which will receive status updates.
+ */
+jasmine.Env.prototype.addReporter = function(reporter) {
+  this.reporter.addReporter(reporter);
+};
+
+jasmine.Env.prototype.execute = function() {
+  this.currentRunner_.execute();
+};
+
+jasmine.Env.prototype.describe = function(description, specDefinitions) {
+  var suite = new jasmine.Suite(this, description, specDefinitions, this.currentSuite);
+
+  var parentSuite = this.currentSuite;
+  if (parentSuite) {
+    parentSuite.add(suite);
+  } else {
+    this.currentRunner_.add(suite);
+  }
+
+  this.currentSuite = suite;
+
+  var declarationError = null;
+  try {
+    specDefinitions.call(suite);
+  } catch(e) {
+    declarationError = e;
+  }
+
+  if (declarationError) {
+    this.it("encountered a declaration exception", function() {
+      throw declarationError;
+    });
+  }
+
+  this.currentSuite = parentSuite;
+
+  return suite;
+};
+
+jasmine.Env.prototype.beforeEach = function(beforeEachFunction) {
+  if (this.currentSuite) {
+    this.currentSuite.beforeEach(beforeEachFunction);
+  } else {
+    this.currentRunner_.beforeEach(beforeEachFunction);
+  }
+};
+
+jasmine.Env.prototype.currentRunner = function () {
+  return this.currentRunner_;
+};
+
+jasmine.Env.prototype.afterEach = function(afterEachFunction) {
+  if (this.currentSuite) {
+    this.currentSuite.afterEach(afterEachFunction);
+  } else {
+    this.currentRunner_.afterEach(afterEachFunction);
+  }
+
+};
+
+jasmine.Env.prototype.xdescribe = function(desc, specDefinitions) {
+  return {
+    execute: function() {
+    }
   };
-
-  j$.objectContaining = function(sample) {
-    return new j$.ObjectContaining(sample);
+};
+
+jasmine.Env.prototype.it = function(description, func) {
+  var spec = new jasmine.Spec(this, this.currentSuite, description);
+  this.currentSuite.add(spec);
+  this.currentSpec = spec;
+
+  if (func) {
+    spec.runs(func);
+  }
+
+  return spec;
+};
+
+jasmine.Env.prototype.xit = function(desc, func) {
+  return {
+    id: this.nextSpecId(),
+    runs: function() {
+    }
   };
-
-  j$.createSpy = function(name, originalFn) {
-
-    var spyStrategy = new j$.SpyStrategy({
-        name: name,
-        fn: originalFn,
-        getSpy: function() { return spy; }
-      }),
-      callTracker = new j$.CallTracker(),
-      spy = function() {
-        callTracker.track({
-          object: this,
-          args: Array.prototype.slice.apply(arguments)
-        });
-        return spyStrategy.exec.apply(this, arguments);
+};
+
+jasmine.Env.prototype.compareRegExps_ = function(a, b, mismatchKeys, mismatchValues) {
+  if (a.source != b.source)
+    mismatchValues.push("expected pattern /" + b.source + "/ is not equal to the pattern /" + a.source + "/");
+
+  if (a.ignoreCase != b.ignoreCase)
+    mismatchValues.push("expected modifier i was" + (b.ignoreCase ? " " : " not ") + "set and does not equal the origin modifier");
+
+  if (a.global != b.global)
+    mismatchValues.push("expected modifier g was" + (b.global ? " " : " not ") + "set and does not equal the origin modifier");
+
+  if (a.multiline != b.multiline)
+    mismatchValues.push("expected modifier m was" + (b.multiline ? " " : " not ") + "set and does not equal the origin modifier");
+
+  if (a.sticky != b.sticky)
+    mismatchValues.push("expected modifier y was" + (b.sticky ? " " : " not ") + "set and does not equal the origin modifier");
+
+  return (mismatchValues.length === 0);
+};
+
+jasmine.Env.prototype.compareObjects_ = function(a, b, mismatchKeys, mismatchValues) {
+  if (a.__Jasmine_been_here_before__ === b && b.__Jasmine_been_here_before__ === a) {
+    return true;
+  }
+
+  a.__Jasmine_been_here_before__ = b;
+  b.__Jasmine_been_here_before__ = a;
+
+  var hasKey = function(obj, keyName) {
+    return obj !== null && obj[keyName] !== jasmine.undefined;
+  };
+
+  for (var property in b) {
+    if (!hasKey(a, property) && hasKey(b, property)) {
+      mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
+    }
+  }
+  for (property in a) {
+    if (!hasKey(b, property) && hasKey(a, property)) {
+      mismatchKeys.push("expected missing key '" + property + "', but present in actual.");
+    }
+  }
+  for (property in b) {
+    if (property == '__Jasmine_been_here_before__') continue;
+    if (!this.equals_(a[property], b[property], mismatchKeys, mismatchValues)) {
+      mismatchValues.push("'" + property + "' was '" + (b[property] ? jasmine.util.htmlEscape(b[property].toString()) : b[property]) + "' in expected, but was '" + (a[property] ? jasmine.util.htmlEscape(a[property].toString()) : a[property]) + "' in actual.");
+    }
+  }
+
+  if (jasmine.isArray_(a) && jasmine.isArray_(b) && a.length != b.length) {
+    mismatchValues.push("arrays were not the same length");
+  }
+
+  delete a.__Jasmine_been_here_before__;
+  delete b.__Jasmine_been_here_before__;
+  return (mismatchKeys.length === 0 && mismatchValues.length === 0);
+};
+
+jasmine.Env.prototype.equals_ = function(a, b, mismatchKeys, mismatchValues) {
+  mismatchKeys = mismatchKeys || [];
+  mismatchValues = mismatchValues || [];
+
+  for (var i = 0; i < this.equalityTesters_.length; i++) {
+    var equalityTester = this.equalityTesters_[i];
+    var result = equalityTester(a, b, this, mismatchKeys, mismatchValues);
+    if (result !== jasmine.undefined) return result;
+  }
+
+  if (a === b) return true;
+
+  if (a === jasmine.undefined || a === null || b === jasmine.undefined || b === null) {
+    return (a == jasmine.undefined && b == jasmine.undefined);
+  }
+
+  if (jasmine.isDomNode(a) && jasmine.isDomNode(b)) {
+    return a === b;
+  }
+
+  if (a instanceof Date && b instanceof Date) {
+    return a.getTime() == b.getTime();
+  }
+
+  if (a.jasmineMatches) {
+    return a.jasmineMatches(b);
+  }
+
+  if (b.jasmineMatches) {
+    return b.jasmineMatches(a);
+  }
+
+  if (a instanceof jasmine.Matchers.ObjectContaining) {
+    return a.matches(b);
+  }
+
+  if (b instanceof jasmine.Matchers.ObjectContaining) {
+    return b.matches(a);
+  }
+
+  if (jasmine.isString_(a) && jasmine.isString_(b)) {
+    return (a == b);
+  }
+
+  if (jasmine.isNumber_(a) && jasmine.isNumber_(b)) {
+    return (a == b);
+  }
+
+  if (a instanceof RegExp && b instanceof RegExp) {
+    return this.compareRegExps_(a, b, mismatchKeys, mismatchValues);
+  }
+
+  if (typeof a === "object" && typeof b === "object") {
+    return this.compareObjects_(a, b, mismatchKeys, mismatchValues);
+  }
+
+  //Straight check
+  return (a === b);
+};
+
+jasmine.Env.prototype.contains_ = function(haystack, needle) {
+  if (jasmine.isArray_(haystack)) {
+    for (var i = 0; i < haystack.length; i++) {
+      if (this.equals_(haystack[i], needle)) return true;
+    }
+    return false;
+  }
+  return haystack.indexOf(needle) >= 0;
+};
+
+jasmine.Env.prototype.addEqualityTester = function(equalityTester) {
+  this.equalityTesters_.push(equalityTester);
+};
+/** No-op base class for Jasmine reporters.
+ *
+ * @constructor
+ */
+jasmine.Reporter = function() {
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.Reporter.prototype.reportRunnerStarting = function(runner) {
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.Reporter.prototype.reportRunnerResults = function(runner) {
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.Reporter.prototype.reportSuiteResults = function(suite) {
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.Reporter.prototype.reportSpecStarting = function(spec) {
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.Reporter.prototype.reportSpecResults = function(spec) {
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.Reporter.prototype.log = function(str) {
+};
+
+/**
+ * Blocks are functions with executable code that make up a spec.
+ *
+ * @constructor
+ * @param {jasmine.Env} env
+ * @param {Function} func
+ * @param {jasmine.Spec} spec
+ */
+jasmine.Block = function(env, func, spec) {
+  this.env = env;
+  this.func = func;
+  this.spec = spec;
+};
+
+jasmine.Block.prototype.execute = function(onComplete) {
+  if (!jasmine.CATCH_EXCEPTIONS) {
+    this.func.apply(this.spec);
+  }
+  else {
+    try {
+      this.func.apply(this.spec);
+    } catch (e) {
+      this.spec.fail(e);
+    }
+  }
+  onComplete();
+};
+/** JavaScript API reporter.
+ *
+ * @constructor
+ */
+jasmine.JsApiReporter = function() {
+  this.started = false;
+  this.finished = false;
+  this.suites_ = [];
+  this.results_ = {};
+};
+
+jasmine.JsApiReporter.prototype.reportRunnerStarting = function(runner) {
+  this.started = true;
+  var suites = runner.topLevelSuites();
+  for (var i = 0; i < suites.length; i++) {
+    var suite = suites[i];
+    this.suites_.push(this.summarize_(suite));
+  }
+};
+
+jasmine.JsApiReporter.prototype.suites = function() {
+  return this.suites_;
+};
+
+jasmine.JsApiReporter.prototype.summarize_ = function(suiteOrSpec) {
+  var isSuite = suiteOrSpec instanceof jasmine.Suite;
+  var summary = {
+    id: suiteOrSpec.id,
+    name: suiteOrSpec.description,
+    type: isSuite ? 'suite' : 'spec',
+    children: []
+  };
+  
+  if (isSuite) {
+    var children = suiteOrSpec.children();
+    for (var i = 0; i < children.length; i++) {
+      summary.children.push(this.summarize_(children[i]));
+    }
+  }
+  return summary;
+};
+
+jasmine.JsApiReporter.prototype.results = function() {
+  return this.results_;
+};
+
+jasmine.JsApiReporter.prototype.resultsForSpec = function(specId) {
+  return this.results_[specId];
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.JsApiReporter.prototype.reportRunnerResults = function(runner) {
+  this.finished = true;
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.JsApiReporter.prototype.reportSuiteResults = function(suite) {
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.JsApiReporter.prototype.reportSpecResults = function(spec) {
+  this.results_[spec.id] = {
+    messages: spec.results().getItems(),
+    result: spec.results().failedCount > 0 ? "failed" : "passed"
+  };
+};
+
+//noinspection JSUnusedLocalSymbols
+jasmine.JsApiReporter.prototype.log = function(str) {
+};
+
+jasmine.JsApiReporter.prototype.resultsForSpecs = function(specIds){
+  var results = {};
+  for (var i = 0; i < specIds.length; i++) {
+    var specId = specIds[i];
+    results[specId] = this.summarizeResult_(this.results_[specId]);
+  }
+  return results;
+};
+
+jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){
+  var summaryMessages = [];
+  var messagesLength = result.messages.length;
+  for (var messageIndex = 0; messageIndex < messagesLength; messageIndex++) {
+    var resultMessage = result.messages[messageIndex];
+    summaryMessages.push({
+      text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined,
+      passed: resultMessage.passed ? resultMessage.passed() : true,
+      type: resultMessage.type,
+      message: resultMessage.message,
+      trace: {
+        stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined
+      }
+    });
+  }
+
+  return {
+    result : result.result,
+    messages : summaryMessages
+  };
+};
+
+/**
+ * @constructor
+ * @param {jasmine.Env} env
+ * @param actual
+ * @param {jasmine.Spec} spec
+ */
+jasmine.Matchers = function(env, actual, spec, opt_isNot) {
+  this.env = env;
+  this.actual = actual;
+  this.spec = spec;
+  this.isNot = opt_isNot || false;
+  this.reportWasCalled_ = false;
+};
+
+// todo: @deprecated as of Jasmine 0.11, remove soon [xw]
+jasmine.Matchers.pp = function(str) {
+  throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!");
+};
+
+// todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw]
+jasmine.Matchers.prototype.report = function(result, failing_message, details) {
+  throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs");
+};
+
+jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) {
+  for (var methodName in prototype) {
+    if (methodName == 'report') continue;
+    var orig = prototype[methodName];
+    matchersClass.prototype[methodName] = jasmine.Matchers.matcherFn_(methodName, orig);
+  }
+};
+
+jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
+  return function() {
+    var matcherArgs = jasmine.util.argsToArray(arguments);
+    var result = matcherFunction.apply(this, arguments);
+
+    if (this.isNot) {
+      result = !result;
+    }
+
+    if (this.reportWasCalled_) return result;
+
+    var message;
+    if (!result) {
+      if (this.message) {
+        message = this.message.apply(this, arguments);
+        if (jasmine.isArray_(message)) {
+          message = message[this.isNot ? 1 : 0];
+        }
+      } else {
+        var englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });
+        message = "Expected " + jasmine.pp(this.actual) + (this.isNot ? " not " : " ") + englishyPredicate;
+        if (matcherArgs.length > 0) {
+          for (var i = 0; i < matcherArgs.length; i++) {
+            if (i > 0) message += ",";
+            message += " " + jasmine.pp(matcherArgs[i]);
+          }
+        }
+        message += ".";
+      }
+    }
+    var expectationResult = new jasmine.ExpectationResult({
+      matcherName: matcherName,
+      passed: result,
+      expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0],
+      actual: this.actual,
+      message: message
+    });
+    this.spec.addMatcherResult(expectationResult);
+    return jasmine.undefined;
+  };
+};
+
+
+
+
+/**
+ * toBe: compares the actual to the expected using ===
+ * @param expected
+ */
+jasmine.Matchers.prototype.toBe = function(expected) {
+  return this.actual === expected;
+};
+
+/**
+ * toNotBe: compares the actual to the expected using !==
+ * @param expected
+ * @deprecated as of 1.0. Use not.toBe() instead.
+ */
+jasmine.Matchers.prototype.toNotBe = function(expected) {
+  return this.actual !== expected;
+};
+
+/**
+ * toEqual: compares the actual to the expected using common sense equality. Handles Objects, Arrays, etc.
+ *
+ * @param expected
+ */
+jasmine.Matchers.prototype.toEqual = function(expected) {
+  return this.env.equals_(this.actual, expected);
+};
+
+/**
+ * toNotEqual: compares the actual to the expected using the ! of jasmine.Matchers.toEqual
+ * @param expected
+ * @deprecated as of 1.0. Use not.toEqual() instead.
+ */
+jasmine.Matchers.prototype.toNotEqual = function(expected) {
+  return !this.env.equals_(this.actual, expected);
+};
+
+/**
+ * Matcher that compares the actual to the expected using a regular expression.  Constructs a RegExp, so takes
+ * a pattern or a String.
+ *
+ * @param expected
+ */
+jasmine.Matchers.prototype.toMatch = function(expected) {
+  return new RegExp(expected).test(this.actual);
+};
+
+/**
+ * Matcher that compares the actual to the expected using the boolean inverse of jasmine.Matchers.toMatch
+ * @param expected
+ * @deprecated as of 1.0. Use not.toMatch() instead.
+ */
+jasmine.Matchers.prototype.toNotMatch = function(expected) {
+  return !(new RegExp(expected).test(this.actual));
+};
+
+/**
+ * Matcher that compares the actual to jasmine.undefined.
+ */
+jasmine.Matchers.prototype.toBeDefined = function() {
+  return (this.actual !== jasmine.undefined);
+};
+
+/**
+ * Matcher that compares the actual to jasmine.undefined.
+ */
+jasmine.Matchers.prototype.toBeUndefined = function() {
+  return (this.actual === jasmine.undefined);
+};
+
+/**
+ * Matcher that compares the actual to null.
+ */
+jasmine.Matchers.prototype.toBeNull = function() {
+  return (this.actual === null);
+};
+
+/**
+ * Matcher that compares the actual to NaN.
+ */
+jasmine.Matchers.prototype.toBeNaN = function() {
+	this.message = function() {
+		return [ "Expected " + jasmine.pp(this.actual) + " to be NaN." ];
+	};
+
+	return (this.actual !== this.actual);
+};
+
+/**
+ * Matcher that boolean not-nots the actual.
+ */
+jasmine.Matchers.prototype.toBeTruthy = function() {
+  return !!this.actual;
+};
+
+
+/**
+ * Matcher that boolean nots the actual.
+ */
+jasmine.Matchers.prototype.toBeFalsy = function() {
+  return !this.actual;
+};
+
+
+/**
+ * Matcher that checks to see if the actual, a Jasmine spy, was called.
+ */
+jasmine.Matchers.prototype.toHaveBeenCalled = function() {
+  if (arguments.length > 0) {
+    throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
+  }
+
+  if (!jasmine.isSpy(this.actual)) {
+    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
+  }
+
+  this.message = function() {
+    return [
+      "Expected spy " + this.actual.identity + " to have been called.",
+      "Expected spy " + this.actual.identity + " not to have been called."
+    ];
+  };
+
+  return this.actual.wasCalled;
+};
+
+/** @deprecated Use expect(xxx).toHaveBeenCalled() instead */
+jasmine.Matchers.prototype.wasCalled = jasmine.Matchers.prototype.toHaveBeenCalled;
+
+/**
+ * Matcher that checks to see if the actual, a Jasmine spy, was not called.
+ *
+ * @deprecated Use expect(xxx).not.toHaveBeenCalled() instead
+ */
+jasmine.Matchers.prototype.wasNotCalled = function() {
+  if (arguments.length > 0) {
+    throw new Error('wasNotCalled does not take arguments');
+  }
+
+  if (!jasmine.isSpy(this.actual)) {
+    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
+  }
+
+  this.message = function() {
+    return [
+      "Expected spy " + this.actual.identity + " to not have been called.",
+      "Expected spy " + this.actual.identity + " to have been called."
+    ];
+  };
+
+  return !this.actual.wasCalled;
+};
+
+/**
+ * Matcher that checks to see if the actual, a Jasmine spy, was called with a set of parameters.
+ *
+ * @example
+ *
+ */
+jasmine.Matchers.prototype.toHaveBeenCalledWith = function() {
+  var expectedArgs = jasmine.util.argsToArray(arguments);
+  if (!jasmine.isSpy(this.actual)) {
+    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
+  }
+  this.message = function() {
+    var invertedMessage = "Expected spy " + this.actual.identity + " not to have been called with " + jasmine.pp(expectedArgs) + " but it was.";
+    var positiveMessage = "";
+    if (this.actual.callCount === 0) {
+      positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but it was never called.";
+    } else {
+      positiveMessage = "Expected spy " + this.actual.identity + " to have been called with " + jasmine.pp(expectedArgs) + " but actual calls were " + jasmine.pp(this.actual.argsForCall).replace(/^\[ | \]$/g, '')
+    }
+    return [positiveMessage, invertedMessage];
+  };
+
+  return this.env.contains_(this.actual.argsForCall, expectedArgs);
+};
+
+/** @deprecated Use expect(xxx).toHaveBeenCalledWith() instead */
+jasmine.Matchers.prototype.wasCalledWith = jasmine.Matchers.prototype.toHaveBeenCalledWith;
+
+/** @deprecated Use expect(xxx).not.toHaveBeenCalledWith() instead */
+jasmine.Matchers.prototype.wasNotCalledWith = function() {
+  var expectedArgs = jasmine.util.argsToArray(arguments);
+  if (!jasmine.isSpy(this.actual)) {
+    throw new Error('Expected a spy, but got ' + jasmine.pp(this.actual) + '.');
+  }
+
+  this.message = function() {
+    return [
+      "Expected spy not to have been called with " + jasmine.pp(expectedArgs) + " but it was",
+      "Expected spy to have been called with " + jasmine.pp(expectedArgs) + " but it was"
+    ];
+  };
+
+  return !this.env.contains_(this.actual.argsForCall, expectedArgs);
+};
+
+/**
+ * Matcher that checks that the expected item is an element in the actual Array.
+ *
+ * @param {Object} expected
+ */
+jasmine.Matchers.prototype.toContain = function(expected) {
+  return this.env.contains_(this.actual, expected);
+};
+
+/**
+ * Matcher that checks that the expected item is NOT an element in the actual Array.
+ *
+ * @param {Object} expected
+ * @deprecated as of 1.0. Use not.toContain() instead.
+ */
+jasmine.Matchers.prototype.toNotContain = function(expected) {
+  return !this.env.contains_(this.actual, expected);
+};
+
+jasmine.Matchers.prototype.toBeLessThan = function(expected) {
+  return this.actual < expected;
+};
+
+jasmine.Matchers.prototype.toBeGreaterThan = function(expected) {
+  return this.actual > expected;
+};
+
+/**
+ * Matcher that checks that the expected item is equal to the actual item
+ * up to a given level of decimal precision (default 2).
+ *
+ * @param {Number} expected
+ * @param {Number} precision, as number of decimal places
+ */
+jasmine.Matchers.prototype.toBeCloseTo = function(expected, precision) {
+  if (!(precision === 0)) {
+    precision = precision || 2;
+  }
+  return Math.abs(expected - this.actual) < (Math.pow(10, -precision) / 2);
+};
+
+/**
+ * Matcher that checks that the expected exception was thrown by the actual.
+ *
+ * @param {String} [expected]
+ */
+jasmine.Matchers.prototype.toThrow = function(expected) {
+  var result = false;
+  var exception;
+  if (typeof this.actual != 'function') {
+    throw new Error('Actual is not a function');
+  }
+  try {
+    this.actual();
+  } catch (e) {
+    exception = e;
+  }
+  if (exception) {
+    result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected));
+  }
+
+  var not = this.isNot ? "not " : "";
+
+  this.message = function() {
+    if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) {
+      return ["Expected function " + not + "to throw", expected ? expected.message || expected : "an exception", ", but it threw", exception.message || exception].join(' ');
+    } else {
+      return "Expected function to throw an exception.";
+    }
+  };
+
+  return result;
+};
+
+jasmine.Matchers.Any = function(expectedClass) {
+  this.expectedClass = expectedClass;
+};
+
+jasmine.Matchers.Any.prototype.jasmineMatches = function(other) {
+  if (this.expectedClass == String) {
+    return typeof other == 'string' || other instanceof String;
+  }
+
+  if (this.expectedClass == Number) {
+    return typeof other == 'number' || other instanceof Number;
+  }
+
+  if (this.expectedClass == Function) {
+    return typeof other == 'function' || other instanceof Function;
+  }
+
+  if (this.expectedClass == Object) {
+    return typeof other == 'object';
+  }
+
+  return other instanceof this.expectedClass;
+};
+
+jasmine.Matchers.Any.prototype.jasmineToString = function() {
+  return '<jasmine.any(' + this.expectedClass + ')>';
+};
+
+jasmine.Matchers.ObjectContaining = function (sample) {
+  this.sample = sample;
+};
+
+jasmine.Matchers.ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {
+  mismatchKeys = mismatchKeys || [];
+  mismatchValues = mismatchValues || [];
+
+  var env = jasmine.getEnv();
+
+  var hasKey = function(obj, keyName) {
+    return obj != null && obj[keyName] !== jasmine.undefined;
+  };
+
+  for (var property in this.sample) {
+    if (!hasKey(other, property) && hasKey(this.sample, property)) {
+      mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
+    }
+    else if (!env.equals_(this.sample[property], other[property], mismatchKeys, mismatchValues)) {
+      mismatchValues.push("'" + property + "' was '" + (other[property] ? jasmine.util.htmlEscape(other[property].toString()) : other[property]) + "' in expected, but was '" + (this.sample[property] ? jasmine.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in actual.");
+    }
+  }
+
+  return (mismatchKeys.length === 0 && mismatchValues.length === 0);
+};
+
+jasmine.Matchers.ObjectContaining.prototype.jasmineToString = function () {
+  return "<jasmine.objectContaining(" + jasmine.pp(this.sample) + ")>";
+};
+// Mock setTimeout, clearTimeout
+// Contributed by Pivotal Computer Systems, www.pivotalsf.com
+
+jasmine.FakeTimer = function() {
+  this.reset();
+
+  var self = this;
+  self.setTimeout = function(funcToCall, millis) {
+    self.timeoutsMade++;
+    self.scheduleFunction(self.timeoutsMade, funcToCall, millis, false);
+    return self.timeoutsMade;
+  };
+
+  self.setInterval = function(funcToCall, millis) {
+    self.timeoutsMade++;
+    self.scheduleFunction(self.timeoutsMade, funcToCall, millis, true);
+    return self.timeoutsMade;
+  };
+
+  self.clearTimeout = function(timeoutKey) {
+    self.scheduledFunctions[timeoutKey] = jasmine.undefined;
+  };
+
+  self.clearInterval = function(timeoutKey) {
+    self.scheduledFunctions[timeoutKey] = jasmine.undefined;
+  };
+
+};
+
+jasmine.FakeTimer.prototype.reset = function() {
+  this.timeoutsMade = 0;
+  this.scheduledFunctions = {};
+  this.nowMillis = 0;
+};
+
+jasmine.FakeTimer.prototype.tick = function(millis) {
+  var oldMillis = this.nowMillis;
+  var newMillis = oldMillis + millis;
+  this.runFunctionsWithinRange(oldMillis, newMillis);
+  this.nowMillis = newMillis;
+};
+
+jasmine.FakeTimer.prototype.runFunctionsWithinRange = function(oldMillis, nowMillis) {
+  var scheduledFunc;
+  var funcsToRun = [];
+  for (var timeoutKey in this.scheduledFunctions) {
+    scheduledFunc = this.scheduledFunctions[timeoutKey];
+    if (scheduledFunc != jasmine.undefined &&
+        scheduledFunc.runAtMillis >= oldMillis &&
+        scheduledFunc.runAtMillis <= nowMillis) {
+      funcsToRun.push(scheduledFunc);
+      this.scheduledFunctions[timeoutKey] = jasmine.undefined;
+    }
+  }
+
+  if (funcsToRun.length > 0) {
+    funcsToRun.sort(function(a, b) {
+      return a.runAtMillis - b.runAtMillis;
+    });
+    for (var i = 0; i < funcsToRun.length; ++i) {
+      try {
+        var funcToRun = funcsToRun[i];
+        this.nowMillis = funcToRun.runAtMillis;
+        funcToRun.funcToCall();
+        if (funcToRun.recurring) {
+          this.scheduleFunction(funcToRun.timeoutKey,
+              funcToRun.funcToCall,
+              funcToRun.millis,
+              true);
+        }
+      } catch(e) {
+      }
+    }
+    this.runFunctionsWithinRange(oldMillis, nowMillis);
+  }
+};
+
+jasmine.FakeTimer.prototype.scheduleFunction = function(timeoutKey, funcToCall, millis, recurring) {
+  this.scheduledFunctions[timeoutKey] = {
+    runAtMillis: this.nowMillis + millis,
+    funcToCall: funcToCall,
+    recurring: recurring,
+    timeoutKey: timeoutKey,
+    millis: millis
+  };
+};
+
+/**
+ * @namespace
+ */
+jasmine.Clock = {
+  defaultFakeTimer: new jasmine.FakeTimer(),
+
+  reset: function() {
+    jasmine.Clock.assertInstalled();
+    jasmine.Clock.defaultFakeTimer.reset();
+  },
+
+  tick: function(millis) {
+    jasmine.Clock.assertInstalled();
+    jasmine.Clock.defaultFakeTimer.tick(millis);
+  },
+
+  runFunctionsWithinRange: function(oldMillis, nowMillis) {
+    jasmine.Clock.defaultFakeTimer.runFunctionsWithinRange(oldMillis, nowMillis);
+  },
+
+  scheduleFunction: function(timeoutKey, funcToCall, millis, recurring) {
+    jasmine.Clock.defaultFakeTimer.scheduleFunction(timeoutKey, funcToCall, millis, recurring);
+  },
+
+  useMock: function() {
+    if (!jasmine.Clock.isInstalled()) {
+      var spec = jasmine.getEnv().currentSpec;
+      spec.after(jasmine.Clock.uninstallMock);
+
+      jasmine.Clock.installMock();
+    }
+  },
+
+  installMock: function() {
+    jasmine.Clock.installed = jasmine.Clock.defaultFakeTimer;
+  },
+
+  uninstallMock: function() {
+    jasmine.Clock.assertInstalled();
+    jasmine.Clock.installed = jasmine.Clock.real;
+  },
+
+  real: {
+    setTimeout: jasmine.getGlobal().setTimeout,
+    clearTimeout: jasmine.getGlobal().clearTimeout,
+    setInterval: jasmine.getGlobal().setInterval,
+    clearInterval: jasmine.getGlobal().clearInterval
+  },
+
+  assertInstalled: function() {
+    if (!jasmine.Clock.isInstalled()) {
+      throw new Error("Mock clock is not installed, use jasmine.Clock.useMock()");
+    }
+  },
+
+  isInstalled: function() {
+    return jasmine.Clock.installed == jasmine.Clock.defaultFakeTimer;
+  },
+
+  installed: null
+};
+jasmine.Clock.installed = jasmine.Clock.real;
+
+//else for IE support
+jasmine.getGlobal().setTimeout = function(funcToCall, millis) {
+  if (jasmine.Clock.installed.setTimeout.apply) {
+    return jasmine.Clock.installed.setTimeout.apply(this, arguments);
+  } else {
+    return jasmine.Clock.installed.setTimeout(funcToCall, millis);
+  }
+};
+
+jasmine.getGlobal().setInterval = function(funcToCall, millis) {
+  if (jasmine.Clock.installed.setInterval.apply) {
+    return jasmine.Clock.installed.setInterval.apply(this, arguments);
+  } else {
+    return jasmine.Clock.installed.setInterval(funcToCall, millis);
+  }
+};
+
+jasmine.getGlobal().clearTimeout = function(timeoutKey) {
+  if (jasmine.Clock.installed.clearTimeout.apply) {
+    return jasmine.Clock.installed.clearTimeout.apply(this, arguments);
+  } else {
+    return jasmine.Clock.installed.clearTimeout(timeoutKey);
+  }
+};
+
+jasmine.getGlobal().clearInterval = function(timeoutKey) {
+  if (jasmine.Clock.installed.clearTimeout.apply) {
+    return jasmine.Clock.installed.clearInterval.apply(this, arguments);
+  } else {
+    return jasmine.Clock.installed.clearInterval(timeoutKey);
+  }
+};
+
+/**
+ * @constructor
+ */
+jasmine.MultiReporter = function() {
+  this.subReporters_ = [];
+};
+jasmine.util.inherit(jasmine.MultiReporter, jasmine.Reporter);
+
+jasmine.MultiReporter.prototype.addReporter = function(reporter) {
+  this.subReporters_.push(reporter);
+};
+
+(function() {
+  var functionNames = [
+    "reportRunnerStarting",
+    "reportRunnerResults",
+    "reportSuiteResults",
+    "reportSpecStarting",
+    "reportSpecResults",
+    "log"
+  ];
+  for (var i = 0; i < functionNames.length; i++) {
+    var functionName = functionNames[i];
+    jasmine.MultiReporter.prototype[functionName] = (function(functionName) {
+      return function() {
+        for (var j = 0; j < this.subReporters_.length; j++) {
+          var subReporter = this.subReporters_[j];
+          if (subReporter[functionName]) {
+            subReporter[functionName].apply(subReporter, arguments);
+          }
+        }
       };
-
-    for (var prop in originalFn) {
-      if (prop === 'and' || prop === 'calls') {
-        throw new Error("Jasmine spies would overwrite the 'and' and 'calls' properties on the object being spied upon");
+    })(functionName);
+  }
+})();
+/**
+ * Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults
+ *
+ * @constructor
+ */
+jasmine.NestedResults = function() {
+  /**
+   * The total count of results
+   */
+  this.totalCount = 0;
+  /**
+   * Number of passed results
+   */
+  this.passedCount = 0;
+  /**
+   * Number of failed results
+   */
+  this.failedCount = 0;
+  /**
+   * Was this suite/spec skipped?
+   */
+  this.skipped = false;
+  /**
+   * @ignore
+   */
+  this.items_ = [];
+};
+
+/**
+ * Roll up the result counts.
+ *
+ * @param result
+ */
+jasmine.NestedResults.prototype.rollupCounts = function(result) {
+  this.totalCount += result.totalCount;
+  this.passedCount += result.passedCount;
+  this.failedCount += result.failedCount;
+};
+
+/**
+ * Adds a log message.
+ * @param values Array of message parts which will be concatenated later.
+ */
+jasmine.NestedResults.prototype.log = function(values) {
+  this.items_.push(new jasmine.MessageResult(values));
+};
+
+/**
+ * Getter for the results: message & results.
+ */
+jasmine.NestedResults.prototype.getItems = function() {
+  return this.items_;
+};
+
+/**
+ * Adds a result, tracking counts (total, passed, & failed)
+ * @param {jasmine.ExpectationResult|jasmine.NestedResults} result
+ */
+jasmine.NestedResults.prototype.addResult = function(result) {
+  if (result.type != 'log') {
+    if (result.items_) {
+      this.rollupCounts(result);
+    } else {
+      this.totalCount++;
+      if (result.passed()) {
+        this.passedCount++;
+      } else {
+        this.failedCount++;
       }
-
-      spy[prop] = originalFn[prop];
-    }
-
-    spy.and = spyStrategy;
-    spy.calls = callTracker;
-
-    return spy;
-  };
-
-  j$.isSpy = function(putativeSpy) {
-    if (!putativeSpy) {
-      return false;
-    }
-    return putativeSpy.and instanceof j$.SpyStrategy &&
-      putativeSpy.calls instanceof j$.CallTracker;
-  };
-
-  j$.createSpyObj = function(baseName, methodNames) {
-    if (!j$.isArray_(methodNames) || methodNames.length === 0) {
-      throw "createSpyObj requires a non-empty array of method names to create spies for";
-    }
-    var obj = {};
-    for (var i = 0; i < methodNames.length; i++) {
-      obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]);
-    }
-    return obj;
-  };
-};
-
-getJasmineRequireObj().util = function() {
-
-  var util = {};
-
-  util.inherit = function(childClass, parentClass) {
-    var Subclass = function() {
-    };
-    Subclass.prototype = parentClass.prototype;
-    childClass.prototype = new Subclass();
-  };
-
-  util.htmlEscape = function(str) {
-    if (!str) {
-      return str;
-    }
-    return str.replace(/&/g, '&amp;')
-      .replace(/</g, '&lt;')
-      .replace(/>/g, '&gt;');
-  };
-
-  util.argsToArray = function(args) {
-    var arrayOfArgs = [];
-    for (var i = 0; i < args.length; i++) {
-      arrayOfArgs.push(args[i]);
-    }
-    return arrayOfArgs;
-  };
-
-  util.isUndefined = function(obj) {
-    return obj === void 0;
-  };
-
-  return util;
-};
-
-getJasmineRequireObj().Spec = function(j$) {
-  function Spec(attrs) {
-    this.expectationFactory = attrs.expectationFactory;
-    this.resultCallback = attrs.resultCallback || function() {};
-    this.id = attrs.id;
-    this.description = attrs.description || '';
-    this.fn = attrs.fn;
-    this.beforeFns = attrs.beforeFns || function() { return []; };
-    this.afterFns = attrs.afterFns || function() { return []; };
-    this.onStart = attrs.onStart || function() {};
-    this.exceptionFormatter = attrs.exceptionFormatter || function() {};
-    this.getSpecName = attrs.getSpecName || function() { return ''; };
-    this.expectationResultFactory = attrs.expectationResultFactory || function() { };
-    this.queueRunnerFactory = attrs.queueRunnerFactory || function() {};
-    this.catchingExceptions = attrs.catchingExceptions || function() { return true; };
-
-    this.timer = attrs.timer || {setTimeout: setTimeout, clearTimeout: clearTimeout};
-
-    if (!this.fn) {
-      this.pend();
-    }
-
-    this.result = {
-      id: this.id,
-      description: this.description,
-      fullName: this.getFullName(),
-      failedExpectations: []
-    };
-  }
-
-  Spec.prototype.addExpectationResult = function(passed, data) {
-    if (passed) {
-      return;
-    }
-    this.result.failedExpectations.push(this.expectationResultFactory(data));
-  };
-
-  Spec.prototype.expect = function(actual) {
-    return this.expectationFactory(actual, this);
-  };
-
-  Spec.prototype.execute = function(onComplete) {
-    var self = this,
-        timeout;
-
-    this.onStart(this);
-
-    if (this.markedPending || this.disabled) {
-      complete();
-      return;
-    }
-
-    function timeoutable(fn) {
-      return function(done) {
-        timeout = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() {
-          onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'));
-          done();
-        }, j$.DEFAULT_TIMEOUT_INTERVAL]]);
-
-        var callDone = function() {
-          clearTimeoutable();
-          done();
-        };
-
-        fn.call(this, callDone); //TODO: do we care about more than 1 arg?
+    }
+  }
+  this.items_.push(result);
+};
+
+/**
+ * @returns {Boolean} True if <b>everything</b> below passed
+ */
+jasmine.NestedResults.prototype.passed = function() {
+  return this.passedCount === this.totalCount;
+};
+/**
+ * Base class for pretty printing for expectation results.
+ */
+jasmine.PrettyPrinter = function() {
+  this.ppNestLevel_ = 0;
+};
+
+/**
+ * Formats a value in a nice, human-readable string.
+ *
+ * @param value
+ */
+jasmine.PrettyPrinter.prototype.format = function(value) {
+  this.ppNestLevel_++;
+  try {
+    if (value === jasmine.undefined) {
+      this.emitScalar('undefined');
+    } else if (value === null) {
+      this.emitScalar('null');
+    } else if (value === jasmine.getGlobal()) {
+      this.emitScalar('<global>');
+    } else if (value.jasmineToString) {
+      this.emitScalar(value.jasmineToString());
+    } else if (typeof value === 'string') {
+      this.emitString(value);
+    } else if (jasmine.isSpy(value)) {
+      this.emitScalar("spy on " + value.identity);
+    } else if (value instanceof RegExp) {
+      this.emitScalar(value.toString());
+    } else if (typeof value === 'function') {
+      this.emitScalar('Function');
+    } else if (typeof value.nodeType === 'number') {
+      this.emitScalar('HTMLNode');
+    } else if (value instanceof Date) {
+      this.emitScalar('Date(' + value + ')');
+    } else if (value.__Jasmine_been_here_before__) {
+      this.emitScalar('<circular reference: ' + (jasmine.isArray_(value) ? 'Array' : 'Object') + '>');
+    } else if (jasmine.isArray_(value) || typeof value == 'object') {
+      value.__Jasmine_been_here_before__ = true;
+      if (jasmine.isArray_(value)) {
+        this.emitArray(value);
+      } else {
+        this.emitObject(value);
+      }
+      delete value.__Jasmine_been_here_before__;
+    } else {
+      this.emitScalar(value.toString());
+    }
+  } finally {
+    this.ppNestLevel_--;
+  }
+};
+
+jasmine.PrettyPrinter.prototype.iterateObject = function(obj, fn) {
+  for (var property in obj) {
+    if (!obj.hasOwnProperty(property)) continue;
+    if (property == '__Jasmine_been_here_before__') continue;
+    fn(property, obj.__lookupGetter__ ? (obj.__lookupGetter__(property) !== jasmine.undefined && 
+                                         obj.__lookupGetter__(property) !== null) : false);
+  }
+};
+
+jasmine.PrettyPrinter.prototype.emitArray = jasmine.unimplementedMethod_;
+jasmine.PrettyPrinter.prototype.emitObject = jasmine.unimplementedMethod_;
+jasmine.PrettyPrinter.prototype.emitScalar = jasmine.unimplementedMethod_;
+jasmine.PrettyPrinter.prototype.emitString = jasmine.unimplementedMethod_;
+
+jasmine.StringPrettyPrinter = function() {
+  jasmine.PrettyPrinter.call(this);
+
+  this.string = '';
+};
+jasmine.util.inherit(jasmine.StringPrettyPrinter, jasmine.PrettyPrinter);
+
+jasmine.StringPrettyPrinter.prototype.emitScalar = function(value) {
+  this.append(value);
+};
+
+jasmine.StringPrettyPrinter.prototype.emitString = function(value) {
+  this.append("'" + value + "'");
+};
+
+jasmine.StringPrettyPrinter.prototype.emitArray = function(array) {
+  if (this.ppNestLevel_ > jasmine.MAX_PRETTY_PRINT_DEPTH) {
+    this.append("Array");
+    return;
+  }
+
+  this.append('[ ');
+  for (var i = 0; i < array.length; i++) {
+    if (i > 0) {
+      this.append(', ');
+    }
+    this.format(array[i]);
+  }
+  this.append(' ]');
+};
+
+jasmine.StringPrettyPrinter.prototype.emitObject = function(obj) {
+  if (this.ppNestLevel_ > jasmine.MAX_PRETTY_PRINT_DEPTH) {
+    this.append("Object");
+    return;
+  }
+
+  var self = this;
+  this.append('{ ');
+  var first = true;
+
+  this.iterateObject(obj, function(property, isGetter) {
+    if (first) {
+      first = false;
+    } else {
+      self.append(', ');
+    }
+
+    self.append(property);
+    self.append(' : ');
+    if (isGetter) {
+      self.append('<getter>');
+    } else {
+      self.format(obj[property]);
+    }
+  });
+
+  this.append(' }');
+};
+
+jasmine.StringPrettyPrinter.prototype.append = function(value) {
+  this.string += value;
+};
+jasmine.Queue = function(env) {
+  this.env = env;
+
+  // parallel to blocks. each true value in this array means the block will
+  // get executed even if we abort
+  this.ensured = [];
+  this.blocks = [];
+  this.running = false;
+  this.index = 0;
+  this.offset = 0;
+  this.abort = false;
+};
+
+jasmine.Queue.prototype.addBefore = function(block, ensure) {
+  if (ensure === jasmine.undefined) {
+    ensure = false;
+  }
+
+  this.blocks.unshift(block);
+  this.ensured.unshift(ensure);
+};
+
+jasmine.Queue.prototype.add = function(block, ensure) {
+  if (ensure === jasmine.undefined) {
+    ensure = false;
+  }
+
+  this.blocks.push(block);
+  this.ensured.push(ensure);
+};
+
+jasmine.Queue.prototype.insertNext = function(block, ensure) {
+  if (ensure === jasmine.undefined) {
+    ensure = false;
+  }
+
+  this.ensured.splice((this.index + this.offset + 1), 0, ensure);
+  this.blocks.splice((this.index + this.offset + 1), 0, block);
+  this.offset++;
+};
+
+jasmine.Queue.prototype.start = function(onComplete) {
+  this.running = true;
+  this.onComplete = onComplete;
+  this.next_();
+};
+
+jasmine.Queue.prototype.isRunning = function() {
+  return this.running;
+};
+
+jasmine.Queue.LOOP_DONT_RECURSE = true;
+
+jasmine.Queue.prototype.next_ = function() {
+  var self = this;
+  var goAgain = true;
+
+  while (goAgain) {
+    goAgain = false;
+    
+    if (self.index < self.blocks.length && !(this.abort && !this.ensured[self.index])) {
+      var calledSynchronously = true;
+      var completedSynchronously = false;
+
+      var onComplete = function () {
+        if (jasmine.Queue.LOOP_DONT_RECURSE && calledSynchronously) {
+          completedSynchronously = true;
+          return;
+        }
+
+        if (self.blocks[self.index].abort) {
+          self.abort = true;
+        }
+
+        self.offset = 0;
+        self.index++;
+
+        var now = new Date().getTime();
+        if (self.env.updateInterval && now - self.env.lastUpdate > self.env.updateInterval) {
+          self.env.lastUpdate = now;
+          self.env.setTimeout(function() {
+            self.next_();
+          }, 0);
+        } else {
+          if (jasmine.Queue.LOOP_DONT_RECURSE && completedSynchronously) {
+            goAgain = true;
+          } else {
+            self.next_();
+          }
+        }
       };
-    }
-
-    function clearTimeoutable() {
-      Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeout]]);
-      timeout = void 0;
-    }
-
-    var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns()),
-      allTimeoutableFns = [];
-    for (var i = 0; i < allFns.length; i++) {
-      var fn = allFns[i];
-      allTimeoutableFns.push(fn.length > 0 ? timeoutable(fn) : fn);
-    }
-
-    this.queueRunnerFactory({
-      fns: allTimeoutableFns,
-      onException: onException,
-      onComplete: complete
-    });
-
-    function onException(e) {
-      clearTimeoutable();
-      if (Spec.isPendingSpecException(e)) {
-        self.pend();
-        return;
-      }
-
-      self.addExpectationResult(false, {
-        matcherName: "",
-        passed: false,
-        expected: "",
-        actual: "",
-        error: e
-      });
-    }
-
-    function complete() {
-      self.result.status = self.status();
-      self.resultCallback(self.result);
-
-      if (onComplete) {
+      self.blocks[self.index].execute(onComplete);
+
+      calledSynchronously = false;
+      if (completedSynchronously) {
         onComplete();
       }
-    }
+      
+    } else {
+      self.running = false;
+      if (self.onComplete) {
+        self.onComplete();
+      }
+    }
+  }
+};
+
+jasmine.Queue.prototype.results = function() {
+  var results = new jasmine.NestedResults();
+  for (var i = 0; i < this.blocks.length; i++) {
+    if (this.blocks[i].results) {
+      results.addResult(this.blocks[i].results());
+    }
+  }
+  return results;
+};
+
+
+/**
+ * Runner
+ *
+ * @constructor
+ * @param {jasmine.Env} env
+ */
+jasmine.Runner = function(env) {
+  var self = this;
+  self.env = env;
+  self.queue = new jasmine.Queue(env);
+  self.before_ = [];
+  self.after_ = [];
+  self.suites_ = [];
+};
+
+jasmine.Runner.prototype.execute = function() {
+  var self = this;
+  if (self.env.reporter.reportRunnerStarting) {
+    self.env.reporter.reportRunnerStarting(this);
+  }
+  self.queue.start(function () {
+    self.finishCallback();
+  });
+};
+
+jasmine.Runner.prototype.beforeEach = function(beforeEachFunction) {
+  beforeEachFunction.typeName = 'beforeEach';
+  this.before_.splice(0,0,beforeEachFunction);
+};
+
+jasmine.Runner.prototype.afterEach = function(afterEachFunction) {
+  afterEachFunction.typeName = 'afterEach';
+  this.after_.splice(0,0,afterEachFunction);
+};
+
+
+jasmine.Runner.prototype.finishCallback = function() {
+  this.env.reporter.reportRunnerResults(this);
+};
+
+jasmine.Runner.prototype.addSuite = function(suite) {
+  this.suites_.push(suite);
+};
+
+jasmine.Runner.prototype.add = function(block) {
+  if (block instanceof jasmine.Suite) {
+    this.addSuite(block);
+  }
+  this.queue.add(block);
+};
+
+jasmine.Runner.prototype.specs = function () {
+  var suites = this.suites();
+  var specs = [];
+  for (var i = 0; i < suites.length; i++) {
+    specs = specs.concat(suites[i].specs());
+  }
+  return specs;
+};
+
+jasmine.Runner.prototype.suites = function() {
+  return this.suites_;
+};
+
+jasmine.Runner.prototype.topLevelSuites = function() {
+  var topLevelSuites = [];
+  for (var i = 0; i < this.suites_.length; i++) {
+    if (!this.suites_[i].parentSuite) {
+      topLevelSuites.push(this.suites_[i]);
+    }
+  }
+  return topLevelSuites;
+};
+
+jasmine.Runner.prototype.results = function() {
+  return this.queue.results();
+};
+/**
+ * Internal representation of a Jasmine specification, or test.
+ *
+ * @constructor
+ * @param {jasmine.Env} env
+ * @param {jasmine.Suite} suite
+ * @param {String} description
+ */
+jasmine.Spec = function(env, suite, description) {
+  if (!env) {
+    throw new Error('jasmine.Env() required');
+  }
+  if (!suite) {
+    throw new Error('jasmine.Suite() required');
+  }
+  var spec = this;
+  spec.id = env.nextSpecId ? env.nextSpecId() : null;
+  spec.env = env;
+  spec.suite = suite;
+  spec.description = description;
+  spec.queue = new jasmine.Queue(env);
+
+  spec.afterCallbacks = [];
+  spec.spies_ = [];
+
+  spec.results_ = new jasmine.NestedResults();
+  spec.results_.description = description;
+  spec.matchersClass = null;
+};
+
+jasmine.Spec.prototype.getFullName = function() {
+  return this.suite.getFullName() + ' ' + this.description + '.';
+};
+
+
+jasmine.Spec.prototype.results = function() {
+  return this.results_;
+};
+
+/**
+ * All parameters are pretty-printed and concatenated together, then written to the spec's output.
+ *
+ * Be careful not to leave calls to <code>jasmine.log</code> in production code.
+ */
+jasmine.Spec.prototype.log = function() {
+  return this.results_.log(arguments);
+};
+
+jasmine.Spec.prototype.runs = function (func) {
+  var block = new jasmine.Block(this.env, func, this);
+  this.addToQueue(block);
+  return this;
+};
+
+jasmine.Spec.prototype.addToQueue = function (block) {
+  if (this.queue.isRunning()) {
+    this.queue.insertNext(block);
+  } else {
+    this.queue.add(block);
+  }
+};
+
+/**
+ * @param {jasmine.ExpectationResult} result
+ */
+jasmine.Spec.prototype.addMatcherResult = function(result) {
+  this.results_.addResult(result);
+};
+
+jasmine.Spec.prototype.expect = function(actual) {
+  var positive = new (this.getMatchersClass_())(this.env, actual, this);
+  positive.not = new (this.getMatchersClass_())(this.env, actual, this, true);
+  return positive;
+};
+
+/**
+ * Waits a fixed time period before moving to the next block.
+ *
+ * @deprecated Use waitsFor() instead
+ * @param {Number} timeout milliseconds to wait
+ */
+jasmine.Spec.prototype.waits = function(timeout) {
+  var waitsFunc = new jasmine.WaitsBlock(this.env, timeout, this);
+  this.addToQueue(waitsFunc);
+  return this;
+};
+
+/**
+ * Waits for the latchFunction to return true before proceeding to the next block.
+ *
+ * @param {Function} latchFunction
+ * @param {String} optional_timeoutMessage
+ * @param {Number} optional_timeout
+ */
+jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) {
+  var latchFunction_ = null;
+  var optional_timeoutMessage_ = null;
+  var optional_timeout_ = null;
+
+  for (var i = 0; i < arguments.length; i++) {
+    var arg = arguments[i];
+    switch (typeof arg) {
+      case 'function':
+        latchFunction_ = arg;
+        break;
+      case 'string':
+        optional_timeoutMessage_ = arg;
+        break;
+      case 'number':
+        optional_timeout_ = arg;
+        break;
+    }
+  }
+
+  var waitsForFunc = new jasmine.WaitsForBlock(this.env, optional_timeout_, latchFunction_, optional_timeoutMessage_, this);
+  this.addToQueue(waitsForFunc);
+  return this;
+};
+
+jasmine.Spec.prototype.fail = function (e) {
+  var expectationResult = new jasmine.ExpectationResult({
+    passed: false,
+    message: e ? jasmine.util.formatException(e) : 'Exception',
+    trace: { stack: e.stack }
+  });
+  this.results_.addResult(expectationResult);
+};
+
+jasmine.Spec.prototype.getMatchersClass_ = function() {
+  return this.matchersClass || this.env.matchersClass;
+};
+
+jasmine.Spec.prototype.addMatchers = function(matchersPrototype) {
+  var parent = this.getMatchersClass_();
+  var newMatchersClass = function() {
+    parent.apply(this, arguments);
   };
-
-  Spec.prototype.disable = function() {
-    this.disabled = true;
-  };
-
-  Spec.prototype.pend = function() {
-    this.markedPending = true;
-  };
-
-  Spec.prototype.status = function() {
-    if (this.disabled) {
-      return 'disabled';
-    }
-
-    if (this.markedPending) {
-      return 'pending';
-    }
-
-    if (this.result.failedExpectations.length > 0) {
-      return 'failed';
-    } else {
-      return 'passed';
-    }
-  };
-
-  Spec.prototype.getFullName = function() {
-    return this.getSpecName(this);
-  };
-
-  Spec.pendingSpecExceptionMessage = "=> marked Pending";
-
-  Spec.isPendingSpecException = function(e) {
-    return e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1;
-  };
-
-  return Spec;
-};
-
-if (typeof window == void 0 && typeof exports == "object") {
-  exports.Spec = jasmineRequire.Spec;
-}
-
-getJasmineRequireObj().Env = function(j$) {
-  function Env(options) {
-    options = options || {};
-
+  jasmine.util.inherit(newMatchersClass, parent);
+  jasmine.Matchers.wrapInto_(matchersPrototype, newMatchersClass);
+  this.matchersClass = newMatchersClass;
+};
+
+jasmine.Spec.prototype.finishCallback = function() {
+  this.env.reporter.reportSpecResults(this);
+};
+
+jasmine.Spec.prototype.finish = function(onComplete) {
+  this.removeAllSpies();
+  this.finishCallback();
+  if (onComplete) {
+    onComplete();
+  }
+};
+
+jasmine.Spec.prototype.after = function(doAfter) {
+  if (this.queue.isRunning()) {
+    this.queue.add(new jasmine.Block(this.env, doAfter, this), true);
+  } else {
+    this.afterCallbacks.unshift(doAfter);
+  }
+};
+
+jasmine.Spec.prototype.execute = function(onComplete) {
+  var spec = this;
+  if (!spec.env.specFilter(spec)) {
+    spec.results_.skipped = true;
+    spec.finish(onComplete);
+    return;
+  }
+
+  this.env.reporter.reportSpecStarting(this);
+
+  spec.env.currentSpec = spec;
+
+  spec.addBeforesAndAftersToQueue();
+
+  spec.queue.start(function () {
+    spec.finish(onComplete);
+  });
+};
+
+jasmine.Spec.prototype.addBeforesAndAftersToQueue = function() {
+  var runner = this.env.currentRunner();
+  var i;
+
+  for (var suite = this.suite; suite; suite = suite.parentSuite) {
+    for (i = 0; i < suite.before_.length; i++) {
+      this.queue.addBefore(new jasmine.Block(this.env, suite.before_[i], this));
+    }
+  }
+  for (i = 0; i < runner.before_.length; i++) {
+    this.queue.addBefore(new jasmine.Block(this.env, runner.before_[i], this));
+  }
+  for (i = 0; i < this.afterCallbacks.length; i++) {
+    this.queue.add(new jasmine.Block(this.env, this.afterCallbacks[i], this), true);
+  }
+  for (suite = this.suite; suite; suite = suite.parentSuite) {
+    for (i = 0; i < suite.after_.length; i++) {
+      this.queue.add(new jasmine.Block(this.env, suite.after_[i], this), true);
+    }
+  }
+  for (i = 0; i < runner.after_.length; i++) {
+    this.queue.add(new jasmine.Block(this.env, runner.after_[i], this), true);
+  }
+};
+
+jasmine.Spec.prototype.explodes = function() {
+  throw 'explodes function should not have been called';
+};
+
+jasmine.Spec.prototype.spyOn = function(obj, methodName, ignoreMethodDoesntExist) {
+  if (obj == jasmine.undefined) {
+    throw "spyOn could not find an object to spy upon for " + methodName + "()";
+  }
+
+  if (!ignoreMethodDoesntExist && obj[methodName] === jasmine.undefined) {
+    throw methodName + '() method does not exist';
+  }
+
+  if (!ignoreMethodDoesntExist && obj[methodName] && obj[methodName].isSpy) {
+    throw new Error(methodName + ' has already been spied upon');
+  }
+
+  var spyObj = jasmine.createSpy(methodName);
+
+  this.spies_.push(spyObj);
+  spyObj.baseObj = obj;
+  spyObj.methodName = methodName;
+  spyObj.originalValue = obj[methodName];
+
+  obj[methodName] = spyObj;
+
+  return spyObj;
+};
+
+jasmine.Spec.prototype.removeAllSpies = function() {
+  for (var i = 0; i < this.spies_.length; i++) {
+    var spy = this.spies_[i];
+    spy.baseObj[spy.methodName] = spy.originalValue;
+  }
+  this.spies_ = [];
+};
+
+/**
+ * Internal representation of a Jasmine suite.
+ *
+ * @constructor
+ * @param {jasmine.Env} env
+ * @param {String} description
+ * @param {Function} specDefinitions
+ * @param {jasmine.Suite} parentSuite
+ */
+jasmine.Suite = function(env, description, specDefinitions, parentSuite) {
+  var self = this;
+  self.id = env.nextSuiteId ? env.nextSuiteId() : null;
+  self.description = description;
+  self.queue = new jasmine.Queue(env);
+  self.parentSuite = parentSuite;
+  self.env = env;
+  self.before_ = [];
+  self.after_ = [];
+  self.children_ = [];
+  self.suites_ = [];
+  self.specs_ = [];
+};
+
+jasmine.Suite.prototype.getFullName = function() {
+  var fullName = this.description;
+  for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
+    fullName = parentSuite.description + ' ' + fullName;
+  }
+  return fullName;
+};
+
+jasmine.Suite.prototype.finish = function(onComplete) {
+  this.env.reporter.reportSuiteResults(this);
+  this.finished = true;
+  if (typeof(onComplete) == 'function') {
+    onComplete();
+  }
+};
+
+jasmine.Suite.prototype.beforeEach = function(beforeEachFunction) {
+  beforeEachFunction.typeName = 'beforeEach';
+  this.before_.unshift(beforeEachFunction);
+};
+
+jasmine.Suite.prototype.afterEach = function(afterEachFunction) {
+  afterEachFunction.typeName = 'afterEach';
+  this.after_.unshift(afterEachFunction);
+};
+
+jasmine.Suite.prototype.results = function() {
+  return this.queue.results();
+};
+
+jasmine.Suite.prototype.add = function(suiteOrSpec) {
+  this.children_.push(suiteOrSpec);
+  if (suiteOrSpec instanceof jasmine.Suite) {
+    this.suites_.push(suiteOrSpec);
+    this.env.currentRunner().addSuite(suiteOrSpec);
+  } else {
+    this.specs_.push(suiteOrSpec);
+  }
+  this.queue.add(suiteOrSpec);
+};
+
+jasmine.Suite.prototype.specs = function() {
+  return this.specs_;
+};
+
+jasmine.Suite.prototype.suites = function() {
+  return this.suites_;
+};
+
+jasmine.Suite.prototype.children = function() {
+  return this.children_;
+};
+
+jasmine.Suite.prototype.execute = function(onComplete) {
+  var self = this;
+  this.queue.start(function () {
+    self.finish(onComplete);
+  });
+};
+jasmine.WaitsBlock = function(env, timeout, spec) {
+  this.timeout = timeout;
+  jasmine.Block.call(this, env, null, spec);
+};
+
+jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block);
+
+jasmine.WaitsBlock.prototype.execute = function (onComplete) {
+  if (jasmine.VERBOSE) {
+    this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...');
+  }
+  this.env.setTimeout(function () {
+    onComplete();
+  }, this.timeout);
+};
+/**
+ * A block which waits for some condition to become true, with timeout.
+ *
+ * @constructor
+ * @extends jasmine.Block
+ * @param {jasmine.Env} env The Jasmine environment.
+ * @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true.
+ * @param {Function} latchFunction A function which returns true when the desired condition has been met.
+ * @param {String} message The message to display if the desired condition hasn't been met within the given time period.
+ * @param {jasmine.Spec} spec The Jasmine spec.
+ */
+jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) {
+  this.timeout = timeout || env.defaultTimeoutInterval;
+  this.latchFunction = latchFunction;
+  this.message = message;
+  this.totalTimeSpentWaitingForLatch = 0;
+  jasmine.Block.call(this, env, null, spec);
+};
+jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block);
+
+jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10;
+
+jasmine.WaitsForBlock.prototype.execute = function(onComplete) {
+  if (jasmine.VERBOSE) {
+    this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen'));
+  }
+  var latchFunctionResult;
+  try {
+    latchFunctionResult = this.latchFunction.apply(this.spec);
+  } catch (e) {
+    this.spec.fail(e);
+    onComplete();
+    return;
+  }
+
+  if (latchFunctionResult) {
+    onComplete();
+  } else if (this.totalTimeSpentWaitingForLatch >= this.timeout) {
+    var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen');
+    this.spec.fail({
+      name: 'timeout',
+      message: message
+    });
+
+    this.abort = true;
+    onComplete();
+  } else {
+    this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT;
     var self = this;
-    var global = options.global || j$.getGlobal();
-
-    var totalSpecsDefined = 0;
-
-    var catchExceptions = true;
-
-    var realSetTimeout = j$.getGlobal().setTimeout;
-    var realClearTimeout = j$.getGlobal().clearTimeout;
-    this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler());
-
-    var runnableLookupTable = {};
-
-    var spies = [];
-
-    var currentSpec = null;
-    var currentSuite = null;
-
-    var reporter = new j$.ReportDispatcher([
-      "jasmineStarted",
-      "jasmineDone",
-      "suiteStarted",
-      "suiteDone",
-      "specStarted",
-      "specDone"
-    ]);
-
-    this.specFilter = function() {
-      return true;
-    };
-
-    var equalityTesters = [];
-
-    var customEqualityTesters = [];
-    this.addCustomEqualityTester = function(tester) {
-      customEqualityTesters.push(tester);
-    };
-
-    j$.Expectation.addCoreMatchers(j$.matchers);
-
-    var nextSpecId = 0;
-    var getNextSpecId = function() {
-      return 'spec' + nextSpecId++;
-    };
-
-    var nextSuiteId = 0;
-    var getNextSuiteId = function() {
-      return 'suite' + nextSuiteId++;
-    };
-
-    var expectationFactory = function(actual, spec) {
-      return j$.Expectation.Factory({
-        util: j$.matchersUtil,
-        customEqualityTesters: customEqualityTesters,
-        actual: actual,
-        addExpectationResult: addExpectationResult
-      });
-
-      function addExpectationResult(passed, result) {
-        return spec.addExpectationResult(passed, result);
-      }
-    };
-
-    var specStarted = function(spec) {
-      currentSpec = spec;
-      reporter.specStarted(spec.result);
-    };
-
-    var beforeFns = function(suite) {
-      return function() {
-        var befores = [];
-        while(suite) {
-          befores = befores.concat(suite.beforeFns);
-          suite = suite.parentSuite;
-        }
-        return befores.reverse();
-      };
-    };
-
-    var afterFns = function(suite) {
-      return function() {
-        var afters = [];
-        while(suite) {
-          afters = afters.concat(suite.afterFns);
-          suite = suite.parentSuite;
-        }
-        return afters;
-      };
-    };
-
-    var getSpecName = function(spec, suite) {
-      return suite.getFullName() + ' ' + spec.description;
-    };
-
-    // TODO: we may just be able to pass in the fn instead of wrapping here
-    var buildExpectationResult = j$.buildExpectationResult,
-        exceptionFormatter = new j$.ExceptionFormatter(),
-        expectationResultFactory = function(attrs) {
-          attrs.messageFormatter = exceptionFormatter.message;
-          attrs.stackFormatter = exceptionFormatter.stack;
-
-          return buildExpectationResult(attrs);
-        };
-
-    // TODO: fix this naming, and here's where the value comes in
-    this.catchExceptions = function(value) {
-      catchExceptions = !!value;
-      return catchExceptions;
-    };
-
-    this.catchingExceptions = function() {
-      return catchExceptions;
-    };
-
-    var maximumSpecCallbackDepth = 20;
-    var currentSpecCallbackDepth = 0;
-
-    function clearStack(fn) {
-      currentSpecCallbackDepth++;
-      if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) {
-        currentSpecCallbackDepth = 0;
-        realSetTimeout(fn, 0);
-      } else {
-        fn();
-      }
-    }
-
-    var catchException = function(e) {
-      return j$.Spec.isPendingSpecException(e) || catchExceptions;
-    };
-
-    var queueRunnerFactory = function(options) {
-      options.catchException = catchException;
-      options.clearStack = options.clearStack || clearStack;
-
-      new j$.QueueRunner(options).execute();
-    };
-
-    var topSuite = new j$.Suite({
-      env: this,
-      id: getNextSuiteId(),
-      description: 'Jasmine__TopLevel__Suite',
-      queueRunner: queueRunnerFactory,
-      resultCallback: function() {} // TODO - hook this up
-    });
-    runnableLookupTable[topSuite.id] = topSuite;
-    currentSuite = topSuite;
-
-    this.topSuite = function() {
-      return topSuite;
-    };
-
-    this.execute = function(runnablesToRun) {
-      runnablesToRun = runnablesToRun || [topSuite.id];
-
-      var allFns = [];
-      for(var i = 0; i < runnablesToRun.length; i++) {
-        var runnable = runnableLookupTable[runnablesToRun[i]];
-        allFns.push((function(runnable) { return function(done) { runnable.execute(done); }; })(runnable));
-      }
-
-      reporter.jasmineStarted({
-        totalSpecsDefined: totalSpecsDefined
-      });
-
-      queueRunnerFactory({fns: allFns, onComplete: reporter.jasmineDone});
-    };
-
-    this.addReporter = function(reporterToAdd) {
-      reporter.addReporter(reporterToAdd);
-    };
-
-    this.addMatchers = function(matchersToAdd) {
-      j$.Expectation.addMatchers(matchersToAdd);
-    };
-
-    this.spyOn = function(obj, methodName) {
-      if (j$.util.isUndefined(obj)) {
-        throw new Error("spyOn could not find an object to spy upon for " + methodName + "()");
-      }
-
-      if (j$.util.isUndefined(obj[methodName])) {
-        throw new Error(methodName + '() method does not exist');
-      }
-
-      if (obj[methodName] && j$.isSpy(obj[methodName])) {
-        //TODO?: should this return the current spy? Downside: may cause user confusion about spy state
-        throw new Error(methodName + ' has already been spied upon');
-      }
-
-      var spy = j$.createSpy(methodName, obj[methodName]);
-
-      spies.push({
-        spy: spy,
-        baseObj: obj,
-        methodName: methodName,
-        originalValue: obj[methodName]
-      });
-
-      obj[methodName] = spy;
-
-      return spy;
-    };
-
-    var suiteFactory = function(description) {
-      var suite = new j$.Suite({
-        env: self,
-        id: getNextSuiteId(),
-        description: description,
-        parentSuite: currentSuite,
-        queueRunner: queueRunnerFactory,
-        onStart: suiteStarted,
-        resultCallback: function(attrs) {
-          reporter.suiteDone(attrs);
-        }
-      });
-
-      runnableLookupTable[suite.id] = suite;
-      return suite;
-    };
-
-    this.describe = function(description, specDefinitions) {
-      var suite = suiteFactory(description);
-
-      var parentSuite = currentSuite;
-      parentSuite.addChild(suite);
-      currentSuite = suite;
-
-      var declarationError = null;
-      try {
-        specDefinitions.call(suite);
-      } catch (e) {
-        declarationError = e;
-      }
-
-      if (declarationError) {
-        this.it("encountered a declaration exception", function() {
-          throw declarationError;
-        });
-      }
-
-      currentSuite = parentSuite;
-
-      return suite;
-    };
-
-    this.xdescribe = function(description, specDefinitions) {
-      var suite = this.describe(description, specDefinitions);
-      suite.disable();
-      return suite;
-    };
-
-    var specFactory = function(description, fn, suite) {
-      totalSpecsDefined++;
-
-      var spec = new j$.Spec({
-        id: getNextSpecId(),
-        beforeFns: beforeFns(suite),
-        afterFns: afterFns(suite),
-        expectationFactory: expectationFactory,
-        exceptionFormatter: exceptionFormatter,
-        resultCallback: specResultCallback,
-        getSpecName: function(spec) {
-          return getSpecName(spec, suite);
-        },
-        onStart: specStarted,
-        description: description,
-        expectationResultFactory: expectationResultFactory,
-        queueRunnerFactory: queueRunnerFactory,
-        fn: fn,
-        timer: {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}
-      });
-
-      runnableLookupTable[spec.id] = spec;
-
-      if (!self.specFilter(spec)) {
-        spec.disable();
-      }
-
-      return spec;
-
-      function removeAllSpies() {
-        for (var i = 0; i < spies.length; i++) {
-          var spyEntry = spies[i];
-          spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue;
-        }
-        spies = [];
-      }
-
-      function specResultCallback(result) {
-        removeAllSpies();
-        j$.Expectation.resetMatchers();
-        customEqualityTesters = [];
-        currentSpec = null;
-        reporter.specDone(result);
-      }
-    };
-
-    var suiteStarted = function(suite) {
-      reporter.suiteStarted(suite.result);
-    };
-
-    this.it = function(description, fn) {
-      var spec = specFactory(description, fn, currentSuite);
-      currentSuite.addChild(spec);
-      return spec;
-    };
-
-    this.xit = function(description, fn) {
-      var spec = this.it(description, fn);
-      spec.pend();
-      return spec;
-    };
-
-    this.expect = function(actual) {
-      return currentSpec.expect(actual);
-    };
-
-    this.beforeEach = function(beforeEachFunction) {
-      currentSuite.beforeEach(beforeEachFunction);
-    };
-
-    this.afterEach = function(afterEachFunction) {
-      currentSuite.afterEach(afterEachFunction);
-    };
-
-    this.pending = function() {
-      throw j$.Spec.pendingSpecExceptionMessage;
-    };
-  }
-
-  return Env;
-};
-
-getJasmineRequireObj().JsApiReporter = function() {
-
-  var noopTimer = {
-    start: function(){},
-    elapsed: function(){ return 0; }
-  };
-
-  function JsApiReporter(options) {
-    var timer = options.timer || noopTimer,
-        status = "loaded";
-
-    this.started = false;
-    this.finished = false;
-
-    this.jasmineStarted = function() {
-      this.started = true;
-      status = 'started';
-      timer.start();
-    };
-
-    var executionTime;
-
-    this.jasmineDone = function() {
-      this.finished = true;
-      executionTime = timer.elapsed();
-      status = 'done';
-    };
-
-    this.status = function() {
-      return status;
-    };
-
-    var suites = {};
-
-    this.suiteStarted = function(result) {
-      storeSuite(result);
-    };
-
-    this.suiteDone = function(result) {
-      storeSuite(result);
-    };
-
-    function storeSuite(result) {
-      suites[result.id] = result;
-    }
-
-    this.suites = function() {
-      return suites;
-    };
-
-    var specs = [];
-    this.specStarted = function(result) { };
-
-    this.specDone = function(result) {
-      specs.push(result);
-    };
-
-    this.specResults = function(index, length) {
-      return specs.slice(index, index + length);
-    };
-
-    this.specs = function() {
-      return specs;
-    };
-
-    this.executionTime = function() {
-      return executionTime;
-    };
-
-  }
-
-  return JsApiReporter;
-};
-
-getJasmineRequireObj().Any = function() {
-
-  function Any(expectedObject) {
-    this.expectedObject = expectedObject;
-  }
-
-  Any.prototype.jasmineMatches = function(other) {
-    if (this.expectedObject == String) {
-      return typeof other == 'string' || other instanceof String;
-    }
-
-    if (this.expectedObject == Number) {
-      return typeof other == 'number' || other instanceof Number;
-    }
-
-    if (this.expectedObject == Function) {
-      return typeof other == 'function' || other instanceof Function;
-    }
-
-    if (this.expectedObject == Object) {
-      return typeof other == 'object';
-    }
-    
-    if (this.expectedObject == Boolean) {
-      return typeof other == 'boolean';
-    }
-
-    return other instanceof this.expectedObject;
-  };
-
-  Any.prototype.jasmineToString = function() {
-    return '<jasmine.any(' + this.expectedClass + ')>';
-  };
-
-  return Any;
-};
-
-getJasmineRequireObj().CallTracker = function() {
-
-  function CallTracker() {
-    var calls = [];
-
-    this.track = function(context) {
-      calls.push(context);
-    };
-
-    this.any = function() {
-      return !!calls.length;
-    };
-
-    this.count = function() {
-      return calls.length;
-    };
-
-    this.argsFor = function(index) {
-      var call = calls[index];
-      return call ? call.args : [];
-    };
-
-    this.all = function() {
-      return calls;
-    };
-
-    this.allArgs = function() {
-      var callArgs = [];
-      for(var i = 0; i < calls.length; i++){
-        callArgs.push(calls[i].args);
-      }
-
-      return callArgs;
-    };
-
-    this.first = function() {
-      return calls[0];
-    };
-
-    this.mostRecent = function() {
-      return calls[calls.length - 1];
-    };
-
-    this.reset = function() {
-      calls = [];
-    };
-  }
-
-  return CallTracker;
-};
-
-getJasmineRequireObj().Clock = function() {
-  function Clock(global, delayedFunctionScheduler) {
-    var self = this,
-      realTimingFunctions = {
-        setTimeout: global.setTimeout,
-        clearTimeout: global.clearTimeout,
-        setInterval: global.setInterval,
-        clearInterval: global.clearInterval
-      },
-      fakeTimingFunctions = {
-        setTimeout: setTimeout,
-        clearTimeout: clearTimeout,
-        setInterval: setInterval,
-        clearInterval: clearInterval
-      },
-      installed = false,
-      timer;
-
-    self.install = function() {
-      replace(global, fakeTimingFunctions);
-      timer = fakeTimingFunctions;
-      installed = true;
-    };
-
-    self.uninstall = function() {
-      delayedFunctionScheduler.reset();
-      replace(global, realTimingFunctions);
-      timer = realTimingFunctions;
-      installed = false;
-    };
-
-    self.setTimeout = function(fn, delay, params) {
-      if (legacyIE()) {
-        if (arguments.length > 2) {
-          throw new Error("IE < 9 cannot support extra params to setTimeout without a polyfill");
-        }
-        return timer.setTimeout(fn, delay);
-      }
-      return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]);
-    };
-
-    self.setInterval = function(fn, delay, params) {
-      if (legacyIE()) {
-        if (arguments.length > 2) {
-          throw new Error("IE < 9 cannot support extra params to setInterval without a polyfill");
-        }
-        return timer.setInterval(fn, delay);
-      }
-      return Function.prototype.apply.apply(timer.setInterval, [global, arguments]);
-    };
-
-    self.clearTimeout = function(id) {
-      return Function.prototype.call.apply(timer.clearTimeout, [global, id]);
-    };
-
-    self.clearInterval = function(id) {
-      return Function.prototype.call.apply(timer.clearInterval, [global, id]);
-    };
-
-    self.tick = function(millis) {
-      if (installed) {
-        delayedFunctionScheduler.tick(millis);
-      } else {
-        throw new Error("Mock clock is not installed, use jasmine.clock().install()");
-      }
-    };
-
-    return self;
-
-    function legacyIE() {
-      //if these methods are polyfilled, apply will be present
-      return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply;
-    }
-
-    function replace(dest, source) {
-      for (var prop in source) {
-        dest[prop] = source[prop];
-      }
-    }
-
-    function setTimeout(fn, delay) {
-      return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2));
-    }
-
-    function clearTimeout(id) {
-      return delayedFunctionScheduler.removeFunctionWithId(id);
-    }
-
-    function setInterval(fn, interval) {
-      return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true);
-    }
-
-    function clearInterval(id) {
-      return delayedFunctionScheduler.removeFunctionWithId(id);
-    }
-
-    function argSlice(argsObj, n) {
-      return Array.prototype.slice.call(argsObj, 2);
-    }
-  }
-
-  return Clock;
-};
-
-getJasmineRequireObj().DelayedFunctionScheduler = function() {
-  function DelayedFunctionScheduler() {
-    var self = this;
-    var scheduledLookup = [];
-    var scheduledFunctions = {};
-    var currentTime = 0;
-    var delayedFnCount = 0;
-
-    self.tick = function(millis) {
-      millis = millis || 0;
-      var endTime = currentTime + millis;
-
-      runScheduledFunctions(endTime);
-      currentTime = endTime;
-    };
-
-    self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) {
-      var f;
-      if (typeof(funcToCall) === 'string') {
-        /* jshint evil: true */
-        f = function() { return eval(funcToCall); };
-        /* jshint evil: false */
-      } else {
-        f = funcToCall;
-      }
-
-      millis = millis || 0;
-      timeoutKey = timeoutKey || ++delayedFnCount;
-      runAtMillis = runAtMillis || (currentTime + millis);
-
-      var funcToSchedule = {
-        runAtMillis: runAtMillis,
-        funcToCall: f,
-        recurring: recurring,
-        params: params,
-        timeoutKey: timeoutKey,
-        millis: millis
-      };
-
-      if (runAtMillis in scheduledFunctions) {
-        scheduledFunctions[runAtMillis].push(funcToSchedule);
-      } else {
-        scheduledFunctions[runAtMillis] = [funcToSchedule];
-        scheduledLookup.push(runAtMillis);
-        scheduledLookup.sort(function (a, b) {
-          return a - b;
-        });
-      }
-
-      return timeoutKey;
-    };
-
-    self.removeFunctionWithId = function(timeoutKey) {
-      for (var runAtMillis in scheduledFunctions) {
-        var funcs = scheduledFunctions[runAtMillis];
-        var i = indexOfFirstToPass(funcs, function (func) {
-          return func.timeoutKey === timeoutKey;
-        });
-
-        if (i > -1) {
-          if (funcs.length === 1) {
-            delete scheduledFunctions[runAtMillis];
-            deleteFromLookup(runAtMillis);
-          } else {
-            funcs.splice(i, 1);
-          }
-
-          // intervals get rescheduled when executed, so there's never more
-          // than a single scheduled function with a given timeoutKey
-          break;
-        }
-      }
-    };
-
-    self.reset = function() {
-      currentTime = 0;
-      scheduledLookup = [];
-      scheduledFunctions = {};
-      delayedFnCount = 0;
-    };
-
-    return self;
-
-    function indexOfFirstToPass(array, testFn) {
-      var index = -1;
-
-      for (var i = 0; i < array.length; ++i) {
-        if (testFn(array[i])) {
-          index = i;
-          break;
-        }
-      }
-
-      return index;
-    }
-
-    function deleteFromLookup(key) {
-      var value = Number(key);
-      var i = indexOfFirstToPass(scheduledLookup, function (millis) {
-        return millis === value;
-      });
-
-      if (i > -1) {
-        scheduledLookup.splice(i, 1);
-      }
-    }
-
-    function reschedule(scheduledFn) {
-      self.scheduleFunction(scheduledFn.funcToCall,
-        scheduledFn.millis,
-        scheduledFn.params,
-        true,
-        scheduledFn.timeoutKey,
-        scheduledFn.runAtMillis + scheduledFn.millis);
-    }
-
-    function runScheduledFunctions(endTime) {
-      if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) {
-        return;
-      }
-
-      do {
-        currentTime = scheduledLookup.shift();
-
-        var funcsToRun = scheduledFunctions[currentTime];
-        delete scheduledFunctions[currentTime];
-
-        for (var i = 0; i < funcsToRun.length; ++i) {
-          var funcToRun = funcsToRun[i];
-          funcToRun.funcToCall.apply(null, funcToRun.params || []);
-
-          if (funcToRun.recurring) {
-            reschedule(funcToRun);
-          }
-        }
-      } while (scheduledLookup.length > 0 &&
-              // checking first if we're out of time prevents setTimeout(0)
-              // scheduled in a funcToRun from forcing an extra iteration
-                 currentTime !== endTime  &&
-                 scheduledLookup[0] <= endTime);
-    }
-  }
-
-  return DelayedFunctionScheduler;
-};
-
-getJasmineRequireObj().ExceptionFormatter = function() {
-  function ExceptionFormatter() {
-    this.message = function(error) {
-      var message = error.name +
-        ': ' +
-        error.message;
-
-      if (error.fileName || error.sourceURL) {
-        message += " in " + (error.fileName || error.sourceURL);
-      }
-
-      if (error.line || error.lineNumber) {
-        message += " (line " + (error.line || error.lineNumber) + ")";
-      }
-
-      return message;
-    };
-
-    this.stack = function(error) {
-      return error ? error.stack : null;
-    };
-  }
-
-  return ExceptionFormatter;
-};
-
-getJasmineRequireObj().Expectation = function() {
-
-  var matchers = {};
-
-  function Expectation(options) {
-    this.util = options.util || { buildFailureMessage: function() {} };
-    this.customEqualityTesters = options.customEqualityTesters || [];
-    this.actual = options.actual;
-    this.addExpectationResult = options.addExpectationResult || function(){};
-    this.isNot = options.isNot;
-
-    for (var matcherName in matchers) {
-      this[matcherName] = matchers[matcherName];
-    }
-  }
-
-  Expectation.prototype.wrapCompare = function(name, matcherFactory) {
-    return function() {
-      var args = Array.prototype.slice.call(arguments, 0),
-        expected = args.slice(0),
-        message = "";
-
-      args.unshift(this.actual);
-
-      var matcher = matcherFactory(this.util, this.customEqualityTesters),
-          matcherCompare = matcher.compare;
-
-      function defaultNegativeCompare() {
-        var result = matcher.compare.apply(null, args);
-        result.pass = !result.pass;
-        return result;
-      }
-
-      if (this.isNot) {
-        matcherCompare = matcher.negativeCompare || defaultNegativeCompare;
-      }
-
-      var result = matcherCompare.apply(null, args);
-
-      if (!result.pass) {
-        if (!result.message) {
-          args.unshift(this.isNot);
-          args.unshift(name);
-          message = this.util.buildFailureMessage.apply(null, args);
-        } else {
-          message = result.message;
-        }
-      }
-
-      if (expected.length == 1) {
-        expected = expected[0];
-      }
-
-      // TODO: how many of these params are needed?
-      this.addExpectationResult(
-        result.pass,
-        {
-          matcherName: name,
-          passed: result.pass,
-          message: message,
-          actual: this.actual,
-          expected: expected // TODO: this may need to be arrayified/sliced
-        }
-      );
-    };
-  };
-
-  Expectation.addCoreMatchers = function(matchers) {
-    var prototype = Expectation.prototype;
-    for (var matcherName in matchers) {
-      var matcher = matchers[matcherName];
-      prototype[matcherName] = prototype.wrapCompare(matcherName, matcher);
-    }
-  };
-
-  Expectation.addMatchers = function(matchersToAdd) {
-    for (var name in matchersToAdd) {
-      var matcher = matchersToAdd[name];
-      matchers[name] = Expectation.prototype.wrapCompare(name, matcher);
-    }
-  };
-
-  Expectation.resetMatchers = function() {
-    for (var name in matchers) {
-      delete matchers[name];
-    }
-  };
-
-  Expectation.Factory = function(options) {
-    options = options || {};
-
-    var expect = new Expectation(options);
-
-    // TODO: this would be nice as its own Object - NegativeExpectation
-    // TODO: copy instead of mutate options
-    options.isNot = true;
-    expect.not = new Expectation(options);
-
-    return expect;
-  };
-
-  return Expectation;
-};
-
-//TODO: expectation result may make more sense as a presentation of an expectation.
-getJasmineRequireObj().buildExpectationResult = function() {
-  function buildExpectationResult(options) {
-    var messageFormatter = options.messageFormatter || function() {},
-      stackFormatter = options.stackFormatter || function() {};
-
-    return {
-      matcherName: options.matcherName,
-      expected: options.expected,
-      actual: options.actual,
-      message: message(),
-      stack: stack(),
-      passed: options.passed
-    };
-
-    function message() {
-      if (options.passed) {
-        return "Passed.";
-      } else if (options.message) {
-        return options.message;
-      } else if (options.error) {
-        return messageFormatter(options.error);
-      }
-      return "";
-    }
-
-    function stack() {
-      if (options.passed) {
-        return "";
-      }
-
-      var error = options.error;
-      if (!error) {
-        try {
-          throw new Error(message());
-        } catch (e) {
-          error = e;
-        }
-      }
-      return stackFormatter(error);
-    }
-  }
-
-  return buildExpectationResult;
-};
-
-getJasmineRequireObj().ObjectContaining = function(j$) {
-
-  function ObjectContaining(sample) {
-    this.sample = sample;
-  }
-
-  ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) {
-    if (typeof(this.sample) !== "object") { throw new Error("You must provide an object to objectContaining, not '"+this.sample+"'."); }
-
-    mismatchKeys = mismatchKeys || [];
-    mismatchValues = mismatchValues || [];
-
-    var hasKey = function(obj, keyName) {
-      return obj !== null && !j$.util.isUndefined(obj[keyName]);
-    };
-
-    for (var property in this.sample) {
-      if (!hasKey(other, property) && hasKey(this.sample, property)) {
-        mismatchKeys.push("expected has key '" + property + "', but missing from actual.");
-      }
-      else if (!j$.matchersUtil.equals(this.sample[property], other[property])) {
-        mismatchValues.push("'" + property + "' was '" + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + "' in actual, but was '" + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in expected.");
-      }
-    }
-
-    return (mismatchKeys.length === 0 && mismatchValues.length === 0);
-  };
-
-  ObjectContaining.prototype.jasmineToString = function() {
-    return "<jasmine.objectContaining(" + j$.pp(this.sample) + ")>";
-  };
-
-  return ObjectContaining;
-};
-
-getJasmineRequireObj().pp = function(j$) {
-
-  function PrettyPrinter() {
-    this.ppNestLevel_ = 0;
-  }
-
-  PrettyPrinter.prototype.format = function(value) {
-    this.ppNestLevel_++;
-    try {
-      if (j$.util.isUndefined(value)) {
-        this.emitScalar('undefined');
-      } else if (value === null) {
-        this.emitScalar('null');
-      } else if (value === j$.getGlobal()) {
-        this.emitScalar('<global>');
-      } else if (value.jasmineToString) {
-        this.emitScalar(value.jasmineToString());
-      } else if (typeof value === 'string') {
-        this.emitString(value);
-      } else if (j$.isSpy(value)) {
-        this.emitScalar("spy on " + value.and.identity());
-      } else if (value instanceof RegExp) {
-        this.emitScalar(value.toString());
-      } else if (typeof value === 'function') {
-        this.emitScalar('Function');
-      } else if (typeof value.nodeType === 'number') {
-        this.emitScalar('HTMLNode');
-      } else if (value instanceof Date) {
-        this.emitScalar('Date(' + value + ')');
-      } else if (value.__Jasmine_been_here_before__) {
-        this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');
-      } else if (j$.isArray_(value) || j$.isA_('Object', value)) {
-        value.__Jasmine_been_here_before__ = true;
-        if (j$.isArray_(value)) {
-          this.emitArray(value);
-        } else {
-          this.emitObject(value);
-        }
-        delete value.__Jasmine_been_here_before__;
-      } else {
-        this.emitScalar(value.toString());
-      }
-    } finally {
-      this.ppNestLevel_--;
-    }
-  };
-
-  PrettyPrinter.prototype.iterateObject = function(obj, fn) {
-    for (var property in obj) {
-      if (!obj.hasOwnProperty(property)) { continue; }
-      if (property == '__Jasmine_been_here_before__') { continue; }
-      fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) &&
-          obj.__lookupGetter__(property) !== null) : false);
-    }
-  };
-
-  PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_;
-  PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_;
-  PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_;
-  PrettyPrinter.prototype.emitString = j$.unimplementedMethod_;
-
-  function StringPrettyPrinter() {
-    PrettyPrinter.call(this);
-
-    this.string = '';
-  }
-
-  j$.util.inherit(StringPrettyPrinter, PrettyPrinter);
-
-  StringPrettyPrinter.prototype.emitScalar = function(value) {
-    this.append(value);
-  };
-
-  StringPrettyPrinter.prototype.emitString = function(value) {
-    this.append("'" + value + "'");
-  };
-
-  StringPrettyPrinter.prototype.emitArray = function(array) {
-    if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
-      this.append("Array");
-      return;
-    }
-
-    this.append('[ ');
-    for (var i = 0; i < array.length; i++) {
-      if (i > 0) {
-        this.append(', ');
-      }
-      this.format(array[i]);
-    }
-    this.append(' ]');
-  };
-
-  StringPrettyPrinter.prototype.emitObject = function(obj) {
-    if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {
-      this.append("Object");
-      return;
-    }
-
-    var self = this;
-    this.append('{ ');
-    var first = true;
-
-    this.iterateObject(obj, function(property, isGetter) {
-      if (first) {
-        first = false;
-      } else {
-        self.append(', ');
-      }
-
-      self.append(property);
-      self.append(' : ');
-      if (isGetter) {
-        self.append('<getter>');
-      } else {
-        self.format(obj[property]);
-      }
-    });
-
-    this.append(' }');
-  };
-
-  StringPrettyPrinter.prototype.append = function(value) {
-    this.string += value;
-  };
-
-  return function(value) {
-    var stringPrettyPrinter = new StringPrettyPrinter();
-    stringPrettyPrinter.format(value);
-    return stringPrettyPrinter.string;
-  };
-};
-
-getJasmineRequireObj().QueueRunner = function() {
-
-  function QueueRunner(attrs) {
-    this.fns = attrs.fns || [];
-    this.onComplete = attrs.onComplete || function() {};
-    this.clearStack = attrs.clearStack || function(fn) {fn();};
-    this.onException = attrs.onException || function() {};
-    this.catchException = attrs.catchException || function() { return true; };
-    this.userContext = {};
-  }
-
-  QueueRunner.prototype.execute = function() {
-    this.run(this.fns, 0);
-  };
-
-  QueueRunner.prototype.run = function(fns, recursiveIndex) {
-    var length = fns.length,
-        self = this,
-        iterativeIndex;
-
-    for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) {
-      var fn = fns[iterativeIndex];
-      if (fn.length > 0) {
-        return attemptAsync(fn);
-      } else {
-        attemptSync(fn);
-      }
-    }
-
-    var runnerDone = iterativeIndex >= length;
-
-    if (runnerDone) {
-      this.clearStack(this.onComplete);
-    }
-
-    function attemptSync(fn) {
-      try {
-        fn.call(self.userContext);
-      } catch (e) {
-        handleException(e);
-      }
-    }
-
-    function attemptAsync(fn) {
-      var next = function () { self.run(fns, iterativeIndex + 1); };
-
-      try {
-        fn.call(self.userContext, next);
-      } catch (e) {
-        handleException(e);
-        next();
-      }
-    }
-
-    function handleException(e) {
-      self.onException(e);
-      if (!self.catchException(e)) {
-        //TODO: set a var when we catch an exception and
-        //use a finally block to close the loop in a nice way..
-        throw e;
-      }
-    }
-  };
-
-  return QueueRunner;
-};
-
-getJasmineRequireObj().ReportDispatcher = function() {
-  function ReportDispatcher(methods) {
-
-    var dispatchedMethods = methods || [];
-
-    for (var i = 0; i < dispatchedMethods.length; i++) {
-      var method = dispatchedMethods[i];
-      this[method] = (function(m) {
-        return function() {
-          dispatch(m, arguments);
-        };
-      }(method));
-    }
-
-    var reporters = [];
-
-    this.addReporter = function(reporter) {
-      reporters.push(reporter);
-    };
-
-    return this;
-
-    function dispatch(method, args) {
-      for (var i = 0; i < reporters.length; i++) {
-        var reporter = reporters[i];
-        if (reporter[method]) {
-          reporter[method].apply(reporter, args);
-        }
-      }
-    }
-  }
-
-  return ReportDispatcher;
-};
-
-
-getJasmineRequireObj().SpyStrategy = function() {
-
-  function SpyStrategy(options) {
-    options = options || {};
-
-    var identity = options.name || "unknown",
-        originalFn = options.fn || function() {},
-        getSpy = options.getSpy || function() {},
-        plan = function() {};
-
-    this.identity = function() {
-      return identity;
-    };
-
-    this.exec = function() {
-      return plan.apply(this, arguments);
-    };
-
-    this.callThrough = function() {
-      plan = originalFn;
-      return getSpy();
-    };
-
-    this.returnValue = function(value) {
-      plan = function() {
-        return value;
-      };
-      return getSpy();
-    };
-
-    this.throwError = function(something) {
-      var error = (something instanceof Error) ? something : new Error(something);
-      plan = function() {
-        throw error;
-      };
-      return getSpy();
-    };
-
-    this.callFake = function(fn) {
-      plan = fn;
-      return getSpy();
-    };
-
-    this.stub = function(fn) {
-      plan = function() {};
-      return getSpy();
-    };
-  }
-
-  return SpyStrategy;
-};
-
-getJasmineRequireObj().Suite = function() {
-  function Suite(attrs) {
-    this.env = attrs.env;
-    this.id = attrs.id;
-    this.parentSuite = attrs.parentSuite;
-    this.description = attrs.description;
-    this.onStart = attrs.onStart || function() {};
-    this.resultCallback = attrs.resultCallback || function() {};
-    this.clearStack = attrs.clearStack || function(fn) {fn();};
-
-    this.beforeFns = [];
-    this.afterFns = [];
-    this.queueRunner = attrs.queueRunner || function() {};
-    this.disabled = false;
-
-    this.children = [];
-
-    this.result = {
-      id: this.id,
-      status: this.disabled ? 'disabled' : '',
-      description: this.description,
-      fullName: this.getFullName()
-    };
-  }
-
-  Suite.prototype.getFullName = function() {
-    var fullName = this.description;
-    for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
-      if (parentSuite.parentSuite) {
-        fullName = parentSuite.description + ' ' + fullName;
-      }
-    }
-    return fullName;
-  };
-
-  Suite.prototype.disable = function() {
-    this.disabled = true;
-  };
-
-  Suite.prototype.beforeEach = function(fn) {
-    this.beforeFns.unshift(fn);
-  };
-
-  Suite.prototype.afterEach = function(fn) {
-    this.afterFns.unshift(fn);
-  };
-
-  Suite.prototype.addChild = function(child) {
-    this.children.push(child);
-  };
-
-  Suite.prototype.execute = function(onComplete) {
-    var self = this;
-    if (this.disabled) {
-      complete();
-      return;
-    }
-
-    var allFns = [];
-
-    for (var i = 0; i < this.children.length; i++) {
-      allFns.push(wrapChildAsAsync(this.children[i]));
-    }
-
-    this.onStart(this);
-
-    this.queueRunner({
-      fns: allFns,
-      onComplete: complete
-    });
-
-    function complete() {
-      self.resultCallback(self.result);
-
-      if (onComplete) {
-        onComplete();
-      }
-    }
-
-    function wrapChildAsAsync(child) {
-      return function(done) { child.execute(done); };
-    }
-  };
-
-  return Suite;
-};
-
-if (typeof window == void 0 && typeof exports == "object") {
-  exports.Suite = jasmineRequire.Suite;
-}
-
-getJasmineRequireObj().Timer = function() {
-  function Timer(options) {
-    options = options || {};
-
-    var now = options.now || function() { return new Date().getTime(); },
-        startTime;
-
-    this.start = function() {
-      startTime = now();
-    };
-
-    this.elapsed = function() {
-      return now() - startTime;
-    };
-  }
-
-  return Timer;
-};
-
-getJasmineRequireObj().matchersUtil = function(j$) {
-  // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter?
-
-  return {
-    equals: function(a, b, customTesters) {
-      customTesters = customTesters || [];
-
-      return eq(a, b, [], [], customTesters);
-    },
-
-    contains: function(haystack, needle, customTesters) {
-      customTesters = customTesters || [];
-
-      if (Object.prototype.toString.apply(haystack) === "[object Array]") {
-        for (var i = 0; i < haystack.length; i++) {
-          if (eq(haystack[i], needle, [], [], customTesters)) {
-            return true;
-          }
-        }
-        return false;
-      }
-      return haystack.indexOf(needle) >= 0;
-    },
-
-    buildFailureMessage: function() {
-      var args = Array.prototype.slice.call(arguments, 0),
-        matcherName = args[0],
-        isNot = args[1],
-        actual = args[2],
-        expected = args.slice(3),
-        englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });
-
-      var message = "Expected " +
-        j$.pp(actual) +
-        (isNot ? " not " : " ") +
-        englishyPredicate;
-
-      if (expected.length > 0) {
-        for (var i = 0; i < expected.length; i++) {
-          if (i > 0) {
-            message += ",";
-          }
-          message += " " + j$.pp(expected[i]);
-        }
-      }
-
-      return message + ".";
-    }
-  };
-
-  // Equality function lovingly adapted from isEqual in
-  //   [Underscore](http://underscorejs.org)
-  function eq(a, b, aStack, bStack, customTesters) {
-    var result = true;
-
-    for (var i = 0; i < customTesters.length; i++) {
-      var customTesterResult = customTesters[i](a, b);
-      if (!j$.util.isUndefined(customTesterResult)) {
-        return customTesterResult;
-      }
-    }
-
-    if (a instanceof j$.Any) {
-      result = a.jasmineMatches(b);
-      if (result) {
-        return true;
-      }
-    }
-
-    if (b instanceof j$.Any) {
-      result = b.jasmineMatches(a);
-      if (result) {
-        return true;
-      }
-    }
-
-    if (b instanceof j$.ObjectContaining) {
-      result = b.jasmineMatches(a);
-      if (result) {
-        return true;
-      }
-    }
-
-    if (a instanceof Error && b instanceof Error) {
-      return a.message == b.message;
-    }
-
-    // Identical objects are equal. `0 === -0`, but they aren't identical.
-    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
-    if (a === b) { return a !== 0 || 1 / a == 1 / b; }
-    // A strict comparison is necessary because `null == undefined`.
-    if (a === null || b === null) { return a === b; }
-    var className = Object.prototype.toString.call(a);
-    if (className != Object.prototype.toString.call(b)) { return false; }
-    switch (className) {
-      // Strings, numbers, dates, and booleans are compared by value.
-      case '[object String]':
-        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
-        // equivalent to `new String("5")`.
-        return a == String(b);
-      case '[object Number]':
-        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
-        // other numeric values.
-        return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b);
-      case '[object Date]':
-      case '[object Boolean]':
-        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
-        // millisecond representations. Note that invalid dates with millisecond representations
-        // of `NaN` are not equivalent.
-        return +a == +b;
-      // RegExps are compared by their source patterns and flags.
-      case '[object RegExp]':
-        return a.source == b.source &&
-          a.global == b.global &&
-          a.multiline == b.multiline &&
-          a.ignoreCase == b.ignoreCase;
-    }
-    if (typeof a != 'object' || typeof b != 'object') { return false; }
-    // Assume equality for cyclic structures. The algorithm for detecting cyclic
-    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
-    var length = aStack.length;
-    while (length--) {
-      // Linear search. Performance is inversely proportional to the number of
-      // unique nested structures.
-      if (aStack[length] == a) { return bStack[length] == b; }
-    }
-    // Add the first object to the stack of traversed objects.
-    aStack.push(a);
-    bStack.push(b);
-    var size = 0;
-    // Recursively compare objects and arrays.
-    if (className == '[object Array]') {
-      // Compare array lengths to determine if a deep comparison is necessary.
-      size = a.length;
-      result = size == b.length;
-      if (result) {
-        // Deep compare the contents, ignoring non-numeric properties.
-        while (size--) {
-          if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) { break; }
-        }
-      }
-    } else {
-      // Objects with different constructors are not equivalent, but `Object`s
-      // from different frames are.
-      var aCtor = a.constructor, bCtor = b.constructor;
-      if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) &&
-        isFunction(bCtor) && (bCtor instanceof bCtor))) {
-        return false;
-      }
-      // Deep compare objects.
-      for (var key in a) {
-        if (has(a, key)) {
-          // Count the expected number of properties.
-          size++;
-          // Deep compare each member.
-          if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; }
-        }
-      }
-      // Ensure that both objects contain the same number of properties.
-      if (result) {
-        for (key in b) {
-          if (has(b, key) && !(size--)) { break; }
-        }
-        result = !size;
-      }
-    }
-    // Remove the first object from the stack of traversed objects.
-    aStack.pop();
-    bStack.pop();
-
-    return result;
-
-    function has(obj, key) {
-      return obj.hasOwnProperty(key);
-    }
-
-    function isFunction(obj) {
-      return typeof obj === 'function';
-    }
-  }
-};
-
-getJasmineRequireObj().toBe = function() {
-  function toBe() {
-    return {
-      compare: function(actual, expected) {
-        return {
-          pass: actual === expected
-        };
-      }
-    };
-  }
-
-  return toBe;
-};
-
-getJasmineRequireObj().toBeCloseTo = function() {
-
-  function toBeCloseTo() {
-    return {
-      compare: function(actual, expected, precision) {
-        if (precision !== 0) {
-          precision = precision || 2;
-        }
-
-        return {
-          pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2)
-        };
-      }
-    };
-  }
-
-  return toBeCloseTo;
-};
-
-getJasmineRequireObj().toBeDefined = function() {
-  function toBeDefined() {
-    return {
-      compare: function(actual) {
-        return {
-          pass: (void 0 !== actual)
-        };
-      }
-    };
-  }
-
-  return toBeDefined;
-};
-
-getJasmineRequireObj().toBeFalsy = function() {
-  function toBeFalsy() {
-    return {
-      compare: function(actual) {
-        return {
-          pass: !!!actual
-        };
-      }
-    };
-  }
-
-  return toBeFalsy;
-};
-
-getJasmineRequireObj().toBeGreaterThan = function() {
-
-  function toBeGreaterThan() {
-    return {
-      compare: function(actual, expected) {
-        return {
-          pass: actual > expected
-        };
-      }
-    };
-  }
-
-  return toBeGreaterThan;
-};
-
-
-getJasmineRequireObj().toBeLessThan = function() {
-  function toBeLessThan() {
-    return {
-
-      compare: function(actual, expected) {
-        return {
-          pass: actual < expected
-        };
-      }
-    };
-  }
-
-  return toBeLessThan;
-};
-getJasmineRequireObj().toBeNaN = function(j$) {
-
-  function toBeNaN() {
-    return {
-      compare: function(actual) {
-        var result = {
-          pass: (actual !== actual)
-        };
-
-        if (result.pass) {
-          result.message = "Expected actual not to be NaN.";
-        } else {
-          result.message = "Expected " + j$.pp(actual) + " to be NaN.";
-        }
-
-        return result;
-      }
-    };
-  }
-
-  return toBeNaN;
-};
-
-getJasmineRequireObj().toBeNull = function() {
-
-  function toBeNull() {
-    return {
-      compare: function(actual) {
-        return {
-          pass: actual === null
-        };
-      }
-    };
-  }
-
-  return toBeNull;
-};
-
-getJasmineRequireObj().toBeTruthy = function() {
-
-  function toBeTruthy() {
-    return {
-      compare: function(actual) {
-        return {
-          pass: !!actual
-        };
-      }
-    };
-  }
-
-  return toBeTruthy;
-};
-
-getJasmineRequireObj().toBeUndefined = function() {
-
-  function toBeUndefined() {
-    return {
-      compare: function(actual) {
-        return {
-          pass: void 0 === actual
-        };
-      }
-    };
-  }
-
-  return toBeUndefined;
-};
-
-getJasmineRequireObj().toContain = function() {
-  function toContain(util, customEqualityTesters) {
-    customEqualityTesters = customEqualityTesters || [];
-
-    return {
-      compare: function(actual, expected) {
-
-        return {
-          pass: util.contains(actual, expected, customEqualityTesters)
-        };
-      }
-    };
-  }
-
-  return toContain;
-};
-
-getJasmineRequireObj().toEqual = function() {
-
-  function toEqual(util, customEqualityTesters) {
-    customEqualityTesters = customEqualityTesters || [];
-
-    return {
-      compare: function(actual, expected) {
-        var result = {
-          pass: false
-        };
-
-        result.pass = util.equals(actual, expected, customEqualityTesters);
-
-        return result;
-      }
-    };
-  }
-
-  return toEqual;
-};
-
-getJasmineRequireObj().toHaveBeenCalled = function(j$) {
-
-  function toHaveBeenCalled() {
-    return {
-      compare: function(actual) {
-        var result = {};
-
-        if (!j$.isSpy(actual)) {
-          throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');
-        }
-
-        if (arguments.length > 1) {
-          throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith');
-        }
-
-        result.pass = actual.calls.any();
-
-        result.message = result.pass ?
-          "Expected spy " + actual.and.identity() + " not to have been called." :
-          "Expected spy " + actual.and.identity() + " to have been called.";
-
-        return result;
-      }
-    };
-  }
-
-  return toHaveBeenCalled;
-};
-
-getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
-
-  function toHaveBeenCalledWith(util) {
-    return {
-      compare: function() {
-        var args = Array.prototype.slice.call(arguments, 0),
-          actual = args[0],
-          expectedArgs = args.slice(1),
-          result = { pass: false };
-
-        if (!j$.isSpy(actual)) {
-          throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');
-        }
-
-        if (!actual.calls.any()) {
-          result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but it was never called.";
-          return result;
-        }
-
-        if (util.contains(actual.calls.allArgs(), expectedArgs)) {
-          result.pass = true;
-          result.message = "Expected spy " + actual.and.identity() + " not to have been called with " + j$.pp(expectedArgs) + " but it was.";
-        } else {
-          result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but actual calls were " + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + ".";
-        }
-
-        return result;
-      }
-    };
-  }
-
-  return toHaveBeenCalledWith;
-};
-
-getJasmineRequireObj().toMatch = function() {
-
-  function toMatch() {
-    return {
-      compare: function(actual, expected) {
-        var regexp = new RegExp(expected);
-
-        return {
-          pass: regexp.test(actual)
-        };
-      }
-    };
-  }
-
-  return toMatch;
-};
-
-getJasmineRequireObj().toThrow = function(j$) {
-
-  function toThrow(util) {
-    return {
-      compare: function(actual, expected) {
-        var result = { pass: false },
-          threw = false,
-          thrown;
-
-        if (typeof actual != "function") {
-          throw new Error("Actual is not a Function");
-        }
-
-        try {
-          actual();
-        } catch (e) {
-          threw = true;
-          thrown = e;
-        }
-
-        if (!threw) {
-          result.message = "Expected function to throw an exception.";
-          return result;
-        }
-
-        if (arguments.length == 1) {
-          result.pass = true;
-          result.message = "Expected function not to throw, but it threw " + j$.pp(thrown) + ".";
-
-          return result;
-        }
-
-        if (util.equals(thrown, expected)) {
-          result.pass = true;
-          result.message = "Expected function not to throw " + j$.pp(expected) + ".";
-        } else {
-          result.message = "Expected function to throw " + j$.pp(expected) + ", but it threw " +  j$.pp(thrown) + ".";
-        }
-
-        return result;
-      }
-    };
-  }
-
-  return toThrow;
-};
-
-getJasmineRequireObj().toThrowError = function(j$) {
-  function toThrowError (util) {
-    return {
-      compare: function(actual) {
-        var threw = false,
-          thrown,
-          errorType,
-          message,
-          regexp,
-          name,
-          constructorName;
-
-        if (typeof actual != "function") {
-          throw new Error("Actual is not a Function");
-        }
-
-        extractExpectedParams.apply(null, arguments);
-
-        try {
-          actual();
-        } catch (e) {
-          threw = true;
-          thrown = e;
-        }
-
-        if (!threw) {
-          return fail("Expected function to throw an Error.");
-        }
-
-        if (!(thrown instanceof Error)) {
-          return fail("Expected function to throw an Error, but it threw " + thrown + ".");
-        }
-
-        if (arguments.length == 1) {
-          return pass("Expected function not to throw an Error, but it threw " + fnNameFor(thrown) + ".");
-        }
-
-        if (errorType) {
-          name = fnNameFor(errorType);
-          constructorName = fnNameFor(thrown.constructor);
-        }
-
-        if (errorType && message) {
-          if (thrown.constructor == errorType && util.equals(thrown.message, message)) {
-            return pass("Expected function not to throw " + name + " with message \"" + message + "\".");
-          } else {
-            return fail("Expected function to throw " + name + " with message \"" + message +
-                        "\", but it threw " + constructorName + " with message \"" + thrown.message + "\".");
-          }
-        }
-
-        if (errorType && regexp) {
-          if (thrown.constructor == errorType && regexp.test(thrown.message)) {
-            return pass("Expected function not to throw " + name + " with message matching " + regexp + ".");
-          } else {
-            return fail("Expected function to throw " + name + " with message matching " + regexp +
-                        ", but it threw " + constructorName + " with message \"" + thrown.message + "\".");
-          }
-        }
-
-        if (errorType) {
-          if (thrown.constructor == errorType) {
-            return pass("Expected function not to throw " + name + ".");
-          } else {
-            return fail("Expected function to throw " + name + ", but it threw " + constructorName + ".");
-          }
-        }
-
-        if (message) {
-          if (thrown.message == message) {
-            return pass("Expected function not to throw an exception with message " + j$.pp(message) + ".");
-          } else {
-            return fail("Expected function to throw an exception with message " + j$.pp(message) +
-                        ", but it threw an exception with message " + j$.pp(thrown.message) + ".");
-          }
-        }
-
-        if (regexp) {
-          if (regexp.test(thrown.message)) {
-            return pass("Expected function not to throw an exception with a message matching " + j$.pp(regexp) + ".");
-          } else {
-            return fail("Expected function to throw an exception with a message matching " + j$.pp(regexp) +
-                        ", but it threw an exception with message " + j$.pp(thrown.message) + ".");
-          }
-        }
-
-        function fnNameFor(func) {
-            return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1];
-        }
-
-        function pass(notMessage) {
-          return {
-            pass: true,
-            message: notMessage
-          };
-        }
-
-        function fail(message) {
-          return {
-            pass: false,
-            message: message
-          };
-        }
-
-        function extractExpectedParams() {
-          if (arguments.length == 1) {
-            return;
-          }
-
-          if (arguments.length == 2) {
-            var expected = arguments[1];
-
-            if (expected instanceof RegExp) {
-              regexp = expected;
-            } else if (typeof expected == "string") {
-              message = expected;
-            } else if (checkForAnErrorType(expected)) {
-              errorType = expected;
-            }
-
-            if (!(errorType || message || regexp)) {
-              throw new Error("Expected is not an Error, string, or RegExp.");
-            }
-          } else {
-            if (checkForAnErrorType(arguments[1])) {
-              errorType = arguments[1];
-            } else {
-              throw new Error("Expected error type is not an Error.");
-            }
-
-            if (arguments[2] instanceof RegExp) {
-              regexp = arguments[2];
-            } else if (typeof arguments[2] == "string") {
-              message = arguments[2];
-            } else {
-              throw new Error("Expected error message is not a string or RegExp.");
-            }
-          }
-        }
-
-        function checkForAnErrorType(type) {
-          if (typeof type !== "function") {
-            return false;
-          }
-
-          var Surrogate = function() {};
-          Surrogate.prototype = type.prototype;
-          return (new Surrogate()) instanceof Error;
-        }
-      }
-    };
-  }
-
-  return toThrowError;
-};
-
-getJasmineRequireObj().version = function() {
-  return "2.0.0";
-};
+    this.env.setTimeout(function() {
+      self.execute(onComplete);
+    }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT);
+  }
+};
+
+jasmine.version_= {
+  "major": 1,
+  "minor": 3,
+  "build": 1,
+  "revision": 1354556913
+};
Index: tests/functional/spec/common.js
===================================================================
--- tests/functional/spec/common.js	(revision 2726)
+++ tests/functional/spec/common.js	(revision 2200)
@@ -5,6 +5,6 @@
 			dotclear.postsActionsHelper();
 			
-			spyOn(window, 'confirm').and.returnValue(false);
-			var submitCallback = jasmine.createSpy().and.returnValue(false);
+			spyOn(window, 'confirm').andReturn(false);
+			var submitCallback = jasmine.createSpy().andReturn(false);
 			$('#form-entries').submit(submitCallback);
 
@@ -19,6 +19,6 @@
 			dotclear.postsActionsHelper();
 			
-			spyOn(window, 'confirm').and.returnValue(false);
-			var submitCallback = jasmine.createSpy().and.returnValue(false);
+			spyOn(window, 'confirm').andReturn(false);
+			var submitCallback = jasmine.createSpy().andReturn(false);
 			$('#form-entries').submit(submitCallback);
 
@@ -31,6 +31,6 @@
 			dotclear.postsActionsHelper();
 			
-			spyOn(window, 'confirm').and.returnValue(false);
-			var submitCallback = jasmine.createSpy().and.returnValue(false);
+			spyOn(window, 'confirm').andReturn(false);
+			var submitCallback = jasmine.createSpy().andReturn(false);
 			$('#form-entries').submit(submitCallback);
 
@@ -46,6 +46,6 @@
 			dotclear.commentsActionsHelper();
 			
-			spyOn(window, 'confirm').and.returnValue(false);
-			var submitCallback = jasmine.createSpy().and.returnValue(false);
+			spyOn(window, 'confirm').andReturn(false);
+			var submitCallback = jasmine.createSpy().andReturn(false);
 			$('#form-comments').submit(submitCallback);
 
@@ -60,6 +60,6 @@
 			dotclear.commentsActionsHelper();
 			
-			spyOn(window, 'confirm').and.returnValue(false);
-			var submitCallback = jasmine.createSpy().and.returnValue(false);
+			spyOn(window, 'confirm').andReturn(false);
+			var submitCallback = jasmine.createSpy().andReturn(false);
 			$('#form-comments').submit(submitCallback);
 
@@ -72,6 +72,6 @@
 			dotclear.commentsActionsHelper();
 			
-			spyOn(window, 'confirm').and.returnValue(false);
-			var submitCallback = jasmine.createSpy().and.returnValue(false);
+			spyOn(window, 'confirm').andReturn(false);
+			var submitCallback = jasmine.createSpy().andReturn(false);
 			$('#form-comments').submit(submitCallback);
 
Index: tests/functional/spec/page_tabs.js
===================================================================
--- tests/functional/spec/page_tabs.js	(revision 2726)
+++ tests/functional/spec/page_tabs.js	(revision 2479)
@@ -51,5 +51,5 @@
 		loadStyleFixtures('default.css');
 
-		spyOn(jQuery.pageTabs, 'getLocationHash').and.returnValue('user-favorites');
+		spyOn(jQuery.pageTabs, 'getLocationHash').andReturn('user-favorites');
 		$.pageTabs();
 		expect($('#part-user-options')).not.toBeVisible();
@@ -63,5 +63,5 @@
 
 		var user_option_count_call = user_profile_count_call = user_favorites_count_call = 0;
-		spyOn(jQuery.fn, 'onetabload').and.callThrough();
+		spyOn(jQuery.fn, 'onetabload').andCallThrough();
 		$('#user-options').onetabload(function() {user_option_count_call++;});
 		$('#user-profile').onetabload(function() {user_profile_count_call++;});
@@ -82,5 +82,5 @@
 		loadStyleFixtures('default.css');
 		
-		spyOn(jQuery.fn, 'tabload').and.callThrough();
+		spyOn(jQuery.fn, 'tabload').andCallThrough();
 
 		var user_option_count_call = user_profile_count_call = user_favorites_count_call = 0;
@@ -124,5 +124,5 @@
 		// simulate back : window.history.back();
 		current_index--;
-		spyOn(jQuery.pageTabs, 'getLocationHash').and.returnValue(navigation[current_index]);
+		spyOn(jQuery.pageTabs, 'getLocationHash').andReturn(navigation[current_index]);
 		jQuery.event.trigger('hashchange');
 		
@@ -146,5 +146,5 @@
 		// simulate back : window.history.back();
 		current_index--;
-		spyOn(jQuery.pageTabs, 'getLocationHash').and.returnValue(navigation[current_index]);
+		spyOn(jQuery.pageTabs, 'getLocationHash').andReturn(navigation[current_index]);
 		jQuery.event.trigger('hashchange');
 
@@ -170,5 +170,5 @@
 		expect($('#part-user-favorites')).not.toBeVisible();
 
-		spyOn(jQuery.pageTabs, 'getLocationHash').and.returnValue(anchor_name);
+		spyOn(jQuery.pageTabs, 'getLocationHash').andReturn(anchor_name);
 		jQuery.event.trigger('hashchange');
 		expect($('#part-user-options')).not.toBeVisible();
@@ -181,5 +181,5 @@
 		loadStyleFixtures('default.css');
 
-		spyOn(jQuery.pageTabs, 'getLocationHash').and.returnValue('dummy');
+		spyOn(jQuery.pageTabs, 'getLocationHash').andReturn('dummy');
 		$.pageTabs();
 		expect($('#part-user-options')).toBeVisible();
Index: tests/functional/spec/users_actions.js
===================================================================
--- tests/functional/spec/users_actions.js	(revision 2726)
+++ tests/functional/spec/users_actions.js	(revision 2010)
@@ -13,5 +13,5 @@
 
 	it("Click contentadmin persmission must checked all associated permissions", function() {
-		loadFixtures('form_permissions.html');
+		loadFixtures('form_persmissions.html');
 		$('#permissions-form').updatePermissionsForm();
 		var permissions = ['usage','publish','delete'];
Index: hemes/berlin/_define.php
===================================================================
--- themes/berlin/_define.php	(revision 2640)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-# This file is part of Currywurst, a theme for Dotclear
-#
-# Copyright (c) Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-if (!defined('DC_RC_PATH')) { return; }
-
-$this->registerModule(
-	/* Name */				"Berlin",
-	/* Description*/		"Dotclear > 2.7 default theme",
-	/* Author */			"Dotclear Team",
-	/* Version */			'1.0',
-	/* Properties */		array(
-								'type' => 'theme',
-								'tplset' => 'currywurst'
-							)
-);
Index: hemes/berlin/config.rb
===================================================================
--- themes/berlin/config.rb	(revision 2640)
+++ 	(revision )
@@ -1,19 +1,0 @@
-# Require any additional compass plugins here.
-
-# Set this to the root of your project when deployed:
-http_path = "./"
-css_dir = "./"
-sass_dir = "scss"
-images_dir = "img"
-javascripts_dir = "scripts"
-
-# You can select your preferred output style here (can be overridden via the command line):
-# output_style = :expanded or :nested or :compact or :compressed
-# To enable relative paths to assets via compass helper functions. Uncomment:
-# relative_assets = true
-# To disable debugging comments that display the original location of your selectors. Uncomment:
-output_style = :nested
-environment = :development
-line_comments = false
-
-Sass::Script::Number.precision = 7
Index: hemes/berlin/ie.css
===================================================================
--- themes/berlin/ie.css	(revision 2640)
+++ 	(revision )
@@ -1,5 +1,0 @@
-/* Welcome to Compass. Use this file to write IE specific override styles.
- * Import this file using the following HTML or equivalent:
- * <!--[if IE]>
- *   <link href="/stylesheets/ie.css" media="screen, projection" rel="stylesheet" type="text/css" />
- * <![endif]--> */
Index: hemes/berlin/img/icon_attachments.svg
===================================================================
--- themes/berlin/img/icon_attachments.svg	(revision 2640)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="18px" height="32px" viewBox="0 0 18 32" overflow="visible" enable-background="new 0 0 18 32"
-	 xml:space="preserve">
-<defs>
-</defs>
-<path fill="#999999" d="M11.561,0c0.842,1.245,1.376,2.453,1.38,3.593l0.03,16.824c-0.003,1.58-0.475,2.816-1.413,3.715
-	c-0.687,0.657-1.533,0.974-2.542,0.957c-1.01-0.023-1.833-0.37-2.478-1.043c-0.884-0.923-1.324-2.192-1.319-3.795L5.517,6.455
-	c0.01-0.35,0.139-0.646,0.392-0.89c0.252-0.241,0.562-0.36,0.926-0.351C7.203,5.22,7.505,5.351,7.749,5.606
-	C7.99,5.859,8.109,6.16,8.1,6.512L7.803,20.309c-0.019,0.846,0.167,1.471,0.553,1.874c0.198,0.202,0.433,0.312,0.705,0.312
-	c0.27-0.002,0.502-0.096,0.695-0.281c0.404-0.391,0.616-1.003,0.629-1.854l-0.03-16.779c0.013-0.408-0.17-0.951-0.542-1.334H3.2
-	C2.812,2.613,2.613,2.988,2.606,3.371L2.583,23.633c-0.003,1.551,0.509,2.862,1.539,3.934c1.127,1.179,2.726,1.786,4.8,1.837
-	c2.075,0.04,3.7-0.5,4.881-1.626c0.486-0.471,0.894-1.062,1.221-1.772c0.319-0.709,0.475-1.4,0.455-2.069V7.5
-	c0.006-0.378,0.052-0.685,0.293-0.911c0.252-0.245,0.562-0.36,0.923-0.354c0.366,0.009,0.673,0.138,0.91,0.391
-	c0.263,0.268,0.474,0.578,0.461,0.93v16.435c0.006,1.017-0.212,2.041-0.649,3.063c-0.438,1.016-1.037,1.89-1.794,2.624
-	c-1.674,1.598-3.91,2.367-6.725,2.318c-2.807-0.056-5.015-0.916-6.613-2.587c-1.53-1.597-2.289-3.54-2.284-5.837V3.313
-	C0.026,2.203,0.503,1.22,1.397,0H11.561z"/>
-</svg>
Index: hemes/berlin/img/icon_close.svg
===================================================================
--- themes/berlin/img/icon_close.svg	(revision 2640)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="16px"
-	 height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
-<g id="Calque_1" display="none">
-	<g display="inline">
-		<path fill="#FFFFFF" d="M16,0v3H0V0H16z M16,6.5v3H0v-3H16z M16,13v3H0v-3H16z"/>
-	</g>
-</g>
-<g id="Calque_2">
-	<g>
-		<path fill="#FFFFFF" d="M1.3,3.4l2.1-2.1l11.3,11.3l-2.1,2.1L1.3,3.4z"/>
-	</g>
-	<rect x="6.5" y="0" transform="matrix(0.7071 0.7071 -0.7071 0.7071 7.9999 -3.3135)" fill="#FFFFFF" width="3" height="16"/>
-</g>
-</svg>
Index: hemes/berlin/img/icon_feed.svg
===================================================================
--- themes/berlin/img/icon_feed.svg	(revision 2640)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" overflow="visible" enable-background="new 0 0 16 16"
-	 xml:space="preserve">
-<defs>
-</defs>
-<path fill="#676E78" d="M13,0H3C1.343,0,0,1.343,0,3v10c0,1.657,1.343,3,3,3h10c1.657,0,3-1.343,3-3V3C16,1.343,14.657,0,13,0z
-	 M4.315,12.977c-0.719,0-1.303-0.58-1.303-1.299c0-0.714,0.584-1.301,1.303-1.301c0.721,0,1.304,0.587,1.305,1.301
-	C5.62,12.396,5.037,12.977,4.315,12.977z M7.589,12.988c0-1.228-0.477-2.381-1.341-3.243C5.384,8.879,4.235,8.401,3.014,8.401V6.525
-	c3.561,0,6.46,2.899,6.46,6.463H7.589z M10.918,12.986c0-4.361-3.545-7.91-7.902-7.91V3.2c5.394,0,9.784,4.392,9.784,9.786H10.918z"
-	/>
-</svg>
Index: hemes/berlin/img/icon_hamburger.svg
===================================================================
--- themes/berlin/img/icon_hamburger.svg	(revision 2640)
+++ 	(revision )
@@ -1,18 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="16px"
-	 height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
-<g id="Calque_1">
-	<g>
-		<path fill="#FFFFFF" d="M16,0v3H0V0H16z M16,6.5v3H0v-3H16z M16,13v3H0v-3H16z"/>
-	</g>
-</g>
-<g id="Calque_2" display="none">
-	<g display="inline">
-		<path fill="#FFFFFF" d="M1.3,3.4l2.1-2.1l11.3,11.3l-2.1,2.1L1.3,3.4z"/>
-	</g>
-	
-		<rect x="6.5" y="0" transform="matrix(0.7071 0.7071 -0.7071 0.7071 7.9999 -3.3135)" display="inline" fill="#FFFFFF" width="3" height="16"/>
-</g>
-</svg>
Index: hemes/berlin/img/icon_open-sidebar.svg
===================================================================
--- themes/berlin/img/icon_open-sidebar.svg	(revision 2640)
+++ 	(revision )
@@ -1,18 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="16px"
-	 height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
-<g id="Calque_1">
-	<g>
-		<path fill="#808080" d="M0,0h3v16H0V0z M6.5,0h3v16h-3V0z M13,0h3v16h-3V0z"/>
-	</g>
-</g>
-<g id="Calque_2" display="none">
-	<g display="inline">
-		<path fill="#FFFFFF" d="M1.3,3.4l2.1-2.1l11.3,11.3l-2.1,2.1L1.3,3.4z"/>
-	</g>
-	
-		<rect x="6.5" y="0" transform="matrix(0.7071 0.7071 -0.7071 0.7071 7.9999 -3.3135)" display="inline" fill="#FFFFFF" width="3" height="16"/>
-</g>
-</svg>
Index: hemes/berlin/locales/en/main.po
===================================================================
--- themes/berlin/locales/en/main.po	(revision 2640)
+++ 	(revision )
@@ -1,5 +1,0 @@
-msgid "toDay"
-msgstr "to"
-
-msgid "FromDay"
-msgstr "From"
Index: hemes/berlin/locales/es/main.po
===================================================================
--- themes/berlin/locales/es/main.po	(revision 2640)
+++ 	(revision )
@@ -1,41 +1,0 @@
-msgid "Additionnal style directives"
-msgstr "Instrucciones CSS adicionales"
-
-msgid "reactions"
-msgstr "reacciones"
-
-msgid "Add ping"
-msgstr "Agregar un retroenlace"
-
-msgid "Suggestions:"
-msgstr "Sugerencias:"
-
-msgid "Go to homepage"
-msgstr "Regresar al inicio"
-
-msgid "Use search form"
-msgstr "Buscar"
-
-msgid "Explore archives"
-msgstr "Explorar los archivos"
-
-msgid "toDay"
-msgstr "al"
-
-msgid "FromDay"
-msgstr "Del"
-
-msgid "From"
-msgstr "Del"
-
-msgid "By category"
-msgstr "Por categoría"
-
-msgid "By date"
-msgstr "Por fecha"
-
-msgid "By tag"
-msgstr "Por tag"
-
-msgid "URL you've tried has typos, or the page has been deleted or moved."
-msgstr "Su URL está equivocada o la página fue borrada o desplazada."
Index: hemes/berlin/locales/fr/main.po
===================================================================
--- themes/berlin/locales/fr/main.po	(revision 2640)
+++ 	(revision )
@@ -1,56 +1,0 @@
-msgid "Additionnal style directives"
-msgstr "Directives CSS supplémentaires"
-
-msgid "reactions"
-msgstr "réactions"
-
-msgid "no reactions"
-msgstr "pas de réaction"
-
-msgid "one reaction"
-msgstr "une réaction"
-
-msgid "%s reactions"
-msgstr "%s réactions"
-
-msgid "Add ping"
-msgstr "Ajouter un rétrolien"
-
-msgid "Suggestions:"
-msgstr "Suggestions :"
-
-msgid "Go to homepage"
-msgstr "Aller à l'accueil"
-
-msgid "Use search form"
-msgstr "Faire une recherche"
-
-msgid "Explore archives"
-msgstr "Explorer les archives"
-
-msgid "toDay"
-msgstr "au"
-
-msgid "FromDay"
-msgstr "Du"
-
-msgid "From"
-msgstr "De"
-
-msgid "By category"
-msgstr "Par catégorie"
-
-msgid "By date"
-msgstr "Par date"
-
-msgid "By tag"
-msgstr "Par tag"
-
-msgid "URL you've tried has typos, or the page has been deleted or moved."
-msgstr "L'adresse URL est erronée ou bien la page a été supprimée ou déplacée."
-
-msgid "Preview"
-msgstr "Prévisualiser"
-
-msgid "Send"
-msgstr "Envoyer"
Index: hemes/berlin/print.css
===================================================================
--- themes/berlin/print.css	(revision 2640)
+++ 	(revision )
@@ -1,3 +1,0 @@
-/* Welcome to Compass. Use this file to define print styles.
- * Import this file using the following HTML or equivalent:
- * <link href="/stylesheets/print.css" media="print" rel="stylesheet" type="text/css" /> */
Index: hemes/berlin/scripts/boxsizing.htc
===================================================================
--- themes/berlin/scripts/boxsizing.htc	(revision 2640)
+++ 	(revision )
@@ -1,504 +1,0 @@
-/**
-* box-sizing Polyfill
-* 
-* A polyfill for box-sizing: border-box for IE6 & IE7.
-* 
-* JScript
-* 
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Lesser General Public License as published 
-* by the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-* 
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Lesser General Public License for more details.
-* 
-* See <http://www.gnu.org/licenses/lgpl-3.0.txt>
-* 
-* @category  JScript 
-* @package   box-sizing-polyfill
-* @author    Christian Schepp Schaefer <schaepp@gmx.de> <http://twitter.com/derSchepp>
-* @copyright 2012 Christian Schepp Schaefer
-* @license   http://www.gnu.org/copyleft/lesser.html The GNU LESSER GENERAL PUBLIC LICENSE, Version 3.0
-* @link      http://github.com/Schepp/box-sizing-polyfill 
-*
-* PREFACE:
-*
-* This box-sizing polyfill is based on previous work done by Erik Arvidsson, 
-* which he published in 2002 on http://webfx.eae.net/dhtml/boxsizing/boxsizing.html.
-*
-* USAGE:
-* 	
-* Add the behavior/HTC after every `box-sizing: border-box;` that you assign:
-* 
-* box-sizing: border-box;
-* *behavior: url(/scripts/boxsizing.htc);`
-* 
-* Prefix the `behavior` property with a star, like seen above, so it will only be seen by 
-* IE6 & IE7, not by IE8+ who already implement box-sizing.
-*
-* The URL to the HTC file must be relative to your HTML(!) document, not relative to your CSS.
-* That's why I'd advise you to use absolute paths like in the example.
-*
-*/
-<component lightWeight="true">
-<attach event="onpropertychange" onevent="checkPropertyChange()" />
-<attach event="ondetach" onevent="restore()" />
-<attach event="onresize" for="window" onevent="update()" />
-<script type="text/javascript">
-//<![CDATA[
-
-var viewportwidth = (typeof window.innerWidth != 'undefined' ? window.innerWidth : element.document.documentElement.clientWidth);
-
-// Shortcut for the document object
-var doc = element.document;
-
-// Buffer for multiple resize events
-var resizetimeout = null;
-
-// Don't apply box-sizing to certain elements
-var apply = false;
-switch(element.nodeName){
-	case '#comment':
-	case 'HTML':
-	case 'HEAD':
-	case 'TITLE':
-	case 'SCRIPT':
-	case 'STYLE':
-	case 'LINK':
-	case 'META':
-	break;
-			
-	default:
-		apply = true;
-	break;
-}
-
-/*
-* update gets called during resize events, then waits until there are no further resize events, and finally triggers a recalculation
-*/
-function update(){
-	if(resizetimeout !== null){
-		window.clearTimeout(resizetimeout);
-	}
-	resizetimeout = window.setTimeout(function(){
-		try{
-			restore();
-			init();
-		}
-		catch(e){}
-		resizetimeout = null;
-	},100);
-}
-
-/*
-* restore gets called when the behavior is being detached (see event binding at the top),
-* resets everything like it was before applying the behavior
-*/
-function restore(){
-	if(apply){
-		try{
-			element.runtimeStyle.removeAttribute("width");
-			element.runtimeStyle.removeAttribute("height");
-		}
-		catch(e){}
-	}
-}
-
-/*
-* init gets called once at the start and then never again, 
-* triggers box-sizing calculations and updates width and height
-*/
-function init(){
-	if(apply){
-		updateBorderBoxWidth();
-		updateBorderBoxHeight();
-	}
-}
-
-/*
-* checkPropertyChange gets called as soon as an element property changes 
-* (see event binding at the top), it then checks if any property influencing its 
-* dimensions was changed and if yes recalculates width and height 
-*/
-function checkPropertyChange(){
-	if(apply){
-		var pn = event.propertyName;
-		if(pn === "style.boxSizing" && element.style.boxSizing === ""){
-			element.style.removeAttribute("boxSizing");
-			element.runtimeStyle.removeAttribute("boxSizing");
-			element.runtimeStyle.removeAttribute("width");
-			element.runtimeStyle.removeAttribute("height");
-		}
-		switch (pn){
-			case "style.width":
-			case "style.minWidth":
-			case "style.maxWidth":
-			case "style.borderLeftWidth":
-			case "style.borderLeftStyle":
-			case "style.borderRightWidth":
-			case "style.borderRightStyle":
-			case "style.paddingLeft":
-			case "style.paddingRight":
-				updateBorderBoxWidth();
-			break;
-		
-			case "style.height":
-			case "style.minHeight":
-			case "style.maxHeight":
-			case "style.borderTopWidth":
-			case "style.borderTopStyle":
-			case "style.borderBottomWidth":
-			case "style.borderBottomStyle":
-			case "style.paddingTop":
-			case "style.paddingBottom":
-				updateBorderBoxHeight();
-			break;
-		
-			case "className":
-			case "style.boxSizing":
-				updateBorderBoxWidth();
-				updateBorderBoxHeight();
-			break;
-		}
-	}
-}
-
-/* 
- * Helper function, taken from Dean Edward's IE7 framework,
- * added by Schepp on 12.06.2010.
- * http://code.google.com/p/ie7-js/
- *
- * Allows us to convert from relative to pixel-values.
- */
-function getPixelValue(value){
-	var PIXEL = /^\d+(px)?$/i;
-	if (PIXEL.test(value)) return parseInt(value);
-	var style = element.style.left;
-	var runtimeStyle = element.runtimeStyle.left;
-	element.runtimeStyle.left = element.currentStyle.left;
-	element.style.left = value || 0;
-	value = parseInt(element.style.pixelLeft);
-	element.style.left = style;
-	element.runtimeStyle.left = runtimeStyle;
-	
-	return value;
-}
-
-function getPixelWidth(object, value){
-	// For Pixel Values
-	var PIXEL = /^\d+(px)?$/i;
-	if (PIXEL.test(value)) return parseInt(value);
-	
-	// For Percentage Values
-	var PERCENT = /^[\d\.]+%$/i;
-	if (PERCENT.test(value)){
-		try{
-			var parentPaddingLeft = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingLeft);
-			var parentPaddingRight = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingRight);
-			var parentBorderLeft = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderLeft);
-			var parentBorderRight = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderRight);
-			
-			//var parentWidth = getPixelWidth(object.parentElement,(object.parentElement.currentStyle.width != "auto" ? object.parentElement.currentStyle.width : "100%"));
-			var parentWidth = object.parentElement.offsetWidth - parentPaddingLeft - parentPaddingRight - parentBorderLeft - parentBorderRight;
-			var value = (parseFloat(value) / 100) * parentWidth;
-		}
-		catch(e){
-			var value = (parseFloat(value) / 100) * element.document.documentElement.clientWidth;
-		}
-		return parseInt(value);
-	}
-	
-	// For EM Values
-	var style = object.style.left;
-	var runtimeStyle = object.runtimeStyle.left;
-	object.runtimeStyle.left = object.currentStyle.left;
-	object.style.left = value || 0;
-	value = parseInt(object.style.pixelLeft);
-	object.style.left = style;
-	object.runtimeStyle.left = runtimeStyle;
-	
-	return value;
-}
-
-function getPixelHeight(object, value){
-	// For Pixel Values
-	var PIXEL = /^\d+(px)?$/i;
-	if (PIXEL.test(value)) return parseInt(value);
-	
-	// For Percentage Values
-	var PERCENT = /^[\d\.]+%$/i;
-	if (PERCENT.test(value)){
-		try{
-			if(object.parentElement.currentStyle.height != "auto"){
-				switch(object.parentElement.nodeName){
-					default:
-						if(object.parentElement.currentStyle.height !== "auto"){
-							var parentPaddingTop = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingTop);
-							var parentPaddingBottom = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingBottom);
-							var parentBorderTop = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderTop);
-							var parentBorderBottom = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderBottom);
-							
-							var parentHeight = object.parentElement.offsetHeight - parentPaddingTop - parentPaddingBottom - parentBorderTop - parentBorderBottom;
-							//var parentHeight = getPixelHeight(object.parentElement,object.parentElement.currentStyle.height);
-
-							value = (parseFloat(value) / 100) * parentHeight;
-						}
-						else {
-							value = "auto";
-						}
-					break;
-					
-					case 'HTML':
-						parentHeight = element.document.documentElement.clientHeight;
-						if(parentHeight !== "auto"){
-							value = (parseFloat(value) / 100) * parentHeight;
-						}
-						else {
-							value = "auto";
-						}
-					break;
-				}
-				if(value !== "auto") value = parseInt(value);
-			}
-			else {
-				value = "auto";
-			}
-		}
-		catch(e){
-			value = "auto";
-		}
-		return value;
-	}
-	
-	// For EM Values
-	var style = object.style.left;
-	var runtimeStyle = object.runtimeStyle.left;
-	object.runtimeStyle.left = object.currentStyle.left;
-	object.style.left = value || 0;
-	value = parseInt(object.style.pixelLeft);
-	object.style.left = style;
-	object.runtimeStyle.left = runtimeStyle;
-	
-	return value;
-}
-
-
-/*
- * getBorderWidth & friends
- * Border width getters
- */
-function getBorderWidth(sSide){
-	if(element.currentStyle["border" + sSide + "Style"] == "none"){
-		return 0;
-	}
-	var n = getPixelValue(element.currentStyle["border" + sSide + "Width"]);
-	return n || 0;
-}
-function getBorderLeftWidth() { return getBorderWidth("Left"); }
-function getBorderRightWidth() { return getBorderWidth("Right"); }
-function getBorderTopWidth() { return getBorderWidth("Top"); }
-function getBorderBottomWidth() { return getBorderWidth("Bottom"); }
-
-
-/*
- * getPadding & friends
- * Padding width getters
- */
-function getPadding(sSide) {
-	var n = getPixelValue(element.currentStyle["padding" + sSide]);
-	return n || 0;
-}
-function getPaddingLeft() { return getPadding("Left"); }
-function getPaddingRight() { return getPadding("Right"); }
-function getPaddingTop() { return getPadding("Top"); }
-function getPaddingBottom() { return getPadding("Bottom"); }
-
-
-
-/*
- * getBoxSizing
- * Get the box-sizing value for the current element
- */
-function getBoxSizing(){
-	var s = element.style;
-	var cs = element.currentStyle
-	if(typeof s.boxSizing != "undefined" && s.boxSizing != ""){
-		return s.boxSizing;
-	}
-	if(typeof s["box-sizing"] != "undefined" && s["box-sizing"] != ""){
-		return s["box-sizing"];
-	}
-	if(typeof cs.boxSizing != "undefined" && cs.boxSizing != ""){
-		return cs.boxSizing;
-	}
-	if(typeof cs["box-sizing"] != "undefined" && cs["box-sizing"] != ""){
-		return cs["box-sizing"];
-	}
-	return getDocumentBoxSizing();
-}
-
-
-/*
- * getDocumentBoxSizing
- * Get the default document box sizing (check for quirks mode)
- */
-function getDocumentBoxSizing(){
-	if(doc.compatMode === null || doc.compatMode === "BackCompat"){
-		return "border-box";
-	}
-	return "content-box"
-}
-
-
-/*
- * setBorderBoxWidth & friends
- * Width and height setters
- */
-function setBorderBoxWidth(n){
-	element.runtimeStyle.width = Math.max(0, n - getBorderLeftWidth() -
-		getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
-}
-function setBorderBoxMinWidth(n){
-	element.runtimeStyle.minWidth = Math.max(0, n - getBorderLeftWidth() -
-		getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
-}
-function setBorderBoxMaxWidth(n){
-	element.runtimeStyle.maxWidth = Math.max(0, n - getBorderLeftWidth() -
-		getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
-}
-function setBorderBoxHeight(n){
-	element.runtimeStyle.height = Math.max(0, n - getBorderTopWidth() -
-		getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
-}
-function setBorderBoxMinHeight(n){
-	element.runtimeStyle.minHeight = Math.max(0, n - getBorderTopWidth() -
-		getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
-}
-function setBorderBoxMaxHeight(n){
-	element.runtimeStyle.maxHeight = Math.max(0, n - getBorderTopWidth() -
-		getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
-}
-function setContentBoxWidth(n){
-	element.runtimeStyle.width = Math.max(0, n + getBorderLeftWidth() +
-		getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
-}
-function setContentBoxMinWidth(n){
-	element.runtimeStyle.minWidth = Math.max(0, n + getBorderLeftWidth() +
-		getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
-}
-function setContentBoxMaxWidth(n){
-	element.runtimeStyle.maxWidth = Math.max(0, n + getBorderLeftWidth() +
-		getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
-}
-function setContentBoxHeight(n){
-	element.runtimeStyle.height = Math.max(0, n + getBorderTopWidth() +
-		getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
-}
-function setContentBoxMinHeight(n){
-	element.runtimeStyle.minHeight = Math.max(0, n + getBorderTopWidth() +
-		getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
-}
-function setContentBoxMaxHeight(n){
-	element.runtimeStyle.maxHeight = Math.max(0, n + getBorderTopWidth() +
-		getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
-}
-
-
-/*
- * updateBorderBoxWidth & updateBorderBoxHeight
- * 
- */
-function updateBorderBoxWidth() {
-	if(getDocumentBoxSizing() == getBoxSizing()){
-		return;
-	}
-	
-	var csw = element.currentStyle.width;
-	if(csw != "auto"){
-		csw = getPixelWidth(element,csw);
-		if(getBoxSizing() == "border-box"){
-			setBorderBoxWidth(parseInt(csw));
-		}
-		else{
-			setContentBoxWidth(parseInt(csw));
-		}
-	}
-
-	csw = element.currentStyle.minWidth;
-	if(csw != "none"){
-		csw = getPixelWidth(element,csw);
-		if(getBoxSizing() == "border-box"){
-			setBorderBoxMinWidth(parseInt(csw));
-		}
-		else{
-			setContentBoxMinWidth(parseInt(csw));
-		}
-	}
-
-	csw = element.currentStyle.maxWidth;
-	if(csw != "none"){
-		csw = getPixelWidth(element,csw);
-		if(getBoxSizing() == "border-box"){
-			setBorderBoxMaxWidth(parseInt(csw));
-		}
-		else{
-			setContentBoxMaxWidth(parseInt(csw));
-		}
-	}
-}
-
-function updateBorderBoxHeight() {
-	if(getDocumentBoxSizing() == getBoxSizing()){
-		return;
-	}
-	
-	var csh = element.currentStyle.height;
-	if(csh != "auto"){
-		csh = getPixelHeight(element,csh);
-		if(csh !== "auto"){
-			if(getBoxSizing() == "border-box"){
-				setBorderBoxHeight(parseInt(csh));
-			}
-			else{
-				setContentBoxHeight(parseInt(csh));
-			}
-		}
-	}
-
-	csh = element.currentStyle.minHeight;
-	if(csh != "none"){
-		csh = getPixelHeight(element,csh);
-		if(csh !== "none"){
-			if(getBoxSizing() == "border-box"){
-				setBorderBoxMinHeight(parseInt(csh));
-			}
-			else{
-				setContentBoxMinHeight(parseInt(csh));
-			}
-		}
-	}
-
-	csh = element.currentStyle.maxHeight;
-	if(csh != "none"){
-		csh = getPixelHeight(element,csh);
-		if(csh !== "none"){
-			if(getBoxSizing() == "border-box"){
-				setBorderBoxMaxHeight(parseInt(csh));
-			}
-			else{
-				setContentBoxMaxHeight(parseInt(csh));
-			}
-		}
-	}
-}
-
-
-// Run the calculations
-init();
-
-//]]>
-</script>
-</component>
Index: hemes/berlin/scss/ie.scss
===================================================================
--- themes/berlin/scss/ie.scss	(revision 2640)
+++ 	(revision )
@@ -1,5 +1,0 @@
-/* Welcome to Compass. Use this file to write IE specific override styles.
- * Import this file using the following HTML or equivalent:
- * <!--[if IE]>
- *   <link href="/stylesheets/ie.css" media="screen, projection" rel="stylesheet" type="text/css" />
- * <![endif]--> */
Index: hemes/berlin/scss/init/_config.scss
===================================================================
--- themes/berlin/scss/init/_config.scss	(revision 2640)
+++ 	(revision )
@@ -1,89 +1,0 @@
-// ----------------- LIBRAIRIES ------------------- //
-@import "compass";                    // gem
-@import "libs/scut";
-//@import "libs/zen-grids/background";
-//@import "libs/zen-grids/flow";
-@import "libs/zen-grids/grids";
-//@import "libs/sass-mq-master/_mq";
-
-// ------------------ VARIABLES ------------------- //
-
-// ========================================================================== //
-// =Tailles de base
-//
-// On établit la grille verticale puis on calcule la taille des caractères
-// et de l'interlignage de référence en fonction de cette grille.
-// ========================================================================== //
-$base-grid: 8px;
-$base-font-size: 16px;
-$base-line-height: 24px;
-
-// ========================================================================== //
-// =Grille (zen-grids)
-// ========================================================================== //
-$zen-columns: 12;
-$zen-gutters: 2em;
-
-// ========================================================================== //
-// =Box model pour IE (zen-grids)
-// ========================================================================== //
-
-$box-sizing-polyfill-path: "scripts";
-
-// ========================================================================== //
-// =Typographie
-// ========================================================================== //
-
-$sans-serif: Lato, "Open Sans", "Segoe UI", Frutiger, "Frutiger Linotype", "Dejavu Sans", "Helvetica Neue", Arial, sans-serif;
-$serif: "New Century Schoolbook","Century Schoolbook","Century Schoolbook L", Georgia, serif;
-$monospace: "Andale Mono", AndaleMono, monospace;
-
-// ========================================================================== //
-// =Couleurs
-// ========================================================================== //
-
-// Palette de base
-$white: #fff;
-$gray: #dcdcdc;
-$dark-blue-green: #68838b;
-$black: #000;
-$blue: #267daf;
-$red: #d52125;
-
-$gray-very-dark: shade($gray, 75%);
-$gray-dark: shade($gray, 55%);
-$gray-medium: $gray;
-$gray-light: tint($gray, 65%);
-$gray-very-light: tint($gray, 85%);
-
-// Application
-
-$primary-color: $gray-very-dark;            // Texte courant
-$secondary-color: $blue;                    // Titres
-$link: $red;                                // Liens
-$button-base: $dark-blue-green;             // Boutons
-$button-dark: shade($button-base, 10%);
-$button-light: tint($button-base, 10%);
-
-// Autres
-$css-img-path: 'img'; // utile pour le mixin de fallback svg
-
-// ========================================================================== //
-// =Breakpoints
-//
-// Points de rupture courants des différentes tailles d'écran.
-//
-// La mesure en em permet de l'appliquer aussi aux cas d'usage
-// de modification de la taille de base des caractères dans
-// les préférences de l'utilisateur ou de l'utilisation du grossissement
-// des caractères dans le navigateur.
-//
-// Dans le cadre de la création d'un thème, adapter ces points à ceux
-// correspondant aux nécessités de votre design.
-// ========================================================================== //
-
-$x-small-screen: 20em; // 320
-$small-screen:   30em; // 480
-$medium-screen:  40em; // 640
-$large-screen:   60em; // 960
-$xlarge-screen:  80em; // 1280
Index: hemes/berlin/scss/init/_mixins-functions.scss
===================================================================
--- themes/berlin/scss/init/_mixins-functions.scss	(revision 2670)
+++ 	(revision )
@@ -1,28 +1,0 @@
-// mixin svg fallback
-@mixin svg(
-    $file-name,
-    $css-img-path: $css-img-path) {
-    background-image: url($css-img-path+'/'+$file-name+'.png');
-    background-image: url($css-img-path+'/'+$file-name+'.svg'), none;
-}
-
-@mixin bg-with-svg(
-    $file-name,
-    $css-img-path: $css-img-path,
-    $repeat: no-repeat,
-    $position: 50% 50%,
-    $bg-color: transparent) {
-    background: url($css-img-path+'/'+$file-name+'.png') $repeat, $position, $bg-color;
-    background-image: url($css-img-path+'/'+$file-name+'.svg'), none;
-}
-
-@mixin visually-hidden {
-    border: 0;
-    clip: rect(0 0 0 0);
-    height: 1px;
-    margin: -1px;
-    overflow: hidden;
-    padding: 0;
-    position: absolute;
-    width: 1px;
-}
Index: hemes/berlin/scss/init/_rebase.scss
===================================================================
--- themes/berlin/scss/init/_rebase.scss	(revision 2640)
+++ 	(revision )
@@ -1,177 +1,0 @@
-/** =================================================================================
-      Base rules and html5 compatibility by Dotclear Team,
-//*  most based on some Koz's habits and:
-//*  - Comprehensive Base Stylesheet by fvsch - http://fvsch.com/code/base-stylesheet/
-//*  - Normalize.css v2.1.3 | MIT License | git.io/normalize
-//*  - Knacss | WTFYW | by Raphael Goetter
-================================================================================== */
-
-/* largeur des paddings et border compris dans "width" */
-*,
-*:after,
-*:before {
-	-webkit-box-sizing: border-box; // Safari/Chrome, other WebKit */
-	-moz-box-sizing: border-box;    // Firefox, other Gecko */
-	-ms-box-sizing: border-box;     // Explorer
-	box-sizing: border-box;
-}
-html {
-	font-size: 100.01%; // bug arrondi sur vieux navigateurs
-	-ms-text-size-adjust: 100%;
-	-webkit-text-size-adjust: 100%;
-	margin: 0;
-	padding: 0;
-}
-body {
- 	margin: 0;
- 	padding: 0;
-}
-a { background: transparent; }
-a:focus { outline: thin dotted; }
-a:active, a:hover { outline: none; }
-a img { border: none; }
-q, cite {
-  font-style: italic;
-}
-q:before, q:after {
-  content: "";
-}
-sup, sub {
-	font-size: .75em;
-	line-height: 0;
-	position: relative;
-	vertical-align: baseline;
-}
-sup { top: -0.5em; }
-sub { bottom: -0.25em; }
-abbr[title] {
-  border-bottom: 1px dotted;
-  cursor: help;
-}
-b, strong {
-  font-weight: bold;
-  font-size: 0.9375em;
-}
-small {
-	font-size: 80%;
-}
-dfn {
-	font-style: italic;
-}
-hr {
-	-moz-box-sizing: content-box;
-	box-sizing: content-box;
-	height: 0;
-}
-mark {
-	background: #ff0;
-	color: #000;
-}
-code, kbd, pre, samp {
-	font-family: monospace, serif;
-	font-size: 1em;
-}
-pre {
-	white-space: pre-wrap;
-}
-fieldset {
-  margin: 0;
-  padding: 0;
-  border: none;
-}
-input, button, select {
-  vertical-align: middle;
-}
-button, input, select, textarea {
-	font-family: inherit;
-	font-size: 100%;
-	margin: 0;
-}
-button, input {
-	line-height: normal;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-	-webkit-appearance: button;
-	cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
-	cursor: default;
-}
-input[type="checkbox"],
-input[type="radio"] {
-	padding: 0;
-	border: none;
-}
-input[type="search"] {
-  -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-	-webkit-appearance: none;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-	border: 0;
-	padding: 0;
-}
-textarea {
-  overflow: auto;
-  vertical-align: top;
-}
-table {
-  border-collapse: collapse;
-  margin-bottom: 1.5em;
-}
-td, th {
-  padding: 1px;
-  vertical-align: top;
-  text-align: left;
-}
-td:first-child, th:first-child {
-  empty-cells: hide;
-}
-/* scripts */
-body > script {display: none !important;}
-
-/* HTML5 for old browsers */
-article, aside, details, figcaption, figure, footer,
-header, hgroup, main, nav, section, summary {
-  display: block;
-}
-audio, canvas, video {
-  display: inline-block;
-}
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-figure {
-  margin: 0;
-}
-[hidden], template {
-  display: none;
-}
-svg:not(:root) {
-  overflow: hidden;
-}
-/* Headings reset */
-h1, h2, h3, h4, h5, h6 {
-	font-size: 1em;
-	font-weight: normal;
-	margin: 0;
-}
-/* Hide only visually, but have it available for screenreaders: h5bp.com/v */
-.visually-hidden {
-    border: 0;
-    clip: rect(0 0 0 0);
-    height: 1px;
-    margin: -1px;
-    overflow: hidden;
-    padding: 0;
-    position: absolute;
-    width: 1px;
-}
Index: hemes/berlin/scss/libs/_scut.scss
===================================================================
--- themes/berlin/scss/libs/_scut.scss	(revision 2640)
+++ 	(revision )
@@ -1,1645 +1,0 @@
-/*
-* Scut, a collection of Sass utilities to ease and improve our implementations of common style-code patterns.
-* v0.8.0
-* Docs at http://davidtheclark.github.io/scut
-*/
-
-// SCUT CLEARFIX
-// http://davidtheclark.github.io/scut/#clearfix
-
-@mixin scut-clearfix {
-
-  &:after {
-    content: "";
-    display: table;
-    clear: both;
-  }
-
-}
-
-%scut-clearfix {
-  @include scut-clearfix;
-}
-
-// SCUT LIST: UNSTYLED
-// http://davidtheclark.github.io/scut/#list_unstyled
-
-@mixin scut-list-unstyled {
-
-  list-style-type: none;
-  padding-left: 0;
-
-}
-
-%scut-list-unstyled {
-  @include scut-list-unstyled;
-}
-
-// SCUT LIST: FLOATED
-// http://davidtheclark.github.io/scut/#list_floated
-
-// Depends on `list-unstyled` and `clearfix`.
-
-@mixin scut-list-floated (
-  $space: false,
-  $dir: left
-) {
-
-  @include scut-list-unstyled;
-  @include scut-clearfix;
-
-  & > li {
-    float: $dir;
-  }
-
-  @if $space {
-    & > li + li {
-      margin-#{$dir}: $space;
-    }
-  }
-
-}
-
-%scut-list-floated {
-  @include scut-list-floated;
-}
-
-
-// SCUT POSITIONING: COORDINATES
-// http://davidtheclark.github.io/scut/#positioning_coordinates
-
-@function scut-autoOrValue ($val) {
-  @if $val == a or $val == auto {
-    @return auto;
-  }
-  @else {
-    @return $val;
-  }
-}
-
-@mixin scut-coords (
-  $coordinates: n n n n
-) {
-
-  $top: nth($coordinates, 1);
-  $right: nth($coordinates, 2);
-  $bottom: nth($coordinates, 3);
-  $left: nth($coordinates, 4);
-
-  @if $top != n {
-    top: scut-autoOrValue($top);
-  }
-  @if $right != n {
-    right: scut-autoOrValue($right);
-  }
-  @if $bottom != n {
-    bottom: scut-autoOrValue($bottom);
-  }
-  @if $left != n {
-    left: scut-autoOrValue($left);
-  }
-
-}
-
-// SCUT STRIP UNIT
-// http://davidtheclark.github.io/scut/#strip_unit
-
-@function scut-strip-unit (
-  $num
-) {
-
-  @return $num / ($num * 0 + 1);
-
-}
-
-// SCUT PIXELS TO EMS
-// http://davidtheclark.github.io/scut/#pixels-to-ems
-
-// Depends on `scut-strip-unit`.
-
-$scut-em-base: 16 !default;
-
-@function scut-em (
-  $pixels,
-  $base: $scut-em-base
-) {
-
-  // $base could be in em or px (no unit = px).
-  // Adjust accordingly to create a $divisor that
-  // serves as context for $pixels.
-  $multiplier: if(unit($base) == em, 16, 1);
-  $divisor: scut-strip-unit($base) * $multiplier;
-
-  $em-vals: ();
-  @each $val in $pixels {
-    $val-in-ems: (scut-strip-unit($val) / $divisor) * 1em;
-    $em-vals: append($em-vals, $val-in-ems);
-  }
-
-  @if length($em-vals) == 1 {
-    // return a single value instead of a list,
-    // so it can be used in calculations
-    @return nth($em-vals, 1);
-  }
-  @else {
-    @return $em-vals;
-  }
-
-}
-
-// SCUT PIXELS TO REMS
-// http://davidtheclark.github.io/scut/#pixels-to-rems
-
-// Depends on `scut-strip-unit`.
-
-@function scut-rem (
-  $pixels
-) {
-
-  $rem-vals: ();
-  @each $val in $pixels {
-    $val-in-rems: scut-strip-unit($val) / 16 * 1rem;
-    $rem-vals: append($rem-vals, $val-in-rems);
-  }
-
-  @if length($rem-vals) == 1 {
-    // return a single value instead of a list,
-    // so it can be used in calculations
-    @return nth($rem-vals, 1);
-  }
-  @else {
-    @return $rem-vals;
-  }
-
-}
-
-// SCUT BORDER
-// http://davidtheclark.github.io/scut/#border
-
-@mixin scut-border (
-  $style,
-  $sides: n y
-) {
-
-  @if length($sides) == 2 {
-    @if nth($sides, 1) != n {
-      border-top: $style;
-      border-bottom: $style;
-    }
-    @if nth($sides, 2) != n {
-      border-left: $style;
-      border-right: $style;
-    }
-  }
-
-  @else if length($sides) == 4 {
-    @if nth($sides, 1) != n {
-      border-top: $style;
-    }
-    @if nth($sides, 2) != n {
-      border-right: $style;
-    }
-    @if nth($sides, 3) != n {
-      border-bottom: $style;
-    }
-    @if nth($sides, 4) != n {
-      border-left: $style;
-    }
-  }
-
-  @else {
-    @warn "Scut-border requires a $sides argument of 2 or 4 values."
-  }
-
-}
-
-// SCUT CIRCLE
-// http://davidtheclark.github.io/scut/#circle
-
-@mixin scut-circle (
-  $size,
-  $color: inherit
-) {
-
-  border-radius: 50%;
-  display: inline-block;
-
-  @if $color == inherit {
-    // If user wants to inherit the color,
-    // take advantage of the fact that border
-    // color defaults to the text color of the element.
-    border-width: $size / 2;
-    border-style: solid;
-    height: 0;
-    width: 0;
-  }
-  @else {
-    // Otherwise, just use background-color.
-    background-color: $color;
-    height: $size;
-    width: $size;
-  }
-
-}
-
-// SCUT COLOR SWAP
-// http://davidtheclark.github.io/scut/#color_swap
-
-@mixin scut-color-swap (
-  $off,
-  $on,
-  $duration: 0,
-  $bg: false
-) {
-
-  $transition-properties: null;
-  $off-is-list: type-of($off) == list;
-  $on-is-list: type-of($on) == list;
-
-  // If $off IS a list,
-  // assign color and background-color.
-  @if $off-is-list {
-    color: nth($off, 1);
-    background-color: nth($off, 2);
-    $transition-properties: background-color, color;
-  }
-
-  // If $off IS NOT a list and $bg is TRUE,
-  // assign background-color.
-  @else if $bg and not $off-is-list {
-    background-color: $off;
-    $transition-properties: background-color;
-  }
-
-  // If $off IS NOT a list and $bg is FALSE,
-  // assign color.
-  @else {
-    color: $off;
-    $transition-properties: color;
-  }
-
-  // Only set-up transition if $duration != 0.
-  @if $duration != 0 {
-    transition-property: $transition-properties;
-    transition-duration: $duration;
-  }
-
-  &:hover,
-  &:focus {
-
-    // $on is treated the same as $off, above.
-    @if $on-is-list {
-      color: nth($on, 1);
-      background-color: nth($on, 2);
-    }
-
-    @else if $bg and not $on-is-list {
-      background-color: $on;
-    }
-
-    @else {
-      color: $on;
-    }
-  }
-
-}
-
-// SCUT HD BREAKPOINT
-// http://davidtheclark.github.io/scut/#hd_breakpoint
-
-@mixin scut-hd-bp (
-  $ratio: 1.3
-) {
-
-  @media (-o-min-device-pixel-ratio: #{$ratio}/1),
-         (-webkit-min-device-pixel-ratio: #{$ratio}),
-         (min-resolution: #{round(96 * $ratio)}dpi) {
-    @content;
-  }
-
-}
-
-// SCUT HIDE VISUALLY
-// http://davidtheclark.github.io/scut/#hide_visually
-
-@mixin scut-hide-visually {
-
-  border: 0;
-  clip: rect(0 0 0 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px;
-
-}
-
-%scut-hide-visually {
-  @include scut-hide-visually;
-}
-
-// SCUT IMAGE REPLACEMENT
-// http://davidtheclark.github.io/scut/#image_replacement
-
-@mixin scut-image-replace {
-
-  text-indent: 102%;
-  white-space: nowrap;
-  overflow: hidden;
-
-}
-
-%scut-image-replace {
-  @include scut-image-replace;
-}
-
-// SCUT REMS WITH FALLBACK
-// http://davidtheclark.github.io/scut/#rems_with_fallback
-
-// Depends on scut-rem and scut-strip-unit
-
-@mixin scut-rem-fallback (
-  $pixels,
-  $property: font-size
-) {
-
-  $px-vals: null;
-  @each $val in $pixels {
-    $val-in-px: scut-strip-unit($val) * 1px;
-    $px-vals: append($px-vals, $val-in-px);
-  }
-  $rem-vals: scut-rem($pixels);
-
-  #{$property}: $px-vals;
-  #{$property}: $rem-vals;
-
-}
-
-// SCUT RESET
-// http://davidtheclark.github.io/scut/#reset
-
-@mixin scut-reset-border-box {
-  // Make everything a border-box, because why not?
-  *, *:before, *:after {
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-  }
-}
-
-@mixin scut-reset-antialias {
-  // Antialias!
-  body {
-    -webkit-font-smoothing: antialiased;
-  }
-}
-
-@mixin scut-reset-semanticize {
-  // Make headers and <b> semantic, not presentational.
-  h1,
-  h2,
-  h3,
-  h4,
-  h5,
-  h6 {
-    font-size: 1em;
-    font-weight: normal;
-    margin: 0;
-  }
-  b {
-    font-weight: normal;
-  }
-}
-
-@mixin scut-reset-pointer {
-  // Clickable form elements should have a pointer.
-  label,
-  select,
-  option,
-  button {
-    cursor: pointer;
-  }
-}
-
-@mixin scut-reset-form {
-  fieldset {
-    border: 0;
-    margin: 0;
-    padding: 0;
-  }
-  textarea {
-    resize: vertical;
-  }
-}
-
-@mixin scut-reset-button {
-  // Reset default button styles, which are never used.
-  button,
-  input[type="button"] {
-    background: transparent;
-    border: 0;
-    color: inherit;
-    font: inherit;
-    margin: 0;
-    outline: none;
-    padding: 0;
-    width: auto;
-    -webkit-appearance: none;
-    -webkit-font-smoothing: antialiased;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    &::-moz-focus-inner {
-      padding:0;
-      border:0;
-    }
-  }
-}
-
-@mixin scut-reset-paragraph {
-  // Some paragraph margins just get in the way.
-  p:first-of-type {
-    margin-top: 0;
-  }
-  p:last-of-type {
-    margin-bottom: 0;
-  }
-}
-
-// Call them all, minus exclusions!
-@mixin scut-reset ($exclude: false) {
-  @if not index($exclude, border-box) {
-    @include scut-reset-border-box;
-  }
-  @if not index($exclude, antialias) {
-    @include scut-reset-antialias;
-  }
-  @if not index($exclude, semanticize) {
-    @include scut-reset-semanticize;
-  }
-  @if not index($exclude, pointer) {
-    @include scut-reset-pointer;
-  }
-  @if not index($exclude, form) {
-    @include scut-reset-form;
-  }
-  @if not index($exclude, button) {
-    @include scut-reset-button;
-  }
-  @if not index($exclude, paragraph) {
-    @include scut-reset-paragraph;
-  }
-}
-
-// SCUT SELECTED
-// http://davidtheclark.github.io/scut/#selected
-
-@mixin scut-selected (
-  $active: false
-) {
-
-  @if $active {
-    &:hover,
-    &:focus,
-    &:active {
-      @content;
-    }
-  }
-  @else {
-    &:hover,
-    &:focus {
-      @content;
-    }
-  }
-
-}
-
-// SCUT TRIANGLE
-// http://davidtheclark.github.io/scut/#triangle
-
-@mixin scut-triangle (
-  $direction: right,
-  $size: 0.75em,
-  $color: inherit
-) {
-
-  display: inline-block;
-  height: 0;
-  width: 0;
-  // For improved appearance in some Webkit browsers
-  -webkit-transform: rotate(360deg);
-
-  // Set up some variables
-  $width: null;
-  $height: null;
-  $border-widths: null;
-
-  @if type-of($size) == list {
-    $width: nth($size, 1);
-    $height: nth($size, 2);
-  }
-  @else {
-    $width: $size;
-    $height: $size;
-  }
-
-  @if ($direction == up) or ($direction == down) {
-    // For up and down, width gets two borders but height only one,
-    // so divide second border-width value by 2
-    $border-widths: $height ($width / 2);
-  }
-  @else if ($direction == right) or ($direction == left) {
-    // For right and left, height gets two borders but width only one,
-    // so divide first border-width value by 2
-    $border-widths: ($height / 2) $width;
-  }
-  @else {
-    // For right triangles (the rest), both sides get two borders,
-    // so divide both by 2
-    $border-widths: ($height / 2) ($width / 2);
-  }
-
-  border-width: $border-widths;
-  border-style: solid;
-
-
-  // STANDARD TRIANGLES
-
-  @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {
-    border-color: transparent;
-    @if $direction == up {
-      border-bottom-color: $color;
-      border-top-width: 0;
-    }
-    @else if $direction == right {
-      border-left-color: $color;
-      border-right-width: 0;
-    }
-    @else if $direction == down {
-      border-top-color: $color;
-      border-bottom-width: 0;
-    }
-    @else if $direction == left {
-      border-right-color: $color;
-      border-left-width: 0;
-    }
-  }
-
-
-  // CORNER TRIANGLES
-
-  @else if ($direction == top-right) or ($direction == top-left) {
-    border-top-color: $color;
-    border-bottom-color: transparent;
-    @if $direction == top-right {
-      border-left-color: transparent;
-      border-right-color: $color;
-    }
-    @else if $direction == top-left {
-      border-left-color: $color;
-      border-right-color: transparent;
-    }
-  }
-
-  @else if ($direction == bottom-right) or ($direction == bottom-left) {
-    border-top-color: transparent;
-    border-bottom-color: $color;
-    @if $direction == bottom-right {
-      border-left-color: transparent;
-      border-right-color: $color;
-    }
-    @else if $direction == bottom-left {
-      border-left-color: $color;
-      border-right-color: transparent;
-    }
-  }
-
-}
-
-%scut-triangle {
-  @include scut-triangle;
-}
-
-// SCUT CENTER ABSOLUTELY
-// http://davidtheclark.github.io/scut/#center_absolutely
-
-@mixin scut-center-absolutely (
-  $dimensions
-) {
-
-  $width: nth($dimensions, 1);
-  $height: nth($dimensions, 2);
-
-  position: absolute;
-
-  @if $width != n {
-    width: $width;
-    left: 50%;
-    margin-left: (-$width / 2);
-  }
-
-  @if $height != n {
-    height: $height;
-    top: 50%;
-    margin-top: (-$height / 2);
-  }
-
-}
-
-// SCUT CENTER BLOCK
-// http://davidtheclark.github.io/scut/#center_block
-
-@mixin scut-center-block (
-  $max-width: false
-) {
-
-  margin-left: auto;
-  margin-right: auto;
-  @if $max-width {
-    max-width: $max-width;
-  }
-
-}
-
-%scut-center-block {
-  @include scut-center-block;
-}
-
-
-// SCUT CENTER TRANSFORM
-// http://davidtheclark.github.io/scut/#center_transform
-
-@mixin scut-center-transform (
-  $axis: false // or x or y
-) {
-
-  position: absolute;
-
-  @if $axis != x {
-    top: 50%;
-    margin-top: auto;
-    margin-bottom: auto;
-  }
-
-  @if $axis != y {
-    left: 50%;
-    margin-left: auto;
-    margin-right: auto;
-  }
-
-  $translate-val: null;
-
-  @if not $axis {
-    $translate-val: translate(-50%, -50%);
-  }
-  @else if $axis != x {
-    $translate-val: translateY(-50%);
-  }
-  @else if $axis != y {
-    $translate-val: translateX(-50%);
-  }
-
-  -webkit-transform: $translate-val;
-  -ms-transform: $translate-val;
-  transform: $translate-val;
-}
-
-%scut-center-transform {
-  @include scut-center-transform;
-}
-
-%scut-center-transform-x {
-  @include scut-center-transform(x);
-}
-
-%scut-center-transform-y {
-  @include scut-center-transform(y);
-}
-
-
-// SCUT FILL
-// http://davidtheclark.github.io/scut/#fill
-
-@mixin scut-fill (
-  $width-height: false
-) {
-
-  position: absolute;
-  left: 0;
-  top: 0;
-  @if $width-height {
-    width: 100%;
-    height: 100%;
-  }
-  @else {
-    right: 0;
-    bottom: 0;
-  }
-
-}
-
-%scut-fill {
-  @include scut-fill;
-}
-
-// SCUT FONTICON-LABEL
-// http://davidtheclark.github.io/scut/#fonticon_label
-
-@mixin scut-fonticon-label (
-  $font,
-  $glyph,
-  $space: 0.25em,
-  $side: before
-) {
-
-  &:#{$side} {
-    content: $glyph;
-    font-family: $font;
-    font-style: normal;
-    font-weight: normal;
-    -webkit-font-smoothing: antialiased;
-    display: inline-block;
-    vertical-align: middle;
-
-    @if $side == before and $space != 0 {
-      margin-right: $space;
-    }
-    @else if $side == after and $space != 0 {
-      margin-left: $space;
-    }
-
-    // Add any additional styling.
-    @content;
-
-  }
-
-}
-
-
-// SCUT LIST: CUSTOM
-// http://davidtheclark.github.io/scut/#list_custom
-
-@mixin scut-list-custom (
-  $content: "\2022",
-  $marker-width: 0.75em,
-  $pad: 0
-) {
-
-  $content-val: null;
-  $counter: index($content, count);
-  @if $counter {
-    @if length($content) == 3 {
-      $content-val: counter(scutlistcounter, nth($content, 3))nth($content,2);
-    }
-    @else if length($content) == 2 {
-      $content-val: counter(scutlistcounter)nth($content,2);
-    }
-    @else {
-      $content-val: counter(scutlistcounter);
-    }
-  }
-  @else {
-    $content-val: $content;
-  }
-
-  padding-left: $marker-width + $pad;
-  list-style-type: none;
-
-  & > li {
-    position: relative;
-    @if $counter {
-      counter-increment: scutlistcounter;
-    }
-    &:before {
-      content: $content-val;
-      display: block;
-      position: absolute;
-      top: 0;
-      left: -$marker-width;
-      width: $marker-width;
-      @content;
-    }
-  }
-
-}
-
-// SCUT LIST: DIVIDED
-// http://davidtheclark.github.io/scut/#list_divided
-
-// Depends on `list-floated`, which depends in turn on `list-unstyled` and `clearfix`.
-
-@mixin scut-list-divided (
-  $divider: "|",
-  $space: 0.5em,
-  $dir: left,
-  $height: false
-) {
-
-  @include scut-list-floated($dir: $dir);
-
-  $pseudo: if($dir == left, 'before', 'after');
-
-  // If an explicit height is passed,
-  // things are different: All <li>s
-  // need the pseudo-element (to force height),
-  // but the first's must be hidden.
-
-  @if $height {
-    & > li {
-      height: $height;
-    }
-    & > li:#{$pseudo} {
-      height: $height;
-      content: $divider;
-      display: inline-block;
-      vertical-align: middle;
-      @content;
-    }
-    & > li:first-child:#{$pseudo} {
-      width: 0;
-      overflow: hidden;
-    }
-  }
-
-  & > li + li:#{$pseudo} {
-    @if not $height {
-      content: $divider;
-      display: inline-block;
-      @content;
-    }
-    margin-left: $space;
-    margin-right: $space;
-  }
-
-}
-
-%scut-list-bar {
-  @include scut-list-divided;
-}
-
-%scut-list-breadcrumb {
-  @include scut-list-divided("/");
-}
-
-// SCUT LIST: INLINE
-// http://davidtheclark.github.io/scut/#list_inline
-
-// Depends on `list-unstyled`.
-
-@mixin scut-list-inline (
-  $space: false
-) {
-
-  @include scut-list-unstyled;
-
-  & > li {
-    display: inline-block;
-  }
-
-  @if $space {
-    & > li + li {
-      margin-left: $space;
-    }
-  }
-
-}
-
-%scut-list-inline {
-  @include scut-list-inline;
-}
-
-// SCUT LIST: PUNCTUATED
-// http://davidtheclark.github.io/scut/#list_punctuated
-
-// Depends on `list-unstyled`.
-
-@mixin scut-list-punctuated (
-  $divider: ", ",
-  $display: inline
-) {
-
-  @include scut-list-unstyled;
-  margin-top: 0;
-  margin-bottom: 0;
-
-  & > li {
-    display: $display;
-    &:not(:last-child):after {
-      content: $divider;
-    }
-  }
-
-}
-
-%scut-list-comma {
-  @include scut-list-punctuated;
-}
-
-// SCUT MARGIN
-// http://davidtheclark.github.io/scut/#margin
-
-@mixin scut-margin (
-  $margin
-) {
-
-  @if length($margin) == 1 and $margin != n {
-    margin-top: $margin;
-    margin-right: $margin;
-    margin-bottom: $margin;
-    margin-left: $margin;
-  }
-
-  @if length($margin) == 2 {
-    $margin-y: nth($margin, 1);
-    $margin-x: nth($margin, 2);
-    @if $margin-y != n {
-      margin-top: $margin-y;
-      margin-bottom: $margin-y;
-    }
-    @if $margin-x != n {
-      margin-left: $margin-x;
-      margin-right: $margin-x;
-    }
-  }
-
-  @if length($margin) == 3 {
-    $margin-y-top: nth($margin, 1);
-    $margin-x: nth($margin, 2);
-    $margin-y-bottom: nth($margin, 3);
-    @if $margin-y-top != n {
-      margin-top: $margin-y-top;
-    }
-    @if $margin-x != n {
-      margin-right: $margin-x;
-      margin-left: $margin-x;
-    }
-    @if $margin-y-bottom != n {
-      margin-bottom: $margin-y-bottom;
-    }
-  }
-
-  @if length($margin) == 4 {
-    $margin-top: nth($margin, 1);
-    $margin-right: nth($margin, 2);
-    $margin-bottom: nth($margin, 3);
-    $margin-left: nth($margin, 4);
-    @if $margin-top != n {
-      margin-top: $margin-top;
-    }
-    @if $margin-right != n {
-      margin-right: $margin-right;
-    }
-    @if $margin-bottom != n {
-      margin-bottom: $margin-bottom;
-    }
-    @if $margin-left != n {
-      margin-left: $margin-left;
-    }
-  }
-
-}
-
-// SCUT PADDING
-// http://davidtheclark.github.io/scut/#padding
-
-@mixin scut-padding (
-  $padding
-) {
-
-  @if length($padding) == 1 and $padding != n {
-    padding-top: $padding;
-    padding-right: $padding;
-    padding-bottom: $padding;
-    padding-left: $padding;
-  }
-
-  @if length($padding) == 2 {
-    $padding-y: nth($padding, 1);
-    $padding-x: nth($padding, 2);
-    @if $padding-y != n {
-      padding-top: $padding-y;
-      padding-bottom: $padding-y;
-    }
-    @if $padding-x != n {
-      padding-left: $padding-x;
-      padding-right: $padding-x;
-    }
-  }
-
-  @if length($padding) == 3 {
-    $padding-y-top: nth($padding, 1);
-    $padding-x: nth($padding, 2);
-    $padding-y-bottom: nth($padding, 3);
-    @if $padding-y-top != n {
-      padding-top: $padding-y-top;
-    }
-    @if $padding-x != n {
-      padding-right: $padding-x;
-      padding-left: $padding-x;
-    }
-    @if $padding-y-bottom != n {
-      padding-bottom: $padding-y-bottom;
-    }
-  }
-
-  @if length($padding) == 4 {
-    $padding-top: nth($padding, 1);
-    $padding-right: nth($padding, 2);
-    $padding-bottom: nth($padding, 3);
-    $padding-left: nth($padding, 4);
-    @if $padding-top != n {
-      padding-top: $padding-top;
-    }
-    @if $padding-right != n {
-      padding-right: $padding-right;
-    }
-    @if $padding-bottom != n {
-      padding-bottom: $padding-bottom;
-    }
-    @if $padding-left != n {
-      padding-left: $padding-left;
-    }
-  }
-}
-
-// SCUT POSITIONING: ABSOLUTE
-// http://davidtheclark.github.io/scut/#positioning_absolute
-
-// Depends on `positioning-coordinates`.
-
-@mixin scut-absolute (
-  $coordinates: 0 n n 0
-) {
-
-  position: absolute;
-  @include scut-coords($coordinates);
-
-}
-
-%scut-absolute {
-  @include scut-absolute;
-}
-
-// SCUT POSITIONING: FIXED
-// http://davidtheclark.github.io/scut/#positioning_fixed
-
-// Depends on `positioning-coordinates`.
-
-@mixin scut-fixed (
-  $coordinates: 0 n n 0
-) {
-
-  position: fixed;
-  @include scut-coords($coordinates);
-
-}
-
-%scut-fixed {
-  @include scut-fixed;
-}
-
-// SCUT POSITIONING: RELATIVE
-// http://davidtheclark.github.io/scut/#positioning_relative
-
-// Depends on `positioning-coordinates`.
-
-@mixin scut-relative (
-  $coordinates: n n n n
-) {
-
-  position: relative;
-  @include scut-coords($coordinates);
-
-}
-
-// SCUT RATIO-BOX
-// http://davidtheclark.github.io/scut/#ratio-box
-
-@mixin scut-ratio-box (
-  $ratio: 1/1,
-  $inner: ".scut-inner"
-) {
-
-  overflow: hidden;
-  position: relative;
-
-  // The container's height, as a percentage of the
-  // container's width, is set by assigning
-  // padding-top to a pseudo-element.
-  &:before {
-    content: "";
-    display: block;
-    height: 0;
-    padding-top: (1 / $ratio) * 100%;
-  }
-
-  // The inner element simply fills up the container.
-  & > #{$inner} {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-  }
-
-}
-
-%scut-ratio-box {
-  @include scut-ratio-box;
-}
-
-// SCUT SIZE
-// http://davidtheclark.github.io/scut/#size
-
-@mixin scut-size(
-  $size
-) {
-
-  @if length($size) == 1 {
-    width:  $size;
-    height: $size;
-  }
-  @else if length($size) == 2 {
-    width:  nth($size, 1);
-    height: nth($size, 2);
-  }
-
-}
-
-// SCUT STICKY FOOTER
-// http://davidtheclark.github.io/scut/#sticky_footer
-
-@mixin scut-sticky-footer (
-  $height,
-  $wrapper: ".wrapper",
-  $footer: ".scut-sticky"
-) {
-
-  html,
-  body {
-    height: 100%;
-  }
-
-  #{$wrapper} {
-    min-height: 100%;
-    margin-bottom: -$height;
-    &:after {
-      content: "";
-      display: block;
-    }
-  }
-  #{$wrapper}:after,
-  #{$footer} {
-    height: $height;
-  }
-
-}
-
-// SCUT V-CENTER: INLINE-BLOCK
-// http://davidtheclark.github.io/scut/#v-center_inline-block
-
-@mixin scut-vcenter-ib (
-  $inner: ".scut-inner"
-) {
-
-  // The inner element is vertically centered
-  // by middle-aligning it with an inline pseudo-element
-  // whose height is 100%.
-
-  &:before {
-    content: "";
-    height: 100%;
-    display: inline-block;
-    vertical-align: middle;
-    // A small negative right margin is set
-    // to account for the default
-    // word-spacing of inline-block.
-    margin-right: -0.25em;
-  }
-
-  & > #{$inner} {
-    display: inline-block;
-    vertical-align: middle;
-  }
-
-}
-
-%scut-vcenter-ib {
-  @include scut-vcenter-ib;
-}
-
-
-// SCUT V-CENTER: LINE-HEIGHT
-// http://davidtheclark.github.io/scut/#v-center_line-height
-
-@mixin scut-vcenter-lh (
-  $height
-) {
-
-  height: $height;
-  line-height: $height;
-
-}
-
-// SCUT V-CENTER: TABLE DISPLAY
-// http://davidtheclark.github.io/scut/#v-center_table_display
-
-@mixin scut-vcenter-td (
-  $inner: ".scut-inner"
-) {
-
-  display: table;
-
-  & > #{$inner} {
-    display: table-cell;
-    vertical-align: middle;
-  }
-
-}
-
-
-%scut-vcenter-td {
-  @include scut-vcenter-td;
-}
-
-// SCUT V-CENTER: TRANSFORM
-// http://davidtheclark.github.io/scut/#v-center_transform
-
-// Depends on scut-center-transform
-
-@mixin scut-vcenter-tt () {
-  @include scut-center-transform(y);
-}
-
-%scut-vcenter-tt {
-  @include scut-vcenter-tt;
-}
-
-// BOOKENDS
-// http://davidtheclark.github.io/scut/#bookends
-
-@mixin scut-bookends (
-  $space: 0.5em,
-  $content: ""
-) {
-
-  $content-list: length($content) == 2;
-
-  // If $content is a list or there $space exist,
-  // set some pseudo-element-specific rules.
-  @if $content-list or $space {
-    &:before {
-      @if $content-list {
-        content: nth($content, 1);
-      }
-      @if $space {
-        margin-right: $space;
-      }
-    }
-    &:after {
-      @if $content-list {
-        content: nth($content, 2);
-      }
-      @if $space {
-        margin-left: $space;
-      }
-    }
-  }
-
-  // Then set some rules that apply to both
-  // pseudo-elements.
-  &:before,
-  &:after {
-    display: inline-block;
-
-    @if $content and length($content) == 1 {
-      content: $content;
-    }
-
-    // Any additional styling applies to both.
-    @content;
-
-  }
-
-}
-
-// SCUT CSS CHARACTERS
-// http://davidtheclark.github.io/scut/#characters
-
-// space
-$scut-space: "\0020";
-// non-breaking space
-$scut-nbsp: "\00a0";
-
-// quotation mark
-$scut-quot: "\0022";
-// left single curly quote
-$scut-lsquo: "\2018";
-// right single curly quote
-$scut-rsquo: "\2019";
-// left double curly quote
-$scut-ldquo: "\201C";
-// right double curly quote
-$scut-rdquo: "\201D";
-// left single angle quote (guillemet)
-$scut-lsaquo: "\2039";
-// right single angle quote (guillemet)
-$scut-rsaquo: "\203A";
-// left double angle quote (guillemet)
-$scut-laquo: "\00ab";
-// right double angle quote (guillemet)
-$scut-raquo: "\00bb";
-
-// em dash (mutton)
-$scut-mdash: "\2014";
-// en dash (nut)
-$scut-ndash: "\2013";
-// hyphen
-$scut-hyphen: "\2010";
-
-// ampersand
-$scut-amp: "\0026";
-// greater than
-$scut-gt: "\003e";
-// less than
-$scut-lt: "\003c";
-// times
-$scut-times: "\00D7";
-// big times
-$scut-bigtimes: "\2715";
-// checkmark
-$scut-checkmark: "\2713";
-
-// section sign (double S, hurricane, sectional symbol, the legal doughnut, signum sectionis)
-$scut-sect: "\00a7";
-// paragraph symbol (pilcrow)
-$scut-para: "\00b6";
-
-// middot (interpunct, interpoint)
-$scut-middot: "\00b7";
-// o-slash (slashed o)
-$scut-oslash: "\00f8";
-// bullet
-$scut-bull: "\2022";
-// white bullet
-$scut-whibull: "\25E6";
-// horizontal ellipsis
-$scut-hellip: "\2026";
-// vertical ellipsis
-$scut-vellip: "\22EE";
-// midline horizontal ellipsis
-$scut-midhellip: "\22EF";
-
-// up-pointing triangle
-$scut-utri: "\25b2";
-// down-pointing triangle
-$scut-dtri: "\25bc";
-// left-pointing triangle
-$scut-ltri: "\25c0";
-// right-pointing triangle
-$scut-rtri: "\25b6";
-// up-pointing small triangle
-$scut-ustri: "\25b4";
-// down-pointing small triangle
-$scut-dstri: "\25be";
-// left-pointing small triangle
-$scut-lstri: "\25c2";
-// right-pointing small triangle
-$scut-rstri: "\25b8";
-// diamond
-$scut-diamond: "\25c6";
-// fisheye
-$scut-fisheye: "\25c9";
-// bullseye
-$scut-bullseye: "\25ce";
-// circle
-$scut-circle: "\25cf";
-// white circle
-$scut-whitecircle: "\25cb";
-
-// SCUT FONT-FACE
-// http://davidtheclark.github.io/scut/#font-face
-
-@mixin scut-font-face (
-  $font-family,
-  $file-path,
-  $weight: normal,
-  $style: normal
-) {
-
-  @font-face {
-    font-family: $font-family;
-    font-weight: $weight;
-    font-style: $style;
-
-    src: url('#{$file-path}.eot');
-    src: url('#{$file-path}.eot?#iefix') format('embedded-opentype'),
-         url('#{$file-path}.woff') format('woff'),
-         url('#{$file-path}.ttf') format('truetype'),
-         url('#{$file-path}.svg##{$font-family}') format('svg');
-  }
-
-}
-
-// SCUT HANGING INDENT
-// http://davidtheclark.github.io/scut/#hanging_indent
-
-@mixin scut-hanging-indent (
-  $indent: 1em
-) {
-
-  // padding-left creates the indent,
-  // while text-indent pulls the first line
-  // back to the edge.
-
-  padding-left: $indent;
-  text-indent: -$indent;
-
-}
-
-%scut-hanging-indent {
-  @include scut-hanging-indent;
-}
-
-// SCUT INDENTED PARAGRAPHS
-// http://davidtheclark.github.io/scut/#indented_paragraphs
-
-@mixin scut-indented-ps (
-  $indent: 1.5em,
-  $no-first-indent: true
-) {
-
-  p {
-    margin: 0;
-    text-indent: $indent;
-  }
-
-  @if $no-first-indent {
-    p:first-of-type {
-      text-indent: 0;
-    }
-  }
-
-}
-
-%scut-indented-ps {
-  @include scut-indented-ps;
-}
-
-// SCUT KEY-VALUE
-// http://davidtheclark.github.io/scut/#key-value
-
-@mixin scut-key-val (
-  $divider: ":",
-  $pad: 0.25em,
-  $indent: 1em,
-  $spacing: 0,
-  $pad-left: 0
-) {
-
-  & > dt {
-    clear: both;
-    float: left;
-    &:after {
-      content: $divider;
-      margin-right: $pad;
-      @if $pad-left != 0 {
-        margin-left: $pad-left;
-      }
-    }
-  }
-
-  & > dd {
-    margin-left: $indent;
-    @if $spacing != 0 {
-      margin-bottom: $spacing;
-    }
-  }
-
-}
-
-%scut-key-val {
-  @include scut-key-val;
-}
-
-// SCUT LINK: BOTTOM-BORDERED
-// http://davidtheclark.github.io/scut/#link_bottom-bordered
-
-@mixin scut-link-bb (
-  $color: inherit,
-  $style: solid,
-  $width: 1px
-) {
-
-  text-decoration: none;
-
-  border-bottom-width: $width;
-  border-bottom-style: $style;
-  @if $color != inherit {
-    border-bottom-color: $color;
-  }
-
-}
-
-%scut-link-bb {
-  @include scut-link-bb;
-}
-
-// SCUT REVERSE ITALICS
-// http://davidtheclark.github.io/scut/#reverse-italics
-
-@mixin scut-reverse-italics (
-  $elements: false
-) {
-
-  $element-list: em, cite, i;
-  @each $el in $elements {
-    $element-list: append($element-list, unquote($el), comma)
-  }
-
-  font-style: italic;
-  #{$element-list} {
-    font-style: normal;
-  }
-
-}
-
-%scut-reverse-italics {
-  @include scut-reverse-italics;
-}
-
-// SCUT SIDE-LINED
-// http://davidtheclark.github.io/scut/#side-lined
-
-@mixin scut-side-lined (
-  $height: 1px,
-  $space: 0.5em,
-  $color: inherit,
-  $style: solid,
-  $v-adjust: false,
-  $double: false
-) {
-
-  display: block;
-  overflow: hidden;
-  text-align: center;
-
-  &:before,
-  &:after {
-    content: "";
-    display: inline-block;
-    vertical-align: middle;
-    position: relative;
-    width: 50%;
-
-    border-top-style: $style;
-    border-top-width: $height;
-
-    @if $color != inherit {
-      border-top-color: $color;
-    }
-
-    @if $v-adjust != false {
-      bottom: $v-adjust;
-    }
-
-    @if $double != false {
-      height: $double;
-      border-bottom-style: $style;
-      border-bottom-width: $height;
-      @if $color != inherit {
-        border-bottom-color: $color;
-      }
-    }
-  }
-
-  &:before {
-    right: $space;
-    margin-left: -50%;
-  }
-  &:after {
-    left: $space;
-    margin-right: -50%;
-  }
-
-}
-
-%scut-side-lined {
-  @include scut-side-lined;
-}
-
-// SCUT TRUNCATE
-// http://davidtheclark.github.io/scut/#truncate
-
-@mixin scut-truncate {
-
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-
-}
-
-%scut-truncate {
-  @include scut-truncate;
-}
Index: hemes/berlin/scss/libs/bourbon/_bourbon-deprecated-upcoming.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/_bourbon-deprecated-upcoming.scss	(revision 2640)
+++ 	(revision )
@@ -1,13 +1,0 @@
-//************************************************************************//
-// These mixins/functions are deprecated
-// They will be removed in the next MAJOR version release
-//************************************************************************//
-@mixin box-shadow ($shadows...) {
-  @include prefixer(box-shadow, $shadows, spec);
-  @warn "box-shadow is deprecated and will be removed in the next major version release";
-}
-
-@mixin background-size ($lengths...) {
-  @include prefixer(background-size, $lengths, spec);
-  @warn "background-size is deprecated and will be removed in the next major version release";
-}
Index: hemes/berlin/scss/libs/bourbon/_bourbon.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/_bourbon.scss	(revision 2640)
+++ 	(revision )
@@ -1,59 +1,0 @@
-// Custom Helpers
-@import "helpers/deprecated-webkit-gradient";
-@import "helpers/gradient-positions-parser";
-@import "helpers/linear-positions-parser";
-@import "helpers/radial-arg-parser";
-@import "helpers/radial-positions-parser";
-@import "helpers/render-gradients";
-@import "helpers/shape-size-stripper";
-
-// Custom Functions
-@import "functions/compact";
-@import "functions/flex-grid";
-@import "functions/grid-width";
-@import "functions/linear-gradient";
-@import "functions/modular-scale";
-@import "functions/px-to-em";
-@import "functions/radial-gradient";
-@import "functions/tint-shade";
-@import "functions/transition-property-name";
-
-// CSS3 Mixins
-@import "css3/animation";
-@import "css3/appearance";
-@import "css3/backface-visibility";
-@import "css3/background";
-@import "css3/background-image";
-@import "css3/border-image";
-@import "css3/border-radius";
-@import "css3/box-sizing";
-@import "css3/columns";
-@import "css3/flex-box";
-@import "css3/font-face";
-@import "css3/hidpi-media-query";
-@import "css3/image-rendering";
-@import "css3/inline-block";
-@import "css3/keyframes";
-@import "css3/linear-gradient";
-@import "css3/perspective";
-@import "css3/radial-gradient";
-@import "css3/transform";
-@import "css3/transition";
-@import "css3/user-select";
-@import "css3/placeholder";
-
-// Addons & other mixins
-@import "addons/button";
-@import "addons/clearfix";
-@import "addons/font-family";
-@import "addons/hide-text";
-@import "addons/html5-input-types";
-@import "addons/position";
-@import "addons/prefixer";
-@import "addons/retina-image";
-@import "addons/size";
-@import "addons/timing-functions";
-@import "addons/triangle";
-
-// Soon to be deprecated Mixins
-@import "bourbon-deprecated-upcoming";
Index: hemes/berlin/scss/libs/bourbon/addons/_button.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_button.scss	(revision 2640)
+++ 	(revision )
@@ -1,273 +1,0 @@
-@mixin button ($style: simple, $base-color: #4294f0) {
-
-  @if type-of($style) == color {
-    $base-color: $style;
-    $style: simple;
-  }
-
-  // Grayscale button
-  @if $base-color == grayscale($base-color) {
-    @if $style == simple {
-      @include simple($base-color, $grayscale: true);
-    }
-
-    @else if $style == shiny {
-      @include shiny($base-color, $grayscale: true);
-    }
-
-    @else if $style == pill {
-      @include pill($base-color, $grayscale: true);
-    }
-  }
-
-  // Colored button
-  @else {
-    @if $style == simple {
-      @include simple($base-color);
-    }
-
-    @else if $style == shiny {
-      @include shiny($base-color);
-    }
-
-    @else if $style == pill {
-      @include pill($base-color);
-    }
-  }
-
-  &:disabled {
-    opacity: 0.5;
-    cursor: not-allowed;
-  }
-}
-
-
-// Simple Button
-//************************************************************************//
-@mixin simple($base-color, $grayscale: false) {
-  $color:         hsl(0, 0, 100%);
-  $border:        adjust-color($base-color, $saturation:  9%,  $lightness: -14%);
-  $inset-shadow:  adjust-color($base-color, $saturation: -8%,  $lightness:  15%);
-  $stop-gradient: adjust-color($base-color, $saturation:  9%,  $lightness: -11%);
-  $text-shadow:   adjust-color($base-color, $saturation:  15%, $lightness: -18%);
-
-  @if lightness($base-color) > 70% {
-    $color:       hsl(0, 0, 20%);
-    $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
-  }
-
-  @if $grayscale == true {
-    $border:        grayscale($border);
-    $inset-shadow:  grayscale($inset-shadow);
-    $stop-gradient: grayscale($stop-gradient);
-    $text-shadow:   grayscale($text-shadow);
-  }
-
-  border: 1px solid $border;
-  border-radius: 3px;
-  box-shadow: inset 0 1px 0 0 $inset-shadow;
-  color: $color;
-  display: inline-block;
-  font-size: 11px;
-  font-weight: bold;
-  @include linear-gradient ($base-color, $stop-gradient);
-  padding: 7px 18px;
-  text-decoration: none;
-  text-shadow: 0 1px 0 $text-shadow;
-  background-clip: padding-box;
-
-  &:hover:not(:disabled) {
-    $base-color-hover:    adjust-color($base-color, $saturation: -4%, $lightness: -5%);
-    $inset-shadow-hover:  adjust-color($base-color, $saturation: -7%, $lightness:  5%);
-    $stop-gradient-hover: adjust-color($base-color, $saturation:  8%, $lightness: -14%);
-
-    @if $grayscale == true {
-      $base-color-hover:    grayscale($base-color-hover);
-      $inset-shadow-hover:  grayscale($inset-shadow-hover);
-      $stop-gradient-hover: grayscale($stop-gradient-hover);
-    }
-
-    box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
-    cursor: pointer;
-    @include linear-gradient ($base-color-hover, $stop-gradient-hover);
-  }
-
-  &:active:not(:disabled) {
-    $border-active:       adjust-color($base-color, $saturation: 9%, $lightness: -14%);
-    $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%);
-
-    @if $grayscale == true {
-      $border-active:       grayscale($border-active);
-      $inset-shadow-active: grayscale($inset-shadow-active);
-    }
-
-    border: 1px solid $border-active;
-    box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active, 0 1px 1px 0 #eee;
-  }
-}
-
-
-// Shiny Button
-//************************************************************************//
-@mixin shiny($base-color, $grayscale: false) {
-  $color:         hsl(0, 0, 100%);
-  $border:        adjust-color($base-color, $red: -117, $green: -111, $blue: -81);
-  $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122);
-  $fourth-stop:   adjust-color($base-color, $red: -79,  $green: -70,  $blue: -46);
-  $inset-shadow:  adjust-color($base-color, $red:  37,  $green:  29,  $blue:  12);
-  $second-stop:   adjust-color($base-color, $red: -56,  $green: -50,  $blue: -33);
-  $text-shadow:   adjust-color($base-color, $red: -140, $green: -141, $blue: -114);
-  $third-stop:    adjust-color($base-color, $red: -86,  $green: -75,  $blue: -48);
-
-  @if lightness($base-color) > 70% {
-    $color:       hsl(0, 0, 20%);
-    $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
-  }
-
-  @if $grayscale == true {
-    $border:        grayscale($border);
-    $border-bottom: grayscale($border-bottom);
-    $fourth-stop:   grayscale($fourth-stop);
-    $inset-shadow:  grayscale($inset-shadow);
-    $second-stop:   grayscale($second-stop);
-    $text-shadow:   grayscale($text-shadow);
-    $third-stop:    grayscale($third-stop);
-  }
-
-  border: 1px solid $border;
-  border-bottom: 1px solid $border-bottom;
-  border-radius: 5px;
-  box-shadow: inset 0 1px 0 0 $inset-shadow;
-  color: $color;
-  display: inline-block;
-  font-size: 14px;
-  font-weight: bold;
-  @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%);
-  padding: 8px 20px;
-  text-align: center;
-  text-decoration: none;
-  text-shadow: 0 -1px 1px $text-shadow;
-
-  &:hover:not(:disabled) {
-    $first-stop-hover:  adjust-color($base-color, $red: -13, $green: -15, $blue: -18);
-    $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51);
-    $third-stop-hover:  adjust-color($base-color, $red: -93, $green: -85, $blue: -66);
-    $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63);
-
-    @if $grayscale == true {
-      $first-stop-hover:  grayscale($first-stop-hover);
-      $second-stop-hover: grayscale($second-stop-hover);
-      $third-stop-hover:  grayscale($third-stop-hover);
-      $fourth-stop-hover: grayscale($fourth-stop-hover);
-    }
-
-    cursor: pointer;
-    @include linear-gradient(top, $first-stop-hover  0%,
-                                  $second-stop-hover 50%,
-                                  $third-stop-hover  50%,
-                                  $fourth-stop-hover 100%);
-  }
-
-  &:active:not(:disabled) {
-    $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122);
-
-    @if $grayscale == true {
-      $inset-shadow-active: grayscale($inset-shadow-active);
-    }
-
-    box-shadow: inset 0 0 20px 0 $inset-shadow-active, 0 1px 0 #fff;
-  }
-}
-
-
-// Pill Button
-//************************************************************************//
-@mixin pill($base-color, $grayscale: false) {
-  $color:         hsl(0, 0, 100%);
-  $border-bottom: adjust-color($base-color, $hue:  8, $saturation: -11%, $lightness: -26%);
-  $border-sides:  adjust-color($base-color, $hue:  4, $saturation: -21%, $lightness: -21%);
-  $border-top:    adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%);
-  $inset-shadow:  adjust-color($base-color, $hue: -1, $saturation: -1%,  $lightness:  7%);
-  $stop-gradient: adjust-color($base-color, $hue:  8, $saturation:  14%, $lightness: -10%);
-  $text-shadow:   adjust-color($base-color, $hue:  5, $saturation: -19%, $lightness: -15%);
-
-  @if lightness($base-color) > 70% {
-    $color:       hsl(0, 0, 20%);
-    $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
-  }
-
-  @if $grayscale == true {
-    $border-bottom: grayscale($border-bottom);
-    $border-sides:  grayscale($border-sides);
-    $border-top:    grayscale($border-top);
-    $inset-shadow:  grayscale($inset-shadow);
-    $stop-gradient: grayscale($stop-gradient);
-    $text-shadow:   grayscale($text-shadow);
-  }
-
-  border: 1px solid $border-top;
-  border-color: $border-top $border-sides $border-bottom;
-  border-radius: 16px;
-  box-shadow: inset 0 1px 0 0 $inset-shadow, 0 1px 2px 0 #b3b3b3;
-  color: $color;
-  display: inline-block;
-  font-size: 11px;
-  font-weight: normal;
-  line-height: 1;
-  @include linear-gradient ($base-color, $stop-gradient);
-  padding: 5px 16px;
-  text-align: center;
-  text-decoration: none;
-  text-shadow: 0 -1px 1px $text-shadow;
-  background-clip: padding-box;
-
-  &:hover:not(:disabled) {
-    $base-color-hover:    adjust-color($base-color,                                $lightness: -4.5%);
-    $border-bottom:       adjust-color($base-color, $hue:  8, $saturation:  13.5%, $lightness: -32%);
-    $border-sides:        adjust-color($base-color, $hue:  4, $saturation: -2%,    $lightness: -27%);
-    $border-top:          adjust-color($base-color, $hue: -1, $saturation: -17%,   $lightness: -21%);
-    $inset-shadow-hover:  adjust-color($base-color,           $saturation: -1%,    $lightness:  3%);
-    $stop-gradient-hover: adjust-color($base-color, $hue:  8, $saturation: -4%,    $lightness: -15.5%);
-    $text-shadow-hover:   adjust-color($base-color, $hue:  5, $saturation: -5%,    $lightness: -22%);
-
-    @if $grayscale == true {
-      $base-color-hover:    grayscale($base-color-hover);
-      $border-bottom:       grayscale($border-bottom);
-      $border-sides:        grayscale($border-sides);
-      $border-top:          grayscale($border-top);
-      $inset-shadow-hover:  grayscale($inset-shadow-hover);
-      $stop-gradient-hover: grayscale($stop-gradient-hover);
-      $text-shadow-hover:   grayscale($text-shadow-hover);
-    }
-
-    border: 1px solid $border-top;
-    border-color: $border-top $border-sides $border-bottom;
-    box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
-    cursor: pointer;
-    @include linear-gradient ($base-color-hover, $stop-gradient-hover);
-    text-shadow: 0 -1px 1px $text-shadow-hover;
-    background-clip: padding-box;
-  }
-
-  &:active:not(:disabled) {
-    $active-color:         adjust-color($base-color, $hue: 4,  $saturation: -12%,  $lightness: -10%);
-    $border-active:        adjust-color($base-color, $hue: 6,  $saturation: -2.5%, $lightness: -30%);
-    $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation:  6%,   $lightness: -31%);
-    $inset-shadow-active:  adjust-color($base-color, $hue: 9,  $saturation:  2%,   $lightness: -21.5%);
-    $text-shadow-active:   adjust-color($base-color, $hue: 5,  $saturation: -12%,  $lightness: -21.5%);
-
-    @if $grayscale == true {
-      $active-color:         grayscale($active-color);
-      $border-active:        grayscale($border-active);
-      $border-bottom-active: grayscale($border-bottom-active);
-      $inset-shadow-active:  grayscale($inset-shadow-active);
-      $text-shadow-active:   grayscale($text-shadow-active);
-    }
-
-    background: $active-color;
-    border: 1px solid $border-active;
-    border-bottom: 1px solid $border-bottom-active;
-    box-shadow: inset 0 0 6px 3px $inset-shadow-active, 0 1px 0 0 #fff;
-    text-shadow: 0 -1px 1px $text-shadow-active;
-  }
-}
Index: hemes/berlin/scss/libs/bourbon/addons/_clearfix.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_clearfix.scss	(revision 2640)
+++ 	(revision )
@@ -1,29 +1,0 @@
-// Micro clearfix provides an easy way to contain floats without adding additional markup
-//
-// Example usage:
-//
-//    // Contain all floats within .wrapper
-//    .wrapper {
-//      @include clearfix;
-//      .content,
-//      .sidebar {
-//        float : left;
-//      }
-//    }
-
-@mixin clearfix {
-  *zoom: 1;
-
-  &:before,
-  &:after {
-    content: " ";
-    display: table;
-  }
-
-  &:after {
-    clear: both;
-  }
-}
-
-// Acknowledgements
-// Micro clearfix: [Nicolas Gallagher](http://nicolasgallagher.com/micro-clearfix-hack/)
Index: hemes/berlin/scss/libs/bourbon/addons/_font-family.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_font-family.scss	(revision 2640)
+++ 	(revision )
@@ -1,5 +1,0 @@
-$georgia: Georgia, Cambria, "Times New Roman", Times, serif;
-$helvetica: "Helvetica Neue", Helvetica, Arial, sans-serif;
-$lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif;
-$monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace;
-$verdana: Verdana, Geneva, sans-serif;
Index: hemes/berlin/scss/libs/bourbon/addons/_hide-text.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_hide-text.scss	(revision 2640)
+++ 	(revision )
@@ -1,5 +1,0 @@
-@mixin hide-text {
-  color:            transparent;
-  font:             0/0 a;
-  text-shadow:      none;
-}
Index: hemes/berlin/scss/libs/bourbon/addons/_html5-input-types.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_html5-input-types.scss	(revision 2640)
+++ 	(revision )
@@ -1,56 +1,0 @@
-//************************************************************************//
-// Generate a variable ($all-text-inputs) with a list of all html5
-// input types that have a text-based input, excluding textarea.
-// http://diveintohtml5.org/forms.html
-//************************************************************************//
-$inputs-list: 'input[type="email"]',
-              'input[type="number"]',
-              'input[type="password"]',
-              'input[type="search"]',
-              'input[type="tel"]',
-              'input[type="text"]',
-              'input[type="url"]',
-
-              // Webkit & Gecko may change the display of these in the future
-              'input[type="color"]',
-              'input[type="date"]',
-              'input[type="datetime"]',
-              'input[type="datetime-local"]',
-              'input[type="month"]',
-              'input[type="time"]',
-              'input[type="week"]';
-
-$unquoted-inputs-list: ();
-@each $input-type in $inputs-list {
-  $unquoted-inputs-list: append($unquoted-inputs-list, unquote($input-type), comma);
-}
-
-$all-text-inputs: $unquoted-inputs-list;
-
-
-// Hover Pseudo-class
-//************************************************************************//
-$all-text-inputs-hover: ();
-@each $input-type in $unquoted-inputs-list {
-      $input-type-hover: $input-type + ":hover";
-      $all-text-inputs-hover: append($all-text-inputs-hover, $input-type-hover, comma);
-}
-
-// Focus Pseudo-class
-//************************************************************************//
-$all-text-inputs-focus: ();
-@each $input-type in $unquoted-inputs-list {
-      $input-type-focus: $input-type + ":focus";
-      $all-text-inputs-focus: append($all-text-inputs-focus, $input-type-focus, comma);
-}
-
-// You must use interpolation on the variable:
-// #{$all-text-inputs}
-// #{$all-text-inputs-hover}
-// #{$all-text-inputs-focus}
-
-// Example
-//************************************************************************//
-//   #{$all-text-inputs}, textarea {
-//     border: 1px solid red;
-//   }
Index: hemes/berlin/scss/libs/bourbon/addons/_position.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_position.scss	(revision 2640)
+++ 	(revision )
@@ -1,42 +1,0 @@
-@mixin position ($position: relative, $coordinates: 0 0 0 0) {
-
-  @if type-of($position) == list {
-    $coordinates: $position;
-    $position: relative;
-  }
-
-  $top: nth($coordinates, 1);
-  $right: nth($coordinates, 2);
-  $bottom: nth($coordinates, 3);
-  $left: nth($coordinates, 4);
-
-  position: $position;
-
-  @if $top == auto {
-    top: $top;
-  }
-  @else if not(unitless($top)) {
-    top: $top;
-  }
-
-  @if $right == auto {
-    right: $right;
-  }
-  @else if not(unitless($right)) {
-    right: $right;
-  }
-
-  @if $bottom == auto {
-    bottom: $bottom;
-  }
-  @else if not(unitless($bottom)) {
-    bottom: $bottom;
-  }
-
-  @if $left == auto {
-    left: $left;
-  }
-  @else if not(unitless($left)) {
-    left: $left;
-  }
-}
Index: hemes/berlin/scss/libs/bourbon/addons/_prefixer.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_prefixer.scss	(revision 2640)
+++ 	(revision )
@@ -1,49 +1,0 @@
-//************************************************************************//
-// Example: @include prefixer(border-radius, $radii, webkit ms spec);
-//************************************************************************//
-$prefix-for-webkit:    true !default;
-$prefix-for-mozilla:   true !default;
-$prefix-for-microsoft: true !default;
-$prefix-for-opera:     true !default;
-$prefix-for-spec:      true !default; // required for keyframe mixin
-
-@mixin prefixer ($property, $value, $prefixes) {
-  @each $prefix in $prefixes {
-    @if $prefix == webkit {
-      @if $prefix-for-webkit {
-        -webkit-#{$property}: $value;
-      }
-    }
-    @else if $prefix == moz {
-      @if $prefix-for-mozilla {
-        -moz-#{$property}: $value;
-      }
-    }
-    @else if $prefix == ms {
-      @if $prefix-for-microsoft {
-        -ms-#{$property}: $value;
-      }
-    }
-    @else if $prefix == o {
-      @if $prefix-for-opera {
-        -o-#{$property}: $value;
-      }
-    }
-    @else if $prefix == spec {
-      @if $prefix-for-spec {
-        #{$property}: $value;
-      }
-    }
-    @else  {
-      @warn "Unrecognized prefix: #{$prefix}";
-    }
-  }
-}
-
-@mixin disable-prefix-for-all() {
-  $prefix-for-webkit:    false;
-  $prefix-for-mozilla:   false;
-  $prefix-for-microsoft: false;
-  $prefix-for-opera:     false;
-  $prefix-for-spec:      false;
-}
Index: hemes/berlin/scss/libs/bourbon/addons/_retina-image.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_retina-image.scss	(revision 2640)
+++ 	(revision )
@@ -1,32 +1,0 @@
-@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $asset-pipeline: false) {
-  @if $asset-pipeline {
-    background-image: image-url("#{$filename}.#{$extension}");
-  }
-  @else {
-    background-image: url("#{$filename}.#{$extension}");
-  }
-
-  @include hidpi {
-
-    @if $asset-pipeline {
-      @if $retina-filename {
-        background-image: image-url("#{$retina-filename}.#{$extension}");
-      }
-      @else {
-        background-image: image-url("#{$filename}@2x.#{$extension}");
-      }
-    }
-
-    @else {
-      @if $retina-filename {
-        background-image: url("#{$retina-filename}.#{$extension}");
-      }
-      @else {
-        background-image: url("#{$filename}@2x.#{$extension}");
-      }
-    }
-
-    background-size: $background-size;
-
-  }
-}
Index: hemes/berlin/scss/libs/bourbon/addons/_size.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_size.scss	(revision 2640)
+++ 	(revision )
@@ -1,44 +1,0 @@
-@mixin size($size) {
-  @if length($size) == 1 {
-    @if $size == auto {
-      width:  $size;
-      height: $size;
-    }
-
-    @else if unitless($size) {
-      width:  $size + px;
-      height: $size + px;
-    }
-
-    @else if not(unitless($size)) {
-      width:  $size;
-      height: $size;
-    }
-  }
-
-  // Width x Height
-  @if length($size) == 2 {
-    $width:  nth($size, 1);
-    $height: nth($size, 2);
-
-    @if $width == auto {
-      width: $width;
-    }
-    @else if not(unitless($width)) {
-      width: $width;
-    }
-    @else if unitless($width) {
-      width: $width + px;
-    }
-
-    @if $height == auto {
-      height: $height;
-    }
-    @else if not(unitless($height)) {
-      height: $height;
-    }
-    @else if unitless($height) {
-      height: $height + px;
-    }
-  }
-}
Index: hemes/berlin/scss/libs/bourbon/addons/_timing-functions.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_timing-functions.scss	(revision 2640)
+++ 	(revision )
@@ -1,32 +1,0 @@
-// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie)
-// Timing functions are the same as demo'ed here: http://jqueryui.com/demos/effect/easing.html
-
-// EASE IN
-$ease-in-quad:      cubic-bezier(0.550,  0.085, 0.680, 0.530);
-$ease-in-cubic:     cubic-bezier(0.550,  0.055, 0.675, 0.190);
-$ease-in-quart:     cubic-bezier(0.895,  0.030, 0.685, 0.220);
-$ease-in-quint:     cubic-bezier(0.755,  0.050, 0.855, 0.060);
-$ease-in-sine:      cubic-bezier(0.470,  0.000, 0.745, 0.715);
-$ease-in-expo:      cubic-bezier(0.950,  0.050, 0.795, 0.035);
-$ease-in-circ:      cubic-bezier(0.600,  0.040, 0.980, 0.335);
-$ease-in-back:      cubic-bezier(0.600, -0.280, 0.735, 0.045);
-
-// EASE OUT
-$ease-out-quad:     cubic-bezier(0.250,  0.460, 0.450, 0.940);
-$ease-out-cubic:    cubic-bezier(0.215,  0.610, 0.355, 1.000);
-$ease-out-quart:    cubic-bezier(0.165,  0.840, 0.440, 1.000);
-$ease-out-quint:    cubic-bezier(0.230,  1.000, 0.320, 1.000);
-$ease-out-sine:     cubic-bezier(0.390,  0.575, 0.565, 1.000);
-$ease-out-expo:     cubic-bezier(0.190,  1.000, 0.220, 1.000);
-$ease-out-circ:     cubic-bezier(0.075,  0.820, 0.165, 1.000);
-$ease-out-back:     cubic-bezier(0.175,  0.885, 0.320, 1.275);
-
-// EASE IN OUT
-$ease-in-out-quad:  cubic-bezier(0.455,  0.030, 0.515, 0.955);
-$ease-in-out-cubic: cubic-bezier(0.645,  0.045, 0.355, 1.000);
-$ease-in-out-quart: cubic-bezier(0.770,  0.000, 0.175, 1.000);
-$ease-in-out-quint: cubic-bezier(0.860,  0.000, 0.070, 1.000);
-$ease-in-out-sine:  cubic-bezier(0.445,  0.050, 0.550, 0.950);
-$ease-in-out-expo:  cubic-bezier(1.000,  0.000, 0.000, 1.000);
-$ease-in-out-circ:  cubic-bezier(0.785,  0.135, 0.150, 0.860);
-$ease-in-out-back:  cubic-bezier(0.680, -0.550, 0.265, 1.550);
Index: hemes/berlin/scss/libs/bourbon/addons/_triangle.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/addons/_triangle.scss	(revision 2640)
+++ 	(revision )
@@ -1,45 +1,0 @@
-@mixin triangle ($size, $color, $direction) {
-  height: 0;
-  width: 0;
-
-  @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {
-    border-color: transparent;
-    border-style: solid;
-    border-width: $size / 2;
-
-    @if $direction == up {
-      border-bottom-color: $color;
-
-    } @else if $direction == right {
-      border-left-color:   $color;
-
-    } @else if $direction == down {
-      border-top-color:    $color;
-
-    } @else if $direction == left {
-      border-right-color:  $color;
-    }
-  }
-
-  @else if ($direction == up-right) or ($direction == up-left) {
-    border-top: $size solid $color;
-
-    @if $direction == up-right {
-      border-left:  $size solid transparent;
-
-    } @else if $direction == up-left {
-      border-right: $size solid transparent;
-    }
-  }
-
-  @else if ($direction == down-right) or ($direction == down-left) {
-    border-bottom: $size solid $color;
-
-    @if $direction == down-right {
-      border-left:  $size solid transparent;
-
-    } @else if $direction == down-left {
-      border-right: $size solid transparent;
-    }
-  }
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_animation.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_animation.scss	(revision 2640)
+++ 	(revision )
@@ -1,52 +1,0 @@
-// http://www.w3.org/TR/css3-animations/#the-animation-name-property-
-// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties.
-
-// Official animation shorthand property.
-@mixin animation ($animations...) {
-  @include prefixer(animation, $animations, webkit moz spec);
-}
-
-// Individual Animation Properties
-@mixin animation-name ($names...) {
-  @include prefixer(animation-name, $names, webkit moz spec);
-}
-
-
-@mixin animation-duration ($times...) {
-  @include prefixer(animation-duration, $times, webkit moz spec);
-}
-
-
-@mixin animation-timing-function ($motions...) {
-// ease | linear | ease-in | ease-out | ease-in-out
-  @include prefixer(animation-timing-function, $motions, webkit moz spec);
-}
-
-
-@mixin animation-iteration-count ($values...) {
-// infinite | <number>
-  @include prefixer(animation-iteration-count, $values, webkit moz spec);
-}
-
-
-@mixin animation-direction ($directions...) {
-// normal | alternate
-  @include prefixer(animation-direction, $directions, webkit moz spec);
-}
-
-
-@mixin animation-play-state ($states...) {
-// running | paused
-  @include prefixer(animation-play-state, $states, webkit moz spec);
-}
-
-
-@mixin animation-delay ($times...) {
-  @include prefixer(animation-delay, $times, webkit moz spec);
-}
-
-
-@mixin animation-fill-mode ($modes...) {
-// none | forwards | backwards | both
-  @include prefixer(animation-fill-mode, $modes, webkit moz spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_appearance.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_appearance.scss	(revision 2640)
+++ 	(revision )
@@ -1,3 +1,0 @@
-@mixin appearance ($value) {
-  @include prefixer(appearance, $value, webkit moz ms o spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_backface-visibility.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_backface-visibility.scss	(revision 2640)
+++ 	(revision )
@@ -1,6 +1,0 @@
-//************************************************************************//
-// Backface-visibility mixin
-//************************************************************************//
-@mixin backface-visibility($visibility) {
-  @include prefixer(backface-visibility, $visibility, webkit spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_background-image.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_background-image.scss	(revision 2640)
+++ 	(revision )
@@ -1,48 +1,0 @@
-//************************************************************************//
-// Background-image property for adding multiple background images with
-// gradients, or for stringing multiple gradients together.
-//************************************************************************//
-
-@mixin background-image($images...) {
-  background-image: _add-prefix($images, webkit);
-  background-image: _add-prefix($images);
-}
-
-@function _add-prefix($images, $vendor: false) {
-  $images-prefixed: ();
-  $gradient-positions: false;
-  @for $i from 1 through length($images) {
-    $type: type-of(nth($images, $i)); // Get type of variable - List or String
-
-    // If variable is a list - Gradient
-    @if $type == list {
-      $gradient-type: nth(nth($images, $i), 1); // linear or radial
-      $gradient-pos: null;
-      $gradient-args: null;
-
-      @if ($gradient-type == linear) or ($gradient-type == radial) {
-        $gradient-pos:  nth(nth($images, $i), 2); // Get gradient position
-        $gradient-args: nth(nth($images, $i), 3); // Get actual gradient (red, blue)
-      }
-      @else {
-        $gradient-args: nth(nth($images, $i), 2); // Get actual gradient (red, blue)
-      }
-
-      $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos);
-      $gradient: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
-      $images-prefixed: append($images-prefixed, $gradient, comma);
-    }
-    // If variable is a string - Image
-    @else if $type == string {
-      $images-prefixed: join($images-prefixed, nth($images, $i), comma);
-    }
-  }
-  @return $images-prefixed;
-}
-
-//Examples:
-  //@include background-image(linear-gradient(top, orange, red));
-  //@include background-image(radial-gradient(50% 50%, cover circle, orange, red));
-  //@include background-image(url("/images/a.png"), linear-gradient(orange, red));
-  //@include background-image(url("image.png"), linear-gradient(orange, red), url("image.png"));
-  //@include background-image(linear-gradient(hsla(0, 100%, 100%, 0.25) 0%, hsla(0, 100%, 100%, 0.08) 50%, transparent 50%), linear-gradient(orange, red));
Index: hemes/berlin/scss/libs/bourbon/css3/_background.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_background.scss	(revision 2640)
+++ 	(revision )
@@ -1,103 +1,0 @@
-//************************************************************************//
-// Background property for adding multiple backgrounds using shorthand
-// notation.
-//************************************************************************//
-
-@mixin background(
-  $background-1       , $background-2: false,
-  $background-3: false, $background-4: false,
-  $background-5: false, $background-6: false,
-  $background-7: false, $background-8: false,
-  $background-9: false, $background-10: false,
-  $fallback: false
-) {
-  $backgrounds: compact($background-1, $background-2,
-                $background-3, $background-4,
-                $background-5, $background-6,
-                $background-7, $background-8,
-                $background-9, $background-10);
-
-  $fallback-color: false;
-  @if (type-of($fallback) == color) or ($fallback == "transparent") {
-    $fallback-color: $fallback;
-  }
-  @else {
-    $fallback-color: _extract-background-color($backgrounds);
-  }
-
-  @if $fallback-color {
-    background-color: $fallback-color;
-  }
-  background: _background-add-prefix($backgrounds, webkit);
-  background: _background-add-prefix($backgrounds);
-}
-
-@function _extract-background-color($backgrounds) {
-  $final-bg-layer: nth($backgrounds, length($backgrounds));
-  @if type-of($final-bg-layer) == list {
-    @for $i from 1 through length($final-bg-layer) {
-      $value: nth($final-bg-layer, $i);
-      @if type-of($value) == color {
-        @return $value;
-      }
-    }
-  }
-  @return false;
-}
-
-@function _background-add-prefix($backgrounds, $vendor: false) {
-  $backgrounds-prefixed: ();
-
-  @for $i from 1 through length($backgrounds) {
-    $shorthand: nth($backgrounds, $i); // Get member for current index
-    $type: type-of($shorthand); // Get type of variable - List (gradient) or String (image)
-
-    // If shorthand is a list (gradient)
-    @if $type == list {
-      $first-member: nth($shorthand, 1); // Get first member of shorthand
-
-      // Linear Gradient
-      @if index(linear radial, nth($first-member, 1)) {
-        $gradient-type: nth($first-member, 1); // linear || radial
-        $gradient-args:      false;
-        $gradient-positions: false;
-        $shorthand-start:    false;
-        @if type-of($first-member) == list { // Linear gradient plus additional shorthand values - lg(red,orange)repeat,...
-          $gradient-positions: nth($first-member, 2);
-          $gradient-args:      nth($first-member, 3);
-          $shorthand-start: 2;
-        }
-        @else { // Linear gradient only - lg(red,orange),...
-          $gradient-positions: nth($shorthand, 2);
-          $gradient-args:      nth($shorthand, 3); // Get gradient (red, blue)
-        }
-
-        $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-positions);
-        $gradient: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
-
-        // Append any additional shorthand args to gradient
-        @if $shorthand-start {
-          @for $j from $shorthand-start through length($shorthand) {
-            $gradient: join($gradient, nth($shorthand, $j), space);
-          }
-        }
-        $backgrounds-prefixed: append($backgrounds-prefixed, $gradient, comma);
-      }
-      // Image with additional properties
-      @else {
-        $backgrounds-prefixed: append($backgrounds-prefixed, $shorthand, comma);
-      }
-    }
-    // If shorthand is a simple string (color or image)
-    @else if $type == string {
-      $backgrounds-prefixed: join($backgrounds-prefixed, $shorthand, comma);
-    }
-  }
-  @return $backgrounds-prefixed;
-}
-
-//Examples:
-  //@include background(linear-gradient(top, orange, red));
-  //@include background(radial-gradient(circle at 40% 40%, orange, red));
-  //@include background(url("/images/a.png") no-repeat, linear-gradient(orange, red));
-  //@include background(url("image.png") center center, linear-gradient(orange, red), url("image.png"));
Index: hemes/berlin/scss/libs/bourbon/css3/_border-image.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_border-image.scss	(revision 2640)
+++ 	(revision )
@@ -1,55 +1,0 @@
-@mixin border-image($images) {
-  -webkit-border-image: _border-add-prefix($images, webkit);
-     -moz-border-image: _border-add-prefix($images, moz);
-       -o-border-image: _border-add-prefix($images, o);
-          border-image: _border-add-prefix($images);
-}
-
-@function _border-add-prefix($images, $vendor: false) {
-  $border-image: null;
-  $images-type:  type-of(nth($images, 1));
-  $first-var:    nth(nth($images, 1), 1);          // Get type of Gradient (Linear || radial)
-
-  // If input is a gradient
-  @if $images-type == string {
-    @if ($first-var == "linear") or ($first-var == "radial") {
-      $gradient-type: nth($images, 1);           // Get type of gradient (linear || radial)
-      $gradient-pos:  nth($images, 2);           // Get gradient position
-      $gradient-args: nth($images, 3);           // Get actual gradient (red, blue)
-      $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos);
-      $border-image:  _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
-    }
-    // If input is a URL
-    @else {
-      $border-image: $images;
-    }
-  }
-  // If input is gradient or url + additional args
-  @else if $images-type == list {
-    $type: type-of(nth($images, 1));           // Get type of variable - List or String
-
-    // If variable is a list - Gradient
-    @if $type == list {
-      $gradient: nth($images, 1);
-      $gradient-type: nth($gradient, 1);           // Get type of gradient (linear || radial)
-      $gradient-pos:  nth($gradient, 2);           // Get gradient position
-      $gradient-args: nth($gradient, 3);           // Get actual gradient (red, blue)
-      $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos);
-      $border-image:  _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
-
-      @for $i from 2 through length($images) {
-        $border-image: append($border-image, nth($images, $i));
-      }
-    }
-  }
-  @return $border-image;
-}
-
-//Examples:
-// @include border-image(url("image.png"));
-// @include border-image(url("image.png") 20 stretch);
-// @include border-image(linear-gradient(45deg, orange, yellow));
-// @include border-image(linear-gradient(45deg, orange, yellow) stretch);
-// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round);
-// @include border-image(radial-gradient(top, cover, orange, yellow, orange));
-
Index: hemes/berlin/scss/libs/bourbon/css3/_border-radius.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_border-radius.scss	(revision 2640)
+++ 	(revision )
@@ -1,22 +1,0 @@
-//************************************************************************//
-// Shorthand Border-radius mixins
-//************************************************************************//
-@mixin border-top-radius($radii) {
-  @include prefixer(border-top-left-radius, $radii, spec);
-  @include prefixer(border-top-right-radius, $radii, spec);
-}
-
-@mixin border-bottom-radius($radii) {
-  @include prefixer(border-bottom-left-radius, $radii, spec);
-  @include prefixer(border-bottom-right-radius, $radii, spec);
-}
-
-@mixin border-left-radius($radii) {
-  @include prefixer(border-top-left-radius, $radii, spec);
-  @include prefixer(border-bottom-left-radius, $radii, spec);
-}
-
-@mixin border-right-radius($radii) {
-  @include prefixer(border-top-right-radius, $radii, spec);
-  @include prefixer(border-bottom-right-radius, $radii, spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_box-sizing.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_box-sizing.scss	(revision 2640)
+++ 	(revision )
@@ -1,4 +1,0 @@
-@mixin box-sizing ($box) {
-//  content-box | border-box | inherit
-  @include prefixer(box-sizing, $box, webkit moz spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_columns.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_columns.scss	(revision 2640)
+++ 	(revision )
@@ -1,47 +1,0 @@
-@mixin columns($arg: auto) {
-// <column-count> || <column-width>
-  @include prefixer(columns, $arg, webkit moz spec);
-}
-
-@mixin column-count($int: auto) {
-// auto || integer
-  @include prefixer(column-count, $int, webkit moz spec);
-}
-
-@mixin column-gap($length: normal) {
-// normal || length
-  @include prefixer(column-gap, $length, webkit moz spec);
-}
-
-@mixin column-fill($arg: auto) {
-// auto || length
-  @include prefixer(columns-fill, $arg, webkit moz spec);
-}
-
-@mixin column-rule($arg) {
-// <border-width> || <border-style> || <color>
-  @include prefixer(column-rule, $arg, webkit moz spec);
-}
-
-@mixin column-rule-color($color) {
-  @include prefixer(column-rule-color, $color, webkit moz spec);
-}
-
-@mixin column-rule-style($style: none) {
-// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid
-  @include prefixer(column-rule-style, $style, webkit moz spec);
-}
-
-@mixin column-rule-width ($width: none) {
-  @include prefixer(column-rule-width, $width, webkit moz spec);
-}
-
-@mixin column-span($arg: none) {
-// none || all
-  @include prefixer(column-span, $arg, webkit moz spec);
-}
-
-@mixin column-width($length: auto) {
-// auto || length
-  @include prefixer(column-width, $length, webkit moz spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_flex-box.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_flex-box.scss	(revision 2640)
+++ 	(revision )
@@ -1,52 +1,0 @@
-// CSS3 Flexible Box Model and property defaults
-
-// Custom shorthand notation for flexbox
-@mixin box($orient: inline-axis, $pack: start, $align: stretch) {
-  @include display-box;
-  @include box-orient($orient);
-  @include box-pack($pack);
-  @include box-align($align);
-}
-
-@mixin display-box {
-  display: -webkit-box;
-  display: -moz-box;
-  display: box;
-}
-
-@mixin box-orient($orient: inline-axis) {
-// horizontal|vertical|inline-axis|block-axis|inherit
-  @include prefixer(box-orient, $orient, webkit moz spec);
-}
-
-@mixin box-pack($pack: start) {
-// start|end|center|justify
-  @include prefixer(box-pack, $pack, webkit moz spec);
-}
-
-@mixin box-align($align: stretch) {
-// start|end|center|baseline|stretch
-  @include prefixer(box-align, $align, webkit moz spec);
-}
-
-@mixin box-direction($direction: normal) {
-// normal|reverse|inherit
-  @include prefixer(box-direction, $direction, webkit moz spec);
-}
-
-@mixin box-lines($lines: single) {
-// single|multiple
-  @include prefixer(box-lines, $lines, webkit moz spec);
-}
-
-@mixin box-ordinal-group($int: 1) {
-  @include prefixer(box-ordinal-group, $int, webkit moz spec);
-}
-
-@mixin box-flex($value: 0.0) {
-  @include prefixer(box-flex, $value, webkit moz spec);
-}
-
-@mixin box-flex-group($int: 1) {
-  @include prefixer(box-flex-group, $int, webkit moz spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_font-face.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_font-face.scss	(revision 2640)
+++ 	(revision )
@@ -1,23 +1,0 @@
-// Order of the includes matters, and it is: normal, bold, italic, bold+italic.
-
-@mixin font-face($font-family, $file-path, $weight: normal, $style: normal, $asset-pipeline: false ) {
-  @font-face {
-    font-family: $font-family;
-    font-weight: $weight;
-    font-style: $style;
-
-    @if $asset-pipeline == true {
-      src: font-url('#{$file-path}.eot');
-      src: font-url('#{$file-path}.eot?#iefix')          format('embedded-opentype'),
-           font-url('#{$file-path}.woff')                format('woff'),
-           font-url('#{$file-path}.ttf')                 format('truetype'),
-           font-url('#{$file-path}.svg##{$font-family}') format('svg');
-    } @else {
-      src: url('#{$file-path}.eot');
-      src: url('#{$file-path}.eot?#iefix')               format('embedded-opentype'),
-           url('#{$file-path}.woff')                     format('woff'),
-           url('#{$file-path}.ttf')                      format('truetype'),
-           url('#{$file-path}.svg##{$font-family}')      format('svg');
-    }
-  }
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_hidpi-media-query.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_hidpi-media-query.scss	(revision 2640)
+++ 	(revision )
@@ -1,10 +1,0 @@
-// HiDPI mixin. Default value set to 1.3 to target Google Nexus 7 (http://bjango.com/articles/min-device-pixel-ratio/)
-@mixin hidpi($ratio: 1.3) {
-  @media only screen and (-webkit-min-device-pixel-ratio: $ratio),
-  only screen and (min--moz-device-pixel-ratio: $ratio),
-  only screen and (-o-min-device-pixel-ratio: #{$ratio}/1),
-  only screen and (min-resolution: #{round($ratio*96)}dpi),
-  only screen and (min-resolution: #{$ratio}dppx) {
-    @content;
-  }
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_image-rendering.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_image-rendering.scss	(revision 2640)
+++ 	(revision )
@@ -1,13 +1,0 @@
-@mixin image-rendering ($mode:optimizeQuality) {
-
-  @if ($mode == optimize-contrast) {
-      image-rendering: -moz-crisp-edges;
-      image-rendering: -o-crisp-edges;
-      image-rendering: -webkit-optimize-contrast;
-      image-rendering: optimize-contrast;
-  }
-
-  @else {
-      image-rendering: $mode;
-  }
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_inline-block.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_inline-block.scss	(revision 2640)
+++ 	(revision )
@@ -1,8 +1,0 @@
-// Legacy support for inline-block in IE7 (maybe IE6)
-@mixin inline-block {
-  display: inline-block;
-  vertical-align: baseline;
-  zoom: 1;
-  *display: inline;
-  *vertical-align: auto;
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_keyframes.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_keyframes.scss	(revision 2640)
+++ 	(revision )
@@ -1,43 +1,0 @@
-// Adds keyframes blocks for supported prefixes, removing redundant prefixes in the block's content
-@mixin keyframes($name) {
-  $original-prefix-for-webkit:    $prefix-for-webkit;
-  $original-prefix-for-mozilla:   $prefix-for-mozilla;
-  $original-prefix-for-microsoft: $prefix-for-microsoft;
-  $original-prefix-for-opera:     $prefix-for-opera;
-  $original-prefix-for-spec:      $prefix-for-spec;
-
-  @if $original-prefix-for-webkit {
-    @include disable-prefix-for-all();
-    $prefix-for-webkit: true;
-    @-webkit-keyframes #{$name} {
-      @content;
-    }
-  }
-  @if $original-prefix-for-mozilla {
-    @include disable-prefix-for-all();
-    $prefix-for-mozilla: true;
-    @-moz-keyframes #{$name} {
-      @content;
-    }
-  }
-  @if $original-prefix-for-opera {
-    @include disable-prefix-for-all();
-    $prefix-for-opera: true;
-    @-o-keyframes #{$name} {
-      @content;
-    }
-  }
-  @if $original-prefix-for-spec {
-    @include disable-prefix-for-all();
-    $prefix-for-spec: true;
-    @keyframes #{$name} {
-      @content;
-    }
-  }
-
-  $prefix-for-webkit:    $original-prefix-for-webkit;
-  $prefix-for-mozilla:   $original-prefix-for-mozilla;
-  $prefix-for-microsoft: $original-prefix-for-microsoft;
-  $prefix-for-opera:     $original-prefix-for-opera;
-  $prefix-for-spec:      $original-prefix-for-spec;
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_linear-gradient.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_linear-gradient.scss	(revision 2640)
+++ 	(revision )
@@ -1,41 +1,0 @@
-@mixin linear-gradient($pos, $G1, $G2: false,
-                       $G3: false, $G4: false,
-                       $G5: false, $G6: false,
-                       $G7: false, $G8: false,
-                       $G9: false, $G10: false,
-                       $deprecated-pos1: left top,
-                       $deprecated-pos2: left bottom,
-                       $fallback: false) {
-  // Detect what type of value exists in $pos
-  $pos-type: type-of(nth($pos, 1));
-  $pos-spec: null;
-  $pos-degree: null;
-
-  // If $pos is missing from mixin, reassign vars and add default position
-  @if ($pos-type == color) or (nth($pos, 1) == "transparent")  {
-    $G10: $G9; $G9: $G8; $G8: $G7; $G7: $G6; $G6: $G5;
-     $G5: $G4; $G4: $G3; $G3: $G2; $G2: $G1; $G1: $pos;
-     $pos: null;
-  }
-
-  @if $pos {
-    $positions: _linear-positions-parser($pos);
-    $pos-degree: nth($positions, 1);
-    $pos-spec:   nth($positions, 2);
-  }
-
-  $full: compact($G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10);
-
-  // Set $G1 as the default fallback color
-  $fallback-color: nth($G1, 1);
-
-  // If $fallback is a color use that color as the fallback color
-  @if (type-of($fallback) == color) or ($fallback == "transparent") {
-    $fallback-color: $fallback;
-  }
-
-  background-color: $fallback-color;
-  background-image: _deprecated-webkit-gradient(linear, $deprecated-pos1, $deprecated-pos2, $full); // Safari <= 5.0
-  background-image: -webkit-linear-gradient($pos-degree $full); // Safari 5.1+, Chrome
-  background-image: unquote("linear-gradient(#{$pos-spec}#{$full})");
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_perspective.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_perspective.scss	(revision 2640)
+++ 	(revision )
@@ -1,8 +1,0 @@
-@mixin perspective($depth: none) {
-  // none | <length>
-  @include prefixer(perspective, $depth, webkit moz spec);
-}
-
-@mixin perspective-origin($value: 50% 50%) {
-  @include prefixer(perspective-origin, $value, webkit moz spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_placeholder.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_placeholder.scss	(revision 2640)
+++ 	(revision )
@@ -1,29 +1,0 @@
-$placeholders: '-webkit-input-placeholder',
-               '-moz-placeholder',
-               '-ms-input-placeholder';
-
-@mixin placeholder {
-  @each $placeholder in $placeholders {
-    @if $placeholder == "-webkit-input-placeholder" {
-      &::#{$placeholder} {
-        @content;
-      }
-    }
-    @else if $placeholder == "-moz-placeholder" {
-      // FF 18-
-      &:#{$placeholder} {
-        @content;
-      }
-
-      // FF 19+
-      &::#{$placeholder} {
-        @content;
-      }
-    }
-    @else {
-      &:#{$placeholder} {
-        @content;
-      }
-    }
-  }
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_radial-gradient.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_radial-gradient.scss	(revision 2640)
+++ 	(revision )
@@ -1,44 +1,0 @@
-// Requires Sass 3.1+
-@mixin radial-gradient($G1,        $G2,
-                       $G3: false, $G4: false,
-                       $G5: false, $G6: false,
-                       $G7: false, $G8: false,
-                       $G9: false, $G10: false,
-                       $pos: null,
-                       $shape-size: null,
-                       $deprecated-pos1: center center,
-                       $deprecated-pos2: center center,
-                       $deprecated-radius1: 0,
-                       $deprecated-radius2: 460,
-                       $fallback: false) {
-
-  $data: _radial-arg-parser($G1, $G2, $pos, $shape-size);
-  $G1:  nth($data, 1);
-  $G2:  nth($data, 2);
-  $pos: nth($data, 3);
-  $shape-size: nth($data, 4);
-
-  $full: compact($G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10);
-
-  // Strip deprecated cover/contain for spec
-  $shape-size-spec: _shape-size-stripper($shape-size);
-
-  // Set $G1 as the default fallback color
-  $first-color: nth($full, 1);
-  $fallback-color: nth($first-color, 1);
-
-  @if (type-of($fallback) == color) or ($fallback == "transparent") {
-    $fallback-color: $fallback;
-  }
-
-  // Add Commas and spaces
-  $shape-size: if($shape-size, '#{$shape-size}, ', null);
-  $pos:        if($pos, '#{$pos}, ', null);
-  $pos-spec:   if($pos, 'at #{$pos}', null);
-  $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} ');
-
-  background-color:  $fallback-color;
-  background-image: _deprecated-webkit-gradient(radial, $deprecated-pos1, $deprecated-pos2, $full, $deprecated-radius1, $deprecated-radius2); // Safari <= 5.0 && IOS 4
-  background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full}));
-  background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})");
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_transform.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_transform.scss	(revision 2640)
+++ 	(revision )
@@ -1,15 +1,0 @@
-@mixin transform($property: none) {
-//  none | <transform-function>
-  @include prefixer(transform, $property, webkit moz ms o spec);
-}
-
-@mixin transform-origin($axes: 50%) {
-// x-axis - left | center | right  | length | %
-// y-axis - top  | center | bottom | length | %
-// z-axis -                          length
-  @include prefixer(transform-origin, $axes, webkit moz ms o spec);
-}
-
-@mixin transform-style ($style: flat) {
-  @include prefixer(transform-style, $style, webkit moz ms o spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_transition.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_transition.scss	(revision 2640)
+++ 	(revision )
@@ -1,34 +1,0 @@
-// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.
-// Example: @include transition (all, 2.0s, ease-in-out);
-//          @include transition ((opacity, width), (1.0s, 2.0s), ease-in, (0, 2s));
-//          @include transition ($property:(opacity, width), $delay: (1.5s, 2.5s));
-
-@mixin transition ($properties...) {
-  @if length($properties) >= 1 {
-    @include prefixer(transition, $properties, webkit moz spec);
-  }
-
-  @else {
-    $properties: all 0.15s ease-out 0;
-    @include prefixer(transition, $properties, webkit moz spec);
-  }
-}
-
-@mixin transition-property ($properties...) {
-   -webkit-transition-property: transition-property-names($properties, 'webkit');
-      -moz-transition-property: transition-property-names($properties, 'moz');
-           transition-property: transition-property-names($properties, false);
-}
-
-@mixin transition-duration ($times...) {
-  @include prefixer(transition-duration, $times, webkit moz spec);
-}
-
-@mixin transition-timing-function ($motions...) {
-// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()
-  @include prefixer(transition-timing-function, $motions, webkit moz spec);
-}
-
-@mixin transition-delay ($times...) {
-  @include prefixer(transition-delay, $times, webkit moz spec);
-}
Index: hemes/berlin/scss/libs/bourbon/css3/_user-select.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/css3/_user-select.scss	(revision 2640)
+++ 	(revision )
@@ -1,3 +1,0 @@
-@mixin user-select($arg: none) {
-  @include prefixer(user-select, $arg, webkit moz ms spec);
-}
Index: hemes/berlin/scss/libs/bourbon/functions/_compact.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/functions/_compact.scss	(revision 2640)
+++ 	(revision )
@@ -1,11 +1,0 @@
-// Remove `false` values from a list
-
-@function compact($vars...) {
-  $list: ();
-  @each $var in $vars {
-    @if $var {
-      $list: append($list, $var, comma);
-    }
-  }
-  @return $list;
-}
Index: hemes/berlin/scss/libs/bourbon/functions/_flex-grid.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/functions/_flex-grid.scss	(revision 2640)
+++ 	(revision )
@@ -1,39 +1,0 @@
-// Flexible grid
-@function flex-grid($columns, $container-columns: $fg-max-columns) {
-  $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;
-  $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
-  @return percentage($width / $container-width);
-}
-
-// Flexible gutter
-@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {
-  $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
-  @return percentage($gutter / $container-width);
-}
-
-// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function.
-// This function takes the fluid grid equation (target / context = result) and uses columns to help define each.
-//
-// The calculation presumes that your column structure will be missing the last gutter:
-//
-//   -- column -- gutter -- column -- gutter -- column
-//
-//  $fg-column: 60px;             // Column Width
-//  $fg-gutter: 25px;             // Gutter Width
-//  $fg-max-columns: 12;          // Total Columns For Main Container
-//
-//  div {
-//    width: flex-grid(4);        // returns (315px / 995px) = 31.65829%;
-//    margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%;
-//
-//    p {
-//      width: flex-grid(2, 4);  // returns (145px / 315px) = 46.031746%;
-//      float: left;
-//      margin: flex-gutter(4);  // returns (25px / 315px) = 7.936508%;
-//    }
-//
-//    blockquote {
-//      float: left;
-//      width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
-//    }
-//  }
Index: hemes/berlin/scss/libs/bourbon/functions/_grid-width.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/functions/_grid-width.scss	(revision 2640)
+++ 	(revision )
@@ -1,13 +1,0 @@
-@function grid-width($n) {
-  @return $n * $gw-column + ($n - 1) * $gw-gutter;
-}
-
-// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function.
-//
-//  $gw-column: 100px;         // Column Width
-//  $gw-gutter: 40px;          // Gutter Width
-//
-//  div {
-//    width: grid-width(4);    // returns 520px;
-//    margin-left: $gw-gutter; // returns 40px;
-//  }
Index: hemes/berlin/scss/libs/bourbon/functions/_linear-gradient.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/functions/_linear-gradient.scss	(revision 2640)
+++ 	(revision )
@@ -1,13 +1,0 @@
-@function linear-gradient($pos, $gradients...) {
-  $type: linear;
-  $pos-type: type-of(nth($pos, 1));
-
-  // if $pos doesn't exist, fix $gradient
-  @if ($pos-type == color) or (nth($pos, 1) == "transparent")  {
-    $gradients: zip($pos $gradients);
-    $pos: false;
-  }
-
-  $type-gradient: $type, $pos, $gradients;
-  @return $type-gradient;
-}
Index: hemes/berlin/scss/libs/bourbon/functions/_modular-scale.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/functions/_modular-scale.scss	(revision 2640)
+++ 	(revision )
@@ -1,40 +1,0 @@
-@function modular-scale($value, $increment, $ratio) {
-  @if $increment > 0 {
-    @for $i from 1 through $increment {
-      $value: ($value * $ratio);
-    }
-  }
-
-  @if $increment < 0 {
-    $increment: abs($increment);
-    @for $i from 1 through $increment {
-      $value: ($value / $ratio);
-    }
-  }
-
-  @return $value;
-}
-
-//  div {
-//                     Increment Up GR with positive value
-//   font-size:        modular-scale(14px,   1, 1.618); // returns: 22.652px
-//
-//                     Increment Down GR with negative value
-//   font-size:        modular-scale(14px,  -1, 1.618); // returns: 8.653px
-//
-//                     Can be used with ceil(round up) or floor(round down)
-//   font-size: floor( modular-scale(14px, 1, 1.618) ); // returns: 22px
-//   font-size:  ceil( modular-scale(14px, 1, 1.618) ); // returns: 23px
-//  }
-//
-// modularscale.com
-
-@function golden-ratio($value, $increment) {
-  @return modular-scale($value, $increment, 1.618)
-}
-
-//  div {
-//    font-size: golden-ratio(14px, 1); // returns: 22.652px
-//  }
-//
-// goldenratiocalculator.com
Index: hemes/berlin/scss/libs/bourbon/functions/_px-to-em.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/functions/_px-to-em.scss	(revision 2640)
+++ 	(revision )
@@ -1,8 +1,0 @@
-// Convert pixels to ems
-// eg. for a relational value of 12px write em(12) when the parent is 16px
-// if the parent is another value say 24px write em(12, 24)
-
-@function em($pxval, $base: 16) {
-  @return ($pxval / $base) * 1em;
-}
-
Index: hemes/berlin/scss/libs/bourbon/functions/_radial-gradient.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/functions/_radial-gradient.scss	(revision 2640)
+++ 	(revision )
@@ -1,23 +1,0 @@
-// This function is required and used by the background-image mixin.
-@function radial-gradient($G1,        $G2,
-                       $G3: false, $G4: false,
-                       $G5: false, $G6: false,
-                       $G7: false, $G8: false,
-                       $G9: false, $G10: false,
-                       $pos: null,
-                       $shape-size: null) {
-
-  $data: _radial-arg-parser($G1, $G2, $pos, $shape-size);
-  $G1:  nth($data, 1);
-  $G2:  nth($data, 2);
-  $pos: nth($data, 3);
-  $shape-size: nth($data, 4);
-
-  $type: radial;
-  $gradient: compact($G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10);
-
-  $type-gradient: $type, $shape-size $pos, $gradient;
-  @return $type-gradient;
-}
-
-
Index: hemes/berlin/scss/libs/bourbon/functions/_tint-shade.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/functions/_tint-shade.scss	(revision 2640)
+++ 	(revision )
@@ -1,9 +1,0 @@
-// Add percentage of white to a color
-@function tint($color, $percent){
-  @return mix(white, $color, $percent);
-}
-
-// Add percentage of black to a color
-@function shade($color, $percent){
-  @return mix(black, $color, $percent);
-}
Index: hemes/berlin/scss/libs/bourbon/functions/_transition-property-name.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/functions/_transition-property-name.scss	(revision 2640)
+++ 	(revision )
@@ -1,22 +1,0 @@
-// Return vendor-prefixed property names if appropriate
-// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background
-//************************************************************************//
-@function transition-property-names($props, $vendor: false) {
-	$new-props: ();
-	
-	@each $prop in $props {
-		$new-props: append($new-props, transition-property-name($prop, $vendor), comma);
-	}
-
-	@return $new-props;
-}
-
-@function transition-property-name($prop, $vendor: false) {
-	// put other properties that need to be prefixed here aswell
-	@if $vendor and $prop == transform {
-		@return unquote('-'+$vendor+'-'+$prop);
-	}
-	@else {
-		@return $prop;
-	}
-}
Index: hemes/berlin/scss/libs/bourbon/helpers/_deprecated-webkit-gradient.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/helpers/_deprecated-webkit-gradient.scss	(revision 2640)
+++ 	(revision )
@@ -1,39 +1,0 @@
-// Render Deprecated Webkit Gradient - Linear || Radial
-//************************************************************************//
-@function _deprecated-webkit-gradient($type,
-                                     $deprecated-pos1, $deprecated-pos2,
-                                     $full,
-                                     $deprecated-radius1: false, $deprecated-radius2: false) {
-  $gradient-list: ();
-  $gradient: false;
-  $full-length: length($full);
-  $percentage: false;
-  $gradient-type: $type;
-
-  @for $i from 1 through $full-length {
-    $gradient: nth($full, $i);
-
-    @if length($gradient) == 2 {
-      $color-stop: color-stop(nth($gradient, 2), nth($gradient, 1));
-      $gradient-list: join($gradient-list, $color-stop, comma);
-    }
-    @else if $gradient != null {
-      @if $i == $full-length {
-        $percentage: 100%;
-      }
-      @else {
-        $percentage: ($i - 1) * (100 / ($full-length - 1)) + "%";
-      }
-      $color-stop: color-stop(unquote($percentage), $gradient);
-      $gradient-list: join($gradient-list, $color-stop, comma);
-    }
-  }
-
-  @if $type == radial {
-    $gradient: -webkit-gradient(radial, $deprecated-pos1, $deprecated-radius1, $deprecated-pos2, $deprecated-radius2, $gradient-list);
-  }
-  @else if $type == linear {
-    $gradient: -webkit-gradient(linear, $deprecated-pos1, $deprecated-pos2, $gradient-list);
-  }
-  @return $gradient;
-}
Index: hemes/berlin/scss/libs/bourbon/helpers/_gradient-positions-parser.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/helpers/_gradient-positions-parser.scss	(revision 2640)
+++ 	(revision )
@@ -1,13 +1,0 @@
-@function _gradient-positions-parser($gradient-type, $gradient-positions) {
-  @if $gradient-positions
-  and ($gradient-type == linear)
-  and (type-of($gradient-positions) != color) {
-    $gradient-positions: _linear-positions-parser($gradient-positions);
-  }
-  @else if $gradient-positions
-  and ($gradient-type == radial)
-  and (type-of($gradient-positions) != color) {
-    $gradient-positions: _radial-positions-parser($gradient-positions);
-  }
-  @return $gradient-positions;
-}
Index: hemes/berlin/scss/libs/bourbon/helpers/_linear-positions-parser.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/helpers/_linear-positions-parser.scss	(revision 2640)
+++ 	(revision )
@@ -1,61 +1,0 @@
-@function _linear-positions-parser($pos) {
-  $type: type-of(nth($pos, 1));
-  $spec: null;
-  $degree: null;
-  $side: null;
-  $corner: null;
-  $length: length($pos);
-  // Parse Side and corner positions
-  @if ($length > 1) {
-    @if nth($pos, 1) == "to" { // Newer syntax
-      $side: nth($pos, 2);
-
-      @if $length == 2 { // eg. to top
-        // Swap for backwards compatability
-        $degree: _position-flipper(nth($pos, 2));
-      }
-      @else if $length == 3 { // eg. to top left
-        $corner: nth($pos, 3);
-      }
-    }
-    @else if $length == 2 { // Older syntax ("top left")
-      $side: _position-flipper(nth($pos, 1));
-      $corner: _position-flipper(nth($pos, 2));
-    }
-
-    @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") {
-      $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
-    }
-    @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") {
-      $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
-    }
-    @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") {
-      $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
-    }
-    @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") {
-      $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
-    }
-    $spec: to $side $corner;
-  }
-  @else if $length == 1 {
-    // Swap for backwards compatability
-    @if $type == string {
-      $degree: $pos;
-      $spec: to _position-flipper($pos);
-    }
-    @else {
-      $degree: -270 - $pos; //rotate the gradient opposite from spec
-      $spec: $pos;
-    }
-  }
-  $degree: unquote($degree + ",");
-  $spec:   unquote($spec + ",");
-  @return $degree $spec;
-}
-
-@function _position-flipper($pos) {
- @return if($pos == left, right, null)
-         if($pos == right, left, null)
-         if($pos == top, bottom, null)
-         if($pos == bottom, top, null);
-}
Index: hemes/berlin/scss/libs/bourbon/helpers/_radial-arg-parser.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/helpers/_radial-arg-parser.scss	(revision 2640)
+++ 	(revision )
@@ -1,69 +1,0 @@
-@function _radial-arg-parser($G1, $G2, $pos, $shape-size) {
-  @each $value in $G1, $G2 {
-    $first-val: nth($value, 1);
-    $pos-type:  type-of($first-val);
-    $spec-at-index: null;
-
-    // Determine if spec was passed to mixin
-    @if type-of($value) == list {
-      $spec-at-index: if(index($value, at), index($value, at), false);
-    }
-    @if $spec-at-index {
-      @if $spec-at-index > 1 {
-        @for $i from 1 through ($spec-at-index - 1) {
-          $shape-size: $shape-size nth($value, $i);
-        }
-        @for $i from ($spec-at-index + 1) through length($value) {
-          $pos: $pos nth($value, $i);
-        }
-      }
-      @else if $spec-at-index == 1 {
-        @for $i from ($spec-at-index + 1) through length($value) {
-          $pos: $pos nth($value, $i);
-        }
-      }
-      $G1: false;
-    }
-
-    // If not spec calculate correct values
-    @else {
-      @if ($pos-type != color) or ($first-val != "transparent") {
-        @if ($pos-type == number)
-        or ($first-val == "center")
-        or ($first-val == "top")
-        or ($first-val == "right")
-        or ($first-val == "bottom")
-        or ($first-val == "left") {
-
-          $pos: $value;
-
-          @if $pos == $G1 {
-            $G1: false;
-          }
-        }
-
-        @else if
-           ($first-val == "ellipse")
-        or ($first-val == "circle")
-        or ($first-val == "closest-side")
-        or ($first-val == "closest-corner")
-        or ($first-val == "farthest-side")
-        or ($first-val == "farthest-corner")
-        or ($first-val == "contain")
-        or ($first-val == "cover") {
-
-          $shape-size: $value;
-
-          @if $value == $G1 {
-            $G1: false;
-          }
-
-          @else if $value == $G2 {
-            $G2: false;
-          }
-        }
-      }
-    }
-  }
-  @return $G1, $G2, $pos, $shape-size;
-}
Index: hemes/berlin/scss/libs/bourbon/helpers/_radial-positions-parser.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/helpers/_radial-positions-parser.scss	(revision 2640)
+++ 	(revision )
@@ -1,18 +1,0 @@
-@function _radial-positions-parser($gradient-pos) {
-  $shape-size: nth($gradient-pos, 1);
-  $pos:        nth($gradient-pos, 2);
-  $shape-size-spec: _shape-size-stripper($shape-size);
-
-  $pre-spec: unquote(if($pos, "#{$pos}, ", null))
-             unquote(if($shape-size, "#{$shape-size},", null));
-  $pos-spec: if($pos, "at #{$pos}", null);
-
-  $spec: "#{$shape-size-spec} #{$pos-spec}";
-
-  // Add comma
-  @if ($spec != '  ') {
-    $spec: "#{$spec},"
-  }
-
-  @return $pre-spec $spec;
-}
Index: hemes/berlin/scss/libs/bourbon/helpers/_render-gradients.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/helpers/_render-gradients.scss	(revision 2640)
+++ 	(revision )
@@ -1,26 +1,0 @@
-// User for linear and radial gradients within background-image or border-image properties
-
-@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) {
-  $pre-spec: null;
-  $spec: null;
-  $vendor-gradients: null;
-  @if $gradient-type == linear {
-    @if $gradient-positions {
-      $pre-spec: nth($gradient-positions, 1);
-      $spec:     nth($gradient-positions, 2);
-    }
-  }
-  @else if $gradient-type == radial {
-    $pre-spec: nth($gradient-positions, 1);
-    $spec:     nth($gradient-positions, 2);
-  }
-
-  @if $vendor {
-    $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients);
-  }
-  @else if $vendor == false {
-    $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})";
-    $vendor-gradients: unquote($vendor-gradients);
-  }
-  @return $vendor-gradients;
-}
Index: hemes/berlin/scss/libs/bourbon/helpers/_shape-size-stripper.scss
===================================================================
--- themes/berlin/scss/libs/bourbon/helpers/_shape-size-stripper.scss	(revision 2640)
+++ 	(revision )
@@ -1,10 +1,0 @@
-@function _shape-size-stripper($shape-size) {
-  $shape-size-spec: null;
-  @each $value in $shape-size {
-    @if ($value == "cover") or ($value == "contain") {
-      $value: null;
-    }
-    $shape-size-spec: "#{$shape-size-spec} #{$value}";
-  }
-  @return $shape-size-spec;
-}
Index: hemes/berlin/scss/libs/sass-mq-master/LICENSE.md
===================================================================
--- themes/berlin/scss/libs/sass-mq-master/LICENSE.md	(revision 2640)
+++ 	(revision )
@@ -1,13 +1,0 @@
-Copyright 2013 Guardian Media Group 
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
Index: hemes/berlin/scss/libs/sass-mq-master/README.md
===================================================================
--- themes/berlin/scss/libs/sass-mq-master/README.md	(revision 2640)
+++ 	(revision )
@@ -1,167 +1,0 @@
-# Media Queries, with Style
-
-`mq()` is a [Sass](http://sass-lang.com/ "Sass - Syntactically Awesome
-Stylesheets") mixin that helps manipulating media queries in an elegant
-way.
-
-As developers and designers we think in pixels and device families, so the
-`mq()` mixin accepts pixels, ems, keywords… and compiles into ems.
-
-We use `mq()` at [the Guardian](http://www.theguardian.com/uk?view=mobile)
-to effortlessly support older browsers and elegantly abstract media queries,
-as illustrated in this article posted on the Guardian's developer blog:
-[Mobile-first Responsive Web Design and IE8](http://www.theguardian.com/info/developer-blog/2013/oct/14/mobile-first-responsive-ie8).
-
-## How to Use It
-
-1. Install with [Bower](http://bower.io/ "BOWER: A package manager for the web"):
-   `bower install sass-mq --save-dev`
-   OR [Download _mq.scss](https://raw.github.com/guardian/sass-mq/master/_mq.scss)
-   to your Sass project.
-2. Import the partial in your Sass files and override default settings
-   with your own preferences before the file is imported:
-    ```scss
-    // To enable support for browsers that do not support @media queries,
-    // (IE <= 8, Firefox <= 3, Opera <= 9) set $mq-responsive to false
-    // Create a separate stylesheet served exclusively to these browsers,
-    // meaning @media queries will be rasterized, relying on the cascade itself
-    $mq-responsive: true;
-
-    // Name your breakpoints in a way that creates a ubiquitous language
-    // across team members. It will improve communication between
-    // stakeholders, designers, developers, and testers.
-    $mq-breakpoints: (
-        (mobile  300px)
-        (tablet  600px)
-        (desktop 900px)
-        (wide    1260px)
-
-        // Tweakpoints
-        (desktopAd 810px)
-        (mobileLandscape 480px)
-    );
-
-    // Define the breakpoint from the $mq-breakpoints list that should
-    // be used as the target width when outputting a static stylesheet
-    // (i.e. when $mq-responsive is set to 'false').
-    $mq-static-breakpoint: desktop;
-
-    @import 'path/to/mq';
-    ```
-3. Play around with `mq()` (see below)
-
-### Responsive mode ON (default)
-
-`mq()` takes up to three optional parameters:
-
-- `$from`: _inclusive_ `min-width` boundary
-- `$to`: _exclusive_ `max-width` boundary
-- `$and`: additional custom directives
-
-Note that `$to` as a keyword is a hard limit. It's not applying styles to the
-device (see examples below).
-
-```scss
-.responsive {
-    // Apply styling to mobile and upwards
-    @include mq($from: mobile) {
-        color: red;
-    }
-    // Apply styling up to devices smaller than tablets (exclude tablets)
-    @include mq($to: tablet) {
-        color: blue;
-    }
-    // Same thing, in landscape orientation
-    @include mq($to: tablet, $and: '(orientation: landscape)') {
-        color: hotpink;
-    }
-    // Apply styling to tablets up to desktop (exclude desktop)
-    @include mq(tablet, desktop) {
-        color: green;
-    }
-}
-```
-
-### Responsive mode OFF
-
-To enable support for browsers that do not support `@media` queries,
-(IE <= 8, Firefox <= 3, Opera <= 9) set `$mq-responsive: false`.
-
-Tip: create a separate stylesheet served exclusively to these browsers,
-for example with conditional comments.
-
-When `@media` queries are rasterized, browsers rely on the cascade
-itself. Learn more about this technique on [Jake’s blog](http://jakearchibald.github.io/sass-ie/ "IE-friendly mobile-first CSS with Sass 3.2").
-
-To avoid rasterizing styles intended for displays larger than what those
-older browsers typically run on, set `$mq-static-breakpoint` to match
-a breakpoint from the `$mq-breakpoints` list. The default is
-`desktop`.
-
-The static output will only include `@media` queries that start at or
-span this breakpoint and which have no custom `$and` directives:
-
-```scss
-$mq-responsive:        false;
-$mq-static-breakpoint: desktop;
-
-.static {
-    // Queries that span or start at desktop are compiled:
-    @include mq($from: mobile) {
-        color: lawngreen;
-    }
-    @include mq(tablet, wide) {
-        color: seagreen;
-    }
-    @include mq($from: desktop) {
-        color: forestgreen;
-    }
-
-    // But these queries won’t be compiled:
-    @include mq($to: tablet) {
-        color: indianred;
-    }
-    @include mq($to: tablet, $and: '(orientation: landscape)') {
-        color: crimson;
-    }
-    @include mq(mobile, desktop) {
-        color: firebrick;
-    }
-}
-```
-
-### Adding custom breakpoints
-
-```scss
-$mq-breakpoints: mq-add-breakpoint(tvscreen, 1920px);
-
-.hide-on-tv {
-    @include mq(tvscreen) {
-        display: none;
-    }
-}
-```
-
-## Test
-
-1. cd into the `test` folder
-2. run `sass test.scss test.css --force`
-3. there should be a couple of warnings like this one, this is normal:
-
-        WARNING: Assuming 640 to be in pixels, attempting to convert it into pixels for you
-                 on line 25 of ../_mq.scss
-
-4. if `test.css` hasn’t changed (run a `git diff` on it), tests pass
-
-## Inspired By…
-
-- https://github.com/alphagov/govuk_frontend_toolkit/blob/master/stylesheets/_conditionals.scss
-- https://github.com/bits-sass/helpers-responsive/blob/master/_responsive.scss
-- https://gist.github.com/magsout/5978325
-
-## On Mobile-first CSS With Legacy Browser Support
-
-- http://jakearchibald.github.io/sass-ie/
-- http://nicolasgallagher.com/mobile-first-css-sass-and-ie/
-- http://cognition.happycog.com/article/fall-back-to-the-cascade
-- http://www.theguardian.com/info/developer-blog/2013/oct/14/mobile-first-responsive-ie8
Index: hemes/berlin/scss/libs/sass-mq-master/_mq.scss
===================================================================
--- themes/berlin/scss/libs/sass-mq-master/_mq.scss	(revision 2640)
+++ 	(revision )
@@ -1,127 +1,0 @@
-// To enable support for browsers that do not support @media queries,
-// (IE <= 8, Firefox <= 3, Opera <= 9) set $mq-responsive to false
-// Create a separate stylesheet served exclusively to these browsers,
-// meaning @media queries will be rasterized, relying on the cascade itself
-$mq-responsive: true !default;
-
-// Name your breakpoints in a way that creates a ubiquitous language
-// across team members. It will improve communication between
-// stakeholders, designers, developers, and testers.
-$mq-breakpoints: (
-    (mobile  300px)
-    (tablet  600px)
-    (desktop 900px)
-    (wide    1260px)
-) !default;
-
-// Define the breakpoint from the $mq-breakpoints list that should
-// be used as the target width when outputting a static stylesheet
-// (i.e. when $mq-responsive is set to 'false').
-$mq-static-breakpoint: desktop !default;
-
-
-@function mq-px2em($px, $base-font-size: 16px) {
-    @if (unitless($px)) {
-        @warn "Assuming #{$px} to be in pixels, attempting to convert it into pixels for you";
-        @return mq-px2em($px + 0px); // That may fail.
-    } @else if (unit($px) == em) {
-        @return $px;
-    }
-    @return ($px / $base-font-size) * 1em;
-}
-
-@function mq-retrieve-breakpoint-width($name) {
-    @each $breakpoint in $mq-breakpoints {
-        $breakpoint-name:  nth($breakpoint, 1);
-        $breakpoint-width: nth($breakpoint, 2);
-
-        @if $name == $breakpoint-name {
-            @return $breakpoint-width;
-        }
-    }
-    @return 'Breakpoint #{$name} does not exist';
-}
-
-// Media Query mixin
-// Usage:
-// .element {
-//     @include mq($from: mobile) {
-//         color: red;
-//     }
-//     @include mq($to: tablet) {
-//         color: blue;
-//     }
-//     @include mq(mobile, tablet) {
-//         color: green;
-//     }
-//     @include mq($from: tablet, $and: '(orientation: landscape)') {
-//         color: teal;
-//     }
-//     @include mq(950px) {
-//         color: hotpink;
-//     }
-// }
-
-@mixin mq($from: false, $to: false, $and: false) {
-
-    // Initialize variables
-    $min-width: 0;
-    $max-width: 0;
-    $mediaQuery: '';
-
-    // From: this breakpoint (inclusive)
-    @if $from {
-        @if type-of($from) == number {
-            $min-width: mq-px2em($from);
-        } @else {
-            $min-width: mq-px2em(mq-retrieve-breakpoint-width($from));
-        }
-    }
-
-    // To: that breakpoint (exclusive)
-    @if $to {
-        @if type-of($to) == number {
-            $max-width: mq-px2em($to);
-        } @else {
-            $max-width: mq-px2em(mq-retrieve-breakpoint-width($to)) - .01em;
-        }
-    }
-
-    // Responsive support is disabled, rasterize the output outside @media blocks
-    // The browser will rely on the cascade itself.
-    @if ($mq-responsive == false) {
-        $static-breakpoint-width: mq-retrieve-breakpoint-width($mq-static-breakpoint);
-        @if type-of($static-breakpoint-width) == number {
-            $target-width: mq-px2em($static-breakpoint-width);
-            // Output only rules that start at or span our target width
-            @if ($and == false and ($min-width <= $target-width) and (($to == false) or ($max-width >= $target-width))) {
-                @content;
-            }
-        } @else {
-            // Throw a warning if $mq-static-breakpoint is not in the $mq-breakpoints list
-            @warn "No static styles will be output: #{$static-breakpoint-width}";
-        }
-    }
-
-    // Responsive support is enabled, output rules inside @media queries
-    @else {
-        @if $min-width != 0 { $mediaQuery: '#{$mediaQuery} and (min-width: #{$min-width})'; }
-        @if $max-width != 0 { $mediaQuery: '#{$mediaQuery} and (max-width: #{$max-width})'; }
-        @if $and            { $mediaQuery: '#{$mediaQuery} and #{$and}'; }
-
-        $mediaQuery: unquote(#{$mediaQuery});
-
-        @media all #{$mediaQuery} {
-            @content;
-        }
-    }
-}
-
-// Add a breakpoint
-// Usage: $mq-breakpoints: mq-add-breakpoint(tvscreen, 1920px);
-// Credit goes to Sam Richard (author of the `respond-to()` mixin)
-@function mq-add-breakpoint($name, $breakpoint) {
-    $breakpoint: $name $breakpoint;
-    $output: append($mq-breakpoints, $breakpoint, 'space');
-    @return $output;
-}
Index: hemes/berlin/scss/libs/zen-grids/_background.scss
===================================================================
--- themes/berlin/scss/libs/zen-grids/_background.scss	(revision 2640)
+++ 	(revision )
@@ -1,199 +1,0 @@
-//
-// "Background grid image" module for the Zen Grids system.
-//
-
-
-@import "grids";
-@import "compass/css3/images";
-
-// Specify the color of the background grid.
-$zen-grid-color           : #ffdede             !default;
-
-// Specify which set of numbers to display with the background grid. Can be set
-// to: both, top, or none.
-$zen-grid-numbers         : both                !default;
-
-// Create an image set of 25 numbers for the grid using data URIs. Users who are
-// crazy enough to use a 26-column grid or larger are free to extend this set.
-$zen-grid-number-images   : ()                  !default;
-
-// If the set is empty, add our default set of 25.
-@if length($zen-grid-number-images) == 0 {
-  // The number 1.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARVJREFUeNpi/P//PwMMMDIyMpALYOawEKEWpIYPiAWg7M9A/B6If4LMwaaYkGHiQKwFxJpAzA3E94H4LBA/BOJfWJ0Kw0iAFYhFgFgHiIOBuPHGjRtvf//+/X/WrFmHgHxPqIsxzGHC4TJ+IDYCYu+EhIQ4oGG5ysrKQiCJX79+cQApXqilDMR6mROI5Z8+fVotJibGS0rk4HLhd1AYSUtLd8rLyy/78uXLb0oN/AjE54D44LNnz27euXPnHaUGglz0BoifAvEHaniZbDBq4BA0EJR8vjAxMf2FCbCxsf2AljhYEzsjgfIQlKe1gVgPiCWAGGTwbWylDcwcQgayQIssASj9D5qLMMpDYg0kucSmeqQABBgAsyJrV7MArsMAAAAASUVORK5CYII='));
-  // The number 2.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdBJREFUeNqslL9LQlEUx3367AdamdCQaVjQ0uAQBS+hxbVBhEcESoOG/0SDS9HakDYGEU0huLa1GW4tGtkkURBlQRn4LPseOBdej0u+ygsffByvH98995zj6Ha7DqIfizyKkCmKYv1eBaPAB4ZpP3gDz/zZ+Y1wAEyBeTAH/OATPIBrUAP3oG0VOiRHVli2nslkTmu12pNhGF2iUqncxePxI3yngwDv7SkcAstYeSEy02w229FodB97NN77TeiU5NYDJlOp1KII5HK5y2QyWaZnr9frxvMSv6HH+mOZkPI3EgwGfSJQr9db5g2hUGiMZW47wg/QUlXVMAd1XQ+I50aj8cI3bUhrx5JD+ucI2ADb4DASiZyZ80j5pTzLcigTOlkaBqtgp1gs3ghZqVS6QmyTTm73lkXpTIBEOp0umm9Y07QDxFdkF/KTcBAsgC3k61UI8/n8BWJJrlOnXaEo7BQJhKxarTYR2+OiDnM1OOwWtkbFS0cUwlgsdo74MdgFa2AauOwIqW8ThUKhLOsUIpvNnmBPlIdGz06h1fH7/a6/jDDZtKEjz/ClzFrfAuudpw1d0C03wo/jS2HpOM9Da3tRd1CnPNodX/+a2H0XfgkwAIVYVeQ1/9a6AAAAAElFTkSuQmCC'));
-  // The number 3.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqslM1LAkEYxnX7lL62CAmTwENkhyKwDkZg185dgvDQwS7RUQkvkRfzKNQfIF5CukjRJelk4EWwDmVUEJinaNlSMLPWnhdmYFvWGqiFH44z8z7zzjPvjKXZbFqI//hIx8rFrFarfkwCNiCDPtABNFADKngFH6KC1BgEE2ASOEE3E1DALbgCZfBuFLSYbJmC51wu1046nb5pNBpNTrFYVEKh0DHGV8AoW/xXQTsFJJPJC72YHq/Xu485Xrb4N0HJxFvybsjtdtt5Rzwev04kEvf8v9/v97CFbcbgdhPBT/AmSZLGOxRFaRgyoa22scP7VbACih6PZ5cdzAjoSqVS03xCoVB4wM8zLWxaOwYPaZEBMAXWI5HIud6/TCZTQv82mBX18MfP5/M5Y7HYAprDlLlIhpTdPNgEe+AQHOVyuSeeJZUT+taAQyRDuhnufD6/heANsBwOh8ey2ewTn+BwOPrZCXcYg80EycMeTdNa2lGpVN5ZNWgiglQitWq1Wtd3yrLcydvlclll1VAX8ZAehCUYf9rqpgQCgQPMWQS9IlePtuyiCxGNRs9UVa1zoVKpVA0GgycYWwVjrLiFnq9OFjADxlkm5NcLuAOX4NHstWklyEVlBvfvjb2HL8xri8iW//Ri/7vglwADAMZnRpCsTg8QAAAAAElFTkSuQmCC'));
-  // The number 4.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAW5JREFUeNqslDFLw0AYhpOaSFuiDjqViiUKVhACDpJCQycX/TVChCz+Evf8ALtlCGZyCW6uOiR4QusgSgtmiO/BBZJ4l1qSg4dwd19e7vvuvU9K01SiNDGojpyJybLMi9kEu2AHqGwtAZ/gA/ysI6iAPjgHx6DD1pfgGTwCUhaUKlLeBheO49wnSZLmwfotGPJSblWUZAscmKY55Ox1ciUoDJGgwmrXm0wmg3UuRiTYpWK2bY80TVN93yd1BWm6/fF4fEgnQRDM6ggW0iWELKbT6byOYCFdz/OIwJ9d3sW0BOn2LMvS6cR13TeBpfaZ4f96p+TDI3ATRdF32X8ZcRx/IeYa6P/x4YbIY7kfZZEXeYL0rS7wFIUdg+0tWWxxj/OW98AZOM0ag2EYgzAMr7IAVVXv8PHAA5jnU1Y4B6Cd5Am8sJvU2+32ZSnmHbyy2JUnLOzTGwcjcMLqVtltVgnyemJlP5Sa7tiNC/4KMAAbxb+98QKR2gAAAABJRU5ErkJggg=='));
-  // The number 5.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc5JREFUeNqslM9KAlEUxp0xzSTNDHMoCiIKKRChXbgIAldKEK5y4Up9A5dufAMRRB8gwnW7lkV/EBcR0WzaBMEQFRNFlkNO34E7MU23msyBHzNz58x373fOPdeh67qDGMRFOkOccQEMg3EwBlyW7xp4AHega/2ZJ0gCM2AFLIARy/cOkMEJuAZvX5ZpsRwEyUajsa9pms4jn89vI2bVOhnpiJwVkt2JcDg82U8eeZZpEqd5IJPJHDebzVtmj3J3BBReDsU/LoAEn1keSazXl2AikQghd0mw2Wq10vF4nAo2DTx9CWaz2XnjORaLSYVCYR2Pc8BnR5BsdURR/NgO1Wr1rFKpnBvvkUiEChYCXjtFobx0U6nUHu4XxgSlUmnZCJAkycfEXHYE3dQh7XY7HY1Gp2igXC63e72e1Y2T55BnmQI9ZgG/3+/Fu5OTGltVfqFelWX5xhgIBAJuc4CiKI+4PbG+dvzWeqNgLZfL7XzXevV6/QAxG9RRVi2eIFmbBVvFYnEXK703hFRVfa3Vaoe0k8Aiy/cnQcEQEwTBWhjauEvsxAmyicjmJTgFVyw9uh1BYwf4KYXsVBFYu6nsPOyaxX6y/K8TW3QM+HoXYACXiuXQRCn2XAAAAABJRU5ErkJggg=='));
-  // The number 6.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNqslLFLw0AUxpPWKNZag6igqYKgCA61dhScHbV0URwcCo7+DV1K5y6FTlIcdQl0dhKkdBAHsaJ1MBQdJEZNKmnQ+B3cQZte2wx98OPIu5ePe+/dO8F1XYEwDCM6I332yd4EkOkaBA74BB/AJhq8n3g2ChbAGlgBs9T3A57BDXgBTfDXdUxPygGwCPbT6fR5tVp9dRzHZRQKhWvsHYMNevIOLZ4gCdpOJpOn7ULtlMvlO8QcgnmvYICTbogEplKpTeYolUpPmUzmln3H4/ElLFO0DII3PV79IuFwOMQchmG0stlsXZIklRCNRs/gfqc1HSgogTFFUSaZIxaLyZqm7SDd3UqlsgVB0kwLtLh3x1PDZXCCZrz1qqGqqg+IOfJbwy5DDev5fP6efScSCQXLnLfLvVLuMlJDXdcdTmmCfgRJ/r+8KfBjPEFyErvRaHwPGl2/o0c692WaZpM5ZFnuuG+WZdm0y46fLg+clGKxeIWYPTDjZ/TYLB9gli9qtZrOhNAcO5fLXdIrs+qdFKIjMjFRFL3TQq7GOv1xmnbUBI+AjKHmfcL6CbL6Ruh7OE5CaH0NSotXPmHYL3ZAGLL9CzAANR4i5o9tHM8AAAAASUVORK5CYII='));
-  // The number 7.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbBJREFUeNqslL1Kw1AUx5O2ih8BsWoRAw6SgAHJKvQFunWqQ18gs5Oj4DP4DuLomqWTjhVEKYVapDRBrdXUqtU2avyfelNCbGwTvfDj9N5L/j1f9/CO43C0eJ7n/rIGOgGCk2ABzIEJ73fgDbTAI7DHEYwDEWyCdTDtEfwAFrgAp6DpF+z/GGy+FwmkNU07sG3b8WMYxhPut8GaP2QiFiFXFMqMLxU/lT2LQl4FW2AX7IPDUqnUIg/r9foz9jtAHtdDytMNOAZH4EQUxY4sy1QgrlKp3MNQ2N1hDiYCIuuBa/BCBcrn8yvuBTy9hSHR12Efjsoh5WpRVdWBYLFYNFmlIwlSxecVRUm5B4VC4QrmgfVjKEG6E0BSkqQkHVSrVatWq1Eq2izXoQSnSCybzcqCIPRbpFwuN1m4HfZqQglS/lKZTEZyD0zTtNiz6/4WVtCaBUvI37J7oOv6Jcwd85Abt7HdP9qgxrYsq0cNTRb7PaAOc2TU06PzRC6XE938NRqNNvOOmvozyMGg8RXzTByFvVsqyDk4Y20Tah76Z2KcNXKLtcx7FMF/ndiRBb8EGABjzN026ymFhAAAAABJRU5ErkJggg=='));
-  // The number 8.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAahJREFUeNqslLFOwlAUhi0IGpGUoEMTjYnGmLgYEhhN4+qkzpo48Qg8gimMTMDI5hO4GJ3UgUkXOhgGJCYYI5bYRKBD/Y85JeXmokW8ycdtzz39ezn/7VFc152hoSjKzLSDtJQfBCNABQkwz7EBsJjBJIJRsAp2wCYLh4ANHsE9eBJFv7XoxxPlEQZr4DiXy120Wi3bcRyXsCyrbxjGNa1xTjiIYAzo2Wz23BMSoTXk7IFFUTAkqS3VazmVSq17gWq12igWi6Z3r+v6NiYNLIgPywQVMY6/OlIrVVXn2LRQEME+6DabzVcvkEgkov6Eer3+jOkN9KRnR1LDXWCYpvku1q9Wq71g7YxzYkFMWQJHpVLpbpwp5XL5FjmHnPurKfRWLZPJDE0hQ/ympNPpDUwrIC4+PCsRDHPBhye90+k4/gRN0+J8ZCJBTHF9TDxkO6TdfNq23fcCyWRyZCftdvuDP0MniMvUDPYLhcLlOFMqlcoNcg5kpsgEaddkyEk+n78Sv2VyH2unYIubyNTdpgEeuNv0/LWeph92+dqdpMH+e8f+k+CXAAMABxE8L2GVSOsAAAAASUVORK5CYII='));
-  // The number 9.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaVJREFUeNqslEFLAkEUx910N8tclk5FEEQUGB3qC0gXbx70WBie9CP4FfTq3Q/QTYPFU/UFOiQh5EEI1iAsWLZ0Q1tq+7+YCVtG19KBH8O+2f0xs/PeC7iuGyDmMcgTmrBOayrQwBKQwABY4AU44z4SDQVsgD2wA1aZkERtcAsewLtwm54jB8EmOCkUCnqr1TIdx3GJTqfTL5VKl1jLgC3vhr49AuEKOMrlcmdc5AXSC7yTZDv/JVwQHHcZrMXj8RgPVKtVo1wu3/HnVCp1yHaoej8WCWWSqqoa5gHDMGzTNH8uIRKJLLKTKNMIKSZHo9GwT5ZIDF/hTEOUNh+UDr1eb8ADmqYpswhJ9Nztdp8w71Igm81uTysUHfmNkjafz5/rut4even/Cimx6RaD6XT6WpZlnWg0Gpa3Jhi+Qqrb9Xq9nkESH4NkpVKJjb5g2/YQU19UeqJ/SPk2aDabj4lEYl/0D2u12g2me/A6TS2HWBWcFovFK8uyhn+pZYnLJEnydhtqEAes21BVfPp1m0lCLtUYykhKje2H47rNTB177qX3JcAAagDd/y1YjuwAAAAASUVORK5CYII='));
-  // The number 10.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdZJREFUeNrclD9IAlEcxzW7tLiyrCXrgoiGaInIIQKhwc0xkCYDcXYVDRqaGp2dXASpKYgGlxBbcmvJqCPKSCE4PbMyr7q+D35P5Lj+EC714MO73+/33vfen9/7WSxdblYTXx8YJli8TtjJ1w908Ahq1L9+JsjEJsEimAU2IINrMEI+F3gH9+ASnIM70DIKjYMlsOHxeFK1Wu1F0zQ9GAzuw7cVCoX2isWiwnyMQqFQhm8XsXUwRT9vr3ICrIFttHy1Wm3xiYFAIO/z+bLcNhIOhzOYtwoGmVgPMeT1ej0YsBmNRldEURT433Rdt0F0mtupVEpOJBJn3Pb7/QvoJCByQXYe9VwuVxAEYQdbPDLekiRJA/wbR9FSFEXjttvtHqLV2bmgTgd8DHLpdPrUKOh0OoVvMsXGL7iXnOyGymCM0uDXrafbif1PBFVV1b4I6x38TLBUKj112i6Xq33rjUajyTr+9Hq/rR5W61smk7lCfs4wOxKJzHXGkWYn6G7Ag9kK2daeOx0Oh0PJZrP5eDx+IMtylfsrlcpjLBY7TCaT7K1fgCezasMKxDKYpzL1TBXFWG3YPJVi7CHc8i2bla9R9jiAQCtWTeohm9ekeqjSuD/SPgQYANoDxDJkiCZZAAAAAElFTkSuQmCC'));
-  // The number 11.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWxJREFUeNrslE1LhEAYx9eXlcK2jQgTRDwYRC90iL5EdOwQdBBP3foEnTr2DcQP0KE+RUHHgm5GRoTpqfcVLMXd/hNjjKJshz3soQd+jPMf53FmfObfao04uAZdBNNghj73wCvIQadG/wKDpoTkxXmwDJaADO7BNfgECxX9EjyAtJqoDebAKtgGh57nPWdZNnAc5wL9PWCxuuu65+hv0hX/BM8k7IJ1sGXbtoVJ+6ZpzpKBJEnINjcsy9ph9TRNJ+gRtNntFTEJjDAMDxRF6bBLz/NcCIJgV1VVedhPYVeYkLPQNO3IMIzjOI6zYkAQhFzX9RPop6w+LOE7uAJnURTd+L7/8rsNUSQHHkJ/ZPWm8iiCfPmJTARvpdriuD6a+C91yI+6sP8TjmFCsUYj5RPzPJ8XgiRJxBRI/WU1eo/OabQvcqdXwBpQqWXdgjswBRYresltmuxLpg5C2j69RR/UBLoVveSH4x/fAgwA+s1/zoQYuDcAAAAASUVORK5CYII='));
-  // The number 12.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmJJREFUeNrMlM+LUlEUx5/Oe9KkjVOUyZhKM22mQhdRDC5atJidmOZOBXHhxj+goIW6khauDP+AUHctWiS4CYJQw2hoaOGURGU6QY3OkGXjr9f30rnOwxxGokUXPtx7z333vHvu+d4jCP+4qabYRLAAFmn8jdCQbR7I4DvYpX5wmEPm4Cy4CFaBFnwAH8FJsAJOgRH4At6CKvgMekpHEjgNLoNbIF6tVnf6/b6cTqdLmMdCodBD2FrMxqhUKtsul+sB1rxgafJwzNk6uB0MBh8pNyaTydd2u/0xnytpt9s9h8NxH/vWwDEeokD3Ym00GncNBsMJ5Z9kWVYHAoHzfB6NRjdrtdqPbDa7ptPpJJ/Pd7VYLD6h8H+q6bsuuyuTyXTParXmOp1OX+nUYrFo+Zg5U66ZzWY93TW7NoE73AMvwdNms7mFTa1x1lSqkSiKA6UTr9e7xMf1en2PMt1XhswmX0GDpHCQdlHseTyePE3P2Gw2k9vttvD1TCbzAt02OR2f8NCmVquH6N6DV6AZi8VW+Fo+n39TKpU2MPwE9mdyiJBlksRxSGfV6XQuMzu750QiwZKxBVok9nHIRzUm6oV4PL7ODblcbqNcLj/D8B0lVZjphKPRaI7pNJVK3TAajVrK9G4kEilRmJLyYEc6HAwGGgj7gt/vt3EbnG3SY7gCrgEjmJv5hBD2MhMxtxUKhet4KT5wJxwO34TpHBWPP+6QyadDmf39yCVpX6/Xa/62fDHVXwI2CmNIGRSoysxPfN+lavOcNDycVr60VPe0VKa6ivcuTYmIvZSdyfL1/7ZfAgwAPr/v4RS2v5YAAAAASUVORK5CYII='));
-  // The number 13.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAl9JREFUeNrUlM+LUlEUx98z3zRTNiMVkTq4C4xkFpWCFBqu20ghRYrt+gsUkZK0hbh00WqEcGPgzhhatIgUJTAEaTEaTRA4ziym/DGazficZ98b58arnJBo04UP991z7j0ev/fcIwj/eIhTbHNATzD/AHwFC+AEkIBCti7YBePDArJgy+AiOAeOgC3QBifJN08BmO09WActMPo1kAFcBndtNlum2+3uy7I88fl8L0wm05N8Pv+OrTmNRqMdCoXWsP8WMKmTE8lwEzzCKHU6nRE/6PV6X6fT6Q11MDUOh+Mxzjkoc0FDLDqdThs23A+Hw1d0Op2kTt9qtS7x71QqVc9kMh/42u/3X8J0hjT+HowJvFssFt9IkpQMBAKvfro1UVQ0Go3C1+12W4YcP/SaTCYiac1iCVpmAzugDIbZbHYBGVzjB7Ra7Z7dbn9Kf+k0OJrL5Va4v1arfcT0GezxDAW6oW3QBF/UGSLgEFMD1OPxuAGyXPd4PGbmKxQKm6urq+t05kAd8K+Gy+VaTiaTV3nmMwUcj8fHMFnA+Wg0ug2d16rV6ifut1gsZiq547MGnK9UKrfxV++BG5FIxFwqlXa432g0LtINSzMFxC1qFEU5dF+/3x+RfsrMGvZ6PVm91uv1c/y71Wqx99wH+7xs/tw9RPGgXC5vud1uppMQi8VW1H7Ub53e+3DaeSb+A/XTQqE/g+1hIpF4yd83o9lsDoLB4HP47gAzFfdv3cZA7/ICCc1a1AbV51nqQDrSq0e+t2CTd5tp7esUWKJbk+nggH5AT3sEehld8svCfzO+CTAAQZUW1CtBkesAAAAASUVORK5CYII='));
-  // The number 14.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgdJREFUeNrMlLtPIlEUxmFYdxlh1zeaABkT3Oj6IrFiC4FQammMsTGUNBZ0JBsLS/8FSgvspYKCBBsbNLEwYsSYjcBsIj7QiUZGmP2OuWMmehWMW+xNfrkz95755p7HPSbTPx5mzton8A10sucbcAk00A06QBuzVUEVnIMaT5AE+sEo+AFs4ATsgQbwgmEgMvs7sA+2gWwUoj/2gnEwB1bz+fy5qqpaPB7fwvsCmI/FYpu0ZgTrK2BEFxLYTG5MgdlwOLwEsWWPx0PumWq1mhWTEwz5fL4RTohEQwgeXdQXpVKp9MvhcHzlfGQHXYFAYLBZUgRDLH47nc41SZISiqKouoGmaRTnL9FodMJut7dlMhm5FUHK1C7Ilsvlw0KhcKEbNBoNC2Xd7/dL9J7NZs9aEaQTVUAJXBkN6vX6Y8KCwaAky/JtMpmstCL46qATRiKR7+RuOp3mufsZtOuJEVqp/lAo1EdzIpEoc7bpErhZpTxl+c2BcqEaNaVSqenne8VicdHlch0w4Yrw0bvLqkB8l8tms1lrsnfHEtvcZYvF8uB2u9fxqFDwvV7vYC6Xm9X34e4GplNwzROkvyiCINSf7pUo3rDLfwwcVqt15tk3f1gDqfK6DWVqDEyCASpDcAR22Cl6wE/WiURet+G1LxvrhTbWsqqsH96zwPcYeuKLfvj/j78CDACe8KXB21214gAAAABJRU5ErkJggg=='));
-  // The number 15.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNqslE1rGlEUhp2ZjDFKrLGkKK2LIgUhG03iIqm4aMFVoVC7KS4sUhT/QJduXHWpuOvKjYI/QRCCEJIqGtpa2kWyaNNQoV8m1qZ1yEzfG84Ng5mkE/DAw9yPmXfOOffcI1qmbDMGa1bgIgTwh9bngDzxrgIOwXcwNhJkYrfAMrgDJPCT9twkqrdj8AG8AgfgRC/kBavgaTgcLg8Gg7+KomiJRKJRKBR22NiIdDpdwTfr/GcihbUI7oKH+Xz+Wb1ef+JwOKynMSmK3ev1uq+SQybqjEaj4Uaj8fx/H8Dj7Vqt9o3CY7nbAn2eQyamgqNms9mWZflFMpncMOkME/xNeRyTzqmgBr6CTdCsVCpvLlOJxWKLSMMD8Kjdbj+ORCIrWL4JbFzQQn/4AvbB6DJBRODn42Aw6MlkMvcxvA3m9YIXmiAIqiRJZ+VQKpXeFovFd3weCARu0KHaLyrsc4LxeJzV2Q7l7TiXyy3xfY/HM09isilBTdPEVqt1LxQKMU8sKKuOqqqTkUk8WtGMoF7A6XTaMZcMTlw1Jcis1+sd8rHL5bLq9/r9/hCPX3SvTeXwBAV/wE9Xf8rMut3uHh6fwdBIUKFCPTObzfajXC53fD7fMJVKrfv9/gW2PhqNxtVqtZPNZl9i+p4LChOCrEGsgSW67Ex8F3wEC9SB3HQILEzm3WvwidqcJhi0r+vgGpUB73dHYJZ65Bw5wi7DgPbHdOOmb+K0Bf8JMABAPsyYlTRVAQAAAABJRU5ErkJggg=='));
-  // The number 16.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAiZJREFUeNrUlE9IG0EUxmPXtdpC3P5RUhtSpBU8RQiUQj2UHILHXgs95BAwwUsOOQa8padACSS5mEvwFKQFaS4lhxIQJAQaRcSDbsVspC0tMUZjcLdt+r3wRraLaIReHPix896++Wbmzcyz2f5z6zvHNwDugWG2D0ET9AMF3AYSMPjfATgFHasg9QeBC3jAE/bvgF2egHwjPGkbfAEVUAUn4I95VQ/BNJiNRCIfDcPoELDTYD4QCCyVy+Wvwk+k0+lVigdTvPJuo62Mg1fgTTab3TAPgu+9z+crmH1m8vn8JmJegwdCcAg8TSQSy+cNwL8PmUxmR9job0ej0TVh12q1I8TMgUckdoOT+zMcDudkWX6bTCY3rKdkt9tl0W80GnosFlMRu0w4nc5FGs857Qr+AvuA8vG5UqloVkGXy3VL9N1ut6Jp2gxW97JUKj2HIKWsBXQhaGPjB/guSZJ+0T3zer1jDoejewAej2cklUq9QPc+p+5MsOeGQ1OR7y1hQ5Rux6g45SsLUg7r9bphcct82a8ueFnrSbBarZ5cEtIRT6+/F8Fms3m2RUVRBsz/Wq3WKZ+y0augkcvldv1+/2MyxFe0YrG4xW/5yLrl3zQTLmvbIvitUCishEKhd6qqHphWpsfj8U/BYHAB5iZXpH+qjcQF4hmY5HvV5mqzB+6ACXCXY4/BNlgHmihhfRfUQtlU82j2m1wPh3gh9AAajG67Nu2vAAMABvAJLzvmvhMAAAAASUVORK5CYII='));
-  // The number 17.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAglJREFUeNrUlE1LQkEUhm/qtQ/tu6ggxMIgbKUkkYJrF0I7wZUt+g39AVetWwVu2rjwF4gglBAhLQQXSghhEmX0gYVlddPbe+LcmG6JGW0aeJg75555Z+acmSNJf9x62tjNYIQhnyYwAVnnp4A7cANe2gmS2CxwgwVgBE+gnxFbAxTBITgHql5oBiyDdY/Hs1ur1Z4VRVHD4fA+9d/h9Xq34e/iE0gG4eiTwAfWotHoRiqVClssFlpEajab5nYxw78+dH2alontNBjy+/2edDq9qZ9kNBpfZFne4TiNxWKxlUgk4uDfdMxX0BJ3SIP7TCZzhIlbcN4TBWGro8uCDMXK5/NNkL1eryvZbPYMn4+cuA9BWuUKHNCkeDye1+8Q3SVl02azyQ6Hg7Iv5XK5C3TXpK0lxCTMo0nkQKs/fBMuitNAKBRa1AyFQoEWueVsS3rBTu392tjt9nHNUC6X6f7VREFDF4K0wzGn0zmlGRKJxDHv8Ok3grTDUZfLRXdVqlarD5VK5ZJfymtXgqqqkl9/MBict1qt78+vVCqJx1W7Emy1WiQyFAgE5jRbsViscoYfRd8fCeI19FL2xfglk8kTLgqNToLKFyeDgWLU43a7pzVbPp8/5YQ8dypfFPRVsMSJaPDRFL6jg5zVAleZCzGG7coX3bVhrn8Kx0nlBcyc1U918P+0NwEGAAJMv5rEne+7AAAAAElFTkSuQmCC'));
-  // The number 18.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAihJREFUeNrUlDGPElEQx5c791yRkw16itFYGCxOY4FIjMEQw2cwIYQCGwoqKhIKC4PxiAUFHYkVDRhLC0uj5GgwErVgC91G1GCMwHoQdTe6/ucy77K34sElNr7kx2Nm9s2bNzPvSdI/Hp4ZuhWgMmT/CraAwjqFvzPBmDH/5pCcnQaXwDmwDHTwDqyBEPCDJTABb8BLtptuRyfBZXAzGo3Wx+PxD8uy7Ewm8wi624VC4XG/35+QjiB7uVx+AlsanOHNd6I8BW6AOxibo9HIFAuTyeRmKpV6JmQ32Wz2AdZdBz6JQyeOxOPxKD64VSwWYz6fTxa72ba9HIlE1oRcr9f1arWqCRnr1jEFgVc4/EWJb7Vaz2VZvocjPt2rijjqrlz5/f6DmGT2tf1jg8+gDVqNRuP1rjbweGxd1ydCVlV1xWnv9XofMH0B32cFcBFsOHNEOYTuoaZpI3f+Op3OJ9jugmvgsIhw3liqVCrnQ6GQ6jaEw+HjtVqNCnJM9OdchyiKJxaLnRAyFcRZFBTsLHfJKskH9nu1hsOh5ZSDweAqt4y86JH3NRaK0DCMnagCgYDstA0Ggy2+htZCDtE2P9vt9sdEIkFXU8rn8+tOe7fbpbv+nh+QPxzSLt+cCkVRhqVSqev1eo10On0FOdtuj+l0ajabzRe5XO4+RE04dL82FMVVcAEcYudv93htKLpXbKfGtmc9X0d5kcwRG3PeQ4P/29J/MX4LMABVRPc2xeNx/wAAAABJRU5ErkJggg=='));
-  // The number 19.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgVJREFUeNrMlDFoGlEYxzV6SQ6DmnQpFEJCEkjWQsmQOZsObhUKbgWHICKIW8AhOAhFkE4OcXCIg1pySyAZsqSUQBQlwUEIagRLU+uJh4mmsf8n3wv2uIYDM/TBj7vv+97737vvfe8zGF54GDV80+AVsJEtgw6YAXYg0ro70Kb4QEuQvc+CRfAWrJK/AqpgHqyBBZorU6wIbkBfvas3YAt8DAQCR4PBYMiA/RnsBoNBqVwut7i/Xq93I5HICWIfwDIwczEzOd6DvWQyWeKLSDDjdrtPx33jQPQYcxy089FgOXkXi8W+aC1A7DCRSFS4nU6nq9Fo9Irb2PVPzNkBS0xsihJ66/P5DgRB+BSPx0vqU7JarQJ/r9VqSqvVejoEi8XCDmuO0jYSfAAN8BVc5PP5ulrQZrMJOqrFyAUNdEI/wHeTydSfpA7NeibJsvz0i3a7fXpSwYdGoyFzw+PxrDw3eUqHYM/v959JklThjmw2W5tEcDRcLtc5qkBiFAqFtio8JHQJiplMZhs15wYO1OTGeFBRlHs8uvzq6cnhEDv65XQ6NXOYy+XyeFxTA/lL8Df7IH6ppxJshsPhoiiKHa/Xu4VCHp1ys9lUUqnUt1AotA/zkguOdxsTNYhNsE5XskcdhRX7a+o27FY8/qvbGJ/phQJdS5lyJFI/5HWo2Q////FHgAEA1kIAAe0AP5kAAAAASUVORK5CYII='));
-  // The number 20.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnJJREFUeNrUlM+LUlEUx31m2S/DkRZqmpUVDU0UEhgDLjIwi1mKEhEtzNA/QBducicuRYg2LkRaRG2UaBbhuBahRUZpZJRGCoU6qfNDK/ue4dx4DOW4aNOFD+8+v+d9vffcc65C8Y+HJJvvAVqG5t9BH/TAOlCCQ6zvAxMwZH3I8b8NyeAouABOgYNgE3wCb0GTY06zrgM/wRfwDtTAZzAiMxU4Dm7F4/GVXq+3OR6PJ0Qul6tZLJYEtNsg5Pf7n1Sr1Y7Qy+VyC789hnaDF7SLDOfA9UQi8VwEyiED6A/cbnf+TzoRCAQeIeYy0Ii8HHM6nQsimTabbSWZTL6hudVqnfP5fAsej2de6JlMpi50GktLS5QqM6VKybnR6PV6jQioVCpr8pODqcZsNh8Q70jLqNPpjMW70WikRdH3ajL8QQcgSdJEbuL1ei1iXiqVulqtVrVDtVD+JAr6Bl6bTKYYnkeAPhqNnjUYDPspst1uDwuFQgt/OD9LHZLhKnjBx34OLIZCIasISKfTr6jOtu9gmiHlogsoR+pUKnUJ+dzKV71e78ZisRIX8UxDyU/a3km73b4YDAYvCjESiSxzYXdmNVXyKvXgDAr7qhCy2Ww1n8+/57Ya9fv90RSfiUDFWz2B1VxzOBxU7YpWq7WGg6GWMoG9dIKNRmMgd9DpdLvFfDAYbNBDtB6d7J1isfjhb50A/aHL5VreoVOucC1uVfjdWq32dYrhfXAPu3gq7+VmszkIh8PPoN0UvSzxzXGeS+Yw51Q+1vlG+ch9L24biUuOtJd8M40kNpDfc8pthmP+kBpALYujbzf4PlzluP9g/BJgABvhUfuxyjKwAAAAAElFTkSuQmCC'));
-  // The number 21.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNrMlM+LUlEUx53X0yztl1RYo0lCAzOBULaYXLgMQswkiTQDUXDjP9BOXQmz1o3LQINqYRvBTYsIlCQGZmWN/YIwImacKXNq3vzoe+BcuSPlm0WLDnx49917+N5z7j33GAz/2KbG/lVwFBwHh8Au+AHW+Ls15kPj76APfpG/LGgC02AOXAA2sAO+gmXQASssRD6zwALeg1fgI9iUIyWxO6lU6kmn01nVNG2XaLfbn0Oh0AOs3QN+cAvk4bNC6+Vy+Tn+r/NGIzODq7CSEJLp9/ubXq/3IXwWEonEU3nDYrH4EvO3wSlxZgYO/Uw8Hr8idshms0vdbndYqVTmrVarMRqNemq1WtBut1smXYoind8Rh8MxCpvEZEe32212Op2PXC7X48FgoOkJboOhqqp7HCORyFkx7vV6dCHv8P2AzVb/JihSppJ4HQgEFvCdoQvyeDzT4XD4nHBE6m0SBM5JKQvBDfAWfOPS8OVyOb9wqtfrb5rN5iKGn8Dp/QhSvQ05UlMymZwNBoNuWqDzKhQKzygDLuCd/QiKi6F05vL5/DUxWa1WF1ut1gtO16z39BSpsE+SWKlUuiFKA4e/lslkmvysjGMBTIzwIEXn8/nmY7HYJbEIsSXeyMubf9ETFREeFoVNRSwWG42GH6/hLrifTqdvYsrBkeoKkm3ZbLYDOhlRnQ4URdkeHbzJ9JM7jia3Lzrs8+AyPQpuXbJtcLehmz4GLgI7P4hludtMSZdCoie41xn/ENk616nKncXCJbQu90PDf2+/BRgAl2Xhjy3s2ZYAAAAASUVORK5CYII='));
-  // The number 22.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAh1JREFUeNrMlL9LW1EUx1+SF3+QtOoLHdQkaFsdHEIoL/gM6JDVIQhBGhIKJiUghf4BdciiOAUcmnQsiHQqwazdskWyiZCURjqE0oLUtLS14Etrv6ecWy7ifXbo0AsfcnO/9553z497NO0fD5c018FNMAqGwQX4Bj7xr3aN3pcNDoBJMAdmgAF+ghPwBrwFbnBXobfBB3AujJKx+/l8/mW73T61bfuCaDab75PJ5C60R+Cxg54CE+KCQ2ABoyw2yvR6vfNoNLpPqPR4PP4UNiyyRW74wHg2mzVFMIvF4mEmk2nQ3O/3e6HNEiod8xjf0Kdz/G4Eg8FRcaDT6ZzJmQuHwz75/2U9FAqN8MW8dMMf4EzXdVvelEqlJsS82+1+gd530D9zpn/bIMsR8ABsgueRSOSVHCfTNPewvqHSKf6UB86HJuI4BZbBVrVaPRaba7Xaa6ytc9BV+kPyXK5rmtwCK7lcripn0LKsZ1hf4g+q9EW+1J8xCO6RW4jHV3GgXC4fYC0D7gDTQZ9kTzW5sLO0QWxutVo9rO1w0c6DNQd9iqtFE4VtUXGSC+JAIpGoY52SsQ2exGKxXQd9laoLeDR+lyuVSqVx1Usg0ul0vVQqHan0QqHwAjbi1DSE333DMDyqluR2u/uBQMD1t+2LXJ7mpNzm1iSP7+CU54ZCp25DCXrnkoyOcb/zXjpg8yGNjV2l00v5KNrX/z1+CTAAejWU4TBFD08AAAAASUVORK5CYII='));
-  // The number 23.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArdJREFUeNrUlF1oklEYx9W5r9rERYXYmpX2gfTFGojRMLwoCroKZhBCQYayu4ZejMCQhngTiNVdiAwqpBtX9EEybwxGw1gNlvbFyGwXlpjKalra/4nnxJvMrrrphd/7nnP+5zzvOc/Hkcn+8SOXtDuAmqH2d1AGRbACOlnrBe2gDr6yXuL5vw2SgQGwH2wHPWzkA3gF8mAD2AH6QRcbKIDXYAHkQJWMKcFWYPf7/dPFYnGlVqs1iFgsltHpdAFoo/SlvtCIdDpd8Hg896CfApvEBvvA8UAg8Fg6WboI+o1wOLywmk6YzeZrmGOmnSvwUoEtVqt1t3Dm4ODgdDAYfEltvV7fZ7PZdhqNxvVCJy0SibwVfbvdfgCfjaBbyf7r1Wg0vWLC/Pz8sjRyBoOhRy6XN0S/UCjUpHqj0aCjtgEFGfxBAZAuoGdkZEQn2qlU6v3ExMRDDpaGIh6NRvcKfW5ubhGfz+Ab9ekoR8AYuAJujo+PPxf+yWazFYxdBCfAeZ/P90Tqv3g8nsW4FwwJH34Bz8AjMEt/crlcevF3+Iq0j6CyWiJbLJZ+BPQQb6xTjNP56YhnQqHQbFOEL9POwAVwFdwBd2dmZvLS9MLYWaBVsME15HuTyXTQ6XQOib8gxx5wcqvgxzEsHgUn4ZKBZDKZF/O0Wi1lSjdVkIITmxy9C4l9VEyanJxMT01NvUOTItpVr9cVreq3XC5XObh1MrYWbMNujg0PD1P5yZaWlpaxizdcZqS3l0qlP1JFrVZ3iHYulyty3VO5/iqZc4lEYrFVJUC/5fV6n7bSHQ7Hbcw5zGkl20xOz2Qyn/5i8Dq41FzrlFJut/s+tNN8ubRRhq8D+8AeDr2yyUV0RdHxs+xrcRvVOeVIe8HBq8rZgIrvOopUs/NrvLDCurgvZVwZRdZrsv/i+SnAALSEnerTo5c3AAAAAElFTkSuQmCC'));
-  // The number 24.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApBJREFUeNqslE9oknEYx/X1D6Vmf122TSFXxryUwQrr0GFsktQQBgl2S+gUIYg0BPFiFw8SHUKiBV12CzEk6CINOiUviyQwNoKUShjZFkrLd86+jzy/YTI97Qcf3vf3e573eZ+/P0m1z0vb864BBnAEmHi/BTbAJtgGB8BRYAY60AZN1qHntjBIwhHgBGfBKf4ZGVoDH8FPMAouAgc4CFqgxvJPrN9dJ8BNj8fzpFAofFUUpUNUq9VGNBp9DdltcBkEl5aWZCEnZFn+hvM7YLw31EnwgAz0KgsWFhZeQX4PPOzXKRaL5OF9cJqMSZyXk6FQaMpqtRrpMJvNVmw225tGo6HQfn5+fgqPc16v97zQGbQkzp/Z4XBYxGGlUmnWajXFZDKRTAUjh6gYgUDgDO2Rlh/DDHYrpdfrt3rOO7FYzC425XKZqqifmZkZJ69LpdLGsLb5A74g+c/BewqfPEaubgil5eXl9enpaQuFS+mo1+vKMA+pv6hS78BbUE0kEg6RK4TeTCaTq8FgcIzDXR9gh5yTJD5ocXO27Hb7sXA4fEFoplKpD/TT2dnZUQo3k8nslb/DwMK9uRv6BLiby+U+i5agnsTZY7fb/XKvdhLk83lq6ls0HMJDGqXJubm5az6fj6ZFRd5EIpEij19nWKu0220tj6tO4vhpUpwI77pQWlxcXFtZWSFD1p2dHcMwgxqNhurQAN1iUWNf9fv9LwaFlE6nS9B5Bh6Bp/F4XO6blAS4Aoxa9lDtcrnMgzwwGAy/uQsop2NGo3Fit7yS1OYu+U4tqOaC0GBfovHqrRQv6tNVIPNHI6zr5Hvgv9tGzR/pwXEuv67PoMLX0i/wl+VCV+q/D/f7wlZJ+23wnwADAHUlUxtyWY3RAAAAAElFTkSuQmCC'));
-  // The number 25.
-  $zen-grid-number-images       : append($zen-grid-number-images, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMlF9IU3EUx3fvbrNcW8ucjP6NXMlKZkGBIfOhF6MRBiFbMCoIGdqDL409CK4HH8Zg9KIkPgSC5YsgzYIwMCGkGLJIJrJBE8tqPlRbJZpbbX2PnB9choseeujC597f75xzz+/3O+f8jkbzjx9JNdYBE0Pjn+A7yIES2MPsKPNRAF/BZ5CXVM4Og1PgGNgNNsF78AZsABvrdpU5JF0SxMAHEijgCLgaCoWe5XK5zUKhUCKi0WjKarVGoPMPDw/PCnk5Pp9vDDYttJiMlwEcD4fD1/x+/zm9Xq8TS7tcroapqakbGJ4wm82Wv42jFdycm5vLiBUdDsd0JBJZFHOPxzM7Pj6+LOZut/sl/nkEHoJ7oBPUA63M8TNYLBaDWCGRSKyrV7TZbIZSqSRts5lfYJ3jmAdFmYWbkiSV1JbYhVWMY7FYVq1va2szY6cXwWWcrMPpdJ6G+ADYSfpasgG3wB0w1tvbOy+Ot7KysgbZ/YmJiXSlpIyOjs7D5gqoU7iGXoGPwEHZ6u7utondjIyMvCadoih5IRscHEwUi0W5p6enkeZ2u70OHzOoVrgws0APqgYGBs4injTWpNPpbF9f33PSt7e3P8V3kUO0EQwGG8UCHP9qKnqFZTQ52tzc3NLV1XVGGAYCgSf4vKNCj8fjHU1NTftJ3t/fH6cdliVIC2SZC5tqzI7CPi+0iEtycnJyibNXpXZgNBqrMdduk/EtIzpePXZzobW1la6fJpPJrCMxdOUOUlFT4hYWFrLiT5PJpFN7Wl1dpTu/xuHbSnfnzMzMcqUsQv/A6/VOV9LTtYTNJbCPHB4CvlQq9ekPDu+C2zjF42Qy+UXI6d4PDQ29gO46aKBLQtVfA05yydRyTMu7CR3/LdjLHaeGk0DHTIN5Tt4PiR0YuQ9Sa5Ir9LtvlByVncQJy7E+z33zP39+CzAA8EmJ9NTdgeQAAAAASUVORK5CYII='));
-}
-
-
-//
-// Add a background grid image to an element's background.
-// @see http://next.zengrids.com/reference/background/#zen-grid-background
-//
-@mixin zen-grid-background(
-  $columns              : $zen-columns,
-  $gutters              : $zen-gutters,
-  $gutter-method        : $zen-gutter-method,
-  $grid-width           : $zen-grid-width,
-  $grid-color           : $zen-grid-color,
-  $grid-numbers         : $zen-grid-numbers,
-  $direction            : $zen-direction,
-  $switch-direction     : $zen-switch-direction
-) {
-
-  $bg-images            : ();
-  $gradient             : ();
-  $left-half-gradient   : ();
-  $right-half-gradient  : ();
-
-  // Calculate half of the unit width.
-  $unit-width           : zen-unit-width($columns, $gutters, $gutter-method, $grid-width);
-  $half-unit-width      : $unit-width / 2;
-
-  // Determine the float direction.
-  $dir                  : $direction;
-  @if $switch-direction {
-    $dir                : zen-direction-switch($dir);
-  }
-
-  @for $count from 1 through $columns {
-    // First add the grid numbers to the background images list.
-    $position: (2 * $count - 1) * $half-unit-width;
-    @if $gutter-method == margin {
-      $position: $position + ($count - 1) * $gutters;
-    }
-    $reverse-count: $columns + 1 - $count;
-
-    @if $dir == left {
-      @if $grid-numbers == both or $grid-numbers == top {
-        $bg-images  : append($bg-images, nth($zen-grid-number-images, $count) $position top no-repeat, comma);
-      }
-      @if $grid-numbers == both or $grid-numbers == bottom {
-        $bg-images  : append($bg-images, nth($zen-grid-number-images, $reverse-count) $position bottom no-repeat, comma);
-      }
-    }
-    @else {
-      @if $grid-numbers == both or $grid-numbers == bottom {
-        $bg-images  : append($bg-images, nth($zen-grid-number-images, $count) $position bottom no-repeat, comma);
-      }
-      @if $grid-numbers == both or $grid-numbers == top {
-        $bg-images  : append($bg-images, nth($zen-grid-number-images, $reverse-count) $position top no-repeat, comma);
-      }
-    }
-
-    // Next, build the color stops for the column gradients.
-    @if $gutter-method == margin {
-      // If the gutter method is "margin", calculating the color stops is easy.
-      @if $count < $columns {
-        $stop: $count * $unit-width + ($count - 1) * $gutters;
-        $gradient: append($gradient, $grid-color $stop, comma);
-        $gradient: append($gradient, transparent $stop, comma);
-
-        $stop: $stop + $gutters;
-        $gradient: append($gradient, transparent $stop, comma);
-        $gradient: append($gradient, $grid-color $stop, comma);
-      }
-    }
-    @else if comparable($gutters, $grid-width) {
-      // If the gutter and grid width have the same units, calculating the color
-      // stops is easy.
-      $stop: ($count - 1) * $unit-width + zen-half-gutter($gutters);
-      $gradient: append($gradient, transparent $stop, comma);
-      $gradient: append($gradient, $grid-color $stop, comma);
-
-      $stop: $count * $unit-width - zen-half-gutter($gutters);
-      $gradient: append($gradient, $grid-color $stop, comma);
-      $gradient: append($gradient, transparent $stop, comma);
-    }
-    @else {
-      // If the gutter and grid width have different units, things are tricky.
-      // The CSS3 Gradient syntax doesn't allow for calc() to be used in color
-      // stops, so we can't express the columns as 20% + 10px. Instead we are
-      // going to divide all our columns in half and into 2 groups: one group
-      // for the left halves of the columns and one group for the right halves.
-      // Then we'll use background position to shift the left halves over to the
-      // right by a half gutter width and shift the right halves over to the
-      // left by a half gutter width and just let the two sets of gradients
-      // overlap in the middle. Easy.
-
-      // Build the color stops for the left halves of the column gradients.
-      @if $count > 1 {
-        $stop: (2 * $count - 2) * $half-unit-width;
-        $left-half-gradient: append($left-half-gradient, transparent $stop, comma);
-        $left-half-gradient: append($left-half-gradient, $grid-color $stop, comma);
-      }
-
-      $stop: (2 * $count - 1) * $half-unit-width;
-      $left-half-gradient: append($left-half-gradient, $grid-color $stop, comma);
-      $left-half-gradient: append($left-half-gradient, transparent $stop, comma);
-
-      // Build the color stops for the right halves of the column gradients.
-      $right-half-gradient: append($right-half-gradient, transparent $stop, comma);
-      $right-half-gradient: append($right-half-gradient, $grid-color $stop, comma);
-
-      @if $count < $columns {
-        $stop: (2 * $count) * $half-unit-width;
-        $right-half-gradient: append($right-half-gradient, $grid-color $stop, comma);
-        $right-half-gradient: append($right-half-gradient, transparent $stop, comma);
-      }
-    }
-  }
-
-  // Last, add the gradient (or gradient halves) to the background images list.
-  @if $gutter-method == margin or comparable($gutters, $grid-width) {
-    $bg-images  : append($bg-images, linear-gradient(left, $gradient) left top no-repeat, comma);
-  }
-  @else {
-    $bg-images  : append($bg-images, linear-gradient(left, $left-half-gradient) zen-half-gutter($gutters) top no-repeat, comma);
-    $bg-images  : append($bg-images, linear-gradient(left, $right-half-gradient) (-(zen-half-gutter($gutters))) top no-repeat, comma);
-  }
-
-  // Apply the full list of background images.
-  @include background($bg-images);
-}
Index: hemes/berlin/scss/libs/zen-grids/_flow.scss
===================================================================
--- themes/berlin/scss/libs/zen-grids/_flow.scss	(revision 2640)
+++ 	(revision )
@@ -1,148 +1,0 @@
-//
-// "Flow" module for the Zen Grids system.
-//
-
-
-@import "grids";
-
-// @see http://next.zengrids.com/reference/flow/#zen-auto-include-grid-item-base
-$zen-auto-include-flow-item-base  : true        !default;
-
-
-//
-// Apply this to an HTML item that is in the normal flow of a document to help
-// align it to the grid. @see http://next.zengrids.com/reference/flow/#zen-float
-//
-@mixin zen-grid-flow-item(
-  $column-span,
-  $parent-column-span           : false,
-  $alpha-gutter                 : false,
-  $omega-gutter                 : true,
-  $direction                    : $zen-direction,
-  $columns                      : $zen-columns,
-  $gutters                      : $zen-gutters,
-  $gutter-method                : $zen-gutter-method,
-  $grid-width                   : $zen-grid-width,
-  $box-sizing                   : $zen-box-sizing,
-  $switch-direction             : $zen-switch-direction,
-  $auto-include-flow-item-base  : $zen-auto-include-flow-item-base
-) {
-
-  // Save the columns and gutters from the parent context.
-  $main-columns: $columns;
-  $main-gutters: $gutters;
-  $main-grid-width: $grid-width;
-
-  // Find the parent context for fluid layouts.
-  @if unit($grid-width) == "%" {
-    // The number of columns the parent element spans is our new column count.
-    @if $parent-column-span != false {
-      $columns: $parent-column-span;
-    }
-    @else {
-      // If we don't know the number of columns the parent element spans, then
-      // warn the user and force the flow item to span 100% of the parent.
-      @warn "For responsive layouts with a percentage-based grid width, you must set the $parent-column-span to the number of columns that the parent element spans.";
-      $column-span: $columns;
-    }
-    // We want our inner grid to span the entire width of the parent.
-    $grid-width: 100%;
-  }
-
-  // Determine the flow direction and its reverse.
-  $dir: $direction;
-  @if $switch-direction {
-    $dir: zen-direction-switch($dir);
-  }
-  $rev: zen-direction-switch($dir);
-
-  // Calculate the new gutters when the layout and gutters are both fluid.
-  @if unit($grid-width) == "%" and unit($gutters) == "%" {
-    // Calculate the parent's width.
-    $parent-width: zen-grid-item-width($parent-column-span, $main-columns, $main-gutters, $gutter-method, $main-grid-width, $box-sizing);
-    // Calculate the new gutters.
-    $gutters: $main-gutters * ($grid-width / $parent-width);
-  }
-
-  // Auto-apply the unit base mixin.
-  @if $auto-include-flow-item-base {
-    @include zen-grid-item-base($gutters, $gutter-method, $box-sizing, $direction, $switch-direction);
-  }
-
-  // Calculate the item's width.
-  $width: zen-grid-item-width($column-span, $columns, $gutters, $gutter-method, $grid-width, $box-sizing);
-  @if $gutter-method == padding and unit($grid-width) != "%" and not $alpha-gutter and not $omega-gutter and $box-sizing == border-box {
-    $width: $width - $gutters;
-  }
-  width: $width;
-
-  @if $gutter-method == margin {
-    @if $alpha-gutter {
-      margin-#{$dir}: $gutters;
-    }
-    @if $omega-gutter {
-      margin-#{$rev}: $gutters;
-    }
-  }
-  @else if unit($grid-width) == "%" {
-    // Our percentage $width is off since the parent has $main-gutters padding.
-    // Calculate an adjusted gutter to fix the width.
-    $adjusted-gutter: ($columns - $column-span) * $gutters / $columns;
-
-    // Ensure the HTML item either has a full gutter or no gutter on each side.
-    padding-#{$dir}: 0;
-    @if $alpha-gutter {
-      margin-#{$dir}: $gutters;
-    }
-    padding-#{$rev}: $adjusted-gutter;
-    @if $omega-gutter {
-      margin-#{$rev}: $gutters - $adjusted-gutter;
-    }
-    @else {
-      margin-#{$rev}: -($adjusted-gutter);
-    }
-  }
-  @else {
-    @if $alpha-gutter and $omega-gutter {
-      @if $gutters != 0 {
-        margin: {
-          #{$dir}: zen-half-gutter($gutters, left, $dir);
-          #{$rev}: zen-half-gutter($gutters, right, $dir);
-        }
-      }
-    }
-    @else if not $alpha-gutter and not $omega-gutter {
-      @if $gutters != 0 {
-        padding: {
-          left: 0;
-          right: 0;
-        }
-      }
-    }
-    @else if $omega-gutter {
-      padding-#{$dir}: 0;
-      padding-#{$rev}: $gutters;
-    }
-    @else {
-      padding-#{$dir}: $gutters;
-      padding-#{$rev}: 0;
-    }
-  }
-}
-
-//
-// Apply this to flow items that need to be floated.
-// @see http://next.zengrids.com/reference/flow/#zen-float
-//
-@mixin zen-float(
-  $direction          : $zen-direction,
-  $switch-direction   : $zen-switch-direction
-) {
-  // Determine the float direction.
-  $dir: $direction;
-  @if $switch-direction {
-    $dir: zen-direction-switch($dir);
-  }
-  float: $dir;
-}
-
Index: hemes/berlin/scss/libs/zen-grids/_grids.scss
===================================================================
--- themes/berlin/scss/libs/zen-grids/_grids.scss	(revision 2640)
+++ 	(revision )
@@ -1,322 +1,0 @@
-//
-// Main module for the Zen Grids system.
-//
-
-
-// Specify the number of columns in the grid. @see http://next.zengrids.com/reference/grids/#zen-columns
-$zen-columns                      : 1           !default;
-
-// Specify the width of the gutters (as padding). @see http://next.zengrids.com/reference/grids/#zen-gutters
-$zen-gutters                      : 20px        !default;
-
-// Specify the gutter method. Can be padding or margin.
-$zen-gutter-method                : padding     !default;
-
-// @see http://next.zengrids.com/reference/grids/#zen-auto-include-grid-item-base
-$zen-auto-include-grid-item-base  : true        !default;
-
-// Specify the width of the entire grid. @see http://next.zengrids.com/reference/grids/#zen-grid-width
-$zen-grid-width                   : 100%        !default;
-
-// The box-sizing polyfill for IE6/7 requires an absolute path. @see http://next.zengrids.com/reference/grids/#box-sizing-polyfill-path
-$box-sizing-polyfill-path         : ""          !default;
-
-// Specify the CSS3 box-sizing method. @see http://next.zengrids.com/reference/grids/#zen-box-sizing
-$zen-box-sizing                   : border-box  !default;
-
-// @see http://next.zengrids.com/reference/grids/#legacy-support-for-ie7
-$legacy-support-for-ie7           : false       !default;
-$legacy-support-for-ie6           : false       !default;
-
-// Specify the default floating direction for zen's mixins. @see http://next.zengrids.com/reference/grids/#zen-direction
-$zen-direction                    : left        !default;
-
-// Reverse the floating direction in all zen's mixins. @see http://next.zengrids.com/reference/grids/#zen-switch-direction
-$zen-switch-direction             : false       !default;
-
-
-//
-// Apply this to create a grid container element.
-// @see http://next.zengrids.com/reference/grids/#zen-grid-container
-//
-@mixin zen-grid-container(
-  $context          : none,
-  $gutters          : $zen-gutters,
-  $gutter-method    : $zen-gutter-method,
-  $direction        : $zen-direction
-) {
-
-  // @TODO: This is a pre-IE8 line of code; don't remember why its needed.
-  @if ($legacy-support-for-ie6 or $legacy-support-for-ie7) {
-    *position: relative;
-  }
-
-  // We use the "micro clearfix", instead of Compass' clearfix or pie-clearfix.
-  &:before,
-  &:after {
-    content: "";
-    display: table;
-  }
-  &:after {
-    clear: both;
-  }
-  @if ($legacy-support-for-ie6 or $legacy-support-for-ie7) {
-    *zoom: 1;
-  }
-
-  // Un-do the gutter padding of the parent grid item.
-  @if $context == flow and $gutter-method == padding {
-    margin: {
-      left: -(zen-half-gutter($gutters, left, $direction));
-      right: -(zen-half-gutter($gutters, right, $direction));
-    }
-  }
-
-  // Prevent any padding from messing up the alignment of the nested grid.
-  @if $context == grid-item or $context == flow {
-    padding: {
-      left: 0;
-      right: 0;
-    }
-  }
-}
-
-//
-// Apply this to each grid item. @see http://next.zengrids.com/reference/grids/#zen-grid-item
-//
-@mixin zen-grid-item(
-  $column-span,
-  $column-position,
-  $direction                    : $zen-direction,
-  $columns                      : $zen-columns,
-  $gutters                      : $zen-gutters,
-  $gutter-method                : $zen-gutter-method,
-  $grid-width                   : $zen-grid-width,
-  $box-sizing                   : $zen-box-sizing,
-  $switch-direction             : $zen-switch-direction,
-  $auto-include-grid-item-base  : $zen-auto-include-grid-item-base
-) {
-
-  // Calculate the unit width.
-  $unit-width: zen-unit-width($columns, $gutters, $gutter-method, $grid-width);
-
-  // Calculate the item's width.
-  $width: zen-grid-item-width($column-span, $columns, $gutters, $gutter-method, $grid-width, $box-sizing);
-
-  // Calculate the margin from the container's edge.
-  $margin: ($column-position - 1) * $unit-width;
-  @if $gutter-method == margin {
-    $margin: $margin + (floor($column-position) - 1) * $gutters;
-  }
-
-  // Determine the float direction and its reverse.
-  $dir: $direction;
-  @if $switch-direction {
-    $dir: zen-direction-switch($dir);
-  }
-  $rev: zen-direction-switch($dir);
-
-  float: $dir;
-  width: $width;
-  margin: {
-    #{$dir}: $margin;
-    #{$rev}: -100%;
-  }
-  @if ($legacy-support-for-ie6 or $legacy-support-for-ie7) {
-    *margin-#{$rev}: -99.9%;
-  }
-
-  // Auto-apply the unit base mixin.
-  @if $auto-include-grid-item-base {
-    @include zen-grid-item-base($gutters, $gutter-method, $box-sizing, $direction, $switch-direction);
-  }
-}
-
-//
-// Applies a standard set of properites to all grid items in the layout.
-// @see http://next.zengrids.com/reference/grids/#zen-grid-item-base
-//
-@mixin zen-grid-item-base(
-  $gutters            : $zen-gutters,
-  $gutter-method      : $zen-gutter-method,
-  $box-sizing         : $zen-box-sizing,
-  $direction          : $zen-direction,
-  $switch-direction   : $zen-switch-direction
-) {
-
-  $dir: $direction;
-  @if $switch-direction {
-    $dir: zen-direction-switch($dir);
-  }
-
-  @if $gutter-method == padding {
-    padding: {
-      left: zen-half-gutter($gutters, left, $dir);
-      right: zen-half-gutter($gutters, right, $dir);
-    }
-  }
-  // Specify the border-box properties.
-  @if $box-sizing == border-box {
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    -ms-box-sizing: border-box;
-    box-sizing: border-box;
-  }
-  // Prevent left/right borders since they'll break the layout with content-box.
-  @if $box-sizing == content-box {
-    border: {
-      left: 0 !important;
-      right: 0 !important;
-    }
-    @if $gutter-method == margin {
-      padding: {
-        left: 0 !important;
-        right: 0 !important;
-      }
-    }
-  }
-  // Prevent overflowing content from being hidden beneath other grid items.
-  word-wrap: break-word;
-
-  @if ($legacy-support-for-ie6 or $legacy-support-for-ie7) {
-    @if $box-sizing == border-box and $box-sizing-polyfill-path == "" {
-      @warn "Setting $box-sizing to #{$box-sizing} will fail for legacy IE browsers because the $box-sizing-polyfill-path is empty.";
-    }
-    @if $box-sizing-polyfill-path != "" {
-      *behavior: url($box-sizing-polyfill-path);
-    }
-    @if $legacy-support-for-ie6 {
-      // Display inline or double your floated margin!
-      // @see http://www.positioniseverything.net/explorer/doubled-margin.html
-      _display: inline;
-      // Prevent overflowing content from breaking the layout.
-      _overflow: hidden;
-      // In IE6, overflow visible is broken.
-      // @see http://www.howtocreate.co.uk/wrongWithIE/?chapter=overflow%3Avisible%3B
-      _overflow-y: visible;
-    }
-  }
-}
-
-//
-// Apply this to a grid item so that it starts a new row.
-// @see http://next.zengrids.com/reference/grids/#zen-new-row
-//
-@mixin zen-new-row(
-  $clear              : $zen-direction,
-  $switch-direction   : $zen-switch-direction
-) {
-  // Determine the clearing direction.
-  @if $switch-direction {
-    $clear: zen-direction-switch($clear);
-  }
-  clear: $clear;
-}
-
-
-//
-// Helper functions for the Zen mixins.
-//
-
-// Returns a half gutter width. @see http://next.zengrids.com/reference/grids/#zen-half-gutter
-@function zen-half-gutter(
-  $gutters          : $zen-gutters,
-  $gutter-side      : $zen-direction,
-  $direction        : $zen-direction
-) {
-  $half-gutter: $gutters / 2;
-  // Special handling in case gutter has an odd number of pixels.
-  @if unit($gutters) == "px" {
-    @if $gutter-side == $direction {
-      @return floor($half-gutter);
-    }
-    @else {
-      @return ceil($half-gutter);
-    }
-  }
-  @return $half-gutter;
-}
-
-// Warns if the gutter and grid width units are not comparable.
-@function zen-compare-units(
-  $feature,
-  $gutters        : $zen-gutters,
-  $grid-width     : $zen-grid-width
-) {
-  @if not comparable($gutters, $grid-width) {
-    $units-gutter: unit($gutters);
-    $units-grid: unit($grid-width);
-    @warn "The layout cannot be calculated correctly; when using #{$feature}, the units of the gutter (#{$units-gutter} must match the units of the grid width (#{$units-grid}).";
-    @return false;
-  }
-  @return true;
-}
-
-// Calculates the unit width of a column. @see http://next.zengrids.com/reference/grids/#zen-unit-width
-@function zen-unit-width(
-  $columns        : $zen-columns,
-  $gutters        : $zen-gutters,
-  $gutter-method  : $zen-gutter-method,
-  $grid-width     : $zen-grid-width
-) {
-  $unit-width: 0;
-  @if $gutter-method == margin {
-    $test: zen-compare-units('gutter-method: margin', $gutters, $grid-width);
-    $unit-width: ($grid-width - ($columns - 1) * $gutters) / $columns;
-  }
-  @else {
-    $unit-width: $grid-width / $columns;
-  }
-  @if unit($unit-width) == "px" and floor($unit-width) != ceil($unit-width) {
-    @if $gutter-method == margin {
-      $num_gutters: $columns - 1;
-      @warn "You may experience rounding errors as the grid width, #{$grid-width}, does not divide evenly into #{$columns} columns with #{$num_gutters} of #{$gutters} gutters.";
-    }
-    @else {
-      @warn "You may experience rounding errors as the grid width, #{$grid-width}, does not divide evenly into #{$columns} columns.";
-    }
-  }
-  @return $unit-width;
-}
-
-// Calculates the width of a grid item that spans the specified number of columns.
-// @see http://next.zengrids.com/reference/grids/#zen-grid-item-width
-@function zen-grid-item-width(
-  $column-span,
-  $columns        : $zen-columns,
-  $gutters        : $zen-gutters,
-  $gutter-method  : $zen-gutter-method,
-  $grid-width     : $zen-grid-width,
-  $box-sizing     : $zen-box-sizing
-) {
-  $width: $column-span * zen-unit-width($columns, $gutters, $gutter-method, $grid-width);
-
-  // Add the margin gutters internal to the spanning grid item.
-  @if $gutter-method == margin {
-    $width: $width + (floor($column-span) - 1) * $gutters;
-  }
-  // For the original box model, remove the padding from the width.
-  @elseif $box-sizing == content-box {
-    $test: zen-compare-units('box-sizing: content-box', $gutters, $grid-width);
-    $width: $width - $gutters;
-  }
-  @return $width;
-}
-
-// Returns the opposite direction, given "left" or "right".
-// @see http://next.zengrids.com/reference/grids/#zen-direction-switch
-@function zen-direction-switch(
-  $dir
-) {
-  @if $dir == left {
-    @return right;
-  }
-  @else if $dir == right {
-    @return left;
-  }
-  @else if $dir == none or $dir == both {
-    @return $dir;
-  }
-  @warn "Invalid direction passed to zen-direction-switch().";
-  @return both;
-}
Index: hemes/berlin/scss/modules/_off-canvas.scss
===================================================================
--- themes/berlin/scss/modules/_off-canvas.scss	(revision 2673)
+++ 	(revision )
@@ -1,70 +1,0 @@
-/* *** MODULE sidebar off-canvas *** */
-// En version mobile, si js est actif un bouton
-// est créé. Il permet de faire glisser le sidebar
-// depuis la droite de l'écran en repoussant le
-// main à gauche.
-
-// Par défaut le bouton n'est pas affiché ; il ne
-// le sera que sur les petits écrans.
-#offcanvas-on {
-    display: none;
-}
-// Sexy glissando
-.sidebar, #main {
-    @include transition(.3s all linear);
-}
-// Dégager la place de l'icône d'ouverture
-.js #content-info h2,
-.js .content-info__feed {
-        margin-right: 3.5em;
-}
-
-@media screen and(max-width: $xlarge-screen) {
-    // les boutons
-    #offcanvas-on,
-    #offcanvas-off {
-        position: absolute;
-        top: .5em;
-        right: .5em;
-        height: 2.5em;
-        width: 2.5em;
-        background-repeat: no-repeat;
-        background-position: 50% 50%;
-        border: none;
-        padding: 0;
-    }
-    #offcanvas-on:hover,
-    #offcanvas-on:focus,
-    #offcanvas-off:hover,
-    #offcanvas-off:focus {
-        background-color: $gray-very-dark;
-    }
-    //ouverture
-    #offcanvas-on {
-        display: block;
-        background-color: $white;
-        background-image: url(img/icon_open-sidebar.png);
-        background-image: url(img/icon_open-sidebar.svg), none;
-        border: .1em solid $gray-dark;
-        border-radius: .25em;
-    }
-    // fermeture
-    #offcanvas-off {
-        background-color: $gray-very-dark;
-        background-image: url(img/icon_close.png);
-        background-image: url(img/icon_close.svg), none;
-        border: 1px solid $white;
-    }
-    // le layout de positionnement du sidebar
-    #wrapper {
-        position: relative;
-    }
-    .off-canvas #main, .footer.off-canvas {
-        float: left;
-        margin-left: -1*(zen-grid-item-width(8));
-    }
-    .off-canvas .sidebar {
-        position: relative;
-        @include zen-grid-item (11, 1, right);
-    }
-}
Index: hemes/berlin/scss/partials/_archive.scss
===================================================================
--- themes/berlin/scss/partials/_archive.scss	(revision 2644)
+++ 	(revision )
@@ -1,146 +1,0 @@
-/* ---------------------------------------------------------------- archives */
-/* general */
-.dc-archive .content-inner {
-    @media all and(min-width: $small-screen) {
-        margin-left: 3em;
-        margin-right: 3em;
-        }
-}
-.arch-block {
-    display: inline-block;
-    margin: 0 0 2em 0;
-    vertical-align: top;
-    a {
-        color: $gray-very-dark;
-        }
-    @media all and(min-width: $small-screen) {
-        margin-left: 4em;
-        }
-    }
-.arch-block:first-child {
-    margin-left: 0;
-    }
-.arch-block h3 {
-    margin-bottom: 1em;
-    font-size: 1.2em;
-    font-style: italic;
-    font-weight: normal;
-    text-transform: lowercase;
-    color: $secondary-color;
-    }
-.arch-block h4 {
-    font-weight: bold;
-    font-size: 1.1em;
-    margin-bottom: 0;
-    margin-top: 0;
-    color: $gray-very-dark;
-    }
-.arch-list, .arch-sub-list {
-    list-style-type: none;
-    margin: 0;
-    padding: 0;
-    }
-.arch-sub-list {
-    margin-left: 20px;
-    }
-/* par date */
-.arch-by-year {
-    margin-right: 0;
-    margin-bottom: 1em;
-    margin-top: 2em;
-    }
-.arch-by-year h3 {
-    margin-bottom: 0;
-    }
-.arch-by-year h3:first-child {
-    margin-top: 0;
-    }
-.fromto {
-    margin-top: 0;
-    margin-bottom: 1.5em;
-    font-size: .875em;
-    font-style: italic;
-    }
-.arch-by-year__each-year {
-    display: inline-block;
-    vertical-align: top;
-    margin: 0;
-    width: 10em;
-    }
-.arch-year-list {
-    margin-bottom: 1.5em;
-    }
-.arch-year-list span {
-    font-size: .875em;
-    }
-/* par categorie */
-.arch-cat-list, .arch-sub-cat-list {
-    background: transparent url(img/vline.png) repeat-y;
-    }
-.arch-sub-cat-list {
-    margin: .5em 0 0 .5em;
-    }
-.arch-cat-list li {
-    padding: .2em .2em .2em 20px;
-    background: transparent url(img/hline.png) no-repeat left .82em;
-    }
-.arch-cat-list li:last-child {
-    background-image: url(img/last-hline.png);
-    }
-/* par tag */
-.arch-by-tag {
-    width: 17em;
-    }
-.arch-tag-list li {
-    display: inline;
-    padding-right: 1em;
-    }
-.arch-tag-list .tag0 {
-    color: #909090;
-    font-size: 90%;
-    }
-.arch-tag-list .tag10 {
-    color: #828282;
-    font-size: 92%;
-    }
-.arch-tag-list .tag20 {
-    color: #737373;
-    font-size: 94%;
-    }
-.arch-tag-list .tag30 {
-    color: #656565;
-    font-size: 96%;
-    }
-.arch-tag-list .tag40 {
-    color: #484848;
-    font-size: 98%;
-    }
-.arch-tag-list .tag50 {
-    color: #3A3A3A;
-    font-size: 100%;
-    }
-.arch-tag-list .tag60 {
-    color: #2B2B2B;
-    font-size: 102%;
-    }
-.arch-tag-list .tag70 {
-    color: #1D1D1D;
-    font-size: 104%;
-    }
-.arch-tag-list .tag80 {
-    color: #0E0E0E;
-    font-size: 106%;
-    }
-.arch-tag-list .tag90 {
-    color: #030303;
-    font-size: 108%;
-    }
-.arch-tag-list .tag100 {
-    color: #000;
-    font-size: 110%;
-    }
-/* archives par mois */
-.dc-archive-month #content-info h2 {
-    margin-left: 2em;
-    margin-top: .5em;
-    }
Index: hemes/berlin/scss/partials/_common.scss
===================================================================
--- themes/berlin/scss/partials/_common.scss	(revision 2640)
+++ 	(revision )
@@ -1,118 +1,0 @@
-/* Typographie */
-// base //
-body {
-    font-size: 1em;
-    line-height: 1.5;
-    font-family: $sans-serif;
-}
-// titres //
-h1 {
-    font-size: scut-em(48);
-    line-height: 1.2;
-}
-h2 {
-    font-size: scut-em(64);
-    line-height: 1.2;
-    margin-bottom: scut-em(32,64);
-}
-h3 {
-    font-size: scut-em(28);
-    line-height: 1.33;
-    margin-top: scut-em(16,28);
-    margin-bottom: scut-em(12, 28);
-}
-h4 {
-    font-size: scut-em(21);
-    margin-top: scut-em(24, 21);
-    margin-bottom: scut-em(16, 21);
-}
-h5 {
-    font-size: scut-em(18);
-    margin-top: scut-em(28,18);
-}
-h6 {
-    font-size: 1em;
-    margin-bottom: 0;
-}
-h2, h3, h4, h5, h6 {
-    color: $secondary-color;
-}
-// liens
-a {
-    color: $link;
-    text-decoration: none;
-    transition: .3s;
-    &:link, &:visited {
-        border-bottom: 1px solid $gray-medium;
-    }
-    &:visited {
-        border-bottom-style: dotted;
-    }
-    &:hover, &:active {
-        border-color: $link;
-    }
-    &:focus {
-        background-color: $link;
-        color: $gray-very-light;
-    }
-}
-// autres balises
-hr {
-    border: 0;
-    height: 1px;
-    background: #333;
-    @include background-image(linear-gradient(left, $gray-medium, $gray-dark, $gray-medium));
-}
-blockquote, q {
-    font-family: $serif;
-    color: $gray-dark;
-    font-style: italic;
-}
-blockquote {
-    font-size: scut-em(18);
-    line-height: 1.33;
-    quotes: '\201C' '\201D';
-    margin-top: scut-em(32,18);
-}
-blockquote:before,
-blockquote:after {
-    margin-top: 0;
-    font-size: 3em;
-    display: block;
-    line-height: .25;
-    color: $gray-medium;
-    margin-bottom: 0;
-}
-blockquote:before {
-    content: open-quote;
-    float: left;
-    margin-right: .25em;
-}
-blockquote:after {
-    content: close-quote;
-    text-align: right;
-}
-blockquote p:first-child {
-    margin-top: 0;
-}
-kbd {
-    padding: 0.1em 0.5em;
-}
-code, pre, kbd {
-    background-color: #555;
-    color: #EFD540;
-    font-family: $monospace;
-    font-size: scut-em(14);
-    padding: .1em .2em;
-}
-pre {
-    padding: .5em 1em;
-}
-img {
-    max-width: 97%;
-}
-p, ul, ol {
-    margin-top: 1em;
-    margin-bottom: .5em;
-}
-ul ul, ul ol, ol ol, ol ul { margin-top: .5em; }
Index: hemes/berlin/scss/partials/_content.scss
===================================================================
--- themes/berlin/scss/partials/_content.scss	(revision 2644)
+++ 	(revision )
@@ -1,84 +1,0 @@
-/* *** navigation *** */
-.navlinks {
-    color: $white;
-    margin: 0;
-}
-.prev {
-    @include replace-text('icon_prev.png');
-}
-.next {
-    @include replace-text('icon_next.png');
-}
-.prev, .next {
-    vertical-align: middle;
-    width: 2.5em;
-    height: 2.5em;
-    display: inline-block;
-    border-radius: 50%;
-    border: 1px solid $gray-medium;
-    background-color: $gray-light;
-        &:hover, &:focus {
-            border-width: 3px;
-        }
-}
-/* *** content info *** */
-#content-info {
-    margin-bottom: 4em;
-    border-bottom: 1px solid $gray-medium;
-    padding: 0;
-    font-size: scut-em(14);
-    h2 {
-        display: inline-block;
-        vertical-align: top;
-        padding: .5em .75em;
-        border-radius: .5em;
-        background-color: $secondary-color;
-        color: $white;
-        font-size: scut-em(16,14);
-        text-align: center;
-        a {color: $white; }
-    }
-    h3 {
-        font-size: 1em;
-    }
-    ul {
-        margin-top: scut-em(8, 14);
-        padding-left: 0;
-
-    }
-}
-.content-info__feed {
-    display: inline-block;
-    vertical-align: top;
-    list-style-type: none;
-    li {
-        display: inline;
-        margin-right: 1.5em;
-        }
-}
-.content-info__sub-cat {
-    margin-top: 2em;
-    h3 { font-weight: bold;}
-}
-// lien de retour, à combiner avec le script js
-#gotop {
-    display:none;
-    z-index: 1000;
-    position:fixed;
-    bottom: 0;
-    right:.5em;
-    width: 10em;
-    padding: .25em;
-    border: 1px solid $gray-dark;
-    border-radius: .25em;
-    background-color: $white;
-    color:#333;
-    font-size: .875em;
-    text-align:center;
-    a, a:link, a:hover, a:active {
-        background: transparent;
-        border: none;
-        font-weight: bold;
-        color: $gray-dark;
-    }
-}
Index: hemes/berlin/scss/partials/_footer.scss
===================================================================
--- themes/berlin/scss/partials/_footer.scss	(revision 2670)
+++ 	(revision )
@@ -1,20 +1,0 @@
-.footer__widgets {
-    padding: 1em;
-    background-color: $white;
-    text-align: center;
-    line-height: 2;
-}
-.blogcustom__title {
-    @include visually-hidden;
-}
-.footer__widgets .widget {
-    margin-top: 1em;
-}
-.footer__widgets h3 {
-    margin-bottom: 0;
-    font-size: 1em;
-    font-weight: bold;
-}
-.footer__widgets ul {
-    @include inline-block-list(.5em);
-}
Index: hemes/berlin/scss/partials/_forms.scss
===================================================================
--- themes/berlin/scss/partials/_forms.scss	(revision 2640)
+++ 	(revision )
@@ -1,44 +1,0 @@
-button, input, select, textarea {
-    font-family:inherit;
-    font-size:100%;
-    margin:0;
-}
-button, input {
-    line-height:normal
-}
-button, select {
-    text-transform:none
-}
-button, html input[type=button], input[type=reset], input[type=submit] {
-    -webkit-appearance:button;
-    cursor:pointer
-}
-input[type=radio], input[type=checkbox] {
-    cursor:pointer
-}
-button:disabled, input:disabled {
-    cursor:default
-}
-input[type=checkbox], input[type=radio] {
-    padding:0
-}
-input[type=search] {
-    -webkit-appearance:textfield
-}
-input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration {
-    -webkit-appearance:none
-}
-button::-moz-focus-inner, input::-moz-focus-inner {
-    border:0;
-    padding:0
-}
-textarea {
-    overflow:auto;
-    vertical-align:top
-}
-button, input:not([type=radio]):not([type=checkbox]), select {
-    vertical-align:middle
-}
-::-moz-placeholder {
-    opacity:1
-}
Index: hemes/berlin/scss/partials/_global_layout.scss
===================================================================
--- themes/berlin/scss/partials/_global_layout.scss	(revision 2640)
+++ 	(revision )
@@ -1,60 +1,0 @@
-body {
-    background: $gray-light url(img/bg_light.png);
-    color: $primary-color;
-}
-#main {
-    background-color: $white;
-    padding: 1em .5em 2em;
-}
-#page {
-    @include zen-grid-container();
-    max-width: $large-screen;
-    margin: 0 auto;
-    padding: 0;
-}
-#wrapper {
-    @include zen-grid-container();
-}
-.header {
-    position: relative;
-    padding: .25em 0;
-    }
-@media all and(max-width: $small-screen) {
-    #main {
-        padding: .5em;
-    }
-}
-@media screen and(min-width: ($xlarge-screen + .1em)) and(max-width: 110em) {
-    #page {
-        max-width: $xlarge-screen;
-    }
-    #main {
-        @include zen-grid-item(9,1)
-    }
-    #sidebar {
-        @include zen-grid-item(3,10)
-    }
-}
-@media screen and(min-width: 110.1em) {
-    body {
-        font-size: 1.125em;
-    }
-    #page {
-        max-width: 103em;
-    }
-    .header {
-        max-width: zen-grid-item-width(8);
-        padding-bottom: 0;
-    }
-    #main {
-        @include zen-grid-item(8,1)
-    }
-    #sidebar {
-        @include zen-grid-item(4,9);
-    }
-    #blognav, #blogextra {
-        width: 49%;
-        display: inline-block;
-        vertical-align: top;
-    }
-}
Index: hemes/berlin/scss/partials/_header.scss
===================================================================
--- themes/berlin/scss/partials/_header.scss	(revision 2643)
+++ 	(revision )
@@ -1,145 +1,0 @@
-.header a:link,
-.header a:visited {
-    color: $primary-color;
-    border-bottom-color: $gray-very-light;
-}
-.header a:hover,
-.header a:focus {
-    color: $link;
-    border-bottom-color: transparent;
-}
-.skip-links {
-    @include inline-block-list-container;
-    text-align: right;
-    li {
-        @include inline-block-list-item(.5em);
-        font-size: scut-em(12);
-        line-height: 1;
-        padding-bottom: .5em;
-        a:link, a:visited {
-            color: $gray-dark;
-            }
-        a:hover, a:focus {
-            background-color: $gray-light;
-            color: $link;
-            }
-    }
-}
-.banner {
-    padding-bottom: .5em;
-    margin-right: 3em;
-    }
-a.site-title__link,
-a.site-title__link:link,
-a.site-title__link:visited {
-    background-color: transparent;
-    border-color: transparent;
-}
-.site-title__text {
-    color: $gray-dark;
-    color: rgba(120, 120, 120, 0.8);
-    font-weight: bold;
-    font-weight: 500;
-    letter-spacing: -1px;
-    text-shadow: 1px 4px 6px $white, 0 0 0 $black, 1px 4px 6px $white;
-}
-.site-title__link:hover .site-title__text,
-.site-title__link:focus .site-title__text,
-.site-title__link:active .site-title__text {
-    color: rgba(223, 48, 52, 0.8);
-}
-.site-baseline {
-    font-family: $serif;
-    font-style: italic;
-    margin-top: 0;
-    margin-bottom: rhythm(.5, 24px);
-    color: $gray-dark;
-    }
-.header__nav {
-    @include inline-block-list-container;
-    clear: left;
-    text-align: right;
-    background: $gray-very-dark;
-    background: $link;
-    li {
-        @include inline-block-list-item(1em);
-        margin-right: .5em;
-        padding-top: .25em;
-        padding-bottom: .25em;
-        text-align: center;
-        span {
-            @include adjust-font-size-to(14px);
-            font-family: $serif;
-            font-style: italic;
-            display: block;
-            }
-        }
-        li a:link,
-        li a:visited {
-            color: $white;
-        }
-        li a:hover,
-        li a:focus {
-            background-color: $gray-dark;
-        }
-    }
-/* Si js est actif, un bouton pour afficher/masquer le menu est créé */
-#hamburger {
-    position: absolute;
-    top: 3em;
-    right: .5em;
-    padding: 0;
-    background-color: $link;
-    background-repeat: no-repeat;
-    background-position: 50% 50%;
-    @include svg(icon_hamburger);
-    height: 2.5em;
-    width: 2.5em;
-    border: 2px solid $link;
-    &:visited {
-        background-color: $link;
-    }
-    &:focus,
-    &:hover {
-        background-color: shade($link, 20%);
-        border-color: $link;
-    }
-    &.open {
-    background-image: url(img/icon_close.png);
-    background-image: url(img/icon_close.svg), none;
-    }
-}
-@media screen and(max-width: $large-screen) {
-    .header {
-        padding-left: .5em;
-        padding-right: .5em;
-        padding-bottom: 0;
-    }
-    .header__nav {
-        margin-left: -.5em;
-        margin-right: -.5em;
-        li {
-            display: block;
-            margin-right: 0;
-            border-bottom: 1px solid $white;
-        }
-    }
-}
-@media screen and(max-width: $small-screen) {
-    .skip-links {
-        text-align: center;
-        @include adjust-font-size-to(10px);
-    }
-    .site-baseline {
-        display: none;
-    }
-    #hamburger {
-        top: 1.5em;
-        right: .5em;
-    }
-}
-@media screen and (max-width: $medium-screen) {
-    .site-title {
-        font-size: 1.8em
-    }
-}
Index: hemes/berlin/scss/partials/_icons.scss
===================================================================
--- themes/berlin/scss/partials/_icons.scss	(revision 2640)
+++ 	(revision )
@@ -1,46 +1,0 @@
-.post-date,
-.post-cat,
-.post-tags-list,
-.post-permalink,
-.comment_count,
-.ping_count,
-.attach_count,
-.feed {
-    padding-left: 22px;
-    background-repeat: no-repeat;
-    background-position: 0 50%;
-    padding-right: .5em;
-}
-.post-author {
-    padding-right: .5em;
-}
-.post-date {
-    background-image: url(img/icon_date.png);
-}
-.post-cat {
-    background-image: url(img/icon_category.png);
-}
-.post-tags-list {
-    background-image: url(img/icon_tags.png);
-    padding-left: 22px !important;
-}
-.comment_count {
-    background-image: url(img/icon_comments.png);
-}
-.ping_count {
-    background-image: url(img/icon_trackbacks.png);
-}
-.attach_count {
-    background-image: url(img/icon_attach.png);
-}
-.post-permalink {
-    background-image: url(img/icon_permalink.png);
-}
-.feed {
-    background-image: url(img/icon_feed.png);
-    background-image: url(img/icon_feed.svg), none;
-    -webkit-background-size: .875em;
-    -o-background-size: .875em;
-    background-size: .875em;
-    padding-left: 1.25em;
-}
Index: hemes/berlin/scss/partials/_post.scss
===================================================================
--- themes/berlin/scss/partials/_post.scss	(revision 2697)
+++ 	(revision )
@@ -1,258 +1,0 @@
-/**
-    POST
-------------------------------- */
-.post {
-    max-width: 42em;
-    margin: 2em auto 6em;
-}
-.post-day-date {
-    font-size: scut-em(14,16);
-    text-align: center;
-    text-transform: uppercase;
-    letter-spacing: 1px;
-    margin-bottom: scut-em(12,14);
-}
-.post-meta {
-    font-size: scut-em(14);
-    background-color: $gray-light;
-    border-radius: scut-em(8, 14);
-    padding: scut-em(8, 14) scut-em(16, 14);
-    margin-bottom: scut-em(24, 14);
-    clear: both;
-}
-.post-info {
-    margin: .5em 0;
-}
-.full .post-info,
-.short .post-info,
-.post-cat,
-.post-tags-list {
-    margin: .5em 0;
-    display: inline;
-    vertical-align: top;
-}
-.post-tags-list {
-    @include inline-block-list-container;
-}
-.post-tags-item {
-    @include inline-block-list-item();
-    vertical-align: top;
-    a:after { content: "."}
-}
-.post-info-co {
-    margin: .5em 0;
-    }
-.post-title {
-    text-align: center;
-    font-weight: 200;
-    a, a:link, a:visited {
-        border-bottom-color: $white;
-    }
-    a:hover, a:focus, a:active {
-        color: $secondary-color;
-        background-color: transparent;
-    }
-    @media screen and (max-width: $medium-screen) {
-        font-size: scut-em(32);
-    }
-}
-.post-content {
-    margin-bottom: 1em;
-}
-.post-read-it {
-    margin-bottom: 1.5em;
-}
-.footnotes {
-    font-size: scut-em(14, 16);
-    margin-top: 2em;
-    margin-bottom: 3em;
-    h4 {
-        display: inline-block;
-        border-top: 1px solid $secondary-color;
-        padding-right: 3em;
-        margin-bottom: 0;
-    }
-}
-.post-attachments {
-    position: relative;
-    padding: 0 2.5em .25em;
-    border: 1px solid $gray-medium;
-    box-shadow: 0 2px rgba(0, 0, 0, 0.05), 0 0 1px rgba(0, 0, 0, 0.2);
-}
-.post-attachments:before {
-    content: url(img/icon_attachments.png);
-    content: url(img/icon_attachments.svg);
-    display: block;
-    position: absolute;
-    margin-top: -.33em;
-    margin-left: -2em;
-}
-.post-attachments-title {
-    padding-top: .75em;
-    font-size: 1em;
-    text-transform: uppercase;
-    font-weight: bold;
-    color: $gray-dark;
-}
-.post-attachments-list {
-    padding-left: 1em;
-    margin-top: .5em;
-}
-.post-feedback {
-    max-width: 42em;
-    margin: 3em auto;
-    clear: both;
-}
-.post-feedback h3 {
-    text-align: center;
-    font-size: 1.25em;
-    font-weight: bold;
-    color: $gray-dark;
-}
-    .comments-list {
-        @include no-bullets;
-        padding-left: 0;
-    }
-        .comment, .ping {
-            overflow: hidden;
-            padding: .1em 1.5em .1em 4em;
-            margin-bottom: 2em;
-            border-radius: .25em;
-            box-shadow: 0 2px rgba(0, 0, 0, 0.05), 0 0 1px rgba(0, 0, 0, 0.2);
-        }
-        .comment {
-            background-color: #EDF3F2;
-        }
-        .ping {
-            background: #f3efed url(img/icon_trackbacks.png) no-repeat 1.5em 4em;
-        }
-            .comment-number {
-                display: block;
-                float: left;
-                width: 2.5em;
-                height: 2.5em;
-                margin-left: -3.5em;
-                margin-right: 1em;
-                margin-top: -.5em;
-                border-radius: 50%;
-                background-color: $white;
-                z-index: 1000;
-                line-height: 2.5em;
-                text-align: center;
-            }
-.comment-form, .send-trackback {
-    overflow: hidden;
-    padding: .75em 3em .1em;
-    margin-bottom: 2em;
-    border-radius: .25em;
-    box-shadow: 0 2px rgba(0, 0, 0, 0.05), 0 0 1px rgba(0, 0, 0, 0.2);
-    background-color: #EDF3F2;
-}
-.send-trackback {
-    background: #f3efed url(img/icon_trackbacks.png) no-repeat 1.5em 4em;
-}
-.field label {
-    display: inline-block;
-    width: 10em;
-}
-.field input {
-    max-width: 100%;
-}
-.field textarea {
-    display: block;
-    width: 100%;
-}
-.form-help, .remember {
-    font-size: scut-em(14, 16);
-}
-#pr {
-    background-color: $gray-light;
-    padding: .5em;
-    border: 2px solid #6c7c7c;
-    margin-bottom: 2em;
-}
-.error {
-    background-color: $link;
-    color: $white;
-    padding: .25em .5em;
-}
-/* Button Style */
-.buttons {
-    text-align: right;
-}
-button.submit, button.preview {
-    @include background-image(linear-gradient(top, $button-light, $button-dark));
-    box-shadow:inset 0 1px 3px 0 $button-light;
-    background-color: $button-light;
-    border-radius: .25em;
-    border: 1px solid $button-dark;
-    display: inline-block;
-    cursor: pointer;
-    color: $white;
-    padding: .25em .5em;
-    text-decoration: none;
-    text-shadow: 0 -1px 0 $gray-dark;
-}
-button.submit:hover,
-button.submit:focus,
-button.preview:hover,
-button.preview:focus {
-    cursor: pointer;
-    @include background-image(linear-gradient($button-dark, $button-dark));
-    background-color: $button-dark;
-}
-button.submit:active, button.preview:active {
-    position: relative;
-    top: 1px;
-}
-@media all and(max-width: $small-screen) {
-    .comment-number {
-        margin-top: 0;
-    }
-    .comment-content, .ping-content {
-        margin-left: -3.5em;
-        margin-right: -1em;
-    }
-    .comment-form, .send-trackback {
-        padding: .75em .5em .1em;
-    }
-}
-@media all and(min-width: $small-screen+.1em) {
-    .post-day-date:after,
-    .post-day-date:before {
-        display: inline-block;
-        height: 1px;
-        content: " ";
-        background-color: $gray-medium;
-        text-shadow: none;
-        width: 20%;
-        margin-bottom: .33em;
-    }
-    .post-day-date:after {
-        margin-left: 2em;
-    }
-    .post-day-date:before {
-        margin-right: 2em;
-    }
-    .post-feedback h3:after,
-    .post-feedback h3:before {
-        display: inline-block;
-        height: 1px;
-        content: " ";
-        background-color: $gray-medium;
-        text-shadow: none;
-        width: 20%;
-        margin-bottom: .33em;
-    }
-    .post-feedback h3:after {
-        margin-left: 2em;
-    }
-    .post-feedback h3:before {
-        margin-right: 2em;
-    }
-}
-@media all and(max-width: $medium-screen) {
-    .post {
-        margin: 1em auto 3em;
-    }
-}
Index: hemes/berlin/scss/partials/_sidebar.scss
===================================================================
--- themes/berlin/scss/partials/_sidebar.scss	(revision 2672)
+++ 	(revision )
@@ -1,90 +1,0 @@
-.sidebar {
-    @include pie-clearfix;
-    padding-top: 2em;
-    background: $gray-very-dark url(img/bg_dark.png);
-    color: $white;
-    text-shadow: $gray-very-dark 0px -1px 0px;
-    a:link, a:visited {
-        color: $gray-very-light;
-        border: none;
-    }
-    a:hover, a:focus, a:active,
-    li:hover, li:focus {
-        background-color: $link;
-    }
-}
-.blognav__title,
-.blogextra__title {
-    @include visually-hidden;
-}
-
-.blognav__widgets h3,
-.blognav__widgets h4,
-.blogextra__widgets h3,
-.blogextra__widgets h4 {
-    font-size: 1em;
-    color: $white;
-    font-weight: bold;
-}
-.blognav__widgets h3,
-.blogextra__widgets h3 {
-    text-transform: uppercase;
-}
-.blognav__widgets h4,
-.blogextra__widgets h4 {
-    margin-top: 1.5em;
-    margin-bottom: 0;
-}
-.blognav__widgets .widget, .blogextra__widgets .widget {
-    padding: 1em;
-    font-size: .875em;
-    line-height: 1.71429;
-    > ul {
-        @include no-bullets;
-        padding-left: 0;
-    }
-}
-.blognav__widgets, .blogextra__widgets {
-    ul {
-        margin: 0;
-    }
-    li {
-        display: block;
-        padding: .25em;
-        border-bottom: 1px solid $gray-medium;
-    }
-    li ul {
-    margin-left: -.25em;
-    }
-    li li {
-        border-top: 1px solid $gray-medium;
-    }
-    li li:last-child {
-        border-bottom: none;
-    }
-}
-#q {
-    width: 75%;
-}
-.category-current {
-    margin-left: -2em;
-    background-color: $black;
-}
-.category-current ul {
-    background-color: $gray-very-dark;
-}
-.sidebar li:hover ul {
-    background-color: $gray-very-dark;
-}
-@media screen and(min-width: ($small-screen + .1em)) and (max-width: $large-screen) {
-    .blognav__widgets .widget, .blogextra__widgets .widget {
-        width: 50%;
-        float: left;
-    }
-}
-@media screen and(min-width: ($large-screen + .1em)) and(max-width: $xlarge-screen) {
-    .blognav__widgets .widget, .blogextra__widgets .widget {
-        width: 33.33%;
-        float: left;
-    }
-}
Index: hemes/berlin/scss/print.scss
===================================================================
--- themes/berlin/scss/print.scss	(revision 2640)
+++ 	(revision )
@@ -1,3 +1,0 @@
-/* Welcome to Compass. Use this file to define print styles.
- * Import this file using the following HTML or equivalent:
- * <link href="/stylesheets/print.css" media="print" rel="stylesheet" type="text/css" /> */
Index: hemes/berlin/scss/style.scss
===================================================================
--- themes/berlin/scss/style.scss	(revision 2643)
+++ 	(revision )
@@ -1,35 +1,0 @@
-@charset "UTF-8";
-
-/** --------------------------------------------------
-    Start
---------------------------------------------------- */
-@import "init/mixins-functions";    // mixins, fonctions
-@import "init/rebase";              // init html tags
-@import "init/config";              // theme variables
-
-/** --------------------------------------------------
-    Common rules
---------------------------------------------------- */
-@import "partials/common";          // headings, links
-@import "partials/icons";           // icons
-
-/** --------------------------------------------------
-    layout elements
---------------------------------------------------- */
-@import "partials/global_layout";   // containers
-@import "partials/header";
-@import "partials/footer";
-@import "partials/sidebar";
-@import "partials/content";
-@import "partials/post";
-@import "partials/archive";
-
-/** --------------------------------------------------
-    Modules
---------------------------------------------------- */
-@import "modules/off-canvas";
-
-/*** dev only ***/
-#main {
-    //@include debug-vertical-alignment;
-}
Index: hemes/berlin/style.css
===================================================================
--- themes/berlin/style.css	(revision 2703)
+++ 	(revision )
@@ -1,1363 +1,0 @@
-@charset "UTF-8";
-/** --------------------------------------------------
-    Start
---------------------------------------------------- */
-/* largeur des paddings et border compris dans "width" */
-*,
-*:after,
-*:before {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -ms-box-sizing: border-box;
-  box-sizing: border-box; }
-
-html {
-  font-size: 100.01%;
-  -ms-text-size-adjust: 100%;
-  -webkit-text-size-adjust: 100%;
-  margin: 0;
-  padding: 0; }
-
-body {
-  margin: 0;
-  padding: 0; }
-
-a {
-  background: transparent; }
-
-a:focus {
-  outline: thin dotted; }
-
-a:active, a:hover {
-  outline: none; }
-
-a img {
-  border: none; }
-
-q, cite {
-  font-style: italic; }
-
-q:before, q:after {
-  content: ""; }
-
-sup, sub {
-  font-size: .75em;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline; }
-
-sup {
-  top: -0.5em; }
-
-sub {
-  bottom: -0.25em; }
-
-abbr[title] {
-  border-bottom: 1px dotted;
-  cursor: help; }
-
-b, strong {
-  font-weight: bold;
-  font-size: 0.9375em; }
-
-small {
-  font-size: 80%; }
-
-dfn {
-  font-style: italic; }
-
-hr {
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-  height: 0; }
-
-mark {
-  background: #ff0;
-  color: #000; }
-
-code, kbd, pre, samp {
-  font-family: monospace, serif;
-  font-size: 1em; }
-
-pre {
-  white-space: pre-wrap; }
-
-fieldset {
-  margin: 0;
-  padding: 0;
-  border: none; }
-
-input, button, select {
-  vertical-align: middle; }
-
-button, input, select, textarea {
-  font-family: inherit;
-  font-size: 100%;
-  margin: 0; }
-
-button, input {
-  line-height: normal; }
-
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  cursor: pointer; }
-
-button[disabled],
-html input[disabled] {
-  cursor: default; }
-
-input[type="checkbox"],
-input[type="radio"] {
-  padding: 0;
-  border: none; }
-
-input[type="search"] {
-  -webkit-appearance: textfield; }
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none; }
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0; }
-
-textarea {
-  overflow: auto;
-  vertical-align: top; }
-
-table {
-  border-collapse: collapse;
-  margin-bottom: 1.5em; }
-
-td, th {
-  padding: 1px;
-  vertical-align: top;
-  text-align: left; }
-
-td:first-child, th:first-child {
-  empty-cells: hide; }
-
-/* scripts */
-body > script {
-  display: none !important; }
-
-/* HTML5 for old browsers */
-article, aside, details, figcaption, figure, footer,
-header, hgroup, main, nav, section, summary {
-  display: block; }
-
-audio, canvas, video {
-  display: inline-block; }
-
-audio:not([controls]) {
-  display: none;
-  height: 0; }
-
-figure {
-  margin: 0; }
-
-[hidden], template {
-  display: none; }
-
-svg:not(:root) {
-  overflow: hidden; }
-
-/* Headings reset */
-h1, h2, h3, h4, h5, h6 {
-  font-size: 1em;
-  font-weight: normal;
-  margin: 0; }
-
-/* Hide only visually, but have it available for screenreaders: h5bp.com/v */
-.visually-hidden {
-  border: 0;
-  clip: rect(0 0 0 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px; }
-
-/*
-* Scut, a collection of Sass utilities to ease and improve our implementations of common style-code patterns.
-* v0.8.0
-* Docs at http://davidtheclark.github.io/scut
-*/
-/** --------------------------------------------------
-    Common rules
---------------------------------------------------- */
-/* Typographie */
-body {
-  font-size: 1em;
-  line-height: 1.5;
-  font-family: Lato, "Open Sans", "Segoe UI", Frutiger, "Frutiger Linotype", "Dejavu Sans", "Helvetica Neue", Arial, sans-serif; }
-
-h1 {
-  font-size: 3em;
-  line-height: 1.2; }
-
-h2 {
-  font-size: 4em;
-  line-height: 1.2;
-  margin-bottom: 0.5em; }
-
-h3 {
-  font-size: 1.75em;
-  line-height: 1.33;
-  margin-top: 0.5714286em;
-  margin-bottom: 0.4285714em; }
-
-h4 {
-  font-size: 1.3125em;
-  margin-top: 1.1428571em;
-  margin-bottom: 0.7619048em; }
-
-h5 {
-  font-size: 1.125em;
-  margin-top: 1.5555556em; }
-
-h6 {
-  font-size: 1em;
-  margin-bottom: 0; }
-
-h2, h3, h4, h5, h6 {
-  color: #267daf; }
-
-a {
-  color: #d52125;
-  text-decoration: none;
-  transition: .3s; }
-  a:link, a:visited {
-    border-bottom: 1px solid gainsboro; }
-  a:visited {
-    border-bottom-style: dotted; }
-  a:hover, a:active {
-    border-color: #d52125; }
-  a:focus {
-    background-color: #d52125;
-    color: #f9f9f9; }
-
-hr {
-  border: 0;
-  height: 1px;
-  background: #333;
-  background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #dcdcdc), color-stop(50%, #626262), color-stop(100%, #dcdcdc));
-  background-image: -webkit-linear-gradient(left, #dcdcdc, #626262, #dcdcdc);
-  background-image: -moz-linear-gradient(left, #dcdcdc, #626262, #dcdcdc);
-  background-image: -o-linear-gradient(left, #dcdcdc, #626262, #dcdcdc);
-  background-image: linear-gradient(left, #dcdcdc, #626262, #dcdcdc); }
-
-blockquote, q {
-  font-family: "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif;
-  color: #626262;
-  font-style: italic; }
-
-blockquote {
-  font-size: 1.125em;
-  line-height: 1.33;
-  quotes: '\201C' '\201D';
-  margin-top: 1.7777778em; }
-
-blockquote:before,
-blockquote:after {
-  margin-top: 0;
-  font-size: 3em;
-  display: block;
-  line-height: .25;
-  color: gainsboro;
-  margin-bottom: 0; }
-
-blockquote:before {
-  content: open-quote;
-  float: left;
-  margin-right: .25em; }
-
-blockquote:after {
-  content: close-quote;
-  text-align: right; }
-
-blockquote p:first-child {
-  margin-top: 0; }
-
-kbd {
-  padding: 0.1em 0.5em; }
-
-code, pre, kbd {
-  background-color: #555;
-  color: #EFD540;
-  font-family: "Andale Mono", AndaleMono, monospace;
-  font-size: 0.875em;
-  padding: .1em .2em; }
-
-pre {
-  padding: .5em 1em; }
-
-img {
-  max-width: 97%; }
-
-p, ul, ol {
-  margin-top: 1em;
-  margin-bottom: .5em; }
-
-ul ul, ul ol, ol ol, ol ul {
-  margin-top: .5em; }
-
-.post-date,
-.post-cat,
-.post-tags-list,
-.post-permalink,
-.comment_count,
-.ping_count,
-.attach_count,
-.feed {
-  padding-left: 22px;
-  background-repeat: no-repeat;
-  background-position: 0 50%;
-  padding-right: .5em; }
-
-.post-author {
-  padding-right: .5em; }
-
-.post-date {
-  background-image: url(img/icon_date.png); }
-
-.post-cat {
-  background-image: url(img/icon_category.png); }
-
-.post-tags-list {
-  background-image: url(img/icon_tags.png);
-  padding-left: 22px !important; }
-
-.comment_count {
-  background-image: url(img/icon_comments.png); }
-
-.ping_count {
-  background-image: url(img/icon_trackbacks.png); }
-
-.attach_count {
-  background-image: url(img/icon_attach.png); }
-
-.post-permalink {
-  background-image: url(img/icon_permalink.png); }
-
-.feed {
-  background-image: url(img/icon_feed.png);
-  background-image: url(img/icon_feed.svg), none;
-  -webkit-background-size: .875em;
-  -o-background-size: .875em;
-  background-size: .875em;
-  padding-left: 1.25em; }
-
-/** --------------------------------------------------
-    layout elements
---------------------------------------------------- */
-body {
-  background: #f2f2f2 url(img/bg_light.png);
-  color: #373737; }
-
-#main {
-  background-color: white;
-  padding: 1em .5em 2em; }
-
-#page {
-  *position: relative;
-  *zoom: 1;
-  max-width: 60em;
-  margin: 0 auto;
-  padding: 0; }
-  #page:before, #page:after {
-    content: "";
-    display: table; }
-  #page:after {
-    clear: both; }
-
-#wrapper {
-  *position: relative;
-  *zoom: 1; }
-  #wrapper:before, #wrapper:after {
-    content: "";
-    display: table; }
-  #wrapper:after {
-    clear: both; }
-
-.header {
-  position: relative;
-  padding: .25em 0; }
-
-@media all and (max-width: 30em) {
-  #main {
-    padding: .5em; } }
-@media screen and (min-width: 80.1em) and (max-width: 110em) {
-  #page {
-    max-width: 80em; }
-
-  #main {
-    float: left;
-    width: 75%;
-    margin-left: 0%;
-    margin-right: -100%;
-    *margin-right: -99.9%;
-    padding-left: 1em;
-    padding-right: 1em;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    -ms-box-sizing: border-box;
-    box-sizing: border-box;
-    word-wrap: break-word;
-    *behavior: url("scripts");
-    _display: inline;
-    _overflow: hidden;
-    _overflow-y: visible; }
-
-  #sidebar {
-    float: left;
-    width: 25%;
-    margin-left: 75%;
-    margin-right: -100%;
-    *margin-right: -99.9%;
-    padding-left: 1em;
-    padding-right: 1em;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    -ms-box-sizing: border-box;
-    box-sizing: border-box;
-    word-wrap: break-word;
-    *behavior: url("scripts");
-    _display: inline;
-    _overflow: hidden;
-    _overflow-y: visible; } }
-@media screen and (min-width: 110.1em) {
-  body {
-    font-size: 1.125em; }
-
-  #page {
-    max-width: 103em; }
-
-  .header {
-    max-width: 66.6666667%;
-    padding-bottom: 0; }
-
-  #main {
-    float: left;
-    width: 66.6666667%;
-    margin-left: 0%;
-    margin-right: -100%;
-    *margin-right: -99.9%;
-    padding-left: 1em;
-    padding-right: 1em;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    -ms-box-sizing: border-box;
-    box-sizing: border-box;
-    word-wrap: break-word;
-    *behavior: url("scripts");
-    _display: inline;
-    _overflow: hidden;
-    _overflow-y: visible; }
-
-  #sidebar {
-    float: left;
-    width: 33.3333333%;
-    margin-left: 66.6666667%;
-    margin-right: -100%;
-    *margin-right: -99.9%;
-    padding-left: 1em;
-    padding-right: 1em;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    -ms-box-sizing: border-box;
-    box-sizing: border-box;
-    word-wrap: break-word;
-    *behavior: url("scripts");
-    _display: inline;
-    _overflow: hidden;
-    _overflow-y: visible; }
-
-  #blognav, #blogextra {
-    width: 49%;
-    display: inline-block;
-    vertical-align: top; } }
-.header a:link,
-.header a:visited {
-  color: #373737;
-  border-bottom-color: #f9f9f9; }
-
-.header a:hover,
-.header a:focus {
-  color: #d52125;
-  border-bottom-color: transparent; }
-
-.skip-links {
-  margin: 0;
-  padding: 0;
-  border: 0;
-  overflow: hidden;
-  *zoom: 1;
-  text-align: right; }
-  .skip-links li {
-    list-style-image: none;
-    list-style-type: none;
-    margin-left: 0;
-    display: -moz-inline-stack;
-    display: inline-block;
-    vertical-align: middle;
-    *vertical-align: auto;
-    zoom: 1;
-    *display: inline;
-    white-space: nowrap;
-    padding-left: 0.5em;
-    padding-right: 0.5em;
-    font-size: 0.75em;
-    line-height: 1;
-    padding-bottom: .5em; }
-    .skip-links li a:link, .skip-links li a:visited {
-      color: #626262; }
-    .skip-links li a:hover, .skip-links li a:focus {
-      background-color: #f2f2f2;
-      color: #d52125; }
-
-.banner {
-  padding-bottom: .5em;
-  margin-right: 3em; }
-
-a.site-title__link,
-a.site-title__link:link,
-a.site-title__link:visited {
-  background-color: transparent;
-  border-color: transparent; }
-
-.site-title__text {
-  color: #626262;
-  color: rgba(120, 120, 120, 0.8);
-  font-weight: bold;
-  font-weight: 500;
-  letter-spacing: -1px;
-  text-shadow: 1px 4px 6px white, 0 0 0 black, 1px 4px 6px white; }
-
-.site-title__link:hover .site-title__text,
-.site-title__link:focus .site-title__text,
-.site-title__link:active .site-title__text {
-  color: rgba(223, 48, 52, 0.8); }
-
-.site-baseline {
-  font-family: "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif;
-  font-style: italic;
-  margin-top: 0;
-  margin-bottom: 0.5em;
-  color: #626262; }
-
-.header__nav {
-  margin: 0;
-  padding: 0;
-  border: 0;
-  overflow: hidden;
-  *zoom: 1;
-  clear: left;
-  text-align: right;
-  background: #373737;
-  background: #d52125; }
-  .header__nav li {
-    list-style-image: none;
-    list-style-type: none;
-    margin-left: 0;
-    display: -moz-inline-stack;
-    display: inline-block;
-    vertical-align: middle;
-    *vertical-align: auto;
-    zoom: 1;
-    *display: inline;
-    white-space: nowrap;
-    padding-left: 1em;
-    padding-right: 1em;
-    margin-right: .5em;
-    padding-top: .25em;
-    padding-bottom: .25em;
-    text-align: center; }
-    .header__nav li span {
-      font-size: 0.875em;
-      line-height: 1.7142857em;
-      font-family: "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif;
-      font-style: italic;
-      display: block; }
-  .header__nav li a:link,
-  .header__nav li a:visited {
-    color: white; }
-  .header__nav li a:hover,
-  .header__nav li a:focus {
-    background-color: #626262; }
-
-/* Si js est actif, un bouton pour afficher/masquer le menu est créé */
-#hamburger {
-  position: absolute;
-  top: 3em;
-  right: .5em;
-  padding: 0;
-  background-color: #d52125;
-  background-repeat: no-repeat;
-  background-position: 50% 50%;
-  background-image: url("img/icon_hamburger.png");
-  background-image: url("img/icon_hamburger.svg"), none;
-  height: 2.5em;
-  width: 2.5em;
-  border: 2px solid #d52125; }
-  #hamburger:visited {
-    background-color: #d52125; }
-  #hamburger:focus, #hamburger:hover {
-    background-color: #aa1a1d;
-    border-color: #d52125; }
-  #hamburger.open {
-    background-image: url(img/icon_close.png);
-    background-image: url(img/icon_close.svg), none; }
-
-@media screen and (max-width: 60em) {
-  .header {
-    padding-left: .5em;
-    padding-right: .5em;
-    padding-bottom: 0; }
-
-  .header__nav {
-    margin-left: -.5em;
-    margin-right: -.5em; }
-    .header__nav li {
-      display: block;
-      margin-right: 0;
-      border-bottom: 1px solid white; } }
-@media screen and (max-width: 30em) {
-  .skip-links {
-    text-align: center;
-    font-size: 0.625em;
-    line-height: 2.4em; }
-
-  .site-baseline {
-    display: none; }
-
-  #hamburger {
-    top: 1.5em;
-    right: .5em; } }
-@media screen and (max-width: 40em) {
-  .site-title {
-    font-size: 1.8em; } }
-.footer__widgets {
-  padding: 1em;
-  background-color: white;
-  text-align: center;
-  line-height: 2; }
-
-.blogcustom__title {
-  border: 0;
-  clip: rect(0 0 0 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px; }
-
-.footer__widgets .widget {
-  margin-top: 1em; }
-
-.footer__widgets h3 {
-  margin-bottom: 0;
-  font-size: 1em;
-  font-weight: bold; }
-
-.footer__widgets ul {
-  margin: 0;
-  padding: 0;
-  border: 0;
-  overflow: hidden;
-  *zoom: 1; }
-  .footer__widgets ul li {
-    list-style-image: none;
-    list-style-type: none;
-    margin-left: 0;
-    display: -moz-inline-stack;
-    display: inline-block;
-    vertical-align: middle;
-    *vertical-align: auto;
-    zoom: 1;
-    *display: inline;
-    white-space: nowrap;
-    padding-left: 0.5em;
-    padding-right: 0.5em; }
-
-.sidebar {
-  *zoom: 1;
-  padding-top: 2em;
-  background: #373737 url(img/bg_dark.png);
-  color: white;
-  text-shadow: #373737 0px -1px 0px; }
-  .sidebar:after {
-    content: "";
-    display: table;
-    clear: both; }
-  .sidebar a:link, .sidebar a:visited {
-    color: #f9f9f9;
-    border: none; }
-  .sidebar a:hover, .sidebar a:focus, .sidebar a:active,
-  .sidebar li:hover, .sidebar li:focus {
-    background-color: #d52125; }
-
-.blognav__title,
-.blogextra__title {
-  border: 0;
-  clip: rect(0 0 0 0);
-  height: 1px;
-  margin: -1px;
-  overflow: hidden;
-  padding: 0;
-  position: absolute;
-  width: 1px; }
-
-.blognav__widgets h3,
-.blognav__widgets h4,
-.blogextra__widgets h3,
-.blogextra__widgets h4 {
-  font-size: 1em;
-  color: white;
-  font-weight: bold; }
-
-.blognav__widgets h3,
-.blogextra__widgets h3 {
-  text-transform: uppercase; }
-
-.blognav__widgets h4,
-.blogextra__widgets h4 {
-  margin-top: 1.5em;
-  margin-bottom: 0; }
-
-.blognav__widgets .widget, .blogextra__widgets .widget {
-  padding: 1em;
-  font-size: .875em;
-  line-height: 1.71429; }
-  .blognav__widgets .widget > ul, .blogextra__widgets .widget > ul {
-    list-style: none;
-    padding-left: 0; }
-    .blognav__widgets .widget > ul li, .blogextra__widgets .widget > ul li {
-      list-style-image: none;
-      list-style-type: none;
-      margin-left: 0; }
-
-.blognav__widgets ul, .blogextra__widgets ul {
-  margin: 0; }
-.blognav__widgets li, .blogextra__widgets li {
-  display: block;
-  padding: .25em;
-  border-bottom: 1px solid gainsboro; }
-.blognav__widgets li ul, .blogextra__widgets li ul {
-  margin-left: -.25em; }
-.blognav__widgets li li, .blogextra__widgets li li {
-  border-top: 1px solid gainsboro; }
-.blognav__widgets li li:last-child, .blogextra__widgets li li:last-child {
-  border-bottom: none; }
-
-#q {
-  width: 75%; }
-
-.category-current {
-  margin-left: -2em;
-  background-color: black; }
-
-.category-current ul {
-  background-color: #373737; }
-
-.sidebar li:hover ul {
-  background-color: #373737; }
-
-@media screen and (min-width: 30.1em) and (max-width: 60em) {
-  .blognav__widgets .widget, .blogextra__widgets .widget {
-    width: 50%;
-    float: left; } }
-@media screen and (min-width: 60.1em) and (max-width: 80em) {
-  .blognav__widgets .widget, .blogextra__widgets .widget {
-    width: 33.33%;
-    float: left; } }
-/* *** navigation *** */
-.navlinks {
-  color: white;
-  margin: 0; }
-
-.prev {
-  text-indent: -119988px;
-  overflow: hidden;
-  text-align: left;
-  background-image: url('img/icon_prev.png?1390649129');
-  background-repeat: no-repeat;
-  background-position: 50% 50%; }
-
-.next {
-  text-indent: -119988px;
-  overflow: hidden;
-  text-align: left;
-  background-image: url('img/icon_next.png?1390649129');
-  background-repeat: no-repeat;
-  background-position: 50% 50%; }
-
-.prev, .next {
-  vertical-align: middle;
-  width: 2.5em;
-  height: 2.5em;
-  display: inline-block;
-  border-radius: 50%;
-  border: 1px solid gainsboro;
-  background-color: #f2f2f2; }
-  .prev:hover, .prev:focus, .next:hover, .next:focus {
-    border-width: 3px; }
-
-/* *** content info *** */
-#content-info {
-  margin-bottom: 4em;
-  border-bottom: 1px solid gainsboro;
-  padding: 0;
-  font-size: 0.875em; }
-  #content-info h2 {
-    display: inline-block;
-    vertical-align: top;
-    padding: .5em .75em;
-    border-radius: .5em;
-    background-color: #267daf;
-    color: white;
-    font-size: 1.1428571em;
-    text-align: center; }
-    #content-info h2 a {
-      color: white; }
-  #content-info h3 {
-    font-size: 1em; }
-  #content-info ul {
-    margin-top: 0.5714286em;
-    padding-left: 0; }
-
-.content-info__feed {
-  display: inline-block;
-  vertical-align: top;
-  list-style-type: none; }
-  .content-info__feed li {
-    display: inline;
-    margin-right: 1.5em; }
-
-.content-info__sub-cat {
-  margin-top: 2em; }
-  .content-info__sub-cat h3 {
-    font-weight: bold; }
-
-#gotop {
-  display: none;
-  z-index: 1000;
-  position: fixed;
-  bottom: 0;
-  right: .5em;
-  width: 10em;
-  padding: .25em;
-  border: 1px solid #626262;
-  border-radius: .25em;
-  background-color: white;
-  color: #333;
-  font-size: .875em;
-  text-align: center; }
-  #gotop a, #gotop a:link, #gotop a:hover, #gotop a:active {
-    background: transparent;
-    border: none;
-    font-weight: bold;
-    color: #626262; }
-
-/**
-    POST
-------------------------------- */
-.post {
-  max-width: 42em;
-  margin: 2em auto 6em; }
-
-.post-day-date {
-  font-size: 0.875em;
-  text-align: center;
-  text-transform: uppercase;
-  letter-spacing: 1px;
-  margin-bottom: 0.8571429em; }
-
-.post-meta {
-  font-size: 0.875em;
-  background-color: #f2f2f2;
-  border-radius: 0.5714286em;
-  padding: 0.5714286em 1.1428571em;
-  margin-bottom: 1.7142857em;
-  clear: both; }
-
-.post-info {
-  margin: .5em 0; }
-
-.full .post-info,
-.short .post-info,
-.post-cat,
-.post-tags-list {
-  margin: .5em 0;
-  display: inline;
-  vertical-align: top; }
-
-.post-tags-list {
-  margin: 0;
-  padding: 0;
-  border: 0;
-  overflow: hidden;
-  *zoom: 1; }
-
-.post-tags-item {
-  list-style-image: none;
-  list-style-type: none;
-  margin-left: 0;
-  display: -moz-inline-stack;
-  display: inline-block;
-  vertical-align: middle;
-  *vertical-align: auto;
-  zoom: 1;
-  *display: inline;
-  white-space: nowrap;
-  vertical-align: top; }
-  .post-tags-item a:after {
-    content: "."; }
-
-.post-info-co {
-  margin: .5em 0; }
-
-.post-title {
-  text-align: center;
-  font-weight: 200; }
-  .post-title a, .post-title a:link, .post-title a:visited {
-    border-bottom-color: white; }
-  .post-title a:hover, .post-title a:focus, .post-title a:active {
-    color: #267daf;
-    background-color: transparent; }
-  @media screen and (max-width: 40em) {
-    .post-title {
-      font-size: 2em; } }
-
-.post-content {
-  margin-bottom: 1em; }
-
-.post-read-it {
-  margin-bottom: 1.5em; }
-
-.footnotes {
-  font-size: 0.875em;
-  margin-top: 2em;
-  margin-bottom: 3em; }
-  .footnotes h4 {
-    display: inline-block;
-    border-top: 1px solid #267daf;
-    padding-right: 3em;
-    margin-bottom: 0; }
-
-.post-attachments {
-  position: relative;
-  padding: 0 2.5em .25em;
-  border: 1px solid gainsboro;
-  box-shadow: 0 2px rgba(0, 0, 0, 0.05), 0 0 1px rgba(0, 0, 0, 0.2); }
-
-.post-attachments:before {
-  content: url(img/icon_attachments.png);
-  content: url(img/icon_attachments.svg);
-  display: block;
-  position: absolute;
-  margin-top: -.33em;
-  margin-left: -2em; }
-
-.post-attachments-title {
-  padding-top: .75em;
-  font-size: 1em;
-  text-transform: uppercase;
-  font-weight: bold;
-  color: #626262; }
-
-.post-attachments-list {
-  padding-left: 1em;
-  margin-top: .5em; }
-
-.post-feedback {
-  max-width: 42em;
-  margin: 3em auto;
-  clear: both; }
-
-.post-feedback h3 {
-  text-align: center;
-  font-size: 1.25em;
-  font-weight: bold;
-  color: #626262; }
-
-.comments-list {
-  list-style: none;
-  padding-left: 0; }
-  .comments-list li {
-    list-style-image: none;
-    list-style-type: none;
-    margin-left: 0; }
-
-.comment, .ping {
-  overflow: hidden;
-  padding: .1em 1.5em .1em 4em;
-  margin-bottom: 2em;
-  border-radius: .25em;
-  box-shadow: 0 2px rgba(0, 0, 0, 0.05), 0 0 1px rgba(0, 0, 0, 0.2); }
-
-.comment {
-  background-color: #EDF3F2; }
-
-.ping {
-  background: #f3efed url(img/icon_trackbacks.png) no-repeat 1.5em 4em; }
-
-.comment-number {
-  display: block;
-  float: left;
-  width: 2.5em;
-  height: 2.5em;
-  margin-left: -3.5em;
-  margin-right: 1em;
-  margin-top: -.5em;
-  border-radius: 50%;
-  background-color: white;
-  z-index: 1000;
-  line-height: 2.5em;
-  text-align: center; }
-
-.comment-form, .send-trackback {
-  overflow: hidden;
-  padding: .75em 3em .1em;
-  margin-bottom: 2em;
-  border-radius: .25em;
-  box-shadow: 0 2px rgba(0, 0, 0, 0.05), 0 0 1px rgba(0, 0, 0, 0.2);
-  background-color: #EDF3F2; }
-
-.send-trackback {
-  background: #f3efed url(img/icon_trackbacks.png) no-repeat 1.5em 4em; }
-
-.field label {
-  display: inline-block;
-  width: 10em; }
-
-.field input {
-  max-width: 100%; }
-
-.field textarea {
-  display: block;
-  width: 100%; }
-
-.form-help, .remember {
-  font-size: 0.875em; }
-
-#pr {
-  background-color: #f2f2f2;
-  padding: .5em;
-  border: 2px solid #6c7c7c;
-  margin-bottom: 2em; }
-
-.error {
-  background-color: #d52125;
-  color: white;
-  padding: .25em .5em; }
-
-/* Button Style */
-.buttons {
-  text-align: right; }
-
-button.submit, button.preview {
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #778f96), color-stop(100%, #5d757d));
-  background-image: -webkit-linear-gradient(top, #778f96, #5d757d);
-  background-image: -moz-linear-gradient(top, #778f96, #5d757d);
-  background-image: -o-linear-gradient(top, #778f96, #5d757d);
-  background-image: linear-gradient(top, #778f96, #5d757d);
-  box-shadow: inset 0 1px 3px 0 #778f96;
-  background-color: #778f96;
-  border-radius: .25em;
-  border: 1px solid #5d757d;
-  display: inline-block;
-  cursor: pointer;
-  color: white;
-  padding: .25em .5em;
-  text-decoration: none;
-  text-shadow: 0 -1px 0 #626262; }
-
-button.submit:hover,
-button.submit:focus,
-button.preview:hover,
-button.preview:focus {
-  cursor: pointer;
-  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5d757d), color-stop(100%, #5d757d));
-  background-image: -webkit-linear-gradient(#5d757d, #5d757d);
-  background-image: -moz-linear-gradient(#5d757d, #5d757d);
-  background-image: -o-linear-gradient(#5d757d, #5d757d);
-  background-image: linear-gradient(#5d757d, #5d757d);
-  background-color: #5d757d; }
-
-button.submit:active, button.preview:active {
-  position: relative;
-  top: 1px; }
-
-@media all and (max-width: 30em) {
-  .comment-number {
-    margin-top: 0; }
-
-  .comment-content, .ping-content {
-    margin-left: -3.5em;
-    margin-right: -1em; }
-
-  .comment-form, .send-trackback {
-    padding: .75em .5em .1em; } }
-@media all and (min-width: 30.1em) {
-  .post-day-date:after,
-  .post-day-date:before {
-    display: inline-block;
-    height: 1px;
-    content: " ";
-    background-color: gainsboro;
-    text-shadow: none;
-    width: 20%;
-    margin-bottom: .33em; }
-
-  .post-day-date:after {
-    margin-left: 2em; }
-
-  .post-day-date:before {
-    margin-right: 2em; }
-
-  .post-feedback h3:after,
-  .post-feedback h3:before {
-    display: inline-block;
-    height: 1px;
-    content: " ";
-    background-color: gainsboro;
-    text-shadow: none;
-    width: 20%;
-    margin-bottom: .33em; }
-
-  .post-feedback h3:after {
-    margin-left: 2em; }
-
-  .post-feedback h3:before {
-    margin-right: 2em; } }
-@media all and (max-width: 40em) {
-  .post {
-    margin: 1em auto 3em; } }
-/* ---------------------------------------------------------------- archives */
-/* general */
-@media all and (min-width: 30em) {
-  .dc-archive .content-inner {
-    margin-left: 3em;
-    margin-right: 3em; } }
-
-.arch-block {
-  display: inline-block;
-  margin: 0 0 2em 0;
-  vertical-align: top; }
-  .arch-block a {
-    color: #373737; }
-  @media all and (min-width: 30em) {
-    .arch-block {
-      margin-left: 4em; } }
-
-.arch-block:first-child {
-  margin-left: 0; }
-
-.arch-block h3 {
-  margin-bottom: 1em;
-  font-size: 1.2em;
-  font-style: italic;
-  font-weight: normal;
-  text-transform: lowercase;
-  color: #267daf; }
-
-.arch-block h4 {
-  font-weight: bold;
-  font-size: 1.1em;
-  margin-bottom: 0;
-  margin-top: 0;
-  color: #373737; }
-
-.arch-list, .arch-sub-list {
-  list-style-type: none;
-  margin: 0;
-  padding: 0; }
-
-.arch-sub-list {
-  margin-left: 20px; }
-
-/* par date */
-.arch-by-year {
-  margin-right: 0;
-  margin-bottom: 1em;
-  margin-top: 2em; }
-
-.arch-by-year h3 {
-  margin-bottom: 0; }
-
-.arch-by-year h3:first-child {
-  margin-top: 0; }
-
-.fromto {
-  margin-top: 0;
-  margin-bottom: 1.5em;
-  font-size: .875em;
-  font-style: italic; }
-
-.arch-by-year__each-year {
-  display: inline-block;
-  vertical-align: top;
-  margin: 0;
-  width: 10em; }
-
-.arch-year-list {
-  margin-bottom: 1.5em; }
-
-.arch-year-list span {
-  font-size: .875em; }
-
-/* par categorie */
-.arch-cat-list, .arch-sub-cat-list {
-  background: transparent url(img/vline.png) repeat-y; }
-
-.arch-sub-cat-list {
-  margin: .5em 0 0 .5em; }
-
-.arch-cat-list li {
-  padding: .2em .2em .2em 20px;
-  background: transparent url(img/hline.png) no-repeat left 0.82em; }
-
-.arch-cat-list li:last-child {
-  background-image: url(img/last-hline.png); }
-
-/* par tag */
-.arch-by-tag {
-  width: 17em; }
-
-.arch-tag-list li {
-  display: inline;
-  padding-right: 1em; }
-
-.arch-tag-list .tag0 {
-  color: #909090;
-  font-size: 90%; }
-
-.arch-tag-list .tag10 {
-  color: #828282;
-  font-size: 92%; }
-
-.arch-tag-list .tag20 {
-  color: #737373;
-  font-size: 94%; }
-
-.arch-tag-list .tag30 {
-  color: #656565;
-  font-size: 96%; }
-
-.arch-tag-list .tag40 {
-  color: #484848;
-  font-size: 98%; }
-
-.arch-tag-list .tag50 {
-  color: #3A3A3A;
-  font-size: 100%; }
-
-.arch-tag-list .tag60 {
-  color: #2B2B2B;
-  font-size: 102%; }
-
-.arch-tag-list .tag70 {
-  color: #1D1D1D;
-  font-size: 104%; }
-
-.arch-tag-list .tag80 {
-  color: #0E0E0E;
-  font-size: 106%; }
-
-.arch-tag-list .tag90 {
-  color: #030303;
-  font-size: 108%; }
-
-.arch-tag-list .tag100 {
-  color: #000;
-  font-size: 110%; }
-
-/* archives par mois */
-.dc-archive-month #content-info h2 {
-  margin-left: 2em;
-  margin-top: .5em; }
-
-/** --------------------------------------------------
-    Modules
---------------------------------------------------- */
-/* *** MODULE sidebar off-canvas *** */
-#offcanvas-on {
-  display: none; }
-
-.sidebar, #main {
-  -webkit-transition: 0.3s all linear;
-  -moz-transition: 0.3s all linear;
-  -o-transition: 0.3s all linear;
-  transition: 0.3s all linear; }
-
-.js #content-info h2,
-.js .content-info__feed {
-  margin-right: 3.5em; }
-
-@media screen and (max-width: 80em) {
-  #offcanvas-on,
-  #offcanvas-off {
-    position: absolute;
-    top: .5em;
-    right: .5em;
-    height: 2.5em;
-    width: 2.5em;
-    background-repeat: no-repeat;
-    background-position: 50% 50%;
-    border: none;
-    padding: 0; }
-
-  #offcanvas-on:hover,
-  #offcanvas-on:focus,
-  #offcanvas-off:hover,
-  #offcanvas-off:focus {
-    background-color: #373737; }
-
-  #offcanvas-on {
-    display: block;
-    background-color: white;
-    background-image: url(img/icon_open-sidebar.png);
-    background-image: url(img/icon_open-sidebar.svg), none;
-    border: 0.1em solid #626262;
-    border-radius: .25em; }
-
-  #offcanvas-off {
-    background-color: #373737;
-    background-image: url(img/icon_close.png);
-    background-image: url(img/icon_close.svg), none;
-    border: 1px solid white; }
-
-  #wrapper {
-    position: relative; }
-
-  .off-canvas #main, .footer.off-canvas {
-    float: left;
-    margin-left: -66.6666667%; }
-
-  .off-canvas .sidebar {
-    position: relative;
-    float: right;
-    width: 91.6666667%;
-    margin-right: 0%;
-    margin-left: -100%;
-    *margin-left: -99.9%;
-    padding-left: 1em;
-    padding-right: 1em;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    -ms-box-sizing: border-box;
-    box-sizing: border-box;
-    word-wrap: break-word;
-    *behavior: url("scripts");
-    _display: inline;
-    _overflow: hidden;
-    _overflow-y: visible; } }
-/*** dev only ***/
Index: hemes/berlin/tpl/user_footer.html
===================================================================
--- themes/berlin/tpl/user_footer.html	(revision 2673)
+++ 	(revision )
@@ -1,44 +1,0 @@
-
-<script type="text/javascript">
-        $("html").addClass("js");
-        // Show/Hide main menu
-        $(".header__nav").
-        before('<button id="hamburger" type="button" role="button"><span class="visually-hidden">Navigation</span></button>').
-        toggle();
-        $("#hamburger").click(function(){
-                $(this).toggleClass("open");
-                $(".header__nav").toggle('easing');
-        });
-        // Show/Hide sidebar on small screens
-        $("#main").prepend('<button id="offcanvas-on" type="button" role="button"><span class="visually-hidden">Show menu</span></button>');
-        $("#offcanvas-on").click(function(){
-            var btn = $('<button id="offcanvas-off" type="button" role="button"><span class="visually-hidden">Hide menu</span></button>');
-            $("#wrapper").addClass("off-canvas");
-            $("#footer").addClass("off-canvas");
-            $("#sidebar").prepend(btn);
-            btn.click(function(evt){
-                $("#wrapper").removeClass("off-canvas");
-                $("#footer").removeClass("off-canvas");
-                evt.target.remove();
-            });
-        });
-        $(document).ready(function(){
-        // totop scroll
-        $(window).scroll(function() {
-                if($(this).scrollTop() != 0) {
-                    $('#gotop').fadeIn();
-                } else {
-                    $('#gotop').fadeOut();
-                }
-            });
-
-            $('#gotop').click(function() {
-                $('body,html').animate({scrollTop:0},800);
-            });
-});
-</script>
-<!--
-Todo:
-Off-canvas
-    Passer les chaînes de caractères en variables pour les traductions.
--->
Index: themes/default/js/post.js
===================================================================
--- themes/default/js/post.js	(revision 2633)
+++ themes/default/js/post.js	(revision 2566)
@@ -1,4 +1,4 @@
 $(function() {
-	$('#comment-form p:has(input[type=submit][name=preview],button[type=submit][name=preview])').
+	$('#comment-form p:has(input[type=submit][name=preview])').
 		before(
 			'<p class="remember"><input type="checkbox" id="c_remember" name="c_remember" /> ' +
Index: themes/ductile/_config.php
===================================================================
--- themes/ductile/_config.php	(revision 2658)
+++ themes/ductile/_config.php	(revision 2566)
@@ -78,4 +78,16 @@
 );
 
+function adjustFontSize($s)
+{
+	if (preg_match('/^([0-9.]+)\s*(%|pt|px|em|ex)?$/',$s,$m)) {
+		if (empty($m[2])) {
+			$m[2] = 'em';
+		}
+		return $m[1].$m[2];
+	}
+
+	return null;
+}
+
 $font_families = array(
 	// Theme standard
@@ -105,4 +117,115 @@
 
 	return isset($font_families[$c]) ? '<span style="position:absolute;top:0;left:32em;">'.$font_families[$c].'</span>' : '';
+}
+
+function adjustColor($c)
+{
+	if ($c === '') {
+		return '';
+	}
+
+	$c = strtoupper($c);
+
+	if (preg_match('/^[A-F0-9]{3,6}$/',$c)) {
+		$c = '#'.$c;
+	}
+
+	if (preg_match('/^#[A-F0-9]{6}$/',$c)) {
+		return $c;
+	}
+
+	if (preg_match('/^#[A-F0-9]{3,}$/',$c)) {
+		return '#'.substr($c,1,1).substr($c,1,1).substr($c,2,1).substr($c,2,1).substr($c,3,1).substr($c,3,1);
+	}
+
+	return '';
+}
+
+function computeContrastRatio($color,$background)
+{
+	// Compute contrast ratio between two colors
+
+	$color = adjustColor($color);
+	if (($color == '') || (strlen($color) != 7)) return 0;
+	$background = adjustColor($background);
+	if (($background == '') || (strlen($background) != 7)) return 0;
+
+	$l1 = (0.2126 * pow(hexdec(substr($color,1,2))/255,2.2)) +
+		(0.7152 * pow(hexdec(substr($color,3,2))/255,2.2)) +
+		(0.0722 * pow(hexdec(substr($color,5,2))/255,2.2));
+
+	$l2 = (0.2126 * pow(hexdec(substr($background,1,2))/255,2.2)) +
+	 	(0.7152 * pow(hexdec(substr($background,3,2))/255,2.2)) +
+		(0.0722 * pow(hexdec(substr($background,5,2))/255,2.2));
+
+	if ($l1 > $l2) {
+		$ratio = ($l1 + 0.05) / ($l2 + 0.05);
+	} else {
+		$ratio = ($l2 + 0.05) / ($l1 + 0.05);
+	}
+	return $ratio;
+}
+
+function contrastRatioLevel($ratio,$size,$bold)
+{
+	if ($size == '') {
+		return '';
+	}
+
+	// Eval font size in em (assume base font size in pixels equal to 16)
+	if (preg_match('/^([0-9.]+)\s*(%|pt|px|em|ex)?$/',$size,$m)) {
+		if (empty($m[2])) {
+			$m[2] = 'em';
+		}
+	} else {
+		return '';
+	}
+	switch ($m[2]) {
+		case '%':
+			$s = (float) $m[1] / 100;
+			break;
+		case 'pt':
+			$s = (float) $m[1] / 12;
+			break;
+		case 'px':
+			$s = (float) $m[1] / 16;
+			break;
+		case 'em':
+			$s = (float) $m[1];
+			break;
+		case 'ex':
+			$s = (float) $m[1] / 2;
+			break;
+		default:
+			return '';
+	}
+
+	$large = ((($s > 1.5) && ($bold == false)) || (($s > 1.2) && ($bold == true)));
+
+	// Check ratio
+	if ($ratio > 7) {
+		return 'AAA';
+	} elseif (($ratio > 4.5) && $large) {
+		return 'AAA';
+	} elseif ($ratio > 4.5) {
+		return 'AA';
+	} elseif (($ratio > 3) && $large) {
+		return 'AA';
+	}
+	return '';
+}
+
+function contrastRatio($color,$background,$size='',$bold=false)
+{
+	if (($color != '') && ($background != '')) {
+		$ratio = computeContrastRatio($color,$background);
+		$level = contrastRatioLevel($ratio,$size,$bold);
+		return
+			'<span style="position:absolute;top:0;left:23em;">'.
+			sprintf(__('ratio %.1f'),$ratio).
+			($level != '' ? ' '.sprintf(__('(%s)'),$level) : '').
+			'</span>';
+	}
+	return '';
 }
 
@@ -150,5 +273,4 @@
 $ductile_counts_base = array(
 	'default' => null,
-	'default-page' => null,
 	'category' => null,
 	'tag' => null,
@@ -168,5 +290,4 @@
 	$ductile_lists = $ductile_lists_base;
 }
-$ductile_lists = array_merge($ductile_lists_base,$ductile_lists);
 
 $ductile_counts = $core->blog->settings->themes->get($core->blog->settings->system->theme.'_entries_counts');
@@ -175,5 +296,4 @@
 	$ductile_counts = $ductile_counts_base;
 }
-$ductile_counts = array_merge($ductile_counts_base,$ductile_counts);
 
 $ductile_stickers = $core->blog->settings->themes->get($core->blog->settings->system->theme.'_stickers');
@@ -275,24 +395,24 @@
 
 			$ductile_user['blog_title_w'] = (integer) !empty($_POST['blog_title_w']);
-			$ductile_user['blog_title_s'] = dcThemeConfig::adjustFontSize($_POST['blog_title_s']);
-			$ductile_user['blog_title_c'] = dcThemeConfig::adjustColor($_POST['blog_title_c']);
+			$ductile_user['blog_title_s'] = adjustFontSize($_POST['blog_title_s']);
+			$ductile_user['blog_title_c'] = adjustColor($_POST['blog_title_c']);
 
 			$ductile_user['post_title_w'] = (integer) !empty($_POST['post_title_w']);
-			$ductile_user['post_title_s'] = dcThemeConfig::adjustFontSize($_POST['post_title_s']);
-			$ductile_user['post_title_c'] = dcThemeConfig::adjustColor($_POST['post_title_c']);
+			$ductile_user['post_title_s'] = adjustFontSize($_POST['post_title_s']);
+			$ductile_user['post_title_c'] = adjustColor($_POST['post_title_c']);
 
 			$ductile_user['post_link_w'] = (integer) !empty($_POST['post_link_w']);
-			$ductile_user['post_link_v_c'] = dcThemeConfig::adjustColor($_POST['post_link_v_c']);
-			$ductile_user['post_link_f_c'] = dcThemeConfig::adjustColor($_POST['post_link_f_c']);
-
-			$ductile_user['post_simple_title_c'] = dcThemeConfig::adjustColor($_POST['post_simple_title_c']);
+			$ductile_user['post_link_v_c'] = adjustColor($_POST['post_link_v_c']);
+			$ductile_user['post_link_f_c'] = adjustColor($_POST['post_link_f_c']);
+
+			$ductile_user['post_simple_title_c'] = adjustColor($_POST['post_simple_title_c']);
 
 			$ductile_user['blog_title_w_m'] = (integer) !empty($_POST['blog_title_w_m']);
-			$ductile_user['blog_title_s_m'] = dcThemeConfig::adjustFontSize($_POST['blog_title_s_m']);
-			$ductile_user['blog_title_c_m'] = dcThemeConfig::adjustColor($_POST['blog_title_c_m']);
+			$ductile_user['blog_title_s_m'] = adjustFontSize($_POST['blog_title_s_m']);
+			$ductile_user['blog_title_c_m'] = adjustColor($_POST['blog_title_c_m']);
 
 			$ductile_user['post_title_w_m'] = (integer) !empty($_POST['post_title_w_m']);
-			$ductile_user['post_title_s_m'] = dcThemeConfig::adjustFontSize($_POST['post_title_s_m']);
-			$ductile_user['post_title_c_m'] = dcThemeConfig::adjustColor($_POST['post_title_c_m']);
+			$ductile_user['post_title_s_m'] = adjustFontSize($_POST['post_title_s_m']);
+			$ductile_user['post_title_c_m'] = adjustColor($_POST['post_title_c_m']);
 		}
 
@@ -460,5 +580,5 @@
 '<p class="field picker"><label for="blog_title_c">'.__('Color:').'</label> '.
 form::field('blog_title_c',7,7,$ductile_user['blog_title_c'],'colorpicker').
-dcThemeConfig::contrastRatio($ductile_user['blog_title_c'],'#ffffff',
+contrastRatio($ductile_user['blog_title_c'],'#ffffff',
 	(!empty($ductile_user['blog_title_s']) ? $ductile_user['blog_title_s'] : '2em'),
 	$ductile_user['blog_title_w']).
@@ -477,5 +597,5 @@
 '<p class="field picker"><label for="post_title_c">'.__('Color:').'</label> '.
 form::field('post_title_c',7,7,$ductile_user['post_title_c'],'colorpicker').
-dcThemeConfig::contrastRatio($ductile_user['post_title_c'],'#ffffff',
+contrastRatio($ductile_user['post_title_c'],'#ffffff',
 	(!empty($ductile_user['post_title_s']) ? $ductile_user['post_title_s'] : '2.5em'),
 	$ductile_user['post_title_w']).
@@ -489,5 +609,5 @@
 '<p class="field picker"><label for="post_simple_title_c">'.__('Color:').'</label> '.
 form::field('post_simple_title_c',7,7,$ductile_user['post_simple_title_c'],'colorpicker').
-dcThemeConfig::contrastRatio($ductile_user['post_simple_title_c'],'#ffffff',
+contrastRatio($ductile_user['post_simple_title_c'],'#ffffff',
 	'1.1em',	// H5 minimum size
 	false).
@@ -500,5 +620,5 @@
 '<p class="field picker"><label for="post_link_v_c">'.__('Normal and visited links color:').'</label> '.
 form::field('post_link_v_c',7,7,$ductile_user['post_link_v_c'],'colorpicker').
-dcThemeConfig::contrastRatio($ductile_user['post_link_v_c'],'#ffffff',
+contrastRatio($ductile_user['post_link_v_c'],'#ffffff',
 	'1em',
 	$ductile_user['post_link_w']).
@@ -507,5 +627,5 @@
 '<p class="field picker"><label for="post_link_f_c">'.__('Active, hover and focus links color:').'</label> '.
 form::field('post_link_f_c',7,7,$ductile_user['post_link_f_c'],'colorpicker').
-dcThemeConfig::contrastRatio($ductile_user['post_link_f_c'],'#ebebee',
+contrastRatio($ductile_user['post_link_f_c'],'#ebebee',
 	'1em',
 	$ductile_user['post_link_w']).
@@ -526,5 +646,5 @@
 '<p class="field picker"><label for="blog_title_c_m">'.__('Color:').'</label> '.
 form::field('blog_title_c_m',7,7,$ductile_user['blog_title_c_m'],'colorpicker').
-dcThemeConfig::contrastRatio($ductile_user['blog_title_c_m'],'#d7d7dc',
+contrastRatio($ductile_user['blog_title_c_m'],'#d7d7dc',
 	(!empty($ductile_user['blog_title_s_m']) ? $ductile_user['blog_title_s_m'] : '1.8em'),
 	$ductile_user['blog_title_w_m']).
@@ -543,5 +663,5 @@
 '<p class="field picker"><label for="post_title_c_m">'.__('Color:').'</label> '.
 form::field('post_title_c_m',7,7,$ductile_user['post_title_c_m'],'colorpicker').
-dcThemeConfig::contrastRatio($ductile_user['post_title_c_m'],'#ffffff',
+contrastRatio($ductile_user['post_title_c_m'],'#ffffff',
 	(!empty($ductile_user['post_title_s_m']) ? $ductile_user['post_title_s_m'] : '1.5em'),
 	$ductile_user['post_title_w_m']).
Index: themes/ductile/_define.php
===================================================================
--- themes/ductile/_define.php	(revision 2581)
+++ themes/ductile/_define.php	(revision 2566)
@@ -15,5 +15,5 @@
 	/* Description*/		"Mediaqueries compliant elegant theme",
 	/* Author */			"Dotclear Team",
-	/* Version */			'1.4',
+	/* Version */			'1.3.1',
 	/* Properties */		array(
 								'standalone_config' => true,
Index: themes/ductile/_prepend.php
===================================================================
--- themes/ductile/_prepend.php	(revision 2567)
+++ themes/ductile/_prepend.php	(revision 2566)
@@ -26,6 +26,5 @@
 		if (!$core->auth->user_prefs->accessibility->nodragdrop) {
 			echo
-				dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
-				dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js');
+				dcPage::jsLoad('js/jquery/jquery-ui.custom.js');
 				echo <<<EOT
 <script type="text/javascript">
Index: themes/ductile/_public.php
===================================================================
--- themes/ductile/_public.php	(revision 2716)
+++ themes/ductile/_public.php	(revision 2566)
@@ -36,43 +36,30 @@
 		global $_ctx;
 
-		$nb_other = $nb_first = 0;
-
+		$nb = 0;
 		$s = $GLOBALS['core']->blog->settings->themes->get($GLOBALS['core']->blog->settings->system->theme.'_entries_counts');
 		if ($s !== null) {
 			$s = @unserialize($s);
 			if (is_array($s)) {
-				switch ($GLOBALS['core']->url->type) {
-					case 'default':
-					case 'default-page':
-						if (isset($s['default'])) {
-							$nb_first = $nb_other = (integer) $s['default'];
-						}
-						if (isset($s['default-page'])) {
-							$nb_other = (integer) $s['default-page'];
-						}
-						break;
-					default:
-						if (isset($s[$GLOBALS['core']->url->type])) {
-							// Nb de billets par page défini par la config du thème
-							$nb_first = $nb_other = (integer) $s[$GLOBALS['core']->url->type];
-						}
-						break;
-				}
-			}
-		}
-
-		if ($nb_other == 0) {
+				if (isset($s[$GLOBALS['core']->url->type])) {
+					// Nb de billets par page défini par la config du thème
+					$nb = (integer) $s[$GLOBALS['core']->url->type];
+				} else {
+					if (($GLOBALS['core']->url->type == 'default-page') && (isset($s['default']))) {
+						// Les pages 2 et suivantes de la home ont le même nombre de billet que la première page
+						$nb = (integer) $s['default'];
+					}
+				}
+			}
+		}
+
+		if ($nb == 0) {
 			if (!empty($attr['nb'])) {
 				// Nb de billets par page défini par défaut dans le template
-				$nb_other = $nb_first = (integer) $attr['nb'];
-			}
-		}
-
-		if ($nb_other > 0) {
-			$_ctx->nb_entry_per_page = $nb_other;
-		}
-		if ($nb_first > 0) {
-			$_ctx->nb_entry_first_page = $nb_first;
-		}
+				$nb = (integer) $attr['nb'];
+			}
+		}
+
+		if ($nb > 0)
+			$_ctx->nb_entry_per_page = $nb;
 	}
 
@@ -164,17 +151,14 @@
 	public static function ductileLogoSrcHelper()
 	{
-		$img_url = $GLOBALS['core']->blog->settings->system->themes_url.'/'.$GLOBALS['core']->blog->settings->system->theme.'/img/logo.png';
-
 		$s = $GLOBALS['core']->blog->settings->themes->get($GLOBALS['core']->blog->settings->system->theme.'_style');
 		if ($s === null) {
-			// no settings yet, return default logo
-			return $img_url;
+			return;
 		}
 		$s = @unserialize($s);
 		if (!is_array($s)) {
-			// settings error, return default logo
-			return $img_url;
-		}
-
+			return;
+		}
+
+		$img_url = $GLOBALS['core']->blog->settings->system->themes_url.'/'.$GLOBALS['core']->blog->settings->system->theme.'/img/logo.png';
 		if (isset($s['logo_src'])) {
 			if ($s['logo_src'] !== null) {
@@ -317,5 +301,5 @@
 				# Main font
 				$selectors = 'body, .supranav li a span, #comments.me, a.comment-number';
-				dcThemeConfig::prop($css,$selectors,'font-family',$s['body_webfont_family']);
+				self::prop($css,$selectors,'font-family',$s['body_webfont_family']);
 			}
 		}
@@ -335,5 +319,5 @@
 				# Secondary font
 				$selectors = '#blogdesc, .supranav, #content-info, #subcategories, #comments-feed, #sidebar h2, #sidebar h3, #footer';
-				dcThemeConfig::prop($css,$selectors,'font-family',$s['alternate_webfont_family']);
+				self::prop($css,$selectors,'font-family',$s['alternate_webfont_family']);
 			}
 		}
@@ -373,25 +357,25 @@
 		# Blog description
 		$selectors = '#blogdesc';
-		if (isset($s['subtitle_hidden'])) dcThemeConfig::prop($css,$selectors,'display',($s['subtitle_hidden'] ? 'none' : null));
+		if (isset($s['subtitle_hidden'])) self::prop($css,$selectors,'display',($s['subtitle_hidden'] ? 'none' : null));
 
 		# Main font
 		$selectors = 'body, .supranav li a span, #comments.me, a.comment-number';
-		if (isset($s['body_font'])) dcThemeConfig::prop($css,$selectors,'font-family',self::fontDef($s['body_font']));
+		if (isset($s['body_font'])) self::prop($css,$selectors,'font-family',self::fontDef($s['body_font']));
 
 		# Secondary font
 		$selectors = '#blogdesc, .supranav, #content-info, #subcategories, #comments-feed, #sidebar h2, #sidebar h3, #footer';
-		if (isset($s['alternate_font'])) dcThemeConfig::prop($css,$selectors,'font-family',self::fontDef($s['alternate_font']));
+		if (isset($s['alternate_font'])) self::prop($css,$selectors,'font-family',self::fontDef($s['alternate_font']));
 
 		# Inside posts links font weight
 		$selectors = '.post-excerpt a, .post-content a';
-		if (isset($s['post_link_w'])) dcThemeConfig::prop($css,$selectors,'font-weight',($s['post_link_w'] ? 'bold' : 'normal'));
+		if (isset($s['post_link_w'])) self::prop($css,$selectors,'font-weight',($s['post_link_w'] ? 'bold' : 'normal'));
 
 		# Inside posts links colors (normal, visited)
 		$selectors = '.post-excerpt a:link, .post-excerpt a:visited, .post-content a:link, .post-content a:visited';
-		if (isset($s['post_link_v_c'])) dcThemeConfig::prop($css,$selectors,'color',$s['post_link_v_c']);
+		if (isset($s['post_link_v_c'])) self::prop($css,$selectors,'color',$s['post_link_v_c']);
 
 		# Inside posts links colors (hover, active, focus)
 		$selectors = '.post-excerpt a:hover, .post-excerpt a:active, .post-excerpt a:focus, .post-content a:hover, .post-content a:active, .post-content a:focus';
-		if (isset($s['post_link_f_c'])) dcThemeConfig::prop($css,$selectors,'color',$s['post_link_f_c']);
+		if (isset($s['post_link_f_c'])) self::prop($css,$selectors,'color',$s['post_link_f_c']);
 
 		# Style directives
@@ -410,29 +394,29 @@
 		# Blog title font weight
 		$selectors = 'h1, h1 a:link, h1 a:visited, h1 a:hover, h1 a:visited, h1 a:focus';
-		if (isset($s['blog_title_w'])) dcThemeConfig::prop($css_large,$selectors,'font-weight',($s['blog_title_w'] ? 'bold' : 'normal'));
+		if (isset($s['blog_title_w'])) self::prop($css_large,$selectors,'font-weight',($s['blog_title_w'] ? 'bold' : 'normal'));
 
 		# Blog title font size
 		$selectors = 'h1';
-		if (isset($s['blog_title_s'])) dcThemeConfig::prop($css_large,$selectors,'font-size',$s['blog_title_s']);
+		if (isset($s['blog_title_s'])) self::prop($css_large,$selectors,'font-size',$s['blog_title_s']);
 
 		# Blog title color
 		$selectors = 'h1 a:link, h1 a:visited, h1 a:hover, h1 a:visited, h1 a:focus';
-		if (isset($s['blog_title_c'])) dcThemeConfig::prop($css_large,$selectors,'color',$s['blog_title_c']);
+		if (isset($s['blog_title_c'])) self::prop($css_large,$selectors,'color',$s['blog_title_c']);
 
 		# Post title font weight
 		$selectors = 'h2.post-title, h2.post-title a:link, h2.post-title a:visited, h2.post-title a:hover, h2.post-title a:visited, h2.post-title a:focus';
-		if (isset($s['post_title_w'])) dcThemeConfig::prop($css_large,$selectors,'font-weight',($s['post_title_w'] ? 'bold' : 'normal'));
+		if (isset($s['post_title_w'])) self::prop($css_large,$selectors,'font-weight',($s['post_title_w'] ? 'bold' : 'normal'));
 
 		# Post title font size
 		$selectors = 'h2.post-title';
-		if (isset($s['post_title_s'])) dcThemeConfig::prop($css_large,$selectors,'font-size',$s['post_title_s']);
+		if (isset($s['post_title_s'])) self::prop($css_large,$selectors,'font-size',$s['post_title_s']);
 
 		# Post title color
 		$selectors = 'h2.post-title a:link, h2.post-title a:visited, h2.post-title a:hover, h2.post-title a:visited, h2.post-title a:focus';
-		if (isset($s['post_title_c'])) dcThemeConfig::prop($css_large,$selectors,'color',$s['post_title_c']);
+		if (isset($s['post_title_c'])) self::prop($css_large,$selectors,'color',$s['post_title_c']);
 
 		# Simple title color (title without link)
 		$selectors = '#content-info h2, .post-title, .post h3, .post h4, .post h5, .post h6, .arch-block h3';
-		if (isset($s['post_simple_title_c'])) dcThemeConfig::prop($css_large,$selectors,'color',$s['post_simple_title_c']);
+		if (isset($s['post_simple_title_c'])) self::prop($css_large,$selectors,'color',$s['post_simple_title_c']);
 
 		# Style directives for large screens
@@ -454,25 +438,25 @@
 		# Blog title font weight
 		$selectors = 'h1, h1 a:link, h1 a:visited, h1 a:hover, h1 a:visited, h1 a:focus';
-		if (isset($s['blog_title_w_m'])) dcThemeConfig::prop($css_small,$selectors,'font-weight',($s['blog_title_w_m'] ? 'bold' : 'normal'));
+		if (isset($s['blog_title_w_m'])) self::prop($css_small,$selectors,'font-weight',($s['blog_title_w_m'] ? 'bold' : 'normal'));
 
 		# Blog title font size
 		$selectors = 'h1';
-		if (isset($s['blog_title_s_m'])) dcThemeConfig::prop($css_small,$selectors,'font-size',$s['blog_title_s_m']);
+		if (isset($s['blog_title_s_m'])) self::prop($css_small,$selectors,'font-size',$s['blog_title_s_m']);
 
 		# Blog title color
 		$selectors = 'h1 a:link, h1 a:visited, h1 a:hover, h1 a:visited, h1 a:focus';
-		if (isset($s['blog_title_c_m'])) dcThemeConfig::prop($css_small,$selectors,'color',$s['blog_title_c_m']);
+		if (isset($s['blog_title_c_m'])) self::prop($css_small,$selectors,'color',$s['blog_title_c_m']);
 
 		# Post title font weight
 		$selectors = 'h2.post-title, h2.post-title a:link, h2.post-title a:visited, h2.post-title a:hover, h2.post-title a:visited, h2.post-title a:focus';
-		if (isset($s['post_title_w_m'])) dcThemeConfig::prop($css_small,$selectors,'font-weight',($s['post_title_w_m'] ? 'bold' : 'normal'));
+		if (isset($s['post_title_w_m'])) self::prop($css_small,$selectors,'font-weight',($s['post_title_w_m'] ? 'bold' : 'normal'));
 
 		# Post title font size
 		$selectors = 'h2.post-title';
-		if (isset($s['post_title_s_m'])) dcThemeConfig::prop($css_small,$selectors,'font-size',$s['post_title_s_m']);
+		if (isset($s['post_title_s_m'])) self::prop($css_small,$selectors,'font-size',$s['post_title_s_m']);
 
 		# Post title color
 		$selectors = 'h2.post-title a:link, h2.post-title a:visited, h2.post-title a:hover, h2.post-title a:visited, h2.post-title a:focus';
-		if (isset($s['post_title_c_m'])) dcThemeConfig::prop($css_small,$selectors,'color',$s['post_title_c_m']);
+		if (isset($s['post_title_c_m'])) self::prop($css_small,$selectors,'color',$s['post_title_c_m']);
 
 		# Style directives for small screens
@@ -518,3 +502,10 @@
 		return isset(self::$fonts[$c]) ? self::$fonts[$c] : null;
 	}
+
+	protected static function prop(&$css,$selector,$prop,$value)
+	{
+		if ($value) {
+			$css[$selector][$prop] = $value;
+		}
+	}
 }
