/* Minification failed. Returning unminified contents.
(1,10): run-time error CSS1031: Expected selector, found 'PostBasketItemUpdates('
(1,10): run-time error CSS1025: Expected comma or open brace, found 'PostBasketItemUpdates('
(27,10): run-time error CSS1031: Expected selector, found 'RefreshBasket('
(27,10): run-time error CSS1025: Expected comma or open brace, found 'RefreshBasket('
(50,10): run-time error CSS1031: Expected selector, found 'CheckoutProcessBegin('
(50,10): run-time error CSS1025: Expected comma or open brace, found 'CheckoutProcessBegin('
(54,10): run-time error CSS1031: Expected selector, found 'CheckoutProcessSuccess('
(54,10): run-time error CSS1025: Expected comma or open brace, found 'CheckoutProcessSuccess('
(122,1): run-time error CSS1019: Unexpected token, found '$'
(122,2): run-time error CSS1019: Unexpected token, found '('
(122,11): run-time error CSS1031: Expected selector, found ')'
(122,11): run-time error CSS1025: Expected comma or open brace, found ')'
(248,2): run-time error CSS1019: Unexpected token, found ')'
 */
function PostBasketItemUpdates() {

    var dirtyItems = $(".js-quantity.js-dirty:not(.js-updating)");

    if (dirtyItems.length) {

        $(dirtyItems).addClass("js-updating");

        var postCode = $("#Postcode").val();

        var updatedItems = [];
        $(dirtyItems).each(function () {
            updatedItems.push({
                Id: $(this).data("product-id"),
                Quantity: Math.min(Math.floor($(this).val()), 999)
            });
        });

        $.post("/basket/update", { items: updatedItems, postCode: postCode }, function (data) {
            RefreshBasket(data);
        });

    }

}

function RefreshBasket(data) {

    // Update basket counter in site header
    UpdateBasketTotal();

    // Update Basket Items and Saved for Later Items
    $("#orderDetailsWrapper").html(data);

    // Fade in refreshable items
    $(".js-refreshable").hide().fadeIn("fast");

    // Re-enable checkout buttons
    $(".js-checkout-btn").prop("disabled", false).removeClass("disabled");

    var itemCount = $(".js-product").length;

    if (itemCount == 0) {
        $("#checkoutNoItems").removeClass("d-none");
        $("#checkoutForm").remove();
    }

}

function CheckoutProcessBegin() {

}

function CheckoutProcessSuccess(data) {

    if (data.Valid) {

        var paymentForm = $("<form>");

        // Form Action
        $(paymentForm).attr("action", data.Action);

        // Form Method
        $(paymentForm).attr("method", "post");

        // Test Mode
        if (data.TestMode) {
            $(paymentForm).append("<input type='hidden' name='testMode' value='100'>");
        } else {
            $(paymentForm).append("<input type='hidden' name='testMode' value='0'>");
        }

        // Installation Id
        $(paymentForm).append(`<input type='hidden' name='instId' value='${data.InstallationId}'>`);

        // Cart Id
        $(paymentForm).append(`<input type='hidden' name='cartId' value='${data.CartId}'>`);

        // Amount
        $(paymentForm).append(`<input type='hidden' name='amount' value='${data.Amount}'>`);

        // Currency
        $(paymentForm).append("<input type='hidden' name='currency' value='GBP'>");
        $(paymentForm).append("<input type='hidden' name='hideCurrency' value=''>");

        // Language
        $(paymentForm).append("<input type='hidden' name='lang' value='en-GB'>");
        $(paymentForm).append("<input type='hidden' name='noLanguageMenu' value=''>");

        // Name
        $(paymentForm).append(`<input type='hidden' name='name' value='${data.Name}'>`);

        // Telephone
        $(paymentForm).append(`<input type='hidden' name='tel' value='${data.Telephone}'>`);

        // Email
        $(paymentForm).append(`<input type='hidden' name='email' value='${data.Email}'>`);

        $(paymentForm).append("<input type='hidden' name='transId' value=''>");
        //$(paymentForm).append("<input type='hidden' name='futurePayId' value=''>");
        $(paymentForm).append("<input type='hidden' name='transStatus' value=''>");
        $(paymentForm).append("<input type='hidden' name='transTime' value=''>");
        $(paymentForm).append("<input type='hidden' name='authAmount' value=''>");
        $(paymentForm).append("<input type='hidden' name='authCurrency' value=''>");
        $(paymentForm).append("<input type='hidden' name='authAmountString' value=''>");
        $(paymentForm).append("<input type='hidden' name='rawAuthMessage' value=''>");
        $(paymentForm).append("<input type='hidden' name='rawAuthCode' value=''>");
        $(paymentForm).append("<input type='hidden' name='callbackPW' value=''>");
        $(paymentForm).append("<input type='hidden' name='cardType' value=''>");
        $(paymentForm).append("<input type='hidden' name='countryMatch' value=''>");
        $(paymentForm).append("<input type='hidden' name='AVS' value=''>");

        // Add Payment Form to page
        $("body").append(paymentForm);

        $(paymentForm).submit();

    }

}

