HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/werkenbijkemtec.komma.pro/wwwroot/js/site/app.js
(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["/js/site/app"],{

/***/ "./node_modules/process/browser.js":
/*!*****************************************!*\
  !*** ./node_modules/process/browser.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

// shim for using process in browser
var process = module.exports = {};

// cached from whatever global is present so that test runners that stub it
// don't break things.  But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals.  It's inside a
// function because try/catches deoptimize in certain engines.

var cachedSetTimeout;
var cachedClearTimeout;

function defaultSetTimout() {
    throw new Error('setTimeout has not been defined');
}
function defaultClearTimeout () {
    throw new Error('clearTimeout has not been defined');
}
(function () {
    try {
        if (typeof setTimeout === 'function') {
            cachedSetTimeout = setTimeout;
        } else {
            cachedSetTimeout = defaultSetTimout;
        }
    } catch (e) {
        cachedSetTimeout = defaultSetTimout;
    }
    try {
        if (typeof clearTimeout === 'function') {
            cachedClearTimeout = clearTimeout;
        } else {
            cachedClearTimeout = defaultClearTimeout;
        }
    } catch (e) {
        cachedClearTimeout = defaultClearTimeout;
    }
} ())
function runTimeout(fun) {
    if (cachedSetTimeout === setTimeout) {
        //normal enviroments in sane situations
        return setTimeout(fun, 0);
    }
    // if setTimeout wasn't available but was latter defined
    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
        cachedSetTimeout = setTimeout;
        return setTimeout(fun, 0);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedSetTimeout(fun, 0);
    } catch(e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
            return cachedSetTimeout.call(null, fun, 0);
        } catch(e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
            return cachedSetTimeout.call(this, fun, 0);
        }
    }


}
function runClearTimeout(marker) {
    if (cachedClearTimeout === clearTimeout) {
        //normal enviroments in sane situations
        return clearTimeout(marker);
    }
    // if clearTimeout wasn't available but was latter defined
    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
        cachedClearTimeout = clearTimeout;
        return clearTimeout(marker);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedClearTimeout(marker);
    } catch (e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
            return cachedClearTimeout.call(null, marker);
        } catch (e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
            return cachedClearTimeout.call(this, marker);
        }
    }



}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;

function cleanUpNextTick() {
    if (!draining || !currentQueue) {
        return;
    }
    draining = false;
    if (currentQueue.length) {
        queue = currentQueue.concat(queue);
    } else {
        queueIndex = -1;
    }
    if (queue.length) {
        drainQueue();
    }
}

function drainQueue() {
    if (draining) {
        return;
    }
    var timeout = runTimeout(cleanUpNextTick);
    draining = true;

    var len = queue.length;
    while(len) {
        currentQueue = queue;
        queue = [];
        while (++queueIndex < len) {
            if (currentQueue) {
                currentQueue[queueIndex].run();
            }
        }
        queueIndex = -1;
        len = queue.length;
    }
    currentQueue = null;
    draining = false;
    runClearTimeout(timeout);
}

process.nextTick = function (fun) {
    var args = new Array(arguments.length - 1);
    if (arguments.length > 1) {
        for (var i = 1; i < arguments.length; i++) {
            args[i - 1] = arguments[i];
        }
    }
    queue.push(new Item(fun, args));
    if (queue.length === 1 && !draining) {
        runTimeout(drainQueue);
    }
};

// v8 likes predictible objects
function Item(fun, array) {
    this.fun = fun;
    this.array = array;
}
Item.prototype.run = function () {
    this.fun.apply(null, this.array);
};
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues
process.versions = {};

function noop() {}

process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;

process.listeners = function (name) { return [] }

process.binding = function (name) {
    throw new Error('process.binding is not supported');
};

process.cwd = function () { return '/' };
process.chdir = function (dir) {
    throw new Error('process.chdir is not supported');
};
process.umask = function() { return 0; };


/***/ }),

/***/ "./node_modules/setimmediate/setImmediate.js":
/*!***************************************************!*\
  !*** ./node_modules/setimmediate/setImmediate.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
    "use strict";

    if (global.setImmediate) {
        return;
    }

    var nextHandle = 1; // Spec says greater than zero
    var tasksByHandle = {};
    var currentlyRunningATask = false;
    var doc = global.document;
    var registerImmediate;

    function setImmediate(callback) {
      // Callback can either be a function or a string
      if (typeof callback !== "function") {
        callback = new Function("" + callback);
      }
      // Copy function arguments
      var args = new Array(arguments.length - 1);
      for (var i = 0; i < args.length; i++) {
          args[i] = arguments[i + 1];
      }
      // Store and register the task
      var task = { callback: callback, args: args };
      tasksByHandle[nextHandle] = task;
      registerImmediate(nextHandle);
      return nextHandle++;
    }

    function clearImmediate(handle) {
        delete tasksByHandle[handle];
    }

    function run(task) {
        var callback = task.callback;
        var args = task.args;
        switch (args.length) {
        case 0:
            callback();
            break;
        case 1:
            callback(args[0]);
            break;
        case 2:
            callback(args[0], args[1]);
            break;
        case 3:
            callback(args[0], args[1], args[2]);
            break;
        default:
            callback.apply(undefined, args);
            break;
        }
    }

    function runIfPresent(handle) {
        // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
        // So if we're currently running a task, we'll need to delay this invocation.
        if (currentlyRunningATask) {
            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
            // "too much recursion" error.
            setTimeout(runIfPresent, 0, handle);
        } else {
            var task = tasksByHandle[handle];
            if (task) {
                currentlyRunningATask = true;
                try {
                    run(task);
                } finally {
                    clearImmediate(handle);
                    currentlyRunningATask = false;
                }
            }
        }
    }

    function installNextTickImplementation() {
        registerImmediate = function(handle) {
            process.nextTick(function () { runIfPresent(handle); });
        };
    }

    function canUsePostMessage() {
        // The test against `importScripts` prevents this implementation from being installed inside a web worker,
        // where `global.postMessage` means something completely different and can't be used for this purpose.
        if (global.postMessage && !global.importScripts) {
            var postMessageIsAsynchronous = true;
            var oldOnMessage = global.onmessage;
            global.onmessage = function() {
                postMessageIsAsynchronous = false;
            };
            global.postMessage("", "*");
            global.onmessage = oldOnMessage;
            return postMessageIsAsynchronous;
        }
    }

    function installPostMessageImplementation() {
        // Installs an event handler on `global` for the `message` event: see
        // * https://developer.mozilla.org/en/DOM/window.postMessage
        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages

        var messagePrefix = "setImmediate$" + Math.random() + "$";
        var onGlobalMessage = function(event) {
            if (event.source === global &&
                typeof event.data === "string" &&
                event.data.indexOf(messagePrefix) === 0) {
                runIfPresent(+event.data.slice(messagePrefix.length));
            }
        };

        if (global.addEventListener) {
            global.addEventListener("message", onGlobalMessage, false);
        } else {
            global.attachEvent("onmessage", onGlobalMessage);
        }

        registerImmediate = function(handle) {
            global.postMessage(messagePrefix + handle, "*");
        };
    }

    function installMessageChannelImplementation() {
        var channel = new MessageChannel();
        channel.port1.onmessage = function(event) {
            var handle = event.data;
            runIfPresent(handle);
        };

        registerImmediate = function(handle) {
            channel.port2.postMessage(handle);
        };
    }

    function installReadyStateChangeImplementation() {
        var html = doc.documentElement;
        registerImmediate = function(handle) {
            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
            var script = doc.createElement("script");
            script.onreadystatechange = function () {
                runIfPresent(handle);
                script.onreadystatechange = null;
                html.removeChild(script);
                script = null;
            };
            html.appendChild(script);
        };
    }

    function installSetTimeoutImplementation() {
        registerImmediate = function(handle) {
            setTimeout(runIfPresent, 0, handle);
        };
    }

    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;

    // Don't get fooled by e.g. browserify environments.
    if ({}.toString.call(global.process) === "[object process]") {
        // For Node.js before 0.9
        installNextTickImplementation();

    } else if (canUsePostMessage()) {
        // For non-IE10 modern browsers
        installPostMessageImplementation();

    } else if (global.MessageChannel) {
        // For web workers, where supported
        installMessageChannelImplementation();

    } else if (doc && "onreadystatechange" in doc.createElement("script")) {
        // For IE 6–8
        installReadyStateChangeImplementation();

    } else {
        // For older browsers
        installSetTimeoutImplementation();
    }

    attachTo.setImmediate = setImmediate;
    attachTo.clearImmediate = clearImmediate;
}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));

/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js")))

/***/ }),

/***/ "./node_modules/timers-browserify/main.js":
/*!************************************************!*\
  !*** ./node_modules/timers-browserify/main.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) ||
            (typeof self !== "undefined" && self) ||
            window;
var apply = Function.prototype.apply;

// DOM APIs, for completeness

exports.setTimeout = function() {
  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
};
exports.setInterval = function() {
  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
};
exports.clearTimeout =
exports.clearInterval = function(timeout) {
  if (timeout) {
    timeout.close();
  }
};

function Timeout(id, clearFn) {
  this._id = id;
  this._clearFn = clearFn;
}
Timeout.prototype.unref = Timeout.prototype.ref = function() {};
Timeout.prototype.close = function() {
  this._clearFn.call(scope, this._id);
};

// Does not start the time, just sets up the members needed.
exports.enroll = function(item, msecs) {
  clearTimeout(item._idleTimeoutId);
  item._idleTimeout = msecs;
};

exports.unenroll = function(item) {
  clearTimeout(item._idleTimeoutId);
  item._idleTimeout = -1;
};

exports._unrefActive = exports.active = function(item) {
  clearTimeout(item._idleTimeoutId);

  var msecs = item._idleTimeout;
  if (msecs >= 0) {
    item._idleTimeoutId = setTimeout(function onTimeout() {
      if (item._onTimeout)
        item._onTimeout();
    }, msecs);
  }
};

// setimmediate attaches itself to the global object
__webpack_require__(/*! setimmediate */ "./node_modules/setimmediate/setImmediate.js");
// On some exotic environments, it's not clear which object `setimmediate` was
// able to install onto.  Search each possibility in the same order as the
// `setimmediate` library.
exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) ||
                       (typeof global !== "undefined" && global.setImmediate) ||
                       (this && this.setImmediate);
exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) ||
                         (typeof global !== "undefined" && global.clearImmediate) ||
                         (this && this.clearImmediate);

/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))

/***/ }),

/***/ "./node_modules/webpack/buildin/global.js":
/*!***********************************!*\
  !*** (webpack)/buildin/global.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

var g;

// This works in non-strict mode
g = (function() {
	return this;
})();

try {
	// This works if eval is allowed (see CSP)
	g = g || new Function("return this")();
} catch (e) {
	// This works if the window reference is available
	if (typeof window === "object") g = window;
}

// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}

module.exports = g;


/***/ }),

/***/ "./resources/js/global/polyfills/eventPolyFill.js":
/*!********************************************************!*\
  !*** ./resources/js/global/polyfills/eventPolyFill.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/**
 * Event semi polyfill. IE does not support new event. But does support document.createEvent.
 * Same thing for dispatching events. But then with createEvent and fireEvent.
 */
function createNewEvent(eventName) {
  var event;

  if (typeof Event === 'function') {
    //On ie it is typeOf object.
    event = new Event(eventName); //Non-ie
  } else {
    event = document.createEvent('Event'); //ie

    event.initEvent(eventName, true, true);
  }

  return event;
}

function dispatchEventForElement(element, event) {
  if (document.createEvent) {
    element.dispatchEvent(event);
  } else {
    element.fireEvent("on" + event.eventType, event);
  }
}

/***/ }),

/***/ "./resources/js/global/polyfills/isInteger.js":
/*!****************************************************!*\
  !*** ./resources/js/global/polyfills/isInteger.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

Number.isInteger = Number.isInteger || function (value) {
  return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
};

/***/ }),

/***/ "./resources/js/global/polyfills/promise.js":
/*!**************************************************!*\
  !*** ./resources/js/global/polyfills/promise.js ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(setImmediate, global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

(function (global, factory) {
  ( false ? undefined : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory() :  true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
				(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
				__WEBPACK_AMD_DEFINE_FACTORY__),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined;
})(this, function () {
  'use strict';
  /**
   * @this {Promise}
   */

  function finallyConstructor(callback) {
    var constructor = this.constructor;
    return this.then(function (value) {
      return constructor.resolve(callback()).then(function () {
        return value;
      });
    }, function (reason) {
      return constructor.resolve(callback()).then(function () {
        return constructor.reject(reason);
      });
    });
  } // Store setTimeout reference so promise-polyfill will be unaffected by
  // other code modifying setTimeout (like sinon.useFakeTimers())


  var setTimeoutFunc = setTimeout;

  function noop() {} // Polyfill for Function.prototype.bind


  function bind(fn, thisArg) {
    return function () {
      fn.apply(thisArg, arguments);
    };
  }
  /**
   * @constructor
   * @param {Function} fn
   */


  function Promise(fn) {
    if (!(this instanceof Promise)) throw new TypeError('Promises must be constructed via new');
    if (typeof fn !== 'function') throw new TypeError('not a function');
    /** @type {!number} */

    this._state = 0;
    /** @type {!boolean} */

    this._handled = false;
    /** @type {Promise|undefined} */

    this._value = undefined;
    /** @type {!Array<!Function>} */

    this._deferreds = [];
    doResolve(fn, this);
  }

  function handle(self, deferred) {
    while (self._state === 3) {
      self = self._value;
    }

    if (self._state === 0) {
      self._deferreds.push(deferred);

      return;
    }

    self._handled = true;

    Promise._immediateFn(function () {
      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;

      if (cb === null) {
        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
        return;
      }

      var ret;

      try {
        ret = cb(self._value);
      } catch (e) {
        reject(deferred.promise, e);
        return;
      }

      resolve(deferred.promise, ret);
    });
  }

  function resolve(self, newValue) {
    try {
      // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
      if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');

      if (newValue && (_typeof(newValue) === 'object' || typeof newValue === 'function')) {
        var then = newValue.then;

        if (newValue instanceof Promise) {
          self._state = 3;
          self._value = newValue;
          finale(self);
          return;
        } else if (typeof then === 'function') {
          doResolve(bind(then, newValue), self);
          return;
        }
      }

      self._state = 1;
      self._value = newValue;
      finale(self);
    } catch (e) {
      reject(self, e);
    }
  }

  function reject(self, newValue) {
    self._state = 2;
    self._value = newValue;
    finale(self);
  }

  function finale(self) {
    if (self._state === 2 && self._deferreds.length === 0) {
      Promise._immediateFn(function () {
        if (!self._handled) {
          Promise._unhandledRejectionFn(self._value);
        }
      });
    }

    for (var i = 0, len = self._deferreds.length; i < len; i++) {
      handle(self, self._deferreds[i]);
    }

    self._deferreds = null;
  }
  /**
   * @constructor
   */


  function Handler(onFulfilled, onRejected, promise) {
    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
    this.onRejected = typeof onRejected === 'function' ? onRejected : null;
    this.promise = promise;
  }
  /**
   * Take a potentially misbehaving resolver function and make sure
   * onFulfilled and onRejected are only called once.
   *
   * Makes no guarantees about asynchrony.
   */


  function doResolve(fn, self) {
    var done = false;

    try {
      fn(function (value) {
        if (done) return;
        done = true;
        resolve(self, value);
      }, function (reason) {
        if (done) return;
        done = true;
        reject(self, reason);
      });
    } catch (ex) {
      if (done) return;
      done = true;
      reject(self, ex);
    }
  }

  Promise.prototype['catch'] = function (onRejected) {
    return this.then(null, onRejected);
  };

  Promise.prototype.then = function (onFulfilled, onRejected) {
    // @ts-ignore
    var prom = new this.constructor(noop);
    handle(this, new Handler(onFulfilled, onRejected, prom));
    return prom;
  };

  Promise.prototype['finally'] = finallyConstructor;

  Promise.all = function (arr) {
    return new Promise(function (resolve, reject) {
      if (!arr || typeof arr.length === 'undefined') throw new TypeError('Promise.all accepts an array');
      var args = Array.prototype.slice.call(arr);
      if (args.length === 0) return resolve([]);
      var remaining = args.length;

      function res(i, val) {
        try {
          if (val && (_typeof(val) === 'object' || typeof val === 'function')) {
            var then = val.then;

            if (typeof then === 'function') {
              then.call(val, function (val) {
                res(i, val);
              }, reject);
              return;
            }
          }

          args[i] = val;

          if (--remaining === 0) {
            resolve(args);
          }
        } catch (ex) {
          reject(ex);
        }
      }

      for (var i = 0; i < args.length; i++) {
        res(i, args[i]);
      }
    });
  };

  Promise.resolve = function (value) {
    if (value && _typeof(value) === 'object' && value.constructor === Promise) {
      return value;
    }

    return new Promise(function (resolve) {
      resolve(value);
    });
  };

  Promise.reject = function (value) {
    return new Promise(function (resolve, reject) {
      reject(value);
    });
  };

  Promise.race = function (values) {
    return new Promise(function (resolve, reject) {
      for (var i = 0, len = values.length; i < len; i++) {
        values[i].then(resolve, reject);
      }
    });
  }; // Use polyfill for setImmediate for performance gains


  Promise._immediateFn = typeof setImmediate === 'function' && function (fn) {
    setImmediate(fn);
  } || function (fn) {
    setTimeoutFunc(fn, 0);
  };

  Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
    if (typeof console !== 'undefined' && console) {
      console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
    }
  };
  /** @suppress {undefinedVars} */


  var globalNS = function () {
    // the only reliable means to get the global object is
    // `Function('return this')()`
    // However, this causes CSP violations in Chrome apps.
    if (typeof self !== 'undefined') {
      return self;
    }

    if (typeof window !== 'undefined') {
      return window;
    }

    if (typeof global !== 'undefined') {
      return global;
    }

    throw new Error('unable to locate global object');
  }();

  if (!('Promise' in globalNS)) {
    globalNS['Promise'] = Promise;
  } else if (!globalNS.Promise.prototype['finally']) {
    globalNS.Promise.prototype['finally'] = finallyConstructor;
  }
});
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/timers-browserify/main.js */ "./node_modules/timers-browserify/main.js").setImmediate, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))

/***/ }),

/***/ "./resources/js/site/app.js":
/*!**********************************!*\
  !*** ./resources/js/site/app.js ***!
  \**********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

/** ==========================================================================
 *  Dependencies
 *  =========================================================================*/

/**
 * External
 */
__webpack_require__(/*! hammerjs */ "./node_modules/hammerjs/hammer.js");

__webpack_require__(/*! objectFitPolyfill */ "./node_modules/objectFitPolyfill/dist/objectFitPolyfill.min.js");
/**
 * Global / Shared with KMS
 */


__webpack_require__(/*! ./../global/polyfills/eventPolyFill */ "./resources/js/global/polyfills/eventPolyFill.js");

__webpack_require__(/*! ./../global/polyfills/isInteger */ "./resources/js/global/polyfills/isInteger.js");

__webpack_require__(/*! ./../global/polyfills/promise */ "./resources/js/global/polyfills/promise.js");
/** ==========================================================================
 *  Global functionalities
 *  =========================================================================*/


__webpack_require__(/*! ./global/helpers */ "./resources/js/site/global/helpers.js"); // Should be first


__webpack_require__(/*! ./global/browserHandler */ "./resources/js/site/global/browserHandler.js"); // require('./global/pagetransitionHandler');
// require('./global/resizeHandler');


__webpack_require__(/*! ./global/scrollHandler */ "./resources/js/site/global/scrollHandler.js");
/** ==========================================================================
 *  Component functionalities
 *  =========================================================================*/


__webpack_require__(/*! ./components/chocolateFactory */ "./resources/js/site/components/chocolateFactory.js");

__webpack_require__(/*! ./components/cookieHandler */ "./resources/js/site/components/cookieHandler.js"); // require('./components/InputHandler');


