// Validates fields tagged as "required".
function verify(f)
{
	var msg;
	var empty_fields = "";
	var errors = "";
	
	// Cycle through fields looking for numeric and/or required fields
	for( var i = 0; i < f.length; i++ )
	{
		var e = f.elements[i];
		// Use form name if nice name is blank
		if( !e.label )
			e.label = e.name; 

        // Check for empty entries in required fields based on field types
        if (  e.required && ((e.type == "text") || (e.type == "textarea") || (e.type == "hidden") || (e.type == "password")) ) {
			if( (e.value == null) || (e.value == "") || isblank(e.value) ) {
				empty_fields += "\n		" + e.label;
				continue;
			}		
		}
		else if( e.required && (e.type == "select-one") )
		{
			var itemSelected = false;
			for( var j = 1; j < e.options.length; j++ ) { // Always skip 0th element - used for header "Select one.."
				if( e.options[j].selected ) {
					if( e.options[j].text != null && e.options[j].text != "" && !isblank(e.options[j].text) ) {
						itemSelected = true;
						break;
					}
				}
			}
			if( !itemSelected ) {
				empty_fields += "\n		" + e.label;
				continue;
			}
		}
		else if( e.required && (e.type == "select-multiple") )
		{
			var itemSelected = false;
			for( var j = 0; j < e.options.length; j++ ) {
				if( e.options[j].selected ) {
					if( e.options[j].text != null && e.options[j].text != "" && !isblank(e.options[j].text) ) {
						itemSelected = true;
						break;
					}
				}
			}
			if( !itemSelected ) {
				empty_fields += "\n		" + e.label;
				continue;
			}
		}

		// Validate all numeric fields
		if( ( e.numeric && (e.required || e.value) ) || (e.min) || (e.max) )
		{	
			var v = parseFloat(e.value);
			if( isNaN(v) || ((e.min) && (v < e.min)) || ((e.max) && (v > e.max)))
			{
				errors += ifvFieldNumeric1 + " '" + e.label + "' " + ifvFieldNumeric2; //"- The field " + e.label + " must be a number";
				if( e.min )
					errors += ifvGreater + " " + e.min; //" that is greater than or equal to " + e.min;
				if( e.max && e.min )
					errors += ifvLess1 + " " + e.max; //" and less than " + e.max;
				else if( e.max  )
					errors += ifvLess2 + " " + e.max; //" that is less than " + e.max;
				errors += ".\n";
			}
		}
/*
		// Validate all numeric fields
		if( ( e.numeric && (e.required || e.value) ) || (e.min != null) || (e.max != null) )
		{	
			var v = parseFloat(e.value);
			if( isNaN(v) || ((e.min != null) && (v < e.min)) || ((e.max != null) && (v > e.max)))
			{
				errors += ifvFieldNumeric1 + " '" + e.label + "' " + ifvFieldNumeric2; //"- The field " + e.label + " must be a number";
				if( e.min != null )
					errors += ifvGreater + " " + e.min; //" that is greater than or equal to " + e.min;
				if( e.max != null && e.min != null )
					errors += ifvLess1 + " " + e.max; //" and less than " + e.max;
				else if( e.max != null )
					errors += ifvLess2 + " " + e.max; //" that is less than " + e.max;
				errors += ".\n";
			}
		}
*/		
		if ( e.email && (e.required || e.value) )
		{
			if (window.RegExp)
			{
				var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
				var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,4})(\\]?)$";
				var reg3str = " ";
				var reg1 = new RegExp(reg1str);
				var reg2 = new RegExp(reg2str);
				var reg3 = new RegExp(reg3str);

				//if (reg1.test(e.value) || !reg2.test(e.value) || reg3.test(e.value)) {
				if (reg1.test(e.value) || !reg2.test(e.value)) {
					errors += ifvValidEmail1 + " '" + e.label + "' " + ifvValidEmail2; //"- The field " + e.label + " must be a valid email address.\n";
				}
				if (reg3.test(e.value)) {
					errors += ifvValidEmail1 + " '" + e.label + "' " + ifvValidEmail3; //"- The field " + e.label + " must be a valid email address.\n";
				}
			} else {
				if ((e.value.indexOf('@') == -1) || (e.value.indexOf('.') == -1)) {
					errors += ifvValidEmail1 + " '" + e.label + "' " + ifvValidEmail2; //"- The field " + e.label + " must be a valid email address.\n";
				}
			}
		}
		
		if ( e.date && (e.required || e.value) )
		{
			if (isNaN(Date.parse(e.value))) {
				errors += ifvValidDate1 + " '" + e.label + "' " + ifvValidDate2; //"- The field " + e.label + " must be a valid date.\n";
			}
		}
	}
	
	// Create error report
	if( !empty_fields && !errors ) return true;
	
	//msg = "Your information wasn't submitted due to error(s).\n";
	//msg += "Correct the error(s) then click Update.\n";
	//msg += "______________________________________________________\n\n";
	msg = ifvValidateMsg1;
	if( empty_fields ) {
		//msg += "- MISSING DATA:" + empty_fields + "\n";
		msg += ifvValidateMsg2 + empty_fields + "\n" + ifvValidateMsg3 + "\n";
		if( errors ) msg += "\n";
	}
	msg += errors;
	alert(msg);
	return false;
}