/* Validation and dynamic stuff for the Apply Now page. */
/* Dependencies: jquery.js, listwidget.js, profile_listwidgets.js, form.js, common.js, rsv.js */
(function($) {
  /* Requires something like this defined globally before this script is invoked...
  var APPLY_NOW_RULES = [
    ['required', 'first_name', "Please enter your first name."],
    ['required', 'last_name', "Please enter your last name."],
    ['required', 'bio', "Please enter a brief personal bio."],
    ['required', 'mission_statement', "Please enter your personal mission statement."],
    ['required', 'address', "Please enter your street address."],
    ['required', 'city', "Please enter the name of your city."],
    ['required', 'state', "Please enter your state abbreviation."],
    ['reg_exp', 'state', '^[A-Z]{2}$', "Your state abbreviation must be 2 letters."],
    ['required', 'zip', "Please enter your ZIP code."],
    ['reg_exp', 'zip', '^\\d{5}(\\-?\\d{4})?$', "Please enter a 5- or 9-digit ZIP code."],
    ['required', 'country', "Please enter the name of your country."],
    ['required', 'phone', "Please enter your phone number."],
    ['reg_exp', 'phone', '^[0-9\\-\\(\\) ]+$', "Please include only digits, spaces, '(', ')', and/or '-' in your phone number."],
    ['required', 'email', "Please enter your email address."],
    ['valid_email', 'email', "Please enter a valid email address."],
    ['same_as', 'email2', 'email', "Please enter the same email address twice for confirmation."],
    ['reg_exp', 'website', '^(http(s?)\://\\S+|)$', "Please enter a single Web address that begins with 'http://' or 'https://'."]
  ];*/
  
  var presentationsWidget = new PresentationWidget();
  var engageWidget = new EngagementWidget();
  var publicationsWidget = new PublicationWidget();
  
  $(document).ready(function() {
    // Set up the past-engagement widget
    engageWidget.setContainer('#applySpeakerEngagements');
    engageWidget.render();
    
    // Set up the presentation widget
    presentationsWidget.setContainer('#applySpeakerPresentations');
    presentationsWidget.render();
    
    // And the publication widget
    publicationsWidget.setContainer('#applySpeakerPublications');
    publicationsWidget.render();
    
    // Set up on-submit handler of the main form to trigger validation...
    $('#applyform').submit(function() {
      try {
        var form = $(this).scrape(true);
        
        // First things first - balk if they do not check the agreement box (TODO: HOW exactly?)
        if (form['agree'] != '1') {
          alert("Please confirm you agree with our statement of faith before continuing...");
          return false;
        }
        
        // Now, bundle up the dynamic items (engagements, books, presentations, etc.) and send them up as JSON
        this['__engagements__'].value = JSON.stringify(engageWidget.records);
        this['__presentations__'].value = JSON.stringify(presentationsWidget.records);
        this['__publications__'].value = JSON.stringify(publicationsWidget.records);
        
        var errors = rsv.validate(form, APPLY_NOW_RULES);
        var focusName = null;
        var messages = [];
        
        for (var err in errors) {
          if (focusName == null) { focusName = err }
          messages.push('* ' + errors[err]);
        }
        
        if (messages.length > 0) {
          alert('Please address the following issues before submitting your application:\n' + messages.join('\n'));
          $('*[name="' + focusName + '"]').focus();
          return false;
        } else {
          return true;
        }
      } catch (e) {
        alert('Error submitting application:\n(' + e.message + ')');
        return false;
      }
    });
  });
})(jQuery);

