function attemptFormSubmission () {
	if (validateForm()) {
		document.main_form.submit();
	}
}

function validateForm () {
	clearErrors();
	requiredMessage = validateRequiredFields();
	formatMessage = validateFormatOfFields();
	
	if (requiredMessage.length > 0 && formatMessage.length > 0) {
		message = requiredMessage + "\n" + formatMessage;
	} else {
		message = requiredMessage + formatMessage;
	}
	if (message.length > 0) {
		alert(message);
		return false;		
	} else {
		return true;
	}
}

function clearErrors () {
	fields = $('main_form').elements;
	for (var i = 0; i < fields.length; i++) {
		if (fields[i].name.length > 0) {
			if (!fields[i].name.match(/\[\]$/)) {
				clearError(fields[i].name);		
			}
		}
	}
}

function errorsForRequiredFields (requiredFields) {
	message = '';
	for (var i = 0; i < requiredFields.length; i++) {
		error = false;
		if (isCheckableField(requiredFields[i])) {
			if (!checkableHasEntry(requiredFields[i])) {
				error = true;
			}
		} else if (isSelectableField(requiredFields[i])) {
			if (!selectableFieldHasEntry(requiredFields[i])) {
				error = true;
			}
		} else {
			if (!textFieldHasEntry(requiredFields[i])) {
				error = true;
			}
		}
		if (error) {
			highlightAsError(requiredFields[i]);
			message += "   " + humanReadable(requiredFields[i]) + "\n";
		}
	}
	return message;
}

function formField (fieldName) {
	return eval("$('main_form')." + fieldName);
}

function isSelectableField (fieldName) {
	return (formField(fieldName).selectedIndex != null);
}
function selectableFieldHasEntry (fieldName) {
	return (formField(fieldName).selectedIndex != 0);
}

function isCheckableField (fieldName) {
	return (formField(fieldName)[0] != null && !isSelectableField(fieldName));
}
function checkableHasEntry (fieldName) {
	field = formField(fieldName);
	for (var i = 0; i < field.length; i++) {
		if (field[i].checked) {
			return true;
		}
	}
	return false;
}

function textFieldHasEntry (fieldName) {
	return (formField(fieldName).value.length > 0);
}

function humanReadable (string) {
	string = string.replace(/_/g, ' ');
	return string.substring(0, 1).toUpperCase() + string.substring(1);
}

function highlightAsError (fieldName) {
	field = formField(fieldName);
	if (field.style != null) {
		field.style.border = 'solid red 2px';
	}
}
function clearError (fieldName) {
	field = formField(fieldName);
	if (field.style != null) {
		field.style.border = '';
	}
}