(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = global || self, global.scrollPlugin = factory());
}(this, (function () { 'use strict';

  function getEventTarget(event) {
      try {
          if (typeof event.composedPath === "function") {
              var path = event.composedPath();
              return path[0];
          }
          return event.target;
      }
      catch (error) {
          return event.target;
      }
  }

  if (typeof window.CustomEvent !== "function") {
      function CustomEvent(typeArg, eventInitDict) {
          eventInitDict = eventInitDict || {
              bubbles: false,
              cancelable: false,
              detail: undefined,
          };
          var evt = document.createEvent("CustomEvent");
          evt.initCustomEvent(typeArg, eventInitDict.bubbles, eventInitDict.cancelable, eventInitDict.detail);
          return evt;
      }
      CustomEvent.prototype = window.Event.prototype;
      window.CustomEvent = CustomEvent;
  }
  function delta(e) {
      return Math.max(-1, Math.min(1, e.wheelDelta || -e.deltaY));
  }
  var scroll = function (e) {
      e.preventDefault();
      var ev = new CustomEvent("increment", {
          bubbles: true,
      });
      ev.delta = delta(e);
      getEventTarget(e).dispatchEvent(ev);
  };
  function scrollMonth(fp) {
      return function (e) {
          e.preventDefault();
          var mDelta = delta(e);
          fp.changeMonth(mDelta);
      };
  }
  function scrollPlugin() {
      return function (fp) {
          var monthScroller = scrollMonth(fp);
          return {
              onReady: function () {
                  if (fp.timeContainer) {
                      fp.timeContainer.addEventListener("wheel", scroll);
                  }
                  fp.yearElements.forEach(function (yearElem) {
                      return yearElem.addEventListener("wheel", scroll);
                  });
                  fp.monthElements.forEach(function (monthElem) {
                      return monthElem.addEventListener("wheel", monthScroller);
                  });
                  fp.loadedPlugins.push("scroll");
              },
              onDestroy: function () {
                  if (fp.timeContainer) {
                      fp.timeContainer.removeEventListener("wheel", scroll);
                  }
                  fp.yearElements.forEach(function (yearElem) {
                      return yearElem.removeEventListener("wheel", scroll);
                  });
                  fp.monthElements.forEach(function (monthElem) {
                      return monthElem.removeEventListener("wheel", monthScroller);
                  });
              },
          };
      };
  }

  return scrollPlugin;

})));
