top = $(div).offset().top - 100;
у вас до данной позиции (значение top) скролл идет, экспериментируйте
upd: прочитал невнимательно, сравнивайте текущее положение и если $(div).offset().top меньше текущего, то есть скролл вверх, то -100, если больше, то есть скролл вниз, то -200
upd2: js не практикую, но должно быть что-то вроде этого:
$(document).ready(function(){
$("#menu").on("click","a", function (event) {
event.preventDefault();
var div = $(this).attr('href');
var top = $(div).offset().top;
var pos = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
var delta = (top > pos) ? 200 : 100;
top = top-delta;
$('body,html').animate({scrollTop: top}, 1000);
});
});