function validateForm(formButton, formObj, fieldsArray) {
	formButton.className = "formButtonDisabled";
	formButton.disabled = true;
	formButton.blur();
	var oldFormTitle = formButton.value;
	formButton.value = "Processing";
	var errorMsg = "";
	for (var i=0; i<fieldsArray.length; i++) {
		var valid = true;
		var field = formObj[fieldsArray[i].field];
		var fieldType = fieldsArray[i];
		if (fieldType.req && !field.value.length) {
			errorMsg += '- "' + fieldType.name + '" is a required field\n';
			valid = false;
		} else {
			switch (fieldType.type) {
				case "text" :
					if (field.value.length && field.value.length < fieldType.minLen) {
						errorMsg += '- "' + fieldType.name + '" must be at least ' + fieldType.minLen + ' characters long\n';
						valid = false;					
					} else if (field.value.length > fieldType.maxLen) {
						errorMsg += '- "' + fieldType.name + '" must be at less ' + fieldType.maxLen + ' characters long\n';
						valid = false;					
					}
					break;
				case "email" :
   					var emailReg = new RegExp("^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$");
					if (!emailReg.test(field.value)) {
						errorMsg += '- "' + fieldType.name + '" must be a valid e-mail address\n';
						valid = false;
					}
					break;
				case "phone" :
					var stripped = field.value.replace(/[\(\)\.\-\ ]/g, '');
					if (fieldType.minLen == undefined) fieldType.minLen = 6;
					if (field.value.length > 0 && (isNaN(parseInt(stripped)) || stripped.length < fieldType.minLen)) {
						errorMsg += '- "' + fieldType.name + '" must be a valid telephone number\n';
						valid = false;
					}				
					break;
				case "int" :
					if (Math.round(field.value) != field.value) {
						errorMsg += '- "' + fieldType.name + '" must be a whole number\n';
						valid = false;
					}
					break;
				case "austPostcode" :
					if (field.value.length && (Math.round(field.value) != field.value || field.value < 1000 || field.value > 9999)) {
						errorMsg += '- "' + fieldType.name + '" must be a valid postcode\n'; 
						valid = false;
					}
					break;
			}
		}
		if (valid) {
			field.className = "formElement"
		} else {
			field.className = "formElementRequired"
		}
	}
	if (errorMsg.length) {
		alert(errorMsg);
		formButton.className = "formButton";
		formButton.value = oldFormTitle;
		formButton.disabled = false;
	} else {
		formObj.submit();
	}
}

function showRequired(formObj, fieldsArray) {
	for (var i=0; i<fieldsArray.length; i++) {
		var field = formObj[fieldsArray[i].field];
		if (fieldsArray[i].req) {
			field.className = "formElementRequired";
		}
	}
}