__webpack_require__(/*! ./components/mapsHandler */ "./resources/js/site/components/mapsHandler.js");

__webpack_require__(/*! ./components/overlayMenuHandler */ "./resources/js/site/components/overlayMenuHandler.js");

__webpack_require__(/*! ./components/sliderHandler */ "./resources/js/site/components/sliderHandler.js");

__webpack_require__(/*! ./components/scrollToHandler */ "./resources/js/site/components/scrollToHandler.js"); // require('./components/searchHandler');
// require('./components/shareButtonsHandler');


__webpack_require__(/*! ./components/tabsliderHandler */ "./resources/js/site/components/tabsliderHandler.js");

__webpack_require__(/*! ./components/youtubeHandler */ "./resources/js/site/components/youtubeHandler.js");
/** ==========================================================================
 *  Shop Component functionalities
 *  =========================================================================*/
// require('./../shop/components/shoppingcartHandler');

/***/ }),

/***/ "./resources/js/site/components/chocolateFactory.js":
/*!**********************************************************!*\
  !*** ./resources/js/site/components/chocolateFactory.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* ==========================================================================
 | Prevent Bots handler
 |
 | We named this chocolate factory and belonging confusing js hooks
 | to prevent smart bots from blocking these variable or functions.
 |
 ========================================================================== */
var ChocolateFactory = {
  bannedVisitor: [],

  /** Get all the chocolate factory and start
   *  Looping through those start flashing tickets
   */
  enter: function enter() {
    var chocolateFactories = document.querySelectorAll('.js-chocolate-factory');

    if (isset(chocolateFactories)) {
      var amountOfChocolateFactories = chocolateFactories.length;

      for (var i = 0; i < amountOfChocolateFactories; i++) {
        var ChocolateBar = chocolateFactories[i];

        ChocolateFactory._flashTicket(ChocolateBar);
      }
    }
  },

  /**
   * If factory has a golden ticket
   * Then we can make them go on the tour if there has been click on the ticket
   *
   * @param chocolateBar
   * @private
   */
  _flashTicket: function _flashTicket(chocolateBar) {
    // Try get the ticket from the chocolateBar
    var goldenTicket = chocolateBar.querySelector('.js-golden-ticket'); // Only continue if chocolate bar has a golden ticket

    if (isset(goldenTicket)) {
      goldenTicket.addEventListener('click', function () {
        ChocolateFactory.enjoyTheTour(chocolateBar);
      });
    } else {
      console.log('To bad, no golden tickets has been found.');
    }
  },

  /**
   * Start the tour through the factory
   * And get the names and properties of the members of the group
   * If there are members in the group of course
   *
   * @param chocolateFactory
   */
  enjoyTheTour: function enjoyTheTour(chocolateFactory) {
    // Ask for the tour group
    var tourGroup = chocolateFactory.querySelectorAll('input, textarea');

    if (isset(tourGroup)) {
      // For each visitor we want a belonging Oompa Loompa
      var oompaLoompas = {};
      var amountOfOompaLoompas = 0;
      var tourGroupSize = tourGroup.length;

      for (var i = 0; i < tourGroupSize; i++) {
        // Get the visitor from the group
        var visitor = tourGroup[i]; // Ask for its name

        var visitorName = visitor.getAttribute('name'); // Check if the visitor is banned

        if (ChocolateFactory._isVisitorBanned(visitorName)) continue;
        oompaLoompas[visitorName] = ChocolateFactory._getArrangement(visitor);
        amountOfOompaLoompas++;
      } // Check for insurance that there are oompa loompas


      if (amountOfOompaLoompas === 0) return; // Send submit request

      ChocolateFactory._finishTour(oompaLoompas, chocolateFactory);
    } else {
      console.log('To bad, no members to visit this factory');
    }
  },

  /**
   * Check if the visitor name isn't allow
   *
   * @param visitorName
   * @returns {boolean}
   * @private
   */
  _isVisitorBanned: function _isVisitorBanned(visitorName) {
    if (ChocolateFactory.bannedVisitor.indexOf(visitorName) !== -1) {
      return true;
    }

    return false;
  },

  /**
   * Most get visitor have a normal arrangement
   * But sometimes there are special cases
   * Like a Selector or checkbox
   *
   * @param visitor
   * @returns {*}
   * @private
   */
  _getArrangement: function _getArrangement(visitor) {
    var visitorType = visitor.nodeName;

    switch (visitorType) {
      default:
        return visitor.value;
    }
  },

  /**
   * Finish the tour
   * If successful show thanks message
   * Or show defined error message or fallback
   *
   * @param group
   * @param chocolateFactory
   * @returns {*|void}
   * @private
   */
  _finishTour: function _finishTour(group, chocolateFactory) {
    // Add willie to the group
    group = ChocolateFactory._addWillieWonka(group); // Get the gate for finish the tour

    var gate = '/contact/process';

    try {
      Ajax.post(gate, group, function (HttpRequest) {
        var response = JSON.parse(HttpRequest.response);

        switch (HttpRequest.status) {
          case 200:
            return ChocolateFactory._thanksForVisiting(response.redirectUrl);

          case 422:
            return ChocolateFactory._giveFeedbackToMembers(response.errors, chocolateFactory);

          default:
            break;
        }

        return ChocolateFactory._unknownGapInFactory(chocolateFactory);
      });
    } catch (e) {
      return ChocolateFactory._unknownGapInFactory(chocolateFactory);
    }
  },

  /**
   * Add willie wonka to the group
   * Ps... it actually the secret code!
   *
   * @param group
   * @returns {*}
   * @private
   */
  _addWillieWonka: function _addWillieWonka(group) {
    group._willie = 'wonka';
    return group;
  },

  /**
   * Add the feedback to the desired area.
   * Most likely to the visitor directly, but sometime to the factory desired feedback area
   *
   * @param errors
   * @param chocolateFactory
   * @private
   */
  _giveFeedbackToMembers: function _giveFeedbackToMembers(errors, chocolateFactory) {
    // Grab the factory feedback area
    var feedbackArea = chocolateFactory.querySelector('.js-error-area'); // Clear the current html

    if (isset(feedbackArea)) feedbackArea.innerHTML = ''; // Clear the previous marked jackets

    ChocolateFactory._clearPreviousMarkedJackets(chocolateFactory);

    Object.keys(errors).forEach(function (visitor) {
      var jacket = null;
      var visitorFeedbackArea = null; // Honey elements doesn't has a accessible element

      if (visitor !== '_honey' && visitor !== '_secretCode') {
        // Grab the visitor
        var visitorNode = chocolateFactory.querySelector('#' + visitor); // Find the jacket of a visitor

        jacket = ChocolateFactory._grabVisitorJacket(visitorNode); // If found get the desired area

        if (isset(jacket)) visitorFeedbackArea = jacket.querySelector('.js-form-group-error'); // Clear the current html

        if (isset(visitorFeedbackArea)) visitorFeedbackArea.innerHTML = '';
      } // Get the feedback for this visitor


      var visitorFeedback = errors[visitor]; // Spit out each line

      var visitorFeedbackAmount = visitorFeedback.length;

      for (var i = 0; i < visitorFeedbackAmount; i++) {
        var visitorFeedbackLine = visitorFeedback[i];
        console.log(visitor, visitorFeedbackLine); // Honey elements doesn't has a accessible element area

        if (visitor !== '_honey' && visitor !== '_secretCode') {
          // Mark the jacket
          if (isset(jacket)) jacket.classList.add('has-error'); // Append feedback to visitor feedback area if defined

          if (isset(visitorFeedbackArea) && visitorFeedbackLine.length > 0) {
            var currentFeedbackArea = visitorFeedbackArea.innerHTML;
            currentFeedbackArea += '<span>' + capitalizeFirstLetter(visitorFeedbackLine) + '</span>';
            visitorFeedbackArea.innerHTML = currentFeedbackArea;
          }
        } // Append feedback to factory feedback area if defined


        if (isset(feedbackArea) && visitorFeedbackLine.length > 0) {
          var _currentFeedbackArea = feedbackArea.innerHTML;
          _currentFeedbackArea += '<li>' + capitalizeFirstLetter(visitorFeedbackLine) + '</li>';
          feedbackArea.innerHTML = _currentFeedbackArea;
        }
      }
    });
  },

  /**
   * Clear the previous marked jackets
   *
   * @param chocolateFactory
   * @private
   */
  _clearPreviousMarkedJackets: function _clearPreviousMarkedJackets(chocolateFactory) {
    var markedJackets = chocolateFactory.querySelectorAll('.has-error');
    var markedJacketsAmount = markedJackets.length;

    for (var i = 0; i < markedJacketsAmount; i++) {
      markedJackets[i].classList.remove('has-error');
    }
  },

  /**
   * Grab the jacket of the visitor
   *
   * @param visitor
   * @returns {null|*|(() => (Node | null))|ActiveX.IXMLDOMNode|(Node & ParentNode)}
   * @private
   */
  _grabVisitorJacket: function _grabVisitorJacket(visitor) {
    // Check if visitor is defined
    if (!isset(visitor)) return null; // Do loop settings

    currentLayer = visitor;
    safetyBreak = 0; // Grab the next layer till it is the jacket (or safetyBreak has been reached

    do {
      safetyBreak++;
      currentLayer = currentLayer.parentNode;
      if (currentLayer.classList.contains('js-form-group')) return currentLayer;
    } while (currentLayer.tagName !== 'BODY' && safetyBreak <= 10);

    return null;
  },

  /**
   * Redirect the visitor to the thanks page
   *
   * @param nextStop
   * @private
   */
  _thanksForVisiting: function _thanksForVisiting(nextStop) {
    window.location = nextStop;
  },

  /**
   * Unknown error occurred, log the error
   *
   * @param chocolateFactory
   * @private
   */
  _unknownGapInFactory: function _unknownGapInFactory(chocolateFactory) {
    console.log(chocolateFactory);
    console.log('ChocolateFactory: Unkown Error');
  }
};
ChocolateFactory.enter();

/***/ }),

/***/ "./resources/js/site/components/cookieHandler.js":
/*!*******************************************************!*\
  !*** ./resources/js/site/components/cookieHandler.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* ==========================================================================
   Cookie handler
   - Primary usage for toggling the cookie message and/or switch
 ========================================================================== */
