
function checkForm(form) {
	var ok = true;
	setAllInputsValid(form);
	ok &= checkEmailFields(form);
	ok &= checkNumberFields(form);
	ok &= checkPhoneFields(form);
	ok &= checkRequiredFields(form);
	ok &= checkRequiredRadioButtons(form);
	return ok ? true : false;
}

function setAllInputsValid(form) {
	$(form).find("input,select,textarea").parent().andSelf().removeClass("invalid");
	$("#invalidMessage").hide();
}

function checkRequiredFields(form) {
	var emptyFieldRegexp = /^\s*$/;
	return checkFields(
		form,
		"required",
		function(input) {
			return !input.value.toString().match(emptyFieldRegexp);
		}
	);
}

function checkNumberFields(form) {
	var numberRegexp = /^[0-9]+$/i;
	return checkFields(
		form,
		"number",
		function(input) {
			return input.value == '' || input.value.toString().match(numberRegexp);
		}
	);
}

function checkPhoneFields(form) {
	var phoneRegexp = /^\+?[0-9]{6}[0-9]*$/i;
	return checkFields(
		form,
		"phone",
		function(input) {
			return input.value == '' || input.value.toString().replace(/ +/g, '').match(phoneRegexp);
		}
	);
}

function checkEmailFields(form) {
	var emailRegexp = /^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?$/i;
	return checkFields(
		form,
		"email",
		function(input) {
			return input.value == '' || input.value.toString().match(emailRegexp);
		}
	);
}

function checkFields(form, className, validateFunction) {
	var ok = true;
	$(form).find("input." + className + "[type!=radio],select." + className + ",textarea." + className).each(function() {
		if (validateFunction(this))
			return;
		ok = false;
		$(this).addClass("invalid");
		$("#invalidMessage").show();
	});
	return ok;
}

function checkRequiredRadioButtons(form) {
	var ok = true;
	var radioInputs = $(form).find("input[type=radio]");
	radioInputs.filter(".required").each(function() {
		var radioInputSet = radioInputs.filter("[name=" + this.name + "]");
		if (!radioInputSet.filter(":checked").length) {
			radioInputSet.parent().andSelf().addClass("invalid");
			ok = false;
		}
	});
	return ok;
}

