function setupDatepicker(wrapper) {
  "use strict";

  var config = {
    dtLocal: {
      enableTime: true,
      altInput: true,
      altFormat: "j. F Y, H:i", // maybe interpolate these formats for locale
      dateFormat: "Y-m-dTH:i",
      time_24hr: true
    },
    d: {
      altFormat: "j. F Y",
      dateFormat: "Y-m-d",
      altInput: true
    },
    t: {
      enableTime: true,
      noCalendar: true,
      altFormat: "H:i",
      dateFormat: "H:i",
      altInput: true,
      time_24hr: true
    }
  };

  Array.from(wrapper.querySelectorAll('input[type="date"]')).forEach(function(el) {
    flatpickr(el, config.d);
  });
  Array.from(wrapper.querySelectorAll('input[type="time"]')).forEach(function(el) {
    flatpickr(el, config.t);
  });
  Array.from(wrapper.querySelectorAll('input[type="datetime-local"]')).forEach(function(el) {
    flatpickr(el, config.dtLocal);
  });
}

// this global I18N object will be picked up automatically by the setup util
window.I18N = {
  filesSelected: 'Dateien ausgewählt', // TODO: interpolate these to be translated
  selectFile: 'Datei auswählen',
  selectFiles: 'Datei(en) auswählen',
  asyncFormFailure: 'Da ist etwas schief gelaufen, das tut uns Leid.<br>Falls das erneut passiert schicke uns gerne eine kurze Beschreibung dieses Ereignisses über das Hilfe-Widget rechts oben.<br><br>Vielen Dank für deine Hilfe',
};

document.addEventListener('DOMContentLoaded', function() {
  window.utils.setup('flatpickr', document.body, { setupFunction: setupDatepicker });
  window.utils.setup('showHide', document.body);
  window.utils.setup('inputs', document.body);
});
