$.fn.passwordStrength = function( options ){
  return this.each(function(){
    var that = this;that.opts = {};
    that.opts = $.extend({}, $.fn.passwordStrength.defaults, options);

    that.div = $(that.opts.targetDiv);
    that.defaultClass = that.div.attr('class');

    that.percents = (that.opts.classes.length) ? 100 / that.opts.classes.length : 100;

     v = $(this)
    .keyup(function(){
      if( typeof el == "undefined" )
        this.el = $(this);
      var s = getPasswordStrength (this.value);
      var p = this.percents;
      var t = Math.floor( s / p );

      if( 100 <= s )
        t = this.opts.classes.length - 1;

      this.div
        .removeAttr('class')
        .addClass( this.defaultClass )
        .addClass( this.opts.classes[ t ] );

    })
    .after('<br>')
    .next()
    .click(function(){
      $(this).prev().val( randomPassword() ).trigger('keyup');
      return false;
    });
  });

  function getPasswordStrength(H){
    var D=(H.length);
    if(D>5){
      D=5
    }
    var F=H.replace(/[0-9]/g,"");
    var G=(H.length-F.length);
    if(G>3){G=3}
    var A=H.replace(/\W/g,"");
    var C=(H.length-A.length);
    if(C>3){C=3}
    var B=H.replace(/[A-Z]/g,"");
    var I=(H.length-B.length);
    if(I>3){I=3}
    var E=((D*10)-20)+(G*10)+(C*15)+(I*10);
    if(E<0){E=0}
    if(E>100){E=100}
    return E
  }

  function randomPassword() {
    var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$_+";
    var size = 10;
    var i = 1;
    var ret = ""
    while ( i <= size ) {
      $max = chars.length-1;
      $num = Math.floor(Math.random()*$max);
      $temp = chars.substr($num, 1);
      ret += $temp;
      i++;
    }
    return ret;
  }

};

$.fn.passwordStrength.defaults = {
  classes : Array('is10','is20','is30','is40','is50','is60','is70','is80','is90','is100'),
  targetDiv : '#passwordStrengthDiv',
  cache : {}
}
$(document)
.ready(function(){
  $('input[name="password"]').passwordStrength();
  $('input[name="password2"]').passwordStrength({targetDiv: '#passwordStrengthDiv2',classes : Array('is10','is20','is30','is40')});

});

