function validate_form(form_name)
{
   var validation_passed = true;
   var failed_message = "";

   for(var i = 0; i < form_name.length; i++)
   {
      element = form_name.elements[i];
     
      if((element.type == "text") || (element.type == "textarea") || (element.type == "password") || (element.type == "select-one"))
      {
         if((element.required) && (is_empty(element)))
         {
            failed_message += element.description + " is required!\n";
            validation_passed = false;
         }

         if((element.no_whitespace) && (has_whitespace(element)))
         {
            failed_message += element.description + " must not contain whitespace!\n";
            validation_passed = false;
         }

         if((element.field_match) && !fields_match(element, element.field_match))
         {
            failed_message += element.description + " must match " + element.field_match.description + "!\n";
            validation_passed = false;
         }

         if((element.is_email) && (!is_valid_email(element)))
         {
            failed_message += element.description + " is not a valid Email address!\n";
            validation_passed = false;
         }
			if((element.is_month) && (!is_valid_date_combo(element, element.day.value, element.year.value)))
			{
				failed_message += element.value + "-" + element.day.value + "-" + element.year.value + " is not a valid date!\n";
				validation_passed = false;
			}
			
			if((element.is_hour) && ((!is_valid_hour(element)) && (!is_empty(element))))
			{
				failed_message += element.value + " is not a valid hour!\n";
				validation_passed = false;
			}

			if((element.is_minute) && ((!is_valid_minute(element)) && (!is_empty(element))))
			{
				failed_message += element.value + " is not a valid minute!\n";
				validation_passed = false;
			}
		}
   }
   
   if(validation_passed)
   {
      return true;
   }
   else
   {
      alert(failed_message);
      return false;
   }
}

function has_whitespace(field)
{
   var whitespace_found = false;
   var check_char;

   if(!is_empty(field))
   {
      with(field)
      {
         for(var i = 0; i < value.length; i++)
         {
            check_char = value.charAt(i);
            if((check_char == " ") || (check_char == "\n") || (check_char == "\t"))
            {
               whitespace_found = true;
            }
         }
      }
   }

   return whitespace_found;
}

function is_empty(field, default_value)
{
   var empty_field = true
   var check_char;

   with(field)
   {
      if(value == default_value)
      {
         empty_field = true;
      }
      else
      {
         if(value == null || value == "")
         {
            empty_field = true;
         }
         else
         {
            for(var i = 0; i < value.length; i++)
            {
               check_char = value.charAt(i);
               if((check_char != " ") && (check_char != "\n") && (check_char != "\t"))
               {
                  empty_field = false;
               }
            }
         }
      }
   }

   return empty_field;
}

function is_valid_email(field)
{
   var email_re = /^[\w~!#$%&-]+([\.]{1}[\w~!#$%&-]+)*@[\w~!#$%&-]+([\.]{1}[\w~!#$%&-]+)+$/
   with(field)
   {
      return email_re.test(value);
   }
}

function is_valid_date_combo(month, day, year)
{
	var js_month;
	var check_date;
	
	js_month = month.value - 1;
	check_date = new Date(year, js_month, day);
	
	return ((day == check_date.getDate()) && (js_month == check_date.getMonth()) && (year == check_date.getFullYear()));
}

function is_valid_hour(field)
{
	return (field.value < 24);
}

function is_valid_minute(field)
{
	return (field.value < 60);
}

function fields_match(field_1, field_2)
{
   if (field_1.value == field_2.value)
   {
      return true;
   }
   else
   {
      return false;
   }
}

function blur_update(field, blur_value)
{
   with(field)
   {
      if(value == "")
      {
         value = blur_value;
         style.color = "#999999";
      }
   }
}

function focus_update(field, focus_value, default_value)
{
   with(field)
   {
      if(value == default_value)
      {
         value = focus_value;
         style.color = "#000000";
      }
   }
}