jQuery(document).ready(function($) {
var $form = $('#contact-form');
var $message = $('#form-message');
var $submitBtn = $form.find('button[type="submit"]');
// Client-side validation
$form.on('submit', function(e) {
e.preventDefault();
// Remove previous validation states
$form.find('.is-invalid').removeClass('is-invalid');
$message.html('');
// Check HTML5 validation
if (!this.checkValidity()) {
this.classList.add('was-validated');
return false;
}
// Prepare form data
var formData = {
action: 'sancho_contact',
nonce: sancho_ajax.nonce,
name: $('#contact-name').val().trim(),
email: $('#contact-email').val().trim(),
phone: $('#contact-phone').val().trim(),
subject: $('#contact-subject').val().trim(),
message: $('#contact-message').val().trim()
};
// Show loading state
var originalText = $submitBtn.html();
$submitBtn.html('<i class="fas fa-spinner fa-spin"></i> Enviando...')
.prop('disabled', true);
// Submit via AJAX
$.ajax({
url: sancho_ajax.ajax_url,
type: 'POST',
data: formData,
dataType: 'json',
success: function(response) {
if (response.success) {
$message.html(
'<div class="alert alert-success alert-dismissible fade show">' +
'<i class="fas fa-check-circle"></i> ' + response.data +
'<button type="button" class="close" data-dismiss="alert">' +
'<span>×</span></button></div>'
);
// Reset form
$form[0].reset();
$form.removeClass('was-validated');
// Scroll to message
$('html, body').animate({
scrollTop: $message.offset().top - 100
}, 500);
} else {
$message.html(
'<div class="alert alert-danger alert-dismissible fade show">' +
'<i class="fas fa-exclamation-triangle"></i> ' + response.data +
'<button type="button" class="close" data-dismiss="alert">' +
'<span>×</span></button></div>'
);
}
},
error: function(xhr, status, error) {
console.error('AJAX Error:', error);
$message.html(
'<div class="alert alert-danger alert-dismissible fade show">' +
'<i class="fas fa-times-circle"></i> ' +
'Ocurrió un error al enviar el mensaje. Por favor intente nuevamente.' +
'<button type="button" class="close" data-dismiss="alert">' +
'<span>×</span></button></div>'
);
},
complete: function() {
// Restore button
$submitBtn.html(originalText).prop('disabled', false);
}
});
});
// Auto-dismiss success messages after 5 seconds
$(document).on('shown.bs.alert', '.alert-success', function() {
var $alert = $(this);
setTimeout(function() {
$alert.fadeOut(400, function() {
$(this).remove();
});
}, 5000);
});
});