/*

  Client-side JavaScript for form validation on Pride London web sites

*/

// onsubmit function used in /getinvolved/volunteer.asp
// Returns true if form validation succeeds
function validate_volunteer_form(form1)
{
  var bFormOkay;

  bFormOkay = true;

  bFormOkay = check_mandatory_field(bFormOkay,
                                    "First name",
                                    form1.first_name);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Last name",
                                    form1.last_name);
  bFormOkay = check_checkbox_list(bFormOkay,
                                  "Areas to help with",
                                  form1.volunteer_areas);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Times available",
                                    form1.times_available);

  return bFormOkay;

}

// onsubmit function used in /getinvolved/feedback.asp
// Returns true if form validation succeeds
function validate_feedback_form(form1)
{
  var bFormOkay;

  bFormOkay = true;

  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Name",
                                    form1.name);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Location",
                                    form1.location);

  return bFormOkay;

}
// onsubmit function used in /parade/float-apply.asp
// Returns true if form validation succeeds
function validate_float_form(form1)
{
  var bFormOkay;
  var iContactIndex;

  bFormOkay = true;

  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Name of float",
                                    form1.float_name);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Name of organisation",
                                    form1.organisation);
  bFormOkay = check_radio_list(bFormOkay,
                               "Type of organisation",
                               form1.organisation_type);

  /* Certain fields are mandatory, but for first contact only */
  for (iContactIndex = 0; iContactIndex < 1; iContactIndex++)
  {
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "First name",
                                      form1.first_name[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Last name",
                                      form1.last_name[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Position within organisation",
                                      form1.role[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Address",
                                      form1.address[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Postcode",
                                      form1.postcode[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Email address",
                                      form1.email_addr[iContactIndex]);
  }
  bFormOkay = check_phone_numbers(bFormOkay,
                                  "main contact person",
                                  form1, 0);

  bFormOkay = check_radio_list(bFormOkay,
                               "Entry type",
                               form1.entry_type);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Concept, theme and design",
                                    form1.concept);
  bFormOkay = check_mandatory_checkbox(bFormOkay,
                                       "I confirm I have read the Float Briefing Pack",
                                       form1.read_briefing_pack);
  bFormOkay = check_mandatory_checkbox(bFormOkay,
                                       "I confirm we will be able to provide safety stewards",
                                       form1.safety_stewards);

  return bFormOkay;

}

// onsubmit function used in /conference/apply.asp
// Returns true if form validation succeeds
function validate_conference_form(form1)
{
  var bFormOkay;

  bFormOkay = true;

  bFormOkay = check_mandatory_field(bFormOkay,
                                    "First name",
                                    form1.first_name);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Last name",
                                    form1.last_name);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Address",
                                    form1.address);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Email address",
                                    form1.email_addr);
  bFormOkay = check_radio_list(bFormOkay,
                               "Gender",
                               form1.gender);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Ethnic origin",
                                    form1.ethnic_origin);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Organisation",
                                    form1.organisation);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Country of organisation",
                                    form1.organisation_country);

  bFormOkay = check_mandatory_checkbox(bFormOkay,
                                       "I confirm that my knowledge of English is sufficient",
                                       form1.english_language);

  return bFormOkay;

}

// onsubmit function used in /parade/group-reg.asp
// Returns true if form validation succeeds
function validate_group_form(form1)
{
  var bFormOkay;
  var iContactIndex;

  bFormOkay = true;

  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Name of organisation",
                                    form1.organisation);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Description of group",
                                    form1.group_desc);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Number of participants",
                                    form1.num_participants);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "What will the group be doing",
                                    form1.participation_style);

  /* Certain fields are mandatory, but for first contact only */
  for (iContactIndex = 0; iContactIndex < 1; iContactIndex++)
  {
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "First name",
                                      form1.first_name[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Last name",
                                      form1.last_name[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Position within organisation",
                                      form1.role[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Address",
                                      form1.address[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Postcode",
                                      form1.postcode[iContactIndex]);
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Email address",
                                      form1.email_addr[iContactIndex]);
  }
  bFormOkay = check_phone_numbers(bFormOkay,
                                  "main contact person",
                                  form1, 0);
  return bFormOkay;

}

// onsubmit function used in /festival/event-reg.asp
// Returns true if form validation succeeds
function validate_event_form(form1)
{
  var bFormOkay;
  var iContactIndex;

  bFormOkay = true;

  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Name of event",
                                    form1.festival_event_name);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Dates and times",
                                    form1.dates_times);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Venue details",
                                    form1.venue_info);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Description of event",
                                    form1.copy_entered);
  /* pricing info is mandatory if "free event" is not ticked */
  if (!form1.free_event.checked)
  {
    bFormOkay = check_mandatory_field(bFormOkay,
                                      "Ticket prices or tick 'free event'",
                                      form1.pricing_info);
  }

  bFormOkay = check_mandatory_field(bFormOkay,
                                    "First name",
                                    form1.first_name);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Last name",
                                    form1.last_name);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Position within organisation",
                                    form1.role);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Address",
                                    form1.address);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Postcode",
                                    form1.postcode);
  bFormOkay = check_mandatory_field(bFormOkay,
                                    "Email address",
                                    form1.email_addr);
  if (false)
  {
    // !! Cannot check instance 0 when only one instance
    bFormOkay = check_phone_numbers(bFormOkay,
                                    "contact person",
                                    form1, 0);
  }
  return bFormOkay;

}

