/* Fehler bei der Verkleinerung. Der Inhalt wird unverkleinert zurückgegeben.
(214,9,230,10): run-time error JS1314: Implicit property name must be identifier: applyChildrenBookingText(ageArray) {

            // Text im Feld entsprechend der Auswahl anpassen
            var textNone = newCOMer.Global.Helper.getTranslatedText("Formfield:NoChildren");
            var textSingular = newCOMer.Global.Helper.getTranslatedText("Formfield:Child");
            var textPlural = newCOMer.Global.Helper.getTranslatedText("Formfield:Children");

            if (ageArray.length <= 0) {
                jQuery(".hotel-children-text").val(textNone);
            }
            else if (ageArray.length === 1) {
                jQuery(".hotel-children-text").val(ageArray.length + " " + textSingular);
            }
            else {
                jQuery(".hotel-children-text").val(ageArray.length + " " + textPlural);
            }
        }
(231,9,271,10): run-time error JS1314: Implicit property name must be identifier: initChildrenBooking() {

            jQuery(".hotel-children-text, div.hotel-children-details").on("focus", function () {
                jQuery("div.hotel-children-details").attr("style", "display: block !important;");
                jQuery(".hotel-children-text-container").addClass("active");
            });

            jQuery(".hotel-children-select").on("keyup", function () {
                var clearedValue = jQuery(this).val().trim();
                var maximumValue = jQuery(this).attr("max");

                if (!newCOMer.Global.Helper.isValueInteger(clearedValue)) {
                    jQuery(this).val("");
                } else if (parseInt(clearedValue) > 16) {
                    jQuery(this).val(maximumValue);
                }
            });

            jQuery(".hotel-children-select").on("change", function () {
                var ageArray = [];
                var numberOfItems = 0;

                jQuery(".hotel-children-select").each(function () {
                    var clearedValue = jQuery(this).val().trim();
                    if (clearedValue !== "") {
                        ageArray.push(clearedValue);
                        numberOfItems++;
                    }
                });


                // Hiddenfield Werte zuweisen
                if (numberOfItems > 0) {
                    jQuery("#NumberAndAgeOfChildren").val(ageArray.join(","));
                } else {
                    jQuery("#NumberAndAgeOfChildren").val("");
                }

                cms.applyChildrenBookingText(ageArray);
            });
        }
 */
/**
     newCOMer Cms CM 05.06.2019
**/

newCOMerCms.Cms = newCOMerCms.Cms || {};

