LittleDemon WebShell


Linux hosting5.siteguarding.com 3.10.0-962.3.2.lve1.5.88.el7.x86_64 #1 SMP Fri Sep 26 14:06:42 UTC 2025 x86_64
Path : /home/devsafetybis/verd.dev.safetybis.com/js/brippopaymentsfrontend/
File Upload :
Command :
Current File : /home/devsafetybis/verd.dev.safetybis.com/js/brippopaymentsfrontend/express-checkout.js

var BrippoExpressCheckout = Class.create();

BrippoExpressCheckout.prototype = {
    pkey: null,
    currentTotals: null,
    paymentMethodCode: "brippopayments_express",
    source: null,

    checkoutButton: null,
    checkoutLocation: null,
    buttonType: "",
    buttonTheme: "",
    buttonHeight: "",
    currentProductId: "",
    stripe: null,
    onButtonReadyHandler: null,
    justAddedToCart: false,
    onCanMakePaymentHandlers: [],
    isCouponCodeFeatureEnabled: false,
    placeOrderLock: false,
    canMakePayment: null,
    originalPointerEvents: null,
    quoteHasValidAddressData: false,
    oscBillingAddressSaved: false,
    expressPaymentRequest: null,

    initialize: function(source) {
        let self = this;
        this.source = source;
        window.dispatchEvent(new Event('BrippoExpressCheckoutLoaded'));
    },

    removeOverlay: function() {
        let brippoOverlay = document.querySelector(".brippo-overlay");
        if (brippoOverlay !== null && brippoOverlay !== undefined) {
            brippoOverlay.remove();
        }
        document.body.style.pointerEvents = this.originalPointerEvents;
    },
    showOverlay: function() {
        this.removeOverlay();
        // Create the overlay div
        let overlay = document.createElement("div");
        overlay.classList.add("brippo-overlay");

        // Create the spinner div
        let spinner = document.createElement("div");
        spinner.classList.add("brippo-spinner");

        // Create the text div
        let text = document.createElement("div");
        text.classList.add("brippo-spinner-text");
        text.innerHTML = Translator.translate("Processing");

        let container = document.createElement("div");
        container.classList.add("brippo-spinner-container");
        container.appendChild(spinner);
        container.appendChild(text);
        overlay.appendChild(container);

        // Append the overlay div to the body element
        document.body.appendChild(overlay);
        try {
            this.originalPointerEvents = document.body.style.pointerEvents;
        } catch (e) {
            this.originalPointerEvents = "";
        }

        document.body.style.pointerEvents = "none";
    },

    setPlaceOrderLock(locked) {
        let self = this;
        self.placeOrderLock = locked;
        if (locked === true) {
            window.dispatchEvent(new Event('brippoPlaceOrderLockEnabled'));
        } else {
            window.dispatchEvent(new Event('brippoPlaceOrderLockDisabled'));
        }
        console.log("placeOrderLock " + locked);
    },

    initPaymentRequest: function (config, source, onButtonReadyHandler, callback) {
        const self = this;
        console.log("initPaymentRequest called");
        if (this.justAddedToCart) {
            this.justAddedToCart = false;
            return;
        }

        if (this.source === null || this.source === undefined) {
            this.source = source;
        }

        this.buttonType = config.buttonType;
        this.buttonTheme = config.buttonTheme;
        this.buttonHeight = config.buttonHeight;
        this.checkoutButton = config.checkoutButton;
        this.checkoutLocation = config.checkoutLocation;
        this.isCouponCodeFeatureEnabled = config.enabledCouponCode;

        this.onButtonReadyHandler = onButtonReadyHandler;

        if (!this.stripe) {
            this.stripe = Stripe(config.pKey, {
                apiVersion: "2020-08-27"
            });
        }

        this.resetPaymentErrors(source);

        self.getPaymentRequestOptions(source, function (serverResponse) {
            try {
                let response = serverResponse.responseText.evalJSON();
                if (response.valid === 0) {
                    self.showPaymentError(response.message, source);
                } else if (response.valid === 1) {
                    self.createPaymentRequest(
                        response.options,
                        source,
                        function (canMakePayment, paymentRequest) {
                            if (callback) {
                                callback(canMakePayment, paymentRequest);
                            }
                        }
                    );
                }
            } catch (e) {
                console.log(e);
                self.showPaymentError("Unexpected error, please try again.", source);
            }
        }.bind(this));
    },

    updatePaymentRequest: function(source, paymentRequest, callback) {
        let self = this;
        self.getPaymentRequestOptions(source, function (serverResponse) {
            try {
                let response = serverResponse.responseText.evalJSON();
                if (response.valid === 0) {
                    self.showPaymentError(response.message, source);
                } else if (response.valid === 1) {
                    if (BrippoExpressCheckout.prototype.isOSC()) {
                        if (response.quoteHasValidAddressData === true) {
                            BrippoExpressCheckout.prototype.setQuoteHasValidAddressData();
                        } else {
                            console.log("express-checkout billingAddress not saved, call save()");
                            BrippoExpressCheckout.prototype.saveBillingAddress();
                        }
                    }

                    let options = {
                        currency: response.options.currency,
                        total: response.options.total,
                        displayItems: response.options.displayItems,
                        shippingOptions: response.options.shippingOptions,
                    };

                    paymentRequest.update(options);
                    paymentRequest.canMakePayment().then(function (result) {
                        let canMakePaymentResult = result;
                        let canMakePayment = canMakePaymentResult != null;
                        self.canMakePayment = canMakePaymentResult;
                        console.log("payment request updated, can makepayment "+ canMakePayment);
                        callback(canMakePayment);
                    });

                }
            } catch (e) {
                console.log("could not update payment request")
                console.log(e);
            }
        }.bind(this));
    },

    getPaymentRequestOptions: function (sourceObj, callback) {
        const self = this;

        let url = '/brippo_payments_frontend/express_PaymentRequest/paymentRequest';
        new Ajax.Request(
            url, {
                method: 'POST',
                parameters: {
                    source: sourceObj.source,
                    currentProductId: sourceObj.currentProductId
                },
                onComplete: function (transport) {
                    callback(transport);
                }
            }
        );
    },

    createPaymentRequest: function (options, definedSource, callback) {
        const self = this;
        let paymentRequest = this.stripe.paymentRequest(options);

        let elements = this.stripe.elements();
        let prButton = elements.create('paymentRequestButton', {
            paymentRequest: paymentRequest,
            style: {
                paymentRequestButton: {
                    type: this.buttonType,
                    theme: this.buttonTheme,
                    height: this.buttonHeight+"px"
                }
            }
        });

        paymentRequest.canMakePayment().then(function (result) {
            let canMakePaymentResult = result;
            self.canMakePayment = canMakePaymentResult;
            if (canMakePaymentResult) {
                paymentRequest.on('paymentmethod', function (ev) {
                    self.onPaymentMethod(ev, definedSource);
                });
                paymentRequest.on('shippingoptionchange', function (ev) {
                    self.onShippingOptionChange(ev, definedSource);
                });
                paymentRequest.on('shippingaddresschange', function (ev) {
                    self.onShippingAddressChange(ev, definedSource);
                });

                paymentRequest.on('cancel', function (ev) {
                    console.log("window dismissed")
                    if (self.isOSC()) {
                        self.restoreOSC();
                    }
                });

                if (!self.isCustomButtonCheckout(definedSource)) {
                    prButton.on('click', function (ev) {
                        self.onPaymentButtonClick(ev, definedSource, paymentRequest, canMakePaymentResult);
                    });
                    prButton.on('loaderror', function (ev) {
                        self.onPaymentButtonLoadError(ev, definedSource, paymentRequest, canMakePaymentResult);
                    });
                    let el = $(definedSource.elementId);
                    prButton.mount(el);
                    prButton.on('ready', function () {
                        if (self.onButtonReadyHandler) {
                            self.onButtonReadyHandler(prButton);
                        }
                    });
                    self.enableButtons(definedSource);
                }

                for (let i = 0; i < self.onCanMakePaymentHandlers.length; i++) {
                    self.onCanMakePaymentHandlers[i]();
                }
                if (callback) {
                    callback(true, paymentRequest);
                }
            } else {
                if (callback) {
                    callback(false, null);
                }
            }
        });
    },

    onPaymentMethod: function (ev, definedSource) {
        const self = this;

        if (self.placeOrderLock === true) {
            return;
        }
        self.setPlaceOrderLock(true);

        if (self.isProductPage(definedSource)) {
            self.showPdpProceessingPayment();
        } else if(self.isMiniCart(definedSource)) {
            self.showMinicartProceessingPayment()
        }

        self.placeOrder(ev, definedSource, function (placeOrderResponse) {
            if (placeOrderResponse.valid === 0) {
                self.setPlaceOrderLock(false);
                ev.complete('fail');
                self.showPaymentError(placeOrderResponse.message, definedSource);
                if (self.isOSC()) {
                    self.restoreOSC();
                }
            } else if (placeOrderResponse.valid === 1) {
                try {
                    self.stripe.confirmCardPayment(
                        placeOrderResponse['client_secret'],
                        {payment_method: ev.paymentMethod.id},
                        {handleActions: false}
                    ).then(function (confirmResult) {
                        if (confirmResult.error) {
                            self.setPlaceOrderLock(false);
                            ev.complete('fail');
                            self.showPaymentError(confirmResult.error.message, definedSource);
                            self.log(confirmResult.error.message, {
                                definedSource: definedSource,
                                response: confirmResult.error
                            });
                            self.cancelOrder(
                                placeOrderResponse['order_id'],
                                definedSource
                            );
                            if (self.isOSC()) {
                                self.restoreOSC();
                            }
                        } else {
                            ev.complete('success');
                            if (confirmResult.paymentIntent.status === "requires_action") {
                                self.stripe.confirmCardPayment(placeOrderResponse['client_secret']).then(function (result) {
                                    if (result.error) {
                                        self.setPlaceOrderLock(false);
                                        self.showPaymentError(confirmResult.error.message, definedSource);
                                    } else {
                                        self.completeOrder(placeOrderResponse, definedSource, result.paymentIntent.status);
                                    }
                                });
                            } else {
                                self.completeOrder(placeOrderResponse, definedSource, confirmResult.paymentIntent.status);
                            }
                        }
                    });
                } catch (error) {
                    self.setPlaceOrderLock(false);
                    ev.complete('fail');
                    self.log('Error confirming payment.', {
                        definedSource: definedSource,
                        response: error
                    });
                    if (self.isOSC()) {
                        self.restoreOSC();
                    }
                }
            }
        });
    },
    onShippingOptionChange: function (ev, definedSource) {
        console.log('onShippingOptionChange');
        const self = this;

        let url = '/brippo_payments_frontend/express_AddShippingMethod/addshippingmethod';
        // Checkout.prototype.setLoadWaiting(true);
        new Ajax.Request(
            url, {
                method: 'POST',
                parameters: {
                    'shippingOption': JSON.stringify(ev.shippingOption)
                },
                onComplete: function (response) {
                    // Checkout.prototype.setLoadWaiting(false);
                    try {
                        let data = response.responseText.evalJSON();
                        if (data.valid === 1) {
                            ev.updateWith(data.updateDetails);
                            if (data.valid === 0) {
                                self.showPaymentError(data.message, definedSource);
                            }
                        } else {
                            self.showPaymentError(response.responseText, definedSource);
                            self.log('Error on shipping option change.', {
                                definedSource: definedSource,
                                response: response.responseText
                            });
                        }
                    } catch (e) {
                        console.log(e);
                        self.showPaymentError(response.responseText, definedSource);
                        self.log('Error on shipping option change.', {
                            definedSource: definedSource,
                            response: response.responseText
                        });
                    }
                }
            }
        );
    },
    onShippingAddressChange: function (ev, definedSource) {
        console.log('onShippingAddressChange');
        const self = this;

        let url = '/brippo_payments_frontend/express_AddShippingAddress/addshippingaddress';
        // Checkout.prototype.setLoadWaiting(true);
        new Ajax.Request(
            url, {
                method: 'POST',
                parameters: {
                    'shippingAddress': JSON.stringify(ev.shippingAddress)
                },
                onComplete: function (response) {
                    // Checkout.prototype.setLoadWaiting(false);
                    try {
                        let data = response.responseText.evalJSON();
                        if (data.valid === 1) {
                            ev.updateWith(data.updateDetails);
                            if (data.valid === 0) {
                                self.showPaymentError(data.message, definedSource);
                            }
                        } else {
                            self.showPaymentError(response.responseText, definedSource);
                            self.log('Error on shipping address change.', {
                                definedSource: definedSource,
                                response: response.responseText
                            });
                        }
                    } catch (e) {
                        console.log(e);
                        self.showPaymentError(response.responseText, definedSource);
                        self.log('Error on shipping address change.', {
                            definedSource: definedSource,
                            response: response.responseText
                        });
                    }
                }
            }
        );
    },
    onPaymentButtonClick: function (ev, definedSource, paymentRequest, canMakePaymentResult) {
        let self = this;

        if (self.placeOrderLock === true) {
            return;
        }
        if (this.isProductPage(definedSource)) {
            this.validateProductPageSelection(ev, definedSource, paymentRequest, canMakePaymentResult);
        } else if (this.isMiniCart(definedSource) && this.isCouponCodeFeatureEnabled === 1) {
            // todo implement
        }
    },

    validateProductPageSelection: function (ev, definedSource, paymentRequest, canMakePaymentResult) {
        const self = this;
        const form = $('product_addtocart_form');

        const couponCode = null;

        // We don't want to preventDefault for applePay because we cannot use paymentRequest.show().
        if (!canMakePaymentResult.applePay) {
            ev.preventDefault();
        }

        if (!BrippoExpressProduct.prototype.validate()) {
            return;
        }

        // Add to Cart
        let request = [];
        request = form.serialize(true);
        self.addToCart(request, couponCode, definedSource, function (result) {
            if (result.valid === 0) {
                self.showPaymentError(result.message, definedSource);
            } else {
                try {
                    if (!canMakePaymentResult.applePay) {
                        paymentRequest.update(result.options);
                        paymentRequest.show();
                    }
                } catch (e) {
                    self.showPaymentError(e.message, definedSource);
                }
            }
        });
    },
    addToCart: function (request, couponCode, definedSource, callback) {
        const self = this;

        let url = '/brippo_payments_frontend/express_AddToCart/addtocart';
        new Ajax.Request(
            url, {
                method: 'POST',
                parameters: {
                    'request': JSON.stringify(request)
                },
                onComplete: function (response) {
                    try {
                        let data = response.responseText.evalJSON();
                        self.justAddedToCart = true;
                        if (callback) {
                            callback(data);
                        }
                    } catch (e) {
                        self.showPaymentError(response.error().responseText, definedSource);
                        self.log('Error adding to cart.', {
                            definedSource: definedSource,
                            response: response.error().responseText
                        });
                    }
                }
            }
        );
    },
    onPaymentButtonLoadError: function (ev, definedSource, paymentRequest, canMakePaymentResult) {
        const self = this;
        self.log('Payment button load error.', {
            definedSource: definedSource,
            response: ev
        });
    },

    placeOrder: function (paymentData, definedSource, callback) {
        let self = this;

        if (self.isProductPage(definedSource)) {
            self.showPdpProceessingPayment();
        }


        let params = {
            'payerName': paymentData.payerName,
            'payerPhone': paymentData.payerPhone,
            'payerEmail': paymentData.payerEmail,
            'shippingAddress': JSON.stringify(paymentData.shippingAddress),
            'billingDetails': JSON.stringify(paymentData.paymentMethod.billing_details),
            'source': definedSource.source,
            'card': JSON.stringify(paymentData.paymentMethod.card),
            'provider': self.getWalletName()
        };

        let serializedFormData = null;

        if (self.isCheckoutSource(definedSource) && self.isOSC()) {
            let form = document.getElementById('onestepcheckout-form');
            let formData = new FormData(form);
            serializedFormData = new URLSearchParams(formData).toString();

            // Serialize and concatenate params to serializedFormData
            let paramsString = Object.keys(params)
                .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))
                .join('&');

            if (serializedFormData) {
                serializedFormData += '&' + paramsString;
            } else {
                serializedFormData = paramsString;
            }
        }

        let url = '/brippo_payments_frontend/express_PlaceOrder/placeOrder';
        new Ajax.Request(
            url, {
                method: 'POST',
                parameters: self.isOSC() ? serializedFormData : params,
                onComplete: function (response) {
                    try {
                        let data = response.responseText.evalJSON();
                        if (callback) {
                            callback(data);
                        }
                    } catch (e) {
                        console.log(e);
                        if (callback) {
                            callback({
                                "valid": 0,
                                "message": response.error().responseText
                            });
                        }
                    }
                }
            }
        );
    },

    completeOrder: function (data, definedSource, status) {
        const self = this;

        self.showOverlay();
        let url = '/brippo_payments_frontend/express_Complete/complete';
        new Ajax.Request(
            url, {
                method: 'POST',
                parameters: {
                    'orderId': data['order_id'],
                    'paymentIntentId': data['payment_intent_id'],
                    'status': status
                },
                onComplete: function (response) {
                    try {
                        let data = response.responseText.evalJSON();
                        if (data.valid === 1) {
                            document.location.href = data.url;
                        } else {
                            self.removeOverlay();
                            self.setPlaceOrderLock(false);
                            self.showPaymentError(data.message, definedSource);
                            self.log('Error completing order.', {
                                definedSource: definedSource,
                                response: response.responseText
                            });
                        }
                    } catch (e) {
                        self.removeOverlay();
                        self.setPlaceOrderLock(false);
                        console.log(e);
                        self.showPaymentError(response.error().responseText, definedSource);
                        self.log('Error completing order.', {
                            definedSource: definedSource,
                            response: response.error().responseText
                        });
                    }
                }
            }
        );
    },

    cancelOrder: function (orderId, definedSource) {
        const self = this;
        let url = '/brippo_payments_frontend/express_Cancel/cancel';
        new Ajax.Request(
            url, {
                method: 'GET',
                parameters: {
                    'orderId': orderId
                },
                onComplete: function (response) {
                    try {
                        let result = response.responseText.evalJSON();
                        if (result.valid === 0) {
                            self.log('Error canceling order.', {
                                definedSource: definedSource,
                                response: response
                            });
                        }
                    } catch (e) {
                        console.log(e);
                        self.log('Error canceling order.', {
                            definedSource: definedSource,
                            response: response
                        });
                    }
                }
            }
        );
    },

    showPaymentError: function (message, source) {
        let self = this;
        let span = null;

        if (source !== null && source !== undefined) {
            span = document.getElementById(source.elementId + '-payment-errors');
        }

        let finalMessage = message;
        if (typeof finalMessage === 'object') {
            finalMessage = finalMessage.message;
        }

        if (this.isOSC()) {
            BrippoExpressCheckout.prototype.restoreOSC();
            BrippoExpressCheckout.prototype.removeOverlay();
            alert(finalMessage);
        } else {
            if (span == null) {
                let reviewArea = document.getElementById('review-buttons-container');
                if (reviewArea != null) {
                    let html = '<span id="' + self.paymentMethodCode + '-payment-errors" class="message error" style="display: none;"></span>';
                    reviewArea.innerHTML = html + reviewArea.innerHTML;
                    span = document.getElementById(self.paymentMethodCode + '-payment-errors');
                }
            }


            if (span == null) {
                console.log(finalMessage);
                return;
            }

            span.innerHTML = finalMessage;
            span.style.display="block";
        }
    },

    resetPaymentErrors: function (source) {
        let span = null;

        if (source !== null && source !== undefined) {
            span = document.getElementById(source.elementId + '-payment-errors');
        }
        if (span !== null) {
            span.innerHTML = "";
            span.style.display = "none";
        }
    },

    log: function (message, data) {
        console.log(data);
        const self = this;
        let url = '/brippo_payments_frontend/Logger_Log/log';
        new Ajax.Request(
            url, {
                method: 'GET',
                parameters: {
                    'message': message,
                    'data': JSON.stringify(data)
                },
                onComplete: function (response) {
                }
            }
        );
    },

    // wallet
    getWalletName: function () {
        if (this.isGooglePay()) {
            return "Google Pay";
        } else if (this.isApplePay()) {
            return "Apple Pay";
        } else if (this.isLink()) {
            return "Link";
        }
        return "";
    },
    isGooglePay: function () {
        return this.canMakePayment && this.canMakePayment.googlePay === true;
    },
    isApplePay: function () {
        return this.canMakePayment && this.canMakePayment.applePay === true;
    },
    isLink: function () {
        return this.canMakePayment && this.canMakePayment.link === true;
    },

    // detect current page, button types
    isCustomButtonCheckout: function (definedSource) {
        return this.isCheckoutSource(definedSource) &&
            this.checkoutButton === 'default' &&
            this.checkoutLocation !== 'on_top';
    },
    isCheckoutSource: function (definedSource) {
        return definedSource.source === 'checkout';
    },
    isMiniCart: function (definedSource) {
        return definedSource.source === 'minicart';
    },
    isProductPage: function (definedSource) {
        return definedSource.source === 'product_page';
    },
    enableButtons: function (definedSource) {
        $(definedSource.elementId).setStyle({display: 'block'});
        $$('.scExpressSeparator').invoke('setStyle', {display:'table'});
    },
    showPdpProceessingPayment: function () {
        $('pdp-brippo-processing').setStyle({display: 'block'});
    },
    showMinicartProceessingPayment: function () {
        $('minicart-brippo-processing').setStyle({display: 'block'});
    },

    // One Step checkout METHODS
    restoreOSC: function() {
        let loading_osc = $$('.onestepcheckout-place-order-loading');
        if (loading_osc.length) {
            $('onestepcheckout-place-order').removeClassName('grey').addClassName('orange');
            $('onestepcheckout-place-order').removeAttribute('disabled');
            loading_osc.invoke('hide');
            already_placing_order = false;
        }
    },
    getOSCSubmitButton: function () {
        return document.getElementById('onestepcheckout-place-order');
    },
    saveBillingAddress: function() {
        return;
        if (this.quoteHasValidAddressData) {
            console.log("saveBillingAddress was already updated, abort.");
            return;
        }
        // if (this.oscBillingAddressSaved) {
        //     console.log("billing address already saved");
        //     return;
        // }
        this.oscBillingAddressSaved = true;
        let billingSelect = document.getElementById('billing-address-select');
        if (billingSelect) {
            billingSelect.dispatchEvent(new Event("change"));
        }
    },
    isOSC: function() {
        return this.getOSCForm() != null;
    },
    getOSCForm: function() {
        return document.getElementById('onestepcheckout-form');
    },
    isOSCPaymentMethodSelected: function(paymentMethodCode) {
        let radioInputs = this.getOSCForm().querySelectorAll("input[type='radio'][name='payment[method]']");
        let isPaymentSelected = false;

        for (let i = 0; i < radioInputs.length; i++) {
            let radioInput = radioInputs[i];

            if (radioInput.checked && radioInput.value === paymentMethodCode) {
                isPaymentSelected = true;
                break;
            }
        }
        return isPaymentSelected;
    },

    getOneStepCheckoutId: function() {
        let possibleIds = [
            {form: "onestepcheckout-form", trigger: "onestepcheckout-place-order"},
            {form: "onepagecheckout_orderform", trigger: ".button.btn-checkout"}
        ];

        for (var i = 0; i < possibleIds.length; i++) {
            var ele = document.getElementById(possibleIds[i].form);

            if ((typeof ele) != "undefined" && ele != null) {
                window._brippoonepageFormId = possibleIds[i].form;

                var trigger = $(possibleIds[i].trigger);
                if ((typeof trigger) == "undefined" || trigger == null) {
                    trigger = $$(possibleIds[i].trigger).first();
                }

                window._brippoonepageTriggerId = trigger;
            }
        }
    },

    setQuoteHasValidAddressData: function() {
        this.quoteHasValidAddressData = true;
    },

    OSCplaceOrder: function() {
        let self = this;

        let form = BrippoExpressCheckout.prototype.getOSCForm();

        if (form._submitori === undefined) {
            form._submitori = document.createElement("form").submit;
        }

        form.submit = () => {
            if (BrippoExpressCheckout.prototype.isOSCPaymentMethodSelected(BrippoExpress.prototype.paymentMethodCode)) {
                window.dispatchEvent(new Event("BrippoExpressPlaceOrder"));
            } else if (BrippoExpressCheckout.prototype.isOSCPaymentMethodSelected(BrippoPaymentElement.prototype.paymentMethodCode)) {
                window.dispatchEvent(new Event("BrippoPaymentElementPlaceOrder"));
            } else {
                form._submitori();
            }
        };
    },
};


window.addEventListener('load', function() {
    new BrippoExpressCheckout();

    setInterval(() => {
        if (!BrippoExpressCheckout.prototype.isOSC()) {
            return;
        }

        let oscForm = BrippoExpressCheckout.prototype.getOSCForm();
        if (oscForm && oscForm._submitori === undefined) {
            BrippoExpressCheckout.prototype.OSCplaceOrder();
        }
    }, 500);

});

LittleDemon - FACEBOOK
[ KELUAR ]