/** * 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'); }); } });