newCOMerCms.Cms = (function () {
    function Cms(options) {
        var defaults = {};
        this.globalOpts = jQuery.extend({}, defaults, options || {});


        // Listener for Escape key
        jQuery(document).keyup(function (e) {
            if (e.key === "Escape") {
                if (jQuery(".menuOverlay").attr("data-open") === "true") {
                    jQuery(".nav-link-menu").trigger("click");
                }
                if (jQuery(".searchOverlay").attr("data-open") === "true") {
                    jQuery(".nav-link-search").trigger("click");
                }
                if (jQuery(".fontsizeOverlay").attr("data-open") === "true") {
                    jQuery(".nav-link-fontsize").trigger("click");
                }
            }
        });
    }
    //---private methods---//


    var getErrorToolTips = function (validateForm, errorMap, errorList) {
        $.each(validateForm.validElements(),
            function (index, element) {
                var $element = $(element);

                if (jQuery(element).attr("type") == "hidden") {
                    $element = $element.parent();
                }

                $element.data("title", "")
                    .removeClass("error")
                    .tooltip("dispose");

                if (jQuery(element).attr("type") == "hidden") {
                    $element.tooltip("hide");
                }

                $(element).data("title", "").removeClass("error").tooltip("dispose");
            });

        $.each(errorList,
            function (index, error) {
                var $element = $(error.element);

                if (jQuery(error.element).attr("type") == "hidden") {
                    $element = $element.parent();
                }

                $element.tooltip("dispose")
                    .data("title", error.message)
                    .addClass("error")
                    .tooltip({
                        customClass: "tooltip-error",
                        placement: "top"
                    });

                if (jQuery(error.element).attr("type") == "hidden") {
                    $element.tooltip("show");
                }
            });
    };

    var getValidationAttribute = function (elementClientId, key) {
        return $("#" + elementClientId).attr("data-val-" + key);
    };

    var initCustomValidators = function () {
        $.validator.addMethod(
            "email",
            function (value, element, regexp) {
                if (regexp.constructor !== RegExp)
                    regexp = new RegExp(regexp);
                else if (regexp.global)
                    regexp.lastIndex = 0;
                return this.optional(element) || regexp.test(value);
            },
            "E-Mail hat kein gültiges Format."
        );

        $.validator.addMethod(
            "mustbechecked",
            function (value, element) {
                return jQuery(element).prop("checked");
            },
            "Bitte bestätigen Sie dieses Feld um das Formular abzusenden."
        );

        $.validator.addMethod(
            "needsintvalue",
            function (value, element) {
                var intvalue = parseInt(value);
                return intvalue > -1;
            },
            "Bitte treffen Sie eine Auswahl."
        );

        jQuery.validator.addMethod("float", function (value, element) {
            var result = newCOMer.Global.Helper.checkIsFloat(jQuery(element).val());
            return result;
        }, "Bitte geben Sie einen gültigen Betrag ein.");
    };

    Cms.prototype = {

        locale: "de-de",

        init: function (options) {
            var defaults = { locale: "de-de", customValidators: true };
            var opts = jQuery.extend({}, defaults, options || {});

            this.locale = opts.locale;
            if (opts.customValidators)
                initCustomValidators();
        },
        preservePosition: function (scrollId) {
            try {
                var link = document.location.href.replace(/@P:(.*)/, "");

                if (link.indexOf("#") === -1)
                    link += "#";

                link += "@P:" + btoa(scrollId);

                document.location.href = link;

            } catch (ex) {
                console.log(ex);
            }
        },
        quickBookSearchSetDefaultValues: function () {
            $.ajax({
                method: "GET",
                url: "/api/Services/QuickBookSearch/DefaultValues",
                cache: false
            }).done(function (res) {
                jQuery("#DateFromQuickSearch").val(res.startDate);
                jQuery("#DateUntilQuickSearch").val(res.endDate);

                jQuery("#DateFromQuickSearch").on("change", function () {
                    var txtDateFrom = jQuery(this).val();
                    var txtDateUntil = moment(txtDateFrom, "YYYY-MM-DD").add(res.timeSpanDays, "d").format("YYYY-MM-DD");

                    console.log(txtDateUntil);

                    jQuery("#DateUntilQuickSearch").val(txtDateUntil);
                });

            }).fail(function (jqXHR, textStatus, errorThrown) {
                newCOMer.Global.Helper.throwApiXHRError(jqXHR, textStatus, errorThrown);
            }).always(function () {
            });

        },
        toggleSubCategoryCheckboxes: function (clientId, options) {
            var defaults = {};
            var opts = jQuery.extend({}, defaults, options || {});

            var caller = $("#checkAll_" + clientId);
            var cblSubCategories = $("#subCategories_" + clientId + " .chkSubCategory");

            var allChecked = caller.attr("data-allchecked");

            if (allChecked === "false") {
                cblSubCategories.each(function (index) {
                    $(this).prop("checked", true);
                });
                caller.attr("data-allchecked", true);
            } else {
                cblSubCategories.each(function (index) {
                    $(this).prop("checked", false);
                });
                caller.attr("data-allchecked", false);
            }
        },
        quickSearch: function (accomodationTypeClientId, dateFromClientId, dateUntilClientId, numberOfAdultsClientId, numberOfChildrenClientId, link) {

            var accomodationType = $(accomodationTypeClientId).val();
            var dateFrom = $(dateFromClientId).val();
            var dateUntil = $(dateUntilClientId).val();
            var numberOfAdults = $(numberOfAdultsClientId).val();
            var numberAndAgeOfChildren = $(numberOfChildrenClientId).val();

            var searchLink = link;

            searchLink += "?source=schnellsuche";

            if ($.trim(accomodationType) !== "" && $.trim(accomodationType) !== "-1")
                searchLink += "&accomodationType=" + $.trim(accomodationType);

            if ($.trim(dateFrom) !== "")
                searchLink += "&dateFrom=" + $.trim(dateFrom);

            if ($.trim(dateUntil) !== "")
                searchLink += "&dateUntil=" + $.trim(dateUntil);

            if ($.trim(numberOfAdults) !== "" && $.trim(numberOfAdults) !== "-1")
                searchLink += "&numberOfAdults=" + $.trim(numberOfAdults);

            if ($.trim(numberAndAgeOfChildren) !== "" && $.trim(numberAndAgeOfChildren) !== "-1")
                searchLink += "&numberAndAgeOfChildren=" + $.trim(numberAndAgeOfChildren);

            document.location.href = searchLink;
        },
        applyChildrenBookingText(ageArray) {

            // Text im Feld entsprechend der Auswahl anpassen
            var textNone = newCOMer.Global.Helper.getTranslatedText("Formfield:NoChildren");
            var textSingular = newCOMer.Global.Helper.getTranslatedText("Formfield:Child");
            var textPlural = newCOMer.Global.Helper.getTranslatedText("Formfield:Children");

            if (ageArray.length <= 0) {
                jQuery(".hotel-children-text").val(textNone);
            }
            else if (ageArray.length === 1) {
                jQuery(".hotel-children-text").val(ageArray.length + " " + textSingular);
            }
            else {
                jQuery(".hotel-children-text").val(ageArray.length + " " + textPlural);
            }
        },
        initChildrenBooking() {

            jQuery(".hotel-children-text, div.hotel-children-details").on("focus", function () {
                jQuery("div.hotel-children-details").attr("style", "display: block !important;");
                jQuery(".hotel-children-text-container").addClass("active");
            });

            jQuery(".hotel-children-select").on("keyup", function () {
                var clearedValue = jQuery(this).val().trim();
                var maximumValue = jQuery(this).attr("max");

                if (!newCOMer.Global.Helper.isValueInteger(clearedValue)) {
                    jQuery(this).val("");
                } else if (parseInt(clearedValue) > 16) {
                    jQuery(this).val(maximumValue);
                }
            });

            jQuery(".hotel-children-select").on("change", function () {
                var ageArray = [];
                var numberOfItems = 0;

                jQuery(".hotel-children-select").each(function () {
                    var clearedValue = jQuery(this).val().trim();
                    if (clearedValue !== "") {
                        ageArray.push(clearedValue);
                        numberOfItems++;
                    }
                });


                // Hiddenfield Werte zuweisen
                if (numberOfItems > 0) {
                    jQuery("#NumberAndAgeOfChildren").val(ageArray.join(","));
                } else {
                    jQuery("#NumberAndAgeOfChildren").val("");
                }

                cms.applyChildrenBookingText(ageArray);
            });
        },
        openContactForm: function (usecanvas) {
            if (usecanvas) {
                jQuery("div.contact-form-offcanvas").show(function () {
                    jQuery(this).animate({ right: "0px" }, 500);
                });
            }
        },
        closeContactForm: function (usecanvas) {
            if (usecanvas) {
                jQuery("div.contact-form-offcanvas").show(function () {
                    jQuery(this).fadeOut(400, function () {
                        jQuery(this).css("right", "");
                    });
                });
            }
        },
        initContactForm: function (clientId) {
            var btnSend = $("#btnSend_" + clientId);
            btnSend.ladda();

            $("#frmContact_" + clientId).validate({
                debug: false,
                rules: {
                    Firstname: {
                        required: true,
                        maxlength: getValidationAttribute("Firstname", "length-max")
                    },
                    Lastname: {
                        required: true,
                        maxlength: getValidationAttribute("Lastname", "length-max")
                    },
                    Street: {
                        required: true,
                        maxlength: getValidationAttribute("Street", "length-max")
                    },
                    StreetNo: {
                        required: true,
                        maxlength: getValidationAttribute("StreetNo", "length-max")
                    },
                    Zip: {
                        required: true,
                        maxlength: getValidationAttribute("Zip", "length-max")
                    },
                    City: {
                        required: true,
                        maxlength: getValidationAttribute("City", "length-max")
                    },
                    CountryID: {
                        required: true,
                        digits: true
                    },
                    EMail: {
                        required: true,
                        maxlength: getValidationAttribute("EMail", "length-max"),
                        email: getValidationAttribute("EMail", "regex-pattern")
                    },
                    Telephone: {
                        maxlength: getValidationAttribute("Telephone", "length-max")
                    },
                    Text: {
                        required: true
                    }
                },
                messages: {
                    Firstname: {
                        required: getValidationAttribute("Firstname", "required"),
                        maxlength: getValidationAttribute("Firstname", "length")
                    },
                    Lastname: {
                        required: getValidationAttribute("Lastname", "required"),
                        maxlength: getValidationAttribute("Lastname", "length")
                    },
                    Street: {
                        required: getValidationAttribute("Street", "required"),
                        maxlength: getValidationAttribute("Street", "length")
                    },
                    StreetNo: {
                        required: getValidationAttribute("StreetNo", "required"),
                        maxlength: getValidationAttribute("StreetNo", "length")
                    },
                    Zip: {
                        required: getValidationAttribute("Zip", "required"),
                        maxlength: getValidationAttribute("Zip", "length")
                    },
                    City: {
                        required: getValidationAttribute("City", "required"),
                        maxlength: getValidationAttribute("City", "length")
                    },
                    CountryID: {
                        required: getValidationAttribute("CountryID", "required"),
                        digits: getValidationAttribute("CountryID", "range")
                    },
                    EMail: {
                        required: getValidationAttribute("EMail", "required"),
                        maxlength: getValidationAttribute("EMail", "length"),
                        email: getValidationAttribute("EMail", "regex")
                    },
                    Telephone: {
                        maxlength: getValidationAttribute("Telephone", "length")
                    },
                    Text: {
                        required: getValidationAttribute("Text", "required")
                    }
                },
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {

                    var formData = new Object();
                    formData.salutationId = $(form).find("select[name = 'SalutationID']").val();
                    formData.firstname = $(form).find("input[name = 'Firstname']").val();
                    formData.lastname = $(form).find("input[name = 'Lastname']").val();
                    formData.telephone = $(form).find("input[name = 'Telephone']").val();
                    formData.email = $(form).find("input[name = 'EMail']").val();
                    formData.street = $(form).find("input[name = 'Street']").val();
                    formData.streetNo = $(form).find("input[name = 'StreetNo']").val();
                    formData.zip = $(form).find("input[name = 'Zip']").val();
                    formData.city = $(form).find("input[name = 'City']").val();
                    formData.countryId = $(form).find("select[name = 'CountryID']").val();
                    formData.text = $(form).find("textarea[name = 'Text']").val();
                    formData.receivematerial = false;
                    formData.receivecallback = false;
                    formData.friendlyCaptcha = $(form).find("input[name='frc-captcha-solution']").val();

                    if ($(form).find("input[name='frc-captcha-solution']").length == 0)
                        formData.friendlyCaptcha = "no-captcha";
                    if ($(form).find("input[name = 'ReceiveMaterial']").length > 0)
                        formData.receivematerial = $(form).find("input[name = 'ReceiveMaterial']").prop("checked");
                    if ($(form).find("input[name = 'ReceiveCallback']").length > 0)
                        formData.receivecallback = $(form).find("input[name = 'ReceiveCallback']").prop("checked");


                    $.ajax({
                        method: "POST",
                        url: "/api/Messages/ContactForm/Send",
                        cache: false,
                        data: formData,
                        beforeSend: function (xhr) {
                            btnSend.ladda("start");
                        }
                    }).done(function (res) {
                        $("#pnlContactFormForm_" + clientId).hide();
                        $("#pnlContactFormResult_" + clientId).html(res.html).fadeIn();

                    }).fail(function (jqXHR, textStatus, errorThrown) {
                        newCOMer.Global.Helper.throwApiXHRError(jqXHR, textStatus, errorThrown);
                    }).always(function () {
                        btnSend.ladda("stop");
                    });

                    return false;
                }
            });
        },
        initContactFormShort: function (clientId) {
            var that = this;

            var btnSend = $("#btnSend_" + clientId);
            btnSend.ladda();

            $("#frmContact_" + clientId).validate({
                debug: false,
                rules: {},
                messages: {},
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {

                    var formData = new Object();
                    formData.name = $(form).find("input[name='Name_" + clientId + "']").val();
                    formData.telephone = $(form).find("input[name='Telephone_" + clientId + "']").val();
                    formData.email = $(form).find("input[name='EMail_" + clientId + "']").val();
                    formData.text = $(form).find("textarea[name='Text_" + clientId + "']").val();
                    formData.privacy = $(form).find("input[name='Privacy_" + clientId + "']").prop("checked");

                    $.ajax({
                        type: "POST",
                        url: "/api/Messages/ContactFormShort/Send",
                        cache: false,
                        async: false,
                        contentType: "application/json",
                        data: JSON.stringify(formData),
                        dataType: "json",
                        beforeSend: function (xhr) {
                            btnSend.ladda("start");
                        }
                    }).done(function (res) {

                        var oPnlContactForm = $(form).find(".visiblePanel");
                        oPnlContactForm.hide();

                        var oPnlContactFormResult = $("#pnlContactFormResult_" + clientId);
                        oPnlContactFormResult.html(res.html);
                        oPnlContactFormResult.fadeIn();

                    }).fail(function (jqXHR, textStatus, errorThrown) {
                        newCOMer.Global.Helper.throwApiXHRError(jqXHR, textStatus, errorThrown);
                    }).always(function () {
                        btnSend.ladda("stop");
                    });


                    return false;
                },
                invalidHandler: function (event, validator) {
                    that.showErrorsInTabs(validator);
                }
            });

            that.addCustomValidatorRules();
            that.addValidatorsForDynamicElements("#frmContact_" + clientId);
        },
        initOfficialGazetteForm: function (clientId) {
            var btnSend = $("#btnSend_" + clientId);
            btnSend.ladda();

            $("#frmOfficialGazette_" + clientId).validate({
                debug: false,
                rules: {
                    Firstname: {
                        required: true,
                        maxlength: getValidationAttribute("Firstname", "length-max")
                    },
                    Lastname: {
                        required: true,
                        maxlength: getValidationAttribute("Lastname", "length-max")
                    },
                    EMail: {
                        required: true,
                        maxlength: getValidationAttribute("EMail", "length-max"),
                        email: getValidationAttribute("EMail", "regex-pattern")
                    },
                    Street: {
                        required: $("#frmOfficialGazette_" + clientId).find("input[name='Street']").attr("required") == "required" ? true : false,
                        maxlength: getValidationAttribute("Street", "length-max")
                    },
                    StreetNo: {
                        required: $("#frmOfficialGazette_" + clientId).find("input[name='StreetNo']").attr("required") == "required" ? true : false,
                        maxlength: getValidationAttribute("StreetNo", "length-max")
                    },
                    Zip: {
                        required: $("#frmOfficialGazette_" + clientId).find("input[name='Zip']").attr("required") == "required" ? true : false,
                        maxlength: getValidationAttribute("Zip", "length-max")
                    },
                    City: {
                        required: $("#frmOfficialGazette_" + clientId).find("input[name='City']").attr("required") == "required" ? true : false,
                        maxlength: getValidationAttribute("City", "length-max")
                    },
                    Telephone: {
                        required: $("#frmOfficialGazette_" + clientId).find("input[name='Telephone']").attr("required") == "required" ? true : false,
                        maxlength: getValidationAttribute("Telephone", "length-max")
                    },
                    Accepted: {
                        required: true
                    }
                },
                messages: {
                    Firstname: {
                        required: getValidationAttribute("Firstname", "required"),
                        maxlength: getValidationAttribute("Firstname", "length")
                    },
                    Lastname: {
                        required: getValidationAttribute("Lastname", "required"),
                        maxlength: getValidationAttribute("Lastname", "length")
                    },
                    Street: {
                        required: getValidationAttribute("Street", "required"),
                        maxlength: getValidationAttribute("Street", "length")
                    },
                    StreetNo: {
                        required: getValidationAttribute("StreetNo", "required"),
                        maxlength: getValidationAttribute("StreetNo", "length")
                    },
                    Zip: {
                        required: getValidationAttribute("Zip", "required"),
                        maxlength: getValidationAttribute("Zip", "length")
                    },
                    City: {
                        required: getValidationAttribute("City", "required"),
                        maxlength: getValidationAttribute("City", "length")
                    },
                    Telephone: {
                        required: getValidationAttribute("Telephone", "required"),
                        maxlength: getValidationAttribute("Telephone", "length")
                    },
                    EMail: {
                        required: getValidationAttribute("EMail", "required"),
                        maxlength: getValidationAttribute("EMail", "length"),
                        email: getValidationAttribute("EMail", "regex")
                    },
                    Accepted: {
                        required: getValidationAttribute("Accepted", "required")
                    }
                },
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {


                    var formData = new Object();
                    formData.Firstname = $(form).find("input[name='Firstname']").val();
                    formData.Lastname = $(form).find("input[name='Lastname']").val();
                    formData.EMail = $(form).find("input[name='EMail']").val();
                    formData.Telephone = $(form).find("input[name='Telephone']").val();
                    formData.Zip = $(form).find("input[name='Zip']").val();
                    formData.City = $(form).find("input[name='City']").val();
                    formData.Street = $(form).find("input[name='Street']").val();
                    formData.StreetNo = $(form).find("input[name='StreetNo']").val();
                    formData.Accepted = $(form).find("input[name='Accepted']").prop("checked");


                    $.ajax({
                        type: "POST",
                        url: "/api/Messages/OfficialGazette/Send",
                        cache: false,
                        contentType: "application/json",
                        data: JSON.stringify(formData),
                        beforeSend: function (xhr) {
                            btnSend.ladda("start");
                        }
                    }).done(function (res) {

                        newCOMer.Global.Helper.scrollToAnyClient("#" + clientId);

                        $("#pnlOfficialGazetteForm_" + clientId).hide();
                        $("#pnlOfficialGazetteResult_" + clientId).html(res.html).show();

                    }).fail(function (jqXHR, textStatus, errorThrown) {
                        newCOMer.Global.Helper.throwApiXHRError(jqXHR, textStatus, errorThrown);
                    }).always(function () {
                        btnSend.ladda("stop");
                    });

                    return false;
                }
            });

        },
        initNewsletterSignUpForm: function (clientId) {

            var that = this;

            var btnSend = $("#btnSend_" + clientId);
            btnSend.ladda();


            $("#frmNewsletterSignUpForm_" + clientId).validate({
                debug: false,
                rules: {},
                messages: {},
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {

                    var formData = new Object();
                    formData.email = $(form).find("input[name='EMail_" + clientId + "']").val();
                    formData.firstname = $(form).find("input[name='Firstname_" + clientId + "']").val();
                    formData.lastname = $(form).find("input[name='Lastname_" + clientId + "']").val();
                    formData.street = $(form).find("input[name='Street_" + clientId + "']").val();
                    formData.zip = $(form).find("input[name='Zip_" + clientId + "']").val();
                    formData.city = $(form).find("input[name='City_" + clientId + "']").val();
                    formData.country = $(form).find("select[name='CountryID_" + clientId + "'] option:selected").html();
                    formData.countryIso = $(form).find("select[name='CountryID_" + clientId + "']").val();
                    formData.accepted = $(form).find("input[name='Accepted_" + clientId + "']").prop("checked");
                    formData.salutationId = parseInt($(form).find("select[name='SalutationID_" + clientId + "']").val());

                    $.ajax({
                        type: "POST",
                        url: "/api/Messages/NewsletterSignUp/Send",
                        cache: false,
                        async: false,
                        contentType: "application/json",
                        data: JSON.stringify(formData),
                        dataType: "json",
                        beforeSend: function (xhr) {
                            btnSend.ladda("start");
                        }
                    }).done(function (res) {

                        var oPnlContactForm = $(form).find(".visiblePanel");
                        oPnlContactForm.hide();

                        var oPnlContactFormResult = $("#pnlNewsletterSignUpFormResult_" + clientId);
                        oPnlContactFormResult.html(res.html);
                        oPnlContactFormResult.fadeIn();

                    }).fail(function (jqXHR, textStatus, errorThrown) {
                        newCOMer.Global.Helper.throwApiXHRError(jqXHR, textStatus, errorThrown);
                    }).always(function () {
                        btnSend.ladda("stop");
                    });

                    return false;
                },
                invalidHandler: function (event, validator) {
                    that.showErrorsInTabs(validator);
                }
            });

            that.addCustomValidatorRules();
            that.addValidatorsForDynamicElements("#frmNewsletterSignUpForm_" + clientId);
        },
        initMemberForm: function (clientId) {
            var that = this;
            var btnSend = $("#btnSend_" + clientId);
            btnSend.ladda();

            $("#frmMemberForm_" + clientId).validate({
                debug: false,
                rules: {},
                messages: {},
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {

                    var formData = new Object();
                    formData.firstname = $(form).find("input[name='Firstname_" + clientId + "']").val();
                    formData.lastname = $(form).find("input[name='Lastname_" + clientId + "']").val();
                    formData.telephone = $(form).find("input[name='Telephone_" + clientId + "']").val();
                    formData.email = $(form).find("input[name='EMail_" + clientId + "']").val();
                    formData.city = $(form).find("input[name='City_" + clientId + "']").val();
                    formData.street = $(form).find("input[name='Street_" + clientId + "']").val();
                    formData.streetNo = $(form).find("input[name='StreetNo_" + clientId + "']").val();
                    formData.zip = $(form).find("input[name='Zip_" + clientId + "']").val();
                    formData.birthdate = $(form).find("input[name='BirthDate_" + clientId + "']").val();
                    formData.birthplace = $(form).find("input[name='BirthPlace_" + clientId + "']").val();
                    formData.job = $(form).find("input[name='Job_" + clientId + "']").val();
                    formData.roots = $(form).find("textarea[name='Roots_" + clientId + "']").val();
                    formData.assignment = false;
                    formData.highercontribution = $(form).find("input[name='HigherContribution_" + clientId + "']").prop("checked");
                    formData.contribution = $(form).find("input[name='Contribution_" + clientId + "']").val();
                    formData.accepted = $(form).find("input[name='Accepted_" + clientId + "']").prop("checked");


                    $.ajax({
                        method: "POST",
                        url: "/api/Messages/MemberForm/Send",
                        cache: false,
                        async: false,
                        contentType: "application/json",
                        data: JSON.stringify(formData),
                        beforeSend: function (xhr) {
                            btnSend.ladda("start");

                        }
                    }).done(function (res) {

                        newCOMer.Global.Helper.scrollToAnyClient("#" + clientId);

                        $("#pnlMemberForm_" + clientId).hide();
                        $("#pnlMemberFormResult_" + clientId).html(res.html).fadeIn();

                    }).fail(function (jqXHR, textStatus, errorThrown) {
                        newCOMer.Global.Helper.throwApiXHRError(jqXHR, textStatus, errorThrown);
                    }).always(function () {
                        btnSend.ladda("stop");
                    });

                    return false;
                }
            });


            that.addCustomValidatorRules();
            that.addValidatorsForDynamicElements("#frmMemberForm_" + clientId);
        },
        initCustomValidators: function (clientId) {
            var that = this;
            var btnSend = $("#btnSend_" + clientId);
            btnSend.ladda();

            $("#frmDonationForm_" + clientId).validate({
                debug: false,
                rules: {},
                messages: {},
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {

                    var formData = new Object();
                    formData.iban = $(form).find("input[name='Iban_" + clientId + "']").val();
                    formData.bic = $(form).find("input[name='Bic_" + clientId + "']").val();
                    formData.bankname = $(form).find("input[name='Bankname_" + clientId + "']").val();
                    formData.amount = $(form).find("input[name='Amount_" + clientId + "']").val();
                    formData.email = $(form).find("input[name='EMail_" + clientId + "']").val();
                    formData.privacy = $(form).find("input[name='Privacy_" + clientId + "']").prop("checked");

                    formData.firstname = $(form).find("input[name='Firstname_" + clientId + "']").val();
                    formData.lastname = $(form).find("input[name='Lastname_" + clientId + "']").val();
                    formData.street = $(form).find("input[name='Street_" + clientId + "']").val();
                    formData.streetNo = $(form).find("input[name='StreetNo_" + clientId + "']").val();
                    formData.zip = $(form).find("input[name='Zip_" + clientId + "']").val();
                    formData.city = $(form).find("input[name='City_" + clientId + "']").val();
                    formData.countryId = $(form).find("select[name='CountryId_" + clientId + "']").val();
                    formData.salutationId = $(form).find("select[name='SalutationId_" + clientId + "']").val();

                    $.ajax({
                        method: "POST",
                        url: "/api/Messages/DonationForm/Send",
                        contentType: "application/json",
                        data: JSON.stringify(formData),
                        async: true,
                        beforeSend: function (xhr, settings) {
                            btnSend.ladda("start");
                        }
                    }).done(function (res) {

                        newCOMer.Global.Helper.scrollToAnyClient("#" + clientId);

                        $("#pnlDonationForm_" + clientId).hide();
                        $("#pnlDonationFormResult_" + clientId).html(res.html).fadeIn();

                        btnSend.ladda("stop");
                    }).fail(function (jqXhr, textStatus, errorThrow) {
                        newCOMer.Global.Helper.throwApiXHRError(jqXHR, textStatus, errorThrown);
                        btnSend.ladda("stop");
                    });

                }
            });


            that.addCustomValidatorRules();
            that.addValidatorsForDynamicElements("#frmDonationForm_" + clientId);
        },
        submitOrderForm: function (clientId) {
            $("#CountryChanged").val(true);
            document.getElementById("frmOrder_" + clientId).submit();
        },
        initOrderForm: function (clientId) {
            var that = this;
            var btnSend = $("#btnSend_" + clientId);
            btnSend.ladda();

            $("#frmOrder_" + clientId).validate({
                rules: {},
                messages: {},
                ignore: ":hidden:not('.validate-hidden')",
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {
                    var formValid = $("#frmOrder_" + clientId).valid();

                    if (!formValid)
                        return false;
                    else
                        form.submit();
                }
            });

            that.addDynamicValidators("#frmOrder_" + clientId);

        },
        submitOrderFormToServer: function (event, clientId) {
            var formValid = $("#frmOrder_" + clientId).valid();

            if (!formValid) {
                console.log("form invalid");
                event.preventDefault();
                // return false;
            }
        },
        // Validatoren für dynamische Elemente (MKE) aktivieren und zum Formular hinzufügen
        addDynamicValidators: function (containerSelector) {

            $(containerSelector + " input[type='text'], " + containerSelector + " input[type='checkbox'], " +
                containerSelector + " select, " + containerSelector + " input[type='hidden'].validate-hidden, " + containerSelector + " textarea").each(function () {

                    var required = jQuery(this).attr("data-val-required");
                    var maxlength = jQuery(this).attr("data-val-length-max");
                    var mustbechecked = jQuery(this).attr("data-val-checked");
                    var needsintvalue = jQuery(this).attr("data-val-needsintvalue");

                    if (required !== undefined && required !== 'undefined' && required !== null && required !== "") {
                        var validationMessage = jQuery(this).attr("data-val-required");
                        var condition = jQuery(this).attr("data-val-required-depends-on-checked");
                        var conditionValue = jQuery(this).attr("data-val-required-depends-on-value");

                        if (condition !== undefined || conditionValue !== undefined) {
                            if (condition !== undefined) {

                                $(this).rules("add", {
                                    required: function () {
                                        return jQuery(condition).prop("checked");
                                    },
                                    messages: { required: validationMessage }
                                });
                            }

                            if (conditionValue !== undefined) {
                                var elementToCompare = conditionValue.split("||")[0];
                                var valueToCompare = conditionValue.split("||")[1];

                                $(this).rules("add", {
                                    required: function () {
                                        return jQuery(elementToCompare).val() == valueToCompare;
                                    },
                                    messages: { required: validationMessage }
                                });
                            }
                        } else {
                            $(this).rules("add", {
                                required: true,
                                messages: { required: validationMessage }
                            });
                        }
                    }

                    if (maxlength !== undefined && maxlength !== 'undefined' && maxlength !== null && maxlength !== "") {
                        var validationMessageMaxLength = jQuery(this).attr("data-val-length");
                        $(this).rules("add", {
                            maxlength: jQuery(this).attr("data-val-length-max"),
                            messages: { maxlength: validationMessageMaxLength }
                        });
                    }

                    if (mustbechecked !== undefined && mustbechecked !== 'undefined' && mustbechecked !== null && mustbechecked !== "" && mustbechecked !== "false") {
                        var validationMessageChecked = jQuery(this).attr("data-val-checked-message");
                        $(this).rules("add",
                            {
                                mustbechecked: true,
                                messages: { mustbechecked: validationMessageChecked }
                            });
                    }

                    if (needsintvalue !== undefined && needsintvalue !== 'undefined' && needsintvalue !== null && needsintvalue !== "" && needsintvalue !== "false") {
                        var validationMessageNeedsIntegerValue = jQuery(this).attr("data-val-needsvalue-message");

                        $(this).rules("add",
                            {
                                needsintvalue: true,
                                messages: { needsintvalue: validationMessageNeedsIntegerValue }
                            });
                    }

                });
        },
        toggleAndFocus: function (id) {
            var target = jQuery("#" + id);

            if (target.prop("disabled")) {
                target.prop("disabled", false).focus();
            } else {
                target.prop("disabled", true);
            }
        },
        showErrorsInTabs: function (validator) {

            if (validator.errorList.length > 0) {
                var firstErrorElement = jQuery(validator.errorList[0].element);
                var tabId = firstErrorElement.closest(".tab-pane-form").attr("id");

                // go to tab with error - validate scrolls to the error by default
                jQuery("[href='#" + tabId + "']").trigger("click");
            }
        },
        addCustomValidatorRules: function () {
            var that = this;

            // Email
            jQuery.validator.addMethod("emailcustom", function (value, element) {
                return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value);

            }, "Diese E-Mail-Adresse ist nicht korrekt");
        },
        addValidatorsForDynamicElements: function (clientId) {

            $(clientId).find("input,select,textarea").each(function () {

                var required = jQuery(this).attr("required");
                var maxlength = jQuery(this).attr("data-val-length-max");
                var regex = jQuery(this).attr("data-val-regex-pattern");
                var email = jQuery(this).attr("checkemail");

                if (required !== undefined && required !== 'undefined' && required !== null && required !== "") {
                    var validationMessage = jQuery(this).attr("data-val-required");

                    $(this).rules("add",
                        {
                            required: true,
                            messages: { required: validationMessage }
                        });
                }
                if (maxlength !== undefined && maxlength !== 'undefined' && maxlength !== null && maxlength !== "") {
                    var validationMessageMaxLength = jQuery(this).attr("data-val-length");
                    $(this).rules("add",
                        {
                            maxlength: jQuery(this).attr("data-val-length-max"),
                            messages: { maxlength: validationMessageMaxLength }
                        });
                }

                if (regex !== undefined && regex !== 'undefined' && regex !== null && regex !== ""
                    && email !== undefined && email !== 'undefined' && email !== null && email !== "" && email === "true") {
                    var validationMessageEmail = jQuery(this).attr("data-val-regex");

                    $(this).rules("add",
                        {
                            emailcustom: true,
                            messages: { emailcustom: validationMessageEmail }
                        });
                }
            });
        },
        saveCookiePreferences: function (toggle, allowAll, dismissed) {

            if (allowAll)
                jQuery("#cookieNotice input.custom-control-input").prop("checked", true);

            if (dismissed !== true) {
                jQuery("#cookieNotice input.custom-control-input").each(function () {
                    var isChecked = jQuery(this).prop("checked");
                    var cookieName = jQuery(this).attr("data-cookieName");

                    if (allowAll)
                        isChecked = true;

                    if (isChecked === true)
                        newCOMer.Global.Helper.createCookie(cookieName, isChecked, 30);
                });
            }

            newCOMer.Global.Helper.createCookie("cookieNoticeDismissed", "true", 30);

            if (toggle)
                jQuery("#cookieNotice").modal("toggle");

            this.loadAnalyticsIfConsented();
        },
        resetCookiePreferences: function () {
            newCOMer.Global.Helper.deleteCookie("cookieNoticeDismissed");
            newCOMer.Global.Helper.deleteCookie("ConsentGoogleAnalytics");
            newCOMer.Global.Helper.deleteCookie("ConsentGoogleMaps");
            newCOMer.Global.Helper.deleteCookie("ConsentTracking");
            newCOMer.Global.Helper.deleteCookie("ConsentYouTube");

            window.location.reload();
        },
        loadAnalyticsIfConsented: function () {
            if (newCOMer.Global.Helper.readCookie("ConsentGoogleAnalytics") === "true" || texts.useCookieNotice == false) {

                $.ajax({
                    method: "GET",
                    url: "/api/Text/AnalyticsCode"
                }).done(function (res) {
                    jQuery("body").append(res.translatedText);
                }).fail(function (jqXHR, textStatus, errorThrown) {
                    newCOMer.Global.Helper.throwApiXHRError(jqXHR, textStatus, errorThrown);
                });
            }
        },
        exportWebpages: function (caller) {
            var oCaller = $(caller);
            var url = oCaller.attr("data-link");

            newCOMer.Global.Helper.waitingDialogShow(function () {
                $.ajax({
                    method: "GET",
                    url: url,
                    beforeSend: function (xhr) {
                        oCaller.ladda("start");
                    }
                }).done(function (res) {
                    if (res.status.statusType === 0 && res.status.code === "ICO000")
                        window.location.href = res.downloadUrl;
                    else
                        newCOMer.Global.Helper.showError(res.status.statusTypeText + " (" + res.status.statusType + "):" + res.status.code + ":" + res.status.message);
                }).fail(function (xhr, ajaxOptions, thrownError) {
                    var status = xhr.status;
                    var error = thrownError;
                    newCOMer.Global.Helper.showError(status + ":" + error);
                }).always(function () {
                    oCaller.ladda("stop");
                    newCOMer.Global.Helper.waitingDialogHide();
                });
            });
        },
        exportGastronomyList: function (caller) {
            var oCaller = $(caller);
            var url = oCaller.attr("data-link");

            newCOMer.Global.Helper.waitingDialogShow(function () {
                $.ajax({
                    method: "GET",
                    url: url,
                    beforeSend: function (xhr) {
                        oCaller.ladda("start");
                    }
                }).done(function (res) {
                    if (res.status.statusType === 0 && res.status.code === "ICO000")
                        window.location.href = res.downloadUrl;
                    else
                        newCOMer.Global.Helper.showError(res.status.statusTypeText + " (" + res.status.statusType + "):" + res.status.code + ":" + res.status.message);

                }).fail(function (xhr, ajaxOptions, thrownError) {
                    var status = xhr.status;
                    var error = thrownError;
                    newCOMer.Global.Helper.showError(status + ":" + error);
                }).always(function () {
                    oCaller.ladda("stop");
                    newCOMer.Global.Helper.waitingDialogHide();
                });
            });
        },
        addToCart: function (articleId, articleAmount) {
            var that = this;

            $("#add-article-form_" + articleId).validate({
                debug: false,
                ignore: ".ignore",
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {

                    var amount = parseInt(jQuery(articleAmount).val());
                    var price = null;

                    if (jQuery("input[type='text']#articleprice_" + articleId).length > 0) {
                        price = parseFloat(jQuery("input[type='text']#articleprice_" + articleId).val());
                    }

                    var formData = new Object();

                    // hier könnte man loopen fürs hinzufügen mehrerer Artikel
                    var articles = new Array();

                    var articleItem = new Object();
                    articleItem.ArticleID = articleId;
                    articleItem.Amount = amount;
                    articleItem.Price = price;
                    articles.push(articleItem);

                    formData.Articles = articles;

                    $.ajax({
                        type: "POST",
                        url: "/api/ShoppingCart/AddItem",
                        cache: false,
                        contentType: "application/json",
                        data: JSON.stringify(formData)
                    }).done(function (res) {

                        newCOMer.Global.Helper.showSuccess(res.html);
                        that.reloadCart();
                        that.updateFullCartAmount();

                    }).fail(function (xhr, ajaxOptions, thrownError) {
                        var status = xhr.status;
                        var error = thrownError;
                        newCOMer.Global.Helper.showError(status + ":" + error);
                    });
                }
            });

            if (jQuery("#articleprice_" + articleId).length > 0) {
                jQuery("#articleprice_" + articleId).rules("add", {
                    required: true,
                    float: true,
                    messages: {
                        required: getValidationAttribute("articleprice_" + articleId, "required")
                    }
                });
            }
            if (jQuery("#amount_" + articleId).length > 0) {
                jQuery("#amount_" + articleId).rules("add", {
                    required: true,
                    messages: {
                        required: getValidationAttribute("amount_" + articleId, "required")
                    }
                });
            }
        },
        checkItemAvailability: function (articleId, amount) {
            var that = this;

            $.ajax({
                type: "GET",
                url: "/api/ShoppingCart/CheckAvailability/" + articleId + "/" + amount,
                cache: false
            }).done(function (res) {

                if (!res.result) {
                    jQuery("#amount_" + articleId).val(res.maximum);
                    newCOMer.Global.Helper.showError(res.html);
                }
            }).fail(function (xhr, ajaxOptions, thrownError) {
                var status = xhr.status;
                var error = thrownError;
                newCOMer.Global.Helper.showError(status + ":" + error);
            });
        },
        updateCartItem: function (articleId, amount, price) {
            var that = this;

            $.ajax({
                type: "GET",
                url: "/api/ShoppingCart/Update/" + articleId + "/" + amount + "?price=" + price,
                cache: false
            }).done(function (res) {

                that.reloadCart();
                that.updateFullCartAmount();

            }).fail(function (xhr, ajaxOptions, thrownError) {
                var status = xhr.status;
                var error = thrownError;
                newCOMer.Global.Helper.showError(status + ":" + error);
            });
        },
        getCartItemAmount: function (articleId) {
            var that = this;

            return encodeURIComponent(parseInt(jQuery("input[type='number']#cartarticleamount_" + articleId).val()));
        },
        updateFullCartAmount: function (articleId) {
            var that = this;

            $.ajax({
                type: "GET",
                url: "/api/ShoppingCart/GetCartItemAmount",
                cache: false
            }).done(function (res) {

                jQuery(".shopping-cart-amount").html(res.result);
                jQuery(".shopping-cart-amount").attr("data-articlecount", res.result);

            }).fail(function (xhr, ajaxOptions, thrownError) {
                var status = xhr.status;
                var error = thrownError;
                newCOMer.Global.Helper.showError(status + ":" + error);
            });
        },
        getCartItemPrice: function (selector) {
            var that = this;

            if (jQuery(selector).length > 0) {
                var value = jQuery(selector).val().replace(",", ".");
                value = parseFloat(value);
                return encodeURIComponent(value);
            } else {
                return null;
            }
        },
        removeFromCart: function (articleId, articleName) {
            var that = this;
            var textDeleteItemConfirm = newCOMer.Global.Helper.getTranslatedText("Articles:DeleteItemFromCart").replace("{0}", articleName);

            if (confirm(textDeleteItemConfirm)) {
                $.ajax({
                    type: "GET",
                    url: "/api/ShoppingCart/Remove/" + articleId,
                    cache: false
                }).done(function (res) {

                    that.reloadCart();
                    that.updateFullCartAmount();

                }).fail(function (xhr, ajaxOptions, thrownError) {
                    var status = xhr.status;
                    var error = thrownError;
                    newCOMer.Global.Helper.showError(status + ":" + error);
                });
            }
        },
        reloadCart: function () {
            var that = this;
            var container = jQuery("[data-shoppingcartcontainer]");

            if (container.length > 0) {

                var loadingAnimation = "<p class='text-center reload-indicator'><i class='fas fa-circle-notch fa-spin'></i></p>";
                container.html(loadingAnimation);

                $.ajax({
                    url: "api/ShoppingCart/GetCart",
                    method: "GET",
                    dataType: "json"
                }).done(function (res) {

                    container.html(res.html);

                    if (res.amount === 0) {
                        // Bestellformular ausblenden
                        jQuery("div[data-type='ORDERFORM']").hide();
                    } else {
                        jQuery("div[data-type='ORDERFORM']").show();
                    }

                }).fail(function (jqXhr, textStatus, errorThrow) {
                    that.hideLoadingPanel();
                    newCOMer.Global.Helper.showError(JSON.parse(jqXhr.responseJSON).Status.Message);
                });
            }
        },
        choosePaymentMethod: function (paymentMethodId, paymentMethodChosenText, clientId) {
            var that = this;

            jQuery('#PaymentMethodId_' + clientId).val(paymentMethodId).trigger("change");
            jQuery('#chosen-payment-method_' + clientId).html(paymentMethodChosenText);
            jQuery('#frmOrder_' + clientId).valid();
        },
        goToNextControl: function (currentControl) {
            var that = this;

            var slider = jQuery(currentControl).parents(".carousel");
            var nextControl = slider.next();

            newCOMer.Global.Helper.scrollToAnyClient(nextControl);
        },
        initProjectForm: function (clientId) {
            var that = this;
            var btnSend = $("#btnSend_" + clientId);
            btnSend.ladda();

            tinymce.init({
                selector: ".tinymce-texteditor",
                menubar: false,
                branding: false,
                statusbar: true,
                resize: true,
                relative_urls: false,
                convert_urls: false,
                language: "de",
                paste_as_text: true,
                allow_script_urls: true,
                plugins: "autolink link lists table code autoresize paste hr",
                toolbar: "undo redo | bold italic | bullist numlist | link unlink",
                setup: function (editor) {
                    editor.on('blur', function () {
                        var content = editor.getContent();
                        //content = content.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
                        
                        jQuery("#" + editor.id).val(content);

                        if (content !== "")
                            jQuery("#" + editor.id).valid();

                        jQuery("#" + editor.id).trigger("change");
                        that.validateTinyMce("#ProjectDescription_" + clientId);
                    });
                }
            });

            // Bild vorbefüllen, wenn bearbeitet wird
            var Images = jQuery("#UploadedFiles_" + clientId).val();

            $("div#dropzone-container_" + clientId).dropzone({
                url: "/api/File/Upload",
                method: "post",
                paramName: "file",
                autoDiscover: false,
                uploadMultiple: false,
                thumbnailMethod: "contain",
                maxFilesize: 5,
                maxFiles: 3,
                withCredentials: false,
                addRemoveLinks: true,
                acceptedFiles: fileTypeList,
                dictFallbackMessage: texts.dictFallbackMessage,
                dictFallbackText: texts.dictFallbackText,
                dictInvalidFileType: texts.dictInvalidFileType,
                dictFileTooBig: texts.dictFileTooBig,
                dictMaxFilesExceeded: texts.dictMaxFilesExceeded,
                dictResponseError: texts.dictResponseError,
                dictCancelUpload: texts.dictCancelUpload,
                dictCancelUploadConfirmation: texts.dictCancelUploadConfirmation,
                dictRemoveFile: texts.dictRemoveFile,
                previewTemplate:
                    "<div class=\"dz-preview dz-file-preview\"><div class=\"dz-details\"><img data-dz-thumbnail /><div class=\"dz-filename\"><span data-dz-name></span></div><div class=\"dz-size\" data-dz-size></div></div>" +
                    "<div class=\"dz-success-mark\"><span><i class=\"fal fa-check\"></i></span></div><div class=\"dz-error-mark\"><span><i class=\"fas fa-exclamation\"></i></span></div><div class=\"dz-error-message\"><span data-dz-errormessage></span></div></div>",
                init: function () {
                    this.on("success", function (file) {
                        var res = JSON.parse(file.xhr.response);
                        var currentFiles = jQuery("#UploadedFiles_" + clientId).val();
                        var newFiles = new Array();

                        if (currentFiles.length > 0)
                            newFiles = currentFiles.split(",");

                        newFiles.push(res.finalFilename);

                        jQuery("#UploadedFiles_" + clientId).val(newFiles);
                    });
                    this.on("removedfile", function (file) {

                        var filename = file.name;
                        if (file.xhr !== undefined)
                            filename = JSON.parse(file.xhr.responseText).finalFilename;

                        var currentFiles = jQuery("#UploadedFiles_" + clientId).val();
                        var newFiles = new Array();

                        if (currentFiles.length > 0)
                            newFiles = currentFiles.split(",");

                        newFiles = newFiles.filter(item => item !== filename);

                        jQuery("#UploadedFiles_" + clientId).val(newFiles);
                    });

                    var dropzoneItem = this;

                    if (Images !== undefined && Images !== "") {
                        Images = Images.split(',');
                        jQuery(Images).each(function (index, item) {

                            var fileName = item.split(".")[0];
                            var extension = item.split(".")[1];
                            var jsURL = "/api/File/DisplayUpload/" + extension + "/" + fileName;

                            let mockFile = { name: item, size: null };
                            let callback = null;
                            let crossOrigin = null;
                            let resizeThumbnail = false;

                            dropzoneItem.displayExistingFile(mockFile, jsURL, callback, crossOrigin, resizeThumbnail);
                        });
                    }
                }
            })


            $("#frmProject_" + clientId).validate({
                rules: {},
                messages: {},
                ignore: ":hidden:not('.validate-hidden')",
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {
                    that.validateTinyMce("#ProjectDescription_" + clientId);
                    var formValid = $("#frmProject_" + clientId).valid();

                    if (!formValid)
                        return false;
                    else
                        form.submit();
                }
            });

            that.addDynamicValidators("#frmProject_" + clientId);
            that.validateTinyMce("#ProjectDescription_" + clientId);
        },
        validateTinyMce: function (selector) {            
            jQuery(selector).each(function () {

                var target = this;
                var observer = new MutationObserver(function (mutations) {

                    mutations.forEach(function (mutation) {
                        if (mutation.attributeName === "class") {
                            var attributeValue = $(mutation.target).prop(mutation.attributeName);

                            if (attributeValue.indexOf("error") > -1) {
                                jQuery(target).siblings(".tox-tinymce").addClass("error");

                                jQuery(target)
                                    .siblings(".error-message").addClass("show")
                                    .children(".tooltip-inner").html(jQuery(target).attr("data-val-required")).show();
                            } else {
                                jQuery(target).siblings(".tox-tinymce").removeClass("error");

                                jQuery(target)
                                    .siblings(".error-message").removeClass("show")
                                    .children(".tooltip-inner").html("").hide();
                            }
                        }
                    });
                });

                observer.observe(target, { attributes: true });
            });
        },
        togglePanel: function (id) {
            var target = jQuery("#" + id);

            if (target.css("display") == "none") {
                target.show();
            } else {
                target.hide();
            }
        },
        initEventForm: function (clientId) {
            var that = this;
            var btnSend = $("#btnSend_" + clientId);
            btnSend.ladda();

            tinymce.init({
                selector: ".tinymce-texteditor",
                menubar: false,
                branding: false,
                statusbar: true,
                resize: true,
                relative_urls: false,
                convert_urls: false,
                language: "de",
                paste_as_text: true,
                allow_script_urls: true,
                plugins: "autolink link lists table code autoresize paste hr",
                toolbar: "undo redo | bold italic | bullist numlist | link unlink",
                setup: function (editor) {
                    editor.on('blur', function () {
                        var content = editor.getContent();
                        //content = content.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');

                        jQuery("#" + editor.id).val(content);

                        if (content !== "")
                            jQuery("#" + editor.id).valid();

                        jQuery("#" + editor.id).trigger("change");
                        that.validateTinyMce("#EventDescription_" + clientId);
                    });
                }
            });

            // Bild vorbefüllen, wenn bearbeitet wird
            var Images = jQuery("#UploadedFiles_" + clientId).val();

            $("div#dropzone-container_" + clientId).dropzone({
                url: "/api/File/Upload",
                method: "post",
                paramName: "file",
                autoDiscover: false,
                uploadMultiple: false,
                thumbnailMethod: "contain",
                maxFilesize: 5,
                maxFiles: 3,
                withCredentials: false,
                addRemoveLinks: true,
                acceptedFiles: fileTypeList,
                dictFallbackMessage: texts.dictFallbackMessage,
                dictFallbackText: texts.dictFallbackText,
                dictInvalidFileType: texts.dictInvalidFileType,
                dictFileTooBig: texts.dictFileTooBig,
                dictMaxFilesExceeded: texts.dictMaxFilesExceeded,
                dictResponseError: texts.dictResponseError,
                dictCancelUpload: texts.dictCancelUpload,
                dictCancelUploadConfirmation: texts.dictCancelUploadConfirmation,
                dictRemoveFile: texts.dictRemoveFile,
                previewTemplate:
                    "<div class=\"dz-preview dz-file-preview\"><div class=\"dz-details\"><img data-dz-thumbnail /><div class=\"dz-filename\"><span data-dz-name></span></div><div class=\"dz-size\" data-dz-size></div></div>" +
                    "<div class=\"dz-success-mark\"><span><i class=\"fal fa-check\"></i></span></div><div class=\"dz-error-mark\"><span><i class=\"fas fa-exclamation\"></i></span></div><div class=\"dz-error-message\"><span data-dz-errormessage></span></div></div>",
                init: function () {
                    this.on("success", function (file) {
                        var res = JSON.parse(file.xhr.response);
                        var currentFiles = jQuery("#UploadedFiles_" + clientId).val();
                        var newFiles = new Array();

                        if (currentFiles.length > 0)
                            newFiles = currentFiles.split(",");

                        newFiles.push(res.finalFilename);

                        jQuery("#UploadedFiles_" + clientId).val(newFiles);
                    });
                    this.on("removedfile", function (file) {

                        var filename = file.name;
                        if (file.xhr !== undefined)
                            filename = JSON.parse(file.xhr.responseText).finalFilename;

                        var currentFiles = jQuery("#UploadedFiles_" + clientId).val();
                        var newFiles = new Array();

                        if (currentFiles.length > 0)
                            newFiles = currentFiles.split(",");

                        newFiles = newFiles.filter(item => item !== filename);

                        jQuery("#UploadedFiles_" + clientId).val(newFiles);
                    });

                    var dropzoneItem = this;

                    if (Images !== undefined && Images !== "") {
                        Images = Images.split(',');
                        jQuery(Images).each(function (index, item) {

                            var fileName = item.split(".")[0];
                            var extension = item.split(".")[1];
                            var jsURL = "/api/File/DisplayUpload/" + extension + "/" + fileName;

                            let mockFile = { name: item, size: null };
                            let callback = null;
                            let crossOrigin = null;
                            let resizeThumbnail = false;

                            dropzoneItem.displayExistingFile(mockFile, jsURL, callback, crossOrigin, resizeThumbnail);
                        });
                    }
                }
            })


            $("#frmEvent_" + clientId).validate({
                rules: {},
                messages: {},
                ignore: ":hidden:not('.validate-hidden')",
                showErrors: function (errorMap, errorList) {
                    getErrorToolTips(this, errorMap, errorList);
                },
                errorPlacement: function (error, element) {
                    return true;
                },
                submitHandler: function (form) {
                    that.validateTinyMce("#EventDescription_" + clientId);
                    var formValid = $("#frmEvent_" + clientId).valid();

                    if (!formValid)
                        return false;
                    else
                        form.submit();
                }
            });

            that.addDynamicValidators("#frmEvent_" + clientId);
            that.validateTinyMce("#EventDescription_" + clientId);
        }
    };
    return {
        Cms: Cms
    };
})();;
/**
     newCOMer Cms CM 05.06.2019
**/

