// validate_form.js -- validate a form

// -------------------------------------------------------------------------------------

requiredFields = new Array();
requiredFields[requiredFields.length] = new RequiredField('firstname', 'your first name');
requiredFields[requiredFields.length] = new RequiredField('lastname', 'your last name');
requiredFields[requiredFields.length] = new RequiredField('email', 'your e-mail address');
requiredFields[requiredFields.length] = new RequiredField('address', 'your address');
requiredFields[requiredFields.length] = new RequiredField('city', 'your city');
requiredFields[requiredFields.length] = new RequiredField('state', 'your state');
requiredFields[requiredFields.length] = new RequiredField('zip', 'your zip code');


// -------------------------------------------------------------------------------------

function validateForm(form)
{
	var badEmail = '';
	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 == '')
				badFields[badFields.length] = getDescriptionForField(fieldName);
			else if (field.name == 'email' && !checkEmail(field.value))
				badEmail = field.name;
		}

		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 (badEmail != '')
	{
		var msg = 'That e-mail address does not appear to be valid.\n\n';
		msg += 'Please enter a valid e-mail address to continue.';
		alert(msg);

		form.elements[badEmail].focus();
		form.elements[badEmail].select();

		return false;
	}

	if (badFields.length == 0) return true;

	var msg;
	if (badFields.length == 1) msg = 'A required field was not filled 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);

	if (badFields.length == 1)
	{
		var badFieldName = getFieldForDescription(badFields[0]);
		form.elements[badFieldName].focus();
		form.elements[badFieldName].select();
	}

	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 '';
}

function getFieldForDescription(desc)
{
	for (var i = 0; i < requiredFields.length; ++i)
	{
		if (requiredFields[i].description == desc)
			return requiredFields[i].fieldName;
	}

	return '';
}

