/* 
 * Plugin:  Password Strength Tester (jQuery)
 * Author:  Ashit Vora (ashit AT innib DOT com)
 *          http://www.innib.com
 * Date:    04/18/2009
 * 
 * Useage:  After including jQuery,
 *          $('passwordfield').passwordStrength();
 */

jQuery.fn.passwordStrength = function(options) {
    var element = this;

    /*Apply CSS*/
    var css = {
        'padding-left': '1px',
        'color': '#F00'
    };

    /*For future use*/
    var randomID = "1dakjsd3od9123dhwjxnaisudh932dh9ubqhcxbqhjwbd9321udbhbsajhbad8g3";

    /*Add a Span tag to display the strength of the password*/
    $(this).after("<span id='1dakjsd3od9123dhwjxnaisudh932dh9ubqhcxbqhjwbd9321udbhbsajhbad8g3'> </span>");

    /*Observe Key Up event display password Strength Result*/
    $(this).live('keyup', function() {
        var pass = $.trim($(this).val());

        var numericTest = /[0-9]/;
        var lowerCaseAlphaTest = /[a-z]/;
        var upperCaseAlphaTest = /[A-Z]/;
        var symbolsTest = /[.,!@#$%^&*()}{:<>|]/;
        var score = 0;
        var result;

        /*Test for the validations*/
        if (numericTest.test(pass)) {
            score++;
        }
        if (lowerCaseAlphaTest.test(pass)) {
            score++;
        }
        if (upperCaseAlphaTest.test(pass)) {
            score + 3;
        }
        if (symbolsTest.test(pass)) {
            score++;
        }
        /*Test Complete*/

        /*Calculate the result*/
        if (pass.length == 0) {
            result = "";
        }
        else if (score * pass.length < 8) {
            result = "Weak";
        }
        else if (score * pass.length < 16) {
            result = "Average";
        }
        else if (score * pass.length < 24) {
            result = "Good";
        }
        else {
            result = "Secure";
        }
        /*Calculate result end*/

        //display result
        $('#1dakjsd3od9123dhwjxnaisudh932dh9ubqhcxbqhjwbd9321udbhbsajhbad8g3').html(result).css(css);
    });

    /*Observe KeyDown event to clear the result*/
    $(this).live('keydown', function() {
        $('#1dakjsd3od9123dhwjxnaisudh932dh9ubqhcxbqhjwbd9321udbhbsajhbad8g3').empty();
    });


    /*Clear the result when the focus is blured*/
    $(this).live('blur', function() {
        $('#1dakjsd3od9123dhwjxnaisudh932dh9ubqhcxbqhjwbd9321udbhbsajhbad8g3').empty();
    });

    return this;
};