function validRequiredText(formField, fieldLabel) {
	var result = true;

	if (formField.value == "") {
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}

	return result;
}

function validRequiredRadio(formField, fieldLabel) {
	var result = false;

	for (i = 0; i < formField.length; i++) {
		if (formField[i].checked) {
			result = true;
			break;
		}
	}

	if(!result)
		alert('Please select an option for the "' + fieldLabel + '" field.');

	return result;
}

function validRequiredSelect(formField, fieldLabel) {
	var result = true;

	if (formField.value == "") {
		alert('Please select an option for the "' + fieldLabel + '" field.');
		formField.focus();
		result = false;
	}

	return result;
}

function validRequiredMultiSelect(formField, fieldLabel) {
	var result = true;

	if ((formField.value == null) || (formField.value == "")) {
		alert('Please select at least one option for the "' + fieldLabel + '" field.');
		formField.focus();
		result = false;
	}

	return result;
}

function allDigits(n) {
	return inValidCharSet(n, "0123456789");
}

function inValidCharSet(str, charset) {
	var result = true;
	for (var i = 0; i < str.length; i++)
		if (charset.indexOf(str.substr(i,1))<0) {
			result = false;
			break;
		}

	return result;
}

function validNum(formField, fieldLabel, required) {
	var result = true;

	if (required && !validRequiredText(formField,fieldLabel))
		result = false;
	if (result) {
		if (!allDigits(formField.value)) {
			alert('Please enter a number for the "' + fieldLabel + '" field.');
			formField.focus();
			formField.select();
			result = false;
		}
	}
	return result;
}

function isEmailAddr(email) {
	var result = false;
	var atIndex = email.indexOf("@");
	if (atIndex > 0) {
		var dotIndex = email.indexOf(".", atIndex)
		if ((dotIndex > atIndex + 1) && (email.length > dotIndex + 1))
			result = true;
	}
	return result;
}

function validEmail(formField, fieldLabel, required) {
	var result = true;

	if (required && !validRequiredText(formField, fieldLabel))
		result = false;

	if (result && !isEmailAddr(formField.value)) {
		alert("Please enter a complete email address of the form yourname@yourdomain.com");
		formField.focus();
		formField.select();
		result = false;
	}

	return result;
}

function isPhoneNumber(phone) {
	var result = false;
	var phoneStr = new String(phone);
	var length = phoneStr.length;

	if (phoneStr.indexOf("0") == 0) {
		if((length > 0) && allDigits(phoneStr))
			result = true;
	} else if (phoneStr.indexOf("+") == 0) {
		if((length > 2) && allDigits(phoneStr.substring(1)))
			result = true;
	}

	return result;
}

function validPhone(formField, fieldLabel, required) {
	var result = true;

	if (required && !validRequiredText(formField, fieldLabel))
		result = false;

	if (result && !isPhoneNumber(formField.value)) {
		alert("Please enter a complete phone number, without spaces.\n\n" +
			  "All UK telephone numbers must start with a 0 (zero).\n\n" +
			  "If you are entering an international number ensure it begins\n" +
			  "with a '+' followed by the country code.");
		formField.focus();
		formField.select();
		result = false;
	}

	return result;
}

function validMatch(formField1, formField2, fieldLabel, fieldLabel2, deleteBoth) {
	var result = true;

	if (formField1.value != formField2.value) {
		alert('The "' + fieldLabel + '" and "' + fieldLabel2 + '" fields ' +
		      'do not match.');
		if (deleteBoth) {
			formField1.value = "";
			formField2.value = "";
			formField1.focus();
		} else {
			formField2.focus();
			formField2.select();
		}
		result = false;
	}

	return result;
}

function isPassword(password) {
	var result = true;
	var passStr = new String(password);

	if(passStr.length < 5)
		result = false;

	return result;
}

function validPassword(formField, fieldLabel, required) {
	var result = true;

	if (required && !validRequiredText(formField, fieldLabel))
		result = false;

	if (result && !isPassword(formField.value)) {
		alert("Please enter a password of at least 5 characters.");
		formField.value = "";
		formField.focus();
		result = false;
	}

	return result;
}
