I was asked to publish this, but this code is terrible, and isn't reflective of my quality, it's something I threw together over a few days.