diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 7c9d0225c363348845ac17a771c7ba220123c159..bb84a9021018db9c43db263c2223f9265b83e8a1 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -244,6 +244,13 @@ function sinon ($texte, $sinon='') {
 		return $sinon;
 }
 
+// |choixsivide{vide,pasvide} affiche pasvide si la chaine n'est pas vide...
+
+function choixsivide($a, $vide, $pasvide) {return $a ? $pasvide : $vide;}
+
+// |choixsiegal{aquoi,oui,non} affiche oui si la chaine est egal a aquoi ...
+function choixsiegal($a1,$a2,$v,$f) {return ($a1 == $a2) ? $v : $f;}
+
 
 //
 // Date, heure, saisons
@@ -704,4 +711,20 @@ function extraire_attribut($balise, $attribut) {
   else return '';
 }
 
+// fabrique un bouton de type $t de Name $n, de Value $v et autres attributs $a
+function boutonne($t, $n, $v, $a='') {
+  return "\n<input type='$t'" .
+    (!$n ? '' : " name='$n'") .
+    " value=\"$v\" $a />";
+}
+
+function http_script($script, $src='', $noscript='') {
+	return '<script type="text/javascript"'
+		. ($src ? " src=\"$src\"" : '')
+		. ">"
+		. ($script ? "<!--\n$script\n//-->" : '')
+		. "</script>\n"
+		. (!$noscript ? '' : "<noscript>\n\t$noscript\n</noscript>\n");
+}
+
 ?>
diff --git a/ecrire/inc_lang.php3 b/ecrire/inc_lang.php3
index e8e06d19dd04ece260ddf08766cf672e556b54f9..61e9f23f31cc062a4a3c5401934dd761a0218b3c 100644
--- a/ecrire/inc_lang.php3
+++ b/ecrire/inc_lang.php3
@@ -447,44 +447,38 @@ function menu_langues($nom_select = 'var_lang', $default = '', $texte = '', $her
 		}
 	}
 
-	$ret = "<form action='$post' method='post' style='margin:0px; padding:0px;'>";
-	if ($cible)
-		$ret .= "<input type='hidden' name='url' value='".quote_amp($cible)."' />";
-
-	if ($texte)
-		$ret .= $texte;
-
-	if (_DIR_RESTREINT)
-		$style = "class='forml' style='vertical-align: top; max-height: 24px; margin-bottom: 5px; width: 120px;'";
-	else if ($nom_select == 'var_lang_ecrire') 
-		$style = "class='verdana1' style='background-color: $couleur_foncee; max-height: 24px; border: 1px solid white; color: white; width: 100px;'";
-	else
-		$style = "class='fondl'";
-
 	$postcomplet = new Link($post);
 	if ($cible) $postcomplet->addvar('url', $cible);
 
-	$lien_post = $postcomplet->geturl();
-	$ret .= "\n<select name='$nom_select' $style onchange=\"document.location.href='".$lien_post."&amp;$nom_select='+this.options[this.selectedIndex].value\">\n";
-
+	$ret = '';
 	sort($langues);
 	while (list(, $l) = each ($langues)) {
-		if ($l == $default) {
-			$selected = ' selected=\'selected\'';
-		}
-		else {
-			$selected = '';
-		}
+		$selected = ($l == $default) ? ' selected=\'selected\'' : '';
 		if ($l == $herit) {
 			$ret .= "<option class='maj-debut' style='font-weight: bold;' value='herit'$selected>"
 				.traduire_nom_langue($herit)." ("._T('info_multi_herit').")</option>\n";
 		}
 		else $ret .= "<option class='maj-debut' value='$l'$selected>".traduire_nom_langue($l)."</option>\n";
 	}