var CookieHandler = {
  cookieBar: null,
  cookieOverlay: null,
  cookieMessage: null,
  cookieSwitch: null,
  cookieFadeOutAnimationDuration: 400,
  acceptTracking: false,
  // Initialize cookie handler
  init: function init() {
    // Bind cookie bar or overlay to cookieMessage
    CookieHandler.cookieMessage = document.querySelector('.js-cookie-bar, .js-cookie-overlay'); // Bind cookie bar to cookieBar

    CookieHandler.cookieBar = document.querySelector('.js-cookie-bar'); // If isset init the functions for cookie bar

    if (isset(CookieHandler.cookieBar)) {
      CookieHandler.initCookieBar();
    } else {
      // Else try to connect cookie overlay with tracking to cookieOverlay
      CookieHandler.cookieOverlay = document.querySelector('.js-cookie-overlay'); // If isset init the functions for cookie overlay

      if (isset(CookieHandler.cookieOverlay)) {
        CookieHandler.initCookieOverlay();
      }
    } // If either type of cookie has been found check if settings are defined


    if (isset(CookieHandler.cookieMessage)) {
      CookieHandler.checkForCookieSettings();
    } // Bind cookie switch to Handler


    CookieHandler.cookieSwitch = document.querySelector('.js-cookie-switch'); // If isset init the functions for cookie switch

    if (isset(CookieHandler.cookieSwitch)) {
      CookieHandler.initCookieSwitch();
    }
  },
  // Init the cookie bar actions
  initCookieBar: function initCookieBar() {
    var closeButton = CookieHandler.cookieBar.querySelector('.js-disable-cookie-bar');

    if (isset(closeButton)) {
      closeButton.addEventListener('click', CookieHandler.closeCookieMessage);
    }
  },
  // Init the cookie overlay actions
  initCookieOverlay: function initCookieOverlay() {
    // Open the cookie settings event
    var openCookieSettingsButton = CookieHandler.cookieMessage.querySelector('.js-change-cookies-settings');

    if (isset(openCookieSettingsButton)) {
      openCookieSettingsButton.addEventListener('click', CookieHandler.openCookieSettings);
    } // Toggle of the tracking input


    var toggleTrackingInput = CookieHandler.cookieMessage.querySelector('.c-cookie-type__input--tracking');

    if (isset(toggleTrackingInput)) {
      if (toggleTrackingInput.checked === true) {
        CookieHandler.acceptTracking = true;
      }

      toggleTrackingInput.addEventListener('change', CookieHandler.toggleTrackingSetting);
    } // Accept / Save cookies button event


    var acceptButton = CookieHandler.cookieMessage.querySelector('.js-accept-cookies');

    if (isset(acceptButton)) {
      acceptButton.addEventListener('click', CookieHandler.setCookieSettings);
    }
  },
  // Init the cookie switch actions
  initCookieSwitch: function initCookieSwitch() {
    // Toggle of the tracking input
    var toggleTrackingInput = CookieHandler.cookieSwitch.querySelector('.c-cookie-type__input--tracking');

    if (isset(toggleTrackingInput)) {
      // Force the state of the cookie switch input because the pop-up is forced on checked
      // while the switch checks by php if the cookie really exist or not
      if (toggleTrackingInput.checked === true) {
        CookieHandler.acceptTracking = true;
      } else {
        CookieHandler.acceptTracking = false;
      }

      toggleTrackingInput.addEventListener('change', CookieHandler.toggleTrackingSetting);
    } // Save cookies button event


    var saveButton = CookieHandler.cookieSwitch.querySelector('.js-save-cookie-settings');

    if (isset(saveButton)) {
      saveButton.addEventListener('click', function () {
        CookieHandler.cookieFadeOutAnimationDuration = 0; // On the switch click we want no delay :)

        CookieHandler.setCookieSettings();
      });
    }
  },
  checkForCookieSettings: function checkForCookieSettings() {
    if (Cookie.get('cookieMessage')) {
      CookieHandler.cookieMessage.classList.add('is-accepted');
      document.body.classList.add('is-cookies-accepted');
    } else {
      CookieHandler.cookieMessage.classList.remove('is-accepted');
      document.body.classList.remove('is-cookies-accepted');
    }
  },
  closeCookieMessage: function closeCookieMessage() {
    Cookie.set('cookieMessage', true, 90);
    CookieHandler.cookieMessage.classList.add('is-transitioning-out');
    document.body.classList.add('is-cookies-accepted');
  },
  openCookieSettings: function openCookieSettings() {
    CookieHandler.cookieOverlay.querySelector('.js-cookie-settings').classList.remove('is-hidden');
    CookieHandler.cookieOverlay.querySelector('.js-cookie-info').classList.add('is-hidden');
  },
  toggleTrackingSetting: function toggleTrackingSetting() {
    if (CookieHandler.acceptTracking) {
      CookieHandler.acceptTracking = false;
    } else {
      CookieHandler.acceptTracking = true;
    }
  },
  setCookieSettings: function setCookieSettings() {
    // Set tracking cookie or delete it if isset according to the desired settings
    if (CookieHandler.acceptTracking) {
      Cookie.set('trackingCookieAccepted', 'true', 90);
    } else {
      if (Cookie.get('trackingCookieAccepted')) {
        Cookie.erase('trackingCookieAccepted');
      }
    }

    CookieHandler.closeCookieMessage(); // Reload after animation to automatically trigger the tracking after accepting it

    setTimeout(function () {
      location.reload();
    }, CookieHandler.cookieFadeOutAnimationDuration);
  }
};
CookieHandler.init();

/***/ }),

/***/ "./resources/js/site/components/mapsHandler.js":
/*!*****************************************************!*\
  !*** ./resources/js/site/components/mapsHandler.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* ==========================================================================
    Google Maps handler
    - https://developers.google.com/maps/documentation/javascript/adding-a-google-map
 ========================================================================== */
var MapsHandler = {
  map: '',
  key: 'AIzaSyCVGPUmRmQRxXvzzWu3Xyu77XebQxQ-f4Y',
  location: {
    lat: 51.261089,
    lng: 5.598172
  },
  styling: '',
  init: function init() {
    // Get map by id
    MapsHandler.map = document.querySelector('.js-google-map'); // Check if a map is defined

    if (isset(MapsHandler.map)) {
      if (MapsHandler.map.hasAttribute('data-google-lat')) MapsHandler.location.lat = parseFloat(MapsHandler.map.getAttribute('data-google-lat'));
      if (MapsHandler.map.hasAttribute('data-google-lng')) MapsHandler.location.lng = parseFloat(MapsHandler.map.getAttribute('data-google-lng'));
      MapsHandler.setCustomStyling(); // See if google variable exists

      if (typeof google == 'undefined' || typeof google.maps == 'undefined') {
        // Load external script
        getScript('https://maps.googleapis.com/maps/api/js?key=' + MapsHandler.key, MapsHandler.drawMap);
      } else {
        MapsHandler.drawMap();
      }
    }
  },
  drawMap: function drawMap() {
    // Create a map
    var map = new google.maps.Map(MapsHandler.map, {
      zoom: 14,
      center: MapsHandler.location,
      disableDefaultUI: true,
      styles: MapsHandler.styling
    });
    var contentString = '<div><p>Plan een route op ' + '<a target="_blank" href="https://www.google.com/maps/dir/?api=1&destination=' + MapsHandler.location.lat + ',' + MapsHandler.location.lng + '" class="link">' + 'google maps</a> ' + '</p></div>';
    var infowindow = new google.maps.InfoWindow({
      content: contentString
    }); // Add a marker

    var marker = new google.maps.Marker({
      position: MapsHandler.location,
      map: map // label: 'A'

    });
    marker.addListener('click', function () {
      infowindow.open(map, marker);
    });
  },
  setCustomStyling: function setCustomStyling() {
    MapsHandler.styling = [{
      "featureType": "water",
      "elementType": "geometry",
      "stylers": [{
        "color": "#e9e9e9"
      }, {
        "lightness": 17
      }]
    }, {
      "featureType": "landscape",
      "elementType": "geometry",
      "stylers": [{
        "color": "#f5f5f5"
      }, {
        "lightness": 20
      }]
    }, {
      "featureType": "road.highway",
      "elementType": "geometry.fill",
      "stylers": [{
        "color": "#ffffff"
      }, {
        "lightness": 17
      }]
    }, {
      "featureType": "road.highway",
      "elementType": "geometry.stroke",
      "stylers": [{
        "color": "#ffffff"
      }, {
        "lightness": 29
      }, {
        "weight": 0.2
      }]
    }, {
      "featureType": "road.arterial",
      "elementType": "geometry",
      "stylers": [{
        "color": "#ffffff"
      }, {
        "lightness": 18
      }]
    }, {
      "featureType": "road.local",
      "elementType": "geometry",
      "stylers": [{
        "color": "#ffffff"
      }, {
        "lightness": 16
      }]
    }, {
      "featureType": "poi",
      "elementType": "geometry",
      "stylers": [{
        "color": "#f5f5f5"
      }, {
        "lightness": 21
      }]
    }, {
      "featureType": "poi.park",
      "elementType": "geometry",
      "stylers": [{
        "color": "#dedede"
      }, {
        "lightness": 21
      }]
    }, {
      "elementType": "labels.text.stroke",
      "stylers": [{
        "visibility": "on"
      }, {
        "color": "#ffffff"
      }, {
        "lightness": 16
      }]
    }, {
      "elementType": "labels.text.fill",
      "stylers": [{
        "saturation": 36
      }, {
        "color": "#333333"
      }, {
        "lightness": 40
      }]
    }, {
      "elementType": "labels.icon",
      "stylers": [{
        "visibility": "off"
      }]
    }, {
      "featureType": "transit",
      "elementType": "geometry",
      "stylers": [{
        "color": "#f2f2f2"
      }, {
        "lightness": 19
      }]
    }, {
      "featureType": "administrative",
      "elementType": "geometry.fill",
      "stylers": [{
        "color": "#fefefe"
      }, {
        "lightness": 20
      }]
    }, {
      "featureType": "administrative",
      "elementType": "geometry.stroke",
      "stylers": [{
        "color": "#fefefe"
      }, {
        "lightness": 17
      }, {
        "weight": 1.2
      }]
    }];
  }
};
MapsHandler.init();

