/**
 * @file
 * Triggers the display of a spinning icon when the form is submitted.
 */
(function ($) {

  Drupal.behaviors.spinner = {
    attach: function(context, settings) {
      // Store what triggered the submit.
      $('form').once('submit-resolver', function() {
        $(this).click(function(event) {
          $(this).data('clicked', $(event.target));
        });
        $(this).keypress(function(event) {
          // On enter the first submit button is assumed as is most often the
          // case and this is part of the HTML 5 specification, although some
          // Browsers may choose the button with the lowest tab-index.
          if (event.which == 13) {
            $(this).data('clicked', $(':submit', this).first());
          }
        });
      });
      for (var base in settings.spinner) {
        var id = '#' + base;
        $(id, context).once('spinner', function () {
          var spinner = new Spinner(settings.spinner[base].opts);
          $(id).parents('form').one('submit', function(event) {
            if ($(this).data('clicked').is(id)) {
              event.preventDefault();
              // Add Message.
              var message = $('<div/>').text(settings.spinner[base].message);
              $(id).after(message);
              // Make UI changes.
              spinner.spin(this);
              $('#edit-next').hide();
              $('#edit-prev').hide(); 
              // Submit the form after a set timeout, this handles problems with
              // safari, in that safari submit's immediately..
              if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { 
                $(':submit').attr('disabled', 'disabled');
              }
              setTimeout(function() {
                // Allow for the button to be clicked, then click it then
                // prevent the default behavoir.
                $(id).removeAttr('disabled')
                  .click()
                  .click(function(event) {
                    event.preventDefault();
                  });
              }, 500);
            }
            return true;
          });
        });
      }
    }
  };
})(jQuery);