function form_ajax(form_name, done_callback){
$('form[name='+form_name+']').submit(function(e){
var fail_content = document.createElement('div');
$(fail_content).addClass('alert alert-error');
$(fail_content).html('<button type="button" class="close" data-dismiss="alert"> × </button>');
var success_content = document.createElement('div');
$(success_content).addClass('alert alert-success');
$(success_content).html('<button type="button" class="close" data-dismiss="alert"> × </button>');
var self = $(this)
self.find('.alert').remove();
var src = $(this).attr('action')
var data_field = $(this).serializeArray()
$.ajax({
beforeSend : function(){
self.addClass('disabled').find('input, button, textarea').attr('disabled', true)
},
type : 'post',
async : false,
dataType : 'json',
cache : false,
url : src,
data : data_field
}).done(function(data){
if(data.ok) {
if(data.redirect){
return window.location = data.redirect
}
if (data.message){
$(success_content).append(data.message)
}
else{
$(success_content).append('<p>Форма успешно отправлена.</p>')
}
self.prepend(success_content)
if (done_callback && typeof(done_callback) === "function") {
self.removeClass('disabled').find('input, button, textarea').removeAttr('disabled')
done_callback();
}
} else if(data.error) {
$(fail_content).append('<p>Не удалось отправить форму. Пожалуйста, исправьте следующие ошибки:</p>')
$(fail_content).append('<ul></ul>');
$.each(data.error, function(key, value){
$(fail_content).find('ul').append('<li>'+value+'</li>')
})
self.prepend(fail_content)
self.removeClass('disabled').find('input, button, textarea').removeAttr('disabled')
} else {
if (data.message){
$(fail_content).append(data.message)
}
else{
$(fail_content).append('<p>Неизвестная ошибка. Пожалуйста попробуйте ещё раз позднее.</p>')
}
self.prepend(fail_content)
self.removeClass('disabled').find('input, button, textarea').removeAttr('disabled')
}
}).fail(function(data){
$(fail_content).append('<p>Не удалось отправить форму. Пожалуйста попробуйте ещё раз позднее.</p>')
self.prepend(fail_content)
self.removeClass('disabled').find('input, button, textarea').removeAttr('disabled')
})
return false;
})
}