initial update
adds a bunch of code to make sure it works against all common scrollbar cases