// Requires jquery
NWF = {
  petitionUrl: '/send/email',
  mailingListUrl: '/storage/store',
  generalError: "Sorry, there was an error on our end.\nWe've been notified of the problem.\nPlease try your submission again.",
  errorMessages: {
    email: "* Please enter a valid email address",
    subject: "* Please provide a subject for your e-mail",
    message: "* Please provide text for your e-mail",
    firstname: "* Please provide your first name or initial",
    lastname: "* Please provide your last name or initial",
    city: "* Please provide your city of residence",
    zip: "* Please provide your ZIP or postal code",
    address: "* Please provide your mailing address"
  },
  regexes: {
    email: (/.+@.+\..+/),
    city: (/[A-Za-z]+/),
    zip: (/[0-9]+/)
  },

  init: function () {
    // $('#widget').hide();
    $('#home, #intro, #petition, #recipients, #mailing_list, #thanks').addClass('panel');
    $('#petition_form').submit(function (evt) {
      evt.preventDefault();
      if (!NWF.validate(evt.target.id)) {
        return;
      }
      // massage the params:
      var userName = $('#first_name_input').val() + ' ' + $('#last_name_input').val();
      var userAddress = $('#message_city').val() + ', ' + $('#message_state').val() + ' ' + $('#message_zip').val();
      $('#message_from_name').val(userName);
      $('#message_message').val($('#user_message').val() + '\n' + userName + '\n' + userAddress);
      
      var params = $(evt.target).serialize();
      $.ajax({
        type: "POST",
        url: NWF.petitionUrl,
        data: params,
        success: function () {
          // show next panel:
          var panelId = evt.target.action.match(/[^#]+$/)[0];
          NWF.showPanel(panelId);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
          alert(NWF.generalError);
        }
      });
      
      // prepopulate the next form...
      $('#send_to_me').val($('#my_email').val());
      $('#storage_city').val($('#message_city').val());
      $('#storage_state').val($('#message_state').val());
      $('#storage_zip').val($('#message_zip').val());
    });
    $('#mailing_list_form').submit(function (evt) {
      evt.preventDefault();
      var panelId = evt.target.action.match(/[^#]+$/)[0];
      if ($('#email_opt_in').attr('checked') || $('#signup_postal').attr('checked')) {
        // get email opt-in info from the other form.
        $('#storage_signup_email').val($('#email_opt_in').val());
        if ($('#email_opt_in').attr('checked')) {
          $('#storage_email_address').val($('#my_email').val());
        }

        var params = $(evt.target).serialize();
        if (!NWF.validate(evt.target.id)) {
          return;
        }
        $.ajax({
          type: "POST",
          url: NWF.mailingListUrl,
          data: params,
          success: function () {
            // show next panel:
            NWF.showPanel(panelId);
          },
          error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(NWF.generalError);
          }
        });
      } else {
        NWF.showPanel(panelId);
      }

    });
    // Replace submit links with buttons
    $('p.submit').each(function () {
      var node = $(this);
      var linkTo = node.children('a').attr('href').replace('#', '');
      var linkText = node.children('a').html();
      if (node.attr('title')) {
        node.after('<input type="image" class="nav submit" value="' + linkText + '" name="' + linkTo + '" src="/images/skin_5/' + node.attr('title') + '">');
      } else {
        node.after('<input type="submit" class="nav submit" value="' + linkText + '" name="' + linkTo + '">');
      }
      node.hide();
    });
    // add nav handlers to new buttons & other links
    $('.nav').click(function (evt) {
      evt.preventDefault();
      var anchor = $(evt.target);
      if (anchor.attr('tagName').toLowerCase() != 'input' && anchor.attr('tagName').toLowerCase() != 'a') {
        anchor = anchor.parents('a');
      }
      var href, name;
      if (name = anchor.attr('name')) { // inputs
        NWF.showPanel(name);
      } else if (href = anchor.attr('href')) {
        var panelId = href.match(/[^#]+$/)[0];
        NWF.showPanel(panelId);
      }
    });
    // $('#widget').show(); // this causes all elements inside widget to be shown in safari?!
    NWF.showPanel('home');
  },
  
  showPanel: function (id) {
    if (id == 'home') {
      $('#widget_wrapper').css('backgroundImage', 'url(/images/skin_5/bg_top.jpg)');
      $('#widget').css('backgroundImage', 'url(/images/skin_5/bg_bear.jpg)');
      $('#footer').css('backgroundImage', 'url(/images/skin_5/footer.png)');
      // set alpha filter for IE < 7
      /*@cc_on
         @if (@_jscript_version <= 5.6)
          $('#footer').css('backgroundImage', 'none');
          $('#footer').css('filter', NWF.ieAlphaFilter('/images/skin_5/footer.png'));
         @end
      @*/
    } else {
      $('#widget_wrapper').css('backgroundImage', 'url(/images/skin_5/bg_inside.jpg)');
      $('#widget').css('backgroundImage', 'url(/images/skin_5/bg_inside_bottom.jpg)');
      $('#footer').css('backgroundImage', 'url(/images/skin_5/footer_inside.png)');
      // set alpha filter for IE < 7
      /*@cc_on
         @if (@_jscript_version <= 5.6)
          $('#footer').css('backgroundImage', 'none');
          $('#footer').css('filter', NWF.ieAlphaFilter('/images/skin_5/footer_inside.png'));
         @end
      @*/
    }
    $('.panel').hide();
    $('#'+id).show();
  },
  
  ieAlphaFilter: function (src, mode) {
    mode = mode || 'scale';
    return "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')";
  },
  
  // make sure required fields are entered on the panel given
  validate: function (formId) {
    var errorMessages = '';
    switch (formId) {
      case 'petition_form': 
        errorMessages = NWF.validatePetitionForm();
        break;
      case 'mailing_list_form':
        errorMessages = NWF.validateMailingListForm();
        break;
      default:
        errorMessages = NWF.generalError;
    }
    if (errorMessages.length == 0) {
      return true;
    } else {
      alert("Please correct the following problems before continuing:\n\n" + errorMessages);
      return false;
    }
  },
  
  // return an error message (string)
  // test for empty string (==success)
  validatePetitionForm: function () {
    var errors = [];
    if ($('#user_message').val().length == 0) { errors.push(NWF.errorMessages.message); }
    if ($('#first_name_input').val().length == 0) { errors.push(NWF.errorMessages.firstname); }
    if ($('#last_name_input').val().length == 0) { errors.push(NWF.errorMessages.lastname); }
    if (!NWF.regexes.zip.test($('#message_zip').val())) { errors.push(NWF.errorMessages.zip); }
    if (!NWF.regexes.city.test($('#message_city').val())) { errors.push(NWF.errorMessages.city); }
    if (!NWF.regexes.email.test($('#my_email').val())) { errors.push(NWF.errorMessages.email); }
    return errors.join('\n');
  },
  
  validateMailingListForm: function () {
    var errors = [];
    if ($('#signup_postal').attr('checked')) {
      if ($('#storage_addr1').val().length == 0) { errors.push(NWF.errorMessages.address); }
      if ($('#storage_city').val().length == 0) { errors.push(NWF.errorMessages.city); }
      if ($('#storage_zip').val().length == 0) { errors.push(NWF.errorMessages.zip); }
    }
    return errors.join('\n');
  }
};

$(NWF.init);
