Кое-что здесь было похожее, но на бесконечных просторах интернета нашлась полная версия х)
читать дальше