// ajax submit
jQuery.fn.submitAjax = function(options) {
	var settings = $.extend({
		trigger: null,
		triggerReplace: null,
		url: null,
		successRegexp: '^ok$',
		onSuccess: null,
		onFailure: null
  }, options);
	settings.form = $(this);

  settings.form.find('input[type=submit]').attr('disabled', true);
	
	if (!settings.trigger) {
		settings.trigger = settings.form.find('input[type=submit]').eq(0);
		if (settings.trigger.length == 0)
			settings.trigger = null;
	}
	if (settings.trigger) {
		if (settings.triggerReplace) {
			if (typeof(settings.triggerReplace) == 'boolean')
				settings.triggerReplace = '<span>Please wait...</span>';
			settings.triggerReplace = $(settings.triggerReplace).insertBefore(settings.trigger);
			settings.trigger.hide();
		}
		else
			settings.trigger.data('val', settings.trigger.attr('value')).attr('value', 'Please wait...');
	}

  $.ajax({
    url: settings.url ? settings.url : settings.form.attr('action'),
    data: settings.form.serialize(),
    type: 'POST',
		success: function(data) {
      settings.form.find('input[type=submit]').attr('disabled', false);

			if (settings.trigger) {
				if (settings.triggerReplace) {
					settings.triggerReplace.remove();
					settings.trigger.show();
				}
				else
					settings.trigger.attr('value', settings.trigger.data('val'));
			}

      var successRegexp = new RegExp(settings.successRegexp);
      if (data.match(successRegexp)) {
        if (settings.onSuccess)
          settings.onSuccess(settings.form, data);
      }
      else {
        if (settings.onFailure)
          settings.onFailure(settings.form, data);
				else
					alert(data);
      }
    }
  })
};