$(document).ready(function () {

    var basketUpdateTimeout = function () {

        var that = this,
            timer;

        this.start = function () {
            timer = setTimeout(function () {
                PostBasketItemUpdates();
            }, 500);
        };

        this.reset = function () {
            clearTimeout(timer);
        };

        return that;

    }();

    // Remove item from the basket
    $(document).on("click", ".js-remove-basket-item", function (e) {

        var productId = $(this).data("product-id");
        var postCode = $("#Postcode").val();

        e.preventDefault();

        $.post("/basket/delete", { id: productId, postCode: postCode })
            .done(function (data) {
                if (data) {

                    var productCount = $(".js-product", "#checkoutItems").length;

                    if (productCount == 0) {
                        $("#checkoutForm").addClass("d-none");
                        $("#checkoutNoItems").removeClass("d-none");
                    }

                    // Update Basket totals in header
                    RefreshBasket(data);

                }
            });

    });

    // Update basket automatically as quantities are changed
    $(document).on("input", ".js-quantity", function (e) {

        e.preventDefault();

        var enteredValue = $(this).val();

        if (!isNaN(enteredValue) && enteredValue != "") {

            // Mark Qty box as updated
            $(this).addClass("js-dirty");

            // Disable Checkout buttons
            $(".js-checkout-btn").prop("disabled", true).addClass("disabled");

        } else {
            // Mark Qty box as updated
            $(this).removeClass("js-dirty");
        }

        basketUpdateTimeout.reset();
        basketUpdateTimeout.start();

    });

    // Revert to original value if quantity box is blank
    $(document).on("blur", ".js-quantity", function (e) {

        e.preventDefault();

        var initialValue = $(this).data("initial-value");
        var currentValue = $(this).val();

        if (currentValue == "") {
            $(this).val(initialValue);
        }

    });

    // Delivery Postcode changed
    $(document).on("change", ".js-delivery-postcode", function (e) {

        e.preventDefault();

        var postCode = $(this).val();
        var googleRecaptchaSiteKey = $(this).data("recaptcha-site-key");
        var recaptchaAction = "CheckoutAddressEdit";

        grecaptcha.execute('' + googleRecaptchaSiteKey + '', { action: '' + recaptchaAction + '' }).then(function (token) {

            // Get delivery charge
            $.post("/checkout/calculatedelivery", { postCode: postCode, recaptchaToken: token })
                .done(function (data) {
                    if (data) {

                        // Update Basket totals in header
                        RefreshBasket(data);

                    }
                });

        });

    });

    // Checkout Submit
    $(document).on("submit", "#checkoutForm", function () {

        var button = $(".js-checkout-btn");

        // Disable Button
        $(button).prop("disabled", true);

        // Show Spinner
        $(button).html("<i class='fa-solid fa-circle-notch fa-spin'></i>");

    });

});
