validationTypes = new Object();
validationTypes['email'] = check_email;
validationTypes['number'] = check_number;
validationTypes['string'] = check_string;
validationTypes['phone'] = check_phone;
validationTypes['zip'] = check_zip;

function validate_form(formName)
{
	var form = document.forms[formName];
	var missingFields = new Array();
	var invalidFields = new Array();

	for (var i = 0; i < requiredFields.length; ++i)
	{
		var fieldName = requiredFields[i].fieldName;
		var field = form.elements[fieldName];
		if (!field) continue;

		var value = '';
		if (field.type == 'text' || field.type == 'textarea') value = field.value;
		else if (field[0] && field[0].type == 'radio') value = value_of_radio(field);
		else if (field.type == 'select-one' || field.type == 'select-multiple')
		{
			if (field.selectedIndex == -1)
			{
				missingFields[missingFields.length] = requiredFields[i].description;
				continue;
			}
			value = field.options[field.selectedIndex].value;
		}

		if (value == '')
			missingFields[missingFields.length] = requiredFields[i].description;
		else
		{
			var validationType = requiredFields[i].validationType;
			var minLength = requiredFields[i].minLength;
			var validationFunction = validationTypes[validationType];
			if (!validationFunction(value) || (minLength > 0 && value.length < minLength))
				invalidFields[invalidFields.length] = requiredFields[i].description;
		}
	}
	////////////
	if(form.phac.value || form.phpre.value || form.phnum.value || form.phx.value)
	{
		if (!check_number(form.phac.value) || !check_number(form.phpre.value) || !check_number(form.phnum.value))
		{
			invalidFields.push("member's phone number");
		}
		if(form.phx.value && !check_number)
		{
			invalidFields.push("member's phone extension");
		}
		
	}
	
	if (form.faxac.value || form.faxpre.value || form.faxnum.value)
	{
		if (!check_number(form.faxac.value) || !check_number(form.faxpre.value) || !check_number(form.faxnum.value))
		{
			invalidFields.push("member's fax number");
		}
	}
	////////////

	var msg = '';
	if (missingFields.length > 0)
	{
		if (missingFields.length == 1) msg = 'A required field was not filled in.\n\n';
		else msg = 'Some required fields were not filled in.\n\n';
		msg += 'Please enter ' + list_fields(missingFields) + ' to continue.';
	}
	else if (invalidFields.length > 0)
	{
		if (invalidFields.length == 1) msg = 'A field was not formatted correctly.\n\n';
		else msg = 'Some fields were not formatted correctly.\n\n';
		msg += 'Please re-enter ' + list_fields(invalidFields) + ' in the proper format to continue.';
	}
	

	if (msg.length == 0) return true;
	alert(msg);
	return false;
}

function list_fields(array)
{
	var fields = '';
	var len = array.length - 1;
	for (var i = 0; i <= len; ++i)
	{
		if (i) fields += ', ';
		if (len > 0 && i == len) fields += 'and ';
		fields += array[i];
	}

	return fields;
}

function check_email(possibleEmailAddress)
{
	if (possibleEmailAddress == null || possibleEmailAddress == '') return false;
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(possibleEmailAddress)) return true;
	return false;
}


function check_phone(possiblePhoneNumber)
{
	if (possiblePhoneNumber == null || possiblePhoneNumber == '') return false;

	// allow numbers
	var validChars = '0123456789';

	var digits = '';
	for (var i = 0; i < possiblePhoneNumber.length; ++i)
	{
		var ch = possiblePhoneNumber.charAt(i);
		if (validChars.indexOf(ch) == -1) return false;
		if (!isNaN(parseInt(ch, 10))) digits += '' + ch;
	}

	// there must be at least 7 digits for a US phone number
	if (digits.length < 7) return false;

	return true;
}

// min/max length, min/max value
function check_number(possibleNumber)
{
	if (possibleNumber == null || possibleNumber == '') return false;
	if (/^\d*$/.test(possibleNumber)) return true;
	return false;
}

function check_string(possibleString)
{
	return true;
}

function check_zip(possibleZip)
{
	if (possibleZip == null || possibleZip == '') return false;
	if (possibleZip.length == 5 && check_number(possibleZip)) return true;
	if (possibleZip.length == 10 && possibleZip.charAt(5) == '-' && check_number(possibleZip.substring(0,4)) && check_number(possibleZip.substring(6,9))) return true;
	if (document.forms[0].country.value != 'US') return true; 
	return false;
}

function value_of_radio(radioObj)
{
	for (var i = 0; i < radioObj.length; ++i)
		if (radioObj[i].checked) return radioObj[i].value;

	return '';
}

// validationType is optional (default is string), minLength is optional
function RequiredField(fieldName, description, validationType, minLength)
{
	this.fieldName = fieldName;
	this.description = description;
	this.validationType = (validationType ? validationType : 'string');
	this.minLength = (minLength ? minLength : 0);
}

