/* Minification failed. Returning unminified contents.
(60,6): run-time error JS1004: Expected ';'
(63,35): run-time error JS1004: Expected ';'
(78,33): run-time error JS1004: Expected ';'
(84,22): run-time error JS1004: Expected ';'
(92,6): run-time error JS1004: Expected ';'
(98,18): run-time error JS1004: Expected ';'
(101,37): run-time error JS1004: Expected ';'
(104,22): run-time error JS1004: Expected ';'
(119,6): run-time error JS1004: Expected ';'
(122,33): run-time error JS1004: Expected ';'
(126,33): run-time error JS1004: Expected ';'
(136,14): run-time error JS1004: Expected ';'
 */
$(document).ready(function () {
    PlusUpsellVisible();
    setupLazyLoadingImages();
    setReferralInfo();
    setupGDPR();
    setupTabs();
    setupReadMoreLess();
    initalizeOverlay();
    setupInsertReviewButton();
    showOneClickPurchaseEnablePopup();
    //log_tracking();
    showCart();
    showArticles();
    setupTitleSubsHidden();

    setupWebPush(false);

    setTimeout(function () {
        $('#consentAllowAllCookies').click(function () {
            $.ajax({
                url: "/ajax.ashx",
                data: { method: "cookiebanneranalytics", clickedon: "AcceptAll", analytics: "true", advertising: "true" },
                contentType: "application/json; charset=utf-8",
            });
        });

        $('#consentRefuseAllCookies').click(function () {
            $.ajax({
                url: "/ajax.ashx",
                data: { method: "cookiebanneranalytics", clickedon: "SetMyPreferences" },
                contentType: "application/json; charset=utf-8",
            });
        });

        $('#chooseSaveSettings').click(function () {
            $.ajax({
                url: "/ajax.ashx",
                data: { method: "cookiebanneranalytics", clickedon: "SaveMyPreference", analytics: $('input:checkbox[value="analytics"]').is(":checked"), advertising: $('input:checkbox[value="advertising"]').is(":checked") },
                contentType: "application/json; charset=utf-8",
            });
        });

        if ($('#consentAllowAllCookies').length > 0) {
            //if (cookie_exists("cookiebanneranalytics") == false) {
            //    create_session_cookie("cookiebanneranalytics", "BannerDisplayed");

            $.ajax({
                url: "/ajax.ashx",
                data: { method: "cookiebanneranalytics", clickedon: "BannerDisplayed" },
                contentType: "application/json; charset=utf-8",
            });
            //}
        }

    }, 800);
});



async function setupWebPush(askForPush) {
    // Check if the browser supports notifications
    try {
        const registration = await navigator.serviceWorker.register("/js/service-worker.js?version=1.6");
        registration.update();

        registration.onupdatefound = () => {
            const newWorker = registration.installing;
            newWorker.onstatechange = () => {
                if (newWorker.state === "installed" && navigator.serviceWorker.controller) {
                    console.log("New service worker available. Refresh to update.");
                }
            };
        };

        console.log("Service Worker registered with scope:", registration.scope);

        if (askForPush === true) {
            const result = await requestNotificationPermission(registration);
            return result;  // Return the value from requestNotificationPermission
        }
        else {
            if (Notification.permission === "granted") {
                // Permission granted; proceed to subscribe
                await subscribeUser(registration);
            }
        }
    } catch (error) {
        console.log("Service Worker registration failed:", error);
    }
}

async function requestNotificationPermission(registration) {

    if ("Notification" in window) {
        // Check if permission is already granted
        if (Notification.permission === "granted") {
            // Permission granted; proceed to subscribe
            await subscribeUser(registration);
        } else if (Notification.permission !== "denied") {
            // Request permission if not denied
            const permission = await Notification.requestPermission();
            if (permission === "granted") {
                // If the user grants permission, proceed to subscribe
                await subscribeUser(registration);
            } else {
                console.log("Notification permission denied.");
            }
        }
        return Notification.permission;
    } else {
        return "denined";
    }

    

}

// Request permission and subscribe to push notifications
async function subscribeUser(registration) {
    try {

        let subscription = await registration.pushManager.getSubscription();

        if (!subscription) {
            // If no subscription exists, create a new one
            subscription = await registration.pushManager.subscribe({
                userVisibleOnly: true,
                applicationServerKey: "BH_7q_ZTeSbh-_bguisydrrTKNlmuolmHyd4S7eTNfCcqpF4bxbxO1rGrdR0j6uhVZAjV8KQltr7BwKzU8avDlI" // Replace with your VAPID public key
            });
            console.log("New subscription created:", subscription);
        } else {
            console.log("Existing subscription found:", subscription);
        }

        // Send subscription details to the server
        await fetch("/ajax.ashx?method=webpushregistration", {
            method: "POST",
            body: JSON.stringify(subscription),
            headers: { "Content-Type": "application/json" }
        });

        console.log("User is subscribed to push notifications.");
    } catch (error) {
        console.error("Failed to subscribe user:", error);
    }
}

function setReferralInfo() {
    
    var strippedUrl = document.location.toString().split("#");
    if (strippedUrl.length > 1) {
        if (strippedUrl[1] != null && strippedUrl[1] != "") {
            $.ajax({
                url: "/ajax.ashx",
                data: { method: "setReferralInfo", anchorvalue: strippedUrl[1] },
                contentType: "application/json; charset=utf-8",
                success: function (msg) {

                }
            });
        }
    }
}

function showArticles()
{
    if ($('#showArticlesDigitalInfo').length > 0) {

        var isepubLive = $('#showArticlesDigitalInfo').attr('isepublive');
        var issueid = $('#showArticlesDigitalInfo').attr('issueid');
            
        //epub isnt live so no need to get articles
        if (isepubLive == "True") {
            $.ajax({
                url: "/ajax.ashx",
                data: {
                    method: "issuearticles", isepublive: isepubLive, IssueId: issueid
                },
                contentType: "application/json; charset=utf-8",
                success: function (msg) {
                    hideLoading();
                    if (msg.Success) {
                        if (msg.Value === undefined || msg.Value.length == 0) {
                            $('.btnArticlesTab').hide();
                        }
                        else {
                            var obj = msg.Value;
                            $.each(obj, function (i, item) {

                                var mainPath = $('#showArticlesDigitalInfo').attr('mainpath');

                                $('#divArticles').append(
                                    '<a class="coldgrey" href="' + mainPath + item.IssueSlugUrl + '/articles/' + item.ArticleTitleSlug + '">' +
                                    '<div class="articleholder">' +
                                    '<span class="tparticleimgholder rad5 shadow5">' +
                                    '<img ' + //src="https://pocketmags.imgix.net/mag_thumb_placeholder.jpg?auto=format&q=20"' +
                                    'src="' + item.path + '?w=210&auto=format"' +
                                    'alt="Issue Cover" class="lazyload tparticleimg"  />' +
                                    '</span>' +
                                    '<span class="articlehtext">' +
                                    item.Title +
                                    '</span>' +
                                    '<span class="articlebtext">' +
                                    item.BodySnippet + '...' +
                                    '</span>' +
                                    '<div class="cb"></div>' +
                                    '</div >' +
                                    '</a>');
                            });
                        }
                    } else {
                        alert("Something went wrong, please try again");
                    }
                }
            });
        } else {
            $('.btnArticlesTab').hide();
            return;
        }

    }
}

function setupTitleSubsHidden() {
    var inputHidden = $('.purchaseOptionsVisibility');

    if (inputHidden.length > 0) { //have to be on right page

        var optionsVisiblity = inputHidden.val().toLowerCase();

        var showMoreSubsLink = $('.showMoreSubsLink');
        var showPurchaseOptions = $('.showPurchaseOptions');
        var hideOptions = $('.hideOptions');

        var sublist = $('.sublist');
        var singleIssue = $('.singleIssue'); //TODO Add to front end

        var hiddingList;
        var showButtons;

        hideOptions.hide();


        var hideSingleIssue = false;

        if (optionsVisiblity == "noaccess") {
            //hide all but the first sub option
            sublist = sublist.slice(2);
            sublist.hide();

            //hide purchase options anchor
            showPurchaseOptions.hide();
            showButtons = showMoreSubsLink;

            //show show more anchor
            showMoreSubsLink.toggle(sublist.length > 0 );

        } else {
            //has some access
            hideSingleIssue = optionsVisiblity == "hidesingleonly" || optionsVisiblity == "hidesingleandsubs";
            singleIssue.toggle(!hideSingleIssue);

            var hideAllSubs = optionsVisiblity == "hidesubs" || optionsVisiblity == "hidesingleandsubs";
            sublist.toggle(!hideAllSubs);

            if (!hideAllSubs) {
                //hide all but the first sub option
                sublist = sublist.slice(2);
                sublist.hide();
            }

            showButtons = showPurchaseOptions;

            //show purchase options anchor
            showPurchaseOptions.show();

            //hide show more anchor
            showMoreSubsLink.hide();
        }

        //Create Button actions to work
        hiddingList = hideSingleIssue ? sublist.add(singleIssue) : sublist;

        //setup anchor actions
        showButtons.on('click', function () {
            showButtons.hide();
            hideOptions.show();
            hiddingList.show();
        });

        hideOptions.on('click', function () {
            showButtons.show()
            hideOptions.hide();
            hiddingList.hide();
        })
    }

}

function RedirectToSearchReadingZone(searchText) {
    window.location = "/readingzone/search/" + searchText.replace(/[^A-Za-z0-9]+/g, "-");
}

function RedirectToSearch(currentSubURL, searchText) { // <%= PocketmagsUtilities.GetCurrentSubURL() %>
    window.location = currentSubURL + "/search/results?term=" + encodeURIComponent(searchText.trim());
}

function RedirectToSearchPlus(currentSubURL, searchText) { // 
    window.location = currentSubURL + "/plussearch/results?term=" + encodeURIComponent(searchText.trim());
}
function RedirectToSearchPlusNew(currentSubURL, searchText) { // 
    window.location = currentSubURL + "/plus/plussearch/results?term=" + encodeURIComponent(searchText.trim());
}

function RedirectToSearchPlusLibrary(currentSubURL, searchText) {
    if (searchText.trim().length < 1) {
        window.location = currentSubURL + "/membersarea/plus/plussearch/results?term=a";
    }
    else {
        window.location = currentSubURL + "/membersarea/plus/plussearch/results?term=" + encodeURIComponent(searchText.trim().replace(/[^A-Za-z0-9]+/g, "-"));
    }
}
function RedirectToSearchPublisher(currentSubURL, hidCurrentClientURL, searchText) {
    window.location = hidCurrentClientURL + "/search/results?term=" + encodeURIComponent(searchText.trim());
}

function archiveIssue(issueId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "archiveissue", IssueId: issueId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.Success) {
                location.reload();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function GiftSetSendByEmail(giftId) {
    //document.getElementById("radio1").classList.add('giftraddotred');
    $("div[GiftId='" + giftId + "']#radio1").addClass('giftraddotred');
    $("div[GiftId='" + giftId + "']#radio2").removeClass('giftraddotred');
    //document.getElementById("radio2").classList.remove('giftraddotred');
    //document.getElementById("emailform").style.display = "block";
    $("div[GiftId='" + giftId + "']#emailform").show();
    $("div[GiftId='" + giftId + "']#printform").hide();
    //document.getElementById("printform").style.display = "none";
}
function GiftSetPrint(giftId) {
    $("div[GiftId='" + giftId + "']#radio1").removeClass('giftraddotred');
    $("div[GiftId='" + giftId + "']#radio2").addClass('giftraddotred');
    //document.getElementById("radio1").classList.remove('giftraddotred');
    //document.getElementById("radio2").classList.add('giftraddotred');
    $("div[GiftId='" + giftId + "']#emailform").hide();
    $("div[GiftId='" + giftId + "']#printform").show();
    //document.getElementById("emailform").style.display = "none";
    //document.getElementById("printform").style.display = "block";
}
function PrintGift(giftId) {

    var receiver = $("input[GiftId='" + giftId + "'].giftTo").val()
    if (receiver == undefined || receiver == '') receiver = "gift recipient";

    var from = $("input[GiftId='" + giftId + "'].giftFrom").val()
    if (from == undefined || from == '') from = "Someone";

    create_cookie('gift_receiver', receiver);
    create_cookie('gift_from', from);

    var url = '/membersarea/printgift/' + giftId;

    window.open(url, '_blank');
}

function unArchiveIssue(issueId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "unarchiveissue", IssueId: issueId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.Success) {
                location.reload();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function readIssue(issueId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "readissue", IssueId: issueId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.Success) {
                location.reload();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function unReadIssue(issueId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "unreadissue", IssueId: issueId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.Success) {
                location.reload();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function archiveTitle(titleId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "archivetitle", TitleId: titleId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.Success) {
                location.reload();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function unArchiveTitle(issueId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "unarchivetitle", TitleId: titleId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.Success) {
                location.reload();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function readTitle(issueId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "readtitle", TitleId: titleId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.Success) {
                location.reload();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function unReadTitle(issueId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "unreadtitle", TitleId: titleId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.Success) {
                location.reload();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function openGiftActivationPopup(popupToOpen, productDescription) {
    $(".GiftProductDescription").text(productDescription);
    document.location = document.location.origin + document.location.pathname + '#' + popupToOpen;
}



function CleanCartAndAddToCart(productId, productTypeId, offerHiddenId, offerLinkId) {
    showLoading('Adding...');
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "CleanCartAndAddToCart", ProductId: productId, ProductTypeId: productTypeId, OfferHiddenId: offerHiddenId, OfferLinkId: offerLinkId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                reloadPageWithAddToCart();
            } else {
                hideLoading();
                alert(msg.message);
            }
        }
    });
}

function PlusUpsellVisible() {

    $.ajax({
        url: "/ajax.ashx",
        data: { method: "PlusUpsellVisible" },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.IsVisible) {
                $('#PlusLabel1').text(msg.PlusLabel1);
                $('#PlusLabel2').text(msg.PlusLabel2);
                $('#plusUpsellCart').show();
            }
            else {
                $('#plusUpsellCart').hide();
            }
        }
    });
}


function AddToCartWithPromo(productId, productTypeId, offerHiddenId, offerLinkId, promoCode, redirectTo) {
    showLoading('Adding...');
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "AddToCartWithPromo", ProductId: productId, ProductTypeId: productTypeId, OfferHiddenId: offerHiddenId, OfferLinkId: offerLinkId, PromoCode: promoCode },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                if (redirectTo != undefined && redirectTo != null && redirectTo != '') {
                    window.location = redirectTo;
                }
                else {
                    reloadPageWithAddToCart();
                }
            } else {
                hideLoading();
                alert(msg.message);
            }
        }
    });
}


