заранее извиняюсь (не кидаться камнями) за возможную неоптимальность некоторых вещей....
т.к. на самом деле кину я только часть большого, практически универсального комплекса разных процедур, который я использую почти во всех проектах и который постоянно совершенствуется.