/*! * FullCalendar v1.6.0 * Docs & License: http://arshaw.com/fullcalendar/ * (c) 2013 Adam Shaw */ (function(t, e) { function n(e) { t.extend(!0, ye, e) } function r(n, r, l) { function u(t) { G ? (S(), C(), R(), b(t)) : f() } function f() { K = r.theme ? "ui" : "fc", n.addClass("fc"), r.isRTL ? n.addClass("fc-rtl") : n.addClass("fc-ltr"), r.theme && n.addClass("ui-widget"), G = t("
").prependTo(n), $ = new a(Z, r), Q = $.render(), Q && n.prepend(Q), y(r.defaultView), t(window).resize(x), m() || v() } function v() { setTimeout(function() { !te.start && m() && b() }, 0) } function h() { t(window).unbind("resize", x), $.destroy(), G.remove(), n.removeClass("fc fc-rtl ui-widget") } function g() { return 0 !== se.offsetWidth } function m() { return 0 !== t("body")[0].offsetWidth } function y(e) { if (!te || e != te.name) { ue++, W(); var n, r = te; r ? ((r.beforeHide || I)(), q(G, G.height()), r.element.hide()) : q(G, 1), G.css("overflow", "hidden"), te = ce[e], te ? te.element.show() : te = ce[e] = new De[e](n = re = t("
").appendTo(G), Z), r && $.deactivateButton(r.name), $.activateButton(e), b(), G.css("overflow", ""), r && q(G, 1), n || (te.afterShow || I)(), ue-- } } function b(t) { if (g()) { ue++, W(), ne === e && S(); var r = !1; !te.start || t || te.start > fe || fe >= te.end ? (te.render(fe, t || 0), E(!0), r = !0) : te.sizeDirty ? (te.clearEvents(), E(), r = !0) : te.eventsDirty && (te.clearEvents(), r = !0), te.sizeDirty = !1, te.eventsDirty = !1, T(r), ee = n.outerWidth(), $.updateTitle(te.title); var a = new Date; a >= te.start && te.end > a ? $.disableButton("today") : $.enableButton("today"), ue--, te.trigger("viewDisplay", se) } } function M() { C(), g() && (S(), E(), W(), te.clearEvents(), te.renderEvents(de), te.sizeDirty = !1) } function C() { t.each(ce, function(t, e) { e.sizeDirty = !0 }) } function S() { ne = r.contentHeight ? r.contentHeight : r.height ? r.height - (Q ? Q.height() : 0) - L(G) : Math.round(G.width() / Math.max(r.aspectRatio, .5)) } function E(t) { ue++, te.setHeight(ne, t), re && (re.css("position", "relative"), re = null), te.setWidth(G.width(), t), ue-- } function x() { if (!ue) if (te.start) { var t = ++le; setTimeout(function() { t == le && !ue && g() && ee != (ee = n.outerWidth()) && (ue++, M(), te.trigger("windowResize", se), ue--) }, 200) } else v() } function T(t) { !r.lazyFetching || oe(te.visStart, te.visEnd) ? k() : t && F() } function k() { ie(te.visStart, te.visEnd) } function H(t) { de = t, F() } function z(t) { F(t) } function F(t) { R(), g() && (te.clearEvents(), te.renderEvents(de, t), te.eventsDirty = !1) } function R() { t.each(ce, function(t, e) { e.eventsDirty = !0 }) } function N(t, n, r) { te.select(t, n, r === e ? !0 : r) } function W() { te && te.unselect() } function A() { b(-1) } function _() { b(1) } function O() { i(fe, -1), b() } function B() { i(fe, 1), b() } function Y() { fe = new Date, b() } function j(t, e, n) { t instanceof Date ? fe = d(t) : p(fe, t, e, n), b() } function P(t, n, r) { t !== e && i(fe, t), n !== e && s(fe, n), r !== e && c(fe, r), b() } function J() { return d(fe) } function V() { return te } function X(t, n) { return n === e ? r[t] : (("height" == t || "contentHeight" == t || "aspectRatio" == t) && (r[t] = n, M()), e) } function U(t, n) { return r[t] ? r[t].apply(n || se, Array.prototype.slice.call(arguments, 2)) : e } var Z = this; Z.options = r, Z.render = u, Z.destroy = h, Z.refetchEvents = k, Z.reportEvents = H, Z.reportEventChange = z, Z.rerenderEvents = F, Z.changeView = y, Z.select = N, Z.unselect = W, Z.prev = A, Z.next = _, Z.prevYear = O, Z.nextYear = B, Z.today = Y, Z.gotoDate = j, Z.incrementDate = P, Z.formatDate = function(t, e) { return w(t, e, r) }, Z.formatDates = function(t, e, n) { return D(t, e, n, r) }, Z.getDate = J, Z.getView = V, Z.option = X, Z.trigger = U, o.call(Z, r, l); var $, Q, G, K, te, ee, ne, re, ae, oe = Z.isFetchNeeded, ie = Z.fetchEvents, se = n[0], ce = {}, le = 0, ue = 0, fe = new Date, de = []; p(fe, r.year, r.month, r.date), r.droppable && t(document).bind("dragstart", function(e, n) { var a = e.target, o = t(a); if (!o.parents(".fc").length) { var i = r.dropAccept; (t.isFunction(i) ? i.call(a, o) : o.is(i)) && (ae = a, te.dragStart(ae, e, n)) } }).bind("dragstop", function(t, e) { ae && (te.dragStop(ae, t, e), ae = null) }) } function a(n, r) { function a() { v = r.theme ? "ui" : "fc"; var n = r.header; return n ? h = t("").append(t("").append(i("left")).append(i("center")).append(i("right"))) : e } function o() { h.remove() } function i(e) { var a = t("
"), o = r.header[e]; return o && t.each(o.split(" "), function(e) { e > 0 && a.append(""); var o; t.each(this.split(","), function(e, i) { if ("title" == i) a.append("

 

"), o && o.addClass(v + "-corner-right"), o = null; else { var s; if (n[i] ? s = n[i] : De[i] && (s = function() { u.removeClass(v + "-state-hover"), n.changeView(i) }), s) { var c = r.theme ? J(r.buttonIcons, i) : null, l = J(r.buttonText, i), u = t("" + (c ? "" + "" : l) + "").click(function() { u.hasClass(v + "-state-disabled") || s() }).mousedown(function() { u.not("." + v + "-state-active").not("." + v + "-state-disabled").addClass(v + "-state-down") }).mouseup(function() { u.removeClass(v + "-state-down") }).hover(function() { u.not("." + v + "-state-active").not("." + v + "-state-disabled").addClass(v + "-state-hover") }, function() { u.removeClass(v + "-state-hover").removeClass(v + "-state-down") }).appendTo(a); U(u), o || u.addClass(v + "-corner-left"), o = u } } }), o && o.addClass(v + "-corner-right") }), a } function s(t) { h.find("h2").html(t) } function c(t) { h.find("span.fc-button-" + t).addClass(v + "-state-active") } function l(t) { h.find("span.fc-button-" + t).removeClass(v + "-state-active") } function u(t) { h.find("span.fc-button-" + t).addClass(v + "-state-disabled") } function f(t) { h.find("span.fc-button-" + t).removeClass(v + "-state-disabled") } var d = this; d.render = a, d.destroy = o, d.updateTitle = s, d.activateButton = c, d.deactivateButton = l, d.disableButton = u, d.enableButton = f; var v, h = t([]) } function o(n, r) { function a(t, e) { return !S || S > t || e > E } function o(t, e) { S = t, E = e, W = []; var n = ++F, r = z.length; R = r; for (var a = 0; r > a; a++) i(z[a], n) } function i(e, r) { s(e, function(a) { if (r == F) { if (a) { n.eventDataTransform && (a = t.map(a, n.eventDataTransform)), e.eventDataTransform && (a = t.map(a, e.eventDataTransform)); for (var o = 0; a.length > o; o++) a[o].source = e, b(a[o]); W = W.concat(a) } R--, R || k(W) } }) } function s(r, a) { var o, i, c = we.sourceFetchers; for (o = 0; c.length > o; o++) { if (i = c[o](r, S, E, a), i === !0) return; if ("object" == typeof i) return s(i, a), e } var l = r.events; if (l) t.isFunction(l) ? (p(), l(d(S), d(E), function(t) { a(t), y() })) : t.isArray(l) ? a(l) : a(); else { var u = r.url; if (u) { var f = r.success, v = r.error, h = r.complete, g = t.extend({}, r.data || {}), m = K(r.startParam, n.startParam), b = K(r.endParam, n.endParam); m && (g[m] = Math.round(+S / 1e3)), b && (g[b] = Math.round(+E / 1e3)), p(), t.ajax(t.extend({}, Me, r, { data: g, success: function(e) { e = e || []; var n = G(f, this, arguments); t.isArray(n) && (e = n), a(e) }, error: function() { G(v, this, arguments), a() }, complete: function() { G(h, this, arguments), y() } })) } else a() } } function c(t) { t = l(t), t && (R++, i(t, F)) } function l(n) { return t.isFunction(n) || t.isArray(n) ? n = { events: n } : "string" == typeof n && (n = { url: n }), "object" == typeof n ? (w(n), z.push(n), n) : e } function u(e) { z = t.grep(z, function(t) { return !D(t, e) }), W = t.grep(W, function(t) { return !D(t.source, e) }), k(W) } function f(t) { var e, n, r = W.length, a = T().defaultEventEnd, o = t.start - t._start, i = t.end ? t.end - (t._end || a(t)) : 0; for (e = 0; r > e; e++) n = W[e], n._id == t._id && n != t && (n.start = new Date(+n.start + o), n.end = t.end ? n.end ? new Date(+n.end + i) : new Date(+a(n) + i) : null, n.title = t.title, n.url = t.url, n.allDay = t.allDay, n.className = t.className, n.editable = t.editable, n.color = t.color, n.backgroudColor = t.backgroudColor, n.borderColor = t.borderColor, n.textColor = t.textColor, b(n)); b(t), k(W) } function v(t, e) { b(t), t.source || (e && (H.events.push(t), t.source = H), W.push(t)), k(W) } function h(e) { if (e) { if (!t.isFunction(e)) { var n = e + ""; e = function(t) { return t._id == n } } W = t.grep(W, e, !0); for (var r = 0; z.length > r; r++) t.isArray(z[r].events) && (z[r].events = t.grep(z[r].events, e, !0)) } else { W = []; for (var r = 0; z.length > r; r++) t.isArray(z[r].events) && (z[r].events = []) } k(W) } function g(e) { return t.isFunction(e) ? t.grep(W, e) : e ? (e += "", t.grep(W, function(t) { return t._id == e })) : W } function p() { N++ || x("loading", null, !0) } function y() { --N || x("loading", null, !1) } function b(t) { var r = t.source || {}, a = K(r.ignoreTimezone, n.ignoreTimezone); t._id = t._id || (t.id === e ? "_fc" + Ce++ : t.id + ""), t.date && (t.start || (t.start = t.date), delete t.date), t._start = d(t.start = m(t.start, a)), t.end = m(t.end, a), t.end && t.end <= t.start && (t.end = null), t._end = t.end ? d(t.end) : null, t.allDay === e && (t.allDay = K(r.allDayDefault, n.allDayDefault)), t.className ? "string" == typeof t.className && (t.className = t.className.split(/\s+/)) : t.className = [] } function w(t) { t.className ? "string" == typeof t.className && (t.className = t.className.split(/\s+/)) : t.className = []; for (var e = we.sourceNormalizers, n = 0; e.length > n; n++) e[n](t) } function D(t, e) { return t && e && M(t) == M(e) } function M(t) { return ("object" == typeof t ? t.events || t.url : "") || t } var C = this; C.isFetchNeeded = a, C.fetchEvents = o, C.addEventSource = c, C.removeEventSource = u, C.updateEvent = f, C.renderEvent = v, C.removeEvents = h, C.clientEvents = g, C.normalizeEvent = b; for (var S, E, x = C.trigger, T = C.getView, k = C.reportEvents, H = { events: [] }, z = [H], F = 0, R = 0, N = 0, W = [], A = 0; r.length > A; A++) l(r[A]) } function i(t, e, n) { return t.setFullYear(t.getFullYear() + e), n || f(t), t } function s(t, e, n) { if (+t) { var r = t.getMonth() + e, a = d(t); for (a.setDate(1), a.setMonth(r), t.setMonth(r), n || f(t); t.getMonth() != a.getMonth();) t.setDate(t.getDate() + (a > t ? 1 : -1)) } return t } function c(t, e, n) { if (+t) { var r = t.getDate() + e, a = d(t); a.setHours(9), a.setDate(r), t.setDate(r), n || f(t), l(t, a) } return t } function l(t, e) { if (+t) for (; t.getDate() != e.getDate();) t.setTime(+t + (e > t ? 1 : -1) * xe) } function u(t, e) { return t.setMinutes(t.getMinutes() + e), t } function f(t) { return t.setHours(0), t.setMinutes(0), t.setSeconds(0), t.setMilliseconds(0), t } function d(t, e) { return e ? f(new Date(+t)) : new Date(+t) } function v() { var t, e = 0; do t = new Date(1970, e++, 1); while (t.getHours()); return t } function h(t, e, n) { for (e = e || 1; !t.getDay() || n && 1 == t.getDay() || !n && 6 == t.getDay();) c(t, e); return t } function g(t, e) { return Math.round((d(t, !0) - d(e, !0)) / Ee) } function p(t, n, r, a) { n !== e && n != t.getFullYear() && (t.setDate(1), t.setMonth(0), t.setFullYear(n)), r !== e && r != t.getMonth() && (t.setDate(1), t.setMonth(r)), a !== e && t.setDate(a) } function m(t, n) { return "object" == typeof t ? t : "number" == typeof t ? new Date(1e3 * t) : "string" == typeof t ? t.match(/^\d+(\.\d+)?$/) ? new Date(1e3 * parseFloat(t)) : (n === e && (n = !0), y(t, n) || (t ? new Date(t) : null)) : null } function y(t, e) { var n = t.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/); if (!n) return null; var r = new Date(n[1], 0, 1); if (e || !n[13]) { var a = new Date(n[1], 0, 1, 9, 0); n[3] && (r.setMonth(n[3] - 1), a.setMonth(n[3] - 1)), n[5] && (r.setDate(n[5]), a.setDate(n[5])), l(r, a), n[7] && r.setHours(n[7]), n[8] && r.setMinutes(n[8]), n[10] && r.setSeconds(n[10]), n[12] && r.setMilliseconds(1e3 * Number("0." + n[12])), l(r, a) } else if (r.setUTCFullYear(n[1], n[3] ? n[3] - 1 : 0, n[5] || 1), r.setUTCHours(n[7] || 0, n[8] || 0, n[10] || 0, n[12] ? 1e3 * Number("0." + n[12]) : 0), n[14]) { var o = 60 * Number(n[16]) + (n[18] ? Number(n[18]) : 0); o *= "-" == n[15] ? 1 : -1, r = new Date(+r + 1e3 * 60 * o) } return r } function b(t) { if ("number" == typeof t) return 60 * t; if ("object" == typeof t) return 60 * t.getHours() + t.getMinutes(); var e = t.match(/(\d+)(?::(\d+))?\s*(\w+)?/); if (e) { var n = parseInt(e[1], 10); return e[3] && (n %= 12, "p" == e[3].toLowerCase().charAt(0) && (n += 12)), 60 * n + (e[2] ? parseInt(e[2], 10) : 0) } } function w(t, e, n) { return D(t, null, e, n) } function D(t, e, n, r) { r = r || ye; var a, o, i, s, c = t, l = e, u = n.length, f = ""; for (a = 0; u > a; a++) if (o = n.charAt(a), "'" == o) { for (i = a + 1; u > i; i++) if ("'" == n.charAt(i)) { c && (f += i == a + 1 ? "'" : n.substring(a + 1, i), a = i); break } } else if ("(" == o) { for (i = a + 1; u > i; i++) if (")" == n.charAt(i)) { var d = w(c, n.substring(a + 1, i), r); parseInt(d.replace(/\D/, ""), 10) && (f += d), a = i; break } } else if ("[" == o) { for (i = a + 1; u > i; i++) if ("]" == n.charAt(i)) { var v = n.substring(a + 1, i), d = w(c, v, r); d != w(l, v, r) && (f += d), a = i; break } } else if ("{" == o) c = e, l = t; else if ("}" == o) c = t, l = e; else { for (i = u; i > a; i--) if (s = ke[n.substring(a, i)]) { c && (f += s(c, r)), a = i - 1; break } i == a && c && (f += o) } return f } function M(t) { var e, n = new Date(t.getTime()); return n.setDate(n.getDate() + 4 - (n.getDay() || 7)), e = n.getTime(), n.setMonth(0), n.setDate(1), Math.floor(Math.round((e - n) / 864e5) / 7) + 1 } function C(t) { return t.end ? S(t.end, t.allDay) : c(d(t.start), 1) } function S(t, e) { return t = d(t), e || t.getHours() || t.getMinutes() ? c(t, 1) : f(t) } function E(t, e) { return 100 * (e.msLength - t.msLength) + (t.event.start - e.event.start) } function x(t, e) { return t.end > e.start && t.start < e.end } function T(t, e, n, r) { var a, o, i, s, c, l, u, f, v = [], h = t.length; for (a = 0; h > a; a++) o = t[a], i = o.start, s = e[a], s > n && r > i && (n > i ? (c = d(n), u = !1) : (c = i, u = !0), s > r ? (l = d(r), f = !1) : (l = s, f = !0), v.push({ event: o, start: c, end: l, isStart: u, isEnd: f, msLength: l - c })); return v.sort(E) } function k(t) { var e, n, r, a, o, i = [], s = t.length; for (e = 0; s > e; e++) { for (n = t[e], r = 0;;) { if (a = !1, i[r]) for (o = 0; i[r].length > o; o++) if (x(i[r][o], n)) { a = !0; break } if (!a) break; r++ } i[r] ? i[r].push(n) : i[r] = [n] } return i } function H(n, r, a) { n.unbind("mouseover").mouseover(function(n) { for (var o, i, s, c = n.target; c != this;) o = c, c = c.parentNode; (i = o._fci) !== e && (o._fci = e, s = r[i], a(s.event, s.element, s), t(n.target).trigger(n)), n.stopPropagation() }) } function z(e, n, r) { for (var a, o = 0; e.length > o; o++) a = t(e[o]), a.width(Math.max(0, n - R(a, r))) } function F(e, n, r) { for (var a, o = 0; e.length > o; o++) a = t(e[o]), a.height(Math.max(0, n - L(a, r))) } function R(t, e) { return N(t) + A(t) + (e ? W(t) : 0) } function N(e) { return (parseFloat(t.css(e[0], "paddingLeft", !0)) || 0) + (parseFloat(t.css(e[0], "paddingRight", !0)) || 0) } function W(e) { return (parseFloat(t.css(e[0], "marginLeft", !0)) || 0) + (parseFloat(t.css(e[0], "marginRight", !0)) || 0) } function A(e) { return (parseFloat(t.css(e[0], "borderLeftWidth", !0)) || 0) + (parseFloat(t.css(e[0], "borderRightWidth", !0)) || 0) } function L(t, e) { return _(t) + B(t) + (e ? O(t) : 0) } function _(e) { return (parseFloat(t.css(e[0], "paddingTop", !0)) || 0) + (parseFloat(t.css(e[0], "paddingBottom", !0)) || 0) } function O(e) { return (parseFloat(t.css(e[0], "marginTop", !0)) || 0) + (parseFloat(t.css(e[0], "marginBottom", !0)) || 0) } function B(e) { return (parseFloat(t.css(e[0], "borderTopWidth", !0)) || 0) + (parseFloat(t.css(e[0], "borderBottomWidth", !0)) || 0) } function q(t, e) { e = "number" == typeof e ? e + "px" : e, t.each(function(t, n) { n.style.cssText += ";min-height:" + e + ";_height:" + e }) } function I() {} function Y(t, e) { return t - e } function j(t) { return Math.max.apply(Math, t) } function P(t) { return (10 > t ? "0" : "") + t } function J(t, n) { if (t[n] !== e) return t[n]; for (var r, a = n.split(/(?=[A-Z])/), o = a.length - 1; o >= 0; o--) if (r = t[a[o].toLowerCase()], r !== e) return r; return t[""] } function V(t) { return t.replace(/&/g, "&").replace(//g, ">").replace(/'/g, "'").replace(/"/g, """).replace(/\n/g, "
") } function X(t) { return t.id + "/" + t.className + "/" + t.style.cssText.replace(/(^|;)\s*(top|left|width|height)\s*:[^;]*/gi, "") } function U(t) { t.attr("unselectable", "on").css("MozUserSelect", "none").bind("selectstart.ui", function() { return !1 }) } function Z(t) { t.children().removeClass("fc-first fc-last").filter(":first-child").addClass("fc-first").end().filter(":last-child").addClass("fc-last") } function $(t, e) { t.each(function(t, n) { n.className = n.className.replace(/^fc-\w*/, "fc-" + Se[e.getDay()]) }) } function Q(t, e) { var n = t.source || {}, r = t.color, a = n.color, o = e("eventColor"), i = t.backgroundColor || r || n.backgroundColor || a || e("eventBackgroundColor") || o, s = t.borderColor || r || n.borderColor || a || e("eventBorderColor") || o, c = t.textColor || n.textColor || e("eventTextColor"), l = []; return i && l.push("background-color:" + i), s && l.push("border-color:" + s), c && l.push("color:" + c), l.join(";") } function G(e, n, r) { if (t.isFunction(e) && (e = [e]), e) { var a, o; for (a = 0; e.length > a; a++) o = e[a].apply(n, r) || o; return o } } function K() { for (var t = 0; arguments.length > t; t++) if (arguments[t] !== e) return arguments[t] } function te(t, e) { function n(t, e) { e && (s(t, e), t.setDate(1)); var n = d(t, !0); n.setDate(1); var l = s(d(n), 1), u = d(n), f = d(l), v = a("firstDay"), g = a("weekends") ? 0 : 1; g && (h(u), h(f, -1, !0)), c(u, -((u.getDay() - Math.max(v, g) + 7) % 7)), c(f, (7 - f.getDay() + Math.max(v, g)) % 7); var p = Math.round((f - u) / (7 * Ee)); "fixed" == a("weekMode") && (c(f, 7 * (6 - p)), p = 6), r.title = i(n, a("titleFormat")), r.start = n, r.end = l, r.visStart = u, r.visEnd = f, o(p, g ? 5 : 7, !0) } var r = this; r.render = n, re.call(r, t, e, "month"); var a = r.opt, o = r.renderBasic, i = e.formatDate } function ee(t, e) { function n(t, e) { e && c(t, 7 * e); var n = c(d(t), -((t.getDay() - a("firstDay") + 7) % 7)), s = c(d(n), 7), l = d(n), u = d(s), f = a("weekends"); f || (h(l), h(u, -1, !0)), r.title = i(l, c(d(u), -1), a("titleFormat")), r.start = n, r.end = s, r.visStart = l, r.visEnd = u, o(1, f ? 7 : 5, !1) } var r = this; r.render = n, re.call(r, t, e, "basicWeek"); var a = r.opt, o = r.renderBasic, i = e.formatDates } function ne(t, e) { function n(t, e) { e && (c(t, e), a("weekends") || h(t, 0 > e ? -1 : 1)), r.title = i(t, a("titleFormat")), r.start = r.visStart = d(t, !0), r.end = r.visEnd = c(d(r.start), 1), o(1, 1, !1) } var r = this; r.render = n, re.call(r, t, e, "basicDay"); var a = r.opt, o = r.renderBasic, i = e.formatDate } function re(e, n, r) { function a(t, e, n) { ne = t, re = e, o(); var r = !P; r ? i() : Te(), s(n) } function o() { ce = Ee("isRTL"), ce ? (le = -1, fe = re - 1) : (le = 1, fe = 0), pe = Ee("firstDay"), ye = Ee("weekends") ? 0 : 1, be = Ee("theme") ? "ui" : "fc", we = Ee("columnFormat"), De = Ee("weekNumbers"), Me = Ee("weekNumberTitle"), Ce = "iso" != Ee("weekNumberCalculation") ? "w" : "W" } function i() { Q = t("
").appendTo(e) } function s(n) { var r, a, o, i, s = "", c = be + "-widget-header", l = be + "-widget-content", u = B.start.getMonth(), d = f(new Date); for (s += "", De && (s += "", r = 0; ne > r; r++) { for (s += "", De && (s += ""), a = 0; re > a; a++) o = F(r, a), i = ["fc-day", "fc-" + Se[o.getDay()], l], o.getMonth() != u && i.push("fc-other-month"), +o == +d && (i.push("fc-today"), i.push(be + "-state-highlight")), s += ""; s += "" } s += "
"), r = 0; re > r; r++) s += ""; for (s += "
" + "
" + "
" + "
", n && (s += "
" + o.getDate() + "
"), s += "
 
", _(), I && I.remove(), I = t(s).appendTo(e), Y = I.find("thead"), j = Y.find(".fc-day-header"), P = I.find("tbody"), J = P.find("tr"), V = P.find(".fc-day"), X = J.find("td:first-child"), $ = J.eq(0).find(".fc-day-content > div"), Z(Y.add(Y.find("tr"))), Z(J), J.eq(0).addClass("fc-first"), J.filter(":last").addClass("fc-last"), De && Y.find(".fc-week-number").text(Me), j.each(function(e, n) { var r = R(e); t(n).text(Fe(r, we)) }), De && P.find(".fc-week-number > div").each(function(e, n) { var r = F(e, 0); t(n).text(Fe(r, Ce)) }), V.each(function(e, n) { var r = R(e); xe("dayRender", B, r, t(n)) }), v(V) } function l(e) { K = e; var n, r, a, o = K - Y.height(); "variable" == Ee("weekMode") ? n = r = Math.floor(o / (1 == ne ? 2 : 6)) : (n = Math.floor(o / ne), r = o - n * (ne - 1)), X.each(function(e, o) { ne > e && (a = t(o), q(a.find("> div"), (e == ne - 1 ? r : n) - L(a))) }), O() } function u(t) { G = t, se.clear(), ee = 0, De && (ee = Y.find("th.fc-week-number").outerWidth()), te = Math.floor((G - ee) / re), z(j.slice(0, -1), te) } function v(t) { t.click(h).mousedown(ze) } function h(e) { if (!Ee("selectable")) { var n = y(t(this).data("date")); xe("dayClick", this, n, !0, e) } } function p(t, e, n) { n && oe.build(); for (var r = d(B.visStart), a = c(d(r), re), o = 0; ne > o; o++) { var i = new Date(Math.max(r, t)), s = new Date(Math.min(a, e)); if (s > i) { var l, u; ce ? (l = g(s, r) * le + fe + 1, u = g(i, r) * le + fe + 1) : (l = g(i, r), u = g(s, r)), v(m(o, l, o, u - 1)) } c(r, 7), c(a, 7) } } function m(t, n, r, a) { var o = oe.rect(t, n, r, a, e); return ke(o, e) } function b(t) { return d(t) } function w(t, e) { p(t, c(d(e), 1), !0) } function D() { He() } function M(t, e, n) { var r = k(t), a = V[r.row * re + r.col]; xe("dayClick", a, t, e, n) } function C(t, e) { ie.start(function(t) { He(), t && m(t.row, t.col, t.row, t.col) }, e) } function S(t, e, n) { var r = ie.stop(); if (He(), r) { var a = H(r); xe("drop", t, a, !0, e, n) } } function E(t) { return d(t.start) } function x(t) { return se.left(t) } function T(t) { return se.right(t) } function k(t) { return { row: Math.floor(g(t, B.visStart) / 7), col: N(t.getDay()) } } function H(t) { return F(t.row, t.col) } function F(t, e) { return c(d(B.visStart), 7 * t + e * le + fe) } function R(t) { return F(Math.floor(t / re), t % re) } function N(t) { return (t - Math.max(pe, ye) + re) % re * le + fe } function W(t) { return J.eq(t) } function A() { var t = 0; return De && (t += ee), { left: t, right: G } } function _() { q(e, e.height()) } function O() { q(e, 1) } var B = this; B.renderBasic = a, B.setHeight = l, B.setWidth = u, B.renderDayOverlay = p, B.defaultSelectionEnd = b, B.renderSelection = w, B.clearSelection = D, B.reportDayClick = M, B.dragStart = C, B.dragStop = S, B.defaultEventEnd = E, B.getHoverListener = function() { return ie }, B.colContentLeft = x, B.colContentRight = T, B.dayOfWeekCol = N, B.dateCell = k, B.cellDate = H, B.cellIsAllDay = function() { return !0 }, B.allDayRow = W, B.allDayBounds = A, B.getRowCnt = function() { return ne }, B.getColCnt = function() { return re }, B.getColWidth = function() { return te }, B.getDaySegmentContainer = function() { return Q }, ue.call(B, e, n, r), ve.call(B), de.call(B), ae.call(B); var I, Y, j, P, J, V, X, $, Q, G, K, te, ee, ne, re, oe, ie, se, ce, le, fe, pe, ye, be, we, De, Me, Ce, Ee = B.opt, xe = B.trigger, Te = B.clearEvents, ke = B.renderOverlay, He = B.clearOverlays, ze = B.daySelectionMousedown, Fe = n.formatDate; U(e.addClass("fc-grid")), oe = new he(function(e, n) { var r, a, o; j.each(function(e, i) { r = t(i), a = r.offset().left, e && (o[1] = a), o = [a], n[e] = o }), o[1] = a + r.outerWidth(), J.each(function(n, i) { ne > n && (r = t(i), a = r.offset().top, n && (o[1] = a), o = [a], e[n] = o) }), o[1] = a + r.outerHeight() }), ie = new ge(oe), se = new me(function(t) { return $.eq(t) }) } function ae() { function e(t, e) { v(t), x(r(t), e), l("eventAfterAllRender") } function n() { h(), b().empty() } function r(e) { var n, r, a, o, s, l, u = S(), f = E(), v = d(i.visStart), h = c(d(v), f), g = t.map(e, C), p = []; for (n = 0; u > n; n++) { for (r = k(T(e, g, v, h)), a = 0; r.length > a; a++) for (o = r[a], s = 0; o.length > s; s++) l = o[s], l.row = n, l.level = a, p.push(l); c(v, 7), c(h, 7) } return p } function a(t, e, n) { u(t) && o(t, e), n.isEnd && f(t) && H(t, e, n), g(t, e) } function o(t, e) { var n, r = w(); e.draggable({ zIndex: 9, delay: 50, opacity: s("dragOpacity"), revertDuration: s("dragRevertDuration"), start: function(a, o) { l("eventDragStart", e, t, a, o), m(t, e), r.start(function(r, a, o, i) { e.draggable("option", "revert", !r || !o && !i), M(), r ? (n = 7 * o + i * (s("isRTL") ? -1 : 1), D(c(d(t.start), n), c(C(t), n))) : n = 0 }, a, "drag") }, stop: function(a, o) { r.stop(), M(), l("eventDragStop", e, t, a, o), n ? y(this, t, n, 0, t.allDay, a, o) : (e.css("filter", ""), p(t, e)) } }) } var i = this; i.renderEvents = e, i.compileDaySegs = r, i.clearEvents = n, i.bindDaySeg = a, fe.call(i); var s = i.opt, l = i.trigger, u = i.isEventDraggable, f = i.isEventResizable, v = i.reportEvents, h = i.reportEventClear, g = i.eventElementHandlers, p = i.showEvents, m = i.hideEvents, y = i.eventDrop, b = i.getDaySegmentContainer, w = i.getHoverListener, D = i.renderDayOverlay, M = i.clearOverlays, S = i.getRowCnt, E = i.getColCnt, x = i.renderDaySegs, H = i.resizableDayEvent } function oe(t, e) { function n(t, e) { e && c(t, 7 * e); var n = c(d(t), -((t.getDay() - a("firstDay") + 7) % 7)), s = c(d(n), 7), l = d(n), u = d(s), f = a("weekends"); f || (h(l), h(u, -1, !0)), r.title = i(l, c(d(u), -1), a("titleFormat")), r.start = n, r.end = s, r.visStart = l, r.visEnd = u, o(f ? 7 : 5) } var r = this; r.render = n, se.call(r, t, e, "agendaWeek"); var a = r.opt, o = r.renderAgenda, i = e.formatDates } function ie(t, e) { function n(t, e) { e && (c(t, e), a("weekends") || h(t, 0 > e ? -1 : 1)); var n = d(t, !0), s = c(d(n), 1); r.title = i(t, a("titleFormat")), r.start = r.visStart = n, r.end = r.visEnd = s, o(1) } var r = this; r.render = n, se.call(r, t, e, "agendaDay"); var a = r.opt, o = r.renderAgenda, i = e.formatDate } function se(n, r, a) { function o(t) { Le = t, i(), te ? nn() : s(), l() } function i() { Ye = tn("theme") ? "ui" : "fc", Pe = tn("weekends") ? 0 : 1, je = tn("firstDay"), (Je = tn("isRTL")) ? (Ve = -1, Xe = Le - 1) : (Ve = 1, Xe = 0), Ue = b(tn("minTime")), Ze = b(tn("maxTime")), $e = tn("columnFormat"), Qe = tn("weekNumbers"), Ge = tn("weekNumberTitle"), Ke = "iso" != tn("weekNumberCalculation") ? "w" : "W", Ne = tn("snapMinutes") || tn("slotMinutes") } function s() { var e, r, a, o, i, s = Ye + "-widget-header", c = Ye + "-widget-content", l = 0 == tn("slotMinutes") % 15; for (e = "", e += Qe ? "", r = 0; Le > r; r++) e += "" + "" + "" + "" + "" + "", r = 0; Le > r; r++) e += ""; for (e += "" + "" + "" + "
" : " "; for (e += " 
 " + "
" + "
" + "
 
" + "
" + "
" + "
 
", te = t(e).appendTo(n), ee = te.find("thead"), ne = ee.find("th").slice(1, -1), re = te.find("tbody"), ae = re.find("td").slice(0, -1), oe = ae.find("div.fc-day-content div"), ie = ae.eq(0), se = ie.find("> div"), Z(ee.add(ee.find("tr"))), Z(re.add(re.find("tr"))), Se = ee.find("th:first"), Ee = te.find(".fc-agenda-gutter"), le = t("
").appendTo(n), tn("allDaySlot") ? (fe = t("
").appendTo(le), e = "" + "" + "" + "" + "
" + tn("allDayText") + "" + "
" + "
 
", pe = t(e).appendTo(le), ye = pe.find("tr"), D(ye.find("td")), Se = Se.add(pe.find("th:first")), Ee = Ee.add(pe.find("th.fc-agenda-gutter")), le.append("
" + "
" + "
")) : fe = t([]), be = t("
").appendTo(le), we = t("
").appendTo(be), De = t("
").appendTo(we), e = "", a = v(), o = u(d(a), Ze), u(a, Ue), _e = 0, r = 0; o > a; r++) i = a.getMinutes(), e += "" + "" + "" + "", u(a, tn("slotMinutes")), _e++; e += "
" + (l && i ? " " : un(a, tn("axisFormat"))) + "" + "
 
" + "
", Me = t(e).appendTo(we), Ce = Me.find("div:first"), M(Me.find("td")), Se = Se.add(Me.find("th:first")) } function l() { var t, e, n, r, a = f(new Date); if (Qe) { var o = un(N(0), Ke); Je ? o += Ge : o = Ge + o, ee.find(".fc-week-number").text(o) } for (t = 0; Le > t; t++) r = N(t), e = ne.eq(t), e.html(un(r, $e)), n = ae.eq(t), +r == +a ? n.addClass(Ye + "-state-highlight fc-today") : n.removeClass(Ye + "-state-highlight fc-today"), $(e.add(n), r) } function h(t, n) { t === e && (t = ke), ke = t, fn = {}; var r = re.position().top, a = be.position().top, o = Math.min(t - r, Me.height() + a + 1); se.height(o - L(ie)), le.css("top", r), be.height(o - a - 1), Re = Ce.height() + 1, We = tn("slotMinutes") / Ne, Ae = Re / We, n && m() } function p(e) { Te = e, qe.clear(), He = 0, z(Se.width("").each(function(e, n) { He = Math.max(He, t(n).outerWidth()) }), He); var n = be[0].clientWidth; Fe = be.width() - n, Fe ? (z(Ee, Fe), Ee.show().prev().removeClass("fc-last")) : Ee.hide().prev().addClass("fc-last"), ze = Math.floor((n - He) / Le), z(ne.slice(0, -1), ze) } function m() { function t() { be.scrollTop(r) } var e = v(), n = d(e); n.setHours(tn("firstHour")); var r = _(e, n) + 1; t(), setTimeout(t, 0) } function y() { Ie = be.scrollTop() } function w() { be.scrollTop(Ie) } function D(t) { t.click(C).mousedown(cn) } function M(t) { t.click(C).mousedown(V) } function C(t) { if (!tn("selectable")) { var e = Math.min(Le - 1, Math.floor((t.pageX - te.offset().left - He) / ze)), n = N(e), r = this.parentNode.className.match(/fc-slot(\d+)/); if (r) { var a = parseInt(r[1]) * tn("slotMinutes"), o = Math.floor(a / 60); n.setHours(o), n.setMinutes(a % 60 + Ue), en("dayClick", ae[e], n, !1, t) } else en("dayClick", ae[e], n, !0, t) } } function S(t, e, n) { n && Oe.build(); var r, a, o = d(K.visStart); Je ? (r = g(e, o) * Ve + Xe + 1, a = g(t, o) * Ve + Xe + 1) : (r = g(t, o), a = g(e, o)), r = Math.max(0, r), a = Math.min(Le, a), a > r && D(E(0, r, 0, a - 1)) } function E(t, e, n, r) { var a = Oe.rect(t, e, n, r, le); return rn(a, le) } function x(t, e) { for (var n = d(K.visStart), r = c(d(n), 1), a = 0; Le > a; a++) { var o = new Date(Math.max(n, t)), i = new Date(Math.min(r, e)); if (i > o) { var s = a * Ve + Xe, l = Oe.rect(0, s, 0, s, we), u = _(n, o), f = _(n, i); l.top = u, l.height = f - u, M(rn(l, we)) } c(n, 1), c(r, 1) } } function T(t) { return qe.left(t) } function k(t) { return qe.right(t) } function H(t) { return { row: Math.floor(g(t, K.visStart) / 7), col: A(t.getDay()) } } function R(t) { var e = N(t.col), n = t.row; return tn("allDaySlot") && n--, n >= 0 && u(e, Ue + n * Ne), e } function N(t) { return c(d(K.visStart), t * Ve + Xe) } function W(t) { return tn("allDaySlot") && !t.row } function A(t) { return (t - Math.max(je, Pe) + Le) % Le * Ve + Xe } function _(t, n) { if (t = d(t, !0), u(d(t), Ue) > n) return 0; if (n >= u(d(t), Ze)) return Me.height(); var r = tn("slotMinutes"), a = 60 * n.getHours() + n.getMinutes() - Ue, o = Math.floor(a / r), i = fn[o]; return i === e && (i = fn[o] = Me.find("tr:eq(" + o + ") td div")[0].offsetTop), Math.max(0, Math.round(i - 1 + Re * (a % r / r))) } function O() { return { left: He, right: Te - Fe } } function B() { return ye } function q(t) { var e = d(t.start); return t.allDay ? e : u(e, tn("defaultEventMinutes")) } function I(t, e) { return e ? d(t) : u(d(t), tn("slotMinutes")) } function j(t, e, n) { n ? tn("allDaySlot") && S(t, c(d(e), 1), !0) : P(t, e) } function P(e, n) { var r = tn("selectHelper"); if (Oe.build(), r) { var a = g(e, K.visStart) * Ve + Xe; if (a >= 0 && Le > a) { var o = Oe.rect(0, a, 0, a, we), i = _(e, e), s = _(e, n); if (s > i) { if (o.top = i, o.height = s - i, o.left += 2, o.width -= 5, t.isFunction(r)) { var c = r(e, n); c && (o.position = "absolute", o.zIndex = 8, xe = t(c).css(o).appendTo(we)) } else o.isStart = !0, o.isEnd = !0, xe = t(ln({ title: "", start: e, end: n, className: ["fc-select-helper"], editable: !1 }, o)), xe.css("opacity", tn("dragOpacity")); xe && (M(xe), we.append(xe), z(xe, o.width, !0), F(xe, o.height, !0)) } } } else x(e, n) } function J() { an(), xe && (xe.remove(), xe = null) } function V(e) { if (1 == e.which && tn("selectable")) { sn(e); var n; Be.start(function(t, e) { if (J(), t && t.col == e.col && !W(t)) { var r = R(e), a = R(t); n = [r, u(d(r), Ne), a, u(d(a), Ne)].sort(Y), P(n[0], n[3]) } else n = null }, e), t(document).one("mouseup", function(t) { Be.stop(), n && (+n[0] == +n[1] && X(n[0], !1, t), on(n[0], n[3], !1, t)) }) } } function X(t, e, n) { en("dayClick", ae[A(t.getDay())], t, e, n) } function Q(t, e) { Be.start(function(t) { if (an(), t) if (W(t)) E(t.row, t.col, t.row, t.col); else { var e = R(t), n = u(d(e), tn("defaultEventMinutes")); x(e, n) } }, e) } function G(t, e, n) { var r = Be.stop(); an(), r && en("drop", t, R(r), W(r), e, n) } var K = this; K.renderAgenda = o, K.setWidth = p, K.setHeight = h, K.beforeHide = y, K.afterShow = w, K.defaultEventEnd = q, K.timePosition = _, K.dayOfWeekCol = A, K.dateCell = H, K.cellDate = R, K.cellIsAllDay = W, K.allDayRow = B, K.allDayBounds = O, K.getHoverListener = function() { return Be }, K.colContentLeft = T, K.colContentRight = k, K.getDaySegmentContainer = function() { return fe }, K.getSlotSegmentContainer = function() { return De }, K.getMinMinute = function() { return Ue }, K.getMaxMinute = function() { return Ze }, K.getBodyContent = function() { return we }, K.getRowCnt = function() { return 1 }, K.getColCnt = function() { return Le }, K.getColWidth = function() { return ze }, K.getSnapHeight = function() { return Ae }, K.getSnapMinutes = function() { return Ne }, K.defaultSelectionEnd = I, K.renderDayOverlay = S, K.renderSelection = j, K.clearSelection = J, K.reportDayClick = X, K.dragStart = Q, K.dragStop = G, ue.call(K, n, r, a), ve.call(K), de.call(K), ce.call(K); var te, ee, ne, re, ae, oe, ie, se, le, fe, pe, ye, be, we, De, Me, Ce, Se, Ee, xe, Te, ke, He, ze, Fe, Re, Ne, We, Ae, Le, _e, Oe, Be, qe, Ie, Ye, je, Pe, Je, Ve, Xe, Ue, Ze, $e, Qe, Ge, Ke, tn = K.opt, en = K.trigger, nn = K.clearEvents, rn = K.renderOverlay, an = K.clearOverlays, on = K.reportSelection, sn = K.unselect, cn = K.daySelectionMousedown, ln = K.slotSegHtml, un = r.formatDate, fn = {}; U(n.addClass("fc-agenda")), Oe = new he(function(e, n) { function r(t) { return Math.max(c, Math.min(l, t)) } var a, o, i; ne.each(function(e, r) { a = t(r), o = a.offset().left, e && (i[1] = o), i = [o], n[e] = i }), i[1] = o + a.outerWidth(), tn("allDaySlot") && (a = ye, o = a.offset().top, e[0] = [o, o + a.outerHeight()]); for (var s = we.offset().top, c = be.offset().top, l = c + be.outerHeight(), u = 0; _e * We > u; u++) e.push([r(s + Ae * u), r(s + Ae * (u + 1))]) }), Be = new ge(Oe), qe = new me(function(t) { return oe.eq(t) }) } function ce() { function n(t, e) { S(t); var n, r = t.length, i = [], c = []; for (n = 0; r > n; n++) t[n].allDay ? i.push(t[n]) : c.push(t[n]); y("allDaySlot") && (Y(a(i), e), z()), s(o(c), e), b("eventAfterAllRender") } function r() { E(), N().empty(), W().empty() } function a(e) { var n, r, a, o, i = k(T(e, t.map(e, C), m.visStart, m.visEnd)), s = i.length, c = []; for (n = 0; s > n; n++) for (r = i[n], a = 0; r.length > a; a++) o = r[a], o.row = 0, o.level = n, c.push(o); return c } function o(e) { var n, r, a, o, s, l, f = P(), v = O(), h = _(), g = u(d(m.visStart), v), p = t.map(e, i), y = []; for (n = 0; f > n; n++) { for (r = k(T(e, p, g, u(d(g), h - v))), le(r), a = 0; r.length > a; a++) for (o = r[a], s = 0; o.length > s; s++) l = o[s], l.col = n, l.level = a, y.push(l); c(g, 1, !0) } return y } function i(t) { return t.end ? d(t.end) : u(d(t.start), y("defaultEventMinutes")) } function s(n, r) { var a, o, i, s, c, u, f, d, h, g, p, m, w, D, M, C, S, E, x, T, k, z, F = n.length, N = "", A = {}, _ = {}, O = W(), Y = P(); for ((T = y("isRTL")) ? (k = -1, z = Y - 1) : (k = 1, z = 0), a = 0; F > a; a++) o = n[a], i = o.event, s = B(o.start, o.start), c = B(o.start, o.end), u = o.col, f = o.level, d = o.forward || 0, h = q(u * k + z), g = I(u * k + z) - h, g = Math.min(g - 6, .95 * g), p = f ? g / (f + d + 1) : d ? 2 * (g / (d + 1) - 6) : g, m = h + g / (f + d + 1) * f * k + (T ? g - p : 0), o.top = s, o.left = m, o.outerWidth = p, o.outerHeight = c - s, N += l(i, o); for (O[0].innerHTML = N, w = O.children(), a = 0; F > a; a++) o = n[a], i = o.event, D = t(w[a]), M = b("eventRender", i, i, D), M === !1 ? D.remove() : (M && M !== !0 && (D.remove(), D = t(M).css({ position: "absolute", top: o.top, left: o.left }).appendTo(O)), o.element = D, i._id === r ? v(i, D, o) : D[0]._fci = a, G(i, D)); for (H(O, n, v), a = 0; F > a; a++) o = n[a], (D = o.element) && (S = A[C = o.key = X(D[0])], o.vsides = S === e ? A[C] = L(D, !0) : S, S = _[C], o.hsides = S === e ? _[C] = R(D, !0) : S, E = D.find(".fc-event-title"), E.length && (o.contentTop = E[0].offsetTop)); for (a = 0; F > a; a++) o = n[a], (D = o.element) && (D[0].style.width = Math.max(0, o.outerWidth - o.hsides) + "px", x = Math.max(0, o.outerHeight - o.vsides), D[0].style.height = x + "px", i = o.event, o.contentTop !== e && 10 > x - o.contentTop && (D.find("div.fc-event-time").text(ie(i.start, y("timeFormat")) + " - " + i.title), D.find("div.fc-event-title").remove()), b("eventAfterRender", i, i, D)) } function l(t, e) { var n = "<", r = t.url, a = Q(t, y), o = ["fc-event", "fc-event-vert"]; return w(t) && o.push("fc-event-draggable"), e.isStart && o.push("fc-event-start"), e.isEnd && o.push("fc-event-end"), o = o.concat(t.className), t.source && (o = o.concat(t.source.className || [])), n += r ? "a href='" + V(t.url) + "'" : "div", n += " class='" + o.join(" ") + "'" + " style='position:absolute;z-index:8;top:" + e.top + "px;left:" + e.left + "px;" + a + "'" + ">" + "
" + "
" + V(se(t.start, t.end, y("timeFormat"))) + "
" + "
" + V(t.title) + "
" + "
" + "
", e.isEnd && D(t) && (n += "
=
"), n += "" } function f(t, e, n) { w(t) && h(t, e, n.isStart), n.isEnd && D(t) && j(t, e, n), x(t, e) } function v(t, e, n) { var r = e.find("div.fc-event-time"); w(t) && g(t, e, r), n.isEnd && D(t) && p(t, e, r), x(t, e) } function h(t, e, n) { function r() { s || (e.width(a).height("").draggable("option", "grid", null), s = !0) } var a, o, i, s = !0, l = y("isRTL") ? -1 : 1, u = A(), f = J(), v = U(), h = Z(), g = O(); e.draggable({ zIndex: 9, opacity: y("dragOpacity", "month"), revertDuration: y("dragRevertDuration"), start: function(g, p) { b("eventDragStart", e, t, g, p), te(t, e), a = e.width(), u.start(function(a, u, g, p) { ae(), a ? (o = !1, i = p * l, a.row ? n ? s && (e.width(f - 10), F(e, v * Math.round((t.end ? (t.end - t.start) / Te : y("defaultEventMinutes")) / h)), e.draggable("option", "grid", [f, 1]), s = !1) : o = !0 : (re(c(d(t.start), i), c(C(t), i)), r()), o = o || s && !i) : (r(), o = !0), e.draggable("option", "revert", o) }, g, "drag") }, stop: function(n, a) { if (u.stop(), ae(), b("eventDragStop", e, t, n, a), o) r(), e.css("filter", ""), K(t, e); else { var c = 0; s || (c = Math.round((e.offset().top - $().offset().top) / v) * h + g - (60 * t.start.getHours() + t.start.getMinutes())), ee(this, t, i, c, s, n, a) } } }) } function g(t, e, n) { function r(e) { var r, a = u(d(t.start), e); t.end && (r = u(d(t.end), e)), n.text(se(a, r, y("timeFormat"))) } function a() { f && (n.css("display", ""), e.draggable("option", "grid", [p, m]), f = !1) } var o, i, s, l, f = !1, v = y("isRTL") ? -1 : 1, h = A(), g = P(), p = J(), m = U(), w = Z(); e.draggable({ zIndex: 9, scroll: !1, grid: [p, m], axis: 1 == g ? "y" : !1, opacity: y("dragOpacity"), revertDuration: y("dragRevertDuration"), start: function(r, u) { b("eventDragStart", e, t, r, u), te(t, e), o = e.position(), s = l = 0, h.start(function(r, o, s, l) { e.draggable("option", "revert", !r), ae(), r && (i = l * v, y("allDaySlot") && !r.row ? (f || (f = !0, n.hide(), e.draggable("option", "grid", null)), re(c(d(t.start), i), c(C(t), i))) : a()) }, r, "drag") }, drag: function(t, e) { s = Math.round((e.position.top - o.top) / m) * w, s != l && (f || r(s), l = s) }, stop: function(n, c) { var l = h.stop(); ae(), b("eventDragStop", e, t, n, c), l && (i || s || f) ? ee(this, t, i, f ? 0 : s, f, n, c) : (a(), e.css("filter", ""), e.css(o), r(0), K(t, e)) } }) } function p(t, e, n) { var r, a, o = U(), i = Z(); e.resizable({ handles: { s: ".ui-resizable-handle" }, grid: o, start: function(n, o) { r = a = 0, te(t, e), e.css("z-index", 9), b("eventResizeStart", this, t, n, o) }, resize: function(s, c) { r = Math.round((Math.max(o, e.height()) - c.originalSize.height) / o), r != a && (n.text(se(t.start, r || t.end ? u(M(t), i * r) : null, y("timeFormat"))), a = r) }, stop: function(n, a) { b("eventResizeStop", this, t, n, a), r ? ne(this, t, 0, i * r, n, a) : (e.css("z-index", 8), K(t, e)) } }) } var m = this; m.renderEvents = n, m.compileDaySegs = a, m.clearEvents = r, m.slotSegHtml = l, m.bindDaySeg = f, fe.call(m); var y = m.opt, b = m.trigger, w = m.isEventDraggable, D = m.isEventResizable, M = m.eventEnd, S = m.reportEvents, E = m.reportEventClear, x = m.eventElementHandlers, z = m.setHeight, N = m.getDaySegmentContainer, W = m.getSlotSegmentContainer, A = m.getHoverListener, _ = m.getMaxMinute, O = m.getMinMinute, B = m.timePosition, q = m.colContentLeft, I = m.colContentRight, Y = m.renderDaySegs, j = m.resizableDayEvent, P = m.getColCnt, J = m.getColWidth, U = m.getSnapHeight, Z = m.getSnapMinutes, $ = m.getBodyContent, G = m.reportEventElement, K = m.showEvents, te = m.hideEvents, ee = m.eventDrop, ne = m.eventResize, re = m.renderDayOverlay, ae = m.clearOverlays, oe = m.calendar, ie = oe.formatDate, se = oe.formatDates } function le(t) { var e, n, r, a, o, i; for (e = t.length - 1; e > 0; e--) for (a = t[e], n = 0; a.length > n; n++) for (o = a[n], r = 0; t[e - 1].length > r; r++) i = t[e - 1][r], x(o, i) && (i.forward = Math.max(i.forward || 0, (o.forward || 0) + 1)) } function ue(t, n, r) { function a(t, e) { var n = F[t]; return "object" == typeof n ? J(n, e || r) : n } function o(t, e) { return n.trigger.apply(n, [t, e || S].concat(Array.prototype.slice.call(arguments, 2), [S])) } function i(t) { return l(t) && !a("disableDragging") } function s(t) { return l(t) && !a("disableResizing") } function l(t) { return K(t.editable, (t.source || {}).editable, a("editable")) } function f(t) { k = {}; var e, n, r = t.length; for (e = 0; r > e; e++) n = t[e], k[n._id] ? k[n._id].push(n) : k[n._id] = [n] } function v(t) { return t.end ? d(t.end) : E(t) } function h(t, e) { H.push(e), z[t._id] ? z[t._id].push(e) : z[t._id] = [e] } function g() { H = [], z = {} } function p(t, n) { n.click(function(r) { return n.hasClass("ui-draggable-dragging") || n.hasClass("ui-resizable-resizing") ? e : o("eventClick", this, t, r) }).hover(function(e) { o("eventMouseover", this, t, e) }, function(e) { o("eventMouseout", this, t, e) }) } function m(t, e) { b(t, e, "show") } function y(t, e) { b(t, e, "hide") } function b(t, e, n) { var r, a = z[t._id], o = a.length; for (r = 0; o > r; r++) e && a[r][0] == e[0] || a[r][n]() } function w(t, e, n, r, a, i, s) { var c = e.allDay, l = e._id; M(k[l], n, r, a), o("eventDrop", t, e, n, r, a, function() { M(k[l], -n, -r, c), T(l) }, i, s), T(l) } function D(t, e, n, r, a, i) { var s = e._id; C(k[s], n, r), o("eventResize", t, e, n, r, function() { C(k[s], -n, -r), T(s) }, a, i), T(s) } function M(t, n, r, a) { r = r || 0; for (var o, i = t.length, s = 0; i > s; s++) o = t[s], a !== e && (o.allDay = a), u(c(o.start, n, !0), r), o.end && (o.end = u(c(o.end, n, !0), r)), x(o, F) } function C(t, e, n) { n = n || 0; for (var r, a = t.length, o = 0; a > o; o++) r = t[o], r.end = u(c(v(r), e, !0), n), x(r, F) } var S = this; S.element = t, S.calendar = n, S.name = r, S.opt = a, S.trigger = o, S.isEventDraggable = i, S.isEventResizable = s, S.reportEvents = f, S.eventEnd = v, S.reportEventElement = h, S.reportEventClear = g, S.eventElementHandlers = p, S.showEvents = m, S.hideEvents = y, S.eventDrop = w, S.eventResize = D; var E = S.defaultEventEnd, x = n.normalizeEvent, T = n.reportEventChange, k = {}, H = [], z = {}, F = n.options } function fe() { function n(t, e) { var n, r, c, d, p, m, y, b, w = B(), D = T(), M = k(), C = 0, S = t.length; for (w[0].innerHTML = a(t), o(t, w.children()), i(t), s(t, w, e), l(t), u(t), f(t), n = v(), r = 0; D > r; r++) { for (c = 0, d = [], p = 0; M > p; p++) d[p] = 0; for (; S > C && (m = t[C]).row == r;) { for (y = j(d.slice(m.startCol, m.endCol)), m.top = y, y += m.outerHeight, b = m.startCol; m.endCol > b; b++) d[b] = y; C++ } n[r].height(j(d)) } g(t, h(n)) } function r(e, n, r) { var i, s, c, d = t("
"), p = B(), m = e.length; for (d[0].innerHTML = a(e), i = d.children(), p.append(i), o(e, i), l(e), u(e), f(e), g(e, h(v())), i = [], s = 0; m > s; s++) c = e[s].element, c && (e[s].row === n && c.css("top", r), i.push(c[0])); return t(i) } function a(t) { var e, n, r, a, o, i, s, c, l, u, f = y("isRTL"), d = t.length, v = F(), h = v.left, g = v.right, p = ""; for (e = 0; d > e; e++) n = t[e], r = n.event, o = ["fc-event", "fc-event-hori"], w(r) && o.push("fc-event-draggable"), n.isStart && o.push("fc-event-start"), n.isEnd && o.push("fc-event-end"), f ? (i = A(n.end.getDay() - 1), s = A(n.start.getDay()), c = n.isEnd ? N(i) : h, l = n.isStart ? W(s) : g) : (i = A(n.start.getDay()), s = A(n.end.getDay() - 1), c = n.isStart ? N(i) : h, l = n.isEnd ? W(s) : g), o = o.concat(r.className), r.source && (o = o.concat(r.source.className || [])), a = r.url, u = Q(r, y), p += a ? "" + "
", !r.allDay && n.isStart && (p += "" + V(I(r.start, r.end, y("timeFormat"))) + ""), p += "" + V(r.title) + "" + "
", n.isEnd && D(r) && (p += "
" + "   " + "
"), p += "", n.left = c, n.outerWidth = l - c, n.startCol = i, n.endCol = s + 1; return p } function o(e, n) { var r, a, o, i, s, c = e.length; for (r = 0; c > r; r++) a = e[r], o = a.event, i = t(n[r]), s = b("eventRender", o, o, i), s === !1 ? i.remove() : (s && s !== !0 && (s = t(s).css({ position: "absolute", left: a.left }), i.replaceWith(s), i = s), a.element = i) } function i(t) { var e, n, r, a = t.length; for (e = 0; a > e; e++) n = t[e], r = n.element, r && C(n.event, r) } function s(t, e, n) { var r, a, o, i, s = t.length; for (r = 0; s > r; r++) a = t[r], o = a.element, o && (i = a.event, i._id === n ? q(i, o, a) : o[0]._fci = r); H(e, t, q) } function l(t) { var n, r, a, o, i, s = t.length, c = {}; for (n = 0; s > n; n++) r = t[n], a = r.element, a && (o = r.key = X(a[0]), i = c[o], i === e && (i = c[o] = R(a, !0)), r.hsides = i) } function u(t) { var e, n, r, a = t.length; for (e = 0; a > e; e++) n = t[e], r = n.element, r && (r[0].style.width = Math.max(0, n.outerWidth - n.hsides) + "px") } function f(t) { var n, r, a, o, i, s = t.length, c = {}; for (n = 0; s > n; n++) r = t[n], a = r.element, a && (o = r.key, i = c[o], i === e && (i = c[o] = O(a)), r.outerHeight = a[0].offsetHeight + i) } function v() { var t, e = T(), n = []; for (t = 0; e > t; t++) n[t] = z(t).find("div.fc-day-content > div"); return n } function h(t) { var e, n = t.length, r = []; for (e = 0; n > e; e++) r[e] = t[e][0].offsetTop; return r } function g(t, e) { var n, r, a, o, i = t.length; for (n = 0; i > n; n++) r = t[n], a = r.element, a && (a[0].style.top = e[r.row] + (r.top || 0) + "px", o = r.event, b("eventAfterRender", o, o, a)) } function p(e, n, a) { var o = y("isRTL"), i = o ? "w" : "e", s = n.find(".ui-resizable-" + i), l = !1; U(n), n.mousedown(function(t) { t.preventDefault() }).click(function(t) { l && (t.preventDefault(), t.stopImmediatePropagation()) }), s.mousedown(function(s) { function u(n) { b("eventResizeStop", this, e, n), t("body").css("cursor", ""), h.stop(), P(), f && x(this, e, f, 0, n), setTimeout(function() { l = !1 }, 0) } if (1 == s.which) { l = !0; var f, v, h = m.getHoverListener(), g = T(), p = k(), y = o ? -1 : 1, w = o ? p - 1 : 0, D = n.css("top"), C = t.extend({}, e), H = L(e.start); J(), t("body").css("cursor", i + "-resize").one("mouseup", u), b("eventResizeStart", this, e, s), h.start(function(t, n) { if (t) { var s = Math.max(H.row, t.row), l = t.col; 1 == g && (s = 0), s == H.row && (l = o ? Math.min(H.col, l) : Math.max(H.col, l)), f = 7 * s + l * y + w - (7 * n.row + n.col * y + w); var u = c(M(e), f, !0); if (f) { C.end = u; var h = v; v = r(_([C]), a.row, D), v.find("*").css("cursor", i + "-resize"), h && h.remove(), E(e) } else v && (S(e), v.remove(), v = null); P(), Y(e.start, c(d(u), 1)) } }, s) } }) } var m = this; m.renderDaySegs = n, m.resizableDayEvent = p; var y = m.opt, b = m.trigger, w = m.isEventDraggable, D = m.isEventResizable, M = m.eventEnd, C = m.reportEventElement, S = m.showEvents, E = m.hideEvents, x = m.eventResize, T = m.getRowCnt, k = m.getColCnt; m.getColWidth; var z = m.allDayRow, F = m.allDayBounds, N = m.colContentLeft, W = m.colContentRight, A = m.dayOfWeekCol, L = m.dateCell, _ = m.compileDaySegs, B = m.getDaySegmentContainer, q = m.bindDaySeg, I = m.calendar.formatDates, Y = m.renderDayOverlay, P = m.clearOverlays, J = m.clearSelection } function de() { function e(t, e, a) { n(), e || (e = c(t, a)), l(t, e, a), r(t, e, a) } function n(t) { f && (f = !1, u(), s("unselect", null, t)) } function r(t, e, n, r) { f = !0, s("select", null, t, e, n, r) } function a(e) { var a = o.cellDate, s = o.cellIsAllDay, c = o.getHoverListener(), f = o.reportDayClick; if (1 == e.which && i("selectable")) { n(e); var d; c.start(function(t, e) { u(), t && s(t) ? (d = [a(e), a(t)].sort(Y), l(d[0], d[1], !0)) : d = null }, e), t(document).one("mouseup", function(t) { c.stop(), d && (+d[0] == +d[1] && f(d[0], !0, t), r(d[0], d[1], !0, t)) }) } } var o = this; o.select = e, o.unselect = n, o.reportSelection = r, o.daySelectionMousedown = a; var i = o.opt, s = o.trigger, c = o.defaultSelectionEnd, l = o.renderSelection, u = o.clearSelection, f = !1; i("selectable") && i("unselectAuto") && t(document).mousedown(function(e) { var r = i("unselectCancel"); r && t(e.target).parents(r).length || n(e) }) } function ve() { function e(e, n) { var r = o.shift(); return r || (r = t("
")), r[0].parentNode != n[0] && r.appendTo(n), a.push(r.css(e).show()), r } function n() { for (var t; t = a.shift();) o.push(t.hide().unbind()) } var r = this; r.renderOverlay = e, r.clearOverlays = n; var a = [], o = [] } function he(t) { var e, n, r = this; r.build = function() { e = [], n = [], t(e, n) }, r.cell = function(t, r) { var a, o = e.length, i = n.length, s = -1, c = -1; for (a = 0; o > a; a++) if (r >= e[a][0] && e[a][1] > r) { s = a; break } for (a = 0; i > a; a++) if (t >= n[a][0] && n[a][1] > t) { c = a; break } return s >= 0 && c >= 0 ? { row: s, col: c } : null }, r.rect = function(t, r, a, o, i) { var s = i.offset(); return { top: e[t][0] - s.top, left: n[r][0] - s.left, width: n[o][1] - n[r][0], height: e[a][1] - e[t][0] } } } function ge(e) { function n(t) { pe(t); var n = e.cell(t.pageX, t.pageY); (!n != !i || n && (n.row != i.row || n.col != i.col)) && (n ? (o || (o = n), a(n, o, n.row - o.row, n.col - o.col)) : a(n, o), i = n) } var r, a, o, i, s = this; s.start = function(s, c, l) { a = s, o = i = null, e.build(), n(c), r = l || "mousemove", t(document).bind(r, n) }, s.stop = function() { return t(document).unbind(r, n), i } } function pe(t) { t.pageX === e && (t.pageX = t.originalEvent.pageX, t.pageY = t.originalEvent.pageY) } function me(t) { function n(e) { return a[e] = a[e] || t(e) } var r = this, a = {}, o = {}, i = {}; r.left = function(t) { return o[t] = o[t] === e ? n(t).position().left : o[t] }, r.right = function(t) { return i[t] = i[t] === e ? r.left(t) + n(t).width() : i[t] }, r.clear = function() { a = {}, o = {}, i = {} } } var ye = { defaultView: "month", aspectRatio: 1.35, header: { left: "title", center: "", right: "today prev,next" }, weekends: !0, weekNumbers: !1, weekNumberCalculation: "iso", weekNumberTitle: "W", allDayDefault: !0, ignoreTimezone: !0, lazyFetching: !0, startParam: "start", endParam: "end", titleFormat: { month: "MMMM yyyy", week: "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", day: "dddd, MMM d, yyyy" }, columnFormat: { month: "ddd", week: "ddd M/d", day: "dddd M/d" }, timeFormat: { "": "h(:mm)t" }, isRTL: !1, firstDay: 0, monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], buttonText: { prev: "", next: "", prevYear: "«", nextYear: "»", today: "today", month: "month", week: "week", day: "day" }, theme: !1, buttonIcons: { prev: "circle-triangle-w", next: "circle-triangle-e" }, unselectAuto: !0, dropAccept: "*" }, be = { header: { left: "next,prev today", center: "", right: "title" }, buttonText: { prev: "", next: "", prevYear: "»", nextYear: "«" }, buttonIcons: { prev: "circle-triangle-e", next: "circle-triangle-w" } }, we = t.fullCalendar = { version: "1.6.0" }, De = we.views = {}; t.fn.fullCalendar = function(n) { if ("string" == typeof n) { var a, o = Array.prototype.slice.call(arguments, 1); return this.each(function() { var r = t.data(this, "fullCalendar"); if (r && t.isFunction(r[n])) { var i = r[n].apply(r, o); a === e && (a = i), "destroy" == n && t.removeData(this, "fullCalendar") } }), a !== e ? a : this } var i = n.eventSources || []; return delete n.eventSources, n.events && (i.push(n.events), delete n.events), n = t.extend(!0, {}, ye, n.isRTL || n.isRTL === e && ye.isRTL ? be : {}, n), this.each(function(e, a) { var o = t(a), s = new r(o, n, i); o.data("fullCalendar", s), s.render() }), this }, we.sourceNormalizers = [], we.sourceFetchers = []; var Me = { dataType: "json", cache: !1 }, Ce = 1; we.addDays = c, we.cloneDate = d, we.parseDate = m, we.parseISO8601 = y, we.parseTime = b, we.formatDate = w, we.formatDates = D; var Se = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"], Ee = 864e5, xe = 36e5, Te = 6e4, ke = { s: function(t) { return t.getSeconds() }, ss: function(t) { return P(t.getSeconds()) }, m: function(t) { return t.getMinutes() }, mm: function(t) { return P(t.getMinutes()) }, h: function(t) { return t.getHours() % 12 || 12 }, hh: function(t) { return P(t.getHours() % 12 || 12) }, H: function(t) { return t.getHours() }, HH: function(t) { return P(t.getHours()) }, d: function(t) { return t.getDate() }, dd: function(t) { return P(t.getDate()) }, ddd: function(t, e) { return e.dayNamesShort[t.getDay()] }, dddd: function(t, e) { return e.dayNames[t.getDay()] }, M: function(t) { return t.getMonth() + 1 }, MM: function(t) { return P(t.getMonth() + 1) }, MMM: function(t, e) { return e.monthNamesShort[t.getMonth()] }, MMMM: function(t, e) { return e.monthNames[t.getMonth()] }, yy: function(t) { return (t.getFullYear() + "").substring(2) }, yyyy: function(t) { return t.getFullYear() }, t: function(t) { return 12 > t.getHours() ? "a" : "p" }, tt: function(t) { return 12 > t.getHours() ? "am" : "pm" }, T: function(t) { return 12 > t.getHours() ? "A" : "P" }, TT: function(t) { return 12 > t.getHours() ? "AM" : "PM" }, u: function(t) { return w(t, "yyyy-MM-dd'T'HH:mm:ss'Z'") }, S: function(t) { var e = t.getDate(); return e > 10 && 20 > e ? "th" : ["st", "nd", "rd"][e % 10 - 1] || "th" }, w: function(t, e) { return e.weekNumberCalculation(t) }, W: function(t) { return M(t) } }; we.dateFormatters = ke, we.applyAll = G, De.month = te, De.basicWeek = ee, De.basicDay = ne, n({ weekMode: "fixed" }), De.agendaWeek = oe, De.agendaDay = ie, n({ allDaySlot: !0, allDayText: "all-day", firstHour: 6, slotMinutes: 30, defaultEventMinutes: 120, axisFormat: "h(:mm)tt", timeFormat: { agenda: "h:mm{ - h:mm}" }, dragOpacity: { agenda: .5 }, minTime: 0, maxTime: 24 }) })(jQuery);