function AddToCart(productId, productTypeId, offerHiddenId, offerLinkId) {
    showLoading('Adding...');
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "AddToCart", ProductId: productId, ProductTypeId: productTypeId, OfferHiddenId: offerHiddenId, OfferLinkId: offerLinkId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                reloadPageWithAddToCart();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function AddToCartGift(productId, productTypeId, offerHiddenId, offerLinkId) {
    showLoading('Adding...');
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "AddToCartGift", ProductId: productId, ProductTypeId: productTypeId, OfferHiddenId: offerHiddenId, OfferLinkId: offerLinkId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                reloadPageWithAddToCart();
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function CheckoutClick(redirectTo) {
    showLoading();
    var funnelType = GetFunnelType();
    if (redirectTo != undefined && redirectTo != null && redirectTo != '') {
        hideLoading();
        window.location = redirectTo;
    }
    else {
        hideLoading();
        window.location = redirectTo;
    }
}

function GetFunnelType() {
    if (has_cookie("funneltype")) {
        var value = get_cookie("funneltype");
        return "2";
    }
    else {
        return "2";
    }
}

function setAsGift(itemId, theCheckbox, updatePopupDom) {
    showLoading('Loading...');

    var isChecked = $(theCheckbox).is(':checked');

    $.ajax({
        url: "/ajax.ashx",
        data: { method: "SetCartItemGiftFlag", cartItemId: itemId, Checked: isChecked, updatePopupDomElement: updatePopupDom },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.UpdatePopupDom) {
                reloadPageWithAddToCart();
            }
        },
        error: function (msg) {
            hideLoading();
        }
    });
}

function removeItemFromCart(itemId, updatePopupDom) {
    showLoading('Removing...');
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "RemoveFromCart", cartItemId: itemId, updatePopupDomElement: updatePopupDom },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.updatePopupDom) {
                $('.trCartRow_' + msg.cartItemId).remove();
                if (msg.totalItem === 0) {
                    //hide div and show div
                    $('.lblPopupCartTotalItems').each(function () {
                        $(this).text('0 items');
                    });
                    $('.liCartEmpty').each(function () {
                        $(this).show();
                    });
                    $('.divCartFull').each(function () {
                        $(this).hide();
                    });
                }
                else {
                    $('.lblPopupCartTotalAmount').each(function () {
                        $(this).text(msg.totalAmount);
                    });
                    $('.lblPopupCartTotalDiscount').each(function () {
                        $(this).text(msg.totalDiscount);
                    });
                    $('.lblPopupCartTotalPrice').each(function () {
                        $(this).text(msg.totalPrice);
                    });
                    $('.lblPopupCartTotalPoints').each(function () {
                        $(this).text(msg.totalPoint);
                    });
                    var lblItem = msg.totalItem.toString() + ' items';
                    if (msg.totalItem === 1)
                        lblItem = '1 item';
                    $('.lblPopupCartTotalItems').each(function () {
                        $(this).text(lblItem);
                    });
                }
            }
            updateCartHeaders(msg.totalItem, msg.totalAmount);
            PlusUpsellVisible();
        }
    });
}

function updateCartHeaders(totalItem, totalAmount) {
    $('.cartTotal_Header').each(function () {
        $(this).text(totalAmount);
    });
    $('.cartItems_Header').each(function () {
        $(this).text(totalItem);
    });
}

function setupReadMoreLess() {
    //new read more/less options with line clipping


    //inital setup
    setupMoreLess();

    $(window).resize(function () {
        setupMoreLess();
    });

    //handle the more/less buttons
    $(document).on('click', '.morelinky, .lesslinky', function () {
        var parent = $(this).closest('.moreLessClipping');
        var lineClip = parent.find('.lineclip');//add class - readAll

        var currentlyShowingAll = lineClip.hasClass("readAll");

        if (currentlyShowingAll) {
            lineClip.removeClass("readAll");
            parent.find('.morelinky').show();
            parent.find('.lesslinky').hide();
        } else {
            lineClip.addClass("readAll");
            parent.find('.morelinky').hide();
            parent.find('.lesslinky').show();
        }
    });

}

function setupMoreLess() {
    $(".moreLessClipping").each(function () {
        var lineClip = $(this).find('.lineclip');
        lineClip.removeClass("readAll");

        //check heights
        var isUsingClipping = lineClip[0].scrollHeight > lineClip[0].clientHeight

        $(this).find('.morelinky').toggle(isUsingClipping);
        $(this).find('.lesslinky').toggle(false);
    })
}

function freeIssueCheckUserDialog() {
    document.location = document.location.origin + document.location.pathname + '#freeIssueCheckUserDialog';
}

function setupGDPR() {

    CheckHiddenField();
    ToggleErrorVisibility(false);
    $("#chbTermsOptIn").click(function (e) {
        if (this.checked && $("#btnSave").is(':disabled')) {
            $("#btnSave").prop('disabled', false);
        }
        else {
            $("#btnSave").prop('disabled', true);
        }
    });
}

function CheckHiddenField() {
    var a = $("#gdprTcsAndCsHiddenField").val();
    if (a === "active") {
        console.log("opening dialog");
        document.location = document.location + '#gdprTcsAndCsDialog';
    }
}

function AgreeToTsAndCs() {
    var marketingPref = $('#chbMarketing').is(':checked');
    if ($('#tnctextarea').is(":visible") && $('#gdprMarketingTextArea').is(":visible")) {
        if ($('#chbTermsOptIn').is(':checked')) {
            $.ajax({
                url: "/ajax.ashx",
                data: { method: "AgreeToTsAndCs", tncPrefEvent: true, marketingPrefEvent: true, marketingPreference: marketingPref },
                contentType: "application/json; charset=utf-8",
                success: function (msg) {
                    $("#gdprTcsAndCsHiddenField").val('');
                    document.location = document.location.origin + document.location.pathname;
                }
            });
        }
        else {
            ToggleErrorVisibility(true);
            return;
        }
    }
    else if ($('#tnctextarea').is(":visible") && $('#gdprMarketingTextArea').not(":visible")) {
        if ($('#chbTermsOptIn').is(':checked')) {
            $.ajax({
                url: "/ajax.ashx",
                data: { method: "AgreeToTsAndCs", tncPrefEvent: true, marketingPrefEvent: false },
                contentType: "application/json; charset=utf-8",
                success: function (msg) {
                    document.location = document.location.origin + document.location.pathname;
                }
            });
        }
        else {
            ToggleErrorVisibility(true);
            return;
        }
    }
    else {
        $.ajax({
            url: "/ajax.ashx",
            data: { method: "AgreeToTsAndCs", tncPrefEvent: false, marketingPrefEvent: true, marketingPreference: marketingPref },
            contentType: "application/json; charset=utf-8",
            success: function (msg) {
                document.location = document.location.origin + document.location.pathname;
            }
        });
    }

}

function ToggleErrorVisibility(visible) {
    if (!visible) {
        $('#errorMessage').hide();
    }
    else {
        $('#errorMessage').show();
    }
}



function setupLazyLoadingImages() {


    // Get all of the images that are marked up to lazy load
    var images = document.querySelectorAll('.lazyload');

    var config = {
        // If the image gets within 50px in the Y axis, start the download.
        rootMargin: '50px 0px',
        threshold: 0.01
    };


    // If we don't have support for intersection observer, load the images immediately
    if (!('IntersectionObserver' in window)) {

        for (var i = 0; i < images.length; i++) {
            preloadImage(images[i]);
        }

    } else {
        // It is supported, load the images
        observer = new IntersectionObserver(onIntersection, config);
        images.forEach(function (image) {
            observer.observe(image);
        });
    }
}

function preloadImage(target) {
    target.src = target.getAttribute('data-src');

    var srcset = target.getAttribute('data-srcset');
    if (srcset !== null)
        target.setAttribute("srcset", target.getAttribute('data-srcset'));
}

function onIntersection(entries) {
    // Loop through the entries
    for (var i = 0; i < entries.length; i++) {
        var entry = entries[i];
        // Are we in viewport?
        if (entry.intersectionRatio > 0) {

            // Stop watching and load the image
            observer.unobserve(entry.target);
            preloadImage(entry.target);
        }
    }
}

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

function setupTabs() {
    $('.tab_button').on('click', function () {
        callTabClick($(this));
    });

    //set the correct active controller
    $('.tab_control').each(function () {
        callTabClick($(this).find('.tab_button.active'));
    });

    //print, digital, printdigital version choice
    $('.version_section').on('click', function () {
        callVersionTabClick($(this));
    });

    $('.version_picker').on('change', function () {
        SetVersionVisibility($(this).val());
    });

    //set the correct active controller
    callVersionTabClick($('.version_section.active'));

    isGift();
}

function isGift() {
    //If passing values via querystring!
    var isGift = getParameterByName("isGift");
    if (isGift != null && isGift.toLowerCase() == "true")
        callTabClick($('input[data-button-trigger=IsGift'))
}

function callTabClick(btn) {
    var tabcontrol = btn.closest('.tab_control');
    tabcontrol.find('.tab_button').removeClass('active');
    tabcontrol.find('.tabunderline').removeClass('activetxt');

    tabcontrol.find('.tab_content').hide(); //hide all sections

    btn.addClass('active'); //active button set
    btn.addClass('active').find('span').addClass('activetxt'); //active button set

    var type = btn.attr('data-button-trigger');
    tabcontrol.find('.tab_content[data-button-content=' + type + ']').show();
}


function callVersionTabClick(btn) {
    $('.version_section').removeClass('active');
    btn.addClass('active');

    SetVersionVisibility(btn.attr('data-version-href'));
}

function SetVersionVisibility(type) {
    $('.type_section').hide();
    $('.type_section[data-version=' + type + ']').show();
}

function showShoppingCartOverlay() {
    $('.shoppingCartOverlay').show().find('.box').show();
}

function CartHoverShow() {
    var cart = $('#topmenu ul li ul.sublist.cartsizer');

    cart.css('visibility', 'visible').css('opacity', 1).delay(2500).fadeOut(500, function () {
        cart.css('visibility', '').css('opacity', '').css('display', '');
    });
}

var showCartPopupCookieName = "showPopupCartNew1";

function showCart() {
    if (has_cookie(showCartPopupCookieName)) {
        var value = get_cookie(showCartPopupCookieName);
        if (value === "yes") {
            //CartHoverShow();
            document.location = document.location.origin + document.location.pathname + document.location.search + "#divCartPopup";
            document.body.style.overflow = "hidden";
            delete_cookie(showCartPopupCookieName);
        }
    }
}



function addMinutes(date, minutes) {
    return new Date(date.getTime() + minutes * 60000);
}

function showLoading(message, notes) {
    hideLoading();

    if (message == null) { message = "Loading..." }

    var overlay = $('<div>').addClass('loading');

    var divLoading = $('<div>')
    var spanMessage = $('<span>');
    var loadingGif = $('<div>');
    var spanDetailsMessage = $('<span class="small">');

    //set attributes
    loadingGif.html("<?xml version='1.0' encoding='utf-8'?><svg width='100%' height='125px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='xMidYMid' class='uil-ring-alt'><rect x='0' y='0' width='100' height='100' fill='none' class='bk'></rect><circle cx='50' cy='50' r='40' stroke='rgba(255,255,255,0)' fill='none' stroke-width='10' stroke-linecap='round'></circle><circle cx='50' cy='50' r='40' stroke='#fd510f' fill='none' stroke-width='6' stroke-linecap='round'><animate attributeName='stroke-dashoffset' dur='2.5s' repeatCount='indefinite' from='0' to='502'></animate><animate attributeName='stroke-dasharray' dur='2.5s' repeatCount='indefinite' values='150.6 100.4;1 250;150.6 100.4'></animate></circle></svg>");
    spanMessage.html(message);
    spanDetailsMessage.html(notes);

    //build structure
    divLoading.append(loadingGif);
    divLoading.append(spanMessage);
    divLoading.append(spanDetailsMessage);

    //put loading message on div and overlay onto page
    overlay.append(divLoading);
    $('body').append(overlay);

    escOnKeyPresshideLoading();

    console.log('start');
    setTimeout(function () {
        console.log('done');
    }, 1000);
}

function escOnKeyPresshideLoading() {
    ////ensure if user hits esc they can exit it!
    //$(document).one('keyup', function (e) {
    //    if (e.keyCode == 27) {
    //        hideLoading();
    //    } else {
    //        escOnKeyPresshideLoading();
    //    }
    //});
}

function hideLoading() {
    $('.loading').remove();
}

function mobileNavCategoryClick() {
    $('#mobilenavcategorylinks').show();
    $('#mobilenavtoplinks, #mobilenavbottomlinks').hide();
    return false;
}

function mobileNavCategoryBackClick() {
    $('#mobilenavcategorylinks').hide();
    $('#mobilenavtoplinks, #mobilenavbottomlinks').show();
    return false;
}

//Reviews

function viewReview(scroll) {
    $('.divReviews, .btnWriteAReview').show();
    $('.divPostReviews, .btnViewReviews').hide();

    if (scroll) {
        $('html, body').animate({
            scrollTop: $("#reviewHeader").offset().top - $('.sb-slide').outerHeight(true)
        }, 1000);
    }
    return false;
}

function placeReview(scroll) {
    $('.divReviews, .btnWriteAReview').hide();
    $('.divPostReviews, .btnViewReviews').show();

    if (scroll) {
        $('html, body').animate({
            scrollTop: $("#reviewHeader").offset().top - $('.sb-slide').outerHeight(true)
        }, 1000);
    }
    return false;
}

