function test_form_field(form_obj, field_name, error_id, error_message, test_regexp)
{
	var field_obj = null;
	var field_obj_found = null;
	var test_result = false;

	for (var i = 0; ! field_obj_found && i < form_obj.length; ++ i)
	{
		field_obj = form_obj[i];
		if (typeof field_obj.name == 'undefined'
			|| (field_obj.name != field_name
			 && field_obj.name.indexOf(field_name + '[') != 0)) continue;

		field_obj_found = field_obj

		if (field_obj.type == 'text'
			|| field_obj.type == 'textarea'
				|| field_obj.type == 'hidden'
					|| field_obj.type == 'password')
		{
			test_result = field_obj.value.match(test_regexp);
		}
		else if (field_obj.type == 'select-one')
		{
			test_result =
				field_obj.options.selectedIndex < 0
					|| (field_obj.options.selectedIndex == 0
						&& (typeof field_obj.options.selectedIndex.value == 'undefined'
							|| field_obj.options.selectedIndex.value == ''));
		}
		else if (field_obj.type == "select-multiple")
		{
			for (var j = 1; ! test_result && j < field_obj.options.length; ++ j)
			{
				test_result =
					field_obj.options[j].selected
						&& typeof field_obj.options[j].value != 'undefined'
							&& field_obj.options[j].value != '';
			}
		}
		else if (field_obj.type == "checkbox")
		{
			if (field_obj.name.indexOf(field_name + "[") == 0)
			{
				for (;! test_result && i < form_obj.length; ++i)
				{
					if (field_obj.name.indexOf(field + '[') != 0
						|| field_obj.type != 'checkbox') continue;
					field_obj = form_obj[i];
					test_result = field_obj.checked;
				}
			}
		}
		else if (field_obj.type == "radio")
		{
			for (; !test_result && i < form_obj.length; ++i)
			{
				if (field_obj.name.indexOf(field + '[') != 0
					|| field_obj.type != 'radio') continue;
				field_obj = form_obj[i];
				l = field_obj.checked;
			}
		}
	}

	if (! test_result && field_obj_found)
	{
		var err = null;
		if (document.getElementById
			&& typeof (err = document.getElementById(error_id)) != 'undefined')
		{
			err.style.display = 'block';
		}
		else
		{
			alert(error_message);
		}

		field_obj_found.focus();
		return false;
	}
	return true;
}
