(function () {
    var faqItems = document.querySelectorAll('.faq-item > .faq-item__question');
    if (faqItems !== null) {
        for (var i = 0; i < faqItems.length; i++) {
            faqItems[i].addEventListener('click', function () {
                this.classList.toggle('expanded');
                var answer = this.nextElementSibling;
                if (answer.style.maxHeight) {
                    answer.style.maxHeight = null;
                } else {
                    answer.style.maxHeight = answer.scrollHeight + "px";
                } 
            })
        }
    }
})();;
var RecoverPassowrd = (function () {
    function validateEmail(email) {
        const re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        return re.test(email);
    }

    function xhr(url, data, cbk) {
        var req = new XMLHttpRequest();
        req.addEventListener("readystatechange", function () {
            if (this.readyState === 4) {
                cbk(JSON.parse(req.response))
            }
        });
        req.open("POST", url);
        req.setRequestHeader("Content-Type", "application/json");
        req.send(data);
    }

    function handleFormSubmit(form) {
        var apiURL = document.getElementById('recoverpassword').action;
        var email = document.getElementById('recover-mail').value;
        var datasource = document.querySelector('#recoverpassword input[name="DatasourceId"]').value;
        var data = JSON.stringify({
            "DatasourceId": datasource,
            "Email": email
        });
        var url = location;
        if (validateEmail(email)) {
            xhr(apiURL, data, function (res) {
                if (res.Success) {
                    var msgContainer = document.querySelector('#recoverpassword .error-msg');
                    msgContainer.classList.add('hidden');
                }

                if (res.Success && res.Payload.RedirectUrl !== "") {
                    window.location.href = res.Payload.RedirectUrl
                } else if (res.Success && res.Payload.RedirectUrl == "") {
                    window.location.href = url.protocol + "//" + url.hostname;
                } else if (!res.Success) {
                    var msgContainer = document.querySelector('#recoverpassword .error-msg');
                    msgContainer.classList.remove('hidden');
                    msgContainer.innerText = res.ErrorMessage;
                }
            })
        } else {
            var errMsg = document.getElementById('recoverpassword').dataset.errorMsg;
            var msgContainer = document.querySelector('#recoverpassword .error-msg');
            msgContainer.classList.remove('hidden');
            msgContainer.innerText = errMsg;
        }
    }


    return {
        handleFormSubmit: handleFormSubmit
    }
})();


(function () {
    var form = document.getElementById('recoverpassword');
    if (form !== null) {
        form.addEventListener('submit', function (evt) {
            evt.preventDefault();
            RecoverPassowrd.handleFormSubmit(form);
        })
    }
})();
var Registration = (function () {
    var messages = {
        requiredField: document.querySelector('#registration input[name="fieldRequired"]') !== null ? document.querySelector('#registration input[name="fieldRequired"]').value : '',
        titleRequired: document.querySelector('#registration input[name="titleRequired"]') !== null ? document.querySelector('#registration input[name="titleRequired"]').value : '',
        emailMatch: document.querySelector('#registration input[name="emailMatch"]') !== null ? document.querySelector('#registration input[name="emailMatch"]').value : '',
        passwordMatch: document.querySelector('#registration input[name="passwordMatch"]') !== null ? document.querySelector('#registration input[name="passwordMatch"]').value : '',
        passwordLength: document.querySelector('#registration input[name="passwordLength"]') !== null ? document.querySelector('#registration input[name="passwordLength"]').value : ''
    }

    var constraints = {
        title: {
            presence: {
                message: '^' + messages.titleRequired
            }
        },
        lastName: {
            presence: {
                message: '^' + messages.requiredField
            },
        },
        birthdate: {
            presence: {
                message: '^' + messages.requiredField
            },
        },
        email: {
            presence: {
                message: '^' + messages.requiredField
            },
            email: true
        },
        emailrepeat: {
            presence: {
                message: '^' + messages.requiredField
            },
            equality: {
                attribute: "email",
                message: '^' + messages.emailMatch
            }
        },
        password: {
            presence: {
                message: '^' + messages.requiredField
            },
            length: {
                minimum: 8,
                message: '^' + messages.passwordLength

            }
        },
        passwordrepeat: {
            presence: {
                message: '^' + messages.requiredField
            },
            equality: {
                attribute: "password",
                message: '^' + messages.passwordMatch
            }
        }
    }

    function xhr(url, data, cbk) {
        var req = new XMLHttpRequest();
        req.addEventListener("readystatechange", function () {
            if (this.readyState === 4) {
                cbk(JSON.parse(req.response))
            }
        });
        req.open("POST", url);
        req.setRequestHeader("Content-Type", "application/json");
        req.send(data);
    }


    function showErrors(form, errors) {
        var termsOfUse = document.querySelector('input[name="termsOfUse"]').checked;
        for (var i = 0; i < Object.keys(errors).length; i++) {
            showErrorForInput(form, Object.keys(errors)[i], Object.values(errors)[i]);
        }

        if (!termsOfUse) {
            var termsMsg = document.querySelector('#registration input[name="termsofuse"]') !== null
                ? document.querySelector('#registration input[name="termsofuse"]').value
                : "Please accept Terms of Use";
            document.querySelector('div[data-related-to="termsOfUse"] .error-msg').innerText = termsMsg;
        }

    }

    function showErrorForInput(form, name, msg) {
        var wrapper = form.querySelector('div[data-related-to="' + name + '"]');
        var input = wrapper.querySelector('input[name]');
        var errorMsgContainer = wrapper.querySelector('.error-msg');
        input.classList.add('invalid');

        errorMsgContainer.innerText = msg;
        console.log(msg);
    }

    function resetErrorMsg(form) {
        var errorMsg = form.querySelectorAll('.error-msg');
        var inputs = document.querySelectorAll("input, textarea, select");
        for (var i = 0; i < errorMsg.length; i++) {
            errorMsg[i].innerText = '';
        }
        for (var i = 0; i < inputs.length; i++) {
            inputs[i].classList.remove('invalid');
        }
    }

    function resetInputs(form) {
        var texts = form.querySelectorAll('input[type="text"]');
    }

    function serverError(form, message) {
        showAlert(form, message);
        resetErrorMsg(form);
        resetInputs(form);
    }

    function showAlert(form, msg) {
        var alert = form.querySelector('.alert');
        form.querySelector('.alert-message').innerText = msg;
        alert.classList.add('active');
    }


    function success(form) {
        var apiURL = document.getElementById('registration').action;
        var datasource = document.querySelector('#registration input[name="DatasourceId"]').value;
        var originUrl = document.querySelector('#registration input[name="originUrl"]').value;
        var firstName = document.getElementById('register-firstname').value;
        var lastName = document.getElementById('register-lastname').value;
        var title = document.querySelector('input[name="title"]:checked').value;
        var birthday = document.getElementById('register-birthdate').value;
        var mail = document.getElementById('register-mail').value;
        var password = document.getElementById('register-password').value;
        var newsletter = document.querySelector('input[name="newsletterRegistration"]').checked ? document.querySelector('input[name="newsletterRegistration"]').value : '';
        var data = JSON.stringify({
            "DatasourceId": datasource,
            "OriginUrl": originUrl,
            "Title": title,
            "FirstName": firstName,
            "LastName": lastName,
            "BirthDate": birthday,
            "Mail": mail,
            "Password": password,
            "NewsletterRegistration": newsletter
        });

        xhr(apiURL, data, function (res) {
            if (res.Success && res.Payload.RedirectUrl !== "") {
                dataLayer.push({
                    'eventCategory': 'Account',     //static value
                    'eventAction': 'Erstellen',     //static value
                    'event': 'event-tracking'       //static value
                });
                window.location.href = res.Payload.RedirectUrl
            } else {
                if (res.ErrorMessage.length > 0) {
                    serverError(form, res.ErrorMessage);
                }
            }
        })
    }

    function passwordStrength(strength) {
        var span = document.querySelector('.password-strenght span');
        var value = '';
        strength <= 1
            ? value = 'schwach'
            : strength <= 3
                ? value = 'mittel'
                : value = 'stark';
        span.innerText = value;
    }

    function handleFormSubmit(form) {
        resetErrorMsg(form);
        var termsOfUse = document.querySelector('input[name="termsOfUse"]').checked;
        var errors = validate(form, constraints);

        showErrors(form, errors || {});
        if (!errors && termsOfUse) {
            success(form);
        }

        if (errors || !termsOfUse) {
            form.scrollIntoView({ block: "start", behavior: "smooth" });

        }
    }
    return {
        handleFormSubmit: handleFormSubmit,
        passwordStrength: passwordStrength

    }
})();

(function () {
    var form = document.getElementById('registration');
    var password = document.getElementById('register-password');
    if (form !== null) {
        var togglePassEye = document.querySelectorAll('.toggle-pass');
        document.getElementById('submit-registration').addEventListener('click', function (evt) {
            evt.preventDefault();
            Registration.handleFormSubmit(form);
        })

        password.addEventListener('input', function () {
            var val = password.value;
            var result = zxcvbn(val);
            Registration.passwordStrength(result.score)
        })

        document.querySelector('.alert .close-alert').addEventListener('click', function (evt) {
            document.querySelector('.alert').classList.remove('active');
            form.querySelector('.alert-message').innerText = '';
        })

        for (var i = 0; i < togglePassEye.length; i++) {
            togglePassEye[i].addEventListener('mousedown', function (evt) {
                this.parentNode.querySelector('input[data-password="true"]').type = 'text';
            });
            togglePassEye[i].addEventListener('mouseup', function (evt) {
                this.parentNode.querySelector('input[data-password="true"]').type = 'password';
            });
        }

    }
})()
;
var printButton = document.getElementById('socialMediaPrint');
var printPage = () => {
    window.print();
    dataLayer.push({
        'eventCategory': 'Navigation',
        'eventAction': 'Print',
        'eventLabel': location.pathname,       
        'event': 'event-tracking'        
    });
};

if (printButton != null || undefined) {
    printButton.addEventListener('click', printPage);
};
/*
var ChangePassword = (function () {
    var messages = {
        requiredField: document.querySelector('#changepassword input[name="fieldRequired"]') !== null ? document.querySelector('#changepassword input[name="fieldRequired"]').value : '',
        passwordMatch: document.querySelector('#changepassword input[name="passwordMatch"]') !== null ? document.querySelector('#changepassword input[name="passwordMatch"]').value : ''
    }

    var constraints = {
        password: {
            presence: {
                message: '^' + messages.requiredField
            },
            length: {
                minimum: 8,
            }
        },
        passwordrepeat: {
            presence: {
                message: '^' + messages.requiredField
            },
            equality: {
                attribute: "password",
                message: '^' + messages.passwordMatch
            }
        }
    }

    function xhr(url, data, cbk) {
        var req = new XMLHttpRequest();
        req.addEventListener("readystatechange", function () {
            if (this.readyState === 4) {
                cbk(JSON.parse(req.response))
            }
        });
        req.open("POST", url);
        req.setRequestHeader("Content-Type", "application/json");
        req.send(data);
    }


    function showErrors(form, errors) {
        for (var i = 0; i < Object.keys(errors).length; i++) {
            showErrorForInput(form, Object.keys(errors)[i], Object.values(errors)[i]);
        }
    }


    function showErrorForInput(form, name, msg) {
        var wrapper = form.querySelector('div[data-related-to="' + name + '"]');
        var input = wrapper.querySelector('input[name]');
        var errorMsgContainer = wrapper.querySelector('.error-msg');
        if (!(input.type === 'radio')) {
            input.classList.add('invalid');
        }
        errorMsgContainer.innerText = msg;
    }

    function resetErrorMsg(form) {
        var errorMsg = form.querySelectorAll('.error-msg');
        var inputs = document.querySelectorAll("input, textarea, select");
        for (var i = 0; i < errorMsg.length; i++) {
            errorMsg[i].innerText = '';
        }
        for (var i = 0; i < inputs.length; i++) {
            inputs[i].classList.remove('invalid');
        }
    }

    function resetInputs(form) {
        var texts = form.querySelectorAll('input[type="text"]');
    }

    function serverError(form, message) {
        showAlert(form, message);
        resetErrorMsg(form);
        resetInputs(form);
    }

    function showAlert(form, msg) {
        var alert = form.querySelector('.alert');
        form.querySelector('.alert-message').innerText = msg;
        alert.classList.add('active');
    }


    function success(form) {
        var apiURL = form.action;
        var datasource = form.querySelector('input[name="DatasourceId"]').value;
        var token = form.querySelector('input[name="Token"]').value;
        var password = document.getElementById('register-password').value;
        var data = JSON.stringify({
            "DatasourceId": datasource,
            "Password": password,
            "Token": token
        });

        xhr(apiURL, data, function (res) {
            console.log(res);
            if (res.Success && res.Payload.RedirectUrl !== "") {
                window.location.href = res.Payload.RedirectUrl
            } else {
                if (res.ErrorMessage.length > 0) {
                    serverError(form, res.ErrorMessage);
                }
               
            }
        })
    }

    function passwordStrength(strength) {
        var span = document.querySelector('.password-strenght span');
        var value = '';
        strength <= 1
            ? value = 'schwach'
            : strength <= 3
                ? value = 'mittel'
                : value = 'stark';
        span.innerText = value;
    }

    function handleFormSubmit(form) {
        resetErrorMsg(form);
        var errors = validate(form, constraints);

        showErrors(form, errors || {});
        if (!errors) {
            success(form);
        }
    }
    return {
        handleFormSubmit: handleFormSubmit,
        passwordStrength: passwordStrength
    }
})();

(function () {
    if (document.getElementById('changepassword') !== null) {
        var form = document.getElementById('changepassword');
        var password = document.getElementById('register-password');
        var togglePassEye = document.querySelectorAll('.toggle-pass');

        document.getElementById('submitChangePassword').addEventListener('click', function (evt) {
            evt.preventDefault();
            ChangePassword.handleFormSubmit(form);
        })

        password.addEventListener('input', function () {
            var val = password.value;
            var result = zxcvbn(val);
            Registration.passwordStrength(result.score)
        })

        document.querySelector('.alert .close-alert').addEventListener('click', function (evt) {
            document.querySelector('.alert').classList.remove('active');
            form.querySelector('.alert-message').innerText = '';
        })

        for (var i = 0; i < togglePassEye.length; i++) {
            togglePassEye[i].addEventListener('mousedown', function (evt) {
                this.parentNode.querySelector('input[data-password="true"]').type = 'text';
            });
            togglePassEye[i].addEventListener('mouseup', function (evt) {
                this.parentNode.querySelector('input[data-password="true"]').type = 'password';
            });
        }

    }
})()
*/;
var Login = (function () {
    var messages = {
        requiredField: document.querySelector('input[name="fieldRequired"]') !== null ? document.querySelector('input[name="fieldRequired"]').value : '',
    }

    var constraints = {
        email: {
            presence: {
                message: '^' + messages.requiredField
            },
            email: true
        },
        password: {
            presence: {
                message: '^' + messages.requiredField
            }
        }
    }

    function xhr(url, data, cbk) {
        var req = new XMLHttpRequest();
        req.addEventListener("readystatechange", function () {
            if (this.readyState === 4) {
                cbk(JSON.parse(req.response))
            }
        });
        req.open("POST", url);
        req.setRequestHeader("Content-Type", "application/json");
        req.send(data);
    }


    function showErrors(form, errors) {
        for (var i = 0; i < Object.keys(errors).length; i++) {
            showErrorForInput(form, Object.keys(errors)[i], Object.values(errors)[i]);
        }
    }


    function showErrorForInput(form, name, msg) {
        var wrapper = form.querySelector('div[data-related-to="' + name + '"]');
        var input = wrapper.querySelector('input[name]');
        var errorMsgContainer = wrapper.querySelector('.error-msg');
        errorMsgContainer.innerText = msg;
    }

    function resetErrorMsg(form) {
        var errorMsg = form.querySelectorAll('.error-msg');
        var inputs = document.querySelectorAll("input, textarea, select");
        for (var i = 0; i < errorMsg.length; i++) {
            errorMsg[i].innerText = '';
        }
        for (var i = 0; i < inputs.length; i++) {
            inputs[i].classList.remove('invalid');
        }
    }

    function resetInputs(form) {
        var texts = form.querySelectorAll('input[type="text"]');
    }

    function serverError(form, message) {
        showAlert(form, message);
        resetErrorMsg(form);
        resetInputs(form);
    }

    function showAlert(form, msg) {
        var alert = form.querySelector('.alert');
        form.querySelector('.alert-message').innerText = msg;
        alert.classList.add('active');
    }

    function getClosest(elem, selector) {
        while (elem !== document.body) {
            elem = elem.parentElement;
            if (elem.matches(selector)) {
                return elem;
            }
        }
    }


    function success(form) {
        var apiURL = form.action;
        var datasource = form.dataset.datasource;
        var originUrl = form.dataset.url;
        var mail = form.querySelector('input[type="email"]').value;
        var password = form.querySelector('input[type="password"]').value;
        var stayLoggedInRawValue = form.querySelector('input[name="stayLoggedIn"]').checked;
        var data = {
            "DatasourceId": datasource,
            "OriginUrl": originUrl,
            "Mail": mail,
            "Password": password,
            "StayLoggedIn": stayLoggedInRawValue
        }
        xhr(apiURL, JSON.stringify(data), function (res) {
            if (res.Success) {
                if (stayLoggedInRawValue) {
                    stayLoggedInRawValue = 'Komfort';
                } else {
                    stayLoggedInRawValue = "Sitzung";
                }
                dataLayer.push({
                    'eventCategory': 'Account',         //static value
                    'eventAction': 'Einloggen',         //static value
                    'eventLabel': stayLoggedInRawValue,    //Komfort means that the user will be permanently logged and 
                    //Sitzung means that the user is logged in only for the session
                    'event': 'event-tracking'           //static value
                });
                if (res.Payload.RedirectUrl !== "") {
                    window.location.href = res.Payload.RedirectUrl
                } else {
                    window.location.href = "/";
                }

            } else {
                serverError(form, res.ErrorMessage);
            }
        })
    }

    function showAlert(form, msg) {
        var alert = form.querySelector('.alert');
        form.querySelector('.alert-message').innerText = msg;
        alert.classList.add('active');
    }

    function handleFormSubmit(form) {
        resetErrorMsg(form);
        var errors = validate(form, constraints);
        showErrors(form, errors || {});
        if (!errors) {
            success(form);
        }
    }

    function PrepareLoginForm() {
        var forms = document.querySelectorAll('form[data-role="login-form"]');
        if (forms !== null && forms.length > 0) {
            var togglePassEye = document.querySelectorAll('.toggle-pass');
            for (var i = 0; i < togglePassEye.length; i++) {
                togglePassEye[i].addEventListener('mousedown', function (evt) {
                    this.parentNode.querySelector('input[data-password="true"]').type = 'text';
                });
                togglePassEye[i].addEventListener('mouseup', function (evt) {
                    this.parentNode.querySelector('input[data-password="true"]').type = 'password';
                });
            }
            for (var i = 0; i < forms.length; i++) {
                var submit = forms[i].querySelector('input[type="submit"]');
                var form = forms[i]
                submit.addEventListener('click', function (evt) {
                    var currentForm = Login.getClosest(this, 'form');
                    evt.preventDefault();
                    Login.handleFormSubmit(currentForm);
                })
            }
        }
    }

    function PrepareHeaderIcon() {
        var headerIcon = document.querySelector('.header__login__target');
        if (headerIcon !== null) {
            headerIcon.addEventListener('click', function () {
                this.parentNode.classList.toggle('active');
                //document.body.classList.toggle('open-menu');
            })
        }

        var ignoreClickElement = document.querySelector('#headerAccountIcon');
        if (ignoreClickElement !== null) {
            document.addEventListener('click', function (event) {
                var isClickInsideElement = ignoreClickElement.contains(event.target);
                if (!isClickInsideElement) {
                    ignoreClickElement.classList.remove("active");
                }
            });
        }
    }

    function PrepareErrorMessages() {
        if (document.querySelectorAll('.form-error-msg').length !== null) {
            var alerts = document.querySelectorAll('.alert');
            for (var i = 0; i < alerts.length; i++) {
                alerts[i].addEventListener('click', function (evt) {
                    evt.stopImmediatePropagation();
                    if (evt.target.tagName === 'IMG') {
                        this.classList.remove('active');
                        this.querySelector('.alert-message').innerText = '';
                    }
                })
            }
        }
    }

    function prepareLogin() {
        PrepareLoginForm();
        PrepareHeaderIcon();
        PrepareErrorMessages();
    }

    return {
        handleFormSubmit: handleFormSubmit,
        getClosest: getClosest,
        prepareLogin: prepareLogin
    }
})();

(function () {
    Login.prepareLogin();
})()
;
var AutomaticLogout = (function () {
    var automaticLogoutElement = document.getElementById('automaticLogout');
    if (automaticLogoutElement != null || undefined) {
        var secured = automaticLogoutElement.getAttribute('secured');
        var redirectUrl = automaticLogoutElement.getAttribute('redirectUrl');
        var time = parseInt(automaticLogoutElement.getAttribute('time')) * 60;
    }
    var inactivityCountdown = time
    var intervalset;

    function xhr(url, data, cbk) {
        var req = new XMLHttpRequest();
        req.addEventListener("readystatechange", function () {
            if (this.readyState === 4) {
                cbk(JSON.parse(req.response))
            }
        });
        req.open("POST", url);
        req.setRequestHeader("Content-Type", "application/json");
        req.send(data);
    }

    function xhr(url, data, cbk) {
        var req = new XMLHttpRequest();
        req.addEventListener("readystatechange", function () {
            if (this.readyState === 4) {
                cbk(JSON.parse(req.response))
            }
        });
        req.open("POST", url);
        req.setRequestHeader("Content-Type", "application/json");
        req.send(data);
    }

    function LogoutAndRedirect() {
        xhr("/api/sitecore/accounts/LogoutAndRedirect", null, function (res) {
            if (res.Success) {
                res.Payload.RedirectUrl !== ""
                    ? window.location.href = res.Payload.RedirectUrl
                    : window.location.href = "/";
            }
        });
    }

    function LogoutAndUpdateCurrentPage() {
        xhr("/api/sitecore/accounts/LogoutAndUpdateCurrentPage", null, function (res) {
            if (res.Success) {
                var markupUpdates = res.Payload.MarkupUpdate;
                Object.keys(markupUpdates).forEach(key => {
                    var targetElement = document.getElementById(key);
                    targetElement.outerHTML = markupUpdates[key];
                    if (key === 'headerAccountIcon') {
                        Login.prepareLogin();
                    }
                });
            }
        });
    }

    function CheckInTimeout() {
        inactivityCountdown--;
        if (inactivityCountdown == 0) {
            clearInterval(intervalset)
            if (secured) {
                LogoutAndRedirect();
            }
            else {
                LogoutAndUpdateCurrentPage();
            }
        }
    }

    // Reactivate in case FE events shall reinitialize the timeout counter
    //var events = ["mousedown", "click", "mouseup", "focus", "blur", "keyup", "keydown", "keypressed", "mousemove", "resize", "scroll"];
    //for (var index = 0; index < events.length; index++) {
    //    window.addEventListener(events[index], function (e) { ActivityCatcher(e); }, false);
    //}
    //// Listener:- 
    //function ActivityCatcher(e) {
    //    inactivityCountdown = time;
    //}

    return {
        automaticLogoutElement: automaticLogoutElement,
        intervalset: intervalset,
        CheckInTimeout: CheckInTimeout
    }
})();

(function () {
    if (!AutomaticLogout.automaticLogoutElement) {
        return;
    }

    var active = AutomaticLogout.automaticLogoutElement.getAttribute('active');
    if (!active) {
        return;
    }

    AutomaticLogout.intervalset = window.setInterval('AutomaticLogout.CheckInTimeout()', 1 * 1000);
})();
var logoutButton = document.querySelector('#button-cta-logout');
if (logoutButton != null) {
    logoutButton.querySelector('input').addEventListener('click', function () {
        // Call GTM for logout
        gtmLogoutAccount()
    });
};
var registerConfirmation = document.querySelector('.registerconfirmation-message');

if (registerConfirmation !== null || undefined) {
    dataLayer.push({
        'eventCategory': 'Account',     //static value
        'eventAction': 'Bestätigen',     //static value
        'event': 'event-tracking'       //static valueue
    });
};
var newsletterPreferencesContainer = document.getElementById('newsletterpreferences-module-container');
var newsletterPreferencesStatusText = document.getElementById('newsletterpreferences-module-status-text');
var newsletterPreferencesSuccessMessage = document.getElementById('newsletterpreferences-module-success-message');
var newsletterPreferencesFormElement = document.getElementById("newsletter-preferences-form");


function showPendingStatusContent() {
    // We're on the pending status so disable the button and checkbox
    let submitButton = newsletterPreferencesFormElement.querySelector('button.submit');
    let checkboxContainer = newsletterPreferencesFormElement.querySelector('.form__checkbox');

    // Remove all form elements
    submitButton.style.display = "none";
    checkboxContainer.innerHTML = "";

    // Display the text for pending status with dict. entry
    document.querySelector('#newsletter-pending-state-message').style.display = "block";
}

var newsletterPreferencesFormSend = function newsletterPreferencesFormSend(formData) {
    var xhttp = new XMLHttpRequest();

    xhttp.open('POST', newsletterPreferencesFormAction, true); // newsletterFormShortAction

    xhttp.onloadstart = function () {
        newsletterPreferencesFormElement.classList.add('loading')
    }

    xhttp.onload = function () {
        var newsletterPreferencesResp = JSON.parse(this.response);

        newsletterPreferencesFormElement.classList.remove('loading');
        newsletterPreferencesStatusText.innerHTML = newsletterPreferencesResp.Payload.StatusText;
        newsletterPreferencesSuccessMessage.innerHTML = newsletterPreferencesResp.Payload.ResponseText;
        newsletterPreferencesSuccessMessage.classList.add('my-alnatura-accordion__success-message--active');

        //In case of empty text the button will appear under the checkbox text if margin is not 0
        if (newsletterPreferencesSuccessMessage.innerHTML === "") {
            newsletterPreferencesSuccessMessage.style.margin = 0;
        }

        // Fire the GTM Event
        gtmNewsletterAction();

    };
    xhttp.onerror = function () {};

    xhttp.send(new FormData(formData));
}

var newsletterPreferencesSubmit = function newsletterPreferencesSubmit(event) {    
    event.preventDefault();
    newsletterPreferencesFormSend(newsletterPreferencesFormElement);
}

var newsletterPreferencesStatus = function newsletterPreferencesStatus() {
    var xhttp = new XMLHttpRequest();
    var newsletterPreferencesStatusUrl = window.location.protocol + '//' + window.location.hostname + '/api/sitecore/MyAlnatura/GetNewsletterStatus';
    var newsletterPreferencesDatasource = newsletterPreferencesFormElement.dataset.datasource;
    var newsletterPreferencesCheckbox = document.getElementById('newsletterpreferences-module-checkbox');

    xhttp.addEventListener("readystatechange", function () {
        if (this.readyState === 4) {
            var json = JSON.parse(xhttp.response);

            if (json.Success) {
                newsletterPreferencesStatusText.innerHTML = json.Payload.NewsletterStatusText;

                if (json.Payload.Status === 0 || json.Payload.Status === 1 ) {
                    newsletterPreferencesCheckbox.checked = true;
                    var dataSubscribed = true;

                    if (json.Payload.Status === 1) {
                        showPendingStatusContent();
                    }
                } else {
                    // if json.Payload.Status === 2
                    newsletterPreferencesCheckbox.checked = false;
                    var dataSubscribed = false;
                }

                // Set subscribe status of newsletter for Google Tag Manager
                document.querySelector('#newsletterpreferences-module-edit-container').setAttribute('data-subscribed', dataSubscribed);


            } else {
                // console.log('ErrorMessage: ', json.ErrorMessage);
            }
        }
    });
    
    xhttp.open("POST", newsletterPreferencesStatusUrl, false);
    xhttp.setRequestHeader("Content-Type", "application/json");
    xhttp.send(JSON.stringify({
        "DatasourceId": newsletterPreferencesDatasource,
    }));
}

if (newsletterPreferencesContainer != null || undefined) {
    var newsletterPreferencesEditButton = document.getElementById('newsletterpreferences-module-edit');
    var newsletterPreferencesCloseButton = document.getElementById('newsletterpreferences-module-close');

    var newsletterPreferencesEditContainer = document.getElementById('newsletterpreferences-module-edit-container');

    // open dialog
    newsletterPreferencesEditButton.addEventListener("click", function() {
        if (!newsletterPreferencesEditContainer.style.maxHeight) {
            //newsletterPreferencesEditContainer.style.maxHeight = newsletterPreferencesEditContainer.scrollHeight + "px";
            newsletterPreferencesEditContainer.style.maxHeight = "max-content";
            newsletterPreferencesEditContainer.style.overflow = "visible";
        } 
    });

    // close dialog
    newsletterPreferencesCloseButton.addEventListener("click", function() {
        if (newsletterPreferencesEditContainer.style.maxHeight) {
            newsletterPreferencesEditContainer.style.maxHeight = null;
            newsletterPreferencesEditContainer.style.overflow = null;
        } 
    });

    // newsletter preferences status
    newsletterPreferencesStatus();

    // form
    var newsletterPreferencesFormAction = newsletterPreferencesFormElement.getAttribute('data-form-action');
    newsletterPreferencesFormElement.addEventListener('submit', newsletterPreferencesSubmit);
};
var accountSettingsContainer = document.getElementById('accountsettings-module-container');
var accountSettingsName = document.getElementById('accountsettings-module-name');
var accountSettingsBirthdate = document.getElementById('accountsettings-module-birthdate');
var accountSettingsMail = document.getElementById('accountsettings-module-mail');
var accountSettingsFormElement = document.getElementById("account-settings-form");
var accountSettingsStatusText = document.getElementById("accountsettings-module-status-text");

var accountSettingsFormSend = function accountSettingsFormSend(formData) {
    var xhttp = new XMLHttpRequest();

    xhttp.open('POST', accountSettingsFormAction, true);

    xhttp.onloadstart = function () {
        accountSettingsFormElement.classList.add('loading')
    }

    xhttp.onload = function () {
        var accountSettingsResp = JSON.parse(this.response);

        accountSettingsFormElement.classList.remove('loading');

        if (accountSettingsResp.Success) {
            accountSettingsBirthdate.innerHTML = accountSettingsResp.Payload.Birthday.Value;
            //USELESS: accountSettingsMail.innerHTML = accountSettingsResp.Payload.Email.Value;
            accountSettingsStatusText.innerHTML = accountSettingsResp.Payload.StatusText;
            accountSettingsStatusText.classList.add("show");
            accountSettingsFormFill(accountSettingsResp);
        } else {
            // console.log('accountSettingsResp.ErrorMessage: ', accountSettingsResp.ErrorMessage); 
        }

    };
    xhttp.onerror = function () { };

    xhttp.send(new FormData(formData));
}

var accountSettingsFormFill = function accountSettingsFormFill(response) {
    var fieldFirstName = document.getElementById("register-firstname");
    var fieldLastName = document.getElementById("register-lastname");
    var fieldBirthdate = document.getElementById("register-birthdate");
    var fieldBirthdate2 = document.getElementById("accountsettings-module-birthdate");
    var fieldEmail = document.getElementById("accountsettings-module-mail");
    var fieldEmail2 = document.getElementById("accountsettings-module-mail2");


    var salutation = response.Payload.Salutation.Value;
    if (salutation != "divers" && salutation != "Divers") {
        salutation = response.Payload.Salutation.Value + " ";
    } else {
        salutation = "";
    }

    var name = salutation + response.Payload.FirstName.Value + " " + response.Payload.LastName.Value;
    accountSettingsName.innerHTML = name;

    fieldBirthdate2.innerHTML = response.Payload.Birthday.Value;

    var parsedDate = new Date(parseDateString(response.Payload.Birthday.Value, "dd.mm.yyyy"));
    var formatedDateForField = parsedDate.toLocaleString('en-CA', {
        year: "numeric", month: '2-digit', day: '2-digit'
    });
    fieldFirstName.value = response.Payload.FirstName.Value;
    fieldLastName.value = response.Payload.LastName.Value;
    fieldBirthdate.value = formatedDateForField;

    //console.log("Test", formatedDateForField);

    if (response.Payload.Email != null) {
        fieldEmail.innerText = response.Payload.Email.Value;
        fieldEmail2.innerText = response.Payload.Email.Value;
    }

    var fieldSalutation;
    if (response.Payload.Salutation.Value === "Herr") {
        fieldSalutation = document.getElementById("anrede2");
    }
    else if (response.Payload.Salutation.Value === "Frau") {
        fieldSalutation = document.getElementById("anrede1");
    }
    else if ((response.Payload.Salutation.Value === "Divers")) {
        fieldSalutation = document.getElementById("anrede3");
    }
    fieldSalutation.checked = true;



    // we have the account settings on the page. Inject the birthday dropdown options
    var currentBirthdate = formatedDateForField.split("/");
    //console.log(currentBirthdate);

    let daySelect = document.querySelector('#daySelect');
    for (let d = 1; d <= 31; d++) {
        if (d < 10) { var number = "0" + d; } else { var number = d; }

        let element = document.createElement('option');
        element.setAttribute('value', number);
        element.innerText = number + ".";

        if (number == currentBirthdate[1]) {
            element.selected = true;
        }

        daySelect.append(element);
    }

    let monthSelect = document.querySelector('#monthSelect');
    for (let m = 1; m <= 12; m++) {
        if (m < 10) { var number = "0" + m; } else { var number = m; }

        let element = document.createElement('option');
        element.setAttribute('value', number);
        element.innerText = number + ".";

        if (number == currentBirthdate[0]) {
            element.selected = true;
        }

        monthSelect.append(element);
    }


    let currentYear = new Date().getFullYear()
    let yearSpan = 80;
    let yearSelect = document.querySelector('#yearSelect');
    for (let y = currentYear - yearSpan; y <= currentYear; y++) {
        let element = document.createElement('option');
        element.setAttribute('value', y);
        element.innerText = y;

        if (y == currentBirthdate[2]) {
            element.selected = true;
        }

        yearSelect.append(element);
    }


    // New date input
    var birthDropdowns = document.querySelectorAll('#daySelect, #monthSelect, #yearSelect');
    for (bd = 0; bd < birthDropdowns.length; bd++) {
        birthDropdowns[bd].removeEventListener('change', function () { });
        birthDropdowns[bd].addEventListener('change', function () {
            var yearValue = document.querySelector('#yearSelect').value;
            var monthValue = document.querySelector('#monthSelect').value;
            var dayValue = document.querySelector('#daySelect').value;
            var birthdate = yearValue + "-" + monthValue + "-" + dayValue;
            document.querySelector('#register-birthdate').value = birthdate;
        });
    }
}

var parseDateString = function parseDate(input, format) {
    format = format || 'yyyy-mm-dd'; // default format
    var parts = input.match(/(\d+)/g),
        i = 0, fmt = {};
    // extract date-part indexes from the format
    format.replace(/(yyyy|dd|mm)/g, function (part) { fmt[part] = i++; });

    return new Date(parts[fmt['yyyy']], parts[fmt['mm']] - 1, parts[fmt['dd']]);
}

var accountSettingsSubmit = function accountSettingsSubmit(event) {
    event.preventDefault();
    accountSettingsFormSend(accountSettingsFormElement);
}

var accountSettingsUpdate = function accountSettingsUpdate() {
    var xhttp = new XMLHttpRequest();
    var accountSettingsStatusUrl = window.location.protocol + '//' + window.location.hostname + '/api/sitecore/AccountSettings/GetAccountSettingsStatus';
    var accountSettingsDatasource = accountSettingsFormElement.dataset.datasource;

    xhttp.addEventListener("readystatechange", function () {
        if (this.readyState === 4) {
            var json = JSON.parse(xhttp.response);

            if (json.Success) {
                if (json.StatusText != undefined || json.StatusText != null) {
                    accountSettingsStatusText.innerHTML = json.StatusText;
                }
                accountSettingsFormFill(json);
            } else {
                accountSettingsStatusText.innerHTML = json.Payload.ErrorMessage;
                // console.log('ErrorMessage: ', json.ErrorMessage);
            }
        }
    });

    xhttp.open("POST", accountSettingsStatusUrl, false);
    xhttp.setRequestHeader("Content-Type", "application/json");
    xhttp.send(JSON.stringify({
        "DatasourceId": accountSettingsDatasource,
    }));
}

if (accountSettingsContainer != null || undefined) {
    var accountSettingsEditButton = document.getElementById('accountsettings-module-edit');
    var accountSettingsCloseButton = document.getElementById('accountsettings-module-close');

    var accountSettingsEditContainer = document.getElementById('accountsettings-module-edit-container');



    // open dialog
    accountSettingsEditButton.addEventListener("click", function () {
        /*
        if (!accountSettingsEditContainer.style.maxHeight) {
            accountSettingsEditContainer.style.maxHeight = accountSettingsEditContainer.scrollHeight + "px";
        }*/

        accountSettingsEditContainer.style.minHeight = accountSettingsEditContainer.scrollHeight + "px";
    });

    // close dialog
    accountSettingsCloseButton.addEventListener("click", function () {
        if (accountSettingsEditContainer.style.maxHeight || accountSettingsEditContainer.style.minHeight) {
            accountSettingsEditContainer.style.maxHeight = null;
            accountSettingsEditContainer.style.minHeight = null;
        }
    });

    // newsletter preferences status
    accountSettingsUpdate();

    // form submit
    var accountSettingsFormAction = accountSettingsFormElement.getAttribute('data-form-action');
    accountSettingsFormElement.addEventListener('submit', accountSettingsSubmit);
};
var addressContainer = document.getElementById('address-module-container');
var statusContainer;
var validatedAddress;

var saveAddressEndpoint = "/api/sitecore/Address/SaveAddress";

// Refactor the country code to country
countryElement = document.querySelectorAll('div.countryCode');
if (countryElement.length > 0) {
    for (var i = 0; i < countryElement.length; i++) {
        if (countryElement[i].innerText == "DE") {
            countryElement[i].innerText = "Deutschland";
        }
    }
}
var addressStreet = document.getElementById('address-module-street');
var addressStreetNumber = document.getElementById('address-module-street-number');
var addressAdditionalInformation = document.getElementById('address-module-additional-information');
var addressCity = document.getElementById('address-module-city');
var addressZip = document.getElementById('address-module-zip');
var addressCountry = document.getElementById('address-module-country');

var addressFormElement = document.getElementById("address-form");
if (addressFormElement != null) {
    addressFormElement.addEventListener('submit', addressSubmitWithCallback);
}
statusContainer = document.querySelector('#address-module-edit-container .form__status-text');
if (addressFormElement == null) {
    addressFormElement = document.querySelector('#birthdaypresent-form');
    // Fetch the status container of the content modules
    statusContainer = document.querySelector('#birthdaypresent-module-success-message');
}
if (addressFormElement) {
    // Get error message for empty fields
    if (addressFormElement.getElementsByClassName('inputFailureMessage').length > 0) {
        var fieldEmptyMessage = addressFormElement.getElementsByClassName('inputFailureMessage')[0].innerText;
    }

    if (addressFormElement.getElementsByClassName('formSendError').length > 0) {
        var fieldProblemMessage = addressFormElement.getElementsByClassName('formSendError')[0].innerText;
    }
}

var addressStatusText = document.getElementsByClassName('form__status-text')[0];
var addressStatusTextTop = document.getElementById('address-module-status-text');
var addressStatusLabel = document.getElementById('address-module-status-label');
var checkFlag = true;

var addressStreetForm = document.getElementById('address-module-street-input');
var addressStreetNumberForm = document.getElementById('address-module-street-number-input');
var addressAdditionalInformationForm = document.getElementById('address-module-additional-information-input');
var addressCityForm = document.getElementById('address-module-city-input');
var addressZipForm = document.getElementById('address-module-zip-input');
var addressCountryForm = document.getElementById('address-module-country-input');


// Check if a input has a minimum char length (or a specific/exact one)
function checkFormDetail(detailHTML, detailClass, minLength = 1, exactLength = false, zip = false) {
    // Get the error msg box
    field = addressFormElement.getElementsByClassName(detailClass)[0];
    errorBox = field.getElementsByClassName('error-msg')[0];

    // Check if we want a fixed char length or just a minimum
    var valid = false;
    if (exactLength) {
        if (detailHTML.value.length == minLength) {
            if (zip) {
                var regCheck = new RegExp('^\\d+$'); // Check for only numbers in string
                if (detailHTML.value.match(regCheck) !== null) {
                    valid = true;
                }
            } else {
                valid = true;
            }
        }
    } else {
        if (detailHTML.value.length >= minLength) {
            valid = true;

            // Check for street number
            if (detailClass == "streetNumber") {
                if (detailHTML.value.length > 8) {
                    valid = false;
                }
            }
        }
    }

    if (!valid) {
        // Write error msg
        //errorBox.innerHTML = fieldEmptyMessage;     // DEV: Uncomment to view the error message UNDER the input.

        // Lower the checkFlag
        checkFlag = false;
    } else {
        // Delete error msg
        //errorBox.innerHTML = '';                     // DEV: Uncomment to view the error message UNDER the input.   
    }
}

function addressFormSend(formData, callback, failurecallback) {
    // Boolflag for the minimum input length check
    checkFlag = true;
    // Check all mandatory input fields
    checkFormDetail(addressStreetForm, 'streetName');
    checkFormDetail(addressStreetNumberForm, 'streetNumber');
    checkFormDetail(addressCityForm, 'city');
    checkFormDetail(addressZipForm, 'zip', 5, true, true);
    // When all mandatory fields are filled up, go ahead and send it
    if (checkFlag) {
        var xhttp = new XMLHttpRequest();
        xhttp.open('POST', saveAddressEndpoint, true);
        xhttp.onloadstart = function () {
            addressFormElement.classList.add('loading')
        }
        xhttp.onload = function () {
            var addressResp = JSON.parse(this.response);
            //console.log('addressResp', addressResp);
            //console.log("Address Save but Validated ADdress", validatedAddress);
            addressFormElement.classList.remove('loading');
            // If we are on the profile page, change the address for Address-Module-Header and Birthday-Module-Content
            if (addressContainer != null) {
                if (addressResp.Payload.Street != null) {
                    // Address-Module-Header
                    document.querySelector('#address-module-street').innerText = addressResp.Payload.Street.Value;
                    document.querySelector('#address-module-street-number').innerText = addressResp.Payload.StreetNumber.Value;
                    document.querySelector('#address-module-additional-information').innerText = document.querySelector('#address-module-additional-information-input').value;
                    document.querySelector('#address-module-zip').innerText = addressResp.Payload.Zip.Value;
                    document.querySelector('#address-module-city').innerText = addressResp.Payload.City.Value;
                    // Input fields
                    document.querySelector('#address-module-street-input').value = addressResp.Payload.Street.Value;
                    document.querySelector('#address-module-street-number-input').value = addressResp.Payload.StreetNumber.Value;
                    document.querySelector('#address-module-zip-input').value = addressResp.Payload.Zip.Value;
                    document.querySelector('#address-module-city-input').value = addressResp.Payload.City.Value;
                }
            }
            if (document.querySelector('#birthday-module-address-street') != null && addressResp.Payload.Street != null) {
                document.querySelector('#birthday-module-address-street').innerText = addressResp.Payload.Street.Value;
                document.querySelector('#birthday-module-address-street-number').innerText = addressResp.Payload.StreetNumber.Value;
                document.querySelector('#birthday-module-address-additional-information').innerText = document.querySelector('#address-module-additional-information-input').value;
                document.querySelector('#birthday-module-address-zip').innerText = addressResp.Payload.Zip.Value;
                document.querySelector('#birthday-module-address-city').innerText = addressResp.Payload.City.Value;
            }
            // Write status text (error or success) and remove/add the needed class
            console.log(addressResp);
            if (addressResp.Success) {
                // GTM: Address tracking
                gtmAddressAction(addressResp.Payload.Mode);
                        
                addressStatusText.innerHTML = addressResp.Payload.StatusText;
                addressStatusText.classList.add('success');
                addressStatusText.classList.remove('failure');
                if (addressStatusTextTop !== null) {
                    addressStatusTextTop.hidden = true;
                }
                if (callback) {
                    callback();
                }
            } else {
                addressStatusText.innerHTML = addressResp.ErrorMessage;
                addressStatusText.classList.add('failure');
                addressStatusText.classList.remove('success');
                if (failurecallback) {
                    failurecallback();
                }
            }
        };
        xhttp.onerror = function () { };

        var response = xhttp.send(new FormData(formData));
    } else {
        addressStatusText.innerHTML = fieldProblemMessage;
        addressStatusText.classList.remove('success');
        addressStatusText.classList.add('failure');
    }
}

function postAjax(url, data, success) {
    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    xhr.open('POST', url);
    xhr.onreadystatechange = function () {
        if (xhr.readyState > 3 && xhr.status == 200) { success(xhr.responseText); }
    };
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.send(JSON.stringify(data));
    return xhr;
}


function addressSubmitWithCallback(e, callback, failurecallback) {
    if (e) {
        // Prevent normal form behaviour
        e.preventDefault();
    }
    // Check if still have the form or not
    var addressModuleStreetCheck = document.querySelector('#address-module-street-input');


    // Boolflag for the minimum input length check
    checkFlag = true;
    // Check all mandatory input fields
    checkFormDetail(addressStreetForm, 'streetName');
    checkFormDetail(addressStreetNumberForm, 'streetNumber');
    checkFormDetail(addressCityForm, 'city');
    checkFormDetail(addressZipForm, 'zip', 5, true, true);
    // When all mandatory fields are filled up, go ahead and send it
    if (checkFlag) {
        addressFormSend(addressFormElement, callback);
    } else {
        addressStatusText.innerHTML = fieldProblemMessage;
        addressStatusText.classList.remove('success');
        addressStatusText.classList.add('failure');
    }
}
if (addressContainer != null || undefined) {
    var addressEditButton = document.getElementById('address-module-edit');
    var addressCloseButton = document.getElementById('address-module-close');
    var addressEditContainer = document.getElementById('address-module-edit-container');

    // open dialog
    addressEditButton.addEventListener("click", function () {
        if (!addressEditContainer.style.maxHeight) {
            addressEditContainer.style.maxHeight = addressEditContainer.scrollHeight + "px";
            addressEditContainer.style.overflow = "visible";
        }
    });

    // close dialog
    addressCloseButton.addEventListener("click", function () {
        if (addressEditContainer.style.maxHeight) {
            addressEditContainer.style.maxHeight = null;
            addressEditContainer.style.overflow = null;
        }
    });


    // address delete prep
    var entryContainer = document.querySelector('#address-module-edit-container .container-entry');
    var confirmContainer = document.querySelector('#address-module-edit-container .container-confirm');
    var deleteAddressFormData = confirmContainer.querySelector('form');
    var deleteAddressEndpoint = confirmContainer.querySelector('form').getAttribute('action');
    var deleteAddressConfirmText = confirmContainer.querySelector('form button').innerText;
    var deleteResponse = document.querySelector('#address-module-edit-container .deleteResponse');


    // are we have an address already?
    if (document.querySelector('#address-module-street').innerText == "") {
        document.querySelector('#deleteAddressContainer').style.display = "none";
    }


    // address delete: show confirmation buttons
    entryContainer.querySelector('button').addEventListener('click', function () {
        entryContainer.classList.add("hide");
        confirmContainer.classList.remove("hide");
    });

    // address delete: hide confirmation buttons
    confirmContainer.querySelector('.back').addEventListener('click', function () {
        entryContainer.classList.remove("hide");
        confirmContainer.classList.add("hide");
    });

    // address delete: action
    confirmContainer.querySelector('form button').addEventListener('click', function (e) {
        e.preventDefault();

        var xhttp = new XMLHttpRequest();
        xhttp.open('POST', deleteAddressEndpoint, true);
        xhttp.onloadstart = function () {
            confirmContainer.querySelector('form button').innerText = "Bitte warten";
            confirmContainer.querySelector('form .submit').style.opacity = 0.5;
        }

        xhttp.onload = function () {
            var deleteResp = JSON.parse(this.response);

            if (deleteResp.ErrorType != 1) {
                // Error
                confirmContainer.querySelector('form button').innerText = deleteAddressConfirmText;
                confirmContainer.querySelector('form .submit').style.opacity = 1;

                deleteResponse.classList.add('error');
                deleteResponse.classList.remove('success');

            } else {
                /****************************/
                /** ADDRESS MODULE CHANGES **/
                /****************************/
                // Success
                deleteResponse.classList.remove('error');
                deleteResponse.classList.add('success');

                // We don't need the buttons anymore
                confirmContainer.classList.add("hide");

                // Hide the address inputs
                var addressForm = document.querySelector('#address-module-edit-container form:first-child');
                addressForm.style.display = "none";
                addressForm.parentElement.parentElement.querySelector('h3').style.display = "none";

                //// Change inner accordion
                document.querySelector('#deleteAddressContainer h3').style.marginTop = 0;
                document.querySelector('#deleteAddressContainer .my-alnatura-accordion__text').style.display = "none";

                //// Delete address and show "no address" text
                document.querySelector('.address-module__address').style.display = "none";
                document.querySelector('#address-module-status-text').classList.remove("hide");


                /*****************************/
                /** BIRTHDAY MODULE CHANGES **/
                /*****************************/
                // Change status text
                if (document.querySelector('#birthdaypresent-module-status-text .registeredText') !== null) {
                    document.querySelector('#birthdaypresent-module-status-text .registeredText').classList.add('hide');
                    document.querySelector('#birthdaypresent-module-status-text .unregisteredText').classList.remove('hide');

                    // Change checkbox to false
                    document.querySelector('input#birthdayAcceptCheckbox').setAttribute("value", "false");
                    document.querySelector('input#birthdayAcceptCheckbox').setAttribute("checked", "false");

                    // Change pseudo checkbox to unchecked
                    document.querySelector('#birthdaypresent-module-checkbox-label .checkmark--checkbox').classList.remove('checked');

                    // Remove address
                    document.querySelector('#birthday-module-address-street').innerText = "Keine Adresse hinterlegt";
                    document.querySelector('#birthday-module-address-street-number').innerText = "";
                    document.querySelector('#birthday-module-address-additional-information').innerText = "";
                    document.querySelector('#birthday-module-address-zip').innerText = "";
                    document.querySelector('#birthday-module-address-city').innerText = "";
                    document.querySelector('#birthday-module-address-country').innerText = "";
                }
            }

            // Insert message
            deleteResponse.innerText = deleteResp.ErrorMessage;
        };

        xhttp.send(new FormData(deleteAddressFormData));
    });
};
    var imageGallerySwiper = new Swiper('.image-gallery .swiper-container', {
        loop: true,
        centeredSlides: true,
        slidesPerView: 1,
        pagination: {
            el: '.image-gallery__pagination',
            type: 'fraction'
        },
        navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev',
        },
        renderFraction: function (currentClass, totalClass) {
            return '<span class="' + currentClass + '"></span>' + ' of ' + '<span class="' + totalClass + '"></span>';
        }

    });

    // Footer Image Gallery 
    var footerimageGallerySwiper = new Swiper('.footer__image-gallery .swiper-container', {
        loop: false,
        centeredSlides: true,
        slidesPerView: '1',
        spaceBetween: 15,
        navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev',
        },
        pagination: {
            clickable: true,
            el: '.swiper-pagination',
            dynamicBullets: true,
        },
        breakpoints: {
            768: {
                centeredSlides: false,
                slidesPerView: 2
            },
            992: {
                centeredSlides: false,
                slidesPerView: 4,
                spaceBetween: 30
            }
        }

    });
;
// Check if we need to show the jubilance logo instead the static one
function jubilanceLogoCheck() {
    let releaseDate = [2024, 1, 2]; // YYYY, M, D

    let today = new Date();
    let d = today.getDate();
    let m = today.getMonth() + 1;
    let yyyy = today.getFullYear();

    console.log(today);

    // Check if today is above the release date    
    if (
        yyyy === releaseDate[0] &&
        m >= releaseDate[1] &&
        d >= releaseDate[2]
    ) {
        // Add the jubilance class to the header logo
        let logoContainer = document.querySelector('header a.header__logo');
        logoContainer.classList.add("jubilance");
    }
}
jubilanceLogoCheck();;
var Search = (function () {
    var numberResultsSearches = {
        products: -1,
        recipes: -1,
        content: -1,
        stores: -1,
    };

    function allSearchesExecuted() {
        var allSearchesExecuted = true;
        Object.values(numberResultsSearches).forEach(val => {
            if (val === -1) {
                allSearchesExecuted = false;
            }
        });

        return allSearchesExecuted;
    };

    function numberOfResultsAllSearches() {
        var counter = 0;
        Object.values(numberResultsSearches).forEach(val => {
            counter += val;
        });
        return counter;
    }

    var store = {
        filtersString: '',
        baseApiUrl: '',
        apiUrl: '',
        category: document.getElementById('Category') != undefined ? document.getElementById('Category').value : '',
        datasource: '',
        type: '',
        recordsPerPage: 12,
        orderBy: document.querySelector('.search-results-container') !== null ? document.querySelector('.search-results-container').dataset.order : null
    };

    function getUrlParameter(name) {
        name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
        var params = (new URL(document.location)).searchParams;
        var param = params.get(name);
        var results = param;
        return results === null ? '' : results;
    };

    function currentPage() {
        return getUrlParameter('page') == undefined || getUrlParameter('page') == '' ? 1 : getUrlParameter('page');
    }

    function apiURL(type, datasource, category) {
        var prefix = window.location.protocol + '//' + window.location.hostname;
        var query = '?query=' + getUrlParameter('query');
        Search.store.type = type;
        if (datasource !== undefined) {
            Search.store.datasource = datasource;
        }
        var url = {
            products: prefix + '/api/sitecore/products/SearchProducts' + query + '&querydatasource=' + Search.store.datasource + '&category=' + Search.store.category,
            recipes: prefix + '/api/sitecore/recipes/SearchRecipes' + query + '&querydatasource=' + Search.store.datasource + '&category=' + Search.store.category,
            content: prefix + '/api/sitecore/search/SearchContent' + query,
            stores: prefix + '/api/sitecore/stores/FindStoresForList' + query + '&Tradepartner=Alnatura'
        }
        return url[type];
    };

    function siteSearchUrl(type) {
        var prefix = window.location.protocol + '//' + window.location.hostname;
        var query = '?query=' + getUrlParameter('query');
        var url = {
            products: prefix + '/api/sitecore/products/SearchProducts' + query,
            recipes: prefix + '/api/sitecore/recipes/SearchRecipes' + query,
            content: prefix + '/api/sitecore/search/SearchContent' + query,
            stores: prefix + '/api/sitecore/stores/FindStoresForList' + query + '&Tradepartner=Alnatura'
        }
        return url[type];
    }

    function compare(a, b) {
        const keyA = a.Key.toUpperCase();
        const keyB = b.Key.toUpperCase();

        var comparison = 0;
        if (keyA > keyB) {
            comparison = 1;
        } else if (keyA < keyB) {
            comparison = -1;
        }
        return comparison;
    }

    function getDataFromAPI(url, cbk) {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                xhr.status === 200 ? cbk(JSON.parse(xhr.response)) : console.error('error::', xhr);
            }
        }
        xhr.open('GET', url)
        xhr.send();
    };

    function drawTemplates(res, type) {
        var templateType = type !== undefined ? type : Search.store.type
        switch (templateType) {
            case 'products':
                drawProducts(res.Payload.Products);
                appendResultsNum(res.Payload.TotalNumberResults, type);
                break;
            case 'recipes':
                drawRecipes(res.Payload.Recipes);
                appendResultsNum(res.Payload.TotalNumberResults, type);
                break;
            case 'content':
                drawContents(res.Payload.Contents);
                appendResultsNum(res.Payload.TotalNumberResults, type);
                break;
            case 'stores':
                drawStores(res.Payload.Stores);
                appendResultsNum(res.Payload.TotalNumberResults, type);
                break;
        }
    };

    function initSwiper(container, items) {
        var searchSwiper = new Swiper(container, {
            loop: false,
            slidesPerView: items,
            spaceBetween: 15,
            lazy: {
                loadPrevNext: true,
                watchSlidesVisibility: true
            },
            navigation: {
                nextEl: '.swiper-button-next',
                prevEl: '.swiper-button-prev'
            },
            pagination: {
                clickable: true,
                el: '.swiper-pagination',
                dynamicBullets: true
            },
            breakpoints: {
                320: {
                    centeredSlides: true,
                    slidesPerView: 'auto',
                    spaceBetween: 15
                },
                768: {
                    centeredSlides: false,
                    slidesPerView: 2,
                    spaceBetween: 15
                },
                992: {
                    centeredSlides: false,
                    slidesPerView: items,
                    spaceBetween: 30,
                }
            }
        });
    }

    function appendResultsNum(num, type) {
        if (type !== undefined) {
            if (document.querySelector('div[data-search-for="' + type.charAt(0).toUpperCase() + type.slice(1) + '"]') !== null) {
                var selector = document.querySelector('div[data-search-for="' + type.charAt(0).toUpperCase() + type.slice(1) + '"]');
                if (num > 12) {
                    selector.childNodes[1].childNodes[1].innerHTML = "( 12 von " + num + " )";
                    selector.querySelector('.search-panel__link-more > a').href += '?query=' + getUrlParameter('query');

                    selector.querySelector('.search-panel__link-more > a').innerText = selector.querySelector('.search-panel__link-more > a').getAttribute('data-link-text-more');
                } else if (num <= 12) {
                    selector.childNodes[1].childNodes[1].innerHTML = "( " + num + " von " + num + ")";
                };

                if (num === 0) {
                    selector.childNodes[3].classList.remove('hidden');
                }


            }

            numberResultsSearches[type] = num;
            if (allSearchesExecuted()) {
                // Push Data To Google Analytics Layer
                dataLayer.push({
                    'siteSearchResults': numberOfResultsAllSearches(),
                    'siteSearchTerm': getUrlParameter('query'),
                    'event': 'site-search'
                });
            }
        }
    }

    function drawContents(items) {
        var contentSearchResultContainer = document.querySelector('div[data-role="search-module"] div.search-results-wrapper');
        var contentSiteSearchContainer = document.querySelector('div[data-search-for="Content"] div.swiper-wrapper');
        var itemClassName = contentSearchResultContainer !== null ? 'search-results-item' : 'swiper-slide';
        var tmp = [];
        for (var i = 0; i < items.length; i++) {
            var markup =
                '<div class="' + itemClassName + '">' +
                '<a class="content-teaser" href="' + items[i].TargetUrl + '" >' +
                '<div class="content-teaser__image">' +
                '<img width="' + items[i].Image.Width + '" height="' + items[i].Image.Height + '" title="' + items[i].Title + '" alt="' + items[i].Title + '" src="' + items[i].Image.ImageUrl + '" />' +
                '</div>' +
                '<div class="content-teaser__title">' + items[i].TeaserTitle + '</div>' +
                '</a>' +
                '</div>';

            tmp.push(markup);
        }
        contentSearchResultContainer !== null ? contentSearchResultContainer.innerHTML = tmp.join('') : null;
        if (contentSiteSearchContainer !== null) {
            contentSiteSearchContainer.innerHTML = tmp.join('');
            initSwiper('div[data-search-for="Content"] .swiper-container', 3)
        }
    }

    function drawProducts(items) {
        var productsSearchResultContainer = document.querySelector('div[data-role="search-module"] div.search-results-wrapper');
        var productSiteSearchContainer = document.querySelector('div[data-search-for="Products"] div.swiper-wrapper');
        var itemClassName = productsSearchResultContainer !== null ? 'search-results-item' : 'swiper-slide';
        var tmp = [];
        for (i = 0; i < items.length; i++) {
            var isProductNew = items[i].IsNewProduct ? '<span class="badge badge--new">' + items[i].NewProductText + '</span >' : '';
            var image = items[i].Image.ImageUrl !== null ? '<img alt="' + items[i].ProductName + '" title="' + items[i].ProductName + '" src="' + items[i].Image.ImageUrl + '-S220x220">' : '';
            var markup =
                '<div class="' + itemClassName + '">' +
                '<a href="' + items[i].TargetUrl + '" class="product-teaser">' +
                '<div class="product-teaser__badge-list">' + isProductNew + '</div>' +
                '<div class="product-teaser__image">' + image + '</div>' +
                '<div class="product-teaser__brand">' + items[i].Brand + '</div>' +
                '<div class="product-teaser__name">' + items[i].ProductName + '</div>' +
                '<div class="product-teaser__content-unit">' + items[i].NumberContentUnit + ' ' + items[i].ContentUnit + '</div>' +
                '<div class="product-teaser__rating">' +
                '<div data-bv-show="inline_rating" data-bv-seo="false" data-bv-product-id="' + items[i].ProductId + '"></div></div>' +
                '<div class="product-teaser__link-more">' + items[i].CallToActionText + '</div>' +
                '</a> ' +
                '</div>';

            tmp.push(markup);
        }
        productsSearchResultContainer !== null ? productsSearchResultContainer.innerHTML = tmp.join('') : null;
        if (productSiteSearchContainer !== null) {
            productSiteSearchContainer.innerHTML = tmp.join('');
            initSwiper('div[data-search-for="Products"] .swiper-container', 4)
        }
    };

    function drawRecipes(items) {
        var recipesSearchResultContainer = document.querySelector('div[data-role="search-module"] div.search-results-wrapper');
        var recipesSiteSearchContainer = document.querySelector('div[data-search-for="Recipes"] div.swiper-wrapper');
        var itemClassName = recipesSearchResultContainer !== null ? 'search-results-item' : 'swiper-slide';
        var tmp = [];
        for (i = 0; i < items.length; i++) {
            var markup =
                '<div class="' + itemClassName + '">' +
                '<a href="' + items[i].ContentPageUrl + '" class="recipe-teaser">' +
                '<div class="recipe-teaser__image">' +
                '<img width="' + items[i].Image.Width + '" height="' + items[i].Image.Height + '" alt="' + items[i].RecipeName + '" title="' + items[i].RecipeName + '" src="' + items[i].Image.ImageUrl + '"/>' +
                '</div>' +
                '<div class="recipe-teaser__content">' +
                '<div class="recipe-teaser__title">' + items[i].RecipeName +
                '<div class="recipe-teaser__rating">' +
                '<div data-bv-show="inline_rating" data-bv-seo="false" data-bv-product-id="' + items[i].RecipeId + '"></div>' +
                '</div>' +
                '</div>' +
                '<div class="recipe-teaser__information">' +
                '<div class="recipe-teaser__item item__difficulty difficulty--' + items[i].DifficultyKey + '">' +
                '<div class="feature__icon">' +
                '<span class="recipe-teaser__level-icon">' +
                '<img src="/Content/Assets/Images/icon_recipe_level.png" />' +
                '</span>' +
                '<span class="recipe-teaser__level-icon">' +
                '<img src="/Content/Assets/Images/icon_recipe_level.png" />' +
                '</span>' +
                '<span class="recipe-teaser__level-icon">' +
                '<img src="/Content/Assets/Images/icon_recipe_level.png" />' +
                '</span>' +
                '</div>' +
                '<span class="feature__label">Aufwand</span>' +
                '</div>' +
                '<div class="recipe-teaser__item item__preptime">' +
                '<div class="feature__time">' + items[i].TotalTimeFormated + '</div>' +
                    '<div class="feature__label">' + items[i].TotalTimeText + '</div>' +
                    '</div>' +
                    '</div>' +
                    '</div>' +
                    '</a></div>';
            tmp.push(markup);
        }
        recipesSearchResultContainer !== null ? recipesSearchResultContainer.innerHTML = tmp.join('') : null;
        if (recipesSiteSearchContainer !== null) {
            recipesSiteSearchContainer.innerHTML = tmp.join('');
            initSwiper('div[data-search-for="Recipes"] .swiper-container', 3)
        }
    };

    function filtersFromUrl() {
        var urlParams = [];

        for (var [key, value] of Object.entries(getAllUrlParams(window.location.search))) {
            if (value !== null) {
                if (value.split("|").length > 1) {
                    for (var i = 0; i < value.split("|").length; i++) {
                        urlParams.push({
                            group: key,
                            value: value.split("|")[i]
                        });
                    }
                }
                else {
                    urlParams.push({
                        group: key,
                        value: value
                    });
                }
            }
        }
        return urlParams;
    }

    function drawFacets(facets) {
        var container = document.querySelector('div[data-role="filters-container"] div.popup-modal-content');
        var tmp = [];
        var checked = filtersFromUrl();
        var binaryGroup = [];
        container.innerHTML = "";

        for (var i = 0; i < facets.length; i++) {
            var checkboxes = [];
            var checkbox = '';

            if (facets[i].FacetVariations.length === 1) {
                var item = facets[i].FacetVariations[0];
                if (item.Key === 'true' && item.NumberOfResults > 0) {
                    checkbox =
                        '<li>' +
                        '<div class="form__group form__group--checkbox">' +
                        '<div class="form__checkbox">' +
                        '<label class="form__label--input form__label--checkbox" for="' + facets[i].Key + '">' +
                        '<input type="checkbox" ' +
                        'data-active-key="' + item.Key + '"' +
                        'data-groupname="' + facets[i].Name + '"' +
                        'data-groupkey="' + facets[i].Key + '"' +
                        'class="form__input--checkbox"' +
                        'name="' + facets[i].Name + '"' +
                        'id="' + facets[i].Key + '"' +
                        'value="' + facets[i].Name + '">' +
                        '<div class="checkmark--checkbox"></div>' +
                        facets[i].Name + ' (' + item.NumberOfResults + ')' +
                        '</label>' +
                        '</div>' +
                        '</div>' +
                        '</li>';
                }
                if (item.Key === 'false' && item.NumberOfResults > 0) {
                    checkbox =
                        '<li>' +
                        '<div class="form__group form__group--checkbox">' +
                        '<div class="form__checkbox">' +
                        '<label class="form__label--input form__label--checkbox disabled" for="' + facets[i].Key + '">' +
                        '<input type="checkbox" ' +
                        'data-active-key="' + item.Key + '"' +
                        'data-groupname="' + facets[i].Name + '"' +
                        'data-groupkey="' + facets[i].Key + '"' +
                        'class="disabled form__input--checkbox"' +
                        'name="' + facets[i].Name + '"' +
                        'id="' + facets[i].Key + '"' +
                        'value="' + facets[i].Name + '">' +
                        '<div class="checkmark--checkbox"></div>' +
                        facets[i].Name + ' (' + 0 + ')' +
                        '</label>' +
                        '</div>' +
                        '</div>' +
                        '</li>';
                }
                facets[i].Key === 'isnew' ? checkboxes.push(checkbox) : binaryGroup.push(checkbox);

            }

                // Added quick fix for occasion and difficulty
            else if (facets[i].FacetVariations.length == 2 && facets[i].Key != "difficulty" && facets[i].Key != "occasion") {
                var variations = facets[i].FacetVariations.sort(compare);
                var trueSlot = variations[1];
                var falseSlot = variations[0];
                //all are true and false is 0
                if (trueSlot.NumberOfResults > 0 && falseSlot.NumberOfResults === 0) {
                    var isChecked = isInArr(checked, facets[i].Key, "true") ? 'checked' : '';

                    checkbox =
                        '<li>' +
                        '<div class="form__group form__group--checkbox">' +
                        '<div class="form__checkbox">' +
                        '<label class="form__label--input form__label--checkbox ' + isChecked + '" for="' + facets[i].Key + '">' +
                        '<input type="checkbox" ' + isChecked +
                        ' data-active-key="' + trueSlot.Key + '"' +
                        'data-groupname="' + facets[i].Name + '"' +
                        'data-groupkey="' + facets[i].Key + '"' +
                        'class="form__input--checkbox"' +
                        'name="' + facets[i].Name + '"' +
                        'id="' + facets[i].Key + '"' +
                        'value="' + facets[i].Name + '">' +
                        '<div class="checkmark--checkbox"></div>' +
                        facets[i].Name + ' (' + trueSlot.NumberOfResults + ')' +
                        '</label>' +
                        '</div>' +
                        '</div>' +
                        '</li>';
                }
                //all are false and true is 0
                else if (trueSlot.NumberOfResults === 0 && falseSlot.NumberOfResults > 0) {
                    var isChecked = isInArr(checked, facets[i].Key, "true") ? 'checked' : '';

                    checkbox =
                        '<li>' +
                        '<div class="form__group form__group--checkbox">' +
                        '<div class="form__checkbox">' +
                        '<label class="form__label--input form__label--checkbox ' + isChecked + '" for="' + facets[i].Key + '">' +
                        '<input disabled type="checkbox" ' + isChecked +
                        ' data-active-key="' + falseSlot.Key + '"' +
                        'data-groupname="' + facets[i].Name + '"' +
                        'data-groupkey="' + facets[i].Key + '"' +
                        'class="form__input--checkbox"' +
                        'name="' + facets[i].Name + '"' +
                        'id="' + facets[i].Key + '"' +
                        'value="' + facets[i].Name + '">' +
                        '<div class="checkmark--checkbox"></div>' +
                        facets[i].Name + ' (' + 0 + ')' +
                        '</label>' +
                        '</div>' +
                        '</div>' +
                        '</li>';
                }

                else if (trueSlot.NumberOfResults === 0 && falseSlot.NumberOfResults === 0) {
                    checkbox =
                        '<li>' +
                        '<div class="form__group form__group--checkbox">' +
                        '<div class="form__checkbox">' +
                        '<label class="disabled form__label--input form__label--checkbox ' + isChecked + '" for="' + facets[i].Key + '">' +
                        '<input disabled type="checkbox" ' + isChecked +
                        ' data-active-key="' + falseSlot.Key + '"' +
                        'data-groupname="' + facets[i].Name + '"' +
                        'data-groupkey="' + facets[i].Key + '"' +
                        'class="form__input--checkbox"' +
                        'name="' + facets[i].Name + '"' +
                        'id="' + facets[i].Key + '"' +
                        'value="' + facets[i].Name + '">' +
                        '<div class="checkmark--checkbox"></div>' +
                        facets[i].Name + ' (' + 0 + ')' +
                        '</label>' +
                        '</div>' +
                        '</div>' +
                        '</li>';
                }
                //mix
                else {
                    var isChecked = isInArr(checked, facets[i].Key, "true") ? 'checked' : '';

                    checkbox =
                        '<li>' +
                        '<div class="form__group form__group--checkbox">' +
                        '<div class="form__checkbox">' +
                        '<label class="form__label--input form__label--checkbox ' + isChecked + '" for="' + facets[i].Key + '">' +
                        '<input type="checkbox" ' + isChecked +
                        ' data-active-key="' + trueSlot.Key + '"' +
                        'data-groupname="' + facets[i].Name + '"' +
                        'data-groupkey="' + facets[i].Key + '"' +
                        'class="form__input--checkbox"' +
                        'name="' + facets[i].Name + '"' +
                        'id="' + facets[i].Key + '"' +
                        'value="' + facets[i].Name + '">' +
                        '<div class="checkmark--checkbox"></div>' +
                        facets[i].Name + ' (' + trueSlot.NumberOfResults + ')' +
                        '</label>' +
                        '</div>' +
                        '</div>' +
                        '</li>';
                }

                facets[i].Key === 'isnew' ? checkboxes.push(checkbox) : binaryGroup.push(checkbox);
            } else {
                for (var j = 0; j < facets[i].FacetVariations.length; j++) {
                    var item = facets[i].FacetVariations[j];
                    var isBrand = facets[i].Key === 'alnaturabrandname';
                    var isDisabled = item.NumberOfResults == 0 && !isBrand ? 'disabled ' : '';
                    var isChecked = isInArr(checked, facets[i].Key, item.Key.replace(/ /g, '%20')) ? 'checked ' : '';
                    var numbers = isBrand ? '' : ' ( ' + item.NumberOfResults + ' ) ';
                    checkbox =
                        '<li>' +
                        '<div class="form__group form__group--checkbox">' +
                        '<div class="form__checkbox">' +
                        '<label for="' + facets[i].Key + j + '" class="form__label--input form__label--checkbox ' + isDisabled + isChecked + '">' +
                        '<input type="checkbox"' + isDisabled + isChecked +
                        'data-active-key="' + item.Key + '"' +
                        'data-groupname="' + facets[i].Name + '"' +
                        'data-groupkey="' + facets[i].Key + '"' +
                        'class="form__input--checkbox"' +
                        'name="' + facets[i].Name + '"' +
                        'id="' + facets[i].Key + j + '"' +
                        'value="' + item.Name + '">' +
                        '<div class="checkmark--checkbox"></div>' +
                        item.Name + numbers +
                        '</label>' +
                        '</div>' +
                        '</div>' +
                        '</li>';
                    checkboxes.push(checkbox);
                }
            }

            if (!(facets[i].Key === 'isvegan' || facets[i].Key === 'islactosefree' || facets[i].Key === 'isglutenfree')) {
                var group =
                    '<div class="filter-list-section ' + facets[i].Key + '">' +
                    '<div class="filter-list-name">' + facets[i].Name + '</div>' +
                    '<ul class="filter-list-options">' + checkboxes.join('') + '<ul>' +
                    '</div>';
                tmp.push(group);
            }
        }
        var binary = binaryGroup.length === 0 ? "" :
            '<div class="filter-list-section">' +
            '<ul class="filter-list-options binary-options">' + binaryGroup.join('') + '<ul>' +
            '</div>';
        tmp.unshift(binary);
        container.innerHTML = tmp.join('');
    }

    function drawRadioButtons(orderBy) {
        var items = orderBy.OrderByElements;
        var orderByHeadline = orderBy.Text;
        var tmp = [];
        tmp.push('<div class="filter-list-name orderedby">' + orderByHeadline + '</div>');
        tmp.push('<div class="radio-group-section">');
        var preselected = getUrlParameter('orderby') !== '' ? getUrlParameter('orderby') : Search.store.orderBy;
        for (var i = 0; i < items.length; i++) {
            var checked = preselected === items[i].Key ? 'checked' : '';
            var markup =
                '<div class="radio-group">' +
                '<label for="' + items[i].Key + '" class="radio-button">' +
                items[i].Text +
                '<input ' + checked + ' type="radio" name="orderby" id="' + items[i].Key + '" value="' + items[i].Key + '" />' +
                '<span class="checkmark"></span>' +
                '</label>' +
                '</div>'
            tmp.push(markup);
        }
        tmp.push('</div>');
        document.querySelector('.popup-modal-content').innerHTML += tmp.join("");
    }

    function drawStores(stores) {
        var tmp = [];
        for (var i = 0; i < stores.length; i++) {
            var detailPageUrl = stores[i].StoreDetailPageUrl;
            var storeImage = stores[i].Image != '' ? '<div class="store-teaser__image"><img src="' + stores[i].Image + '" alt="' + stores[i].Title + '" /></div>' : '';
            var markup = '';

            markup +=
                '<div class="swiper-slide">' +
                '<a href = "' + detailPageUrl + '" class="store-teaser">' +
                storeImage +
                '<div class="store-teaser__name">' + stores[i].Title + '</div>' +
                '<div class="store-teaser__text">' + stores[i].Text + '</div>' +
                '</a>' +
                '</div>';

            tmp.push(markup);
        }
        document.querySelector('div[data-search-for="Stores"] div.swiper-wrapper').innerHTML = tmp.join('');
        initSwiper('div[data-search-for="Stores"] .swiper-container', 3)
    }


    function isInArr(arr, group, value) {
        var isChecked = false;
        for (var i = 0; i < arr.length; i++) {
            if (arr[i]['group'].toLowerCase() === group.toLowerCase() && arr[i]['value'].toLowerCase() === value.toLowerCase()) {
                isChecked = true;
                break;
            }
        }
        return isChecked;
    }

    function replaceChar(origString, replaceChar, index) {
        var firstPart = origString.substr(0, index);
        var lastPart = origString.substr(index + 1);
        var newString = firstPart + replaceChar + lastPart;
        return newString;
    }

    function drawTags() {
        var container = document.getElementById('search-tags');
        var selected = document.querySelectorAll('.filter-list-options input[type="checkbox"]:checked');
        var tmp = [];
        for (var i = 0; i < selected.length; i++) {
            var description = selected[i].dataset.groupkey === 'freeofallergenstrace' || selected[i].dataset.groupkey === 'freeofallergensingredient' || selected[i].dataset.groupkey === 'isnew'
                ? selected[i].dataset.groupname : '';
            var tag =
                '<div data-active-key="' + selected[i].dataset.activeKey + '" data-group="' + selected[i].dataset.groupkey + '" data-value="' + selected[i].value + '" class="tag">' +
                '<div>' +
                '<div class="tag-title"><img src="/-/media/Foundation/Assets/icon_close.svg">' + selected[i].value + '</div>' +
                '<div class="tag-description">' + description + '</div>' +
                '</div></div>';
            tmp.push(tag);
        }
        container.innerHTML = tmp.join("");
    }

    function showFilterButton(n) {
        var btn = document.querySelector('div.search__container__filter__button > button');
        btn.classList.remove('hidden');
        if (btn.attributes["data-button-text"]) {
            var btnText = btn.attributes["data-button-text"].value.replace("{0}", n);
            btn.innerHTML = btnText;
        }
        else {
            btn.childNodes[1].innerHTML = n;
        }
    };

    function moduleReset() {
        Search.store.baseApiUrl = '';
        document.querySelector('.search-results-wrapper').innerHTML = "";
    };

    function moduleRedraw(res) {
        showFilterButton(res.Payload.TotalNumberResults);
        drawTemplates(res);
        drawFacets(res.Payload.Facets);
        drawTags();
        res.Payload.OrderBy !== undefined
            && res.Payload.OrderBy.OrderByElements !== undefined
            && res.Payload.OrderBy.OrderByElements.length > 0
            ? drawRadioButtons(res.Payload.OrderBy)
            : null;
        res.Payload.TotalNumberResults === 0 ? clearPagination() : initPagination(res.Payload.TotalNumberResults);
        res.Payload.TotalNumberResults === 0 ? toggleNoResult('hide') : toggleNoResult('show');
    }

    function initPagination(size) {
        var paginationTotalPages = Math.ceil(size / Search.store.recordsPerPage);
        var selected = parseInt(currentPage());
        var orderByStr = getUrlParameter('orderby') === '' ? '' : '&orderby=' + getUrlParameter('orderby');
        displayRange(size, selected, paginationTotalPages);
        Pagination.Init(document.getElementById('pagination'), {
            size: paginationTotalPages, // pages size
            page: selected,  // selected page
            step: 3,   // pages before and after current
            cbk: function (page) {
                var filtersString = Search.store.filtersString;
                var url = apiURL(Search.store.type, Search.store.datasource) + '&page=' + page + filtersString + orderByStr;
                getDataFromAPI(url, function (res) {
                    drawTemplates(res);
                    displayRange(size, page, paginationTotalPages);
                    pushState(page, (filtersString + orderByStr));
                    window.scrollTo(0, 250);
                })
            }
        });
    };


    function pushState(page, filters) {
        if (history.pushState) {

            var hasFilters = filters !== undefined ? filters : '';

            if (window.location.href.indexOf('?query=') !== -1) {
                var strUrl = '';
                strUrl = window.location.href.split('&page=')[0] + '&page=' + page + hasFilters;
                history.pushState({}, null, strUrl);
            } else {
                var base = window.location.href.split('?')[0];
                var strUrl = '';
                var pageStr = '';
                if (getUrlParameter('page') === '') {
                    pageStr = base + '?page=' + page;
                } else {
                    var baseStr = window.location.href.split('page=')[0];
                    pageStr = baseStr + 'page=' + page;
                }
                strUrl = pageStr + hasFilters;
                history.pushState({}, null, strUrl);
            };
        }
    }

    function clearPagination() {
        var element = document.getElementById("pagination");
        while (element.firstChild) {
            element.removeChild(element.firstChild);
        }
    };

    function displayRange(size, page) {

        if (!page) {
            page = 1;
        }

        var pageCountStart = ((page - 1) * 12) + 1;
        var pageCountEnd = (pageCountStart + 12) - 1;

        if (pageCountEnd > size) {
            pageCountEnd = size;
        }

        var start = 12 * page - 11;
        var end = page == 1 ? size : (12 * page >= size ? size : 12 * page);
        document.querySelector('.search-result-range .range').innerHTML = pageCountStart + ' - ' + pageCountEnd;
        document.querySelector('.search-result-range .total-range').innerHTML = size;

    }

    function displaySearchTerm() {
        if (window.location.search.length > 0) {
            var str = getUrlParameter('query');
            if (str.length > 0) {
                // Replace characters for XSS prevention
                str = str.replaceAll('<', '');
                str = str.replaceAll('>', '');
                str = str.replaceAll('(', '');
                str = str.replaceAll(')', '');
                str = str.replaceAll('/', '');
                str = str.replaceAll('=', '');
                str = str.replaceAll('&', '&amp;');
                str = str.replaceAll('%', '&#37;');
                //console.log(str);

                var div = document.createElement('div');
                div.classList.add('search-term-query');
                div.innerHTML = "für " + str;
                document.querySelector('.content-title__headline') !== null ? document.querySelector('.content-title__headline').append(div) : null;
            }
        }
    }

    function initialSearchResult(url) {
        var orderByStr = getUrlParameter('orderby') === '' ? '' : '&orderby=' + getUrlParameter('orderby');
        var apiUrl = currentPage() === 1 ? url + '&page=1' + (filtersStrUrl(filtersFromUrl()) + orderByStr) : url + '&page=' + currentPage() + (filtersStrUrl(filtersFromUrl()) + orderByStr);

        getDataFromAPI(apiUrl, function (res) {
            if (res.Success) {
                Search.store.apiUrl = url;
                showFilterButton(res.Payload.TotalNumberResults);
                drawFacets(res.Payload.Facets);
                drawTags();
                res.Payload.OrderBy !== undefined
                    && res.Payload.OrderBy.OrderByElements !== undefined
                    && res.Payload.OrderBy.OrderByElements.length > 0
                    ? drawRadioButtons(res.Payload.OrderBy)
                    : null;

                // Push Data To Google Analytics Layer
                var numberOfResults = res.Payload.TotalNumberResults;
                var queryTerm = getUrlParameter('query');
                dataLayer.push({
                    'siteSearchResults': numberOfResults,
                    'siteSearchTerm': queryTerm,
                    'event': 'site-search'
                });
                //

                if (numberOfResults > 0) {
                    drawTemplates(res);
                    initPagination(res.Payload.TotalNumberResults);
                    toggleNoResult('show');
                }
                else {
                    moduleReset();
                    clearPagination();
                    toggleNoResult('hide');
                }

            } else {
                moduleReset();
                toggleNoResult('hide');
            }
        });
        displaySearchTerm();
    };
    function toggleNoResult(action) {
        if (action === 'show') {
            document.querySelector('p.no-results').classList.add('hidden');
            document.querySelector('.search-result-range').classList.remove('hidden');
        }
        if (action === 'hide') {
            document.querySelector('p.no-results').classList.remove('hidden');
            document.querySelector('.search-result-range').classList.add('hidden');
        }

    }
    function filtersStrUrl(filters) {
        var strUrl = [];
        var filtered = filters.reduce(function (r, a) {
            r[a.group] = r[a.group] || [];
            r[a.group].push(a.value.replace(/ /g, '%20'));
            return r;
        }, Object.create(null));
        Object.keys(filtered).forEach(function (key) {
            if (key === 'alnaturabrandname'
                || key === 'freeofallergensingredient'
                || key === 'freeofallergenstrace'
                || key === 'isvegan'
                || key === 'isnew'
                || key === 'islactosefree'
                || key === 'isglutenfree'
                || key === 'occasion'
                || key === 'aggregatedtotaltimeinminutes'
                || key === 'nutritionalform'
                || key === 'difficulty'
                || key === 'agerating'
            ) {
                strUrl.push('&' + key + "=" + filtered[key].join("|"));
            }

        });
        return strUrl.join("")
    }


    function applyFilters() {
        var modal = document.querySelector('div.search__container__filter__popup > div.popup-modal');
        var selected = document.querySelectorAll('.filter-list-options input[type="checkbox"]:checked');
        var radio = document.querySelector('div.popup-modal .radio-group input[type="radio"]:checked');
        var filters = [];
        for (var i = 0; i < selected.length; i++) {
            filters.push({
                group: selected[i].dataset.groupkey,
                value: selected[i].dataset.activeKey
            })
        }
        Search.store.filtersString = filtersStrUrl(filters);
        var orderByStr = radio === null ? '' : '&orderby=' + radio.id;
        var url = apiURL(Search.store.type) + '&page=1' + filtersStrUrl(filters) + orderByStr + '&category=' + Search.store.category;
        getDataFromAPI(url, function (res) {
            if (res.Success) {
                pushState(1, (filtersStrUrl(filters) + orderByStr));
                moduleRedraw(res);
            }
            window.scrollTo(0, 250);
        })
        document.querySelector('.search-results-container-popup').classList.add('hidden');
        PopupModal.closeModal(modal);
    }

    function initSiteSearch(type) {
        if (type !== 'all') {
            getDataFromAPI(siteSearchUrl(type), function (res) {
                drawTemplates(res, type);
            })
        }
    }

    function getAllUrlParams(url) {
        var queryString = url ? url.split('?')[1] : window.location.search.slice(1);
        var obj = {};
        if (queryString) {
            queryString = queryString.split('#')[0];
            var arr = queryString.split('&');
            for (var i = 0; i < arr.length; i++) {
                var a = arr[i].split('=');
                var paramName = a[0];
                var paramValue = typeof (a[1]) === 'undefined' ? true : a[1];
                if (paramName.match(/\[(\d+)?\]$/)) {
                    var key = paramName.replace(/\[(\d+)?\]/, '');
                    if (!obj[key]) obj[key] = [];
                    if (paramName.match(/\[\d+\]$/)) {
                        var index = /\[(\d+)\]/.exec(paramName)[1];
                        obj[key][index] = paramValue;
                    } else {
                        obj[key].push(paramValue);
                    }
                } else {
                    if (!obj[paramName]) {
                        obj[paramName] = paramValue;
                    } else if (obj[paramName] && typeof obj[paramName] === 'string') {
                        obj[paramName] = [obj[paramName]];
                        obj[paramName].push(paramValue);
                    } else {
                        obj[paramName].push(paramValue);
                    }
                }
            }
        }
        return obj;
    }

    return {
        getDataFromAPI: getDataFromAPI,
        initialSearchResult: initialSearchResult,
        applyFilters: applyFilters,
        initSiteSearch: initSiteSearch,
        apiURL: apiURL,
        store: store,
        displaySearchTerm: displaySearchTerm
    };
})();

(function () {
    // check for search module on load
    var searchModules = document.querySelectorAll('div[data-role="search-module"]');
    var siteSearchPanel = document.querySelector('.site-search');

    if (siteSearchPanel !== null) {
        var panels = document.querySelectorAll('div[data-role="site-search-module"]');
        for (var i = 0; i < panels.length; i++) {
            Search.initSiteSearch(panels[i].dataset.searchFor.toLowerCase());
        }
        Search.displaySearchTerm();
    }

    if (searchModules.length > 0) {
        for (var i = 0; i < searchModules.length; i++) {
            var type = searchModules[i].dataset.searchFor;
            var category = document.getElementById('Category') != undefined ? document.getElementById('Category').value : '';
            var datasource = document.getElementById('QueryDatasource') != undefined ? document.getElementById('QueryDatasource').value : '';
            Search.initialSearchResult(Search.apiURL(type, datasource, category));
        }

        document.querySelector('button[data-role="filters"]').addEventListener("click", function () {
            var modal = document.querySelector('.search-results-container-popup > div.popup-modal');
            document.querySelector('.search-results-container-popup').classList.remove('hidden');
            PopupModal.showModal(modal);
        }, false);

        document.querySelector('.popup-modal-content').addEventListener('click', function (e) {
            if (e.target.nodeName === 'LABEL' || e.target.nodeName === 'CHECKBOX' || e.target.nodeName === 'SPAN') {
                e.stopImmediatePropagation();
                if (e.target.nodeName === 'SPAN') {
                    Search.store.orderBy = e.target.parentNode.childNodes[1].value;
                }
                else if (e.target.childNodes[1].type === 'radio') {
                    Search.store.orderBy = e.target.childNodes[1].value;
                }
                else if (e.target.childNodes[1].type === 'checkbox' && !e.target.classList.contains('disabled')) {
                    e.target.classList.toggle('checked')
                }
            };


            if (e.target.classList.contains('filter-list-name')) {
                var title = e.target;
                title.classList.toggle("active");
                var panel = title.nextElementSibling;
                if (panel.style.maxHeight) {
                    panel.style.maxHeight = null;
                } else {
                    panel.style.maxHeight = panel.scrollHeight + "px";
                }
            }
        });

        document.querySelector('button[data-role="applyFilters"]').addEventListener('click', function () {
            Search.applyFilters();
        });

        document.getElementById('search-tags').addEventListener('click', function (e) {
            if (e.target.closest('.tag') !== null) {
                var tag = e.target.closest('.tag');
                var selected = document.querySelectorAll('.filter-list-options input[type="checkbox"]:checked');
                for (var i = 0; i < selected.length; i++) {
                    if (tag.dataset.group.toLowerCase() === selected[i].dataset.groupkey && tag.dataset.activeKey.toLowerCase() === selected[i].dataset.activeKey.toLowerCase()) {
                        selected[i].checked = false;
                        selected[i].parentNode.classList.remove('checked');
                    }
                }
                Search.applyFilters();
            };

        })
    }
})();
;
var contentTeaserSwiper = new Swiper('.content-teaser-list__container.swiper-container', {
    loop: false,
    centeredSlides: true,
    slidesPerView: 'auto',
    spaceBetween: 15,
    lazy: {
        loadPrevNext: true,
        watchSlidesVisibility: true,
    },
    navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
    },
    pagination: {
        clickable: true,
        el: '.swiper-pagination',
        dynamicBullets: true,
    },
    breakpoints: {
        768: {
            centeredSlides: false,
            slidesPerView: 2,
            lazy: {
                loadPrevNextAmount: 3,
            },
        },
        992: {
            centeredSlides: false,
            slidesPerView: 3,
            spaceBetween: 30,
            lazy: {
                loadPrevNextAmount: 4,
            },
        }
    }
});;
"use strict";var navTrigger=document.getElementById("metaNavTrigger"),metaNav=document.querySelector(".header__meta > .linklist");navTrigger!==null&&navTrigger.addEventListener("click",function(){this.classList.toggle("active");metaNav.classList.toggle("active")});document.querySelector("#headerAccountIcon").addEventListener("click",function(){var t=document.querySelectorAll(".navigation__sub.current"),n;if(t!==null){for(n=0;n<t.length;n++)t[n].classList.remove("active");document.querySelector(".navigation__sub-indicator")!==null&&document.querySelector(".navigation__sub-indicator").classList.remove("active");document.querySelector(".header__meta .linklist").classList.remove("active");navTrigger.classList.remove("active")}});document.querySelector(".navigation__sub-indicator")!=null&&document.querySelector(".navigation__sub-indicator").addEventListener("click",function(){document.querySelector(".header__meta .linklist").classList.remove("active");navTrigger.classList.remove("active")});navTrigger!==null&&navTrigger.addEventListener("click",function(){document.querySelector(".navigation__sub-indicator")!=null&&(document.querySelector(".navigation__sub-indicator").classList.remove("active"),document.querySelector(".navigation__sub.current").classList.remove("active"))});;
var productTeaserSwiper = new Swiper('.product-teaser-slider__container.swiper-container', {
    loop: false,
    centeredSlides: true,
    slidesPerView: 'auto',
    spaceBetween: 15,
    lazy: {
        loadPrevNext: true,
        watchSlidesVisibility: true,
    },
    navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
    },
    pagination: {
        clickable: true,
        el: '.swiper-pagination',
        dynamicBullets: true,
    },
    breakpoints: {
        768: {
            centeredSlides: false,
            slidesPerView: 3,
            lazy: {
                loadPrevNextAmount: 4,
            },
        },
        992: {
            centeredSlides: false,
            slidesPerView: 4,
            spaceBetween: 30,
            lazy: {
                loadPrevNextAmount: 4,
            },
        },
        1200: {
            centeredSlides: false,
            slidesPerView: 4,
            spaceBetween: 30,
            lazy: {
                loadPrevNextAmount: 4,
            },
        }
    }
});;
// Products Sub Categories Slider only for mobile
// breakpoint where swiper will be destroyed
// and switches to a dual-column layout
var breakpointSubCategories = window.matchMedia('(min-width:768px)');
// keep track of swiper instances to destroy later
var recipeSubCategory = document.querySelector('.recipe-categories__container');
var recipeSubCategorySwiper;

var recipeBreakpointChecker = function () {
    if (breakpointSubCategories.matches === true) {
        if (recipeSubCategorySwiper !== undefined) recipeSubCategorySwiper.destroy(true, true);
        return;
    } else if (breakpointSubCategories.matches === false) {
        return enableSubCategorySwiper();
    }
};

var enableSubCategorySwiper = function () {
    recipeSubCategorySwiper = new Swiper('.recipe-categories__container.swiper-container', {
        slidesPerView: 'auto',
        spaceBetween: 5,
        cssMode: true,

        navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev'
        },
        pagination: {
            clickable: true,
            el: '.swiper-pagination',
            dynamicBullets: true,
            paginationClickable: true
        },
        breakpoints: {
            768: {
                centeredSlides: true,
                slidesPerView: 'auto',
                spaceBetween: 15
            }
        }

    });

};
if (recipeSubCategory != null || undefined) {
    breakpointSubCategories.addListener(recipeBreakpointChecker);
    recipeBreakpointChecker();
};
var stageSlider = document.querySelector('.stage-slider');

if (stageSlider !== undefined && stageSlider !== null) {
    var stageSliderSlides = stageSlider.querySelectorAll('.stage-slider__item');
    var stageSliderLength = stageSliderSlides.length;

    if (stageSliderLength > 1) {
        var stageSliderSwiper = new Swiper('.stage-slider__container.swiper-container', {
            loop: true,
            centeredSlides: true,
            slidesPerView: 1,
            pagination: {
                clickable: true,
                el: '.swiper-pagination',
                dynamicBullets: true,
            },
            navigation: {
                nextEl: '.swiper-button-next',
                prevEl: '.swiper-button-prev',
            }
        });
    } else {
        var stageSliderSwiper = new Swiper('.stage-slider__container.swiper-container', {
            loop: false,
            centeredSlides: false,
            slidesPerView: 1,
            pagination: {
                clickable: true,
                el: '.swiper-pagination',
                dynamicBullets: true,
            },
            navigation: {
                nextEl: '.swiper-button-next',
                prevEl: '.swiper-button-prev',
            }
        });
    }

    stageSliderSlides.forEach(function (item, index) {
        if (item.querySelector('a') != null) {
            item.querySelector('a').addEventListener('click', function (evt) {
                var title = item.children[0].querySelector('.stage-slider__headline').getAttribute('tr-headline')
                var gtmData = {
                    'eventCategory': 'Navigation',                       //static value
                    'eventAction': 'Homepage Slider',                    //static value
                    'eventLabel': index + 1 + " " + title,   //number of position in slider followed by h2 title of         
                    'event': 'event-tracking'                            //static value
                };
                dataLayer.push(gtmData);
            }, false)
        }
    })
}

;
var MarkerClusterer=function(){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=function(t){return t&&t.Math==Math&&t},n=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof t&&t)||function(){return this}()||Function("return this")(),i=function(t){try{return!!t()}catch(t){return!0}},o=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),s={}.propertyIsEnumerable,a=Object.getOwnPropertyDescriptor,u={f:a&&!s.call({1:2},1)?function(t){var e=a(this,t);return!!e&&e.enumerable}:s},l=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},c={}.toString,h=function(t){return c.call(t).slice(8,-1)},p="".split,g=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==h(t)?p.call(t,""):Object(t)}:Object,f=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},d=function(t){return g(f(t))},_=function(t){return"object"==typeof t?null!==t:"function"==typeof t},m=function(t,e){if(!_(t))return t;var r,n;if(e&&"function"==typeof(r=t.toString)&&!_(n=r.call(t)))return n;if("function"==typeof(r=t.valueOf)&&!_(n=r.call(t)))return n;if(!e&&"function"==typeof(r=t.toString)&&!_(n=r.call(t)))return n;throw TypeError("Can't convert object to primitive value")},v={}.hasOwnProperty,y=function(t,e){return v.call(t,e)},x=n.document,S=_(x)&&_(x.createElement),M=!o&&!i((function(){return 7!=Object.defineProperty((t="div",S?x.createElement(t):{}),"a",{get:function(){return 7}}).a;var t})),b=Object.getOwnPropertyDescriptor,k={f:o?b:function(t,e){if(t=d(t),e=m(e,!0),M)try{return b(t,e)}catch(t){}if(y(t,e))return l(!u.f.call(t,e),t[e])}},C=function(t){if(!_(t))throw TypeError(String(t)+" is not an object");return t},E=Object.defineProperty,I={f:o?E:function(t,e,r){if(C(t),e=m(e,!0),C(r),M)try{return E(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},w=o?function(t,e,r){return I.f(t,e,l(1,r))}:function(t,e,r){return t[e]=r,t},L=function(t,e){try{w(n,t,e)}catch(r){n[t]=e}return e},P="__core-js_shared__",T=n[P]||L(P,{}),A=Function.toString;"function"!=typeof T.inspectSource&&(T.inspectSource=function(t){return A.call(t)});var O,z,R,j,B=T.inspectSource,Z=n.WeakMap,N="function"==typeof Z&&/native code/.test(B(Z)),D=e((function(t){(t.exports=function(t,e){return T[t]||(T[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.9.1",mode:"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})})),H=0,$=Math.random(),F=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++H+$).toString(36)},U=D("keys"),G={},V=n.WeakMap;if(N){var W=T.state||(T.state=new V),X=W.get,K=W.has,q=W.set;O=function(t,e){return e.facade=t,q.call(W,t,e),e},z=function(t){return X.call(W,t)||{}},R=function(t){return K.call(W,t)}}else{var Y=U[j="state"]||(U[j]=F(j));G[Y]=!0,O=function(t,e){return e.facade=t,w(t,Y,e),e},z=function(t){return y(t,Y)?t[Y]:{}},R=function(t){return y(t,Y)}}var J,Q,tt={set:O,get:z,has:R,enforce:function(t){return R(t)?z(t):O(t,{})},getterFor:function(t){return function(e){var r;if(!_(e)||(r=z(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}},et=e((function(t){var e=tt.get,r=tt.enforce,i=String(String).split("String");(t.exports=function(t,e,o,s){var a,u=!!s&&!!s.unsafe,l=!!s&&!!s.enumerable,c=!!s&&!!s.noTargetGet;"function"==typeof o&&("string"!=typeof e||y(o,"name")||w(o,"name",e),(a=r(o)).source||(a.source=i.join("string"==typeof e?e:""))),t!==n?(u?!c&&t[e]&&(l=!0):delete t[e],l?t[e]=o:w(t,e,o)):l?t[e]=o:L(e,o)})(Function.prototype,"toString",(function(){return"function"==typeof this&&e(this).source||B(this)}))})),rt=n,nt=function(t){return"function"==typeof t?t:void 0},it=function(t,e){return arguments.length<2?nt(rt[t])||nt(n[t]):rt[t]&&rt[t][e]||n[t]&&n[t][e]},ot=Math.ceil,st=Math.floor,at=function(t){return isNaN(t=+t)?0:(t>0?st:ot)(t)},ut=Math.min,lt=function(t){return t>0?ut(at(t),9007199254740991):0},ct=Math.max,ht=Math.min,pt=function(t,e){var r=at(t);return r<0?ct(r+e,0):ht(r,e)},gt=function(t){return function(e,r,n){var i,o=d(e),s=lt(o.length),a=pt(n,s);if(t&&r!=r){for(;s>a;)if((i=o[a++])!=i)return!0}else for(;s>a;a++)if((t||a in o)&&o[a]===r)return t||a||0;return!t&&-1}},ft={includes:gt(!0),indexOf:gt(!1)}.indexOf,dt=function(t,e){var r,n=d(t),i=0,o=[];for(r in n)!y(G,r)&&y(n,r)&&o.push(r);for(;e.length>i;)y(n,r=e[i++])&&(~ft(o,r)||o.push(r));return o},_t=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],mt=_t.concat("length","prototype"),vt={f:Object.getOwnPropertyNames||function(t){return dt(t,mt)}},yt={f:Object.getOwnPropertySymbols},xt=it("Reflect","ownKeys")||function(t){var e=vt.f(C(t)),r=yt.f;return r?e.concat(r(t)):e},St=function(t,e){for(var r=xt(e),n=I.f,i=k.f,o=0;o<r.length;o++){var s=r[o];y(t,s)||n(t,s,i(e,s))}},Mt=/#|\.prototype\./,bt=function(t,e){var r=Ct[kt(t)];return r==It||r!=Et&&("function"==typeof e?i(e):!!e)},kt=bt.normalize=function(t){return String(t).replace(Mt,".").toLowerCase()},Ct=bt.data={},Et=bt.NATIVE="N",It=bt.POLYFILL="P",wt=bt,Lt=k.f,Pt=function(t,e){var r,i,o,s,a,u=t.target,l=t.global,c=t.stat;if(r=l?n:c?n[u]||L(u,{}):(n[u]||{}).prototype)for(i in e){if(s=e[i],o=t.noTargetGet?(a=Lt(r,i))&&a.value:r[i],!wt(l?i:u+(c?".":"#")+i,t.forced)&&void 0!==o){if(typeof s==typeof o)continue;St(s,o)}(t.sham||o&&o.sham)&&w(s,"sham",!0),et(r,i,s,t)}},Tt=function(t){return Object(f(t))},At=Array.isArray||function(t){return"Array"==h(t)},Ot="process"==h(n.process),zt=it("navigator","userAgent")||"",Rt=n.process,jt=Rt&&Rt.versions,Bt=jt&&jt.v8;Bt?Q=(J=Bt.split("."))[0]+J[1]:zt&&(!(J=zt.match(/Edge\/(\d+)/))||J[1]>=74)&&(J=zt.match(/Chrome\/(\d+)/))&&(Q=J[1]);var Zt=Q&&+Q,Nt=!!Object.getOwnPropertySymbols&&!i((function(){return!Symbol.sham&&(Ot?38===Zt:Zt>37&&Zt<41)})),Dt=Nt&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,Ht=D("wks"),$t=n.Symbol,Ft=Dt?$t:$t&&$t.withoutSetter||F,Ut=function(t){return y(Ht,t)&&(Nt||"string"==typeof Ht[t])||(Nt&&y($t,t)?Ht[t]=$t[t]:Ht[t]=Ft("Symbol."+t)),Ht[t]},Gt=Ut("species"),Vt=function(t,e){var r;return At(t)&&("function"!=typeof(r=t.constructor)||r!==Array&&!At(r.prototype)?_(r)&&null===(r=r[Gt])&&(r=void 0):r=void 0),new(void 0===r?Array:r)(0===e?0:e)},Wt=function(t,e,r){var n=m(e);n in t?I.f(t,n,l(0,r)):t[n]=r},Xt=Ut("species"),Kt=function(t){return Zt>=51||!i((function(){var e=[];return(e.constructor={})[Xt]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},qt=Kt("splice"),Yt=Math.max,Jt=Math.min,Qt=9007199254740991,te="Maximum allowed length exceeded";Pt({target:"Array",proto:!0,forced:!qt},{splice:function(t,e){var r,n,i,o,s,a,u=Tt(this),l=lt(u.length),c=pt(t,l),h=arguments.length;if(0===h?r=n=0:1===h?(r=0,n=l-c):(r=h-2,n=Jt(Yt(at(e),0),l-c)),l+r-n>Qt)throw TypeError(te);for(i=Vt(u,n),o=0;o<n;o++)(s=c+o)in u&&Wt(i,o,u[s]);if(i.length=n,r<n){for(o=c;o<l-n;o++)a=o+r,(s=o+n)in u?u[a]=u[s]:delete u[a];for(o=l;o>l-n+r;o--)delete u[o-1]}else if(r>n)for(o=l-n;o>c;o--)a=o+r-1,(s=o+n-1)in u?u[a]=u[s]:delete u[a];for(o=0;o<r;o++)u[o+c]=arguments[o+2];return u.length=l-n+r,i}});var ee=Kt("slice"),re=Ut("species"),ne=[].slice,ie=Math.max;Pt({target:"Array",proto:!0,forced:!ee},{slice:function(t,e){var r,n,i,o=d(this),s=lt(o.length),a=pt(t,s),u=pt(void 0===e?s:e,s);if(At(o)&&("function"!=typeof(r=o.constructor)||r!==Array&&!At(r.prototype)?_(r)&&null===(r=r[re])&&(r=void 0):r=void 0,r===Array||void 0===r))return ne.call(o,a,u);for(n=new(void 0===r?Array:r)(ie(u-a,0)),i=0;a<u;a++,i++)a in o&&Wt(n,i,o[a]);return n.length=i,n}});var oe={};oe[Ut("toStringTag")]="z";var se="[object z]"===String(oe),ae=Ut("toStringTag"),ue="Arguments"==h(function(){return arguments}()),le=se?h:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),ae))?r:ue?h(e):"Object"==(n=h(e))&&"function"==typeof e.callee?"Arguments":n},ce=se?{}.toString:function(){return"[object "+le(this)+"]"};se||et(Object.prototype,"toString",ce,{unsafe:!0});var he=function(){var t=C(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e},pe="toString",ge=RegExp.prototype,fe=ge.toString,de=i((function(){return"/a/b"!=fe.call({source:"a",flags:"b"})})),_e=fe.name!=pe;(de||_e)&&et(RegExp.prototype,pe,(function(){var t=C(this),e=String(t.source),r=t.flags;return"/"+e+"/"+String(void 0===r&&t instanceof RegExp&&!("flags"in ge)?he.call(t):r)}),{unsafe:!0});var me=function(t,e){return(me=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)};function ve(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}me(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var ye,xe,Se=function(){return(Se=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},Me=[].join,be=g!=Object,ke=(ye=",",!!(xe=[]["join"])&&i((function(){xe.call(null,ye||function(){throw 1},1)})));Pt({target:"Array",proto:!0,forced:be||!ke},{join:function(t){return Me.call(d(this),void 0===t?",":t)}});var Ce=Object.keys||function(t){return dt(t,_t)};function Ee(t,e){return RegExp(t,e)}Pt({target:"Object",stat:!0,forced:i((function(){Ce(1)}))},{keys:function(t){return Ce(Tt(t))}});var Ie,we,Le={UNSUPPORTED_Y:i((function(){var t=Ee("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),BROKEN_CARET:i((function(){var t=Ee("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},Pe=RegExp.prototype.exec,Te=String.prototype.replace,Ae=Pe,Oe=(Ie=/a/,we=/b*/g,Pe.call(Ie,"a"),Pe.call(we,"a"),0!==Ie.lastIndex||0!==we.lastIndex),ze=Le.UNSUPPORTED_Y||Le.BROKEN_CARET,Re=void 0!==/()??/.exec("")[1];(Oe||Re||ze)&&(Ae=function(t){var e,r,n,i,o=this,s=ze&&o.sticky,a=he.call(o),u=o.source,l=0,c=t;return s&&(-1===(a=a.replace("y","")).indexOf("g")&&(a+="g"),c=String(t).slice(o.lastIndex),o.lastIndex>0&&(!o.multiline||o.multiline&&"\n"!==t[o.lastIndex-1])&&(u="(?: "+u+")",c=" "+c,l++),r=new RegExp("^(?:"+u+")",a)),Re&&(r=new RegExp("^"+u+"$(?!\\s)",a)),Oe&&(e=o.lastIndex),n=Pe.call(s?r:o,c),s?n?(n.input=n.input.slice(l),n[0]=n[0].slice(l),n.index=o.lastIndex,o.lastIndex+=n[0].length):o.lastIndex=0:Oe&&n&&(o.lastIndex=o.global?n.index+n[0].length:e),Re&&n&&n.length>1&&Te.call(n[0],r,(function(){for(i=1;i<arguments.length-2;i++)void 0===arguments[i]&&(n[i]=void 0)})),n});var je=Ae;Pt({target:"RegExp",proto:!0,forced:/./.exec!==je},{exec:je});var Be=Ut("species"),Ze=!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),Ne="$0"==="a".replace(/./,"$0"),De=Ut("replace"),He=!!/./[De]&&""===/./[De]("a","$0"),$e=!i((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2!==r.length||"a"!==r[0]||"b"!==r[1]})),Fe=function(t,e,r,n){var o=Ut(t),s=!i((function(){var e={};return e[o]=function(){return 7},7!=""[t](e)})),a=s&&!i((function(){var e=!1,r=/a/;return"split"===t&&((r={}).constructor={},r.constructor[Be]=function(){return r},r.flags="",r[o]=/./[o]),r.exec=function(){return e=!0,null},r[o](""),!e}));if(!s||!a||"replace"===t&&(!Ze||!Ne||He)||"split"===t&&!$e){var u=/./[o],l=r(o,""[t],(function(t,e,r,n,i){return e.exec===je?s&&!i?{done:!0,value:u.call(e,r,n)}:{done:!0,value:t.call(r,e,n)}:{done:!1}}),{REPLACE_KEEPS_$0:Ne,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:He}),c=l[0],h=l[1];et(String.prototype,t,c),et(RegExp.prototype,o,2==e?function(t,e){return h.call(t,this,e)}:function(t){return h.call(t,this)})}n&&w(RegExp.prototype[o],"sham",!0)},Ue=Ut("match"),Ge=Ut("species"),Ve=function(t,e){var r,n=C(t).constructor;return void 0===n||null==(r=C(n)[Ge])?e:function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}(r)},We=function(t){return function(e,r){var n,i,o=String(f(e)),s=at(r),a=o.length;return s<0||s>=a?t?"":void 0:(n=o.charCodeAt(s))<55296||n>56319||s+1===a||(i=o.charCodeAt(s+1))<56320||i>57343?t?o.charAt(s):n:t?o.slice(s,s+2):i-56320+(n-55296<<10)+65536}},Xe={codeAt:We(!1),charAt:We(!0)}.charAt,Ke=function(t,e,r){return e+(r?Xe(t,e).length:1)},qe=function(t,e){var r=t.exec;if("function"==typeof r){var n=r.call(t,e);if("object"!=typeof n)throw TypeError("RegExp exec method returned something other than an Object or null");return n}if("RegExp"!==h(t))throw TypeError("RegExp#exec called on incompatible receiver");return je.call(t,e)},Ye=[].push,Je=Math.min,Qe=4294967295,tr=!i((function(){return!RegExp(Qe,"y")}));Fe("split",2,(function(t,e,r){var n;return n="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,r){var n,i,o=String(f(this)),s=void 0===r?Qe:r>>>0;if(0===s)return[];if(void 0===t)return[o];if(!_(n=t)||!(void 0!==(i=n[Ue])?i:"RegExp"==h(n)))return e.call(o,t,s);for(var a,u,l,c=[],p=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),g=0,d=new RegExp(t.source,p+"g");(a=je.call(d,o))&&!((u=d.lastIndex)>g&&(c.push(o.slice(g,a.index)),a.length>1&&a.index<o.length&&Ye.apply(c,a.slice(1)),l=a[0].length,g=u,c.length>=s));)d.lastIndex===a.index&&d.lastIndex++;return g===o.length?!l&&d.test("")||c.push(""):c.push(o.slice(g)),c.length>s?c.slice(0,s):c}:"0".split(void 0,0).length?function(t,r){return void 0===t&&0===r?[]:e.call(this,t,r)}:e,[function(e,r){var i=f(this),o=null==e?void 0:e[t];return void 0!==o?o.call(e,i,r):n.call(String(i),e,r)},function(t,i){var o=r(n,t,this,i,n!==e);if(o.done)return o.value;var s=C(t),a=String(this),u=Ve(s,RegExp),l=s.unicode,c=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(tr?"y":"g"),h=new u(tr?s:"^(?:"+s.source+")",c),p=void 0===i?Qe:i>>>0;if(0===p)return[];if(0===a.length)return null===qe(h,a)?[a]:[];for(var g=0,f=0,d=[];f<a.length;){h.lastIndex=tr?f:0;var _,m=qe(h,tr?a:a.slice(f));if(null===m||(_=Je(lt(h.lastIndex+(tr?0:f)),a.length))===g)f=Ke(a,f,l);else{if(d.push(a.slice(g,f)),d.length===p)return d;for(var v=1;v<=m.length-1;v++)if(d.push(m[v]),d.length===p)return d;f=g=_}}return d.push(a.slice(g)),d}]}),!tr);var er=Math.floor,rr="".replace,nr=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,ir=/\$([$&'`]|\d{1,2})/g,or=function(t,e,r,n,i,o){var s=r+t.length,a=n.length,u=ir;return void 0!==i&&(i=Tt(i),u=nr),rr.call(o,u,(function(o,u){var l;switch(u.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,r);case"'":return e.slice(s);case"<":l=i[u.slice(1,-1)];break;default:var c=+u;if(0===c)return o;if(c>a){var h=er(c/10);return 0===h?o:h<=a?void 0===n[h-1]?u.charAt(1):n[h-1]+u.charAt(1):o}l=n[c-1]}return void 0===l?"":l}))},sr=Math.max,ar=Math.min;Fe("replace",2,(function(t,e,r,n){var i=n.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,o=n.REPLACE_KEEPS_$0,s=i?"$":"$0";return[function(r,n){var i=f(this),o=null==r?void 0:r[t];return void 0!==o?o.call(r,i,n):e.call(String(i),r,n)},function(t,n){if(!i&&o||"string"==typeof n&&-1===n.indexOf(s)){var a=r(e,t,this,n);if(a.done)return a.value}var u=C(t),l=String(this),c="function"==typeof n;c||(n=String(n));var h=u.global;if(h){var p=u.unicode;u.lastIndex=0}for(var g=[];;){var f=qe(u,l);if(null===f)break;if(g.push(f),!h)break;""===String(f[0])&&(u.lastIndex=Ke(l,lt(u.lastIndex),p))}for(var d,_="",m=0,v=0;v<g.length;v++){f=g[v];for(var y=String(f[0]),x=sr(ar(at(f.index),l.length),0),S=[],M=1;M<f.length;M++)S.push(void 0===(d=f[M])?d:String(d));var b=f.groups;if(c){var k=[y].concat(S,x,l);void 0!==b&&k.push(b);var E=String(n.apply(void 0,k))}else E=or(y,l,x,S,b,n);x>=m&&(_+=l.slice(m,x)+E,m=x+y.length)}return _+l.slice(m)}]}));var ur=function t(){!function(t,e){for(var r in e.prototype)t.prototype[r]=e.prototype[r]}(t,google.maps.OverlayView)};function lr(t){return Object.keys(t).reduce((function(e,r){return t[r]&&e.push(r+":"+t[r]),e}),[]).join(";")}function cr(t){return t?t+"px":void 0}var hr=function(t){function e(e,r){var n=t.call(this)||this;return n.cluster_=e,n.styles_=r,n.center_=null,n.div_=null,n.sums_=null,n.visible_=!1,n.style=null,n.setMap(e.getMap()),n}return ve(e,t),e.prototype.onAdd=function(){var t,e,r=this,n=this.cluster_.getMarkerClusterer(),i=google.maps.version.split("."),o=i[0],s=i[1],a=100*parseInt(o,10)+parseInt(s,10);this.div_=document.createElement("div"),this.visible_&&this.show(),this.getPanes().overlayMouseTarget.appendChild(this.div_),this.boundsChangedListener_=google.maps.event.addListener(this.getMap(),"bounds_changed",(function(){e=t})),google.maps.event.addDomListener(this.div_,"mousedown",(function(){t=!0,e=!1})),a>=332&&google.maps.event.addDomListener(this.div_,"touchstart",(function(t){t.stopPropagation()})),google.maps.event.addDomListener(this.div_,"click",(function(i){if(t=!1,!e){if(google.maps.event.trigger(n,"click",r.cluster_),google.maps.event.trigger(n,"clusterclick",r.cluster_),n.getZoomOnClick()){var o=n.getMaxZoom(),s=r.cluster_.getBounds();n.getMap().fitBounds(s),setTimeout((function(){n.getMap().fitBounds(s),null!==o&&n.getMap().getZoom()>o&&n.getMap().setZoom(o+1)}),100)}i.cancelBubble=!0,i.stopPropagation&&i.stopPropagation()}})),google.maps.event.addDomListener(this.div_,"mouseover",(function(){google.maps.event.trigger(n,"mouseover",r.cluster_)})),google.maps.event.addDomListener(this.div_,"mouseout",(function(){google.maps.event.trigger(n,"mouseout",r.cluster_)}))},e.prototype.onRemove=function(){this.div_&&this.div_.parentNode&&(this.hide(),google.maps.event.removeListener(this.boundsChangedListener_),google.maps.event.clearInstanceListeners(this.div_),this.div_.parentNode.removeChild(this.div_),this.div_=null)},e.prototype.draw=function(){if(this.visible_){var t=this.getPosFromLatLng_(this.center_);this.div_.style.top=t.y+"px",this.div_.style.left=t.x+"px"}},e.prototype.hide=function(){this.div_&&(this.div_.style.display="none"),this.visible_=!1},e.prototype.show=function(){this.div_&&(this.div_.className=this.className_,this.div_.style.cssText=this.createCss_(this.getPosFromLatLng_(this.center_)),this.div_.innerHTML=(this.style.url?this.getImageElementHtml():"")+this.getLabelDivHtml(),void 0===this.sums_.title||""===this.sums_.title?this.div_.title=this.cluster_.getMarkerClusterer().getTitle():this.div_.title=this.sums_.title,this.div_.style.display=""),this.visible_=!0},e.prototype.getLabelDivHtml=function(){return'\n<div aria-label="'+this.cluster_.getMarkerClusterer().ariaLabelFn(this.sums_.text)+'" style="'+lr({position:"absolute",top:cr(this.anchorText_[0]),left:cr(this.anchorText_[1]),color:this.style.textColor,"font-size":cr(this.style.textSize),"font-family":this.style.fontFamily,"font-weight":this.style.fontWeight,"font-style":this.style.fontStyle,"text-decoration":this.style.textDecoration,"text-align":"center",width:cr(this.style.width),"line-height":cr(this.style.textLineHeight)})+'" tabindex="0">\n  <span aria-hidden="true">'+this.sums_.text+"</span>\n</div>\n"},e.prototype.getImageElementHtml=function(){var t=(this.style.backgroundPosition||"0 0").split(" "),e=parseInt(t[0].replace(/^\s+|\s+$/g,""),10),r=parseInt(t[1].replace(/^\s+|\s+$/g,""),10),n={};if(this.cluster_.getMarkerClusterer().getEnableRetinaIcons())n={width:cr(this.style.width),height:cr(this.style.height)};else{var i=[-1*r,-1*e+this.style.width,-1*r+this.style.height,-1*e];n={clip:"rect("+i[0]+"px, "+i[1]+"px, "+i[2]+"px, "+i[3]+"px)"}}var o=this.sums_.url?{width:"100%",height:"100%"}:{},s=lr(Se(Se({position:"absolute",top:cr(r),left:cr(e)},n),o));return'<img alt="'+this.sums_.text+'" aria-hidden="true" src="'+this.style.url+'" style="'+s+'"/>'},e.prototype.useStyle=function(t){this.sums_=t;var e=Math.max(0,t.index-1);e=Math.min(this.styles_.length-1,e),this.style=this.sums_.url?Se(Se({},this.styles_[e]),{url:this.sums_.url}):this.styles_[e],this.anchorText_=this.style.anchorText||[0,0],this.anchorIcon_=this.style.anchorIcon||[Math.floor(this.style.height/2),Math.floor(this.style.width/2)],this.className_=this.cluster_.getMarkerClusterer().getClusterClass()+" "+(this.style.className||"cluster-"+e)},e.prototype.setCenter=function(t){this.center_=t},e.prototype.createCss_=function(t){return lr({"z-index":""+this.cluster_.getMarkerClusterer().getZIndex(),top:cr(t.y),left:cr(t.x),width:cr(this.style.width),height:cr(this.style.height),cursor:"pointer",position:"absolute","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-o-user-select":"none","user-select":"none"})},e.prototype.getPosFromLatLng_=function(t){var e=this.getProjection().fromLatLngToDivPixel(t);return e.x=Math.floor(e.x-this.anchorIcon_[1]),e.y=Math.floor(e.y-this.anchorIcon_[0]),e},e}(ur),pr=function(){function t(t){this.markerClusterer_=t,this.map_=this.markerClusterer_.getMap(),this.minClusterSize_=this.markerClusterer_.getMinimumClusterSize(),this.averageCenter_=this.markerClusterer_.getAverageCenter(),this.markers_=[],this.center_=null,this.bounds_=null,this.clusterIcon_=new hr(this,this.markerClusterer_.getStyles())}return t.prototype.getSize=function(){return this.markers_.length},t.prototype.getMarkers=function(){return this.markers_},t.prototype.getCenter=function(){return this.center_},t.prototype.getMap=function(){return this.map_},t.prototype.getMarkerClusterer=function(){return this.markerClusterer_},t.prototype.getBounds=function(){for(var t=new google.maps.LatLngBounds(this.center_,this.center_),e=this.getMarkers(),r=0;r<e.length;r++)t.extend(e[r].getPosition());return t},t.prototype.remove=function(){this.clusterIcon_.setMap(null),this.markers_=[],delete this.markers_},t.prototype.addMarker=function(t){if(this.isMarkerAlreadyAdded_(t))return!1;if(this.center_){if(this.averageCenter_){var e=this.markers_.length+1,r=(this.center_.lat()*(e-1)+t.getPosition().lat())/e,n=(this.center_.lng()*(e-1)+t.getPosition().lng())/e;this.center_=new google.maps.LatLng(r,n),this.calculateBounds_()}}else this.center_=t.getPosition(),this.calculateBounds_();t.isAdded=!0,this.markers_.push(t);var i=this.markers_.length,o=this.markerClusterer_.getMaxZoom();if(null!==o&&this.map_.getZoom()>o)t.getMap()!==this.map_&&t.setMap(this.map_);else if(i<this.minClusterSize_)t.getMap()!==this.map_&&t.setMap(this.map_);else if(i===this.minClusterSize_)for(var s=0;s<i;s++)this.markers_[s].setMap(null);else t.setMap(null);return!0},t.prototype.isMarkerInClusterBounds=function(t){return this.bounds_.contains(t.getPosition())},t.prototype.calculateBounds_=function(){var t=new google.maps.LatLngBounds(this.center_,this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(t)},t.prototype.updateIcon=function(){var t=this.markers_.length,e=this.markerClusterer_.getMaxZoom();if(null!==e&&this.map_.getZoom()>e)this.clusterIcon_.hide();else if(t<this.minClusterSize_)this.clusterIcon_.hide();else{var r=this.markerClusterer_.getStyles().length,n=this.markerClusterer_.getCalculator()(this.markers_,r);this.clusterIcon_.setCenter(this.center_),this.clusterIcon_.useStyle(n),this.clusterIcon_.show()}},t.prototype.isMarkerAlreadyAdded_=function(t){if(this.markers_.indexOf)return-1!==this.markers_.indexOf(t);for(var e=0;e<this.markers_.length;e++)if(t===this.markers_[e])return!0;return!1},t}(),gr=function(t,e,r){return void 0!==t[e]?t[e]:r};return function(t){function e(r,n,i){void 0===n&&(n=[]),void 0===i&&(i={});var o=t.call(this)||this;return o.options=i,o.markers_=[],o.clusters_=[],o.listeners_=[],o.activeMap_=null,o.ready_=!1,o.ariaLabelFn=o.options.ariaLabelFn||function(){return""},o.zIndex_=o.options.zIndex||google.maps.Marker.MAX_ZINDEX+1,o.gridSize_=o.options.gridSize||60,o.minClusterSize_=o.options.minimumClusterSize||2,o.maxZoom_=o.options.maxZoom||null,o.styles_=o.options.styles||[],o.title_=o.options.title||"",o.zoomOnClick_=gr(o.options,"zoomOnClick",!0),o.averageCenter_=gr(o.options,"averageCenter",!1),o.ignoreHidden_=gr(o.options,"ignoreHidden",!1),o.enableRetinaIcons_=gr(o.options,"enableRetinaIcons",!1),o.imagePath_=o.options.imagePath||e.IMAGE_PATH,o.imageExtension_=o.options.imageExtension||e.IMAGE_EXTENSION,o.imageSizes_=o.options.imageSizes||e.IMAGE_SIZES,o.calculator_=o.options.calculator||e.CALCULATOR,o.batchSize_=o.options.batchSize||e.BATCH_SIZE,o.batchSizeIE_=o.options.batchSizeIE||e.BATCH_SIZE_IE,o.clusterClass_=o.options.clusterClass||"cluster",-1!==navigator.userAgent.toLowerCase().indexOf("msie")&&(o.batchSize_=o.batchSizeIE_),o.setupStyles_(),o.addMarkers(n,!0),o.setMap(r),o}return ve(e,t),e.prototype.onAdd=function(){var t=this;this.activeMap_=this.getMap(),this.ready_=!0,this.repaint(),this.prevZoom_=this.getMap().getZoom(),this.listeners_=[google.maps.event.addListener(this.getMap(),"zoom_changed",(function(){var e=t.getMap(),r=e.minZoom||0,n=Math.min(e.maxZoom||100,e.mapTypes[e.getMapTypeId()].maxZoom),i=Math.min(Math.max(t.getMap().getZoom(),r),n);t.prevZoom_!=i&&(t.prevZoom_=i,t.resetViewport_(!1))})),google.maps.event.addListener(this.getMap(),"idle",(function(){t.redraw_()}))]},e.prototype.onRemove=function(){for(var t=0;t<this.markers_.length;t++)this.markers_[t].getMap()!==this.activeMap_&&this.markers_[t].setMap(this.activeMap_);for(t=0;t<this.clusters_.length;t++)this.clusters_[t].remove();this.clusters_=[];for(t=0;t<this.listeners_.length;t++)google.maps.event.removeListener(this.listeners_[t]);this.listeners_=[],this.activeMap_=null,this.ready_=!1},e.prototype.draw=function(){},e.prototype.setupStyles_=function(){if(!(this.styles_.length>0))for(var t=0;t<this.imageSizes_.length;t++){var r=this.imageSizes_[t];this.styles_.push(e.withDefaultStyle({url:this.imagePath_+(t+1)+"."+this.imageExtension_,height:r,width:r}))}},e.prototype.fitMapToMarkers=function(t){for(var e=this.getMarkers(),r=new google.maps.LatLngBounds,n=0;n<e.length;n++)!e[n].getVisible()&&this.getIgnoreHidden()||r.extend(e[n].getPosition());this.getMap().fitBounds(r,t)},e.prototype.getGridSize=function(){return this.gridSize_},e.prototype.setGridSize=function(t){this.gridSize_=t},e.prototype.getMinimumClusterSize=function(){return this.minClusterSize_},e.prototype.setMinimumClusterSize=function(t){this.minClusterSize_=t},e.prototype.getMaxZoom=function(){return this.maxZoom_},e.prototype.setMaxZoom=function(t){this.maxZoom_=t},e.prototype.getZIndex=function(){return this.zIndex_},e.prototype.setZIndex=function(t){this.zIndex_=t},e.prototype.getStyles=function(){return this.styles_},e.prototype.setStyles=function(t){this.styles_=t},e.prototype.getTitle=function(){return this.title_},e.prototype.setTitle=function(t){this.title_=t},e.prototype.getZoomOnClick=function(){return this.zoomOnClick_},e.prototype.setZoomOnClick=function(t){this.zoomOnClick_=t},e.prototype.getAverageCenter=function(){return this.averageCenter_},e.prototype.setAverageCenter=function(t){this.averageCenter_=t},e.prototype.getIgnoreHidden=function(){return this.ignoreHidden_},e.prototype.setIgnoreHidden=function(t){this.ignoreHidden_=t},e.prototype.getEnableRetinaIcons=function(){return this.enableRetinaIcons_},e.prototype.setEnableRetinaIcons=function(t){this.enableRetinaIcons_=t},e.prototype.getImageExtension=function(){return this.imageExtension_},e.prototype.setImageExtension=function(t){this.imageExtension_=t},e.prototype.getImagePath=function(){return this.imagePath_},e.prototype.setImagePath=function(t){this.imagePath_=t},e.prototype.getImageSizes=function(){return this.imageSizes_},e.prototype.setImageSizes=function(t){this.imageSizes_=t},e.prototype.getCalculator=function(){return this.calculator_},e.prototype.setCalculator=function(t){this.calculator_=t},e.prototype.getBatchSizeIE=function(){return this.batchSizeIE_},e.prototype.setBatchSizeIE=function(t){this.batchSizeIE_=t},e.prototype.getClusterClass=function(){return this.clusterClass_},e.prototype.setClusterClass=function(t){this.clusterClass_=t},e.prototype.getMarkers=function(){return this.markers_},e.prototype.getTotalMarkers=function(){return this.markers_.length},e.prototype.getClusters=function(){return this.clusters_},e.prototype.getTotalClusters=function(){return this.clusters_.length},e.prototype.addMarker=function(t,e){this.pushMarkerTo_(t),e||this.redraw_()},e.prototype.addMarkers=function(t,e){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&this.pushMarkerTo_(t[r]);e||this.redraw_()},e.prototype.pushMarkerTo_=function(t){var e=this;t.getDraggable()&&google.maps.event.addListener(t,"dragend",(function(){e.ready_&&(t.isAdded=!1,e.repaint())})),t.isAdded=!1,this.markers_.push(t)},e.prototype.removeMarker=function(t,e){var r=this.removeMarker_(t);return!e&&r&&this.repaint(),r},e.prototype.removeMarkers=function(t,e){for(var r=!1,n=0;n<t.length;n++){var i=this.removeMarker_(t[n]);r=r||i}return!e&&r&&this.repaint(),r},e.prototype.removeMarker_=function(t){var e=-1;if(this.markers_.indexOf)e=this.markers_.indexOf(t);else for(var r=0;r<this.markers_.length;r++)if(t===this.markers_[r]){e=r;break}return-1!==e&&(t.setMap(null),this.markers_.splice(e,1),!0)},e.prototype.clearMarkers=function(){this.resetViewport_(!0),this.markers_=[]},e.prototype.repaint=function(){var t=this.clusters_.slice();this.clusters_=[],this.resetViewport_(!1),this.redraw_(),setTimeout((function(){for(var e=0;e<t.length;e++)t[e].remove()}),0)},e.prototype.getExtendedBounds=function(t){var e=this.getProjection(),r=new google.maps.LatLng(t.getNorthEast().lat(),t.getNorthEast().lng()),n=new google.maps.LatLng(t.getSouthWest().lat(),t.getSouthWest().lng()),i=e.fromLatLngToDivPixel(r);i.x+=this.gridSize_,i.y-=this.gridSize_;var o=e.fromLatLngToDivPixel(n);o.x-=this.gridSize_,o.y+=this.gridSize_;var s=e.fromDivPixelToLatLng(i),a=e.fromDivPixelToLatLng(o);return t.extend(s),t.extend(a),t},e.prototype.redraw_=function(){this.createClusters_(0)},e.prototype.resetViewport_=function(t){for(var e=0;e<this.clusters_.length;e++)this.clusters_[e].remove();this.clusters_=[];for(e=0;e<this.markers_.length;e++){var r=this.markers_[e];r.isAdded=!1,t&&r.setMap(null)}},e.prototype.distanceBetweenPoints_=function(t,e){var r=(e.lat()-t.lat())*Math.PI/180,n=(e.lng()-t.lng())*Math.PI/180,i=Math.sin(r/2)*Math.sin(r/2)+Math.cos(t.lat()*Math.PI/180)*Math.cos(e.lat()*Math.PI/180)*Math.sin(n/2)*Math.sin(n/2);return 6371*(2*Math.atan2(Math.sqrt(i),Math.sqrt(1-i)))},e.prototype.isMarkerInBounds_=function(t,e){return e.contains(t.getPosition())},e.prototype.addToClosestCluster_=function(t){for(var e=4e4,r=null,n=0;n<this.clusters_.length;n++){var i,o=(i=this.clusters_[n]).getCenter();if(o){var s=this.distanceBetweenPoints_(o,t.getPosition());s<e&&(e=s,r=i)}}r&&r.isMarkerInClusterBounds(t)?r.addMarker(t):((i=new pr(this)).addMarker(t),this.clusters_.push(i))},e.prototype.createClusters_=function(t){var e=this;if(this.ready_){var r;0===t&&(google.maps.event.trigger(this,"clusteringbegin",this),void 0!==this.timerRefStatic&&(clearTimeout(this.timerRefStatic),delete this.timerRefStatic)),r=this.getMap().getZoom()>3?new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(),this.getMap().getBounds().getNorthEast()):new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472,-178.48388434375),new google.maps.LatLng(-85.08136444384544,178.00048865625));for(var n=this.getExtendedBounds(r),i=Math.min(t+this.batchSize_,this.markers_.length),o=t;o<i;o++){var s=this.markers_[o];!s.isAdded&&this.isMarkerInBounds_(s,n)&&(!this.ignoreHidden_||this.ignoreHidden_&&s.getVisible())&&this.addToClosestCluster_(s)}if(i<this.markers_.length)this.timerRefStatic=window.setTimeout((function(){e.createClusters_(i)}),0);else{delete this.timerRefStatic,google.maps.event.trigger(this,"clusteringend",this);for(o=0;o<this.clusters_.length;o++)this.clusters_[o].updateIcon()}}},e.CALCULATOR=function(t,e){for(var r=0,n=t.length,i=n;0!==i;)i=Math.floor(i/10),r++;return r=Math.min(r,e),{text:n.toString(),index:r,title:""}},e.withDefaultStyle=function(t){return Se({textColor:"black",textSize:11,textDecoration:"none",textLineHeight:t.height,fontWeight:"bold",fontStyle:"normal",fontFamily:"Arial,sans-serif",backgroundPosition:"0 0"},t)},e.BATCH_SIZE=2e3,e.BATCH_SIZE_IE=500,e.IMAGE_PATH="../images/m",e.IMAGE_EXTENSION="png",e.IMAGE_SIZES=[53,56,66,78,90],e}(ur)}();
//# sourceMappingURL=index.min.js.map
;
var birthdayPresentContainer = document.getElementById('birthdaypresent-module-container');
var birthdayPresentStatusText = document.getElementById('birthdaypresent-module-status-text');
var birthdayPresentSuccessMessage = document.getElementById('birthdaypresent-module-success-message');
var birthdayPresentNewsletterSuccessMessage = document.getElementById('birthdaypresent-module-newsletter-success-message');
var birthdayPresentFormElement = document.getElementById("birthdaypresent-form");

var birthdayPresentAddress = document.getElementById('birthdaypresent-module-address');
var brithdayPresentAddressAvailable = false;
var birthdayPresentBirthday = document.getElementById('birthdaypresent-module-birthday');
var brithdayPresentBirthdayAvailable = false;

if (birthdayPresentContainer !== null) {
    var birthdayPresentSubmitButton = document.querySelector('#birthdaypresent-module-edit-container input[type="submit"]');
    var isRegistered = document.getElementById('birthdaypresent-module-userIsRegistered');

    // Change checkbox
    var checkboxElement = document.querySelector("#birthdayAcceptCheckbox");
    var birthdayPresentFormCheckboxdiv = document.querySelector("#birthdayAcceptCheckbox .checkmark--checkbox");
    var birthdayCheckboxInput = document.birthdaypresentform.registerToBirthdayPresent

    checkboxElement.addEventListener("click", function (e) {
        e.preventDefault();
        // Toggle the checkboxToggle (/submit disabled onoff)
        if (birthdayCheckboxInput.value == "true") {
            setRegistrationStatus(false);
        } else {
            setRegistrationStatus(true);
        }
        if (isRegistered.value == birthdayCheckboxInput.value) {
            birthdayPresentSubmitButton.setAttribute("disabled", "disabled");
        } else {
            birthdayPresentSubmitButton.removeAttribute("disabled");
        }
    });

    var birthdayPresentFormSend = function birthdayPresentFormSend(formData) {
        var xhttp = new XMLHttpRequest();
        xhttp.open('POST', birthdayPresentFormAction, true);
        xhttp.onload = function () {
            var birthdayPresentResp = JSON.parse(this.response);
            birthdayPresentSuccessMessage.innerHTML = birthdayPresentResp.Payload.StatusMessage;
            var successTextStyle;
            if (!birthdayPresentResp.Payload.SignupSuccess) {
                successTextStyle = "error-message";
            } else {
                successTextStyle = "success-message";

                if (birthdayPresentResp.Payload.IsRegistered == true) {
                    // GTM: Register to birthday
                    gtmRegisterBirthday();
                } else {
                    // GTM: Un-Register to birthday
                    gtmUnregisterBirthday();
                }
            }
            birthdayPresentSuccessMessage.classList.add('my-alnatura-accordion__' + successTextStyle);
            if (!birthdayPresentResp.Payload.NewsletterSuccess) {
                successTextStyle = "error-message";
            } else {
                successTextStyle = "success-message";

                // GTM: Register to birthday
                gtmRegisterBirthday();
            }
            birthdayPresentNewsletterSuccessMessage.classList.add('my-alnatura-accordion__' + successTextStyle);
            birthdayPresentNewsletterSuccessMessage.innerHTML = birthdayPresentResp.Payload.NewsletterMessage;
            isRegistered.value = birthdayPresentResp.Payload.IsRegistered;            
            birthdayPresentStatusText.innerHTML = birthdayPresentResp.Payload.CurrentStatusLong;
        };
        xhttp.onerror = function () { };
        xhttp.send(new FormData(formData));
    }

    var birthdayPresentSubmit = function birthdayPresentSubmit(event) {
        event.preventDefault();
        birthdayPresentSubmitButton.setAttribute("disabled", "disabled");
        birthdayPresentFormSend(birthdayPresentFormElement);
    }
    var setRegistrationStatus = function setRegistrationStatus(newStatus) {
        if (newStatus == true) {
            birthdayCheckboxInput.value = "true";
             birthdayPresentFormCheckboxdiv.classList.add("checked");
            birthdayCheckboxInput.setAttribute("checked", "checked");
        } else {
            birthdayCheckboxInput.value = "false";
            birthdayPresentFormCheckboxdiv.classList.remove("checked");
            birthdayCheckboxInput.removeAttribute("checked");
        }
        birthdayPresentSuccessMessage.innerHTML = "";
    }

    if (birthdayPresentContainer != null || undefined) {
        var birthdayPresentEditButton = document.getElementById('birthdaypresent-module-edit');
        var birthdayPresentCloseButton = document.getElementById('birthdaypresent-module-close');
        var birthdayPresentEditContainer = document.getElementById('birthdaypresent-module-edit-container');
        // open dialog
        birthdayPresentEditButton.addEventListener("click", function () {
            if (!birthdayPresentEditContainer.style.maxHeight) {
                birthdayPresentEditContainer.style.maxHeight = birthdayPresentEditContainer.scrollHeight + "px";
                birthdayPresentEditContainer.style.overflow = "visible";
            }
        });
        // close dialog
        birthdayPresentCloseButton.addEventListener("click", function () {
            if (birthdayPresentEditContainer.style.maxHeight) {
                birthdayPresentEditContainer.style.maxHeight = null;
                birthdayPresentEditContainer.style.overflow = null;
            }
        });
        // form
        var birthdayPresentFormAction = birthdayPresentFormElement.getAttribute('data-form-action');
        birthdayPresentFormElement.addEventListener('submit', birthdayPresentSubmit);
    }
};
var serviceBoxListSwiper = new Swiper('.service-box-list__container.swiper-container', {
    loop: false,
    centeredSlides: true,
    slidesPerView: 'auto',
    spaceBetween: 15,
    navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
    },
    pagination: {
        clickable: true,
        el: '.swiper-pagination',
        dynamicBullets: true,
    },
    breakpoints: {
        768: {
            centeredSlides: true,
            slidesPerView: 2
        },
        992: {
            centeredSlides: false,
            slidesPerView: 4,
            spaceBetween: 30
        }
    }
});;
"use strict";var subNavIndicator=document.querySelector(".navigation__sub-indicator"),mainNav=document.querySelector(".navigation__main"),subNavCurrent=document.querySelector(".navigation__sub.current");subNavCurrent!==null&&subNavIndicator.addEventListener("click",function(){this.classList.toggle("active");subNavCurrent.classList.toggle("active")});;
var recipeTeaserSwiper = new Swiper('.recipe-teaser-list__container.swiper-container', {
    loop: false,
    centeredSlides: true,
    slidesPerView: 'auto',
    spaceBetween: 15,
    lazy: {
        loadPrevNext: true,
        watchSlidesVisibility: true,
    },
    navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
    },
    pagination: {
        clickable: true,
        el: '.swiper-pagination',
        dynamicBullets: true,
    },
    breakpoints: {
        768: {
            centeredSlides: false,
            slidesPerView: 2,
            lazy: {
                loadPrevNextAmount: 3,
            },
        },
        992: {
            centeredSlides: false,
            slidesPerView: 3,
            spaceBetween: 30,
            lazy: {
                loadPrevNextAmount: 4,
            },
        }
    }
});


;
// Show Modal
function showModal() {
    document.getElementById("overlay").style.display = "block";
    var searchPopupModal = document.querySelector('.header__searchpopup .popup-modal');
    searchPopupModal.classList.add('is--visible');
    var element = document.getElementById('SearchType');
    var choices = new Choices(element, {
        searchEnabled: false
    });
}
// Close modal
function closeModal() {
    document.getElementById("overlay").style.display = "none";
    var searchPopupModal = document.querySelector('.header__searchpopup .popup-modal');
    searchPopupModal.classList.remove('is--visible');
}

// Redirect to search page
var inputSearch = document.querySelector('.header__searchpopup__input');

if (inputSearch !== null) {
    inputSearch.addEventListener("keyup", function (e) {
        inputSearch.classList.remove('has-error');
        inputSearch.setAttribute('placeholder', inputSearch.dataset.placeholderMessage);
        if (e.keyCode === 13) {
            redirectToSearchPage(e);
        }
    });

    inputSearch.addEventListener('focus', function () {
        inputSearch.setAttribute('placeholder', '')

    });

    inputSearch.addEventListener('blur', function () {
        inputSearch.setAttribute('placeholder', inputSearch.dataset.placeholderMessage);

    })
}


function redirectToSearchPage() {
    var searchTypeElement = document.querySelector("#SearchType");
    var targetUrl = searchTypeElement.value;
    var targetValue = searchTypeElement.innerText;
    var queryParam = document.querySelector("#query").value.split('?query=')[0];

    if (inputSearch.value === '') {
        inputSearch.setAttribute('placeholder', inputSearch.dataset.errorMessage);
        inputSearch.classList.add('has-error');
    }
    else {
        // Push Data To Google Analytics Layer
        inputSearch.classList.remove('has-error');
        inputSearch.setAttribute('placeholder', inputSearch.dataset.placeholderMessage);
        dataLayer.push({
            'siteSearchCategory': targetValue,
            'event': 'site-search'
        });
        window.location.href = targetUrl + "?query=" + queryParam;
    }
};
// Button events
$searchButton = document.getElementById('search-teaser-button');
$newSearchButton = document.getElementById('search-teaser-new');

if ($searchButton !== null) {
    $searchButton.addEventListener('click', function () {
        clickSearchTeaserButton();
    });
}


if ($newSearchButton !== null) {
    $newSearchButton.addEventListener('click', function () {
        clearSearchTeaser();
    });
}


// Action events
function clickSearchTeaserButton() {
    /* create a link by search page url and a ?query=searchterm */
    /* Make pageload to this url by windows.location = newURL */
    var searchBoxValue = document.getElementById("search-teaser-box").value;
    var searchUrl = document.querySelector('.search-teaser').attributes["data-search-url"].value;
    if (searchBoxValue != null && searchBoxValue != undefined) {
        var newSearchUrl = searchUrl + "?query=" + encodeURIComponent(searchBoxValue);
        window.location = newSearchUrl;
    }
}

function clearSearchTeaser() {
    /* create a link by search page url WITHOUT a ?query=searchterm */
    /* Make pageload to this url by windows.location = newURL */
    var searchUrl = document.querySelector('.search-teaser').attributes["data-search-url"].value;
    window.location = searchUrl; // + "?query=";
};
var shareButtons = document.getElementById('socialMediaSharing');

if (shareButtons !== null) {
    var shareButtonMobile = document.getElementById('socialMediaShareMobile');
    shareButtonMobile.addEventListener('click', function () {
        if (navigator.share) {
            navigator.share({
                title: document.title,
                url: window.location.href
            }).then(function () {
            }).catch(function (err) {
            });
        } else {
            console.log('web share not supported');
        }
    });
};
function closeStoreInfo() {
    document.querySelector('.store-info').style.display = "none";
}



/* START: SPECIAL FOR MDP */
var mdpContainer = document.querySelector('.store-info.market-detail-page');
if (mdpContainer !== null) {
    // Switch between static link available or not
    var staticLinksContainer = document.querySelector('.staticlinkstoactionoffer');
    if (staticLinksContainer != null) {
        if (staticLinksContainer.innerText.length < 1) {
            staticLinksContainer.style.display = "none";
        }
    }


    // Fetch the status of the favorite store
    var favoriteStoreEndpointMdp = "/api/sitecore/MyAlnatura/GetFavoriteStoreStatus";
    var xhttp = new XMLHttpRequest();
    xhttp.open('POST', favoriteStoreEndpointMdp, true);
    xhttp.onloadstart = function () { };

    xhttp.onload = function () {
        var response = JSON.parse(this.response);
        var payload = response.Payload;       

        // Get texts
        let buttonAddText = document.querySelector('.store-info').getAttribute('data-button-add');
        let buttonDeleteText = document.querySelector('.store-info').getAttribute('data-button-delete');

        var tempStoreId = mdpContainer.getAttribute('data-id');

        //console.log("Form", tempStoreId);
        //console.log("DB", payload.StoreId);

        if (payload !== null && tempStoreId == payload.StoreId) {
            // We are logged in
            mdpContainer.setAttribute('data-favorite', 'true');
            mdpContainer.querySelector('.store-favorite__button span').innerText = buttonDeleteText;

        } else {
            // We are not logged in
            mdpContainer.setAttribute('data-favorite', 'false');
            mdpContainer.querySelector('.store-favorite__button span').innerText = buttonAddText;

        }
    };

    xhttp.onerror = function () { };
    xhttp.send();
}
/* END: SPECIAL FOR MDP */

let storeInfoContainer = document.querySelector('.store-info');
if (storeInfoContainer != null) {
    storeInfoContainer.querySelector('.store-favorite__button').addEventListener('click', function () {
        let storeId = storeInfoContainer.getAttribute('data-id');
        let storeStatus = storeInfoContainer.getAttribute('data-favorite');

        console.log(storeStatus);


        let mode = "delete";
        if (storeStatus === "false") {
            mode = "add";
        }

        editStore(storeId, mode);
    });
}


function editStore(storeId, mode) {
    if (storeId != 0 && storeId != undefined && storeId != null) {
        let data = new FormData;
        data.append('storeId', storeId);

        // Init some useful elements
        let saveButton = document.querySelector('.store-info .store-favorite__button');
        let statusContainer = document.querySelector('.store-favorite__status');
        let buttonAddText = document.querySelector('.store-info').getAttribute('data-button-add');
        let buttonDeleteText = document.querySelector('.store-info').getAttribute('data-button-delete');
        let currentState = document.querySelector('.store-info').getAttribute('data-favorite');

        // Decide which way we wanna talk to
        let apiUrl = "/api/sitecore/stores/UnsetFavoriteStore";
        if (mode == "add") {
            apiUrl = "/api/sitecore/stores/SetFavoriteStore";
        }

        let xhttp = new XMLHttpRequest();
        xhttp.open('POST', apiUrl, true);

        xhttp.onloadstart = function () {
            // Set button to waiting position
            saveButton.style.opacity = 0.6;
            saveButton.querySelector('span').innerText = "Bitte warten";
            saveButton.classList.add("waiting");
        }

        xhttp.onload = function () {
            let response = JSON.parse(this.response);
            console.log(response);

            let newState = "";

            if (response.ErrorType == 3 || response.ErrorType == 2) {
                // Unauthenticated or general error

                // Add error to status container
                statusContainer.classList.add("error");

                newState = currentState;


                // Replace placeholders with correct text and replace it in Payload.Text
                let registerLink = '<a href="' + response.Payload.RegistrationLink + '" target="_self">' + response.Payload.RegistrationText + '</a>';
                let loginLink = '<a href="' + response.Payload.LoginLink + '" id="loginFormLink" target="_self">' + response.Payload.LoginText + '</a>';

                var replacedText = response.Payload.Text;
                replacedText = replacedText.replace("{register}", registerLink);
                replacedText = replacedText.replace("{login}", loginLink);

                response.Payload.Text = replacedText;

            } else {
                // Remove error from status container
                statusContainer.classList.remove("error");

                // Switch state of info box
                if (currentState == "true") {
                    newState = "false";

                    // Push GTM Action for deleting a store
                    gtmChangeFavStore("delete", storeId);
                } else {
                    newState = "true";

                    // Push GTM Action for adding a store
                    gtmChangeFavStore("add", storeId);
                }
                document.querySelector('.store-info').setAttribute('data-favorite', newState);
            }

            // Replace the current status text
            statusContainer.innerHTML = response.Payload.Text;

            // Enable special login link(/form)
            let loginFormLink = document.querySelector('#loginFormLink');
            if (loginFormLink !== null) {
                let loginForm = document.createElement('form');
                loginForm.setAttribute("method", "POST");
                loginForm.setAttribute("action", loginFormLink.href);
                loginForm.style.display = "none";

                document.querySelector('.store-favorite__loginForm').append(loginForm);

                loginFormLink.addEventListener('click', function (e) {
                    e.preventDefault();
                    document.querySelector('.store-favorite__loginForm form').submit();
                });
            }

            // Switch button text and opacity
            if (newState == "false") {
                saveButton.querySelector('span').innerText = buttonAddText;
            } else {
                saveButton.querySelector('span').innerText = buttonDeleteText;
            }

            saveButton.style.opacity = 1;
            saveButton.classList.remove("waiting");
        };
        xhttp.onerror = function () { };


        // Only send if we are not waiting currently
        if (!saveButton.classList.contains("waiting")) {
            xhttp.send(data);
        }
    } else {
        return false;
    }
}


var StoreFinder = (function () {
    var favoriteStoreInfos = document.getElementById("storefinder_favoriteStore");
    var hasFavoriteStore = favoriteStoreInfos
        ? favoriteStoreInfos.hasAttribute("hasFavorite")
        : false;
    var store = {
        initialMap: {
            center: {
                lat: hasFavoriteStore
                    ? Number(favoriteStoreInfos.getAttribute("lat"))
                    : 49.878708,
                lng: hasFavoriteStore
                    ? Number(favoriteStoreInfos.getAttribute("lng"))
                    : 8.646927,
            },
            radius: 30,
            hasFavoriteStore: hasFavoriteStore
        },
        tradePartner: '',
        storesOnMap: [],
        markers: [],
        clusters: [],
    };

    currentPosition = store.initialMap.center;

    function PushCurrentDataToDataLayer(onlyAlnaturaStores) {
        var addressInput = document.getElementById('addressInput').value;
        if (!addressInput) {
            addressInput = getUrlParameter('query');
        }
        if (!addressInput) {
            addressInput = currentPosition.lat + '|' + currentPosition.lng;
        }

        var eventActionString = '';
        if (onlyAlnaturaStores) {
            eventActionString = 'Suche: AlnaturaMärkte';
        }
        else {
            eventActionString = 'Suche: Alle Märkte';
        }

        // Push Data To Google Analytics Layer
        dataLayer.push({
            'eventCategory': 'Marktfinder',
            'eventAction': eventActionString,
            'eventLabel': addressInput,
            'event': 'event-tracking'
        });
    }

    function getUrlParameter(name) {
        name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
        var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
        var results = regex.exec(location.search);
        return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
    };

    function allStoresApiUrl(center, radius, tradePartner) {
        var currRadius = radius === undefined ? 30 : radius;
        var currTradepartner = tradePartner != 'Alnatura Super Natur Markt' ? '' : 'Alnatura Super Natur Markt';
        var url = window.location.protocol + '//' + window.location.host + '/api/sitecore/stores/FindStoresforMap?ElementsPerPage=10000' + '&lat=' + center.lat + '&lng=' + center.lng + '&radius=' + currRadius + '&Tradepartner=' + currTradepartner;
        return url;
    };

    function singleStoreApiUrl(id) {
        return window.location.protocol + '//' + window.location.host + '/api/sitecore/stores/StoreDetails?storeid=' + id;
    };

    function toRadians(v) {
        return v * Math.PI / 180;
    };

    function calculateMapRadius() {
        var bounds = map.getBounds();
        var R = 6371000; // metres     
        var φ1 = toRadians(bounds.getSouthWest().lat());
        var φ2 = toRadians(bounds.getNorthEast().lat());
        var Δφ = toRadians(bounds.getNorthEast().lat() - bounds.getSouthWest().lat());
        var Δλ = toRadians(bounds.getNorthEast().lng() - bounds.getSouthWest().lng());
        var a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
            Math.cos(φ1) * Math.cos(φ2) *
            Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        var d = R * c;
        return Math.round(d / 2000);
    };

    function xhr(url, cbk) {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                xhr.status === 200 ? cbk(JSON.parse(xhr.response)) : console.error('error');
            }
        }
        xhr.open('GET', url)
        xhr.send();
    };

    function getCurrentLocation(cbk) {

        navigator.geolocation.getCurrentPosition(success, error);

        function success(res) {
            cbk({
                lat: res.coords.latitude,
                lng: res.coords.longitude
            })
        }

        function error() {
            cbk(store.initialMap.center);
        }

    }

    function getAllStores(center, radius, tradePartner) {
        var url = allStoresApiUrl(center, radius, tradePartner);
        xhr(url, function (res) {
            if (res.Success) {
                appendStoresOnMap(res.Payload)
            }
        })
    };

    function getSingleStore(id) {
        var url = singleStoreApiUrl(id);
        xhr(url, function (res) {
            showStoreInfo(res);
        })
    };

    function appendStoresOnMap(stores) {
        var storesLength = stores.length;
        for (var i = 0; i < storesLength; i++) {
            if (!store.storesOnMap.includes(stores[i].Id)) {
                store.storesOnMap.push(stores[i].Id);
                drawMarker(stores[i]);
            }
        }
        var showAlnaturaStores = document.getElementById("showAlnaturaStores").checked;
        showHideMarkers(showAlnaturaStores);
    }

    function drawMarker(el) {


        // isAlnatura Check
        let isAlnaturaBool = true;
        if (el.Tradepartner !== 'Alnatura Super Natur Markt' && el.Tradepartner !== '1' && el.Tradepartner !== 'ASNM Schwerin') {
            isAlnaturaBool = false;
        }


        var pinImg = el.Pin;
        var latLng = new google.maps.LatLng(parseFloat(el.Lat.replace(/,/g, '.')), parseFloat(el.Lng.replace(/,/g, '.')));
        var marker = new google.maps.Marker({
            position: latLng,
            icon: pinImg,
            activeIcon: el.ActivePin,
            defaultIcon: el.Pin,
            map: window.map,
            objID: el.Id,
            isAlnatura: isAlnaturaBool
        });


        //console.log(el);

        if (el.Tradepartner !== 'Alnatura Super Natur Markt' && el.Tradepartner !== '1' && el.Tradepartner !== 'ASNM Schwerin') {
            window.markerClusterer.addMarker(marker);
            store.clusters.push(marker);
        }
        store.markers.push(marker);
        marker.addListener('click', function () {
            onMarkerClickHandler(marker);
        });
    };

    function onMarkerClickHandler(marker) {
        var storeMarkersLength = store.markers.length;
        for (var i = 0; i < storeMarkersLength; i++) {
            store.markers[i].setIcon(store.markers[i].defaultIcon);
        }
        marker.setIcon(marker.activeIcon);
        getSingleStore(marker.objID);
    }

    function showStoreInfo(data) {
        if (data.Success) {
            var container = document.querySelector('.store-info');
            var storeData = data.Payload;

            // Clear the status container
            container.querySelector('.store-favorite__status').innerHTML = "";

            let storePhoneContainer = container.querySelector('.store-phone');
            if (storeData.Tel.length == 0 || storeData.Tel === null) {
                // Hide telephone line
                storePhoneContainer.style.display = "none";
            } else {
                // Show telephone line
                storePhoneContainer.style.display = "block";

                // Get & Set raw telephone number
                let rawTelephone = (storeData.Tel).replaceAll(" ", "").replaceAll("-", "").replaceAll("/", "");
                let phoneLink = storePhoneContainer.querySelector('a');

                phoneLink.href = "tel:" + rawTelephone;
                phoneLink.querySelector('.number').innerText = storeData.Tel;
            }

            var openingText = storeData.OpenedText;
            var isTradepartner = storeData.IsTradepartner;
            var isOpen = '';
            if (!isTradepartner) {
                isOpen = storeData.Opened ? '<div class="clock is-open">' + openingText + '</div >' : '<div class="clock is-closed">' + openingText + '</div>';
            }
            var additionalWorkingTime = storeData.AdditionalOpeningTime;
            var workingTime = storeData.OpeningTime !== '' ? '<div>' + storeData.OpeningTime.split("\r\n").join("</br>") + '</br>' + additionalWorkingTime.split("\r\n").join("</br>") + '</div>' : '';


            // Switch logo
            container.querySelector('.store-logo img').setAttribute("src", storeData.Logo);

            // Switch name
            container.querySelector('.store-name').innerText = storeData.StoreName;

            // Switch address
            container.querySelector('.store-street').innerText = storeData.Street;
            container.querySelector('.store-city').innerText = storeData.PostalCode + ' ' + storeData.City;
            container.querySelector('.store-poc').innerText = storeData.PartOfCity;
            container.querySelector('.store-country').innerText = storeData.Country;

            // Switch address extension
            let addressExtensionContainer = container.querySelector('.store-street-ext');
            if (storeData.AddressExtension.length == 0 || storeData.AddressExtension.length === null) {
                addressExtensionContainer.style.display = "none";
            } else {
                addressExtensionContainer.style.display = "block";
                addressExtensionContainer.innerText = storeData.AddressExtension;
            }


            // Switch links
            container.querySelector('.store-links .store-navigation').href = storeData.GoogleMapsLink;

            let storeDetailPageContainer = container.querySelector('.store-links .store-detail-page');
            if (!storeData.IsTradepartner && storeData.StoreDetailPage.length > 0) {
                storeDetailPageContainer.href = storeData.StoreDetailPage;
                storeDetailPageContainer.style.display = "block";
            } else {
                storeDetailPageContainer.style.display = "none";
            }

            let storeOnlineshopContainer = container.querySelector('.store-onlineshop');
            if (storeData.ShowOnlineshopLink) { // add ! to revert for debugging
                storeOnlineshopContainer.href = storeData.OrderNowLink;
                storeOnlineshopContainer.innerText = storeData.OrderNowText;
                storeOnlineshopContainer.style.display = "block";
            } else {
                storeOnlineshopContainer.style.display = "none";
            }

            // Switch additional info
            container.querySelector('.store-additional').innerHTML = workingTime + isOpen;

            // Switch favorite store items
            let favoriteWording = storeData.AddAsFavoriteText;
            if (storeData.IsFavoriteStore == true) {
                favoriteWording = storeData.RemoveFromFavoriteText;
            }
            container.querySelector('.store-favorite__button span').innerText = favoriteWording;
            container.setAttribute("data-favorite", storeData.IsFavoriteStore);

            // Switch favorite store button texts
            container.setAttribute('data-button-add', storeData.AddAsFavoriteText);
            container.setAttribute('data-button-delete', storeData.RemoveFromFavoriteText);

            // Switch ID
            container.setAttribute("data-id", storeData.StoreId);


            // SHOW ONLY IF IT'S AN ANSM AND NOT TRADING PARTNER
            if (isTradepartner) {
                document.querySelector('.store-info .store-favorite').style.display = "none";
            } else {
                document.querySelector('.store-info .store-favorite').style.display = "block";
            }

            // Display store info container
            container.style.display = "block";


            // Push action to GTM
            dataLayer.push({
                'eventCategory': 'Marktfinder',
                'eventAction': 'Klick auf Markt: ' + storeData.StoreName,
                'eventLabel': storeData.PostalCode,
                'event': 'event-tracking'
            });
        }
    };

    function findLocationByAddress(address, cbk) {
        var geocoder = new google.maps.Geocoder();
        var config = {
            address: address,
        }
        geocoder.geocode(config, function (results, status) {
            if (status == 'OK') {
                var center = {
                    lat: results[0].geometry.location.lat(),
                    lng: results[0].geometry.location.lng(),
                }
                currentPosition = center;
                cbk(center)
            } else {
                alert(address + ' not found');
            }
        });
    };

    function mapInit(center) {
        var mapCenter = center === undefined ? config.initialMap.latLng : center;
        var mapConfig = {
            center: mapCenter,
            mapTypeId: 'roadmap',
            zoomControl: true,
            scaleControl: true,
            streetViewControl: false,
            noClear: true,
            mapTypeControl: false,
            zoom: 11
        };
        store.storesOnMap = [];
        window.map = new google.maps.Map(document.getElementById('map'), mapConfig);
        window.bounds = new google.maps.LatLngBounds();
        var autocomplete = new google.maps.places.Autocomplete(document.getElementById('addressInput'));
        autocomplete.setComponentRestrictions({
            country: ["de", "at", "ch"]
        });
        drawCurrentLocationMarker(center);
        window.markerClusterer = new MarkerClusterer(window.map, [],
            {
                imagePath: '/Content/Assets/Images/cluster',
                maxZoom: 18,
                gridSize: 120,
                minimumClusterSize: 6,
                zoomOnClick: true,
                ignoreHidden: true
            }
        );

        var modalPanel = document.querySelector('.store-finder-modal');
        if (modalPanel !== null && modalPanel.classList.contains('is--visible')) {
            PopupModal.closeAllModals();
        }
        //events

        google.maps.event.addListener(map, 'dragstart', onDragStarHandler);
        google.maps.event.addListener(map, 'dragend', onDragEndHandler);
        google.maps.event.addListener(map, 'zoom_changed', onZoomChangedHandler);

    }

    function onDragStarHandler() {
        closeStoreInfo();
    }

    function onDragEndHandler() {
        var center = { lat: window.map.getCenter().lat(), lng: window.map.getCenter().lng() }
        var radius = calculateMapRadius();
        var tradePartner = document.getElementById('alnaturaOnly').checked ? 'Alnatura Super Natur Markt' : '';

        getAllStores(center, radius, tradePartner);
    }

    function onZoomChangedHandler() {
        // JSON will most likely be too large at zoom level of 9 and less.
        if (window.map.getZoom() > 9) {
            var center = { lat: window.map.getCenter().lat(), lng: window.map.getCenter().lng() }
            var radius = calculateMapRadius();
            var tradePartner = document.getElementById('alnaturaOnly').checked ? 'Alnatura Super Natur Markt' : '';
            getAllStores(center, radius, tradePartner);
        }
    }

    function showHideMarkers(state) {
        var storeMarkersLength = store.markers.length;
        for (var i = 0; i < storeMarkersLength; i++) {
            if (!store.markers[i].isAlnatura) {
                store.markers[i].setVisible(!state)
            }
        }
        state ? markerClusterer.clearMarkers() : markerClusterer.addMarkers(store.clusters);

        // Push Data To Google Analytics Layer
        PushCurrentDataToDataLayer(state);
    };

    function drawCurrentLocationMarker(center) {
        var icon = {
            url: '/-/media/Foundation/Assets/current-location.png',
            scaledSize: new google.maps.Size(40, 40),
            origin: new google.maps.Point(0, 0),
            anchor: new google.maps.Point(0, 0)
        };
        var latLng = new google.maps.LatLng(center);
        var currentLocationMarker = new google.maps.Marker({
            position: latLng,
            map: map,
            icon: icon
        });
    };

    function init() {
        var location = getUrlParameter('query');
        if (location === '') {
            if (!store.initialMap.hasFavoriteStore) {
                getCurrentLocation(function (center) {
                    mapInit(center);
                    getAllStores(center);
                });
            } else {
                var center = store.initialMap.center;
                mapInit(center);
                getAllStores(center);
            }

        } else {
            findLocationByAddress(location, function (center) {
                mapInit(center);
                getAllStores(center);
            })
        }

    }

    return {
        init: init,
        mapInit: mapInit,
        showHideMarkers: showHideMarkers,
        getCurrentLocation: getCurrentLocation,
        findLocationByAddress: findLocationByAddress,
        getAllStores: getAllStores,
    }
})()

if (document.getElementById('map') !== null) {
    StoreFinder.init();
    document.getElementById('alnaturaOnly').addEventListener('click', function (e) {
        document.getElementById("showAlnaturaStores").checked = this.checked;
        StoreFinder.showHideMarkers(this.checked);
    })

    document.getElementById('showAlnaturaStores').addEventListener('click', function (e) {
        document.getElementById("alnaturaOnly").checked = this.checked;
        StoreFinder.showHideMarkers(this.checked);
    })

    document.querySelector('.find-location').addEventListener('click', function () {
        StoreFinder.getCurrentLocation(function (center) {
            StoreFinder.getAllStores(center);
            window.map.panTo(center);
            PopupModal.closeAllModals();
        });
    })

    document.querySelector('.store-info').addEventListener('click', function (e) {
        if (e.target.dataset.role === 'close-store') {
            closeStoreInfo();
        };
    })

    document.getElementById('addressSearch').addEventListener('click', function (e) {
        e.preventDefault();
        var form = document.getElementById('findLocationForm');
        if (form.checkValidity()) {
            var address = document.getElementById('addressInput').value;
            StoreFinder.findLocationByAddress(address, function (center) {
                StoreFinder.mapInit(center);
                StoreFinder.getAllStores(center);
                //function getCurrentLocation(center) {
                //    var icon = {
                //        url: '/-/media/Foundation/Assets/current-location.png',
                //        scaledSize: new google.maps.Size(40, 40),
                //        origin: new google.maps.Point(0, 0),
                //        anchor: new google.maps.Point(0, 0)
                //    };
                //    var latLng = new google.maps.LatLng(center);
                //    var currentLocationMarker = new google.maps.Marker({
                //        position: latLng,
                //        map: map,
                //        icon: icon
                //    });
                //};
                //getCurrentLocation(center)

            });
        } else {
            form.reportValidity();
        }
    })
};
var cookieSettingsContainer = document.getElementById('cookiesettings-module-container');



function showCookieWindow() {
    CookieConsent.show();
}

if (cookieSettingsContainer != null || undefined) {
    var cookieSettingsEdit = document.getElementById('cookiesettings-module-edit');

    cookieSettingsEdit.addEventListener("click", function () {
        showCookieWindow();
    });
};
var navigationalTeaserSwiper = new Swiper('.navigational-teaser.swiper-container', {
    loop: false,
    centeredSlides: false,
    slidesPerView: '2',
    spaceBetween: 15,
    navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
    },
    pagination: {
        clickable: true,
        el: '.swiper-pagination',
        dynamicBullets: true,
    },
    breakpoints: {
        768: {
            slidesPerView: 4,
            spaceBetween: 15,
        },
        992: {
            slidesPerView: 4,
            spaceBetween: 30
        }
    }
});;
'use strict';


var subNavSwiper = new Swiper('.navigation__sub.current .navigation__sub-list.swiper-container', {
    allowTouchMove: false,
    resizeObserver: true,
    navigation: {
        nextEl: '.navigation__sub-list.swiper-container .swiper-button-next',
        prevEl: '.navigation__sub-list.swiper-container .swiper-button-prev',
    },
    breakpoints: {
        992: {
            allowTouchMove: true,
            centeredSlides: false,
            freeMode: true,
            slidesPerView: 'auto',
            spaceBetween: 30,
        }
    }
});
;
var productNutritionSwipe = new Swiper('.nutrition-group__content.swiper-container', {
    slidesPerView: 1,
    spaceBetween: 0,
    navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
    },
    breakpoints: {
        768: {
            slidesPerView: 'auto',
            spaceBetween: 0
        }
    }
});;
var ingredients = document.querySelectorAll('.ingredient__number');

// Calc the fractions by putting in a decimal number
function decimalFraction(decimalNumber) {
    // Make , AND . possible to be in the decimal number
    decimalNumber = decimalNumber.replace(",", ".");
    const value = parseFloat(decimalNumber);

    var bestFraction = { numerator: 1, denominator: 1, error: Math.abs(value - 1) }
    const maxdenom = 10000;
    for (var denominator = 1; bestFraction.error > 0 && denominator <= maxdenom; denominator++) {
        var numerator = Math.round(value * denominator);
        var error = Math.abs(value - numerator / denominator);
        if (error >= bestFraction.error) continue;
        bestFraction.numerator = numerator;
        bestFraction.denominator = denominator;
        bestFraction.error = error;
    }
    return bestFraction;
}

if (ingredients != null || undefined) {
    var inner, items, fractionPrefix, fraction, fractionMarkup;
    for (ingredient of ingredients) {
        inner = ingredient.innerText;
        //inner = "2,33"; // DEV
        
        if (inner.includes(',') || inner.includes('.')) {
            // Fetch the fraction
            fraction = decimalFraction(inner);
            
            // Check for "whole" numbers and recalc the numerator after extracting the INTs
            fractionPrefix = 0;
            if (fraction.numerator > fraction.denominator) {
                fractionPrefix = parseInt(String(fraction.numerator / fraction.denominator).split(".")[0]);
                fraction.numerator = fraction.numerator - (fractionPrefix * fraction.denominator);
            }

            //DEV: console.log(fractionPrefix + " " + fraction.numerator + "/" + fraction.denominator);

            // Fix for 1/3
            if ((fraction.numerator == 3 && fraction.denominator == 10) || (fraction.numerator == 33 && fraction.denominator == 100)) {
                fraction.numerator = 1;
                fraction.denominator = 3;
            }

            if (fractionPrefix > 0) {
                fractionMarkup = '<span class="fraction__prefix">' + fractionPrefix + '</span><span class="fraction">' + fraction.numerator + '/' + fraction.denominator + '</span>';
            } else {
                fractionMarkup = '<span class="fraction">' + fraction.numerator + '/' + fraction.denominator + '</span>';
            }
            ingredient.innerHTML = fractionMarkup;
        }
    }
};
/*!
 * cleave.js - 1.6.0
 * https://github.com/nosir/cleave.js
 * Apache License Version 2.0
 *
 * Copyright (C) 2012-2020 Max Huang https://github.com/nosir/
 */
!function (e, t) { "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.Cleave = t() : e.Cleave = t() }(this, function () { return function (e) { function t(i) { if (r[i]) return r[i].exports; var n = r[i] = { exports: {}, id: i, loaded: !1 }; return e[i].call(n.exports, n, n.exports, t), n.loaded = !0, n.exports } var r = {}; return t.m = e, t.c = r, t.p = "", t(0) }([function (e, t, r) { (function (t) { "use strict"; var i = function (e, t) { var r = this, n = !1; if ("string" == typeof e ? (r.element = document.querySelector(e), n = document.querySelectorAll(e).length > 1) : "undefined" != typeof e.length && e.length > 0 ? (r.element = e[0], n = e.length > 1) : r.element = e, !r.element) throw new Error("[cleave.js] Please check the element"); if (n) try { console.warn("[cleave.js] Multiple input fields matched, cleave.js will only take the first one.") } catch (a) { } t.initValue = r.element.value, r.properties = i.DefaultProperties.assign({}, t), r.init() }; i.prototype = { init: function () { var e = this, t = e.properties; return t.numeral || t.phone || t.creditCard || t.time || t.date || 0 !== t.blocksLength || t.prefix ? (t.maxLength = i.Util.getMaxLength(t.blocks), e.isAndroid = i.Util.isAndroid(), e.lastInputValue = "", e.isBackward = "", e.onChangeListener = e.onChange.bind(e), e.onKeyDownListener = e.onKeyDown.bind(e), e.onFocusListener = e.onFocus.bind(e), e.onCutListener = e.onCut.bind(e), e.onCopyListener = e.onCopy.bind(e), e.initSwapHiddenInput(), e.element.addEventListener("input", e.onChangeListener), e.element.addEventListener("keydown", e.onKeyDownListener), e.element.addEventListener("focus", e.onFocusListener), e.element.addEventListener("cut", e.onCutListener), e.element.addEventListener("copy", e.onCopyListener), e.initPhoneFormatter(), e.initDateFormatter(), e.initTimeFormatter(), e.initNumeralFormatter(), void ((t.initValue || t.prefix && !t.noImmediatePrefix) && e.onInput(t.initValue))) : void e.onInput(t.initValue) }, initSwapHiddenInput: function () { var e = this, t = e.properties; if (t.swapHiddenInput) { var r = e.element.cloneNode(!0); e.element.parentNode.insertBefore(r, e.element), e.elementSwapHidden = e.element, e.elementSwapHidden.type = "hidden", e.element = r, e.element.id = "" } }, initNumeralFormatter: function () { var e = this, t = e.properties; t.numeral && (t.numeralFormatter = new i.NumeralFormatter(t.numeralDecimalMark, t.numeralIntegerScale, t.numeralDecimalScale, t.numeralThousandsGroupStyle, t.numeralPositiveOnly, t.stripLeadingZeroes, t.prefix, t.signBeforePrefix, t.tailPrefix, t.delimiter)) }, initTimeFormatter: function () { var e = this, t = e.properties; t.time && (t.timeFormatter = new i.TimeFormatter(t.timePattern, t.timeFormat), t.blocks = t.timeFormatter.getBlocks(), t.blocksLength = t.blocks.length, t.maxLength = i.Util.getMaxLength(t.blocks)) }, initDateFormatter: function () { var e = this, t = e.properties; t.date && (t.dateFormatter = new i.DateFormatter(t.datePattern, t.dateMin, t.dateMax), t.blocks = t.dateFormatter.getBlocks(), t.blocksLength = t.blocks.length, t.maxLength = i.Util.getMaxLength(t.blocks)) }, initPhoneFormatter: function () { var e = this, t = e.properties; if (t.phone) try { t.phoneFormatter = new i.PhoneFormatter(new t.root.Cleave.AsYouTypeFormatter(t.phoneRegionCode), t.delimiter) } catch (r) { throw new Error("[cleave.js] Please include phone-type-formatter.{country}.js lib") } }, onKeyDown: function (e) { var t = this, r = e.which || e.keyCode; t.lastInputValue = t.element.value, t.isBackward = 8 === r }, onChange: function (e) { var t = this, r = t.properties, n = i.Util; t.isBackward = t.isBackward || "deleteContentBackward" === e.inputType; var a = n.getPostDelimiter(t.lastInputValue, r.delimiter, r.delimiters); t.isBackward && a ? r.postDelimiterBackspace = a : r.postDelimiterBackspace = !1, this.onInput(this.element.value) }, onFocus: function () { var e = this, t = e.properties; e.lastInputValue = e.element.value, t.prefix && t.noImmediatePrefix && !e.element.value && this.onInput(t.prefix), i.Util.fixPrefixCursor(e.element, t.prefix, t.delimiter, t.delimiters) }, onCut: function (e) { i.Util.checkFullSelection(this.element.value) && (this.copyClipboardData(e), this.onInput("")) }, onCopy: function (e) { i.Util.checkFullSelection(this.element.value) && this.copyClipboardData(e) }, copyClipboardData: function (e) { var t = this, r = t.properties, n = i.Util, a = t.element.value, o = ""; o = r.copyDelimiter ? a : n.stripDelimiters(a, r.delimiter, r.delimiters); try { e.clipboardData ? e.clipboardData.setData("Text", o) : window.clipboardData.setData("Text", o), e.preventDefault() } catch (l) { } }, onInput: function (e) { var t = this, r = t.properties, n = i.Util, a = n.getPostDelimiter(e, r.delimiter, r.delimiters); return r.numeral || !r.postDelimiterBackspace || a || (e = n.headStr(e, e.length - r.postDelimiterBackspace.length)), r.phone ? (!r.prefix || r.noImmediatePrefix && !e.length ? r.result = r.phoneFormatter.format(e) : r.result = r.prefix + r.phoneFormatter.format(e).slice(r.prefix.length), void t.updateValueState()) : r.numeral ? (r.prefix && r.noImmediatePrefix && 0 === e.length ? r.result = "" : r.result = r.numeralFormatter.format(e), void t.updateValueState()) : (r.date && (e = r.dateFormatter.getValidatedDate(e)), r.time && (e = r.timeFormatter.getValidatedTime(e)), e = n.stripDelimiters(e, r.delimiter, r.delimiters), e = n.getPrefixStrippedValue(e, r.prefix, r.prefixLength, r.result, r.delimiter, r.delimiters, r.noImmediatePrefix, r.tailPrefix, r.signBeforePrefix), e = r.numericOnly ? n.strip(e, /[^\d]/g) : e, e = r.uppercase ? e.toUpperCase() : e, e = r.lowercase ? e.toLowerCase() : e, r.prefix && (r.tailPrefix ? e += r.prefix : e = r.prefix + e, 0 === r.blocksLength) ? (r.result = e, void t.updateValueState()) : (r.creditCard && t.updateCreditCardPropsByValue(e), e = n.headStr(e, r.maxLength), r.result = n.getFormattedValue(e, r.blocks, r.blocksLength, r.delimiter, r.delimiters, r.delimiterLazyShow), void t.updateValueState())) }, updateCreditCardPropsByValue: function (e) { var t, r = this, n = r.properties, a = i.Util; a.headStr(n.result, 4) !== a.headStr(e, 4) && (t = i.CreditCardDetector.getInfo(e, n.creditCardStrictMode), n.blocks = t.blocks, n.blocksLength = n.blocks.length, n.maxLength = a.getMaxLength(n.blocks), n.creditCardType !== t.type && (n.creditCardType = t.type, n.onCreditCardTypeChanged.call(r, n.creditCardType))) }, updateValueState: function () { var e = this, t = i.Util, r = e.properties; if (e.element) { var n = e.element.selectionEnd, a = e.element.value, o = r.result; if (n = t.getNextCursorPosition(n, a, o, r.delimiter, r.delimiters), e.isAndroid) return void window.setTimeout(function () { e.element.value = o, t.setSelection(e.element, n, r.document, !1), e.callOnValueChanged() }, 1); e.element.value = o, r.swapHiddenInput && (e.elementSwapHidden.value = e.getRawValue()), t.setSelection(e.element, n, r.document, !1), e.callOnValueChanged() } }, callOnValueChanged: function () { var e = this, t = e.properties; t.onValueChanged.call(e, { target: { name: e.element.name, value: t.result, rawValue: e.getRawValue() } }) }, setPhoneRegionCode: function (e) { var t = this, r = t.properties; r.phoneRegionCode = e, t.initPhoneFormatter(), t.onChange() }, setRawValue: function (e) { var t = this, r = t.properties; e = void 0 !== e && null !== e ? e.toString() : "", r.numeral && (e = e.replace(".", r.numeralDecimalMark)), r.postDelimiterBackspace = !1, t.element.value = e, t.onInput(e) }, getRawValue: function () { var e = this, t = e.properties, r = i.Util, n = e.element.value; return t.rawValueTrimPrefix && (n = r.getPrefixStrippedValue(n, t.prefix, t.prefixLength, t.result, t.delimiter, t.delimiters, t.noImmediatePrefix, t.tailPrefix, t.signBeforePrefix)), n = t.numeral ? t.numeralFormatter.getRawValue(n) : r.stripDelimiters(n, t.delimiter, t.delimiters) }, getISOFormatDate: function () { var e = this, t = e.properties; return t.date ? t.dateFormatter.getISOFormatDate() : "" }, getISOFormatTime: function () { var e = this, t = e.properties; return t.time ? t.timeFormatter.getISOFormatTime() : "" }, getFormattedValue: function () { return this.element.value }, destroy: function () { var e = this; e.element.removeEventListener("input", e.onChangeListener), e.element.removeEventListener("keydown", e.onKeyDownListener), e.element.removeEventListener("focus", e.onFocusListener), e.element.removeEventListener("cut", e.onCutListener), e.element.removeEventListener("copy", e.onCopyListener) }, toString: function () { return "[Cleave Object]" } }, i.NumeralFormatter = r(1), i.DateFormatter = r(2), i.TimeFormatter = r(3), i.PhoneFormatter = r(4), i.CreditCardDetector = r(5), i.Util = r(6), i.DefaultProperties = r(7), ("object" == typeof t && t ? t : window).Cleave = i, e.exports = i }).call(t, function () { return this }()) }, function (e, t) { "use strict"; var r = function (e, t, i, n, a, o, l, s, c, u) { var d = this; d.numeralDecimalMark = e || ".", d.numeralIntegerScale = t > 0 ? t : 0, d.numeralDecimalScale = i >= 0 ? i : 2, d.numeralThousandsGroupStyle = n || r.groupStyle.thousand, d.numeralPositiveOnly = !!a, d.stripLeadingZeroes = o !== !1, d.prefix = l || "" === l ? l : "", d.signBeforePrefix = !!s, d.tailPrefix = !!c, d.delimiter = u || "" === u ? u : ",", d.delimiterRE = u ? new RegExp("\\" + u, "g") : "" }; r.groupStyle = { thousand: "thousand", lakh: "lakh", wan: "wan", none: "none" }, r.prototype = { getRawValue: function (e) { return e.replace(this.delimiterRE, "").replace(this.numeralDecimalMark, ".") }, format: function (e) { var t, i, n, a, o = this, l = ""; switch (e = e.replace(/[A-Za-z]/g, "").replace(o.numeralDecimalMark, "M").replace(/[^\dM-]/g, "").replace(/^\-/, "N").replace(/\-/g, "").replace("N", o.numeralPositiveOnly ? "" : "-").replace("M", o.numeralDecimalMark), o.stripLeadingZeroes && (e = e.replace(/^(-)?0+(?=\d)/, "$1")), i = "-" === e.slice(0, 1) ? "-" : "", n = "undefined" != typeof o.prefix ? o.signBeforePrefix ? i + o.prefix : o.prefix + i : i, a = e, e.indexOf(o.numeralDecimalMark) >= 0 && (t = e.split(o.numeralDecimalMark), a = t[0], l = o.numeralDecimalMark + t[1].slice(0, o.numeralDecimalScale)), "-" === i && (a = a.slice(1)), o.numeralIntegerScale > 0 && (a = a.slice(0, o.numeralIntegerScale)), o.numeralThousandsGroupStyle) { case r.groupStyle.lakh: a = a.replace(/(\d)(?=(\d\d)+\d$)/g, "$1" + o.delimiter); break; case r.groupStyle.wan: a = a.replace(/(\d)(?=(\d{4})+$)/g, "$1" + o.delimiter); break; case r.groupStyle.thousand: a = a.replace(/(\d)(?=(\d{3})+$)/g, "$1" + o.delimiter) }return o.tailPrefix ? i + a.toString() + (o.numeralDecimalScale > 0 ? l.toString() : "") + o.prefix : n + a.toString() + (o.numeralDecimalScale > 0 ? l.toString() : "") } }, e.exports = r }, function (e, t) { "use strict"; var r = function (e, t, r) { var i = this; i.date = [], i.blocks = [], i.datePattern = e, i.dateMin = t.split("-").reverse().map(function (e) { return parseInt(e, 10) }), 2 === i.dateMin.length && i.dateMin.unshift(0), i.dateMax = r.split("-").reverse().map(function (e) { return parseInt(e, 10) }), 2 === i.dateMax.length && i.dateMax.unshift(0), i.initBlocks() }; r.prototype = { initBlocks: function () { var e = this; e.datePattern.forEach(function (t) { "Y" === t ? e.blocks.push(4) : e.blocks.push(2) }) }, getISOFormatDate: function () { var e = this, t = e.date; return t[2] ? t[2] + "-" + e.addLeadingZero(t[1]) + "-" + e.addLeadingZero(t[0]) : "" }, getBlocks: function () { return this.blocks }, getValidatedDate: function (e) { var t = this, r = ""; return e = e.replace(/[^\d]/g, ""), t.blocks.forEach(function (i, n) { if (e.length > 0) { var a = e.slice(0, i), o = a.slice(0, 1), l = e.slice(i); switch (t.datePattern[n]) { case "d": "00" === a ? a = "01" : parseInt(o, 10) > 3 ? a = "0" + o : parseInt(a, 10) > 31 && (a = "31"); break; case "m": "00" === a ? a = "01" : parseInt(o, 10) > 1 ? a = "0" + o : parseInt(a, 10) > 12 && (a = "12") }r += a, e = l } }), this.getFixedDateString(r) }, getFixedDateString: function (e) { var t, r, i, n = this, a = n.datePattern, o = [], l = 0, s = 0, c = 0, u = 0, d = 0, m = 0, p = !1; 4 === e.length && "y" !== a[0].toLowerCase() && "y" !== a[1].toLowerCase() && (u = "d" === a[0] ? 0 : 2, d = 2 - u, t = parseInt(e.slice(u, u + 2), 10), r = parseInt(e.slice(d, d + 2), 10), o = this.getFixedDate(t, r, 0)), 8 === e.length && (a.forEach(function (e, t) { switch (e) { case "d": l = t; break; case "m": s = t; break; default: c = t } }), m = 2 * c, u = l <= c ? 2 * l : 2 * l + 2, d = s <= c ? 2 * s : 2 * s + 2, t = parseInt(e.slice(u, u + 2), 10), r = parseInt(e.slice(d, d + 2), 10), i = parseInt(e.slice(m, m + 4), 10), p = 4 === e.slice(m, m + 4).length, o = this.getFixedDate(t, r, i)), 4 !== e.length || "y" !== a[0] && "y" !== a[1] || (d = "m" === a[0] ? 0 : 2, m = 2 - d, r = parseInt(e.slice(d, d + 2), 10), i = parseInt(e.slice(m, m + 2), 10), p = 2 === e.slice(m, m + 2).length, o = [0, r, i]), 6 !== e.length || "Y" !== a[0] && "Y" !== a[1] || (d = "m" === a[0] ? 0 : 4, m = 2 - .5 * d, r = parseInt(e.slice(d, d + 2), 10), i = parseInt(e.slice(m, m + 4), 10), p = 4 === e.slice(m, m + 4).length, o = [0, r, i]), o = n.getRangeFixedDate(o), n.date = o; var h = 0 === o.length ? e : a.reduce(function (e, t) { switch (t) { case "d": return e + (0 === o[0] ? "" : n.addLeadingZero(o[0])); case "m": return e + (0 === o[1] ? "" : n.addLeadingZero(o[1])); case "y": return e + (p ? n.addLeadingZeroForYear(o[2], !1) : ""); case "Y": return e + (p ? n.addLeadingZeroForYear(o[2], !0) : "") } }, ""); return h }, getRangeFixedDate: function (e) { var t = this, r = t.datePattern, i = t.dateMin || [], n = t.dateMax || []; return !e.length || i.length < 3 && n.length < 3 ? e : r.find(function (e) { return "y" === e.toLowerCase() }) && 0 === e[2] ? e : n.length && (n[2] < e[2] || n[2] === e[2] && (n[1] < e[1] || n[1] === e[1] && n[0] < e[0])) ? n : i.length && (i[2] > e[2] || i[2] === e[2] && (i[1] > e[1] || i[1] === e[1] && i[0] > e[0])) ? i : e }, getFixedDate: function (e, t, r) { return e = Math.min(e, 31), t = Math.min(t, 12), r = parseInt(r || 0, 10), (t < 7 && t % 2 === 0 || t > 8 && t % 2 === 1) && (e = Math.min(e, 2 === t ? this.isLeapYear(r) ? 29 : 28 : 30)), [e, t, r] }, isLeapYear: function (e) { return e % 4 === 0 && e % 100 !== 0 || e % 400 === 0 }, addLeadingZero: function (e) { return (e < 10 ? "0" : "") + e }, addLeadingZeroForYear: function (e, t) { return t ? (e < 10 ? "000" : e < 100 ? "00" : e < 1e3 ? "0" : "") + e : (e < 10 ? "0" : "") + e } }, e.exports = r }, function (e, t) { "use strict"; var r = function (e, t) { var r = this; r.time = [], r.blocks = [], r.timePattern = e, r.timeFormat = t, r.initBlocks() }; r.prototype = { initBlocks: function () { var e = this; e.timePattern.forEach(function () { e.blocks.push(2) }) }, getISOFormatTime: function () { var e = this, t = e.time; return t[2] ? e.addLeadingZero(t[0]) + ":" + e.addLeadingZero(t[1]) + ":" + e.addLeadingZero(t[2]) : "" }, getBlocks: function () { return this.blocks }, getTimeFormatOptions: function () { var e = this; return "12" === String(e.timeFormat) ? { maxHourFirstDigit: 1, maxHours: 12, maxMinutesFirstDigit: 5, maxMinutes: 60 } : { maxHourFirstDigit: 2, maxHours: 23, maxMinutesFirstDigit: 5, maxMinutes: 60 } }, getValidatedTime: function (e) { var t = this, r = ""; e = e.replace(/[^\d]/g, ""); var i = t.getTimeFormatOptions(); return t.blocks.forEach(function (n, a) { if (e.length > 0) { var o = e.slice(0, n), l = o.slice(0, 1), s = e.slice(n); switch (t.timePattern[a]) { case "h": parseInt(l, 10) > i.maxHourFirstDigit ? o = "0" + l : parseInt(o, 10) > i.maxHours && (o = i.maxHours + ""); break; case "m": case "s": parseInt(l, 10) > i.maxMinutesFirstDigit ? o = "0" + l : parseInt(o, 10) > i.maxMinutes && (o = i.maxMinutes + "") }r += o, e = s } }), this.getFixedTimeString(r) }, getFixedTimeString: function (e) { var t, r, i, n = this, a = n.timePattern, o = [], l = 0, s = 0, c = 0, u = 0, d = 0, m = 0; return 6 === e.length && (a.forEach(function (e, t) { switch (e) { case "s": l = 2 * t; break; case "m": s = 2 * t; break; case "h": c = 2 * t } }), m = c, d = s, u = l, t = parseInt(e.slice(u, u + 2), 10), r = parseInt(e.slice(d, d + 2), 10), i = parseInt(e.slice(m, m + 2), 10), o = this.getFixedTime(i, r, t)), 4 === e.length && n.timePattern.indexOf("s") < 0 && (a.forEach(function (e, t) { switch (e) { case "m": s = 2 * t; break; case "h": c = 2 * t } }), m = c, d = s, t = 0, r = parseInt(e.slice(d, d + 2), 10), i = parseInt(e.slice(m, m + 2), 10), o = this.getFixedTime(i, r, t)), n.time = o, 0 === o.length ? e : a.reduce(function (e, t) { switch (t) { case "s": return e + n.addLeadingZero(o[2]); case "m": return e + n.addLeadingZero(o[1]); case "h": return e + n.addLeadingZero(o[0]) } }, "") }, getFixedTime: function (e, t, r) { return r = Math.min(parseInt(r || 0, 10), 60), t = Math.min(t, 60), e = Math.min(e, 60), [e, t, r] }, addLeadingZero: function (e) { return (e < 10 ? "0" : "") + e } }, e.exports = r }, function (e, t) { "use strict"; var r = function (e, t) { var r = this; r.delimiter = t || "" === t ? t : " ", r.delimiterRE = t ? new RegExp("\\" + t, "g") : "", r.formatter = e }; r.prototype = { setFormatter: function (e) { this.formatter = e }, format: function (e) { var t = this; t.formatter.clear(), e = e.replace(/[^\d+]/g, ""), e = e.replace(/^\+/, "B").replace(/\+/g, "").replace("B", "+"), e = e.replace(t.delimiterRE, ""); for (var r, i = "", n = !1, a = 0, o = e.length; a < o; a++)r = t.formatter.inputDigit(e.charAt(a)), /[\s()-]/g.test(r) ? (i = r, n = !0) : n || (i = r); return i = i.replace(/[()]/g, ""), i = i.replace(/[\s-]/g, t.delimiter) } }, e.exports = r }, function (e, t) { "use strict"; var r = { blocks: { uatp: [4, 5, 6], amex: [4, 6, 5], diners: [4, 6, 4], discover: [4, 4, 4, 4], mastercard: [4, 4, 4, 4], dankort: [4, 4, 4, 4], instapayment: [4, 4, 4, 4], jcb15: [4, 6, 5], jcb: [4, 4, 4, 4], maestro: [4, 4, 4, 4], visa: [4, 4, 4, 4], mir: [4, 4, 4, 4], unionPay: [4, 4, 4, 4], general: [4, 4, 4, 4] }, re: { uatp: /^(?!1800)1\d{0,14}/, amex: /^3[47]\d{0,13}/, discover: /^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/, diners: /^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/, mastercard: /^(5[1-5]\d{0,2}|22[2-9]\d{0,1}|2[3-7]\d{0,2})\d{0,12}/, dankort: /^(5019|4175|4571)\d{0,12}/, instapayment: /^63[7-9]\d{0,13}/, jcb15: /^(?:2131|1800)\d{0,11}/, jcb: /^(?:35\d{0,2})\d{0,12}/, maestro: /^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/, mir: /^220[0-4]\d{0,12}/, visa: /^4\d{0,15}/, unionPay: /^(62|81)\d{0,14}/ }, getStrictBlocks: function (e) { var t = e.reduce(function (e, t) { return e + t }, 0); return e.concat(19 - t) }, getInfo: function (e, t) { var i = r.blocks, n = r.re; t = !!t; for (var a in n) if (n[a].test(e)) { var o = i[a]; return { type: a, blocks: t ? this.getStrictBlocks(o) : o } } return { type: "unknown", blocks: t ? this.getStrictBlocks(i.general) : i.general } } }; e.exports = r }, function (e, t) { "use strict"; var r = { noop: function () { }, strip: function (e, t) { return e.replace(t, "") }, getPostDelimiter: function (e, t, r) { if (0 === r.length) return e.slice(-t.length) === t ? t : ""; var i = ""; return r.forEach(function (t) { e.slice(-t.length) === t && (i = t) }), i }, getDelimiterREByDelimiter: function (e) { return new RegExp(e.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"), "g") }, getNextCursorPosition: function (e, t, r, i, n) { return t.length === e ? r.length : e + this.getPositionOffset(e, t, r, i, n) }, getPositionOffset: function (e, t, r, i, n) { var a, o, l; return a = this.stripDelimiters(t.slice(0, e), i, n), o = this.stripDelimiters(r.slice(0, e), i, n), l = a.length - o.length, 0 !== l ? l / Math.abs(l) : 0 }, stripDelimiters: function (e, t, r) { var i = this; if (0 === r.length) { var n = t ? i.getDelimiterREByDelimiter(t) : ""; return e.replace(n, "") } return r.forEach(function (t) { t.split("").forEach(function (t) { e = e.replace(i.getDelimiterREByDelimiter(t), "") }) }), e }, headStr: function (e, t) { return e.slice(0, t) }, getMaxLength: function (e) { return e.reduce(function (e, t) { return e + t }, 0) }, getPrefixStrippedValue: function (e, t, r, i, n, a, o, l, s) { if (0 === r) return e; if (e === t && "" !== e) return ""; if (s && "-" == e.slice(0, 1)) { var c = "-" == i.slice(0, 1) ? i.slice(1) : i; return "-" + this.getPrefixStrippedValue(e.slice(1), t, r, c, n, a, o, l, s) } if (i.slice(0, r) !== t && !l) return o && !i && e ? e : ""; if (i.slice(-r) !== t && l) return o && !i && e ? e : ""; var u = this.stripDelimiters(i, n, a); return e.slice(0, r) === t || l ? e.slice(-r) !== t && l ? u.slice(0, -r - 1) : l ? e.slice(0, -r) : e.slice(r) : u.slice(r) }, getFirstDiffIndex: function (e, t) { for (var r = 0; e.charAt(r) === t.charAt(r);)if ("" === e.charAt(r++)) return -1; return r }, getFormattedValue: function (e, t, r, i, n, a) { var o = "", l = n.length > 0, s = ""; return 0 === r ? e : (t.forEach(function (t, c) { if (e.length > 0) { var u = e.slice(0, t), d = e.slice(t); s = l ? n[a ? c - 1 : c] || s : i, a ? (c > 0 && (o += s), o += u) : (o += u, u.length === t && c < r - 1 && (o += s)), e = d } }), o) }, fixPrefixCursor: function (e, t, r, i) { if (e) { var n = e.value, a = r || i[0] || " "; if (e.setSelectionRange && t && !(t.length + a.length <= n.length)) { var o = 2 * n.length; setTimeout(function () { e.setSelectionRange(o, o) }, 1) } } }, checkFullSelection: function (e) { try { var t = window.getSelection() || document.getSelection() || {}; return t.toString().length === e.length } catch (r) { } return !1 }, setSelection: function (e, t, r) { if (e === this.getActiveElement(r) && !(e && e.value.length <= t)) if (e.createTextRange) { var i = e.createTextRange(); i.move("character", t), i.select() } else try { e.setSelectionRange(t, t) } catch (n) { console.warn("The input element type does not support selection") } }, getActiveElement: function (e) { var t = e.activeElement; return t && t.shadowRoot ? this.getActiveElement(t.shadowRoot) : t }, isAndroid: function () { return navigator && /android/i.test(navigator.userAgent) }, isAndroidBackspaceKeydown: function (e, t) { return !!(this.isAndroid() && e && t) && t === e.slice(0, -1) } }; e.exports = r }, function (e, t) { (function (t) { "use strict"; var r = { assign: function (e, r) { return e = e || {}, r = r || {}, e.creditCard = !!r.creditCard, e.creditCardStrictMode = !!r.creditCardStrictMode, e.creditCardType = "", e.onCreditCardTypeChanged = r.onCreditCardTypeChanged || function () { }, e.phone = !!r.phone, e.phoneRegionCode = r.phoneRegionCode || "AU", e.phoneFormatter = {}, e.time = !!r.time, e.timePattern = r.timePattern || ["h", "m", "s"], e.timeFormat = r.timeFormat || "24", e.timeFormatter = {}, e.date = !!r.date, e.datePattern = r.datePattern || ["d", "m", "Y"], e.dateMin = r.dateMin || "", e.dateMax = r.dateMax || "", e.dateFormatter = {}, e.numeral = !!r.numeral, e.numeralIntegerScale = r.numeralIntegerScale > 0 ? r.numeralIntegerScale : 0, e.numeralDecimalScale = r.numeralDecimalScale >= 0 ? r.numeralDecimalScale : 2, e.numeralDecimalMark = r.numeralDecimalMark || ".", e.numeralThousandsGroupStyle = r.numeralThousandsGroupStyle || "thousand", e.numeralPositiveOnly = !!r.numeralPositiveOnly, e.stripLeadingZeroes = r.stripLeadingZeroes !== !1, e.signBeforePrefix = !!r.signBeforePrefix, e.tailPrefix = !!r.tailPrefix, e.swapHiddenInput = !!r.swapHiddenInput, e.numericOnly = e.creditCard || e.date || !!r.numericOnly, e.uppercase = !!r.uppercase, e.lowercase = !!r.lowercase, e.prefix = e.creditCard || e.date ? "" : r.prefix || "", e.noImmediatePrefix = !!r.noImmediatePrefix, e.prefixLength = e.prefix.length, e.rawValueTrimPrefix = !!r.rawValueTrimPrefix, e.copyDelimiter = !!r.copyDelimiter, e.initValue = void 0 !== r.initValue && null !== r.initValue ? r.initValue.toString() : "", e.delimiter = r.delimiter || "" === r.delimiter ? r.delimiter : r.date ? "/" : r.time ? ":" : r.numeral ? "," : (r.phone, " "), e.delimiterLength = e.delimiter.length, e.delimiterLazyShow = !!r.delimiterLazyShow, e.delimiters = r.delimiters || [], e.blocks = r.blocks || [], e.blocksLength = e.blocks.length, e.root = "object" == typeof t && t ? t : window, e.document = r.document || e.root.document, e.maxLength = 0, e.backspace = !1, e.result = "", e.onValueChanged = r.onValueChanged || function () { }, e } }; e.exports = r }).call(t, function () { return this }()) }]) });;
// MODULE NULL CHECK
if (document.querySelector('#eggYardSearchModule') !== null) {
    // Declare variables of use
    let eggYardSearchButton = document.querySelector('#eggYardSearchButton');
    let eggYardSearchInput = document.querySelector('[name="eggYardSearchCode"]');
    let eggYardSearchError = document.querySelector('#eggYardSearchError');
    let eggYardTechnicalError = "Technischer Fehler. Versuchen Sie es später bitte erneut.";
    let currentButtonText = eggYardSearchButton.innerText;
    let eggYardButtonWaiting = "Bitte warten";

    // Enable input pattern
    var eggCodeInputPattern = new Cleave('[name="eggYardSearchCode"]', {
        blocks: [1, 2, 7],
        delimiter: '-',
    });

    // Register function for error display of the module
    function eggYardError(errorMessage) {
        // Reset button
        eggYardSearchButton.innerText = currentButtonText;
        eggYardSearchButton.removeAttribute('disabled');

        // Set message
        eggYardSearchError.innerText = errorMessage;
        eggYardSearchError.classList.remove("hide");
    }

    // Register click-event on the button
    eggYardSearchButton.addEventListener('click', function (e) {
        // Prevent sending form the normal way
        e.preventDefault();

        // Switch button text, style and behaviour
        eggYardSearchButton.innerText = eggYardButtonWaiting;
        eggYardSearchButton.setAttribute('disabled', 'disabled');

        // Fetch egg code and append it to the API URL
        let eggCode = (eggYardSearchInput.value).toUpperCase();
        let eggYardApiUrl = "/api/sitecore/stores/MatchEggCode?code=" + eggCode;

        // Send request with egg code
        let xhr = new XMLHttpRequest();
        xhr.open('GET', eggYardApiUrl);
        xhr.send();

        // Process XHR response
        xhr.onload = function () {
            if (xhr.status != 200) {
                eggYardError(eggYardTechnicalError);
            } else {
                // Remove error
                eggYardSearchError.classList.add("hide");

                // Parse XHR response into JSON format
                let response = JSON.parse(xhr.response);

                if (response.Success === false) {
                    eggYardError(response.ErrorMessage);
                } else {
                    // Change location to TargetUrl with zip code
                    //console.log(response);
                    let payload = response.Payload;
                    window.location.href = payload.TargetUrl + "#" + payload.Uid;
                }
            }
        };

        // If there was an error with the XHR request itself:
        xhr.onerror = function () {
            eggYardError(eggYardTechnicalError);
        };
    });
}


// Jump to egg yard if we have a egg yard hash
if (window.location.hash) {
    // Check if we are on a page with egg yards
    let jumpMarks = document.querySelectorAll('.jumpmark__target');

    for (let i = 0; i < jumpMarks.length; i++) {
        let splits = (jumpMarks[i].id).split("-");

        if (splits.length > 1) {
            if (splits[0] == "egg") {
                let uid = window.location.hash.split("#")[1];
                let eggYardJumpmark = document.querySelector("#" + uid);
                console.log(uid);
                if (eggYardJumpmark !== undefined) {
                    let eggYardPosition = eggYardJumpmark.offsetTop;
                    console.log(eggYardPosition);
                    window.scrollTo({ top: eggYardPosition, behavior: "auto" });
                }
            }
        }
    }
};
var passwordContainer = document.getElementById('password-module-container');
var passwordSuccessMessage = document.getElementById('password-module-success-message');

var passwordFormSend = function passwordFormSend(formData) {
    var xhttp = new XMLHttpRequest();

    xhttp.open('POST', passwordFormAction, true);

    xhttp.onloadstart = function () {
        passwordFormElement.classList.add('loading')
    }

    xhttp.onload = function () {
        var passwordResp = JSON.parse(this.response);

        passwordFormElement.classList.remove('loading');
        passwordStatusText.innerHTML = passwordResp.Payload.StatusText;
        passwordSuccessMessage.classList.add('my-alnatura-accordion__success-message--active');

    };
    xhttp.onerror = function () { };

    xhttp.send(new FormData(formData));
}

var passwordSubmit = function passwordSubmit(event) {
    event.preventDefault();
    passwordFormSend(passwordFormElement);
}


/*
if (passwordContainer != null || undefined) {
    var passwordEditButton = document.getElementById('password-module-edit');
    var passwordCloseButton = document.getElementById('password-module-close');

    var passwordEditContainer = document.getElementById('password-module-edit-container');

    // open dialog
    passwordEditButton.addEventListener("click", function () {
        if (!passwordEditContainer.style.maxHeight) {
            passwordEditContainer.style.maxHeight = passwordEditContainer.scrollHeight + "px";
            passwordEditContainer.style.overflow = "visible";
        }
    });

    // close dialog
    passwordCloseButton.addEventListener("click", function () {
        if (passwordEditContainer.style.maxHeight) {
            passwordEditContainer.style.maxHeight = null;
            passwordEditContainer.style.overflow = null;
        }
    });

    // password status
    //passwordStatus();

    // form
    var passwordFormAction = passwordFormElement.getAttribute('data-form-action');
    passwordFormElement.addEventListener('submit', passwordSubmit);
}*/;
var listBasedDropdowns = document.querySelectorAll('.listBasedInformationDropdown');
if (listBasedDropdowns.length > 0) {
    for (var i = 0; i < listBasedDropdowns.length; i++) {
        listBasedDropdowns[i].addEventListener('change', function () {
            var listBasedContainer = this.parentElement;
            var listBasedContent = listBasedContainer.querySelector('.listBasedInformationContent');
            var newIndex = parseInt(this.selectedIndex)+1;

            // Hide all option contents
            var allOptionContent = listBasedContent.querySelectorAll('.option-content');
            for (var o = 0; o < allOptionContent.length; o++) {
                allOptionContent[o].style.display = "none";
            }

            // Display the actual option content
            listBasedContent.querySelector('.option-content:nth-child(' + newIndex + ')').style.display = "block";
        });
    }
}
;
let highlightedMeta = document.querySelector('.linklist__item.highlighted');
if (highlightedMeta != null) {
    // Create icon
    let newIconImage = document.createElement('img');
    newIconImage.src = "/Content/Assets/Images/cart_white.png";
    newIconImage.setAttribute('alt', "testbild");


    // Fetch origin link
    let highlightedLink = highlightedMeta.querySelector('a').href;

    // Create link
    let newIconLink = document.createElement('a');
    newIconLink.href = highlightedLink;
    newIconLink.append(newIconImage);


    // Create new li for 'icon' navigation
    let newIconListItem = document.createElement('li');
    newIconListItem.classList.add('navigation__fast-item');
    newIconListItem.classList.add('onlineshop-highlight');
    newIconListItem.append(newIconLink);

    // Append to the icon list for showing on smaller devices
    fastNav = document.querySelector('div.header__main .navigation__fast-list');
    fastNav.insertBefore(newIconListItem, fastNav.firstChild);
};
var productTabs = document.querySelector('.tab-box');

if (productTabs !== null) {

    var tabs = new Tabs({
        elem: "tabs",
        open: 0
    });

};
// Products Sub Categories Slider only for mobile
// breakpoint where swiper will be destroyed
// and switches to a dual-column layout
var breakpoint = window.matchMedia('(min-width:768px)');
// keep track of swiper instances to destroy later
var mySwiper;
var productSubCategories = document.querySelector('.products-sub-categories__container.swiper-container');
var breakpointChecker = function () {
    if (breakpoint.matches === true) {
        if (mySwiper !== undefined) mySwiper.destroy(true, true);
        return;
    } else if (breakpoint.matches === false) {
        return enableSwiper();
    }
};

var enableSwiper = function () {
    mySwiper = new Swiper('.products-sub-categories__container.swiper-container', {
        loop: true,
        slidesPerView: 'auto',
        centeredSlides: true,

        navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev'
        },
        pagination: {
            clickable: true,
            el: '.swiper-pagination',
            dynamicBullets: true,
            paginationClickable: true
        },
        breakpoints: {
            768: {
                centeredSlides: true,
                slidesPerView: 1,
                spaceBetween: 30
            }
        }

    });

};
if (productSubCategories != null || undefined) {
    breakpoint.addListener(breakpointChecker);
    breakpointChecker();
};
var recipeCollectionEditForm = document.getElementById('recipe-collection-edit');
var recipeCollectionEditFormSubmit;

// Checks if a recipe collection name is valid with RegEx String
function checkValidString(term) {
    if (term.match(/^[A-Za-zäÄöÖüÜß0-9 &\+\-_]+$/)) {
        // Term is valid
        return true;
    } else {
        // Term is invalid
        return false;
    }
}


if (recipeCollectionEditForm != null || undefined) {
    recipeCollectionEditFormSubmit = recipeCollectionEditForm.querySelector('input[type="submit"]');

    if (recipeCollectionEditFormSubmit != null) {
        recipeCollectionEditFormSubmit.addEventListener('click', function (e) {

            let collectionName = document.querySelector('#collection-name').value;

            // Check if the name is allowed
            var nameError = false;
            if (!checkValidString(collectionName)) {
                nameError = true;
            }

            e.preventDefault();
            var formData = document.getElementById('recipe-collection-edit');
            var formActionUrl = recipeCollectionEditForm.getAttribute('data-action');

            // Switch button
            let submitButtonTextRaw = recipeCollectionEditFormSubmit.value;
            if (!nameError) {
                recipeCollectionEditFormSubmit.value = "Bitte warten";
                recipeCollectionEditFormSubmit.style.opacity = "0.5";
                recipeCollectionEditFormSubmit.setAttribute("disabled", "disabled");
            } else {
                // Show error message, that only specific chars are allowed
                document.querySelector('#collectionNameError').style.display = "block";
            }

            var request = new XMLHttpRequest();
            request.open('POST', formActionUrl, true);

            request.onloadstart = function () {
                // loadstart
            }

            request.onload = function () {
                var resp = JSON.parse(this.response);
                // loadend

                if (resp.Success) {

                    if (resp.Payload.RedirectUrl.includes("alnatura")) {
                        // Fake longer time so we don't get a 'cancled' state 
                        // and the request can work flawless
                        setTimeout(function () {
                            // GTM Tracking: Rename collection
                            gtmRenameRecipeCollection(collectionName);
                          
                            window.location = resp.Payload.RedirectUrl;
                        }, 150);
                    }

                } else {
                    var message = document.createElement('div');
                    message.classList.add('message');

                    // Reset submit button, because we need it again
                    recipeCollectionEditFormSubmit.value = submitButtonTextRaw;
                    recipeCollectionEditFormSubmit.style.opacity = "1";
                    recipeCollectionEditFormSubmit.removeAttribute("disabled");

                    if (resp.ErrorType == 1) {
                        message.classList.add('message--error')

                    } else if (resp.ErrorType == 2) {
                        message.classList.add('message--warning')
                    }

                    message.innerHTML = resp.ErrorMessage;
                    //recipeCollectionEditForm.scrollIntoView({ block: "start", behavior: "smooth" });
                    //recipeCollectionEditForm.appendChild(message);
                }

            };
            request.onerror = function () {

            };

            if (!nameError) {
                request.send(new FormData(formData));
            }
        });
    }
};
"use strict";

var newsletterFormShort = document.getElementById('newsletter-registration-short');
var newsletterInput = document.getElementById('form-newsletter__input');
var newsletterLegalText = document.getElementById('form-newsletter_legaltext');
var newsletterLegalTextClose = document.getElementById('form-newsletter_legaltext-close');
var newsletterLegalTrigger = document.getElementById('legalActivationTrigger');
var newsletterCheckbox = document.getElementById('newsletter-form-short-checkbox');
var currentTeaserState = "newsletter";
var accountRegisterButton = document.querySelector('[data-form-button="account"] button');
var registrationLink = window.location.protocol + "//" + window.location.host + "/api/account/signup?emailAddress=";


var legalFocus = function legalFocus() {
    newsletterLegalText.classList.add('active');
};

var legalClose = function legalClose() {
    newsletterLegalText.classList.remove('active');
};
var formSend = function formSend(formData) {
    var request = new XMLHttpRequest();
    request.open('POST', newsletterFormShortAction, true);

    request.onloadstart = function () {
        newsletterFormShort.classList.add('loading')
    }

    request.onload = function () {
        var resp = JSON.parse(this.response);
        newsletterFormShort.classList.remove('loading');

        if (resp.Success) {
            dataLayer.push({
                'eventCategory': 'Newsletter',                            //static value
                'eventAction': 'Formular erfolgreich versendet: Modul',   //static value for page
                'eventLabel': location.pathname,                          //current page path       
                'event': 'event-tracking'                                 //static value
            });
            window.location = resp.Payload.RedirectUrl;

        } else {
            var message = document.createElement('div');
            message.classList.add('message');


            if (resp.ErrorType == 1) {
                message.classList.add('message--error')

            } else if (resp.ErrorType == 2) {
                message.classList.add('message--warning')
            }

            message.innerHTML = resp.ErrorMessage;
            newsletterFormShort.scrollIntoView({ block: "start", behavior: "smooth" });
            document.querySelector('.newsletter-form-short__subline').remove();
            newsletterFormShortMessage.appendChild(message);

            dataLayer.push({
                'eventCategory': 'Newsletter',                            //static value
                'eventAction': 'Formular Fehler: Modul',                  //static value for page
                'eventLabel': resp.ErrorMessage,                          //text of the error message       
                'event': 'event-tracking'                                 //static value
            });    
        }

    };
    request.onerror = function () {

    };

    request.send(new FormData(formData));
}

var formShortSubmit = function formShortSubmit(event) {
    var honeyPotName = document.getElementById('form-short-name');
    var honeyPotNameValue = honeyPotName.value.length;
    var honeyPotEmail = document.getElementById('form-short-email');
    var honeyPotEmailValue = honeyPotEmail.value.length;
    event.preventDefault();
    if (honeyPotNameValue === 0 && honeyPotEmailValue === 0) {
        var formElement = document.getElementById("newsletter-registration-short");

        if (document.getElementById("RecaptchaSiteKey") != undefined) {
            var siteKey = document.getElementById("RecaptchaSiteKey").getAttribute("key");
            grecaptcha.ready(function () {
                grecaptcha.execute(siteKey, { action: 'submit' }).then(function (token) {
                    document.getElementById('newsletter-teaser-token').value = token;
                    formSend(formElement);
                });
            });
        } else {
            formSend(formElement);
        }

    }

}


if (newsletterFormShort !== null) {

    document.querySelector('#newsletter-form-short-checkbox').parentElement.addEventListener('click', function () {
        var checkbox = document.querySelector('#newsletter-form-short-checkbox').parentElement.querySelector('.checkmark--checkbox');
        var checkboxAfter = window.getComputedStyle(checkbox, ':after');

        var newsletterButton = document.querySelector('.form__submit[data-form-button="newsletter"] button');
        if (checkboxAfter.getPropertyValue('display') == "block") {
            newsletterButton.classList.remove("inactive");
            accountRegisterButton.classList.remove("inactive");
        } else {
            newsletterButton.classList.add("inactive");
            accountRegisterButton.classList.add("inactive");
        }
    });

    var newsletterFormShortAction = newsletterFormShort.getAttribute('data-form-action');
    var newsletterFormShortMessage = newsletterFormShort.querySelector('[data-newsletter-message-container]');

    newsletterInput.addEventListener('focus', legalFocus);
    newsletterLegalTextClose.addEventListener('click', legalClose);
    if (newsletterLegalTrigger !== null) {

        var allLegalTriggers = document.querySelectorAll('#legalActivationTrigger');
        for (var a = 0; a < allLegalTriggers.length; a++) {
            allLegalTriggers[a].addEventListener('click', function (e) {
                legalFocus();
                e.preventDefault();
            });

        }
    }
    newsletterFormShort.addEventListener('submit', formShortSubmit);





    // Init register link
    accountRegisterButton.setAttribute('data-url', registrationLink);

    // Listen to the input of the e-mail address for the registration link
    var emailInput = document.querySelector('#newsletter-registration-short #form-newsletter__input');
    emailInput.addEventListener("keyup", function () {
        var tempRegistrationLink = registrationLink + encodeURIComponent(emailInput.value);
        accountRegisterButton.setAttribute('data-url', tempRegistrationLink);
    });


    accountRegisterButton.addEventListener('click', function (e) {
        e.preventDefault();

        // Push the registration of the Mein Alnatura to GTM
        dataLayer.push({
            'eventCategory': 'Newsletter',
            'eventAction': 'Permanent Teaser: Mein Alnatura Registrierung',
            'eventLabel': window.location.pathname,
            'event': 'event-tracking'
        });

        var checkbox = document.querySelector('#newsletter-form-short-checkbox').parentElement.querySelector('.checkmark--checkbox');
        var checkboxAfter = window.getComputedStyle(checkbox, ':after');
        if (checkboxAfter.getPropertyValue('display') == "block") {
            // Switch over to the registration with e-mail address
            window.location = this.getAttribute("data-url");
        }
    });





    var newsletterShortButtons = document.querySelectorAll('.newsletter-form-short_buttons-container .buttons .button');
    for (var i = 0; i < newsletterShortButtons.length; i++) {
        newsletterShortButtons[i].addEventListener('click', function () {
            // Remove active from all the buttons
            for (var j = 0; j < newsletterShortButtons.length; j++) {
                newsletterShortButtons[j].classList.remove('active');
            }

            // Set active button
            this.classList.add('active');


            // Hide all marketing texts
            var marketingTexts = document.querySelectorAll('.marketing-text');
            for (var j = 0; j < marketingTexts.length; j++) {
                marketingTexts[j].classList.add("hide");
            }

            // Hide all privacy texts
            var privacyTexts = document.querySelectorAll('.privacy-text');
            for (var j = 0; j < privacyTexts.length; j++) {
                privacyTexts[j].classList.add("hide");
            }

            // Fetch button id
            var actionId = this.getAttribute('data-id');

            if (actionId == "newsletter") {
                /*
                // Hide account button
                document.querySelector('.newsletter-registration-short[data-form-button="account"]').classList.add("hide");

                // Show newsletter button
                document.querySelector('#newsletter-registration-short .form__submit').classList.remove("hide");

                // Display required text
                document.querySelector('#newsletter-registration-short .form__mandatory-text').style.display = "block";
                */
            } else if (actionId == "account") {
                // Hide newsletter button
                document.querySelector('#newsletter-registration-short .form__submit').classList.add("hide");

                // Show account button
                document.querySelector('.newsletter-registration-short[data-form-button="account"]').classList.remove("hide");

                // Hide required text
                document.querySelector('#newsletter-registration-short .form__mandatory-text').style.display = "none";

                // Show newsletter form for account
                document.querySelector('#newsletter-registration-short').classList.remove("hide");


                // Show subline container for marketing texts
                document.querySelector('.newsletter-form-short__subline-container').classList.remove("hide");

                // Show marketing text
                document.querySelector('.marketing-text[data-purpose="marketing-' + actionId + '"]').classList.remove("hide");

                // Show privacy text
                document.querySelector('.privacy-text[data-purpose="privacy-' + actionId + '"]').classList.remove("hide");
            }
        });
    }
}
;
var birthdayPresentContainerElement = document.querySelector('.birthday-product__form');
var birthdayPresentFormElement = document.getElementById("birthdaypresent-form");
if (birthdayPresentContainerElement) {
    birthdayPresentFormElement.addEventListener('submit', function (e) {

        //alert("test");
        // Set submit button to "waiting" position
        //inputSubmitButton.setAttribute("value", "Bitte warten");
        //inputSubmitButton.setAttribute("disabled", "disabled");
        e.preventDefault();
        if (streetInput) {
            addressSubmitWithCallback(null, birthdayProductSubmit, AdressSubmitFailure);
        } else {
            birthdayProductSubmit();
        }
    }, true);
}
var birthdayPresentSuccessMessage = document.getElementById('birthdaypresent-module-success-message');
var birthdayPresentNewsletterSuccessMessage = document.getElementById('birthdaypresent-module-newsletter-success-message');
var inputSubmitButton;
if (document.birthdaypresentform && document.birthdaypresentform.submit) {
    inputSubmitButton = document.birthdaypresentform.submit;
} else {
    if (document.producttesting && document.producttesting.submit) {
        inputSubmitButton = document.producttesting.submit;
    }
}
var streetInput = document.getElementById('address-module-street-input');
if (inputSubmitButton) {
    var inputSubmitButtonRawText = inputSubmitButton.value;
}
function AdressSubmitFailure() {
    inputSubmitButton.setAttribute("value", inputSubmitButtonRawText);
    inputSubmitButton.removeAttribute("disabled");
}
function birthdayProductSubmit() {
    saveData = new FormData;
    saveData.append('datasourceId', document.querySelector('#birthdaypresent-form').getAttribute("data-datasource"));
    saveData.append('__RequestVerificationToken', document.querySelector('.birthday-product__form input[name="__RequestVerificationToken"]').value);
    var labelCheckbox = document.querySelector('.birthday-product__form label.form__label--checkbox');
    if (labelCheckbox != null) {
        afterStyles = window.getComputedStyle(labelCheckbox.querySelector('.checkmark--checkbox'), ':after');
        newsletterStateCSS = afterStyles['display'];
    }
    if (document.querySelector('.birthday-product__form input[name="newsletterRegistration"]') && document.querySelector('.birthday-product__form input[name="newsletterRegistration"]').checked) {
        saveData.append('newsletterRegistration', true);
    }
    if (document.querySelector('.birthday-product__form input[name="registerToBirthdayPresent"]')) {
        saveData.append('registerToBirthdayPresent', "true");
    }
    var endpoint = birthdayPresentFormElement.getAttribute('data-form-action');
    // Publish registering
    var saveDataRegXhttp = new XMLHttpRequest();
    saveDataRegXhttp.open('POST', endpoint, true);
    saveDataRegXhttp.onload = function () {
        var birthdayPresentResp = JSON.parse(this.response);
        birthdayPresentSuccessMessage.innerHTML = birthdayPresentResp.Payload.StatusMessage;
        if (!birthdayPresentResp.Payload.SignupSuccess) {
            birthdayPresentSuccessMessage.classList.add("failure");
            birthdayPresentSuccessMessage.classList.remove("success");
        } else {
            birthdayPresentSuccessMessage.classList.remove("failure");
            birthdayPresentSuccessMessage.classList.add("success");
            // GTM: Register to birthday/product testing
            let formType = birthdayPresentFormElement.getAttribute('data-type');
            if (formType == "productTesting") {
                bundleId = birthdayPresentFormElement.getAttribute("data-product-bundle");
                gtmRegisterTesting(bundleId);
            } else {
                gtmRegisterBirthday();
            }
        }
        if (birthdayPresentResp.Payload.NewsletterMessage && !birthdayPresentResp.Payload.NewsletterSuccess) {
            birthdayPresentNewsletterSuccessMessage.classList.add("failure");
            birthdayPresentNewsletterSuccessMessage.classList.remove("success");
        } else {
            birthdayPresentNewsletterSuccessMessage.classList.remove("failure");
            birthdayPresentNewsletterSuccessMessage.classList.add("success");
        }
        birthdayPresentNewsletterSuccessMessage.innerHTML = birthdayPresentResp.Payload.NewsletterMessage;
        // Change text of message
        statusContainer.innerText = birthdayPresentResp.Payload.StatusMessage;
        if (birthdayPresentResp.Payload.SignupSuccess) {
            // Change button text                
            inputSubmitButton.setAttribute("value", inputSubmitButton.getAttribute("data-success-message"));
        } else {
            // Reset text
            inputSubmitButton.setAttribute("value", inputSubmitButtonRawText);
            inputSubmitButton.removeAttribute("disabled");
        }
    };
    saveDataRegXhttp.onerror = function () { };
    saveDataRegXhttp.send(saveData);
}
;
var recipeCollectionCreateForm = document.getElementById('recipe-collection-create');


if (recipeCollectionCreateForm != null || undefined) {
    var recipeCollectionCreateSubmit = function recipeCollectionCreateSubmit(event) {

        // Check if the name is allowed
        var nameError = false;
        var collectionName = document.querySelector('form#recipe-collection-create input#collection-name').value;
        if (!checkValidString(collectionName)) {
            nameError = true;
        }

        // Prevent multiple clicks if there is no name error
        submitButton = document.querySelector('#recipe-collection-create input[type="submit"]');
        submitButtonWording = submitButton.getAttribute("value");

        if (!nameError) {
            submitButton.setAttribute("disabled", "disabled");
            submitButton.setAttribute("value", "Bitte warten");
            submitButton.style.opacity = "0.5";
        } else {
            // Show error message, that only specific chars are allowed
            document.querySelector('#collectionNameError').style.display = "block";
        }


        event.preventDefault();
        var formData = document.getElementById('recipe-collection-create');
        var formActionUrl = recipeCollectionCreateForm.getAttribute('data-action');
        var request = new XMLHttpRequest();
        request.open('POST', formActionUrl, true);

        request.onloadstart = function () {
            // loadstart
        }

        request.onload = function () {
            var resp = JSON.parse(this.response);
            // loadend

            if (resp.Success) {

                // Info: Location changes after this so we had to push it before that!
                gtmCreateRecipeCollection(collectionName);

                if (resp.Payload.RedirectUrl.includes("alnatura")) {
                    window.location = resp.Payload.RedirectUrl;
                }
                else {
                    window.location = window.location;
                }
            }
            else {
                var message = document.createElement('div');
                message.classList.add('message');


                if (resp.ErrorType == 1) {
                    message.classList.add('message--error')

                } else if (resp.ErrorType == 2) {
                    message.classList.add('message--warning')
                }

                message.innerHTML = resp.ErrorMessage;
                //recipeCollectionCreateForm.scrollIntoView({ block: "start", behavior: "smooth" });
                //recipeCollectionCreateForm.appendChild(message);

                // Reset button style because we have to do it again!
                submitButton.setAttribute("value", submitButtonWording);
                submitButton.style.opacity = "1";

                // Re-Enable click
                submitButton.removeAttribute("disabled");
            }

        };
        request.onerror = function () {

        };

        if (!nameError) {
            request.send(new FormData(formData));
        }
    }


    recipeCollectionCreateForm.addEventListener('submit', recipeCollectionCreateSubmit);


    recipeCollectionCreateForm.parentElement.querySelector('a.popup-modal__close').addEventListener('click', function () {
        document.querySelector('body').classList.remove('has-modal');
        document.querySelector('#overlay').classList.remove('is--visible');
        document.querySelector('#overlay').style.display = "none";

        recipeCollectionCreateForm.parentElement.classList.remove('is--visible');

    });
};
var iframes = document.querySelectorAll('.iframe');


for (var i = 0; i < iframes.length; i++) {

    iframes[i].addEventListener('click', function (event) {
        var iframePlaceholder = this.querySelector('.iframe__placeholder');

        var iframeSrc = this.getAttribute('data-iframe-src');
        var iframeContainer = document.createElement('iframe');
        iframeContainer.setAttribute('class', 'iframe__video');
        iframeContainer.setAttribute('src', iframeSrc);
        iframeContainer.setAttribute('frameborder', '0');
        iframeContainer.setAttribute('allow', 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture');
        iframeContainer.setAttribute('allowfullscreen', '');

        iframePlaceholder.style.display = 'none';
        this.insertBefore(iframeContainer, this.firstChild);
    });




    if (iframes[i].classList.contains("portrait")) {
        iframes[i].parentElement.classList.add("portrait");
    }



}



;
var deleteAccountContainer = document.getElementById('delete-account-module-container');
var deleteAccountSuccessMessage = document.getElementById('delete-account-module-success-message');
var deleteAccountFormElement = document.getElementById("delete-account-form");
var newsletterStateBool = false;
var newsletterStateCSS = "none";

if (deleteAccountContainer != null || undefined) {
    var deleteAccountEditButton = document.getElementById('account-delete-module-edit');
    var deleteAccountCloseButton = document.getElementById('account-delete-module-close');
    var deleteAccountEditContainer = document.getElementById('account-delete-module-edit-container');

    // open dialog
    deleteAccountEditButton.addEventListener("click", function () {
        if (!deleteAccountEditContainer.style.maxHeight) {
            deleteAccountEditContainer.style.maxHeight = deleteAccountEditContainer.scrollHeight + "px";
            deleteAccountEditContainer.style.overflow = "visible";
        }
    });

    // close dialog
    deleteAccountCloseButton.addEventListener("click", function () {
        if (deleteAccountEditContainer.style.maxHeight) {
            deleteAccountEditContainer.style.maxHeight = null;
            deleteAccountEditContainer.style.overflow = null;
        }
    });

    // form
    deleteAccountFormElement.addEventListener('submit', function (e) {
        e.preventDefault();

        // get newsletter receive status
        var labelCheckbox = deleteAccountFormElement.querySelector('label.form__label--checkbox');

        if (labelCheckbox != null) {
            afterStyles = window.getComputedStyle(labelCheckbox.querySelector('.checkmark--checkbox'), ':after');
            newsletterStateCSS = afterStyles['display'];
        }

        if (newsletterStateCSS == "block") {
            newsletterStateBool = true;
        }

        var deleteAccountEndpoint = deleteAccountFormElement.getAttribute('data-form-action');
        var deleteAccountDatasource = deleteAccountFormElement.getAttribute('data-datasource');

        var deleteAccData = new FormData();
        deleteAccData.append("datasourceId", deleteAccountDatasource);
        deleteAccData.append("KeepNewsletterSubscription", newsletterStateBool);

        var xhttp = new XMLHttpRequest();
        var submitButton = deleteAccountFormElement.querySelector('button.submit');
        var deleteButtonTextRaw = submitButton.innerHTML;
        xhttp.open('POST', deleteAccountEndpoint, true);
        xhttp.onloadstart = function () {
            submitButton.innerText = "Bitte warten";
            submitButton.style.opacity = "0.5";
            submitButton.setAttribute("disabled", "disabled");
        }
        xhttp.onerror = function () { }

        xhttp.addEventListener("readystatechange", function () {
            if (this.readyState === 4) {
                var json = JSON.parse(xhttp.response);

                var messagesContainer = document.querySelector('#delete-account-module-success-message');
                var message;
                if (json.Success) {

                    // Set the message for output
                    message = document.querySelector('.account-delete-messages #success_general').innerHTML;

                    // If we keep the newsletter, add that success message to output
                    if (newsletterStateBool) {
                        message += " " + document.querySelector('.account-delete-messages #success_nl').innerHTML;
                    }

                    // Set the wording of the submit button
                    submitButton.innerText = document.querySelector('.account-delete-messages #success_btn').innerHTML;

                    // Switch needed class
                    messagesContainer.classList.remove("my-alnatura-accordion__error-message");
                    messagesContainer.classList.add("my-alnatura-accordion__success-message");

                    // GTM Delete
                    gtmDeleteAccount();

                } else {
                    submitButton.innerHTML = deleteButtonTextRaw;
                    submitButton.style.opacity = "1";
                    submitButton.removeAttribute("disabled");

                    // Set the message for output
                    message = document.querySelector('.account-delete-messages #error_general').innerHTML;

                    // Switch needed class
                    messagesContainer.classList.remove("my-alnatura-accordion__success-message");
                    messagesContainer.classList.add("my-alnatura-accordion__error-message");
                }

                // Set the status messages
                messagesContainer.innerText = message;

                // Fetch height of status container
                messageHeight = messagesContainer.offsetHeight;

                // Add the margin to the container depending on the messageHeight
                marginAdd = 35;
                deleteAccountEditContainer.style.marginBottom = (messageHeight + marginAdd) + "px";

            }
        });

        
        xhttp.send(deleteAccData);
    });
};
var recipeEditButtons = document.querySelectorAll('.recipe-collection__item-edit');
var socialMediaRecipeBookmark = document.getElementById("recipe-action-like");
var recipeDialog = document.getElementById("recipe_edit_modal");
var closeButton = document.getElementById("recipeCollectionPopupClose");
var closeButtonError = document.getElementById("recipeCollectionPopupCloseError");
var editMode = false;
var editRecipeName = "";
var editRecipeId = 0;

if ((recipeEditButtons != null && recipeEditButtons.length > 0) || document.querySelector('.recipe__sidebar') != null) {
    var recipeEditForm = document.getElementById('recipe-edit');
    var recipeEditListContainer = document.querySelector('.recipe-edit__collections');

    if (recipeEditButtons.length > 0) {
        for (i = 0; i < recipeEditButtons.length; i++) {
            recipeEditButtons[i].addEventListener('click', function () {
                editMode = true;
                editRecipeName = this.parentElement.getAttribute('href').split('/');
                editRecipeName = editRecipeName[editRecipeName.length - 2];
                editRecipeId = this.getAttribute('data-recipe-id');
            });
        }
    }

    submitButton = document.querySelector('.bookmark-collection-modal input[type="submit"], .recipe-edit-modal input[type="submit"]');
    submitButtonWording = submitButton.getAttribute("value");

    function drawRecipeTeaser(image, title) {
        document.querySelector('.recipe-edit__teaser').innerHTML = '';
        var imageCopy = image.cloneNode(true);
        document.querySelector('.recipe-edit__teaser').appendChild(imageCopy);
        var teaserTitle = document.createElement('div');
        teaserTitle.classList.add('recipe-edit__teaser-title');
        teaserTitle.innerHTML = title;
        document.querySelector('.recipe-edit__teaser').appendChild(teaserTitle);
    }

    function createLoader(elem) {
        var loadingContainer = document.createElement('div');
        loadingContainer.classList.add('swiper-lazy-preloader');
        elem.innerHTML = '';
        elem.appendChild(loadingContainer);
    }

    function removeLoader() {
        if (document.querySelector('.swiper-lazy-preloader') !== null) {
            document.querySelector('.swiper-lazy-preloader').remove;
        }
    }

    function getRecipeInformation(payload) {
        // console.log(payload);
        removeLoader();
        var item = [];
        for (var i = 0; i < payload.Collections.length; i++) {
            var isChecked = payload.Collections[i].IsActive ? 'checked' : ''
            var markup =
                '<div class="form__group form__group--checkbox">' +
                '<div class="form__checkbox">' +
                '<label class="form__label--input form__label--checkbox">' + payload.Collections[i].CollectionName +
                '<input class="form__input--checkbox" type="checkbox" name="CollectionName" data-collection-id="' + payload.Collections[i].CollectionId + '"' + isChecked + ' />' +
                '<div class="checkmark--checkbox"></div>' +
                '</label>' +
                '</div>' +
                '</div>';
            item.push(markup);
        }
        recipeEditListContainer.innerHTML = item.join("");
    }


    // Do we have the required button for that action?
    let deleteRecipeAllCollectionsButton = document.querySelector('#deleteReipeAllCollectionsButton');
    if (deleteRecipeAllCollectionsButton !== null) {
        // Fetch anti forgery token
        let antiForgeryToken = deleteRecipeAllCollectionsButton.querySelector('input[name="__RequestVerificationToken"]').value;

        // React on button press
        deleteRecipeAllCollectionsButton.addEventListener('click', () => {
            //console.log("Button clicked");
            //console.log(antiForgeryToken);

            let url = deleteRecipeAllCollectionsButton.getAttribute('data-action');
            let redirectUrl = deleteRecipeAllCollectionsButton.getAttribute('data-redirect-url');
            let recipeId = deleteRecipeAllCollectionsButton.getAttribute('data-recipe-id');

            // Add form data to the request
            var formData = new FormData();
            formData.append("RedirectUrl", redirectUrl);
            formData.append("RecipeId", recipeId);
            formData.append('__RequestVerificationToken', antiForgeryToken);

            // Perform request and style changes
            var request = new XMLHttpRequest();
            request.open('POST', url, true);
            request.onloadstart = function () {
                // loadstart
                deleteRecipeAllCollectionsButton.dataset.buttonText = deleteRecipeAllCollectionsButton.innerText;
                deleteRecipeAllCollectionsButton.innerText = "Bitte warten";
                deleteRecipeAllCollectionsButton.classList.add("clicked");
            }
            request.onload = function () {
                var resp = JSON.parse(this.response);
                if (resp.Success) {
                    document.querySelector('#overlay.overlay').style.display = "none";
                    document.querySelector('.recipe-edit-modal').style.display = "none";
                    //document.querySelector('body').style.overflowY = "scroll";
                    document.querySelector('html').style.overflowY = "scroll";

                }

                deleteRecipeAllCollectionsButton.innerText = deleteRecipeAllCollectionsButton.dataset.buttonText;
                deleteRecipeAllCollectionsButton.classList.remove("clicked");
            };
            request.onerror = function () {

            };

            // Send request
            request.send(formData);
            ///// END XHR Request /////


        });
    }


    function saveRecipeInformation() {
        submitButton.setAttribute("disabled", "disabled");
        submitButton.setAttribute("value", "Bitte warten");
        submitButton.style.opacity = "0.5";

        var listData = [];
        var collections = document.querySelectorAll('.recipe-edit__collections .form__input--checkbox');
        for (var i = 0; i < collections.length; i++) {
            var collectionItem =
            {
                "collectionID": collections[i].getAttribute('data-collection-id'),
                "isActive": collections[i].checked
            };
            listData.push(collectionItem);
        }

        //console.log(collectionItem);
        var recipeEditForm = document.getElementById('recipe-edit');
        var url = recipeEditForm.getAttribute('data-action');
        var formData = new FormData();
        formData.append("redirectUrl", recipeEditForm.getAttribute('data-redirect-url'));
        formData.append("recipeId", recipeEditForm.getAttribute('data-recipe-id'));
        var newCollectionName = document.getElementById('new-collection-name').value;
        formData.append("NewCollectionName", newCollectionName);
        formData.append("collections", JSON.stringify(listData));


        ///// Copied from -> xhrRequest(formData, url, updateUrl); ////
        ///// Make XHR Request /////
        var request = new XMLHttpRequest();
        request.open('POST', url, true);
        request.onloadstart = function () {
            // loadstart
        }
        request.onload = function () {
            var resp = JSON.parse(this.response);
            // loadend

            //console.log('newXHR Response:');
            //console.log(this.response); 

            if (resp.Success) {

                //// Copied from updateurl() ////
                var answer = resp.Payload;
                var rsp = resp;

                document.querySelector('#recipe_edit_modal .formContainer').style.display = "none";
                document.querySelector('#recipe_edit_modal').style.overflowY = "hidden";

                $popupMessages = document.querySelector('#recipe_edit_modal .popup-messages');
                $popupMessages.style.display = "block";

                $successMessage = $popupMessages.querySelector('.message--success');
                $errorMessage = $popupMessages.querySelector('.message--error');

                if (rsp.Success == true) {
                    //console.log("Success", true);
                    //console.log(rsp);
                    $successMessage.querySelector('.title').innerText = answer.Headline;
                    $successMessage.parentElement.querySelector('.btn').innerText = answer.ButtonText;

                    $successMessage.querySelector('a').setAttribute("href", answer.RecipeCollectionOverviewLink);
                    $successMessage.querySelector('a').innerHTML = answer.Text;

                    $successMessage.style.display = "block";
                    $errorMessage.style.display = "none";

                    // GTM: Trigger that a recipe was added to a collection
                    gtmAddRecipeToCollection();

                    // GTM: Trigger when there was a new collection created
                    let newCollectionName = recipeEditForm.querySelector('#new-collection-name').value;
                    if (newCollectionName.length > 0) {
                        gtmCreateRecipeCollection(newCollectionName);

                        // And clear the input
                        recipeEditForm.querySelector('#new-collection-name').value = "";
                    }

                    // Clear input on successful submit
                    newCollectionName = "";
                } else {
                    //console.log("Success", false);

                    $errorMessage.querySelector('.title').innerText = answer.Text;
                    $errorMessage.parentElement.querySelector('.btn').innerText = answer.ButtonText;

                    $errorMessage.querySelector('p').innerHTML = answer.Text
                    $errorMessage.querySelector('p').style.color = '#3d3d39';
                    $errorMessage.querySelector('p').style.border = '0';

                    $successMessage.style.display = "none";
                    $errorMessage.style.display = "block";
                }

                $popupMessages.querySelector('.btn').addEventListener('click', function () {
                    //console.log("click");
                    // Hide overlay
                    document.querySelector('#overlay.overlay').style.display = "none";
                    document.querySelector('.recipe-edit-modal').style.display = "none";
                    document.querySelector('body').style.overflowY = "scroll";

                    // Replay the form and messages section (if the user wants to do it again)
                    document.querySelector('#recipe_edit_modal .formContainer').style.display = "block";
                    document.querySelector('#recipe_edit_modal').style.overflowY = "auto";
                    $popupMessages.style.display = "none";

                    submitButton.setAttribute("value", submitButtonWording);
                    submitButton.style.opacity = "1";
                    submitButton.removeAttribute("disabled");
                });
                //// End Copied from updateurl() ////

            } else {
                var message = document.createElement('div');
                message.classList.add('message');

                if (resp.ErrorType == 1) {
                    message.classList.add('message--error')

                } else if (resp.ErrorType == 2) {
                    message.classList.add('message--warning')
                }

                message.innerHTML = resp.ErrorMessage;
                //recipeCollectionEditForm.scrollIntoView({ block: "start", behavior: "smooth" });
                //recipeCollectionEditForm.appendChild(message);

                // Re-Enable click - only on error because on success we have a page reload
                submitButton.setAttribute("value", submitButtonWording);
                submitButton.style.opacity = "1";
                submitButton.removeAttribute("disabled");
            }
        };
        request.onerror = function () {

        };

        request.send(formData);
        ///// END XHR Request /////
    }

    // Check if on the recipe collection modal things are selected or not
    function isRecipeCollectionSelected() {
        let checkedCollection = document.querySelector('input[name="CollectionName"]:checked');
        let newCollection = document.querySelector('#new-collection-name').value;

        if (checkedCollection !== null || newCollection !== "") {
            // If a collection is selected or written
            return true;
        } else {
            // If no collection is selected or written
            return false;
        }
    }


    document.querySelector('#overlay.overlay').addEventListener('click', function () {
        document.querySelector('.recipe-edit-modal').style.display = "none";
        document.querySelector('#recipe_edit_modal_unauthenticated').style.display = "none";

        // Popup is closed; enable scoll on body
        document.querySelector('html').style.overflowY = "scroll";

        // Replay the form and messages section (if the user wants to do it again)
        document.querySelector('#recipe_edit_modal .formContainer').style.display = "block";
        document.querySelector('#recipe_edit_modal').style.overflowY = "auto";
        //$popupMessages.style.display = "none";

        submitButton.setAttribute("value", submitButtonWording);
        submitButton.style.opacity = "1";
        submitButton.removeAttribute("disabled");
    });

    if (socialMediaRecipeBookmark) {

        /* START: ERROR POPUP MODDELING */
        // Replace the placeholder in the unauthenticated popup with correct links
        let unauthenticatedPopup = document.querySelector('.popup-modal.recipe-edit-modal.bookmark-collection-modal.unauthenticated p');
        let unauthenticatedPopupRaw = unauthenticatedPopup.innerText;

        let unauthenticatedPopupText = unauthenticatedPopupRaw.replace('{{register}}', '<span class="link register"></span>');
        unauthenticatedPopupText = unauthenticatedPopupText.replace('{{login}}', '<span class="link login"></span>');

        unauthenticatedPopup.innerHTML = unauthenticatedPopupText;

        let registerText = document.querySelector('.sitecoreText.registerText').innerText;

        // Create register link
        let registerLink = document.createElement('a');
        registerLink.innerText = registerText;
        registerLink.setAttribute('href', window.location.protocol + "//" + window.location.host + "/api/account/signup");
        unauthenticatedPopup.querySelector('span.register').append(registerLink);

        // Create login link
        let loginForm = unauthenticatedPopup.parentElement.parentElement.querySelector('.loginButtonForm').innerHTML;
        unauthenticatedPopup.querySelector('span.login').innerHTML = loginForm;
        /* END: ERROR POPUP MODDELING */


        var recipeBookmarkActions = document.querySelectorAll('#recipe-action-like, #recipe-action-like-big');

        for (var rba = 0; rba < recipeBookmarkActions.length; rba++) {


            recipeBookmarkActions[rba].addEventListener('click', event => {
                // Popup is opened; disable scoll on body
                document.querySelector('body').style.overflow = "hidden";
                document.querySelector('html').style.overflow = "hidden";


                // Show overlay
                document.querySelector('#overlay.overlay').style.display = "block";

                createLoader(recipeEditListContainer);

                var loadingContainer = document.createElement('div');
                loadingContainer.classList.add('swiper-lazy-preloader');
                recipeEditListContainer.innerHTML = '';
                recipeEditListContainer.appendChild(loadingContainer);


                recipeDialog.style.display = "block";
                var recipeIdContainer = document.getElementById("recipe-edit");
                var recipeId = recipeIdContainer.getAttribute('data-recipe-id');
                recipeEditForm.setAttribute('data-recipe-id', recipeId)
                var formdata = new FormData();
                formdata.append('recipeId', recipeId);

                ///// Make XHR Request /////
                var request = new XMLHttpRequest();
                request.open('POST', '/api/sitecore/Recipes/GetCollectionsForRecipe', true);

                request.onloadstart = function () {
                    // loadstart
                }

                request.onload = function () {
                    var resp = JSON.parse(this.response);
                    // loadend

                    // console.log('newXHR Response:');
                    // console.log(this.response); // Lists of Collections

                    if (resp.Success) {

                        var payload = resp.Payload

                        removeLoader();

                        var item = [];
                        for (var i = 0; i < payload.Collections.length; i++) {
                            var isChecked = payload.Collections[i].IsActive ? 'checked' : ''
                            var markup =
                                '<div class="form__group form__group--checkbox">' +
                                '<div class="form__checkbox">' +
                                '<label class="form__label--input form__label--checkbox">' + payload.Collections[i].CollectionName +
                                '<input class="form__input--checkbox" type="checkbox" name="CollectionName" data-collection-id="' + payload.Collections[i].CollectionId + '"' + isChecked + ' />' +
                                '<div class="checkmark--checkbox"></div>' +
                                '</label>' +
                                '</div>' +
                                '</div>';
                            item.push(markup);
                        }
                        recipeEditListContainer.innerHTML = item.join("");

                        // Declare the submit button for later use
                        let submitButton = document.querySelector('form#recipe-edit input[type="submit"]');

                        let selectedCollection = isRecipeCollectionSelected();
                        if (selectedCollection) {
                            // Collection is initially selected
                            submitButton.removeAttribute("disabled");
                        } else {
                            // Collection isn't initially selected
                            submitButton.setAttribute("disabled", "disabled");
                        }


                        // Add listener on every checkbox click and keyup to enable/disable save-button
                        let checkBoxes = document.querySelectorAll('form#recipe-edit .form__input--checkbox');
                        for (let i = 0; i < checkBoxes.length; i++) {
                            checkBoxes[i].addEventListener('change', () => {
                                let checkedCheckBoxes = document.querySelectorAll('form#recipe-edit .form__input--checkbox:checked');
                                if (checkedCheckBoxes.length > 0) {                                    
                                    submitButton.removeAttribute("disabled");
                                } else {
                                    submitButton.setAttribute("disabled", "disabled");
                                }
                            });
                        }

                        let inputField = document.querySelector('#new-collection-name');
                        inputField.addEventListener('keyup', () => {
                            let valueLength = inputField.value.length;
                            if (valueLength > 0) {
                                submitButton.removeAttribute("disabled");
                            } else {
                                submitButton.setAttribute("disabled", "disabled");
                            }
                        });



                    } else {
                        var message = document.createElement('div');
                        message.classList.add('message');

                        // Show normal popup
                        document.querySelector('.popup-modal.recipe-edit-modal.bookmark-collection-modal').style.display = "block !important";

                        // Hide the error popup
                        unauthenticatedPopup.parentElement.parentElement.style.display = "none";

                        if (resp.ErrorType == 1) {
                            message.classList.add('message--error')

                        } else if (resp.ErrorType == 2) {
                            message.classList.add('message--warning')
                        } else if (resp.ErrorType == 3) {

                            // Hide normal popup
                            document.querySelector('.popup-modal.recipe-edit-modal.bookmark-collection-modal').style.display = "none";

                            // Show the popup
                            //console.log(unauthenticatedPopup.parentElement.parentElement);
                            document.querySelector('#recipe_edit_modal_unauthenticated').style.display = "block";
                        }

                        message.innerHTML = resp.ErrorMessage;
                        //recipeCollectionEditForm.scrollIntoView({ block: "start", behavior: "smooth" });
                        //recipeCollectionEditForm.appendChild(message);

                        // Re-Enable click - only on error because on success we have a page reload
                        submitButton.setAttribute("value", submitButtonWording);
                        submitButton.style.opacity = "1";
                        submitButton.removeAttribute("disabled");
                    }
                };
                request.onerror = function () {

                };

                request.send(formdata);
                ///// END XHR Request /////
            });
        }
    }

    if (recipeEditButtons) {
        for (var i = 0; i < recipeEditButtons.length; i++) {
            recipeEditButtons[i].addEventListener('click', function () {
                recipeDialog.style.display = "block";

                var loadingContainer = document.createElement('div');
                loadingContainer.classList.add('swiper-lazy-preloader');
                recipeEditListContainer.innerHTML = '';
                recipeEditListContainer.appendChild(loadingContainer);

                createLoader(recipeEditListContainer);
                var recipeId = this.getAttribute('data-recipe-id');

                var recipeImage = this.previousElementSibling;
                var recipeTitle = this.getAttribute('data-recipe-title')
                recipeEditForm.setAttribute('data-recipe-id', this.getAttribute('data-recipe-id'))

                // drawRecipeTeaser(recipeImage, recipeTitle);

                var title = recipeTitle;
                var image = recipeImage;

                document.querySelector('.recipe-edit__teaser').innerHTML = '';
                var imageCopy = image.cloneNode(true);
                document.querySelector('.recipe-edit__teaser').appendChild(imageCopy);
                var teaserTitle = document.createElement('div');
                teaserTitle.classList.add('recipe-edit__teaser-title');
                teaserTitle.innerHTML = title;
                document.querySelector('.recipe-edit__teaser').appendChild(teaserTitle);

                var image = recipeImage;
                var title = recipeTitle;
                document.querySelector('.recipe-edit__teaser').innerHTML = '';
                var imageCopy = image.cloneNode(true);
                document.querySelector('.recipe-edit__teaser').appendChild(imageCopy);
                var teaserTitle = document.createElement('div');
                teaserTitle.classList.add('recipe-edit__teaser-title');
                teaserTitle.innerHTML = title;
                document.querySelector('.recipe-edit__teaser').appendChild(teaserTitle);

                var formdata = new FormData();
                formdata.append('recipeId', recipeId);

                //sendRecipeInformation(formdata);
                ///// Make XHR Request /////
                var request = new XMLHttpRequest();
                request.open('POST', '/api/sitecore/Recipes/GetCollectionsForRecipe', true);
                request.onloadstart = function () {
                    // loadstart
                }
                request.onload = function () {
                    var resp = JSON.parse(this.response);
                    // loadend
                    // console.log('newXHR Response:');
                    // console.log(this.response); // Hello, world!

                    if (resp.Success) {
                        // getRecipeInformation(resp.Payload);

                        var payload = resp.Payload;
                        removeLoader();
                        var item = [];
                        for (var i = 0; i < payload.Collections.length; i++) {
                            var isChecked = payload.Collections[i].IsActive ? 'checked' : ''
                            var markup =
                                '<div class="form__group form__group--checkbox">' +
                                '<div class="form__checkbox">' +
                                '<label class="form__label--input form__label--checkbox">' + payload.Collections[i].CollectionName +
                                '<input class="form__input--checkbox" type="checkbox" name="CollectionName" data-collection-id="' + payload.Collections[i].CollectionId + '"' + isChecked + ' />' +
                                '<div class="checkmark--checkbox"></div>' +
                                '</label>' +
                                '</div>' +
                                '</div>';
                            item.push(markup);
                        }
                        recipeEditListContainer.innerHTML = item.join("");

                        //alert("Recipe Collections successfully fetched. Inject the button behaviour if no collection was selected");
                        /*
                        let oldCollectionCheckedBox = document.querySelector('input[name="CollectionName"]:checked');
                        let newCollectionInput = document.querySelector('#new-collection-name').value;

                        if (oldCollectionCheckedBox !== null || newCollectionInput !== "") {
                            console.log("Enable Button", "Es ist etwas ausgewählt oder ausgefüllt");
                        } else {
                            console.log("Disable Button", "Es ist NICHTS ausgewählt oder ausgefüllt");
                        }
                        */

                    } else {
                        var message = document.createElement('div');
                        message.classList.add('message');


                        if (resp.ErrorType == 1) {
                            message.classList.add('message--error')

                        } else if (resp.ErrorType == 2) {
                            message.classList.add('message--warning')
                        }

                        message.innerHTML = resp.ErrorMessage;
                        //recipeCollectionEditForm.scrollIntoView({ block: "start", behavior: "smooth" });
                        //recipeCollectionEditForm.appendChild(message);

                        // Re-Enable click - only on error because on success we have a page reload
                        submitButton.setAttribute("value", submitButtonWording);
                        submitButton.style.opacity = "1";
                        submitButton.removeAttribute("disabled");
                    }
                };
                request.onerror = function () {

                };

                request.send(formdata);
                ///// END XHR Request /////
            }, true);
        }
    }

    if (recipeEditForm != null || undefined) {
        recipeEditForm.addEventListener('submit', function (e) {
            e.preventDefault();
            // saveRecipeInformation();

            var nameError = false;
            var newCollectionName = document.getElementById('new-collection-name').value;
            if (newCollectionName.length > 0) {
                if (!checkValidString(newCollectionName)) {
                    nameError = true;
                }
            }
       

            if (!nameError) {
                submitButton.setAttribute("disabled", "disabled");
                submitButton.setAttribute("value", "Bitte warten");
                submitButton.style.opacity = "0.5";
            } else {
                // Show error message, that only specific chars are allowed
                var recipeEditModal = document.querySelector('.popup-modal#recipe_edit_modal');
                if (recipeEditModal.style.display == "block") {
                    recipeEditModal.querySelector('#collectionNameError').style.display = "block";
                } else {
                    document.querySelector('#collectionNameError').style.display = "block";
                }
            }

            var listData = [];
            var collections = document.querySelectorAll('.recipe-edit__collections .form__input--checkbox');
            for (var i = 0; i < collections.length; i++) {
                var collectionItem =
                {
                    "collectionID": collections[i].getAttribute('data-collection-id'),
                    "isActive": collections[i].checked
                };
                listData.push(collectionItem);
            }

            //console.log(collectionItem);
            var recipeEditForm = document.getElementById('recipe-edit');
            var url = recipeEditForm.getAttribute('data-action');
            var formData = new FormData();
            formData.append("redirectUrl", recipeEditForm.getAttribute('data-redirect-url'));
            formData.append("recipeId", recipeEditForm.getAttribute('data-recipe-id'));
            formData.append("NewCollectionName", newCollectionName);
            formData.append("collections", JSON.stringify(listData));
            formData.append('__RequestVerificationToken', recipeEditForm.querySelector('input[name="__RequestVerificationToken"]').value);

            ///// Copied from -> xhrRequest(formData, url, updateUrl); ////
            ///// Make XHR Request /////
            var request = new XMLHttpRequest();
            request.open('POST', url, true);
            request.onloadstart = function () {
                // loadstart
            }
            request.onload = function () {
                var resp = JSON.parse(this.response);
                // loadend

                //console.log('newXHR Response:');
                //console.log(this.response); 

                if (resp.Success) {

                    //// Copied from updateurl() ////
                    var answer = resp.Payload;
                    var rsp = resp;

                    document.querySelector('#recipe_edit_modal .formContainer').style.display = "none";
                    document.querySelector('#recipe_edit_modal').style.overflowY = "hidden";

                    $popupMessages = document.querySelector('#recipe_edit_modal .popup-messages');
                    $popupMessages.style.display = "block";

                    $successMessage = $popupMessages.querySelector('.message--success');
                    $errorMessage = $popupMessages.querySelector('.message--error');

                    if (rsp.Success == true) {
                        //console.log("Success", true);
                        //console.log(rsp);
                        $successMessage.querySelector('.title').innerText = answer.Headline;
                        $successMessage.parentElement.querySelector('.btn').innerText = answer.ButtonText;

                        $successMessage.querySelector('a').setAttribute("href", answer.RecipeCollectionOverviewLink);
                        $successMessage.querySelector('a').innerHTML = answer.Text;

                        $successMessage.style.display = "block";
                        $errorMessage.style.display = "none";

                        if (editMode == true) {
                            editMode = false;
                            gtmEditRecipe(editRecipeName);
                        }


                        // Was it deleted from this current collection?
                        var collectionId = window.location.search.split("=");

                        if (collectionId.length > 1) {
                            collectionId = collectionId[1].split("&")[0];

                            // Check for pseudo-class ::after, checkbox is not working because of custom style
                            var checkboxCheck = document.querySelector('.form__input--checkbox[data-collection-id="' + collectionId + '"]').parentElement.querySelector('.checkmark--checkbox');
                            var testPseudo = window.getComputedStyle(checkboxCheck, ':after').getPropertyValue('display');

                            if (testPseudo == "none") {
                                //console.log("Das Rezept wurde entfernt");
                                document.querySelector('.recipe-teaser.recipe-teaser--edit [data-recipe-id="' + editRecipeId + '"]').parentElement.style.display = "none";

                                // Count down the recipe counter in the collection
                                var counter = document.querySelector('.recipe-collection__count').innerText.split(' ');
                                var number = parseInt(counter[0]) - 1;
                                counter = number + " " + counter[1];
                                document.querySelector('.recipe-collection__count').innerText = counter;
                            }
                        }
                            

                        // GTM: Trigger that a recipe was added to a collection
                        gtmAddRecipeToCollection();

                        // GTM: Trigger when there was a new collection created
                        let newCollectionName = recipeEditForm.querySelector('#new-collection-name').value;
                        if (newCollectionName.length > 0) {
                            gtmCreateRecipeCollection(newCollectionName);
                            recipeEditForm.querySelector('#new-collection-name').value = "";
                        }

                        // Clear input on successful submit
                        newCollectionName = "";
                    } else {
                        //console.log("Success", false);

                        $errorMessage.querySelector('.title').innerText = answer.Text;
                        $errorMessage.parentElement.querySelector('.btn').innerText = answer.ButtonText;

                        $errorMessage.querySelector('p').innerHTML = answer.Text
                        $errorMessage.querySelector('p').style.color = '#3d3d39';
                        $errorMessage.querySelector('p').style.border = '0';

                        $successMessage.style.display = "none";
                        $errorMessage.style.display = "block";
                    }

                    $popupMessages.querySelector('.btn').addEventListener('click', function () {
                        //console.log("click");
                        // Hide overlay
                        document.querySelector('#overlay.overlay').style.display = "none";
                        document.querySelector('.recipe-edit-modal').style.display = "none";

                        var unautheticatedModal = document.querySelector('.popup-modal.recipe-edit-modal.bookmark-collection-modal.unauthenticated');
                        if (unautheticatedModal != null) {
                            unautheticatedModal.style.display = "none";
                        }
                        
                        document.querySelector('html').style.overflowY = "scroll";

                        // Replay the form and messages section (if the user wants to do it again)
                        document.querySelector('#recipe_edit_modal .formContainer').style.display = "block";
                        document.querySelector('#recipe_edit_modal').style.overflowY = "auto";
                        $popupMessages.style.display = "none";

                        submitButton.setAttribute("value", submitButtonWording);
                        submitButton.style.opacity = "1";
                        submitButton.removeAttribute("disabled");
                    });
                    //// End Copied from updateurl() ////

                } else {
                    var message = document.createElement('div');
                    message.classList.add('message');

                    if (resp.ErrorType == 1) {
                        message.classList.add('message--error')

                    } else if (resp.ErrorType == 2) {
                        message.classList.add('message--warning')
                    }

                    message.innerHTML = resp.ErrorMessage;
                    //recipeCollectionEditForm.scrollIntoView({ block: "start", behavior: "smooth" });
                    //recipeCollectionEditForm.appendChild(message);

                    // Re-Enable click - only on error because on success we have a page reload
                    submitButton.setAttribute("value", submitButtonWording);
                    submitButton.style.opacity = "1";
                    submitButton.removeAttribute("disabled");
                }
            };
            request.onerror = function () {

            };

            if (!nameError) {
                request.send(formData);
            }
            ///// END XHR Request /////
        });
    }

    if (closeButton) {
        closeButton.addEventListener("click", function () {
            recipeDialog.style.display = "none";
            editMode = false;
            document.querySelector('#overlay.overlay').style.display = "none";

            // Popup is closed; enable scoll on body
            document.querySelector('html').style.overflowY = "scroll";
        });



        function closeUnauthenticated() {
            document.querySelector('.popup-modal.recipe-edit-modal.bookmark-collection-modal.unauthenticated').style.display = "none";
            editMode = false;
            document.querySelector('#overlay.overlay').style.display = "none";

            // Popup is closed; enable scoll on body
            document.querySelector('html').style.overflowY = "scroll";
        }

        if (closeButtonError !== null) {
            closeButtonError.addEventListener("click", function () {
                closeUnauthenticated();
            });
        }

        var popupCloseError = document.querySelector('#recipe_popup_close_error');
        if (popupCloseError !== null) {
            popupCloseError.addEventListener('click', function () {
                closeUnauthenticated();
            });
        }

    }
};
var backToTopButton = document.getElementById('button__back-to-top');

if (backToTopButton !== null) {

    let intervalId = 0;

    document.addEventListener('scroll', function () {
        if (document.body.scrollTop > 180 || document.documentElement.scrollTop > 180) {
            backToTopButton.classList.add('active');
        } else {
            if (backToTopButton.classList.contains('active')) {
                backToTopButton.classList.remove('active');
            }
        }
    });


    var scrollToTop = function scrollToTop() {
        window.scrollTo({
            top: 0,
            behavior: 'smooth'
        });
}

    backToTopButton.addEventListener('click', scrollToTop);

};
// !!! DEV INFO: THIS IS ONLY A HELPER JS! LATER ALL MODULES HAVE TO GET A NORMAL SPACING SO YOU DON'T NEED SUCH WORKAROUNDS !!! //
locationPath = (window.location.pathname).split("/");
if (locationPath.includes("mein-alnatura") && locationPath.includes("startseite")) {
    navigationTeaser = document.querySelector('div.navigational-teaser');
    if (navigationTeaser !== null) {
        navigationTeaser.style.marginTop = "50px";
    }
}




// Rewrite a login link redirect on "registration complete page"
let longinLinkRewrite = document.querySelector('#loginLinkRewrite');
if (longinLinkRewrite != null) {
    let loginLinkUrlSplit = (window.location.search).split("?loginLink=");
    if (loginLinkUrlSplit.length > 1) {
        longinLinkRewrite.href = loginLinkUrlSplit[1];
    }
}
;
window.addEventListener('load', () => {
    console.log("Loaded page completely");

    urlHash = window.location.hash;
    if (urlHash.length > 1) {
        urlHash = urlHash.substring(1);
        console.log("Jump Debug:", urlHash);

        if (document.getElementById(urlHash) !== null) {
            let jumpContainerTop = document.getElementById(urlHash).offsetTop;
            console.log("Jump Height:", jumpContainerTop);

            window.scrollTo(0, jumpContainerTop);
        } else {
            console.log("Missing Element", "Jump container not found");
        }
    }
});



if (document.getElementById("jumpNavBar") != null || undefined) {
    var jumpNavigation = {
        self: document.getElementById("jumpNavBar"),
        container: document.querySelector('.jumpmark-navigation__container'),
        height: document.getElementById("jumpNavBar").offsetHeight,
        links: document.querySelectorAll('.jumpmark-navigation__link'),
        targets: document.querySelectorAll('.jumpmark__target')

    }

    function makeNavLinksSmooth() {

        var _loop = function _loop(n) {
            if (jumpNavigation.links.hasOwnProperty(n)) {
                jumpNavigation.links[n].addEventListener('click', function (e) {
                    e.preventDefault();

                    var target = document.querySelector(jumpNavigation.links[n].hash);
                    var targetPosition = target.offsetTop;
                    var offsetPosition = targetPosition - jumpNavigation.height;

                    window.scrollTo({
                        top: offsetPosition,
                        behavior: "smooth"
                    });

                   /* jumpToTarget(offsetPosition);*/
                });
            }
        };

        if (typeof jumpNavigation !== 'undefined' && jumpNavigation.links && jumpNavigation.links.length) {
            for (var n in jumpNavigation.links) {
                _loop(n);
            }
        }
    };

    function jumpToTarget(offsetPosition) {
        window.scrollTo({
            top: offsetPosition,
            behavior: "smooth"
        });
    }

    function spyScrolling() {
        if (jumpNavigation !== undefined) {
            var sticky = jumpNavigation.self.offsetTop;
            document.addEventListener('scroll', function () {
                var scrollPos = document.documentElement.scrollTop || document.body.scrollTop;

                if (scrollPos >= sticky) {
                    jumpNavigation.self.classList.add("sticky");
                } else {
                    jumpNavigation.self.classList.remove("sticky");
                }
            });
        }
    };

    function changeLinkState() {       
        if (jumpNavigation !== undefined) {
            var index = jumpNavigation.targets.length;
            var jumpmarkspace = 60; // Jumpmarknavigation (60px)
            var windowScrollY = window.scrollY + jumpmarkspace; // adds jumpmark and window scroll position together so that navigation does not cover the title

            // search backwards the next jumpmark position
            while (--index) {
                // adds previous sibling margin bottom to the scroll position so that the navigation point is marked earlier
                prevSibling = jumpNavigation.targets[index].previousElementSibling;
                prevSiblingMargin = 0;
                if (prevSibling) {
                    prevSiblingMargin = (window.getComputedStyle(prevSibling) || prevSibling.currentStyle).marginBottom;
                    prevSiblingMargin = parseInt(prevSiblingMargin);
                }
                windowScrollYWithprevSiblingMargin = windowScrollY + prevSiblingMargin;

                // exits the while loop when a jump market has been found accordingly
                if (windowScrollYWithprevSiblingMargin >= jumpNavigation.targets[index].offsetTop) {
                    break;
                }
            }
            jumpNavigation.links.forEach(function (link) {
                return link.classList.remove('active');
            });
            jumpNavigation.links[index].classList.add('active');

            var activeLink = document.querySelector('.jumpmark-navigation__link.active');
            //subract margin (offsetLeft) from .jumpmark-navigation__container
            var scrollingLeft = activeLink.offsetLeft - activeLink.closest('.jumpmark-navigation__container').offsetLeft;

            jumpNavigation.container.scrollTo({
                left: scrollingLeft,
                behavior: "smooth"
            });
        }
    };

    function prepareActionOfferJumpmarkNavigation() {
        var addedCategories = [];
        var jumpmarkNavigations = document.getElementsByClassName('jumpmark-navigation__list actionOffers');
        var actionOfferJumpmarkNavigation = jumpmarkNavigations.length == 1 ? jumpmarkNavigations[0] : null;
        if (actionOfferJumpmarkNavigation) {
            var jumpmarks = document.getElementsByClassName("product-teaser product-teaser--promotion");
            for (var index = 0; index < jumpmarks.length; index++) {
                var element = jumpmarks[index];
                var href = element.id;
                var displayName = element.getAttribute("product-category-displayName");
                var categoryName = element.getAttribute("product-category-name");
                if (addedCategories.includes(categoryName)) {
                    continue;
                }

                var markup =
                    '<div class="jumpmark-navigation__item">' +
                    ' <a href="#' +
                    href +
                    '" class="jumpmark-navigation__link">' +
                    displayName +
                    ' </a>' +
                    '</div>';
                actionOfferJumpmarkNavigation.innerHTML += markup;
                addedCategories.push(categoryName);
            }
        }
    }

    if (window.location.hash) {
        var jumpHash = window.location.hash.substring(1);

        var target = document.getElementById(jumpHash);
        var targetPosition = target.offsetTop;
        var offsetPosition = targetPosition - jumpNavigation.offsetHeight;
        jumpToTarget(offsetPosition);
    }


    prepareActionOfferJumpmarkNavigation();
    makeNavLinksSmooth();
    spyScrolling();
    changeLinkState();
    window.addEventListener('scroll', changeLinkState);
};
// Check if we have the container for it
var favStoreProfileContainer = document.querySelector('#favoritestorepreferences-module-container');
if (favStoreProfileContainer !== null) {

    // Change edit-link location to marketfinder
    var changeLink = document.querySelector('[data-id="favorite-store-link"] a').getAttribute("href");
    document.querySelector('a#favoritestorepreferences-module-edit').setAttribute("href", changeLink);

    // Fetch the status of the favorite store
    var favoriteStoreEndpoint = "/api/sitecore/MyAlnatura/GetFavoriteStoreStatus";
    var xhttp = new XMLHttpRequest();
    xhttp.open('POST', favoriteStoreEndpoint, true);
    xhttp.onloadstart = function () {};

    xhttp.onload = function () {
        var response = JSON.parse(this.response);
        var payload = response.Payload;
        var detailContainer = document.querySelector('#favoritestorepreferences-module-status-text');

        if (payload !== null) {
            // Clear status container
            detailContainer.innerHTML = "";

            // Choose specific payload answers, and append them to the status
            var storeDetails = ["StoreName", "Street", "AddressExtension", "PostalCode", "City", "Country"];
            for (var i = 0; i < storeDetails.length; i++) {
                var currentInfo = storeDetails[i];

                var tempContainer = document.createElement('div');
                tempContainer.setAttribute("data-detail", currentInfo);
                tempContainer.innerText = payload[currentInfo];

                detailContainer.append(tempContainer);
            }

            // Change "edit" link wording
            var changeWording = document.querySelector('[data-id="favorite-store-change-store"]').innerText;
            document.querySelector('a#favoritestorepreferences-module-edit').innerText = changeWording.trim();

            // Remove "Status" line
            document.querySelector('.favoritestorepreferences-module__status-label').style.display = "none";
            document.querySelector('#favoritestorepreferences-module-status-text').classList.remove("no-store");
        }
    };

    xhttp.onerror = function () {};
    xhttp.send();
};
// Devstate
let devstate = false;
function devlog(message) {
    if (devstate === true) {
        console.log("GTM DEV:", message);
    }
}


// Init GTM with user state
if (document.querySelector('.header__login__target') !== null) {
    var userLoginState = document.querySelector('.header__login__target').getAttribute('data-loggedin');
    var userLoginRole = "Besucher";
    if (userLoginState !== 'False') {
        userLoginRole = "Mitglied";
    }

    window.dataLayer = window.dataLayer || [];
    window.dataLayer.push({
        'loginStatus': userLoginRole
    });
}



//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Account Logout
function gtmLogoutAccount() {
    devlog("Logout account");
    
    window.dataLayer.push({
        'eventCategory': 'Account',
        'eventAction': 'Ausloggen',
        'eventLabel': window.location.pathname,
        'event': 'event-tracking'
    });
}


//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Account Login
if (document.querySelector('#gtm-dashboard') !== null && document.referrer != '') {
    refHost = (document.referrer).split('/')[2];
    if (window.location.host != refHost) {
        devlog("Login account");

        window.dataLayer.push({
            'eventCategory': 'Account',
            'eventAction': 'Einloggen',
            'event': 'event-tracking'
        });
    }
}


//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// FUNCTION: Call on page view
function gtmPageviewEvent(id, evtCat, evtAct) {
    if (document.querySelector(id) !== null) {
        devlog(evtCat + " " + evtAct);

        window.dataLayer.push({
            'eventCategory': evtCat,
            'eventAction': evtAct,
            'event': 'event-tracking'
        });
    }
}


// Account Creation
gtmPageviewEvent("#gtm-register-pending", "Account", "Erstellen");

// Account Creation Complete
gtmPageviewEvent("#gtm-register-complete", "Account", "Bestätigen");



//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Account Deletion
function gtmDeleteAccount() {
    devlog("Delete account");

    window.dataLayer.push({
        'eventCategory': 'Account',
        'eventAction': 'Löschen',
        'event': 'event-tracking'
    });
}


//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Adding/Removing an favorite store
function gtmChangeFavStore(mode, storeID) {
    devlog("Change Favorite Store as " + mode);

    let modeText = "";
    if (mode == "add") {
        modeText = "Hinzufügen";
    } else {
        modeText = "Entfernen";
    }

    window.dataLayer.push({
        'eventCategory': 'Markt Favorisierung',
        'eventAction': modeText,
        'eventLabel': storeID,
        'event': 'event-tracking'
    });
}

//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Newsletter Subscription/Unsubscription via profile management
function gtmNewsletterAction() {
    devlog("Newsletter Subscription/Unsubscription Profil");

    let status = document.querySelector('#newsletterpreferences-module-edit-container').getAttribute('data-subscribed');
    if (status == "true") {
        // So we are currently subscribed, so we are on an unsubscribe process
        window.dataLayer.push({
            'eventCategory': 'Newsletter',
            'eventAction': 'KVB-Newsletter Abmeldung',
            'event': 'event-tracking'
        });
    } else {
        // So we are currently UNsubscribed, so we are on a subscribe process
        window.dataLayer.push({
            'eventCategory': 'Newsletter',
            'eventAction': 'KVB-Newsletter Anmeldung',
            'eventLabel': 'Profilverwaltung',
            'event': 'event-tracking'
        });
    }
}

//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Add recipe to collection
function gtmAddRecipeToCollection() {
    devlog("Add recipe to collection");

    // Assamble the name as wanted
    // e.g. 'Bataviasalat mit Limetten-Honig-Dressing und Ringelblumenblüten-105150'
    let recipeNameContainer = document.querySelector('#recipeName');
    if (recipeNameContainer === null) {
        // Collection view
        recipeNameContainer = document.querySelector('.recipe-edit__teaser-title');
    }
    let recipeName = recipeNameContainer.innerText;


    let recipeId;
    let recipeIdContainer = document.querySelector('div.recipe-detail-page div.recipe');
    if (recipeIdContainer === null) {
        // Collection view
        recipeId = recipeNameContainer.parentElement.parentElement.querySelector('form').getAttribute('data-recipe-id')
    } else {
        // RDP view
        recipeId = recipeIdContainer.getAttribute('data-id');
    }

    let gtmRecipeName = recipeName + "-" + recipeId;

    window.dataLayer.push({
        'eventCategory': 'Rezeptsammlung',
        'eventAction': 'Rezept hinzugefügt',
        'eventLabel': gtmRecipeName,
        'event': 'event-tracking'
    });

}

//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Create new recipe collection
function gtmCreateRecipeCollection(collectionName) {
    devlog("Collection was created (" + collectionName + ")");

    window.dataLayer.push({
        'eventCategory': 'Rezeptsammlung',
        'eventAction': 'Neue Rezeptkategorie erstellt',
        'eventLabel': collectionName.toLowerCase(),
        'event': 'event-tracking'
    });
}


//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Edit recipe
function gtmEditRecipe(recipeName) {
    devlog("Recipe was edited (" + recipeName + ")");

    window.dataLayer.push({
        'eventCategory': 'Rezeptsammlung',
        'eventAction': 'Rezept bearbeitet',
        'eventLabel': recipeName,
        'event': 'event-tracking'
    });
}


//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Delete recipe collection
function gtmDeleteRecipeCollection(collectionName) {
    devlog("Collection was deleted (" + collectionName + ")");

    window.dataLayer.push({
        'eventCategory': 'Rezeptsammlung',
        'eventAction': 'Rezeptkategorie gelöscht',
        'eventLabel': collectionName.toLowerCase(),
        'event': 'event-tracking'
    });
}



//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Rename recipe collection
function gtmRenameRecipeCollection(collectionName) {
    devlog("Collection was deleted (" + collectionName + ")");

    window.dataLayer.push({
        'eventCategory': 'Rezeptsammlung',
        'eventAction': 'Rezeptkategorie umbenannt',
        'eventLabel': collectionName.toLowerCase(),
        'event': 'event-tracking'
    });
}


//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Register to birthday present
function gtmRegisterBirthday() {
    devlog("Anmeldung zum Geburtstagsgeschenk");

    window.dataLayer.push({
        'eventCategory': 'Geburtstagspräsent',
        'eventAction': 'Anmeldung',
        'event': 'event-tracking'
    });
}

// Un-Register to birthday present
function gtmUnregisterBirthday() {
    devlog("Abmeldung vom Geburtstagsgeschenk");

    window.dataLayer.push({
        'eventCategory': 'Geburtstagspräsent',
        'eventAction': 'Abmeldung',
        'event': 'event-tracking'
    });
}

//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

// Register to product testing
function gtmRegisterTesting(bundleId) {
    devlog("Anmeldung zum Produkt Testing");

    window.dataLayer.push({
        'eventCategory': 'Produkt Testing',
        'eventAction': 'Anmeldung',
        'eventLabel': bundleId,
        'event': 'event-tracking'
    });
}



//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////


// Address
function gtmAddressAction(mode) {
    if (mode == "Update") {
        debugText = "Change address of account";
        eventAction = "Adresse ändern";
    } else {
        debugText = "Add address to account";
        eventAction = "Adresse hinzufügen";
    }

    devlog(debugText);

    window.dataLayer.push({
        'eventCategory': 'Account',
        'eventAction': eventAction,
        'eventLabel': window.location.pathname,
        'event': 'event-tracking'
    });
};
(function (window, undefined) { "use strict"; var LIBVERSION = "0.7.31", EMPTY = "", UNKNOWN = "?", FUNC_TYPE = "function", UNDEF_TYPE = "undefined", OBJ_TYPE = "object", STR_TYPE = "string", MAJOR = "major", MODEL = "model", NAME = "name", TYPE = "type", VENDOR = "vendor", VERSION = "version", ARCHITECTURE = "architecture", CONSOLE = "console", MOBILE = "mobile", TABLET = "tablet", SMARTTV = "smarttv", WEARABLE = "wearable", EMBEDDED = "embedded", UA_MAX_LENGTH = 255; var AMAZON = "Amazon", APPLE = "Apple", ASUS = "ASUS", BLACKBERRY = "BlackBerry", BROWSER = "Browser", CHROME = "Chrome", EDGE = "Edge", FIREFOX = "Firefox", GOOGLE = "Google", HUAWEI = "Huawei", LG = "LG", MICROSOFT = "Microsoft", MOTOROLA = "Motorola", OPERA = "Opera", SAMSUNG = "Samsung", SONY = "Sony", XIAOMI = "Xiaomi", ZEBRA = "Zebra", FACEBOOK = "Facebook"; var extend = function (regexes, extensions) { var mergedRegexes = {}; for (var i in regexes) { if (extensions[i] && extensions[i].length % 2 === 0) { mergedRegexes[i] = extensions[i].concat(regexes[i]) } else { mergedRegexes[i] = regexes[i] } } return mergedRegexes }, enumerize = function (arr) { var enums = {}; for (var i = 0; i < arr.length; i++) { enums[arr[i].toUpperCase()] = arr[i] } return enums }, has = function (str1, str2) { return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false }, lowerize = function (str) { return str.toLowerCase() }, majorize = function (version) { return typeof version === STR_TYPE ? version.replace(/[^\d\.]/g, EMPTY).split(".")[0] : undefined }, trim = function (str, len) { if (typeof str === STR_TYPE) { str = str.replace(/^\s\s*/, EMPTY).replace(/\s\s*$/, EMPTY); return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH) } }; var rgxMapper = function (ua, arrays) { var i = 0, j, k, p, q, matches, match; while (i < arrays.length && !matches) { var regex = arrays[i], props = arrays[i + 1]; j = k = 0; while (j < regex.length && !matches) { matches = regex[j++].exec(ua); if (!!matches) { for (p = 0; p < props.length; p++) { match = matches[++k]; q = props[p]; if (typeof q === OBJ_TYPE && q.length > 0) { if (q.length === 2) { if (typeof q[1] == FUNC_TYPE) { this[q[0]] = q[1].call(this, match) } else { this[q[0]] = q[1] } } else if (q.length === 3) { if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) { this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined } else { this[q[0]] = match ? match.replace(q[1], q[2]) : undefined } } else if (q.length === 4) { this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined } } else { this[q] = match ? match : undefined } } } } i += 2 } }, strMapper = function (str, map) { for (var i in map) { if (typeof map[i] === OBJ_TYPE && map[i].length > 0) { for (var j = 0; j < map[i].length; j++) { if (has(map[i][j], str)) { return i === UNKNOWN ? undefined : i } } } else if (has(map[i], str)) { return i === UNKNOWN ? undefined : i } } return str }; var oldSafariMap = { "1.0": "/8", 1.2: "/1", 1.3: "/3", "2.0": "/412", "2.0.2": "/416", "2.0.3": "/417", "2.0.4": "/419", "?": "/" }, windowsVersionMap = { ME: "4.90", "NT 3.11": "NT3.51", "NT 4.0": "NT4.0", 2e3: "NT 5.0", XP: ["NT 5.1", "NT 5.2"], Vista: "NT 6.0", 7: "NT 6.1", 8: "NT 6.2", 8.1: "NT 6.3", 10: ["NT 6.4", "NT 10.0"], RT: "ARM" }; var regexes = { browser: [[/\b(?:crmo|crios)\/([\w\.]+)/i], [VERSION, [NAME, "Chrome"]], [/edg(?:e|ios|a)?\/([\w\.]+)/i], [VERSION, [NAME, "Edge"]], [/(opera mini)\/([-\w\.]+)/i, /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i, /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i], [NAME, VERSION], [/opios[\/ ]+([\w\.]+)/i], [VERSION, [NAME, OPERA + " Mini"]], [/\bopr\/([\w\.]+)/i], [VERSION, [NAME, OPERA]], [/(kindle)\/([\w\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, /(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i, /(ba?idubrowser)[\/ ]?([\w\.]+)/i, /(?:ms|\()(ie) ([\w\.]+)/i, /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([-\w\.]+)/i, /(weibo)__([\d\.]+)/i], [NAME, VERSION], [/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i], [VERSION, [NAME, "UC" + BROWSER]], [/\bqbcore\/([\w\.]+)/i], [VERSION, [NAME, "WeChat(Win) Desktop"]], [/micromessenger\/([\w\.]+)/i], [VERSION, [NAME, "WeChat"]], [/konqueror\/([\w\.]+)/i], [VERSION, [NAME, "Konqueror"]], [/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i], [VERSION, [NAME, "IE"]], [/yabrowser\/([\w\.]+)/i], [VERSION, [NAME, "Yandex"]], [/(avast|avg)\/([\w\.]+)/i], [[NAME, /(.+)/, "$1 Secure " + BROWSER], VERSION], [/\bfocus\/([\w\.]+)/i], [VERSION, [NAME, FIREFOX + " Focus"]], [/\bopt\/([\w\.]+)/i], [VERSION, [NAME, OPERA + " Touch"]], [/coc_coc\w+\/([\w\.]+)/i], [VERSION, [NAME, "Coc Coc"]], [/dolfin\/([\w\.]+)/i], [VERSION, [NAME, "Dolphin"]], [/coast\/([\w\.]+)/i], [VERSION, [NAME, OPERA + " Coast"]], [/miuibrowser\/([\w\.]+)/i], [VERSION, [NAME, "MIUI " + BROWSER]], [/fxios\/([-\w\.]+)/i], [VERSION, [NAME, FIREFOX]], [/\bqihu|(qi?ho?o?|360)browser/i], [[NAME, "360 " + BROWSER]], [/(oculus|samsung|sailfish)browser\/([\w\.]+)/i], [[NAME, /(.+)/, "$1 " + BROWSER], VERSION], [/(comodo_dragon)\/([\w\.]+)/i], [[NAME, /_/g, " "], VERSION], [/(electron)\/([\w\.]+) safari/i, /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, /m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i], [NAME, VERSION], [/(metasr)[\/ ]?([\w\.]+)/i, /(lbbrowser)/i], [NAME], [/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i], [[NAME, FACEBOOK], VERSION], [/safari (line)\/([\w\.]+)/i, /\b(line)\/([\w\.]+)\/iab/i, /(chromium|instagram)[\/ ]([-\w\.]+)/i], [NAME, VERSION], [/\bgsa\/([\w\.]+) .*safari\//i], [VERSION, [NAME, "GSA"]], [/headlesschrome(?:\/([\w\.]+)| )/i], [VERSION, [NAME, CHROME + " Headless"]], [/ wv\).+(chrome)\/([\w\.]+)/i], [[NAME, CHROME + " WebView"], VERSION], [/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i], [VERSION, [NAME, "Android " + BROWSER]], [/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i], [NAME, VERSION], [/version\/([\w\.]+) .*mobile\/\w+ (safari)/i], [VERSION, [NAME, "Mobile Safari"]], [/version\/([\w\.]+) .*(mobile ?safari|safari)/i], [VERSION, NAME], [/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i], [NAME, [VERSION, strMapper, oldSafariMap]], [/(webkit|khtml)\/([\w\.]+)/i], [NAME, VERSION], [/(navigator|netscape\d?)\/([-\w\.]+)/i], [[NAME, "Netscape"], VERSION], [/mobile vr; rv:([\w\.]+)\).+firefox/i], [VERSION, [NAME, FIREFOX + " Reality"]], [/ekiohf.+(flow)\/([\w\.]+)/i, /(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i, /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i, /(firefox)\/([\w\.]+)/i, /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i, /(links) \(([\w\.]+)/i], [NAME, VERSION]], cpu: [[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i], [[ARCHITECTURE, "amd64"]], [/(ia32(?=;))/i], [[ARCHITECTURE, lowerize]], [/((?:i[346]|x)86)[;\)]/i], [[ARCHITECTURE, "ia32"]], [/\b(aarch64|arm(v?8e?l?|_?64))\b/i], [[ARCHITECTURE, "arm64"]], [/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i], [[ARCHITECTURE, "armhf"]], [/windows (ce|mobile); ppc;/i], [[ARCHITECTURE, "arm"]], [/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [/(sun4\w)[;\)]/i], [[ARCHITECTURE, "sparc"]], [/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i], [[ARCHITECTURE, lowerize]]], device: [[/\b(sch-i[89]0\d|shw-m380s|sm-[pt]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i, /samsung[- ]([-\w]+)/i, /sec-(sgh\w+)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [/\((ip(?:hone|od)[\w ]*);/i], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [/\((ipad);[-\w\),; ]+apple/i, /applecoremedia\/[\w\.]+ \((ipad)/i, /\b(ipad)\d\d?,\d\d?[;\]].+ios/i], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [/(?:huawei|honor)([-\w ]+)[;\)]/i, /\b(nexus 6p|\w{2,4}-[atu]?[ln][01259x][012359][an]?)\b(?!.+d\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [/\b(poco[\w ]+)(?: bui|\))/i, /\b; (\w+) build\/hm\1/i, /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i], [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, MOBILE]], [/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i], [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, TABLET]], [/; (\w+) bui.+ oppo/i, /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i], [MODEL, [VENDOR, "OPPO"], [TYPE, MOBILE]], [/vivo (\w+)(?: bui|\))/i, /\b(v[12]\d{3}\w?[at])(?: bui|;)/i], [MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]], [/\b(rmx[12]\d{3})(?: bui|;|\))/i], [MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]], [/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i, /\bmot(?:orola)?[- ](\w*)/i, /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [/\b(mz60\d|xoom[2 ]{0,2}) build\//i], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i, /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i, /\blg-?([\d\w]+) bui/i], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [/(ideatab[-\w ]+)/i, /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i], [MODEL, [VENDOR, "Lenovo"], [TYPE, TABLET]], [/(?:maemo|nokia).*(n900|lumia \d+)/i, /nokia[-_ ]?([-\w\.]*)/i], [[MODEL, /_/g, " "], [VENDOR, "Nokia"], [TYPE, MOBILE]], [/(pixel c)\b/i], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [/droid.+ ([c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [/sony tablet [ps]/i, /\b(?:sony)?sgp\w+(?: bui|\))/i], [[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE, TABLET]], [/ (kb2005|in20[12]5|be20[12][59])\b/i, /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i], [MODEL, [VENDOR, "OnePlus"], [TYPE, MOBILE]], [/(alexa)webm/i, /(kf[a-z]{2}wi)( bui|\))/i, /(kf[a-z]+)( bui|\)).+silk\//i], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i], [[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE, MOBILE]], [/(playbook);[-\w\),; ]+(rim)/i], [MODEL, VENDOR, [TYPE, TABLET]], [/\b((?:bb[a-f]|st[hv])100-\d)/i, /\(bb10; (\w+)/i], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [/(nexus 9)/i], [MODEL, [VENDOR, "HTC"], [TYPE, TABLET]], [/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i, /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i, /(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\w]*)/i], [VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]], [/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i], [MODEL, [VENDOR, "Acer"], [TYPE, TABLET]], [/droid.+; (m[1-5] note) bui/i, /\bmz-([-\w]{2,})/i], [MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]], [/\b(sh-?[altvz]?\d\d[a-ekm]?)/i], [MODEL, [VENDOR, "Sharp"], [TYPE, MOBILE]], [/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i, /(hp) ([\w ]+\w)/i, /(asus)-?(\w+)/i, /(microsoft); (lumia[\w ]+)/i, /(lenovo)[-_ ]?([-\w]+)/i, /(jolla)/i, /(oppo) ?([\w ]+) bui/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(archos) (gamepad2?)/i, /(hp).+(touchpad(?!.+tablet)|tablet)/i, /(kindle)\/([\w\.]+)/i, /(nook)[\w ]+build\/(\w+)/i, /(dell) (strea[kpr\d ]*[\dko])/i, /(le[- ]+pan)[- ]+(\w{1,9}) bui/i, /(trinity)[- ]*(t\d{3}) bui/i, /(gigaset)[- ]+(q\w{1,9}) bui/i, /(vodafone) ([\w ]+)(?:\)| bui)/i], [VENDOR, MODEL, [TYPE, TABLET]], [/(surface duo)/i], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [/droid [\d\.]+; (fp\du?)(?: b|\))/i], [MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]], [/(u304aa)/i], [MODEL, [VENDOR, "AT&T"], [TYPE, MOBILE]], [/\bsie-(\w*)/i], [MODEL, [VENDOR, "Siemens"], [TYPE, MOBILE]], [/\b(rct\w+) b/i], [MODEL, [VENDOR, "RCA"], [TYPE, TABLET]], [/\b(venue[\d ]{2,7}) b/i], [MODEL, [VENDOR, "Dell"], [TYPE, TABLET]], [/\b(q(?:mv|ta)\w+) b/i], [MODEL, [VENDOR, "Verizon"], [TYPE, TABLET]], [/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i], [MODEL, [VENDOR, "Barnes & Noble"], [TYPE, TABLET]], [/\b(tm\d{3}\w+) b/i], [MODEL, [VENDOR, "NuVision"], [TYPE, TABLET]], [/\b(k88) b/i], [MODEL, [VENDOR, "ZTE"], [TYPE, TABLET]], [/\b(nx\d{3}j) b/i], [MODEL, [VENDOR, "ZTE"], [TYPE, MOBILE]], [/\b(gen\d{3}) b.+49h/i], [MODEL, [VENDOR, "Swiss"], [TYPE, MOBILE]], [/\b(zur\d{3}) b/i], [MODEL, [VENDOR, "Swiss"], [TYPE, TABLET]], [/\b((zeki)?tb.*\b) b/i], [MODEL, [VENDOR, "Zeki"], [TYPE, TABLET]], [/\b([yr]\d{2}) b/i, /\b(dragon[- ]+touch |dt)(\w{5}) b/i], [[VENDOR, "Dragon Touch"], MODEL, [TYPE, TABLET]], [/\b(ns-?\w{0,9}) b/i], [MODEL, [VENDOR, "Insignia"], [TYPE, TABLET]], [/\b((nxa|next)-?\w{0,9}) b/i], [MODEL, [VENDOR, "NextBook"], [TYPE, TABLET]], [/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i], [[VENDOR, "Voice"], MODEL, [TYPE, MOBILE]], [/\b(lvtel\-)?(v1[12]) b/i], [[VENDOR, "LvTel"], MODEL, [TYPE, MOBILE]], [/\b(ph-1) /i], [MODEL, [VENDOR, "Essential"], [TYPE, MOBILE]], [/\b(v(100md|700na|7011|917g).*\b) b/i], [MODEL, [VENDOR, "Envizen"], [TYPE, TABLET]], [/\b(trio[-\w\. ]+) b/i], [MODEL, [VENDOR, "MachSpeed"], [TYPE, TABLET]], [/\btu_(1491) b/i], [MODEL, [VENDOR, "Rotor"], [TYPE, TABLET]], [/(shield[\w ]+) b/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, TABLET]], [/(sprint) (\w+)/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(kin\.[onetw]{3})/i], [[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [/(ouya)/i, /(nintendo) ([wids3utch]+)/i], [VENDOR, MODEL, [TYPE, CONSOLE]], [/droid.+; (shield) bui/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, CONSOLE]], [/(playstation [345portablevi]+)/i], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [/\b(xbox(?: one)?(?!; xbox))[\); ]/i], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [/smart-tv.+(samsung)/i], [VENDOR, [TYPE, SMARTTV]], [/hbbtv.+maple;(\d+)/i], [[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i], [[VENDOR, LG], [TYPE, SMARTTV]], [/(apple) ?tv/i], [VENDOR, [MODEL, APPLE + " TV"], [TYPE, SMARTTV]], [/crkey/i], [[MODEL, CHROME + "cast"], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [/droid.+aft(\w)( bui|\))/i], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [/\(dtv[\);].+(aquos)/i], [MODEL, [VENDOR, "Sharp"], [TYPE, SMARTTV]], [/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, /hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i], [[TYPE, SMARTTV]], [/((pebble))app/i], [VENDOR, MODEL, [TYPE, WEARABLE]], [/droid.+; (glass) \d/i], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [/droid.+; (wt63?0{2,3})\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [/(quest( 2)?)/i], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i], [VENDOR, [TYPE, EMBEDDED]], [/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i], [MODEL, [TYPE, MOBILE]], [/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i], [MODEL, [TYPE, TABLET]], [/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i], [[TYPE, TABLET]], [/(phone|mobile(?:[;\/]| safari)|pda(?=.+windows ce))/i], [[TYPE, MOBILE]], [/(android[-\w\. ]{0,9});.+buil/i], [MODEL, [VENDOR, "Generic"]]], engine: [[/windows.+ edge\/([\w\.]+)/i], [VERSION, [NAME, EDGE + "HTML"]], [/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i], [VERSION, [NAME, "Blink"]], [/(presto)\/([\w\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, /ekioh(flow)\/([\w\.]+)/i, /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, /(icab)[\/ ]([23]\.[\d\.]+)/i], [NAME, VERSION], [/rv\:([\w\.]{1,9})\b.+(gecko)/i], [VERSION, NAME]], os: [[/microsoft (windows) (vista|xp)/i], [NAME, VERSION], [/(windows) nt 6\.2; (arm)/i, /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i, /(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i], [NAME, [VERSION, strMapper, windowsVersionMap]], [/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i], [[NAME, "Windows"], [VERSION, strMapper, windowsVersionMap]], [/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, /cfnetwork\/.+darwin/i], [[VERSION, /_/g, "."], [NAME, "iOS"]], [/(mac os x) ?([\w\. ]*)/i, /(macintosh|mac_powerpc\b)(?!.+haiku)/i], [[NAME, "Mac OS"], [VERSION, /_/g, "."]], [/droid ([\w\.]+)\b.+(android[- ]x86)/i], [VERSION, NAME], [/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i, /(blackberry)\w*\/([\w\.]*)/i, /(tizen|kaios)[\/ ]([\w\.]+)/i, /\((series40);/i], [NAME, VERSION], [/\(bb(10);/i], [VERSION, [NAME, BLACKBERRY]], [/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i], [VERSION, [NAME, "Symbian"]], [/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i], [VERSION, [NAME, FIREFOX + " OS"]], [/web0s;.+rt(tv)/i, /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i], [VERSION, [NAME, "webOS"]], [/crkey\/([\d\.]+)/i], [VERSION, [NAME, CHROME + "cast"]], [/(cros) [\w]+ ([\w\.]+\w)/i], [[NAME, "Chromium OS"], VERSION], [/(nintendo|playstation) ([wids345portablevuch]+)/i, /(xbox); +xbox ([^\);]+)/i, /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, /(mint)[\/\(\) ]?(\w*)/i, /(mageia|vectorlinux)[; ]/i, /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i, /(hurd|linux) ?([\w\.]*)/i, /(gnu) ?([\w\.]*)/i, /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, /(haiku) (\w+)/i], [NAME, VERSION], [/(sunos) ?([\w\.\d]*)/i], [[NAME, "Solaris"], VERSION], [/((?:open)?solaris)[-\/ ]?([\w\.]*)/i, /(aix) ((\d)(?=\.|\)| )[\w\.])*/i, /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, /(unix) ?([\w\.]*)/i], [NAME, VERSION]] }; var UAParser = function (ua, extensions) { if (typeof ua === OBJ_TYPE) { extensions = ua; ua = undefined } if (!(this instanceof UAParser)) { return new UAParser(ua, extensions).getResult() } var _ua = ua || (typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent ? window.navigator.userAgent : EMPTY); var _rgxmap = extensions ? extend(regexes, extensions) : regexes; this.getBrowser = function () { var _browser = {}; _browser[NAME] = undefined; _browser[VERSION] = undefined; rgxMapper.call(_browser, _ua, _rgxmap.browser); _browser.major = majorize(_browser.version); return _browser }; this.getCPU = function () { var _cpu = {}; _cpu[ARCHITECTURE] = undefined; rgxMapper.call(_cpu, _ua, _rgxmap.cpu); return _cpu }; this.getDevice = function () { var _device = {}; _device[VENDOR] = undefined; _device[MODEL] = undefined; _device[TYPE] = undefined; rgxMapper.call(_device, _ua, _rgxmap.device); return _device }; this.getEngine = function () { var _engine = {}; _engine[NAME] = undefined; _engine[VERSION] = undefined; rgxMapper.call(_engine, _ua, _rgxmap.engine); return _engine }; this.getOS = function () { var _os = {}; _os[NAME] = undefined; _os[VERSION] = undefined; rgxMapper.call(_os, _ua, _rgxmap.os); return _os }; this.getResult = function () { return { ua: this.getUA(), browser: this.getBrowser(), engine: this.getEngine(), os: this.getOS(), device: this.getDevice(), cpu: this.getCPU() } }; this.getUA = function () { return _ua }; this.setUA = function (ua) { _ua = typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua; return this }; this.setUA(_ua); return this }; UAParser.VERSION = LIBVERSION; UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]); UAParser.CPU = enumerize([ARCHITECTURE]); UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]); UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]); if (typeof exports !== UNDEF_TYPE) { if (typeof module !== UNDEF_TYPE && module.exports) { exports = module.exports = UAParser } exports.UAParser = UAParser } else { if (typeof define === FUNC_TYPE && define.amd) { define(function () { return UAParser }) } else if (typeof window !== UNDEF_TYPE) { window.UAParser = UAParser } } var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto); if ($ && !$.ua) { var parser = new UAParser; $.ua = parser.getResult(); $.ua.get = function () { return parser.getUA() }; $.ua.set = function (ua) { parser.setUA(ua); var result = parser.getResult(); for (var prop in result) { $.ua[prop] = result[prop] } } } })(typeof window === "object" ? window : this);;
var recipeCollectionDeleteForm = document.getElementById('recipe-collection-delete');


if (recipeCollectionDeleteForm != null || undefined) {
    var recipeCollectionDeleteSubmit = function recipeCollectionDeleteSubmit(event) {

        // Prevent multiple clicks
        submitButton = document.querySelector('#recipe-collection-delete input[type="submit"]');
        submitButtonWording = submitButton.getAttribute("value");
        submitButton.setAttribute("disabled", "disabled");
        submitButton.setAttribute("value", "Bitte warten");
        submitButton.style.opacity = "0.5";

        event.preventDefault();
        var formData = document.getElementById('recipe-collection-delete');
        var formActionUrl = recipeCollectionDeleteForm.getAttribute('data-action');
        var request = new XMLHttpRequest();
        request.open('POST', formActionUrl, true);

        request.onloadstart = function () {
            // loadstart
        }

        request.onload = function () {
            var resp = JSON.parse(this.response);
            // loadend

            if (resp.Success) {
                // GTM Tracking: Delete Recipe Collection
                let collectionName = document.querySelector('#collection-name').value;
                gtmDeleteRecipeCollection(collectionName);

                if (resp.Payload.RedirectUrl.includes("alnatura")) {
                    window.location = resp.Payload.RedirectUrl;
                }

            } else {
                var message = document.createElement('div');
                message.classList.add('message');


                if (resp.ErrorType == 1) {
                    message.classList.add('message--error')

                } else if (resp.ErrorType == 2) {
                    message.classList.add('message--warning')
                }

                message.innerHTML = resp.ErrorMessage;
                //recipeCollectionEditForm.scrollIntoView({ block: "start", behavior: "smooth" });
                //recipeCollectionEditForm.appendChild(message);

                // Reset button style because we have to do it again!
                submitButton.setAttribute("value", submitButtonWording);
                submitButton.style.opacity = "1";

                // Re-Enable click
                submitButton.removeAttribute("disabled");
            }

        };
        request.onerror = function () {

        };

        request.send(new FormData(formData));

    }


    recipeCollectionDeleteForm.addEventListener('submit', recipeCollectionDeleteSubmit);
};
var newsletterFormLong = document.getElementById('newsletter-registration-long');
var newsletterSelectStores = document.querySelector('.js-choices-stores');


var honeyPotName = document.getElementById('form-long-name');
var honeyPotEmail = document.getElementById('form-long-email');

if (newsletterFormLong !== null) {
    var choices = new Choices(newsletterSelectStores);
    var newsletterFormLongMessage = newsletterFormLong.querySelector('[data-newsletter-message-container]');

    var newsletterFormLongAction = newsletterFormLong.getAttribute('data-form-action');

    newsletterFormLong.addEventListener('change', function () {
        var selectStores = document.querySelector('[data-newsletter-form-conditional]');

        if (document.getElementById('filialkunde2').checked) {
            selectStores.classList.remove('form--hidden');
        } else if (document.getElementById('filialkunde1').checked) {
            selectStores.classList.add('form--hidden');
        }
    });

    var formSend = function formSend(formData) {
        var request = new XMLHttpRequest();
        request.open('POST', newsletterFormLongAction, true);

        request.onloadstart = function () {
            newsletterFormLong.classList.add('loading')
        }

        request.onload = function () {
            var resp = JSON.parse(this.response);
            newsletterFormLong.classList.remove('loading');

            if (resp.Success) {
                dataLayer.push({
                    'eventCategory': 'Newsletter',                            //static value
                    'eventAction': 'Formular erfolgreich versendet: Seite',   //static value for page
                    'eventLabel': location.pathname,                          //current page path       
                    'event': 'event-tracking'                                 //static value
                });
                window.location = resp.Payload.RedirectUrl;

            } else {
                var message = document.createElement('div');
                message.classList.add('message');


                if (resp.ErrorType == 1) {
                    message.classList.add('message--error')

                } else if (resp.ErrorType == 2) {
                    message.classList.add('message--warning')
                }

                message.innerHTML = resp.ErrorMessage;
                newsletterFormLong.scrollIntoView({ block: "start", behavior: "smooth" });
                newsletterFormLongMessage.innerHTML = "";
                newsletterFormLongMessage.append(message);

                dataLayer.push({
                    'eventCategory': 'Newsletter',                            //static value
                    'eventAction': 'Formular Fehler: Seite',                  //static value for page
                    'eventLabel': resp.ErrorMessage,                           //text of the error message       
                    'event': 'event-tracking'                                 //static value
                });
            }

        };
        request.onerror = function () {

        };

        request.send(new FormData(formData));
    }

    var formLongSubmit = function formLongSubmit(event) {
        var honeyPotName = document.getElementById('form-long-name');
        var honeyPotNameValue = honeyPotName.value.length;
        var honeyPotEmail = document.getElementById('form-long-email');
        var honeyPotEmailValue = honeyPotEmail.value.length;
        event.preventDefault();
        if (honeyPotNameValue === 0 && honeyPotEmailValue === 0) {
            var formElement = document.getElementById("newsletter-registration-long");

            if (document.getElementById("RecaptchaSiteKey") != undefined) {
                var siteKey = document.getElementById("RecaptchaSiteKey").getAttribute("key");
                grecaptcha.ready(function () {
                    grecaptcha.execute(siteKey, { action: 'submit' }).then(function (token) {
                        document.getElementById('newsletter-full-token').value = token;
                        formSend(formElement);
                    });
                });
            } else {
                formSend(formElement);
            }

        }

    }

    newsletterFormLong.addEventListener('submit', formLongSubmit);
};
const contactform = document.getElementById('contactform-long');
var honeyPotName = document.getElementById('form-contact-name');
var honeyPotEmail = document.getElementById('form-contact-email');
//var senderInfoField = document.getElementById('contact-senderInfo');
var messageField = document.getElementById('contact-textarea');
var hijackTopic = false;


function fetchWriteSysInfo() {
    var parser = new UAParser();
    var result = parser.getResult();

    var deviceString;
    if (result.device.type === undefined) {
        deviceString = "Desktop/Laptop (" + result.os.name + " - Version: " + result.os.version + ")";
    } else {
        deviceString = result.device.vendor + " (" + result.device.model + ")";
    }

    var browserString = result.browser.name + " (" + result.browser.version + ")";

    var currentDate = new Date();
    var currentTimestamp = currentDate.getDate() + "."
        + (currentDate.getMonth() + 1) + "."
        + currentDate.getFullYear() + ", "
        + ("0" + currentDate.getHours()).slice(-2) + ":"
        + ("0" + currentDate.getMinutes()).slice(-2) + ":"
        + ("0" + currentDate.getSeconds()).slice(-2);


    // Write the inputs
    deviceFormField.querySelector('input').value = deviceString;
    browserFormField.querySelector('input').value = browserString;
    dateFormField.querySelector('input').value = currentTimestamp;

    deviceFormField.querySelector('input').setAttribute('autocomplete', 'off');
    deviceFormField.querySelector('input').readOnly = true;

    browserFormField.querySelector('input').setAttribute('autocomplete', 'off');
    browserFormField.querySelector('input').readOnly = true;

    dateFormField.querySelector('input').setAttribute('autocomplete', 'off');
    dateFormField.querySelector('input').readOnly = true;
}

if (contactform !== null) {
    var contactformTopic = document.querySelector('[data-select-contact-trigger]');
    var formRadio = document.querySelectorAll('.form__input--radio');

    for (var i = 0; i < formRadio.length; i++) {
        formRadio[i].addEventListener('change', function (e) {
            this.parentNode.parentNode.classList.add('valid');
        });
    }

    // Min. length of textarea
    document.querySelector('#contact-textarea').addEventListener('keyup', function () {
        let charCountSpan = document.querySelector('.char-count span');
        let minLength = parseInt(this.minLength);
        let chars = this.value.length;

        let remaining = minLength - chars;
        if (remaining <= 0) {
            remaining = 0;
        }

        charCountSpan.innerText = remaining;
    });


    var mailForm = document.getElementById('contact-mail');
    var mailFormRepeat = document.getElementById('contact-mailrepeat');

    // System info fields
    var deviceFormField = document.querySelector('input[name="Device"]').parentElement.parentElement;
    var browserFormField = document.querySelector('input[name="Browser"]').parentElement.parentElement;
    var dateFormField = document.querySelector('input[name="DateTimeOccurance"]').parentElement.parentElement;

    contactformTopic.addEventListener('change', function () {
        var topic = contactformTopic.value;
        var selectedProducts = document.querySelectorAll('[data-form-condition-product]');
        var selectedReclamation = document.querySelectorAll('[data-form-condition-reclamation]');
        var selectedJobOfferRexx = document.querySelectorAll('[data-form-condition-jobOfferRexx]');
        var selectedOnlineshop = document.querySelectorAll('[data-form-condition-onlineshop]');
        var selectedStorePick = document.querySelectorAll('[data-form-condition-storepick]');
        var selectedRegistrationIssues = document.querySelectorAll('[data-form-condition-registrationproblmens]');
        var selectedAppIssues = document.querySelectorAll('[data-form-condition-appproblems]');
        var appOperatingSystemDropdown = document.getElementById("contact-app-operatingsystem");

        if (topic == "Produkte allgemein") {
            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.remove('form--hidden');
                selectedProducts[i].classList.add('visible');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.add('form--hidden');
            }

            //senderInfoField.required = false;
            appOperatingSystemDropdown.required = false;
            messageField.classList.remove("invalid");
            messageField.required = false;
            RemoveAsterisk(messageField);

        } else if (topic == "EducationStudy") {
            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.add('form--hidden');
            }

            appOperatingSystemDropdown.required = false;
           // senderInfoField.required = true;
            messageField.required = true;
            AddAsterisk(messageField);
        } else if (topic == "Stellenangebote") {
            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.remove('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.add('form--hidden');
            }

            appOperatingSystemDropdown.required = false;
          //  senderInfoField.required = true;
            messageField.required = true;
            AddAsterisk(messageField);
        } else if (topic == "Produktqualität / Reklamation") {
            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.add('form--hidden');
            }

            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.remove('form--hidden');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.add('form--hidden');
            }

            appOperatingSystemDropdown.required = false;
          //  senderInfoField.required = false;
            messageField.required = false;
            messageField.classList.remove("invalid");
            RemoveAsterisk(messageField);

        } else if (topic == "Frage zur Mitarbeit bei Alnatura") {
            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.add('form--hidden');
            }

            appOperatingSystemDropdown.required = false;
         //   senderInfoField.required = true;
            messageField.required = true;
            AddAsterisk(messageField);
        } else if (topic == "Onlineshop") {
            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.remove('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.add('form--hidden');
            }

            appOperatingSystemDropdown.required = false;
         //   senderInfoField.required = false;
            messageField.required = false;
            messageField.classList.remove("invalid");
            RemoveAsterisk(messageField);
        } else if (topic == "Onlinebestellung (Abholung/Lieferung Markt)") {

            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.remove('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.add('form--hidden');
            }

            appOperatingSystemDropdown.required = false;
           // senderInfoField.required = false;
            messageField.required = false;
            messageField.classList.remove("invalid");
            RemoveAsterisk(messageField);
        } else if (topic == "Probleme bei der Registrierung" || hijackTopic === true) {
            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.remove('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.add('form--hidden');
            }

            // Fetch current state of system checkbox if user were on that topic before on page
            var sysDataCheckbox = document.querySelector('#SendSystemData').parentElement.querySelector('.checkmark--checkbox'), pseudo = window.getComputedStyle(sysDataCheckbox, ':after');
            var displayMode = pseudo.getPropertyValue("display");
            if (displayMode == "block") {
                // Show system info fields
                deviceFormField.classList.remove('form--hidden');
                browserFormField.classList.remove('form--hidden');
                dateFormField.classList.remove('form--hidden');

                // Fetch system info
                fetchWriteSysInfo();
            } else {
                // Hide system info fields
                deviceFormField.classList.add('form--hidden');
                browserFormField.classList.add('form--hidden');
                dateFormField.classList.add('form--hidden');

                // Fetch system info
                fetchWriteSysInfo();
            }

            appOperatingSystemDropdown.required = false;
          //  senderInfoField.required = false;
            messageField.required = true;
            messageField.classList.remove("invalid");
            AddAsterisk(messageField);
        } else if (topic == "App-Bewertung") {
            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.remove('form--hidden');
            }

            appOperatingSystemDropdown.required = true;
          // senderInfoField.required = false;
            messageField.required = true;
            AddAsterisk(messageField);
        } else {
            for (var i = 0; i < selectedProducts.length; i++) {
                selectedProducts[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedReclamation.length; i++) {
                selectedReclamation[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedJobOfferRexx.length; i++) {
                selectedJobOfferRexx[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedOnlineshop.length; i++) {
                selectedOnlineshop[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedStorePick.length; i++) {
                selectedStorePick[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedRegistrationIssues.length; i++) {
                selectedRegistrationIssues[i].classList.add('form--hidden');
            }
            for (var i = 0; i < selectedAppIssues.length; i++) {
                selectedAppIssues[i].classList.add('form--hidden');
            }

            appOperatingSystemDropdown.required = false;
           // senderInfoField.required = false;
            messageField.required = false;
            messageField.classList.remove("invalid");
            RemoveAsterisk(messageField);
        }
    });

    // Register system-info toggle event
    document.querySelector('input[id="SendSystemData"]').addEventListener('change', function () {
        if (deviceFormField.classList.contains('form--hidden')) {
            // Show system info fields
            deviceFormField.classList.remove('form--hidden');
            browserFormField.classList.remove('form--hidden');
            dateFormField.classList.remove('form--hidden');

            // Fetch system info
            fetchWriteSysInfo();
        } else {
            // Hide system info fields
            deviceFormField.classList.add('form--hidden');
            browserFormField.classList.add('form--hidden');
            dateFormField.classList.add('form--hidden');
        }
    });


    // Check if we can jump directly into the reg problem topic
    if (window.location.hash == "#registration-problem") {
        var hijackTopic = true;

        // Trigger a fake-change of select field
        var e = new Event("change");
        var element = document.querySelector('#contact-topic');
        element.dispatchEvent(e);

        // Set the value of the select
        document.querySelector('#contact-topic').value = "Probleme bei der Registrierung";
    } else {
        var hijackTopic = false;
    }

    mailFormRepeat.addEventListener('blur', function () {
        var mailFormValue = mailForm.value;
        var mailFormRepeatValue = mailFormRepeat.value

        if (mailFormValue !== mailFormRepeatValue) {
            mailFormRepeat.setCustomValidity("E-Mail-Adressen stimmen nicht überein");
        } else {
            mailFormRepeat.setCustomValidity("");
        }
    });
    contactform.addEventListener('invalid', function (element) {
        element.target.className += ' invalid';
    }, true);

    contactform.addEventListener('submit', function (e) {
        var honeyPotNameValue = honeyPotName.value.length;
        var honeyPotEmailValue = honeyPotEmail.value.length;
        var apiURL = '/api/sitecore/Forms/SendContactForm';
        e.preventDefault();

        function formSend(formdata) {
            var request = new XMLHttpRequest();
            request.open('POST', apiURL, true);

            request.onloadstart = function () {
                contactform.classList.add('loading')
            }

            request.onload = function () {
                var resp = this.response;

                contactform.classList.remove('loading');


                if (this.status >= 200 && this.status < 400) {
                    dataLayer.push({
                        'eventCategory': 'Kontakt',
                        'eventAction': 'Kontaktformular erfolgreich versendet',
                        'eventLabel': document.getElementById("contact-topic").value,
                        'event': 'event-tracking'
                    });

                    contactform.classList.remove('loading')
                    contactform.innerHTML = resp;
                    contactform.scrollIntoView({ block: "start", behavior: "smooth" });


                } else {
                    var errorMsgContainer = document.querySelector('.contactform-error');
                    contactform.innerHTML = resp;
                    contactform.scrollIntoView({ block: "start", behavior: "smooth" });

                    dataLayer.push({
                        'eventCategory': 'Kontakt',                     //static value
                        'eventAction': 'Kontaktformular Fehler',        //static value
                        'eventLabel': this.status,                      //text of the error message
                        'event': 'event-tracking'                       //static value
                    });

                    errorMsgContainer.style.display = "block";
                }
            };

            request.onerror = function () {
                var errorMsgContainer = document.querySelector('.contactform-error');
                errorMsgContainer.style.display = "block";
            };

            PrepareHiddenFieldsToBeSent(formdata);
            request.send(new FormData(formdata));
        }

        var form = document.getElementById("contactform-long");
        if (honeyPotNameValue === 0 && honeyPotEmailValue === 0) {

            if (document.getElementById("RecaptchaSiteKey") != undefined) {
                var siteKey = document.getElementById("RecaptchaSiteKey").getAttribute("key");
                grecaptcha.ready(function () {
                    grecaptcha.execute(siteKey, { action: 'submit' }).then(function (token) {
                        var tokenField = document.getElementById('contact-token');
                        tokenField.value = token;
                        formSend(form);
                    });
                });
            } else {
                formSend(form);
            }


        }
    });
}

function PrepareHiddenFieldsToBeSent(form) {
    var index;
    for (index = 0; index < form.length; index++) {
        if (form[index].type == "select-one") {
            var option = document.createElement("option");
            option.value = "-1";
            form[index].add(option)
        }
        if (form[index].type == "checkbox") {
            var hiddenElement = form[index].parentElement.parentElement.parentElement;
            if (hiddenElement.className.includes("form--hidden")) {
                form[index].checked = false;
                var previousElement = form[index].previousElementSibling;
                if (previousElement !== null) {
                    if (previousElement.type == "hidden") {
                        previousElement.disabled = true
                    }
                }
            } else {
                if (form[index].checked) {
                    var previousElement = form[index].previousElementSibling;
                    if (previousElement !== null) {
                        if (previousElement.type == "hidden") {
                            previousElement.disabled = true
                        }
                    }
                }
            }
        }
        var hiddenElement = form[index].parentElement.parentElement;
        if (hiddenElement.className.includes("form--hidden") && form[index].type !== 'file') {
            form[index].value = "-1";
        }
    }
}

function AddAsterisk(element) {
    if (element.labels.length > 0) {
        if (!element.labels[0].textContent.endsWith('*')) {
            element.labels[0].textContent += " *";
        }
    }

}

function RemoveAsterisk(element) {
    if (element.labels.length > 0) {
        if (element.labels[0].textContent.endsWith('*')) {
            element.labels[0].textContent = element.labels[0].textContent.substring(0, element.labels[0].textContent.length - 2);
        }
    }
};
function showSquareImages() {
    var square = document.querySelector('.recipesquareimage');
    if (square != null) {
        var squares = document.querySelectorAll('.recipesquareimage');
        squareWidth = square.offsetWidth;
        for (var i = 0; i < squares.length; i++) {
            squares[i].style.height = squareWidth + "px";
            universalPlaceholderPic = "/-/media/Foundation/Recipes/Rezeptbild.jpg";
            picture = squares[i].parentElement.querySelector('img').getAttribute('src');
            squares[i].style.backgroundImage = "url('" + picture + "')";

            if (universalPlaceholderPic == picture) {
                squares[i].classList.add('default');
            }
        }
    }
}

document.addEventListener("DOMContentLoaded", function (event) {
    showSquareImages();
});

document.addEventListener('scroll', function (e) {
    showSquareImages();
});

// Load on init
showSquareImages();

document.onreadystatechange = () => {
    if (document.readyState === 'complete') {
        showSquareImages();
    }
};




/* NEW ACTION BUTTONS */

var printButtons = document.querySelectorAll('#recipe-action-print');
if (printButtons.length > 0) {
    for (var i = 0; i < printButtons.length; i++) {
        printButtons[i].addEventListener('click', function () {
            window.print();
            dataLayer.push({
                'eventCategory': 'Navigation',
                'eventAction': 'Print',
                'eventLabel': location.pathname,
                'event': 'event-tracking'
            });
        });
    }
}

var sharingButtonRecipe = document.querySelector('#recipe-action-share');
if (sharingButtonRecipe != null) {
    sharingButtonRecipe.addEventListener('click', function () {
        if (navigator.share) {
            navigator.share({
                title: document.title,
                url: window.location.href
            }).then(function () {
            }).catch(function (err) {
            });
        } else {
            console.log('web share not supported');
        }
    });
};
var supportsVideo = !!document.createElement('video').canPlayType;
if (supportsVideo) {
    var video = document.getElementById('videoPlayer');
    var videoContainer = document.getElementById('videoContainer');
    var videoControls = document.getElementById('video-controls');
    var playpause = document.getElementById('playpause');
    var stop = document.getElementById('stop');
    var mute = document.getElementById('mute');
    var volinc = document.getElementById('volinc');
    var voldec = document.getElementById('voldec');
    var progress = document.getElementById('progress');
    var progressBar = document.getElementById('progress-bar');
    var fullscreen = document.getElementById('fs');
    var fullScreenEnabled = !!(document.fullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled || document.webkitSupportsFullscreen || document.webkitFullscreenEnabled || document.createElement('video').webkitRequestFullScreen);

    var alterVolume = function (dir) {
        var currentVolume = Math.floor(video.volume * 10) / 10;
        if (dir === '+') {
            if (currentVolume < 1) video.volume += 0.1;
        }
        else if (dir === '-') {
            if (currentVolume > 0) video.volume -= 0.1;
        }
    }

    if (video !== null) {
        // Hide the default controls
        video.controls = false;

        // Display the user defined video controls
        videoControls.style.display = 'flex';

        playpause.addEventListener('click', function (e) {
            if (video.paused || video.ended) {
                playpause.classList.add('playing');
                video.play();
            } else {
                video.pause();
                playpause.classList.remove('playing');
            }
        });

        stop.addEventListener('click', function (e) {
            video.pause();
            video.currentTime = 0;
            progress.value = 0;
            playpause.classList.remove('playing');
        });

        mute.addEventListener('click', function (e) {
            video.muted = !video.muted;
        });

        volinc.addEventListener('click', function (e) {
            alterVolume('+');
        });
        voldec.addEventListener('click', function (e) {
            alterVolume('-');
        });

        video.addEventListener('loadedmetadata', function () {
            progress.setAttribute('max', video.duration);
        });

        video.addEventListener('timeupdate', function () {
            progress.value = video.currentTime;
            progressBar.style.width = Math.floor((video.currentTime / video.duration) * 100) + '%';
            if (video.ended) {
                playpause.classList.remove('playing');
            }
        });

        progress.addEventListener('click', function (e) {
            var pos = (e.pageX - this.offsetLeft) / this.offsetWidth;
            video.currentTime = pos * video.duration;
        });

        if (!fullScreenEnabled) {
            fullscreen.style.display = 'none';
        }

        fullscreen.addEventListener('click', function (e) {
            handleFullscreen();
        });

        var handleFullscreen = function () {
            if (isFullScreen()) {
                if (document.exitFullscreen) document.exitFullscreen();
                else if (document.mozCancelFullScreen) document.mozCancelFullScreen();
                else if (document.webkitCancelFullScreen) document.webkitCancelFullScreen();
                else if (document.msExitFullscreen) document.msExitFullscreen();
                setFullscreenData(false);
            }
            else {
                if (videoContainer.requestFullscreen) videoContainer.requestFullscreen();
                else if (videoContainer.mozRequestFullScreen) videoContainer.mozRequestFullScreen();
                else if (videoContainer.webkitRequestFullScreen) videoContainer.webkitRequestFullScreen();
                else if (videoContainer.msRequestFullscreen) videoContainer.msRequestFullscreen();
                setFullscreenData(true);
            }
        }

        var isFullScreen = function () {
            return !!(document.fullscreen || document.webkitIsFullScreen || document.mozFullScreen || document.msFullscreenElement || document.fullscreenElement);
        }

        var setFullscreenData = function (state) {
            videoContainer.setAttribute('data-fullscreen', !!state);
        }

        document.addEventListener('fullscreenchange', function (e) {
            setFullscreenData(!!(document.fullscreen || document.fullscreenElement));
        });
        document.addEventListener('webkitfullscreenchange', function () {
            setFullscreenData(!!document.webkitIsFullScreen);
        });
        document.addEventListener('mozfullscreenchange', function () {
            setFullscreenData(!!document.mozFullScreen);
        });
        document.addEventListener('msfullscreenchange', function () {
            setFullscreenData(!!document.msFullscreenElement);
        });
    }
}

(function (audioTeaser) {
    function timeFormat(sec) {
        var minutes = Math.floor(sec / 60);
        var seconds = Math.floor(sec % 60);
        var displayedSeconds = seconds < 10 ? '0' + seconds : seconds;
        return minutes + ':' + displayedSeconds;
    }

    audioTeaser.displayDuration = function (duration) {
        document.getElementById('duration').textContent = timeFormat(duration);
    }

    audioTeaser.updateSeekSlider = function (slider, audio) {
        var progress = Math.floor(audio.currentTime / audio.duration * 100, 2);
        slider.setAttribute('style', 'width:' + progress + '%');
    }

    audioTeaser.updateTimer = function (timer, sec) {
        timer.textContent = timeFormat(sec);
    }

})(window.audioTeaser = window.audioTeaser || {});


(function () {

    var audios = document.querySelectorAll('.aln-audio-player');

    if (audios !== null) {
        for (var i = 0; i < audios.length; i++) {

            var audio = audios[i].querySelector('audio');
            var playPause = audios[i].querySelector('button#play-icon');
            var timer = audios[i].querySelector('.time');
            var seekSlider = audios[i].querySelector('div#range-slide-past');
            var volumeSlider = audios[i].querySelector('#volume-slider');
            var mute = audios[i].querySelector('button#mute');

            if (audio.readyState > 0) {
                audioTeaser.displayDuration(audio.duration);
            } else {
                audio.addEventListener('loadedmetadata', () => {
                    audioTeaser.displayDuration(audio.duration);
                });
            }

            playPause.addEventListener('click', function () {
                if (this.dataset.state === 'play') {
                    this.dataset.state = 'pause';
                    audio.play();
                } else {
                    this.dataset.state = 'play';
                    audio.pause();
                }
            });

            mute.addEventListener('click', function () {
                if (this.dataset.state === 'mute') {
                    this.dataset.state = 'muted';
                    audio.muted = true;
                } else {
                    this.dataset.state = 'mute';
                    audio.muted = false;
                }
            });

            audio.addEventListener('timeupdate', function() {
                audioTeaser.updateSeekSlider(seekSlider, audio);
                audioTeaser.updateTimer(timer, audio.currentTime);
            });

            audio.addEventListener('ended', function () {
                playPause.dataset.state = 'play';  
            })

            volumeSlider.addEventListener('input', (e) => {
                var value = e.target.value;
                audio.volume = value / 100;
            });
        }
    }
})()


// PRE-RE-CONSTRUCTION OF AUDIO MODULE
// IMPLEMENT JUMP-MARKERS FOR THE AUDIO BOOK ONLY
let mediaTextHeadlines = document.querySelectorAll('h2.media-text__headline');
if (mediaTextHeadlines != null) {
    for (let i = 0; i < mediaTextHeadlines.length; i++) {
        let headlineText = mediaTextHeadlines[i].innerText;
        headlineText = headlineText.replace(/\s/g, '');

        // Search for headline
        if (headlineText == "KapitelmitZeitstempel") {
            let audioPlayerStory = document.querySelector('.aln-audio-player audio');
            let mediaTextBlocks = mediaTextHeadlines[i].parentElement.querySelectorAll('p');

            // Search for timeline
            for (let r = 0; r < mediaTextBlocks.length; r++) {
                let displayMins = mediaTextBlocks[r].querySelector("strong");

                // We have a time so we need it isolated and convert it to timeline seconds(!)
                if (displayMins != null) {
                    let minutes = displayMins.innerText.split("min")[0];
                    let minutesExplode = minutes.split(":");

                    let playSeconds = (parseInt(minutesExplode[0]) * 60) + parseInt(minutesExplode[1]);

                    displayMins.classList.add("timelineButton");
                    displayMins.addEventListener('click', function () {
                        audioPlayerStory.currentTime = playSeconds;
                        audioPlayerStory.play();
                        document.querySelector('#play-icon').setAttribute("data-state", "pause");
                    });

                }
            }
        }
    }
};
var container = document.querySelector('.contestform__container');
var contestform = document.getElementById('contestform');
var honeyPotName = document.getElementById('form-contact-name');
var honeyPotEmail = document.getElementById('form-contact-email');

if (contestform !== null) {

    var mailForm = document.getElementById('contest-mail');
    var mailFormRepeat = document.getElementById('contest-mailrepeat');

    mailFormRepeat.addEventListener('blur', function () {
        var mailFormValue = mailForm.value;
        var mailFormRepeatValue = mailFormRepeat.value

        if (mailFormValue !== mailFormRepeatValue) {
            mailFormRepeat.setCustomValidity("E-Mail-Adressen stimmen nicht überein");
        } else {
            mailFormRepeat.setCustomValidity("");
        }
    });
    contestform.addEventListener('invalid', function (element) {
        element.target.className += ' invalid';
    }, true);


    contestform.addEventListener('submit', function (e) {
        var honeyPotNameValue = honeyPotName.value.length;
        var honeyPotEmailValue = honeyPotEmail.value.length;

        if (honeyPotNameValue === 0 || honeyPotEmailValue === 0) {
            e.preventDefault();
            var thisForm = e.target;
            var apiUrl = e.target.action;
            var loadingContainer = document.createElement("div");
            loadingContainer.classList.add('loading', 'show');
            if (document.getElementById("RecaptchaSiteKey") != undefined) {
                var siteKey = document.getElementById("RecaptchaSiteKey").getAttribute("key");
                grecaptcha.ready(function() {
                    grecaptcha.execute(siteKey, { action: 'submit' }).then(function(token) {
                        document.getElementById('g-recaptcha-response').value = token;
                        PrepareHiddenFieldsForContestFormToBeSent(thisForm);

                        httpRequestHandler("POST", apiUrl, loadingContainer);

                        
                        
                    });
                });
            } else {
                PrepareHiddenFieldsForContestFormToBeSent(thisForm);
                httpRequestHandler("POST", apiUrl, loadingContainer);
            }
        }
    });
}

function httpRequestHandler(verb, apiUrl, loadingContainer) {
    var req = new XMLHttpRequest();
    req.open(verb, apiUrl);

    req.onloadstart = function () {
        container.insertBefore(loadingContainer, contestform);
        contestform.classList.add('contest-form--loading');
    }

    req.onload = function () {
        if (this.status >= 200 && this.status < 400) {
            var resp = this.response;
            contestform.classList.remove('contest-form--loading');
            loadingContainer.classList.remove('show');
            contestform.innerHTML = resp;
            window.scrollTo({
                top: 0,
                left: 0,
                behavior: 'smooth'
            });
        } else {
            contestform.classList.remove('contest-form--loading');
            loadingContainer.classList.remove('show');
            contestform.innerHTML = "Etwas ist schief gelaufen!";
        }
    };
    var formElement = document.getElementById("contestform");
    PrepareHiddenFieldsForContestFormToBeSent(formElement);
    req.send(new FormData(formElement));
}

function PrepareHiddenFieldsForContestFormToBeSent(form) {
    var index;
    for (index = 0; index < form.length; index++) {
        var hiddenElement = form[index].parentElement.parentElement;
        if (hiddenElement.className.includes("form--hidden") && form[index].type !== 'file') {
            form[index].value = "-1";
        }
    }
};
let nutrientTypeTabs = document.querySelectorAll('.nutrient-type-switch-tabs .tab');

// Only if there are more than 0 tabs
if (nutrientTypeTabs.length > 0) {
    let nutrientGroupContent = document.querySelectorAll('.nutrition-group__content');


    // Prepare the tab logic
    nutrientTypeTabs[0].classList.add('active');
    nutrientGroupContent[0].style.display = "block";

    for (let i = 0; i < nutrientTypeTabs.length; i++) {
        nutrientTypeTabs[i].addEventListener('click', function () {
            // Reset all buttons and blocks
            for (let r = 0; r < nutrientTypeTabs.length; r++) {
                nutrientTypeTabs[r].classList.remove('active');
                nutrientGroupContent[r].style.display = "none";
            }

            nutrientTypeTabs[i].classList.add('active');
            nutrientGroupContent[i].style.display = "block";
        });
    }
};
magazinPathname = window.location.pathname;
magazinCheck = magazinPathname.split("/");
if (magazinCheck.length > 3) {
    if (magazinCheck[2] == "magazin") {
        //console.log("Magazin Seite");
        document.querySelector('h2.content-teaser-list__headline').style.paddingTop = "20px";
    }
}
;
document.addEventListener("DOMContentLoaded", function () {
    // We need this for the checkboxes because we can't access the error/::before with pure CSS on that point
    if (document.querySelector('div.sitecore-forms') !== null) {
        function observeError(listenNodeLabel) {
            var config = { attributes: true, childList: false, subtree: false };
            var observeNode = listenNodeLabel;
            var observeCallback = function (mutationsList) {
                if (mutationsList.length > 0) {
                    if (observeNode.classList.contains('input-validation-error')) {
                        if (observeNode.getAttribute('type') == "checkbox") {
                            checkboxError = observeNode.parentElement.querySelector('span.label__text');
                            checkboxError.classList.add("checkbox-error");
                        }
                    } else {
                        checkboxError = observeNode.parentElement.querySelector('span.label__text');
                        checkboxError.classList.remove("checkbox-error");
                    }

                }
            };
            var observer = new MutationObserver(observeCallback);
            observer.observe(observeNode, config);
        }

        var sitecoreFormsCheckRadioInputs = document.querySelectorAll('div.sitecore-forms input[type="checkbox"], div.sitecore-forms input[type="radio"]');
        for (var i = 0; i < sitecoreFormsCheckRadioInputs.length; i++) {
            observeError(sitecoreFormsCheckRadioInputs[i]);
        }
    }
});
let ingredientsChangeButtons = document.querySelectorAll('.recipe_change_ingredients[data-direction]');
let recipePersonAmount, currentRecipePersonAmount;

let ingredientsContainer = document.querySelector('.ingredients__content');
if (ingredientsChangeButtons !== null && ingredientsContainer != null) {
    let ingredientItems = ingredientsContainer.querySelectorAll('.ingredient__item');
    let recipeContentContainer = document.querySelector('.recipe__content');
    let ingredientStepItems = recipeContentContainer.querySelectorAll('.step__ingredients_list--single');
    let personsCounter = document.querySelector('.ingredients__number-person');


    // Find out how many persons we have from start
    let amountCounter = personsCounter.innerText;
    amountCounter = amountCounter.split(" ");

    for (let p = 0; p < amountCounter.length; p++) {
        if (!isNaN(amountCounter[p])) {
            recipePersonAmount = parseInt(amountCounter[p]);
            currentRecipePersonAmount = recipePersonAmount;
        }
    }



    // Function to rebuild the ingredient amount by person/portion
    function calculatePortionIngredients(container, fullyRound = false) {
        let quantityValue = container.getAttribute('data-value');

        // Step down for one person/portion
        let quantityValueOnePortion = (parseFloat((quantityValue).replace(",", ".")) / currentRecipePersonAmount);

        // Calc the value of total persons/portions for further inner calculations and round up as single value for display
        let quantityNewValue = quantityValueOnePortion * recipePersonAmount;
        let quantityNewValueRounded = Math.round(quantityNewValue * 100) / 100;

        // If we don't want a FLOAT; just an INT
        if (fullyRound) {
            quantityNewValueRounded = Math.round(quantityNewValue);
        }

        // Set the current data value to item
        container.setAttribute('data-value', quantityNewValue);

        // Re-String display value and replace it on the view
        quantityNewValueRoundedString = String(quantityNewValueRounded).replace('.', ',');
        container.innerText = quantityNewValueRoundedString;
    }


    // Append the click function for the buttons
    for (let i = 0; i < ingredientsChangeButtons.length; i++) {
        ingredientsChangeButtons[i].addEventListener('click', function () {
            // Increase/Decrease the recipePersonAmount for the new value
            currentRecipePersonAmount = recipePersonAmount;
            let direction = this.getAttribute("data-direction");
            if (direction == "decrease") {
                if (recipePersonAmount != 1) {
                    recipePersonAmount--;
                }
            } else {
                recipePersonAmount++;
            }

            // Rewrite the persons per recipe amount
            let rewriteAmountCounterString = "";
            for (let p = 0; p < amountCounter.length; p++) {
                if (!isNaN(amountCounter[p])) {
                    amountCounter[p] = recipePersonAmount;
                }

                rewriteAmountCounterString += amountCounter[p] + " ";
            }
            rewriteAmountCounterString = rewriteAmountCounterString.slice(0, -1);
            personsCounter.innerText = rewriteAmountCounterString;            


            // Loop through the items and increase/decrease the amounts
            for (let item = 0; item < ingredientItems.length; item++) {
                // Calc main quantity
                let mainQuantityContainer = ingredientItems[item].querySelector('[data-declaration="amount"]');
                calculatePortionIngredients(mainQuantityContainer);

                // Calc sub quantity
                let subQuantityContainer = ingredientItems[item].querySelector('[data-declaration="quantity"]');
                if (subQuantityContainer !== null) {
                    calculatePortionIngredients(subQuantityContainer);
                }
            }



            // Precheck if we have recipe steps on that one. If not, ignore that calculation
            if (ingredientStepItems.length != 0) {
                // Loop through the step items and increase/decrease the amounts
                for (let item = 0; item < ingredientStepItems.length; item++) {
                    let stepIngredient = ingredientStepItems[item];

                    ///////////////////////
                    // calc the main number
                    let singleMainSpan = stepIngredient.querySelector('span span');
                    calculatePortionIngredients(singleMainSpan);

                    ////////////////////////////////
                    // calc the sub number in braces
                    let singleSubSpan = stepIngredient.querySelector('span.ingredient__quantity--addition span');
                    if (singleSubSpan != null) {
                        calculatePortionIngredients(singleSubSpan);
                    }
                }
            }
        });
    }
};
function setCookie(name, value, days) {
    let expires = "";
    if (days) {
        let date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "") + expires + "; path=/";
}

function getCookie(name) {
    let nameEQ = name + "=";
    let cookies = document.cookie.split(';');
    for (let i = 0; i < cookies.length; i++) {
        let cookie = cookies[i];
        while (cookie.charAt(0) == ' ') {
            cookie = cookie.substring(1, cookie.length);
        }
        if (cookie.indexOf(nameEQ) == 0) {
            return cookie.substring(nameEQ.length, cookie.length);
        }
    }
    return null;
}

function isExpired(cookieValue) {
    let cookieDate = new Date(cookieValue);
    let currentDate = new Date();
    return cookieDate.getTime() + 14 * 24 * 60 * 60 * 1000 < currentDate.getTime(); // Check if 2 weeks have passed
}

function showPopupIfCookieNotSetOrExpired() {
    let popup = document.getElementById('popup');

    if (popup !== null) {
        let popupClose = popup.querySelector('.popup--content--close');

        popupClose.addEventListener('click', () => {
            popup.classList.remove('show');
        });

        let cookieName = 'popupShown';
        let cookieValue = getCookie(cookieName);

        if (!cookieValue || isExpired(cookieValue)) {
            popup.classList.add('show');
            setCookie(cookieName, 'true', 14); // Set cookie to expire in 14 days/2 weeks
        }
    }
}

showPopupIfCookieNotSetOrExpired();;