function log_tracking() {



    if (
        (document.domain.toLowerCase().indexOf("pocketmags.com") > -1)
        || (document.domain.toLowerCase().indexOf("pmv7.magserverfour.co.uk") > -1)
        || true) {


        if (cookie_exists('pm_tracking_userLoggedStatus')) {
            //alert('userLoggedStatus = ' + get_cookie('pm_tracking_userLoggedStatus'));
            dataLayer.push({ 'userLoggedStatus': get_cookie('pm_tracking_userLoggedStatus') });
        }
        else {
            // alert('userLoggedStatus = ' + '');
            dataLayer.push({ 'userLoggedStatus': '' });
        }

        if (cookie_exists('pm_tracking_event')) {

            //alert('event = ' + get_cookie('pm_tracking_event'));

            if (cookie_exists('pm_tracking_reviewMagName')) {

                dataLayer.push({ 'reviewMagName': get_cookie('pm_tracking_reviewMagName') });
                delete_cookie('pm_tracking_reviewMagName');
            }

            dataLayer.push({ 'event': get_cookie('pm_tracking_event') });
            delete_cookie('pm_tracking_event');
        }
    }

}

//dialog models
function initalizeOverlay() {

    $('.overlay').each(function () {
        var dataMove = $(this).attr('data-move');
        var toMove = false;
        if (dataMove != undefined)
            toMove = dataMove.toLowerCase() == "true";

        var dataClose = $(this).attr('data-has-close');
        var hasClose = false;
        if (dataClose != undefined)
            hasClose = dataClose.toLowerCase() == "true";

        var blockUI = $(this).prepend(hasClose ? '<span class="close" title="Close / Cancel">x</span>' : '')
            .wrap('<div class="blockUI">')
            .closest('.blockUI')
            .hide();

        if (toMove) {
            blockUI.prependTo('body');
        }
    });


    $('.overlay').show();

    $(document).on('click', '.overlay .close', function () {
        closeOverlayParent(this);
    });

    escOnKeyPress();
}

function openOverlay(id) {
    hideLoading();
    positionOverlay(id, false);
    $('#' + id).show().closest('.blockUI').slideDown(250);

    //$(document).one('keyup', function (e) {
    //    if (e.keyCode == 27) {
    //        closeOverlay(id);
    //    } else {
    //        escOnKeyPresshideLoading();
    //    }
    //});

}

function positionOverlay(id, KeepVisible) {
    var PopOverlay = $('#' + id);

    //remove class to ensure its full size before deciding how to handled it
    PopOverlay.find('.overlayContent').removeClass('maxHeightDiv');

    var overlayHeight = getCurrentOverlayHeight(id, KeepVisible);
    var windowHeight = $(window).height();
    var minPadding = 30;

    if (overlayHeight > (windowHeight - minPadding))
        PopOverlay.find('.overlayContent').addClass('maxHeightDiv');

    //update height
    overlayHeight = getCurrentOverlayHeight(id, KeepVisible);
    setOverlayTopPosition(PopOverlay, overlayHeight, windowHeight);
}

function updateOverlayPosition(id) {
    positionOverlay(id, true);
}

function setOverlayTopPosition(PopOverlay, overlayHeight, windowHeight) {

    //work out % free
    var PercentageFree = (1 - (overlayHeight / windowHeight)) * 100;
    var PercentageFromTop = PercentageFree / 2;

    PopOverlay.css('top', PercentageFromTop + '%');
}

function closeOverlay(id) {
    $('#' + id).closest('.blockUI').fadeOut(250);
    resetCart();
}
function closeOverlayParent(btn) {
    $(btn).closest('.blockUI').fadeOut(250);
    resetCart();
}

function closeAllOverlays() {
    $('.blockUI:visible .overlay').closest('.blockUI').hide();
    resetCart();
}

function resetCart() {
    //payment/pay-now
    if (location.pathname === "/payment/pay-now") {
        var isOverlayForCartShowing = $('#overPaypal').is(':visible');

        if (isOverlayForCartShowing) {
            var txtOrder = $('#txtOrderId');
            if (txtOrder.length > 0) {
                var orderId = txtOrder.html();

                repopulatecart(orderId, true);
            }
        }

    }
}

function SendCSEmail(sendFrom, sendSubject, sendBody, attachChat, chatSessionGuid) {
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "sendcustomerserviceemail", sendFrom: sendFrom, sendSubject: sendSubject, sendBody: sendBody, attachChat: attachChat, chatSessionGuid: chatSessionGuid },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                $('.chatticketholder').hide();
                $('.chatticketholdersent').show();
            } else {
                    $('.chatticketholder').hide();
                $('.chatticketholdererror').show();
                }
        },
        complete: function () {
         
        }
    });
}

function customerServiceChat(chatDiv, chatSessionGuid, chatUserMessage, languageCode, chatPageUrl) {
    
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "customerservicechat", chatsessionguid: chatSessionGuid, chatUserMessage: chatUserMessage, chatPageUrl: chatPageUrl },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {

            $('.temp-box').remove();

            var forceSupport = 0;

            if (msg.ChatResponse.toLowerCase().indexOf('the requested information is not available') > -1
                || msg.ChatResponse.toLowerCase().indexOf('non è disponibile nei dati recuperati') > -1
                || msg.ChatResponse.toLowerCase().indexOf('est pas disponible dans les données récupérées') > -1
                || msg.ChatResponse.toLowerCase().indexOf('sind in den abgerufenen daten nicht verf') > -1
                || msg.ChatResponse.toLowerCase().indexOf('no está disponible en los datos recuperados') > -1
                || msg.ChatResponse.toLowerCase().indexOf('não está disponível nos dados recuperados') > -1
                || msg.ChatResponse.toLowerCase().indexOf('niet beschikbaar in de opgehaalde gegevens') > -1            ) {
                forceSupport = 1;

                msg.ChatResponse = "I’m sorry, I’m having trouble answering this question. Please try another question, or choose Contact Support below to email the team.";
                if (languageCode.toLowerCase() == "de") {
                    msg.ChatResponse = "Es tut mir leid, ich habe Probleme, diese Frage zu beantworten. Bitte versuchen Sie es mit einer anderen Frage, oder wählen Sie unten Support kontaktieren, um eine E-Mail an das Team zu senden.";
                }
                if (languageCode.toLowerCase() == "es") {
                    msg.ChatResponse = "Lo siento, tengo problemas para responder a esta pregunta. Por favor, inténtelo con otra pregunta, o seleccione Contactar con Soporte abajo para enviar un correo electrónico al equipo.";
                }
                if (languageCode.toLowerCase() == "fr") {
                    msg.ChatResponse = "Je suis désolé, je n'arrive pas à répondre à cette question. Veuillez essayer une autre question, ou choisissez Contacter le support ci-dessous pour envoyer un courriel à l'équipe.";
                }
                if (languageCode.toLowerCase() == "it") {
                    msg.ChatResponse = "Mi dispiace, ma non riesco a rispondere a questa domanda. Provi a porre un'altra domanda o scelga di contattare l'assistenza per inviare un'e-mail al team.";
                }
                if (languageCode.toLowerCase() == "nl") {
                    msg.ChatResponse = "Het spijt me, ik heb problemen met het beantwoorden van deze vraag. Probeer een andere vraag of kies hieronder Contact opnemen om een e-mail te sturen naar het team.";
                }
                if (languageCode.toLowerCase() == "pt") {
                    msg.ChatResponse = "Lamento, mas não estou a conseguir responder a esta pergunta. Tente outra pergunta ou selecione Contactar o suporte abaixo para enviar uma mensagem à equipa.";
                }

            }
            
            chatDiv.append('<div class="chatAssistant">' + convert_text_to_HTML(msg.ChatResponse) + '</div>');

            replyCount++;

            

            if ((replyCount >= 2 && msg.ChatResponse.length > 180) || forceSupport == 1) {

                var txt1 = "Need additional support via email?";
                var txt4 = "Contact Support";

                if (languageCode.toLowerCase() == "de") {
                    txt1 = "Benötigen Sie zusätzliche Unterstützung per E-Mail?"; 
                    txt4 = "Kontakt zum Support";
                                    }
                if (languageCode.toLowerCase() == "es") {
                    txt1 = "¿Necesita más ayuda por correo electrónico?";
                    txt4 = "Contacto";
                }
                if (languageCode.toLowerCase() == "fr") {
                    txt1 = "Besoin d'une aide supplémentaire par courrier électronique ?";
                    txt4 = "Contactez nous";
                }
                if (languageCode.toLowerCase() == "it") {
                    txt1 = "Avete bisogno di ulteriore supporto via e-mail?";
                    txt4 = "Contattaci";
                }
                if (languageCode.toLowerCase() == "nl") {

                    txt1 = "Extra ondersteuning nodig via e-mail?";
                    txt4 = "Contact Ondersteuning";
                }
                if (languageCode.toLowerCase() == "pt") {
                    txt1 = "Precisa de apoio adicional por correio eletrónico?";
                    txt4 = "Contactar-nos";
                }

                if (replyCount >= 30 || forceSupport == 1) {

                    var feedbackHtml = `
                    <div class="feedback-container">
                        <div class="feedback-options">
                            <div class="feedback-button open-ticket" onclick="ChatopenTicket();">` + txt4 + `</div>
                        </div>
                    </div>
                `;
                    chatDiv.append(feedbackHtml);
                }
                else {
                    var feedbackHtml = `
                    <div class="feedback-container">
                        <div class="feedback-question">` + txt1 + `</div>
                        <div class="feedback-options">
                            <div class="feedback-button open-ticket" onclick="ChatopenTicket();">` + txt4 + `</div>
                        </div>
                    </div>
                `;
                    chatDiv.append(feedbackHtml);
                }
            }

            setTimeout(resetButton, 100);

            scrollToBottom(chatDiv);
        },
        complete: function () {
            // Hide loading indicator and remove shimmer effect
            $('.loading-indicator').hide();
            $('.temp-box').remove(); // Remove the temporary box once response is received
        }
    });
}


function convert_text_to_HTML(txt) {
    // Output variable
    let out = '';
    // Split text at the newline character into an array
    const txt_array = txt.split("\n");
    // Get the number of lines in the array
    const txt_array_length = txt_array.length;
    // Variable to keep track of the (non-blank) line number
    let non_blank_line_count = 0;

    for (let i = 0; i < txt_array_length; i++) {
        // Get the current line
        const line = txt_array[i];
        // Continue if a line contains no text characters
        if (line === '') {
            continue;
        }

        //non_blank_line_count++;
        //// If a line is the first line that contains text
        //if (non_blank_line_count === 1) {
        //    // ...wrap the line of text in a Heading 1 tag
        //    out += `<h1>${line}</h1>`;
        //    // ...otherwise, wrap the line of text in a Paragraph tag.
        //} else {
            out += `<p>${line}</p>`;
        //}
    }

    return out;
}



function repopulatecart(orderId, reload) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "repopulatecart", orderid: orderId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (!msg.success) {
                console.log("Reloading the cart has failed");
                location.href = msg.failureURL;
            }
            else {
                if (reload)
                    location.reload();
            }
        }
    });
}

function getCurrentOverlayHeight(overlayId, KeepVisible) {
    var PopOverlay = $('#' + overlayId);
    var blockUI = PopOverlay.closest('.blockUI');

    blockUI.show();
    var overlayHeight = PopOverlay.outerHeight();
    if (!KeepVisible) { blockUI.hide(); }
    return overlayHeight;
}

function escOnKeyPress() {
    //ensure if user hits esc they can exit it!
    $(document).on('keyup', function (e) {
        if (e.keyCode == 27) {
            hideLoading();
            closeOverlayParent($('.blockUI:visible:last .overlay').find('.close')[0]);
        }
    });
}

function informationAlert(title, message, btnText) {
    if (btnText == null) btnText = "OK";
    if (title == null) title = "Message";
    if (message == null) message = "";

    div = $('<div class="overlay confirm">' +
        '<h1>' + title + '</h1>' +
        '<p>' + message + '</p>' +
        '<div class="btnBar">' +
        '<input class="primarybutton" type="button" value="' + btnText + '" onclick="closeOverlayParent(this);" />' +
        '</div>' +
        '</div>');

    openBuildWindow(div)
}

function confirmAlert(title, message, btnText, successAction, cancelText) {
    if (cancelText == null) cancelText = "Cancel";
    if (btnText == null) btnText = "Continue";
    if (title == null) title = "Confirm Action";
    if (message == null) message = "Are you sure you wish to continue?";

    div = $('<div class="overlay confirm">' +
        '<h1>' + title + '</h1>' +
        '<p>' + message + '</p>' +
        '<div class="btnBar">' +
        '<input class="primarybutton" type="button" value="' + btnText + '" onclick="closeOverlayParent(this);' + successAction + '" />' +
        '&nbsp;<a href="javascript:;" onclick="closeOverlayParent(this)">' + cancelText + '</a>' +
        '</div>' +
        '</div>')
        ;
    //wrap in BlockUI

    openBuildWindow(div);
    return false;
}

function openBuildWindow(alert) {

    div.prepend('<span class="close" title="Close"><i class="fa fa-times"></i></span>').wrap('<div class="blockUI">');

    var blockUI = alert.closest('.blockUI');
    blockUI.hide().find('.overlay').show();

    //add to page and slide into view
    $('body').append(blockUI);

    blockUI.fadeIn(250);
}


(function () {

    $.fn.popbox = function (options) {
        var settings = $.extend({
            selector: this.selector,
            open: '.open',
            box: '.box',
            arrow: '.arrow',
            arrow_border: '.arrow-border',
            close: '.close'
        }, options);

        var methods = {
            open: function (event) {
                event.preventDefault();

                var pop = $(this);
                var box = $(this).parent().find(settings['box']);

                box.find(settings['arrow']).css({ 'left': box.width() / 2 - 10 });
                box.find(settings['arrow_border']).css({ 'left': box.width() / 2 - 10 });

                if (box.css('display') == 'block') {
                    methods.close();
                } else {
                    box.css({ 'display': 'block', 'z-index': 50, 'top': 10, 'left': ((pop.parent().width() / 2) - box.width() / 2) });
                }

                var closebtn = settings['close'];

                setTimeout("$('" + closebtn + "').click();", 7000);

            },

            close: function () {
                $(settings['box']).fadeOut("fast");
            }
        };

        $(document).bind('keyup', function (event) {
            if (event.keyCode == 27) {
                methods.close();
            }
        });

        $(document).bind('click', function (event) {
            if (!$(event.target).closest(settings['selector']).length) {
                methods.close();
            }
        });

        return this.each(function () {
            $(this).css({ 'width': $(settings['box']).width() }); // Width needs to be set otherwise popbox will not move when window resized.
            $(settings['open'], this).bind('click', methods.open);
            $(settings['open'], this).parent().find(settings['close']).bind('click', function (event) {
                event.preventDefault();
                methods.close();
            });
        });
    }

}).call(this);


