/* Minification failed. Returning unminified contents.
(1813,9,1921,10): run-time error JS1314: Implicit property name must be identifier: _create() {
            var f5PopOutCart = this;

            $('.checkout-container .shopping-cart-hover').each(function () {
                var delay = $(this).index() * 10 + 'ms';
                $(this).css({
                    '-webkit-transition-delay': delay,
                    '-moz-transition-delay': delay,
                    '-o-transition-delay': delay,
                    'transition-delay': delay
                });
            });

            // TOP CART
            $('.checkout-container #shopping-cart-icon').hover(function (e) {
                f5PopOutCart.populateCart();
                $(".checkout-container .shopping-cart-hover").stop(true, true).addClass("active");
            }, function () {
                $(".checkout-container .shopping-cart-hover").stop(true, true).removeClass("active");
            });

            $('.checkout-container .shopping-cart-hover').hover(function (e) {
                $(".checkout-container .shopping-cart-hover").stop(true, true).addClass("active");
            }, function () {
                $(".checkout-container .shopping-cart-hover").stop(true, true).removeClass("active");
            });

            // BOTTOM CART
            $('#cartWrapper').hover(function (e) {
                f5PopOutCart.populateCart();
                $("#cartWrapper .shopping-cart-hover").stop(true, true).addClass("active");
            }, function () {
                $("#cartWrapper .shopping-cart-hover").stop(true, true).removeClass("active");
            });

            $('#cartWrapper .shopping-cart-hover').hover(function (e) {
                $("#cartWrapper .shopping-cart-hover").stop(true, true).addClass("active");
            }, function () {
                $("#cartWrapper .shopping-cart-hover").stop(true, true).removeClass("active");
            });

            $(document).on("click", ".increase-amount", function (e) {
                e.preventDefault();
                e.stopPropagation();

                var articleId = $(this).closest("li").data("article-id");
                var newArticleQuantity = $(this).closest("li").data("quantity") + 1;

                $(document).f5LocalStorageCart("updateItemQuantity", articleId, newArticleQuantity);

                var newTotal = $(document).f5LocalStorageCart("getCartTotal");
                var newArticleCount = $(document).f5LocalStorageCart("getItemAmount", articleId);
                var newItemTotalCount = $(document).f5LocalStorageCart("itemCount");

                $(this).closest("li").find("span.item-quantity").html(newArticleCount + " x ");
                $(this).closest("li").data("quantity", newArticleCount);
                $(".cartTotal").html(f5PopOutCart._displayAmount(newTotal));

                $(document).f5Shop("updateCartArticleNo", newItemTotalCount);
            });

            $(document).on("click", ".decrease-amount", function (e) {
                e.preventDefault();
                e.stopPropagation();

                var articleId = $(this).closest("li").data("article-id");
                var newArticleQuantity = $(this).closest("li").data("quantity") - 1;

                if (newArticleQuantity < 1) {
                    $(document).f5LocalStorageCart("deleteItem", articleId);
                } else {
                    $(document).f5LocalStorageCart("updateItemQuantity", articleId, newArticleQuantity);
                }

                var newTotal = $(document).f5LocalStorageCart("getCartTotal");
                var newArticleCount = $(document).f5LocalStorageCart("getItemAmount", articleId);
                var newItemTotalCount = $(document).f5LocalStorageCart("itemCount");

                if (newArticleQuantity < 1) {
                    $(this).closest("li").remove();
                } else {
                    $(this).closest("li").find("span.item-quantity").html(newArticleCount + " x ");
                    $(this).closest("li").data("quantity", newArticleCount);
                }

                $(".cartTotal").html(f5PopOutCart._displayAmount(newTotal));

                $(document).f5Shop("updateCartArticleNo", newItemTotalCount);
            });

            $(document).on("click", ".remove-item", function (e) {
                e.preventDefault();
                e.stopPropagation();

                var articleId = $(this).closest("li").data("article-id");
                $(document).f5LocalStorageCart("deleteItem", articleId);
                
                var newItemTotalCount = $(document).f5LocalStorageCart("itemCount");

                $(this).closest("li").remove();

                $(document).f5Shop("updateCartArticleNo", newItemTotalCount);

                var newTotal = $(document).f5LocalStorageCart("getCartTotal");
                $(".cartTotal").html(f5PopOutCart._displayAmount(newTotal));
            });

            f5PopOutCart.populateCart();
        }
 */
function Sanitizer() { }

Sanitizer.prototype.Sanitize = function (input) {
    var entityMap = {
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;',
        '"': '&quot;',
        "'": '&#39;',
        '/': '&#x2F;',
        '`': '&#x60;',
        '=': '&#x3D;'
    };

	return String(input).replace(/[&<>"'`=\/]/g, function (s) {
	    return entityMap[s];
	});
};
$(document).ready(function() {
    // If indexOf doesn't exist (it doesn't in ie) add it
    if (!Array.prototype.indexOf) {
        Array.prototype.indexOf = function(obj, start) {
            for (var i = (start || 0), j = this.length; i < j; i++) {
                if (this[i] === obj) {
                    return i;
                }
            }
            return -1;
        }
    }

    // Validation
    jQuery.extend(jQuery.validator.messages, {
        required: resources_Common.emsg_FieldMandatory,
        email: resources_Common.emsg_EnterValidEmail,
        digits: resources_Common.emsg_EnterOnlyDigits,
        number: resources_F5.Dialog_Common_Validation_Number,
        maxlength: jQuery.validator.format(resources_Common.emsg_CharactersAllowedPart1 + " {0} " + resources_Common.emsg_CharactersAllowedPart2),
        minlength: jQuery.validator.format(resources_Common.emsg_CharactersNeeded + " {0} " + resources_Common.emsg_CharactersAllowedPart2),
        max: jQuery.validator.format(resources_F5.Common_Validation_Text_MaxValue),
        min: jQuery.validator.format(resources_F5.Common_Validation_Text_MinValue)
    });

    jQuery.extend(jQuery.validator.methods, {
        range: function(value, element, param) {
            var val = jQuery.parseNumber(value, { format: "#,##0.00", locale: NUMBER_FORMATTER_LOCALE });
            return this.optional(element) || (
                val >= param[0] && val <= param[1]);
        },
        min: function(value, element, param) {
            var val = jQuery.parseNumber(value, { format: "#,##0.00", locale: NUMBER_FORMATTER_LOCALE });
            return this.optional(element) || val >= param;
        },
        max: function(value, element, param) {
            var val = jQuery.parseNumber(value, { format: "#,##0.00", locale: NUMBER_FORMATTER_LOCALE });
            return this.optional(element) || val <= param;
        },
        number: function(value, element) {
            return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:[\.,]\d+)?$/.test(value);
        }
    });

    $.validator.addMethod("identificationNoSE", function(value, element) {
        if (value == "")
            return true;
        var check = parseInt(value.substr(9, 1), 10);
        // Remove century and check number  
        if (value.length == 10) {
            value = value.substr(0, 9);
        } else {
            return false;
        }
        var result = 0;
        // Calculate check number
        for (var i = 0; i < value.length; i++) {
            var tmp = parseInt(value.substr(i, 1), 10);
            if ((i % 2) == 0) {
                tmp = (tmp * 2);
            }
            if (tmp > 9) {
                result += (1 + (tmp % 10));
            } else {
                result += tmp;
            }
        }
        return (((check + result) % 10) == 0);
    }, resources_Common.emsg_FormatForIdNo);
    $.validator.addMethod('isNumeric', function(value) {
        if (value == "")
            return true;
        if (value.indexOf(".") != -1)
            return false;
        return (value - 0) == value && value.length > 0;
    }, resources_Common.emsg_DigitsAndHyphen);
    $.validator.addMethod('valImageRequired', function(value, element) {
        if (value == jQuery.Guid.Empty()) {
            $(element.parentNode).css("border", "1px solid #924949");
            return false;
        }
        return true;
    }, resources_Common.emsg_FieldMandatory);
    $.validator.addMethod("unique", function(value, element, params) {
        //var prefix = params;
        var selector = jQuery.validator.format("[name!='{0}'][unique='{1}']", element.name, params);
        var matches = new Array();
        $(selector).each(function(index, item) {
            if (value == $(item).val()) {
                matches.push(item);
            }
        });
        return matches.length == 0;
    }, resources_F5.Common_Validation_Text_Unique);
    $.validator.addMethod("notmatch", function(value, element, params) {
        if (value !== params) {
            return true;
        } else {
            return false;
        }
    }, resources_F5.Common_Validation_Text_Email_MatchAdministrators_Email);
    
    $.validator.setDefaults({
        focusInvalid: (IS_MOBILE_DEVICE === 1 ? false : true),
        errorClass: "validationError",
        invalidHandler: function (form, validator) {
            $(".validationErrorSummary").not(".manualError").show().fadeOut(6000);
        },
        errorElement: "div",
        errorPlacement: function (error, element) {
            function isInputRadioOrCheckbox(input) {
                if (input.attr('type') == 'radio' || input.attr('type') == 'checkbox') {
                    return true;
                } else {
                    return false;
                }
            };
            if (isUnderBootstrap3Container(element)) {
                if (isInputRadioOrCheckbox(element)) {
                    var inputContainer = element.parents(".deliveryMethodRow, .paymentMethodRow, .divAcceptTerms");
                    if (inputContainer.hasClass("divAcceptTerms")) {
                        error.addClass("pull-right margin-top-10 margin-bottom-10");
                    }
                    error.appendTo(inputContainer);
                } else {
                    error.insertAfter(element);
                }
            } else {
                error.insertBefore(element);
                if (isInputRadioOrCheckbox(element)) {
                    element = element.parent();
                }
                error.css('position', 'absolute');
                if (IS_MOBILE_DEVICE === 0) {
                    error.css('left', element.position().left + element.outerWidth() + 5);
                    error.css('top', element.position().top + 2);
                } else {
                    error.css('left', element.position().left);
                    error.css('top', element.position().top + element.outerHeight() + 2);
                }
            }

            $(element).on("blur", function (e) {
                if (!$(element).hasClass("preserveError")) {
                    error.remove();
                }
            });
        },
        onfocusout: function (element) {
             $(element).valid();
        },
        ignore: ".valIgnore"
    });
    
    $.validator.addClassRules({
        valIdentificationNoSE: {
            identificationNoSE: true
        },
        unique: {
            unique: true
        },
        valRequired: {
            required: true
        },
        valFormRowTitle: {
            maxlength: 100
        },
        valName: {
            maxlength: 100
        },
        val60: {
            maxlength: 60
        },
        val50: {
            maxlength: 50
        },
        val35: {
            maxlength: 35
        },
        val30: {
            maxlength: 30
        },
        val10: {
            maxlength: 10
        },
        val24: {
            maxlength: 24
        },
        val20: {
            maxlength: 20
        },
        val200: {
            maxlength: 200
        },
        val80: {
            maxlength: 80
        },
        val100: {
            maxlength: 100
        },
        valAnalyticsId: {
            maxlength: 100
        },
        valOtherInformation: {
            maxlength: 120
        },
        valDescription: {
            maxlength: 1000
        },
        valOrderEmailText: {
            maxlength: 2000
        },
        valSummary: {
            maxlength: 100
        },
        valEmail: {
            email: true,
            maxlength: 200
        },
        valUnit: {
            digits: true,
            maxlength: 7
        },
        valAmount: {
            number: true,
            maxlength: 9
        },
        valAmountNoDecimals: {
            digits: true,
            maxlength: 7
        },
        valVat: {
            digits: true,
            maxlength: 2
        },
        valDomainOrgNo: {
            minlength: 5
        },
        valIsNumeric: {
            isNumeric: true
        },
        valDomainName: {
            minlength: 2
        },
        valDomainAddress: {
            minlength: 3
        },
        valDomainPostNo: {
            minlength: 4
        },
        min0: {
            min: 0
        },
        nonNegativeNumber: {
            required: true,
            number: true,
            min: 0
        },
        percentage: {
            required: true,
            number: true,
            range: [0, 100]
        }
    });
    $.validator.addMethod('valPhoneNo', function (value, element) {
        return this.optional(element) || /^[0-9\-\+]+$/i.test(value);
    }, resources_Common.emsg_ValidPhoneNo);
    $.validator.addMethod('valPhoneNoStrict', function (value, element) {
        return this.optional(element) || /^\+*[0-9]{4,15}$/i.test(value);
    }, resources_Common.emsg_ValidPhoneNoStrict);

    String.format = function () {
        var s = arguments[0];
        for (var i = 0; i < arguments.length - 1; i++) {
            var reg = new RegExp("\\{" + i + "\\}", "gm");
            s = s.replace(reg, arguments[i + 1]);
        }

        return s;
    }
    function isUnderBootstrap3Container(element) {
        if (element.parents(".bootstrap-4.container").length > 0) {
            return true;
        } else {
            return false;
        }
    }

});

function Ajax(url, data, success, type, async, cache, context, contentType, error, processData) {
    if (typeof processData == "undefined") processData = true;
    if (typeof type == "undefined") type = "post";
    if (typeof async == "undefined") async = true;
    if (typeof cache == "undefined") cache = false;
    if (typeof context == "undefined") context = document.body;
    if (typeof contentType == "undefined") contentType = "application/x-www-form-urlencoded; charset=UTF-8";
    if (typeof error == "undefined")
        error = function(jqXHR, textStatus, errorThrown) {
            var modalInvoker = this;
            if (jqXHR.status === 403) {
                $(modalInvoker).f5Modal({
                    type: 'error',
                    modalContent: resources_Common.emsg_AuthorizationError
                });
            }
            else if (errorThrown === '' || errorThrown == null) {
                $(modalInvoker).f5Modal({
                    type: 'error',
                    modalContent: resources_Common.imsg_Fail
                });
            }
            else {
                $(modalInvoker).f5Modal({
                    type: 'error',
                    modalContent: textStatus + ': ' + errorThrown
                });
            }
        };

    if (type.toUpperCase() === "POST") {

        var antiForgeryToken = GetAntiforgeryToken();

        if (Array.isArray(data)) {
            data.push({ name: "__RequestVerificationToken", value: antiForgeryToken });
        } else if (data instanceof FormData) {
            data.append("__RequestVerificationToken", antiForgeryToken);
        }
        else {
            data["__RequestVerificationToken"] = antiForgeryToken;    
        }
        
        if (contentType === "application/json; charset=utf-8") {
            data = JSON.stringify(data);
        } 
    }
    
    $.ajax({
        type: type,
        url: url,
        processData: processData,
        data: data,
        success: success,
        async: async,
        cache: cache,
        context: context,
        contentType: contentType,
        error: error,
        fail: function () {
            var modalInvoker = this;
            $(modalInvoker).f5Modal({
                type: 'error',
                modalContent: resources_Common.imsg_Fail
            });
        }
    });
}

// messageContainer = string value of DOM-object id(#elementsId) or class (.elementsClassName)
function ProcessAjaxResult(result, messageContainer) {
    var messageContainer = $(messageContainer);
    messageContainer.html("")
                    .removeClass("elementupdate-feedback-success")
                    .removeClass("elementupdate-feedback-error"); // Empty previous results
    messageContainer.html(result.Message);
    if (result.Successful) {
        messageContainer.addClass('elementupdate-feedback-success');
    }
    else {
        messageContainer.addClass('elementupdate-feedback-error');
    }
    messageContainer.show();
    messageContainer.fadeOut(3000);
}

function getInternetExplorerVersion() {
    // Returns the version of Internet Explorer or a -1
    // (indicating the use of another browser).

    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return rv;
}

function ReloadPage() {
    if (getInternetExplorerVersion() === -1) {
        window.location.href = window.location.href.replace(location.hash, "");
    } else {
        window.location.hash = "";
        window.location.reload();
    }
}

function RedirectToHomepage() {
    window.location = SITE_ROOT_LANG;
}

function toggleClass(container, oldClass, newClass) {
    container.removeClass(oldClass);
    container.addClass(newClass);
}