newCOMerCms.Cms.Events = newCOMerCms.Cms.Events || {};

newCOMerCms.Cms.Events = (function () {
    function Events(options) {
        var defaults = {};
        this.globalOpts = jQuery.extend({}, defaults, options || {});
    }

    function buildSearchQueryString(dateFromClientId, dateUntilClientId, searchQueryClientId, chksReifCharateristicClientId, modelClientId, showAlltimeHighlights) {

        var dateFrom = $(dateFromClientId).val();
        var dateUntil = $(dateUntilClientId).val();
        var searchQuery = $(searchQueryClientId).val();
        var chksReifCharateristic = $(chksReifCharateristicClientId + ":checked");

        var result = "";

        if ($.trim(dateFrom) !== "") {
            if ($.trim(result) === "")
                result += "?";
            else
                result += "&";
            result += "dateFrom=" + $.trim(dateFrom);
        }

        if ($.trim(dateUntil) !== "") {
            if ($.trim(result) === "")
                result += "?";
            else
                result += "&";
            result += "dateUntil=" + $.trim(dateUntil);
        }

        if ($.trim(searchQuery) !== "") {
            if ($.trim(result) === "")
                result += "?";
            else
                result += "&";
            result += "searchQuery=" + $.trim(searchQuery);
        }

        var reifCharacteristicIDsCommaSeparated = "";

        chksReifCharateristic.each(function (index) {
            if ($(this).is(":checked"))
                reifCharacteristicIDsCommaSeparated += $(this).val();

            if (index !== chksReifCharateristic.length - 1)
                reifCharacteristicIDsCommaSeparated += ",";
        });

        if ($.trim(reifCharacteristicIDsCommaSeparated) !== "") {
            if ($.trim(result) === "")
                result += "?";
            else
                result += "&";
            result += "reifCharacteristicIDsCommaSeparated=" + $.trim(reifCharacteristicIDsCommaSeparated);
        }


        if ($.trim(result) === "")
            result += "?";
        else
            result += "&";
        result += "showAlltimeHighlights=" + $.trim(showAlltimeHighlights);

        var layoutType = null;

        if (jQuery("#btnSearchEvents_" + modelClientId).attr("data-layouttype") !== undefined
            && jQuery("#btnSearchEvents_" + modelClientId).attr("data-layouttype") !== null
            && jQuery("#btnSearchEvents_" + modelClientId).attr("data-layouttype") !== "") {
            layoutType = jQuery("#btnSearchEvents_" + modelClientId).attr("data-layouttype");
        }

        if (layoutType != null) {
            if ($.trim(result) === "")
                result += "?";
            else
                result += "&";
            result += "layoutType=" + layoutType;
        }

        return result;
    }

    function fillFieldsFromQueryString(dateFromClientId, dateUntilClientId, searchQueryClientId, chksReifCharateristicClientId, queryString) {

        if (queryString === null)
            queryString = "";

        var dateFrom = $(dateFromClientId);
        var dateUntil = $(dateUntilClientId);
        var searchQuery = $(searchQueryClientId);

        var chksReifCharateristic = $(chksReifCharateristicClientId);

        var dateFromVal = newCOMer.Global.Helper.getUrlParameter("dateFrom", queryString);
        var dateUntilVal = newCOMer.Global.Helper.getUrlParameter("dateUntil", queryString);
        var searchQueryVal = newCOMer.Global.Helper.getUrlParameter("searchQuery", queryString);
        var reifCharacteristicIDsCommaSeparatedVal = newCOMer.Global.Helper.getUrlParameter("reifCharacteristicIDsCommaSeparated", queryString);

        if (dateFromVal !== null)
            dateFrom.val(dateFromVal);

        if (dateUntilVal !== null)
            dateUntil.val(dateUntilVal);

        if (searchQueryVal !== null)
            searchQuery.val(searchQueryVal);

        if (reifCharacteristicIDsCommaSeparatedVal !== undefined && reifCharacteristicIDsCommaSeparatedVal !== null) {
            var reifCharacteristicIDsArr = reifCharacteristicIDsCommaSeparatedVal.split(",");

            chksReifCharateristic.each(function () {
                if (reifCharacteristicIDsArr.indexOf($(this).val()) !== -1)
                    $(this).prop("checked", true);
            });
        }
    }

    Events.prototype = {
        dateFromClientId: "#DateFrom",
        dateUntilClientId: "#DateUntil",
        searchQueryClientId: "#SearchQuery",
        chksReifCharateristicClientId: ".chkSubCategory",
        btnSearchEventsClientId: "#btnSearchEvents_",

        locale: "de-de",

        init: function (options) {
            var defaults = { locale: "de-de" };
            var opts = jQuery.extend({}, defaults, options || {});

            this.locale = opts.locale;
        },

        search: function (modelClientId, options) {
            var defaults = {};
            var opts = jQuery.extend({}, defaults, options || {});
            var that = this;
            var btn = $(this.btnSearchEventsClientId + modelClientId);
            var queryString = buildSearchQueryString(this.dateFromClientId,
                this.dateUntilClientId,
                this.searchQueryClientId,
                this.chksReifCharateristicClientId,
                modelClientId,
                opts.showAlltimeHighlights);


            newCOMer.Global.Helper.waitingDialogShow(function () {
                that.performSearch(btn, modelClientId, queryString);

                var link = document.location.href.replace(location.hash, "") + "#Q:" + newCOMer.Global.Helper.toBase64(queryString);
                document.location.href = link;
            });
        },

        searchAuto: function (modelClientId, options) {
            var defaults = {};
            var opts = jQuery.extend({}, defaults, options || {});

            this.search(modelClientId, options);
        },
        searchAutoUrl: function (modelClientId, options) {
            var defaults = {};

            var opts = jQuery.extend({}, defaults, options || {});

            var hash = $.trim(location.hash);
            if (hash !== "" && hash.startsWith("#Q:")) {

                var scrollId = null;

                if (hash.match(/@P:(.*)/) !== null) {
                    scrollId = hash.match(/@P:(.*)/)[1];
                    hash = hash.replace(/@P:(.*)/, "");
                    scrollId = atob(scrollId);
                }

                var queryString = newCOMer.Global.Helper.fromBase64(hash.replace("#Q:", ""));

                fillFieldsFromQueryString(this.dateFromClientId,
                    this.dateUntilClientId,
                    this.searchQueryClientId,
                    this.chksReifCharateristicClientId,
                    queryString);

                console.log(queryString);

                var btn = $(this.btnSearchEventsClientId + modelClientId);

                this.performSearch(btn,
                    modelClientId,
                    queryString,
                    options,
                    function () {
                        if (scrollId !== null)
                            newCOMer.Global.Helper.scrollTo(scrollId);
                    });
            }
        },
        performSearch: function (btn, modelClientId, queryString, options, callback) {
            var defaults = { locale: "de-de" };
            var opts = jQuery.extend({}, defaults, options || {});

            var url = "/api/Events/FullSearch/Html";

            if (opts.layoutType !== null && opts.layoutType !== undefined && opts.layoutType != "")
                url += "?layoutType=" + opts.layoutType;

            if ($.trim(queryString) !== "")
                url += queryString;

            var that = this;


            $.ajax({
                method: "GET",
                url: url,
                beforeSend: function (xhr) {
                    btn.ladda("start");
                }
            })
                .done(function (res) {
                    if (res.status.statusType === 0 && res.status.code === "ICO000") {
                        var pnlEventSearchResults = $("#eventSearchresults_" + modelClientId);
                        var pnlEventSearchresultsNoResults = $("#eventSearchresultsNoResults_" + modelClientId);
                        var spanFoundEventsCount = $("#foundEventsCount_" + modelClientId);
                        var pnlAlltimeHighlights = $("#eventSearch_allTimeHighlightEvents_" + modelClientId);
                        var divAlltimeHighlights = $("#eventSearchAlltimeHighlights_" + modelClientId);
                        var pnlEventSearch = $("#eventSearch_" + modelClientId);
                        var divEventSearch = $("#eventSearchSearchResults_" + modelClientId);
                        var pnlAlltimeHighlightNoResults = $("#eventSearch_allTimeHighlightEventsNoResults_" + modelClientId);
                        var divAlltimeHighlightsNoResults = $("#eventSearchAlltimeHighlightsNoResults_" + modelClientId);

                        if (res.htmlEvents !== null && res.htmlAlltimeHighlights !== null) {
                            pnlEventSearchresultsNoResults.hide();
                            spanFoundEventsCount.html("0");

                            divAlltimeHighlights.html(res.htmlAlltimeHighlights);
                            pnlAlltimeHighlights.show();

                            divEventSearch.html(res.htmlEvents);
                            pnlEventSearch.show();

                            spanFoundEventsCount.html(res.count);
                            pnlEventSearchResults.show();
                        } else if (res.htmlEvents !== null && res.htmlAlltimeHighlights === null) {
                            pnlEventSearchresultsNoResults.hide();
                            spanFoundEventsCount.html("0");

                            divAlltimeHighlights.empty();
                            pnlAlltimeHighlights.hide();

                            divEventSearch.html(res.htmlEvents);
                            pnlEventSearch.show();

                            spanFoundEventsCount.html(res.count);
                            pnlEventSearchResults.show();
                        } else {
                            pnlEventSearchResults.hide();
                            spanFoundEventsCount.html("0");

                            divAlltimeHighlights.empty();
                            pnlAlltimeHighlights.hide();

                            divEventSearch.empty();
                            pnlEventSearch.hide();

                            pnlEventSearchresultsNoResults.show();

                            if (res.htmlAlltimeHighlights !== null) {
                                divAlltimeHighlightsNoResults.html(res.htmlAlltimeHighlights);
                                pnlAlltimeHighlightNoResults.show();
                            } else {
                                divAlltimeHighlightsNoResults.empty();
                                pnlAlltimeHighlightNoResults.hide();
                            }
                        }


                        that.toggleExportPanel(true);
                        that.setExportLinks(queryString);


                        if (callback !== undefined)
                            callback();

                    } else {
                        newCOMer.Global.Helper.showError(res.status.statusTypeText +
                            " (" +
                            res.status.statusType +
                            "):" +
                            res.status.code +
                            ":" +
                            res.status.message);
                    }
                })
                .fail(function (xhr, ajaxOptions, thrownError) {
                    var status = xhr.status;
                    var error = thrownError;
                    newCOMer.Global.Helper.showError(status + ":" + error);
                })
                .always(function () {
                    btn.ladda("stop");
                    newCOMer.Global.Helper.waitingDialogHide();
                });
        },
        setExportLinks: function (queryString) {
            var eventsExportCsvLink = $("#pnlExportTop .exportCsv");

            if (eventsExportCsvLink.length > 0) {
                eventsExportCsvLink.attr("data-link", eventsExportCsvLink.attr("data-baseLink") + queryString);
            }

            var eventsExportIcsLink = $("#pnlExportTop .exportIcs");

            if (eventsExportIcsLink.length > 0) {
                eventsExportIcsLink.attr("data-link", eventsExportIcsLink.attr("data-baseLink") + queryString);
            }

            var eventsExportPdfLink = $("#pnlExportTop .exportPdf");

            if (eventsExportPdfLink.length > 0) {
                eventsExportPdfLink.attr("data-link", eventsExportPdfLink.attr("data-baseLink") + queryString);
            }
        },
        toggleExportPanel: function (forceClose) {
            var oPnlExport = $("#pnl-export");
            var oEventListBoxes = $(".event-list-box");

            if (forceClose === false) {
                if (oPnlExport.css("display") === "none")
                    oPnlExport.show();
                else
                    oPnlExport.hide();

                this.toggleExportCheckboxPanels(oEventListBoxes);
            } else {
                oPnlExport.hide();
            }


        },
        setEventForExport: function (id, checkbox, label, box, setExport) {

            var chkDate = $("#chkDate_" + id);
            chkDate.prop("checked", setExport);

            checkbox.prop("checked", setExport);

            if (setExport === true) {
                label.prop("title", texts.eventDoNotExportPrint);
                box.addClass("event-checked");
            } else {
                label.prop("title", texts.eventExportPrint);
                box.removeClass("event-checked");
            }
        },
        toggleExportCheckboxPanels: function (oEventListBoxes, callback) {
            var that = this;

            oEventListBoxes.each(function () {
                var eventId = $(this).attr("data-eventId");

                var pnlExportSelector = $(this).find("#pnlExportSelector_" + eventId);
                var chk = $(this).find("#chkEvent_" + eventId);
                var lbl = $(this).find("#lblChkEvent_" + eventId);

                if (pnlExportSelector.length && chk.length && lbl.length) {

                    if (pnlExportSelector.css("display") === "none") {
                        pnlExportSelector.show();
                        jQuery("[data-allotherseventid='" + eventId + "']").show();
                        that.setEventForExport(eventId, chk, lbl, $(this), true);
                        jQuery(".event-list-box > div").css("padding-bottom", "40px");
                        jQuery(".container-date-checkbox").show();

                    } else {
                        pnlExportSelector.hide();
                        jQuery("[data-allotherseventid='" + eventId + "']").hide();
                        that.setEventForExport(eventId, chk, lbl, $(this), false);
                        jQuery(".event-list-box > div").css("padding-bottom", "");
                        jQuery(".container-date-checkbox").hide();
                    }
                }
            });

            if (callback !== undefined)
                callback();
        },
        toggleAllOthers: function (eventIdToPreserve, eventHeadIdToToggle) {
            var that = this;

            var eventsToToggle = $("div.event-list-box[data-eventHeadId='" +
                eventHeadIdToToggle +
                "']:not(div.event-list-box[data-eventId='" +
                eventIdToPreserve +
                "'])");
            var eventPreserved = jQuery("div.event-list-box[data-eventId='" + eventIdToPreserve + "']");
            var preserveButton = eventPreserved.find(".all-others");

            eventsToToggle.each(function () {
                var eventId = $(this).attr("data-eventId");

                var pnlExportSelector = $(this).find("#pnlExportSelector_" + eventId);
                var chk = $(this).find("#chkEvent_" + eventId);
                var lbl = $(this).find("#lblChkEvent_" + eventId);
                var box = $(this);
                var allothers = $(this).find("[data-allotherseventid='" + eventId + "']");

                allothers.html(allothers.attr("data-inactive"));

                that.setEventForExport(eventId, chk, lbl, box, false);
            });

            preserveButton.html(preserveButton.attr("data-active"));

            var chkPreserve = $("#chkEvent_" + eventIdToPreserve);
            var lblPreserve = $("#lblChkEvent_" + eventIdToPreserve);
            var boxPreserve = $("#scrollID_" + eventIdToPreserve);

            that.setEventForExport(eventIdToPreserve, chkPreserve, lblPreserve, boxPreserve, true);
        },
        toggleExportCheckbox: function (caller, id) {
            var chk = $(caller);
            var lbl = $("#lblChkEvent_" + id);
            var box = $("#scrollID_" + id);
            var callerCheckState = chk.prop("checked");

            this.setEventForExport(id, chk, lbl, box, callerCheckState);
        },
        exportEvents: function (caller) {
            var oCaller = $(caller);
            this.storeEventsExport(oCaller);
        },
        storeEventsExport: function (oCaller) {
            var hash = $.trim(location.hash);
            if (hash !== "" && hash.startsWith("#Q:")) {

                var scrollId = null;

                if (hash.match(/@P:(.*)/) !== null) {
                    scrollId = hash.match(/@P:(.*)/)[1];
                    hash = hash.replace(/@P:(.*)/, "");
                    scrollId = atob(scrollId);
                }

                var queryString = newCOMer.Global.Helper.fromBase64(hash.replace("#Q:", ""));

                var dateFromVal = newCOMer.Global.Helper.getUrlParameter("dateFrom", queryString);
                var dateUntilVal = newCOMer.Global.Helper.getUrlParameter("dateUntil", queryString);
                var searchQueryVal = newCOMer.Global.Helper.getUrlParameter("searchQuery", queryString);
                var reifCharacteristicIDsCommaSeparatedVal = newCOMer.Global.Helper.getUrlParameter("reifCharacteristicIDsCommaSeparated", queryString);
                var showAlltimeHighlightsVal = newCOMer.Global.Helper.getUrlParameter("showAlltimeHighlights", queryString);

                var reifCharacteristicIDsArr = new Array();

                if (reifCharacteristicIDsCommaSeparatedVal !== undefined && reifCharacteristicIDsCommaSeparatedVal !== null) {
                    reifCharacteristicIDsArr = reifCharacteristicIDsCommaSeparatedVal.split(",");
                }

                var foundEventIDsArr = new Array();
                var selectedEventsForExportArr = new Array();

                var foundEvents = $("div[data-type='EVENTLISTWITHSEARCH'] div[data-eventid]");
                foundEvents.each(function () {
                    var eventId = $(this).attr("data-eventid");
                    foundEventIDsArr.push(eventId);

                    if ($(this).find("input[type='checkbox'].event-select-checkbox:checked").is(":checked")) {
                        var showDate = $(this).find("input[type='checkbox'].event-date-checkbox:checked").is(":checked");
                        var recurring = $(this).attr("data-recurring");

                        recurring = recurring === "true" && !showDate;
                        selectedEventsForExportArr.push({ EventID: eventId, Recurring: recurring, ShowDate: showDate });
                    }
                });
                var storeEventsExportPostData = {
                    SearchRequestEvents: {
                        DateFrom: dateFromVal,
                        DateUntil: dateUntilVal,
                        SearchQuery: searchQueryVal,
                        ReifCharacteristicIDs: reifCharacteristicIDsArr,
                        ShowAlltimeHighlights: showAlltimeHighlightsVal,
                        Querystring: queryString
                    },
                    SearchResultEvents: {
                        FoundEventIDs: foundEventIDsArr
                    },
                    selectedEventsForExport: selectedEventsForExportArr
                };

                var url = "/api/Events/Export/Store";

                $.ajax({
                    method: "POST",
                    url: url,
                    cache: false,
                    contentType: "application/json",
                    data: JSON.stringify(storeEventsExportPostData),
                    beforeSend: function (xhr) {
                    }
                })
                    .done(function (res) {
                        if (res.status.statusType === 0 && res.status.code === "ICO000") {

                            var url = oCaller.attr("data-baselink");
                            url = url += "?uniqueSearchResultId=" + res.uniqueIdSearchResultId;

                            newCOMer.Global.Helper.waitingDialogShow(function () {
                                $.ajax({
                                    method: "GET",
                                    url: url,
                                    beforeSend: function (xhr) {
                                        oCaller.ladda("start");

                                    }
                                }).done(function (res) {
                                    if (res.status.statusType === 0 && res.status.code === "ICO000")
                                        window.location.href = res.downloadUrl;
                                    else
                                        newCOMer.Global.Helper.showError(res.status.statusTypeText +
                                            " (" +
                                            res.status.statusType +
                                            "):" +
                                            res.status.code +
                                            ":" +
                                            res.status.message);

                                }).fail(function (xhr, ajaxOptions, thrownError) {
                                    var status = xhr.status;
                                    var error = thrownError;
                                    newCOMer.Global.Helper.showError(status + ":" + error);
                                }).always(function () {
                                    oCaller.ladda("stop");
                                    newCOMer.Global.Helper.waitingDialogHide();
                                });

                            });
                        }
                        else
                            newCOMer.Global.Helper.showError(res.status.statusTypeText +
                                " (" +
                                res.status.statusType +
                                "):" +
                                res.status.code +
                                ":" +
                                res.status.message);

                    })
                    .fail(function (xhr, ajaxOptions, thrownError) {
                        var status = xhr.status;
                        var error = thrownError;
                        newCOMer.Global.Helper.showError(status + ":" + error);
                    })
                    .always(function () {
                    });
            }
        }
    };
    return {
        Events: Events
    };
})();;
/**
     newCOMer CMS CM 05.06.2019
     Startscript for all pages, globally
**/


