function addClass(target, classValue){
	var pattern = new RegExp("(^| )" + classValue + "( |$)");
	if(!pattern.test(target.className)){
		if(target.className == ""){
		target.className = classValue;
		}else{
		target.className += " " + classValue;
		}
	}
	return true;
} // end addClass

function removeClass(target, classValue){
	var removedClass = target.className;
	var pattern = new RegExp("(^| )" + classValue + "( |$)");
	removedClass = removedClass.replace(pattern, "$1");
	removedClass = removedClass.replace(/ $/, "");
	target.className = removedClass;
	return true;
} // end removeClass

function checkPasswordStrength(password){

	var score = 0;

	if(password.length > 4 && password.length <= 8){
		score+= 1;
	}else if(password.length > 8 && password.length <= 12){
		score+= 2;
	}else if(password.length > 12){
		score+= 3;
	}
	
	// Letters
	myLettersExp = new RegExp("[a-zA-z]","g");
	if(lettersMatch = password.match(myLettersExp)){
		numLetters = password.match(myLettersExp).length;
	}else{
		numLetters = 0;
	}

	if(numLetters == 1){
		score += 1;
	}else if(numLetters > 1){
		score += 2;
	}

	// Mixed Letters
	myLowerExp = new RegExp("[a-z]","g");
	myUpperExp = new RegExp("[A-Z]","g");

	if(lowerMatches = password.match(myLowerExp)){
		numLower = password.match(myLowerExp).length;
	}else{
		numLower = 0;
	}
	if(upperMatches = password.match(myUpperExp)){
		numUpper = password.match(myUpperExp).length;
	}else{
		numUpper = 0;
	}
	
	if(numLower > 0&&numUpper > 0){
		score += 1;
	}
	
	// Numbers
	myNumbersExp = new RegExp("[0-9]","g");
	if(numbersMatch = password.match(myNumbersExp)){
		numNumbers = password.match(myNumbersExp).length;
	}else{
		numNumbers = 0;
	}
	
	if(numNumbers == 1){
		score+= 1;
	}else if(numNumbers > 1){
		score+= 2;
	}
	
	// Special Characters
	mySpecialExp = new RegExp("[^0-9a-zA-Z]","g");
	if(specialMatch = password.match(mySpecialExp)){
		numSpecial = password.match(mySpecialExp).length;
	}else{
		numSpecial = 0;
	}

	if(numSpecial == 1){
		score += 2;
	}else if(numSpecial == 2){
		score += 4;
	}else if(numSpecial > 2){
		score += 5;
	}	

	// Mixed everything
	if(
		(numLower > 0)&&
		(numUpper > 0)&&
		(numNumbers > 0)&&
		(numSpecial > 0)
	){
		score += 3;
	}

	// Get Strength
	if(score > 0&&score <= 6){
		strength = "Weak";
	}else if(score > 6 &&score <= 12){
		strength = "Medium";
	}else if(score > 12){
		strength = "Strong";
	}
	
	return strength;
} // end checkPasswordStrength


function reportStrength(e){
if(!e) var e = window.event;
if(e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;

	var aPassword = targ.value;

	if(aPassword){
		var strength = checkPasswordStrength(aPassword);

		if(strength == "Weak"){
			strength = "<strong style=\"color: #cc0000;\">Weak</strong>";
		}else if(strength == "Medium"){
			strength = "<strong style=\"color: #ff9900;\">Medium</strong>";
		}else if(strength == "Strong"){
			strength = "<strong style=\"color: #00cc00;\">Strong</strong>";
		}

		$(targ.targetForStrength).innerHTML = strength;
	}

} // end reportStrength

function checkPhone(e){
if(!e) var e = window.event;
if(e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;

	var myValue = targ.value;
	targ.value = formatPhone(myValue);

} // end checkPhone

function formatPhone(myValue){

	// Clean up the field.
	// Remove anything not a number or a decimal
	myValue = myValue.replace(/[^0-9]/g,'');

	// Parse as a float
	//myValue = parseFloat(myValue);
	
	// Set to 3 decimal places
	//myValue = parseFloat(myValue).toFixed(3);

	if(isNaN(myValue)){
	myValue = "";
	}

	return myValue;

} // end formatPhone

function checkPostcode(e){
if(!e) var e = window.event;
if(e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;

	var myValue = targ.value;
	targ.value = formatPostcode(myValue);

} // end checkPostcode

function formatPostcode(myValue){

	// Uppercase it
	myValue = myValue.toUpperCase();
	return myValue;

} // end formatPostcode