var commonPasswords = new Array('password', 'pass', '1234', '1246');

var numbers = "0123456789";
var lowercase = "abcdefghijklmnopqrstuvwxyz";
var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var punctuation = "!.@$£#*()%~<>{}[]";

function checkPasswordString(password) 
{

    var combinations = 0;

    if (contains(password, numbers) > 0) {
        combinations += 10;
    }

    if (contains(password, lowercase) > 0) {
        combinations += 26;
    }

    if (contains(password, uppercase) > 0) {
        combinations += 26;
    }

    if (contains(password, punctuation) > 0) {
        combinations += punctuation.length;
    }

    // work out the total combinations
    var totalCombinations = Math.pow(combinations, password.length);

    // if the password is a common password, then everthing changes...
    if (isCommonPassword(password)) {
        totalCombinations = 40000 // about the size of the dictionary
    }

    // work out how long it would take to crack this (@ 200 attempts per second)
    var timeInSeconds = (totalCombinations / 200) / 2;

    // this is how many days? (there are 86,400 seconds in a day.
    var timeInDays = timeInSeconds / 86400

    // how long we want it to last
    var lifetime = 365;

    // how close is the time to the projected time?
    var percentage = timeInDays / lifetime;

    var friendlyPercentage = cap(Math.round(percentage * 100), 100);
    if (totalCombinations != 75000 && friendlyPercentage < (password.length * 5)) {
        friendlyPercentage += password.length * 5;
    }

    var progressBar = document.getElementById("progressBar");
	var progressTxt = document.getElementById("progressTxt");
	var obj = document.getElementById("password");
    //progressBar.style.width = friendlyPercentage + "%";
	//progressBar.style.width = '100%';
    if (percentage > 1.5) {
        // strong password
       	progressBar.style.backgroundColor = "#3bce08";
		progressTxt.innerHTML = pw_strong;
        obj.className = 'strong';
		return;
    }
    if (percentage > 0.5) {
        // reasonable password
        progressBar.style.backgroundColor = "#ffd801";
		progressTxt.innerHTML = pw_medium;
		obj.className = 'medium';
        return;
    }
    if (percentage > 0.25) {
        // weak password
        progressBar.style.backgroundColor = "Orange";
		progressTxt.innerHTML = pw_weak;
		obj.className = 'weak';
        return;
    }
	if (percentage <= 0.10) {
        // useless password
        progressBar.style.backgroundColor = "red";
		progressTxt.innerHTML = pw_weak;
		obj.className = 'weak';
        return;
    }
	
}

function cap(number, max) {
    if (number > max) {
        return max;
    } else {
        return number;
    }
}

function isCommonPassword(password) {

    for (i = 0; i < commonPasswords.length; i++) {
        var commonPassword = commonPasswords[i];
        if (password == commonPassword) {
            return true;
        }
    }

    return false;

}

function contains(password, validChars) {

    count = 0;

    for (i = 0; i < password.length; i++) {
        var char = password.charAt(i);
        if (validChars.indexOf(char) > -1) {
            count++;
        }
    }

    return count;
}





