diff --git a/.gitattributes b/.gitattributes
index 3028201cdcbde5fa9d10cd47ff4bbd2e590ceb9f..edc05b2fdb456b1974c55f366b6ac119e114e889 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -61,11 +61,24 @@ ecrire/img_pack/aide_rtl.gif -text
 ecrire/img_pack/article-24.gif -text
 ecrire/img_pack/asuivre-24.gif -text
 ecrire/img_pack/asuivre-48.gif -text
+ecrire/img_pack/barre-a-grave.png -text
 ecrire/img_pack/barre-blanc.gif -text
+ecrire/img_pack/barre-bold.png -text
 ecrire/img_pack/barre-couleurs.gif -text
 ecrire/img_pack/barre-d.gif -text
+ecrire/img_pack/barre-e-aigu.png -text
+ecrire/img_pack/barre-euro.png -text
 ecrire/img_pack/barre-g.gif -text
+ecrire/img_pack/barre-guillemets.png -text
+ecrire/img_pack/barre-intertitre.png -text
+ecrire/img_pack/barre-italic.png -text
+ecrire/img_pack/barre-lien.png -text
 ecrire/img_pack/barre-noir.gif -text
+ecrire/img_pack/barre-note.png -text
+ecrire/img_pack/barre-oe-maj.png -text
+ecrire/img_pack/barre-oe.png -text
+ecrire/img_pack/barre-quote.png -text
+ecrire/img_pack/barre-wikipedia.png -text
 ecrire/img_pack/base-24.gif -text
 ecrire/img_pack/breve-24.gif -text
 ecrire/img_pack/cache-24.gif -text
diff --git a/ecrire/articles_edit.php3 b/ecrire/articles_edit.php3
index 8c4ed754805f8061662b77ba1df84db2e651bbc5..8c5ad5e86c7ac9069f5d4ae476890c22074a8ed9 100644
--- a/ecrire/articles_edit.php3
+++ b/ecrire/articles_edit.php3
@@ -2,6 +2,7 @@
 
 include ("inc.php3");
 include_ecrire ("inc_documents.php3");
+include_ecrire ("inc_barre.php3");
 
 $articles_surtitre = lire_meta("articles_surtitre");
 $articles_soustitre = lire_meta("articles_soustitre");
@@ -284,7 +285,7 @@ echo "<P><HR><P>";
 
 	$lien = 'articles.php3';
 	if ($id_article) $lien .= "?id_article=$id_article";
-	echo "<FORM ACTION='$lien' METHOD='post'>\n";
+	echo "<FORM ACTION='$lien' METHOD='post' name='formulaire'>\n";
 
 	if ($id_article)
 		echo "<INPUT TYPE='Hidden' NAME='id_article' VALUE='$id_article'>";
@@ -407,8 +408,10 @@ echo "<P><HR><P>";
 			$nombre_textes ++;
 			list($texte1,$texte) = coupe_trop_long($texte);
 
-			$textes_supplement .= "<BR><TEXTAREA NAME='texte$nombre_textes'".
-				" CLASS='formo' ROWS='$rows' COLS='40' wrap=soft>" .
+			$textes_supplement .= "<BR>";
+			$textes_supplement .= afficher_barre('formulaire', 'texte'.$nombre_textes);
+			$textes_supplement .= "<TEXTAREA NAME='texte$nombre_textes'".
+				" CLASS='formo' ".afficher_claret()." ROWS='$rows' COLS='40' wrap=soft>" .
 				$texte1 . "</TEXTAREA><P>\n";
 		}
 	}
@@ -419,7 +422,9 @@ echo "<P><HR><P>";
 
 	echo $textes_supplement;
 
-	echo "<BR><TEXTAREA NAME='texte' CLASS='formo' ROWS='$rows' COLS='40' wrap=soft>";
+	echo "<BR>";
+	echo afficher_barre('formulaire', 'texte');
+	echo "<TEXTAREA NAME='texte' ".afficher_claret()." CLASS='formo' ROWS='$rows' COLS='40' wrap=soft>";
 	echo $texte;
 	echo "</TEXTAREA><P>\n";
 
