//Date     : 28/09/2008
//Author : Mihir D Kadiwala
//Version: 1.0
//
//Color variables
//
var default_bg_color = '#cab388';
var too_short_bg_color = '#676767';
var weak_bg_color = '#aa0033';
var fair_bg_color = '#f5ac00';
var good_bg_color = '#6699cc';
var strong_bg_color = '#008000';
//
//Function to measure password strength
//
function password_meter(unameCtl, passwordCtl, id) {	
	var password_strength = '';
	var password_score = 0;
	var password_color = '';
	var uname = TrimString(unameCtl.value);
	var password = TrimString(passwordCtl.value);
	//
	/*if(uname != '' && password.match(uname)) {
		if(!confirm('Your password contains string from username. It will easily be guessed. Do you wish to continue?')) {
			passwordCtl.focus();
			passwordCtl.select();
			return;
		}
	}*/
	//
	//password length
	//	
	if(password.length == 0) {
		password_score = 0;
		password_strength = '';
		password_color = default_bg_color;
	}
	else if(password.length < 5) {
		password_score = 0;
		password_strength = 'Too Short';
		password_color = too_short_bg_color;
	}
	else {
		if(password.length >= 5 && password.length <= 9)
			password_score += 25;
		if(password.length >= 10 && password.length <= 14)
			password_score += 50;
		if(password.length >= 15 && password.length <= 20)
			password_score += 75;
		//
		//Letters
		//
		//Case 1: at least 1 lower case letter
		if(password.match(/[a-z]+/))
			password_score += 5;
		//Case 2: at least 1 upper case letter
		if(password.match(/[A-Z]+/))
			password_score += 5;
			
		//
		//Digits
		//
		//Case 1: at least 1 digit
		if(password.match(/\d+/))
			password_score += 10;
		//Case 2: at least 3 digits
		if(password.match(/(.*[\d].*[\d].*[\d])/))
			password_score += 20;
			
		//
		//Special Characters
		//
		//Case 1: at least 1 special character
		/*if(password.match(/[!@#$%^&*]+/))
			password_score += 5;
		//Case 2: at least 3 special character
		if(password.match(/.*[@#$].*[@#$].*[@#$]/))
			password_score += 10;*/
			
		//
		//Combinations
		//
		//Case 1: lower case letters and upper case letters
		if(password.match(/[a-z].*[A-Z]/) || password.match(/[A-Z].*[a-z]/))
			password_score += 20;
		//Case 2: letters and digits
		if(password.match(/[a-zA-Z]+/) && password.match(/[\d]+/))
			password_score += 30;
		//Case 3: lettes, digits, special characters
		/*if(password.match(/[a-zA-Z]+/) && password.match(/[\d]+/) && password.match(/[@#$]+/))
			password_score += 30;*/
		
		//
		//Measuring strength depending on score
		//
		if(password_score <= 25) {
			password_strength = 'Weak';
			password_color = weak_bg_color;
		}
		else if(password_score > 25 && password_score <= 50) {
			password_strength = 'Fair';
			password_color = fair_bg_color;
		}
		else if(password_score > 50 && password_score <= 75) {
			password_strength = 'Good';
			password_color = good_bg_color;
		}
		else if((password_score > 75 && password_score <= 100) || password_score > 100) {
			password_strength = 'Strong';
			password_color = strong_bg_color;
		}
	}
	document.getElementById(id).innerHTML = password_strength;
	document.getElementById(id).style.backgroundColor = password_color;
}