-	$ret .= "</select>\n";
-	$ret .= "<noscript><input type='submit' name='Valider' value='&gt;&gt;' class='spip_bouton' /></noscript>";
-	$ret .= "</form>";
-	return $ret;
+	return "<form action='"
+	  . $post
+	  . "' method='post' style='margin:0px; padding:0px;'>"
+	  . (!$cible ? '' : "<input type='hidden' name='url' value='".quote_amp($cible)."' />")
+	  . $texte
+	  . "<select name='$nom_select' "
+	  . (_DIR_RESTREINT ?
+	     ("class='forml' style='vertical-align: top; max-height: 24px; margin-bottom: 5px; width: 120px;'") :
+	     (($nom_select == 'var_lang_ecrire')  ?
+	      ("class='verdana1' style='background-color: " . $couleur_foncee
+	       . "; max-height: 24px; border: 1px solid white; color: white; width: 100px;'") :
+	      "class='fondl'"))
+	  . " onchange=\"document.location.href='"
+	  . $postcomplet->geturl()
+	  ."&amp;$nom_select='+this.options[this.selectedIndex].value\">\n"
+	  . $ret
+	  . "</select>\n"
+	  . "<noscript><input type='submit' name='Valider' value='&gt;&gt;' class='spip_bouton' /></noscript>"
+	  . "</form>";
 }
 
 
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index d0e08faf7e5e0cfe78f390aa6a407be758f7fdd6..73801e9e5c14f0ead44d57d87e7b1817cd50eaa8 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -1059,13 +1059,4 @@ function debut_entete($title, $entete='') {
 	  "<meta http-equiv='Content-Type' content='text/html; charset=$charset' />\n";
 }
 
-function http_script($script, $src='', $noscript='') {
-	return '<script type="text/javascript"'
-		. ($src ? " src=\"$src\"" : '')
-		. ">"
-		. ($script ? "<!--\n$script\n//-->" : '')
-		. "</script>\n"
-		. (!$noscript ? '' : "<noscript>\n\t$noscript\n</noscript>\n");
-}
-
 ?>
