$.fn.PassStrength = function() {
eval(function(p, a, c, k, e, r) { e = function(c) { return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if (!''.replace(/^/, String)) { while (c--) r[e(c)] = k[c] || e(c); k = [function(e) { return r[e] } ]; e = function() { return '\\w+' }; c = 1 }; while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); return p } ('c $g=$(g);$g.E(\'<h t="n" u="n"><h t="o" u="o"></h></h>\');$g.F(q(){c $i=$(\'#n\').j();c $j=v(\'#G\',$i);$(\'#o\').H({j:$j},{I:J})});w=q(b){c 3=0;c e=b.x;3+=e;9(e>0&&e<=4){3+=b.x}r 9(e>=5&&e<=7){3+=6}r 9(e>=8&&e<=K){3+=L}r 9(e>=M){3+=N}9(b.f(/[a-z]/)){3+=1}9(b.f(/[A-k]/)){3+=5}9(b.f(/\\d/)){3+=5}9(b.f(/.*\\d.*\\d.*\\d/)){3+=5}9(b.f(/[!,@,#,$,%,^,&,*,?,l,~]/)){3+=5}9(b.f(/.*[!,@,#,$,%,^,&,*,?,l,~].*[!,@,#,$,%,^,&,*,?,l,~]/)){3+=5}9(b.f(/(?=.*[a-z])(?=.*[A-k])/)){3+=2}9(b.f(/(?=.*\\d)(?=.*[a-z])(?=.*[A-k])/)){3+=2}9(b.f(/(?=.*\\d)(?=.*[a-z])(?=.*[A-k])(?=.*[!,@,#,$,%,^,&,*,?,l,~])/)){3+=2}y 3};v=q(B,i){c O=0;c p=$(B).P();c C=w(p);c m=Q.R(C*2);9(m>s){m=s};c D=(i/s)*m;y D};', 54, 54, '|||intScore||||||if||password|var||len|match|this|div|maxWidth|width|Z|_|nRound|PasswordBar|PasswordMeter||function|else|100|id|class|updateMeter|calcStrength|length|return|||pass|nScore|scoreWidth|after|keyup|x_password|animate|duration|200|15|12|16|18|score|val|Math|round'.split('|'), 0, {}))
};


;(function ($) {

$.fn.maxlength = function (settings) {

    if (typeof settings == 'string') {
        settings = { feedback : settings };
    }

    settings = $.extend({}, $.fn.maxlength.defaults, settings);

    function length(el) {
    	var parts = el.value;
    	if ( settings.words )
    		parts = el.value.length ? parts.split(/\s+/) : { length : 0 };
    	return parts.length;
    }
    
    return this.each(function () {
        var field = this,
        	$field = $(field),
        	$form = $(field.form),
        	limit = settings.useInput ? $form.find('input[name=maxlength]').val() : $field.attr('maxlength'),
        	$charsLeft = $form.find(settings.feedback);

    	function limitCheck(event) {
        	var len = length(this),
        	    exceeded = len >= limit,
        		code = event.keyCode;

        	if ( !exceeded )
        		return;

            switch (code) {
                case 8:  // allow delete
                case 9:
                case 17:
                case 36: // and cursor keys
                case 35:
                case 37: 
                case 38:
                case 39:
                case 40:
                case 46:
                case 65:
                    return;

                default:
                    return settings.words && code != 32 && code != 13 && len == limit;
            }
        }


        var updateCount = function () {
            var len = length(field),
            	diff = limit - len;

            $charsLeft.html( diff || "0" );

            // truncation code
            if (settings.hardLimit && diff < 0) {
            	field.value = settings.words ? 
            	    // split by white space, capturing it in the result, then glue them back
            		field.value.split(/(\s+)/, (limit*2)-1).join('') :
            		field.value.substr(0, limit);

                updateCount();
            }
        };

        $field.keyup(updateCount).change(updateCount);
        if (settings.hardLimit) {
            $field.keydown(limitCheck);
        }

        updateCount();
    });
};

$.fn.maxlength.defaults = {
    useInput : false,
    hardLimit : true,
    feedback : '.charsLeft',
    words : false
};

})(jQuery);

