code: function(event) {
  		if (this.hasScroll()) {
  			// TODO merge with no-scroll-else
  			if (!this.active || this.last()) {
  				this.activate(event, this.element.children(".ui-menu-item:first"));
  				return;
  			}
  			var base = this.active.offset().top,
  				height = this.element.height(),
  				result = this.element.children(".ui-menu-item").filter(function() {
  					var close = $(this).offset().top - base - height + $(this).height();
  					// TODO improve approximation
  					return close < 10 && close > -10;
  				});
  
  			// TODO try to catch this earlier when scrollTop indicates the last page anyway
  			if (!result.length) {
  				result = this.element.children(".ui-menu-item:last");
  			}
  			this.activate(event, result);
  		} else {
  			this.activate(event, this.element.children(".ui-menu-item")
  				.filter(!this.active || this.last() ? ":first" : ":last"));
  		}
  	}
docs: TODO merge with previousPage