// Password strength meter v2.0
// Matthew R. Miller - 2007
// www.codeandcoffee.com
// Based off of code from:
//  http://www.intelligent-web.co.uk
//  http://www.geekwisdom.com/dyn/passwdmeter
// upgraded for jQuery and optimalized by orosznyet

// Settings
// -- Toggle to true or false, if you want to change what is checked in the password
var m_strUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var m_strLowerCase = "abcdefghijklmnopqrstuvwxyz";
var m_strNumber = "0123456789";
var m_strCharacters = "!@#$%^&*?_~"

// Check password
function checkPassword(strPassword) {
	// Reset combination count
	var nScore = 0;
	
	// Password length
	// -- Less than 4 characters
	if (strPassword.length < 5)
		nScore += 5;
	// -- 5 to 7 characters
	else if (strPassword.length > 4 && strPassword.length < 8)
		nScore += 10;
	// -- 8 or more
	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);
	// -- 1 number
	if (nNumberCount == 1)
		nScore += 10;
	// -- 3 or more numbers
	if (nNumberCount >= 3)
		nScore += 20;
	
	// Characters
	var nCharacterCount = countContain(strPassword, m_strCharacters);
	// -- 1 character
	if (nCharacterCount == 1)
		nScore += 10;	
	// -- More than 1 character
	if (nCharacterCount > 1)
		nScore += 25;
	
	// Bonus
	// -- Letters and numbers
	if (nNumberCount != 0 && nLowerUpperCount != 0)
		nScore += 2;
	// -- Letters, numbers, and characters
	if (nNumberCount != 0 && nLowerUpperCount != 0 && nCharacterCount != 0)
		nScore += 3;
	// -- Mixed case letters, numbers, and characters
	if (nNumberCount != 0 && nUpperCount != 0 && nLowerCount != 0 && nCharacterCount != 0)
		nScore += 5;

	return nScore;
}
 
// Runs password through check and then updates GUI 
function runPassword(strPassword, strFieldID, bannEqual)  {
	// Check password
	var nScore = checkPassword(strPassword);
	$("#" + strFieldID).css({display : "block"});
	 // Get controls
    	var ctlBar = document.getElementById(strFieldID + "_bar"); 
    	var ctlText = document.getElementById(strFieldID + "_text");
    	if (!ctlBar || !ctlText)
    		return;
    	
    	// Set new width
    	if (bannEqual != "" &&($("#" + bannEqual).val() == strPassword)) $("#" + strFieldID + "_bar").css({width : "0%"});
    	else $("#" + strFieldID + "_bar").css({width : nScore + "%"});

 	// Color and text
	// -- BANNED VAL
	if (bannEqual != "" &&($("#" + bannEqual).val() == strPassword)) {
 		var strText = "Nagyon gyenge";
 		var strColor = "#e71a1a";		
	// -- Very Secure
 	} else if (nScore >= 90) {
 		var strText = "Kellően Biztonságos";
 		var strColor = "#0ca908";
 	// -- Secure
 	} else if (nScore >= 80) {
 		var strText = "Biztonságos";
 		vstrColor = "#7ff67c";
	// -- Very Strong
 	} else if (nScore >= 70) {
 		var strText = "Nagyon erős";
 		var strColor = "#1740ef";
	// -- Strong
 	} else if (nScore >= 60) {
 		var strText = "Erős";
 		var strColor = "#5a74e3";
	// -- Average
 	} else if (nScore >= 50) {
 		var strText = "Átlagos";
 		var strColor = "#e3cb00";
	// -- Weak
 	} else if (nScore >= 25) {
 		var strText = "Gyenge";
 		var strColor = "#e7d61a";	
	// -- Very Weak
 	} else {
 		var strText = "Nagyon gyenge";
 		var strColor = "#e71a1a";
	}
	$("#" + strFieldID + "_bar").css({backgroundColor : strColor});
	$("#" + strFieldID + "_text").html("<span style=\"color: " + strColor + ";\" title=\"" + nScore + " pont\">" + strText + "</span>");
}
 
// 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; 
}
