http://www.dreamincode.net/code/snippet212.htm