{"version":3,"file":"../checkout-300.min.js","sources":["checkout-300.js"],"sourcesContent":["/**\n * Checkout Script\n * \n * Replaces the original WooCommerce `checkout.js`.\n */\n\n/* global wc_checkout_params */\njQuery( function( $ ) {\n\n\t// wc_checkout_params is required to continue, ensure the object exists\n\tif ( typeof wc_checkout_params === 'undefined' ) {\n\t\treturn false;\n\t}\n\n\t// CHANGE: Create flag to allow or block updating the checkout\n\twindow.can_update_checkout = true;\n\n\t// CHANGE: Add flag to up prevent users from leaving the page when there is unsaved data\n\tvar _updateBeforeUnload = false;\n\n\t// CHANGE: Add default settings object\n\tvar _settings = {\n\t\tformRowSelector: '.form-row',\n\t\tcheckoutPlaceOrderSelector: '#place_order, .fc-place-order-button',\n\t\tcheckoutTermsSelector: '.fc-terms-checkbox',\n\t\tcheckoutUpdateFieldsSelector: '.address-field input.input-text, .update_totals_on_change input.input-text',\n\t\tcheckoutLoadingInputSelector: '.loading_indicator_on_change input.input-text',\n\t\tfocusedFieldSkipFragmentReplaceSelector: 'input[type=\"text\"], input[type=\"color\"], input[type=\"date\"], input[type=\"datetime\"], input[type=\"datetime-local\"], input[type=\"email\"], input[type=\"file\"], input[type=\"image\"], input[type=\"month\"], input[type=\"number\"], input[type=\"password\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"time\"], input[type=\"url\"], input[type=\"week\"], select, textarea, .fc-select2-field',\n\t\tphoneFieldSelector: 'input[type=\"tel\"], [data-phone-field], input.js-phone-field, .js-phone-field input',\n\t\tloginButtonSelector: '.fc-contact-login__action',\n\t\temailFieldSelector: 'form.woocommerce-checkout input[name=\"billing_email\"]',\n\t\tusernameFieldSelector: '.fc-login-form__inner input[name=\"username\"]',\n\n\t\tloadingClass: 'fc-loading',\n\t\tcheckoutBlockUISelector: '.woocommerce-checkout-payment, .woocommerce-checkout-review-order-table .fc-shipping-method__packages',\n\n\t\tcheckoutPlaceOrderApplyLoadingClass: 'yes',\n\t\tcheckoutUpdateBeforeUnload: 'yes',\n\t\tcheckoutUpdateOnVisibilityChange: 'yes',\n\t};\n\t// CHANGE: END - Add default settings object\n\n\t$.blockUI.defaults.overlayCSS.cursor = 'default';\n\n\tvar wc_checkout_form = {\n\t\tupdateTimer: false,\n\t\tdirtyInput: false,\n\t\tselectedPaymentMethod: false,\n\t\txhr: false,\n\t\t$order_review: $( '#order_review' ),\n\t\t$checkout_form: $( 'form.checkout' ),\n\t\tinit: function() {\n\t\t\t// CHANGE: Merge default settings object with values from the server settings object\n\t\t\t_settings = FCUtils.extendObject( true, _settings, window.fcSettings );\n\n\t\t\t$( document.body ).on( 'update_checkout', this.update_checkout );\n\t\t\t$( document.body ).on( 'init_checkout', this.init_checkout );\n\n\t\t\t// CHANGE: Add event handlers to autocomplete attributes\n\t\t\t$( document.body ).on( 'init_checkout', this.set_autocomplete_attribute_from_data );\n\t\t\t$( document.body ).on( 'updated_checkout', this.set_autocomplete_attribute_from_data );\n\n\t\t\t// Payment methods\n\t\t\tthis.$checkout_form.on( 'click', 'input[name=\"payment_method\"]', this.payment_method_selected );\n\n\t\t\tif ( $( document.body ).hasClass( 'woocommerce-order-pay' ) ) {\n\t\t\t\tthis.$order_review.on( 'click', 'input[name=\"payment_method\"]', this.payment_method_selected );\n\t\t\t\tthis.$order_review.on( 'submit', this.submitOrder );\n\t\t\t\tthis.$order_review.attr( 'novalidate', 'novalidate' );\n\t\t\t}\n\n\t\t\t// Prevent HTML5 validation which can conflict.\n\t\t\tthis.$checkout_form.attr( 'novalidate', 'novalidate' );\n\n\t\t\t// Form submission\n\t\t\tthis.$checkout_form.on( 'submit', this.submit );\n\n\t\t\t// CHANGE: Maybe disable inline validation from default WooCommerce checkout script when Fluid Checkout inline validation is enabled\n\t\t\tif ( ! window.CheckoutValidation ) {\n\t\t\t\t// Inline validation\n\t\t\t\tthis.$checkout_form.on( 'input validate change', '.input-text, select, input:checkbox', this.validate_field );\n\t\t\t}\n\n\t\t\t// Manual trigger\n\t\t\tthis.$checkout_form.on( 'update', this.trigger_update_checkout );\n\n\t\t\t// Inputs/selects which update totals\n\t\t\t// CHANGE: Removed selector `#ship-to-different-address input`\n\t\t\tthis.$checkout_form.on( 'change', 'select.shipping_method, input[name^=\"shipping_method\"], .update_totals_on_change select, .update_totals_on_change input[type=\"radio\"], .update_totals_on_change input[type=\"checkbox\"]', this.trigger_update_checkout ); // eslint-disable-line max-len\n\t\t\tthis.$checkout_form.on( 'change', '.address-field select', this.input_changed );\n\n\t\t\t// CHANGE: Move CSS selector for fields that trigger update checkout when value is changed\n\t\t\tthis.$checkout_form.on( 'change', _settings.checkoutUpdateFieldsSelector, this.maybe_input_changed ); // eslint-disable-line max-len\n\t\t\tthis.$checkout_form.on( 'keydown', _settings.checkoutUpdateFieldsSelector, this.queue_update_checkout ); // eslint-disable-line max-len\n\n\t\t\t// Address fields\n\t\t\t// CHANGE: Removed shipping to different address checkout `change` listener\n\n\t\t\t// CHANGE: Update checkout totals to save data to session when user switches tabs, apps, goes to homescreen, etc.\n\t\t\tdocument.addEventListener( 'visibilitychange', this.maybe_update_checkout_visibility_change );\n\n\t\t\t// CHANGE: Maybe prevent leaving the page if there are unsaved changes, and trigger `update_checkout` to save the data.\n\t\t\tif ( 'yes' === _settings.checkoutUpdateBeforeUnload ) {\n\t\t\t\tthis.$checkout_form.on( 'change, input', 'select, input, textarea', this.maybe_prevent_unload );\n\t\t\t}\n\n\t\t\t// CHANGE: Update checkout when \"billing same as shipping\" checked state changes\n\t\t\tthis.$checkout_form.on( 'change', '#billing_same_as_shipping', this.billing_same_shipping_changed );\n\n\t\t\t// CHANGE: Trigger reinitialization functions after checkout is updated\n\t\t\t$( document.body ).on( 'updated_checkout', this.maybe_reinitialize_collapsible_blocks );\n\t\t\t$( document.body ).on( 'updated_checkout', this.maybe_reinitialize_flyout_blocks );\n\n\t\t\t// CHANGE: Add event listener to sync terms checkbox state\n\t\t\tthis.$checkout_form.on( 'change', _settings.checkoutTermsSelector, this.terms_checked_changed );\n\n\t\t\t// Trigger events\n\t\t\t// CHANGE: Removed shipping to different address checkout `change` trigger\n\t\t\tthis.init_payment_methods();\n\n\t\t\t// Update on page load\n\t\t\tif ( wc_checkout_params.is_checkout === '1' ) {\n\t\t\t\t$( document.body ).trigger( 'init_checkout' );\n\t\t\t}\n\t\t\tif ( wc_checkout_params.option_guest_checkout === 'yes' ) {\n\t\t\t\t// CHANGE: Use native `change` event instead jQuery to handle create account checkbox toggle\n\t\t\t\tdocument.addEventListener( 'change', this.toggle_create_account, true );\n\t\t\t}\n\n\t\t\t// CHANGE: Add handler for login form modal initialization\n\t\t\tdocument.addEventListener( 'click', this.maybe_copy_email_to_login_form, true );\n\t\t},\n\t\t// CHANGE: Update checkout when \"billing same as shipping\" checked state changes\n\t\tbilling_same_shipping_changed: function( e ) {\n\t\t\tif ( window.CollapsibleBlock ) {\n\t\t\t\tvar checkbox = document.querySelector( '#billing_same_as_shipping' );\n\t\t\t\tvar fieldsWrapper = document.querySelector( '#woocommerce-billing-fields__field-wrapper' );\n\n\t\t\t\t// Toggle state\n\t\t\t\tif ( ! checkbox.checked ) {\n\t\t\t\t\tCollapsibleBlock.expand( fieldsWrapper );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tCollapsibleBlock.collapse( fieldsWrapper );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t},\n\t\t// CHANGE: Reinitialize collapsible blocks after checkout update\n\t\tmaybe_reinitialize_collapsible_blocks: function() {\n\t\t\t// Bail if collapsible blocks are not available\n\t\t\tif ( ! window.CollapsibleBlock ) { return; }\n\n\t\t\t// Try to initialize collapsible blocks if not yet initialized\n\t\t\tCollapsibleBlock.init( window.fcSettings ? fcSettings.collapsibleBlock : null );\n\n\t\t\tvar collapsibleBlocks = document.querySelectorAll( '[data-collapsible]' );\n\t\t\tfor ( var i = 0; i < collapsibleBlocks.length; i++ ) {\n\t\t\t\tvar collapsibleBlock = collapsibleBlocks[i];\n\n\t\t\t\t// Maybe initialize the collapsible block\n\t\t\t\tif ( ! CollapsibleBlock.getInstance( collapsibleBlock ) ) {\n\t\t\t\t\tCollapsibleBlock.initializeElement( collapsibleBlock );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Reinitialize flyout blocks after checkout update\n\t\tmaybe_reinitialize_flyout_blocks: function() {\n\t\t\t// Bail if flyout blocks are not available\n\t\t\tif ( ! window.FlyoutBlock ) { return; }\n\n\t\t\tFlyoutBlock.initTriggers();\n\t\t},\n\t\t// CHANGE: Update checkout when page gets hidden or visible again\n\t\tmaybe_update_checkout_visibility_change: function() {\n\t\t\t// Bail if update on visibility change is disabled\n\t\t\tif ( 'yes' !== _settings.checkoutUpdateOnVisibilityChange ) { return; }\n\n\t\t\t// Trigger update if visibility state is changed to `hidden` or `visible`\n\t\t\tif ( 'hidden' == document.visibilityState || 'visible' == document.visibilityState ) {\n\t\t\t\t$( document.body ).trigger( 'update_checkout', { refresh_payment_methods: false } );\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Prompt user that they might lose data when closing tab or leaving the current page after they change some values in the checkout form\n\t\tmaybe_prevent_unload: function( e ) {\n\t\t\t// Ignore some fields\n\t\t\tif ( e && e.target.closest( '.payment_box, input#createaccount' ) ) { return; }\n\n\t\t\tif ( ! _updateBeforeUnload ) {\n\n\t\t\t\tvar preventUnload = function( e ) {\n\t\t\t\t\t// Prompt user if there is unsaved data\n\t\t\t\t\tif ( _updateBeforeUnload ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.returnValue = '';\n\n\t\t\t\t\t\t// Proceed to update the checkout totals if the user cancel the event\n\t\t\t\t\t\t$( document.body ).trigger( 'update_checkout' );\n\n\t\t\t\t\t\t// Reset flag to update on `beforeunload`\n\t\t\t\t\t\t_updateBeforeUnload = false;\n\t\t\t\t\t\twindow.removeEventListener( 'beforeunload', preventUnload );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\twindow.addEventListener( 'beforeunload', preventUnload );\n\t\t\t\t_updateBeforeUnload = true;\n\t\t\t}\n\t\t},\n\t\tinit_payment_methods: function() {\n\t\t\tvar $payment_methods = $( '.woocommerce-checkout' ).find( 'input[name=\"payment_method\"]' );\n\n\t\t\t// If there is one method, we can hide the radio input\n\t\t\tif ( 1 === $payment_methods.length ) {\n\t\t\t\t$payment_methods.eq(0).hide();\n\t\t\t}\n\n\t\t\t// If there was a previously selected method, check that one.\n\t\t\tif ( wc_checkout_form.selectedPaymentMethod ) {\n\t\t\t\t$( '#' + wc_checkout_form.selectedPaymentMethod ).prop( 'checked', true );\n\t\t\t}\n\n\t\t\t// If there are none selected, select the first.\n\t\t\tif ( 0 === $payment_methods.filter( ':checked' ).length ) {\n\t\t\t\t$payment_methods.eq(0).prop( 'checked', true );\n\t\t\t}\n\n\t\t\t// Get name of new selected method.\n\t\t\tvar checkedPaymentMethod = $payment_methods.filter( ':checked' ).eq(0).prop( 'id' );\n\n\t\t\tif ( $payment_methods.length > 1 ) {\n\t\t\t\t// Hide open descriptions.\n\t\t\t\t$( 'div.payment_box:not(\".' + checkedPaymentMethod + '\")' ).filter( ':visible' ).slideUp( 0 );\n\t\t\t}\n\n\t\t\t// Trigger click event for selected method\n\t\t\t$payment_methods.filter( ':checked' ).eq(0).trigger( 'click' );\n\t\t},\n\t\tget_payment_method: function() {\n\t\t\treturn wc_checkout_form.$checkout_form.find( 'input[name=\"payment_method\"]:checked' ).val();\n\t\t},\n\t\tpayment_method_selected: function( e ) {\n\t\t\te.stopPropagation();\n\n\t\t\tif ( $( '.payment_methods input.input-radio' ).length > 1 ) {\n\t\t\t\tvar target_payment_box = $( 'div.payment_box.' + $( this ).attr( 'ID' ) ),\n\t\t\t\t\tis_checked = $( this ).is( ':checked' );\n\n\t\t\t\tif ( is_checked && ! target_payment_box.is( ':visible' ) ) {\n\t\t\t\t\t$( 'div.payment_box' ).filter( ':visible' ).slideUp( 230 );\n\n\t\t\t\t\tif ( is_checked ) {\n\t\t\t\t\t\ttarget_payment_box.slideDown( 230 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$( 'div.payment_box' ).show();\n\t\t\t}\n\n\t\t\tif ( $( this ).data( 'order_button_text' ) ) {\n\t\t\t\t// CHANGE: replaced the place order button css selector with an extended custom selector\n\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).text( $( this ).data( 'order_button_text' ) );\n\t\t\t} else {\n\t\t\t\t// CHANGE: replaced the place order button css selector with an extended custom selector\n\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).text( $( _settings.checkoutPlaceOrderSelector ).data( 'value' ) );\n\t\t\t}\n\n\t\t\tvar selectedPaymentMethod = $( '.woocommerce-checkout input[name=\"payment_method\"]:checked' ).attr( 'id' );\n\n\t\t\tif ( selectedPaymentMethod !== wc_checkout_form.selectedPaymentMethod ) {\n\t\t\t\t$( document.body ).trigger( 'payment_method_selected' );\n\t\t\t}\n\n\t\t\t// CHANGE: Add body class for selected payment method\n\t\t\tdocument.body.classList.remove( 'has-payment-method-selected--' + wc_checkout_form.selectedPaymentMethod );\n\t\t\tdocument.body.classList.add( 'has-payment-method-selected--' + selectedPaymentMethod );\n\n\t\t\twc_checkout_form.selectedPaymentMethod = selectedPaymentMethod;\n\t\t},\n\t\t// CHANGE: Add `e` parameter needed for checking target element\n\t\ttoggle_create_account: function( e ) {\n\t\t\t// CHANGE: Use collapsible block instead of jQuery to show/hide accoung fields section\n\t\t\t// Bail if not target element\n\t\t\tif ( ! e.target || ! e.target.matches( 'input#createaccount' ) ) { return; }\n\n\t\t\t// Bail if collapsible block not available\n\t\t\tif ( ! window.CollapsibleBlock ) { return; }\n\n\t\t\tvar checkbox = document.querySelector( 'input#createaccount' );\n\t\t\tvar createAccountBlock = document.querySelector( 'div.create-account' );\n\n\t\t\t// Toggle state\n\t\t\tif ( checkbox.checked ) {\n\t\t\t\tCollapsibleBlock.expand( createAccountBlock );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tCollapsibleBlock.collapse( createAccountBlock );\n\t\t\t}\n\t\t\t// CHANGE: END - Use collapsible block instead of jQuery to show/hide accoung fields section\n\t\t},\n\t\t// CHANGE: Add function to copy email field value to the login form username field\n\t\tmaybe_copy_email_to_login_form: function( e ) {\n\t\t\t// CHANGE: Use collapsible block instead of jQuery to show/hide accoung fields section\n\t\t\t// Bail if not target element\n\t\t\tif ( ! e.target || ! e.target.closest( _settings.loginButtonSelector ) ) { return; }\n\n\t\t\tvar billingEmailField = document.querySelector( _settings.emailFieldSelector );\n\t\t\tvar usernameField = document.querySelector( _settings.usernameFieldSelector );\n\t\t\t\n\t\t\t// Maybe copy email to username field\n\t\t\tif ( billingEmailField && usernameField ) {\n\t\t\t\tusernameField.value = billingEmailField.value;\n\t\t\t}\n\t\t},\n\t\t// CHANGE: END - Add function to copy email field value to the login form username field\n\t\tinit_checkout: function() {\n\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t},\n\t\tmaybe_input_changed: function( e ) {\n\t\t\tif ( wc_checkout_form.dirtyInput ) {\n\t\t\t\twc_checkout_form.input_changed( e );\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Add function to set the autocomplete attribute values form data attributes. This fixes issue with lost user data when refreshing the page while using the Firefox Browser.\n\t\tset_autocomplete_attribute_from_data: function( e ) {\n\t\t\tvar $fields = $( 'form.checkout' ).find( 'input, select, textarea' );\n\t\t\t$fields.each( function() {\n\t\t\t\tif ( $( this ).attr( 'data-autocomplete' ) ) {\n\t\t\t\t\t$( this ).attr( 'autocomplete', $( this ).attr( 'data-autocomplete' ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\t// CHANGE: Add function to sync the terms checkbox state\n\t\tterms_checked_changed: function( e ) {\n\t\t\tvar termsCheckBoxChecked = $( e.target ).prop( 'checked' );\n\t\t\t$( _settings.checkoutTermsSelector ).prop( 'checked', termsCheckBoxChecked );\n\t\t},\n\t\t// CHANGE: Maybe add loading class to the form row\n\t\tmaybe_set_form_row_loading: function( e ) {\n\t\t\tif ( e.target && e.target.matches( _settings.checkoutLoadingInputSelector ) ) {\n\t\t\t\tvar formRow = e.target.closest( _settings.formRowSelector );\n\t\t\t\tif ( formRow ) {\n\t\t\t\t\tformRow.classList.add( _settings.loadingClass );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Add function to remove loading classes from elements after updating the checkout fragments\n\t\tmaybe_stop_form_row_loading_indicators: function() {\n\t\t\tvar maybeLoadingFields = document.querySelectorAll( _settings.checkoutLoadingInputSelector );\n\t\t\tfor ( var i = 0; i < maybeLoadingFields.length; i++ ) {\n\t\t\t\tvar input = maybeLoadingFields[ i ];\n\t\t\t\tvar formRow = input.closest( _settings.formRowSelector );\n\t\t\t\tif ( formRow ) {\n\t\t\t\t\tformRow.classList.remove( _settings.loadingClass );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinput_changed: function( e ) {\n\t\t\twc_checkout_form.dirtyInput = e.target;\n\t\t\twc_checkout_form.maybe_update_checkout();\n\t\t\t// CHANGE: Maybe add loading class to the form row\n\t\t\twc_checkout_form.maybe_set_form_row_loading( e );\n\t\t},\n\t\tqueue_update_checkout: function( e ) {\n\t\t\t// CHANGE: Add key detection to use the `event.key` property which is more reliable than `event.keyCode` or `event.which`.\n\t\t\tvar code = e.key;\n\n\t\t\t// CHANGE: Also skip `update_checkout` when pressing other controls keys such as \"Shift\", \"Control\", \"Command\", \"Alt\" and \"Arrows\"\n\t\t\tif ( FCUtils.keyboardKeys.TAB === code || FCUtils.keyboardKeys.SHIFT === code || FCUtils.keyboardKeys.CONTROL === code || FCUtils.keyboardKeys.ALT === code || FCUtils.keyboardKeys.COMMAND_OR_WINDOWS === code || FCUtils.keyboardKeys.ARROW_LEFT === code || FCUtils.keyboardKeys.ARROW_RIGHT === code || FCUtils.keyboardKeys.ARROW_UP === code || FCUtils.keyboardKeys.ARROW_DOWN === code ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\twc_checkout_form.dirtyInput = this;\n\t\t\twc_checkout_form.reset_update_checkout_timer();\n\t\t\twc_checkout_form.updateTimer = setTimeout( wc_checkout_form.maybe_update_checkout, '1000' );\n\t\t\t// CHANGE: Maybe add loading class to the form row\n\t\t\twc_checkout_form.maybe_set_form_row_loading( e );\n\t\t},\n\t\ttrigger_update_checkout: function() {\n\t\t\twc_checkout_form.reset_update_checkout_timer();\n\t\t\twc_checkout_form.dirtyInput = false;\n\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t},\n\t\tmaybe_update_checkout: function() {\n\t\t\tvar update_totals = true;\n\n\t\t\tif ( $( wc_checkout_form.dirtyInput ).length ) {\n\t\t\t\tvar $required_inputs = $( wc_checkout_form.dirtyInput ).closest( 'div' ).find( '.address-field.validate-required' );\n\n\t\t\t\tif ( $required_inputs.length ) {\n\t\t\t\t\t$required_inputs.each( function() {\n\t\t\t\t\t\tif ( $( this ).find( 'input.input-text' ).val() === '' ) {\n\t\t\t\t\t\t\tupdate_totals = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( update_totals ) {\n\t\t\t\twc_checkout_form.trigger_update_checkout();\n\t\t\t}\n\t\t},\n\t\t// CHANGE: Removed shipping to different address checkout `change` listener handler function\n\t\treset_update_checkout_timer: function() {\n\t\t\tclearTimeout( wc_checkout_form.updateTimer );\n\t\t},\n\t\tis_valid_json: function( raw_json ) {\n\t\t\ttry {\n\t\t\t\tvar json = JSON.parse( raw_json );\n\n\t\t\t\treturn ( json && 'object' === typeof json );\n\t\t\t} catch ( e ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tvalidate_field: function( e ) {\n\t\t\tvar $this = $( this ),\n\t\t\t\t$parent = $this.closest( '.form-row' ),\n\t\t\t\tvalidated = true,\n\t\t\t\tvalidate_required = $parent.is( '.validate-required' ),\n\t\t\t\tvalidate_email = $parent.is( '.validate-email' ),\n\t\t\t\tvalidate_phone = $parent.is( '.validate-phone' ),\n\t\t\t\tpattern = '',\n\t\t\t\tevent_type = e.type;\n\n\t\t\tif ( 'input' === event_type ) {\n\t\t\t\t$parent.removeClass( 'woocommerce-invalid woocommerce-invalid-required-field woocommerce-invalid-email woocommerce-invalid-phone woocommerce-validated' ); // eslint-disable-line max-len\n\t\t\t}\n\n\t\t\tif ( 'validate' === event_type || 'change' === event_type ) {\n\n\t\t\t\tif ( validate_required ) {\n\t\t\t\t\tif ( 'checkbox' === $this.attr( 'type' ) && ! $this.is( ':checked' ) ) {\n\t\t\t\t\t\t$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-required-field' );\n\t\t\t\t\t\tvalidated = false;\n\t\t\t\t\t} else if ( $this.val() === '' ) {\n\t\t\t\t\t\t$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-required-field' );\n\t\t\t\t\t\tvalidated = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( validate_email ) {\n\t\t\t\t\tif ( $this.val() ) {\n\t\t\t\t\t\t/* https://stackoverflow.com/questions/2855865/jquery-validate-e-mail-address-regex */\n\t\t\t\t\t\tpattern = new RegExp( /^([a-z\\d!#$%&'*+\\-\\/=?^_`{|}~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+(\\.[a-z\\d!#$%&'*+\\-\\/=?^_`{|}~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+)*|\"((([ \\t]*\\r\\n)?[ \\t]+)?([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))*(([ \\t]*\\r\\n)?[ \\t]+)?\")@(([a-z\\d\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|[a-z\\d\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF][a-z\\d\\-._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]*[a-z\\d\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])\\.)+([a-z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|[a-z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF][a-z\\d\\-._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]*[0-9a-z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])\\.?$/i ); // eslint-disable-line max-len\n\n\t\t\t\t\t\tif ( ! pattern.test( $this.val() ) ) {\n\t\t\t\t\t\t\t$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-email woocommerce-invalid-phone' ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tvalidated = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( validate_phone ) {\n\t\t\t\t\tpattern = new RegExp( /[\\s\\#0-9_\\-\\+\\/\\(\\)\\.]/g );\n\n\t\t\t\t\tif ( 0 < $this.val().replace( pattern, '' ).length ) {\n\t\t\t\t\t\t$parent.removeClass( 'woocommerce-validated' ).addClass( 'woocommerce-invalid woocommerce-invalid-phone' );\n\t\t\t\t\t\tvalidated = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( validated ) {\n\t\t\t\t\t$parent.removeClass( 'woocommerce-invalid woocommerce-invalid-required-field woocommerce-invalid-email woocommerce-invalid-phone' ).addClass( 'woocommerce-validated' ); // eslint-disable-line max-len\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tupdate_checkout: function( event, args ) {\n\t\t\t// Small timeout to prevent multiple requests when several fields update at the same time\n\t\t\twc_checkout_form.reset_update_checkout_timer();\n\t\t\twc_checkout_form.updateTimer = setTimeout( wc_checkout_form.update_checkout_action, '5', args );\n\t\t},\n\t\tupdate_checkout_action: function( args ) {\n\t\t\t// CHANGE: Check flag that allows or block updating the checkout\n\t\t\tif ( ! window.can_update_checkout ) { return; }\n\n\t\t\tif ( wc_checkout_form.xhr ) {\n\t\t\t\twc_checkout_form.xhr.abort();\n\t\t\t}\n\n\t\t\tvar $form = $( 'form.checkout' );\n\t\t\tif ( $form.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\targs = typeof args !== 'undefined' ? args : {\n\t\t\t\tupdate_shipping_method: true\n\t\t\t};\n\n\t\t\tvar country\t\t\t = $( '#billing_country' ).val(),\n\t\t\t\tstate\t\t\t = $( '#billing_state' ).val(),\n\t\t\t\tpostcode\t\t = $( ':input#billing_postcode' ).val(),\n\t\t\t\tcity\t\t\t = $( '#billing_city' ).val(),\n\t\t\t\taddress\t\t\t = $( ':input#billing_address_1' ).val(),\n\t\t\t\taddress_2\t\t = $( ':input#billing_address_2' ).val(),\n\t\t\t\t// CHANGE: Always get shipping address values from shipping fields\n\t\t\t\ts_country\t\t = $( '#shipping_country' ).val(),\n\t\t\t\ts_state\t\t\t = $( '#shipping_state' ).val(),\n\t\t\t\ts_postcode\t\t = $( ':input#shipping_postcode' ).val(),\n\t\t\t\ts_city\t\t\t = $( '#shipping_city' ).val(),\n\t\t\t\ts_address\t\t = $( ':input#shipping_address_1' ).val(),\n\t\t\t\ts_address_2\t\t = $( ':input#shipping_address_2' ).val(),\n\t\t\t\t// END - CHANGE: Always get shipping address values from shipping fields\n\t\t\t\t$required_inputs = $( wc_checkout_form.$checkout_form ).find( '.address-field.validate-required:visible' ),\n\t\t\t\thas_full_address = true;\n\n\t\t\tif ( $required_inputs.length ) {\n\t\t\t\t$required_inputs.each( function() {\n\t\t\t\t\tif ( $( this ).find( ':input' ).val() === '' ) {\n\t\t\t\t\t\thas_full_address = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// CHANGE: Removed if handling of different shipping address checkbox, always get shipping address values from shipping fields (see above)\n\n\t\t\tvar data = {\n\t\t\t\tsecurity : wc_checkout_params.update_order_review_nonce,\n\t\t\t\tpayment_method : wc_checkout_form.get_payment_method(),\n\t\t\t\tcountry : country,\n\t\t\t\tstate : state,\n\t\t\t\tpostcode : postcode,\n\t\t\t\tcity : city,\n\t\t\t\taddress : address,\n\t\t\t\taddress_2 : address_2,\n\t\t\t\ts_country : s_country,\n\t\t\t\ts_state : s_state,\n\t\t\t\ts_postcode : s_postcode,\n\t\t\t\ts_city : s_city,\n\t\t\t\ts_address : s_address,\n\t\t\t\ts_address_2 : s_address_2,\n\t\t\t\thas_full_address: has_full_address,\n\t\t\t\tpost_data : $( 'form.checkout' ).serialize()\n\t\t\t};\n\n\t\t\tif ( false !== args.update_shipping_method ) {\n\t\t\t\tvar shipping_methods = {};\n\n\t\t\t\t// eslint-disable-next-line max-len\n\t\t\t\t$( 'select.shipping_method, input[name^=\"shipping_method\"][type=\"radio\"]:checked, input[name^=\"shipping_method\"][type=\"hidden\"]' ).each( function() {\n\t\t\t\t\tshipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();\n\t\t\t\t} );\n\n\t\t\t\tdata.shipping_method = shipping_methods;\n\t\t\t}\n\n\t\t\t// CHANGE: Define selector for blocking UI of sections as a variable, also block the shipping methods section when updating\n\t\t\tvar blockui_selector = _settings.checkoutBlockUISelector;\n\n\t\t\t// CHANGE: Add flag to indicate whether payment methods fragment should be refreshed\n\t\t\tif ( false === args.refresh_payment_methods ) {\n\t\t\t\tblockui_selector = blockui_selector.replace( '.woocommerce-checkout-payment, ', '' );\n\t\t\t\tdata.refresh_payment_methods = 'false';\n\t\t\t}\n\n\t\t\t// CHANGE: Use selector from settings to Block UI elements\n\t\t\t$( blockui_selector ).block({\n\t\t\t\tmessage: null,\n\t\t\t\toverlayCSS: {\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\topacity: 0.6\n\t\t\t\t}\n\t\t\t});\n\n\t\t\twc_checkout_form.xhr = $.ajax({\n\t\t\t\ttype:\t\t'POST',\n\t\t\t\turl:\t\twc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'update_order_review' ),\n\t\t\t\tdata:\t\tdata,\n\t\t\t\tsuccess:\tfunction( data ) {\n\n\t\t\t\t\t// Reload the page if requested\n\t\t\t\t\tif ( data && true === data.reload ) {\n\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove any notices added previously\n\t\t\t\t\t$( '.woocommerce-NoticeGroup-updateOrderReview' ).remove();\n\n\t\t\t\t\t// CHANGE: replaced the terms checkbox css selector\n\t\t\t\t\tvar termsCheckBoxChecked = $( _settings.checkoutTermsSelector ).prop( 'checked' );\n\n\t\t\t\t\t// Save payment details to a temporary object\n\t\t\t\t\tvar paymentDetails = {};\n\t\t\t\t\t$( '.payment_box :input' ).each( function() {\n\t\t\t\t\t\tvar ID = $( this ).attr( 'id' );\n\n\t\t\t\t\t\tif ( ID ) {\n\t\t\t\t\t\t\tif ( $.inArray( $( this ).attr( 'type' ), [ 'checkbox', 'radio' ] ) !== -1 ) {\n\t\t\t\t\t\t\t\tpaymentDetails[ ID ] = $( this ).prop( 'checked' );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpaymentDetails[ ID ] = $( this ).val();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// CHANGE: Get current element with focus, will re-set focus after updating the fragments\n\t\t\t\t\tvar currentFocusedElement = document.activeElement;\n\t\t\t\t\tvar currentValue = document.activeElement.value;\n\n\t\t\t\t\t// Maybe set current element with focus to the form row for `select2` fields\n\t\t\t\t\tvar currentFocusedFormRow = currentFocusedElement.closest( '.fc-select2-field' );\n\t\t\t\t\tif ( currentFocusedFormRow ) {\n\t\t\t\t\t\t// Remove focus from current element as it will be replaced\n\t\t\t\t\t\t// This fixes an issue where `select2` fields would not work properly\n\t\t\t\t\t\t// after checkout is updated while focus is on a `select2` field\n\t\t\t\t\t\tif ( currentFocusedElement ) { currentFocusedElement.blur(); }\n\n\t\t\t\t\t\tcurrentFocusedElement = currentFocusedFormRow;\n\t\t\t\t\t}\n\t\t\t\t\t// CHANGE: END - Get current element with focus, will re-set focus after updating the fragments\n\n\t\t\t\t\t// Always update the fragments\n\t\t\t\t\tif ( data && data.fragments ) {\n\t\t\t\t\t\t// CHANGE: Trigger custom event before fragments are replaced.\n\t\t\t\t\t\t$( document.body ).trigger( 'fc_checkout_fragments_replace_before', [ data ] );\n\n\t\t\t\t\t\t// CHANGE: Try to remove select2 components from existing fields before replacing fragments\n\t\t\t\t\t\t$( 'select.country_select, select.state_select' ).each( function() {\n\t\t\t\t\t\t\tvar field = $( this );\n\t\t\t\t\t\t\tif ( field.hasClass( 'select2-hidden-accessible' ) ) { // Field has `select2` initialized\n\t\t\t\t\t\t\t\tif ( typeof field.selectWoo === 'function' ) { field.selectWoo( 'destroy' ); }\n\t\t\t\t\t\t\t\telse if ( typeof field.select2 === 'function' ) { field.select2( 'destroy' ); }\n\t\t\t\t\t\t\t\tfield.off( 'select2:select' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t// CHANGE: END - Try to remove select2 components from existing fields before replacing fragments\n\n\t\t\t\t\t\t// CHANGE: Try to remove intl-tel-input components from existing fields before replacing fragments\n\t\t\t\t\t\tif ( window.intlTelInput && window.intlTelInputGlobals ) {\n\t\t\t\t\t\t\tvar allPhoneFields = document.querySelectorAll( _settings.phoneFieldSelector );\n\t\t\t\t\t\t\tfor ( var i = 0; i < allPhoneFields.length; i++ ) {\n\t\t\t\t\t\t\t\tvar field = allPhoneFields[i];\n\t\t\t\t\t\t\t\tvar phoneField = window.intlTelInputGlobals.getInstance( field );\n\t\t\t\t\t\t\t\tif ( phoneField ) {\n\t\t\t\t\t\t\t\t\tvar preservedValue = phoneField.getNumber();\n\t\t\t\t\t\t\t\t\tphoneField.destroy();\n\t\t\t\t\t\t\t\t\tfield.value = preservedValue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// CHANGE: END - Try to remove intl-tel-input components from existing fields before replacing fragments\n\n\t\t\t\t\t\t$.each( data.fragments, function ( key, value ) {\n\t\t\t\t\t\t\t// CHANGE: Declare local variables needed for some checks before replacing the fragment\n\t\t\t\t\t\t\tvar fragmentToReplace = document.querySelector( key );\n\t\t\t\t\t\t\tvar replaceFragment = true;\n\n\t\t\t\t\t\t\t// CHANGE: Maybe set to skip fragment with the focus within it. This avoids unexpected closing of mobile keyboard and lost of focus when updating fragments.\n\t\t\t\t\t\t\tif ( fragmentToReplace && currentFocusedElement.closest( key ) && currentFocusedElement.closest( _settings.focusedFieldSkipFragmentReplaceSelector ) ) {\n\t\t\t\t\t\t\t\treplaceFragment = false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// CHANGE: Allow fragments to be replaced every time even when their contents are equal the existing elements in the DOM, this overseeds the check for focus within the fragment.\n\t\t\t\t\t\t\tif ( value && -1 !== value.toString().indexOf( 'fc-fragment-always-replace' ) ) {\n\t\t\t\t\t\t\t\treplaceFragment = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( replaceFragment && ( ! wc_checkout_form.fragments || wc_checkout_form.fragments[ key ] !== value ) ) {\n\t\t\t\t\t\t\t\t// CHANGE: Log replaced fragment to console if debug mode is enabled.\n\t\t\t\t\t\t\t\tif ( fcSettings.debugMode ) {\n\t\t\t\t\t\t\t\t\tconsole.log( 'Replacing fragment: ' + key );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$( key ).replaceWith( value );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t$( key ).unblock();\n\t\t\t\t\t\t} );\n\t\t\t\t\t\twc_checkout_form.fragments = data.fragments;\n\n\t\t\t\t\t\t// CHANGE: Trigger custom event after fragments are replaced.\n\t\t\t\t\t\t$( document.body ).trigger( 'fc_checkout_fragments_replace_after', [ data ] );\n\t\t\t\t\t}\n\n\t\t\t\t\t// CHANGE: Unblock remaining blocked fragments after updating.\n\t\t\t\t\t$( _settings.checkoutBlockUISelector ).unblock();\n\n\t\t\t\t\t// CHANGE: Re-set focus to the element with focus previously to updating fragments\n\t\t\t\t\tFCUtils.maybeRefocusElement( currentFocusedElement, currentValue );\n\n\t\t\t\t\t// Recheck the terms and conditions box, if needed\n\t\t\t\t\tif ( termsCheckBoxChecked ) {\n\t\t\t\t\t\t// CHANGE: replaced the terms checkbox css selector\n\t\t\t\t\t\t$( _settings.checkoutTermsSelector ).prop( 'checked', true );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fill in the payment details if possible without overwriting data if set.\n\t\t\t\t\tif ( ! $.isEmptyObject( paymentDetails ) ) {\n\t\t\t\t\t\t$( '.payment_box :input' ).each( function() {\n\t\t\t\t\t\t\tvar ID = $( this ).attr( 'id' );\n\t\t\t\t\t\t\tif ( ID ) {\n\t\t\t\t\t\t\t\tif ( $.inArray( $( this ).attr( 'type' ), [ 'checkbox', 'radio' ] ) !== -1 ) {\n\t\t\t\t\t\t\t\t\t$( this ).prop( 'checked', paymentDetails[ ID ] ).trigger( 'change' );\n\t\t\t\t\t\t\t\t} else if ( $.inArray( $( this ).attr( 'type' ), [ 'select' ] ) !== -1 ) {\n\t\t\t\t\t\t\t\t\t$( this ).val( paymentDetails[ ID ] ).trigger( 'change' );\n\t\t\t\t\t\t\t\t} else if ( null !== $( this ).val() && 0 === $( this ).val().length ) {\n\t\t\t\t\t\t\t\t\t$( this ).val( paymentDetails[ ID ] ).trigger( 'change' );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check for error\n\t\t\t\t\tif ( data && 'failure' === data.result ) {\n\n\t\t\t\t\t\tvar $form = $( 'form.checkout' );\n\n\t\t\t\t\t\t// Remove notices from all sources\n\t\t\t\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove();\n\n\t\t\t\t\t\t// Add new errors returned by this event\n\t\t\t\t\t\tif ( data.messages ) {\n\t\t\t\t\t\t\t$form.prepend( '
' + data.messages + '
' ); // eslint-disable-line max-len\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.prepend( data );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Lose focus for all fields\n\t\t\t\t\t\t$form.find( '.input-text, select, input:checkbox' ).trigger( 'validate' ).trigger( 'blur' );\n\n\t\t\t\t\t\twc_checkout_form.scroll_to_notices();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Re-init methods\n\t\t\t\t\twc_checkout_form.init_payment_methods();\n\n\t\t\t\t\t// CHANGE: Set to not prompt user before leaving the page\n\t\t\t\t\t_updateBeforeUnload = false;\n\n\t\t\t\t\t// Fire updated_checkout event.\n\t\t\t\t\t$( document.body ).trigger( 'updated_checkout', [ data ] );\n\n\t\t\t\t\t// CHANGE: Maybe remove loading class from form rows when completing the ajax request\n\t\t\t\t\twc_checkout_form.maybe_stop_form_row_loading_indicators();\n\t\t\t\t},\n\t\t\t\t// CHANGE: Maybe remove loading class from form rows when completing the ajax request\n\t\t\t\terror: function() {\n\t\t\t\t\twc_checkout_form.maybe_stop_form_row_loading_indicators();\n\t\t\t\t}\n\t\t\t\t// CHANGE: END - Maybe remove loading class from form rows when completing the ajax request\n\n\t\t\t});\n\t\t},\n\t\thandleUnloadEvent: function( e ) {\n\t\t\t// Modern browsers have their own standard generic messages that they will display.\n\t\t\t// Confirm, alert, prompt or custom message are not allowed during the unload event\n\t\t\t// Browsers will display their own standard messages\n\n\t\t\t// Check if the browser is Internet Explorer\n\t\t\tif((navigator.userAgent.indexOf('MSIE') !== -1 ) || (!!document.documentMode)) {\n\t\t\t\t// IE handles unload events differently than modern browsers\n\t\t\t\te.preventDefault();\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tattachUnloadEventsOnSubmit: function() {\n\t\t\t$( window ).on('beforeunload', this.handleUnloadEvent);\n\t\t},\n\t\tdetachUnloadEventsOnSubmit: function() {\n\t\t\t$( window ).off('beforeunload', this.handleUnloadEvent);\n\t\t},\n\t\tblockOnSubmit: function( $form ) {\n\t\t\tvar isBlocked = $form.data( 'blockUI.isBlocked' );\n\n\t\t\tif ( 1 !== isBlocked ) {\n\t\t\t\t$form.block({\n\t\t\t\t\tmessage: null,\n\t\t\t\t\toverlayCSS: {\n\t\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\t\topacity: 0.6\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tsubmitOrder: function() {\n\t\t\twc_checkout_form.blockOnSubmit( $( this ) );\n\t\t},\n\t\tsubmit: function() {\n\t\t\twc_checkout_form.reset_update_checkout_timer();\n\t\t\tvar $form = $( this );\n\n\t\t\tif ( $form.is( '.processing' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// CHANGE: Reset flag to update on `beforeunload`\n\t\t\t_updateBeforeUnload = false;\n\n\t\t\t// Trigger a handler to let gateways manipulate the checkout if needed\n\t\t\t// eslint-disable-next-line max-len\n\t\t\tif ( $form.triggerHandler( 'checkout_place_order' ) !== false && $form.triggerHandler( 'checkout_place_order_' + wc_checkout_form.get_payment_method() ) !== false ) {\n\n\t\t\t\t$form.addClass( 'processing' );\n\n\t\t\t\t// CHANGE: Disable place order button\n\t\t\t\tvar currentFocusedElement = document.activeElement;\n\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).attr( 'disabled', 'disabled' );\n\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).addClass( 'disabled' );\n\t\t\t\tif ( 'yes' === _settings.checkoutPlaceOrderApplyLoadingClass ) {\n\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).addClass( _settings.loadingClass );\n\t\t\t\t}\n\t\t\t\t// END - Disable place order button\n\n\t\t\t\t// CHANGE: Block checkout update requests\n\t\t\t\twindow.can_update_checkout = false;\n\n\t\t\t\twc_checkout_form.blockOnSubmit( $form );\n\n\t\t\t\t// Attach event to block reloading the page when the form has been submitted\n\t\t\t\twc_checkout_form.attachUnloadEventsOnSubmit();\n\n\t\t\t\t// ajaxSetup is global, but we use it to ensure JSON is valid once returned.\n\t\t\t\t$.ajaxSetup( {\n\t\t\t\t\tdataFilter: function( raw_response, dataType ) {\n\t\t\t\t\t\t// We only want to work with JSON\n\t\t\t\t\t\tif ( 'json' !== dataType ) {\n\t\t\t\t\t\t\treturn raw_response;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( wc_checkout_form.is_valid_json( raw_response ) ) {\n\t\t\t\t\t\t\treturn raw_response;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Attempt to fix the malformed JSON\n\t\t\t\t\t\t\tvar maybe_valid_json = raw_response.match( /{\"result.*}/ );\n\n\t\t\t\t\t\t\tif ( null === maybe_valid_json ) {\n\t\t\t\t\t\t\t\tconsole.log( 'Unable to fix malformed JSON' );\n\t\t\t\t\t\t\t} else if ( wc_checkout_form.is_valid_json( maybe_valid_json[0] ) ) {\n\t\t\t\t\t\t\t\tconsole.log( 'Fixed malformed JSON. Original:' );\n\t\t\t\t\t\t\t\tconsole.log( raw_response );\n\t\t\t\t\t\t\t\traw_response = maybe_valid_json[0];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconsole.log( 'Unable to fix malformed JSON' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn raw_response;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\t$.ajax({\n\t\t\t\t\ttype:\t\t'POST',\n\t\t\t\t\turl:\t\twc_checkout_params.checkout_url,\n\t\t\t\t\tdata:\t\t$form.serialize(),\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\tsuccess:\tfunction( result ) {\n\t\t\t\t\t\t// Detach the unload handler that prevents a reload / redirect\n\t\t\t\t\t\twc_checkout_form.detachUnloadEventsOnSubmit();\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif ( 'success' === result.result && $form.triggerHandler( 'checkout_place_order_success', result ) !== false ) {\n\t\t\t\t\t\t\t\tif ( -1 === result.redirect.indexOf( 'https://' ) || -1 === result.redirect.indexOf( 'http://' ) ) {\n\t\t\t\t\t\t\t\t\twindow.location = result.redirect;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\twindow.location = decodeURI( result.redirect );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( 'failure' === result.result ) {\n\t\t\t\t\t\t\t\tthrow 'Result failure';\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow 'Invalid response';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( err ) {\n\t\t\t\t\t\t\t// Reload page\n\t\t\t\t\t\t\tif ( true === result.reload ) {\n\t\t\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// CHANGE: Unblock checkout update requests\n\t\t\t\t\t\t\twindow.can_update_checkout = true;\n\n\t\t\t\t\t\t\t// CHANGE: Unblock the place order button\n\t\t\t\t\t\t\tif ( 'yes' === _settings.checkoutPlaceOrderApplyLoadingClass ) {\n\t\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( _settings.loadingClass );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeAttr( 'disabled' );\n\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( 'disabled' );\n\t\t\t\t\t\t\tFCUtils.maybeRefocusElement( currentFocusedElement );\n\t\t\t\t\t\t\t// END - Unblock the place order button\n\n\t\t\t\t\t\t\t// Trigger update in case we need a fresh nonce\n\t\t\t\t\t\t\tif ( true === result.refresh ) {\n\t\t\t\t\t\t\t\t$( document.body ).trigger( 'update_checkout' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Add new errors\n\t\t\t\t\t\t\tif ( result.messages ) {\n\t\t\t\t\t\t\t\twc_checkout_form.submit_error( result.messages );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twc_checkout_form.submit_error( '
' + wc_checkout_params.i18n_checkout_error + '
' ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\terror:\tfunction( jqXHR, textStatus, errorThrown ) {\n\t\t\t\t\t\t// CHANGE: Unblock checkout update requests\n\t\t\t\t\t\twindow.can_update_checkout = true;\n\n\t\t\t\t\t\t// CHANGE: Unblock the place order button\n\t\t\t\t\t\tif ( 'yes' === _settings.checkoutPlaceOrderApplyLoadingClass ) {\n\t\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( _settings.loadingClass );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeAttr( 'disabled' );\n\t\t\t\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( 'disabled' );\n\t\t\t\t\t\tFCUtils.maybeRefocusElement( currentFocusedElement );\n\t\t\t\t\t\t// END - Unblock the place order button\n\n\t\t\t\t\t\t// Detach the unload handler that prevents a reload / redirect\n\t\t\t\t\t\twc_checkout_form.detachUnloadEventsOnSubmit();\n\n\t\t\t\t\t\twc_checkout_form.submit_error(\n\t\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t\t( errorThrown || wc_checkout_params.i18n_checkout_error ) +\n\t\t\t\t\t\t\t'
'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tsubmit_error: function( error_message ) {\n\t\t\t$( '.woocommerce-NoticeGroup-checkout, .woocommerce-error, .woocommerce-message' ).remove();\n\t\t\twc_checkout_form.$checkout_form.prepend( '
' + error_message + '
' ); // eslint-disable-line max-len\n\t\t\twc_checkout_form.$checkout_form.removeClass( 'processing' ).unblock();\n\t\t\t// CHANGE: Unblock the place order button\n\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeAttr( 'disabled' );\n\t\t\t$( _settings.checkoutPlaceOrderSelector ).removeClass( 'disabled' );\n\t\t\t// END - Unblock the place order button\n\t\t\twc_checkout_form.$checkout_form.find( '.input-text, select, input:checkbox' ).trigger( 'validate' ).trigger( 'blur' );\n\t\t\twc_checkout_form.scroll_to_notices();\n\t\t\t$( document.body ).trigger( 'checkout_error' , [ error_message ] );\n\t\t},\n\t\tscroll_to_notices: function() {\n\t\t\tvar scrollElement = $( '.woocommerce-NoticeGroup-updateOrderReview, .woocommerce-NoticeGroup-checkout' );\n\n\t\t\tif ( ! scrollElement.length ) {\n\t\t\t\tscrollElement = $( 'form.checkout' );\n\t\t\t}\n\t\t\t$.scroll_to_notices( scrollElement );\n\t\t}\n\t};\n\n\tvar wc_checkout_coupons = {\n\t\tinit: function() {\n\t\t\t$( document.body ).on( 'click', 'a.showcoupon', this.show_coupon_form );\n\t\t\t$( document.body ).on( 'click', '.woocommerce-remove-coupon', this.remove_coupon );\n\t\t\t$( 'form.checkout_coupon' ).hide().on( 'submit', this.submit );\n\t\t},\n\t\tshow_coupon_form: function() {\n\t\t\t$( '.checkout_coupon' ).slideToggle( 400, function() {\n\t\t\t\t$( '.checkout_coupon' ).find( ':input:eq(0)' ).trigger( 'focus' );\n\t\t\t});\n\t\t\treturn false;\n\t\t},\n\t\tsubmit: function() {\n\t\t\tvar $form = $( this );\n\n\t\t\tif ( $form.is( '.processing' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$form.addClass( 'processing' ).block({\n\t\t\t\tmessage: null,\n\t\t\t\toverlayCSS: {\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\topacity: 0.6\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar data = {\n\t\t\t\tsecurity:\t\twc_checkout_params.apply_coupon_nonce,\n\t\t\t\tcoupon_code:\t$form.find( 'input[name=\"coupon_code\"]' ).val()\n\t\t\t};\n\n\t\t\t$.ajax({\n\t\t\t\ttype:\t\t'POST',\n\t\t\t\turl:\t\twc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'apply_coupon' ),\n\t\t\t\tdata:\t\tdata,\n\t\t\t\tsuccess:\tfunction( code ) {\n\t\t\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove();\n\t\t\t\t\t$form.removeClass( 'processing' ).unblock();\n\n\t\t\t\t\tif ( code ) {\n\t\t\t\t\t\t$form.before( code );\n\t\t\t\t\t\t$form.slideUp();\n\n\t\t\t\t\t\t$( document.body ).trigger( 'applied_coupon_in_checkout', [ data.coupon_code ] );\n\t\t\t\t\t\t$( document.body ).trigger( 'update_checkout', { update_shipping_method: false } );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdataType: 'html'\n\t\t\t});\n\n\t\t\treturn false;\n\t\t},\n\t\tremove_coupon: function( e ) {\n\t\t\t// CHANGE: Bail when Fluid Checkout integrated coupon code feature is enabled\n\t\t\tif ( _settings.checkoutCoupons && 'yes' === _settings.checkoutCoupons.isEnabled ) { return; }\n\n\t\t\te.preventDefault();\n\n\t\t\tvar container = $( this ).parents( '.woocommerce-checkout-review-order' ),\n\t\t\t\tcoupon = $( this ).data( 'coupon' );\n\n\t\t\tcontainer.addClass( 'processing' ).block({\n\t\t\t\tmessage: null,\n\t\t\t\toverlayCSS: {\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\topacity: 0.6\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar data = {\n\t\t\t\tsecurity: wc_checkout_params.remove_coupon_nonce,\n\t\t\t\tcoupon: coupon\n\t\t\t};\n\n\t\t\t$.ajax({\n\t\t\t\ttype: 'POST',\n\t\t\t\turl: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'remove_coupon' ),\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function( code ) {\n\t\t\t\t\t$( '.woocommerce-error, .woocommerce-message' ).remove();\n\t\t\t\t\tcontainer.removeClass( 'processing' ).unblock();\n\n\t\t\t\t\tif ( code ) {\n\t\t\t\t\t\t$( 'form.woocommerce-checkout' ).before( code );\n\n\t\t\t\t\t\t$( document.body ).trigger( 'removed_coupon_in_checkout', [ data.coupon ] );\n\t\t\t\t\t\t$( document.body ).trigger( 'update_checkout', { update_shipping_method: false } );\n\n\t\t\t\t\t\t// Remove coupon code from coupon field\n\t\t\t\t\t\t$( 'form.checkout_coupon' ).find( 'input[name=\"coupon_code\"]' ).val( '' );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: function ( jqXHR ) {\n\t\t\t\t\tif ( wc_checkout_params.debug_mode ) {\n\t\t\t\t\t\t/* jshint devel: true */\n\t\t\t\t\t\tconsole.log( jqXHR.responseText );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdataType: 'html'\n\t\t\t});\n\t\t}\n\t};\n\n\tvar wc_checkout_login_form = {\n\t\tinit: function() {\n\t\t\t$( document.body ).on( 'click', 'a.showlogin', this.show_login_form );\n\t\t},\n\t\tshow_login_form: function() {\n\t\t\t$( 'form.login, form.woocommerce-form--login' ).slideToggle();\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tvar wc_terms_toggle = {\n\t\tinit: function() {\n\t\t\t$( document.body ).on( 'click', 'a.woocommerce-terms-and-conditions-link', this.toggle_terms );\n\t\t},\n\n\t\ttoggle_terms: function() {\n\t\t\tif ( $( '.woocommerce-terms-and-conditions' ).length ) {\n\t\t\t\t$( '.woocommerce-terms-and-conditions' ).slideToggle( function() {\n\t\t\t\t\tvar link_toggle = $( '.woocommerce-terms-and-conditions-link' );\n\n\t\t\t\t\tif ( $( '.woocommerce-terms-and-conditions' ).is( ':visible' ) ) {\n\t\t\t\t\t\tlink_toggle.addClass( 'woocommerce-terms-and-conditions-link--open' );\n\t\t\t\t\t\tlink_toggle.removeClass( 'woocommerce-terms-and-conditions-link--closed' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlink_toggle.removeClass( 'woocommerce-terms-and-conditions-link--open' );\n\t\t\t\t\t\tlink_toggle.addClass( 'woocommerce-terms-and-conditions-link--closed' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\twc_checkout_form.init();\n\twc_checkout_coupons.init();\n\twc_checkout_login_form.init();\n\twc_terms_toggle.init();\n});\n"],"names":["jQuery","$","wc_checkout_params","_updateBeforeUnload","window","can_update_checkout","_settings","formRowSelector","checkoutPlaceOrderSelector","checkoutTermsSelector","checkoutUpdateFieldsSelector","checkoutLoadingInputSelector","focusedFieldSkipFragmentReplaceSelector","phoneFieldSelector","loginButtonSelector","emailFieldSelector","usernameFieldSelector","loadingClass","checkoutBlockUISelector","checkoutPlaceOrderApplyLoadingClass","checkoutUpdateBeforeUnload","checkoutUpdateOnVisibilityChange","wc_checkout_form","updateTimer","blockUI","defaults","overlayCSS","cursor","dirtyInput","selectedPaymentMethod","xhr","$order_review","$checkout_form","init","FCUtils","extendObject","fcSettings","document","body","on","this","update_checkout","init_checkout","set_autocomplete_attribute_from_data","payment_method_selected","hasClass","submitOrder","attr","submit","CheckoutValidation","validate_field","trigger_update_checkout","input_changed","maybe_input_changed","queue_update_checkout","addEventListener","maybe_update_checkout_visibility_change","maybe_prevent_unload","billing_same_shipping_changed","maybe_reinitialize_collapsible_blocks","maybe_reinitialize_flyout_blocks","terms_checked_changed","init_payment_methods","is_checkout","trigger","option_guest_checkout","toggle_create_account","maybe_copy_email_to_login_form","e","checkbox","fieldsWrapper","CollapsibleBlock","querySelector","checked","collapse","expand","collapsibleBlock","collapsibleBlocks","querySelectorAll","i","length","getInstance","initializeElement","FlyoutBlock","initTriggers","visibilityState","refresh_payment_methods","preventUnload","target","closest","preventDefault","returnValue","removeEventListener","$payment_methods","find","checkedPaymentMethod","eq","hide","prop","filter","slideUp","get_payment_method","val","stopPropagation","target_payment_box","is_checked","is","slideDown","show","data","text","classList","remove","add","createAccountBlock","matches","usernameField","billingEmailField","value","each","termsCheckBoxChecked","maybe_set_form_row_loading","formRow","maybe_stop_form_row_loading_indicators","maybeLoadingFields","maybe_update_checkout","code","key","keyboardKeys","TAB","SHIFT","CONTROL","ALT","COMMAND_OR_WINDOWS","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","ARROW_DOWN","reset_update_checkout_timer","setTimeout","$required_inputs","update_totals","clearTimeout","is_valid_json","raw_json","json","JSON","parse","$this","$parent","validated","validate_required","validate_email","validate_phone","pattern","event_type","type","removeClass","addClass","RegExp","test","replace","event","args","update_checkout_action","state","postcode","city","address","address_2","s_country","s_state","s_postcode","s_city","s_address","s_address_2","has_full_address","shipping_methods","blockui_selector","abort","update_shipping_method","country","security","update_order_review_nonce","payment_method","post_data","serialize","shipping_method","block","message","background","opacity","ajax","url","wc_ajax_url","toString","success","reload","location","paymentDetails","currentFocusedElement","ID","inArray","activeElement","currentValue","currentFocusedFormRow","blur","fragments","field","selectWoo","select2","off","intlTelInput","intlTelInputGlobals","allPhoneFields","preservedValue","phoneField","getNumber","destroy","replaceFragment","indexOf","debugMode","console","log","replaceWith","unblock","maybeRefocusElement","isEmptyObject","result","$form","messages","prepend","scroll_to_notices","error","handleUnloadEvent","navigator","userAgent","documentMode","attachUnloadEventsOnSubmit","detachUnloadEventsOnSubmit","blockOnSubmit","triggerHandler","ajaxSetup","dataFilter","raw_response","dataType","maybe_valid_json","match","checkout_url","redirect","decodeURI","err","removeAttr","refresh","submit_error","i18n_checkout_error","jqXHR","textStatus","errorThrown","error_message","scrollElement","wc_checkout_coupons","show_coupon_form","remove_coupon","slideToggle","apply_coupon_nonce","coupon_code","before","container","checkoutCoupons","isEnabled","parents","coupon","remove_coupon_nonce","debug_mode","responseText","wc_checkout_login_form","show_login_form","wc_terms_toggle","toggle_terms","link_toggle"],"mappings":"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"}