function isblank(s)
{  //
   // Return false if we find a non-blank (ie non-whitespace)
   // character anywhere in the string
   //
   for (var i = 0; i < s.length; i++)
   {  var c = s.charAt(i);
      if (c != ' ' && c != '\n' && c != '')
         return (false);
   }
   return (true);
}
function verify(f)
{  var msg;
   var empty_fields = "";
   var errors = "";
   //
   for (var i = 0; i < f.length; i++)
   {  var e = f.elements[i];
      if ((e.type == "text" || e.type == "textarea") && !e.optional)
      {  if (e.value == null || e.value == "" || isblank(e.value))
         {  empty_fields += "\n          " + e.name;
            continue;
         }
         if ((e.hasOwnProperty('numeric') && e.numeric) ||
	     (e.min != null && !isblank(e.min)) ||
             (e.max != null && !isblank(e.max)))
         {  var v = parseFloat(e.value);
            if (isNaN(v) ||
                (e.min != null && !isblank(e.min) && v < e.min) ||
                (e.max != null && !isblank(e.max) && v > e.max))
            {  errors += "- The field " + e.name + " must be a number";
               if (e.min != null && !isblank(e.min))
                  errors += " that is greater than " + e.min;
               if (e.max != null && !isblank(e.max) &&
		   e.min != null && !isblank(e.min))
                  errors += " and less than " + e.max;
               else
                  if (e.max != null && !isblank(e.max))
                     errors += " that is less than " + e.max;
               errors += ".\n";
            }
         }
      }
   }
   if (!empty_fields && !errors)
      return (true);
   msg  = "------------------------------------------------------------\n\n";
   msg += "The form was not submitted because of error(s).\n";
   msg += "             Please correct and resubmit\n"
   msg += "------------------------------------------------------------\n\n";
   if (empty_fields)
   {  msg += "- the following required fields are empty:" + empty_fields + "\n";
      if (errors)
         msg += "\n";
   }
   msg += errors;
   alert(msg);
   return (false);
}
