﻿//Type.registerNamespace("FR");
if(typeof(FR) == "undefined") FR = {};
var allDateSelectors = new Array();
FR.ddDateSelector = function(days, months, years) {
    this.daysId = days;
    this.monthsId = months;
    this.yearsId = years;
    this.days = $('#' + days);
    this.months = $('#' + months);
    this.years = $('#' + years);
    this.years.change(this.updateDays.bind(this));
    this.months.change(this.updateDays.bind(this));
    this.years.keyup(this.updateDays.bind(this));
    this.months.keyup(this.updateDays.bind(this));
};
FR.ddDateSelector.prototype = {
    get_days: function() {
        return this._days;
    },
    set_days: function(value) {
        this._days = value;
    },
    get_months: function() {
        return this._months;
    },
    set_months: function(value) {
        this._months = value;
    },
    get_years: function() {
        return this._years;
    },
    set_years: function(value) {
        this._years = value;
    },
    daysInMonth: function(month, year) {
        return 32 - new Date(year, month, 32).getDate();
    },
    updateDays: function() {
        debugger;
        var m = parseInt(this.months.val()) || 0;
        var y = parseInt(this.years.val()) || 0;
        var d = this.days.val();
        var dNum = parseInt(d) || 0;
        if (y <= 0) { return; }
        if (m <= 0) { return; }
        var dFirstVal = parseInt(this.days.children().eq(0).val()) || 0;
        var dNumber = this.daysInMonth(m - 1, y);
        var selKey = dFirstVal;
        if (dNum > 0) selKey = d;
        if (dFirstVal <= 0) dNumber += 1;
        while (this.days.children().length > dNumber) {
            this.days.find('option:last').remove();
        }
        //adding days if less than current month has
        var length;
        var value;
        while (this.days.children().length < dNumber) {
            value = this.days.children().length + 1;
            if (dFirstVal <= 0) value -= 1;
            this.days.append($('<option value="' + value + '">' + value + '</option>'));
        }
        //selecting the same day of month

        if (selKey > 0) {
            last = this.days.children().length - 1;
            if (selKey < dFirstVal) {
                this.days.selectedIndex = 1;
            } else if (selKey > parseInt(this.days.find('option:last').val())) {
                this.days.selectedIndex = last;
            } else {
                for (var i = 0; i < this.days.options.length; i++) {
                    if (this.days.options[i].value == selKey) {
                        this.days.options[i].selected = true;
                        break;
                    }
                }
            }
        } else {
            this.days.val(dFirstVal);
        }
    }
};
AddDateSelector = function(daysSelectId, monthsSelectId, yearsSelectId) {
    for (var i = 0; i < allDateSelectors.length; i++)
        if (allDateSelectors[i].daysId == daysSelectId && allDateSelectors[i].monthsId == monthsSelectId && allDateSelectors[i].yearsId == yearsSelectId) {
        allDateSelectors[i] = new FR.ddDateSelector(daysSelectId, monthsSelectId, yearsSelectId);
        return;
    }
    allDateSelectors.push(new FR.ddDateSelector(daysSelectId, monthsSelectId, yearsSelectId));
}
//FR.ddDateSelector.registerClass('FR.ddDateSelector', null, Sys.IDisposable);