(()=>{"use strict";class e extends elementorModules.frontend.handlers.Base{appendSelectorPrefix(e){return`.elementor-element[data-id="${this.$element.data("id")}"] ${e}`}getDefaultSettings(){return{selectors:{form:".elementor-form",submitButton:'[type="submit"]'}}}getDefaultElements(){const e=this.getSettings("selectors"),t={};return t.$form=this.$element.find(e.form),t.$submitButton=t.$form.find(e.submitButton),this.initStripe(),setTimeout((()=>{this.hasPaymentField()&&this.renderPaymentForm()}),0),t}getPaymentSetting(e){return this.getElementSettings()[`${this.constructor.formHandlerName}-${e}`]}handleFormCallback(){const e=this.getPaymentSetting("redirect_url");this.paymentIntent&&e&&(location.href=e.indexOf("?")>-1?`${e}&payment_intent=${this.paymentIntent.id}`:`${e}?payment_intent=${this.paymentIntent.id}`)}hasPaymentField(){const e=this.getSettings("selectors").paymentField;return!!this.$element.parent().find(e).length}initStripe(){const e=epaSettings.locale?epaSettings.locale.substring(0,2):"auto";this.stripe=Stripe(epaSettings.apiKey,{locale:e})}beforeSend(){const e=this.elements.$form;e.animate({opacity:"0.45"},500).addClass("elementor-form-waiting"),e.find(".elementor-message").remove(),e.find(".elementor-error").removeClass("elementor-error"),e.find("div.elementor-field-group").removeClass("error").find("span.elementor-form-help-inline").remove().end().find(":input").attr("aria-invalid","false"),this.elements.$submitButton.attr("disabled","disabled").find("> span").prepend('<span class="elementor-button-text elementor-form-spinner"><i class="fa fa-spinner fa-spin"></i>&nbsp;</span>')}afterSend(){const e=this.elements.$form;this.elements.$submitButton.removeAttr("disabled").find(".elementor-form-spinner").remove(),e.css("opacity",1).removeClass("elementor-form-waiting")}showError(e){this.elements.$form.append('<div class="elementor-message elementor-message-danger" role="alert">'+e+"</div>")}showSuccess(e){this.elements.$form.append('<div class="elementor-message elementor-message-success" role="alert">'+e+"</div>")}showFormErrors(e){if(e.data.errors){const t=this.elements.$form;jQuery.each(e.data.errors,(function(e,n){t.find("#form-field-"+e).parent().addClass("elementor-error").append('<span class="elementor-message elementor-message-danger elementor-help-inline elementor-form-help-inline" role="alert">'+n+"</span>").find(":input").attr("aria-invalid","true")})),t.trigger("error")}}getFormData(){const e=new FormData(this.elements.$form[0]);return e.append("action",this.getSettings("action")),e.append("referrer",location.toString()),e}onSuccess(e){e.success?this.confirmPayment(e.data):(this.afterSend(),this.showFormErrors(e),this.showError(e.data.message))}onError(e,t){this.afterSend(),this.showError(t)}handleSubmit(e,t){if(!elementorFrontend.hooks.applyFilters("epa/form/submit",!0))return!1;if(this.constructor.formHandlerName===t)return!1;e.preventDefault();const n=this;n.beforeSend(),jQuery.ajax({url:n.getSettings("ajaxUrl"),type:"POST",dataType:"json",data:n.getFormData(),processData:!1,contentType:!1,success:n.onSuccess.bind(n),error:n.onError.bind(n)})}renderAddressField(e,t){const n=jQuery(t);if(n.length){const s=n.data("settings")||{},r={mode:"shipping",allowedCountries:["US"]};s.countries&&(r.allowedCountries=s.countries);const i=e.create("address",r);return i.mount(t),i.on("change",(e=>{if(e.complete){const t=e.value.address;this.elements.$form.find(".address-element-input").val(function(e){switch(e.country){case"US":return`${e.line1}${e.line2?" "+e.line2:""} ${e.city}, ${e.state} ${e.postal_code}`;case"UK":return`${e.line1}${e.line2?" "+e.line2:""} ${e.city} ${e.postal_code}`;default:return`${e.line1}${e.line2?" "+e.line2:""} ${e.city} ${e.state} ${e.postal_code} ${e.country}`}}(t))}})),i}}bindEvents(){throw"not implement"}renderPaymentForm(){throw"not implement"}confirmPayment(){throw"not implement"}}const t=e;const n=class extends t{static formHandlerName="card-element";getDefaultSettings(){return{selectors:{form:".elementor-form",submitButton:'[type="submit"]',paymentField:this.appendSelectorPrefix("#card-element"),addressField:this.appendSelectorPrefix("#address-element")},action:"epa_forms_send_form",ajaxUrl:elementorProFrontend.config.ajaxurl}}renderPaymentForm(){this.$element[0].epaFormHandler=this;const e=this.getSettings("selectors").paymentField,t=this.getSettings("selectors").addressField,n=jQuery(e).parent().find(".credit-card-input"),s="required"===n.attr("required"),r=this.stripe.elements(),i=r.create("card",{hidePostalCode:!0});i.mount(e),i.on("change",(({error:e,brand:t,complete:r})=>{this.clearFieldError(),r&&e?.message&&this.showFieldError(e.message),t&&n.val(t),s&&(r?this.elements.$submitButton.removeAttr("disabled"):this.elements.$submitButton.attr("disabled","disabled"))})),this.stripeElement=r,this.renderAddressField(r,t)}showFieldError(e){if(!e)return;const t=this.getSettings("selectors").paymentField;jQuery('<div class="elementor-message elementor-message-danger" role="alert">'+e+"</div>").insertAfter(jQuery(t))}clearFieldError(){const e=this.getSettings("selectors").paymentField;jQuery(e).parent().find(".elementor-message").remove()}bindEvents(){this.hasPaymentField()&&(this.elements.$form.on("submit",this.handleSubmit.bind(this)),this.elements.$form.on("submit_success",this.handleFormCallback.bind(this)))}async confirmPayment(e){const t=e.data.checkout&&e.data.checkout.client_secret;if(t){const e=this.stripeElement.getElement("card"),n=this.stripeElement.getElement("address"),s={payment_method:{card:e}};if(n){const{complete:e,value:t}=await n.getValue();e&&(s.shipping=t)}const{error:r,paymentIntent:i}=await this.stripe.confirmCardPayment(t,s);this.paymentIntent=i,this.afterSend(),r?this.showError(r.message):"succeeded"===i.status&&(e.clear(),this.elements.$form.find(".credit-card-input").val(i.id),this.elements.$form.trigger("submit",this.constructor.formHandlerName))}}};const s=class extends t{renderPaymentForm(){}confirmPayment(){}bindEvents(){this.elements.$form.on("submit_success",this.handleSubmit.bind(this))}handleSubmit(e,t){const n=this,s=t.data.checkout&&t.data.checkout.redirect_url;s&&(t.message="",n.beforeSend(),window.location.href=s)}};const r=class extends t{static formHandlerName="payment-element";getDefaultSettings(){return{selectors:{form:".elementor-form",submitButton:'[type="submit"]',paymentField:this.appendSelectorPrefix("#payment-element"),addressField:this.appendSelectorPrefix("#address-element")},action:"epa_forms_send_form",ajaxUrl:elementorProFrontend.config.ajaxurl}}getPaymentSettingIgnoreMode(e){return"onetime"===(this.getPaymentSetting("payment_type")||"onetime")?this.getPaymentSetting(`onetime_${e}_field`):this.getPaymentSetting(`sub_${e}_field`)}getFormFieldName(e=""){const t=e.match(/\[field[^\]]*id="(\w+)"[^\]]*\]/);return t?t[1]:""}watchAmountField(){this.detectAmountChange(this.getPaymentSettingIgnoreMode("amount")),this.detectAmountChange(this.getPaymentSettingIgnoreMode("quantity"))}detectAmountChange(e){const t=this.getFormFieldElement(e);t&&t.on("change",this.recalculateAmount.bind(this))}recalculateAmount(){const e=this.getTotalAmount();this.stripeElement.update({amount:e})}getFormFieldElement(e){const t=this.getFormFieldName(e);return t?this.$element.find(`[name="form_fields[${t}]"]`):null}getTotalAmount(){const e=this.getPaymentSettingIgnoreMode("amount"),t=this.getPaymentSettingIgnoreMode("quantity"),n=this.getFormFieldElement(e),s=this.getFormFieldElement(t),r=parseFloat(e)?parseFloat(e):n?parseInt(n.val()||10):10,i=parseFloat(t)?parseFloat(t):s?parseInt(s.val()||1):1;return(100*r).toFixed()*i}renderPaymentForm(){this.$element[0].epaFormHandler=this;const e=this.getSettings("selectors").paymentField,t=this.getSettings("selectors").addressField,n="required"===this.$element.find(".paymment-element-input").attr("required"),s=this.getPaymentSetting("theme")||"stripe",r=this.getPaymentSetting("layout")||"tabs",i=this.getPaymentSetting("payment_methods")||[],a=this.getPaymentSetting("payment_methods_order")||[],o="yes"===this.getPaymentSetting("enable_default_collapsed"),m="yes"===this.getPaymentSetting("enable_google"),l="yes"===this.getPaymentSetting("enable_apple"),d="yes"===this.getPaymentSetting("enable_accordion_radio"),c="yes"===this.getPaymentSetting("enable_accordion_spaced"),h="yes"===this.getPaymentSetting("onetime_save_card"),u=this.getPaymentSetting("payment_type")||"onetime",p={mode:"onetime"===u?"payment":"subscription",currency:(("onetime"===u?this.getPaymentSetting("onetime_currency"):this.getPaymentSetting("sub_currency"))||"usd").toLowerCase(),amount:this.getTotalAmount(),appearance:{theme:s}};h&&"onetime"===u&&(p.setupFutureUsage="off_session");let g=[];a.length>1&&(g=a.filter((e=>"automatic"!==e))),i.length>1&&(p.paymentMethodTypes=i.filter((e=>"automatic"!==e)));try{this.stripeElement=this.stripe.elements(p);const s=this.stripeElement.create("payment",{layout:{type:r,defaultCollapsed:o,radios:d,spacedAccordionItems:c},wallets:{googlePay:m?"auto":"never",applePay:l?"auto":"never"},paymentMethodOrder:g});s.mount(e),s.on("loaderror",(e=>{e.error&&this.showError(e.error.message)})),s.on("change",(({complete:e,value:t})=>{n&&(e?this.elements.$submitButton.removeAttr("disabled"):this.elements.$submitButton.attr("disabled","disabled")),t&&this.$element.find(".paymment-element-input").val(t.type),this.stripeElement&&this.recalculateAmount()})),this.watchAmountField(u),this.renderAddressField(this.stripeElement,t)}catch(e){this.showError(e.message)}}bindEvents(){this.hasPaymentField()&&(this.elements.$form.on("submit",this.handleSubmit.bind(this)),this.elements.$form.on("submit_success",this.handleFormCallback.bind(this)),this.checkStatus())}handleFormCallback(){const e=this.getPaymentSetting("redirect_url");this.paymentIntent&&e&&(location.href=e.indexOf("?")>-1?`${e}&payment_intent=${this.paymentIntent.id}`:`${e}?payment_intent=${this.paymentIntent.id}`)}async confirmPayment(e){const t=e.data.checkout&&e.data.checkout.client_secret;if(t){const{error:e}=await this.stripeElement.submit();if(e)return this.afterSend(),void this.showError(e.message);const n=this.getPaymentSetting("redirect_url"),{error:s,paymentIntent:r}=await this.stripe.confirmPayment({elements:this.stripeElement,clientSecret:t,confirmParams:{return_url:n||location.href},redirect:"if_required"});this.paymentIntent=r,this.afterSend(),s?this.showError(s.message):"succeeded"===r.status&&(this.elements.$form.find(".paymment-element-input").val(r.id),this.elements.$form.trigger("submit",this.constructor.formHandlerName))}}async checkStatus(){const e=new URLSearchParams(window.location.search).get("payment_intent_client_secret");if(!e)return;const{paymentIntent:t}=await this.stripe.retrievePaymentIntent(e);switch(t.status){case"succeeded":this.showSuccess("Payment succeeded!");break;case"processing":this.showSuccess("Your payment is processing.");break;case"requires_payment_method":this.showError("Your payment was not successful, please try again.");break;default:this.showError("Something went wrong.")}}};window.CardFormHandlerClass=n,window.CheckoutRedirectFormHandlerClass=s,window.PaymentElementFormHandlerClass=r,jQuery(window).on("elementor/frontend/init",(function(){elementorFrontend.elementsHandler.attachHandler("form",s)}))})();