// validate_form.js -- validate a form

// -------------------------------------------------------------------------------------

requiredFields = new Array();
requiredFields[requiredFields.length] = new RequiredField('fromname', 'your name');
requiredFields[requiredFields.length] = new RequiredField('email', 'your e-mail address');

// -------------------------------------------------------------------------------------

function validateForm(form)
{
	var badFields = new Array();

	for (var i = 0; i < requiredFields.length; ++i)
	{
		var fieldName = requiredFields[i].fieldName;
		var field = form.elements[fieldName];
		if (!field) continue;

		if (field.type == 'text' || field.type == 'textarea')
		{
			if (field.value == '' || (field.name == 'email' && !checkEmail(field.value)))
				badFields[badFields.length] = getDescriptionForField(fieldName);
		}

		else if (field.type == 'select-one' || field.type == 'select-multiple')
		{
			if (field.selectedIndex == -1 || field.options[field.selectedIndex].value == '')
				badFields[badFields.length] = getDescriptionForField(fieldName);
		}

		else if (field[0] && field[0].type == 'radio')
		{
			if (radioValue(field) == '')
				badFields[badFields.length] = getDescriptionForField(fieldName);
		}

	}

	if (badFields.length == 0) return true;

	var msg;
	if (badFields.length == 1) msg = 'A required field was not properly in.\n\n';
	else msg = 'Some required fields were not filled in.\n\n';

	var fields = '';
	var len = badFields.length - 1;
	for (var i = 0; i <= len; ++i)
	{
		if (i) fields += ', ';
		if (len > 0 && i == len) fields += 'and ';
		fields += badFields[i];
	}

	msg += 'Please enter ' + fields + ' to continue.';

	alert(msg);
	return false;
}

function checkEmail(possibleEmailAddress)
{
	if (possibleEmailAddress == null || possibleEmailAddress == '') return false;
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(possibleEmailAddress)) return true;
	return false;
}

function radioValue(radioObj)
{
	for (var i = 0; i < radioObj.length; ++i)
		if (radioObj[i].checked) return radioObj[i].value;

	return '';
}

function RequiredField(fieldName, description)
{
	this.fieldName = fieldName;
	this.description = description;
}

function getDescriptionForField(fieldName)
{
	for (var i = 0; i < requiredFields.length; ++i)
	{
		if (requiredFields[i].fieldName == fieldName)
			return requiredFields[i].description;
	}

	return '';
}