function setupInsertReviewButton() {
    //used on digitalInfo.ascx control
    // Add the page method call as an onclick handler for the div.
    $(document).on('click', "#InsertReviewButton", function (e) {
        e.preventDefault();

        var sUserId = $("#UserIdLabel").text();
        var sTitleId = $("#TitleIdLabel").text();
        var sComment = $("#txtInsertComment").val();
        var sReviewtitleTextBox = $("#reviewtitleTextBox").val();
        var sRating = $("#RadioButtonList1 :checked").val();

        $("#divValComment, #divValRevTitle").hide();

        if (sComment.trim() == "" || sReviewtitleTextBox.trim() == "") {
            if (sComment.trim() == "") {
                $("#divValComment").show();
            }
            if (sReviewtitleTextBox.trim() == "") {
                $("#divValRevTitle").show();
            }
            return false;
        }
        var url = window.location + "/SaveReview";
        $.ajax({
            url: "/ajax.ashx",
            data: { method: "SaveReview", titleid: sTitleId, userId: sUserId, rating: sRating, comment: sComment, reviewtitle: sReviewtitleTextBox },
            contentType: "application/json; charset=utf-8",
            success: function (msg) {

                if (msg.Success) {
                    $("#ReviewThanks").show();
                    $("#ReviewBox, #divNoReviews, #btnWriteAReviewBadge, #ProductReviews, #btnViewReviewBadge").hide();
                }
            }
        });
    });
}

function LoadUserAlsoBought(listOfTitleIds, displayCount) {
    var ulUserAlsoBought = $("#ulUserAlsoBought").empty();

    if (listOfTitleIds.length > 0) {
        $.ajax({
            url: "/ajax.ashx",
            data: { method: "GetUserAlsoBought", ListTitleId: listOfTitleIds, TopNumber: displayCount },
            contentType: "application/json; charset=utf-8",
            success: function (msg) {

                if (msg.Success) {


                    if (msg.Data.length > 0) {
                        for (var i = 0; i < msg.Data.length; i++) {
                            var r = msg.Data[i];

                            console.log(r);
                            //AnnualSubscriptionId
                            //CoverURL
                            //LatestIssueId
                            //TitleId
                            //TitleName
                            //TitleSlugUrl

                            var price = r.CurrencySymbol + r.Subscription;
                            var percentage = r.Save + "%";

                            var offerlinkid = null;

                            if (r.Offer_Subscription != null && r.ShowInTitlePage) {
                                price = r.CurrencySymbol + r.Offer_Subscription;
                                percentage = r.OfferSave + "%";
                                offerlinkid = r.OfferLinkId;
                            }

                            var spanPercentage = $('<span>').prop('style', 'font-weight: 700; color: red;').text(percentage);
                            var spanPrice = $('<span>').prop('style', 'font-weight: 700;').text(price);
                            var productId = r.AnnualSubscriptionId;
                            var productTypeId = 2; //digital subscription

                            var anchorTitle = $('<a class="head">').prop('href', "/" + r.TitleSlugUrl).text(r.TitleName);
                            var imgCover = $('<img>').prop('src', r.CoverURL).prop('style', 'float:right; width:30%;').prop('alt', r.TitleName);
                            var spanDesc = $('<span class="desc">').append("Annual Digital Subscription for ").append(spanPrice).append(" saving ").append(spanPercentage);

                            var anchorView = $('<a>').prop('href', "/" + r.TitleSlugUrl).text("View");
                            var anchorAddToCart = $('<a>').prop('href', "javascript:;").attr('onclick', 'AddToCart(' + productId + ',' + productTypeId + ',null, ' + offerlinkid + ')').text("Add to Cart");
                            var spanActions = $('<span>').addClass('lowerproductcontrol').append(anchorView).append(" | ").append(anchorAddToCart);

                            var container = $('<li>').append(imgCover).append(anchorTitle).append(spanDesc).append(spanActions);
                            ulUserAlsoBought.append(container);
                        }
                    } else {
                        var container = $('<li>').text("No Similar Products have been found");
                        ulUserAlsoBought.append(container);
                    }

                }
            }
        });
    } else {
        var container = $('<li>').text("No items in cart to find similar products.");
        ulUserAlsoBought.append(container);
    }

}

function ProcessFreeIssue(productId, productTypeId, offerHiddenId, offerLinkId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "ProcessFreeIssue", ProductId: productId, ProductTypeId: productTypeId, OfferHiddenId: offerHiddenId, OfferLinkId: offerLinkId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                //window.open(msg.returnURL);
                //location.reload();
                window.location.href = "/membersarea/mylibrary#";
            } else {
                hideLoading();
                alert(msg.NotFree);

            }
        }
    });
}

function ResetFreeIssue() {
    $("#trPassword").hide();
    $("#txtEmail").show().removeAttr("disabled");

    $("#aCheckEmail").show();
    $("#aLoginUser").hide();

    $("#divRegister").hide();
    $("#aRegisterUser").hide();
    $("#aForgottenPwd").show();
}

function LoginRegister_ResetForm() {
    showLoading();
    $("#loginRegister_divEmail").show();
    $("#loginRegister_divLogin").hide();
    $("#loginRegister_divRegister").hide();
    hideLoading();
}

function CheckEmail(email, origin) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "CheckEmail", Email: email, Origin: origin },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            hideLoading();
            if (msg.Origin == 'freeissue') {
                if (msg.Success) {
                    if (msg.UserResult == true) {
                        $("#trPassword").show();
                        $("#txtEmail").attr("disabled", "disabled");

                        $("#aCheckEmail").hide();
                        $("#aLoginUser").show();
                    }
                    else {
                        $("#txtEmail").attr("disabled", "disabled");
                        $("#divRegister").show();

                        $("#aRegisterUser").show();
                        $("#aLoginUser").hide();
                        $("#aCheckEmail").hide();
                        $("#aForgottenPwd").hide();
                    }
                }
                else {
                    $("#sErrorMsg").html(msg.ErrorMsg);
                }
            }
            else if (msg.Origin == 'loginregister') {
                $("#loginRegister_ErrorMsg").html('');
                if (msg.Success) {

                    $("#loginRegister_divEmail").hide();

                    if (msg.UserResult == true) {
                        $("#loginRegister_lbl_login_email").html(msg.Email);
                        $("#loginRegister_lbl_success").html(msg.Email);
                        $("#loginRegister_divLogin").show();
                    }
                    else {
                        $("#loginRegister_lbl_register_email").html(msg.Email);
                        $("#loginRegister_lbl_success").html(msg.Email);
                        $("#loginRegister_divRegister").show();
                    }
                }
                else {
                    $("#loginRegister_ErrorMsg").html(msg.ErrorMsg);
                }
            }

        }
    });
}

$('#loginRegister_txtEmail').keypress(function (e) {
    var key = e.which;
    if (key == 13)  // the enter key code
    {
        $('#loginRegister_CheckEmail').click();
        return false;
    }
});

$('#loginRegister_txtPassowrd').keypress(function (e) {
    var key = e.which;
    if (key == 13)  // the enter key code
    {
        $('#loginRegister_SignIn').click();
        return false;
    }
});

function forgottenPassword(email) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "ForgottenPassword", Email: email },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            $('#loginRegister_ForgottenPasswordMsg').show();
            $("#loginRegister_ForgottenPasswordMsg").html(msg.Message);
            $('#loginRegister_ForgottenPassword').hide();
            $("#loginRegister_ErrorMsg").hide();
            hideLoading();
        }
    });
}

function LoginUser(email, password, redirectTo) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "LoginUser", Email: email, Password: password, RedirectTo: redirectTo },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                if (msg.UserResult == true) {
                    if (msg.RedirectTo != undefined && msg.RedirectTo != null && msg.RedirectTo != '') {
                        window.location = msg.RedirectTo;
                    }
                    else {
                        $('.loginRegister_divSucces').show();
                        $('#loginRegister_divLogin').hide();
                        hideLoading();
                    }
                }
                else
                    hideLoading();
            }
            else {
                hideLoading();
                $("#loginRegister_ErrorMsg").html("* Password incorrect.");
                $("#loginRegister_ForgottenPassword").show();
                $('#loginRegister_ForgottenPasswordMsg').hide();
            }
        }
    });
}

function RegisterUser(email, emailConfirm, password, passwordConfirm, marketing, tandc, redirectTo, sendEmail, createdOnArea, thirdPartyPromoSlug) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "RegisterUser", Email: email.trim().toLowerCase(), EmailConfirm: emailConfirm.trim().toLowerCase(), Password: password, PasswordConfirm: passwordConfirm, Marketing: marketing, TandC: tandc, RedirectTo: redirectTo, SendEmail: sendEmail, CreatedOnArea: createdOnArea, ThirdPartyPromoSlug: thirdPartyPromoSlug },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                if (msg.UserResult == true) {
                    if (msg.RedirectTo != undefined && msg.RedirectTo != null && msg.RedirectTo != '') {
                        hideLoading();
                        window.location = msg.RedirectTo;
                    }
                    else {
                        $('.loginRegister_divSucces').show();
                        $('#loginRegister_divRegister').hide();
                        hideLoading();
                    }
                }
                else
                    hideLoading();
            }
            else {
                hideLoading();
                $("#loginRegister_ErrorMsg").html(msg.ErrorMsg);
                //$("#sErrorMsg").html(msg.ErrorMsg);
            }
        }
    });
}

function LoginUserAndProcessFreeIssue(email, password, productId, productTypeId, offerHiddenId, offerLinkId) {
    showLoading();
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "LoginUser", Email: email, Password: password },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                if (msg.UserResult == true) {
                    ProcessFreeIssue(productId, productTypeId, offerHiddenId, offerLinkId);
                }
            }
            else {
                hideLoading();
                $("#sErrorMsg").html("* Password incorrect.");
            }
        }
    });
}

function RegisterUserAndProcessFreeIssue(email, emailConfirm, password, passwordConfirm, marketing, tandc, productId, productTypeId, offerHiddenId, offerLinkId, createdOnArea) {
    showLoading();

    $.ajax({
        url: "/ajax.ashx",
        data: { method: "RegisterUser", Email: email.trim().toLowerCase(), EmailConfirm: emailConfirm.trim().toLowerCase(), Password: password, PasswordConfirm: passwordConfirm, Marketing: marketing, TandC: tandc, CreatedOnArea: createdOnArea },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                if (msg.UserResult == true) {
                    ProcessFreeIssue(productId, productTypeId, offerHiddenId, offerLinkId);
                }
            }
            else {
                hideLoading();
                $("#sErrorMsg").html(msg.ErrorMsg);
            }
        }
    });

}

function AddToWishlist(annualsubscriptionid) {

    $.ajax({
        url: "/ajax.ashx",
        data: { method: "AddWishlist", annualsubscriptionid: annualsubscriptionid },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            location.reload();
        }
    });
}

function RemoveFromWishlist(annualsubscriptionid) {

    $.ajax({
        url: "/ajax.ashx",
        data: { method: "RemoveWishlist", annualsubscriptionid: annualsubscriptionid },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            location.reload();
        }
    });
}

function UseCredit(productId) {

    $.ajax({
        url: "/ajax.ashx",
        data: { method: "UseCredit", ProductId: productId },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                //reloadPageWithAddToCart();
                alert('Success! You can find your new issue in your Library area!');
            } else {
                alert("Something went wrong, please try again");
            }
        }
    });
}

function reloadPageWithAddToCart() {
    create_cookie("addToCart", "yes");
    create_cookie(showCartPopupCookieName, "yes");
    location.reload();
}

function OneClickPurchase(productId, productTypeId, currentCurrency) {
    $.ajax({
        url: "/ajax.ashx",
        data: { method: "OneClickPurchase", ProductId: productId, ProductTypeId: productTypeId, CurrentCurrency: currentCurrency },
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            if (msg.Success) {
                console.log(msg);
                buyNowSuccess(msg.Data.oneclickbuy_success, msg.Data.oneclickbuy_success_img, msg.Data.oneclickbuy_success_readurl);
            } else {
                informationAlert("Purchase Failed", "Something went wrong, please try again");
            }
        }
    });
}

function buyNowSuccess(message, imgPath, readLink) {
    hideLoading();
    var js = "window.open('" + readLink + "');";
    var htmlmessage = "<img style='margin-right:10px;width:90px; float:left;' src='" + imgPath + "'/>" + message
    confirmAlert("Purchase Successful", htmlmessage, "Read Now", js, "Continue");
}


function delete_cookie(name) {
    document.cookie = name + '=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;';
}

function cookie_exists(name) {
    return (document.cookie.indexOf(name) >= 0);
}

function get_cookie(name) {
    var value = "; " + document.cookie;
    var parts = value.split("; " + name + "=");
    if (parts.length == 2) return parts.pop().split(";").shift();
}

function has_cookie(name) {
    return document.cookie.indexOf(name) >= 0;
}

function create_cookie(name, value) {
    if (has_cookie(name)) delete_cookie(name);
    document.cookie = name + '=' + value + '; expires=Thu, 01 Jan 2100 00:00:01 GMT; path=/';
}

function create_session_cookie(name, value) {
    if (has_cookie(name)) delete_cookie(name);
    document.cookie = name + '=' + value + ';  path=/';
}

function delete_cookie2(name) {
    document.cookie = name + "=;path=/;domain=." + document.location.hostname + "; expires=Thu, 01 Jan 1970 00:00:01 GMT;";
}

function showOneClickPurchaseEnablePopup() {
    $('.oneClickNotice').slideDown();
}

