/**
 *                                                        ____   _____
 *  Dynarch Calendar -- JSCal2, version 1.7               \  /_  /   /
 *  Built at 2009/07/16 08:37 GMT                          \  / /   /
 *                                                          \/ /_  /
 *  (c) Dynarch.com 2009                                     \  / /
 *  All rights reserved.                                       / /
 *  Visit www.dynarch.com/projects/calendar for details        \/
 *
 */
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() { 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><td><div id='submitCalendar' style='width:40px;font-size:11pt;border-style:solid;border-width:1px;text-align:center;margin-left:5px;height:20px;padding-top:3px;'>ok</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 })();
