// Password strength meter 31/01/2008

/*	
Password Length:5 Points: Less than 4 characters	, 10 Points: 5 to 7 characters ,25 Points: 8 or more	
Letters:0 Points: No letters  ,  10 Points: Letters are all lower case ,  20 Points: Letters are upper case and lower case
Numbers:0 Points: No numbers	,10 Points: 1 number,	20 Points: 3 or more numbers
Characters:0 Points: No characters,10 Points: 1 character,25 Points: More than 1 character
Bonus:2 Points: Letters and numbers,3 Points: Letters, numbers, and characters,5 Points: Mixed case letters, numbers, and characters
Password Text Range:>= 90: Very Secure,>= 80: Secure,>= 70: Very Strong,>= 60: Strong,>= 50: Average,>= 25: Weak,>= 0: Very Weak
		
*/

var m_strUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚ";
var m_strLowerCase = "abcdefghijklmnopqrstuvwxyz";
var m_strNumber = "0123456789";
var m_strCharacters = "|€£!@#$%^&*?_~+=éáúíó";

// Checks a string for a list of characters
function countContain(strPassword, strCheck)
{ 
	var nCount = 0;	
	for (i = 0; i < strPassword.length; i++){ 
	if (strCheck.indexOf(strPassword.charAt(i)) > -1) { nCount++;}
	} 
	return nCount; 
} 
// Check password
function checkPassword(strPassword){
	var nScore = 0;	// Reset combination count

	// Password length
	if (strPassword.length < 5){nScore += 5;}
	else if (strPassword.length > 4 && strPassword.length < 8){nScore += 10;}
	else if (strPassword.length > 7){nScore += 25;}
	// Letters
	var nUpperCount = countContain(strPassword, m_strUpperCase);
	var nLowerCount = countContain(strPassword, m_strLowerCase);
	var nLowerUpperCount = nUpperCount + nLowerCount;
	// -- Letters are all lower case
	if (nUpperCount == 0 && nLowerCount != 0) { nScore += 10; }
	// -- Letters are upper case and lower case
	else if (nUpperCount != 0 && nLowerCount != 0) {nScore += 20; }
	// Numbers
	var nNumberCount = countContain(strPassword, m_strNumber);
	if (nNumberCount == 1){nScore += 10;}
	if (nNumberCount >= 3){nScore += 20;}
	// Characters
	var nCharacterCount = countContain(strPassword, m_strCharacters);
	if (nCharacterCount == 1){nScore += 10;}
	if (nCharacterCount > 1){nScore += 25;}
	// -- Letters and numbers
	if (nNumberCount != 0 && nLowerUpperCount != 0){nScore += 5;}
	// -- Letters, numbers, and characters
	if (nNumberCount != 0 && nLowerUpperCount != 0 && nCharacterCount != 0){nScore += 5;}
	// -- Mixed case letters, numbers, and characters
	if (nNumberCount != 0 && nUpperCount != 0 && nLowerCount != 0 && nCharacterCount != 0){nScore += 10;}
	return nScore;
}
 
// Runs password through check and then updates GUI 
function runPassword(strPassword) 
{
	var nScore = checkPassword(strPassword);
    	var ctlBar = document.getElementById("pwdmtr_bar"); 
    	var ctlText = document.getElementById("pwdmtr_label");
    	if (!ctlBar || !ctlText)
    		return;
    	ctlBar.style.width = nScore + "%";// Set new width

 	if (nScore >= 90){var strText = "Very Secure";var strColor = "#0ca908";}

 	else if (nScore >= 70){var strText = "Secure";var strColor = "#7ff67c";}
 	else if (nScore >= 60){var strText = "Very Strong";var strColor = "#1740ef"}
 	else if (nScore >= 50){var strText = "Strong";	var strColor = "#5a74e3";	}
 	else if (nScore >= 30){var strText = "Average";var strColor = "#e3cb00";	}
 	else if (nScore >= 20){var strText = "Weak";var strColor = "#e7d61a";}

/* 	else if (nScore >= 80){var strText = "Secure";var strColor = "#7ff67c";}
 	else if (nScore >= 70){var strText = "Very Strong";var strColor = "#1740ef"}
 	else if (nScore >= 60){var strText = "Strong";	var strColor = "#5a74e3";	}
 	else if (nScore >= 50){var strText = "Average";var strColor = "#e3cb00";	}
 	else if (nScore >= 25){var strText = "Weak";var strColor = "#e7d61a";}*/

 	else	{var strText = "Very Weak";var strColor = "#e71a1a";}
	ctlBar.style.backgroundColor = strColor;
	ctlText.innerHTML = "<span style='color: " + strColor + ";'>" + strText + "</span>";//+ " - " + nScore 
}
 