/***/ }),

/***/ "./resources/js/site/components/overlayMenuHandler.js":
/*!************************************************************!*\
  !*** ./resources/js/site/components/overlayMenuHandler.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

/* ==========================================================================
   Navigation handler
   - Handles the showing and hiding of the overlay-menu component which has the proper classes.
 ========================================================================== */
var bodyScrollLock = __webpack_require__(/*! body-scroll-lock */ "./node_modules/body-scroll-lock/lib/bodyScrollLock.min.js");

var OverlayMenuHandler = {
  // init: function () {
  //     const overlayMenuTrigger = document.querySelector('.js-overlay-menu-trigger');
  //     OverlayMenuHandler.initOverlayMenu(overlayMenuTrigger);
  // },
  init: function init() {
    var overlayMenuTriggerList = document.querySelectorAll('.js-overlay-menu-trigger');
    var overlayMenuTriggerListCount = overlayMenuTriggerList.length;

    if (isset(overlayMenuTriggerList) && overlayMenuTriggerListCount !== 0) {
      for (var i = 0; i < overlayMenuTriggerListCount; i++) {
        var overlayMenuTrigger = overlayMenuTriggerList[i];
        OverlayMenuHandler.initOverlayMenu(overlayMenuTrigger);
      }
    }
  },
  initOverlayMenu: function initOverlayMenu(overlayMenuTrigger) {
    overlayMenuTrigger.addEventListener('click', OverlayMenuHandler.toggleOverlayMenu, false);
  },
  toggleOverlayMenu: function toggleOverlayMenu(event) {
    var overlayMenuNav = document.querySelector('.js-overlay-menu'); // const overlayMenuBody = overlayMenu.querySelector('.js-overlay-menu-persist-scrolling');
    // Bail if overlayMenu doesn't exist

    if (!overlayMenuNav) return; // Clear previously locked scroll on the body

    bodyScrollLock.enableBodyScroll(overlayMenuNav); // If the overlayMenu is already active, collapse it and quit

    if (document.body.classList.contains('is-overlay-menu-active')) {
      overlayMenuNav.querySelectorAll('[tabindex="0"]').forEach(function (elem) {
        elem.tabIndex = -1;
      });
      document.body.classList.remove('is-overlay-menu-active');
      return;
    } // Lock scrolling on the body


    bodyScrollLock.disableBodyScroll(overlayMenuNav);
    overlayMenuNav.querySelectorAll('[tabindex="-1"]').forEach(function (elem) {
      elem.tabIndex = 0;
    }); // Toggle active overlayMenu by setting a class on the body

    document.body.classList.toggle('is-overlay-menu-active');
    overlayMenuNav.hidden = false;
  }
};
OverlayMenuHandler.init();

/***/ }),

/***/ "./resources/js/site/components/scrollToHandler.js":
/*!*********************************************************!*\
  !*** ./resources/js/site/components/scrollToHandler.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* ==========================================================================
    Scroll To Click handler
 ========================================================================== */
var ScrollToHandler = {
  // Animation settings
  offset: 60,
  //pixel
  duration: 1400,
  //ms
  // Animation variables
  body: null,
  start: 0,
  change: 0,
  currentTime: 0,
  allowAnimation: false,
  scrollToAnimation: null,
  // Watch the EasingFunction helper for the available methods
  easing: 'easeInOutQuad',
  init: function init() {
    var anchorLinks = document.querySelectorAll('.js-scroll-to-target');
    var anchorLinksAmount = anchorLinks.length;

    for (var i = 0; i < anchorLinksAmount; i++) {
      var anchorLink = anchorLinks[i];
      anchorLink.addEventListener('click', function (event) {
        ScrollToHandler.prepareScrollTo(this.getAttribute('href'));
        event.preventDefault();
      });
    }
  },

  /**
   * Prepare the Handler for the animation
   */
  prepareScrollTo: function prepareScrollTo(elementId) {
    // Get the scroll to element
    elementId = elementId.substr(elementId.indexOf('#') + 1);
    var scrollToElement = document.getElementById(elementId);
    if (scrollToElement == null) return;
    var scrollToElementPosition = scrollToElement.getBoundingClientRect(); // Reset or define the Handler variables

    ScrollToHandler.body = document.documentElement;
    ScrollToHandler.start = Math.max(ScrollToHandler.body.scrollTop, document.body.scrollTop, window.pageYOffset); //Use Math.max because safari doesn't support document.documentElement.scrollTop

    ScrollToHandler.change = scrollToElementPosition.top + ScrollToHandler.start - ScrollToHandler.start - ScrollToHandler.offset;
    ScrollToHandler.startTime = 'now' in window.performance ? performance.now() : new Date().getTime();
    ScrollToHandler.allowAnimation = true; // Trigger animation

    scrollToAnimation = requestAnimationFrame(ScrollToHandler.animateScroll); // Stop on scroll

    window.addEventListener('mousedown', ScrollToHandler.abortScrollAnimation);
    window.addEventListener('wheel', ScrollToHandler.abortScrollAnimation);
    window.addEventListener('DOMMouseScroll', ScrollToHandler.abortScrollAnimation);
    window.addEventListener('mousewheel', ScrollToHandler.abortScrollAnimation);
    window.addEventListener('keyup', ScrollToHandler.abortScrollAnimation);
    window.addEventListener('touchmove', ScrollToHandler.abortScrollAnimation);
  },

  /*
   * Animate the scroll position
   */
  animateScroll: function animateScroll(timestamp) {
    // Calculate progress from 0 - 1
    var progress = Math.min(1, (timestamp - ScrollToHandler.startTime) / ScrollToHandler.duration);
    if (progress < 0) progress = 0; // Convert progress with easing function

    progress = EasingFunctions[ScrollToHandler.easing](progress);
    var newScrollTop = ScrollToHandler.start + ScrollToHandler.change * progress;
    ScrollToHandler.body.scrollTop = newScrollTop;
    if (ScrollToHandler.body.scrollTop === 0) document.body.scrollTop = newScrollTop; // Safari doesn't support so if ScrollToHandler.body.scrollTop is 0 force the scroll position through document.body.scrollTop

    if (progress < 1 && ScrollToHandler.allowAnimation) {
      scrollToAnimation = requestAnimationFrame(ScrollToHandler.animateScroll);
    }
  },

  /*
   * Abort the scroll animation
   */
  abortScrollAnimation: function abortScrollAnimation(event) {
    ScrollToHandler.allowAnimation = false;
    cancelAnimationFrame(ScrollToHandler.scrollToAnimation);
  }
};
ScrollToHandler.init();

/***/ }),

/***/ "./resources/js/site/components/sliderHandler.js":
/*!*******************************************************!*\
  !*** ./resources/js/site/components/sliderHandler.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* Example

const headerImageSliderSetting = new SliderProjectorSetting({
    sliderProjectorId: 'header-image-slider',
    slideQuery: '#header-image-slider .placeholder figure',
    dots: '#header-image-slider .slider-navigation-labels .navigation span',
    autoSlider: true,
    sliderInterval: 4000
});
headerImageSliderSetting = headerImageSliderSetting.prepareParameters();

const headerImageSlider = new SliderProjector(headerImageSliderSetting).init();

 */
var Sliders = [];
var sliderContainers = document.querySelectorAll('.js-slider');
var sliderContainersLength = sliderContainers.length;

for (var i = 0; i < sliderContainersLength; i++) {
  var slider = sliderContainers[i];
  var sliderId = slider.getAttribute('id');

  if (sliderId !== null) {
    var Slidersetting = new SliderSetting({
      sliderId: sliderId,
      autoSlider: slider.getAttribute('data-auto-slide'),
      slideQuery: '#' + sliderId + ' .js-slider-slide',
      navigationButtons: '#' + sliderId + ' .js-slider-button',
      dots: '#' + sliderId + ' .js-slider-indicator'
    });
    Sliders.push(new Slider(Slidersetting.prepareParameters()).init());
  } else console.log('An image slider has no id...');
}

function SliderSetting(settingsObject) {
  var self = this;
  this.sliderId = '';
  this.autoSlider = false;
  this.sliderInterval = 4000;
  this.navigationButtons = '';
  this.dots = '';
  this.slideQuery = '';

  this.setSliderId = function (string) {
    this.sliderId = string;
    return this;
  };

  this.setAutoSlider = function (_boolean) {
    this.autoSlider = _boolean;
    return this;
  };

  this.setSliderInterval = function (integer) {
    this.sliderInterval = integer;
    return this;
  };

  this.setSlideQuery = function (string) {
    this.slideQuery = string;
    return this;
  };

  this.setNavigationButtons = function (string) {
    this.navigationButtons = string;
    return this;
  };

  this.setDots = function (string) {
    this.dots = string;
    return this;
  };

  this.getSliderId = function () {
    return this.sliderId;
  };

  this.getAutoSlider = function () {
    var autoSlide = this.autoSlider;

    if (!Number.isInteger(autoSlide)) {
      if (autoSlide == false) autoSlide = false;else autoSlide = true;
    }

    return autoSlide;
  };

  this.getSliderInterval = function () {
    return this.sliderInterval;
  };

  this.getSlideQuery = function () {
    return this.slideQuery;
  };

  this.getNavigationButtons = function () {
    return this.navigationButtons;
  };

  this.getDots = function () {
    return this.dots;
  }; // Invert setters to getters


  this.prepareParameters = function () {
    return {
      sliderId: self.getSliderId(),
      autoSlider: self.getAutoSlider(),
      sliderInterval: self.getSliderInterval(),
      navigationButtons: self.getNavigationButtons(),
      dots: self.getDots(),
      slideQuery: self.getSlideQuery()
    };
  }; // Mass assign settings


  this.fill = function () {
    // Object.keys(settingsObject).forEach(function (key) {
    //     self[key] = settingsObject[key];
    // });
    var settingsObjectKeys = Object.keys(settingsObject);
    var settingsObjectLength = settingsObjectKeys.length;

    for (var _i = 0; _i < settingsObjectLength; _i++) {
      var key = settingsObjectKeys[_i];
      self[key] = settingsObject[key];
    }
  };

  this.fill();
  return {
    sliderId: self.setSliderId,
    autoSlider: self.setAutoSlider,
    sliderInterval: self.setSliderInterval,
    navigationButtons: self.setNavigationButtons,
    dots: self.setDots,
    slideQuery: self.setSlideQuery,
    prepareParameters: self.prepareParameters
  };
}