// Checks whether mandatory field is filled in
// If not, displays error message, sets focus to field
// Returns true if all fields in form so far are okay
function check_mandatory_field(bFormOkay, strCaption, objField)
{
  var bFieldOkay;
  var reBlank = new RegExp("^ *$", "i");

  bFieldOkay = !(reBlank.exec(objField.value));

  if (!bFieldOkay)
  {
    alert("You must fill in a value for '" + strCaption + "'");
    if (bFormOkay)
    {
      // First error on this form: set focus to the field
      objField.focus();
    }
    bFormOkay = false;
  }

  return bFormOkay;
}

// Checks that at least one of three phone numbers is filled in
// If not, displays error message, sets focus to field
// Returns true if all fields in form so far are okay
function check_phone_numbers(bFormOkay, strCaption, objForm, iInstance)
{
  var bFieldOkay;
  var reBlank = new RegExp("^ *$", "i");

  bFieldOkay = !(reBlank.exec(objForm.phone_mobile[iInstance].value) &&
                 reBlank.exec(objForm.phone_day[iInstance].value) &&
                 reBlank.exec(objForm.phone_eve[iInstance].value));

  if (!bFieldOkay)
  {
    alert("You must fill in at least one phone number for the " + strCaption);
    if (bFormOkay)
    {
      // First error on this form: set focus to the field
      objForm.phone_mobile[iInstance].focus();
    }
    bFormOkay = false;
  }

  return bFormOkay;
}

// Checks that at least one checkbox in a list is ticked
function check_checkbox_list(bFormOkay, strCaption, objField)
{
  var bFieldOkay = false;
  var iFieldIndex;

  for (iFieldIndex = 0; iFieldIndex < objField.length; iFieldIndex++)
  {
    if (objField[iFieldIndex].checked)
    {
      bFieldOkay = true;
      break;
    }
  }

  if (!bFieldOkay)
  {
    alert("You must tick at least one option for '" + strCaption + "'");
    if (bFormOkay)
    {
      // First error on this form: set focus to the first option for the field
      objField[0].focus();
    }
    bFormOkay = false;
  }

  return bFormOkay;
}

// Checks that a mandatory checkbox is ticked
function check_mandatory_checkbox(bFormOkay, strCaption, objField)
{
  var bFieldOkay = false;

  if (objField.checked)
  {
    bFieldOkay = true;
  }

  if (!bFieldOkay)
  {
    alert("You must tick the checkbox for '" + strCaption + "'");
    if (bFormOkay)
    {
      // First error on this form: set focus to the first option for the field
      objField.focus();
    }
    bFormOkay = false;
  }

  return bFormOkay;
}

// Checks that one radio button in a list is seleced
function check_radio_list(bFormOkay, strCaption, objField)
{
  var bFieldOkay = false;
  var iFieldIndex;

  for (iFieldIndex = 0; iFieldIndex < objField.length; iFieldIndex++)
  {
    if (objField[iFieldIndex].checked)
    {
      bFieldOkay = true;
      break;
    }
  }

  if (!bFieldOkay)
  {
    alert("You must select one option for '" + strCaption + "'");
    if (bFormOkay)
    {
      // First error on this form: set focus to the first option for the field
      objField[0].focus();
    }
    bFormOkay = false;
  }

  return bFormOkay;
}
