function person_validate(form)
{
   var errors = [];
   if (form.firstname.value == "")
      errors.push("Please enter a first name");
   if (form.lastname.value == "")
      errors.push("Please enter a last name");
   if (form.address.value == "")
      errors.push("Please enter an address");
   if (form.city.value == "")
      errors.push("Please enter a city");
   if (form.state.value == "")
      errors.push("Please enter a state");
   if (form.zip.value == "")
      errors.push("Please enter a zip code");
   if (form.phone.value == "")
      errors.push("Please enter a phone number");
   return errors;
}

function volunteer_validate(form)
{
   var errors = person_validate(form);
   var radios = collect_radios(form);
   if (!form.time1.checked &&
       !form.time2.checked &&
       !form.time3.checked &&
       !form.time4.checked &&
	   !form.time5.checked &&
       !form.time6.checked)&&
       !form.time7.checked)
      errors.push("Please select a time");
   if (form.task.selectedIndex <= 0)
      errors.push("Please select a task");
   if (radios.shirtsize == null)
      errors.push("Please choose a shirt size");

   return handle_errors(errors);
}

function friday_validate(form)
{
   var errors = person_validate(form);
   var radios = collect_radios(form);
   if (radios.dinner == null)
      errors.push("Are you planning to attend the dinner?");

   return handle_errors(errors);
}

function participant_validate(form)
{
   var errors = person_validate(form);
   var radios = collect_radios(form);
   if (radios.course == null)
      errors.push("Please select a course length");
   if (radios.shuttle == null)
      errors.push("Please decide whether you will use the morning shuttle or not");
   if (radios.shirttype == null)
      errors.push("Please choose a shirt type");
   if (radios.shirtsize == null)
      errors.push("Please choose a shirt size");
   if (form.emergency_contact.value == "")
      errors.push("Please enter an emergency contact");
   if (form.emergency_phone.value == "")
      errors.push("Please enter an emergency phone");
   if (form.waived != null &&
       !form.waived.checked &&
       !form.guardian.checked)
      errors.push("You or your guardian must agree to the release");

   // only used for admin form
   if (form.paid != null && !check_float(form.paid.value))
      errors.push("Paid amount must be a decimal number");
   if (form.paiddate != null && !check_date(form.paiddate.value))
      errors.push("Paid date must be a yyyy-mm-dd date");

   return handle_errors(errors);
}

function collect_radios(form)
{
   var vals = {};
   for (var i=0; i<form.elements.length; i++)
   {
      var e = form.elements[i];
      if (e.type == "radio" && e.checked)
      {
         vals[e.name] = e.value;
      }
   }
   return vals;
}

function handle_errors(errors)
{
   if (errors.length > 0)
   {
      alert("Some fields are incomplete or incorrect:\n-- "+errors.join("\n-- "));
      return false;
   }
   else
   {
      return true;
   }
}

function check_float(value)
{
   if (value == "" || !isNaN(parseFloat(value)))
   {
      return true;
   }
   else
   {
      return false;
   }
}

function check_date(value)
{
   if (value == "")
   {
      return true;
   }
   else
   {
      var parts = value.split("-");
      if (parts.length == 3 &&
          parts[0] >= 2000 && parts[0] <= 2100 &&
          parts[1] >= 1 && parts[1] <= 12 &&
          parts[2] >= 1 && parts[2] <= 31)
      {
         return true;
      }
      else
      {
         return false;
      }
   }
}