diff --git a/formulaire_inscription-dist.html b/formulaire_inscription-dist.html
index dff22d8da5bfb29a92a992c72ca819718609f203..c972e70a5f5b4358e9948ce07b74fa7bdaae5bfe 100644
--- a/formulaire_inscription-dist.html
+++ b/formulaire_inscription-dist.html
@@ -1,7 +1,8 @@
-<:form_forum_indiquer_nom_email:>
-<form method='post' action='#SELF' style='border: 0px; margin: 0px;'> 
-      <fieldset style="border: none; font-weight: bold">
-	<legend></legend>
+[
+(#HTTP_VARS{mode}|choixsiegal{forum,' ',''})<:pass_forum_bla:><br /><br />][
+(#HTTP_VARS{mode}|choixsiegal{redac,' ',''})<:pass_espace_prive_bla:><br /><br />]<:form_forum_indiquer_nom_email:>
+<form name="inscription" method='post' action='#SELF' style='border: 0px; margin: 0px;'> 
+      <fieldset style="border: none; font-weight: bold"><legend></legend>
 	<label>
 	  <:form_pet_votre_nom:>
 	  <input type="text" class="forml" name="nom_inscription" value="" size="30" />
@@ -11,6 +12,23 @@
 	  <input type="text" class="forml" name="mail_inscription" value="" size="30" />
 	</label>
       </fieldset>
-      <div align="right"><input type="submit" class="spip_bouton" value="<:bouton_valider:>" /></div> 
+      <div align="right"><input type="submit" class="spip_bouton" value="<:bouton_valider:>" />
+	</div> 
 </form>
+<script type="text/javascript"><!--
+document.inscription.nom_inscription.focus()
+--></script>
+[<br />
+<div align="right">
+(#HTTP_VARS{mode}|choixsivide{'', ' '})
+<script type="text/javascript"><!--
+document.write("<a href='")
+document.write((window.opener) ? "javascript:close()" : "./")
+document.write("'><:pass_quitter_fenetre:><" + "/a>");
+//--></script>
+<noscript>
+	&#91;<a href='./'><:pass_retour_public:></a>&#93;
+</noscript>
+</div>
+]
 
diff --git a/formulaire_login-dist.html b/formulaire_login-dist.html
index dcf4281cd534beca002acc380266d8dda3472b39..eb88b8ba9455e5a99b6edbfdf32b7d3c95d920ee 100644
--- a/formulaire_login-dist.html
+++ b/formulaire_login-dist.html
@@ -6,8 +6,8 @@
 (#HTTP_VARS{message})
 	<br />
 	 <:forum_vous_enregistrer:>
-	<a href='spip_pass.php3?[mode=(#HTTP_VARS{mode})]' target="spip_pass"
-onclick="javascript:window.open('spip_pass.php3?[mode=(#HTTP_VARS{mode})]', 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=450'); return false;"><:forum_vous_inscrire:></a><p />
+	<a href='spip_inscription.php3?[mode=(#HTTP_VARS{mode})]' target="spip_pass"
+onclick="javascript:window.open(this.href, 'spip_inscription, 'scrollbars=yes, resizable=yes, width=480, height=450'); return false;"><:forum_vous_inscrire:></a><p />
 ]<div style="font-family: Verdana,arial,helvetica,sans-serif; font-size: 12px;">
 	<script type="text/javascript" src="ecrire/md5.js"></script>
 	<form	name="form_login"
@@ -21,7 +21,7 @@ onclick="javascript:window.open('spip_pass.php3?[mode=(#HTTP_VARS{mode})]', 'spi
 		<div class="spip_encadrer" style="text-align: [(#HTTP_VARS{spip_lang_left})]">[
 			<div class="reponse_formulaire">(#HTTP_VARS*{erreur})<br /><br /></div>
 ][
-			<label><b><:login_login2:></b><br /></label>(#HTTP_VARS{login}|vide)
+			<label><b><:login_login2:></b><br /></label>(#HTTP_VARS{login}|choixsivide{' ',''})
 			<input type="text" name="var_login" class="forml" value="" size="40" />
 ][
 <div>
@@ -68,9 +68,9 @@ document.form_login.(#HTTP_VARS{login}|choisir{session_password,var_login}).focu
 ]
 	<div align="center" style="font-size: 12px;" >[&#91;<a(#HTTP_VARS{sinscrire})
 		target="spip_pass"
-		href='spip_pass.php3?[mode=(#HTTP_VARS{mode})]'
-		onclick="javascript:window.open('spip_pass.php3?[mode=(#HTTP_VARS{mode})]', 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=450'); return false;"><:login_sinscrire:></a>&#93;][&#91;<a 
-		href="(#HTTP_VARS{oubli})"
+		href='spip_inscription.php3?[mode=(#HTTP_VARS{mode})]'
+		onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=500'); return false;"><:login_sinscrire:></a>&#93;][&#91;<a (#HTTP_VARS{oubli})
+		href="spip_pass.php3"
 		target="spip_pass" 
 		onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=280'); return false;"><:login_motpasseoublie:></a>&#93;][&#91;<a 
 		href="(#HTTP_VARS{mode}|retoursite)"><:login_retoursitepublic:></a>&#93]
diff --git a/formulaire_oubli-dist.html b/formulaire_oubli-dist.html
new file mode 100644
index 0000000000000000000000000000000000000000..0a7bcc02f552d1d35d885ea98028578defd935e1
--- /dev/null
+++ b/formulaire_oubli-dist.html
@@ -0,0 +1,31 @@
+<form name="oubli_form" action='spip_pass.php3' method='post'>
+	<fieldset style="border: none;"><legend></legend>[
+	<:pass_nouveau_pass:>
+	<input type='hidden' name="p" value="(#HTTP_VARS{p})">
+	<label>
+	    <:pass_choix_pass:>
+	    <input type="password" name="oubli">
+	</label>][
+	(#HTTP_VARS{p}|choixsivide{' ',''})
+	<label>
+	  <:pass_indiquez_cidessous:>
+	  <input type="texte" name="oubli">
+	</label>]
+	<input type=submit class="fondl" value="<:pass_ok:>">
+      </fieldset>
+</form>
+<br />
+<div align="right">
+<script type="text/javascript"><!--
+document.oubli_form.oubli.focus()
+document.write("<a href='")
+document.write((window.opener) ? "javascript:close()" : "./")
+document.write("'><:pass_quitter_fenetre:><" + "/a>");
+//--></script>
+<noscript>
+	&#91;<a href='./'><:pass_retour_public:></a>&#93;
+</noscript>
+</div>
+<br />
+
+
diff --git a/inc-balises.php3 b/inc-balises.php3
index 38b685fdbe3abbf908e5a003b6a122b13cce87ac..29a2dfa31c28d11d3f2ff07b96856cd7165d8b75 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -58,7 +58,7 @@ function champs_traitements ($p) {
 					 'typo_doublon($doublons,',
 					 $ps));
 	  }
-	// on supprime les <IMGnnn> tant qu'on ne rapatrie pas
+	// on supprime les < IMGnnn > tant qu'on ne rapatrie pas
 	// les documents distants joints..
 	// il faudrait aussi corriger les raccourcis d'URL locales
 	return str_replace('%s',
@@ -584,17 +584,17 @@ function calculer_balise_logo ($p) {
 		if ($flag_fichier)
 		  $p->code = "calcule_fichier_logo($code_logo)";
 		else
-		  $p->code = "affiche_logos($code_logo, '', $code_lien)";
+		  $p->code = "affiche_logos(array($code_logo, ''), $code_lien)";
 	}
 	else {
-	  $p->code = "calcule_logo('$type_objet', '" .
+	  $p->code = "affiche_logos(calcule_logo('$type_objet', '" .
 	    (($suite_logo == '_SURVOL') ? 'off' : 
 	     (($suite_logo == '_NORMAL') ? 'on' : 'ON')) .
 	    "', $_id_objet," .
 	    (($suite_logo == '_RUBRIQUE') ? 
 	     champ_sql("id_rubrique", $p) :
 	     (($type_objet == 'RUBRIQUE') ? "sql_parent($_id_objet)" : "''")) .
-	    ", $code_lien, '$flag_fichier')";
+	    ",  '$flag_fichier'), $code_lien)";
 	}
 	$p->statut = 'php';
 	return $p;
diff --git a/inc-calcul-outils.php3 b/inc-calcul-outils.php3
index 1881fc3c30acca91936d2c088eadeaf86e28f1ad..026721d18b922a82013e8632ea4dff34b26965fb 100644
--- a/inc-calcul-outils.php3
+++ b/inc-calcul-outils.php3
@@ -15,16 +15,6 @@
 if (defined("_INC_CALCUL_OUTILS")) return;
 define("_INC_CALCUL_OUTILS", "1");
 
-
-#
-# AFFREUX !!  Passer tout ca en CSS au plus vite !
-#
-tester_variable('espace_logos',3);
-// HSPACE=xxx VSPACE=xxx pour les logos (#LOGO_ARTICLE)
-tester_variable('espace_images',3);
-// HSPACE=xxx VSPACE=xxx pour les images integrees
-
-
 // Pour les documents comme pour les logos, le filtre |fichier donne
 // le chemin du fichier apres 'IMG/' ;  peut-etre pas d'une purete
 // remarquable, mais a conserver pour compatibilite ascendante.
@@ -34,12 +24,48 @@ function calcule_fichier_logo($on) {
 	return $r;
 }
 
+// Renvoie le code html pour afficher un logo, avec ou sans survol, lien, etc.
+// utilise la globale ci-dessous pour les attributs hspace & vspace
+
+tester_variable('espace_logos',3);
+
+function affiche_logos($logos, $lien, $align) {
+	static $num_survol=0;
+	global $espace_logos;
+	list ($arton, $artoff) = $logos;
+	$num_survol++;
+	if (!$arton) return $artoff;
+	$milieu = "<img src='$arton'"
+		. ($align ? " align='$align' " : '') 
+		. " name='image$num_survol' border='0' "
+		. "alt='image$num_survol'"
+		. " hspace='$espace_logos' vspace='$espace_logos' class='spip_logos' />";
+
+	if ($artoff) {
+			if ($lien) {
+				$afflien = "<a href='$lien'";
+				$afflien2 = "a>";
+			}
+			else {
+				$afflien = "<div";
+				$afflien2 = "div>";
+			}
+			$milieu = "$afflien onmouseover=\"image$num_survol.src=".
+				"'$artoff'\" onmouseout=\"image$num_survol.src=".
+				"'$arton'\">$milieu</$afflien2";
+	}
+		else if ($lien) {
+			$milieu = "<a href='$lien'>$milieu</a>";
+		}
+
+	return $milieu;
+}
 
 //
 // Retrouver le logo d'un objet (et son survol)
 //
 
-function calcule_logo($type, $onoff, $id, $id_rubrique, $lien, $align, $ff) {
+function calcule_logo($type, $onoff, $id, $id_rubrique, $ff) {
 	include_ecrire('inc_logos.php3');
 
 	$table_logos = array (
@@ -57,14 +83,12 @@ function calcule_logo($type, $onoff, $id, $id_rubrique, $lien, $align, $ff) {
 		$on = cherche_image_nommee($type . $nom . intval($id));
 		if ($on) {
 			if ($ff)
-				return  ("$on[1].$on[2]");
+			  return  (array('', "$on[1].$on[2]"));
 			else {
 				$off = ($onoff != 'ON') ? '' :
 					cherche_image_nommee($type . 'off' . $id);
-				return affiche_logos(("$on[0]$on[1].$on[2]"),
-					($off ? ("$off[0]$off[1].$off[2]") : ''),
-					$lien,
-					$align);
+				return array ("$on[0]$on[1].$on[2]",
+					      ($off ? ("$off[0]$off[1].$off[2]") : ''));
 			}
 		}
 		else if ($id_rubrique) {
@@ -73,42 +97,8 @@ function calcule_logo($type, $onoff, $id, $id_rubrique, $lien, $align, $ff) {
 			$id_rubrique = 0;
 		} else if ($id AND $type == 'rub')
 			$id = sql_parent($id);
-		else return '';
-	}
-}
-
-
-// Renvoie le code html pour afficher le logo, avec ou sans survol, avec ou sans lien, etc.
-function affiche_logos($arton, $artoff, $lien, $align) {
-	global $num_survol;
-	global $espace_logos;
-
-	$num_survol++;
-	if (!$arton) return '';
-	$milieu = "<img src='$arton'"
-		. ($align ? " align='$align' " : '') 
-		. " name='image$num_survol' border='0' "
-		. "alt='image$num_survol'"
-		. " hspace='$espace_logos' vspace='$espace_logos' class='spip_logos' />";
-
-	if ($artoff) {
-			if ($lien) {
-				$afflien = "<a href='$lien'";
-				$afflien2 = "a>";
-			}
-			else {
-				$afflien = "<div";
-				$afflien2 = "div>";
-			}
-			$milieu = "$afflien onmouseover=\"image$num_survol.src=".
-				"'$artoff'\" onmouseout=\"image$num_survol.src=".
-				"'$arton'\">$milieu</$afflien2";
+		else return array('','');
 	}
-		else if ($lien) {
-			$milieu = "<a href='$lien'>$milieu</a>";
-		}
-
-	return $milieu;
 }
 
 //
diff --git a/inc-calcul.php3 b/inc-calcul.php3
index bc5946bd74376dce9eb497660b134b4cbc22ff8c..8bec7d03071e4323becf0198650be4aff942013d 100644
--- a/inc-calcul.php3
+++ b/inc-calcul.php3
@@ -21,7 +21,7 @@ include_ecrire("inc_debug_sql.php3");
 include_local("inc-calcul-outils.php3");
 
 // Ce fichier peut contenir une affectation de $dossier_squelettes  indiquant
-// le repertoire du source des squelettes (les pseudo-html avec <BOUCLE...)
+// le repertoire du source des squelettes (les pseudo-html avec BOUCLE...)
 
 if (@file_exists("mes_fonctions.php3")) 
     include_local ("mes_fonctions.php3");
@@ -59,7 +59,7 @@ function charger_squelette ($squelette) {
 	$nom = $ext . '_' . md5($squelette);
 	$sourcefile = $squelette . ".$ext";
 
-	// le squelette est-il deja en memoire (<inclure> a repetition)
+	// le squelette est-il deja en memoire (INCLURE  a repetition)
 	if (function_exists($nom))
 		return $nom;
 
diff --git a/inc-compilo-api.php3 b/inc-compilo-api.php3
index b273f9f63090cc5a65b61bab4b0f40c882556287..cdb395f3f8d156989e56daf1adac944536aa29bc 100644
--- a/inc-compilo-api.php3
+++ b/inc-compilo-api.php3
@@ -72,7 +72,7 @@ class Champ {
 			// -> definira les pre et post-traitements obligatoires
 	// champs pour la production de code dependant du contexte
 	var $id_mere;    // pour TOTAL_BOUCLE hors du corps
-	var $document;   // pour embed et <img dans les textes
+	var $document;   // pour embed et img dans les textes
 }
 
 
diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3
index e9056c9cbace92fc41f8a42250504a9ef0af6fd4..6dc3b06c3954cc9f2f5e3e7f4d95ad401c8d46c8 100644
--- a/inc-compilo-index.php3
+++ b/inc-compilo-index.php3
@@ -151,7 +151,6 @@ function calculer_balise($nom, $p) {
 	return $p;
 }
 
-
 //
 // Traduction des balises dynamiques, notamment les "formulaire_*"
 // Inclusion du fichier associe a son nom.
@@ -163,10 +162,10 @@ function calculer_balise($nom, $p) {
 function calculer_balise_dynamique($p, $nom, $l) {
 	balise_distante_interdite($p);
 	$param = param_balise($p);
-	$p->code = "executer_balise_dynamique('" . $nom . "', array("
+	$p->code = "executer_balise_dynamique('" . $nom . "',\n\tarray("
 	  . join(',',collecter_balise_dynamique($l, $p))
 	  . filtres_arglist($param, $p)
-	  . '), array('
+	  . "),\n\tarray("
 	  . (!$p->fonctions ? '' : ("'" . join("','", $p->fonctions) . "'"))
 	  . "))";
 	$p->statut = 'php';
diff --git a/inc-formulaire_forum.php3 b/inc-formulaire_forum.php3
index 9dd3897c5338f76076707d46b2c464cf01f8d296..db4e42d155860c6a8d5e833d2b5cf66c1b0d75fc 100644
--- a/inc-formulaire_forum.php3
+++ b/inc-formulaire_forum.php3
@@ -196,13 +196,6 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 		     ));
 }
 
-// fabrique un bouton de type $t de Name $n, de Value $v et autres attribut $a
-function boutonne($t, $n, $v, $a='') {
-  return "\n<input type='$t'" .
-    (!$n ? '' : " name='$n'") .
-    " value=\"$v\" $a />";
-}
-
 // Mots-cles dans les forums :
 // Si la variable de personnalisation $afficher_groupe[] est definie
 // dans le fichier d'appel, et si la table de reference est OK, proposer
diff --git a/inc-formulaire_inscription.php3 b/inc-formulaire_inscription.php3
index 65476cb56ff85d2ef844464d8ee7f89b40a4a0cf..896dd9626697e1b78f712d09472147313732cfd7 100644
--- a/inc-formulaire_inscription.php3
+++ b/inc-formulaire_inscription.php3
@@ -13,13 +13,11 @@ function balise_FORMULAIRE_INSCRIPTION_stat($args, $filtres)
 }
 
 function balise_FORMULAIRE_INSCRIPTION_dyn($type, $mail_inscription, $nom_inscription) {
-	if ($type == 'redac') {
+	if (($type == 'redac') AND (lire_meta("accepter_inscriptions") == "oui"))
 		$statut = "nouveau";
-	}
-	else if ($type == 'forum') {
+	else if (($type == 'forum') AND ((lire_meta('accepter_visiteurs') == 'oui') OR (lire_meta('forums_publics') == 'abo')))
 		$statut = "6forum";
-	}
-	else return ''; // tentative de hack...?
+	else return _T('pass_rien_a_faire_ici');
 
 	if (test_mail_ins($type, $mail_inscription) && $nom_inscription) {
 		include(_FILE_CONNECT);
diff --git a/inc-formulaire_signature.php3 b/inc-formulaire_signature.php3
index 75563551378456144d8103d7d0ed5ef303950d0d..68d5bb213858e430250ec9d6bc807e610bab1b96 100644
--- a/inc-formulaire_signature.php3
+++ b/inc-formulaire_signature.php3
@@ -24,7 +24,6 @@ function balise_FORMULAIRE_SIGNATURE_dyn($id_article, $nom_email, $adresse_email
 	}
 }
 
-function choixsiegal($a1,$a2,$v,$f) {return ($a1 == $a2) ? $v : $f;}
 
 //
 // Retour a l'ecran du lien de confirmation d'une signature de petition.
diff --git a/inc-login_public.php3 b/inc-login_public.php3
index fbbbac6c5e68e6e8918f5b74a9203bc7c3ccb3e4..a44b7c86419e07be5b65c5830c0a0b511601d48d 100644
--- a/inc-login_public.php3
+++ b/inc-login_public.php3
@@ -102,7 +102,7 @@ function login_pour_tous($login, $cible, $message, $action, $mode) {
 				       'url' => $cible,
 				       'auth' => $auth,
 				       'mode' => $mode,
-				       'oubli' => (tester_mail() ? 'spip_pass.php3?mode=oubli_pass' : ''),
+				       'oubli' => (tester_mail() ? ' ' : ''),
 				       'echec_cookie' => ($echec_cookie ? ' ' : ''),
 				       'spip_lang_left' => $spip_lang_left,
 				       'message' => ($message ? ' ' : ''),
diff --git a/spip_inscription.php3 b/spip_inscription.php3
new file mode 100644
index 0000000000000000000000000000000000000000..fa79c76087e2f5659ac645f4de30ee0777948436
--- /dev/null
+++ b/spip_inscription.php3
@@ -0,0 +1,12 @@
+<?php
+include ("ecrire/inc_version.php3");
+include_ecrire("inc_presentation.php3");
+include_local("inc-formulaire_inscription.php3");
+include_local("inc-public-global.php3"); 
+include_ecrire("inc_lang.php3"); 
+utiliser_langue_site();
+utiliser_langue_visiteur();
+install_debut_html(_T('pass_vousinscrire'));
+inclure_balise_dynamique(balise_formulaire_inscription_dyn($mode, $mail_inscription, $nom_inscription));
+install_fin_html();
+?>
diff --git a/spip_pass.php3 b/spip_pass.php3
index c85731bfc11e108ea81fee799ed6e671a4ef46aa..9a3c506261d0c3a0ddf5670b51efdd986ac17767 100644
--- a/spip_pass.php3
+++ b/spip_pass.php3
@@ -10,49 +10,38 @@ include_ecrire("inc_texte.php3");
 include_ecrire("inc_meta.php3");
 include_ecrire("inc_mail.php3");
 include_ecrire("inc_acces.php3");
+include_local("inc-public-global.php3"); 
 
-utiliser_langue_site();
-utiliser_langue_visiteur();
+// Ce fichier est celui d'une balise dynamique qui s'ignore.
 
-unset($erreur);
+function formulaire_oubli_dyn($p, $oubli)
+{
 
-$mode = $GLOBALS['mode'];
-if ($oubli_pass == 'oui') $mode = 'oubli_pass';	# backward compatible
+$erreur = '';
 
-// recuperer le cookie de relance
+// au 3e appel la variable P est positionnee par le script lui-meme
+// et oubli = mot passe. Le choix du nom P est impose par pass_mail_passcookie
 if ($p = addslashes($p)) {
-	$mode = 'oubli_pass';
 	$res = spip_query ("SELECT * FROM spip_auteurs WHERE cookie_oubli='$p' AND statut<>'5poubelle' AND pass<>''");
-	if ($row = spip_fetch_array($res)) {
-		if ($pass) {
-			$mdpass = md5($pass);
-			$htpass = generer_htpass($pass);
+	if (!$row = spip_fetch_array($res)) 
+		$erreur = _T('pass_erreur_code_inconnu');
+	else {
+		if ($oubli) {
+			$mdpass = md5($oubli);
+			$htpass = generer_htpass($oubli);
 			spip_query ("UPDATE spip_auteurs SET htpass='$htpass', pass='$mdpass', alea_actuel='',
 				cookie_oubli='' WHERE cookie_oubli='$p'");
 
 			$login = $row['login'];
 			$erreur = "<b>"._T('pass_nouveau_enregistre')."</b>".
 			"<p>"._T('pass_rappel_login', array('login' => $login));
-		} else {
-			install_debut_html(_T('pass_nouveau_pass'));
-			echo "<p><br>",
-			"<form action='spip_pass.php3' method='post'>",
-			"<input type='hidden' name='p' value='".htmlspecialchars($p)."'>",
-			_T('pass_choix_pass')."<br>\n",
-			"<input type='password' name='pass' value=''>",
-			'<input type=submit class="fondl" value="'._T('pass_ok').'"></div></form>';
-			install_fin_html();
-			exit;
 		}
 	}
-	else
-		$erreur = _T('pass_erreur_code_inconnu');
-}
-
-// envoyer le cookie de relance mot de passe
-if ($email_oubli) {
-	if (email_valide($email_oubli)) {
-		$email = addslashes($email_oubli);
+ } else { 
+  // si p absent, oubli vaut alors le mail au 2e appel, vide au 1e
+  if ($oubli) {
+	if (email_valide($oubli)) {
+		$email = addslashes($oubli);
 		$res = spip_query("SELECT * FROM spip_auteurs WHERE email ='$email'");
 		if ($row = spip_fetch_array($res)) {
 			if ($row['statut'] == '5poubelle' OR $row['pass'] == '')
@@ -61,74 +50,30 @@ if ($email_oubli) {
 				$cookie = creer_uniqid();
 				spip_query("UPDATE spip_auteurs SET cookie_oubli = '$cookie' WHERE email ='$email'");
 
-				$nom_site_spip = lire_meta("nom_site");
-				$adresse_site = lire_meta("adresse_site");
-
-				$message = _T('pass_mail_passcookie', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site, 'cookie' => $cookie));
-				if (envoyer_mail($email, "[$nom_site_spip] "._T('pass_oubli_mot'), $message))
+				if (envoyer_mail($email,
+						 "[$nom_site_spip] " ._T('pass_oubli_mot'),
+						 _T('pass_mail_passcookie',
+						    array('nom_site_spip' => lire_meta("nom_site"),
+							  'adresse_site' => lire_meta("adresse_site"), 
+							  'cookie' => $cookie))))
 					$erreur = _T('pass_recevoir_mail');
 				else
 					$erreur = _T('pass_erreur_probleme_technique');
 			}
 		}
 		else
-			$erreur = _T('pass_erreur_non_enregistre', array('email_oubli' => htmlspecialchars($email_oubli)));
-	}
-	else
-		$erreur = _T('pass_erreur_non_valide', array('email_oubli' => htmlspecialchars($email_oubli)));
-}
-
-if ($mode == 'oubli_pass') {
-	// debut presentation
-	install_debut_html(_T('pass_mot_oublie'));
-
-	echo "<p>";
-	if ($erreur)
-		echo $erreur;
-	else {
-		echo _T('pass_indiquez_cidessous'),
-			"<p>",
-			'<form action="spip_pass.php3" method="post">',
-			'<div align="right">',
-			'<input type="text" class="fondo" name="email_oubli" value="">',
-			'<input type="hidden" name="mode" value="oubli_pass">',
-			'<input type=submit class="fondl" value="'._T('pass_ok').'"></div></form>';
-	}
-}
-else {
-	$inscriptions = (lire_meta("accepter_inscriptions") == "oui");
-
-	if ($inscriptions OR (lire_meta('accepter_visiteurs') == 'oui') OR (lire_meta('forums_publics') == 'abo')) {
-	// debut presentation
-
-		if (!$mode)
-		  $mode = $inscriptions ? 'redac' : 'forum';
-
-		install_debut_html(_T('pass_vousinscrire'));
-		echo "<p>",
-		  (($mode != 'forum') ? _T('pass_espace_prive_bla') :
-		   _T('pass_forum_bla')),
-		  "\n</p>";
-		include_local("inc-formulaire_inscription.php3");
-		include_local("inc-public-global.php3"); 
-		inclure_balise_dynamique(balise_formulaire_inscription_dyn($mode,
-							$GLOBALS['mail_inscription'],
-							$GLOBALS['nom_inscription']));
-	}
-	else {
-		install_debut_html(_T('pass_erreur'));
-		echo "<p>",_T('pass_rien_a_faire_ici'), '</p>';
+			$erreur = _T('pass_erreur_non_enregistre', array('email_oubli' => htmlspecialchars($oubli)));
+	} else {
+		$erreur = _T('pass_erreur_non_valide', array('email_oubli' => htmlspecialchars($oubli)));
 	}
+  }
+ }
+ return $erreur ? $erreur : array('formulaire_oubli', 0, array('p' => $p));
 }
 
-echo "<p align='right'>",
-http_script("if (window.opener) document.write(\"<a href='javascript:close();'>\");
-else document.write(\"<a href='./'>\");
-document.write(\""._T('pass_quitter_fenetre')."</a>\");",
-	    '',
-	    "[<a href='./'>"._T('pass_retour_public')."</a>]"),
-  "</p>";
-
+utiliser_langue_site();
+utiliser_langue_visiteur();
+install_debut_html(_T('pass_mot_oublie'));
+inclure_balise_dynamique(formulaire_oubli_dyn($p, $oubli));
 install_fin_html();
-
 ?>