// ------------------------------------------------------------------------------------------- // contact form ajax // ------------------------------------------------------------------------------------------- (function($) { $.fn.avia_ajax_form = function(variables) { var defaults = { sendpath: 'send.php', responsecontainer: '.ajaxresponse' }; var options = $.extend(defaults, variables); return this.each(function() { var form = $(this), form_sent = false, send = { formelements: form.find('textarea, select, input[type=text], input[type=checkbox], input[type=hidden]'), validationerror:false, button : form.find('input:submit'), dataobj : {} }, responsecontainer = form.next(options.responsecontainer+":eq(0)"); send.button.on('click', checkelements); //change type of email forms on mobile so the e-mail keyboard with @ sign is used if($.avia_utilities.ismobile) { send.formelements.each(function(i) { var currentelement = $(this), is_email = currentelement.hasclass('is_email'); if(is_email) currentelement.attr('type','email'); }); } function checkelements( e ) { // reset validation var and send data send.validationerror = false; send.datastring = 'ajax=true'; // get in js added element (e.g. from recaptcha) send.formelements = form.find('textarea, select, input[type=text], input[type=checkbox], input[type=hidden], input[type=email]'); send.formelements.each(function(i) { var currentelement = $(this), surroundingelement = currentelement.parent(), value = currentelement.val(), name = currentelement.attr('name'), classes = currentelement.attr('class'), nomatch = true; if(currentelement.is(':checkbox')) { if(currentelement.is(':checked')) { value = true; } else { value = ''; } } send.dataobj[name] = encodeuricomponent(value); if(classes && classes.match(/is_empty/)) { if(value == '' || value == null) { surroundingelement.removeclass("valid error ajax_alert").addclass("error"); send.validationerror = true; } else { surroundingelement.removeclass("valid error ajax_alert").addclass("valid"); } nomatch = false; } if(classes && classes.match(/is_email/)) { if( ! value.match(/^[\w|\.|\-]+@\w[\w|\.|\-]*\.[a-za-z]{2,20}$/)) { surroundingelement.removeclass("valid error ajax_alert").addclass("error"); send.validationerror = true; } else { surroundingelement.removeclass("valid error ajax_alert").addclass("valid"); } nomatch = false; } if(classes && classes.match(/is_ext_email/)) { // also allowed would be: ! # $ % & ' * + - / = ? ^ _ ` { | } ~ if( ! value.match( /^[\w|\.|\-|äöüäöü]+@\w[\w|\.|\-|äöüäöü]*\.[a-za-z]{2,20}$/ ) ) { surroundingelement.removeclass("valid error ajax_alert").addclass("error"); send.validationerror = true; } else { surroundingelement.removeclass("valid error ajax_alert").addclass("valid"); } nomatch = false; } if(classes && classes.match(/is_phone/)) { if( ! value.match(/^(\d|\s|\-|\/|\(|\)|\[|\]|e|x|t|ension|\.|\+|\_|\,|\:|\;){3,}$/)) { surroundingelement.removeclass("valid error ajax_alert").addclass("error"); send.validationerror = true; } else { surroundingelement.removeclass("valid error ajax_alert").addclass("valid"); } nomatch = false; } if(classes && classes.match(/is_number/)) { if(!($.isnumeric(value)) || value == "") { surroundingelement.removeclass("valid error ajax_alert").addclass("error"); send.validationerror = true; } else { surroundingelement.removeclass("valid error ajax_alert").addclass("valid"); } nomatch = false; } if(classes && classes.match(/captcha/) && ! classes.match(/recaptcha/) ) { var verifier = form.find("#" + name + "_verifier").val(), lastver = verifier.charat(verifier.length-1), finalver = verifier.charat(lastver); if(value != finalver) { surroundingelement.removeclass("valid error ajax_alert").addclass("error"); send.validationerror = true; } else { surroundingelement.removeclass("valid error ajax_alert").addclass("valid"); } nomatch = false; } if(nomatch && value != '') { surroundingelement.removeclass("valid error ajax_alert").addclass("valid"); } }); if(send.validationerror == false) { if(form.data('av-custom-send')) { mailchimp_send(); } else { send_ajax_form(); } } return false; } function send_ajax_form() { if(form_sent){ return false; } if( send.button.hasclass( 'avia_button_inactive' ) ) { return false; } form_sent = true; send.button.addclass('av-sending-button'); send.button.val(send.button.data('sending-label')); var redirect_to = form.data('avia-redirect') || false, action = form.attr('action'), label = form.is( '.av-form-labels-style' ); if( label ) return; responsecontainer.load(action+' '+options.responsecontainer, send.dataobj, function() { if(redirect_to && action != redirect_to) { form.attr('action', redirect_to); location.href = redirect_to; // form.submit(); } else { responsecontainer.removeclass('hidden').css({display:"block"}); form.slideup(400, function(){responsecontainer.slidedown(400, function(){ $('body').trigger('av_resize_finished'); }); send.formelements.val('');}); } }); } function mailchimp_send() { if(form_sent){ return false; } form_sent = true; var original_label = send.button.val(); send.button.addclass('av-sending-button'); send.button.val(send.button.data('sending-label')); send.dataobj.ajax_mailchimp = true; var redirect_to = form.data('avia-redirect') || false, action = form.attr('action'), error_msg_container = form.find('.av-form-error-container'), form_id = form.data('avia-form-id'); $.ajax({ url: action, type: "post", data:send.dataobj, beforesend: function() { if(error_msg_container.length) { error_msg_container.slideup(400, function() { error_msg_container.remove(); $('body').trigger('av_resize_finished'); }); } }, success: function(responsetext) { var response = jquery("
").append(jquery.parsehtml(responsetext)), error = response.find('.av-form-error-container'); if(error.length) { form_sent = false; form.prepend(error); error.css({display:"none"}).slidedown(400, function() { $('body').trigger('av_resize_finished'); }); send.button.removeclass('av-sending-button'); send.button.val(original_label); } else { if(redirect_to && action != redirect_to) { form.attr('action', redirect_to); location.href = redirect_to; // form.submit(); } else { var success_text = response.find(options.responsecontainer + "_" + form_id); responsecontainer.html(success_text).removeclass('hidden').css({display:"block"}); form.slideup(400, function() { responsecontainer.slidedown(400, function() { $('body').trigger('av_resize_finished'); }); send.formelements.val(''); }); } } }, error: function() { }, complete: function() { } }); } }); }; })(jquery);