﻿function InitDayMonthYear(day, month, year) {
    $(day).DayPicker({
        day: $(day).val(),
        month: $(month).val(),
        year: $(year).val()
    });

    $(month).MonthPicker({ month: $(month).val(), OnChange: function() {
        $(day).DayPicker({
            day: $(day).val(),
            month: $(month).val(),
            year: $(year).val()
        });
    }
    });
    $(year).YearPicker({ year: $(year).val(), OnChange: function() {
        $(day).DayPicker({
            day: $(day).val(),
            month: $(month).val(),
            year: $(year).val()
        });
    }
    });
}

(function($) {
    var d = new Date();

    function GetDaysInMonthAndYear(month, year) {
        switch (parseInt(month)) {
            case 1: return 31;                          //JAN
            case 2: return (year % 4 == 0) ? 29 : 28;   //FEB
            case 3: return 31;                          //MAR
            case 4: return 30;                          //APR
            case 5: return 31;                          //MAY
            case 6: return 30;                          //JUN
            case 7: return 31;                          //JUL
            case 8: return 31;                          //AUG
            case 9: return 30;                          //SEP
            case 10: return 31;                         //OCT
            case 11: return 30;                         //NOV
            case 12: return 31;                         //DEC
        }
    }

    $.fn.DayPicker = $.fn.DayPicker = function(options) {
        options = $.extend({
            day: d.getDate(),
            month: d.getMonth() + 1,
            year: d.getFullYear()
        }, options || {});

        var days = GetDaysInMonthAndYear(options.month, options.year);
        $(this).children("option").remove();

        for (var i = 1; i <= days; i++) {
            $("<option>" + i + "</option>").appendTo(this);
        }

        $(this).val(options.day).change(options.OnChange);
        return $(this);
    };

    $.fn.MonthPicker = $.fn.MonthPicker = function(options) {
        options = $.extend({
            month: d.getMonth() + 1,
            useNames: true,
            names: ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],
            OnChange: null
        }, options || {});

        $(this).children("option").remove();

        for (var i = 1; i < 13; i++) {
            var option = '<option value="' + i + '">';
            option += options.useNames ? options.names[i - 1] : i;
            option += '</option>';
            $(option).appendTo(this);
        }

        $(this).val(options.month).change(options.OnChange);
        return $(this);
    };

    $.fn.YearPicker = $.fn.YearPicker = function(options) {
        options = $.extend({
            minYear: d.getFullYear() - 1,
            maxYear: d.getFullYear() + 1,
            year: d.getFullYear(),
            OnChange: null
        }, options || {});

        $(this).children("option").remove();

        if (options.minYear < options.maxYear) {
            for (var i = options.minYear; i <= options.maxYear; i++) {
                $("<option>" + i + "</option>").appendTo(this);
            }
        }

        $(this).val(options.year).change(options.OnChange);
        return $(this);
    };

    $.fn.HourPicker = $.fn.HourPicker = function(options) {
        options = $.extend({
            hour: 9,
            IsPM: false,
            OnChange: null
        }, options || {});

        $(this).children("option").remove();
        for (var i = 1; i < 13; i++) {
            var hour = options.IsPM ? (i + 12) % 24 : i;
            $("<option value=\"" + hour + "\">" + i + "</option>").appendTo(this);
        }

        $(this).val(options.hour);
        return $(this);
    };

    $.fn.MinutePicker = $.fn.MinutePicker = function(options) {
        options = $.extend({
            minute: 0,
            increment: 5,
            OnChange: null
        }, options || {});

        $(this).children("option").remove();

        for (var i = 0; i < 60; i += options.increment) {
            if (i.toString().length == 1) {
                $("<option>0" + i + "</option>").appendTo(this);
            }
            else {
                $("<option>" + i + "</option>").appendTo(this);
            }
        }

        $(this).val(options.selected);
        return $(this);
    };

    $.fn.AMPMPicker = $.fn.AMPMPicker = function(options) {
        options = $.extend({
            selected: 'AM',
            OnChange: null
        }, options || {});

        $(this).children("option").remove();

        $("<option>AM</option>").appendTo(this);
        $("<option>PM</option>").appendTo(this);

        $(this).val(options.selected);
        return $(this);
    };


})(jQuery);