diff --git a/.gitattributes b/.gitattributes
index 3ed0203ee095d7ea6339a4888eb9b438535a68e0..4dcb4a70a9ec1df95243a08d80bb260d593fbc4f 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -723,6 +723,7 @@ prive/javascript/jquery.cookie.js -text
 prive/javascript/jquery.form.js -text
 prive/javascript/jquery.ifixpng.js -text
 prive/javascript/jquery.js -text
+prive/javascript/login.js -text
 prive/javascript/multilang.js -text
 prive/javascript/pause.js -text
 prive/minipres.css -text
diff --git a/prive/formulaires/login.html b/prive/formulaires/login.html
index 8704f45c2dade9901abc2382ba8eea72a55a3d4b..78410ca6060d18775280bff83d59e1339ca06265 100644
--- a/prive/formulaires/login.html
+++ b/prive/formulaires/login.html
@@ -58,79 +58,18 @@
 </div>
 [(#REM) javascript qui gere la securite du login en evitant de faire circuler le pass en clair]
 <script type="text/javascript" src="#EVAL{_DIR_JAVASCRIPT}md5.js"></script>
-<script type='text/javascript'>/*<!#EVAL{chr(91)}CDATA#EVAL{chr(91)}*/
+<script type="text/javascript" src="#EVAL{_DIR_JAVASCRIPT}login.js"></script>
+<script type='text/javascript'>
 var alea_actuel='#ENV{_alea_actuel}';
 var alea_futur='#ENV{_alea_futur}';
 var login='#ENV{var_login,''}';
+var page_auteur = '#URL_PAGE{informer_auteur}';
 var informe_auteur_en_cours = false;
 var attente_informe = 0;
-function affiche_login_secure() {
-	if (alea_actuel)
-		jQuery('#pass_securise').show();
-	else
-		jQuery('#pass_securise').hide();
-}
-function informe_auteur(c){
-	informe_auteur_en_cours = false;
-	eval('c = '+c); // JSON
-	if (c) {
-		alea_actuel = c.alea_actuel;
-		alea_futur = c.alea_futur;
-		// indiquer le cnx si on n'y a pas touche
-		jQuery('input#session_remember:not(.modifie)')
-		.attr('checked',(c.cnx=='1')?'checked':'');
-	} else {
-		alea_actuel = '';
-	}
-	if (c.logo)
-		jQuery('#spip_logo_auteur').html(c.logo);
-	else
-		jQuery('#spip_logo_auteur').html('');
-	affiche_login_secure();
-}
-function calcule_md5_pass(pass){
-	if (alea_actuel) {
-		jQuery('input[@name=password]').attr('value','');
-		jQuery('input[@name=session_password_md5]').attr('value',calcMD5(alea_actuel + pass));
-		jQuery('input[@name=next_session_password_md5]').attr('value',calcMD5(alea_futur + pass));
-	}
-}
-function actualise_auteur(){
-	if (login != jQuery('#var_login').attr('value')) {
-		informe_auteur_en_cours = true;
-		login = jQuery('#var_login').attr('value');
-		var currentTime = new Date();// on passe la date en var pour empecher la mise en cache de cette requete (bug avec FF3 & IE7)
-		jQuery.get('#URL_PAGE{informer_auteur}',{var_login:login,var_compteur:currentTime.getTime()},informe_auteur);
-	}
-}
+
 jQuery('#password')
 .after("<em id='pass_securise'><img src='#EVAL{_DIR_IMG_PACK}securise.gif' width='16' height='16' alt='<:login_securise:>' title='<:login_securise:>' \/><\/em>");
 affiche_login_secure();
-
 jQuery('#var_login').change(actualise_auteur);
-
-jQuery('form#formulaire_login').submit(function(){
-	actualise_auteur();
-	pass = jQuery('input[@name=password]').attr('value');
-	// ne pas laisser le pass d'un auteur "auth=spip" circuler en clair
-	if (pass) {
-		// si l'information est en cours, retenter sa chance
-		// pas plus de 5 fois (si profondeur_url fausse, la requete d'information echoue et ne repond jamais)
-		if (informe_auteur_en_cours && (attente_informe<5)) { 
-			attente_informe++;
-			jQuery('form#formulaire_login').animeajax().find('p.boutons input').before(attente_informe); // montrer qu'il se passe quelque chose
-			setTimeout(function(){
-				jQuery('form#formulaire_login').submit();
-			}, 1000);
-			return false;
-		}
-
-		// Si on a l'alea, on peut lancer le submit apres avoir hashe le pass
-		if (alea_actuel) {
-			calcule_md5_pass(pass);
-		}
-		// sinon c'est que l'auteur n'existe pas
-		// OU qu'il sera accepte par LDAP ou autre auth
-	}
-});
-/*#EVAL{chr(93)}[(#EVAL{chr(93)})]>*/</script>
\ No newline at end of file
+jQuery('form#formulaire_login').submit(login_submit);
+</script>
diff --git a/prive/formulaires/login.php b/prive/formulaires/login.php
index dc5438c04b7fd1d47a90b23d4e58d737e3284512..bd8dc88cd066f5eb7e26e2c5d705ef2c22157f3a 100644
--- a/prive/formulaires/login.php
+++ b/prive/formulaires/login.php
@@ -30,7 +30,23 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null)
 			$login = $regs[1];
 	} 
 