jQuery(document).ready(function () {
    // Focuspoints setzen
    jQuery(".focuspoint").focusPoint();
    var isOpera = window.opera | window.opr | (navigator.userAgent.indexOf(' OPR/') > -1) | (navigator.userAgent.indexOf(' Coast/') > -1) | (navigator.userAgent.indexOf(' OPiOS/') > -1);

    if (config.cookieNotice)
        if (!isOpera)
            if (newCOMer.Global.Helper.readCookie("cookieNoticeDismissed") === "")
                jQuery("#cookieNotice").modal("show");

    jQuery("#cookieNotice").on("hidden.bs.modal", function () {
        cms.saveCookiePreferences(false, false, true);
    });

    //mark searchquery in html
    newCOMer.Global.Helper.markQuery();


    // Bildvergrößerung oder -anzeige via Fancybox
    jQuery("a[data-fancybox]").fancybox({
        type: 'image',
        toolbar: true,
        infobar: false
    });




    if (jQuery(".owl-carousel-container").length > 0) {

        jQuery(".owl-carousel-container").each(function () {
            var owl = $(this).children(".image-carousel-container,.post-carousel-container");
            var loop = owl.attr("data-loop") == "true";
            var autoplay = owl.attr("data-autoplay") == "true";
            var itemsperrow = parseInt(owl.attr("data-itemsperrow"));
            var speed = 800;
            var timeout = 2000;

            if (owl.attr("data-speed") !== "")
                timeout = owl.attr("data-speed");

            var responsive = {
                0: { items: 1 },
                600: { items: 3 },
                1000: { items: 5 },
                1600: { items: 6 },
                1900: { items: 8 }
            };

            if (itemsperrow == 4) {
                responsive = {
                    0: { items: 1 },
                    600: { items: 2 },
                    1000: { items: 4 },
                    1600: { items: 4 },
                    1900: { items: 4 }
                };
            }

            if (itemsperrow == 3) {
                responsive = {
                    0: { items: 1 },
                    600: { items: 2 },
                    1000: { items: 3 },
                    1600: { items: 3 },
                    1900: { items: 3 }
                };
            }

            if (itemsperrow == 2) {
                responsive = {
                    0: { items: 1 },
                    600: { items: 2 },
                    1000: { items: 2 },
                    1600: { items: 2 },
                    1900: { items: 2 }
                };
            }
            if (itemsperrow == 1) {
                responsive = {
                    0: { items: 1 },
                    600: { items: 1 },
                    1000: { items: 1 },
                    1600: { items: 1 },
                    1900: { items: 1 }
                };
            }

            owl.owlCarousel({
                loop: loop,
                nav: false,
                dots: false,
                autoplay: autoplay,
                autoplayTimeout: timeout,
                autoplaySpeed: speed,
                autoplayHoverPause: true,
                responsive: responsive
            });

            $(this).children(".owl-next-button").on("click", function () {
                owl.trigger('next.owl.carousel');
            });

            $(this).children(".owl-prev-button").on("click", function () {
                owl.trigger('prev.owl.carousel');
            });
        });
    }
});;
