Index: modules/system/system.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.css,v
retrieving revision 1.62
diff -u -p -r1.62 system.css
--- modules/system/system.css	5 Sep 2009 06:07:58 -0000	1.62
+++ modules/system/system.css	10 Sep 2009 02:44:11 -0000
@@ -526,14 +526,22 @@ html.js .js-hide {
 #password-indicator {
   border: 1px solid #B4B4B4;
   float: right;
-  height: 0.9em;
+  height: 1em;
   margin: 0.3em 0.80em 0 0.3em;
+  position: relative;
   width: 5em;
 }
-#password-indicator div {
+#password-indicator #indicator {
   height: 100%;
+  position: absolute;
   width: 0%;
-  background-color: #47C965;
+}
+#password-indicator #label {
+  font-size: 0.9em;
+  line-height: 1em;
+  position: absolute;
+  text-align: center;
+  width: 100%;
 }
 input.password-confirm, input.password-field {
   width: 16em;
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.1040
diff -u -p -r1.1040 user.module
--- modules/user/user.module	9 Sep 2009 11:27:00 -0000	1.1040
+++ modules/user/user.module	10 Sep 2009 02:44:14 -0000
@@ -2805,7 +2805,11 @@ function _user_password_dynamic_validati
         'confirmSuccess' => t('yes'),
         'confirmFailure' => t('no'),
         'confirmTitle' => t('Passwords match:'),
-        'username' => (isset($user->name) ? $user->name : ''))),
+        'username' => (isset($user->name) ? $user->name : ''),
+        'weak' => t('weak'),
+        'fair' => t('fair'),
+        'strong' => t('strong'),
+      )),
       'setting');
     $complete = TRUE;
   }
Index: modules/user/user.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.js,v
retrieving revision 1.17
diff -u -p -r1.17 user.js
--- modules/user/user.js	31 Aug 2009 05:51:08 -0000	1.17
+++ modules/user/user.js	10 Sep 2009 02:44:14 -0000
@@ -19,7 +19,8 @@ Drupal.behaviors.password = {
       innerWrapper.addClass('password-parent');
 
       // Add the description box at the end.
-      var passwordMeter = '<div id="password-strength"><div class="password-strength-title">' + translate.strengthTitle + '</div><div id="password-indicator"><div id="indicator"></div></div></div>';
+      var passwordMeter = '<div id="password-strength"><div class="password-strength-title">' + translate.strengthTitle + '</div><div id="password-indicator"><div id="indicator"></div><div id="label"></div></div>';
+
       $('div.description', outerWrapper).prepend('<div class="password-suggestions"></div>');
       $(innerWrapper).append(passwordMeter);
       var passwordDescription = $('div.password-suggestions', outerWrapper).hide();
@@ -49,8 +50,21 @@ Drupal.behaviors.password = {
           passwordDescription.show();
         }
 
+        var indicator = $('#indicator');
         // Adjust the length of the strength indicator.
-        $('#indicator').css('width', result.strength + '%');
+        indicator.css('width', result.strength + '%');
+        
+        // Adjust the color of the strength indicator.
+        // var green = Math.ceil(result.strength * 2.55).toString(16);
+        if (result.strength < 35) {
+          indicator.css('background-color', '#f00');
+        } else if (result.strength < 85) {
+          indicator.css('background-color', '#ff0');
+        } else {
+          indicator.css('background-color', '#0f0');
+        }
+        var label = result.strength < 35 ? translate.weak : result.strength < 85 ? translate.fair : translate.strong;
+        $('#label').html(label);
 
         passwordCheckMatch();
       };
