(function ( $ ) {

var DEFAULT_DESC = {
    days:    '天',
    hours:   '時',
    minutes: '分',
    seconds: '秒'
};

$.fn.extend({
        countdown:          function ( deadline, prefix, postfix, desc ) {
            deadline = new Date(deadline).getTime();
            this.data('deadline', deadline);
            var intervalID = setInterval('$("' + this.selector + '").__updateCountdown()', 800);
            this.data('intervalID', intervalID)
                .data('prefix', prefix)
                .data('postfix', postfix)
                .data('desc', desc);
        },
        __updateCountdown:  function (  ) {
            var delta = (parseInt(this.data('deadline')) - (new Date().getTime())) / 1000;
            var prefix = this.data('prefix') || '', postfix = this.data('postfix') || '',
                desc = this.data('desc') || DEFAULT_DESC;
            var days = 0, hours = 0, minutes = 0, seconds = 0;
                if( delta > 0 ) {
                    days = Math.floor(delta / 86400);
                    hours = parseInt((delta -= days * 86400) / 3600);
                    minutes = parseInt((delta - hours * 3600) / 60);
                    seconds = parseInt(delta % 60);
                }
            this.html([
                    prefix, days,    postfix, desc.days || '',
                    prefix, hours,   postfix, desc.hours || '',
                    prefix, minutes, postfix, desc.minutes || '',
                    prefix, seconds, postfix, desc.seconds || ''
                ].join(' '));
        },
        stopCountdown:      function (  ) {
            clearInterval($(this).data('intervalID'));
        }
    });

})(jQuery);