function Slider(settings) {
  //Define Slider object
  var self = this;
  this.sliderObject = ''; //SlideParameters

  this.activeSlideId = 0;
  this.previousSlideId = 0;
  this.nextSlideId = 0;
  this.availableSlides = 1;
  this.slides = [];
  this.autoSliderInterval = null;
  this.settings = {};

  this.init = function () {
    //Append settings to self
    this.settings = settings; //Assign needed elements and calculations

    this.sliderObject = document.getElementById(this.settings.sliderId);
    this.slides = document.querySelectorAll(this.settings.slideQuery);
    this.availableSlides = this.slides.length;
    this.activeSlideId = 0; // Set active slide (and possible previous and next classes)

    this.setSlide(); // Swipe interaction

    var swipeGestures = new Hammer(this.sliderObject);
    swipeGestures.on('swipeleft', function () {
      self.resetAutoSlider();
      self.nextSlide();
      self.setSlide();
    });
    swipeGestures.on('swiperight', function () {
      self.resetAutoSlider();
      self.previousSlide();
      self.setSlide();
    });

    if (this.settings.navigationButtons !== '') {
      // Click interaction
      var navigationButtons = document.querySelectorAll(this.settings.navigationButtons);
      var navigationButtonsLength = navigationButtons.length;

      for (var _i2 = 0; _i2 < navigationButtonsLength; _i2++) {
        var navigationButton = navigationButtons[_i2];
        navigationButton.addEventListener('click', function () {
          self.clickNavigationButton(this);
        });
      }
    }

    if (this.settings.dots !== '') {
      // Click interaction
      var dots = document.querySelectorAll(this.settings.dots);
      var dotsLength = dots.length; // console.log(this.settings.dots);
      // console.log(dots);

      for (var _i3 = 0; _i3 < dotsLength; _i3++) {
        var dot = dots[_i3];
        dot.addEventListener('click', function () {
          self.clickDot(this);
        });
      }
    }

    self.autoSlider();
  };

  this.autoSlider = function () {
    // Reset the interval if defined
    if (this.autoSliderInterval !== null) clearInterval(this.autoSliderInterval); // Check if should auto slide before creating the interval
    // We do this inhere, because the autoslide function is also called by other functionality

    if (this.settings.autoSlider !== false && Number.isInteger(this.settings.sliderInterval)) {
      this.autoSliderInterval = setInterval(function () {
        self.nextSlide();
        self.setSlide();
      }, this.settings.sliderInterval);
    }
  };

  this.resetAutoSlider = self.autoSlider;

  this.nextSlide = function () {
    this.activeSlideId++;
    if (this.activeSlideId >= this.availableSlides) this.activeSlideId = 0;
  };

  this.previousSlide = function () {
    this.activeSlideId--;
    if (this.activeSlideId < 0) this.activeSlideId = this.availableSlides - 1;
  };

  this.setSlide = function () {
    // Loop through the form elements
    var slidesLength = self.slides.length;

    for (var _i4 = 0; _i4 < slidesLength; _i4++) {
      var slide = self.slides[_i4];
      slide.style.pointerEvents = "none"; // Needed for swipe functionality
      // Convert data set attribute to desired type

      var slideOrder = parseInt(slide.getAttribute('data-order')); // Remove and set active for all slides

      if (slideOrder !== self.activeSlideId) slide.classList.remove('is-active');else slide.classList.add('is-active');
    }

    if (self.settings.dots !== '') {
      self.setActiveDot();
    }
  };

  this.clickNavigationButton = function (navButton) {
    var navButtonDirection = navButton.getAttribute('aria-label');
    if (navButtonDirection === 'next') this.nextSlide();else if (navButtonDirection === 'previous') this.previousSlide();
    self.setSlide();
    self.resetAutoSlider();
  };

  this.clickDot = function (clickedDot) {
    self.activeSlideId = parseInt(clickedDot.getAttribute('data-order'));
    self.setSlide();
    self.resetAutoSlider();
  };

  this.setActiveDot = function () {
    var dots = document.querySelectorAll(this.settings.dots);
    var dotsLength = dots.length;

    for (var _i5 = 0; _i5 < dotsLength; _i5++) {
      var dot = dots[_i5];
      dotOrder = parseInt(dot.getAttribute('data-order'));

      if (dotOrder !== self.activeSlideId) {
        dot.classList.remove('is-active');
        dot.tabIndex = 0;
      } else {
        dot.classList.add('is-active');
        dot.tabIndex = -1;
      }
    }
  };
}

/***/ }),

/***/ "./resources/js/site/components/tabsliderHandler.js":
/*!**********************************************************!*\
  !*** ./resources/js/site/components/tabsliderHandler.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* ==========================================================================
   Tabslider handler
   - Handles the tabslider component which has the proper classes.
 ========================================================================== */
var TabsliderHandler = {
  tabsliderList: null,
  tabslider: null,
  init: function init() {
    TabsliderHandler.tabsliderList = document.querySelectorAll('.js-tabslider');
    var tabsliderListCount = TabsliderHandler.tabsliderList.length;

    if (isset(TabsliderHandler.tabsliderList) && tabsliderListCount !== 0) {
      for (var i = 0; i < tabsliderListCount; i++) {
        var tabslider = TabsliderHandler.tabsliderList[i];
        TabsliderHandler.initTabslider(tabslider);
      }
    }
  },
  initTabslider: function initTabslider(tabslider) {
    var container = tabslider.querySelector('.js-tabslider-container'); // Check if container element exists

    if (container == null) {
      console.error("There is no container for the content tabs defined.");
      return;
    }

    var triggers = tabslider.querySelectorAll('.js-tabslider-trigger');
    var tabs = container.querySelectorAll('.js-tabslider-content'); // Check if number of triggers and tabs match

    if (triggers.length !== tabs.length) {
      console.error("There are ".concat(triggers.length, " trigger buttons and ").concat(tabs.length, " tabs. These must match."));
    }

    tabslider.addEventListener('click', function (event) {
      // Check if clicked on a step button (prev or next)
      if (event.target.closest('.js-tabslider-step')) {
        var dir = event.target.closest('.js-tabslider-step').getAttribute('data-step');
        TabsliderHandler.stepTabslider(dir, triggers, tabs);
      } // Bail if we didn't click on the trigger element


      if (!event.target.classList.contains('js-tabslider-trigger')) return; // Bail if already active

      if (event.target.classList.contains('is-active')) {
        return;
      }

      TabsliderHandler.toggleTabslider(event.target.dataset.tabId, triggers, tabs);
    });
  },
  toggleTabslider: function toggleTabslider(tabId, triggers, tabs) {
    if (isset(triggers) && triggers.length > 0) {
      // Loop through all tabs
      for (var i = 0; i < triggers.length; i++) {
        var tabsliderTab = tabs[i];
        var tabsliderTrigger = triggers[i];
        tabsliderTrigger.classList.remove('is-active');
        tabsliderTrigger.tabIndex = 0;
        tabsliderTab.classList.remove('is-active');

        if (tabsliderTab.dataset.tabId === tabId) {
          tabsliderTrigger.classList.add('is-active');
          tabsliderTrigger.tabIndex = -1;
          tabsliderTab.classList.add('is-active');
        }
      }
    }
  },
  stepTabslider: function stepTabslider(dir, triggers, tabs) {
    var triggerCount = triggers.length;
    var activeId = 1;
    var newId = 0;

    if (isset(triggers) && triggerCount > 0) {
      // Loop through all tabs
      for (var i = 0; i < triggerCount; i++) {
        var tabsliderTab = tabs[i];
        var tabsliderTrigger = triggers[i]; // Set activeId

        if (tabsliderTab.classList.contains('is-active')) {
          activeId = Number(tabsliderTab.getAttribute('data-tab-id'));
        } // Check what next Id will be


        if (dir === 'next') {
          if (activeId === triggerCount) {
            newId = 0;
          } else {
            newId = activeId;
          }
        } else if (dir === 'prev') {
          if (activeId === 1) {
            newId = triggerCount - 1;
          } else {
            newId = activeId - 2;
          }
        } // Remove active class


        tabsliderTrigger.tabIndex = 0;
        tabsliderTab.classList.remove('is-active');
        tabsliderTrigger.classList.remove('is-active');
      }

      triggers[newId].tabIndex = -1;
      triggers[newId].classList.add('is-active');
      tabs[newId].classList.add('is-active');
    }
  }
};
TabsliderHandler.init();

/***/ }),

/***/ "./resources/js/site/components/youtubeHandler.js":
/*!********************************************************!*\
  !*** ./resources/js/site/components/youtubeHandler.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* ==========================================================================
    Youtube handler
 ========================================================================== */
