(function ($) {
    "use strict";
    $.fn.extend({

        countdown100: function (options) {
            var defaults = {
                timeZone: "",
                endtimeYear: 0,
                endtimeMonth: 0,
                endtimeDate: 0,
                endtimeHours: 0,
                endtimeMinutes: 0,
                endtimeSeconds: 0,
            };

            var options = $.extend(defaults, options);

            return this.each(function () {
                var obj = $(this);
                var timeNow = new Date();

                var tZ = options.timeZone;
                var endYear = options.endtimeYear;
                var endMonth = options.endtimeMonth;
                var endDate = options.endtimeDate;
                var endHours = options.endtimeHours;
                var endMinutes = options.endtimeMinutes;
                var endSeconds = options.endtimeSeconds;

                if (tZ == "") {
                    var deadline = new Date(endYear, endMonth - 1, endDate, endHours, endMinutes, endSeconds);
                } else {
                    var deadline = moment.tz([endYear, endMonth - 1, endDate, endHours, endMinutes, endSeconds], tZ).format();
                }

                if (Date.parse(deadline) < Date.parse(timeNow)) {
                    deadline = new Date(Date.parse(new Date()) + endDate * 24 * 60 * 60 * 1000 + endHours * 60 * 60 * 1000 + endMinutes * 60 * 1000 + endSeconds * 1000);
                }

                initializeClock(deadline);

                function getTimeRemaining(endtime) {
                    var t = Date.parse(endtime) - Date.parse(new Date());
                    var seconds = Math.floor((t / 1000) % 60);
                    var minutes = Math.floor((t / 1000 / 60) % 60);
                    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);
                    var days = Math.floor(t / (1000 * 60 * 60 * 24));

                    return {
                        'total': t,
                        'days': days,
                        'hours': hours,
                        'minutes': minutes,
                        'seconds': seconds
                    };
                }

                function initializeClock(endtime) {
                    var daysSpan = $(obj).find('.days');
                    var hoursSpan = $(obj).find('.hours');
                    var minutesSpan = $(obj).find('.minutes');
                    var secondsSpan = $(obj).find('.seconds');

                    function updateClock() {
                        var t = getTimeRemaining(endtime);

                        daysSpan.html(t.days);
                        hoursSpan.html(t.hours);
                        minutesSpan.html(t.minutes);
                        secondsSpan.html(t.seconds);

                        if (t.total <= 0) {
                            clearInterval(timeinterval);
                        }
                    }

                    updateClock();
                    var timeinterval = setInterval(updateClock, 1000);
                }
            });
        }
    });
})(jQuery);
