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 = $(at).positionedOffset()[1];
		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>");
		}
		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;
				default : ;
			}
		}
		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;
			default : ;
			}
			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;
									default : ;
								}
								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()) / 604800000) + 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 ? 0.5 * D * D : - 0.5 * (--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;
				}
				();
