Calendar = (function () {
    function y(at) {
        at = at || {};
        this.args = at = al(at, {
            animation: !c,
            cont: null,
            bottomBar: true,
            date: true,
            fdow: aq("fdow"),
            min: null,
            max: null,
            reverseWheel: false,
            selection: [],
            selectionType: y.SEL_SINGLE,
            weekNumbers: false,
            align: "Bl/ / /T/r",
            inputField: null,
            trigger: null,
            dateFormat: "%Y-%m-%d",
            opacity: j ? 1 : 3,
            titleFormat: "%b %Y",
            showTime: false,
            timePos: "right",
            time: true,
            minuteStep: 5,
            disabled: ad,
            dateInfo: ad,
            onChange: ad,
            onSelect: ad,
            onTimeChange: ad,
            onFocus: ad,
            onBlur: ad
        });
        this.handlers = {};
        var P = this,
            D = new Date();
        at.min = Y(at.min);
        at.max = Y(at.max);
        if (at.date === true) {
                at.date = D
            }
        if (at.time === true) {
                at.time = D.getHours() * 100 + Math.floor(D.getMinutes() / at.minuteStep) * at.minuteStep
            }
        this.date = Y(at.date);
        this.time = at.time;
        this.fdow = at.fdow;
        m("onChange onSelect onTimeChange onFocus onBlur".split(/\s+/), function (av) {
                var au = at[av];
                if (!(au instanceof Array)) {
                    au = [au]
                }
                P.handlers[av] = au
            });
        this.selection = new y.Selection(at.selection, at.selectionType, R, this);
        var ar = K.call(this);
        if (at.cont) {
                W(at.cont).appendChild(ar)
            }
        if (at.trigger) {
                this.manageFields(at.trigger, at.inputField, at.dateFormat)
            }
    }
    var S = navigator.userAgent,
        s = /opera/i.test(S),
        ai = /Konqueror|Safari|KHTML/i.test(S),
        j = /msie/i.test(S) && !s && !(/mac_powerpc/i.test(S)),
        c = j && /msie 6/i.test(S),
        x = /gecko/i.test(S) && !ai && !s && !j,
        l = y.prototype,
        q = y.I18N = {};
    y.SEL_NONE = 0;
    y.SEL_SINGLE = 1;
    y.SEL_MULTIPLE = 2;
    y.SEL_WEEK = 3;
    y.dateToInt = V;
    y.intToDate = B;
    y.printDate = ab;
    y.formatString = k;
    y.i18n = aq;
    y.LANG = function (P, D, ar) {
            q.__ = q[P] = {
                name: D,
                data: ar
            }
        };
    y.setup = function (D) {
            return new y(D)
        };
    l.moveTo = function (aG, aD) {
            aG = Y(aG);
            var aC = af(aG, this.date, true),
                au, az = this.args,
                aH = az.min && af(aG, az.min),
                aI = az.max && af(aG, az.max);
            if (!az.animation) {
                    aD = false
                }
            ae(aH != null && aH <= 1, [this.els.navPrevMonth, this.els.navPrevYear], "DynarchCalendar-navDisabled");
            ae(aI != null && aI >= -1, [this.els.navNextMonth, this.els.navNextYear], "DynarchCalendar-navDisabled");
            if (aH < -1) {
                    aG = az.min;
                    au = 1;
                    aC = 0
                }
            if (aI > 1) {
                    aG = az.max;
                    au = 2;
                    aC = 0
                }
            this.date = aG;
            this.refresh( !! aD);
            this.callHooks("onChange", this, aG, aD);
            if (aD && !(aC == 0 && aD == 2)) {
                    if (this._bodyAnim) {
                        this._bodyAnim.stop()
                    }
                    var aw = this.els.body,
                        ax = G("div", "DynarchCalendar-animBody-" + U[aC], aw),
                        aF = aw.firstChild,
                        av = am(aF) || 0.7,
                        ay = au ? Z.brakes : aC == 0 ? Z.shake : Z.accel_ab2,
                        aE = aC * aC > 4,
                        ar = aE ? aF.offsetTop : aF.offsetLeft,
                        aB = ax.style,
                        aA = aE ? aw.offsetHeight : aw.offsetWidth;
                    if (aC < 0) {
                            aA += ar
                        } else {
                            if (aC > 0) {
                                aA = ar - aA
                            } else {
                                aA = Math.round(aA / 7);
                                if (au == 2) {
                                    aA = -aA
                                }
                            }
                        }
                    if (!au && aC != 0) {
                            var P = ax.cloneNode(true),
                                D = P.style,
                                at = 2 * aA;
                            P.appendChild(aF.cloneNode(true));
                            D[aE ? "marginTop" : "marginLeft"] = aA + "px";
                            aw.appendChild(P)
                        }
                    aF.style.visibility = "hidden";
                    ax.innerHTML = ac(this);
                    this._bodyAnim = ap({
                            onUpdate: v(function (aK, aM) {
                                var aL = ay(aK);
                                if (P) {
                                    var aJ = aM(aL, aA, at) + "px"
                                }
                                if (au) {
                                    aB[aE ? "marginTop" : "marginLeft"] = aM(aL, aA, 0) + "px"
                                } else {
                                    if (aE || aC == 0) {
                                        aB.marginTop = aM(aC == 0 ? ay(aK * aK) : aL, 0, aA) + "px";
                                        if (aC != 0) {
                                            D.marginTop = aJ
                                        }
                                    }
                                    if (!aE || aC == 0) {
                                        aB.marginLeft = aM(aL, 0, aA) + "px";
                                        if (aC != 0) {
                                            D.marginLeft = aJ
                                        }
                                    }
                                }
                                if (this.args.opacity > 2 && P) {
                                    am(P, 1 - aL);
                                    am(ax, aL)
                                }
                            }, this),
                            onStop: v(function (aJ) {
                                aw.innerHTML = ac(this, aG);
                                this._bodyAnim = null
                            }, this)
                        })
                }
            this._lastHoverDate = null;
            return aH >= -1 && aI <= 1
        };
    l.isDisabled = function (D) {
            var P = this.args;
            return (P.min && af(D, P.min) < 0) || (P.max && af(D, P.max) > 0) || P.disabled(D)
        };
    l.toggleMenu = function () {
            u(this, !this._menuVisible)
        };
    l.refresh = function (D) {
            var P = this.els;
            if (!D) {
                P.body.innerHTML = ac(this)
            }
            P.title.innerHTML = F(this);
            P.yearInput.value = this.date.getFullYear()
        };
    l.redraw = function () {
            var D = this.els;
            this.refresh();
            D.dayNames.innerHTML = h(this);
            D.menu.innerHTML = ak(this);
            if (D.bottomBar) {
                D.bottomBar.innerHTML = H(this)
            }
            t(D.topCont, v(function (ar) {
                var P = r[ar.className];
                if (P) {
                    D[P] = ar
                }
                if (ar.className == "DynarchCalendar-menu-year") {
                    p(ar, this._focusEvents);
                    D.yearInput = ar
                } else {
                    if (j) {
                        ar.setAttribute("unselectable", "on")
                    }
                }
            }, this));
            this.setTime(null, true)
        };
    l.setLanguage = function (D) {
            var P = y.setLanguage(D);
            if (P) {
                this.fdow = P.data.fdow;
                this.redraw()
            }
        };
    y.setLanguage = function (D) {
            var P = q[D];
            if (P) {
                q.__ = P
            }
            return P
        };
    l.focus = function () {
            try {
                this.els[this._menuVisible ? "yearInput" : "focusLink"].focus()
            } catch (D) {}
            i.call(this)
        };
    l.blur = function () {
            this.els.focusLink.blur();
            this.els.yearInput.blur();
            z.call(this)
        };
    l.showAt = function (P, ax, av) {
            if (this._showAnim) {
                this._showAnim.stop()
            }
            av = av && this.args.animation;
            var aw = this.els.topCont,
                ar = this,
                D = this.els.body.firstChild,
                au = D.offsetHeight,
                at = aw.style;
            at.position = "absolute";
            at.left = P + "px";
            at.top = ax + "px";
            at.zIndex = 10000;
            at.display = "";
            if (av) {
                    D.style.marginTop = -au + "px";
                    this.args.opacity > 1 && am(aw, 0);
                    this._showAnim = ap({
                        onUpdate: function (ay, az) {
                            D.style.marginTop = -az(Z.accel_b(ay), au, 0) + "px";
                            ar.args.opacity > 1 && am(aw, ay)
                        },
                        onStop: function () {
                            ar.args.opacity > 1 && am(aw, "");
                            ar._showAnim = null
                        }
                    })
                }
        };
    l.hide = function () {
            var at = this.els.topCont,
                P = this,
                D = this.els.body.firstChild,
                ar = D.offsetHeight,
                au = J(at).y;
            if (this.args.animation) {
                    if (this._showAnim) {
                        this._showAnim.stop()
                    }
                    this._showAnim = ap({
                        onUpdate: function (av, aw) {
                            P.args.opacity > 1 && am(at, 1 - av);
                            D.style.marginTop = -aw(Z.accel_b(av), 0, ar) + "px";
                            at.style.top = aw(Z.accel_ab(av), au, au - 10) + "px"
                        },
                        onStop: function () {
                            at.style.display = "none";
                            D.style.marginTop = "";
                            P.args.opacity > 1 && am(at, "");
                            P._showAnim = null
                        }
                    })
                } else {
                    at.style.display = "none"
                }
            this.inputField = null
        };
    l.popup = function (D, at) {
            D = W(D);
            if (!at) {
                at = this.args.align
            }
            at = at.split(/\x2f/);
            var ar = J(D),
                aw = this.els.topCont,
                ay = aw.style,
                au, ax = X();
            ay.visibility = "hidden";
            ay.display = "";
            this.showAt(0, 0);
            document.body.appendChild(aw);
            au = {
                    x: aw.offsetWidth,
                    y: aw.offsetHeight
                };

            function P(az) {
                    var aA = {
                        x: av.x,
                        y: av.y
                    };
                    if (!az) {
                        return aA
                    }
                    if (/B/.test(az)) {
                        aA.y += D.offsetHeight
                    }
                    if (/b/.test(az)) {
                        aA.y += D.offsetHeight - au.y
                    }
                    if (/T/.test(az)) {
                        aA.y -= au.y
                    }
                    if (/l/.test(az)) {
                        aA.x -= au.x - D.offsetWidth
                    }
                    if (/L/.test(az)) {
                        aA.x -= au.x
                    }
                    if (/R/.test(az)) {
                        aA.x += D.offsetWidth
                    }
                    if (/c/i.test(az)) {
                        aA.x += (D.offsetWidth - au.x) / 2
                    }
                    if (/m/i.test(az)) {
                        aA.y += (D.offsetHeight - au.y) / 2
                    }
                    return aA
                }
            var av = ar;
            av = P(at[0]);
            if (av.y < ax.y) {
                    av.y = ar.y;
                    av = P(at[1])
                }
            if (av.x + au.x > ax.x + ax.w) {
                    av.x = ar.x;
                    av = P(at[2])
                }
            if (av.y + au.y > ax.y + ax.h) {
                    av.y = ar.y;
                    av = P(at[3])
                }
            if (av.x < ax.x) {
                    av.x = ar.x;
                    av = P(at[4])
                }
            this.showAt(av.x, av.y, true);
            ay.visibility = "";
            this.focus()
        };
    l.manageFields = function (ar, P, D) {
            P = W(P);
            p(W(ar), "click", v(function () {
            alert(777);
                this.inputField = P;
                this.dateFormat = D;
                if (this.selection.type == y.SEL_SINGLE) {
                    var aw, av, au, at;
                    aw = /input|textarea/i.test(P.tagName) ? P.value : (P.innerText || P.textContent);
                    if (aw) {
                        av = /(^|[^%])%[bBmo]/.exec(D);
                        au = /(^|[^%])%[de]/.exec(D);
                        if (av && au) {
                            at = av.index < au.index
                        }
                        aw = Calendar.parseDate(aw, at);
                        if (aw) {
                            this.moveTo(aw);
                            this.selection.set(aw, false, true)
                        }
                    }
                }
                this.popup(ar)
            }, this))
        };
    l.callHooks = function (ar) {
            var at = b(arguments, 1),
                D = this.handlers[ar],
                P = 0;
            for (; P < D.length; ++P) {
                    D[P].apply(this, at)
                }
        };
    l.addEventListener = function (P, D) {
            this.handlers[P].push(D)
        };
    l.removeEventListener = function (at, ar) {
            var D = this.handlers[at],
                P = D.length;
            while (--P >= 0) {
                    if (D[P] === ar) {
                        D.splice(P, 1)
                    }
                }
        };
    l.getTime = function () {
            return this.time
        };
    l.setTime = function (au, P) {
            if (this.args.showTime) {
                au = this.time = au != null ? au : this.time;
                var ar = this.getHours(),
                    D = this.getMinutes(),
                    at = ar < 12;
                if (this.args.showTime == 12) {
                        if (ar == 0) {
                            ar = 12
                        }
                        if (ar > 12) {
                            ar -= 12
                        }
                        this.els.timeAM.innerHTML = aq(at ? "AM" : "PM")
                    }
                if (ar < 10) {
                        ar = "0" + ar
                    }
                if (D < 10) {
                        D = "0" + D
                    }
                this.els.timeHour.innerHTML = ar;
                this.els.timeMinute.innerHTML = D;
                if (!P) {
                        this.callHooks("onTimeChange", this, au)
                    }
            }
        };
    l.getHours = function () {
            return Math.floor(this.time / 100)
        };
    l.getMinutes = function () {
            return this.time % 100
        };
    l.setHours = function (D) {
            if (D < 0) {
                D += 24
            }
            this.setTime(100 * (D % 24) + this.time % 100)
        };
    l.setMinutes = function (D) {
            if (D < 0) {
                D += 60
            }
            this.setTime(100 * this.getHours() + (D % 60))
        };
    l._getInputYear = function () {
            var D = parseInt(this.els.yearInput.value, 10);
            if (isNaN(D)) {
                D = this.date.getFullYear()
            }
            return D
        };
    l._showTooltip = function (D) {
            var P = "",
                at, ar = this.els.tooltip;
            if (D) {
                    D = B(D);
                    at = this.args.dateInfo(D);
                    if (at && at.tooltip) {
                        P = "<div class='DynarchCalendar-tooltipCont'>" + ab(D, at.tooltip) + "</div>"
                    }
                }
            ar.innerHTML = P
        };
    var ah = " align='center' cellspacing='0' cellpadding='0'";

    function h(D) {
            var ar = ["<table", ah, "><tr>"],
                P = 0;
            if (D.args.weekNumbers) {
                    ar.push("<td><div class='DynarchCalendar-weekNumber'>", aq("wk"), "</div></td>")
                }
            while (P < 7) {
                    var at = (P+++D.fdow) % 7;
                    ar.push("<td><div", aq("weekend").indexOf(at) >= 0 ? " class='DynarchCalendar-weekend'>" : ">", aq("sdn")[at], "</div></td>")
                }
            ar.push("</tr></table>");
            return ar.join("")
        }
    function ac(aw, aG, aD) {
            aG = aG || aw.date;
            aD = aD || aw.fdow;
            aG = new Date(aG);
            var aI = aG.getMonth(),
                av = [],
                aA = 0,
                D = aw.args.weekNumbers;
            aG.setDate(1);
            var az = (aG.getDay() - aD) % 7;
            if (az < 0) {
                    az += 7
                }
            aG.setDate(-az);
            aG.setDate(aG.getDate() + 1);
            var aE = new Date(),
                at = aE.getDate(),
                P = aE.getMonth(),
                aJ = aE.getFullYear();
            av[aA++] = "<table class='DynarchCalendar-bodyTable'" + ah + ">";
            for (var aC = 0; aC < 6; ++aC) {
                    av[aA++] = "<tr class='DynarchCalendar-week";
                    if (aC == 0) {
                        av[aA++] = " DynarchCalendar-first-row"
                    }
                    if (aC == 5) {
                        av[aA++] = " DynarchCalendar-last-row"
                    }
                    av[aA++] = "'>";
                    if (D) {
                        av[aA++] = "<td class='DynarchCalendar-first-col'><div class='DynarchCalendar-weekNumber'>" + a(aG) + "</div></td>"
                    }
                    for (var aB = 0; aB < 7; ++aB) {
                        var aF = aG.getDate(),
                            ay = aG.getMonth(),
                            au = aG.getFullYear(),
                            ar = 10000 * au + 100 * (ay + 1) + aF,
                            aH = aw.selection.isSelected(ar),
                            ax = aw.isDisabled(aG);
                        av[aA++] = "<td class='";
                        if (aB == 0 && !D) {
                                av[aA++] = " DynarchCalendar-first-col"
                            }
                        if (aB == 0 && aC == 0) {
                                aw._firstDateVisible = ar
                            }
                        if (aB == 6) {
                                av[aA++] = " DynarchCalendar-last-col";
                                if (aC == 5) {
                                    aw._lastDateVisible = ar
                                }
                            }
                        if (aH) {
                                av[aA++] = " DynarchCalendar-td-selected"
                            }
                        av[aA++] = "'><div dyc-type='date' unselectable='on' dyc-date='" + ar + "' ";
                        if (ax) {
                                av[aA++] = "disabled='1' "
                            }
                        av[aA++] = "class='DynarchCalendar-day";
                        if (aq("weekend").indexOf(aG.getDay()) >= 0) {
                                av[aA++] = " DynarchCalendar-weekend"
                            }
                        if (ay != aI) {
                                av[aA++] = " DynarchCalendar-day-othermonth"
                            }
                        if (aF == at && ay == P && au == aJ) {
                                av[aA++] = " DynarchCalendar-day-today"
                            }
                        if (ax) {
                                av[aA++] = " DynarchCalendar-day-disabled"
                            }
                        if (aH) {
                                av[aA++] = " DynarchCalendar-day-selected"
                            }
                        ax = aw.args.dateInfo(aG);
                        if (ax && ax.klass) {
                                av[aA++] = " " + ax.klass
                            }
                        av[aA++] = "'>" + aF + "</div></td>";
                        aG.setDate(aF + 1)
                    }
                    av[aA++] = "</tr>"
                }
            av[aA++] = "</table>";
            return av.join("")
        }
    function n(D) {
            var P = ["<table class='DynarchCalendar-topCont'", ah, "><tr><td><div class='DynarchCalendar'>", !j ? "<button class='DynarchCalendar-focusLink'></button>" : "<a class='DynarchCalendar-focusLink' href='#'></a>", "<div class='DynarchCalendar-topBar'><div dyc-type='nav' dyc-btn='-Y' dyc-cls='hover-navBtn,pressed-navBtn' class='DynarchCalendar-navBtn DynarchCalendar-prevYear'><div></div></div><div dyc-type='nav' dyc-btn='+Y' dyc-cls='hover-navBtn,pressed-navBtn' class='DynarchCalendar-navBtn DynarchCalendar-nextYear'><div></div></div><div dyc-type='nav' dyc-btn='-M' dyc-cls='hover-navBtn,pressed-navBtn' class='DynarchCalendar-navBtn DynarchCalendar-prevMonth'><div></div></div><div dyc-type='nav' dyc-btn='+M' dyc-cls='hover-navBtn,pressed-navBtn' class='DynarchCalendar-navBtn DynarchCalendar-nextMonth'><div></div></div><table class='DynarchCalendar-titleCont'", ah, "><tr><td><div dyc-type='title' dyc-btn='menu' dyc-cls='hover-title,pressed-title' class='DynarchCalendar-title'>", F(D), "</div></td></tr></table><div class='DynarchCalendar-dayNames'>", h(D), "</div></div><div class='DynarchCalendar-body'></div>"];
            if (D.args.bottomBar || D.args.showTime) {
                P.push("<div class='DynarchCalendar-bottomBar'>", H(D), "</div>")
            }
            P.push("<div class='DynarchCalendar-menu' style='display: none'>", ak(D), "</div><div class='DynarchCalendar-tooltip'></div></div></td></tr></table>");
            return P.join("")
        }
    function F(D) {
            return "<div unselectable='on'>" + ab(D.date, D.args.titleFormat) + "</div>"
        }
    function ak(P) {
            var au = ["<table height='100%'", ah, "><tr><td><table style='margin-top: 1.5em'", ah, "><tr><td colspan='3'><input dyc-btn='year' class='DynarchCalendar-menu-year' size='6' value='", P.date.getFullYear(), "' /></td></tr><tr><td><div dyc-type='menubtn' dyc-cls='hover-navBtn,pressed-navBtn' dyc-btn='today'>", aq("goToday"), "</div></td></tr></table><p class='DynarchCalendar-menu-sep'>&nbsp;</p><table class='DynarchCalendar-menu-mtable'", ah, ">"],
                av = aq("smn"),
                at = 0,
                D = au.length,
                ar;
            while (at < 12) {
                    au[D++] = "<tr>";
                    for (ar = 4; --ar > 0;) {
                        au[D++] = "<td><div dyc-type='menubtn' dyc-cls='hover-navBtn,pressed-navBtn' dyc-btn='m" + at + "' class='DynarchCalendar-menu-month'>" + av[at++] + "</div></td>"
                    }
                    au[D++] = "</tr>"
                }
            au[D++] = "</table></td></tr></table>";
            return au.join("")
        }
    function w(D, P) {
            P.push("<table class='DynarchCalendar-time'" + ah + "><tr><td rowspan='2'><div dyc-type='time-hour' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-hour'></div></td><td dyc-type='time-hour+' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-up'></td><td rowspan='2' class='DynarchCalendar-time-sep'></td><td rowspan='2'><div dyc-type='time-min' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-minute'></div></td><td dyc-type='time-min+' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-up'></td>");
            if (D.args.showTime == 12) {
                P.push("<td rowspan='2' class='DynarchCalendar-time-sep'></td><td rowspan='2'><div class='DynarchCalendar-time-am' dyc-type='time-am' dyc-cls='hover-time,pressed-time'></div></td>")
            }
            P.push("</tr><tr><td dyc-type='time-hour-' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-down'></td><td dyc-type='time-min-' dyc-cls='hover-time,pressed-time' class='DynarchCalendar-time-down'></td></tr></table>")
        }
    function H(D) {
            var ar = [],
                P = D.args;
            ar.push("<table", ah, " style='width:100%'><tr>");

            function at() {
                    if (P.showTime) {
                        ar.push("<td>");
                        w(D, ar);
                        ar.push("</td>")
                    }
                }
            if (P.timePos == "left") {
                    at()
                }
            if (P.bottomBar) {
                    ar.push("<td>");
                    ar.push("<table", ah, "><tr><td><div dyc-btn='today' dyc-cls='hover-bottomBar-today,pressed-bottomBar-today' dyc-type='bottomBar-today' class='DynarchCalendar-bottomBar-today'>", aq("today"), "</div></td></tr></table>");
                    ar.push("</td>")
                }
            if (P.timePos == "right") {
                    at()
                }
            ar.push("</tr></table>");
            return ar.join("")
        }
    var r = {
            "DynarchCalendar-topCont": "topCont",
            "DynarchCalendar-focusLink": "focusLink",
            DynarchCalendar: "main",
            "DynarchCalendar-topBar": "topBar",
            "DynarchCalendar-title": "title",
            "DynarchCalendar-dayNames": "dayNames",
            "DynarchCalendar-body": "body",
            "DynarchCalendar-menu": "menu",
            "DynarchCalendar-menu-year": "yearInput",
            "DynarchCalendar-bottomBar": "bottomBar",
            "DynarchCalendar-tooltip": "tooltip",
            "DynarchCalendar-time-hour": "timeHour",
            "DynarchCalendar-time-minute": "timeMinute",
            "DynarchCalendar-time-am": "timeAM",
            "DynarchCalendar-navBtn DynarchCalendar-prevYear": "navPrevYear",
            "DynarchCalendar-navBtn DynarchCalendar-nextYear": "navNextYear",
            "DynarchCalendar-navBtn DynarchCalendar-prevMonth": "navPrevMonth",
            "DynarchCalendar-navBtn DynarchCalendar-nextMonth": "navNextMonth"
        };

    function K() {
            var ar = G("div"),
                P = this.els = {},
                D = {
                    mousedown: v(I, this, true),
                    mouseup: v(I, this, false),
                    mouseover: v(T, this, true),
                    mouseout: v(T, this, false),
                    keypress: v(L, this)
                };
            D[x ? "DOMMouseScroll" : "mousewheel"] = v(E, this);
            if (j) {
                    D.dblclick = D.mousedown;
                    D.keydown = D.keypress
                }
            ar.innerHTML = n(this);
            t(ar.firstChild, function (au) {
                    var at = r[au.className];
                    if (at) {
                        P[at] = au
                    }
                    if (j) {
                        au.setAttribute("unselectable", "on")
                    }
                });
            p(P.main, D);
            p([P.focusLink, P.yearInput], this._focusEvents = {
                    focus: v(i, this),
                    blur: v(e, this)
                });
            this.moveTo(this.date, false);
            this.setTime(null, true);
            return P.topCont
        }
    function i() {
            if (this._bluringTimeout) {
                clearTimeout(this._bluringTimeout)
            }
            this.focused = true;
            M(this.els.main, "DynarchCalendar-focused");
            this.callHooks("onFocus", this)
        }
    function z() {
            this.focused = false;
            aj(this.els.main, "DynarchCalendar-focused");
            if (this._menuVisible) {
                u(this, false)
            }
            if (!this.args.cont) {
                this.hide()
            }
            this.callHooks("onBlur", this)
        }
    function e() {
            this._bluringTimeout = setTimeout(v(z, this), 50)
        }
    function N(D) {
            switch (D) {
            case "time-hour+":
                this.setHours(this.getHours() + 1);
                break;
            case "time-hour-":
                this.setHours(this.getHours() - 1);
                break;
            case "time-min+":
                this.setMinutes(this.getMinutes() + this.args.minuteStep);
                break;
            case "time-min-":
                this.setMinutes(this.getMinutes() - this.args.minuteStep);
                break;
            default:
                return
            }
        }
    var U = {
            "-3": "backYear",
            "-2": "back",
            "0": "now",
            "2": "fwd",
            "3": "fwdYear"
        };

    function aa(P, at, D) {
            if (this._bodyAnim) {
                this._bodyAnim.stop()
            }
            var ar;
            if (at != 0) {
                ar = new Date(P.date);
                ar.setDate(1);
                switch (at) {
                case "-Y":
                case -2:
                    ar.setFullYear(ar.getFullYear() - 1);
                    break;
                case "+Y":
                case 2:
                    ar.setFullYear(ar.getFullYear() + 1);
                    break;
                case "-M":
                case -1:
                    ar.setMonth(ar.getMonth() - 1);
                    break;
                case "+M":
                case 1:
                    ar.setMonth(ar.getMonth() + 1);
                    break
                }
            } else {
                ar = new Date()
            }
            return P.moveTo(ar, !D)
        }
    function u(ar, P) {
            ar._menuVisible = P;
            ae(P, ar.els.title, "DynarchCalendar-pressed-title");
            var at = ar.els.menu;
            if (c) {
                at.style.height = ar.els.main.offsetHeight + "px"
            }
            if (!ar.args.animation) {
                O(at, P);
                if (ar.focused) {
                    ar.focus()
                }
            } else {
                if (ar._menuAnim) {
                    ar._menuAnim.stop()
                }
                var D = ar.els.main.offsetHeight;
                if (c) {
                    at.style.width = ar.els.topBar.offsetWidth + "px"
                }
                if (P) {
                    at.firstChild.style.marginTop = -D + "px";
                    ar.args.opacity > 0 && am(at, 0);
                    O(at, true)
                }
                ar._menuAnim = ap({
                    onUpdate: function (au, av) {
                        at.firstChild.style.marginTop = av(Z.accel_b(au), -D, 0, !P) + "px";
                        ar.args.opacity > 0 && am(at, av(Z.accel_b(au), 0, 0.85, !P))
                    },
                    onStop: function () {
                        ar.args.opacity > 0 && am(at, 0.85);
                        at.firstChild.style.marginTop = "";
                        ar._menuAnim = null;
                        if (!P) {
                            O(at, false);
                            if (ar.focused) {
                                ar.focus()
                            }
                        }
                    }
                })
            }
        }
    function I(az, ay) {
            ay = ay || window.event;
            var au = o(ay);
            if (au && !au.getAttribute("disabled")) {
                var D = au.getAttribute("dyc-btn"),
                    ax = au.getAttribute("dyc-type"),
                    av = au.getAttribute("dyc-date"),
                    at = this.selection,
                    ar, P = {
                        mouseover: an,
                        mousemove: an,
                        mouseup: function (aC) {
                            var aB = au.getAttribute("dyc-cls");
                            if (aB) {
                                aj(au, ao(aB, 1))
                            }
                            clearTimeout(ar);
                            d(document, P, true);
                            P = null
                        }
                    };
                if (az) {
                        setTimeout(v(this.focus, this), 1);
                        var aA = au.getAttribute("dyc-cls");
                        if (aA) {
                            M(au, ao(aA, 1))
                        }
                        if ("menu" == D) {
                            this.toggleMenu()
                        } else {
                            if (au && /^[+-][MY]$/.test(D)) {
                                if (aa(this, D)) {
                                    var aw = v(function () {
                                        if (aa(this, D, true)) {
                                            ar = setTimeout(aw, 40)
                                        } else {
                                            P.mouseup();
                                            aa(this, D)
                                        }
                                    }, this);
                                    ar = setTimeout(aw, 350);
                                    p(document, P, true)
                                } else {
                                    P.mouseup()
                                }
                            } else {
                                if ("year" == D) {
                                    this.els.yearInput.focus();
                                    this.els.yearInput.select()
                                } else {
                                    if (ax == "time-am") {
                                        p(document, P, true)
                                    } else {
                                        if (/^time/.test(ax)) {
                                            var aw = v(function (aB) {
                                                N.call(this, aB);
                                                ar = setTimeout(aw, 100)
                                            }, this, ax);
                                            N.call(this, ax);
                                            ar = setTimeout(aw, 350);
                                            p(document, P, true)
                                        } else {
                                            if (av && at.type) {
                                                if (at.type == y.SEL_MULTIPLE) {
                                                    if (ay.shiftKey && this._selRangeStart) {
                                                        at.selectRange(this._selRangeStart, av)
                                                    } else {
                                                        if (!ay.ctrlKey && !at.isSelected(av)) {
                                                            at.clear(true)
                                                        }
                                                        at.set(av, true);
                                                        this._selRangeStart = av
                                                    }
                                                } else {
                                                    at.set(av);
                                                    this.moveTo(B(av), 2)
                                                }
                                                au = this._getDateDiv(av);
                                                T.call(this, true, {
                                                    target: au
                                                })
                                            }
                                            p(document, P, true)
                                        }
                                    }
                                }
                            }
                        }
                        if (j && P && /dbl/i.test(ay.type)) {
                            P.mouseup()
                        }
                        if (/^(DynarchCalendar-(topBar|bottomBar|weekend|weekNumber|menu(-sep)?))?$/.test(au.className) && !this.args.cont) {
                            P.mousemove = v(g, this);
                            this._mouseDiff = f(ay, J(this.els.topCont));
                            p(document, P, true)
                        }
                    } else {
                        if ("today" == D) {
                            if (!this._menuVisible && at.type == y.SEL_SINGLE) {
                                at.set(new Date())
                            }
                            this.moveTo(new Date(), true);
                            u(this, false)
                        } else {
                            if (/^m([0-9]+)/.test(D)) {
                                var av = new Date(this.date);
                                av.setDate(1);
                                av.setMonth(RegExp.$1);
                                av.setFullYear(this._getInputYear());
                                this.moveTo(av, true);
                                u(this, false)
                            } else {
                                if (ax == "time-am") {
                                    this.setHours(this.getHours() + 12)
                                }
                            }
                        }
                    }
                if (!j) {
                        an(ay)
                    }
            }
        }
    function g(P) {
            P = P || window.event;
            var D = this.els.topCont.style,
                ar = f(P, this._mouseDiff);
            D.left = ar.x + "px";
            D.top = ar.y + "px"
        }
    function o(P) {
            var D = P.target || P.srcElement,
                ar = D;
            while (D && D.getAttribute && !D.getAttribute("dyc-type")) {
                    D = D.parentNode
                }
            return D.getAttribute && D || ar
        }
    function ao(D, P) {
            return "DynarchCalendar-" + D.split(/,/)[P]
        }
    function T(au, at) {
            at = at || window.event;
            var ar = o(at);
            if (ar) {
                var P = ar.getAttribute("dyc-type");
                if (P && !ar.getAttribute("disabled")) {
                    if (!au || !this._bodyAnim || P != "date") {
                        var D = ar.getAttribute("dyc-cls");
                        D = D ? ao(D, 0) : "DynarchCalendar-hover-" + P;
                        if (P != "date" || this.selection.type) {
                            ae(au, ar, D)
                        }
                        if (P == "date") {
                            ae(au, ar.parentNode.parentNode, "DynarchCalendar-hover-week");
                            this._showTooltip(ar.getAttribute("dyc-date"))
                        }
                        if (/^time-hour/.test(P)) {
                            ae(au, this.els.timeHour, "DynarchCalendar-hover-time")
                        }
                        if (/^time-min/.test(P)) {
                            ae(au, this.els.timeMinute, "DynarchCalendar-hover-time")
                        }
                        aj(this._getDateDiv(this._lastHoverDate), "DynarchCalendar-hover-date");
                        this._lastHoverDate = null
                    }
                }
            }
            if (!au) {
                this._showTooltip()
            }
        }
    function E(ar) {
            ar = ar || window.event;
            var P = o(ar);
            if (P) {
                var at = P.getAttribute("dyc-btn"),
                    D = P.getAttribute("dyc-type"),
                    au = ar.wheelDelta ? ar.wheelDelta / 120 : -ar.detail / 3;
                au = au < 0 ? -1 : au > 0 ? 1 : 0;
                if (this.args.reverseWheel) {
                        au = -au
                    }
                if (/^(time-(hour|min))/.test(D)) {
                        switch (RegExp.$1) {
                        case "time-hour":
                            this.setHours(this.getHours() + au);
                            break;
                        case "time-min":
                            this.setMinutes(this.getMinutes() + this.args.minuteStep * au);
                            break
                        }
                        an(ar)
                    } else {
                        if (/Y/i.test(at)) {
                            au *= 2
                        }
                        aa(this, -au);
                        an(ar)
                    }
            }
        }
    function R() {
            this.refresh();
            var D = this.inputField,
                P = this.selection;
            if (D) {
                    var ar = P.print(this.dateFormat);
                    (/input|textarea/i.test(D.tagName)) ? D.value = ar : D.innerHTML = ar
                }
            this.callHooks("onSelect", this, P)
        }
    var ag = {
            37: -1,
            38: -2,
            39: 1,
            40: 2
        },
        Q = {
            33: -1,
            34: 1
        };

    function L(aB) {
            if (this._menuAnim) {
                return
            }
            aB = aB || window.event;
            var ar = aB.target || aB.srcElement,
                aC = ar.getAttribute("dyc-btn"),
                aD = aB.keyCode,
                ay = aB.charCode || aD,
                D = ag[aD];
            if ("year" == aC && aD == 13) {
                    var au = new Date(this.date);
                    au.setDate(1);
                    au.setFullYear(this._getInputYear());
                    this.moveTo(au, true);
                    u(this, false);
                    return an(aB)
                }
            if (this._menuVisible) {
                    if (aD == 27) {
                        u(this, false);
                        return an(aB)
                    }
                } else {
                    if (!aB.ctrlKey) {
                        D = null
                    }
                    if (D == null && !aB.ctrlKey) {
                        D = Q[aD]
                    }
                    if (aD == 36) {
                        D = 0
                    }
                    if (D != null) {
                        aa(this, D);
                        return an(aB)
                    }
                    ay = String.fromCharCode(ay).toLowerCase();
                    var ax = this.els.yearInput,
                        P = this.selection;
                    if (ay == " ") {
                            u(this, true);
                            this.focus();
                            ax.focus();
                            ax.select();
                            return an(aB)
                        }
                    if (ay >= "0" && ay <= "9") {
                            u(this, true);
                            this.focus();
                            ax.value = ay;
                            ax.focus();
                            return an(aB)
                        }
                    var av = aq("mn"),
                        az = aB.shiftKey ? -1 : this.date.getMonth(),
                        aw = 0,
                        at;
                    while (++aw < 12) {
                            at = av[(az + aw) % 12].toLowerCase();
                            if (at.indexOf(ay) == 0) {
                                var au = new Date(this.date);
                                au.setDate(1);
                                au.setMonth((az + aw) % 12);
                                this.moveTo(au, true);
                                return an(aB)
                            }
                        }
                    if (aD >= 37 && aD <= 40) {
                            var au = this._lastHoverDate;
                            if (!au && !P.isEmpty()) {
                                au = aD < 39 ? P.getFirstDate() : P.getLastDate();
                                if (au < this._firstDateVisible || au > this._lastDateVisible) {
                                    au = null
                                }
                            }
                            if (!au) {
                                au = aD < 39 ? this._lastDateVisible : this._firstDateVisible
                            } else {
                                var aA = au;
                                au = B(au);
                                var az = 100;
                                while (az-- > 0) {
                                    switch (aD) {
                                    case 37:
                                        au.setDate(au.getDate() - 1);
                                        break;
                                    case 38:
                                        au.setDate(au.getDate() - 7);
                                        break;
                                    case 39:
                                        au.setDate(au.getDate() + 1);
                                        break;
                                    case 40:
                                        au.setDate(au.getDate() + 7);
                                        break
                                    }
                                    if (!this.isDisabled(au)) {
                                        break
                                    }
                                }
                                au = V(au);
                                if (au < this._firstDateVisible || au > this._lastDateVisible) {
                                    this.moveTo(au)
                                }
                            }
                            aj(this._getDateDiv(aA), M(this._getDateDiv(au), "DynarchCalendar-hover-date"));
                            this._lastHoverDate = au;
                            return an(aB)
                        }
                    if (aD == 13) {
                            if (this._lastHoverDate) {
                                if (P.type == y.SEL_MULTIPLE && (aB.shiftKey || aB.ctrlKey)) {
                                    if (aB.shiftKey && this._selRangeStart) {
                                        P.clear(true);
                                        P.selectRange(this._selRangeStart, this._lastHoverDate)
                                    }
                                    if (aB.ctrlKey) {
                                        P.set(this._selRangeStart = this._lastHoverDate, true)
                                    }
                                } else {
                                    P.reset(this._selRangeStart = this._lastHoverDate)
                                }
                                return an(aB)
                            }
                        }
                    if (aD == 27 && !this.args.cont) {
                            this.hide()
                        }
                }
        }
    l._getDateDiv = function (D) {
            var ar = null;
            if (D) {
                try {
                    t(this.els.body, function (at) {
                        if (at.getAttribute("dyc-date") == D) {
                            throw ar = at
                        }
                    })
                } catch (P) {}
            }
            return ar
        };

    function k(D, P) {
            return D.replace(/\$\{([^:\}]+)(:[^\}]+)?\}/g, function (av, au, at) {
                var aw = P[au],
                    ar;
                if (at) {
                        ar = at.substr(1).split(/\s*\|\s*/);
                        aw = (aw >= ar.length ? ar[ar.length - 1] : ar[aw]).replace(/##?/g, function (ax) {
                            return ax.length == 2 ? "#" : aw
                        })
                    }
                return aw
            })
        }
    function aq(ar, P) {
            var D = q.__.data[ar];
            if (P && typeof D == "string") {
                D = k(D, P)
            }
            return D
        }(y.Selection = function (ar, P, D, at) {
            this.type = P;
            this.sel = ar instanceof Array ? ar : [ar];
            this.onChange = v(D, at);
            this.cal = at
        }).prototype = {
            get: function () {
                return this.type == y.SEL_SINGLE ? this.sel[0] : this.sel
            },
            isEmpty: function () {
                return this.sel.length == 0
            },
            set: function (P, D, ar) {
                var at = this.type == y.SEL_SINGLE;
                if (P instanceof Array) {
                    this.sel = P;
                    this.normalize();
                    if (!ar) {
                        this.onChange(this)
                    }
                } else {
                    P = V(P);
                    if (at || !this.isSelected(P)) {
                        at ? this.sel = [P] : this.sel.splice(this.findInsertPos(P), 0, P);
                        this.normalize();
                        if (!ar) {
                            this.onChange(this)
                        }
                    } else {
                        if (D) {
                            this.unselect(P, ar)
                        }
                    }
                }
            },
            reset: function () {
                this.sel = [];
                this.set.apply(this, arguments)
            },
            countDays: function () {
                var av = 0,
                    D = this.sel,
                    P = D.length,
                    at, au, ar;
                while (--P >= 0) {
                        at = D[P];
                        if (at instanceof Array) {
                            au = B(at[0]);
                            ar = B(at[1]);
                            av += Math.round(Math.abs(ar.getTime() - au.getTime()) / 86400000)
                        }++av
                    }
                return av
            },
            unselect: function (P, ar) {
                P = V(P);
                var at = false;
                for (var ay = this.sel, au = ay.length, D; --au >= 0;) {
                    D = ay[au];
                    if (D instanceof Array) {
                        if (P >= D[0] && P <= D[1]) {
                            var av = B(P),
                                ax = av.getDate();
                            if (P == D[0]) {
                                    av.setDate(ax + 1);
                                    D[0] = V(av);
                                    at = true
                                } else {
                                    if (P == D[1]) {
                                        av.setDate(ax - 1);
                                        D[1] = V(av);
                                        at = true
                                    } else {
                                        var aw = new Date(av);
                                        aw.setDate(ax + 1);
                                        av.setDate(ax - 1);
                                        ay.splice(au + 1, 0, [V(aw), D[1]]);
                                        D[1] = V(av);
                                        at = true
                                    }
                                }
                        }
                    } else {
                        if (P == D) {
                            ay.splice(au, 1);
                            at = true
                        }
                    }
                }
                if (at) {
                    this.normalize();
                    if (!ar) {
                        this.onChange(this)
                    }
                }
            },
            normalize: function () {
                this.sel = this.sel.sort(function (ay, ax) {
                    if (ay instanceof Array) {
                        ay = ay[0]
                    }
                    if (ax instanceof Array) {
                        ax = ax[0]
                    }
                    return ay - ax
                });
                for (var P = this.sel, ar = P.length, av, au; --ar >= 0;) {
                    av = P[ar];
                    if (av instanceof Array) {
                        if (av[0] > av[1]) {
                            P.splice(ar, 1);
                            continue
                        }
                        if (av[0] == av[1]) {
                            av = P[ar] = av[0]
                        }
                    }
                    if (au) {
                        var at = au,
                            aw = av instanceof Array ? av[1] : av;
                        aw = B(aw);
                        aw.setDate(aw.getDate() + 1);
                        aw = V(aw);
                        if (aw >= at) {
                                var D = P[ar + 1];
                                if (av instanceof Array && D instanceof Array) {
                                    av[1] = D[1];
                                    P.splice(ar + 1, 1)
                                } else {
                                    if (av instanceof Array) {
                                        av[1] = au;
                                        P.splice(ar + 1, 1)
                                    } else {
                                        if (D instanceof Array) {
                                            D[0] = av;
                                            P.splice(ar, 1)
                                        } else {
                                            P[ar] = [av, D];
                                            P.splice(ar + 1, 1)
                                        }
                                    }
                                }
                            }
                    }
                    au = av instanceof Array ? av[0] : av
                }
            },
            findInsertPos: function (P) {
                for (var D = this.sel, ar = D.length, at; --ar >= 0;) {
                    at = D[ar];
                    if (at instanceof Array) {
                        at = at[0]
                    }
                    if (at <= P) {
                        break
                    }
                }
                return ar + 1
            },
            clear: function (D) {
                this.sel = [];
                if (!D) {
                    this.onChange(this)
                }
            },
            selectRange: function (ar, P) {
                ar = V(ar);
                P = V(P);
                if (ar > P) {
                    var D = ar;
                    ar = P;
                    P = D
                }
                this.sel.push([ar, P]);
                this.normalize();
                this.onChange(this)
            },
            isSelected: function (D) {
                for (var P = this.sel.length, ar; --P >= 0;) {
                    ar = this.sel[P];
                    if (ar instanceof Array && D >= ar[0] && D <= ar[1] || D == ar) {
                        return true
                    }
                }
                return false
            },
            getFirstDate: function () {
                var D = this.sel[0];
                if (D && D instanceof Array) {
                    D = D[0]
                }
                return D
            },
            getLastDate: function () {
                if (this.sel.length > 0) {
                    var D = this.sel[this.sel.length - 1];
                    if (D && D instanceof Array) {
                        D = D[1]
                    }
                    return D
                }
            },
            print: function (ar, at) {
                var P = [],
                    au = 0,
                    aw, av = this.cal.getHours(),
                    D = this.cal.getMinutes();
                if (!at) {
                        at = " -> "
                    }
                while (au < this.sel.length) {
                        aw = this.sel[au++];
                        if (aw instanceof Array) {
                            P.push(ab(B(aw[0], av, D), ar) + at + ab(B(aw[1], av, D), ar))
                        } else {
                            P.push(ab(B(aw, av, D), ar))
                        }
                    }
                return P
            },
            getDates: function (P) {
                var D = [],
                    ar = 0,
                    au, at;
                while (ar < this.sel.length) {
                        at = this.sel[ar++];
                        if (at instanceof Array) {
                            au = B(at[0]);
                            at = at[1];
                            while (V(au) < at) {
                                D.push(P ? ab(au, P) : new Date(au));
                                au.setDate(au.getDate() + 1)
                            }
                        } else {
                            au = B(at)
                        }
                        D.push(P ? ab(au, P) : au)
                    }
                return D
            }
        };

    function a(P) {
            P = new Date(P.getFullYear(), P.getMonth(), P.getDate(), 12, 0, 0);
            var ar = P.getDay();
            P.setDate(P.getDate() - (ar + 6) % 7 + 3);
            var D = P.valueOf();
            P.setMonth(0);
            P.setDate(4);
            return Math.round((D - P.valueOf()) / (7 * 86400000)) + 1
        }
    function C(D) {
            D = new Date(D.getFullYear(), D.getMonth(), D.getDate(), 0, 0, 0);
            var ar = new Date(D.getFullYear(), 0, 1, 12, 0, 0);
            var P = D - ar;
            return Math.floor(P / 86400000)
        }
    function V(D) {
            if (D instanceof Date) {
                return 10000 * D.getFullYear() + 100 * (D.getMonth() + 1) + D.getDate()
            }
            if (typeof D == "string") {
                return parseInt(D, 10)
            }
            return D
        }
    function B(ar, au, av, at, P) {
            if (!(ar instanceof Date)) {
                ar = parseInt(ar, 10);
                var aw = Math.floor(ar / 10000);
                ar = ar % 10000;
                var D = Math.floor(ar / 100);
                ar = ar % 100;
                ar = new Date(aw, D - 1, ar, au || 12, av || 0, at || 0, P || 0)
            }
            return ar
        }
    function af(aw, au, ar) {
            var av = aw.getFullYear(),
                ay = aw.getMonth(),
                P = aw.getDate(),
                at = au.getFullYear(),
                ax = au.getMonth(),
                D = au.getDate();
            return av < at ? -3 : av > at ? 3 : ay < ax ? -2 : ay > ax ? 2 : ar ? 0 : P < D ? -1 : P > D ? 1 : 0
        }
    function ab(D, ax) {
            var P = D.getMonth(),
                aw = D.getDate(),
                ay = D.getFullYear(),
                az = a(D),
                aA = D.getDay(),
                aB = D.getHours(),
                ar = (aB >= 12),
                au = (ar) ? (aB - 12) : aB,
                aD = C(D),
                at = D.getMinutes(),
                av = D.getSeconds(),
                aC = /%./g,
                aE;
            if (au === 0) {
                    au = 12
                }
            aE = {
                    "%a": aq("sdn")[aA],
                    "%A": aq("dn")[aA],
                    "%b": aq("smn")[P],
                    "%B": aq("mn")[P],
                    "%C": 1 + Math.floor(ay / 100),
                    "%d": aw < 10 ? "0" + aw : aw,
                    "%e": aw,
                    "%H": aB < 10 ? "0" + aB : aB,
                    "%I": au < 10 ? "0" + au : au,
                    "%j": aD < 10 ? "00" + aD : aD < 100 ? "0" + aD : aD,
                    "%k": aB,
                    "%l": au,
                    "%m": P < 9 ? "0" + (1 + P) : 1 + P,
                    "%o": 1 + P,
                    "%M": at < 10 ? "0" + at : at,
                    "%n": "\n",
                    "%p": ar ? "PM" : "AM",
                    "%P": ar ? "pm" : "am",
                    "%s": Math.floor(D.getTime() / 1000),
                    "%S": av < 10 ? "0" + av : av,
                    "%t": "\t",
                    "%U": az < 10 ? "0" + az : az,
                    "%W": az < 10 ? "0" + az : az,
                    "%V": az < 10 ? "0" + az : az,
                    "%u": aA + 1,
                    "%w": aA,
                    "%y": ("" + ay).substr(2, 2),
                    "%Y": ay,
                    "%%": "%"
                };
            return ax.replace(aC, function (aF) {
                    return aE.hasOwnProperty(aF) ? aE[aF] : aF
                })
        }
    function Y(P) {
            if (P) {
                if (typeof P == "number") {
                    return B(P)
                }
                if (!(P instanceof Date)) {
                    var D = P.split(/-/);
                    return new Date(parseInt(D[0], 10), parseInt(D[1], 10) - 1, parseInt(D[2], 10), 12, 0, 0, 0)
                }
            }
            return P
        }
    function A(ar) {
            ar = ar.toLowerCase();

            function P(at) {
                for (var au = at.length; --au >= 0;) {
                    if (at[au].toLowerCase().indexOf(ar) == 0) {
                        return au
                    }
                }
            }
            var D = P(aq("smn")) || P(aq("mn"));
            if (D != null) {
                D++
            }
            return D
        }
    y.parseDate = function (au, D, aw) {
            if (!/\S/.test(au)) {
                return ""
            }
            au = au.replace(/^\s+/, "").replace(/\s+$/, "");
            aw = aw || new Date();
            var aB = null,
                P = null,
                aD = null,
                av = null,
                ar = null,
                aC = null;
            var ay = au.match(/([0-9]{1,2}):([0-9]{1,2})(:[0-9]{1,2})?\s*(am|pm)?/i);
            if (ay) {
                    av = parseInt(ay[1], 10);
                    ar = parseInt(ay[2], 10);
                    aC = ay[3] ? parseInt(ay[3].substr(1), 10) : 0;
                    au = au.substring(0, ay.index) + au.substr(ay.index + ay[0].length);
                    if (ay[4]) {
                        if (ay[4].toLowerCase() == "pm" && av < 12) {
                            av += 12
                        } else {
                            if (ay[4].toLowerCase() == "am" && av >= 12) {
                                av -= 12
                            }
                        }
                    }
                }
            var az = au.split(/\W+/);
            var ax = [];
            for (var at = 0; at < az.length; ++at) {
                    var aA = az[at];
                    if (/^[0-9]{4}$/.test(aA)) {
                        aB = parseInt(aA, 10);
                        if (!P && !aD && D == null) {
                            D = true
                        }
                    } else {
                        if (/^[0-9]{1,2}$/.test(aA)) {
                            aA = parseInt(aA, 10);
                            if (aA >= 60) {
                                aB = aA
                            } else {
                                if (aA >= 0 && aA <= 12) {
                                    ax.push(aA)
                                } else {
                                    if (aA >= 1 && aA <= 31) {
                                        aD = aA
                                    }
                                }
                            }
                        } else {
                            P = A(aA)
                        }
                    }
                }
            if (ax.length >= 2) {
                    if (D) {
                        if (!P) {
                            P = ax.shift()
                        }
                        if (!aD) {
                            aD = ax.shift()
                        }
                    } else {
                        if (!aD) {
                            aD = ax.shift()
                        }
                        if (!P) {
                            P = ax.shift()
                        }
                    }
                } else {
                    if (ax.length == 1) {
                        if (!aD) {
                            aD = ax.shift()
                        } else {
                            if (!P) {
                                P = ax.shift()
                            }
                        }
                    }
                }
            if (!aB) {
                    aB = ax.length > 0 ? ax.shift() : aw.getFullYear()
                }
            if (aB < 30) {
                    aB += 2000
                } else {
                    if (aB < 99) {
                        aB += 1900
                    }
                }
            if (!P) {
                    P = aw.getMonth() + 1
                }
            return aB && P && aD ? new Date(aB, P - 1, aD, av, ar, aC) : null
        };

    function al(D, at, P, ar) {
            ar = {};
            for (P in at) {
                if (at.hasOwnProperty(P)) {
                    ar[P] = at[P]
                }
            }
            for (P in D) {
                if (D.hasOwnProperty(P)) {
                    ar[P] = D[P]
                }
            }
            return ar
        }
    function p(ar, au, at, D) {
            if (ar instanceof Array) {
                for (var P = ar.length; --P >= 0;) {
                    p(ar[P], au, at, D)
                }
            } else {
                if (typeof au == "object") {
                    for (var P in au) {
                        if (au.hasOwnProperty(P)) {
                            p(ar, P, au[P], at)
                        }
                    }
                } else {
                    if (ar.addEventListener) {
                        ar.addEventListener(au, at, j ? true : !! D)
                    } else {
                        if (ar.attachEvent) {
                            ar.attachEvent("on" + au, at)
                        } else {
                            ar["on" + au] = at
                        }
                    }
                }
            }
        }
    function d(ar, au, at, D) {
            if (ar instanceof Array) {
                for (var P = ar.length; --P >= 0;) {
                    d(ar[P], au, at)
                }
            } else {
                if (typeof au == "object") {
                    for (var P in au) {
                        if (au.hasOwnProperty(P)) {
                            d(ar, P, au[P], at)
                        }
                    }
                } else {
                    if (ar.removeEventListener) {
                        ar.removeEventListener(au, at, j ? true : !! D)
                    } else {
                        if (ar.detachEvent) {
                            ar.detachEvent("on" + au, at)
                        } else {
                            ar["on" + au] = null
                        }
                    }
                }
            }
        }
    function an(D) {
            D = D || window.event;
            if (j) {
                D.cancelBubble = true;
                D.returnValue = false
            } else {
                D.preventDefault();
                D.stopPropagation()
            }
            return false
        }
    function aj(au, at, av) {
            if (au) {
                var D = au.className.replace(/^\s+|\s+$/, "").split(/\x20/),
                    P = [],
                    ar;
                for (ar = D.length; ar > 0;) {
                        if (D[--ar] != at) {
                            P.push(D[ar])
                        }
                    }
                if (av) {
                        P.push(av)
                    }
                au.className = P.join(" ")
            }
            return av
        }
    function M(P, D) {
            return aj(P, D, D)
        }
    function ae(at, ar, P) {
            if (ar instanceof Array) {
                for (var D = ar.length; --D >= 0;) {
                    ae(at, ar[D], P)
                }
            } else {
                aj(ar, P, at ? P : null)
            }
            return at
        }
    function G(at, D, ar) {
            var P = null;
            if (document.createElementNS) {
                P = document.createElementNS("http://www.w3.org/1999/xhtml", at)
            } else {
                P = document.createElement(at)
            }
            if (D) {
                P.className = D
            }
            if (ar) {
                ar.appendChild(P)
            }
            return P
        }
    function b(au, av) {
            if (av == null) {
                av = 0
            }
            var D, at, P;
            try {
                D = Array.prototype.slice.call(au, av)
            } catch (ar) {
                D = new Array(au.length - av);
                for (at = av, P = 0; at < au.length; ++at, ++P) {
                    D[P] = au[at]
                }
            }
            return D
        }
    function v(P, ar) {
            var D = b(arguments, 2);
            return (ar == undefined ?
            function () {
                return P.apply(this, D.concat(b(arguments)))
            } : function () {
                return P.apply(ar, D.concat(b(arguments)))
            })
        }
    function t(P, ar) {
            if (!ar(P)) {
                for (var D = P.firstChild; D; D = D.nextSibling) {
                    if (D.nodeType == 1) {
                        t(D, ar)
                    }
                }
            }
        }
    function ap(D, aw, ar) {
            D = al(D, {
                fps: 50,
                len: 15,
                onUpdate: ad,
                onStop: ad
            });
            if (j) {
                D.len = Math.round(D.len / 2)
            }
            function at(aA, az, ax, ay) {
                return ay ? ax + aA * (az - ax) : az + aA * (ax - az)
            }
            function av() {
                if (aw) {
                    P()
                }
                ar = 0;
                aw = setInterval(au, 1000 / D.fps)
            }
            function P() {
                if (aw) {
                    clearInterval(aw);
                    aw = null
                }
                D.onStop(ar / D.len, at)
            }
            function au() {
                var ax = D.len;
                D.onUpdate(ar / ax, at);
                if (ar == ax) {
                    P()
                }++ar
            }
            av();
            return {
                start: av,
                stop: P,
                update: au,
                args: D,
                map: at
            }
        }
    var Z = {
            elastic_b: function (D) {
                return 1 - Math.cos(-D * 5.5 * Math.PI) / Math.pow(2, 7 * D)
            },
            magnetic: function (D) {
                return 1 - Math.cos(D * D * D * 10.5 * Math.PI) / Math.exp(4 * D)
            },
            accel_b: function (D) {
                D = 1 - D;
                return 1 - D * D * D * D
            },
            accel_a: function (D) {
                return D * D * D
            },
            accel_ab: function (D) {
                D = 1 - D;
                return 1 - Math.sin(D * D * Math.PI / 2)
            },
            accel_ab2: function (D) {
                return (D /= 0.5) < 1 ? 1 / 2 * D * D : -1 / 2 * ((--D) * (D - 2) - 1)
            },
            brakes: function (D) {
                D = 1 - D;
                return 1 - Math.sin(D * D * Math.PI)
            },
            shake: function (D) {
                return D < 0.5 ? -Math.cos(D * 11 * Math.PI) * D * D : (D = 1 - D, Math.cos(D * 11 * Math.PI) * D * D)
            }
        };

    function am(D, P) {
            if (P === "") {
                j ? D.style.filter = "" : D.style.opacity = ""
            } else {
                if (P != null) {
                    j ? D.style.filter = "alpha(opacity=" + P * 100 + ")" : D.style.opacity = P
                } else {
                    if (!j) {
                        P = parseFloat(D.style.opacity)
                    } else {
                        if (/alpha\(opacity=([0-9.])+\)/.test(D.style.opacity)) {
                            P = parseFloat(RegExp.$1) / 100
                        }
                    }
                }
            }
            return P
        }
    function O(ar, D) {
            var P = ar.style;
            if (D != null) {
                P.display = D ? "" : "none"
            }
            return P.display != "none"
        }
    function f(P, ar) {
            var D = j ? P.clientX + document.body.scrollLeft : P.pageX;
            var at = j ? P.clientY + document.body.scrollTop : P.pageY;
            if (ar) {
                D -= ar.x;
                at -= ar.y
            }
            return {
                x: D,
                y: at
            }
        }
    function J(au) {
            var D = 0,
                at = 0,
                ar = /^div$/i.test(au.tagName),
                av, P;
            if (ar && au.scrollLeft) {
                    D = au.scrollLeft
                }
            if (ar && au.scrollTop) {
                    at = au.scrollTop
                }
            av = {
                    x: au.offsetLeft - D,
                    y: au.offsetTop - at
                };
            if (au.offsetParent) {
                    P = J(au.offsetParent);
                    av.x += P.x;
                    av.y += P.y
                }
            return av
        }
    function X() {
            var P = document.documentElement,
                D = document.body;
            return {
                    x: P.scrollLeft || D.scrollLeft,
                    y: P.scrollTop || D.scrollTop,
                    w: P.clientWidth || window.innerWidth || D.clientWidth,
                    h: P.clientHeight || window.innerHeight || D.clientHeight
                }
        }
    function m(D, ar, P) {
            for (P = 0; P < D.length; ++P) {
                ar(D[P])
            }
        }
    var ad = new Function();

    function W(D) {
            if (typeof D == "string") {
                D = document.getElementById(D)
            }
            return D
        }
    return y
})();
