PageSourceSearch

https://www.forsthaus-auerhahn.de/static/template-2089/js/auerhahn.js

js forsthaus-auerhahn.de collected 2026-09-25 22:56:11 UTC 26,197 bytes, 846 lines download raw bytes

1!(function ($, me) {
2  "use strict";
3  if (!$ || !me) {
4    return;
5  }
6  if (document.documentElement.getAttribute("dev") === "yes") {
7    window.me = me;
8  }
9
10  me.opt.ytLinks = true;
11  me.opt.fancyboxDefaultPadding = 0;
12  me.opt.mainMenuChk = $("#main_menu_checkbox");
13  me.opt.rememberLinks = $("[data-remember]");
14  me.opt.smc = new ScrollMagic.Controller();
15  window["scrolledBannerHeight"] = 60;
16
17  me.scroll_event = function () {
18    me.opt.site.toggleClass("scrolled", me.opt.scroll > me.opt.main_top);
19  };
20
21  // Parallax
22
23  /* Parallax add class in viewport */
24  if ($(".parallax").length > 0) {
25    $(function () {
26      $(".parallax img").each(function () {
27        var parallaxImage = $(this);
28        var parallaxTop = parallaxImage.offset().top - me.opt.window.height();
29        var parallaxStart = parallaxTop;
30
31        nst2015.opt.window.scroll(function () {
32          if (nst2015.opt.scroll >= parallaxStart) {
33            parallaxImage.css({
34              top: -((me.opt.scroll - parallaxStart) / 75) + "%",
35            });
36          }
37        });
38      });
39    });
40  }
41
42  if (me.opt.window.width() > 639) {
43    $(".card-cst").each(function () {
44      var el = $(this).children(".card-cst-left");
45      var elHeight = $(this).find(".card-images-img").height();
46      var containerTopHeight = el.children(".container-top").height();
47      var conatinerBottomHeight = el.children(".container-bottom").height();
48      var description = el.children(".card-description");
49      var maxHeight =
50        elHeight - containerTopHeight - conatinerBottomHeight - 38;
51
52      if (description.height() > maxHeight) {
53        description.css({
54          overflow: "hidden",
55          "max-height":
56            elHeight - containerTopHeight - conatinerBottomHeight - 38,
57        });
58        el.addClass("show-button-more");
59      }
60    });
61  }
62
63  // Display Newsletter Note only when character is typed in input field
64
65  // Bind keyup event on the input
66  $("#nl_user_email", "main")
67    .one("keyup", function () {
68      $(".cms-privacy-hint", $(this).closest(".cms-newsletter")).slideToggle(
69        this.value.length > 0,
70      );
71    })
72    .closest(".cms-newsletter")
73    .find(".cms-privacy-hint")
74    .hide(); // Trigger the keyup event, thus running the handler on page load
75
76  // set placeholder for newsletter form  disabled selected
77  $(".field-select").each(function (i, el) {
78    $("option:first", el).text($("label", el).text()).attr({
79      selected: "selected",
80      disabled: "disabled",
81    });
82  });
83  $(".field-input-text").each(function (i, el) {
84    $("input", el).attr("placeholder", $("label", el).text());
85  });
86  $(".field-input-email").each(function (i, el) {
87    $("input", el).attr("placeholder", $("label", el).text());
88  });
89
90  $(document).ready(function () {
91    // Sprungmarken Zimmergruppen -> Aktiver Filter ändern
92
93    var newfilter = document.location.hash.split("#").pop();
94    var matchingradio = $('.hrg-toggle-radio[data-name="' + newfilter + '"]');
95    var matchingradiooffers = $(
96      '.package-filter-input[data-name="' + newfilter + '"]',
97    );
98
99    if (matchingradio.length > 0) {
100      matchingradio.prop("checked", true);
101    }
102
103    if (matchingradiooffers.length > 0) {
104      matchingradiooffers.prop("checked", true);
105    }
106
107    // Barrierefreiheit
108
109    const widgetButton = me.opt.header[0].querySelector("button.widget-title");
110    if (widgetButton) {
111      widgetButton.addEventListener(
112        "click",
113        (event) => {
114          const targetId = event.currentTarget.dataset.for;
115          const target = document.getElementById(targetId);
116          target.checked = !target.checked;
117        },
118        false,
119      );
120    }
121    const poiButton = me.opt.header[0].querySelector("button.poi-chk-big");
122    if (poiButton) {
123      poiButton.addEventListener(
124        "click",
125        (event) => {
126          const targetId = event.currentTarget.dataset.for;
127          const target = document.getElementById(targetId);
128          target.checked = !target.checked;
129        },
130        false,
131      );
132    }
133
134    const menuButton = document.getElementById("nav_menu_button");
135    if (menuButton) {
136      const targetId = menuButton.dataset.for;
137      const target = document.getElementById(targetId);
138      if (target) {
139        menuButton.addEventListener(
140          "click",
141          () => {
142            const isExpanded =
143              menuButton.getAttribute("aria-expanded") === "true";
144            const open = typeof isOpen === "boolean" ? isOpen : !isExpanded;
145            menuButton.setAttribute("aria-expanded", open);
146            target.checked = !target.checked;
147          },
148          false,
149        );
150      }
151    }
152
153    const menuItems = document.querySelectorAll(".main-menu-item-name");
154    if (menuItems.length) {
155      menuItems.forEach((menuItem) => {
156        menuItem.addEventListener(
157          "click",
158          () => {
159            document
160              .querySelectorAll(".main-menu-checkbox")
161              .forEach((input) => (input.checked = false));
162            const targetId = menuItem.dataset.for;
163            const target = document.getElementById(targetId);
164            target.checked = !target.checked;
165          },
166          false,
167        );
168      });
169    }
170
171    const checkboxSite = document.querySelectorAll('input[type="checkbox"]');
172    document.addEventListener("keydown", function (event) {
173      if (event.keyCode === 27) {
174        checkboxSite.forEach(function (checkbox) {
175          checkbox.checked = false;
176        });
177        // Fokus vom Navigationselement entfernen
178        const navElement = document.getElementById("header_c_nav");
179        if (navElement) {
180          navElement.blur();
181        }
182      }
183    });
184    document.documentElement.classList.add("load-ready");
185    const buttonPrev = document.querySelector(".flex-prev");
186    buttonPrev?.setAttribute("aria-label", "Previous slide");
187    const buttonNext = document.querySelector(".flex-next");
188    buttonNext?.setAttribute("aria-label", "Next slide");
189
190    let sliderTrack = document.querySelectorAll(".slick-slider");
191    sliderTrack.forEach(function (slider) {
192      slider.removeAttribute("role");
193      slider.querySelectorAll(".slick-cloned h3").forEach(function (header) {
194        header.removeAttribute("id");
195      });
196      slider.querySelectorAll(".slick-slide").forEach(function (slide) {
197        slide.removeAttribute("role");
198        slide.removeAttribute("tabindex");
199        slide.removeAttribute("aria-label");
200        slide.removeAttribute("aria-hidden");
201      });
202    });
203
204    function handleDuplicateIds() {
205      const headings = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
206      const idCounts = {};
207
208      headings.forEach((heading) => {
209        if (heading.id) {
210          if (heading.id.trim() === "") {
211            heading.removeAttribute("id");
212            return;
213          }
214          idCounts[heading.id] = (idCounts[heading.id] || 0) + 1;
215          if (idCounts[heading.id] > 1) {
216            heading.id = `${heading.id}_${idCounts[heading.id] - 1}`;
217          }
218        }
219      });
220    }
221
222    handleDuplicateIds();
223  });
224
225  $(".gallery-big-items").slick({
226    autoplay: false,
227    mobileFirst: true,
228    slidesToShow: 1,
229    fade: true,
230    slidesToScroll: 1,
231    infinite: false,
232    dots: true,
233    arrows: true,
234    prevArrow:
235      '<button type="button" class="slick-prev"  aria-label="Previous slide" aria-disabled="true"><span>Prev</span></button>',
236    nextArrow:
237      '<button type="button" class="slick-next"  aria-label="Next slide" aria-disabled="true"><span>Next</span></button>',
238  });
239
240  $(".card-roomtype-images").slick({
241    autoplay: false,
242    mobileFirst: true,
243    slidesToShow: 1,
244    fade: true,
245    slidesToScroll: 1,
246    infinite: false,
247    dots: false,
248    arrows: true,
249    prevArrow:
250      '<button type="button" class="slick-prev" aria-label="Previous slide" ><span>Prev</span></button>',
251    nextArrow:
252      '<button type="button" class="slick-next" aria-label="Next slide" ><span>Next</span></button>',
253  });
254
255  // Only on non-Mobile Devices
256
257  if ($("#site").attr("data-mobile") == "false") {
258    // Width of Filter label-span on page load
259
260    $(document).ready(function () {
261      $(".label-container").each(function () {
262        var hoverElem = $(".label-span");
263        var checkedInputId = $(".filter-style-input:checked").attr("id");
264        var checkedInputWidth = $(
265          "label[for='" + checkedInputId + "']",
266        ).width();
267        var checkedInputoffsetLeft = $(
268          "label[for='" + checkedInputId + "']",
269        ).offset().left;
270        var offsetLeftParent = hoverElem
271          .closest(".label-container")
272          .offset().left;
273
274        hoverElem.css({
275          width: checkedInputWidth,
276          left: checkedInputoffsetLeft - offsetLeftParent,
277        });
278      });
279    });
280
281    // Filter on Hover
282
283    $(".filter-style-label").hover(
284      function () {
285        var offsetLeft = $(this).offset().left;
286        var offsetLeftParent = $(this)
287          .closest(".label-container")
288          .offset().left;
289        var elWidth = $(this).width();
290        var hoverElem = $(this).siblings(".label-span");
291
292        hoverElem.css({
293          width: elWidth,
294          left: offsetLeft - offsetLeftParent,
295        });
296      },
297      function () {
298        var checkedInput = $(".filter-style-input:checked");
299        var checkedInputId = checkedInput.attr("id");
300        var checkedInputWidth = $(
301          "label[for='" + checkedInputId + "']",
302        ).width();
303        var checkedInputoffsetLeft = $(
304          "label[for='" + checkedInputId + "']",
305        ).offset().left;
306        var offsetLeftParent = $(this)
307          .closest(".label-container")
308          .offset().left;
309        var hoverElem = $(this).siblings(".label-span");
310
311        hoverElem.css({
312          left: checkedInputoffsetLeft - offsetLeftParent,
313          width: checkedInputWidth,
314        });
315      },
316    );
317
318    /* Simple animation up */
319    var slideUp = me.opt.main.find(
320      ".card-roomtype-left>*, .card-package-text>* ,.anchor, .gallery-big h2, .grp-mem-20>*, .media-display-rl-text>*, .awards-slider .awards-slider-title, .awards-slider .awards-slider-item , .parallax-overlay *",
321    );
322    if (!me.opt.touch) {
323      $.each(slideUp, function (i, e) {
324        var slide = new ScrollMagic.Scene({
325          triggerElement: e,
326          triggerHook: 0.9,
327        })
328          .setClassToggle(this, "is-active")
329          .addTo(me.opt.smc);
330      });
331    }
332    $(".awards-slider-items").slick({
333      autoplay: false,
334      mobileFirst: true,
335      slidesToShow: 4,
336      speed: 1200,
337      slidesToScroll: 4,
338      infinite: false,
339      dots: true,
340      arrows: false,
341    });
342
343    $(".card-package-list-slider").slick({
344      autoplay: false,
345      slidesToShow: 1,
346      slidesToScroll: 1,
347      infinite: false,
348      dots: false,
349      fade: false,
350      prevArrow:
351        '<button type="button" class="slick-prev" aria-label="Previous slide" ><span>Prev</span></button>',
352      nextArrow:
353        '<button type="button" class="slick-next" aria-label="Next slide" ><span>Next</span></button>',
354      arrows: true,
355    });
356  }
357
358  // Prevent scrolling when Menu open
359
360  me.opt.mainMenuChk.on("change", function () {
361    if (me.opt.mainMenuChk.is(":checked")) {
362      $("body").css({
363        overflow: "hidden",
364      });
365    } else {
366      $("body").css({
367        overflow: "visible",
368      });
369    }
370  });
371
372  $(".main-menu-checkbox").on("change", function () {
373    $(".main-menu-checkbox").not(this).prop("checked", false);
374  });
375
376  // Merkliste Spa
377
378  me.req_items_url = function (data_attr) {
379    var url = "",
380      hp_count = 0,
381      cookie,
382      form_type,
383      hotel,
384      item,
385      current_item;
386
387    if (data_attr) {
388      var items = JSON.parse(data_attr);
389      for (item in items) {
390        if (items.hasOwnProperty(item)) {
391          current_item = items[item];
392          hp_count += current_item.type == "hp" ? 1 : 0;
393          url +=
394            "&amp;remember%5B" +
395            current_item.type +
396            "%5D%5B" +
397            current_item.id +
398            "%5D=" +
399            current_item.amount;
400        }
401      }
402    } else if (window.cst_remember) {
403      cookie = cst_remember.cookie_get();
404      for (hotel in cookie) {
405        if (cookie.hasOwnProperty(hotel)) {
406          for (item in cookie[hotel]["items"]) {
407            if (cookie[hotel]["items"].hasOwnProperty(item)) {
408              current_item = cookie[hotel]["items"][item];
409              hp_count += current_item.type == "hp" ? 1 : 0;
410              url +=
411                "&amp;remember%5B" +
412                current_item.type +
413                "%5D%5B" +
414                current_item.id +
415                "%5D=" +
416                current_item.amount;
417            }
418          }
419        }
420      }
421    }
422
423    hotel = hotel || 3738;
424    form_type = hp_count > 0 ? 6 : 2;
425
426    url =
427      document.location.protocol +
428      "//" +
429      document.location.hostname +
430      document.location.pathname +
431      (document.location.pathname.indexOf("transaction.php") == -1
432        ? "transaction.php"
433        : "") +
434      "?hotel=" +
435      hotel +
436      url;
437
438    return url;
439  };
440
441  me.req_items_amount_change = function () {
442    $("input.remember-item-amount").each(function () {
443      var $remove_link = $(document.createElement("a"))
444        .attr("href", "#remove")
445        .addClass("remember-item-remove-link");
446      $remove_link.insertAfter(this);
447      $remove_link.click(function (ev) {
448        ev.preventDefault();
449        if (typeof cst_remember == "function") {
450          var parent_rel = $(this).parent().attr("id");
451          var splitted_rel = parent_rel.split("-");
452          cst_remember.group_item_delete(splitted_rel[1], splitted_rel[0]);
453        }
454        var remember_container = $(this).closest(
455          "table.cst-request-remember-items",
456        );
457        $.ajax({
458          type: "GET",
459          url:
460            document.location.pathname +
461            "?rem_item_clear=" +
462            $(this).parent().attr("rel"),
463          complete: function () {
464            window.nst2015.req_items_amount_update({
465              target: remember_container.get(0),
466            });
467          },
468        });
469        $(this).closest("tr").remove();
470        if (!remember_container.find("tr.cst-remember-items-list").length) {
471          remember_container.add(".remember-share").hide();
472        }
473      });
474    });
475  };
476
477  me.req_items_amount_update = function (ev) {
478    var $this = $(ev.target);
479
480    if ($this.is("input") && !$this.val().match(/^\d+$/)) {
481      $this.addClass("request-field-required");
482      return;
483    }
484
485    var $form = $this.closest("form");
486    $this.removeClass("request-field-required");
487    me.opt.req_spa.addClass("loading");
488
489    // if there is a request already running, cancel it (the user deleted many remembered items at once)
490    if (me.opt.spa_ajax && me.opt.spa_ajax.readyState !== 4) {
491      me.opt.spa_ajax.abort();
492    }
493
494    me.opt.spa_ajax = $.ajax({
495      url: $form.attr("action"),
496      type: $form.attr("method"),
497      data: $form.find("input.remember-item-amount").serialize(),
498      success: function (html) {
499        var response_spa = $(html).find("#cst-request-form .cst-request-spa");
500        if (response_spa.length !== 0) {
501          $form.find(".cst-request-spa").show().html(response_spa.html());
502        } else {
503          $form.find(".cst-request-spa").empty().hide();
504        }
505        $form
506          .find(".remember-share")
507          .html($(html).find("#cst-request-form .remember-share").html());
508      },
509      complete: function () {
510        me.opt.req_spa.removeClass("loading");
511        me.opt.spa_ajax = false;
512      },
513    });
514  };
515
516  me.opt.req_spa = me.opt.main.find(".cst-request-spa");
517  if (me.opt.req_spa.length > 0) {
518    me.opt.main
519      .find("input.remember-item-amount")
520      .on("change keyup", me.req_items_amount_update);
521  }
522
523  me.custom_events = function () {
524    if (me.opt.rememberLinks.length && !window.cst_remember) {
525      console.warn("Missing CMS Module: Merkzettel 2010");
526      return;
527    }
528
529    $(".program-request-form").on("click touch", function (e) {
530      e.preventDefault();
531      var form = $(this);
532      var rememberBox = $(".vnh-cst-box-remember");
533      rememberBox.find(".vnh-group-item-link").each(function () {
534        var remEl = $(this);
535        var remElVal = remEl.attr("rev");
536        var addDots = remElVal.slice(2);
537        var remInput =
538          '<input type="hidden" name="items[]" value="hp:' + addDots + '" />';
539        form.prepend(remInput);
540      });
541      form.submit(); // Disable this for bug checks
542    });
543
544    me.opt.rememberLinks.on("click", function (ev) {
545      var link = $(this),
546        id,
547        group,
548        name,
549        url;
550      ev.preventDefault();
551
552      id = link.data("remember");
553      group = link.data("remember-hotel");
554      name = link.data("remember-name");
555      url = link.attr("href");
556
557      if (link.data("saved")) {
558        link.data("saved", false);
559        cst_remember.group_item_delete(group, id);
560        cst_remember.group_delete(id);
561      } else {
562        link.data("saved", true);
563        cst_remember.group_add(this, group, name, url);
564        cst_remember.group_item_add(id, name, group, url, 0, name, 1, {});
565      }
566
567      me.opt.rememberLinks
568        .filter('[data-remember="hp' + id + '"]')
569        .toggleClass("saved", link.data("saved"));
570      if (link.data("remember-type") === "program") {
571        link
572          .closest(".cst-program-remember")
573          .toggleClass("saved", link.data("saved"));
574      }
575    });
576
577    $("[data-remember-remove]").on("click", function (ev) {
578      var link = $(this);
579      cst_remember.group_delete(link.data("remember-remove"));
580      if (link.hasClass("cookie-hotel-remove")) {
581        link.parent().remove();
582      }
583    });
584  };
585
586  if (window["nst_manual_init"] === true) {
587    me.init();
588  }
589
590  /* Lazyloading */
591
592  // use .lazy instead of .lazyload
593  window.lazySizesConfig.lazyClass = "lazy";
594
595  // use data-original instead of data-src
596  lazySizesConfig.srcAttr = "data-origin";
597
598  // Offset für Lazyloading Bilder
599  //lazySizesConfig.expand = 80;
600
601  /* Flatpickr */
602
603  $.fn.datepicker = function (options) {
604    console.warn(
605      "datepicker call, consider rewriting for flatpickr",
606      this,
607      options,
608    );
609    $(this).flatpickr({
610      minDate: options.minDate || "Today",
611      altInput: true,
612      altFormat: "d M Y",
613      locale: me.opt.lang,
614      dateFormat: "d.m.Y",
615    });
616  };
617
618  me.widgetFp = function (clientUrl, hotelId, objPrefix, objId, dateFormat) {
619    me.opt.avail = {};
620
621    function getAvail(dateFrom, inst) {
622      dateFrom = dateFrom || new Date();
623      var requestFrom = me.date_convert(
624        new Date(dateFrom.getFullYear(), dateFrom.getMonth(), 1),
625        "Date",
626        "ymd",
627        0,
628        true,
629      );
630      var requestTo = me.date_convert(
631        new Date(dateFrom.getFullYear(), dateFrom.getMonth() + 2, 1),
632        "Date",
633        "ymd",
634      );
635      if (me.opt.dev) {
636        console.info("Request: " + requestFrom + " -> " + requestTo);
637      }
638      $.ajax({
639        dataType: "json",
640        url: clientUrl + "vsc.php",
641        data: {
642          return_json: true,
643          return_html: false,
644          step: "calendar_from",
645          date_from: requestFrom,
646          date_to: requestTo,
647          cart_language: me.opt.lang,
648          c: {
649            id_hotel: hotelId,
650          },
651        },
652        success: function (d) {
653          if (d.cart) {
654            $.map(d.cart.calendar.date_from.days, function (el, i) {
655              me.opt.avail[i] = el;
656            });
657            if (inst) {
658              inst.redraw();
659            }
660          }
661        },
662      });
663    }
664
665    function updateDate(inst, date) {
666      date = date || inst.latestSelectedDateObj;
667      if (!date) {
668        return;
669      }
670      $(inst.element).siblings(".widget-date-day").text(date.getDate());
671      $(inst.element)
672        .siblings(".widget-date-month")
673        .text(inst.l10n.months.shorthand[date.getMonth()]);
674      $(inst.element).siblings(".widget-date-year").text(date.getFullYear());
675    }
676
677    var fpConfig = {
678      altInput: true,
679      altFormat: "d M Y",
680      locale: me.opt.lang,
681      disableMobile: true,
682      minDate: "today",
683      onClose: function (selDates, dateStr, inst) {
684        inst.altInput.blur();
685      },
686    };
687
688    if (objId == "date_from") {
689      $.extend(fpConfig, {
690        onReady: function (selDates, dateStr, inst) {
691          var id = "widget_date_" + Math.floor(Math.random() * 100000000);
692          $(inst.altInput).attr("id", id).closest("label").attr("for", id);
693          updateDate(inst, new Date());
694          if (!me.opt.dev) {
695            inst.set("disable", [
696              function (currentDay) {
697                var availDay =
698                  me.opt.avail[me.date_convert(currentDay, "Date", "ymd")];
699                if (availDay) {
700                  return !(availDay.type == 2 || availDay.type == 3);
701                }
702                return true;
703              },
704            ]);
705          }
706          //getAvail( new Date(), inst );
707          if ($("#" + objPrefix + "_" + objId).is(":visible")) {
708            getAvail(new Date(), inst);
709          }
710        },
711        onOpen: function (selDates, dateStr, inst) {
712          getAvail(new Date(), inst);
713          inst.fpDateTo = document.getElementById(
714            objPrefix + "_date_to",
715          )._flatpickr;
716        },
717        onDayCreate: function (dObj, dStr, inst, dayElem) {
718          var span;
719          var dateIso = me.date_convert(dayElem.dateObj, "Date", "ymd");
720          if (!me.opt.avail || !me.opt.avail[dateIso]) {
721            return;
722          }
723          if (me.opt.avail[dateIso].type == 2) {
724            span = document.createElement("span");
725            span.className = "departure-only";
726            dayElem.appendChild(span);
727          }
728        },
729        onMonthChange: function (selDates, dateStr, inst) {
730          if (
731            !me.opt.avail[
732              me.date_convert(
733                new Date(inst.currentYear, inst.currentMonth + 1, 15),
734                "Date",
735                "ymd",
736              )
737            ]
738          ) {
739            getAvail(new Date(inst.currentYear, inst.currentMonth, 1), inst);
740          }
741        },
742        onYearChange: function (selDates, dateStr, inst) {
743          if (
744            !me.opt.avail[
745              me.date_convert(
746                new Date(inst.currentYear, inst.currentMonth + 1, 15),
747                "Date",
748                "ymd",
749              )
750            ]
751          ) {
752            getAvail(new Date(inst.currentYear, inst.currentMonth, 1), inst);
753          }
754        },
755        onChange: function (selDates, dateStr, inst) {
756          if (inst.latestSelectedDateObj) {
757            updateDate(inst);
758            inst.fpDateTo.clear();
759            inst.fpDateTo.set(
760              "minDate",
761              me.date_convert(inst.latestSelectedDateObj, "Date", "Date", 1),
762            );
763            inst.fpDateTo.set(
764              "maxDate",
765              me.date_convert(inst.latestSelectedDateObj, "Date", "Date", 28),
766            );
767            inst.fpDateTo.redraw();
768            inst.fpDateTo.open();
769            $("input.rdfrom1", $(inst.element).closest("form")).val(
770              me.date_convert(inst.latestSelectedDateObj, "Date", "dmy"),
771            );
772          }
773        },
774      });
775    } else if (objId === "date_to") {
776      $.extend(fpConfig, {
777        onReady: function (selDates, dateStr, inst) {
778          var id = "widget_date_" + Math.floor(Math.random() * 100000000);
779          $(inst.altInput).attr("id", id).closest("label").attr("for", id
779);
780          updateDate(inst, me.date_convert(new Date(), "Date", "Date", 1));
781          if (!me.opt.dev) {
782            inst.set("disable", [
783              function (currentDay) {
784                var availDay =
785                  me.opt.avail[me.date_convert(currentDay, "Date", "ymd")];
786                if (availDay) {
787                  return availDay.type === -1;
788                }
789                return true;
790              },
791            ]);
792          }
793          inst.fpDateFrom = document.getElementById(
794            objPrefix + "_date_from",
795          )._flatpickr;
796        },
797        onDayCreate: function (dObj, dStr, inst, dayElem) {
798          if (!inst.fpDateFrom || !inst.fpDateFrom.latestSelectedDateObj) {
799            return;
800          }
801          var $dayElem = $(dayElem);
802          var fromDate = me.date_convert(
803            inst.fpDateFrom.latestSelectedDateObj,
804            "Date",
805            "ymd",
806          );
807          var toDate = inst.latestSelectedDateObj
808            ? me.date_convert(inst.latestSelectedDateObj, "Date", "ymd")
809            : false;
810          var currentDate = me.date_convert(dayElem.dateObj, "Date", "ymd");
811          $dayElem
812            .toggleClass("arrival-day", currentDate === fromDate)
813            .toggleClass("following-day", currentDate > fromDate)
814            .toggleClass(
815              "between-day",
816              currentDate > fromDate && currentDate < toDate,
817            )
818            .filter(".following-day:not(.disabled)")
819            .hover(
820              function () {
821                $dayElem
822                  .prevAll(".following-day")
823                  .andSelf()
824                  .addClass("following-day-hover");
825              },
826              function () {
827                $dayElem
828                  .prevAll(".following-day")
829                  .andSelf()
830                  .removeClass("following-day-hover");
831              },
832            );
833        },
834        onChange: function (selDates, dateStr, inst) {
835          if (inst.latestSelectedDateObj) {
836            updateDate(inst);
837            $("input.rdto1", $(inst.element).closest("form")).val(
838              me.date_convert(inst.latestSelectedDateObj, "Date", "dmy"),
839            );
840          }
841        },
842      });
843    }
844    $("#" + objPrefix + "_" + objId).flatpickr(fpConfig);
845  };
846})(window.jQuery, window.nst2015);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.