var lowercase = 'abcdefghijklmnopqrstuvwxyz';
var uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var numbers = '0123456789';
var specialChars = '!.,@$L#\*()%~<>{}[]'; 
var commonPasswords = new Array('password', 'pass', '1234', '1246', 'heslo'); 

function contains(pass, validChars) {
	var count = 0;
	for (var	i = 0; i< pass.length; i++) {
		var char = pass.charAt(i);
		if (validChars.indexOf(char) > -1) { count++ }
	}
	return count;
}

function checkPassword(pass) {
	var combinations = 0;
	if (contains(pass, numbers)>0) {combinations += 10}	
	if (contains(pass, lowercase)>0) {combinations += 26}
	if (contains(pass, uppercase)>0) {combinations += 26}
	if (contains(pass, specialChars)>0) {combinations += specialChars.length}
	
	var totalCombinations = Math.pow(combinations, Math.round(pass.length));
	if (isCommonPassword(pass)) {totalCombinations = 7500}	
	
	var timeInSeconds = (totalCombinations / 400);
	var timeInDays = timeInSeconds / 86400;
	var lifetime = 356;
	var percentage = timeInDays /  lifetime;
	
	var friendlyPercentage = cap(Math.round(percentage * 100), 100); 
	if (totalCombinations != 75000 && friendlyPercentage < (pass.length * 5)) { 
        friendlyPercentage += pass.length * 5; 
    } 
	return Math.round(percentage)
	
}


function isCommonPassword(password) { 
 
    for (i = 0; i < commonPasswords.length; i++) { 
        var commonPassword = commonPasswords[i]; 
        if (password == commonPassword) { 
            return true; 
        } 
    } 
 
    return false; 
 
} 

function cap(number, max) { 
    if (number > max) { 
        return max; 
    } else { 
        return number; 
    } 
} 

