$(document).on('input submit', 'form', function(evento) {

  if (evento.type === 'input') {

    $('div.alert.alert-danger').text(null);

    $(this).find('.is-invalid').removeClass('is-invalid');

    evento.target.value = evento.target.value.trimLeft();

    return false

  }

  evento.preventDefault();

  if (!this.getAttribute('action'))
    return false
  ;

  $.ajax({
    url: this.action,
    type: this.method,
    data: $(this).serialize(),
    beforeSend: (peticion, configuracion) => {

      $('div.alert.alert-danger').text(null);

      $(this).find('.is-invalid').removeClass('is-invalid')

    },
    success: () => location.reload(),
    error: (peticion, estado) => {

      let error = '';

      switch (peticion.status) {

        case 0: error = '¡No tienes conexión a internet para poder iniciar sesión!'; break;

        case 419:

          error = '¡El tiempo de autenticación ha expirado, por favor espere unos segundos y vuelva a intentarlo!';

          setTimeout(() => location.reload(), 5000)

        break;

        case 500: error = '¡Se ha producido un error interno, por favor inténtelo de nuevo o más tarde!'; break;

        default:

          error = peticion.responseJSON[0].mensaje;

          $(this).find(`[name="${peticion.responseJSON[0].campo}"]`).addClass('is-invalid').focus()

        break;

      }

      $('div.alert.alert-danger').text(error)

    },
    complete: function(peticion, estado) {}
  })

})