-	$valeurs = informer_login($login);
+	$row = informer_login($login);
+
+	// Construire l'environnement du squelette
+	// Ne pas proposer de "rester connecte quelques jours"
+	// si la duree de l'alea est inferieure a 12 h (valeur par defaut)
+		
+	$valeurs = array(
+		'var_login' => $login,
+		'editable' => !$row,
+		'cnx' => $row['cnx'],
+		'auth_http' => login_auth_http(),
+		'rester_connecte' => ((_RENOUVELLE_ALEA < 12*3600)? '' : ' '),
+		'_logo' => $row['logo'],
+		'_alea_actuel' => isset($row['alea_actuel'])?$row['alea_actuel']:'',
+		'_alea_futur' => isset($row['alea_futur'])?$row['alea_futur']:'',
+		'_hidden' => '<input type="hidden" name="session_password_md5" value="" /><input type="hidden" name="next_session_password_md5" value="" />'
+		);
 
 	if ($erreur OR !$GLOBALS['visiteur_session']['id_auteur'])
 		$valeurs['editable'] = true;
@@ -63,42 +79,29 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null)
 	return $valeurs;
 }
 
-// Construire l'environnement du squelette
+// Cette fonction sert a 2 squelettes: login et informer_auteur
+// Ce dernier transmet le tableau ci-dessous a la fonction JS informer_auteur
+// Il est invoque par la fonction JS actualise_auteur via la globale JS
+// page_auteur=#URL_PAGE{informer_auteur} dans le squelette login
+// N'y aurait-il pas plus simple ?
 
 // http://doc.spip.org/@informer_login
 function informer_login($login){
-	$row = $logo = $cnx = '';
-	if ($login) {
-		$row = retrouver_login($login);
-		// desactiver le hash md5 si pas auteur spip ?
-		if ($row) {
-			if ($row['source']!=='spip'){
-				$row['alea_actuel']='';
-				$row['alea_futur']='';
-			}
-			$prefs = unserialize($row['prefs']);
-			$cnx = ($prefs['cnx'] == 'perma') ? '1' : '0';
-			unset($row['prefs']);
-			unset($row['source']);		
-			$logo = recuperer_fond('formulaires/inc-logo_auteur', $row);
-			verifier_visiteur();
-		}
+	if (!$login) return array();
+	$row = retrouver_login($login);
+	if (!$row) return array();
+	// desactiver le hash md5 si pas auteur spip ?
+	if ($row['source']!=='spip'){
+		$row['alea_actuel']= '';
+		$row['alea_futur']= '';
 	}
-
-	// Ne pas proposer de "rester connecte quelques jours"
-	// si la duree de l'alea est inferieure a 12 h (valeur par defaut)
-		
-	return array(
-		'var_login' => $login,
-		'editable' => !$row,
-		'cnx' => $cnx,
-		'auth_http' => login_auth_http(),
-		'rester_connecte' => ((_RENOUVELLE_ALEA < 12*3600)? '' : ' '),
-		'_logo' => $logo,
-		'_alea_actuel' => isset($row['alea_actuel'])?$row['alea_actuel']:'',
-		'_alea_futur' => isset($row['alea_futur'])?$row['alea_futur']:'',
-		'_hidden' => '<input type="hidden" name="session_password_md5" value="" /><input type="hidden" name="next_session_password_md5" value="" />'
-		);
+	$prefs = unserialize($row['prefs']);
+	$row['cnx'] = ($prefs['cnx'] == 'perma') ? '1' : '0';
+	$row['logo'] = recuperer_fond('formulaires/inc-logo_auteur', $row);
+	unset($row['prefs']);
+	unset($row['source']);		
+	verifier_visiteur();
+	return $row;
 }
 
 // Gerer le cas ou un utilisateur ne souhaite pas de cookie
@@ -239,6 +242,10 @@ function retrouver_login($login)
 			"pass<>'' OR source<>'spip') AND (" . 
 			"login=$l)"))
 		return $r;