function ClosePlus() {
    document.getElementById("ActiveExpanded").style.display = "none";
    document.getElementById("ActiveCollapsed").style.display = "block";
    document.getElementById("OpenArrow").style.display = "none";
    document.getElementById("CloseArrow").style.display = "block";
}

function OpenPlus() {
    document.getElementById("ActiveExpanded").style.display = "block";
    document.getElementById("ActiveCollapsed").style.display = "none";
    document.getElementById("OpenArrow").style.display = "block";
    document.getElementById("CloseArrow").style.display = "none";
}
function MPP_PayNow(paymentMethod, slugUrl, cvv) {

    $('.paymenterror:visible').text('');

    showLoading('Paying, please do not refresh the page...');

    var currencyCode = $('#hidCurrency').val();

    $.ajax({
        url: "/ajax.ashx",
        data: { method: "LoadMPPJourneyNew", paymenttype: paymentMethod, currency: currencyCode, slugurl: slugUrl, cvv: cvv },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            // Do something interesting here.
            var model = result;
            if (model.success) {
                if (model.ThreeDSecureEnrolled !== undefined
                    && model.ThreeDSecureEnrolled !== null
                    && model.ThreeDSecureEnrolled === true) {
                    //Loading 3dSecure iFrame
                    Setup3DSecureIFrame_ProcessPayment(model.ThreeDSecureMD
                        , model.ThreeDSecurePaReq
                        , model.ThreeDSecureAcsUrl
                        , model.mppSessionId
                        , model.redirectURL
                    );
                }
                else {
                    window.location.assign(model.redirectURL);
                }
            } else {
                hideLoading();
                $('.paymenterror:visible').text('Something went wrong, please check your card details and try again.');
                console.log('Failure');
                window.location.assign(model.failureURL);
            }
        },
        error: function (result) {
            hideLoading();
            $('.paymenterror:visible').text('Something went wrong, please check your card details and try again.');
        }
    });
}


$("#divCartPopup").on('click', function (ev) {
    document.location = document.location.origin + document.location.pathname + document.location.search + "#";
})

$("#ActivatePopUp").on('click', function (ev) {
    document.body.style.overflow = "hidden";
})
$(".lookinsideicon").on('click', function (ev) {
    document.body.style.overflow = "hidden";
})
$(".membercoverpopup").on('click', function (ev) {
    ev.stopPropagation();
})
$(".cartpopup").on('click', function (ev) {
    ev.stopPropagation();
})
$(".popup").on('click', function (ev) {
    ev.stopPropagation();
})
$(".previewpop").on('click', function (ev) {
    ev.stopPropagation();
})
$(".cssoverlay").on('click', function (ev) {
    document.body.style.overflow = "visible";
    document.location = document.location.origin + document.location.pathname + document.location.search + "#";
})
$(".close").on('click', function (ev) {
    document.body.style.overflow = "visible";
    document.location = document.location.origin + document.location.pathname + document.location.search + "#";
})



