// Password strength meter v1.0
// Matthew R. Miller - 2007
// www.codeandcoffee.com
// Based off of code from  http://www.intelligent-web.co.uk

// Settings
// -- Toggle to true or false, if you want to change what is checked in the password
var bCheckNumbers = true;
var bCheckUpperCase = true;
var bCheckLowerCase = true;
var bCheckPunctuation = true;
var nPasswordLifetime = 365;

// Check password
function checkPassword(strPassword)
{
	// Reset combination count
	nCombinations = 0;

	// Check numbers
	if (bCheckNumbers)
	{
		strCheck = "0123456789";
		if (doesContain(strPassword, strCheck) > 0)
		{
        		nCombinations += strCheck.length;
    		}
	}

	// Check upper case
	if (bCheckUpperCase)
	{
		strCheck = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		if (doesContain(strPassword, strCheck) > 0)
		{
        		nCombinations += strCheck.length;
    		}
	}

	// Check lower case
	if (bCheckLowerCase)
	{
		strCheck = "abcdefghijklmnopqrstuvwxyz";
		if (doesContain(strPassword, strCheck) > 0)
		{
        		nCombinations += strCheck.length;
    		}
	}

	// Check punctuation
	if (bCheckPunctuation)
	{
		strCheck = ";:-_=+\|//?^&!.@$?#*()%~<>{}[]";
		if (doesContain(strPassword, strCheck) > 0)
		{
        		nCombinations += strCheck.length;
    		}
	}

	// Calculate
	// -- 500 tries per second => minutes
    	var nDays = ((Math.pow(nCombinations, strPassword.length) / 500) / 2) / 86400;

	// Number of days out of password lifetime setting
	var nPerc = nDays / nPasswordLifetime;

	return nPerc;
}

// Runs password through check and then updates GUI
function runPassword(strPassword, strFieldID)
{
	// Check password
	nPerc = checkPassword(strPassword);

	 // Get controls
    	var ctlBar = document.getElementById(strFieldID + "_bar");
    	var ctlText = document.getElementById(strFieldID + "_text");
    	if (!ctlBar || !ctlText)
    		return;

    	// Set new width
    	var nRound = Math.round(nPerc * 100);
	if (nRound < (strPassword.length * 5))
	{
		nRound += strPassword.length * 5;
	}
	if (nRound > 100)
		nRound = 100;
    	ctlBar.style.width = nRound + "%";

 	// Color and text
 	if (strPassword.length < 8)
 	{
 		strColor = "red";
 		strText = "Has這 za kr鏒kie";
   }
 	else if (nRound >= 95)
 	{
 		strText = "Bardzo silne has這";
 		strColor = "#3bce08";
 	}
 	else if (nRound > 75)
 	{
 		strText = "Silne has這";
 		strColor = "#ffd801";
	}
 	else if (nRound > 50)
 	{
 		strText = "字ednie has這";
 		strColor = "orange";
 	}
 	else
 	{
 		strColor = "red";
 		strText = "S豉be has這";
 	}
	ctlBar.style.backgroundColor = strColor;
	ctlText.innerHTML = "<span style='color: " + strColor + ";'>" + strText + "</span>";
}

// Checks a string for a list of characters
function doesContain(strPassword, strCheck)
 {
    	nCount = 0;

	for (i = 0; i < strPassword.length; i++)
	{
		if (strCheck.indexOf(strPassword.charAt(i)) > -1)
		{
	        	nCount++;
		}
	}

	return nCount;
}