var first_run = true;

/**
 * Core validation code.
 */
function validateForm(evt, target_form, required_fields, form_message_heading, form_message_prefix, form_message_suffix) {
	var loop_count, loop_length;
	var errors, form_errors, label, label_text, field;
	
	// Clear the old form errors
	$("span").remove(".field_error");
	$("div").remove("#form_error");

	// Check the form for new errors.
	loop_length = required_fields.length;
	errors = [];

	// Loop through the required fields list.
	for (loop_count = 0; loop_count < loop_length; loop_count++) {
		field = $("#" + required_fields[loop_count])[0];
		if (field) {if (field.value == "") errors.push(required_fields[loop_count]);}
	} // for

	// If we have errors, now's the time do something about it.
	if (errors.length > 0) {
		form_message = document.createElement("div");		
		$(form_message).attr("id", "form_error");
		$(form_message).addClass("important_notice");
		$(form_message).append(form_message_heading);
		$(form_message).append(form_message_prefix);

		form_errors = document.createElement("ul");

		loop_length = errors.length;
		for (loop_count = 0; loop_count < loop_length; loop_count++) {

			label = $("#" + errors[loop_count])[0];
			label = $(label).parent("div")[0];
			label = $(label).children("label")[0];
			label_text = label ? label.firstChild.nodeValue : "Unknown field name";

			// Create the field error span
			$(label).append("<span class=\"field_error\">Missing '" + label_text + "'</span>");

			// Create the form error list item
			$(form_errors).append("<li><a href=\"#" + errors[loop_count] + "\" title=\"Jump to the '" + label_text + "' form field\">" + label_text + "</a></li>");			
		} // for

		$(form_message).append(form_errors);
		$(form_message).append(form_message_suffix);
		$(target_form).before(form_message);

		// Show the form message
		if (first_run) {
			$(form_message).slideDown("slow");
			first_run = false;
		} // if

		// Prevent the default form submission from firing.
		evt.preventDefault();
	} // if
} // validateForm