+	// Si pas d'auteur avec ce login
+	// regarder s'il a saisi son nom ou son mail.
+	// Ne pas fusionner avec la requete precedente
+	// car un nom peut etre homonyme d'un autre login
 	else return sql_fetsel('id_auteur,login,alea_actuel,alea_futur,prefs,source,login', 'spip_auteurs',
 			"statut<>'5poubelle' AND (" .
 			"pass<>'' OR source<>'spip') AND (" . 
diff --git a/prive/javascript/login.js b/prive/javascript/login.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb8502b7e292d489257b565ee98dcea4c52e12cf
--- /dev/null
+++ b/prive/javascript/login.js
@@ -0,0 +1,67 @@
+function affiche_login_secure() {
+	if (alea_actuel)
+		jQuery('#pass_securise').show();
+	else
+		jQuery('#pass_securise').hide();
+}
+
+function informe_auteur(c){
+	informe_auteur_en_cours = false;
+	eval('c = '+c); // JSON envoye par informer_auteur.html
+	if (c) {
+		alea_actuel = c.alea_actuel;
+		alea_futur = c.alea_futur;
+		// indiquer le cnx si on n'y a pas touche
+		jQuery('input#session_remember:not(.modifie)')
+		.attr('checked',(c.cnx=='1')?'checked':'');
+	} else {
+		alea_actuel = '';
+	}
+	if (c.logo)
+		jQuery('#spip_logo_auteur').html(c.logo);
+	else
+		jQuery('#spip_logo_auteur').html('');
+	affiche_login_secure();
+}
+
+function calcule_md5_pass(pass){
+	if (alea_actuel) {
+		jQuery('input[@name=password]').attr('value','');
+		jQuery('input[@name=session_password_md5]').attr('value',calcMD5(alea_actuel + pass));
+		jQuery('input[@name=next_session_password_md5]').attr('value',calcMD5(alea_futur + pass));
+	}
+}
+
+function actualise_auteur(){
+	if (login != jQuery('#var_login').attr('value')) {
+		informe_auteur_en_cours = true;
+		login = jQuery('#var_login').attr('value');
+		var currentTime = new Date();// on passe la date en var pour empecher la mise en cache de cette requete (bug avec FF3 & IE7)
+		jQuery.get(page_auteur, {var_login:login,var_compteur:currentTime.getTime()},informe_auteur);
+	}
+}
+
+function login_submit(){
+	actualise_auteur();
+	pass = jQuery('input[@name=password]').attr('value');
+	// ne pas laisser le pass d'un auteur "auth=spip" circuler en clair
+	if (pass) {
+		// si l'information est en cours, retenter sa chance
+		// pas plus de 5 fois (si profondeur_url fausse, la requete d'information echoue et ne repond jamais)
+		if (informe_auteur_en_cours && (attente_informe<5)) { 
+			attente_informe++;
+			jQuery('form#formulaire_login').animeajax().find('p.boutons input').before(attente_informe); // montrer qu'il se passe quelque chose
+			setTimeout(function(){
+				jQuery('form#formulaire_login').submit();
+			}, 1000);
+			return false;
+		}
+
+		// Si on a l'alea, on peut lancer le submit apres avoir hashe le pass
+		if (alea_actuel) {
+			calcule_md5_pass(pass);
+		}
+		// sinon c'est que l'auteur n'existe pas
+		// OU qu'il sera accepte par LDAP ou autre auth
+	}
+}