// Fix DOM matches function if (!Element.prototype.matches) {

Element.prototype.matches =
  Element.prototype.matchesSelector ||
  Element.prototype.mozMatchesSelector ||
  Element.prototype.msMatchesSelector ||
  Element.prototype.oMatchesSelector ||
  Element.prototype.webkitMatchesSelector ||
  function(s) {
    var matches = (this.document || this.ownerDocument).querySelectorAll(s),
      i = matches.length;
    while (--i >= 0 && matches.item(i) !== this) {}
    return i > -1;
  };

}

// Get Scroll position function getScrollPos() {

var supportPageOffset = window.pageXOffset !== undefined;
var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat");

var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;
var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;

return { x: x, y: y };

}

var _scrollTimer = [];

// Smooth scroll function smoothScrollTo(y, time) {

time = time == undefined ? 500 : time;

var scrollPos = getScrollPos();
var count = 60;
var length = (y - scrollPos.y);

function easeInOut(k) {
  return .5 * (Math.sin((k - .5) * Math.PI) + 1);
}

for (var i = _scrollTimer.length - 1; i >= 0; i--) {
  clearTimeout(_scrollTimer[i]);
}

for (var i = 0; i <= count; i++) {
  (function() {
    var cur = i;
    _scrollTimer[cur] = setTimeout(function() {
      window.scrollTo(
        scrollPos.x,
        scrollPos.y + length * easeInOut(cur/count)
      );
    }, (time / count) * cur);
  })();
}

}