I wrote this for somebody a while back. I don't remember for who.

Source Code