Собственно, и это гораздо меньше по объему, чем представленная в топике функция.