/*
 *                                                        ____   _____
 *  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
		};
	};
	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.setTime(100 * aw.getHours() + aw.getMinutes());
					}
				}
			}
			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);
				this.selection.onChange(this.selection);
			}
		}
	};
	l.getHours = function() {
		return Math.floor(this.time / 100);
	};
	l.getMinutes = function() {
		return this.time % 100;
	};
	l.setHour = function(D) {
		if (D < 0) D += 24;
		this.setTime(100 * (D % 24) + this.getMinutes());
	};
	l.setMinute = 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='javascript:'></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) {
			window.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 = window.setTimeout(v(z, this), 50);
	}

	function N(D) {
		switch (D) {
			case "time-hour+":
				this.setHour(this.getHours() + 1);
				break;
			case "time-hour-":
				this.setHour(this.getHours() - 1);
				break;
			case "time-min+":
				this.setMinute(this.getMinutes() + this.args.minuteStep);
				break;
			case "time-min-":
				this.setMinute(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));
					}
					window.clearTimeout(ar);
					d(document, P, true);
					P = null;
				}
			};

			if (az) {
				window.setTimeout(v(this.focus, this), 1);
				var aA = au.getAttribute("dyc-cls");
				if (aA) {
					M(au, ao(aA, 1));
				}
				if (D == "menu") {
					this.toggleMenu();
				} else {
					if (au && /^[+-][MY]$/.test(D)) {
						if (aa(this, D)) {
							var aw = v(function() {
								if (aa(this, D, true)) {
									ar = window.setTimeout(aw, 40);
								} else {
									P.mouseup();
									aa(this, D);
								}
							}, this);
							ar = window.setTimeout(aw, 350);
							p(document, P, true);
						} else {
							P.mouseup();
						}
					} else {
						if (D == "year") {
							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 = window.setTimeout(aw, 100);
									}, this, ax);
									N.call(this, ax);
									ar = window.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 (D == "today") {
				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.setHour(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.setHour(this.getHours() + au);
						break;
					case "time-min":
						this.setMinute(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);
			if (/input|textarea/i.test(D.tagName)) {
				if (D.value != ar) {
					D.value = ar;
					this.callHooks("onSelect", this, P);
				}
			} else {
				if (D.innerText != ar) {
					D.innerText = 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 (aC == "year" && 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 {
					this.cal.refresh();
				}
			} 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 {
						this.cal.refresh();
					}
				} else {
					if (D) {
						this.deselect(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;
		},
		deselect: 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);
				} else {
					this.cal.refresh();
				}
			}
		},
		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(), 0, 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, 0, 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 || 0, 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), 0, 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 = window.setInterval(au, 1000 / D.fps);
		}

		function P() {
			if (aw) {
				window.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;
})();
