Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.336
diff -u -p -r1.336 form.inc
--- includes/form.inc	22 May 2009 07:39:09 -0000	1.336
+++ includes/form.inc	24 May 2009 09:37:11 -0000
@@ -1626,6 +1626,7 @@ function form_process_password_confirm($
     '#value' => empty($element['#value']) ? NULL : $element['#value']['pass1'],
     '#required' => $element['#required'],
     '#attributes' => array('class' => 'password-field'),
+    '#description' => t('A strong password consists of at least 6 characters, lower-case letters, upper-case letters, numbers and punctuation.'),
   );
   $element['pass2'] =  array(
     '#type' => 'password',
@@ -1633,6 +1634,7 @@ function form_process_password_confirm($
     '#value' => empty($element['#value']) ? NULL : $element['#value']['pass2'],
     '#required' => $element['#required'],
     '#attributes' => array('class' => 'password-confirm'),
+    '#description' => t('Enter a matching password.'),
   );
   $element['#element_validate'] = array('password_confirm_validate');
   $element['#tree'] = TRUE;
Index: modules/system/system-rtl.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system-rtl.css,v
retrieving revision 1.15
diff -u -p -r1.15 system-rtl.css
--- modules/system/system-rtl.css	20 Apr 2009 20:07:14 -0000	1.15
+++ modules/system/system-rtl.css	24 May 2009 09:37:11 -0000
@@ -95,12 +95,6 @@ input.password-confirm {
   margin-left: 10px;
   margin-right: 0;
 }
-.password-strength-title {
-  float: right;
-}
-.password-parent {
-  float: right;
-}
 
 .draggable a.tabledrag-handle {
   float: right;
Index: modules/system/system.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.css,v
retrieving revision 1.54
diff -u -p -r1.54 system.css
--- modules/system/system.css	11 Apr 2009 22:19:45 -0000	1.54
+++ modules/system/system.css	24 May 2009 09:37:12 -0000
@@ -521,14 +521,12 @@ html.js .js-hide {
 /*
 ** Password strength indicator
 */
-.password-strength-title {
-  float: left; /* LTR */
+#password-strength {
+  margin-top: 1em;
 }
 #password-indicator {
   border: 1px solid #B4B4B4;
-  float: right;
-  height: 0.9em;
-  margin: 0.3em 0.80em 0 0.3em;
+  height: 1em;
   width: 5em;
 }
 #password-indicator div {
@@ -536,31 +534,6 @@ html.js .js-hide {
   width: 0%;
   background-color: #47C965;
 }
-input.password-confirm, input.password-field {
-  width: 16em;
-  margin-bottom: 0.4em;
-}
 div.password-suggestions {
-  padding: 0.2em 0.5em;
-  margin: 0.7em 0;
-  width: 38.5em;
-  border: 1px solid #B4B4B4;
-}
-div.password-suggestions ul {
-  margin-bottom: 0;
-}
-.password-parent {
-  margin: 0;
-  float: left; /* LTR */
-  width: 17.3em;
-}
-
-/*
-** Password confirmation checker
-*/
-.confirm-parent {
-  margin: 0;
-}
-div.password-confirm {
-  visibility: hidden;
+  margin-bottom: 1em;
 }
Index: modules/user/user.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.js,v
retrieving revision 1.14
diff -u -p -r1.14 user.js
--- modules/user/user.js	16 May 2009 20:10:50 -0000	1.14
+++ modules/user/user.js	24 May 2009 09:37:12 -0000
@@ -19,13 +19,16 @@ Drupal.behaviors.password = {
       innerWrapper.addClass('password-parent');
 
       // Add the description box at the end.
+      $('#edit-pass-pass1-wrapper > div.description').hide();
       var passwordMeter = '<div id="password-strength"><div class="password-strength-title">' + translate.strengthTitle + '</div><div id="password-indicator"><div id="indicator"></div></div></div>';
-      $('div.description', outerWrapper).prepend('<div class="password-suggestions"></div>');
       $(innerWrapper).append(passwordMeter);
-      var passwordDescription = $('div.password-suggestions', outerWrapper).hide();
+      $('#edit-pass-wrapper > div.description').before('<div class="password-suggestions"></div>');
+      var passwordDescription = $('div.password-suggestions', outerWrapper);
+      $('div.password-suggestions').html(translate.suggestionTitle + '<ul><li class="too-short">' + translate.tooShort + '</li><li class="add-lower-case">' + translate.addLowerCase + '</li><li class="add-upper-case">' + translate.addUpperCase + '</li><li class="add-numbers">' + translate.addNumbers + '</li><li class="add-punctuation">' + translate.addPunctuation + '</li><li class="same-as-username">' + translate.sameAsUsername + '</li></ul>');
 
       // Add the password confirmation layer.
-      $('input.password-confirm', outerWrapper).after('<div class="password-confirm">' + translate['confirmTitle'] + ' <span></span></div>').parent().addClass('confirm-parent');
+      $('#edit-pass-pass2-wrapper > div.description').after('<div class="password-confirm">' + translate['confirmTitle'] + ' <span></span></div>').parent().addClass('confirm-parent');
+      $('div.password-confirm').hide();
       var confirmInput = $('input.password-confirm', outerWrapper);
       var confirmResult = $('div.password-confirm', outerWrapper);
       var confirmChild = $('span', confirmResult);
@@ -36,19 +39,6 @@ Drupal.behaviors.password = {
         // Evaluate the password strength.
         var result = Drupal.evaluatePasswordStrength(passwordInput.val(), settings.password);
 
-        // Update the suggestions for how to improve the password.
-        if (passwordDescription.html() != result.message) {
-          passwordDescription.html(result.message);
-        }
-
-        // Only show the description box if there is a weakness in the password.
-        if (result.strength == 100) {
-          passwordDescription.hide();
-        }
-        else {
-          passwordDescription.show();
-        }
-
         // Adjust the length of the strength indicator.
         $('#indicator').css('width', result.strength + '%');
 
@@ -61,9 +51,6 @@ Drupal.behaviors.password = {
         if (confirmInput.val()) {
           var success = passwordInput.val() === confirmInput.val();
 
-          // Show the confirm result.
-          confirmResult.css({ visibility: 'visible' });
-
           // Remove the previous styling if any exists.
           if (this.confirmClass) {
             confirmChild.removeClass(this.confirmClass);
@@ -71,11 +58,14 @@ Drupal.behaviors.password = {
 
           // Fill in the success message and set the class accordingly.
           var confirmClass = success ? 'ok' : 'error';
-          confirmChild.html(translate['confirm' + (success ? 'Success' : 'Failure')]).addClass(confirmClass);
+          if (confirmClass === 'ok') {
+            $('#edit-pass-pass2-wrapper > div.description').html('<span>' + translate.confirmSuccess + '</span>')
+          }
           this.confirmClass = confirmClass;
-        }
-        else {
-          confirmResult.css({ visibility: 'hidden' });
+          if (confirmClass === 'error') {
+            $('#edit-pass-pass2-wrapper > div.description').html('<span>' + translate.confirmFailure + '</span>')
+          }
+          $('#edit-pass-pass2-wrapper > div.description > span').addClass(confirmClass);
         }
       };
 
@@ -107,27 +97,45 @@ Drupal.evaluatePasswordStrength = functi
 
   // Lose 10 points for every character less than 6.
   if (password.length < 6) {
-    msg.push(translate.tooShort);
+    $('li.too-short').html(translate.tooShort);
     strength -= (6 - password.length) * 10;
   }
+  else {
+    $('li.too-short').html('<span class="ok">' + translate.tooShort + '</span>');
+  }
 
   // Count weaknesses.
   if (!hasLowercase) {
-    msg.push(translate.addLowerCase);
+    $('li.add-lower-case').html(translate.addLowerCase);
     weaknesses++;
   }
+  else {
+    $('li.add-lower-case').html('<span class="ok">' + translate.addLowerCase + '</span>');
+  }
+
   if (!hasUppercase) {
-    msg.push(translate.addUpperCase);
+    $('li.add-upper-case').html(translate.addUpperCase);
     weaknesses++;
   }
+  else {
+    $('li.add-upper-case').html('<span class="ok">' + translate.addUpperCase + '</span>');
+  }
+
   if (!hasNumbers) {
-    msg.push(translate.addNumbers);
+    $('li.add-numbers').html(translate.addNumbers);
     weaknesses++;
   }
+  else {
+    $('li.add-numbers').html('<span class="ok">' + translate.addNumbers + '</span>');
+  }
+
   if (!hasPunctuation) {
-    msg.push(translate.addPunctuation);
+    $('li.add-punctuation').html(translate.addPunctuation);
     weaknesses++;
   }
+  else {
+    $('li.add-punctuation').html('<span class="ok">' + translate.addPunctuation + '</span>');
+  }
 
   // Apply penalty for each weakness (balanced against length penalty).
   switch (weaknesses) {
@@ -150,13 +158,15 @@ Drupal.evaluatePasswordStrength = functi
 
   // Check if password is the same as the username.
   if (password !== '' && password.toLowerCase() === username.toLowerCase()) {
-    msg.push(translate.sameAsUsername);
+    $('li.same-as-username').html(translate.sameAsUsername);
     // Passwords the same as username are always very weak.
     strength = 5;
   }
+  else {
+    $('li.same-as-username').html('<span class="ok">' + translate.sameAsUsername + '</span>');
+  }
 
   // Assemble the final message.
-  msg = translate.hasWeaknesses + '<ul><li>' + msg.join('</li><li>') + '</li></ul>';
   return { strength: strength, message: msg };
 };
 
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.990
diff -u -p -r1.990 user.module
--- modules/user/user.module	22 May 2009 08:04:40 -0000	1.990
+++ modules/user/user.module	24 May 2009 09:37:13 -0000
@@ -2655,16 +2655,15 @@ function _user_password_dynamic_validati
     drupal_add_js(array(
       'password' => array(
         'strengthTitle' => t('Password strength:'),
-        'hasWeaknesses' => t('To make your password stronger:'),
+        'suggestionTitle' => t('To make a strong password:'),
         'tooShort' => t('Make it at least 6 characters'),
         'addLowerCase' => t('Add lowercase letters'),
         'addUpperCase' => t('Add uppercase letters'),
         'addNumbers' => t('Add numbers'),
         'addPunctuation' => t('Add punctuation'),
         'sameAsUsername' => t('Make it different from your username'),
-        'confirmSuccess' => t('yes'),
-        'confirmFailure' => t('no'),
-        'confirmTitle' => t('Passwords match:'),
+        'confirmSuccess' => t('Passwords match.'),
+        'confirmFailure' => t('Passwords do not match.'),
         'username' => (isset($user->name) ? $user->name : ''))),
       'setting');
     $complete = TRUE;
