'use strict';!function(l,q,r,t){XF.PaymentProviderContainer=XF.Element.newHandler({options:{},init:function(){if(this.$target.is("form"))this.$target.on("ajax-submit:response",XF.proxy(this,"submitResponse"));else console.error("%o is not a form",this.$target[0])},submitResponse:function(a,b){if(b.providerHtml){a.preventDefault();var c=this.$target.parent().find(".js-paymentProviderReply-"+b.purchasableTypeId+b.purchasableId);XF.setupHtmlInsert(b.providerHtml,function(d,f){c.html(d)})}}});XF.BraintreePaymentForm= XF.Element.newHandler({options:{clientToken:null,formStyles:".js-formStyles"},xhr:null,init:function(){this.$target.on("submit",XF.proxy(this,"submit"));XF.loadScripts(["https://js.braintreegateway.com/web/3.19.0/js/client.min.js","https://js.braintreegateway.com/web/3.19.0/js/hosted-fields.min.js"],XF.proxy(this,"postInit"));var a=this.$target.closest(".overlay-container").data("overlay");if(a)a.on("overlay:hidden",function(){a.destroy()})},postInit:function(){if(this.options.clientToken){var a= this,b=this.$target.find(this.options.formStyles)||{},c=b?l.parseJSON(b.first().html()):{};braintree.client.create({authorization:this.options.clientToken},function(d,f){d?XF.alert(d.message):braintree.hostedFields.create({client:f,styles:c,fields:{number:{selector:"#card-number",placeholder:"1234 1234 1234 1234"},expirationDate:{selector:"#card-expiry",placeholder:"MM / YY"},cvv:{selector:"#card-cvv",placeholder:"CVC"}}},function(e,m){if(e)XF.alert(e.message);else{e=m._fields;for(var n in e)e.hasOwnProperty(n)&& l(e[n].containerElement).removeClass("is-disabled");m.on("cardTypeChange",function(g){g=1===g.cards.length?g.cards[0].type:"unknown";var k={visa:"fa-cc-visa","master-card":"fa-cc-mastercard","american-express":"fa-cc-amex",discover:"fa-cc-discover","diners-club":"fa-cc-diners",jcb:"fa-cc-jcb",unionpay:"fa-credit-card-alt",maestro:"fa-credit-card-alt",unknown:"fa-credit-card-alt"};if(g){var h=l("#brand-icon"),p="fa-credit-card-alt";g in k&&(p=k[g]);h[0].className="";h.addClass("fa");h.addClass("fa-lg"); h.addClass(p)}});a.$target.on("submit",function(g){g.preventDefault();m.tokenize(function(k,h){k?(h=k.message,(k=k.details.invalidFieldKeys)&&(h+=" ("+k.join(", ")+")"),XF.alert(h)):a.response(h)})})}})})}else console.error("Form must contain a data-client-token attribute.")},submit:function(a){a.preventDefault();return!1},response:function(a){this.xhr&&this.xhr.abort();this.xhr=XF.ajax("post",this.$target.attr("action"),a,XF.proxy(this,"complete"),{skipDefaultSuccess:!0})},complete:function(a){this.xhr= null;a.redirect&&XF.redirect(a.redirect)}});XF.BraintreeApplePayForm=XF.Element.newHandler({options:{clientToken:null,currencyCode:"",boardTitle:"",title:"",amount:""},xhr:null,init:function(){XF.loadScripts(["https://js.braintreegateway.com/web/3.19.0/js/client.min.js","https://js.braintreegateway.com/web/3.19.0/js/apple-pay.min.js"],XF.proxy(this,"postInit"))},postInit:function(){if(this.options.clientToken){var a=this,b=!1;q.ApplePaySession&&ApplePaySession.canMakePayments()&&(b=!0);b&&braintree.client.create({authorization:this.options.clientToken}, function(c,d){c?XF.alert(c.message):braintree.applePay.create({client:d},function(f,e){f?XF.alert(f.message):ApplePaySession.canMakePaymentsWithActiveCard(e.merchantIdentifier).then(function(m){m?(a.$target.removeClass("u-hidden"),a.$target.find(".js-applePayButton").on("click",function(){var n=e.createPaymentRequest({total:{label:a.options.title,amount:a.options.amount}}),g=new ApplePaySession(2,n);g.onvalidatemerchant=function(k){e.performValidation({validationURL:k.validationURL,displayName:a.options.boardTitle}, function(h,p){h?(XF.alert(h.message),g.abort()):g.completeMerchantValidation(p)})};g.onpaymentauthorized=function(k){e.tokenize({token:k.payment.token},function(h,p){h?(XF.alert(h.message),g.completePayment(ApplePaySession.STATUS_FAILURE)):(g.completePayment(ApplePaySession.STATUS_SUCCESS),a.response(p))})};g.begin()})):console.warn("No Apple Pay card available")})})})}else console.error("Form must contain a data-client-token attribute.")},response:function(a){this.xhr&&this.xhr.abort();this.xhr= XF.ajax("post",this.$target.attr("action"),a,XF.proxy(this,"complete"),{skipDefaultSuccess:!0})},complete:function(a){this.xhr=null;a.redirect&&XF.redirect(a.redirect)}});XF.BraintreePayPalForm=XF.Element.newHandler({options:{clientToken:null,paypalButton:"#paypal-button",testPayments:!1},xhr:null,init:function(){XF.loadScripts(["https://www.paypalobjects.com/api/checkout.js","https://js.braintreegateway.com/web/3.19.0/js/client.min.js","https://js.braintreegateway.com/web/3.19.0/js/paypal-checkout.min.js", "https://js.braintreegateway.com/web/3.19.0/js/data-collector.min.js"],XF.proxy(this,"postInit"))},postInit:function(){if(this.options.clientToken){var a=this;braintree.client.create({authorization:this.options.clientToken},function(b,c){b?XF.alert(b.message):braintree.paypalCheckout.create({client:c},function(d,f){d?XF.alert(d.message):paypal.Button.render({env:a.options.testPayments?"sandbox":"production",payment:function(){return f.createPayment({flow:"vault",enableShippingAddress:!1})},onAuthorize:function(e, m){return f.tokenizePayment(e).then(function(n){a.response(n)})},onCancel:function(e){console.log("checkout.js payment cancelled",JSON.stringify(e,0,2))},onError:function(e){XF.alert(e.message)}},a.options.paypalButton)})})}else console.error("Form must contain a data-client-token attribute.")},response:function(a){this.xhr&&this.xhr.abort();this.xhr=XF.ajax("post",this.$target.attr("action"),a,XF.proxy(this,"complete"),{skipDefaultSuccess:!0})},complete:function(a){this.xhr=null;a.redirect&&XF.redirect(a.redirect)}}); XF.StripePaymentForm=XF.Element.newHandler({options:{publishableKey:null,formStyles:".js-formStyles",recurring:null,piSecret:null,prEnabled:null,prCountry:null,prCost:null,prCurrency:null,prLabel:null,styleType:"dark"},stripe:null,elements:null,elementsCache:{},paymentRequest:null,stripeJs:"https://js.stripe.com/v3/",processing:null,init:function(){this.$target.on("submit",XF.proxy(this,"submit"));XF.loadedScripts.hasOwnProperty(this.stripeJs)?this.postInit():XF.loadScript(this.stripeJs,XF.proxy(this, "postInit"))},postInit:function(){if(this.options.publishableKey){this.stripe=Stripe(this.options.publishableKey);this.elements=this.stripe.elements();this.options.prEnabled&&(this.paymentRequest=this.stripe.paymentRequest({country:this.options.prCountry,currency:this.options.prCurrency.toLowerCase(),total:{label:this.options.prLabel,amount:this.options.prCost},requestPayerName:!0,requestPayerEmail:!0}));this.initElements();var a=this.$target.closest(".overlay-container").data("overlay");if(a)a.on("overlay:hidden", function(){a.destroy();l("iframe").each(function(){var b=l(this);b.attr("name")&&0<=b.attr("name").toLowerCase().indexOf("stripe")&&b.remove()})})}else console.error("Form must contain a data-publishable-key attribute.")},initElements:function(){var a=this,b=this.elements,c=this.paymentRequest,d=this.$target.find(this.options.formStyles)||{};d=d?l.parseJSON(d.first().html()):{};if(c){var f=b.create("paymentRequestButton",{paymentRequest:c,style:{paymentRequestButton:{theme:"light"===this.options.styleType? "light-outline":"dark"}}});c.canMakePayment().then(function(e){e?(f.mount("#payment-request-button"),a.$target.find(".js-pr-remove").show()):a.$target.find(".js-pr-remove").remove()});c.on("paymentmethod",XF.proxy(a,"onPrPaymentMethod"))}b=b.create("card",{style:d});b.mount("#card-element");this.elementsCache.card=b},onPrPaymentMethod:function(a){var b=this,c=a.paymentMethod.id;this.options.recurring?(a.complete("success"),this.triggerSubscription(c)):this.stripe.confirmCardPayment(this.options.piSecret, {payment_method:c},{handleActions:!1}).then(function(d){d.error?a.complete("fail"):(a.complete("success"),b.handleCardPayment())})},submit:function(a){a.preventDefault();if(this.processing)return!1;this.startProcessing();a=this.elementsCache.card;var b=this.options.piSecret;this.options.recurring?this.setupSubscriptionFromCard(a):b&&b.length?this.handleCardPayment(a):this.handleError("Developer error: not recurring and no payment intent found")},setupSubscriptionFromCard:function(a){var b=this;this.stripe.createPaymentMethod({type:"card", card:a}).then(function(c){c.error?b.handleError(c.error):b.triggerSubscription(c.paymentMethod.id)})},triggerSubscription:function(a){this.$target.find("input[name=payment_method_id]").val(a);this.submitForm(XF.proxy(this,"handleSubscriptionSubmit"))},handleSubscriptionSubmit:function(a){var b=this.stripe,c=this,d=this.$target.find("input[name=payment_method_id]").val();a.paymentFailed?(this.stopProcessing(),b.confirmCardPayment(a.piSecret,{payment_method:d}).then(function(f){f.error?c.handleError(f.error): "succeeded"===f.paymentIntent.status&&c.submitForm(XF.proxy(c,"handleSubscriptionSubmit"))})):this.complete(a)},handleCardPayment:function(a){var b=this,c=this.stripe,d=this.options.piSecret,f;a&&(f={payment_method:{card:a}});c.confirmCardPayment(d,f).then(function(e){e.error?b.handleError(e.error):b.response()})},handleError:function(a){var b=l("#card-errors-container"),c=b.find("#card-errors");c.text(a.message);c.removeClass("u-hidden");b.removeClass("u-hidden");this.stopProcessing()},startProcessing:function(){if(!this.processing){this.processing= !0;var a=l("#card-errors-container"),b=a.find("#card-errors");a.addClass("u-hidden");b.addClass("u-hidden");b.text("");this.$target.find("[type=submit]").addClass("is-disabled").prop("disabled",!0);XF.ActionIndicator.show()}},stopProcessing:function(){this.processing&&(this.processing=!1,this.$target.find("[type=submit]").removeClass("is-disabled").prop("disabled",!1),XF.ActionIndicator.hide())},submitForm:function(a){this.startProcessing();var b=this.$target,c=XF.getDefaultFormData(b),d=this;XF.ajax("post", b.attr("action"),c,a,{skipDefaultSuccess:!0}).always(function(){d.stopProcessing()})},response:function(){this.submitForm(XF.proxy(this,"complete"))},complete:function(a){a.redirect&&XF.redirect(a.redirect)}});XF.Element.register("payment-provider-container","XF.PaymentProviderContainer");XF.Element.register("braintree-payment-form","XF.BraintreePaymentForm");XF.Element.register("braintree-apple-pay-form","XF.BraintreeApplePayForm");XF.Element.register("braintree-paypal-form","XF.BraintreePayPalForm"); XF.Element.register("stripe-payment-form","XF.StripePaymentForm")}(jQuery,window,document);