This started as a test using a tutorial, i have iterate a few times in the code an end up with this. Please see the previus versions to notice the changes.