function validateSub(x) {
	var msg='';
	switch (true) {
		case (!(x.mask==undefined)):
			if (!x.value.match(eval('/'+x.mask+'/'))) 
			msg=msg + validateFormatName(x) + ' does not match the expected input.\n';
			break;
		case ((x.name.toLowerCase().match(/email/)) && (!x.value.match(/^.+\@.+\..+$/))): 
			msg=msg + validateFormatName(x) + ' must be a valid email address.\n';
			break;
		case ((x.name.toLowerCase().match(/(phone|fax|cellular|primary|alternate)/)) && (!x.value.match(/^[\d\+\(\)\-\.\x ]{7,}$/))): 
			msg=msg + validateFormatName(x) + ' must be a valid phone number.\n';
			break;
	}
	return msg;
}

function validateFormatName(x) {
	var out=x.name.charAt(0).toUpperCase() + x.name.substr(1).toLowerCase();
	out=out.replace(/[_-]/g,' ');
	return out;   
}

function validate(f) {
	var msg='';
	for (var i=0;i<f.elements.length;i++) {
		if (f.elements[i].name!='') {
			if (f.elements[i].id=='required') {
				if (f.elements[i].type=='checkbox' && f.elements[i].checked==false) {
					msg=msg+'Please check all required checkboxes: ' + validateFormatName(f.elements[i]) + '.\n';
				} else {
					if (f.elements[i].value=='') {
						msg=msg + validateFormatName(f.elements[i]) + ' is required.\n';
					} else {
						msg=msg+validateSub(f.elements[i])
					}	
				}
			} else {
				if (f.elements[i].value!='') {
					msg=msg+validateSub(f.elements[i])
				}
			}
		}
	}
	if (msg=='') return true;
	alert('Please fix the following:\n\n' + msg);
	return false;
}
