/* flatpickr v4.5.1, @license MIT */
(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
    typeof define === 'function' && define.amd ? define(factory) :
    (global.monthSelect = factory());
}(this, (function () { 'use strict';

    function monthSelectPlugin() {
      return function (fp) {
        var days;

        function onDayHover(event) {
          if (!event.target || !event.target.classList.contains("flatpickr-day")) return;
          var dayIndex = Array.prototype.indexOf.call(days, event.target);
          fp.monthStartDay = new Date(days[dayIndex].dateObj.getFullYear(), days[dayIndex].dateObj.getMonth(), 1, 0, 0, 0, 0).getTime();
          fp.monthEndDay = new Date(days[dayIndex].dateObj.getFullYear(), days[dayIndex].dateObj.getMonth() + 1, 0, 0, 0, 0, 0).getTime();

          for (var i = days.length; i--;) {
            var date = days[i].dateObj.getTime();
            if (date > fp.monthEndDay || date < fp.monthStartDay) days[i].classList.remove("inRange");else days[i].classList.add("inRange");
            if (date != fp.monthEndDay) days[i].classList.remove("endRange");else days[i].classList.add("endRange");
            if (date != fp.monthStartDay) days[i].classList.remove("startRange");else days[i].classList.add("startRange");
          }
        }

        function highlightMonth() {
          for (var i = days.length; i--;) {
            var date = days[i].dateObj.getTime();
            if (date >= fp.monthStartDay && date <= fp.monthEndDay) days[i].classList.add("month", "selected");
            if (date != fp.monthEndDay) days[i].classList.remove("endRange");else days[i].classList.add("endRange");
            if (date != fp.monthStartDay) days[i].classList.remove("startRange");else days[i].classList.add("startRange");
          }
        }

        function clearHover() {
          for (var i = days.length; i--;) {
            days[i].classList.remove("inRange");
          }
        }

        return {
          onChange: highlightMonth,
          onMonthChange: highlightMonth,
          onClose: clearHover,
          onParseConfig: function onParseConfig() {
            fp.config.mode = "single";
            fp.config.enableTime = false;
          },
          onReady: [function () {
            days = fp.days.childNodes;
          }, function () {
            return fp.days.addEventListener("mouseover", onDayHover);
          }, highlightMonth]
        };
      };
    }

    return monthSelectPlugin;

})));
