Array.prototype.inArray = function(search_char)
{
    var size = search_char.length;
    var i;
    for(i = 0; i < size; i++)
    {
        if(this[i] == search_char)
            return(true);
    }
    return(false);
}
function PasswordSecurity(bar_id)
{
    this.bar_id = bar_id;
    this.max_width = 200;
    this.small_chars = new Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
    this.big_chars = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
    this.numbers = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
    
    this.showLevel = function(password_field_id, username_field_id)
    {
        var field = document.getElementById(password_field_id);
        var username = document.getElementById(username_field_id).value;
        var bar = document.getElementById(bar_id);
        bar.style.width = "0px";
        var pass = field.value;
        var size = pass.length;
        var lower_case_reg = new RegExp(/[a-z]+/);
        var upper_case_reg = new RegExp(/[A-Z]+/);
        var numbers_reg = new RegExp(/[0-9]+/);
        
        var level = 0;
        
        if(size < 5)
            return;
        if(size >= 5 && size < 6)
            level += 20;
        if(size >= 6 && size < 7)
            level += 25;
        if(size >= 7 && size < 8)
            level += 30;
        if(size >= 8)
            level += 40;
        level += (4 * (size - 8));
            
        var lower_cases = 0;
        var upper_cases = 0;
        var numbers = 0;
        var specials = 0;
        
        var i;
        var actual_char = null;
        for(i = 0; i < size; i++)
        {
            actual_char = pass.charAt(i);
            if(lower_case_reg.exec(actual_char) != null)
            {
                lower_cases++;
                continue;
            }
            if(upper_case_reg.exec(actual_char) != null)
            {
                upper_cases++;
                continue;
            }
            if(numbers_reg.exec(actual_char) != null)
            {
                numbers++;
                continue;
            }
            specials++;
        }
        
        if(numbers == size)
            level -= 10;
        if(lower_cases == size)
            level -= 10;
        if(upper_cases == size)
        {
            level -= 10;
        }
        if(specials == size)
        {
            level -= 10;
        }
        
        if( (numbers + lower_cases) == size && numbers != 0 && lower_cases != 0)
            level += 30;
        if( (numbers + upper_cases) == size && numbers != 0 && upper_cases != 0)
            level += 30;
        if( (numbers + specials) == size && numbers != 0 && specials != 0)
            level += 30;
        if( (lower_cases + upper_cases) == size && lower_cases != 0 && upper_cases != 0)
            level += 30;
        if( (lower_cases + specials) == size && lower_cases != 0 && specials != 0)
            level += 30;
        if( (upper_cases + specials) == size && upper_cases != 0 && specials != 0)
            level += 30;
        
        if( (numbers + lower_cases + upper_cases) == size && numbers != 0 && lower_cases != 0 && upper_cases != 0)
        {
            level += 50;
        }
        if( (numbers + lower_cases + specials) == size && numbers != 0 && lower_cases != 0 && specials != 0)
        {
            level += 50;
        }
        if( (numbers + specials + upper_cases) == size && numbers != 0 && specials != 0 && upper_cases != 0)
        {
            level += 50;
        }
        if( (specials + upper_cases + lower_cases) == size && specials != 0 && upper_cases != 0 && lower_cases != 0)
        {
            level += 50;
        }
        
        if( (specials + upper_cases + lower_cases + numbers) == size && specials != 0 && upper_cases != 0 && numbers != 0)
        {
            level += 60;
        }
        if(username.match(pass) == pass)
            level -= 20;
        if(level < 0)
            level = 0;
        if(username == pass)
            level = 0;
        if(level > 100)
            level = 100;
        bar.style.width = (parseInt(this.max_width * (level / 100)))+"px";
    }
}
    
