I loved playing around with this kind of water simulation when I was younger, the basic principle behind it is very simple. Spent many hours optimizing C++ and OpenGL code.
I still haven't figured out though how to stop wave reflection at the edges though...