var YoutubeHandler = {
  youtubeClass: '.js-youtube-player',
  players: [],
  init: function init() {
    // Get the youtube players containers
    var youtubePlayers = document.querySelectorAll(YoutubeHandler.youtubeClass);
    var youtubePlayersAmount = youtubePlayers.length;

    for (var i = 0; i < youtubePlayersAmount; i++) {
      var youtubePlayer = youtubePlayers[i];
      var youtubePlayerId = youtubePlayer.getAttribute('id');

      if (youtubePlayerId !== null) {
        // Strip the necessary data from the html and create objects from it
        var youtubeElement = {
          id: youtubePlayer.getAttribute('id'),
          link: youtubePlayer.getAttribute('data-youtube-link'),
          autoPlay: parseInt(youtubePlayer.getAttribute('data-auto-play'))
        };
        YoutubeHandler.players.push(youtubeElement);
      } else {
        console.log("Element not include because there isn't a id on the player");
        console.log(youtubePlayer);
      }
    }

    if (youtubePlayersAmount >= 1) YoutubeHandler.initYoutube();
  },

  /**
   * Check if external script is loaded
   *
   */
  initYoutube: function initYoutube() {
    // See if YT variable exists
    if (typeof YT == 'undefined' || typeof YT.Player == 'undefined') {
      // Setup API ready function
      window.onYouTubePlayerAPIReady = function () {
        YoutubeHandler.loadPlayers();
      }; // Load external script


      getScript('https://www.youtube.com/iframe_api'); // If YT already exists load player
    } else {
      YoutubeHandler.loadPlayers();
    }
  },

  /**
   * Create the Youtube player(s) with parameters
   * And rewrite the players to key them by the element id
   *
   */
  loadPlayers: function loadPlayers() {
    var players = [];
    var youtubePlayersAmount = YoutubeHandler.players.length;

    for (var i = 0; i < youtubePlayersAmount; i++) {
      var youtubePlayer = YoutubeHandler.players[i]; // Load player

      youtubePlayer.player = new YT.Player(youtubePlayer.id, {
        height: 200,
        width: 200,
        videoId: youtubePlayer.link,
        host: 'https://www.youtube-nocookie.com',
        playerVars: {
          modestbranding: 0,
          rel: 0,
          disablekb: 1,
          autoplay: youtubePlayer.autoPlay
        },
        events: {
          // 'onReady': YoutubeHandler.onReady,
          'onStateChange': YoutubeHandler.onStateChange
        }
      });
      players[youtubePlayer.id] = youtubePlayer;
    }

    YoutubeHandler.players = players;
  },

  /**
   * When player is ready to play
   */
  onReady: function onReady(event) {
    var playerContainerId = event.target.getIframe().getAttribute('id');
    var player = YoutubeHandler.players[playerContainerId].player; // Show video
    // setTimeout(function(){ $('#' + playerContainerId).stop().animate({ opacity: 1 },1000) },800);
    // If not on tablet or mobile, play on high quality
    // player.mute();
    // player.playVideo();
    // player.setPlaybackQuality('hd1080');
  },

  /**
   * Listener for Youtube state change
   */
  onStateChange: function onStateChange(event) {
    var playerContainerId = event.target.getIframe().getAttribute('id');
    var player = YoutubeHandler.players[playerContainerId].player;
    var videoState = event.data; // Loop video

    if (event.data === YT.PlayerState.ENDED) {
      player.playVideo();
    }
  }
};
YoutubeHandler.init();

/***/ }),

/***/ "./resources/js/site/global/browserHandler.js":
/*!****************************************************!*\
  !*** ./resources/js/site/global/browserHandler.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* ==========================================================================
   Browser Handler
 ========================================================================== */
var BrowserHandler = {
  userAgent: '',
  browserInfo: '',
  init: function init() {
    BrowserHandler.userAgent = window.navigator.userAgent;
    BrowserHandler.browserInfo = BrowserHandler.getBrowserInfo();
    BrowserHandler.handleIE();
    BrowserHandler.handleSafari();
  },
  handleIE: function handleIE() {
    // Detect versions below ie11
    var msie = BrowserHandler.userAgent.indexOf('MSIE ');
    var ielt11 = msie > 0; // Detect ie11

    var ie11 = !!navigator.userAgent.match(/Trident.*rv\:11\./); // If Internet Explorer

    if (ielt11 || ie11) {
      // Default version
      var version = '11'; // Way to detect version < 11

      if (ielt11) version = parseInt(BrowserHandler.userAgent.substring(msie + 5, BrowserHandler.userAgent.indexOf(".", msie))); // Append classes to HTML (we have to do this separately because else ie will fail)

      document.body.classList.add('ie');
      document.body.classList.add('v' + version);
    }
  },
  // Fallback for older safari version
  handleSafari: function handleSafari() {
    if (BrowserHandler.browserInfo.name === 'Safari' && BrowserHandler.browserInfo.version <= 10) {
      document.getElementsByTagName('html')[0].classList.add('ie');
    }
  },
  getBrowserInfo: function getBrowserInfo() {
    var ua = navigator.userAgent,
        tem,
        M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];

    if (/trident/i.test(M[1])) {
      tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
      return {
        name: 'IE ',
        version: tem[1] || ''
      };
    }

    if (M[1] === 'Chrome') {
      tem = ua.match(/\bOPR\/(\d+)/);

      if (tem != null) {
        return {
          name: 'Opera',
          version: tem[1]
        };
      }
    }

    M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];

    if ((tem = ua.match(/version\/(\d+)/i)) != null) {
      M.splice(1, 1, tem[1]);
    }

    return {
      name: M[0],
      version: M[1]
    };
  }
};
BrowserHandler.init();

/***/ }),

/***/ "./resources/js/site/global/helpers.js":
/*!*********************************************!*\
  !*** ./resources/js/site/global/helpers.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* ==========================================================================
    Helper functions
 ========================================================================== */

/*
 * Simple isset method for this does not exist in javascript
 */
window.isset = function (obj) {
  return typeof obj !== 'undefined' && obj !== null;
};
/*
 * Easing Functions - inspired from http://gizma.com/easing/
 * only considering the t value for the range [0, 1] => [0, 1]
 */


window.EasingFunctions = {
  // no easing, no acceleration
  linear: function linear(t) {
    return t;
  },
  // accelerating from zero velocity
  easeInQuad: function easeInQuad(t) {
    return t * t;
  },
  // decelerating to zero velocity
  easeOutQuad: function easeOutQuad(t) {
    return t * (2 - t);
  },
  // acceleration until halfway, then deceleration
  easeInOutQuad: function easeInOutQuad(t) {
    return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
  },
  // accelerating from zero velocity
  easeInCubic: function easeInCubic(t) {
    return t * t * t;
  },
  // decelerating to zero velocity
  easeOutCubic: function easeOutCubic(t) {
    return --t * t * t + 1;
  },
  // acceleration until halfway, then deceleration
  easeInOutCubic: function easeInOutCubic(t) {
    return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
  },
  // accelerating from zero velocity
  easeInQuart: function easeInQuart(t) {
    return t * t * t * t;
  },
  // decelerating to zero velocity
  easeOutQuart: function easeOutQuart(t) {
    return 1 - --t * t * t * t;
  },
  // acceleration until halfway, then deceleration
  easeInOutQuart: function easeInOutQuart(t) {
    return t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;
  },
  // accelerating from zero velocity
  easeInQuint: function easeInQuint(t) {
    return t * t * t * t * t;
  },
  // decelerating to zero velocity
  easeOutQuint: function easeOutQuint(t) {
    return 1 + --t * t * t * t * t;
  },
  // acceleration until halfway, then deceleration
  easeInOutQuint: function easeInOutQuint(t) {
    return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;
  }
};
/*
 * Vanilla version of the $.getScript
 */

window.getScript = function (source, callback) {
  var script = document.createElement('script');
  script.async = 1;
  var scripts = document.getElementsByTagName('script');
  var prior = scripts[scripts.length - 1];

  script.onload = script.onreadystatechange = function (_, isAbort) {
    if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {
      script.onload = script.onreadystatechange = null;
      script = undefined;

      if (!isAbort) {
        if (callback) callback();
      }
    }
  };

  script.src = source;
  prior.parentNode.insertBefore(script, prior);
};
/**
 * Returns a function, that, as long as it continues to be invoked, will not
 * be triggered. The function will be called after it stops being called for
 * N milliseconds. If `immediate` is passed, trigger the function on the
 * leading edge, instead of the trailing.
 * @param func
 * @param wait
 * @param immediate
 * @returns {Function}
 */


window.debounce = function (func, wait, immediate) {
  var timeout;
  return function () {
    var context = this,
        args = arguments;

    var later = function later() {
      timeout = null;
      if (!immediate) func.apply(context, args);
    };

    var callNow = immediate && !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
    if (callNow) func.apply(context, args);
  };
};
/*
 * Cookie helper class
 */


window.Cookie = {
  set: function set(name, value, days) {
    var domain, domainParts, date, expires, host;

    if (days) {
      date = new Date();
      date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
      expires = "; expires=" + date.toGMTString();
    } else {
      expires = "";
    }

    host = location.host;

    if (host.split('.').length === 1) {
      // no "." in a domain - it's localhost or something similar
      document.cookie = name + "=" + value + expires + "; path=/";
    } else {
      // Remember the cookie on all sub domains.
      //
      // Start with trying to set cookie to the top domain.
      // (example: if user is on foo.com, try to set
      //  cookie to domain ".com")
      //
      // If the cookie will not be set, it means ".com"
      // is a top level domain and we need to
      // set the cookie to ".foo.com"
      domainParts = host.split('.');
      domainParts.shift();
      domain = '.' + domainParts.join('.'); // For development purpose, remove this when moving to production
      // domain = '.komma.pro';

      document.cookie = name + "=" + value + expires + "; path=/; domain=" + domain; // check if cookie was successfuly set to the given domain
      // (otherwise it was a Top-Level Domain)

      if (Cookie.get(name) == null || Cookie.get(name) != value) {
        // append "." to current domain
        domain = '.' + host;
        document.cookie = name + "=" + value + expires + "; path=/; domain=" + domain;
      }
    }
  },
  get: function get(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');

    for (var i = 0; i < ca.length; i++) {
      var c = ca[i];

      while (c.charAt(0) === ' ') {
        c = c.substring(1, c.length);
      }

      if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
    }

    return null;
  },
  erase: function erase(name) {
    Cookie.set(name, '', -1);
  }
};
/*
 * Javascript version of the number_format method of PHP
 */

