Sacados algunos comentarios y organizado un poco el codigo