/**
 * jquery password_strength plug-in
 * Copyright (c) 2009 myPocket technologies (www.mypocket-technologies.com)
 * @author Darren Mason (djmason9@gmail.com)
 * @date 3/13/2009
 * @projectDescription Password Strength Meter is a jQuery plug-in provide you smart algorithm to detect a password strength. Based on Firas Kassem orginal plugin - http://phiras.wordpress.com/2007/04/08/password-strength-meter-a-jquery-plugin/
 * @version 1.0.1
 * @requires jquery.js (tested with 1.2.6)
 *
 * modify by:nicolas-zhao(zhaoxiaodong)
 * modify date:Mar-24-2009
 */
(
function($){$.fn.passStrength=function(options){var opts=$.extend({badPass:"bad",goodPass:"good",strongPass:"strong",badPassColor:"#ff0000",goodPassColor:"#FFE370",strongPassColor:"#009900",minlength:"6"},options);return this.each(function(){$(this).keyup(function(){$(this).parent().find(".password-strength").remove();$(this).parent().append("<span class=\"password-strength\"><span class=\"box\"><span>"+opts.badPass+"</span></span><span class=\"box\"><span>"+opts.goodPass+"</span></span><span class=\"box last\"><span>"+opts.strongPass+"</span></span></span>");var boxsOuter=$(this).parent().find(".password-strength");var boxs=boxsOuter.find(".box");var results=teststrength($(this).val(),opts);if(results!=0){if(results==1){$(boxs[0]).css("background",opts.badPassColor);}if(results==2){$(boxs[0]).css("background",opts.goodPassColor);$(boxs[1]).css("background",opts.goodPassColor);}if(results==3){$.each(boxs,function(i,n){$(n).css("background",opts.strongPassColor);});}}});});};function teststrength(password,option){var score=0;if(password.length<option.minlength){return 0;}score+=password.length*4;score+=(checkRepetition(1,password).length-password.length)*1;score+=(checkRepetition(2,password).length-password.length)*1;score+=(checkRepetition(3,password).length-password.length)*1;score+=(checkRepetition(4,password).length-password.length)*1;if(password.match(/(.*[0-9].*[0-9].*[0-9])/)){score+=5;}if(password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)){score+=5;}if(password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)){score+=10;}if(password.match(/([a-zA-Z])/)&&password.match(/([0-9])/)){score+=15;}if(password.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&password.match(/([0-9])/)){score+=15;}if(password.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&password.match(/([a-zA-Z])/)){score+=15;}if(password.match(/^\w+$/)||password.match(/^\d+$/)){score-=10;}if(score<0){score=0;}if(score>100){score=100;}if(score<34){return 1;}if(score<68){return 2;}return 3;};function checkRepetition(pLen,str){var res="";for(var i=0;i<str.length;i++){var repeated=true;for(var j=0;j<pLen&&(j+i+pLen)<str.length;j++){repeated=repeated&&(str.charAt(j+i)==str.charAt(j+i+pLen));}if(j<pLen){repeated=false;}if(repeated){i+=pLen-1;repeated=false;}else{res+=str.charAt(i);}}return res;};})(jQuery);
