(function($)
{
    $.fn.timeCountDown = function(targetTime, callback)
    {
        var container = $(this);
        container.append('<div class="days"><span></span> дней</div>');
        container.append('<div class="hours"><span></span> часов</div>');
        container.append('<b>:</b><div class="minutes"><span></span> минут</div>');
        container.append('<b>:</b><div class="seconds"><span></span> секунд</div>');
        var $days = container.find('.days span');
        var $hours = container.find('.hours span');
        var $minutes = container.find('.minutes span');
        var $seconds = container.find('.seconds span');
        var oneMinute = 60; //minute unit in seconds
        var oneHour = 60 * 60; //hour unit in seconds
        var oneDay = 60 * 60 * 24; //day unit in seconds

        function zeroFill(number, width)
        {
            number = number.toString();
            width -= number.length;
            if (width > 0)
            {
                return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number;
            }
            return number;
        }

        function setText($el, text)
        {
            var result = '';
            for (var i=0; i<text.length; i++)
            {
                result += '<i>' + text.substring(i, i+1) + '</i>';
            }
            $el.html(result);   
        }

        function tic()
        {
            var currentTime = new Date();

            var delta = (targetTime - currentTime) / 1000; // difference btw target date and current date, in seconds
            if (delta <= 0)
            {
                setText($days, '0');
                setText($hours, '00');
                setText($minutes, '00');
                setText($seconds, '00');
                if (callback)
                    callback(container);
                return;
            }

            var days = Math.floor(delta/oneDay);
            var hours = Math.floor((delta-days*oneDay)/oneHour);
            var minutes = Math.floor((delta-days*oneDay-hours*oneHour)/oneMinute);
            var seconds = Math.floor((delta-days*oneDay-hours*oneHour-minutes*oneMinute));
            
            setText($days, days.toString());
            setText($hours, zeroFill(hours, 2));
            setText($minutes, zeroFill(minutes, 2));
            setText($seconds, zeroFill(seconds, 2));
            setTimeout(tic, 1000);
        }
        tic();
    };
})(jQuery);