diff --git a/ecrire/breves_edit.php3 b/ecrire/breves_edit.php3
index 9d0879a6d210465621b4a002802edcb78a8d98ad..09198a7efbbbdefc5f05a70c8bbd052d56677b63 100644
--- a/ecrire/breves_edit.php3
+++ b/ecrire/breves_edit.php3
@@ -2,6 +2,7 @@
 
 include ("inc.php3");
 include_ecrire ("inc_documents.php3");
+include_ecrire ("inc_barre.php3");
 
 function mySel($varaut,$variable){
 		$retour= " VALUE=\"$varaut\"";
@@ -113,7 +114,7 @@ if ($new != "oui") {
 
 
 if ($connect_statut=="0minirezo" OR $statut=="prop" OR $new == "oui") {
-	echo "<FORM ACTION='breves_voir.php3' METHOD='post'>";
+	echo "<FORM ACTION='breves_voir.php3' METHOD='post' name='formulaire'>";
 
 	echo "<INPUT TYPE='Hidden' NAME='modifier_breve' VALUE=\"oui\">";
 	echo "<INPUT TYPE='Hidden' NAME='id_breve' VALUE=\"$id_breve\">";
@@ -156,7 +157,8 @@ if ($connect_statut=="0minirezo" OR $statut=="prop" OR $new == "oui") {
 	else $rows = 15;
 	
 	echo "<B>"._T('entree_texte_breve')."</B><BR>";
-	echo "<TEXTAREA NAME='texte' ROWS='$rows' CLASS='formo' COLS='40' wrap=soft>";
+	echo afficher_barre('formulaire', 'texte');
+	echo "<TEXTAREA NAME='texte' ".afficher_claret()." ROWS='$rows' CLASS='formo' COLS='40' wrap=soft>";
 	echo $texte;
 	echo "</TEXTAREA><P>\n";
 
diff --git a/ecrire/forum_envoi.php3 b/ecrire/forum_envoi.php3
index c73b769d11c6d63fbc4b2747f15f0b6e7046bb53..f316b1c4a90d446e2321688651dbdcb9249a84ee 100644
--- a/ecrire/forum_envoi.php3
+++ b/ecrire/forum_envoi.php3
@@ -1,6 +1,7 @@
 <?php
 
 include ("inc.php3");
+include_ecrire ("inc_barre.php3");
 
 
 if ($modif_forum != "oui") $titre_message = ereg_replace("^([^>])", "> \\1", $titre_message);
@@ -50,7 +51,7 @@ if ($id_parent) {
 }
 
 
-echo "<FORM ACTION='forum_envoi.php3' METHOD='post'>";
+echo "<FORM ACTION='forum_envoi.php3' name='formulaire' METHOD='post'>";
 
 if ($titre_parent) {
 	debut_cadre_relief("forum-interne-24.gif");
@@ -134,7 +135,8 @@ echo "<INPUT TYPE='Hidden' NAME='statut' VALUE=\"$statut\">\n";
 
 echo "<p><B>"._T('info_texte_message')."</B><BR>";
 echo _T('info_creation_paragraphe')."<BR>";
-echo "<TEXTAREA NAME='texte' ROWS='15' CLASS='formo' COLS='40' wrap=soft>";
+echo afficher_barre('formulaire', 'texte', true);
+echo "<TEXTAREA NAME='texte' ".afficher_claret()." ROWS='15' CLASS='formo' COLS='40' wrap=soft>";
 echo entites_html($texte);
 echo "</TEXTAREA><P>\n";
 
diff --git a/ecrire/img_pack/barre-a-grave.png b/ecrire/img_pack/barre-a-grave.png
new file mode 100644
index 0000000000000000000000000000000000000000..50c47394d6d4787e333765d4a072b79a8060fc4f
Binary files /dev/null and b/ecrire/img_pack/barre-a-grave.png differ
diff --git a/ecrire/img_pack/barre-bold.png b/ecrire/img_pack/barre-bold.png
new file mode 100644
index 0000000000000000000000000000000000000000..67b3c88e5af4060854bba3e90e037bd8e7c6b9ab
Binary files /dev/null and b/ecrire/img_pack/barre-bold.png differ
diff --git a/ecrire/img_pack/barre-e-aigu.png b/ecrire/img_pack/barre-e-aigu.png
new file mode 100644
index 0000000000000000000000000000000000000000..0915f86016681b55845f32bdd8cb33c3d714586a
Binary files /dev/null and b/ecrire/img_pack/barre-e-aigu.png differ
diff --git a/ecrire/img_pack/barre-euro.png b/ecrire/img_pack/barre-euro.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1f1467dcbd76a0bd2ef32ef6c214b1ecc15c00d
Binary files /dev/null and b/ecrire/img_pack/barre-euro.png differ
diff --git a/ecrire/img_pack/barre-guillemets.png b/ecrire/img_pack/barre-guillemets.png
new file mode 100644
index 0000000000000000000000000000000000000000..b929bc2881aecae2a34710d73fa0c4c5d35098c0
Binary files /dev/null and b/ecrire/img_pack/barre-guillemets.png differ
diff --git a/ecrire/img_pack/barre-intertitre.png b/ecrire/img_pack/barre-intertitre.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a044b58f1ea454d785b0aca2f1e827b73db3fe1
Binary files /dev/null and b/ecrire/img_pack/barre-intertitre.png differ
diff --git a/ecrire/img_pack/barre-italic.png b/ecrire/img_pack/barre-italic.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4ebf4b03c2ecd05ddfba7e361c5b1f693df98c9
Binary files /dev/null and b/ecrire/img_pack/barre-italic.png differ
diff --git a/ecrire/img_pack/barre-lien.png b/ecrire/img_pack/barre-lien.png
new file mode 100644
index 0000000000000000000000000000000000000000..d40ee067839393570619cfba9ee15281588c0959
Binary files /dev/null and b/ecrire/img_pack/barre-lien.png differ
diff --git a/ecrire/img_pack/barre-note.png b/ecrire/img_pack/barre-note.png
new file mode 100644
index 0000000000000000000000000000000000000000..40516c86e7932a00af16d39ae087327627de6ffa
Binary files /dev/null and b/ecrire/img_pack/barre-note.png differ
diff --git a/ecrire/img_pack/barre-oe-maj.png b/ecrire/img_pack/barre-oe-maj.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb681d2c1c23d0366318433596bab9af57a4994b
Binary files /dev/null and b/ecrire/img_pack/barre-oe-maj.png differ
diff --git a/ecrire/img_pack/barre-oe.png b/ecrire/img_pack/barre-oe.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7061a255e0bb84ebd0f095582bd233c991f03fc
Binary files /dev/null and b/ecrire/img_pack/barre-oe.png differ
diff --git a/ecrire/img_pack/barre-quote.png b/ecrire/img_pack/barre-quote.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a1be699bdcfda5faedcd089e79546318853c5fb
Binary files /dev/null and b/ecrire/img_pack/barre-quote.png differ
diff --git a/ecrire/img_pack/barre-wikipedia.png b/ecrire/img_pack/barre-wikipedia.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8a5714ab15f6ac27ccd1e21530af7c52bbc9e7a
Binary files /dev/null and b/ecrire/img_pack/barre-wikipedia.png differ
diff --git a/ecrire/inc_barre.php3 b/ecrire/inc_barre.php3
new file mode 100644
index 0000000000000000000000000000000000000000..089fb53ae56b19d909ca000e85ae68fbf2a2c327
--- /dev/null
+++ b/ecrire/inc_barre.php3
@@ -0,0 +1,90 @@
+<?php
+//
+// Ce fichier ne sera execute qu'une fois
+if (defined("_INC_BARRE")) return;
+define("_INC_BARRE", "1");
+
+//include_ecrire ("inc_layers.php3"); // (pour memoire)
+
+function test_barre() {
+	global $HTTP_UA_OS, $browser_name, $browser_version, $browser_description, $browser_rev;
+		
+	if ($browser_name == '') verif_butineur();	
+		
+	if (
+	(eregi("msie", $browser_name) AND $browser_version >= 5 AND $HTTP_UA_OS != 'MacOS')
+	|| (eregi("mozilla", $browser_name) AND $browser_version >= 5 AND $browser_rev >= 1.3)
+	)
+		return true;
+}
+
+
+function test_claret() {
+	global $HTTP_UA_OS, $browser_name, $browser_version, $browser_description, $browser_rev;
+
+	if ( test_barre() && (eregi("msie", $browser_name)) ) return true;
+}
+
+
+function afficher_script_barre(){
+	global $flag_ecrire, $flag_script_deja_affiche;
+	
+	if ($flag_script_deja_affiche != 1) {
+		$flag_script_deja_affiche = 1;
+		$ret = '<script type="text/javascript" src="'.($flag_ecrire ? "" : "ecrire/").'spip_barre.js">';
+		$ret .= "</script>\n";
+		return $ret;	
+	}
+}
+
+function afficher_barre($formulaire='',$texte='', $forum=false) {
+	global $spip_lang, $flag_ecrire;
+
+	if (test_barre()) {	
+		$ret = afficher_script_barre();
+		$champ = "document.$formulaire.$texte";
+		$ret .= "<div align='left'>";
+		$ret .= "<a href=\"javascript:barre_raccourci('{{','}}',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-bold.png' border='0' width='24' height='24' title='Mettre en gras'></a>";
+		$ret .= "&nbsp;";
+		$ret .= "<a href=\"javascript:barre_raccourci('{','}',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-italic.png' border='0' width='24' height='24' title='Mettre en italique'></a>";
+		$ret .= "&nbsp;&nbsp;&nbsp;";
+		$ret .= "<a href=\"javascript:barre_raccourci('\n\n{{{','}}}\n\n',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-intertitre.png' border='0' width='24' height='24' title='Cr&eacute;er un intertitre'></a>";
+		$ret .= "&nbsp;";
+		$ret .= "<a href=\"javascript:barre_raccourci('[[',']]',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-note.png' border='0' width='24' height='24' title='Cr&eacute;er une note de bas de page'></a>";
+		$ret .= "&nbsp;&nbsp;&nbsp;";
+		$ret .= "<a href=\"javascript:barre_demande('[','->',']','Veuillez indiquer l\'adresse de votre lien (vous pouvez indiquer une adresse Web sous la forme http://www.monsite/com ou simplement indiquer le num&eacute;ro d\'un article de ce site.',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-lien.png' border='0' width='24' height='24' title='Cr&eacute;er un lien hypertexte'></a>";
+		
+		if ($forum) {
+			$ret .= "&nbsp;&nbsp;&nbsp;";
+			$ret .= "<a href=\"javascript:barre_raccourci('\n\n<quote>','</quote>\n\n',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-quote.png' border='0' width='24' height='24' title='Citer un extrait'></a>";
+		}
+		
+		if ($spip_lang == "fr") {
+			$ret .= "&nbsp;&nbsp;&nbsp;";
+			$ret .= "<a href=\"javascript:barre_raccourci('&laquo;','&raquo;',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-guillemets.png' border='0' width='24' height='24' title='Placer entre guillemets'></a>";
+			if (test_claret()) {
+				$ret .= "&nbsp;";
+				$ret .= "<a href=\"javascript:barre_inserer('&OElig;',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-oe-maj.png' border='0' width='24' height='24' title='Ins&eacute;rer un E-dans-l-O majuscule'></a>";
+				$ret .= "&nbsp;";
+				$ret .= "<a href=\"javascript:barre_inserer('&oelig;',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-oe.png' border='0' width='24' height='24' title='Ins&eacute;rer un E-dans-l-O'></a>";
+				$ret .= "&nbsp;";
+				$ret .= "<a href=\"javascript:barre_inserer('&Agrave;',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-a-grave.png' border='0' width='24' height='24' title='Ins&eacute;rer un A accent grave'></a>";
+				$ret .= "&nbsp;";
+				$ret .= "<a href=\"javascript:barre_inserer('&Eacute;',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-e-aigu.png' border='0' width='24' height='24' title='Ins&eacute;rer un E accent aigu'></a>";
+			}
+		}
+		if (test_claret()) {
+			$ret .= "&nbsp;";
+			$ret .= "<a href=\"javascript:barre_inserer('&euro;',$champ)\"><img src='".($flag_ecrire ? "" : "ecrire/")."img_pack/barre-euro.png' border='0' width='24' height='24' title='Ins&eacute;rer le symbole euro'></a>";
+		}
+		$ret .= "<div>";
+	}
+	return $ret;
+}
+
+function afficher_claret() {
+	if (test_claret()) {
+		return "onselect='storeCaret(this);' onclick='storeCaret(this);' onkeyup='storeCaret(this);' ondbclick='storeCaret(this);'";
+	}
+}
+?>
\ No newline at end of file
diff --git a/ecrire/inc_layer.php3 b/ecrire/inc_layer.php3
index d405dc6658556479eeddd6530bd2cc1e0013c66a..235f22124c90c60a0d7e3d34d53dcf523a70a953 100644
--- a/ecrire/inc_layer.php3
+++ b/ecrire/inc_layer.php3
@@ -9,25 +9,7 @@ define("_INC_LAYER", "1");
 // Le contenu de cette fonction est a mettre dans inc_version
 //
 
-function init_layer() {
-	global $HTTP_USER_AGENT, $browser_name, $browser_version, $browser_description;
-	ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $HTTP_USER_AGENT, $match);
-	$browser_name = $match[1];
-	$browser_version = $match[2];
-	$browser_description = $match[3];
-	
-	if (eregi("opera", $browser_description)) {
-		eregi("Opera ([^\ ]*)", $browser_description, $match);
-		$browser_name = "Opera";
-		$browser_version = $match[1];
-	}
-	else if (eregi("msie", $browser_description)) {
-		eregi("MSIE ([^;]*)", $browser_description, $match);
-		$browser_name = "MSIE";
-		$browser_version = $match[1];
-	}
 
-}
 
 function test_layer(){
 	global $browser_name, $browser_version, $browser_description;
@@ -136,6 +118,6 @@ function bouton_block_visible($nom_block){
 	}
 }
 
-init_layer();
+verif_butineur();
 
 ?>
diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index d6dd9e47ce21f8d82764d8eeabd1e2f9603a214b..0283a38b661ae8e268f8fa3edd2456f5a4c0c29f 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -297,7 +297,7 @@ function typo_fr($letexte) {
 	$letexte = ereg_replace(" *~+ *", "~", $letexte);
 
 	$cherche2 = array(
-		'/(http|ftp|mailto)~:/',
+		'/(http|https|ftp|mailto)~:/',
 		'/~/'
 	);
 	$remplace2 = array(
@@ -731,6 +731,8 @@ function traiter_raccourcis($letexte, $les_echap = false, $traiter_les_notes = '
 		$letexte = eregi_replace("(<br[[:space:]]*/?".">)+(<p>|<br[[:space:]]*/?".">)", "\n<p class=\"spip\">", $letexte);
 		$letexte = str_replace("<p>", "<p class=\"spip\">", $letexte);
 		$letexte = str_replace("\n", " ", $letexte);
+		$letexte = str_replace("<quote>", "<div class='spip_quote'>", $letexte);
+		$letexte = str_replace("<\/quote>", "</div'>", $letexte);
 	}
 	else {
 		$cherche1 = array(
@@ -748,7 +750,9 @@ function traiter_raccourcis($letexte, $les_echap = false, $traiter_les_notes = '
 			/* 11 */	"/(<br[[:space:]]*\/?".">){2,}/",
 			/* 12 */	"/<p>([\n]*)(<br[[:space:]]*\/?".">)+/",
 			/* 13 */	"/<p>/",
-			/* 14 */	"/\n/"
+			/* 14 */	"/\n/",
+			/* 16 */	"/<quote>/",
+			/* 16 */	"/<\/quote>/"
 		);
 		$remplace1 = array(
 			/* 0 */ 	"___SPIP_ligne_horizontale___",
@@ -765,7 +769,9 @@ function traiter_raccourcis($letexte, $les_echap = false, $traiter_les_notes = '
 			/* 11 */	"\n<p class=\"spip\">",
 			/* 12 */	"\n<p class=\"spip\">",
 			/* 13 */	"<p class=\"spip\">",
-			/* 14 */	" "
+			/* 14 */	" ",
+			/* 15 */	"<div class=\"spip_quote\">",
+			/* 16 */	"</div>"
 		);
 		$letexte = ereg_remplace($cherche1, $remplace1, $letexte);
 	}
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 2b8849e180670d9be8ad89480c29c9ea3c46e73b..74be702e8fd3dffecbdc21c51de723f3f09b11d8 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -805,6 +805,34 @@ function spip_log($message) {
 	}
 }
 
+//
+// Tests sur le nom du butineur
+//
+function verif_butineur() {
+	global $HTTP_USER_AGENT, $browser_name, $browser_version, $browser_description, $browser_rev;
+	ereg("^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$", $HTTP_USER_AGENT, $match);
+	$browser_name = $match[1];
+	$browser_version = $match[2];
+	$browser_description = $match[3];
+	
+	
+	if (eregi("opera", $browser_description)) {
+		eregi("Opera ([^\ ]*)", $browser_description, $match);
+		$browser_name = "Opera";
+		$browser_version = $match[1];
+	}
+	else if (eregi("msie", $browser_description)) {
+		eregi("MSIE ([^;]*)", $browser_description, $match);
+		$browser_name = "MSIE";
+		$browser_version = $match[1];
+	}
+	else if (eregi("mozilla", $browser_name) AND $browser_version >= 5) {
+		ereg("rv:([0-9]+\.[0-9]+)", $browser_description, $match);
+		$browser_rev = doubleval($match[1]);
+	}
+}
+
+
 
 function spip_debug($message) {
 	if ($GLOBALS['debug'])
diff --git a/ecrire/spip_barre.js b/ecrire/spip_barre.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e031fcd8c550025d8bc54e41a41993d8616b0d2
--- /dev/null
+++ b/ecrire/spip_barre.js
@@ -0,0 +1,96 @@
+// Barre de raccourcis
+// derive du:
+// bbCode control by subBlue design : www.subBlue.com
+
+// Startup variables
+var theSelection = false;
+
+// Check for Browser & Platform for PC & IE specific bits
+// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
+var clientPC = navigator.userAgent.toLowerCase(); // Get client info
+var clientVer = parseInt(navigator.appVersion); // Get browser version
+
+var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
+var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
+                && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
+                && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
+var is_moz = 0;
+
+var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
+var is_mac = (clientPC.indexOf("mac")!=-1);
+
+
+function barre_raccourci(debut,fin,champ) {
+	var txtarea = champ;
+
+	txtarea.focus();
+	donotinsert = false;
+	theSelection = false;
+	bblast = 0;
+
+
+	if ((clientVer >= 4) && is_ie && is_win)
+	{
+		theSelection = document.selection.createRange().text; // Get text selection
+		if (theSelection) {
+			// Add tags around selection
+			document.selection.createRange().text = debut + theSelection + fin;
+			txtarea.focus();
+			theSelection = '';
+			return;
+		}
+	}
+	else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
+	{
+		mozWrap(txtarea, debut, fin);
+		return;
+	}
+}
+
+function barre_demande(debut,milieu,fin,affich,champ) {
+	var inserer = prompt(affich);
+	
+	if (inserer != null) {
+		if (inserer == "") {inserer = "xxx"; }
+
+		barre_raccourci(debut, milieu+inserer+fin, champ);
+	}
+}
+
+function barre_inserer(text,champ) {
+	var txtarea = champ;
+	
+	if (txtarea.createTextRange && txtarea.caretPos) {
+		var caretPos = txtarea.caretPos;
+		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
+		txtarea.focus();
+	} else {
+		txtarea.value  += text;
+		txtarea.focus();
+	}
+}
+
+
+// From http://www.massless.org/mozedit/
+function mozWrap(txtarea, open, close)
+{
+	var selLength = txtarea.textLength;
+	var selStart = txtarea.selectionStart;
+	var selEnd = txtarea.selectionEnd;
+	if (selEnd == 1 || selEnd == 2)
+		selEnd = selLength;
+
+	var s1 = (txtarea.value).substring(0,selStart);
+	var s2 = (txtarea.value).substring(selStart, selEnd)
+	var s3 = (txtarea.value).substring(selEnd, selLength);
+	txtarea.value = s1 + open + s2 + close + s3;
+	return;
+}
+
+// Insert at Claret position. Code from
+// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
+     function storeCaret (textEl) {
+       if (textEl.createTextRange) 
+         textEl.caretPos = document.selection.createRange().duplicate();
+     }
+
diff --git a/ecrire/spip_style.php3 b/ecrire/spip_style.php3
index 534b0b923c445f96239c2827494735126ab12223..117bf95c763cf86bceef3368c7f5b61dd000ae8d 100644
--- a/ecrire/spip_style.php3
+++ b/ecrire/spip_style.php3
@@ -239,6 +239,14 @@ a.spip_glossaire:hover {text-decoration: underline overline;}
 	background-color: #FFFFFF;
 	padding: 5px;
 }
+.spip_quote {
+	margin-left : 40px;
+	margin-top : 10px;
+	margin-bottom : 10px;
+	border : solid 1px #aaaaaa;
+	background-color: #ffffff;
+	padding: 5px;
+}
 
 .boutonlien {
 	font-family: Verdana,Arial,Helvetica,sans-serif;
diff --git a/inc-forum.php3 b/inc-forum.php3
index fd2bd7958e9a8e1730efc01c96cdcb0604bc7a1f..ef1fd7d52a023812f4575321804d565f88e06020 100644
--- a/inc-forum.php3
+++ b/inc-forum.php3
@@ -12,6 +12,8 @@ include_ecrire("inc_acces.php3");
 include_ecrire("inc_texte.php3");
 include_ecrire("inc_filtres.php3");
 include_ecrire("inc_mail.php3");
+include_ecrire("inc_barre.php3");
+
 if (file_exists("inc-urls.php3")) {
 	include_local ("inc-urls.php3");
 }
@@ -109,7 +111,7 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 		$ret .= '<'.'?php { ?'.'>';
 
 	$ret .= "\n<a name='formulaire_forum'></a>\n";
-	$ret .= "\n<form action='$lien' method='post'>";
+	$ret .= "\n<form action='$lien' name='formulaire' method='post'>";
 
 	if ($forums_publics == "pri") {
 		$ret.= _T('forum_info_modere')."<p>";
@@ -230,7 +232,9 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 	if ($afficher_texte != "non"){
 		$ret .= "\n<br /><div class='spip_encadrer'><b>"._T('forum_texte')."</b><br />\n";
 		$ret .= _T('forum_creer_paragraphes');
-		$ret .= "<br>\n<textarea name='texte' rows='12' class='forml' cols='40'>";
+		$ret .= "<br />\n";
+		$ret .= afficher_barre('formulaire', 'texte', true);
+		$ret .= "<textarea name='texte' ".afficher_claret()." rows='12' class='forml' cols='40'>";
 		$ret.= $texte;
 		$ret .= "\n</textarea></div>\n";
 	}
diff --git a/spip_style.css b/spip_style.css
index 48bc0e1dad37bf8d270c94839fb33ea79ecdfaab..75ef2a8b35ca2236d27b9774eded1e01d80a5e55 100644
--- a/spip_style.css
+++ b/spip_style.css
@@ -72,6 +72,14 @@ i.spip { }
 	padding: 5px;
 }
 
+.spip_quote {
+	margin-left : 40px;
+	margin-top : 10px;
+	margin-bottom : 10px;
+	border : solid 1px #aaaaaa;
+	background-color: #ffffff;
+	padding: 5px;
+}
 
 .spip_bouton { background-color: #FFCC00;}