/**
* contact form
*/
jquery(document).ready(function ($) {
"use strict";
$ = jquery.noconflict();
var debug = false; //show system errors
$('.liveform').submit(function () {
var $f = $(this);
var showerrors = $f.attr('data-show-errors') == 'true';
var hideform = $f.attr('data-hide-form') == 'true';
var emailsubject = $f.attr('data-email-subject');
var $submit = $f.find('[type="submit"]');
//prevent double click
if ($submit.hasclass('disabled')) {
return false;
}
$('[name="field[]"]', $f).each(function (key, e) {
var $e = $(e);
var p = $e.parent().find("label").text();
//try to geuess placeholder
if (!p) {
p = $e.attr('placeholder');
}
if (p) {
var t = $e.attr('required') ? '[required]' : '[optional]';
var type = $e.attr('type') ? $e.attr('type') : 'unknown';
t = t + '[' + type + ']';
var n = $e.attr('name').replace('[]', '[' + p + ']');
n = n + t;
$e.attr('data-previous-name', $e.attr('name'));
$e.attr('name', n);
}
});
$submit.addclass('disabled');
$f.append('');
$.ajax({
url: $f.attr('action'),
method: 'post',
data: $f.serialize(),
datatype: 'json',
success: function (data) {
$('span.error', $f).remove();
$('.error', $f).removeclass('error');
$('.form-group', $f).removeclass('has-error');
if (data.errors) {
$.each(data.errors, function (i, k) {
var input = $('[name^="' + i + '"]', $f).addclass('error');
if (showerrors) {
input.after('' + k + '');
}
if (input.parent('.form-group')) {
input.parent('.form-group').addclass('has-error');
}
});
} else {
var item = data.success ? '.successmessage' : '.errormessage';
if (hideform) {
$f.fadeout(function () {
$f.parent().find(item).show();
});
} else {
$f.parent().find(item).fadein();
$f[0].reset();
}
}
$submit.removeclass('disabled');
cleanupform($f);
},
error: function (data) {
if (debug) {
alert(data.responsetext);
}
$submit.removeclass('disabled');
cleanupform($f);
}
});
return false;
});
function cleanupform($f) {
$f.find('.temp').remove();
$f.find('[data-previous-name]').each(function () {
var $e = jquery(this);
$e.attr('name', $e.attr('data-previous-name'));
$e.removeattr('data-previous-name');
});
}
});