	// Calendar RC4, Copyright (c) 2007 Aeron Glemann <http://electricprism.com/aeron>, MIT Style License.
// Mootools 1.2 compatibility by Davorin Šego
var FECalendar = new Class({
    Implements: [Events, Options],
    options: {
        blocked: [],
        classes: [],
        days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
        direction: 0,
        draggable: true,
        months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
        navigation: 1,
        offset: 0,
        onHideStart: Class.empty,
        onHideComplete: Class.empty,
        onShowStart: Class.empty,
        onShowComplete: Class.empty,
        pad: 1,
        titleFormat: "D M jS Y",
        tweak: {
            x: 0,
            y: 0
        }
    },
    initialize: function (g, b) {
        if (!g) {
            return false
        }
        this.setOptions(b);
        var e = ["calendar", "prev", "next", "month", "year", "today", "invalid", "valid", "inactive", "active", "hover", "hilite"];
        var a = e.map(function (l, k) {
            if (this.options.classes[k]) {
                if (this.options.classes[k].length) {
                    l = this.options.classes[k]
                }
            }
            return l
        }, this);
        this.classes = a.associate(e);
        this.calendar = new Element("div").addClass(this.classes.calendar).inject($('calendarinput'), 'after');
        if (window.ie6) {
            this.iframe = new Element("iframe").inject($('datetest'), 'after');
        }
        this.fx = new Fx.Tween(this.calendar, {
            onStart: function () {
                if (this.calendar.getStyle("opacity") == 0) {
                    if (window.ie6) {
                        this.iframe.setStyle("display", "block")
                    }
                    this.calendar.setStyle("display", "block");
                    this.fireEvent("onShowStart", this.element)
                } else {
                    this.fireEvent("onHideStart", this.element)
                }
            }.bind(this),
            onComplete: function () {
                if (this.calendar.getStyle("opacity") == 0) {
                    if (window.ie6) {}
                    this.fireEvent("onHideComplete", this.element)
                } else {
                    this.fireEvent("onShowComplete", this.element)
                }
            }.bind(this)
        });
        if (window.Drag && this.options.draggable) {
            this.drag = new Drag.Move(this.calendar, {
                onDrag: function () {
                    if (window.ie6) {
                        this.iframe.setStyles({
                            left: this.calendar.style.left,
                            top: this.calendar.style.top
                        })
                    }
                }.bind(this)
            })
        }
        this.calendars = [];
        var j = 0;
        var h = new Date();
        h.setDate(h.getDate() + this.options.direction.toInt());
        h.setDate(selectedday);
        h.setMonth(selectedmonth);
        h.setYear(selectedyear);
        for (var c in g) {
            var f = {
                button: new Element("button", {
                    type: "button"
                }),
                el: $(c),
                els: [],
                id: j++,
                month: h.getMonth(),
                visible: false,
                year: h.getFullYear()
            };
            if (!this.element(c, g[c], f)) {
                continue
            }
            f.el.addClass(this.classes.calendar);
            f.button.addClass(this.classes.calendar).addEvent("click", function (i) {
                this.toggle(i)
            }.pass(f, this)).injectAfter(f.el);
            f.val = this.read(f);
            $extend(f, this.bounds(f));
            $extend(f, this.values(f));
            this.rebuild(f);
            this.calendars.push(f)
        }
    },
    blocked: function (c) {
        var a = [];
        var e = new Date(c.year, c.month, 1).getDay();
        var b = new Date(c.year, c.month + 1, 0).getDate();
        this.options.blocked.each(function (m) {
            var h = m.split(" ");
            for (var n = 0; n <= 3; n++) {
                if (!h[n]) {
                    h[n] = (n == 3) ? "" : "*"
                }
                h[n] = h[n].contains(",") ? h[n].split(",") : new Array(h[n]);
                var o = h[n].length - 1;
                for (var l = o; l >= 0; l--) {
                    if (h[n][l].contains("-")) {
                        var p = h[n][l].split("-");
                        for (var g = p[0]; g <= p[1]; g++) {
                            if (!h[n].contains(g)) {
                                h[n].push(g + "")
                            }
                        }
                        h[n].splice(l, 1)
                    }
                }
            }
            if (h[2].contains(c.year + "") || h[2].contains("*")) {
                if (h[1].contains(c.month + 1 + "") || h[1].contains("*")) {
                    h[0].each(function (i) {
                        if (i > 0) {
                            a.push(i.toInt())
                        }
                    });
                    if (h[3]) {
                        for (var n = 0; n < b; n++) {
                            var f = (n + e) % 7;
                            if (h[3].contains(f + "")) {
                                a.push(n + 1)
                            }
                        }
                    }
                }
            }
        }, this);
        return a
    },
    bounds: function (c) {
        var e = new Date(1000, 0, 1);
        var a = new Date(2999, 11, 31);
        var b = new Date().getDate() + this.options.direction.toInt();
        if (this.options.direction > 0) {
            e = new Date();
            e.setDate(b + this.options.pad * c.id)
        }
        if (this.options.direction < 0) {
            a = new Date();
            a.setDate(b - this.options.pad * (this.calendars.length - c.id - 1))
        }
        c.els.each(function (g) {
            if (g.get("tag") == "select") {
                if (g.format.test("(y|Y)")) {
                    var f = [];
                    g.getChildren().each(function (k) {
                        var j = this.unformat(k.value, g.format);
                        if (!f.contains(j[0])) {
                            f.push(j[0])
                        }
                    }, this);
                    f.sort(this.sort);
                    if (f[0] > e.getFullYear()) {
                        d = new Date(f[0], e.getMonth() + 1, 0);
                        if (e.getDate() > d.getDate()) {
                            e.setDate(d.getDate())
                        }
                        e.setYear(f[0])
                    }
                    if (f.getLast() < a.getFullYear()) {
                        d = new Date(f.getLast(), a.getMonth() + 1, 0);
                        if (a.getDate() > d.getDate()) {
                            a.setDate(d.getDate())
                        }
                        a.setYear(f.getLast())
                    }
                }
                if (g.format.test("(F|m|M|n)")) {
                    var h = [];
                    var i = [];
                    g.getChildren().each(function (k) {
                        var j = this.unformat(k.value, g.format);
                        if ($type(j[0]) != "number" || j[0] == f[0]) {
                            if (!h.contains(j[1])) {
                                h.push(j[1])
                            }
                        }
                        if ($type(j[0]) != "number" || j[0] == f.getLast()) {
                            if (!i.contains(j[1])) {
                                i.push(j[1])
                            }
                        }
                    }, this);
                    h.sort(this.sort);
                    i.sort(this.sort);
                    if (h[0] > e.getMonth()) {
                        d = new Date(e.getFullYear(), h[0] + 1, 0);
                        if (e.getDate() > d.getDate()) {
                            e.setDate(d.getDate())
                        }
                        e.setMonth(h[0])
                    }
                    if (i.getLast() < a.getMonth()) {
                        d = new Date(e.getFullYear(), i.getLast() + 1, 0);
                        if (a.getDate() > d.getDate()) {
                            a.setDate(d.getDate())
                        }
                        a.setMonth(i.getLast())
                    }
                }
            }
        }, this);
        return {
            start: e,
            end: a
        }
    },
    caption: function (h) {
        var a = {
            prev: {
                month: true,
                year: true
            },
            next: {
                month: true,
                year: true
            }
        };
        if (h.year == h.start.getFullYear()) {
            a.prev.year = false;
            if (h.month == h.start.getMonth() && this.options.navigation == 1) {
                a.prev.month = false
            }
        }
        if (h.year == h.end.getFullYear()) {
            a.next.year = false;
            if (h.month == h.end.getMonth() && this.options.navigation == 1) {
                a.next.month = false
            }
        }
        if ($type(h.months) == "array") {
            if (h.months.length == 1 && this.options.navigation == 2) {
                a.prev.month = a.next.month = false
            }
        }
        var b = new Element("div", {
            'class': 'calendar_navigation'
        });
        var f = new Element("a", {
            'title': 'zum vorherigen Monat'
        }).addClass(this.classes.prev).appendText("vorheriger");
		/* PARROT { //
		if (h.year == currentYear && h.month < currentMonth || h.year < currentYear) {
            f.addClass('invalid');
        }
		// } */
        var e = new Element("a", {
            'title': 'zum nächsten Monat'
        }).addClass(this.classes.next).appendText("nächster");
		if (h.year == currentYear && h.month >= currentMonth || h.year > currentYear) {
            e.addClass('invalid').set('title', 'Noch keine Termine für den nächsten Monat eingetragen');
        }
        if (this.options.navigation == 2) {
            var g = new Element("span").addClass(this.classes.month).injectInside(b);
            if (a.prev.month) {
                f.clone().addEvent("click", function (i) {
                    this.navigate(i, "m", -1)
                }.pass(h, this)).injectInside(g)
            }
            g.adopt(new Element("span").appendText(this.options.months[h.month]));
            if (a.next.month) {
                e.clone().addEvent("click", function (i) {
                    this.navigate(i, "m", 1)
                }.pass(h, this)).injectInside(g)
            }
            var c = new Element("span").addClass(this.classes.year).injectInside(b);
            if (a.prev.year) {
                f.clone().addEvent("click", function (i) {
                    this.navigate(i, "y", -1)
                }.pass(h, this)).injectInside(c)
            }
            c.adopt(new Element("span").appendText(h.year));
            if (a.next.year) {
                e.clone().addEvent("click", function (i) {
                    this.navigate(i, "y", 1)
                }.pass(h, this)).injectInside(c)
            }
        } else {
			//* PARROT { */ /* // } //
            if (a.prev.month && this.options.navigation) {
                f.clone().addEvent("click", function (i) {
                    this.navigate(i, "m", -1)
                }.pass(h, this)).injectInside(b)
            }
			/* PARROT {} */
            $$('.mod_calendar h2 .month', '.mod_calendar h2 .year').destroy();
            $$('.mod_calendar h2').getLast().adopt(new Element("span").addClass(this.classes.month).appendText(this.options.months[h.month] + ' '));
            $$('.mod_calendar h2').getLast().adopt(new Element("span").addClass(this.classes.year).appendText(h.year));
            if (a.next.month && this.options.navigation) {
				/* PARROT { //
				f.clone().addEvent("click", function (i) {
                    if (h.year == currentYear && h.month >= currentMonth || h.year > currentYear) {
                        this.navigate(i, "m", -1);
                    }
                }.pass(h, this)).injectInside(b)
				// } */
                e.clone().addEvent("click", function (i) {
                    if (h.year == currentYear && h.month < currentMonth || h.year < currentYear) {
                        this.navigate(i, "m", 1);
                    }
                }.pass(h, this)).injectInside(b)
            }
        }
        return b
    },
    changed: function (a) {
        a.val = this.read(a);
        $extend(a, this.values(a));
        this.rebuild(a);
        if (!a.val) {
            return
        }
        if (a.val.getDate() < a.days[0]) {
            a.val.setDate(a.days[0])
        }
        if (a.val.getDate() > a.days.getLast()) {
            a.val.setDate(a.days.getLast())
        }
        a.els.each(function (b) {
            b.value = this.format(a.val, b.format)
        }, this);
        this.check(a);
        this.calendars.each(function (b) {
            if (b.visible) {
                this.display(b)
            }
        }, this)
    },
    check: function (a) {
        this.calendars.each(function (e, b) {
            if (e.val) {
                var f = false;
                if (b < a.id) {
                    var c = new Date(Date.parse(a.val));
                    c.setDate(c.getDate() - (this.options.pad * (a.id - b)));
                    if (c < e.val) {
                        f = true
                    }
                }
                if (b > a.id) {
                    var c = new Date(Date.parse(a.val));
                    c.setDate(c.getDate() + (this.options.pad * (b - a.id)));
                    if (c > e.val) {
                        f = true
                    }
                }
                if (f) {
                    if (e.start > c) {
                        c = e.start
                    }
                    if (e.end < c) {
                        c = e.end
                    }
                    e.month = c.getMonth();
                    e.year = c.getFullYear();
                    $extend(e, this.values(e));
                    e.val = e.days.contains(c.getDate()) ? c : null;
                    this.write(e);
                    if (e.visible) {
                        this.display(e)
                    }
                }
            } else {
                e.month = a.month;
                e.year = a.year
            }
        }, this)
    },
    clicked: function (c, a, b) {
        b.val = (this.value(b) == a) ? null : new Date(b.year, b.month, a);
        this.write(b);
        if (!b.val) {
            b.val = this.read(b)
        }
        if (b.val) {
            this.check(b);
            this.toggle(b)
        } else {
            c.addClass(this.classes.valid);
            c.removeClass(this.classes.active)
        }
    },
    display: function (l) {
        this.calendar.empty();
        this.calendar.className = this.classes.calendar + " " + this.options.months[l.month].toLowerCase();
        var m = new Element("div").injectInside(this.calendar);
        var t = new Element("table").injectInside(m);
        var s = new Element("thead").injectInside(t);
        var b = new Element("tr").injectInside(s);
        for (var r = 0; r <= 6; r++) {
            var f = this.options.days[(r + this.options.offset) % 7];
            b.adopt(new Element("th", {
                title: f
            }).appendText(f.substr(0, 1)))
        }
        var a = new Element("tbody").injectInside(t);
        this.caption(l).inject($$('div.calendar table').getLast(), 'after');
        var b = new Element("tr").injectInside(a);
        var v = new Date(l.year, l.month, 1);
        var e = ((v.getDay() - this.options.offset) + 7) % 7;
        var k = new Date(l.year, l.month + 1, 0).getDate();
        var n = new Date(l.year, l.month, 0).getDate();
        var g = this.value(l);
        var p = l.days;
        var o = [];
        var h = [];
        this.calendars.each(function (z, y) {
            if (z != l && z.val) {
                if (l.year == z.val.getFullYear() && l.month == z.val.getMonth()) {
                    o.push(z.val.getDate())
                }
                if (l.val) {
                    for (var x = 1; x <= k; x++) {
                        v.setDate(x);
                        if ((y < l.id && v > z.val && v < l.val) || (y > l.id && v > l.val && v < z.val)) {
                            if (!h.contains(x)) {
                                h.push(x)
                            }
                        }
                    }
                }
            }
        }, this);
        var v = new Date();
        var u = new Date(v.getFullYear(), v.getMonth(), v.getDate()).getTime();
        for (var r = 1; r < 43; r++) {
            if ((r - 1) % 7 == 0) {
                b = new Element("tr").injectInside(a)
            }
            var j = new Element("td").injectInside(b);
            var q = r - e;
            var w = new Date(l.year, l.month, q);
            var c = "";
            if (q === g) {
                c = this.classes.active
            } else {
                if (o.contains(q)) {
                    c = this.classes.inactive
                } else {
                    if (p.contains(q)) {
                        c = this.classes.valid
                    } else {
                        if (q >= 1 && q <= k) {
                            c = this.classes.invalid
                        }
                    }
                }
            }
            if (w.getTime() == u) {
                c = c + " " + this.classes.today
            }
            if (selecteddaytimestamp == w.getTime()) {
                c = c + " selected"
            }
            if (h.contains(q)) {
                c = c + " " + this.classes.hilite
            }
            j.addClass(c);
            if (p.contains(q)) {
                j.setProperty("title", this.format(w, this.options.titleFormat));
                j.addEvents({
                    click: function (y, i, x) {
                        this.clicked(y, i, x)
                    }.pass([j, q, l], this),
                    mouseover: function (x, i) {
                        x.addClass(i)
                    }.pass([j, this.classes.hover]),
                    mouseout: function (x, i) {
                        x.removeClass(i)
                    }.pass([j, this.classes.hover])
                })
            }
            if (q < 1) {
                q = n + q
            } else {
                if (q > k) {
                    q = q - k
                }
            }
            j.appendText(q)
        }
    },
    element: function (b, c, e) {
        if ($type(c) == "object") {
            for (var a in c) {
                if (!this.element(a, c[a], e)) {
                    return false
                }
            }
            return true
        }
        b = $(b);
        if (!b) {
            return false
        }
        b.format = c;
        if (b.get("tag") == "select") {
            b.addEvent("change", function (f) {
                this.changed(f)
            }.pass(e, this))
        }
        e.els.push(b);
        return true
    },
    format: function (c, q) {
        var o = "";
        if (c) {
            var g = c.getDate();
            var r = c.getDay();
            var e = this.options.days[r];
            var b = c.getMonth() + 1;
            var m = this.options.months[b - 1];
            var p = c.getFullYear() + "";
            for (var h = 0, k = q.length; h < k; h++) {
                var a = q.charAt(h);
                switch (a) {
                case "y":
                    p = p.substr(2);
                case "Y":
                    o += p;
                    break;
                case "m":
                    if (b < 10) {
                        b = "0" + b
                    }
                case "n":
                    o += b;
                    break;
                case "M":
                    m = m.substr(0, 3);
                case "F":
                    o += m;
                    break;
                case "d":
                    if (g < 10) {
                        g = "0" + g
                    }
                case "j":
                    o += g;
                    break;
                case "D":
                    e = e.substr(0, 3);
                case "l":
                    o += e;
                    break;
                case "N":
                    r += 1;
                case "w":
                    o += r;
                    break;
                case "S":
                    if (g % 10 == 1 && g != "11") {
                        o += "st"
                    } else {
                        if (g % 10 == 2 && g != "12") {
                            o += "nd"
                        } else {
                            if (g % 10 == 3 && g != "13") {
                                o += "rd"
                            } else {
                                o += "th"
                            }
                        }
                    }
                    break;
                default:
                    o += a
                }
            }
        }
        return o
    },
    navigate: function (c, b, e) {
        switch (b) {
        case "m":
            if ($type(c.months) == "array") {
                var a = c.months.indexOf(c.month) + e;
                if (a < 0 || a == c.months.length) {
                    if (this.options.navigation == 1) {
                        this.navigate(c, "y", e)
                    }
                    a = (a < 0) ? c.months.length - 1 : 0
                }
                c.month = c.months[a]
            } else {
                var a = c.month + e;
                if (a < 0 || a == 12) {
                    if (this.options.navigation == 1) {
                        this.navigate(c, "y", e)
                    }
                    a = (a < 0) ? 11 : 0
                }
                c.month = a
            }
            break;
        case "y":
            if ($type(c.years) == "array") {
                var a = c.years.indexOf(c.year) + e;
                c.year = c.years[a]
            } else {
                c.year += e
            }
            break
        }
        $extend(c, this.values(c));
        if ($type(c.months) == "array") {
            var a = c.months.indexOf(c.month);
            if (a < 0) {
                c.month = c.months[0]
            }
        }
        this.display(c)
    },
    read: function (c) {
        var a = [null, null, null];
        c.els.each(function (g) {
            var f = this.unformat(g.value, g.format);
            f.each(function (j, h) {
                if ($type(j) == "number") {
                    a[h] = j
                }
            })
        }, this);
        if ($type(a[0]) == "number") {
            c.year = a[0]
        }
        if ($type(a[1]) == "number") {
            c.month = a[1]
        }
        var e = null;
        if (a.every(function (f) {
            return $type(f) == "number"
        })) {
            var b = new Date(a[0], a[1] + 1, 0).getDate();
            if (a[2] > b) {
                a[2] = b
            }
            e = new Date(a[0], a[1], a[2])
        }
        return (c.val == e) ? null : e
    },
    rebuild: function (a) {
        a.els.each(function (b) {
            if (b.get("tag") == "select" && b.format.test("^(d|j)$")) {
                var c = this.value(a);
                if (!c) {
                    c = b.value.toInt()
                }
                b.empty();
                a.days.each(function (e) {
                    var f = new Element("option", {
                        selected: (c == e),
                        value: ((b.format == "d" && e < 10) ? "0" + e : e)
                    }).appendText(e).injectInside(b)
                }, this)
            }
        }, this)
    },
    sort: function (e, c) {
        return e - c
    },
    toggle: function (c) {
        document.removeEvent("mousedown", this.fn);
        c.button.blur();
        c.val = this.read(c);
        if (c.visible) {
            c.visible = false;
            c.button.removeClass(this.classes.active);
        } else {
            this.fn = function (j, i) {
                var j = new Event(j);
                var h = j.target;
                var g = false;
                while (h != document.body && h.nodeType == 1) {
                    if (h == this.calendar) {
                        g = true
                    }
                    this.calendars.each(function (k) {
                        if (k.button == h || k.els.contains(h)) {
                            g = true
                        }
                    });
                    if (g) {
                        j.stop();
                        return false
                    } else {
                        h = h.parentNode
                    }
                }
                this.toggle(i)
            }.create({
                "arguments": c,
                bind: this,
                event: true
            });
            document.addEvent("mousedown", this.fn);
            this.calendars.each(function (g) {
                if (g == c) {
                    g.visible = true;
                    g.button.addClass(this.classes.active)
                } else {
                    g.visible = false;
                    g.button.removeClass(this.classes.active)
                }
            }, this);
            var b = window.getScrollSize();
            var f = c.button.getCoordinates();
            var a = f.right + this.options.tweak.x;
            var e = f.top + this.options.tweak.y;
            if (!this.calendar.coord) {
                this.calendar.coord = this.calendar.getCoordinates()
            }
            if (a + this.calendar.coord.width > b.x) {
                a -= (a + this.calendar.coord.width - b.x)
            }
            if (e + this.calendar.coord.height > b.y) {
                e -= (e + this.calendar.coord.height - b.y)
            }
            this.calendar.setStyles({
                left: a + "px",
                top: e + "px"
            });
            if (window.ie6) {
                this.iframe.setStyles({
                    height: this.calendar.coord.height + "px",
                    left: a + "px",
                    top: e + "px",
                    width: this.calendar.coord.width + "px"
                })
            }
            this.display(c);
        }
    },
    unformat: function (b, l) {
        l = l.escapeRegExp();
        var n = {
            d: "([0-9]{2})",
            j: "([0-9]{1,2})",
            D: "(" + this.options.days.map(function (c) {
                return c.substr(0, 3)
            }).join("|") + ")",
            l: "(" + this.options.days.join("|") + ")",
            S: "(st|nd|rd|th)",
            F: "(" + this.options.months.join("|") + ")",
            m: "([0-9]{2})",
            M: "(" + this.options.months.map(function (c) {
                return c.substr(0, 3)
            }).join("|") + ")",
            n: "([0-9]{1,2})",
            Y: "([0-9]{4})",
            y: "([0-9]{2})"
        };
        var j = [];
        var k = "";
        for (var e = 0; e < l.length; e++) {
            var m = l.charAt(e);
            if (n[m]) {
                j.push(m);
                k += n[m]
            } else {
                k += m
            }
        }
        var h = b.match("^" + k + "$");
        var a = new Array(3);
        if (h) {
            h = h.slice(1);
            j.each(function (g, f) {
                f = h[f];
                switch (g) {
                case "y":
                    f = "19" + f;
                case "Y":
                    a[0] = f.toInt();
                    break;
                case "F":
                    f = f.substr(0, 3);
                case "M":
                    f = this.options.months.map(function (c) {
                        return c.substr(0, 3)
                    }).indexOf(f) + 1;
                case "m":
                case "n":
                    a[1] = f.toInt() - 1;
                    break;
                case "d":
                case "j":
                    a[2] = f.toInt();
                    break
                }
            }, this)
        }
        return a
    },
    value: function (b) {
        var a = null;
        if (b.val) {
            if (b.year == b.val.getFullYear() && b.month == b.val.getMonth()) {
                a = b.val.getDate()
            }
        }
        return a
    },
    values: function (g) {
        var e, a, j;
        g.els.each(function (i) {
            if (i.get("tag") == "select") {
                if (i.format.test("(y|Y)")) {
                    e = [];
                    i.getChildren().each(function (l) {
                        var k = this.unformat(l.value, i.format);
                        if (!e.contains(k[0])) {
                            e.push(k[0])
                        }
                    }, this);
                    e.sort(this.sort)
                }
                if (i.format.test("(F|m|M|n)")) {
                    a = [];
                    i.getChildren().each(function (l) {
                        var k = this.unformat(l.value, i.format);
                        if ($type(k[0]) != "number" || k[0] == g.year) {
                            if (!a.contains(k[1])) {
                                a.push(k[1])
                            }
                        }
                    }, this);
                    a.sort(this.sort)
                }
                if (i.format.test("(d|j)") && !i.format.test("^(d|j)$")) {
                    j = [];
                    i.getChildren().each(function (l) {
                        var k = this.unformat(l.value, i.format);
                        if (k[0] == g.year && k[1] == g.month) {
                            if (!j.contains(k[2])) {
                                j.push(k[2])
                            }
                        }
                    }, this)
                }
            }
        }, this);
        var h = 1;
        var f = new Date(g.year, g.month + 1, 0).getDate();
        if (g.year == g.start.getFullYear()) {
            if (a == null && this.options.navigation == 2) {
                a = [];
                for (var c = 0; c < 12; c++) {
                    if (c >= g.start.getMonth()) {
                        a.push(c)
                    }
                }
            }
            if (g.month == g.start.getMonth()) {
                h = g.start.getDate()
            }
        }
        if (g.year == g.end.getFullYear()) {
            if (a == null && this.options.navigation == 2) {
                a = [];
                for (var c = 0; c < 12; c++) {
                    if (c <= g.end.getMonth()) {
                        a.push(c)
                    }
                }
            }
            if (g.month == g.end.getMonth()) {
                f = g.end.getDate()
            }
        }
        var b = this.blocked(g);
        if ($type(j) == "array") {
            j = j.filter(function (i) {
                if (i >= h && i <= f && !b.contains(i)) {
                    return i
                }
            })
        } else {
            j = [];
            for (var c = h; c <= f; c++) {
                if (!b.contains(c)) {
                    j.push(c)
                }
            }
        }
        j.sort(this.sort);
        return {
            days: j,
            months: a,
            years: e
        }
    },
    write: function (a) {
        this.rebuild(a);
        a.els.each(function (b) {
            b.value = this.format(a.val, b.format);
            var c = this.format(a.val, b.format);
            var d = new URI(terminPageUrl);
            d.set('data', {
                'day': c
            });
            d.go();
        }, this)
    }
});
