/*------------------------------------------------------------------------------
Credit: Code modified from 'JavaScript: The Definitive Guide, 3rd Edition.
by David Flanagan. Copyright (c) 1998 O'Reilly & Associates.
------------------------------------------------------------------------------*/

function isblank(s)
/*--------------------------------------------------------------
A utility function that returns true if a string contains only
whitespace characters.
--------------------------------------------------------------*/
{
   for ( var i = 0; i < s.length; i++ )
   {
      var c = s.charAt(i);
      if ((c != ' ') && (c != '\n') && (c != '\t'))
         return false;
   }
   return true;
}

function Verify(f)
/*--------------------------------------------------------------
This is the function that performs form verification. It will be
invoked from the onSubmit() event handler. The handler should return
whatever value this function returns.
--------------------------------------------------------------*/
{
   var msg;
   var empty_fields = "";
   var errors = "";

   /*-------------------------------------------------------------------
   Loop through the elements of the form, looking for all
   text and textarea elements that don't have an "optional" property
   defined. Then, check for fields that are empty and make a list of them.
   Also, if any of these elements have a "min" or a "max" property defined,
   then verify that they are numbers and that they are in the right range.
   Put together error messages for fields that are wrong.
   -------------------------------------------------------------------*/
   for (var i = 0; i < f.length; i++)
   {
      var e = f.elements[i];
      if ( e.mandatory && ( (e.type == "text") || (e.type == "textarea") || (e.type == "password") ) )
      {
         // first check if the field is empty
         if ((e.value == null) || (e.value == "") || isblank(e.value))
         {
            s = e.name;
            if (s.search( "FLD" ) > -1)  
               s = s.slice(4);
               
            empty_fields += "\n          " + s;
            continue;
         }

         // Now check for fields that are supposed to be numeric.
         if (e.numeric || (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 += "- The field " + e.name + " must be a number";
               if (e.min != null)
                  errors += " that is greater than " + e.min;

               if (e.max != null && e.min != null)
                  errors += " and less than " + e.max;
               else if (e.max != null)
                  errors += " that is less than " + e.max;
                  errors += ".\n";
            }
         }
      }
   }

   /*------------------------------------------------------
   Now, if there were any errors, display the messages, and
   return false to prevent the form from being submitted.
   Otherwise return true.
   ------------------------------------------------------*/
   if (!empty_fields && !errors) return true;

   msg  = "______________________________________________________\n\n"
   msg += "The form was not submitted because of the following error(s).\n";
   msg += "Please correct these error(s) and re-submit.\n";
   msg += "______________________________________________________\n\n"

   if (empty_fields)
   {
      msg += "- The following required field(s) are empty:"
               + empty_fields + "\n";
      if (errors) msg += "\n";
   }
   msg += errors;
   alert(msg);
   return false;
}