window.number_format = function (number, decimals, dec_point, thousands_sep) {
  // Strip all characters but numerical ones.
  number = (number + '').replace(/[^0-9+\-Ee.]/g, '');

  var n = !isFinite(+number) ? 0 : +number,
      prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
      sep = typeof thousands_sep === 'undefined' ? ',' : thousands_sep,
      dec = typeof dec_point === 'undefined' ? '.' : dec_point,
      s = '',
      toFixedFix = function toFixedFix(n, prec) {
    var k = Math.pow(10, prec);
    return '' + Math.round(n * k) / k;
  }; // Fix for IE parseFloat(0.55).toFixed(0) = 0;


  s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');

  if (s[0].length > 3) {
    s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
  }

  if ((s[1] || '').length < prec) {
    s[1] = s[1] || '';
    s[1] += new Array(prec - s[1].length + 1).join('0');
  }

  return s.join(dec);
};
/**
 * Element.closest() polyfill
 * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill
 */


if (!Element.prototype.closest) {
  if (!Element.prototype.matches) {
    Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
  }

  Element.prototype.closest = function (s) {
    var el = this;
    var ancestor = this;
    if (!document.documentElement.contains(el)) return null;

    do {
      if (ancestor.matches(s)) return ancestor;
      ancestor = ancestor.parentElement;
    } while (ancestor !== null);

    return null;
  };
}

window.Ajax = {
  //TODO: Can we create a prepare request function ??
  get: function get(url, callback) {
    var xhr = new XMLHttpRequest();
    var token = document.querySelector('meta[name="csrf-token"]').content;
    xhr.open('get', url, true);
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.setRequestHeader('X-CSRF-TOKEN', token);
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        callback(xhr);
      }
    };

    xhr.send();
  },
  post: function post(url, data, callback) {
    var xhr = new XMLHttpRequest();
    var token = document.querySelector('meta[name="csrf-token"]').content;
    xhr.open('post', url, true);
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.setRequestHeader('X-CSRF-TOKEN', token);
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        callback(xhr);
      }
    };

    xhr.send(JSON.stringify(data));
  }
};
/**
 * Capitalize the first letter of the string
 * @param string
 * @returns {string}
 */

window.capitalizeFirstLetter = function (string) {
  return string.charAt(0).toUpperCase() + string.slice(1);
};
/**
 * Convert snake case into camelcase
 *
 * @param string
 * @returns {*}
 */


window.snakeToCamel = function (string) {
  return string.replace(/(\-\w)/g, function (m) {
    return m[1].toUpperCase();
  });
};
/**
 * Get the index of an element inside its parent
 */


window.indexInParent = function (node) {
  var children = node.parentNode.childNodes;
  var num = 0;

  for (var i = 0; i < children.length; i++) {
    if (children[i] == node) return num;
    if (children[i].nodeType == 1) num++;
  }

  return -1;
};
/**
 * For security reasons iOS Safari only allows document.execCommand('copy') for text within a contentEditable container.
 * The workaround is to detect iOS Safari and quickly toggle contentEditable before executing document.execCommand('copy').
 * Wheb input or textarea is READONLY you can prevent the unwanted popup with copy/paste functions and the input keyboard
 * Code from: https://stackoverflow.com/a/46981847
 */


window.copyToClipboard = function (el) {
  // resolve the element
  el = typeof el === 'string' ? document.querySelector(el) : el; // handle iOS as a special case

  if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {
    // save current contentEditable/readOnly status
    var editable = el.contentEditable;
    var readOnly = el.readOnly; // convert to editable with readonly to stop iOS keyboard opening

    el.contentEditable = true;
    el.readOnly = true; // create a selectable range

    var range = document.createRange();
    range.selectNodeContents(el); // select the range

    var selection = window.getSelection();
    selection.removeAllRanges();
    selection.addRange(range);
    el.setSelectionRange(0, 999999); // restore contentEditable/readOnly to original state

    el.contentEditable = editable;
    el.readOnly = readOnly;
  } else {
    el.select();
  } // execute copy command


  document.execCommand('copy');
};
/**
 * Get the position of the element related to the body
 *
 * @param el
 * @returns {{top: number, left: number}}
 */


window.bodyOffset = function (el) {
  var rect = el.getBoundingClientRect(),
      scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
      scrollTop = window.pageYOffset || document.documentElement.scrollTop;
  return {
    top: rect.top + scrollTop,
    left: rect.left + scrollLeft
  };
};

/***/ }),

/***/ "./resources/js/site/global/scrollHandler.js":
/*!***************************************************!*\
  !*** ./resources/js/site/global/scrollHandler.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

/* ==========================================================================
   Scroll handler
   - Handler the objects which are bind on scroll events or visible in viewport
 ========================================================================== */
var ScrollHandler = {
  // Variables for debounce and throttle effects
  time: Date.now(),
  timeout: null,
  waitThrottle: 1000,
  waitDebounce: 300,
  // Variables for scroll direction
  lastScrollTopPosition: 0,
  scrollDirectionDown: true,
  scrollDirectionUp: false,
  //Initialisation
  init: function init() {
    // Trigger start on start up
    ScrollHandler.triggerOnInit(); // Throttle scroll

    window.addEventListener('scroll', function () {
      if (ScrollHandler.time + ScrollHandler.waitThrottle - Date.now() < 0) {
        ScrollHandler.triggerThrottle();
        ScrollHandler.time = Date.now();
      }
    }); // Smooth scroll

    window.addEventListener('scroll', function () {
      ScrollHandler.triggerSmooth();
    }); // Debounce scroll

    window.addEventListener('scroll', function () {
      if (isset(ScrollHandler.timeout)) clearTimeout(ScrollHandler.timeout);
      ScrollHandler.timeout = setTimeout(ScrollHandler.triggerDebounce, ScrollHandler.waitDebounce);
    });
  },
  // Trigger on start up
  triggerOnInit: function triggerOnInit() {
    ScrollHandler.triggerElementInViewportAnimation();
  },
  // Trigger scroll functions with throttle (preferred)
  triggerThrottle: function triggerThrottle() {
    // console.log('Throttled scroll');
    ScrollHandler.triggerElementInViewportAnimation();
  },
  // Trigger scroll on debounce
  triggerDebounce: function triggerDebounce() {// console.log('Debounce scroll');
  },
  // Trigger scroll on the flight
  triggerSmooth: function triggerSmooth() {
    // console.log('Smooth scroll');
    ScrollHandler.detectScrollDirection();
    ScrollHandler.toggleStickyHeader();
  },
  // Detect if part of a given element is visible in the viewport
  // El must be a node element
  detectIfElementIsPartlyInViewport: function detectIfElementIsPartlyInViewport(el) {
    if (isset(el)) {
      var rect = el.getBoundingClientRect(); // DOMRect { x: 8, y: 8, width: 100, height: 100, top: 8, right: 108, bottom: 108, left: 8 }

      var windowHeight = window.innerHeight || document.documentElement.clientHeight;
      var windowWidth = window.innerWidth || document.documentElement.clientWidth;
      var verticalInView = rect.top <= windowHeight && rect.top + rect.height >= 0;
      var horizontalInView = rect.left <= windowWidth && rect.left + rect.width >= 0;
      return verticalInView && horizontalInView;
    }
  },
  // Detect if a given element is fully visible in the viewport
  // El must be a node element
  detectIfElementIsFullyInViewport: function detectIfElementIsFullyInViewport(el) {
    if (isset(el)) {
      var rect = el.getBoundingClientRect();
      return rect.top >= 0 && rect.bottom <= window.innerHeight;
    }
  },
  detectScrollDirection: function detectScrollDirection() {
    var scrollTopPosition = window.pageYOffset || document.documentElement.scrollTop; // Credits: "https://github.com/qeremy/so/blob/master/so.dom.js#L426"

    if (scrollTopPosition >= ScrollHandler.lastScrollTopPosition) {
      ScrollHandler.scrollDirectionDown = true;
      ScrollHandler.scrollDirectionUp = false;
    } else {
      ScrollHandler.scrollDirectionDown = false;
      ScrollHandler.scrollDirectionUp = true;
    }

    ScrollHandler.lastScrollTopPosition = scrollTopPosition;
  },
  // Trigger animation on elements that have 'element-in-viewport' and that are in the viewport
  // These animation can only be triggered once, if you want more then that you should write an specific function for this
  triggerElementInViewportAnimation: function triggerElementInViewportAnimation() {
    var elements = document.querySelectorAll('.element-in-viewport');
    var elementsLength = elements.length;

    for (var e = 0; e < elementsLength; e++) {
      var element = elements[e];

      if (ScrollHandler.detectIfElementIsPartlyInViewport(element)) {
        element.classList.remove('element-in-viewport');
      }
    }
  },
  // ------------------------------ CUSTOM SCROLL HANDLERS ------------------------------------
  // Hide or show sticky navigation when header isn't visible
  toggleStickyHeader: function toggleStickyHeader() {
    var stickyHeader = document.querySelector('.js-sticky-header');
    var visibleStickyHeaderClass = 'is-sticky-header-visible';
    var subnavList = document.querySelectorAll('.js-subnav');
    var subNavIsVisible = false;
    stickyHeader.hidden = false;

    for (var i = 0; i < subnavList.length; i++) {
      if (window.getComputedStyle(subnavList[i], null).visibility == "visible") {
        return subNavIsVisible = true;
      }
    }

    if (isset(stickyHeader) && !subNavIsVisible) {
      // Hide when scrolling DOWN (OR within offset)
      if (ScrollHandler.scrollDirectionDown || ScrollHandler.lastScrollTopPosition < 110) {
        document.body.classList.remove(visibleStickyHeaderClass);
      } // Show when scrolling UP and outside of offset
      else {
          document.body.classList.add(visibleStickyHeaderClass);
        }
    }
  }
};
ScrollHandler.init();

/***/ }),

/***/ "./resources/sass/site/style.scss":
/*!****************************************!*\
  !*** ./resources/sass/site/style.scss ***!
  \****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

// removed by extract-text-webpack-plugin

/***/ }),

/***/ 0:
/*!*************************************************************************!*\
  !*** multi ./resources/js/site/app.js ./resources/sass/site/style.scss ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(/*! /Users/robhoeben/Development/Basic-Kemtec/resources/js/site/app.js */"./resources/js/site/app.js");
module.exports = __webpack_require__(/*! /Users/robhoeben/Development/Basic-Kemtec/resources/sass/site/style.scss */"./resources/sass/site/style.scss");


/***/ })

},[[0,"/js/site/manifest","/js/site/vendor"]]]);