;
!function (i) { "use strict"; "function" == typeof define && define.amd ? define(["jquery"], i) : "undefined" != typeof exports ? module.exports = i(require("jquery")) : i(jQuery) }(function (i) { "use strict"; var e = window.Slick || {}; (e = function () { var e = 0; return function (t, o) { var s, n = this; n.defaults = { accessibility: !0, adaptiveHeight: !1, appendArrows: i(t), appendDots: i(t), arrows: !0, asNavFor: null, prevArrow: '<button class="slick-prev" aria-label="Previous" type="button"><div class="pmimg slickprevbtn"></div></button>', nextArrow: '<button class="slick-next" aria-label="Next" type="button"><div class="pmimg slicknextbtn"></div></button>', autoplay: !1, autoplaySpeed: 3e3, centerMode: !1, centerPadding: "50px", cssEase: "ease", customPaging: function (e, t) { return i('<button type="button" />').text(t + 1) }, dots: !1, dotsClass: "slick-dots", draggable: !0, easing: "linear", edgeFriction: .35, fade: !1, focusOnSelect: !1, focusOnChange: !1, infinite: !0, initialSlide: 0, lazyLoad: "ondemand", mobileFirst: !1, pauseOnHover: !0, pauseOnFocus: !0, pauseOnDotsHover: !1, respondTo: "window", responsive: null, rows: 1, rtl: !1, slide: "", slidesPerRow: 1, slidesToShow: 1, slidesToScroll: 1, speed: 500, swipe: !0, swipeToSlide: !1, touchMove: !0, touchThreshold: 5, useCSS: !0, useTransform: !0, variableWidth: !1, vertical: !1, verticalSwiping: !1, waitForAnimate: !0, zIndex: 1e3 }, n.initials = { animating: !1, dragging: !1, autoPlayTimer: null, currentDirection: 0, currentLeft: null, currentSlide: 0, direction: 1, $dots: null, listWidth: null, listHeight: null, loadIndex: 0, $nextArrow: null, $prevArrow: null, scrolling: !1, slideCount: null, slideWidth: null, $slideTrack: null, $slides: null, sliding: !1, slideOffset: 0, swipeLeft: null, swiping: !1, $list: null, touchObject: {}, transformsEnabled: !1, unslicked: !1 }, i.extend(n, n.initials), n.activeBreakpoint = null, n.animType = null, n.animProp = null, n.breakpoints = [], n.breakpointSettings = [], n.cssTransitions = !1, n.focussed = !1, n.interrupted = !1, n.hidden = "hidden", n.paused = !0, n.positionProp = null, n.respondTo = null, n.rowCount = 1, n.shouldClick = !0, n.$slider = i(t), n.$slidesCache = null, n.transformType = null, n.transitionType = null, n.visibilityChange = "visibilitychange", n.windowWidth = 0, n.windowTimer = null, s = i(t).data("slick") || {}, n.options = i.extend({}, n.defaults, o, s), n.currentSlide = n.options.initialSlide, n.originalSettings = n.options, void 0 !== document.mozHidden ? (n.hidden = "mozHidden", n.visibilityChange = "mozvisibilitychange") : void 0 !== document.webkitHidden && (n.hidden = "webkitHidden", n.visibilityChange = "webkitvisibilitychange"), n.autoPlay = i.proxy(n.autoPlay, n), n.autoPlayClear = i.proxy(n.autoPlayClear, n), n.autoPlayIterator = i.proxy(n.autoPlayIterator, n), n.changeSlide = i.proxy(n.changeSlide, n), n.clickHandler = i.proxy(n.clickHandler, n), n.selectHandler = i.proxy(n.selectHandler, n), n.setPosition = i.proxy(n.setPosition, n), n.swipeHandler = i.proxy(n.swipeHandler, n), n.dragHandler = i.proxy(n.dragHandler, n), n.keyHandler = i.proxy(n.keyHandler, n), n.instanceUid = e++, n.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/, n.registerBreakpoints(), n.init(!0) } }()).prototype.activateADA = function () { this.$slideTrack.find(".slick-active").attr({ "aria-hidden": "false" }).find("a, input, button, select").attr({ tabindex: "0" }) }, e.prototype.addSlide = e.prototype.slickAdd = function (e, t, o) { var s = this; if ("boolean" == typeof t) o = t, t = null; else if (t < 0 || t >= s.slideCount) return !1; s.unload(), "number" == typeof t ? 0 === t && 0 === s.$slides.length ? i(e).appendTo(s.$slideTrack) : o ? i(e).insertBefore(s.$slides.eq(t)) : i(e).insertAfter(s.$slides.eq(t)) : !0 === o ? i(e).prependTo(s.$slideTrack) : i(e).appendTo(s.$slideTrack), s.$slides = s.$slideTrack.children(this.options.slide), s.$slideTrack.children(this.options.slide).detach(), s.$slideTrack.append(s.$slides), s.$slides.each(function (e, t) { i(t).attr("data-slick-index", e) }), s.$slidesCache = s.$slides, s.reinit() }, e.prototype.animateHeight = function () { var i = this; if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) { var e = i.$slides.eq(i.currentSlide).outerHeight(!0); i.$list.animate({ height: e }, i.options.speed) } }, e.prototype.animateSlide = function (e, t) { var o = {}, s = this; s.animateHeight(), !0 === s.options.rtl && !1 === s.options.vertical && (e = -e), !1 === s.transformsEnabled ? !1 === s.options.vertical ? s.$slideTrack.animate({ left: e }, s.options.speed, s.options.easing, t) : s.$slideTrack.animate({ top: e }, s.options.speed, s.options.easing, t) : !1 === s.cssTransitions ? (!0 === s.options.rtl && (s.currentLeft = -s.currentLeft), i({ animStart: s.currentLeft }).animate({ animStart: e }, { duration: s.options.speed, easing: s.options.easing, step: function (i) { i = Math.ceil(i), !1 === s.options.vertical ? (o[s.animType] = "translate(" + i + "px, 0px)", s.$slideTrack.css(o)) : (o[s.animType] = "translate(0px," + i + "px)", s.$slideTrack.css(o)) }, complete: function () { t && t.call() } })) : (s.applyTransition(), e = Math.ceil(e), !1 === s.options.vertical ? o[s.animType] = "translate3d(" + e + "px, 0px, 0px)" : o[s.animType] = "translate3d(0px," + e + "px, 0px)", s.$slideTrack.css(o), t && setTimeout(function () { s.disableTransition(), t.call() }, s.options.speed)) }, e.prototype.getNavTarget = function () { var e = this, t = e.options.asNavFor; return t && null !== t && (t = i(t).not(e.$slider)), t }, e.prototype.asNavFor = function (e) { var t = this.getNavTarget(); null !== t && "object" == typeof t && t.each(function () { var t = i(this).slick("getSlick"); t.unslicked || t.slideHandler(e, !0) }) }, e.prototype.applyTransition = function (i) { var e = this, t = {}; !1 === e.options.fade ? t[e.transitionType] = e.transformType + " " + e.options.speed + "ms " + e.options.cssEase : t[e.transitionType] = "opacity " + e.options.speed + "ms " + e.options.cssEase, !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t) }, e.prototype.autoPlay = function () { var i = this; i.autoPlayClear(), i.slideCount > i.options.slidesToShow && (i.autoPlayTimer = setInterval(i.autoPlayIterator, i.options.autoplaySpeed)) }, e.prototype.autoPlayClear = function () { var i = this; i.autoPlayTimer && clearInterval(i.autoPlayTimer) }, e.prototype.autoPlayIterator = function () { var i = this, e = i.currentSlide + i.options.slidesToScroll; i.paused || i.interrupted || i.focussed || (!1 === i.options.infinite && (1 === i.direction && i.currentSlide + 1 === i.slideCount - 1 ? i.direction = 0 : 0 === i.direction && (e = i.currentSlide - i.options.slidesToScroll, i.currentSlide - 1 == 0 && (i.direction = 1))), i.slideHandler(e)) }, e.prototype.buildArrows = function () { var e = this; !0 === e.options.arrows && (e.$prevArrow = i(e.options.prevArrow).addClass("slick-arrow"), e.$nextArrow = i(e.options.nextArrow).addClass("slick-arrow"), e.slideCount > e.options.slidesToShow ? (e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.prependTo(e.options.appendArrows), e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.appendTo(e.options.appendArrows), !0 !== e.options.infinite && e.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true")) : e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({ "aria-disabled": "true", tabindex: "-1" })) }, e.prototype.buildDots = function () { var e, t, o = this; if (!0 === o.options.dots) { for (o.$slider.addClass("slick-dotted"), t = i("<ul />").addClass(o.options.dotsClass), e = 0; e <= o.getDotCount(); e += 1)t.append(i("<li />").append(o.options.customPaging.call(this, o, e))); o.$dots = t.appendTo(o.options.appendDots), o.$dots.find("li").first().addClass("slick-active") } }, e.prototype.buildOut = function () { var e = this; e.$slides = e.$slider.children(e.options.slide + ":not(.slick-cloned)").addClass("slick-slide"), e.slideCount = e.$slides.length, e.$slides.each(function (e, t) { i(t).attr("data-slick-index", e).data("originalStyling", i(t).attr("style") || "") }), e.$slider.addClass("slick-slider"), e.$slideTrack = 0 === e.slideCount ? i('<div class="slick-track"/>').appendTo(e.$slider) : e.$slides.wrapAll('<div class="slick-track"/>').parent(), e.$list = e.$slideTrack.wrap('<div class="slick-list"/>').parent(), e.$slideTrack.css("opacity", 0), !0 !== e.options.centerMode && !0 !== e.options.swipeToSlide || (e.options.slidesToScroll = 1), i("img[data-lazy]", e.$slider).not("[src]").addClass("slick-loading"), e.setupInfinite(), e.buildArrows(), e.buildDots(), e.updateDots(), e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0), !0 === e.options.draggable && e.$list.addClass("draggable") }, e.prototype.buildRows = function () { var i, e, t, o, s, n, r, l = this; if (o = document.createDocumentFragment(), n = l.$slider.children(), l.options.rows > 1) { for (r = l.options.slidesPerRow * l.options.rows, s = Math.ceil(n.length / r), i = 0; i < s; i++) { var d = document.createElement("div"); for (e = 0; e < l.options.rows; e++) { var a = document.createElement("div"); for (t = 0; t < l.options.slidesPerRow; t++) { var c = i * r + (e * l.options.slidesPerRow + t); n.get(c) && a.appendChild(n.get(c)) } d.appendChild(a) } o.appendChild(d) } l.$slider.empty().append(o), l.$slider.children().children().children().css({ width: 100 / l.options.slidesPerRow + "%", display: "inline-block" }) } }, e.prototype.checkResponsive = function (e, t) { var o, s, n, r = this, l = !1, d = r.$slider.width(), a = window.innerWidth || i(window).width(); if ("window" === r.respondTo ? n = a : "slider" === r.respondTo ? n = d : "min" === r.respondTo && (n = Math.min(a, d)), r.options.responsive && r.options.responsive.length && null !== r.options.responsive) { s = null; for (o in r.breakpoints) r.breakpoints.hasOwnProperty(o) && (!1 === r.originalSettings.mobileFirst ? n < r.breakpoints[o] && (s = r.breakpoints[o]) : n > r.breakpoints[o] && (s = r.breakpoints[o])); null !== s ? null !== r.activeBreakpoint ? (s !== r.activeBreakpoint || t) && (r.activeBreakpoint = s, "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]), !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e)), l = s) : (r.activeBreakpoint = s, "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]), !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e)), l = s) : null !== r.activeBreakpoint && (r.activeBreakpoint = null, r.options = r.originalSettings, !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e), l = s), e || !1 === l || r.$slider.trigger("breakpoint", [r, l]) } }, e.prototype.changeSlide = function (e, t) { var o, s, n, r = this, l = i(e.currentTarget); switch (l.is("a") && e.preventDefault(), l.is("li") || (l = l.closest("li")), n = r.slideCount % r.options.slidesToScroll != 0, o = n ? 0 : (r.slideCount - r.currentSlide) % r.options.slidesToScroll, e.data.message) { case "previous": s = 0 === o ? r.options.slidesToScroll : r.options.slidesToShow - o, r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide - s, !1, t); break; case "next": s = 0 === o ? r.options.slidesToScroll : o, r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide + s, !1, t); break; case "index": var d = 0 === e.data.index ? 0 : e.data.index || l.index() * r.options.slidesToScroll; r.slideHandler(r.checkNavigable(d), !1, t), l.children().trigger("focus"); break; default: return } }, e.prototype.checkNavigable = function (i) { var e, t; if (e = this.getNavigableIndexes(), t = 0, i > e[e.length - 1]) i = e[e.length - 1]; else for (var o in e) { if (i < e[o]) { i = t; break } t = e[o] } return i }, e.prototype.cleanUpEvents = function () { var e = this; e.options.dots && null !== e.$dots && (i("li", e.$dots).off("click.slick", e.changeSlide).off("mouseenter.slick", i.proxy(e.interrupt, e, !0)).off("mouseleave.slick", i.proxy(e.interrupt, e, !1)), !0 === e.options.accessibility && e.$dots.off("keydown.slick", e.keyHandler)), e.$slider.off("focus.slick blur.slick"), !0 === e.options.arrows && e.slideCount > e.options.slidesToShow && (e.$prevArrow && e.$prevArrow.off("click.slick", e.changeSlide), e.$nextArrow && e.$nextArrow.off("click.slick", e.changeSlide), !0 === e.options.accessibility && (e.$prevArrow && e.$prevArrow.off("keydown.slick", e.keyHandler), e.$nextArrow && e.$nextArrow.off("keydown.slick", e.keyHandler))), e.$list.off("touchstart.slick mousedown.slick", e.swipeHandler), e.$list.off("touchmove.slick mousemove.slick", e.swipeHandler), e.$list.off("touchend.slick mouseup.slick", e.swipeHandler), e.$list.off("touchcancel.slick mouseleave.slick", e.swipeHandler), e.$list.off("click.slick", e.clickHandler), i(document).off(e.visibilityChange, e.visibility), e.cleanUpSlideEvents(), !0 === e.options.accessibility && e.$list.off("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().off("click.slick", e.selectHandler), i(window).off("orientationchange.slick.slick-" + e.instanceUid, e.orientationChange), i(window).off("resize.slick.slick-" + e.instanceUid, e.resize), i("[draggable!=true]", e.$slideTrack).off("dragstart", e.preventDefault), i(window).off("load.slick.slick-" + e.instanceUid, e.setPosition) }, e.prototype.cleanUpSlideEvents = function () { var e = this; e.$list.off("mouseenter.slick", i.proxy(e.interrupt, e, !0)), e.$list.off("mouseleave.slick", i.proxy(e.interrupt, e, !1)) }, e.prototype.cleanUpRows = function () { var i, e = this; e.options.rows > 1 && ((i = e.$slides.children().children()).removeAttr("style"), e.$slider.empty().append(i)) }, e.prototype.clickHandler = function (i) { !1 === this.shouldClick && (i.stopImmediatePropagation(), i.stopPropagation(), i.preventDefault()) }, e.prototype.destroy = function (e) { var t = this; t.autoPlayClear(), t.touchObject = {}, t.cleanUpEvents(), i(".slick-cloned", t.$slider).detach(), t.$dots && t.$dots.remove(), t.$prevArrow && t.$prevArrow.length && (t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), t.htmlExpr.test(t.options.prevArrow) && t.$prevArrow.remove()), t.$nextArrow && t.$nextArrow.length && (t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), t.htmlExpr.test(t.options.nextArrow) && t.$nextArrow.remove()), t.$slides && (t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function () { i(this).attr("style", i(this).data("originalStyling")) }), t.$slideTrack.children(this.options.slide).detach(), t.$slideTrack.detach(), t.$list.detach(), t.$slider.append(t.$slides)), t.cleanUpRows(), t.$slider.removeClass("slick-slider"), t.$slider.removeClass("slick-initialized"), t.$slider.removeClass("slick-dotted"), t.unslicked = !0, e || t.$slider.trigger("destroy", [t]) }, e.prototype.disableTransition = function (i) { var e = this, t = {}; t[e.transitionType] = "", !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t) }, e.prototype.fadeSlide = function (i, e) { var t = this; !1 === t.cssTransitions ? (t.$slides.eq(i).css({ zIndex: t.options.zIndex }), t.$slides.eq(i).animate({ opacity: 1 }, t.options.speed, t.options.easing, e)) : (t.applyTransition(i), t.$slides.eq(i).css({ opacity: 1, zIndex: t.options.zIndex }), e && setTimeout(function () { t.disableTransition(i), e.call() }, t.options.speed)) }, e.prototype.fadeSlideOut = function (i) { var e = this; !1 === e.cssTransitions ? e.$slides.eq(i).animate({ opacity: 0, zIndex: e.options.zIndex - 2 }, e.options.speed, e.options.easing) : (e.applyTransition(i), e.$slides.eq(i).css({ opacity: 0, zIndex: e.options.zIndex - 2 })) }, e.prototype.filterSlides = e.prototype.slickFilter = function (i) { var e = this; null !== i && (e.$slidesCache = e.$slides, e.unload(), e.$slideTrack.children(this.options.slide).detach(), e.$slidesCache.filter(i).appendTo(e.$slideTrack), e.reinit()) }, e.prototype.focusHandler = function () { var e = this; e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick", "*", function (t) { t.stopImmediatePropagation(); var o = i(this); setTimeout(function () { e.options.pauseOnFocus && (e.focussed = o.is(":focus"), e.autoPlay()) }, 0) }) }, e.prototype.getCurrent = e.prototype.slickCurrentSlide = function () { return this.currentSlide }, e.prototype.getDotCount = function () { var i = this, e = 0, t = 0, o = 0; if (!0 === i.options.infinite) if (i.slideCount <= i.options.slidesToShow) ++o; else for (; e < i.slideCount;)++o, e = t + i.options.slidesToScroll, t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow; else if (!0 === i.options.centerMode) o = i.slideCount; else if (i.options.asNavFor) for (; e < i.slideCount;)++o, e = t + i.options.slidesToScroll, t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow; else o = 1 + Math.ceil((i.slideCount - i.options.slidesToShow) / i.options.slidesToScroll); return o - 1 }, e.prototype.getLeft = function (i) { var e, t, o, s, n = this, r = 0; return n.slideOffset = 0, t = n.$slides.first().outerHeight(!0), !0 === n.options.infinite ? (n.slideCount > n.options.slidesToShow && (n.slideOffset = n.slideWidth * n.options.slidesToShow * -1, s = -1, !0 === n.options.vertical && !0 === n.options.centerMode && (2 === n.options.slidesToShow ? s = -1.5 : 1 === n.options.slidesToShow && (s = -2)), r = t * n.options.slidesToShow * s), n.slideCount % n.options.slidesToScroll != 0 && i + n.options.slidesToScroll > n.slideCount && n.slideCount > n.options.slidesToShow && (i > n.slideCount ? (n.slideOffset = (n.options.slidesToShow - (i - n.slideCount)) * n.slideWidth * -1, r = (n.options.slidesToShow - (i - n.slideCount)) * t * -1) : (n.slideOffset = n.slideCount % n.options.slidesToScroll * n.slideWidth * -1, r = n.slideCount % n.options.slidesToScroll * t * -1))) : i + n.options.slidesToShow > n.slideCount && (n.slideOffset = (i + n.options.slidesToShow - n.slideCount) * n.slideWidth, r = (i + n.options.slidesToShow - n.slideCount) * t), n.slideCount <= n.options.slidesToShow && (n.slideOffset = 0, r = 0), !0 === n.options.centerMode && n.slideCount <= n.options.slidesToShow ? n.slideOffset = n.slideWidth * Math.floor(n.options.slidesToShow) / 2 - n.slideWidth * n.slideCount / 2 : !0 === n.options.centerMode && !0 === n.options.infinite ? n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2) - n.slideWidth : !0 === n.options.centerMode && (n.slideOffset = 0, n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2)), e = !1 === n.options.vertical ? i * n.slideWidth * -1 + n.slideOffset : i * t * -1 + r, !0 === n.options.variableWidth && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow), e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0, !0 === n.options.centerMode && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow + 1), e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0, e += (n.$list.width() - o.outerWidth()) / 2)), e }, e.prototype.getOption = e.prototype.slickGetOption = function (i) { return this.options[i] }, e.prototype.getNavigableIndexes = function () { var i, e = this, t = 0, o = 0, s = []; for (!1 === e.options.infinite ? i = e.slideCount : (t = -1 * e.options.slidesToScroll, o = -1 * e.options.slidesToScroll, i = 2 * e.slideCount); t < i;)s.push(t), t = o + e.options.slidesToScroll, o += e.options.slidesToScroll <= e.options.slidesToShow ? e.options.slidesToScroll : e.options.slidesToShow; return s }, e.prototype.getSlick = function () { return this }, e.prototype.getSlideCount = function () { var e, t, o = this; return t = !0 === o.options.centerMode ? o.slideWidth * Math.floor(o.options.slidesToShow / 2) : 0, !0 === o.options.swipeToSlide ? (o.$slideTrack.find(".slick-slide").each(function (s, n) { if (n.offsetLeft - t + i(n).outerWidth() / 2 > -1 * o.swipeLeft) return e = n, !1 }), Math.abs(i(e).attr("data-slick-index") - o.currentSlide) || 1) : o.options.slidesToScroll }, e.prototype.goTo = e.prototype.slickGoTo = function (i, e) { this.changeSlide({ data: { message: "index", index: parseInt(i) } }, e) }, e.prototype.init = function (e) { var t = this; i(t.$slider).hasClass("slick-initialized") || (i(t.$slider).addClass("slick-initialized"), t.buildRows(), t.buildOut(), t.setProps(), t.startLoad(), t.loadSlider(), t.initializeEvents(), t.updateArrows(), t.updateDots(), t.checkResponsive(!0), t.focusHandler()), e && t.$slider.trigger("init", [t]), !0 === t.options.accessibility && t.initADA(), t.options.autoplay && (t.paused = !1, t.autoPlay()) }, e.prototype.initADA = function () { var e = this, t = Math.ceil(e.slideCount / e.options.slidesToShow), o = e.getNavigableIndexes().filter(function (i) { return i >= 0 && i < e.slideCount }); e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({ "aria-hidden": "true", tabindex: "-1" }).find("a, input, button, select").attr({ tabindex: "-1" }), null !== e.$dots && (e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function (t) { var s = o.indexOf(t); i(this).attr({ role: "tabpanel", id: "slick-slide" + e.instanceUid + t, tabindex: -1 }), -1 !== s && i(this).attr({ "aria-describedby": "slick-slide-control" + e.instanceUid + s }) }), e.$dots.attr("role", "tablist").find("li").each(function (s) { var n = o[s]; i(this).attr({ role: "presentation" }), i(this).find("button").first().attr({ role: "tab", id: "slick-slide-control" + e.instanceUid + s, "aria-controls": "slick-slide" + e.instanceUid + n, "aria-label": s + 1 + " of " + t, "aria-selected": null, tabindex: "-1" }) }).eq(e.currentSlide).find("button").attr({ "aria-selected": "true", tabindex: "0" }).end()); for (var s = e.currentSlide, n = s + e.options.slidesToShow; s < n; s++)e.$slides.eq(s).attr("tabindex", 0); e.activateADA() }, e.prototype.initArrowEvents = function () { var i = this; !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.off("click.slick").on("click.slick", { message: "previous" }, i.changeSlide), i.$nextArrow.off("click.slick").on("click.slick", { message: "next" }, i.changeSlide), !0 === i.options.accessibility && (i.$prevArrow.on("keydown.slick", i.keyHandler), i.$nextArrow.on("keydown.slick", i.keyHandler))) }, e.prototype.initDotEvents = function () { var e = this; !0 === e.options.dots && (i("li", e.$dots).on("click.slick", { message: "index" }, e.changeSlide), !0 === e.options.accessibility && e.$dots.on("keydown.slick", e.keyHandler)), !0 === e.options.dots && !0 === e.options.pauseOnDotsHover && i("li", e.$dots).on("mouseenter.slick", i.proxy(e.interrupt, e, !0)).on("mouseleave.slick", i.proxy(e.interrupt, e, !1)) }, e.prototype.initSlideEvents = function () { var e = this; e.options.pauseOnHover && (e.$list.on("mouseenter.slick", i.proxy(e.interrupt, e, !0)), e.$list.on("mouseleave.slick", i.proxy(e.interrupt, e, !1))) }, e.prototype.initializeEvents = function () { var e = this; e.initArrowEvents(), e.initDotEvents(), e.initSlideEvents(), e.$list.on("touchstart.slick mousedown.slick", { action: "start" }, e.swipeHandler), e.$list.on("touchmove.slick mousemove.slick", { action: "move" }, e.swipeHandler), e.$list.on("touchend.slick mouseup.slick", { action: "end" }, e.swipeHandler), e.$list.on("touchcancel.slick mouseleave.slick", { action: "end" }, e.swipeHandler), e.$list.on("click.slick", e.clickHandler), i(document).on(e.visibilityChange, i.proxy(e.visibility, e)), !0 === e.options.accessibility && e.$list.on("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), i(window).on("orientationchange.slick.slick-" + e.instanceUid, i.proxy(e.orientationChange, e)), i(window).on("resize.slick.slick-" + e.instanceUid, i.proxy(e.resize, e)), i("[draggable!=true]", e.$slideTrack).on("dragstart", e.preventDefault), i(window).on("load.slick.slick-" + e.instanceUid, e.setPosition), i(e.setPosition) }, e.prototype.initUI = function () { var i = this; !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.show(), i.$nextArrow.show()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.show() }, e.prototype.keyHandler = function (i) { var e = this; i.target.tagName.match("TEXTAREA|INPUT|SELECT") || (37 === i.keyCode && !0 === e.options.accessibility ? e.changeSlide({ data: { message: !0 === e.options.rtl ? "next" : "previous" } }) : 39 === i.keyCode && !0 === e.options.accessibility && e.changeSlide({ data: { message: !0 === e.options.rtl ? "previous" : "next" } })) }, e.prototype.lazyLoad = function () { function e(e) { i("img[data-lazy]", e).each(function () { var e = i(this), t = i(this).attr("data-lazy"), o = i(this).attr("data-srcset"), s = i(this).attr("data-sizes") || n.$slider.attr("data-sizes"), r = document.createElement("img"); r.onload = function () { e.animate({ opacity: 0 }, 100, function () { o && (e.attr("srcset", o), s && e.attr("sizes", s)), e.attr("src", t).animate({ opacity: 1 }, 200, function () { e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading") }), n.$slider.trigger("lazyLoaded", [n, e, t]) }) }, r.onerror = function () { e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"), n.$slider.trigger("lazyLoadError", [n, e, t]) }, r.src = t }) } var t, o, s, n = this; if (!0 === n.options.centerMode ? !0 === n.options.infinite ? s = (o = n.currentSlide + (n.options.slidesToShow / 2 + 1)) + n.options.slidesToShow + 2 : (o = Math.max(0, n.currentSlide - (n.options.slidesToShow / 2 + 1)), s = n.options.slidesToShow / 2 + 1 + 2 + n.currentSlide) : (o = n.options.infinite ? n.options.slidesToShow + n.currentSlide : n.currentSlide, s = Math.ceil(o + n.options.slidesToShow), !0 === n.options.fade && (o > 0 && o--, s <= n.slideCount && s++)), t = n.$slider.find(".slick-slide").slice(o, s), "anticipated" === n.options.lazyLoad) for (var r = o - 1, l = s, d = n.$slider.find(".slick-slide"), a = 0; a < n.options.slidesToScroll; a++)r < 0 && (r = n.slideCount - 1), t = (t = t.add(d.eq(r))).add(d.eq(l)), r--, l++; e(t), n.slideCount <= n.options.slidesToShow ? e(n.$slider.find(".slick-slide")) : n.currentSlide >= n.slideCount - n.options.slidesToShow ? e(n.$slider.find(".slick-cloned").slice(0, n.options.slidesToShow)) : 0 === n.currentSlide && e(n.$slider.find(".slick-cloned").slice(-1 * n.options.slidesToShow)) }, e.prototype.loadSlider = function () { var i = this; i.setPosition(), i.$slideTrack.css({ opacity: 1 }), i.$slider.removeClass("slick-loading"), i.initUI(), "progressive" === i.options.lazyLoad && i.progressiveLazyLoad() }, e.prototype.next = e.prototype.slickNext = function () { this.changeSlide({ data: { message: "next" } }) }, e.prototype.orientationChange = function () { var i = this; i.checkResponsive(), i.setPosition() }, e.prototype.pause = e.prototype.slickPause = function () { var i = this; i.autoPlayClear(), i.paused = !0 }, e.prototype.play = e.prototype.slickPlay = function () { var i = this; i.autoPlay(), i.options.autoplay = !0, i.paused = !1, i.focussed = !1, i.interrupted = !1 }, e.prototype.postSlide = function (e) { var t = this; t.unslicked || (t.$slider.trigger("afterChange", [t, e]), t.animating = !1, t.slideCount > t.options.slidesToShow && t.setPosition(), t.swipeLeft = null, t.options.autoplay && t.autoPlay(), !0 === t.options.accessibility && (t.initADA(), t.options.focusOnChange && i(t.$slides.get(t.currentSlide)).attr("tabindex", 0).focus())) }, e.prototype.prev = e.prototype.slickPrev = function () { this.changeSlide({ data: { message: "previous" } }) }, e.prototype.preventDefault = function (i) { i.preventDefault() }, e.prototype.progressiveLazyLoad = function (e) { e = e || 1; var t, o, s, n, r, l = this, d = i("img[data-lazy]", l.$slider); d.length ? (t = d.first(), o = t.attr("data-lazy"), s = t.attr("data-srcset"), n = t.attr("data-sizes") || l.$slider.attr("data-sizes"), (r = document.createElement("img")).onload = function () { s && (t.attr("srcset", s), n && t.attr("sizes", n)), t.attr("src", o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"), !0 === l.options.adaptiveHeight && l.setPosition(), l.$slider.trigger("lazyLoaded", [l, t, o]), l.progressiveLazyLoad() }, r.onerror = function () { e < 3 ? setTimeout(function () { l.progressiveLazyLoad(e + 1) }, 500) : (t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"), l.$slider.trigger("lazyLoadError", [l, t, o]), l.progressiveLazyLoad()) }, r.src = o) : l.$slider.trigger("allImagesLoaded", [l]) }, e.prototype.refresh = function (e) { var t, o, s = this; o = s.slideCount - s.options.slidesToShow, !s.options.infinite && s.currentSlide > o && (s.currentSlide = o), s.slideCount <= s.options.slidesToShow && (s.currentSlide = 0), t = s.currentSlide, s.destroy(!0), i.extend(s, s.initials, { currentSlide: t }), s.init(), e || s.changeSlide({ data: { message: "index", index: t } }, !1) }, e.prototype.registerBreakpoints = function () { var e, t, o, s = this, n = s.options.responsive || null; if ("array" === i.type(n) && n.length) { s.respondTo = s.options.respondTo || "window"; for (e in n) if (o = s.breakpoints.length - 1, n.hasOwnProperty(e)) { for (t = n[e].breakpoint; o >= 0;)s.breakpoints[o] && s.breakpoints[o] === t && s.breakpoints.splice(o, 1), o--; s.breakpoints.push(t), s.breakpointSettings[t] = n[e].settings } s.breakpoints.sort(function (i, e) { return s.options.mobileFirst ? i - e : e - i }) } }, e.prototype.reinit = function () { var e = this; e.$slides = e.$slideTrack.children(e.options.slide).addClass("slick-slide"), e.slideCount = e.$slides.length, e.currentSlide >= e.slideCount && 0 !== e.currentSlide && (e.currentSlide = e.currentSlide - e.options.slidesToScroll), e.slideCount <= e.options.slidesToShow && (e.currentSlide = 0), e.registerBreakpoints(), e.setProps(), e.setupInfinite(), e.buildArrows(), e.updateArrows(), e.initArrowEvents(), e.buildDots(), e.updateDots(), e.initDotEvents(), e.cleanUpSlideEvents(), e.initSlideEvents(), e.checkResponsive(!1, !0), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0), e.setPosition(), e.focusHandler(), e.paused = !e.options.autoplay, e.autoPlay(), e.$slider.trigger("reInit", [e]) }, e.prototype.resize = function () { var e = this; i(window).width() !== e.windowWidth && (clearTimeout(e.windowDelay), e.windowDelay = window.setTimeout(function () { e.windowWidth = i(window).width(), e.checkResponsive(), e.unslicked || e.setPosition() }, 50)) }, e.prototype.removeSlide = e.prototype.slickRemove = function (i, e, t) { var o = this; if (i = "boolean" == typeof i ? !0 === (e = i) ? 0 : o.slideCount - 1 : !0 === e ? --i : i, o.slideCount < 1 || i < 0 || i > o.slideCount - 1) return !1; o.unload(), !0 === t ? o.$slideTrack.children().remove() : o.$slideTrack.children(this.options.slide).eq(i).remove(), o.$slides = o.$slideTrack.children(this.options.slide), o.$slideTrack.children(this.options.slide).detach(), o.$slideTrack.append(o.$slides), o.$slidesCache = o.$slides, o.reinit() }, e.prototype.setCSS = function (i) { var e, t, o = this, s = {}; !0 === o.options.rtl && (i = -i), e = "left" == o.positionProp ? Math.ceil(i) + "px" : "0px", t = "top" == o.positionProp ? Math.ceil(i) + "px" : "0px", s[o.positionProp] = i, !1 === o.transformsEnabled ? o.$slideTrack.css(s) : (s = {}, !1 === o.cssTransitions ? (s[o.animType] = "translate(" + e + ", " + t + ")", o.$slideTrack.css(s)) : (s[o.animType] = "translate3d(" + e + ", " + t + ", 0px)", o.$slideTrack.css(s))) }, e.prototype.setDimensions = function () { var i = this; !1 === i.options.vertical ? !0 === i.options.centerMode && i.$list.css({ padding: "0px " + i.options.centerPadding }) : (i.$list.height(i.$slides.first().outerHeight(!0) * i.options.slidesToShow), !0 === i.options.centerMode && i.$list.css({ padding: i.options.centerPadding + " 0px" })), i.listWidth = i.$list.width(), i.listHeight = i.$list.height(), !1 === i.options.vertical && !1 === i.options.variableWidth ? (i.slideWidth = Math.ceil(i.listWidth / i.options.slidesToShow), i.$slideTrack.width(Math.ceil(i.slideWidth * i.$slideTrack.children(".slick-slide").length))) : !0 === i.options.variableWidth ? i.$slideTrack.width(5e3 * i.slideCount) : (i.slideWidth = Math.ceil(i.listWidth), i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0) * i.$slideTrack.children(".slick-slide").length))); var e = i.$slides.first().outerWidth(!0) - i.$slides.first().width(); !1 === i.options.variableWidth && i.$slideTrack.children(".slick-slide").width(i.slideWidth - e) }, e.prototype.setFade = function () { var e, t = this; t.$slides.each(function (o, s) { e = t.slideWidth * o * -1, !0 === t.options.rtl ? i(s).css({ position: "relative", right: e, top: 0, zIndex: t.options.zIndex - 2, opacity: 0 }) : i(s).css({ position: "relative", left: e, top: 0, zIndex: t.options.zIndex - 2, opacity: 0 }) }), t.$slides.eq(t.currentSlide).css({ zIndex: t.options.zIndex - 1, opacity: 1 }) }, e.prototype.setHeight = function () { var i = this; if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) { var e = i.$slides.eq(i.currentSlide).outerHeight(!0); i.$list.css("height", e) } }, e.prototype.setOption = e.prototype.slickSetOption = function () { var e, t, o, s, n, r = this, l = !1; if ("object" === i.type(arguments[0]) ? (o = arguments[0], l = arguments[1], n = "multiple") : "string" === i.type(arguments[0]) && (o = arguments[0], s = arguments[1], l = arguments[2], "responsive" === arguments[0] && "array" === i.type(arguments[1]) ? n = "responsive" : void 0 !== arguments[1] && (n = "single")), "single" === n) r.options[o] = s; else if ("multiple" === n) i.each(o, function (i, e) { r.options[i] = e }); else if ("responsive" === n) for (t in s) if ("array" !== i.type(r.options.responsive)) r.options.responsive = [s[t]]; else { for (e = r.options.responsive.length - 1; e >= 0;)r.options.responsive[e].breakpoint === s[t].breakpoint && r.options.responsive.splice(e, 1), e--; r.options.responsive.push(s[t]) } l && (r.unload(), r.reinit()) }, e.prototype.setPosition = function () { var i = this; i.setDimensions(), i.setHeight(), !1 === i.options.fade ? i.setCSS(i.getLeft(i.currentSlide)) : i.setFade(), i.$slider.trigger("setPosition", [i]) }, e.prototype.setProps = function () { var i = this, e = document.body.style; i.positionProp = !0 === i.options.vertical ? "top" : "left", "top" === i.positionProp ? i.$slider.addClass("slick-vertical") : i.$slider.removeClass("slick-vertical"), void 0 === e.WebkitTransition && void 0 === e.MozTransition && void 0 === e.msTransition || !0 === i.options.useCSS && (i.cssTransitions = !0), i.options.fade && ("number" == typeof i.options.zIndex ? i.options.zIndex < 3 && (i.options.zIndex = 3) : i.options.zIndex = i.defaults.zIndex), void 0 !== e.OTransform && (i.animType = "OTransform", i.transformType = "-o-transform", i.transitionType = "OTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.MozTransform && (i.animType = "MozTransform", i.transformType = "-moz-transform", i.transitionType = "MozTransition", void 0 === e.perspectiveProperty && void 0 === e.MozPerspective && (i.animType = !1)), void 0 !== e.webkitTransform && (i.animType = "webkitTransform", i.transformType = "-webkit-transform", i.transitionType = "webkitTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.msTransform && (i.animType = "msTransform", i.transformType = "-ms-transform", i.transitionType = "msTransition", void 0 === e.msTransform && (i.animType = !1)), void 0 !== e.transform && !1 !== i.animType && (i.animType = "transform", i.transformType = "transform", i.transitionType = "transition"), i.transformsEnabled = i.options.useTransform && null !== i.animType && !1 !== i.animType }, e.prototype.setSlideClasses = function (i) { var e, t, o, s, n = this; if (t = n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden", "true"), n.$slides.eq(i).addClass("slick-current"), !0 === n.options.centerMode) { var r = n.options.slidesToShow % 2 == 0 ? 1 : 0; e = Math.floor(n.options.slidesToShow / 2), !0 === n.options.infinite && (i >= e && i <= n.slideCount - 1 - e ? n.$slides.slice(i - e + r, i + e + 1).addClass("slick-active").attr("aria-hidden", "false") : (o = n.options.slidesToShow + i, t.slice(o - e + 1 + r, o + e + 2).addClass("slick-active").attr("aria-hidden", "false")), 0 === i ? t.eq(t.length - 1 - n.options.slidesToShow).addClass("slick-center") : i === n.slideCount - 1 && t.eq(n.options.slidesToShow).addClass("slick-center")), n.$slides.eq(i).addClass("slick-center") } else i >= 0 && i <= n.slideCount - n.options.slidesToShow ? n.$slides.slice(i, i + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false") : t.length <= n.options.slidesToShow ? t.addClass("slick-active").attr("aria-hidden", "false") : (s = n.slideCount % n.options.slidesToShow, o = !0 === n.options.infinite ? n.options.slidesToShow + i : i, n.options.slidesToShow == n.options.slidesToScroll && n.slideCount - i < n.options.slidesToShow ? t.slice(o - (n.options.slidesToShow - s), o + s).addClass("slick-active").attr("aria-hidden", "false") : t.slice(o, o + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false")); "ondemand" !== n.options.lazyLoad && "anticipated" !== n.options.lazyLoad || n.lazyLoad() }, e.prototype.setupInfinite = function () { var e, t, o, s = this; if (!0 === s.options.fade && (s.options.centerMode = !1), !0 === s.options.infinite && !1 === s.options.fade && (t = null, s.slideCount > s.options.slidesToShow)) { for (o = !0 === s.options.centerMode ? s.options.slidesToShow + 1 : s.options.slidesToShow, e = s.slideCount; e > s.slideCount - o; e -= 1)t = e - 1, i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t - s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned"); for (e = 0; e < o + s.slideCount; e += 1)t = e, i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t + s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned"); s.$slideTrack.find(".slick-cloned").find("[id]").each(function () { i(this).attr("id", "") }) } }, e.prototype.interrupt = function (i) { var e = this; i || e.autoPlay(), e.interrupted = i }, e.prototype.selectHandler = function (e) { var t = this, o = i(e.target).is(".slick-slide") ? i(e.target) : i(e.target).parents(".slick-slide"), s = parseInt(o.attr("data-slick-index")); s || (s = 0), t.slideCount <= t.options.slidesToShow ? t.slideHandler(s, !1, !0) : t.slideHandler(s) }, e.prototype.slideHandler = function (i, e, t) { var o, s, n, r, l, d = null, a = this; if (e = e || !1, !(!0 === a.animating && !0 === a.options.waitForAnimate || !0 === a.options.fade && a.currentSlide === i)) if (!1 === e && a.asNavFor(i), o = i, d = a.getLeft(o), r = a.getLeft(a.currentSlide), a.currentLeft = null === a.swipeLeft ? r : a.swipeLeft, !1 === a.options.infinite && !1 === a.options.centerMode && (i < 0 || i > a.getDotCount() * a.options.slidesToScroll)) !1 === a.options.fade && (o = a.currentSlide, !0 !== t ? a.animateSlide(r, function () { a.postSlide(o) }) : a.postSlide(o)); else if (!1 === a.options.infinite && !0 === a.options.centerMode && (i < 0 || i > a.slideCount - a.options.slidesToScroll)) !1 === a.options.fade && (o = a.currentSlide, !0 !== t ? a.animateSlide(r, function () { a.postSlide(o) }) : a.postSlide(o)); else { if (a.options.autoplay && clearInterval(a.autoPlayTimer), s = o < 0 ? a.slideCount % a.options.slidesToScroll != 0 ? a.slideCount - a.slideCount % a.options.slidesToScroll : a.slideCount + o : o >= a.slideCount ? a.slideCount % a.options.slidesToScroll != 0 ? 0 : o - a.slideCount : o, a.animating = !0, a.$slider.trigger("beforeChange", [a, a.currentSlide, s]), n = a.currentSlide, a.currentSlide = s, a.setSlideClasses(a.currentSlide), a.options.asNavFor && (l = (l = a.getNavTarget()).slick("getSlick")).slideCount <= l.options.slidesToShow && l.setSlideClasses(a.currentSlide), a.updateDots(), a.updateArrows(), !0 === a.options.fade) return !0 !== t ? (a.fadeSlideOut(n), a.fadeSlide(s, function () { a.postSlide(s) })) : a.postSlide(s), void a.animateHeight(); !0 !== t ? a.animateSlide(d, function () { a.postSlide(s) }) : a.postSlide(s) } }, e.prototype.startLoad = function () { var i = this; !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.hide(), i.$nextArrow.hide()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.hide(), i.$slider.addClass("slick-loading") }, e.prototype.swipeDirection = function () { var i, e, t, o, s = this; return i = s.touchObject.startX - s.touchObject.curX, e = s.touchObject.startY - s.touchObject.curY, t = Math.atan2(e, i), (o = Math.round(180 * t / Math.PI)) < 0 && (o = 360 - Math.abs(o)), o <= 45 && o >= 0 ? !1 === s.options.rtl ? "left" : "right" : o <= 360 && o >= 315 ? !1 === s.options.rtl ? "left" : "right" : o >= 135 && o <= 225 ? !1 === s.options.rtl ? "right" : "left" : !0 === s.options.verticalSwiping ? o >= 35 && o <= 135 ? "down" : "up" : "vertical" }, e.prototype.swipeEnd = function (i) { var e, t, o = this; if (o.dragging = !1, o.swiping = !1, o.scrolling) return o.scrolling = !1, !1; if (o.interrupted = !1, o.shouldClick = !(o.touchObject.swipeLength > 10), void 0 === o.touchObject.curX) return !1; if (!0 === o.touchObject.edgeHit && o.$slider.trigger("edge", [o, o.swipeDirection()]), o.touchObject.swipeLength >= o.touchObject.minSwipe) { switch (t = o.swipeDirection()) { case "left": case "down": e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide + o.getSlideCount()) : o.currentSlide + o.getSlideCount(), o.currentDirection = 0; break; case "right": case "up": e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide - o.getSlideCount()) : o.currentSlide - o.getSlideCount(), o.currentDirection = 1 }"vertical" != t && (o.slideHandler(e), o.touchObject = {}, o.$slider.trigger("swipe", [o, t])) } else o.touchObject.startX !== o.touchObject.curX && (o.slideHandler(o.currentSlide), o.touchObject = {}) }, e.prototype.swipeHandler = function (i) { var e = this; if (!(!1 === e.options.swipe || "ontouchend" in document && !1 === e.options.swipe || !1 === e.options.draggable && -1 !== i.type.indexOf("mouse"))) switch (e.touchObject.fingerCount = i.originalEvent && void 0 !== i.originalEvent.touches ? i.originalEvent.touches.length : 1, e.touchObject.minSwipe = e.listWidth / e.options.touchThreshold, !0 === e.options.verticalSwiping && (e.touchObject.minSwipe = e.listHeight / e.options.touchThreshold), i.data.action) { case "start": e.swipeStart(i); break; case "move": e.swipeMove(i); break; case "end": e.swipeEnd(i) } }, e.prototype.swipeMove = function (i) { var e, t, o, s, n, r, l = this; return n = void 0 !== i.originalEvent ? i.originalEvent.touches : null, !(!l.dragging || l.scrolling || n && 1 !== n.length) && (e = l.getLeft(l.currentSlide), l.touchObject.curX = void 0 !== n ? n[0].pageX : i.clientX, l.touchObject.curY = void 0 !== n ? n[0].pageY : i.clientY, l.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(l.touchObject.curX - l.touchObject.startX, 2))), r = Math.round(Math.sqrt(Math.pow(l.touchObject.curY - l.touchObject.startY, 2))), !l.options.verticalSwiping && !l.swiping && r > 4 ? (l.scrolling = !0, !1) : (!0 === l.options.verticalSwiping && (l.touchObject.swipeLength = r), t = l.swipeDirection(), void 0 !== i.originalEvent && l.touchObject.swipeLength > 4 && (l.swiping = !0, i.preventDefault()), s = (!1 === l.options.rtl ? 1 : -1) * (l.touchObject.curX > l.touchObject.startX ? 1 : -1), !0 === l.options.verticalSwiping && (s = l.touchObject.curY > l.touchObject.startY ? 1 : -1), o = l.touchObject.swipeLength, l.touchObject.edgeHit = !1, !1 === l.options.infinite && (0 === l.currentSlide && "right" === t || l.currentSlide >= l.getDotCount() && "left" === t) && (o = l.touchObject.swipeLength * l.options.edgeFriction, l.touchObject.edgeHit = !0), !1 === l.options.vertical ? l.swipeLeft = e + o * s : l.swipeLeft = e + o * (l.$list.height() / l.listWidth) * s, !0 === l.options.verticalSwiping && (l.swipeLeft = e + o * s), !0 !== l.options.fade && !1 !== l.options.touchMove && (!0 === l.animating ? (l.swipeLeft = null, !1) : void l.setCSS(l.swipeLeft)))) }, e.prototype.swipeStart = function (i) { var e, t = this; if (t.interrupted = !0, 1 !== t.touchObject.fingerCount || t.slideCount <= t.options.slidesToShow) return t.touchObject = {}, !1; void 0 !== i.originalEvent && void 0 !== i.originalEvent.touches && (e = i.originalEvent.touches[0]), t.touchObject.startX = t.touchObject.curX = void 0 !== e ? e.pageX : i.clientX, t.touchObject.startY = t.touchObject.curY = void 0 !== e ? e.pageY : i.clientY, t.dragging = !0 }, e.prototype.unfilterSlides = e.prototype.slickUnfilter = function () { var i = this; null !== i.$slidesCache && (i.unload(), i.$slideTrack.children(this.options.slide).detach(), i.$slidesCache.appendTo(i.$slideTrack), i.reinit()) }, e.prototype.unload = function () { var e = this; i(".slick-cloned", e.$slider).remove(), e.$dots && e.$dots.remove(), e.$prevArrow && e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.remove(), e.$nextArrow && e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.remove(), e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden", "true").css("width", "") }, e.prototype.unslick = function (i) { var e = this; e.$slider.trigger("unslick", [e, i]), e.destroy() }, e.prototype.updateArrows = function () { var i = this; Math.floor(i.options.slidesToShow / 2), !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && !i.options.infinite && (i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), 0 === i.currentSlide ? (i.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - i.options.slidesToShow && !1 === i.options.centerMode ? (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - 1 && !0 === i.options.centerMode && (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"))) }, e.prototype.updateDots = function () { var i = this; null !== i.$dots && (i.$dots.find("li").removeClass("slick-active").end(), i.$dots.find("li").eq(Math.floor(i.currentSlide / i.options.slidesToScroll)).addClass("slick-active")) }, e.prototype.visibility = function () { var i = this; i.options.autoplay && (document[i.hidden] ? i.interrupted = !0 : i.interrupted = !1) }, i.fn.slick = function () { var i, t, o = this, s = arguments[0], n = Array.prototype.slice.call(arguments, 1), r = o.length; for (i = 0; i < r; i++)if ("object" == typeof s || void 0 === s ? o[i].slick = new e(o[i], s) : t = o[i].slick[s].apply(o[i].slick, n), void 0 !== t) return t; return o } });;

    var $ = jQuery;

    // Scroll function
    var mywindow = $(window);
    var mypos = mywindow.scrollTop();
    var up = false;
    var newscroll;
    mywindow.scroll(function () {
        newscroll = mywindow.scrollTop();
        if (newscroll > mypos + 20 && !up) {
        $('.mobilesearchholder').stop().slideToggle();
    up = !up;
    console.log(up);
        } else if(newscroll < mypos && up) {
        $('.mobilesearchholder').stop().slideToggle();
    up = !up;
        }
    mypos = newscroll;
    });

    // Slick carousel initialization
    $(document).ready(function () {
        // Slick carousel for '.wrapper'
        $('.wrapper').slick({
            infinite: false,
            slidesToScroll: 1,
            mobileFirst: true,
            variableWidth: true,
            slidesToShow: 2,
            responsive: [
                {
                    breakpoint: 1000,
                    settings: {
                        slidesToShow: 5,
                        slidesToScroll: 5,
                    },
                },
                {
                    breakpoint: 800,
                    settings: {
                        slidesToShow: 3,
                        slidesToScroll: 3,
                    },
                },
                {
                    breakpoint: 500,
                    settings: {
                        slidesToShow: 2,
                        slidesToScroll: 2,
                    },
                },
                {
                    breakpoint: 300,
                    settings: {
                        slidesToShow: 2,
                        slidesToScroll: 2,
                    },
                },
            ],
        });

    // Slick carousel for '.wrapperpreview'
    $('.wrapperpreview').slick({
        infinite: false,
    slidesToScroll: 1,
    mobileFirst: true,
    variableWidth: true,
    slidesToShow: 2,
    responsive: [
    {
        breakpoint: 1000,
    settings: {
        slidesToShow: 2,
    slidesToScroll: 1,
                    },
                },
    {
        breakpoint: 800,
    settings: {
        slidesToShow: 2,
    slidesToScroll: 1,
                    },
                },
    {
        breakpoint: 500,
    settings: {
        slidesToShow: 2,
    slidesToScroll: 1,
                    },
                },
    {
        breakpoint: 300,
    settings: {
        slidesToShow: 2,
    slidesToScroll: 1,
                    },
                },
    ],
        });

    // Slick carousel for '.catwrapper'
    $('.catwrapper').slick({
        infinite: false,
    slidesToScroll: 2,
    mobileFirst: true,
    variableWidth: true,
    slidesToShow: 2,
    prevArrow: '<button class="slick-prev" aria-label="Previous" type="button"><div class="pmimg slickprevbtn"></div></button>',
    nextArrow: '<button class="slick-next" aria-label="Next" type="button"><div class="pmimg slicknextbtn"></div></button>',
    responsive: [
    {
        breakpoint: 800,
    settings: {
        slidesToShow: 5,
    slidesToScroll: 5,
                    },
                },
    {
        breakpoint: 300,
    settings: {
        slidesToScroll: 2,
                    },
                },
    ],
        });
    });

    // Slick pagination
    var $status = $('.pagingInfo');
    var $slickElement = $('.slick-slider');

    $slickElement.on('init reInit afterChange', function (event, slick, currentSlide, nextSlide) {
        //currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based)
        if (!slick.$dots) {
            return;
        }

    var i = (currentSlide ? currentSlide : 0) + 1;
    $status.text(i + '/' + (slick.$dots[0].children.length));
    });

;
