text: /*global pushDomEvents */
  var isiOS = navigator.userAgent.match(/(iPhone|iPod|iPad)/i),
      isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1 ? 1 : 0,
      minimumScrollYOffset = isAndroid ? 1 : 0;
  
  Thorax.Util.scrollTo = function(x, y) {
    y = y || minimumScrollYOffset;
    function _scrollTo() {
      window.scrollTo(x, y);
    }
    if (isiOS) {
      // a defer is required for ios
      _.defer(_scrollTo);
    } else {
      _scrollTo();
    }
    return [x, y];
  };
  
  Thorax.LayoutView.on('change:view:end', function(newView, oldView, options) {
    options.scroll && Thorax.Util.scrollTo(0, 0);
  });
  
  Thorax.Util.scrollToTop = function() {
    // android will use height of 1 because of minimumScrollYOffset in scrollTo()
    return this.scrollTo(0, 0);
  };
  
  pushDomEvents([
    'singleTap', 'doubleTap', 'longTap',
    'swipe',
    'swipeUp', 'swipeDown',
    'swipeLeft', 'swipeRight'
  ]);
  
  //built in dom events
  Thorax.View.on({
    'submit form': function(/* event */) {
      // Hide any virtual keyboards that may be lingering around
      var focused = $(':focus')[0];
      focused && focused.blur();
    }
  });
  