    var DateFilter = new Class({
        initialize:function(prefix, withDeafault) {
            this.withDeafault = withDeafault;
            this.prefix=prefix;

            this.day = $("day-" + prefix);
            this.month = $("month-" + prefix);
            this.year = $("year-" + prefix);

            this.month.addEvent("change", this.dayCheck.bind(this));
            this.year.addEvent("change", this.dayCheck.bind(this));
            this.day.addEvent("change", this.dayCheck.bind(this));

            this.popDays();
        },
        dayCheck:function(e){
            e.stop();
            this.popDays();
        },
        popDays:function(){
            var year = new Number(this.year.value);
            var month = new Number(this.month.value);
            var day = new Number(this.day.value);

            if (year.toString() == 'NaN' ||
                month.toString() == 'NaN')
                return;
            var lastDayOfMonth = new Date(year, month, 0).getDate();
            if (this.withDeafault) {
                lastDayOfMonth = lastDayOfMonth + 1;
            }

            for (var i=0; i<this.day.options.length; i++){
                var curDay = this.day.options[i];
                if (lastDayOfMonth < i+1)
                    curDay.setProperty("disabled", "disabled");
                else
		    if(curDay.disabled)
                        curDay.removeProperty("disabled");
            };

            if (this.withDeafault) {
                if (this.day.value > lastDayOfMonth - 1)
                    this.day.selectedIndex = lastDayOfMonth - 1;
            } else {
                if (this.day.value > lastDayOfMonth)
                    this.day.selectedIndex = lastDayOfMonth - 1;
            }
        }
    });