function GetAntiforgeryToken() {
    return $('input[name="__RequestVerificationToken"]').val();
};
(function ($) {
    // Temp. saving the bootstrap modal plugin.
    $.fn.simpleModal = $.fn.modal;

    if (SHOW_COOKIE_CONSENT == '0') {
        window.hasCookieConsent = true;
    } else {
        InitCookieConsentRibbon();
    }

    $(document).ready(function () {
        InitLightbox();
        InitUserForms();
        $(".passwordPage").f5PasswordPage();
        InitBannerElements();
        InitGoogleMaps();
        LoadFacebookElements();
        InitNewsPagination();
        InitLanguagesDropdown();
        InitmMenu();
        InitIpadMenu();
        ScrollMenu();
        InitAudienceTracking();
        InitSpinner();
        InitNewsletterSubscribe();

        if (typeof (APPLICATION_TYPE) !== 'undefined' && APPLICATION_TYPE != null) {
            InitVisitorSessionTimer();
            if (APPLICATION_TYPE == 'shop' || APPLICATION_TYPE == 'shop_plus') {
                $(document).f5GoogleAnalyticsEcommerce();
                $(document).f5Shop();
                $(document).f5LocalStorageCart();
                $(document).f5PopOutCart();
                $(document).f5Wishlist();
                $(document).f5Captcha();
                $(document).f5LoginVisitor();
                $(document).f5Visitor();
                $(document).f5GoogleLogin();
                $(document).f5FacebookLogin();
                $("#checkout-placeholder-container").f5CheckoutInit();
                $(".checkout-state-tracker").f5CheckoutOrderStateTracker({
                    siteRootUrl: SITE_ROOT_LANG
                });

                $(document).f5Shop("updateCartArticleNo", $(document).f5LocalStorageCart("itemCount"));
                $(document).f5ArticleImageZoom();
                $(document).f5ArticleImage();
            }
            if (APPLICATION_TYPE == 'shop_plus') {
                InitSideMenu();
                $('#wrong-login-group-error').ready(
                    function () {
                        $("#wrong-login-group-error").fadeOut(6000);
                    });
            }
        }

        $("body").on("mouseenter mouseleave click", '.infoIcon', function () {
            $(this).popover('toggle');
        });
        if ($("#checkout-confirmed").length) {
            $("#checkout-confirmed").removeClass("hidden");
        }
    });


    $(window).on("load", SetBannerHeight);

    function InitCookieConsentRibbon() {

        if (TRACKING_ENABLED == 1) {
            window.cookieconsent_options = {
                message: resources_Cookies.text_PrivacyConsentUsageInformation,
                dismiss: resources_Cookies.btn_PrivacyConsentAgree,
                learnMore: resources_Cookies.lbl_CookieConsentMoreInfo,
                link: SITE_ROOT_LANG + '/Cookies',
                theme: '/Styles/External/CookieConsent/light-top.css',
                expiryDays: 365,
                markup: [
                    '<div class="cc_banner-wrapper {{containerClasses}} fbp-cookie-consent">',
                    '<div class="cc_banner cc_container cc_container--open row">',
                    '<a href="#null" data-cc-event="click:dismiss" target="_blank" class="cc_btn cc_btn_accept_all">{{options.dismiss}}</a>',

                    '<p class="cc_message">{{options.message}} <a data-cc-if="options.link" target="{{ options.target }}" class="cc_more_info" href="{{options.link || "#null"}}">{{options.learnMore}}</a></p>',

                    '<a class="cc_logo" target="_blank" href="http://silktide.com/cookieconsent">Cookie Consent plugin for the EU cookie law</a>',
                    '</div>',
                    '</div>'
                ]
            };
        } else {
            window.cookieconsent_options = {
                message: new Sanitizer().Sanitize(resources_Cookies.text_CookieConsentUsageInformation),
                dismiss: new Sanitizer().Sanitize(resources_Cookies.btn_CookieConsentOk),
                learnMore: new Sanitizer().Sanitize(resources_Cookies.lbl_CookieConsentMoreInfo),
                link: SITE_ROOT_LANG + '/Cookies',
                theme: '/Styles/External/CookieConsent/light-top.css',
                expiryDays: 365
            };
        }
    }

    function InitLanguagesDropdown() {
        if (typeof CURRENT_LANGUAGE_CODE !== "undefined") {
            $('#userLanguagesInput, #userLanguagesInputMobile').val(CURRENT_LANGUAGE_CODE);
        }

        var redirectToLanguageUrl = function (languageUrlChunk) {
            var url;

            if ($('#redirectToDefault').val() == "true") {
                url = SITE_ROOT + "/" + languageUrlChunk;
            } else {
                var urlChunks = window.location.pathname.split('/');
                var languageChunkIndex = IS_F5_HOSTED == '1' ? 2 : 1;

                if (urlChunks[languageChunkIndex].match('^lang-')) {
                    urlChunks[languageChunkIndex] = languageUrlChunk;
                } else {
                    urlChunks.splice(languageChunkIndex, 0, languageUrlChunk);
                }

                url = urlChunks.join('/');
            }

            window.location.href = url;
        }

        $(".menuDropdown.userLanguages .dropdownContainer div.dropdownOption").on("click", function (e) {
            e.preventDefault();
            e.stopPropagation();

            var langChoice = $(this).data("languagecode");
            var languageUrlChunk = "lang-" + langChoice.split('-')[0];

            redirectToLanguageUrl(languageUrlChunk);
        });

        $('#userLanguagesInputMobile').on("change", function (e) {
            e.preventDefault();
            var languageUrlChunk = "lang-" + $(this).val().split('-')[0];

            redirectToLanguageUrl(languageUrlChunk);
        });
    }

    function InitSideMenu() {
        $("div.sideMenu a.expand").on("click", function (e) {
            e.preventDefault();
            $(this).next("ul").toggleClass("hidden");
            if ($(this).parent("li").hasClass("selected")) {
                $(this).parent("li").removeClass("selected");
            } else {
                $(this).parent("li").addClass("selected");
            }
        });
    }

    function ScrollMenu() {
        $(document).on("scroll", function () {
            if ($(document).scrollTop() > 15) {
                $(".wrapper .page-logo-container").addClass("stick");
            } else {
                $(".wrapper .page-logo-container").removeClass("stick");
            }

        });
    }

    function InitAudienceTracking() {
        $(document).f5AudienceTracking();
    }

    function InitSpinner() {
        $(document).f5Spinner();
    }

    function InitVisitorSessionTimer() {
        if (INIT_VISITOR_SESSION_TIMER == 1) {
            $(document).f5SessionTimer();
        }
    }

    function InitNewsletterSubscribe() {
        $("#subscribeToNewsletter").submit(function (e) {
            e.preventDefault();

            if (!$("#subscribeToNewsletter").validate().form()) {
                return false;
            }

            var email = $("#subscribeToNewsletter #subscriberEmail").val();
            var postData = { "email": email };
            var url = SITE_ROOT + "/sitesystem/SubscribeToNewsletter";
            var success = function (result) {
                if (result.Successful) {
                    $("#subscriberEmail").val("");
                    $("#successful-subscription-success-icon").show().fadeOut(3000);
                } else {
                    $("#successful-subscription-error-icon").show().fadeOut(3000);
                }
            };

            Ajax(url, postData, success, "post");
        });
    }

    function InitNewsPagination() {
        $.each($('div.newsArticle div.pagination'), function () {
            var noOfPages = $(this).find("input[name='noOfPages']").first().val();
            var paginationList = $(this).find("ul").first();
            var newsList = $(this).prev("ul#all-news").first();
            $(this).find("a.disabled, a.active").each(function () {
                $(this).on("click", function (e) {
                    e.preventDefault();
                });
            });
            $(this).find("a.loadPage").each(function () {
                $(this).on("click", function (e) {
                    e.preventDefault();
                    var currentPage = Number($("#curPage").val());
                    var noOfPages = Number($("#noOfPages").val());
                    var paginationAction = $(this).data("pagination-action");
                    var targetPage = getTargetPage(currentPage, noOfPages, paginationAction);
                    $("#curPage").val(targetPage);
                    LoadNewsPage(newsList, paginationList, noOfPages, targetPage);
                });

            });
        });
    }

    function LoadNewsPage(newsList, paginationList, noOfPages, targetPage) {
        targetPage = parseInt(targetPage);
        // Remove all li from ul
        $(paginationList).find("li").each(function () {
            $(this).remove();
        });

        var pagesToLeft = 1;
        var pagesToRight = 1;

        if (targetPage === 1) {
            pagesToLeft = 0;
            pagesToRight = 2;
        }
        else if (targetPage === noOfPages) {
            pagesToLeft = 2;
            pagesToRight = 0;
        }

        // Add li
        $(paginationList).append($("<li />").append($("<a data-pagination-action='first' href='' />").addClass("loadPage fas fa-fast-backward")));
        $(paginationList).append($("<li />").append($("<a data-pagination-action='back' href='' />").addClass("loadPage fas fa-backward")));
        for (var i = 1; i <= noOfPages; i++) {
            if (i == targetPage) {
                $(paginationList).append($("<li />").addClass("active").append($("<a data-pagination-action='" + i + "' href='' />").addClass("active").text(i)));
            }
            else if (i >= targetPage - pagesToLeft && i <= targetPage + pagesToRight) {
                $(paginationList).append($("<li />").append($("<a data-pagination-action='" + i + "' href='' />").addClass("loadPage").text(i)));
            }
        }
        $(paginationList).append($("<li />").append($("<a data-pagination-action='forward' href='' />").addClass("loadPage fas fa-forward")));
        $(paginationList).append($("<li />").append($("<a data-pagination-action='last' href='' />").addClass("loadPage fas fa-fast-forward")));
        // Display news according to currentPage
        $(newsList).find("li").each(function () {
            $(this).addClass("hidden");
        });
        var activeNewsToShow = (targetPage * 20) - 20 + 1;
        var noOfNewsToShow = activeNewsToShow + 20;
        while (activeNewsToShow < noOfNewsToShow) {
            var curNews = $(newsList).find("li:nth-child(" + activeNewsToShow + ")").first();
            if (curNews.length != 0)
                curNews.removeClass("hidden");
            activeNewsToShow++;
        }
        // Reload news pagination according to newly added DOM
        InitNewsPagination();
    }

    function InitGoogleMaps() {
        // Check if script needs to be loaded
        if ($('div.MapsElement').length > 0) {
            LoadGoogleMapsScript("InitMapsElements");
        }
    }

    function InitBannerElements() {
        $.each($('.carousel'), function () {
            LoadBannerElement($(this));
        });

        $(window).on("resize", function () {
            SetBannerHeight();
        });

    }

    function SetBannerHeight() {
        $(".BannerElement").each(function () {
            var maxHeight = 0;
            var self_outer = $(this);

            $('.carousel div img', self_outer).each(function () {
                var self_inner = $(this);
                var hiddenImage = false;
                if ($(self_inner).height() === 0) {
                    hiddenImage = true;
                    $(self_inner).parent().addClass("active");
                }

                if ($(self_inner).height() > maxHeight) {
                    maxHeight = $(self_inner).height();
                }

                if (hiddenImage) {
                    $(self_inner).parent().removeClass("active");
                }
            });
            $('.carousel, .carousel div', self_outer).css({ 'height': (maxHeight) + 'px' });
        });
    };

    function InitLightbox() {
        if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) {
            jQuery(function ($) {
                $("body").on('click', "a[rel^='lightbox']", function (e) {
                    e.preventDefault();
                    $(this).slimbox();
                    $(this).trigger("click");
                });
            });
        }
    }

    function InitUserForms() {
        $("body").on('blur', "[id^='form-row-']", function (e) {
            if ($(this).hasClass('mandatory')) {
                if ($(this).val() == "")
                    $(this).addClass('validationError');
                else
                    $(this).removeClass('validationError');
            }
        });
        $("body").on('focus', "[id^='form-row-']", function (e) {
            $(this).removeClass('validationError');
        });
        $("body").on('click', '.submitUserForm', function (e) {
            e.preventDefault();
            e.stopPropagation();
            if (!$(this).closest('.userForm').validate().form())
                return;
            var form = $(this).closest('.userForm');
            Ajax(
                SITE_ROOT + '/sitesystem/SubmitForm', // Url
                form.serializeArray(), // Data
                function (result) {
                    if (result.Successful) {
                        form.find("input[type=text]").val("");
                        form.find("textarea").val("");
                        $("#form-success-message-" + result.FormId).show().fadeOut(6000);
                    }
                    else {
                        for (var error in result.Errors) {
                            $('#form-row-' + result.Errors[error]).addClass('validationError');
                        }
                        $("#form-error-message-" + result.FormId).show().fadeOut(6000);
                    }
                }, // Success
                "post", // Method
                true // Async
            );
        });
    }

    function InitmMenu() {

        if (typeof $("#mobile-menu")[0] != "undefined") {
            $("#mobile-menu").mmenu({
                slidingSubmenus: false,
                counters: false,
                extensions: ["border-full", "fx-menu-zoom", "pagedim-black"],
                "setSelected": {
                    "hover": true
                },
                "navbar": {
                    "title": "",
                    "titleLink": "parent"
                }
            }, {
                    offCanvas: {
                        pageSelector: "#mobileContainer"
                    }
                });

            var mobileMenu = $("#mobile-menu").data("mmenu");

            $("#navbar-toggle-btn").on("click", function (e) {
                e.preventDefault();

                var display = $(".mm-menu.mm-border-full.mm-offcanvas").css("display");
                var scrollFromTop = $(window).scrollTop();
                if (display === "none") {
                    if (hasToolbar()) {
                        $(".navbar-mobile").removeClass("toolbar-open-position toolbar-minimized-position");
                    }
                    $(".navbar-mobile").css("top", scrollFromTop);
                    $(".mm-menu.mm-border-full.mm-offcanvas").css("display", "block");
                }
                mobileMenu.open();
            });

            mobileMenu.bind("closed", function () {
                $(".mm-menu.mm-border-full.mm-offcanvas").css("display", "none");
                var mobileNavbar = $(".navbar-mobile");
                if (hasToolbar()) {
                    if (isToolbarMinimized()) {
                        toggleClass(mobileNavbar, "toolbar-open-position", "toolbar-minimized-position");
                    } else {
                        toggleClass(mobileNavbar, "toolbar-minimized-position", "toolbar-open-position");
                    }
                }
                $(".navbar-mobile").css("top", "");
            });

            $(window).on("resize", function () {
                $(".mm-menu.mm-offcanvas.mm-current").css("display", "none");
                mobileMenu.close();
            });

            var panelToOpen = $("li.mm-selected").closest("div.mm-panel").attr("id");
            if (typeof panelToOpen === "undefined") {
                panelToOpen = "mm-0";
            }
            mobileMenu.openPanel($("#" + panelToOpen));
            $.each($(".heading-only"), function () {
                var hrefID = $(this).prev().attr("href");
                $(this).attr("href", hrefID);
                $(this).prev().addClass("left-border-none");
            })

            function hasToolbar() {
                return $("#admin-toolbar-wrapper").length ? true : false;
            }

            function isToolbarMinimized() {
                return $("body").hasClass("admin-toolbar-closed");
            }
        }
    }

    function InitIpadMenu() {

        $('li.nav-item.hasSubmenu').on('touchstart', function (e) {
            if ($(this).hasClass('hover')) {
                return true;
            } else {
                $('li.nav-item').not(this).removeClass('hover');
                $(this).addClass('hover').parents('li.nav-item').addClass('hover');
                e.preventDefault();
                return false;
            }
        });
    }

})(jQuery);

function LoadFacebookElements() {
    if ($(".fb-page, .fbBox, .fbLike").length > 0) {
        if (typeof (FB) != 'undefined') {
            FB.XFBML.parse();
        } else {
            var secure = (window.location.protocol === 'https:');
            var protocol = "http://";
            if (secure)
                protocol = "https://";
            var locale = "sv_SE";
            if (COUNTRY_CODE == "NO")
                locale = "nb_NO";
            else if (COUNTRY_CODE == "DK")
                locale = "da_DK";
            else if (COUNTRY_CODE == "FI")
                locale = "fi_FI";
            else if (COUNTRY_CODE == "NL")
                locale = "nl_NL";
            $.getScript(protocol + "connect.facebook.net/" + locale + "/sdk.js", function () {
                FB.init({ status: true, cookie: true, xfbml: true, version: "v2.7" });
            });
        }
    }
}

function LoadBannerElement(element) {
    element.carousel();

    function changeSlide(e) {
        e.preventDefault();
        var slotNumber = $(e.target)[0].dataset.slotno - 1;
        element.carousel(slotNumber);
    }

    element.next(".BannerThumbs").find(".bannerSlotThumbnail").each(function () {
        $(this).on("click", function (e) {
            changeSlide(e);
        });
    });

    element.find(".carousel-indicators").children().each(function () {
        $(this).on("click", function (e) {
            changeSlide(e);
        });
    });

    var navigation = element.children(".navigation-arrows").first();
    navigation.find("a.left").on("click", function (e) {
        e.preventDefault();
        element.carousel('prev');
    });

    navigation.find("a.right").on("click", function (e) {
        e.preventDefault();
        element.carousel('next');
    });

    element.next(".BannerThumbs").on("mouseover", function (e) {
        element.carousel('pause');
    });
    element.next(".BannerThumbs").on("mouseout", function (e) {
        element.carousel('cycle');
    });

}

// Maps element related functions

function InitMapsElements() {
    $.each($('div.activeMap'), function () {
        LoadMapsElement($(this));
    });
    $.each($('div.editableActiveMap'), function () {
        LoadMapsElement($(this), true);
    });
}

function LoadGoogleMapsScript(callback) {
    var script = $("<script />");
    script.attr("type", "text/javascript");

    script.attr("src", "https://maps.googleapis.com/maps/api/js?key=" + GOOGLE_MAPS_API_KEY + "&callback=" + callback);

    script.attr("id", "googleMapsScript");
    $("body").append(script);
}

function LoadMapsElement(element, editMode, isSearching, enableStreetView) {
    var elementWidth = element.width();
    var elementHeight = elementWidth * 75 / 100;
    element.not("div.GoogleMapsElementAdmin").height(elementHeight);

    if (typeof editMode === 'undefined')
        editMode = false;
    if (typeof isSearching === 'undefined')
        isSearching = false;
    if (typeof enableStreetView === 'undefined')
        enableStreetView = true;
    var longitudeObj = $(element).find("input[name='longitude']").first();
    var latitudeObj = $(element).find("input[name='latitude']").first();
    var mapTypeObj = $(element).find("input[name='mapType']").first();
    var longitude = longitudeObj.val();
    var latitude = latitudeObj.val();
    var zoomObject = $(element).find("input[name='zoom']").first();
    var zoom = 0;
    if (zoomObject.val().length > 0) {
        zoom = parseInt(zoomObject.val());
    }
    var text = $(element).find("input[name='text']").first().val();
    var mapType = mapTypeObj.val();
    var mapContainer = $(element).find("div.map").first()[0];
    var mapTypeId = google.maps.MapTypeId.ROADMAP;

    switch (mapType) {
        case "satellite":
            mapTypeId = google.maps.MapTypeId.SATELLITE;
            break;
        case "terrain":
            mapTypeId = google.maps.MapTypeId.TERRAIN;
            break;
        case "hybrid":
            mapTypeId = google.maps.MapTypeId.HYBRID;
            break;
    }
    var myOptions = {
        center: new google.maps.LatLng(latitude, longitude),
        zoom: zoom,
        mapTypeId: mapTypeId,
        streetViewControl: enableStreetView
    };
    var map = new google.maps.Map(mapContainer,
        myOptions);
    google.maps.event.addDomListener(window, 'resize', function () {
        var currCenter = map.getCenter();
        google.maps.event.trigger(map, 'resize');
        map.setCenter(currCenter);
    });
    if (editMode) {
        google.maps.event.addListener(map, 'bounds_changed', function () {
            var center = map.getBounds().getCenter();
            longitudeObj.val(center.lng());
            latitudeObj.val(center.lat());
            zoomObject.val(map.getZoom());
        });
        google.maps.event.addListener(map, 'maptypeid_changed', function () {
            mapTypeObj.val(map.getMapTypeId());
        });
    }

    // Place marker
    var contentString = '<div id="content">' +
        '<div id="siteNotice">' +
        '</div>' + '<p>' + text + '</p></div>';
    var infowindow = new google.maps.InfoWindow({
        content: contentString
    });
    var geocoder = new google.maps.Geocoder();
    var address = $(element).find("input[name='address']").first().val();

    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {

            // auto center
            if (latitude == '' && longitude == '' && !isSearching) {
                map.setCenter(results[0].geometry.location);
            }

            // auto fit
            if ((latitude == '' && longitude == '' && zoom == 0) || isSearching) {
                var sw = results[0].geometry.viewport.getSouthWest();
                var ne = results[0].geometry.viewport.getNorthEast();
                var autofitBounds = new google.maps.LatLngBounds(sw, ne);
                map.fitBounds(autofitBounds);
            }

            var marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location
            });
            google.maps.event.addListener(marker, 'click', function () {
                infowindow.open(map, marker);
            });

        } else {
            // if goecoder is unaware of location and it's not explicitly configured, show whole world
            if (latitude == '' && longitude == '') {
                map.setCenter(new google.maps.LatLng(0, 0));
                map.setZoom(1);
            }
        }
    });
}

function getTargetPage(currentPage, noOfPages, paginationAction) {
    var pageResult = 1;

    if (paginationAction === "back") {
        if (currentPage > 1) {
            pageResult = currentPage - 1;
        }
    } else if (paginationAction === "forward") {
        if (currentPage < noOfPages) {
            pageResult = currentPage + 1;
        } else {
            pageResult = noOfPages;
        }
    } else if (paginationAction === "first") {
        pageResult = 1;
    } else if (paginationAction === "last") {
        pageResult = noOfPages;
    } else if (paginationAction > noOfPages) {
        pageResult = noOfPages;
    } else if (paginationAction < 1) {
        pageResult = 1;
    } else {
        pageResult = paginationAction;
    }

    return pageResult;
}

function initializePaging(elementForEvent, curPageHolder, loadingFun, successFun) {
    elementForEvent.on("click", function (e) {
        e.preventDefault();

        var currentPage = Number(curPageHolder.val());
        var noOfPages = Number($(this).closest("div.pagination").data("no-of-pages"));
        var paginationAction = $(this).data("pagination-action");

        curPageHolder.val(getTargetPage(currentPage, noOfPages, paginationAction));

        loadingFun(successFun);
    });
}

