/*
	currently hard coded with 5 levels of password strength,
	relating to 5 hard coded regular expressions
	note: these regular expressions should meet the business
	rules defined in PasswordStrengthRuleExpressionTypes class
*/

checkStrength = function (passwordElement, strengthBarId, strengthTextId, strengthBarContainerWidth) {
	var password = passwordElement.value;			//value of password element, element defined by argument 'passwordElement'
	var strengthValue = 0;							//default strength value
	var variants = 0;								//default variant count
	var strengthBarElement = $(strengthBarId);		//id of the progress bar container, defined by argument 'strengthBarId'
	var strengthTextIdElement = $(strengthTextId);	//id of the element to contain current strength, defined by argument 'strengthTextId'
	var minimumStrengthLevel = 3;					//defines the level of strength deemed as valid
	var widthOfBar = strengthBarContainerWidth;		//width in pixels of the progress bar container, defined by argument 'strengthBarContainerWidth'
	var width = 0;									//default start width of progress bar
	var validText = "Valid";
	var invalidText = "Invalid";
	
	
	if (password.match(/[a-z]{1}/)) variants++;		
	if (password.match(/[A-Z]{1}/)) variants++;
	if (password.match(/[0-9]{1}/)) variants++;
	if (password.match(/\W{1}/)) variants++;
	
	if (password.length == 0) strengthValue = 0;
	if (variants == 1) strengthValue = 1;
	if (variants >= 2) strengthValue = 2;	
	if ((variants >= 2) && (password.length >= 6)) strengthValue = 3;
	if ((variants >= 3) && (password.length >= 8)) strengthValue = 4;
	if ((variants == 4) && (password.length >= 10)) strengthValue = 5;
		
	switch (strengthValue) {
		case 0:
			strengthBarElement.setStyle('background-color','#ffacac');
			break;
		case 1:
			strengthBarElement.setStyle('background-color','#ffcdac');
			width = widthOfBar/5;
			break;
		case 2:
			strengthBarElement.setStyle('background-color','#fff0ac');
			width = 2*(widthOfBar/5);
			break;
		case 3:
			strengthBarElement.setStyle('background-color','#dae88f');
			width = 3*(widthOfBar/5);
			break;
		case 4:
			strengthBarElement.setStyle('background-color','#b9e592');
			width = 4*(widthOfBar/5);
			break;
		case 5:
			strengthBarElement.setStyle('background-color','#aecd93');
			width = widthOfBar;
			break;
	}	
	if (strengthValue >= minimumStrengthLevel) {
		strengthTextIdElement.innerHTML = validText;
	}
	else {
		strengthTextIdElement.innerHTML = invalidText;
	}
	width = Math.round(width);
	strengthBarElement.setStyle('width',width + 'px');
	window.status = width;
}






//checkStrength = function (password) {
//	var pwd = password.value;
//	
//	var strengthValue = 0;
//	var variants = 0;
//	
//	if (pwd.match(/[a-z]{1}/)) variants++;
//	if (pwd.match(/[A-Z]{1}/)) variants++;
//	if (pwd.match(/[0-9]{1}/)) variants++;
//	if (pwd.match(/\W{1}/)) variants++;
//	
//	if (pwd.length == 0) strengthValue = 0;
//	if (variants == 1) strengthValue = 1;
//	
//	if (variants >= 2) strengthValue = 2;	
//	if ((variants >= 2) && (pwd.length >= 6)) strengthValue = 3;
//	if ((variants >= 3) && (pwd.length >= 8)) strengthValue = 4;
//	if ((variants == 4) && (pwd.length >= 10)) strengthValue = 5;
//		
//	switch (strengthValue) {
//		case 0:
//			$('strength-bar').setStyle('background-color','#ffacac');
//			break;
//		case 1:
//			$('strength-bar').setStyle('background-color','#ffcdac');
//			width = 0;
//			break;
//		case 2:
//			$('strength-bar').setStyle('background-color','#fff0ac');
//			width = 5;
//			break;
//		case 3:
//			$('strength-bar').setStyle('background-color','#dae88f');
//			width = 30;
//			break;
//		case 4:
//			$('strength-bar').setStyle('background-color','#b9e592');
//			width = 35;
//			break;
//		case 5:
//			$('strength-bar').setStyle('background-color','#aecd93');
//			width = 44;
//			break;
//	}	

//	//pwd.length*2 max = 60
//	//variant max = 4
//	//strength max = 5 
//	var width = (width + (pwd.length*2)) + ((variants + strengthValue)*5);
//	
//	if (isNaN(width)) width = 0;
//	
//	$('strength-bar').setStyle('width',width + 'px');
//}

//showStrength = function (pwd) {
//	checkStrength(pwd);
//}