( function( $ ) { 'use strict'; if ( typeof _wpcf7 === 'undefined' || _wpcf7 === null ) { return; } _wpcf7 = $.extend( { cached: 0, inputs: [] }, _wpcf7 ); $.fn.wpcf7InitForm = function() { this.ajaxForm( { beforeSubmit: function( arr, $form, options ) { $form.wpcf7ClearResponseOutput(); $form.find( '[aria-invalid]' ).attr( 'aria-invalid', 'false' ); $form.find( '.ajax-loader' ).addClass( 'is-active' ); return true; }, beforeSerialize: function( $form, options ) { $form.find( '[placeholder].placeheld' ).each( function( i, n ) { $( n ).val( '' ); } ); return true; }, data: { '_wpcf7_is_ajax_call': 1 }, dataType: 'json', success: $.wpcf7AjaxSuccess, error: function( xhr, status, error, $form ) { var e = $( '
' ).text( error.message ); $form.after( e ); } } ); if ( _wpcf7.cached ) { this.wpcf7OnloadRefill(); } this.wpcf7ToggleSubmit(); this.find( '.wpcf7-submit' ).wpcf7AjaxLoader(); this.find( '.wpcf7-acceptance' ).click( function() { $( this ).closest( 'form' ).wpcf7ToggleSubmit(); } ); this.find( '.wpcf7-exclusive-checkbox' ).wpcf7ExclusiveCheckbox(); this.find( '.wpcf7-list-item.has-free-text' ).wpcf7ToggleCheckboxFreetext(); this.find( '[placeholder]' ).wpcf7Placeholder(); if ( _wpcf7.jqueryUi && ! _wpcf7.supportHtml5.date ) { this.find( 'input.wpcf7-date[type="date"]' ).each( function() { $( this ).datepicker( { dateFormat: 'yy-mm-dd', minDate: new Date( $( this ).attr( 'min' ) ), maxDate: new Date( $( this ).attr( 'max' ) ) } ); } ); } if ( _wpcf7.jqueryUi && ! _wpcf7.supportHtml5.number ) { this.find( 'input.wpcf7-number[type="number"]' ).each( function() { $( this ).spinner( { min: $( this ).attr( 'min' ), max: $( this ).attr( 'max' ), step: $( this ).attr( 'step' ) } ); } ); } this.find( '.wpcf7-character-count' ).wpcf7CharacterCount(); this.find( '.wpcf7-validates-as-url' ).change( function() { $( this ).wpcf7NormalizeUrl(); } ); this.find( '.wpcf7-recaptcha' ).wpcf7Recaptcha(); }; $.wpcf7AjaxSuccess = function( data, status, xhr, $form ) { if ( ! $.isPlainObject( data ) || $.isEmptyObject( data ) ) { return; } _wpcf7.inputs = $form.serializeArray(); var $responseOutput = $form.find( 'div.wpcf7-response-output' ); $form.wpcf7ClearResponseOutput(); $form.find( '.wpcf7-form-control' ).removeClass( 'wpcf7-not-valid' ); $form.removeClass( 'invalid spam sent failed' ); if ( data.captcha ) { $form.wpcf7RefillCaptcha( data.captcha ); } if ( data.quiz ) { $form.wpcf7RefillQuiz( data.quiz ); } if ( data.invalids ) { $.each( data.invalids, function( i, n ) { $form.find( n.into ).wpcf7NotValidTip( n.message ); $form.find( n.into ).find( '.wpcf7-form-control' ).addClass( 'wpcf7-not-valid' ); $form.find( n.into ).find( '[aria-invalid]' ).attr( 'aria-invalid', 'true' ); } ); $responseOutput.addClass( 'wpcf7-validation-errors' ); $form.addClass( 'invalid' ); $( data.into ).wpcf7TriggerEvent( 'invalid' ); } else if ( 1 == data.spam ) { $form.find( '[name="g-recaptcha-response"]' ).each( function() { if ( '' == $( this ).val() ) { var $recaptcha = $( this ).closest( '.wpcf7-form-control-wrap' ); $recaptcha.wpcf7NotValidTip( _wpcf7.recaptcha.messages.empty ); } } ); $responseOutput.addClass( 'wpcf7-spam-blocked' ); $form.addClass( 'spam' ); $( data.into ).wpcf7TriggerEvent( 'spam' ); } else if ( 1 == data.mailSent ) { $responseOutput.addClass( 'wpcf7-mail-sent-ok' ); $form.addClass( 'sent' ); if ( data.onSentOk ) { $.each( data.onSentOk, function( i, n ) { eval( n ) } ); } $( data.into ).wpcf7TriggerEvent( 'mailsent' ); } else { $responseOutput.addClass( 'wpcf7-mail-sent-ng' ); $form.addClass( 'failed' ); $( data.into ).wpcf7TriggerEvent( 'mailfailed' ); } if ( data.onSubmit ) { $.each( data.onSubmit, function( i, n ) { eval( n ) } ); } $( data.into ).wpcf7TriggerEvent( 'submit' ); if ( 1 == data.mailSent ) { $form.resetForm(); } $form.find( '[placeholder].placeheld' ).each( function( i, n ) { $( n ).val( $( n ).attr( 'placeholder' ) ); } ); $responseOutput.append( data.message ).slideDown( 'fast' ); $responseOutput.attr( 'role', 'alert' ); $.wpcf7UpdateScreenReaderResponse( $form, data ); }; $.fn.wpcf7TriggerEvent = function( name ) { return this.each( function() { var elmId = this.id; var inputs = _wpcf7.inputs; /* DOM event */ var event = new CustomEvent( 'wpcf7' + name, { bubbles: true, detail: { id: elmId, inputs: inputs } } ); this.dispatchEvent( event ); /* jQuery event */ $( this ).trigger( 'wpcf7:' + name ); $( this ).trigger( name + '.wpcf7' ); // deprecated } ); }; $.fn.wpcf7ExclusiveCheckbox = function() { return this.find( 'input:checkbox' ).click( function() { var name = $( this ).attr( 'name' ); $( this ).closest( 'form' ).find( 'input:checkbox[name="' + name + '"]' ).not( this ).prop( 'checked', false ); } ); }; $.fn.wpcf7Placeholder = function() { if ( _wpcf7.supportHtml5.placeholder ) { return this; } return this.each( function() { $( this ).val( $( this ).attr( 'placeholder' ) ); $( this ).addClass( 'placeheld' ); $( this ).focus( function() { if ( $( this ).hasClass( 'placeheld' ) ) { $( this ).val( '' ).removeClass( 'placeheld' ); } } ); $( this ).blur( function() { if ( '' === $( this ).val() ) { $( this ).val( $( this ).attr( 'placeholder' ) ); $( this ).addClass( 'placeheld' ); } } ); } ); }; $.fn.wpcf7AjaxLoader = function() { return this.each( function() { $( this ).after( '' ); } ); }; $.fn.wpcf7ToggleSubmit = function() { return this.each( function() { var form = $( this ); if ( this.tagName.toLowerCase() != 'form' ) { form = $( this ).find( 'form' ).first(); } if ( form.hasClass( 'wpcf7-acceptance-as-validation' ) ) { return; } var submit = form.find( 'input:submit' ); if ( ! submit.length ) { return; } var acceptances = form.find( 'input:checkbox.wpcf7-acceptance' ); if ( ! acceptances.length ) { return; } submit.removeAttr( 'disabled' ); acceptances.each( function( i, n ) { n = $( n ); if ( n.hasClass( 'wpcf7-invert' ) && n.is( ':checked' ) || ! n.hasClass( 'wpcf7-invert' ) && ! n.is( ':checked' ) ) { submit.attr( 'disabled', 'disabled' ); } } ); } ); }; $.fn.wpcf7ToggleCheckboxFreetext = function() { return this.each( function() { var $wrap = $( this ).closest( '.wpcf7-form-control' ); if ( $( this ).find( ':checkbox, :radio' ).is( ':checked' ) ) { $( this ).find( ':input.wpcf7-free-text' ).prop( 'disabled', false ); } else { $( this ).find( ':input.wpcf7-free-text' ).prop( 'disabled', true ); } $wrap.find( ':checkbox, :radio' ).change( function() { var $cb = $( '.has-free-text', $wrap ).find( ':checkbox, :radio' ); var $freetext = $( ':input.wpcf7-free-text', $wrap ); if ( $cb.is( ':checked' ) ) { $freetext.prop( 'disabled', false ).focus(); } else { $freetext.prop( 'disabled', true ); } } ); } ); }; $.fn.wpcf7CharacterCount = function() { return this.each( function() { var $count = $( this ); var name = $count.attr( 'data-target-name' ); var down = $count.hasClass( 'down' ); var starting = parseInt( $count.attr( 'data-starting-value' ), 10 ); var maximum = parseInt( $count.attr( 'data-maximum-value' ), 10 ); var minimum = parseInt( $count.attr( 'data-minimum-value' ), 10 ); var updateCount = function( $target ) { var length = $target.val().length; var count = down ? starting - length : length; $count.attr( 'data-current-value', count ); $count.text( count ); if ( maximum && maximum < length ) { $count.addClass( 'too-long' ); } else { $count.removeClass( 'too-long' ); } if ( minimum && length < minimum ) { $count.addClass( 'too-short' ); } else { $count.removeClass( 'too-short' ); } }; $count.closest( 'form' ).find( ':input[name="' + name + '"]' ).each( function() { updateCount( $( this ) ); $( this ).keyup( function() { updateCount( $( this ) ); } ); } ); } ); }; $.fn.wpcf7NormalizeUrl = function() { return this.each( function() { var val = $.trim( $( this ).val() ); // check the scheme part if ( val && ! val.match( /^[a-z][a-z0-9.+-]*:/i ) ) { val = val.replace( /^\/+/, '' ); val = 'http://' + val; } $( this ).val( val ); } ); }; $.fn.wpcf7NotValidTip = function( message ) { return this.each( function() { var $into = $( this ); $into.find( 'span.wpcf7-not-valid-tip' ).remove(); $into.append( '' + message + '' ); if ( $into.is( '.use-floating-validation-tip *' ) ) { $( '.wpcf7-not-valid-tip', $into ).mouseover( function() { $( this ).wpcf7FadeOut(); } ); $( ':input', $into ).focus( function() { $( '.wpcf7-not-valid-tip', $into ).not( ':hidden' ).wpcf7FadeOut(); } ); } } ); }; $.fn.wpcf7FadeOut = function() { return this.each( function() { $( this ).animate( { opacity: 0 }, 'fast', function() { $( this ).css( { 'z-index': -100 } ); } ); } ); }; $.fn.wpcf7OnloadRefill = function() { return this.each( function() { var url = $( this ).attr( 'action' ); if ( 0 < url.indexOf( '#' ) ) { url = url.substr( 0, url.indexOf( '#' ) ); } var id = $( this ).find( 'input[name="_wpcf7"]' ).val(); var unitTag = $( this ).find( 'input[name="_wpcf7_unit_tag"]' ).val(); $.getJSON( url, { _wpcf7_is_ajax_call: 1, _wpcf7: id, _wpcf7_request_ver: $.now() }, function( data ) { if ( data && data.captcha ) { $( '#' + unitTag ).wpcf7RefillCaptcha( data.captcha ); } if ( data && data.quiz ) { $( '#' + unitTag ).wpcf7RefillQuiz( data.quiz ); } } ); } ); }; $.fn.wpcf7RefillCaptcha = function( captcha ) { return this.each( function() { var form = $( this ); $.each( captcha, function( i, n ) { form.find( ':input[name="' + i + '"]' ).clearFields(); form.find( 'img.wpcf7-captcha-' + i ).attr( 'src', n ); var match = /([0-9]+)\.(png|gif|jpeg)$/.exec( n ); form.find( 'input:hidden[name="_wpcf7_captcha_challenge_' + i + '"]' ).attr( 'value', match[ 1 ] ); } ); } ); }; $.fn.wpcf7RefillQuiz = function( quiz ) { return this.each( function() { var form = $( this ); $.each( quiz, function( i, n ) { form.find( ':input[name="' + i + '"]' ).clearFields(); form.find( ':input[name="' + i + '"]' ).siblings( 'span.wpcf7-quiz-label' ).text( n[ 0 ] ); form.find( 'input:hidden[name="_wpcf7_quiz_answer_' + i + '"]' ).attr( 'value', n[ 1 ] ); } ); } ); }; $.fn.wpcf7ClearResponseOutput = function() { return this.each( function() { $( this ).find( 'div.wpcf7-response-output' ).hide().empty().removeClass( 'wpcf7-mail-sent-ok wpcf7-mail-sent-ng wpcf7-validation-errors wpcf7-spam-blocked' ).removeAttr( 'role' ); $( this ).find( 'span.wpcf7-not-valid-tip' ).remove(); $( this ).find( '.ajax-loader' ).removeClass( 'is-active' ); } ); }; $.fn.wpcf7Recaptcha = function() { return this.each( function() { var events = 'wpcf7:spam wpcf7:mailsent wpcf7:mailfailed'; $( this ).closest( 'div.wpcf7' ).on( events, function( e ) { if ( recaptchaWidgets && grecaptcha ) { $.each( recaptchaWidgets, function( index, value ) { grecaptcha.reset( value ); } ); } } ); } ); }; $.wpcf7UpdateScreenReaderResponse = function( $form, data ) { $( '.wpcf7 .screen-reader-response' ).html( '' ).attr( 'role', '' ); if ( data.message ) { var $response = $form.siblings( '.screen-reader-response' ).first(); $response.append( data.message ); if ( data.invalids ) { var $invalids = $( '