String.prototype.format = function () {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function (match, number) {
        return typeof args[number] != 'undefined'
            ? args[number]
            : match
            ;
    });
};;
(function ($) {
    $.widget("f5.f5Shop", {
        options: {
        },
        _create: function () {
            var f5ShopObj = this;

            // Hide search and login
            $("body").on("click", function (e) {
                var searchDropdownClicked = $(e.target).closest('#search-container');
                var loginDropdownClicked = $(e.target).closest('.accountLogout');

                if (searchDropdownClicked.length == 0 && loginDropdownClicked.length == 0) {
                    $("li.searchFor div.dropdown-menu").hide();
                    $("li.accountLogout div.dropdown-menu").hide();
                }

            });
            $("body").on("click", ".article-uploaded-file-visitor-link", function(e) {
                e.preventDefault();
                e.stopPropagation();
                var url = SITE_ROOT + "/f5download?id=" + $(this).data("file-id") + "&shardName=" + SHARD_NAME;
                $("#article-file-visitor-download")[0].src = url;
            });
            $(".articleQuantity").mask("9?9999", { placeholder: "" });
            $("body").on("click", ".buyBtn", function (e) {
                e.preventDefault();
                var buyButton = this;

                if (!$('#articleDetailsForm').length || $('#articleDetailsForm').valid()) {

                    if ($(this).hasClass("disabled"))
                        return;
                    $(".buyBtn").addClass("disabled");
                    var articleId = $(buyButton).data("article-id"),
                        amountInput = $("#article-quantity-" + articleId),
                        amount = 1,
                        articleTrackingNo = $(buyButton).data("article-tracking-number"),
                        additionalInformation = $("#article-additional-information-" + articleId).length ? $("#article-additional-information-" + articleId).val().trim() : '';

                    if (amountInput.length > 0) {
                        if (!isNumber(amountInput.val())) { // If amountinput is invalid, e.g. empty, we should not continue with adding article to cart
                            $(".buyBtn").removeClass("disabled");
                            return;
                        }
                        amount = parseInt(amountInput.val());
                    }

                    Ajax(
                        SITE_ROOT + '/Shop/CartAddArticle', // Url
                        {
                            cart: $(document).f5LocalStorageCart("getCart"),
                            articleId: articleId,
                            amount: amount,
                            additionalInformation: additionalInformation
                        }, // Data
                        function (result) {
                            if (result.Successful) {
                                var delayTime = 0;
                                if (TRACKING_ENABLED == 1) {
                                    $(document).f5AudienceTracking("addToCart", articleTrackingNo);
                                }
                                if (SLIDE_TO_TOP_AFTER_PURCHASE == 1) {
                                    $("html, body").animate({ scrollTop: 0 }, 400);
                                    delayTime = 500;
                                }
                                $(".toShoppingCarta:visible .cart-no-articles").delay(delayTime).effect("pulsate", { times: 2 }, 500);
                                var existingCartItemIndex = $(document).f5LocalStorageCart("getItemIndex", articleId);
                                if (existingCartItemIndex > -1) {
                                    var newAmount = amount + $(document).f5LocalStorageCart("getItemAmount", articleId);
                                    $(document).f5LocalStorageCart("updateItem", existingCartItemIndex, newAmount, additionalInformation);
                                } else {
                                    var name = $(buyButton).data("article-name"),
                                        price = $(buyButton).data("article-price").replace(',', '.'),
                                        imageLink = $(buyButton).data("article-image-link"),
                                        url = $(buyButton).data("article-url");
                                    $(document).f5LocalStorageCart("addNewItem", articleId, amount, additionalInformation, name, url, price, imageLink);
                                }
                                f5ShopObj.updateCartArticleNo($(document).f5LocalStorageCart("itemCount"));
                                $(document).f5PopOutCart("populateCart");
                                $(document).f5PopOutCart("displayCart");
                            } else {
                                var modalInvoker = this;
                                $(modalInvoker).f5Modal({
                                    type: 'error',
                                    modalContent: resources_E_Article_Site.imsg_QuantityExceedsStockBalance
                                });
                            }
                        }, // Success
                        "post", // Method
                        false, // Async
                        false, // Cache
                        undefined,
                        "application/json; charset=utf-8" 
                    );
                    $(".buyBtn").removeClass("disabled");
                }
            });
            $("body").on("click", "div.addThisNoClick a", function (e) {
                e.preventDefault();

                var modalInvoker = this;
                $(modalInvoker).f5Modal({
                    type: 'info',
                    modalContent: resources_Site.imsg_OnlyPublishedVersion
                });
            });

            $("#cartWrapper").show();

            $(".menuDropdown.userVatOptions .dropdownContainer div.dropdownOption").on("click", function (e) {
                e.preventDefault();
                e.stopPropagation();

                var vatIsIncluded = $(this).data("vatincluded");

                Ajax(
                    SITE_ROOT + '/Shop/SetUserVatOption/' + vatIsIncluded, // Url
                    {

                    }, // Data
                    function (result) {
                        ReloadPage();
                    }, // Success
                    "post", // Method
                    false, // Async
                    false // Cache
                );

            });

            $("#userVatOptionsInputMobile").on("change", function (e) {
                var vatIsIncluded = $(this).val();
                Ajax(
                    SITE_ROOT + '/Shop/SetUserVatOption/' + vatIsIncluded, // Url
                    {

                    }, // Data
                    function (result) {
                        ReloadPage();
                    }, // Success
                    "post", // Method
                    false, // Async
                    false // Cache
                );
            });

            $("li.searchFor a.dropdown-toggle").on("click", function (e) {
                e.preventDefault();
                if ($("li.accountLogout div.dropdown-menu").is(':visible')) {
                    $("li.accountLogout div.dropdown-menu").hide();
                }
                if ($("li.searchFor").hasClass("open")) {
                    $("li.searchFor").removeClass("open");
                    $("li.searchFor div.dropdown-menu").hide();
                } else {
                    $("li.accountLogout").removeClass("open");
                    $("li.searchFor div.dropdown-menu").toggle();
                    $("li.searchFor").addClass("open");
                    $("input#product-search").trigger("focus");
                }
            });

            $("li.accountLogout a.dropdown-toggle").on("click", function (e) {
                e.preventDefault();
                if ($("li.searchFor div.dropdown-menu").is(':visible')) {
                    $("li.searchFor div.dropdown-menu").hide();
                }
                if ($("li.accountLogout").hasClass("open")) {
                    $("li.accountLogout").removeClass("open");
                    $("li.accountLogout div.dropdown-menu").hide();
                } else {
                    $("li.searchFor").removeClass("open");
                    $("li.accountLogout div.dropdown-menu").toggle();
                    $("li.accountLogout").addClass("open");
                }
            });

            $("li.accountLogout a.dropdown-toggle.no").on("click", function (e) {
                e.preventDefault();

                var modalInvoker = this;
                $(modalInvoker).f5Modal({
                    type: 'info',
                    modalContent: resources_F5jsadmin.Site_NoCustomerAccountLogin_Text
                });
            });            

            $("li#search-container a#search-show-all").on("click", function (e) {
                e.preventDefault();
                var searchText = $(this).closest("li#search-container").find("input#product-search").val();
                window.location.href = SITE_ROOT_LANG + "/sitesystem/search?search=" + searchText;
            });

            $("div#search-page-container div.pagination a.active, div#search-page-container div.pagination a.disabled").on("click", function (e) {
                e.preventDefault();
            });

            $("form.searchForm input#submit-search-form").on("click", function (e) {
                e.preventDefault();
                if (!$("form.searchForm input[name=search]").val())
                    return;
                $("form.searchForm").trigger("submit");
            });

            $("ul.searchResults li.showAll").hide(); // Show more should be hidden by default
            $("li#search-container input#product-search").on("keypress", function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    return;
                }
            });

            var delay = (function () {
                var timer = 0;
                return function (callback, ms) {
                    clearTimeout(timer);
                    timer = setTimeout(callback, ms);
                };
            })();

            $("li#search-container input#product-search").on("keyup", function (e) {
                if ($(this).val().length > 1) {
                    var value = $(this).val();
                    delay(function () {
                        Ajax(
                            SITE_ROOT_LANG + '/Shop/SearchArticlesLimitedResult', // Url
                            {
                                term: value,
                                maxNoOfArticles: 6,
                                orderBy: "no",
                                articleHiddenStatus: 'Visible',
                                translatedResult: true
                            }, // Data
                            function (result) {
                                $("ul.searchResults li.article").remove();
                                if (result.length > 5) {
                                    $("ul.searchResults li.showAll").show();
                                }
                                else {
                                    $("ul.searchResults li.showAll").hide();
                                }
                                for (var i = 0; i < result.length && i < 5; i++) {
                                    var article = result[i];
                                    var imageUrl = article.ImageUrl;
                                    var imgTag = "";
                                    if (imageUrl != "") {
                                        imgTag = $("<img />").attr("alt", result.Name).attr("src", imageUrl);
                                    }
                                    var articleNo = article.HideArticleNo ? "" : $("<span class='searchArtNr' />").text(resources_Site.ArticleSearch_lbl_ArticleNo + " " + article.ArticleNo);
                                    var articleLi = $("<li class='article' />").append(
                                        $("<a class='clearfix' />").attr("title", article.Name).attr("href", SITE_ROOT_LANG + "/shop/product/" + article.Slug).append(
                                            $("<div class='searchProdImg' />").append(imgTag))
                                            .append(
                                                $("<div class='searchProdName' />").text(article.Name).append($("<br />")).append(articleNo)
                                            )
                                    );
                                    $("ul.searchResults").prepend(articleLi);
                                }
                            }, // Success
                            "get", // Method
                            false, // Async
                            false // Cache
                        );
                        if (TRACKING_ENABLED == 1) {
                            $(document).f5AudienceTracking("search", value);
                        }
                    }, 400);
                } else {
                    $("ul.searchResults li.article").remove();
                    $("ul.searchResults li.showAll").hide();
                }
            });

            $('#articleDetailsForm').validate();
            $("textarea").on("keydown", function(e) { 
                $(this).height(0).height(this.scrollHeight);
            });

            if ($('#articleVariantsArea').length > 0) {
                $.getScript("/Scripts/External/jquery.cascadingdropdown.js", function () {

                    if (variantsHierarchyDepth == 1) {
                        $('#articleVariantsArea').cascadingDropdown({
                            selectBoxes: [
                                {
                                    selector: '.articleVariant1',
                                    source: f5ShopObj._getFirstLevel(variantsHierarchy)
                                }
                            ],
                            onReady: function () {
                                f5ShopObj._setCurrentArticleVariants();
                            }
                        });
                        $('.articleVariant1').on("change", function () {
                            $(".buyBtn").addClass("disabled");
                            window.location.href = SITE_ROOT_LANG + '/shop/product/' + f5ShopObj._getArticleSlug() + location.search;
                        });
                    } else if (variantsHierarchyDepth == 2) {
                        $('#articleVariantsArea').cascadingDropdown({
                            selectBoxes: [
                                {
                                    selector: '.articleVariant1',
                                    source: f5ShopObj._getFirstLevel(variantsHierarchy)
                                },
                                {
                                    selector: '.articleVariant2',
                                    requires: ['.articleVariant1'],
                                    source: function (request, response) { response(f5ShopObj._getSecondLevel(variantsHierarchy, request.articleVariant1)); }
                                }
                            ],
                            onReady: function () {
                                f5ShopObj._setCurrentArticleVariants();
                            }
                        });
                        $('.articleVariant2').on("change", function () {
                            $(".buyBtn").addClass("disabled");
                            window.location.href = SITE_ROOT_LANG + '/shop/product/' + f5ShopObj._getArticleSlug() + location.search;
                        });
                    } else if (variantsHierarchyDepth == 3) {
                        $('#articleVariantsArea').cascadingDropdown({
                            selectBoxes: [
                                {
                                    selector: '.articleVariant1',
                                    source: f5ShopObj._getFirstLevel(variantsHierarchy)
                                },
                                {
                                    selector: '.articleVariant2',
                                    requires: ['.articleVariant1'],
                                    source: function (request, response) { response(f5ShopObj._getSecondLevel(variantsHierarchy, request.articleVariant1)); }
                                },
                                {
                                    selector: '.articleVariant3',
                                    requires: ['.articleVariant1', '.articleVariant2'],
                                    requireAll: true,
                                    source: function (request, response) { response(f5ShopObj._getThirdLevel(variantsHierarchy, request.articleVariant1, request.articleVariant2)); }
                                }
                            ],
                            onReady: function () {
                                f5ShopObj._setCurrentArticleVariants();
                            },
                            onChange: function (event, value, requiredValues) {
                                if (event.target.name == 'articleVariant1') {
                                    $('select[name="articleVariant3"]').val('');
                                }
                            }
                        });
                        $('.articleVariant3').on("change", function () {
                            $(".buyBtn").addClass("disabled");
                            window.location.href = SITE_ROOT_LANG + '/shop/product/' + f5ShopObj._getArticleSlug() + location.search;
                        });
                    };
                });
            }

            // INitializing paging
            initializePaging(
                $("#search-page-container .loadPage"),
                $("#curPage"),
                function () {
                    window.location.href = SITE_ROOT_LANG + "/sitesystem/search?search=" + $(".searchForm .searchFormTextInput").val() + "&pageNo=" + $("#curPage").val();
                },
                null
            );
        },
        updateCartArticleNo: function (data) {
            $(".cart-no-articles").html(data);
            if (data == 1) {
                $(".cart-no-articlestext").text(resources_Site.text_Cart_Article);
            } else {
                $(".cart-no-articlestext").text(resources_Site.text_Cart_Articles);
            }
        },
        destroy: function () {
            $.Widget.prototype.destroy.call(this);
        },
        _getFirstLevel: function (variantsHierarchy) {
            return $.map(variantsHierarchy, function (item) {
                return {
                    'label': item.Value,
                    'value': item.Id
                };
            });
        },
        
        _getSecondLevel: function (variantsHierarchy, firstLevelId) {
            var l1 = $.grep(variantsHierarchy, function(element) {
                    return element.Id == firstLevelId;
                }
                )[0];
            
            if (l1 != undefined) {
                return $.map(l1.Childs, function(item) {
                    return {
                        'label': item.Value,
                        'value': item.Id
                    };
                });
            }
        },
     
        _getThirdLevel : function(variantsHierarchy, firstLevelId, secondLevelId) {
                var l1 = $.grep(variantsHierarchy, function(element) {
                    return element.Id == firstLevelId;
                }
                )[0];

            if (l1 != undefined) {
                var l2 = $.grep(l1.Childs, function(element) {
                    return element.Id == secondLevelId;
                })[0];
                
                if (l2 != undefined) {
                    return $.map(l2.Childs, function(item) {
                        return {
                            'label': item.Value,
                            'value': item.Id
                        };
                    });
                }
            }
        },
        
        _setCurrentArticleVariants: function() {
            $('.articleVariant1').val(currentArticleVariants[0].Id);

            if (variantsHierarchyDepth > 1) {
                $('.articleVariant1').trigger('change');
                $('.articleVariant2').val(currentArticleVariants[1].Id);

                if (variantsHierarchyDepth > 2) {
                    $('.articleVariant2').trigger('change');
                    $('.articleVariant3').val(currentArticleVariants[2].Id);
                }
            }
        },
        
        _getArticleSlug: function () {
            var item = $.grep(variantsHierarchy, function(e) {
                return e.Id == $('.articleVariant1').val();
            })[0];
            if (variantsHierarchyDepth > 1) {
                item = $.grep(
                    item.Childs,
                    function(e) {
                        return e.Id == $('.articleVariant2').val();
                    })[0];
                if (variantsHierarchyDepth > 2) {
                    item = $.grep(
                        item.Childs,
                        function(e) {
                            return e.Id == $('.articleVariant3').val();
                        })[0];
                }
            }
            return item.ArticleSlug;
        }

    });

    function isNumber(n) {
        return !isNaN(parseFloat(n)) && isFinite(n);
    }
})(jQuery);;
(function ($) {
    $(document).ready(function () {
        $(window).on("scroll", function () {
            if ($(window).scrollTop() > 300) {
                $("#backToTop").addClass('show');
            } else {
                $("#backToTop").removeClass('show');
            }
        });

        $("#backToTop").on('click', function (e) {
            e.preventDefault();
            $('html, body').animate({ scrollTop: 0 }, '300');
        });
    });
})(jQuery);
;
(function ($) {
    $.widget("f5.f5LocalStorageCart",
        {
            options: {
                cartName: "cartArticles"
            },
            itemCount: function () {
                var f5Shop = this;
                var count = 0;
                var cartItems = f5Shop._getItemsFromLocalStorage();

                if (cartItems) {
                    for (var i = 0; i < cartItems.length; i++) {
                        count += cartItems[i].quantity;
                    }
                }
                return count;
            },
            getCartTotal: function () {
                var f5Shop = this;
                var total = 0;
                var cartItems = f5Shop._getItemsFromLocalStorage();

                if (cartItems) {
                    for (var i = 0; i < cartItems.length; i++) {
                        total += parseFloat(cartItems[i].quantity) * parseFloat(cartItems[i].price);
                    }
                }
                return total;
            },
            addNewItem: function (articleId, quantity, additionalInformation, name, url, price, imageLink) {
                var f5Shop = this;
                var cartItems = f5Shop._getItemsFromLocalStorage();
                var cartItem = {
                    'articleId': articleId,
                    'quantity': quantity,
                    'additionalInformation': additionalInformation,
                    'name': name,
                    'url': url,
                    'price': price,
                    'imageLink': imageLink
                };
                cartItems.push(cartItem);
                f5Shop._saveItemsToLocalStorage(cartItems);
            },
            updateItem: function (itemIndex, quantity, additionalInformation) {
                if (quantity < 0) {
                    return;
                }
                var f5Shop = this;
                var cartItems = f5Shop._getItemsFromLocalStorage();
                cartItems[itemIndex].quantity = quantity;
                cartItems[itemIndex].additionalInformation = additionalInformation;
                f5Shop._saveItemsToLocalStorage(cartItems);
            },
            updateItemQuantity: function (articleId, quantity) {
                if (quantity < 0) {
                    return;
                }
                var f5Shop = this;

                var itemIndex = f5Shop.getItemIndex(articleId);
                if (itemIndex < 0) {
                    return;
                }

                var cartItems = f5Shop._getItemsFromLocalStorage();
                cartItems[itemIndex].quantity = quantity;
                f5Shop._saveItemsToLocalStorage(cartItems);
            },
            deleteItem: function (articleId) {
                var f5Shop = this;

                var itemIndex = f5Shop.getItemIndex(articleId);
                if (itemIndex < 0) {
                    return;
                }

                var cartItems = f5Shop._getItemsFromLocalStorage();
                cartItems.splice(itemIndex, 1);
                f5Shop._saveItemsToLocalStorage(cartItems);
            },
            getItemAmount: function (articleId) {
                var f5Shop = this;

                var itemIndex = f5Shop.getItemIndex(articleId);
                if (itemIndex < 0) {
                    return 0;
                }

                var cartItems = f5Shop._getItemsFromLocalStorage();
                if (typeof cartItems[itemIndex].quantity === 'undefined') {
                    return 0;
                } else {
                    return cartItems[itemIndex].quantity;
                }
            },
            getItemIndex: function (articleId) {
                var f5Shop = this;
                var itemIndex = -1;
                var cartItems = f5Shop._getItemsFromLocalStorage();

                $.each(cartItems,
                    function (index, value) {
                        if (value.articleId === articleId) {
                            itemIndex = index;
                        }
                    });

                return itemIndex;
            },
            emptyCart: function () {
                var f5Shop = this;
                f5Shop._removeItemsFromCart(f5Shop.options.cartName);
            },
            getCart: function () {
                var f5Shop = this;
                var cartItems = f5Shop._getItemsFromLocalStorage();
                var cartArticles = [];
                for (var i = 0; i < cartItems.length; i++) {
                    cartArticles.push({
                        'ArticleId': cartItems[i].articleId,
                        'Quantity': cartItems[i].quantity,
                        'AdditionalInformation': cartItems[i].additionalInformation,
                        'Price': cartItems[i].price,
                        'Name': cartItems[i].name,
                        'Url': cartItems[i].url,
                        'ImageLink': cartItems[i].imageLink
                    });
                }
                return { 'CartArticles': cartArticles };
            },
            _saveItemsToLocalStorage: function (cartItems) {
                var f5Shop = this;
                localStorage.setItem(
                    f5Shop.options.cartName,
                    JSON.stringify(cartItems)
                );
            },
            _getItemsFromLocalStorage: function () {
                var f5Shop = this;
                if (localStorage.getItem(f5Shop.options.cartName)) {
                    return JSON.parse(localStorage.getItem(f5Shop.options.cartName));
                }
                else {
                    return [];
                }
            },
            _removeItemsFromCart: function () {
                var f5Shop = this;
                localStorage.removeItem(f5Shop.options.cartName);
            },
            _create: function () {
                if ($('#checkout-confirmed').length) {
                    this.emptyCart();
                }
            }
        });
})(jQuery);;
(function ($) {
    $.widget("f5.f5GoogleAnalyticsEcommerce",
        {
            options: {
            },
            _create: function () {

                if ($("#checkout-confirmed").length && typeof ga !== "undefined") {
                    ga("require", "ecommerce");
                    //ga("ecommerce:clear");
                    ga("ecommerce:addTransaction", {
                        "id": $("#completed-order-data").data("order-number"),
                        "revenue": $("#completed-order-data").data("revenue"),
                        "shipping": $("#completed-order-data").data("shipping"),
                        "tax": $("#completed-order-data").data("tax")
                    });
                    $(".completed-order-item").each(function (index) {
                        ga("ecommerce:addItem", {
                            "id": $(this).data("id"),
                            "name": $(this).data("name"),
                            "price": $(this).data("price"),
                            "quantity": $(this).data("quantity")
                        });
                    });
                    ga('ecommerce:send');
                }
            }
        });
})(jQuery);;
(function ($) {
    $.widget("f5.f5PopOutCart",
    {
        _create() {
            var f5PopOutCart = this;

            $('.checkout-container .shopping-cart-hover').each(function () {
                var delay = $(this).index() * 10 + 'ms';
                $(this).css({
                    '-webkit-transition-delay': delay,
                    '-moz-transition-delay': delay,
                    '-o-transition-delay': delay,
                    'transition-delay': delay
                });
            });

            // TOP CART
            $('.checkout-container #shopping-cart-icon').hover(function (e) {
                f5PopOutCart.populateCart();
                $(".checkout-container .shopping-cart-hover").stop(true, true).addClass("active");
            }, function () {
                $(".checkout-container .shopping-cart-hover").stop(true, true).removeClass("active");
            });

            $('.checkout-container .shopping-cart-hover').hover(function (e) {
                $(".checkout-container .shopping-cart-hover").stop(true, true).addClass("active");
            }, function () {
                $(".checkout-container .shopping-cart-hover").stop(true, true).removeClass("active");
            });

            // BOTTOM CART
            $('#cartWrapper').hover(function (e) {
                f5PopOutCart.populateCart();
                $("#cartWrapper .shopping-cart-hover").stop(true, true).addClass("active");
            }, function () {
                $("#cartWrapper .shopping-cart-hover").stop(true, true).removeClass("active");
            });

            $('#cartWrapper .shopping-cart-hover').hover(function (e) {
                $("#cartWrapper .shopping-cart-hover").stop(true, true).addClass("active");
            }, function () {
                $("#cartWrapper .shopping-cart-hover").stop(true, true).removeClass("active");
            });

            $(document).on("click", ".increase-amount", function (e) {
                e.preventDefault();
                e.stopPropagation();

                var articleId = $(this).closest("li").data("article-id");
                var newArticleQuantity = $(this).closest("li").data("quantity") + 1;

                $(document).f5LocalStorageCart("updateItemQuantity", articleId, newArticleQuantity);

                var newTotal = $(document).f5LocalStorageCart("getCartTotal");
                var newArticleCount = $(document).f5LocalStorageCart("getItemAmount", articleId);
                var newItemTotalCount = $(document).f5LocalStorageCart("itemCount");

                $(this).closest("li").find("span.item-quantity").html(newArticleCount + " x ");
                $(this).closest("li").data("quantity", newArticleCount);
                $(".cartTotal").html(f5PopOutCart._displayAmount(newTotal));

                $(document).f5Shop("updateCartArticleNo", newItemTotalCount);
            });

            $(document).on("click", ".decrease-amount", function (e) {
                e.preventDefault();
                e.stopPropagation();

                var articleId = $(this).closest("li").data("article-id");
                var newArticleQuantity = $(this).closest("li").data("quantity") - 1;

                if (newArticleQuantity < 1) {
                    $(document).f5LocalStorageCart("deleteItem", articleId);
                } else {
                    $(document).f5LocalStorageCart("updateItemQuantity", articleId, newArticleQuantity);
                }

                var newTotal = $(document).f5LocalStorageCart("getCartTotal");
                var newArticleCount = $(document).f5LocalStorageCart("getItemAmount", articleId);
                var newItemTotalCount = $(document).f5LocalStorageCart("itemCount");

                if (newArticleQuantity < 1) {
                    $(this).closest("li").remove();
                } else {
                    $(this).closest("li").find("span.item-quantity").html(newArticleCount + " x ");
                    $(this).closest("li").data("quantity", newArticleCount);
                }

                $(".cartTotal").html(f5PopOutCart._displayAmount(newTotal));

                $(document).f5Shop("updateCartArticleNo", newItemTotalCount);
            });

            $(document).on("click", ".remove-item", function (e) {
                e.preventDefault();
                e.stopPropagation();

                var articleId = $(this).closest("li").data("article-id");
                $(document).f5LocalStorageCart("deleteItem", articleId);
                
                var newItemTotalCount = $(document).f5LocalStorageCart("itemCount");

                $(this).closest("li").remove();

                $(document).f5Shop("updateCartArticleNo", newItemTotalCount);

                var newTotal = $(document).f5LocalStorageCart("getCartTotal");
                $(".cartTotal").html(f5PopOutCart._displayAmount(newTotal));
            });

            f5PopOutCart.populateCart();
        },
        displayCart: function() {
            if ($('#cartWrapper').length) {
                $("#cartWrapper .shopping-cart-hover").addClass("active");
                setTimeout(function () {
                    if (! $("#cartWrapper .shopping-cart-hover:hover").length) {
                        $("#cartWrapper .shopping-cart-hover").removeClass("active");
                    }
                }, 5000);
            } else if ($(".checkout-container .shopping-cart-hover").length){
                $(".checkout-container .shopping-cart-hover").addClass("active");
                setTimeout(function () {
                    if (!$(".checkout-container .shopping-cart-hover:hover").length) {
                        $(".checkout-container .shopping-cart-hover").removeClass("active");
                    }
                }, 5000);
            }
        },
        populateCart: function () {
            var f5PopOutCart = this;
            var cart = $(document).f5LocalStorageCart("getCart");
            var total = 0;

            $('.shopping-cart-items').empty();

            $.each(cart.CartArticles, function (index, cartArticle) {
                var $li = $("<li>", { "data-article-id": cartArticle.ArticleId, "data-quantity": cartArticle.Quantity }).addClass("clearFix");
                var $image = $("<img>", { "src": cartArticle.ImageLink, "alt": "" });
                var $name = $("<a>", { "class": "item-name", "href": cartArticle.Url });
                $name.append(cartArticle.Name);
                var $price = $("<span>", { "class": "item-price" });
                $price.append(f5PopOutCart._displayAmount(parseFloat(cartArticle.Price)));


                var $quantity = $("<span>", { "class": "item-quantity" });

                var removeItemButton = $("<a>", { "class": "remove-item" });
                var removeItemIcon = $("<i>", { "class": "far fa-times-circle" });
                removeItemButton.append(removeItemIcon);

                var increaseAmountButton = $("<a>", { "class": "increase-amount" });
                var increaseAmountIcon = $("<i>", { "class":"far fa-plus-square"});
                increaseAmountButton.append(increaseAmountIcon);
                var decreaseAmountButton = $("<a>", { "class": "decrease-amount" });
                var decreaseAmountIcon = $("<i>", { "class": "far fa-minus-square" });
                decreaseAmountButton.append(decreaseAmountIcon);

                var amountControls = $("<span>");
                amountControls.append(removeItemButton);
                amountControls.append(decreaseAmountButton);
                amountControls.append(increaseAmountButton);

                $quantity.append(cartArticle.Quantity + " x ");

                $li.append($image);
                $li.append($name);
                $li.append(amountControls);
                $li.append($quantity);
                $li.append($price);
                $('.shopping-cart-items').append($li);
                total = total + parseFloat(cartArticle.Price) * parseFloat(cartArticle.Quantity);
            });
            $('.cartTotal').html(f5PopOutCart._displayAmount(total));
        },

        _displayAmount: function(amount) {
            return amount.toLocaleString(PRICE_FORMATTER_LOCALE,
                {
                    minimumFractionDigits: 2,
                    maximumFractionDigits: 2,
                    useGrouping: false
                });
        }
    });
}) (jQuery);;
(function ($) {
    $.widget("f5.f5Wishlist", {
        _create: function () {
            this.initWishlistClick();
        },

        initWishlistClick: function () {

            var wishlistCookieName = "wishlistItems";
            var activeWishlistClassName = "fas active";
            var nonActiveWishlistClassName = "far";

            var activateWishlistItem = function (item) {
                $(item).removeClass(nonActiveWishlistClassName);
                $(item).addClass(activeWishlistClassName);
            }

            var deactivateWishlistItem = function (item) {
                $(item).removeClass(activeWishlistClassName);
                $(item).addClass(nonActiveWishlistClassName);
            }

            var removeItemFromWishlist = function (items, itemId) {
                for (var i = 0; i <= items.length - 1; i++) {
                    if (items[i] === itemId) {
                        items.splice(i, 1);
                    }
                }
            }

            var isItemInWishlist = function (wishlistItems, itemId) {
                return wishlistItems.indexOf(itemId) !== -1;
            }

            var trackWishlistClick = function(trackingNumber) {
                if (TRACKING_ENABLED == 1) {
                    $(document).f5AudienceTracking("addToWishlist", trackingNumber);
                }
            }

            $(".favourite-article-icon").on("click", function (e) {
                e.preventDefault();
                var article = this;
                var id = $(article).data("article-id");
                var trackingNumber = $(article).data("article-tracking-number");
                var wishlistItems = [];

                if ($.cookie(wishlistCookieName)) {

                    wishlistItems = $.cookie(wishlistCookieName).split(/,/);

                    if (!isItemInWishlist(wishlistItems, id)) {
                        wishlistItems.push(id);
                        activateWishlistItem(article);
                        trackWishlistClick(trackingNumber);
                    }
                    else {
                        removeItemFromWishlist(wishlistItems, id);
                        deactivateWishlistItem(article);
                    }
                }
                else {
                    wishlistItems.push(id);
                    activateWishlistItem(article);
                    trackWishlistClick(trackingNumber);
                }

                $.cookie(wishlistCookieName, wishlistItems, { path: "/", expires: new Date(2038,1,19,3,14,7)});
            });
        }
    });
})(jQuery);;
(function($) {
    $.widget("f5.f5LoginVisitor",
        {
            options: {
                minimumPasswordLength: 8,
                maximumPasswordLength: 64
            },
            _create: function () {
                var widget = this;                

                $("input#submit-visitor-form").on("click", function (e) {
                    e.preventDefault();
                    var username = $(this).parents('form:first').find("input[name=loginEmail]").val();
                    var password = $(this).parents('form:first').find("input[name=loginPassword]").val();

                    Ajax(
                        SITE_ROOT + '/loginVisitor/LoginVisitorAccount', // Url
                        {
                            Username: username,
                            Password: password
                        }, // Data
                        function (result) {
                            if (result.Successful) {
                                if (result.RedirectUrl) {
                                    window.location.href = result.RedirectUrl;
                                } else {
                                    ReloadPage();
                                }
                            }
                            else if (result.Message) {
                                var modalInvoker = this;
                                $(modalInvoker).f5Modal({
                                    type: 'warning',
                                    modalContent: resources_VisitorAccount.VisitorMessage_text_ChangePassword,
                                    buttons: [
                                        {
                                            text: resources_Common.btn_OK,
                                            action: function () {
                                                $(modalInvoker).f5Modal("close");
                                                var redirectUrl = result.RedirectUrl + "?email=" + encodeURIComponent(username);
                                                window.location.href = redirectUrl;
                                            }
                                        }
                                    ]
                                });
                            }
                            else {
                                $(".validationErrorSummary").show().fadeOut(6000);
                            }
                        }, // Success
                        "post", // Method
                        false, // Async
                        false // Cache
                    );
                });

                $("#loginPassword").on("keypress", function (e) {
                    if (e.which == 13) {
                        e.preventDefault();
                        $(this).parents('form:first').find("input#submit-visitor-form").trigger("click");
                    }
                });

                $("li.accountLogout div.dropdown-menu a#log-out").on("click", function (e) {
                    e.preventDefault();
                    Ajax(
                        SITE_ROOT + '/loginVisitor/LogoutUserAccount', // Url
                        {

                        }, // Data
                        function (result) {
                            if (result.Successful)
                                ReloadPage();
                        }, // Success
                        "post", // Method
                        false, // Async
                        false // Cache
                    );
                });

                $("#visitor-info-save").click(function(e) {
                    e.preventDefault();
                    RedirectToHomepage();
                });

                $("input#submit-visitor-register-form").on("click", function (e) {
                    e.preventDefault();            

                    if (!widget._validateVisitorForm("#visitor-register-form")) {
                        return false;
                    }

                    var captchaResult = "";

                    if ($(document).f5Captcha("captchaEnabled")) {
                        if (!$(document).f5Captcha("validateCaptcha")) {
                            $(".validationErrorSummary").show().fadeOut(6000);
                            return false;
                        }

                        captchaResult = $(document).f5Captcha("getCaptchaResponse");
                        if (captchaResult === "") {
                            $(".validationErrorSummary").show().fadeOut(6000);
                            return false;
                        }
                    }
                    var email = $("#visitor-register-email").val();
                    var url = SITE_ROOT_LANG + '/shop/SendRegisterEmail';
                    var data = {
                        'email': email,
                        'captcha': captchaResult
                    };
                    var success = function (result) {
                        if (result.Successful) {
                            window.location.href = result.RedirectUrl;
                        }
                        else if (result.Message !== null) {
                            var modalInvoker = this;
                            $(modalInvoker).f5Modal({
                                type: 'error',
                                modalContent: result.Message
                            });

                        } else {
                            $(".validationErrorSummary").show().fadeOut(6000);
                        }
                        $(document).f5Spinner("closeSpinnerDialog");
                    }

                    $(document).f5Spinner("showSpinnerDialog", resources_Common.imsg_Loading);
                    Ajax(url, data, success, "post", true, false);
                });

                $("input#submit-visitor-recoverPassword-form").on("click", function(e) {
                    e.preventDefault();

                    if (!widget._validateVisitorForm("#visitor-recoverPassword-form")) {
                        return;
                    }

                    var captchaResult = "";

                    if ($(document).f5Captcha("captchaEnabled")) {
                        if (!$(document).f5Captcha("validateCaptcha")) {
                            $(".validationErrorSummary").show().fadeOut(6000);
                            return false;
                        }

                        captchaResult = $(document).f5Captcha("getCaptchaResponse");
                        if (captchaResult === "") {
                            $(".validationErrorSummary").show().fadeOut(6000);
                            return false;
                        }
                    }

                    var email = $("#visitor-recoverPassword-email").val();
                    var url = SITE_ROOT_LANG + '/shop/SendPasswordRecoverEmail';
                    var data = {
                        'email': email,
                        'captcha': captchaResult
                    };

                    var success = function (result) {
                        if (result.Successful) {
                            window.location.href = result.RedirectUrl;
                        }
                        else if (result.Message !== null) {
                            var modalInvoker = this;
                            $(modalInvoker).f5Modal({
                                type: 'error',
                                modalContent: result.Message
                            });

                        } else {
                            $(".validationErrorSummary").show();
                        }
                        $(document).f5Spinner("closeSpinnerDialog");
                    }

                    $(document).f5Spinner("showSpinnerDialog", resources_Common.imsg_Loading);
                    Ajax(url, data, success, "post", true, false);
                });

                $("a#visitor-logout").on("click", function (e) {
                    e.preventDefault();
                    Ajax(
                        SITE_ROOT + '/loginVisitor/LogoutUserAccount', // Url
                        {

                        }, // Data
                        function (result) {
                            if (result.Successful)
                                ReloadPage();
                        }, // Success
                        "post", // Method
                        false, // Async
                        false // Cache
                    );
                });

                $("a#visitor-delete").click(function (e) {
                    e.preventDefault();

                    var url = SITE_ROOT + '/loginVisitor/Delete';
                    var success = function (result) {
                        if (result.Successful)
                            RedirectToHomepage();
                    }

                    var modalInvoker = this;
                    $(modalInvoker).f5Modal({
                        type: 'warning',
                        modalContent: resources_VisitorAccount.VisitorAccount_text_ConfirmAccountDeletion,
                        buttons: [
                            {
                                text: resources_Common.btn_Delete,
                                action: function () {
                                    $(modalInvoker).f5Modal("close");
                                    Ajax(url, {}, success, "post", true, false);
                                }
                            },
                            {
                                text: resources_Common.btn_Cancel,
                                action: function () {
                                    $(modalInvoker).f5Modal("close");
                                }
                            }
                        ]
                    });
                });

                $("input#submit-visitor-password-form").on("click", function (e) {
                    e.preventDefault();
                    var password = $("#visitor-password").val();
                    var confirmPassword = $("#visitor-password-confirm").val();

                    if (!widget._validateCreatePasswordForm(password, confirmPassword)) {
                        return;
                    }

                    var token = $("#visitor-passwordToken").val();

                    var url = widget._getPasswordSaveUrl();
                    var data = {
                        'password': password,
                        'token': token
                    };
                    var success = function (result) {
                        if (result.Successful) {
                            window.location.href = result.RedirectUrl;
                        }
                        else if (result.Message !== null) {
                            var modalInvoker = this;
                            $(modalInvoker).f5Modal({
                                type: 'error',
                                modalContent: result.Message
                            });
                        } else {
                            $(".validationErrorSummary").show().fadeOut(6000);
                        }
                    }

                    Ajax(url, data, success, "post", false, false);
                });

                $("#visitor-password").complexify({
                    strengthScaleFactor: 0.65,
                    bannedPasswords: []
                }, function (valid, complexity) {

                    var bar = $("#passwordComplexityBar");
                    bar.width(complexity + "%");

                    if (widget._isPasswordValid($("#visitor-password").val())) {
                        bar.css("background-color", "#5cb85c");
                    } else {
                        bar.css("background-color", "#d9534f");
                    }
                });

                $("#visitor-password").on("focus", function(e) {
                    $("#passwordComplexity").toggle();
                });

                $("#visitor-password").on("blur", function (e) {
                    $("#passwordComplexity").toggle();
                });

                $("#login-icon-container").hover(function (e) {
                    $(".login-popup").stop(true, true).addClass("active");
                }, function (e) {
                    $(".login-popup").stop(true, true).removeClass("active");
                });

                $(".login-popup").hover(function (e) {
                    $(".login-popup").stop(true, true).addClass("active");
                }, function (e) {
                    $(".login-popup").stop(true, true).removeClass("active");
                });

            },

            _validateVisitorForm: function (formId) {
                if (!$(formId).validate().form()) {
                    return false;
                }

                return true;
            },

            _validateCreatePasswordForm: function (password, confirmPassword) {
                var widget = this;
                if (!widget._validateVisitorForm("#visitor-password-form")) {
                    return false;
                }

                if (password !== confirmPassword) {
                    $(".validationErrorSummary#password-error-different").show().fadeOut(6000);
                    return false;
                }

                if (!widget._isPasswordValid(password))
                {
                    $(".validationErrorSummary#password-error-validation").show().fadeOut(6000);
                    return false;
                }

                return true;
            },

            _getPasswordSaveUrl: function() {
                var passwordPurpose = $("#visitor-password-purpose").val();

                if (passwordPurpose === 'Recover') {
                    return SITE_ROOT + '/shop/saveRecoverPassword';
                }

                if (passwordPurpose === 'Create') {
                   return SITE_ROOT + '/shop/registerVisitor';
                }
            },

            _isPasswordValid: function (password) {
                var widget = this;
                return password.length >= widget.options.minimumPasswordLength &&
                    password.length <= widget.options.maximumPasswordLength;
            }
        });
})(jQuery);;
(function ($) {
    $.widget("f5.f5Captcha",
        {
            options: {
            },
            _create: function () {

            },

            validateCaptcha: function () {
                if (typeof grecaptcha === 'undefined') {
                    return false;
                }
                return true;
            },

            captchaEnabled: function () {
                if ($("#captcha-enabled").length !== 0) {
                    return true;
                }
                return false;
            },

            getCaptchaResponse: function () {
                return grecaptcha.getResponse();
            }
        });
})(jQuery);;
(function ($) {
    $.widget("f5.f5Visitor",
        {
            options: {
            },
            _create: function () {
                var widget = this;

                $("input.visitorMobilePhone").f5CheckoutPhone();

                $(document).on("click",
                    "label.visitor",
                    function () {
                        var label = this;
                        var currentValue = $(label).text();
                        var labelName = $(label).attr("name");
                        var className = $(label).attr("class");
                        if ($("#visitorInformation").validate().form()) {
                            var inputTag = "<input class='" + className + "' type='text' name='" + labelName + "'/>";
                            $(label).replaceWith(inputTag);

                            var inputTagId = ".visitor[name='" + labelName + "']";
                            if (!$(inputTagId).hasClass("form-control")) {
                                $(inputTagId).addClass("form-control");
                            }
                            $(inputTagId).val(currentValue);
                            $(inputTagId).trigger("focus");
                        }
                    }
                );

                $(document).on("blur", "input.visitor", function () {
                    var inputField = this;
                    var newValue = $(inputField).val();
                    var inputName = $(inputField).attr("name");
                    var className = $(inputField).attr("class");

                    if ($("#visitorInformation").validate().form()) {
                        var success = function (result) {
                            if (result.Successful) {
                                if (newValue) {
                                    var labelTag = "<label class='" + className + "' name='" + inputName + "'></label>";
                                    $(inputField).replaceWith(labelTag);
                                    var labelTagId = ".visitor[name='" + inputName + "']";
                                    $(labelTagId).text(newValue).append("<i class='fas fa-pencil-alt'></i>");
                                }
                            } else {
                                $(".validationErrorSummary").show().fadeOut(6000);
                            }

                        };
                        widget._saveVisitorInformation(inputName, newValue, success);
                    };
                });

                $(document).on("keypress", "input.visitor", function (e) {
                    if (e.which == 13) {
                        e.preventDefault();
                        $(this).trigger("blur");
                    }
                });

                $(document).on("change", "input.visitorType", function (e) {
                    var inputField = this;
                    var inputName = $(inputField).attr("name");
                    var value = $(inputField).val();
                    var id = $(inputField).attr("id");
                    var previousCustomerType = "input.visitor.visitorType:not(#" + id + ")";

                    $(inputField).prop("checked", false);
                    $(previousCustomerType).prop("checked", true);

                    var success = function (result) {
                        if (result.Successful) {
                            $(inputField).prop("checked", true);
                            $(previousCustomerType).prop("checked", false);
                            widget._showCorrectVisitorFields(value);
                        } else {
                            $(".validationErrorSummary").show().fadeOut(6000);
                        }
                    }
                    widget._saveVisitorInformation(inputName, value, success);
                });

                $(document).on("change", "input.visitorUseDeliveryAddress", function (e) {
                    var inputField = this;
                    var inputName = $(inputField).attr("name");
                    var value = $(inputField).is(":checked");
                    $(inputField).prop("checked", !value);

                    var success = function (result) {
                        if (result.Successful) {
                            $(inputField).prop("checked", value);
                            if (value === true) {
                                $("#visitor-delivery-address-container").removeClass('hidden');
                            }
                            else {
                                $("#visitor-delivery-address-container").addClass('hidden'); // checked
                            }
                        }
                    }
                    widget._saveVisitorInformation(inputName, value, success);
                });

                $(document).on("click", "label.visitorMobilePhone", function () {
                    var label = this;
                    var currentValue = $(label).text();
                    var labelName = $(label).attr("name");
                    var className = $(label).attr("class");
                    if ($("#visitorInformation").validate().form()) {
                        var inputTag = "<input class='" + className + "' type='text' name='" + labelName + "'/>";
                        $(label).replaceWith(inputTag);
                        var inputTagId = ".visitorMobilePhone[name='" + labelName + "']";
                        if (!$(inputTagId).hasClass("form-control")) {
                            $(inputTagId).addClass("form-control");
                        }
                        $(inputTagId).val(currentValue);
                        $(inputTagId).f5CheckoutPhone();
                        $(inputTagId).trigger("focus");
                    }
                });

                $(document).on("blur", "input.visitorMobilePhone", function (e) {
                    var clickClassName = $(e.relatedTarget).attr("class"); // if click happens on flags need to prevent input change 
                    if (clickClassName !== "selected-flag" && $("#visitorInformation").validate().form()) {
                        var inputField = this;
                        var inputName = $(inputField).attr("name");
                        var className = $(inputField).attr("class");
                        
                        if ($(inputField).val() !== "") {
                            $(inputField).f5CheckoutPhone("addPrefixToPhoneNumber");
                        }

                        var value = $(inputField).val();
                        var success = function (result) {
                            if (result.Successful) {
                                if (value) {
                                    $(inputField).f5CheckoutPhone("removeWidget");
                                    var inputParent = $(inputField).parent();
                                    $(inputField).detach();
                                    var labelTag = "<label class='" + className + "' name='" + inputName + "'></label>";
                                    inputParent.append(labelTag);
                                    var labelTagId = "label.visitorMobilePhone[name='" + inputName + "']";
                                    $(labelTagId).text(value).append("<i class='fas fa-pencil-alt'></i>");
                                }
                            } else {
                                $(".validationErrorSummary").show().fadeOut(6000);
                            }
                        }
                        widget._saveVisitorInformation(inputName, value, success);
                    }
                });

                $(document).on("click", "label.visitorCountry", function (e) {
                    var label = this;

                    if ($("#visitorInformation").validate().form()) {
                        $("select.visitorCountry").removeClass("hidden");
                        $("select.visitorCountry").trigger("focus");
                        $(label).addClass("hidden");
                    }
                });

                $(document).on("change blur", "select.visitorCountry", function (e) {
                    var inputField = this;
                    var inputName = $(inputField).attr("name");
                    var value = $(inputField).val();
                    var countryFullName = $(inputField).children("option:selected").text();
                    var success = function (result) {
                        if (result.Successful) {
                            $(inputField).addClass("hidden");
                            $("label.visitorCountry").removeClass("hidden");
                            $("label.visitorCountry").text(countryFullName).append("<i class='fas fa-pencil-alt'></i>");
                        }
                        else {
                            $(".validationErrorSummary").show().fadeOut(6000);
                        }
                    }

                    if ($("#visitorInformation").validate().form()) {
                        widget._saveVisitorInformation(inputName, value, success);
                    }
                });

                $(document).on("click",
                    "#visitor-order-search-button",
                    function(e) {
                        e.preventDefault();
                        var searchText = $("#visitor-order-search").val();
                        var url = SITE_ROOT_LANG + '/shop/searchVisitorOrders';
                        var data = {
                            'searchText': searchText
                        }
                        var success = function(data) {
                            $("#visitor-orders-table").html(data);
                        };
                        Ajax(url, data, success, 'POST');
                    });
            },

            _saveVisitorInformation: function (key, value, callback) {
                var url = SITE_ROOT + '/shop/UpdateVisitorInformation';
                var data = {
                    'key': key,
                    'value': value
                }
                Ajax(url, data, callback, "POST", false, false, undefined, "application/json; charset=utf-8");
            },

            _showCorrectVisitorFields: function (value) {
                if (value === "1") {
                    $("div#visitor-company-container").removeClass("hidden");
                    $("div#visitor-person-container").addClass("hidden");
                }
                if (value === "0") {
                    $("div#visitor-person-container").removeClass("hidden");
                    $("div#visitor-company-container").addClass("hidden");
                }
            }
        });
})(jQuery);;
(function($) {
    $.widget("f5.f5AudienceTracking",
        {
            _create: function() {

            },

            viewContent: function (articleNumber) {
                fbq('track', 'ViewContent', {
                    'content_ids': [articleNumber],
                    'content_type': 'product'
                });
            },

            purchase: function (checkoutTotalAmount, articleNumbers) {
                fbq('track', 'Purchase',
                    {
                        'currency': CURRENCY_CODE,
                        'value': checkoutTotalAmount,
                        'content_type': 'product',
                        'content_ids': articleNumbers
                    });
            },

            addToCart: function (articleNumber) {
                fbq('track', 'AddToCart',
                    {
                        'content_ids': [articleNumber],
                        'content_type': 'product'
                    });
            },
            addToWishlist: function (articleNumber) {
                fbq('track',
                    'AddToWishlist',
                    {
                        'content_ids': [articleNumber]
                    });
            },
            initiateCheckout: function (checkoutTotalAmount, articleNumbers) {
                fbq('track', 'InitiateCheckout',
                    {
                        'currency': CURRENCY_CODE,
                        'value': checkoutTotalAmount,
                        'content_ids': articleNumbers
                    });
            },
            search: function (searchString) {
                fbq('track', 'Search',
                    {
                        'search_string': searchString
                    });
            }
        });
})(jQuery);
// TODO: remove console.log usages
(function ($) {
    $.widget("f5.f5Checkout", {
        options: {
            activeTab: 1,
            trackingEnabled: 0,
            isMobileDevice: 0,
            stopOutOfStockOrders: 0, 
            numberFormatterLocale: "",
            siteRootUrl: ""
        },

        _create: function () {
            var checkout = this;

            checkout.options.hostTotals = checkout.element;
            checkout.options.hostArticles = $("#checkout-form-step1");
            checkout.options.hostDeliveryMethods = $("#delivery-methods-container");
            checkout.options.hostPaymentMethods = $("#payment-methods-container");
            checkout.options.hostAddresses = $("#checkout-form-step2");
            checkout.options.hostDiscounts = $("#discounts-container");
            checkout.options.hostCountry = $("#checkout-countries-tablecontainer");
            checkout.options.hostPersonalInformation = $("#checkout-form-step2");
            checkout.options.hostOrderSummary = $("#orderSummary");

            checkout.options.hostTotals.f5CheckoutTotals({ numberFormatterLocale: checkout.options.numberFormatterLocale });
            checkout.options.hostArticles.f5CheckoutArticles(
                {
                    parentElement: checkout.element,
                    checkout: checkout,
                    numberFormatterLocale: checkout.options.numberFormatterLocale,
                    siteRootUrl : checkout.options.siteRootUrl
                });
            checkout.options.hostDeliveryMethods.f5CheckoutDeliveryMethods(
                {
                    parentElement: checkout.element,
                    siteRootUrl : checkout.options.siteRootUrl
                });
            checkout.options.hostPaymentMethods.f5CheckoutPaymentMethods(
                {
                    parentElement: checkout.element,
                    siteRootUrl: checkout.options.siteRootUrl
                });
            checkout.options.hostAddresses.f5CheckoutAddresses({ parentElement: checkout.element, isMobileDevice: checkout.options.isMobileDevice });
            checkout.options.hostDiscounts.f5CheckoutDiscounts(
                {
                    parentElement: checkout.element,
                    checkout: checkout,
                    numberFormatterLocale: checkout.options.numberFormatterLocale,
                    siteRootUrl: checkout.options.siteRootUrl
                });
            checkout.options.hostCountry.f5CheckoutCountry(
                {
                    parentElement: checkout.element,
                    siteRootUrl: checkout.options.siteRootUrl
                });
            checkout.options.hostPersonalInformation.f5CheckoutPersonalInformation(
                {
                    siteRootUrl: checkout.options.siteRootUrl
                });
            checkout.options.hostOrderSummary.f5OrderSummary(
                {
                    parentElement: checkout.element,
                    siteRootUrl : checkout.options.siteRootUrl
                });

            checkout._initTabHeader("checkoutWzStepOne", 1);
            checkout._initTabHeader("checkoutWzStepTwo", 2);
            checkout._initTabHeader("checkoutWzStepThree", 3);

            if (checkout.options.trackingEnabled == 1) {
                $(document).f5AudienceTracking("initiateCheckout",
                    checkout.options.hostTotals.f5CheckoutTotals("getTotalAmount"),
                    checkout.options.hostArticles.f5CheckoutArticles("getArticleTrackingNumbers"));
            }

            checkout.options.activeTab = parseInt($("#checkoutWizardStep").val());

            if (checkout.options.activeTab === 3) {
                $(".checkoutWzFooterStep").hide();
                checkout.options.hostOrderSummary.f5OrderSummary("refreshSummaryData");
            }

            if (checkout.options.activeTab === 2) {
                checkout._initAddressWizardStep();
            }

            $("#checkout-nextStep").on("click", function(e) {
                e.preventDefault();
                var desiredTabIndex = checkout.options.activeTab + 1;
                var success = function() {
                    e.preventDefault();
                    $('html, body').animate({ scrollTop: 0 }, '300');
                };

                checkout._setActiveTab(desiredTabIndex, true, success);

            });

            $("#checkout-confirm").on("click", function (e) {
                e.preventDefault();
                $("#checkout-form").trigger("submit");
            });

            $("#checkout-form-step1").on("submit", function (e) {
                // These blocks are needed to prevent automatic submit when only one input is available
                e.preventDefault();
            });


            $("#checkout-form").on("submit", function (e) {
                e.preventDefault();

                if ($("#spinnerPlaceholder").is(":visible"))
                    return false;
                
                if (checkout.options.stopOutOfStockOrders == 1
                    && !checkout.options.hostArticles.f5CheckoutArticles("verifyStockArticles"))
                {
                    return false;
                }

                var discountCode = $("#discountCodeHidden").val();

                if (discountCode) {
                    var validationResult = checkout.options.hostDiscounts.f5CheckoutDiscounts(
                        "EnsureValidDiscount",
                        discountCode);

                    if (!validationResult.isValid) {
                        checkout.options.hostDiscounts.f5CheckoutDiscounts("update", validationResult.Order);
                        checkout._updateCheckoutTotalSums(validationResult.Order);
                        checkout.options.hostOrderSummary.f5OrderSummary("refreshSummaryData");
                        return false;
                    }
                }

                var url = checkout.options.siteRootUrl + "/Shop/CheckoutConfirm",
                    curBackground = $("#checkout-confirm").css("background"),
                    success = function (result) {
                        if (result === undefined) {
                            return;
                        }
                        if (result.RedirectUrl) {   // Payment providers scenario
                            window.location.assign(result.RedirectUrl);
                        }
                        else {
                            if (result.Successful) {    // Successfull order confirmation page
                                var confirmUrl = checkout.options.siteRootUrl + "/shop/confirm";
                                if (checkout.options.trackingEnabled == 1) {
                                    $(document).f5AudienceTracking("purchase",
                                        checkout.options.hostTotals.f5CheckoutTotals("getTotalAmount"),
                                        checkout.options.hostArticles.f5CheckoutArticles("getArticleTrackingNumbers"));
                                }
                                window.location.assign(confirmUrl);
                                return;
                            }
                            else {
                                $("#checkoutSpinnerContainer").hide();

                                checkout._enableButtons(false);
                                $("#checkout-confirm").css("cursor", "pointer");
                                $("#checkout-confirm").css("background", curBackground);

                                if (result.Errors != undefined && result.Errors.length !== 0) {
                                    var modalInvoker = this;
                                    var expectedPaymentErrorIndex = 0;

                                    $(modalInvoker).f5Modal({
                                        type: 'error',
                                        modalContent: result.Errors[expectedPaymentErrorIndex].Error
                                    });
                                } else {
                                    $("#checkoutBackendError").addClass("validationErrorSummary");
                                    $("#checkoutBackendError").show().fadeOut(6000, function () {
                                        $("#checkoutBackendError").removeClass("validationErrorSummary");
                                    });
                                }
                            }
                        }
                    };

                if (!$(this).validate().form()) { // This is needed to validate agreement terms when it is used
                    return false;
                }
                checkout._disableButtons(false);

                $("#checkout-confirm").css("cursor", "default");
                $("#checkoutSpinnerContainer").fadeIn("slow", function () {

                    CheckoutAjax(url, {}, success);
                });
            });
            
            // This should be triggered by all Child widgets
            $(checkout.element).on("CheckoutChildUpdated", function (event, callbackObject) {
                checkout._disableButtons(true);

                var invoker = callbackObject.invoker;

                if ( invoker === "PaymentMethod"
                    || invoker === "DeliveryMethod"
                    || invoker === "Discount"
                    || invoker === "Articles"
                    || invoker === "Country") {
                    checkout._updateCheckoutTotalSums(callbackObject.pricesToChange);
                }
                if (invoker === "Discount") {
                    checkout.options.hostDeliveryMethods.f5CheckoutDeliveryMethods("showCheckoutDeliveryMethods", callbackObject.pricesToChange.AvailableDeliveryMethods);
                }
                
                checkout._enableButtons(true);
            });

            $(checkout.element).on("setActiveTab", function (event, callbackObject) {
                checkout._setActiveTab(callbackObject.tabIndex, callbackObject.validateCurrentStep);
            });
        },

        _updateCheckoutTotalSums: function (pricesToChange) {
            var checkout = this;
            if (pricesToChange === undefined) {
                throw "Checkout update object is missing";
            } else {
                checkout.options.hostTotals.f5CheckoutTotals(
                    "update",
                    pricesToChange.OrderSummaryDto,
                    pricesToChange.VatIsIncluded
                );
            }
            
        },

        _setActiveTab: function (newTabIndex, validateCurrentStep, successCallback) {
            if (!$("#checkout-ajax-spinner").hasClass('hidden') || $("#spinnerPlaceholder").is(":visible")) {
                return;
            }

            var checkout = this;
            if (validateCurrentStep) {
                if (!checkout._validateTab()) {
                    return;
                };
            }

            var url = checkout.options.siteRootUrl + "/Shop/UpdateCheckoutWizardStep"; 
            var data = { step: newTabIndex };
            var success = function (result) {
                if (result.Successful) {
                    $("ul.checkoutSteps > li").removeClass("active");
                    switch(newTabIndex) {
                        case 1:
                            $(".checkoutWizard2").hide();
                            $(".checkoutWizard3").hide();
                            $(".checkoutWzFooterFinal").hide();

                            $(".checkoutWizard1").show();
                            $(".checkoutWzFooterStep").show();
                            $("ul.checkoutSteps > li.first").addClass("active");
                            break;
                        case 2:

                            checkout._initAddressWizardStep();

                            $(".checkoutWizard1").hide();
                            $(".checkoutWizard3").hide();
                            $(".checkoutWzFooterFinal").hide();

                            $(".checkoutWizard2").show();
                            $(".checkoutWzFooterStep").show();
                            $("ul.checkoutSteps > li.second").addClass("active");
                            break;
                        case 3:
                            $(".checkoutWizard1").hide();
                            $(".checkoutWizard2").hide();
                            $(".checkoutWzFooterStep").hide();

                            $(".checkoutWizard3").show();
                            $(".checkoutWzFooterFinal").show();
                            $("ul.checkoutSteps > li.third").addClass("active");
                            $("#discounts-container").f5CheckoutDiscounts("reactivateDiscountCode");
                            checkout.options.hostOrderSummary.f5OrderSummary("refreshSummaryData");
                            break;
                        default:
                            console.log("Invalid tab index: " + newTabIndex);
                    }
                    checkout.options.activeTab = newTabIndex;
                    if (typeof successCallback != "undefined") {
                        successCallback();
                    }
                }
            };
            Ajax(url, data, success);
        },

        _validateTab: function () {
            var checkout = this;
            var previousTabIndex = checkout.options.activeTab;
            switch (previousTabIndex) {
                case 1:
                    var noOfArticles = $(document).f5LocalStorageCart("itemCount"),
                        totalItemsAmount = parseFloat($("#totalItemsAmount").val()),
                        minTotalItemsAmount = parseFloat($("#minItemsAmount").val());

                    if (noOfArticles == 0) {
                        $(".validationErrorNoArticles").show().fadeOut(6000);
                        return false;
                    }
                    if (checkout.options.hostDeliveryMethods.f5CheckoutDeliveryMethods("validate") === false) {
                        return false;
                    }
                    if (checkout.options.hostPaymentMethods.f5CheckoutPaymentMethods("validate") === false) {
                        return false;
                    }
                    if (totalItemsAmount < minTotalItemsAmount) {
                        $(".validationErrorMinItemsValue").show().fadeOut(6000);
                        return false;
                    }
                    if (!$("#checkout-form-step1").validate().form())
                        return false;
                    break;
                case 2:
                    if (!checkout.options.hostPersonalInformation.f5CheckoutPersonalInformation("validate")) {
                        return false;
                    }
                    if (!checkout.options.hostPersonalInformation.f5CheckoutPersonalInformation("sendAddresses")) {
                        var modalInvoker = this;
                        $(modalInvoker).f5Modal({
                            type: 'error',
                            modalContent: resources_Common.hdr_Error
                        });
                        return false;
                    }
                    break;
                case 3: // no need to validate this during tab switch
                    break;
                default:
                    console.log("Invalid previous tab index: " + previousTabIndex);
            }
            return true;
        },

        _initAddressWizardStep: function () {
            var checkout = this;
            var paymentMethodAttributes = checkout.options.hostPaymentMethods.f5CheckoutPaymentMethods(
                "getActivePaymentMethodAttributes"
            );

            var selectedCountry = $("#checkoutCountry option:selected");
            var countryAttributes = {
                countryName: selectedCountry.text(),
                countryCode: selectedCountry.attr("data-code"),
                saleWithinEu: selectedCountry.attr("data-eu-country") === "True",
                domesticSale: selectedCountry.attr("data-domestic-country") === "True"
            };
            checkout.options.hostAddresses.f5CheckoutAddresses(
                "activateAddressesTab",
                paymentMethodAttributes,
                countryAttributes
            );
        },

        _initTabHeader: function(headerId, tabIndex) {
            var checkout = this;
            $("#"+headerId).on("click", function (e) {
                e.preventDefault();
                if (checkout.options.activeTab <= tabIndex) {
                    // we allow only going back (to tab with index smaller than current)
                    return;
                }
                
                checkout._setActiveTab(tabIndex, false);    // don't validate when returning to previous steps
            });
        },
        
        // Two operations below currently doesn't work in most cases since ajax calls are made synchronously.
        // See VAW-1013 for more details.
        _disableButtons: function (showSpinner) {
            if (showSpinner == true) {
                $("#checkout-ajax-spinner").removeClass("hidden");
            }
            $("div#page-container a.btn").addClass("disabled");
        },

        _enableButtons: function (hideSpinner) {
            if (hideSpinner) {
                $("#checkout-ajax-spinner").addClass("hidden");
            }
            $("div#page-container a.btn").removeClass("disabled");
        }

    });

})(jQuery);

function CheckoutAjax(url, data, success, type, async, cache, context, contentType, error) {

    var modifiedSuccess = function (result) {
        if (result.Outdated === true) {
            var modalInvoker = $('.checkout-area');

            $(modalInvoker).f5Modal({
                type: 'warning',
                modalContent: resources_Checkout.imsg_SessionExpired, 
                buttons: [{ text: resources_Common.btn_OK, action: function() {
                    $(modalInvoker).f5Modal("close");
                    RedirectToHomepage();
                } }]
            });
        } else {
            success(result);
        }
    }

    Ajax(url, data, modifiedSuccess, type, async, cache, context, contentType, error);
}
;
(function ($) {
    $.widget("f5.f5CheckoutAddresses", {
        options: {
            isMobileDevice: 0
        },
        _create: function () {
            var f5CheckoutAddresses = this;

            $(".jsCheckoutCustomerType").on("change", function () {
                f5CheckoutAddresses._setCustomerTypeSpecificFields();
            });

            $("#showAddMoreInfo").on("click", function (e) {
                e.preventDefault();
                $(this).hide();
                $(".otherInfo").removeClass("displayNone");
            });

            $("#useDeliveryAddress").on("change", function () {
                var useDeliveryAddress = $(this).is(":checked");
                if (!useDeliveryAddress) {
                    $("#delivery-address").addClass("hidden");
                    $("#delivery-first-name").addClass("valIgnore");
                    $("#delivery-last-name").addClass("valIgnore");
                    $("#delivery-address-1").addClass("valIgnore");
                    $("#delivery-post-code").addClass("valIgnore");
                    $("#delivery-post-office").addClass("valIgnore");
                    $("#delivery-country").addClass("valIgnore");
                    $("#delivery-address :input").val("");
                }
                else {
                    $("#delivery-address").removeClass("hidden");
                    $("#delivery-first-name").removeClass("valIgnore");
                    $("#delivery-last-name").removeClass("valIgnore");
                    $("#delivery-address-1").removeClass("valIgnore");
                    $("#delivery-post-code").removeClass("valIgnore");
                    $("#delivery-post-office").removeClass("valIgnore");
                    $("#delivery-country").removeClass("valIgnore");
                }
            });

            $("body").on("mouseenter mouseleave", '#vatno-info', function () {
                $(this).popover('toggle');
            });

            // Label color on focus
            $(".checkoutWizard2 input, .checkoutWizard2 select, .checkoutWizard2 textarea").on("focus", function () {
                $(this).closest(".checkoutWizard2").find(".form-group.row").removeClass("selected");
                $(this).closest(".form-group.row").addClass("selected");
            });
            
        },
        activateAddressesTab: function(paymentMethodAttributes, countryAttributes) {
            var f5CheckoutAddresses = this;

            f5CheckoutAddresses.options.paymentMethodAttributes = paymentMethodAttributes;
            f5CheckoutAddresses.options.countryAttributes = countryAttributes;

            f5CheckoutAddresses._resetCustomerNumbersValidation();
            f5CheckoutAddresses._resetPhonePrefixes();
            f5CheckoutAddresses._setCustomerTypeSpecificFields();
            f5CheckoutAddresses._setupPaymentMethodDependentSettings();
            f5CheckoutAddresses._setupCountryDependentSettings();
        },
        _setCompanyNameVisibility: function (customerType) {
            if (customerType === "Company") {
                $('#company-name').show();
                $('#CompanyName').removeClass('valIgnore');
                // Class hidden is removed if a EU-country is selected
                if (!$("#company-vatno").hasClass("hidden")) {
                    $("#company-vatno").show();
                }
            }
            else if (customerType === "Person") {
                $("#company-name").hide();
                $("#company-vatno").hide();
                $("#CompanyName").removeClass("validationError").addClass("valIgnore");
            }
        },
        _setCustomerTypeSpecificFields: function () {
            var f5CheckoutAddresses = this;
            var customerType = $(".jsCheckoutCustomerType:checked").val();

            f5CheckoutAddresses._setCompanyNameVisibility(customerType);

            f5CheckoutAddresses._resetCustomerNumbersValidation();
            if (customerType === "Company") {
                f5CheckoutAddresses._setupCompanyIdInput(f5CheckoutAddresses.options.paymentMethodAttributes.companyNumberHandling);
            } else if (customerType === "Person") {
                f5CheckoutAddresses._setupPersonIdInput(f5CheckoutAddresses.options.paymentMethodAttributes.personNumberHandling);
            }
        },
        _setupPersonIdInput: function (personNumberHandling) {
            if (personNumberHandling !== "hidden") {
                $("#identification-person").show();

                if (personNumberHandling === "mandatory") {
                    $("#IdentificationNo").addClass("valRequired").removeClass("valIgnore");
                    $("#identificationNo-label-mandatory-suffix").show();
                } else {
                    $("#IdentificationNo").removeClass("valIgnore");
                }
            } else {
                $("#IdentificationNo").val("");
            }
        },
        _setupCompanyIdInput: function (companyNumberHandling) {
            if (companyNumberHandling !== "hidden") {
                $("#identification-company").show();

                if (companyNumberHandling === "mandatory") {
                    $("#CompanyNo").addClass("valRequired").removeClass("valIgnore");
                    $("#companyNo-label-mandatory-suffix").show();
                }
            } else {
                $("#CompanyNo").val("");
            }
        },
        _resetCustomerNumbersValidation: function () {
            $("#CompanyNo").removeClass("validationError").removeClass("valRequired").addClass("valIgnore");
            $("#IdentificationNo").removeClass("validationError").removeClass("valRequired").addClass("valIgnore").removeClass("valIdentificationNoSE");
            $("CompanyName").addClass("valIgnore");
            $("#identification-company").hide();
            $("#identification-person").hide();
            $("#companyNo-label-mandatory-suffix").hide();
            $("#identificationNo-label-mandatory-suffix").hide();
            $("#checkout-form").validate();
        },
        _resetPhonePrefixes: function() {
            $("#invoiceMobilePhone").f5CheckoutPhone("removePrefixFromNumber");
            $("#deliveryMobilePhone").f5CheckoutPhone("removePrefixFromNumber");
        },
        _setupPaymentMethodDependentSettings: function () {

            var f5CheckoutAddresses = this;
            var paymentMethodAttributes = f5CheckoutAddresses.options.paymentMethodAttributes;
            var checkboxDeliveryAddress = $("#useDeliveryAddress");
            var disableDeliveryAddressExplanationDiv = $("#disableDeliveryAddressExplanation");

            if (paymentMethodAttributes.disableDeliveryAddress) {

                if (checkboxDeliveryAddress.is(":checked")) {
                    checkboxDeliveryAddress.trigger("click");
                }

                disableDeliveryAddressExplanationDiv.html(paymentMethodAttributes.disableDeliveryAddressExplanation).show();


                checkboxDeliveryAddress.prop("disabled", true);
            } else {
                checkboxDeliveryAddress.prop("disabled", false);
                disableDeliveryAddressExplanationDiv.hide().empty();
            }

            var requiredMobileNumberLabel = $("#requiredMobileNumberLabel");
            var mobileNumberInput = $("#invoiceMobilePhone");

            if (paymentMethodAttributes.mobileNumberRequired) {
                requiredMobileNumberLabel.show();
                mobileNumberInput.addClass("valRequired");
            } else {
                requiredMobileNumberLabel.hide();
                mobileNumberInput.removeClass("valRequired");
            }

            if (paymentMethodAttributes.mobileNumberValidationStrict) {
                mobileNumberInput.removeClass("valPhoneNo");
                mobileNumberInput.addClass("valPhoneNoStrict");
            } else {
                mobileNumberInput.removeClass("valPhoneNoStrict");
                mobileNumberInput.addClass("valPhoneNo");
            }

            $('input[type="email"][notmatch]').attr('notmatch', paymentMethodAttributes.disallowedEmail);
        },
        _setupCountryDependentSettings: function () {
            var f5CheckoutAddresses = this;
            var countryAttributes = f5CheckoutAddresses.options.countryAttributes;

            // Set selected country to address
            $("label#invoice-country-label").text(countryAttributes.countryName);
            $("input#invoiceCountry").val(countryAttributes.countryCode);
            $("label#delivery-country-label").text(countryAttributes.countryName);
            $("input#delivery-country").val(countryAttributes.countryCode);

            if (countryAttributes.saleWithinEu && !countryAttributes.domesticSale) {
                $("div#company-vatno").removeClass("hidden");
            } else {
                $("div#company-vatno").addClass("hidden");
            }

            // Set placeholder on person number input
            var placeholderValue = f5CheckoutAddresses._getPersonNoPlaceholder(countryAttributes.countryCode);
            $("input#IdentificationNo").attr("placeholder", placeholderValue);
            $("div#identification-person span.placeholder").text(placeholderValue);
            if (placeholderValue !== "") {
                $("div#identification-person span.placeholder").removeClass("hidden");
            } else {
                $("div#identification-person span.placeholder").addClass("hidden");
            }

            // Set placeholder on company number input
            var companyPlaceholderValue = f5CheckoutAddresses._getCompanyNoPlaceholder(countryAttributes.countryCode);
            $("input#CompanyNo").attr("placeholder", companyPlaceholderValue);
            $("div#identification-company span.placeholder").text(companyPlaceholderValue);
            if (companyPlaceholderValue !== "") {
                $("div#identification-company span.placeholder").removeClass("hidden");
            } else {
                $("div#identification-company span.placeholder").addClass("hidden");
            }

            // Set validation on person number input
            var personNumberValidationClass = f5CheckoutAddresses._getPersonNoValidationClass(countryAttributes.countryCode);
            $("input#IdentificationNo").addClass(personNumberValidationClass);

            // Set input type on person number input
            var identificationNoType = f5CheckoutAddresses._getIdentificationNoInputType(countryAttributes.countryCode);
            $("input#IdentificationNo").attr("type", identificationNoType);
            $("input#CompanyNo").attr("type", identificationNoType);
        
        },
        _getPersonNoPlaceholder: function (countryCode) {
            switch (countryCode.toUpperCase()) {
                case "SE":
                    return "ÅÅMMDDNNNN";
                case "NO":
                    return "DDMMYYNNNNN";
                case "DK":
                    return "DDMMYYXXXX";
                case "FI":
                    return "NNNNNNYSSSX";   // n is digit (ddmmyy)
                    // y could be +, - or A
                    // s is digit   --  x could be digit or letter. It is a checksum 
                default:
                    return "";
            }
        },
        _getCompanyNoPlaceholder: function (countryCode) {
            switch (countryCode.toUpperCase()) {
                case "SE":
                    return "NNNNNNNNNN";
                case "NO":
                    return "NNNNNNNNN";
                case "DK":
                    return "XXXXXXXX";
                case "FI":
                    return "NNNNNNN-N";
                case "NL":
                    return "NNNNNNNN";
                default:
                    return "";
            }
        },
        _getPersonNoValidationClass: function (countryCode) {
            switch (countryCode.toUpperCase()) {
                case "SE":
                    return "valIdentificationNoSE";
                default:
                    return "";
            }
        },
        _getIdentificationNoInputType: function (countryCode) {
            var f5CheckoutAddresses = this;
            if (f5CheckoutAddresses.options.isMobileDevice === 0) {
                return "text";
            }
            switch (countryCode.toUpperCase()) {
                case "SE":
                case "NO":
                case "DK":
                    return "number";
                case "FI":
                    return "text";
                default:
                    return "text";
            }
        }
    });
})(jQuery);;
(function ($) {
    $.widget("f5.f5CheckoutArticles", {
        options: {
            siteRootUrl: "",
            numberFormatterUrl: ""
        },
        _create: function () {
            var f5CheckoutArticlesWidget = this;

            $(".articleQuantityInput").each(function () {
                $(this).mask("9?9999", { placeholder: "" });
            });

            $(".articleQuantityInput").on("change", function (e) {
                e.preventDefault();
                if ($(this).hasClass("disabled")) {
                    return;
                }

                f5CheckoutArticlesWidget.options.checkout._disableButtons(true);
                $(this).addClass("disabled");

                var articleId = $(this).data("article-id"),
                    newValue = $(this).val(),
                    parsedNumber = parseInt(newValue, 10);

                if (isNaN(parsedNumber)) {
                    $(this).val($(this).data('old-value'));
                    $(this).mask("9?9999", { placeholder: "" });
                } else {
                    $(this).val(parsedNumber);
                    f5CheckoutArticlesWidget._updateArticleQuantity(articleId, parsedNumber);
                    $(this).data('old-value', parsedNumber);
                }
                $(this).removeClass("disabled");
                f5CheckoutArticlesWidget.options.checkout._enableButtons(true);
            });

            $(".increaseArticleQuantity").on("click", function (e) {
                e.preventDefault();
                if ($(this).hasClass("disabled")) {
                    return;
                }
                var articleId = $(this).data("article-id");
                var curAmount = parseInt($("#article-quantity-" + articleId).val(), 10);
                $("#article-quantity-" + articleId).val(curAmount + 1).trigger("change");

            });

            $(".decreaseArticleQuantity").on("click", function (e) {
                e.preventDefault();
                if ($(this).hasClass("disabled")) {
                    return;
                }
                var articleId = $(this).data("article-id");
                var curAmount = parseInt($("#article-quantity-" + articleId).val(), 10);

                if (curAmount > 1) {
                    $("#article-quantity-" + articleId).val(curAmount - 1).trigger("change");
                }
            });

            $("body").on("click", ".removeFromCart", function (e) {
                e.preventDefault();
                if ($(this).hasClass("disabled")) {
                    return;
                }
                f5CheckoutArticlesWidget.options.checkout._disableButtons(true);

                var articleId = $(this).data("article-id");
                f5CheckoutArticlesWidget._updateArticleQuantity(articleId, 0);

                f5CheckoutArticlesWidget.options.checkout._enableButtons(true);
            });
        },
        verifyStockArticles: function () {
            var checkoutArticles = this;
            var returnValue = true;

            Ajax(
                checkoutArticles.options.siteRootUrl + '/Shop/IsArticlesInStock/', // Url
                { cart: $(document).f5LocalStorageCart("getCart") },
                function (result) {
                    if (!result.Successful) {
                        var modalInvoker = this;
                        $(modalInvoker).f5Modal({
                            type: 'error',
                            modalContent: result.Message
                        });

                        returnValue = false;
                    }
                },
                "post",
                false,
                false,
                undefined,
                "application/json; charset=utf-8"
            );

            return returnValue;
        },

        getArticleTrackingNumbers: function () {
            var articleTrackingNumbers = [];
            $(".article-tracking-number").each(function (index) {
                articleTrackingNumbers[index] = $(this).val();
            });
            return articleTrackingNumbers;
        },

        updateOrderLineTable: function (orderLines, isVatIncluded) {
            var checkoutArticles = this;
            $.each(orderLines, function (index, orderLine) {
                $("#order-line-articleid-" + orderLine.ArticleId)
                    .html((isVatIncluded ? orderLine.GrossSumOfLine : orderLine.NetSumOfLine));

                $("#order-line-articleid-" + orderLine.ArticleId)
                    .formatNumber({ format: "#,##0.00", locale: checkoutArticles.options.numberFormatterLocale });

            });

            // Display correct unit price for articles
            if (isVatIncluded) {
                $(".articleUnitPriceNet").addClass("hidden");
                $(".articleUnitPriceGross").removeClass("hidden");
            } else {
                $(".articleUnitPriceNet").removeClass("hidden");
                $(".articleUnitPriceGross").addClass("hidden");
            }
        },

        _updateArticleAmounts:function(f5CheckoutArticlesWidget, data) {
            $(f5CheckoutArticlesWidget.options.parentElement).trigger(
                "CheckoutChildUpdated",
                { "invoker": "Articles", pricesToChange: data }
            );

            f5CheckoutArticlesWidget.options.checkout.options.hostDeliveryMethods.f5CheckoutDeliveryMethods(
                "updateCheckoutDeliveryMethods"
            );

            f5CheckoutArticlesWidget.options.checkout.options.hostDiscounts.f5CheckoutDiscounts(
                "reactivateDiscountCode"
            );

            f5CheckoutArticlesWidget.options.checkout.options.hostDeliveryMethods.f5CheckoutDeliveryMethods(
                "chooseDeliveryMethod",
                $(".jsDeliveryMethod:checked").val()
            );

            $(document).f5Shop("updateCartArticleNo", $(document).f5LocalStorageCart("itemCount"));
        },

        _updateArticleQuantity: function (articleId, amount) {
            var f5CheckoutArticlesWidget = this;

            var success = function (result) {
                if (result.Successful) {
                    var existingCartItemIndex = $(document).f5LocalStorageCart("getItemIndex", articleId);
                    var additionalInformation = $("#article-additional-information-" + articleId).text().length
                        ? $("#article-additional-information-" + articleId).text().trim()
                        : '';

                    if (amount === 0) {
                        $("#checkout-row-" + articleId).remove();
                        if (existingCartItemIndex > -1) {
                            $(document).f5LocalStorageCart("deleteItem", articleId);
                        }
                    } else {
                        if (existingCartItemIndex > -1) {
                            $(document).f5LocalStorageCart("updateItem", existingCartItemIndex, amount, additionalInformation);
                        } else {
                            var name = $(this).data("article-name"),
                                url = $(this).data("article-url"),
                                price = $(this).data("article-price").replace(',', '.'),
                                imageLink = $(this).data("article-image-link");
                            $(document).f5LocalStorageCart("addNewItem", articleId, amount, additionalInformation, name, url, price, imageLink);
                        }
                    }

                    f5CheckoutArticlesWidget.updateOrderLineTable(result.Data.OrderLines, result.Data.VatIsIncluded);
                    f5CheckoutArticlesWidget._updateArticleAmounts(f5CheckoutArticlesWidget, result.Data, amount);
                } else {
                    var modalInvoker = this;
                    $(modalInvoker).f5Modal({
                        type: 'error',
                        modalContent: resources_E_Article_Site.imsg_QuantityExceedsStockBalance,
                        buttons: [{
                            text: resources_Common.btn_OK,
                            action: function () {
                                $(modalInvoker).f5Modal("close");
                                ReloadPage();
                            }
                        }]
                    });
                }
            };
            var data = {
                cart: $(document).f5LocalStorageCart("getCart"),
                articleId: articleId,
                amount: amount
            };
            CheckoutAjax(
                f5CheckoutArticlesWidget.options.siteRootUrl + '/Shop/UpdateArticleQuantityInOrder',
                data,
                success,
                "post",
                true,
                false,
                undefined,
                "application/json; charset=utf-8"
            );
        }
    });
})(jQuery);;
(function ($) {
    $.widget("f5.f5CheckoutInit", {
        options: {
        },

        _create: function () {
            $("#checkoutSpinnerContainer").show();
            this._updateOrderFromSession();
        },

        _updateOrderFromSession: function (e) {
            var checkout = this;
            var url = SITE_ROOT_LANG + "/Shop/CheckoutView",
                data = {
                    cart: $(document).f5LocalStorageCart("getCart")
                },
                success = function (result) {
                    $("#checkoutSpinnerContainer").hide();
                    $("#checkout-placeholder-container").html(result);
                    $("#checkout-form").f5Checkout(
                        {
                            trackingEnabled: TRACKING_ENABLED,
                            isMobileDevice: IS_MOBILE_DEVICE,
                            stopOutOfStockOrders: STOP_OUT_OF_STOCK_ORDERS,
                            numberFormatterLocale: NUMBER_FORMATTER_LOCALE,
                            siteRootUrl: SITE_ROOT_LANG
                        });
                },
                type = "POST";
            Ajax(url, data, success, type, true, false, undefined, "application/json; charset=utf-8");
        }
});
})(jQuery);;
(function ($) {
    $.widget("f5.f5CheckoutDeliveryMethods", {
        options: {
            siteRootUrl : ""
        },
        _create: function () {
            var f5CheckoutDeliveryMethods = this;

            f5CheckoutDeliveryMethods._loadDeliveryMethodFunctions();
        },
        updateCheckoutDeliveryMethods: function () {
            var f5CheckoutDeliveryMethods = this,
                url = f5CheckoutDeliveryMethods.options.siteRootUrl + "/Shop/CheckoutUpdateOrderDeliveryMethods",
                success = function (data) {
                    $("#delivery-methods-inner-container").html(data);
                    f5CheckoutDeliveryMethods._loadDeliveryMethodFunctions();
                };

            CheckoutAjax(
                url,
                { },
                success,
                "get",
                false);
        },
        showCheckoutDeliveryMethods: function (availableDeliveryMethods) {
            var allDeliveryMethods = $(".deliveryMethodRow");
            allDeliveryMethods.addClass('hidden');
            var selectedDeliveryMethodId = null;
            var selectedDeliveryMethods = allDeliveryMethods.find("input[name='deliveryMethodId']:checked");
            if (selectedDeliveryMethods.length > 0) {
                selectedDeliveryMethodId = selectedDeliveryMethods.first().val();
            }
            allDeliveryMethods.find("input[name='deliveryMethodId']").prop('checked', '');

            var availableDeliveryMethodsCount = availableDeliveryMethods.length;
            if (availableDeliveryMethodsCount < 1) {
                $("#no-deliverymethods-available").removeClass("hidden");
                return;
            }

            var singleMethodAvailable = availableDeliveryMethodsCount === 1 ? 'checked' : '';
            allDeliveryMethods.each(function (index, value) {
                var deliveryMethodInput = $(value).find("input[name='deliveryMethodId']");
                var deliveryMethodId = deliveryMethodInput.val();
                if (deliveryMethodId && $.inArray(deliveryMethodId, availableDeliveryMethods) > -1) {
                    $(value).removeClass('hidden');
                    deliveryMethodInput.prop('checked', selectedDeliveryMethodId === deliveryMethodId || singleMethodAvailable);
                }
            });
        },
        toggleDeliveryMethods: function (countryId) {

            $(".deliveryMethodRow").addClass("hidden");
            var selectedDeliveryMethodId = null;
            var selectedDeliveryMethods = $(".deliveryMethodRow").find("input[name='deliveryMethodId']:checked");
            if (selectedDeliveryMethods.length > 0) {
                selectedDeliveryMethodId = selectedDeliveryMethods.first().val();
            }
            $(".jsDeliveryMethod").prop("checked", false);

            if (countryId == null || countryId == "") {
                $("div#delivery-methods-container").addClass("hidden");
                return;
            }

            var isVatNecessary = ($("#checkoutCountry option:selected").attr("data-is-vat-necessary") == "True" ? true : false);
            if (isVatNecessary) {
                $(".deliveryMethodRow .grossPrice").removeClass("hidden");
                $(".deliveryMethodRow .netPrice").addClass("hidden");
            } else {
                $(".deliveryMethodRow .grossPrice").addClass("hidden");
                $(".deliveryMethodRow .netPrice").removeClass("hidden");
            }

            $("div#delivery-methods-container").removeClass("hidden");

            var availableDeliveryMethods = $(".deliveryMethodRow." + countryId);
            if (availableDeliveryMethods.length == 0) {
                $(".deliveryMethodRow#no-deliverymethods-available").removeClass("hidden");
                return;
            }

            availableDeliveryMethods.removeClass("hidden");

            var singleMethodAvailable = availableDeliveryMethods.length == 1;
            availableDeliveryMethods.each(function (index, value) {
                var deliveryMethodInput = $(value).find(".jsDeliveryMethod");
                var deliveryMethodId = deliveryMethodInput.val();
                deliveryMethodInput.prop('checked', selectedDeliveryMethodId === deliveryMethodId || singleMethodAvailable);
            });
        },
        validate: function () {
            var isValid = $(".jsDeliveryMethod").length > 0;

            if (!isValid) {
                $(".validationErrorNoDeliveryMethods").show().fadeOut(6000);
            }

            return isValid;
        },
        chooseDeliveryMethod: function (deliveryMethodId) {
            var f5CheckoutDeliveryMethods = this;
            var success = function (result) {
                if (result.Successful === false) {
                    ReloadPage();
                }

                $(f5CheckoutDeliveryMethods.options.parentElement).trigger(
                    "CheckoutChildUpdated",
                    { "invoker": "DeliveryMethod", pricesToChange: result.Data }
                );
            };

            CheckoutAjax(
                f5CheckoutDeliveryMethods.options.siteRootUrl + '/Shop/ChooseDeliveryMethod', // Url
                { deliveryMethodId: deliveryMethodId }, // Data
                success, // Success
                "post", // Method
                true // Async
            );
        },
        _loadDeliveryMethodFunctions: function () {
            var f5CheckoutDeliveryMethods = this;
            
            $(".deliveryExpander").expander({
                expandText: resources_F5.Common_Link_ReadMore,
                userCollapseText: resources_F5.Common_Link_ReadLess,
                slicePoint: 130,
                expandEffect: 'show',
                expandSpeed: 0,
                collapseEffect: 'hide',
                collapseSpeed: 0,
                afterExpand: function () {
                    $(this).find('.details').css({ display: 'inline' });
                }
            });

            $(".deliveryExpanderMobile").expander({
                expandText: resources_F5.Common_Link_ReadMore,
                userCollapseText: resources_F5.Common_Link_ReadLess,
                slicePoint: 70,
                expandEffect: 'show',
                expandSpeed: 0,
                collapseEffect: 'hide',
                collapseSpeed: 0,
                afterExpand: function () {
                    $(this).find('.details').css({ display: 'inline' });
                }
            });

            $(document).off("click", ".deliveryMethodTitle");
            $(document).on("click", ".deliveryMethodTitle", function () {
                var checkBox = $(this).find("input:radio").first();
                if (checkBox.hasClass("disabled")) {
                    return;
                }
                checkBox.prop("checked", true);
                f5CheckoutDeliveryMethods.chooseDeliveryMethod(checkBox.val());
            });
        }
    });
})(jQuery);;
(function() {
    $.widget("f5.f5CheckoutCountry",
        {
            options: {
                siteRootUrl: ""
            },
            _create: function() {
                var f5CheckoutCountry = this;

                $("#checkoutCountry").on("change", function() {

                    $("div.validationError").remove();

                    var invoiceCountry = $("#checkoutCountry option:selected").attr("data-code");
                    $("input#invoiceCountry").val(invoiceCountry);
                    var customerType = $(".jsCheckoutCustomerType:checked").val();

                    var countryCode = $("#checkoutCountry option:selected").attr("data-code");
                    $("#invoiceMobilePhone").f5CheckoutPhone("setCountry", countryCode);
                    $("#deliveryMobilePhone").f5CheckoutPhone("setCountry", countryCode);
                    var countryId = $(this).val();

                    var url = f5CheckoutCountry.options.siteRootUrl + "/Shop/ChangeCountry",
                        success = function(result) {
                            if (result.Successful) {

                                $("#checkout-form-step1").f5CheckoutArticles(
                                    "updateOrderLineTable",
                                    result.Data.OrderLines,
                                    result.Data.VatIsIncluded
                                );

                                $("#delivery-methods-container").f5CheckoutDeliveryMethods(
                                    "updateCheckoutDeliveryMethods"
                                );

                                $("#delivery-methods-container").f5CheckoutDeliveryMethods(
                                    "toggleDeliveryMethods",
                                     countryId
                                );

                                $("#payment-methods-container").f5CheckoutPaymentMethods(
                                    "togglePaymentMethods",
                                     countryId
                                );

                                $(f5CheckoutCountry.options.parentElement).trigger(
                                    "CheckoutChildUpdated",
                                    { "invoker": "Country", pricesToChange: result.Data }
                                );

                                $("#discounts-container").f5CheckoutDiscounts(
                                    "update",
                                    result.Data
                                );

                            } else {
                                var modalInvoker = this;
                                $(modalInvoker).f5Modal({
                                    type: 'error',
                                    modalContent: resources_Common.hdr_Error
                                });
                            }
                        },
                        data = {
                            cart: $(document).f5LocalStorageCart("getCart"),
                            countryId: countryId,
                            customerType: customerType,
                            discountCode: $("#discountCodeHidden").val()
                        };
                    CheckoutAjax(
                        url,
                        data,
                        success,
                        "post",
                        true,
                        false,
                        undefined,
                        "application/json; charset=utf-8");
                });
            }
        });
})(jQuery);;
(function($) {
    $.widget("f5.f5CheckoutPersonalInformation",
        {
            options: {
                siteRootUrl: ""
            },
            _create: function() {
                $("#invoiceMobilePhone").f5CheckoutPhone();
                $("#deliveryMobilePhone").f5CheckoutPhone();
            },

            validate: function () {
                if (!$("#checkout-form-step2").validate().form()) {

                    return false;
                }
                return true;
            },

            sendAddresses: function () {
                var f5CheckoutPersonalInformation = this;
                var url = f5CheckoutPersonalInformation.options.siteRootUrl + "/Shop/SetOrderAddresses",

                    success = function(result) {
                        return result.Successful;
                    };

                $("#invoiceMobilePhone").f5CheckoutPhone("addPrefixToPhoneNumber");
                $("#deliveryMobilePhone").f5CheckoutPhone("addPrefixToPhoneNumber");
                var data = $("#checkout-form-step2").serializeArray();
                CheckoutAjax(url, data, success, "post", false);
            }
        });
})(jQuery);;
(function($) {
    $.widget("f5.f5CheckoutPhone",
    {
        options: {
            intlTelInuputRef: {}
        },

        _create: function () {
            var countryCode = $("#checkoutCountry option:selected").attr("data-code");

            var element = this.element;
            
            this.options.intlTelInuputRef = window.intlTelInput($(element)[0], ({
                separateDialCode: true,
                initialCountry: countryCode,
                preferredCountries: ["se", "no", "fi", "dk", "nl", "gb" ]
            }));
        },

        setCountry: function(countryCode) {
            this.options.intlTelInuputRef.setCountry(countryCode);
        },

        getPhoneCountryPrefix: function() {
            return this.options.intlTelInuputRef.getSelectedCountryData().dialCode;
        },

        addPrefixToPhoneNumber: function () {

            this.removePrefixFromNumber();

            if (this._swedishCountrySelected()) {
                this._removeZerosFromSwedishNumber();
            }

            var element = this.element;
            var phoneNumber = $(element).val(); 
            if (phoneNumber) {
                var countryPrefix = this.getPhoneCountryPrefix();
                var fullNumber ="+" + countryPrefix + phoneNumber;
                $(element).val(fullNumber);
            }
        },

        removePrefixFromNumber: function() {
            var element = this.element;
            var regex = new RegExp("^(\\++)" + this.getPhoneCountryPrefix());
            var fullPhoneNumber = $(element).val();
            var phoneNumber = fullPhoneNumber.replace(regex, "");
            $(element).val(phoneNumber);
        },

        removeWidget: function() {
            this._destroy();
        },

        _swedishCountrySelected: function () {
            return this.options.intlTelInuputRef.getSelectedCountryData().iso2 === "se";
        },

        _removeZerosFromSwedishNumber: function () {
            var element = this.element;
            var phoneNumber = $(element).val();
            var regex = new RegExp("^0+");
            var cleanedPhoneNumber = phoneNumber.replace(regex, "");
            $(element).val(cleanedPhoneNumber);
        },        

        _destroy: function() {
            this.options.intlTelInuputRef.destroy();
        }
    });
})(jQuery);;
(function ($) {
    $.widget("f5.f5CheckoutPaymentMethods", {
        options: {
            siteRootUrl: ""
        },
        _create: function () {
            var f5CheckoutPaymentMethods = this;

            $(document).off("click", ".paymentMethodImg");
            $(document).on("click", ".paymentMethodImg", function () {
                var checkBox = $(this).find("input:radio").first();
                if (checkBox.hasClass("disabled")) {
                    return;
                }
                checkBox.prop("checked", true);
                f5CheckoutPaymentMethods.choosePaymentMethod(checkBox.val());
            });

            $(".paymentExpander").expander({
                expandText: resources_F5.Common_Link_ReadMore,
                userCollapseText: resources_F5.Common_Link_ReadLess,
                slicePoint: 130,
                expandEffect: 'show',
                expandSpeed: 0,
                collapseEffect: 'hide',
                collapseSpeed: 0,
                afterExpand: function () {
                    $(this).find('.details').css({ display: 'inline' });
                }
            });

            $(".paymentExpanderMobile").expander({
                expandText: resources_F5.Common_Link_ReadMore,
                userCollapseText: resources_F5.Common_Link_ReadLess,
                slicePoint: 70,
                expandEffect: 'show',
                expandSpeed: 0,
                collapseEffect: 'hide',
                collapseSpeed: 0,
                afterExpand: function () {
                    $(this).find('.details').css({ display: 'inline' });
                }
            });
        },
        choosePaymentMethod: function (paymentMethodId) {
            var f5CheckoutPaymentMethods = this;

            var success = function (result) {
                if (result.Successful === false) {
                    ReloadPage();
                }

                $(f5CheckoutPaymentMethods.options.parentElement).trigger(
                    "CheckoutChildUpdated",
                    {
                        "invoker": "PaymentMethod",
                        pricesToChange: result.Data
                    });
            };

            CheckoutAjax(
                f5CheckoutPaymentMethods.options.siteRootUrl + '/Shop/ChoosePaymentMethod', // Url
                { paymentMethodId: paymentMethodId }, // Data
                success, // Success
                "post", // Method
                true // Async
            );
        },
        togglePaymentMethods: function (countryId) {

            // Hides all rows
            $(".paymentMethodRow").addClass("hidden");
            $(".jsPaymentMethod").prop("checked", false);

            if (countryId == null || countryId == "") {
                $("div#payment-methods-container").addClass("hidden");
                return;
            }
            $("div#payment-methods-container").removeClass("hidden");

            var availablePaymentMethods = $(".paymentMethodRow." + countryId);
            if (availablePaymentMethods.length == 0) {
                $(".paymentMethodRow#no-paymentmethods-available").removeClass("hidden");
                return;
            }

            var isVatNecessary = ($("#checkoutCountry option:selected").attr("data-is-vat-necessary") == "True" ? true : false);
            if (isVatNecessary) {
                $(".paymentMethodRow span.sum.grossPrice").removeClass("hidden");
                $(".paymentMethodRow span.sum.netPrice").addClass("hidden");
            } else {
                $(".paymentMethodRow span.sum.grossPrice").addClass("hidden");
                $(".paymentMethodRow span.sum.netPrice").removeClass("hidden");
            }

            availablePaymentMethods.removeClass("hidden");

            // Preselect method if there is only one option available
            if (availablePaymentMethods.length == 1) {
                var paymentMethod = $(availablePaymentMethods[0]).find(".jsPaymentMethod");
                paymentMethod.prop('checked', true);
            }
        },
        getActivePaymentMethodAttributes: function() {
            var paymentMethod = $(".jsPaymentMethod:radio:checked");
            var attributes = {
                disableDeliveryAddress: paymentMethod.data("disable-delivery-address") === "True",
                disableDeliveryAddressExplanation: paymentMethod.data("disable-delivery-address-explanation"),
                mobileNumberRequired: paymentMethod.data("is-mobile-number-required") === "True",
                mobileNumberValidationStrict: paymentMethod.data("is-mobile-number-validation-strict") === "True",
                disallowedEmail: paymentMethod.data("do-not-allow-email")
            };

            if (!paymentMethod.hasClass("idCompanyHidden")) {
                if (paymentMethod.hasClass("idCompanyMandatory")) {
                    attributes.companyNumberHandling = "mandatory";
                } else {
                    attributes.companyNumberHandling = "optional";
                }
            } else {
                attributes.companyNumberHandling = "hidden";
            };

            if (!paymentMethod.hasClass("idPersonHidden")) {
                if (paymentMethod.hasClass("idPersonMandatory")) {
                    attributes.personNumberHandling = "mandatory";
                } else {
                    attributes.personNumberHandling = "optional";
                }
            } else {
                attributes.personNumberHandling = "hidden";
            }

            return attributes;
        },
        validate: function () {
            var isValid = $(".jsPaymentMethod").length > 0;
            
            if (!isValid) {
                $(".validationErrorNoPaymentMethods").show().fadeOut(6000);
            }

            return isValid;
        }
    });
})(jQuery);;
(function ($) {
    $.widget("f5.f5CheckoutTotals", {
        options: {
            numberFormatterLocale: ""
        },

        _create: function () { },

        update: function (orderSummmary, isVatIncluded) {
            var f5CheckoutTotals = this;

            $("#checkout-orderlines-total-sum").html((isVatIncluded
                ? orderSummmary.GrossOrderLinesTotalAmount
                : orderSummmary.NetOrderLinesTotalAmount));
            $("#checkout-orderlines-total-sum").formatNumber({ format: "#,##0.00", locale: f5CheckoutTotals.options.numberFormatterLocale });
            $("#totalItemsAmount").val(orderSummmary.GrossOrderLinesTotalAmount);

            $(".checkout-total-sum-value").html(orderSummmary.GrossTotalAmount);
            $(".checkout-total-sum-value").formatNumber({ format: "#,##0.00", locale: f5CheckoutTotals.options.numberFormatterLocale });
            $(".checkout-total-vat-value").html(orderSummmary.VatAmount);
            $(".checkout-total-vat-value").formatNumber({ format: "#,##0.00", locale: f5CheckoutTotals.options.numberFormatterLocale });
        },

        getTotalAmount: function() {
            var totalAmountText = $('.checkout-total-sum-value').first().text();
            return parseFloat($.trim(totalAmountText).replace(/,/g, '.').replace(/\s+/g, ''));
        }
});
})(jQuery);;
(function ($) {
    $.widget("f5.f5CheckoutDiscounts", {
        options: {
            numberFormatterLocale: "",
            siteRootUrl: ""
        },
        _create: function () {
            var f5CheckoutDiscountMethods = this;
            $("a#activateDiscountCode").on("click", function (e) {
                e.preventDefault();

                if ($(this).hasClass("disabled")) {
                    return;
                }

                f5CheckoutDiscountMethods.activateDiscountCode();
            });
        },
        update: function (order) {
            var f5CheckoutDiscountMethods = this;

            if (order.DiscountText) {
                $("#checkout-row-discount").removeClass("hidden");
                if (order.DiscountAmountGross != 0) {
                    $("#order-line-articleid-discount")
                        .text((order.VatIsIncluded ? order.DiscountAmountGross : order.DiscountAmountNet))
                        .formatNumber({ format: "#,##0.00", locale: f5CheckoutDiscountMethods.options.numberFormatterLocale });

                    $("#order-line-articleid-discount-currency").removeClass("hidden");
                } else {
                    $("#order-line-articleid-discount").text("");
                    $("#order-line-articleid-discount-currency").addClass("hidden");
                }
                if (order.DiscountHasFreeFreight) {
                    $(".discountFreeDelivery").removeClass("hidden");
                    $(".noDiscountDelivery").addClass("hidden");
                } else {
                    $(".discountFreeDelivery").addClass("hidden");
                }
                var elem = document.createElement('textarea');
                elem.innerHTML = order.DiscountText;
                var decoded = elem.value;
                $("div#order-line-discount-text").text(decoded);
            } else {
                $("#checkout-row-discount").addClass("hidden");
                $(".discountFreeDelivery").addClass("hidden");
            }

            var isVatNecessary = ($("#checkoutCountry option:selected")
                .data("is-vat-necessary") == "True" ? true : false);

            // Make sure correct price of delivery is shown if delivery method isn't free according to discount
            if ($(".discountFreeDelivery").hasClass("hidden")) {
                if (isVatNecessary) {
                    $(".deliveryMethodRow span.noDiscountDelivery.grossPrice").removeClass("hidden");
                    $(".deliveryMethodRow span.noDiscountDelivery.netPrice").addClass("hidden");
                } else {
                    $(".deliveryMethodRow span.noDiscountDelivery.grossPrice").addClass("hidden");
                    $(".deliveryMethodRow span.noDiscountDelivery.netPrice").removeClass("hidden");
                }
            }
        },
        EnsureValidDiscount: function (discountCode) {
            var checkoutDiscounts = this;
            var returnValue = { order: null, isValid: true };

            Ajax(
                checkoutDiscounts.options.siteRootUrl + '/Shop/EnsureValidDiscount/', //--- // Url  
                { discountCode: discountCode }, // Data
                function (result) {
                    if (!result.Successful) {
                        $("#discountCode").val('');
                        
                        var modalInvoker = this;
                        $(modalInvoker).f5Modal({
                            type: 'error',
                            modalContent: result.Data.Message
                        });

                        returnValue.isValid = false;
                        returnValue.Order = result.Data.Order;
                    }
                }, // Success
                "post", // Method
                false // Async
            );

            return returnValue;
        },
        activateDiscountCode: function () {
            var f5CheckoutDiscountMethods = this;
            f5CheckoutDiscountMethods.activateDiscountCodeBase($("#discountCode").val());
        },
        reactivateDiscountCode: function () {
            var f5CheckoutDiscountMethods = this;
            f5CheckoutDiscountMethods.activateDiscountCodeBase($("#discountCodeHidden").val());
        },
        activateDiscountCodeBase: function(discountCode) {
            var f5CheckoutDiscountMethods = this;
            var countryId = $("#checkoutCountry").val() ? $("#checkoutCountry").val() : null;
            f5CheckoutDiscountMethods.options.checkout._disableButtons(true);
            var url = f5CheckoutDiscountMethods.options.siteRootUrl + "/Shop/ApplyDiscountCode",
                success = function (result) {
                    if (!result.Successful) {
                        if (result.Message !== null) {
                            var modalInvoker = this;
                            $(modalInvoker).f5Modal({
                                type: 'error',
                                modalContent: result.Message
                            });
                        }
                    }

                    $("#discountCode").val("");

                    if (result.Successful || result.Data !== null) {
                        $("#discountCodeHidden").val(result.Data.DiscountCode);
                        f5CheckoutDiscountMethods.update(result.Data);
                        $(f5CheckoutDiscountMethods.options.parentElement).trigger(
                            "CheckoutChildUpdated",
                            {
                                "invoker": "Discount",
                                pricesToChange: result.Data
                            });
                    }
                },
                data = { cart: $(document).f5LocalStorageCart("getCart"), discountCode: discountCode, countryId: countryId };

            if (data.discountCode) {
                CheckoutAjax(
                    url,
                    data,
                    success,
                    "post",
                    false,
                    false,
                    undefined,
                    "application/json; charset=utf-8");
            }

            f5CheckoutDiscountMethods.options.checkout._enableButtons(true);
        }
    });
})(jQuery);;
(function ($) {
    $.widget("f5.f5CheckoutOrderStateTracker", {
        options: {
            siteRootUrl: ""
        },
        _create: function () {
            var f5CheckoutOrderStateTracker = this;
            var url = f5CheckoutOrderStateTracker.options.siteRootUrl + "/Shop/IsOrderComplete";
            var retryIntervalInMs = 5000;
            
            var success = function (result) {
                if (result.OrderProcessed) {
                    var destinationUrl;

                    if (result.Successful) {
                        destinationUrl = f5CheckoutOrderStateTracker.options.siteRootUrl + "/Shop/Confirm";
                    } else {
                        destinationUrl = f5CheckoutOrderStateTracker.options.siteRootUrl + "/Shop/CheckoutCancelled";
                    }
                    
                    window.location.assign(destinationUrl);
                } else {
                    isOrderCompleteFunction();
                }
            };

            var isOrderCompleteFunction = function () {
                setTimeout(function () { CheckoutAjax(url, undefined, success, 'GET'); }, retryIntervalInMs);
            };

            isOrderCompleteFunction();
        }
    });
})(jQuery);
;
(function ($) {
    $.widget("f5.f5OrderSummary", {
        options: {
            siteRootUrl: ""
        },
        _create: function () {
            var f5OrderSummary = this;
            $("#order-accept-terms").on("change", function () {
                var termsCheckbox = this;
                var termsApproved = termsCheckbox.checked;
                var url = f5OrderSummary.options.siteRootUrl + "/Shop/UpdateOrderTerms";
                var data = {
                    'termsApproved': termsApproved
                }
                var success = function (result) {
                    if (result.Successful) {
                        $(termsCheckbox).prop('checked', termsApproved);
                    } else {
                        $(termsCheckbox).prop('checked', !termsApproved);
                    }
                };
                CheckoutAjax(
                    url,
                    data,
                    success,
                    "post",
                    true);
            });

            $("#order-subscribe-newsletter").on("change", function () {
                var subscribeToNewsletterCheckbox = this;
                var subscribeToNewsletter = subscribeToNewsletterCheckbox.checked;
                var url = SITE_ROOT_LANG + "/Shop/UpdateSubscribeToNewsletter";
                var data = {
                    'subscribeToNewsletter': subscribeToNewsletter
                }
                var success = function (result) {
                    if (result.Successful) {
                        $(subscribeToNewsletterCheckbox).prop('checked', subscribeToNewsletter);
                    } else {
                        $(subscribeToNewsletterCheckbox).prop('checked', !subscribeToNewsletter);
                    }
                };
                CheckoutAjax(
                    url,
                    data,
                    success,
                    "post",
                    true);
            });

            
        },
        refreshSummaryData: function () {
            var orderSummary = this;

            var url = orderSummary.options.siteRootUrl + "/Shop/CheckoutOrderSummary";
            var success = function (data) {
                $("#orderSummary").html(data);
                $("#summary-edit-payment-and-delivery").on("click", function (e) {
                    e.preventDefault();
                    $(orderSummary.options.parentElement).trigger(
                        "setActiveTab",
                        { "tabIndex": 1, "validateCurrentStep": "false" }
                    );
                });

                $("#summary-edit-addresses").on("click", function (e) {
                    e.preventDefault();
                    $(orderSummary.options.parentElement).trigger(
                        "setActiveTab",
                        { "tabIndex": 2, "validateCurrentStep": "false"  }
                    );
                });

                $("#summary-edit-articles").on("click", function (e) {
                    e.preventDefault();
                    $(orderSummary.options.parentElement).trigger(
                        "setActiveTab",
                        { "tabIndex": 1, "validateCurrentStep": "false"  }
                    );
                });
            };
            CheckoutAjax(
                url,
                {},
                success,
                "post",
                true);
        }
    });
})(jQuery);;
(function ($) {
    $.widget("f5.f5Modal", {
        options: {
            type: '', // Posible types: error, warning, help, info. Empty value here represents a custom modal.
            buttons: [],
            title: '',
            modalContent: '',
            modalId: ''
        },
        _create: function() {
            var modal = this;
            
            function getDialogTemplate() {
                return '<div id="{0}" class="nc3 bootstrap-4 modal ' + (modal.options.type === '' ? '' : "modal-{1}") + '"><div class="modal-dialog modal-sm"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title">{2}</h4></div><div class="modal-body"><p>{3}</p></div><div class="modal-footer">{4}</div></div></div></div>;';
            }

            modal._setModalId();
            modal._setDefaultValues();
            modal._setButtonIds();

            var content = getDialogTemplate().format(modal.options.modalId, modal.options.type, modal.options.title, modal.options.modalContent, modal._getButtonHtml());

            $(content).modal({
                backdrop: 'static',
                keyboard: false
            });

            modal._applyButtonClicks();
        },
        close: function () {
            var modal = this;
            $("#" + modal.options.modalId).modal('hide');
            $("#" + modal.options.modalId).remove();
            $(".modal-backdrop").remove();
            modal.destroy();
        },
        _getButtonHtml: function() {
            var modal = this;
            var buttonsHtml = '';

            for (i = 0; i < modal.options.buttons.length; i++) {
                var buttonObj = modal.options.buttons[i];
                
                buttonsHtml += '<button id="' + buttonObj.id + '" type="button" class="btn ' + (i == 0 ? 'btn-primary' : 'btn-default') + '">' + buttonObj.text + '</button> ';
            }

            return buttonsHtml;
        },
        _applyButtonClicks: function () {
            var modal = this;

            for (i = 0; i < modal.options.buttons.length; i++) {
                var buttonObj = modal.options.buttons[i];
                $("#" + modal.options.modalId).on('click', "#" + buttonObj.id, buttonObj.action);
            }
        },
        _setButtonIds: function () {
            var modal = this;

            for (i = 0; i < modal.options.buttons.length; i++) {
                if (!modal.options.buttons[i].id) {
                    modal.options.buttons[i].id = "modal-button-" + i;
                }
            }
        },
        _setModalId: function () {
            var modal = this;

            if (modal.options.modalId === "") {
                var openModalsCount = $("[id^=modal-dialog-]").length;
                modal.options.modalId = "modal-dialog-" + openModalsCount;
            }
        },
        _setDefaultValues: function() {
            var modal = this;

            if (modal.options.buttons.length === 0) {
                modal.options.buttons = [{ text: resources_Common.btn_OK, action: function () { modal.close(); } }];
            }

            switch(modal.options.type) {
                case 'error': {
                    if (modal.options.title === '') {
                        modal.options.title = resources_Common.hdr_Error;
                    }
                    break;
                }
                case 'warning': {
                    if (modal.options.title === '') {
                        modal.options.title = resources_Common.imsg_header_Warning;
                    }
                    break;
                }
                case 'help': {
                    if (modal.options.title === '') {
                        modal.options.title = resources_Common.qmsg_hdr_confirm;
                    }
                    break;
                }
                case 'info': {
                    if (modal.options.title === '') {
                        modal.options.title = resources_Common.imsg_hdr_Information;
                    }
                    break;
                }
                case 'upgrade': {
                    if (modal.options.title === '') {
                        modal.options.title = resources_Inapp.imsg_hdr_Upgrade;
                    }
                    break;
                }
            }
        }
    });
})(jQuery);
;
(function ($) {
    $.widget("f5.f5PasswordPage", {
        options: {

        },
        _create: function () {
            var obj = this;
            $("#formLogin").on("submit", function (e) {
                e.preventDefault();
                e.stopPropagation();
                var pageId = PAGE_ID,
                    password = $("input[name='pageLoginPassword']").val();
                Ajax(
                    SITE_ROOT + '/sitesystem/AccessPasswordProtectedPage/' + pageId, // Url
                    {
                    'password': password
                    }, // Data
                    function (result) {
                        if (result.Successful) {
                            ReloadPage();
                        }
                        else {
                            $(".validationErrorSummary").show();
                        }
                    }, // Success
                    "get", // Method
                    true, // Async
                    false // Cache
                );
            });
            $("#page-login").on("click", function (e) {
                e.preventDefault();
                $("#formLogin").trigger("submit");
            });
        },
        destroy: function () {
            $.Widget.prototype.destroy.call(this);
        }
    });
})(jQuery);;
(function ($) {
    $.widget('f5.f5Spinner', {
        options: {
            spinnerDialog: null
        },
        _create: function () {

        },

        showSpinnerDialog: function (content) {

            var spinner =
                '<div id="spinnerContainer">' +
                '<div id="spinnerPlaceholder">' +
                '<img src="/Content/Images/spinner128.GIF" class="spinner128" alt="Loading" />' +
                '<div class="spinnerLoadingText">' + content + '</div>' +
                '</div>' +
                '</div>';

            $("body").append(spinner);
        },

        closeSpinnerDialog: function () {
            $("#spinnerContainer").remove();
        }

    });
})(jQuery);;
(function ($) {
    $.widget('f5.f5SessionTimer', {
        options: {
            sessionTime: 3600, // seconds
            showNotification: 60,
            isAdmin: false,
            counter: null
        },

        _create: function () {
            var f5SessionTimer = this;
            if (f5SessionTimer.options.counter != null) {
                clearInterval(f5SessionTimer.options.counter);
            }
            
            var timeLeftInSeconds = f5SessionTimer.options.sessionTime;
            f5SessionTimer.options.counter = setInterval(timer, 1000);
            var adminSignOutUrl = SITE_ROOT + "/system/signoutlandingpage";

            var sessionExpirationNotification = new Noty({
                type: "warning",
                layout: 'topLeft',
                theme: "bootstrap-v4"
            });
            function timer() {
                if (timeLeftInSeconds == -1) {
                    clearInterval(f5SessionTimer.options.counter);
                    if (f5SessionTimer.options.isAdmin) {
                        window.location = adminSignOutUrl;
                    } else {
                        ReloadPage();
                    }
                    return;
                }

                var seconds = timeLeftInSeconds % 60;
                var minutes = Math.floor(timeLeftInSeconds / 60);
                minutes %= 60;
                if (timeLeftInSeconds <= f5SessionTimer.options.showNotification) {
                    var notificationText = f5SessionTimer._getFormatedNotificationText(minutes, seconds);
                    sessionExpirationNotification.show();
                    sessionExpirationNotification.setText(notificationText);
                }
                timeLeftInSeconds = timeLeftInSeconds - 1;
            }
        },

        reloadSessionTimer: function () {
            var f5SessionTimer = this;
            f5SessionTimer._create();
        },

        _getFormatedNotificationText: function (minutes, seconds) {
            var formattedMinutes = ("0" + minutes).slice(-2);
            var formattedSeconds = ("0" + seconds).slice(-2);
            return resources_Common.imsg_SessionTimeLeft + " " + formattedMinutes + ":" + formattedSeconds;
        }
    });
})(jQuery);;
(function ($) {
    $.widget('f5.f5GoogleLogin', {
        options: {
            googleLoginButton: ".f5GoogleLoginButton",
            googleSignInButton: ".f5GoogleSignInButton"
        },
        _create: function () {
            var f5GoogleLogin = this;
            if (typeof GOOGLE_OAUTH_CLIENT_ID !== 'undefined') {
                if ($('.f5GoogleLoginButton').length) {
                    $('.f5GoogleLoginButton').each(function(i, element) {
                        f5GoogleLogin._initGoogleLoginButton(element, f5GoogleLogin.options.googleLoginButton);
                    });
                }
                if ($('.f5GoogleSignInButton').length) {
                    $('.f5GoogleSignInButton').each(function (i, element) {
                        f5GoogleLogin._initGoogleLoginButton(element, f5GoogleLogin.options.googleSignInButton);
                    });
                }
            }
        },

        _initGoogleLoginButton: function (googleButtonElementRef, googleButtonType) {
            var f5GoogleLogin = this;
            gapi.load('auth2',
                function () {
                    gapi.auth2.init(
                        {
                            client_id: GOOGLE_OAUTH_CLIENT_ID,
                            cookie_policy: 'none'
                        }
                    ).then(function () {
                        var auth2 = gapi.auth2.getAuthInstance();
                        auth2.attachClickHandler(
                            googleButtonElementRef,
                            {},
                            function(user){
                                var url;
                                var data;
                                var googleToken = user.getAuthResponse().id_token;
                                if (googleButtonType === f5GoogleLogin.options.googleLoginButton) {
                                    url = SITE_ROOT + '/shop/GoogleLogin';
                                    data = {
                                        "googleToken": googleToken
                                    };
                                } else {
                                    var f5Token = $("#visitor-passwordToken").val();
                                    url = SITE_ROOT + '/shop/GoogleSignIn';
                                    data = {
                                        "googleToken": googleToken,
                                        "f5Token": f5Token
                                    };
                                }

                                f5GoogleLogin._sendGoogleLoginRequest(url, data);
                            },
                            function(error){ console.log(error); }
                        );
                    });
                });
        },

        _sendGoogleLoginRequest: function(url, data) {
            var success = function (result) {
                if (result.Successful) {
                    if (result.RedirectUrl) {
                        window.location.href = result.RedirectUrl;
                    } else {
                        ReloadPage();
                    }
                } else if (result.Message !== null) {
                    var errorModalInvoker = this;
                    $(errorModalInvoker).f5Modal({
                        type: 'info',
                        modalContent: result.Message
                    });
                } else {
                    $(".validationErrorSummary").show().fadeOut(6000);
                }
            };
            Ajax(url, data, success, "post");
        }
    });
})(jQuery);;
(function ($) {
    $.widget('f5.f5ArticleImageZoom', {
        options: {
        },
        _create: function () {
            var f5ArticleImageZoom = this;

            f5ArticleImageZoom.loadArticleImageZoom();

            $(window).on("resize", function () {
                f5ArticleImageZoom.reloadArticleImageZoom();
            });
        },

        reloadArticleImageZoom: function () {
            var f5ArticleImageZoom = this; 
            $(".img-zoom-lens").remove();
            $(".img-zoom-result").remove();
            f5ArticleImageZoom.loadArticleImageZoom();
        },
        loadArticleImageZoom: function() {
            if ($(".isDesktop #zoomImage").length) {
                var img, lens, result, cx, cy;
                img = document.getElementById("zoomImage");

                /*create lens:*/
                lens = document.createElement("DIV");
                lens.setAttribute("class", "img-zoom-lens");
                lens.style.width = img.width / 3 + "px ";
                lens.style.height = img.height / 3 + "px";

                /*insert lens:*/
                img.parentElement.insertBefore(lens, img);
                /*calculate the ratio between result DIV and lens:*/
                cx = img.offsetWidth / lens.offsetWidth;
                cy = img.offsetHeight / lens.offsetHeight;
                /*set background properties for the result DIV:*/
                result = document.createElement('div');
                result.className = 'img-zoom-result';
                result.style.right = img.width + "px ";
                result.style.width = img.width + "px ";
                result.style.height = img.height + "px";
                result.style.backgroundImage = "url('" + img.src + "')";
                result.style.backgroundSize = (img.width * cx) + "px " + (img.height * cy) + "px";
                $(result).insertAfter("#zoomImage");

                /*execute a function when someone moves the cursor over the image, or the lens:*/
                lens.addEventListener("mousemove", moveLens);
                img.addEventListener("mousemove", moveLens);
                /*and also for touch screens:*/
                lens.addEventListener("touchmove", moveLens);
                img.addEventListener("touchmove", moveLens);

                function moveLens(e) {
                    var pos, x, y;
                    /*prevent any other actions that may occur when moving over the image:*/
                    e.preventDefault();

                    /*get the cursor's x and y positions:*/
                    pos = getCursorPos(e);
                    /*calculate the position of the lens:*/
                    x = pos.x - (lens.offsetWidth / 2);
                    y = pos.y - (lens.offsetHeight / 2);

                    if (x > img.width - lens.offsetWidth) { x = img.width - lens.offsetWidth; }
                    if (x < 0) { x = 0; }
                    if (y > img.height - lens.offsetHeight) { y = img.height - lens.offsetHeight; }
                    if (y < 0) { y = 0; }

                    /*set the position of the lens:*/
                    lens.style.left = x + "px";
                    lens.style.top = y + "px";
                    /*display what the lens "sees":*/
                    result.style.backgroundPosition = "-" + (x * cx) + "px -" + (y * cy) + "px";
                }

                function getCursorPos(e) {
                    var a, x = 0, y = 0;
                    e = e || window.event;

                    /*get the x and y positions of the image:*/
                    a = img.getBoundingClientRect();

                    /*calculate the cursor's x and y coordinates, relative to the image:*/
                    x = e.pageX - a.left;
                    y = e.pageY - a.top;

                    /*consider any page scrolling:*/
                    x = x - window.pageXOffset;
                    y = y - window.pageYOffset;
                    return { x: x, y: y };
                }
            }
        },
        resize: function() {

        }
    });
})(jQuery);;
(function ($) {
    $.widget('f5.f5ArticleImage', {
        options: {
        },
        _create: function () {
            $(".article-switch").on('click',
                function (e) {
                    e.preventDefault();
                    var mainImageAnchor = $(".artImg a:visible:first");
                    var mainImage = mainImageAnchor.find("img");
                    var clickedAnchor = $(this);
                    var newSrc = clickedAnchor.attr('href');
                    mainImage.attr('src', newSrc);
                    mainImageAnchor.attr('href', newSrc);
                    $(".img-zoom-result").css('background-image', 'url(' + newSrc + ')');
                    setTimeout(function () {
                        $(document).f5ArticleImageZoom('reloadArticleImageZoom'); // we need a delay so the reloadArticleImageZoom calculates zoom with new image
                    }, 100);
                });
        }
    });
})(jQuery);;
(function ($) {
    $.widget('f5.f5FacebookLogin', {
        options: {
        },
        _create: function () {
            var f5FacebookLogin = this;
            if (typeof FACEBOOK_OAUTH_APP_ID !== 'undefined') {
                f5FacebookLogin._initFacebook();
                if ($('.f5FacebookLoginButton').length) {
                    f5FacebookLogin._facebookLogin();
                }
                if ($('.f5FacebookSignInButton').length) {
                    f5FacebookLogin._facebookSignin();
                }
            }
        },
        _initFacebook: function () {
            FB.init({
                appId: FACEBOOK_OAUTH_APP_ID,
                autoLogAppEvents: true,
                xfbml: true,
                version: 'v6.0'
            });
        },

        _facebookLogin: function () {
            var f5FacebookLogin = this;
            $(".f5FacebookLoginButton").on("click",
                function () {
                    FB.login(function (response) {
                        if (response.status === 'connected') {
                            var url = SITE_ROOT + '/shop/FacebookLogin';
                            var data = {
                                "facebookToken": encodeURI(response.authResponse.accessToken)
                            }
                            f5FacebookLogin._sendFacebookLoginRequest(url, data);
                        }
                    }, { scope: 'public_profile,email' });
                });
        },

        _facebookSignin: function() {
            var f5FacebookLogin = this;
            $(".f5FacebookSignInButton").on("click",
                function () {
                    FB.login(function (response) {
                        if (response.status === 'connected') {
                            var url = SITE_ROOT + '/shop/FacebookSignIn';
                            var f5Token = $("#visitor-passwordToken").val();
                            var data = {
                                "facebookToken": encodeURI(response.authResponse.accessToken),
                                "f5Token": f5Token
                            }
                            f5FacebookLogin._sendFacebookLoginRequest(url, data);
                        }
                    }, { scope: 'public_profile,email' });
                });
        },

        _sendFacebookLoginRequest: function (url, data) {
            var success = function (result) {
                if (result.Successful) {
                    if (result.RedirectUrl) {
                        window.location.href = result.RedirectUrl;
                    } else {
                        ReloadPage();
                    }
                } else if (result.Message !== null) {
                    var errorModalInvoker = this;
                    $(errorModalInvoker).f5Modal({
                        type: 'info',
                        modalContent: result.Message
                    });
                } else {
                    $(".validationErrorSummary").show().fadeOut(6000);
                }
            };
            Ajax(url, data, success, "post");
        }
    });
})(jQuery);;
