/*
 * FullCalendar v1.4.3
 * http://arshaw.com/fullcalendar/
 *
 * Use fullcalendar.css for basic styling.
 * For event drag & drop, required jQuery UI draggable.
 * For event resizing, requires jQuery UI resizable.
 *
 * Copyright (c) 2009 Adam Shaw
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Date: Tue Dec 22 00:41:38 2009 -0800
 *
 */
(function(A) { var G = A.fullCalendar = {}; var e = G.views = {}; var C = { defaultView: "month", aspectRatio: 1.35, header: { left: "title", center: "", right: "today prev,next" }, weekends: true, allDayDefault: true, startParam: "start", endParam: "end", titleFormat: { month: "MMMM yyyy", week: "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}", day: "dddd, MMM d, yyyy" }, columnFormat: { month: "ddd", week: "ddd M/d", day: "dddd M/d" }, timeFormat: { "": "h(:mm)t" }, isRTL: false, 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: "&nbsp;&#9668;&nbsp;", next: "&nbsp;&#9658;&nbsp;", prevYear: "&nbsp;&lt;&lt;&nbsp;", nextYear: "&nbsp;&gt;&gt;&nbsp;", today: "today", month: "month", week: "week", day: "day" }, theme: false, buttonIcons: { prev: "circle-triangle-w", next: "circle-triangle-e"} }; var b = { header: { left: "next,prev today", center: "", right: "title" }, buttonText: { prev: "&nbsp;&#9658;&nbsp;", next: "&nbsp;&#9668;&nbsp;", prevYear: "&nbsp;&gt;&gt;&nbsp;", nextYear: "&nbsp;&lt;&lt;&nbsp;" }, buttonIcons: { prev: "circle-triangle-e", next: "circle-triangle-w"} }; var J = G.setDefaults = function(V) { A.extend(true, C, V) }; A.fn.fullCalendar = function(Y) { if (typeof Y == "string") { var X = Array.prototype.slice.call(arguments, 1), Z; this.each(function() { var aa = A.data(this, "fullCalendar")[Y].apply(this, X); if (Z == l) { Z = aa } }); if (Z != l) { return Z } return this } var W = Y.eventSources || []; delete Y.eventSources; if (Y.events) { W.push(Y.events); delete Y.events } W.unshift([]); Y = A.extend(true, {}, C, (Y.isRTL || Y.isRTL == l && C.isRTL) ? b : {}, Y); var V = Y.theme ? "ui" : "fc"; this.each(function() { var ap = this, ac = A(ap).addClass("fc"), aC, av = A("<div class='fc-content " + V + "-widget-content' style='position:relative'/>").prependTo(ap), aw; if (Y.isRTL) { ac.addClass("fc-rtl") } if (Y.theme) { ac.addClass("ui-widget") } var aD = new Date(), at, ao, aj = {}; if (Y.year != l && Y.year != aD.getFullYear()) { aD.setDate(1); aD.setMonth(0); aD.setFullYear(Y.year) } if (Y.month != l && Y.month != aD.getMonth()) { aD.setDate(1); aD.setMonth(Y.month) } if (Y.date != l) { aD.setDate(Y.date) } function aH(aI) { if (aI != at) { af(); if (ao) { if (ao.eventsChanged) { au(ao); ao.eventsChanged = false } ao.element.hide() } if (aj[aI]) { (ao = aj[aI]).element.show(); if (ao.shown) { ao.shown() } } else { ao = aj[aI] = A.fullCalendar.views[aI](A("<div class='fc-view fc-view-" + aI + "'/>").appendTo(av), Y) } if (ay) { ay.find("div.fc-button-" + at).removeClass(V + "-state-active"); ay.find("div.fc-button-" + aI).addClass(V + "-state-active") } ao.name = at = aI; aG(); an() } } function aG(aK, aI) { if ((aC = ap.offsetWidth) !== 0) { if (!aw) { aw = aF() } if (aK || !ao.date || +ao.date != +aD) { af(); ao.render(aD, aK || 0, aw, function(aL) { if (!ad || ao.visStart < ad || ao.visEnd > az) { am(aL) } else { aL(ab) } }); an(); ao.date = M(aD) } else { if (ao.sizeDirty || aI) { ao.updateSize(aw); ao.rerenderEvents() } else { if (ao.eventsDirty) { ao.clearEvents(); ao.renderEvents(ab) } } } if (ay) { ay.find("h2.fc-header-title").html(ao.title); var aJ = new Date(); if (aJ >= ao.start && aJ < ao.end) { ay.find("div.fc-button-today").addClass(V + "-state-disabled") } else { ay.find("div.fc-button-today").removeClass(V + "-state-disabled") } } ao.sizeDirty = false; ao.eventsDirty = false; ao.trigger("viewDisplay", ap) } } function au(aI) { A.each(aj, function() { if (this != aI) { this.eventsDirty = true } }) } function ae() { ao.clearEvents(); ao.renderEvents(ab); au(ao) } function ar(aI) { A.each(aj, function() { if (this != aI) { this.sizeDirty = true } }) } function al(aI) { aw = aF(); if (aI) { af() } ao.updateSize(aw); if (aI) { an() } ar(ao); ao.rerenderEvents(true) } function aF() { if (Y.contentHeight) { return Y.contentHeight } else { if (Y.height) { return Y.height - (ay ? ay.height() : 0) - U(av) } } return aC / Math.max(Y.aspectRatio, 0.5) } var ab = [], ad, az; function am(aL) { ab = []; ad = M(ao.visStart); az = M(ao.visEnd); var aK = W.length, aI = function() { if (--aK == 0) { if (aL) { aL(ab) } } }, aJ = 0; for (; aJ < W.length; aJ++) { ah(W[aJ], aI) } } function ah(aN, aO) { var aJ = ao.name, aM = M(aD), aL = function(aP) { if (aJ == ao.name && +aM == +aD && A.inArray(aN, W) != -1) { for (var aQ = 0; aQ < aP.length; aQ++) { z(aP[aQ], Y); aP[aQ].source = aN } ab = ab.concat(aP); if (aO) { aO(aP) } } }, aI = function(aP) { aL(aP); aE() }; if (typeof aN == "string") { var aK = {}; aK[Y.startParam] = Math.round(ad.getTime() / 1000); aK[Y.endParam] = Math.round(az.getTime() / 1000); if (Y.cacheParam) { aK[Y.cacheParam] = (new Date()).getTime() } ai(); A.ajax({ url: aN, dataType: "json", data: aK, cache: Y.cacheParam || false, success: aI }) } else { if (A.isFunction(aN)) { ai(); aN(M(ad), M(az), aI) } else { aL(aN) } } } var aA = 0; function ai() { if (!aA++) { ao.trigger("loading", ap, true) } } function aE() { if (! --aA) { ao.trigger("loading", ap, false) } } var aB = { render: function() { aG(0, true) }, changeView: aH, getView: function() { return ao }, getDate: function() { return aD }, option: function(aI, aJ) { if (aJ == l) { return Y[aI] } if (aI == "height" || aI == "contentHeight" || aI == "aspectRatio") { if (!ag) { Y[aI] = aJ; al() } } }, destroy: function() { A(window).unbind("resize", ax); if (ay) { ay.remove() } av.remove(); A.removeData(ap, "fullCalendar") }, prev: function() { aG(-1) }, next: function() { aG(1) }, prevYear: function() { S(aD, -1); aG() }, nextYear: function() { S(aD, 1); aG() }, today: function() { aD = new Date(); aG() }, gotoDate: function(aI, aK, aJ) { if (typeof aI == "object") { aD = M(aI) } else { if (aI != l) { aD.setFullYear(aI) } if (aK != l) { aD.setMonth(aK) } if (aJ != l) { aD.setDate(aJ) } } aG() }, incrementDate: function(aJ, aI, aK) { if (aJ != l) { S(aD, aJ) } if (aI != l) { n(aD, aI) } if (aK != l) { w(aD, aK) } aG() }, updateEvent: function(aM) { var aK, aI = ab.length, aN, aL = aM.start - aM._start, aJ = aM.end ? (aM.end - (aM._end || ao.defaultEventEnd(aM))) : 0; for (aK = 0; aK < aI; aK++) { aN = ab[aK]; if (aN._id == aM._id && aN != aM) { aN.start = new Date(+aN.start + aL); if (aM.end) { if (aN.end) { aN.end = new Date(+aN.end + aJ) } else { aN.end = new Date(+ao.defaultEventEnd(aN) + aJ) } } else { aN.end = null } aN.title = aM.title; aN.url = aM.url; aN.allDay = aM.allDay; aN.className = aM.className; aN.editable = aM.editable; z(aN, Y) } } z(aM, Y); ae() }, renderEvent: function(aJ, aI) { z(aJ, Y); if (!aJ.source) { if (aI) { (aJ.source = W[0]).push(aJ) } ab.push(aJ) } ae() }, removeEvents: function(aJ) { if (!aJ) { ab = []; for (var aI = 0; aI < W.length; aI++) { if (typeof W[aI] == "object") { W[aI] = [] } } } else { if (!A.isFunction(aJ)) { var aK = aJ + ""; aJ = function(aL) { return aL._id == aK } } ab = A.grep(ab, aJ, true); for (var aI = 0; aI < W.length; aI++) { if (typeof W[aI] == "object") { W[aI] = A.grep(W[aI], aJ, true) } } } ae() }, clientEvents: function(aI) { if (A.isFunction(aI)) { return A.grep(ab, aI) } else { if (aI) { aI += ""; return A.grep(ab, function(aJ) { return aJ._id == aI }) } } return ab }, rerenderEvents: function() { ao.rerenderEvents() }, addEventSource: function(aI) { W.push(aI); ah(aI, function() { ae() }) }, removeEventSource: function(aI) { W = A.grep(W, function(aJ) { return aJ != aI }); ab = A.grep(ab, function(aJ) { return aJ.source != aI }); ae() }, refetchEvents: function() { am(ae) } }; A.data(this, "fullCalendar", aB); var ay, aq = Y.header; if (aq) { ay = A("<table class='fc-header'/>").append(A("<tr/>").append(A("<td class='fc-header-left'/>").append(ak(aq.left))).append(A("<td class='fc-header-center'/>").append(ak(aq.center))).append(A("<td class='fc-header-right'/>").append(ak(aq.right)))).prependTo(ac) } function ak(aI) { if (aI) { var aJ = A("<tr/>"); A.each(aI.split(" "), function(aL) { if (aL > 0) { aJ.append("<td><span class='fc-header-space'/></td>") } var aK; A.each(this.split(","), function(aO, aN) { if (aN == "title") { aJ.append("<td><h2 class='fc-header-title'>&nbsp;</h2></td>"); if (aK) { aK.addClass(V + "-corner-right") } aK = null } else { var aM; if (aB[aN]) { aM = aB[aN] } else { if (e[aN]) { aM = function() { aP.removeClass(V + "-state-hover"); aH(aN) } } } if (aM) { if (aK) { aK.addClass(V + "-no-right") } var aP, aQ = Y.theme ? i(Y.buttonIcons, aN) : null, aR = i(Y.buttonText, aN); if (aQ) { aP = A("<div class='fc-button-" + aN + " ui-state-default'><a><span class='ui-icon ui-icon-" + aQ + "'/></a></div>") } else { if (aR) { aP = A("<div class='fc-button-" + aN + " " + V + "-state-default'><a><span>" + aR + "</span></a></div>") } } if (aP) { aP.click(function() { if (!aP.hasClass(V + "-state-disabled")) { aM() } }).mousedown(function() { aP.not("." + V + "-state-active").not("." + V + "-state-disabled").addClass(V + "-state-down") }).mouseup(function() { aP.removeClass(V + "-state-down") }).hover(function() { aP.not("." + V + "-state-active").not("." + V + "-state-disabled").addClass(V + "-state-hover") }, function() { aP.removeClass(V + "-state-hover").removeClass(V + "-state-down") }).appendTo(A("<td/>").appendTo(aJ)); if (aK) { aK.addClass(V + "-no-right") } else { aP.addClass(V + "-corner-left") } aK = aP } } } }); if (aK) { aK.addClass(V + "-corner-right") } }); return A("<table/>").append(aJ) } } var ag = false, aa = 0; function af() { if (!ag) { ag = true; av.css({ overflow: "hidden", height: aw }) } } function an() { if (ag) { av.css({ overflow: "visible", height: "" }); if (A.browser.msie && (A.browser.version == "6.0" || A.browser.version == "7.0")) { av[0].clientHeight; av.hide().show() } ag = false } } function ax() { if (!ag) { if (ao.date) { var aI = ++aa; setTimeout(function() { if (aI == aa && !ag) { var aJ = ac.width(); if (aJ != aC) { aC = aJ; al(true); ao.trigger("windowResize", ap) } } }, 200) } else { aG() } } } A(window).resize(ax); aH(Y.defaultView); if (A.browser.msie && !A("body").width()) { setTimeout(function() { aG(); av.hide().show(); ao.rerenderEvents() }, 0) } }); return this }; var L = 0; function z(W, V) { W._id = W._id || (W.id == l ? "_fc" + L++ : W.id + ""); if (W.date) { if (!W.start) { W.start = W.date } delete W.date } W._start = M(W.start = f(W.start)); W.end = f(W.end); if (W.end && W.end <= W.start) { W.end = null } W._end = W.end ? M(W.end) : null; if (W.allDay == l) { W.allDay = V.allDayDefault } if (W.className) { if (typeof W.className == "string") { W.className = W.className.split(/\s+/) } } else { W.className = [] } } J({ weekMode: "fixed" }); e.month = function(W, V) { return new B(W, V, { render: function(Z, ad, af, ac) { if (ad) { n(Z, ad); Z.setDate(1) } var X = this.start = M(Z, true); X.setDate(1); this.end = n(M(X), 1); var ae = this.visStart = M(X), aa = this.visEnd = M(this.end), Y = V.weekends ? 0 : 1; if (Y) { T(ae); T(aa, -1, true) } w(ae, -((ae.getDay() - Math.max(V.firstDay, Y) + 7) % 7)); w(aa, (7 - aa.getDay() + Math.max(V.firstDay, Y)) % 7); var ab = Math.round((aa - ae) / (O * 7)); if (V.weekMode == "fixed") { w(aa, (6 - ab) * 7); ab = 6 } this.title = K(X, this.option("titleFormat"), V); this.renderGrid(ab, V.weekends ? 7 : 5, this.option("columnFormat"), true, af, ac) } }) }; e.basicWeek = function(W, V) { return new B(W, V, { render: function(aa, ac, X, ab) { if (ac) { w(aa, ac * 7) } var Z = this.visStart = M(this.start = w(M(aa), -((aa.getDay() - V.firstDay + 7) % 7))), Y = this.visEnd = M(this.end = w(M(Z), 7)); if (!V.weekends) { T(Z); T(Y, -1, true) } this.title = s(Z, w(M(Y), -1), this.option("titleFormat"), V); this.renderGrid(1, V.weekends ? 7 : 5, this.option("columnFormat"), false, X, ab) } }) }; e.basicDay = function(W, V) { return new B(W, V, { render: function(Y, aa, X, Z) { if (aa) { w(Y, aa); if (!V.weekends) { T(Y, aa < 0 ? -1 : 1) } } this.title = K(Y, this.option("titleFormat"), V); this.start = this.visStart = M(Y, true); this.end = this.visEnd = w(M(this.start), 1); this.renderGrid(1, 1, this.option("columnFormat"), false, X, Z) } }) }; var E, p; function B(X, aa, ar) { var Y, ah, ab, ad, al, ak, ae, an, at, ap, W, af = [], ai = A.extend(this, k, ar, { renderGrid: am, renderEvents: Z, rerenderEvents: aq, updateSize: ao, defaultEventEnd: function(au) { return M(au.start) }, visEventEnd: function(av) { if (av.end) { var au = M(av.end); return (av.allDay || au.getHours() || au.getMinutes()) ? w(au, 1) : au } else { return w(M(av.start), 1) } } }); ai.init(X, aa); X.addClass("fc-grid").css("position", "relative"); if (X.disableSelection) { X.disableSelection() } function am(au, aA, ax, aD, aF, aC) { ae = au; an = aA; Y = aa.theme ? "ui" : "fc"; ab = aa.weekends ? 0 : 1; ah = aa.firstDay; if (ad = aa.isRTL) { al = -1; ak = an - 1 } else { al = 1; ak = 0 } var ay = ai.start.getMonth(), aB = u(new Date()), aH, aw, av, az = M(ai.visStart); if (!W) { var aG = A("<table/>").appendTo(X); aH = "<thead><tr>"; for (aw = 0; aw < an; aw++) { aH += "<th class='fc-" + P[az.getDay()] + " " + Y + "-state-default" + (aw == ak ? " fc-leftmost" : "") + "'>" + K(az, ax, aa) + "</th>"; w(az, 1); if (ab) { T(az) } } ap = A(aH + "</tr></thead>").appendTo(aG); aH = "<tbody>"; az = M(ai.visStart); for (aw = 0; aw < ae; aw++) { aH += "<tr class='fc-week" + aw + "'>"; for (av = 0; av < an; av++) { aH += "<td class='fc-" + P[az.getDay()] + " " + Y + "-state-default fc-day" + (aw * an + av) + (av == ak ? " fc-leftmost" : "") + (ae > 1 && az.getMonth() != ay ? " fc-other-month" : "") + (+az == +aB ? " fc-today " + Y + "-state-highlight" : " fc-not-today") + "'>" + (aD ? "<div class='fc-day-number'>" + az.getDate() + "</div>" : "") + "<div class='fc-day-content'><div>&nbsp;</div></div></td>"; w(az, 1); if (ab) { T(az) } } aH += "</tr>" } W = A(aH + "</tbody>").appendTo(aG); W.find("td").click(V) } else { ai.clearEvents(); var aE = W.find("tr").length; if (ae < aE) { W.find("tr:gt(" + (ae - 1) + ")").remove() } else { if (ae > aE) { aH = ""; for (aw = aE; aw < ae; aw++) { aH += "<tr class='fc-week" + aw + "'>"; for (av = 0; av < an; av++) { aH += "<td class='fc-" + P[az.getDay()] + " " + Y + "-state-default fc-new fc-day" + (aw * an + av) + (av == ak ? " fc-leftmost" : "") + "'>" + (aD ? "<div class='fc-day-number'></div>" : "") + "<div class='fc-day-content'><div>&nbsp;</div></div></td>"; w(az, 1); if (ab) { T(az) } } aH += "</tr>" } W.append(aH) } } W.find("td.fc-new").removeClass("fc-new").click(V); az = M(ai.visStart); W.find("td").each(function() { var aI = A(this); if (ae > 1) { if (az.getMonth() == ay) { aI.removeClass("fc-other-month") } else { aI.addClass("fc-other-month") } } if (+az == +aB) { aI.removeClass("fc-not-today").addClass("fc-today").addClass(Y + "-state-highlight") } else { aI.addClass("fc-not-today").removeClass("fc-today").removeClass(Y + "-state-highlight") } aI.find("div.fc-day-number").text(az.getDate()); w(az, 1); if (ab) { T(az) } }); if (ae == 1) { az = M(ai.visStart); ap.find("th").each(function() { A(this).text(K(az, ax, aa)); this.className = this.className.replace(/^fc-\w+(?= )/, "fc-" + P[az.getDay()]); w(az, 1); if (ab) { T(az) } }); az = M(ai.visStart); W.find("td").each(function() { this.className = this.className.replace(/^fc-\w+(?= )/, "fc-" + P[az.getDay()]); w(az, 1); if (ab) { T(az) } }) } } ao(aF); aC(Z) } function V(av) { var aw = parseInt(this.className.match(/fc\-day(\d+)/)[1]), au = w(M(ai.visStart), Math.floor(aw / an) * 7 + aw % an); ai.trigger("dayClick", this, au, true, av) } function ao(au) { var av = W.find("tr td:first-child"), aA = au - ap.height(), ay, ax; if (aa.weekMode == "variable") { ay = ax = Math.floor(aA / (ae == 1 ? 2 : 6)) } else { ay = Math.floor(aA / ae); ax = aA - ay * (ae - 1) } D(W); if (E == l) { var aw = W.find("tr:first"), az = aw.find("td:first"); az.height(ay); E = ay != az.height() } if (E) { av.slice(0, -1).height(ay); av.slice(-1).height(ax) } else { h(av.slice(0, -1), ay); h(av.slice(-1), ax) } Q(ap.find("th").slice(0, -1), at = Math.floor(X.width() / an)) } function Z(au) { ai.reportEvents(au); ac(af = ag(au)) } function aq(au) { ai.clearEvents(); if (au) { ac(af) } else { Z(ai.cachedEvents) } } function ag(av) { var ay = M(ai.visStart), aw = w(M(ay), an), ax = [], au = 0; for (; au < ae; au++) { ax.push(F(ai.sliceSegs(av, ay, aw))); w(ay, 7); w(aw, 7) } return ax } function ac(aF) { var aK, aM = aF.length, aA, aw, aB, aQ, aC, aE, aI, aD, aO, aH, aN, aJ, ax, au, aG, ay, aP, aL, av, az; for (aK = 0; aK < aM; aK++) { aA = aF[aK]; aw = W.find("tr:eq(" + aK + ")"); aB = aw.find("td:first"); aQ = aB.find("div.fc-day-content div").css("position", "relative"); aC = I(aQ, aB, aw, W).top; aE = 0; for (aI = 0; aI < aA.length; aI++) { aD = aA[aI]; aO = 0; for (aH = 0; aH < aD.length; aH++) { aN = aD[aH]; aJ = aN.event; ax = "fc-event fc-event-hori "; au = aN.isStart ? aw.find("td:eq(" + ((aN.start.getDay() - Math.max(ah, ab) + an) % an) + ") div div") : W; aG = aN.isEnd ? aw.find("td:eq(" + ((aN.end.getDay() - Math.max(ah, ab) + an - 1) % an) + ") div div") : W; if (ad) { ay = aG.position().left; aP = au.position().left + au.width(); if (aN.isStart) { ax += "fc-corner-right " } if (aN.isEnd) { ax += "fc-corner-left " } } else { ay = au.position().left; aP = aG.position().left + aG.width(); if (aN.isStart) { ax += "fc-corner-left " } if (aN.isEnd) { ax += "fc-corner-right " } } aL = A("<div class='" + ax + aJ.className.join(" ") + "'/>").append(av = A("<a/>").append(aJ.allDay || !aN.isStart ? null : A("<span class='fc-event-time'/>").html(s(aJ.start, aJ.end, ai.option("timeFormat"), aa))).append(A("<span class='fc-event-title'/>").text(aJ.title))); if (aJ.url) { av.attr("href", aJ.url) } az = ai.trigger("eventRender", aJ, aJ, aL); if (az !== false) { if (az && typeof az != "boolean") { aL = A(az) } aL.css({ position: "absolute", top: aC, left: ay + (p || 0), zIndex: 8 }).appendTo(X); Q(aL, aP - ay, true); if (ad && p == l) { p = ay - aL.position().left; if (p) { aL.css("left", ay + p) } } ai.eventElementHandlers(aJ, aL); if (aJ.editable || aJ.editable == l && aa.editable) { aj(aJ, aL); if (aN.isEnd) { ai.resizableDayEvent(aJ, aL, at) } } ai.reportEventElement(aJ, aL); ai.trigger("eventAfterRender", aJ, aJ, aL); aO = Math.max(aO, aL.outerHeight(true)) } } aE += aO; aC += aO } aQ.height(aE) } } function aj(aw, av) { if (!aa.disableDragging && av.draggable) { var au; av.draggable({ zIndex: 9, delay: 50, opacity: ai.option("dragOpacity"), revertDuration: aa.dragRevertDuration, start: function(ay, az) { ai.hideEvents(aw, av); ai.trigger("eventDragStart", av, aw, ay, az); au = new d(function(aA) { av.draggable("option", "revert", !aA || !aA.rowDelta && !aA.colDelta); if (aA) { ai.showOverlay(aA) } else { ai.hideOverlay() } }); W.find("tr").each(function() { au.row(this) }); var ax = W.find("tr:first td"); if (ad) { ax = A(ax.get().reverse()) } ax.each(function() { au.col(this) }); au.mouse(ay.pageX, ay.pageY) }, drag: function(ax) { au.mouse(ax.pageX, ax.pageY) }, stop: function(ay, az) { ai.hideOverlay(); ai.trigger("eventDragStop", av, aw, ay, az); var ax = au.cell; if (!ax || !ax.rowDelta && !ax.colDelta) { if (A.browser.msie) { av.css("filter", "") } ai.showEvents(aw, av) } else { av.find("a").removeAttr("href"); ai.eventDrop(this, aw, ax.rowDelta * 7 + ax.colDelta * al, 0, aw.allDay, ay, az) } } }) } } } J({ allDaySlot: true, allDayText: "all-day", firstHour: 6, slotMinutes: 30, defaultEventMinutes: 120, axisFormat: "h(:mm)tt", timeFormat: { agenda: "h:mm{ - h:mm}" }, dragOpacity: { agenda: 0.5 }, minTime: 0, maxTime: 24 }); e.agendaWeek = function(W, V) { return new t(W, V, { render: function(aa, ac, X, ab) { if (ac) { w(aa, ac * 7) } var Z = this.visStart = M(this.start = w(M(aa), -((aa.getDay() - V.firstDay + 7) % 7))), Y = this.visEnd = M(this.end = w(M(Z), 7)); if (!V.weekends) { T(Z); T(Y, -1, true) } this.title = s(Z, w(M(Y), -1), this.option("titleFormat"), V); this.renderAgenda(V.weekends ? 7 : 5, this.option("columnFormat"), X, ab) } }) }; e.agendaDay = function(W, V) { return new t(W, V, { render: function(Y, aa, X, Z) { if (aa) { w(Y, aa); if (!V.weekends) { T(Y, aa < 0 ? -1 : 1) } } this.title = K(Y, this.option("titleFormat"), V); this.start = this.visStart = M(Y, true); this.end = this.visEnd = w(M(this.start), 1); this.renderAgenda(1, this.option("columnFormat"), X, Z) } }) }; function t(aj, au, az) { var ai, at, ab, al, aE, ad, aa, av, ao, V = [], ap = [], af, aG, aq, an, aB, aF, aD, ay, X, Y = A.extend(this, k, az, { renderAgenda: aw, renderEvents: ac, rerenderEvents: Z, updateSize: am, shown: ag, defaultEventEnd: function(aH) { var aI = M(aH.start); if (aH.allDay) { return aI } return m(aI, au.defaultEventMinutes) }, visEventEnd: function(aI) { if (aI.allDay) { if (aI.end) { var aH = M(aI.end); return (aI.allDay || aH.getHours() || aH.getMinutes()) ? w(aH, 1) : aH } else { return w(M(aI.start), 1) } } if (aI.end) { return M(aI.end) } else { return m(M(aI.start), au.defaultEventMinutes) } } }); Y.init(aj, au); aj.addClass("fc-agenda").css("position", "relative"); if (aj.disableSelection) { aj.disableSelection() } function aw(aO, aK, aR, aQ) { ad = aO; aG = au.theme ? "ui" : "fc"; an = au.weekends ? 0 : 1; aq = au.firstDay; if (aB = au.isRTL) { aF = -1; aD = ad - 1 } else { aF = 1; aD = 0 } ay = a(au.minTime); X = a(au.maxTime); var aH = aB ? w(M(Y.visEnd), -1) : M(Y.visStart), aM = M(aH), aP = u(new Date()); if (!ai) { var aJ, aI, aN = au.slotMinutes % 15 == 0, aS = "<div class='fc-agenda-head' style='position:relative;z-index:4'><table style='width:100%;'><tr class='fc-first" + (au.allDaySlot ? "" : " fc-last") + "'><th class='fc-leftmost " + aG + "-state-default'>&nbsp;</th>"; for (aJ = 0; aJ < ad; aJ++) { aS += "<th class='fc-" + P[aM.getDay()] + " " + aG + "-state-default'>" + K(aM, aK, au) + "</th>"; w(aM, aF); if (an) { T(aM, aF) } } aS += "<th class='" + aG + "-state-default'>&nbsp;</th></tr>"; if (au.allDaySlot) { aS += "<tr class='fc-all-day'><th class='fc-axis fc-leftmost " + aG + "-state-default'>" + au.allDayText + "</th><td colspan='" + ad + "' class='" + aG + "-state-default'><div class='fc-day-content'><div>&nbsp;</div></div></td><th class='" + aG + "-state-default'>&nbsp;</th></tr><tr class='fc-divider fc-last'><th colspan='" + (ad + 2) + "' class='" + aG + "-state-default fc-leftmost'><div/></th></tr>" } aS += "</table></div>"; ai = A(aS).appendTo(aj); ai.find("td").click(W); aM = c(); var aL = m(M(aM), X); m(aM, ay); aS = "<table>"; for (aJ = 0; aM < aL; aJ++) { aI = aM.getMinutes(); aS += "<tr class='" + (aJ == 0 ? "fc-first" : (aI == 0 ? "" : "fc-minor")) + "'><th class='fc-axis fc-leftmost " + aG + "-state-default'>" + ((!aN || aI == 0) ? K(aM, au.axisFormat) : "&nbsp;") + "</th><td class='fc-slot" + aJ + " " + aG + "-state-default'><div>&nbsp;</div></td></tr>"; m(aM, au.slotMinutes) } aS += "</table>"; at = A("<div class='fc-agenda-body' style='position:relative;z-index:2;overflow:auto'/>").append(ab = A("<div style='position:relative;overflow:hidden'>").append(al = A(aS))).appendTo(aj); at.find("td").click(W); aM = M(aH); aS = "<div class='fc-agenda-bg' style='position:absolute;z-index:1'><table style='width:100%;height:100%;'><tr class='fc-first'>"; for (aJ = 0; aJ < ad; aJ++) { aS += "<td class='fc-" + P[aM.getDay()] + " " + aG + "-state-default " + (aJ == 0 ? "fc-leftmost " : "") + (+aM == +aP ? aG + "-state-highlight fc-today" : "fc-not-today") + "'><div class='fc-day-content'><div>&nbsp;</div></div></td>"; w(aM, aF); if (an) { T(aM, aF) } } aS += "</tr></table></div>"; aE = A(aS).appendTo(aj) } else { Y.clearEvents(); ai.find("tr:first th").slice(1, -1).each(function() { A(this).text(K(aM, aK, au)); this.className = this.className.replace(/^fc-\w+(?= )/, "fc-" + P[aM.getDay()]); w(aM, aF); if (an) { T(aM, aF) } }); aM = M(aH); aE.find("td").each(function() { this.className = this.className.replace(/^fc-\w+(?= )/, "fc-" + P[aM.getDay()]); if (+aM == +aP) { A(this).removeClass("fc-not-today").addClass("fc-today").addClass(aG + "-state-highlight") } else { A(this).addClass("fc-not-today").removeClass("fc-today").removeClass(aG + "-state-highlight") } w(aM, aF); if (an) { T(aM, aF) } }) } am(aR); ag(); aQ(ac) } function ag() { var aJ = c(), aH = M(aJ); aH.setHours(au.firstHour); var aI = function() { at.scrollTop(ae(aJ, aH) + 1) }; if (A.browser.opera) { setTimeout(aI, 0) } else { aI() } } function am(aH) { af = aH; al.width(""); at.height(aH - ai.height()); at[0].clientWidth; var aK = ai.find("tr:first th"), aJ = aE.find("td"), aI = at[0].clientWidth; al.width(aI); aa = 0; Q(ai.find("tr:lt(2) th:first").add(at.find("tr:first th")).width("").each(function() { aa = Math.max(aa, A(this).outerWidth()) }), aa); av = Math.floor((aI - aa) / ad); Q(aJ.slice(0, -1), av); Q(aK.slice(1, -2), av); Q(aK.slice(-2, -1), aI - aa - av * (ad - 1)); aE.css({ top: ai.find("tr").height(), left: aa, width: aI - aa, height: aH }); ao = at.find("tr:first div").height() + 1 } function W(aL) { var aJ = Math.floor((aL.pageX - aE.offset().left) / av), aI = w(M(Y.visStart), aD + aF * aJ), aM = this.className.match(/fc-slot(\d+)/); if (aM) { var aK = parseInt(aM[1]) * au.slotMinutes, aH = Math.floor(aK / 60); aI.setHours(aH); aI.setMinutes(aK % 60 + ay); Y.trigger("dayClick", this, aI, false, aL) } else { Y.trigger("dayClick", this, aI, true, aL) } } function ac(aK) { Y.reportEvents(aK); var aJ, aI = aK.length, aL = [], aH = []; for (aJ = 0; aJ < aI; aJ++) { if (aK[aJ].allDay) { aL.push(aK[aJ]) } else { aH.push(aK[aJ]) } } aA(V = F(Y.sliceSegs(aL, Y.visStart, Y.visEnd))); ah(ap = ar(aH)) } function Z(aH) { Y.clearEvents(); if (aH) { aA(V); ah(ap) } else { ac(Y.cachedEvents) } } function ar(aJ) { var aL = m(M(Y.visStart), ay), aK, aH = [], aI = 0; for (; aI < ad; aI++) { aK = F(Y.sliceSegs(aJ, aL, m(M(aL), X - ay))); H(aK); aH.push(aK); w(aL, 1, true) } return aH } function aA(aR) { if (au.allDaySlot) { var aQ = ai.find("td"), a2 = aQ.find("div div"), aI = aQ.parent(), aS = I(a2, aQ, aI, aI.parent()).top, aT = 0, aW, aY = aR.length, aH, a0, aU, aZ, aV, aJ, aK, a3, aN, aP, aM, a1, aX, aL, aO; for (aW = 0; aW < aY; aW++) { aH = aR[aW]; a0 = 0; for (aU = 0; aU < aH.length; aU++) { aZ = aH[aU]; aV = aZ.event; aJ = "fc-event fc-event-hori "; if (aB) { aK = aZ.end.getDay() - 1; a3 = aZ.isEnd; aN = aZ.start.getDay(); aP = aZ.isStart } else { aK = aZ.start.getDay(); a3 = aZ.isStart; aN = aZ.end.getDay() - 1; aP = aZ.isEnd } if (a3) { aJ += "fc-corner-left "; aM = aE.find("td:eq(" + (((aK - Math.max(aq, an) + ad) % ad) * aF + aD) + ") div div").position().left + aa } else { aM = aa } if (aP) { aJ += "fc-corner-right "; a1 = aE.find("td:eq(" + (((aN - Math.max(aq, an) + ad) % ad) * aF + aD) + ") div div"); a1 = a1.position().left + a1.width() + aa } else { a1 = aa + aE.width() } aX = A("<div class='" + aJ + aV.className.join(" ") + "'/>").append(aL = A("<a/>").append(A("<span class='fc-event-title' />").text(aV.title))); if (aV.url) { aL.attr("href", aV.url) } aO = Y.trigger("eventRender", aV, aV, aX); if (aO !== false) { if (aO && typeof aO != "boolean") { aX = A(aO) } aX.css({ position: "absolute", top: aS, left: aM, zIndex: 8 }).appendTo(ai); Q(aX, a1 - aM, true); Y.eventElementHandlers(aV, aX); if (aV.editable || aV.editable == l && au.editable) { ak(aV, aX, aZ.isStart); if (aZ.isEnd) { Y.resizableDayEvent(aV, aX, av) } } Y.reportEventElement(aV, aX); Y.trigger("eventAfterRender", aV, aV, aX); a0 = Math.max(a0, aX.outerHeight(true)) } } aS += a0; aT += a0 } a2.height(aT); am(af) } } function ah(aW) { var aP, aX = aW.length, aN, aL, aH, aS, a0, aR, aY, aT, aQ, a1, aV, aM, aI, aZ, aK, aJ, aU, aO; for (aP = 0; aP < aX; aP++) { aN = aW[aP]; for (aL = 0; aL < aN.length; aL++) { aH = aN[aL]; for (aS = 0; aS < aH.length; aS++) { a0 = aH[aS]; aR = a0.forward || 0; aY = a0.event; aT = ae(a0.start, a0.start); aQ = ae(a0.start, a0.end); a1 = aE.find("td:eq(" + (aP * aF + aD) + ") div div"); availWidth = a1.width(); availWidth = Math.min(availWidth - 6, availWidth * 0.95); if (aL) { aV = availWidth / (aL + aR + 1) } else { if (aR) { aV = ((availWidth / (aR + 1)) - (12 / 2)) * 2 } else { aV = availWidth } } aM = aa + a1.position().left + (availWidth / (aL + aR + 1) * aL) * aF + (aB ? availWidth - aV : 0); aI = "fc-event fc-event-vert "; if (a0.isStart) { aI += "fc-corner-top " } if (a0.isEnd) { aI += "fc-corner-bottom " } aZ = A("<div class='" + aI + aY.className.join(" ") + "' />").append(aK = A("<a><span class='fc-event-bg'/></a>").append(aJ = A("<span class='fc-event-time'/>").text(s(aY.start, aY.end, Y.option("timeFormat")))).append(aU = A("<span class='fc-event-title'/>").text(aY.title))); if (aY.url) { aK.attr("href", aY.url) } aO = Y.trigger("eventRender", aY, aY, aZ); if (aO !== false) { if (aO && typeof aO != "boolean") { aZ = A(aO) } aZ.css({ position: "absolute", zIndex: 8, top: aT, left: aM }).appendTo(ab); Q(aZ, aV, true); h(aZ, aQ - aT, true); if (aZ.height() - aU.position().top < 10) { aJ.text(K(aY.start, Y.option("timeFormat")) + " - " + aY.title); aU.remove() } Y.eventElementHandlers(aY, aZ); if (aY.editable || aY.editable == l && au.editable) { ax(aY, aZ, aJ); if (a0.isEnd) { aC(aY, aZ, aJ) } } } Y.reportEventElement(aY, aZ); Y.trigger("eventAfterRender", aY, aY, aZ) } } } } function ak(aM, aJ, aH) { if (!au.disableDragging && aJ.draggable) { var aL, aO, aK, aN = true, aI; aJ.draggable({ zIndex: 9, opacity: Y.option("dragOpacity", "month"), revertDuration: au.dragRevertDuration, start: function(aP, aQ) { Y.hideEvents(aM, aJ); Y.trigger("eventDragStart", aJ, aM, aP, aQ); aL = aJ.position(); aO = aJ.width(); aK = function() { if (!aN) { aJ.width(aO).height("").draggable("option", "grid", null); aN = true } }; aI = new d(function(aR) { aJ.draggable("option", "revert", !aR || !aR.rowDelta && !aR.colDelta); if (aR) { if (!aR.row) { aK(); Y.showOverlay(aR) } else { if (aH && aN) { h(aJ.width(av - 10), ao * Math.round((aM.end ? ((aM.end - aM.start) / R) : au.defaultEventMinutes) / au.slotMinutes)); aJ.draggable("option", "grid", [av, 1]); aN = false } Y.hideOverlay() } } else { Y.hideOverlay() } }); aI.row(ai.find("td")); aE.find("td").each(function() { aI.col(this) }); aI.row(at); aI.mouse(aP.pageX, aP.pageY) }, drag: function(aP, aQ) { aI.mouse(aP.pageX, aP.pageY) }, stop: function(aR, aS) { Y.hideOverlay(); Y.trigger("eventDragStop", aJ, aM, aR, aS); var aP = aI.cell, aQ = aF * (aN ? (aP ? aP.colDelta : 0) : Math.floor((aS.position.left - aL.left) / av)); if (!aP || !aQ && !aP.rowDelta) { aK(); if (A.browser.msie) { aJ.css("filter", "") } Y.showEvents(aM, aJ) } else { aJ.find("a").removeAttr("href"); Y.eventDrop(this, aM, aQ, aN ? 0 : Math.round((aJ.offset().top - ab.offset().top) / ao) * au.slotMinutes + ay - (aM.start.getHours() * 60 + aM.start.getMinutes()), aN, aR, aS) } } }) } } function ax(aH, aL, aN) { if (!au.disableDragging && aL.draggable) { var aI, aJ, aK, aO, aP = false, aM; aL.draggable({ zIndex: 9, scroll: false, grid: [av, ao], axis: ad == 1 ? "y" : false, opacity: Y.option("dragOpacity"), revertDuration: au.dragRevertDuration, start: function(aQ, aR) { Y.hideEvents(aH, aL); Y.trigger("eventDragStart", aL, aH, aQ, aR); if (A.browser.msie) { aL.find("span.fc-event-bg").hide() } aI = aL.position(); aJ = function() { if (aP) { aN.css("display", ""); aL.draggable("option", "grid", [av, ao]); aP = false } }; aK = 0; aM = new d(function(aS) { aL.draggable("option", "revert", !aS); if (aS) { if (!aS.row && au.allDaySlot) { if (!aP) { aP = true; aN.hide(); aL.draggable("option", "grid", null) } Y.showOverlay(aS) } else { aJ(); Y.hideOverlay() } } else { Y.hideOverlay() } }); if (au.allDaySlot) { aM.row(ai.find("td")) } aE.find("td").each(function() { aM.col(this) }); aM.row(at); aM.mouse(aQ.pageX, aQ.pageY) }, drag: function(aT, aU) { aO = Math.round((aU.position.top - aI.top) / ao); if (aO != aK) { if (!aP) { var aR = aO * au.slotMinutes, aQ = m(M(aH.start), aR), aS; if (aH.end) { aS = m(M(aH.end), aR) } aN.text(s(aQ, aS, Y.option("timeFormat"))) } aK = aO } aM.mouse(aT.pageX, aT.pageY) }, stop: function(aS, aT) { Y.hideOverlay(); Y.trigger("eventDragStop", aL, aH, aS, aT); var aQ = aM.cell, aR = aF * (aP ? (aQ ? aQ.colDelta : 0) : Math.floor((aT.position.left - aI.left) / av)); if (!aQ || !aO && !aR) { aJ(); if (A.browser.msie) { aL.css("filter", "").find("span.fc-event-bg").css("display", "") } aL.css(aI); Y.showEvents(aH, aL) } else { Y.eventDrop(this, aH, aR, aP ? 0 : aO * au.slotMinutes, aP, aS, aT) } } }) } } function aC(aJ, aI, aK) { if (!au.disableResizing && aI.resizable) { var aL, aH; aI.resizable({ handles: "s", grid: ao, start: function(aM, aN) { aL = aH = 0; Y.hideEvents(aJ, aI); if (A.browser.msie && A.browser.version == "6.0") { aI.css("overflow", "hidden") } aI.css("z-index", 9); Y.trigger("eventResizeStart", this, aJ, aM, aN) }, resize: function(aM, aN) { aL = Math.round((Math.max(ao, aI.height()) - aN.originalSize.height) / ao); if (aL != aH) { aK.text(s(aJ.start, (!aL && !aJ.end) ? null : m(Y.eventEnd(aJ), au.slotMinutes * aL), Y.option("timeFormat"))); aH = aL } }, stop: function(aM, aN) { Y.trigger("eventResizeStop", this, aJ, aM, aN); if (aL) { Y.eventResize(this, aJ, 0, au.slotMinutes * aL, aM, aN) } else { aI.css("z-index", 8); Y.showEvents(aJ, aI) } } }).find("div.ui-resizable-s").text("=") } } function ae(aI, aN) { aI = M(aI, true); if (aN < m(M(aI), ay)) { return 0 } if (aN >= m(M(aI), X)) { return ab.height() } var aH = au.slotMinutes, aK = aN.getHours() * 60 + aN.getMinutes() - ay, aJ = Math.floor(aK / aH), aM = at.find("tr:eq(" + aJ + ")"), aO = aM.find("td"), aL = aO.find("div"); return Math.max(0, Math.round(I(aL, aO, aM, aM.parent()).top - 1 + ao * ((aK % aH) / aH))) } } function H(Z) { var X, W, V, ab, aa, Y; for (X = Z.length - 1; X > 0; X--) { ab = Z[X]; for (W = 0; W < ab.length; W++) { aa = ab[W]; for (V = 0; V < Z[X - 1].length; V++) { Y = Z[X - 1][V]; if (v(aa, Y)) { Y.forward = Math.max(Y.forward || 0, (aa.forward || 0) + 1) } } } } } var k = { init: function(W, V) { this.element = W; this.options = V; this.cachedEvents = []; this.eventsByID = {}; this.eventElements = []; this.eventElementsByID = {} }, trigger: function(V, W) { if (this.options[V]) { return this.options[V].apply(W || this, Array.prototype.slice.call(arguments, 2).concat([this])) } }, eventEnd: function(V) { return V.end ? M(V.end) : this.defaultEventEnd(V) }, reportEvents: function(Y) { var X, V = Y.length, Z, W = this.eventsByID = {}, aa = this.cachedEvents = []; for (X = 0; X < V; X++) { Z = Y[X]; if (W[Z._id]) { W[Z._id].push(Z) } else { W[Z._id] = [Z] } aa.push(Z) } }, reportEventElement: function(W, V) { this.eventElements.push(V); var X = this.eventElementsByID; if (X[W._id]) { X[W._id].push(V) } else { X[W._id] = [V] } }, clearEvents: function() { A.each(this.eventElements, function() { this.remove() }); this.eventElements = []; this.eventElementsByID = {} }, showEvents: function(W, V) { this._eee(W, V, "show") }, hideEvents: function(W, V) { this._eee(W, V, "hide") }, _eee: function(Y, X, aa) { var Z = this.eventElementsByID[Y._id], W, V = Z.length; for (W = 0; W < V; W++) { if (Z[W] != X) { Z[W][aa]() } } }, eventDrop: function(X, V, W, Y, ad, aa, Z) { var ab = this, ac = V.allDay; ab.moveEvents(ab.eventsByID[V._id], W, Y, ad); ab.trigger("eventDrop", X, V, W, Y, ad, function() { ab.moveEvents(ab.eventsByID[V._id], -W, -Y, ac); ab.rerenderEvents() }, aa, Z); ab.eventsChanged = true; ab.rerenderEvents() }, eventResize: function(ab, Z, X, W, Y, aa) { var V = this; V.elongateEvents(V.eventsByID[Z._id], X, W); V.trigger("eventResize", ab, Z, X, W, function() { V.elongateEvents(V.eventsByID[Z._id], -X, -W); V.rerenderEvents() }, Y, aa); V.eventsChanged = true; V.rerenderEvents() }, moveEvents: function(Z, X, W, aa) { W = W || 0; for (var ab, V = Z.length, Y = 0; Y < V; Y++) { ab = Z[Y]; if (aa != l) { ab.allDay = aa } m(w(ab.start, X, true), W); if (ab.end) { ab.end = m(w(ab.end, X, true), W) } z(ab, this.options) } }, elongateEvents: function(Z, X, W) { W = W || 0; for (var aa, V = Z.length, Y = 0; Y < V; Y++) { aa = Z[Y]; aa.end = m(w(this.eventEnd(aa), X, true), W); z(aa, this.options) } }, showOverlay: function(V) { if (!this.dayOverlay) { this.dayOverlay = A("<div class='fc-cell-overlay' style='position:absolute;z-index:3;display:none'/>").appendTo(this.element) } var W = this.element.offset(); this.dayOverlay.css({ top: V.top - W.top, left: V.left - W.left, width: V.width, height: V.height }).show() }, hideOverlay: function() { if (this.dayOverlay) { this.dayOverlay.hide() } }, resizableDayEvent: function(Y, W, X) { var V = this; if (!V.options.disableResizing && W.resizable) { W.resizable({ handles: V.options.isRTL ? "w" : "e", grid: X, minWidth: X / 2, containment: V.element.parent().parent(), start: function(Z, aa) { W.css("z-index", 9); V.hideEvents(Y, W); V.trigger("eventResizeStart", this, Y, Z, aa) }, stop: function(aa, ab) { V.trigger("eventResizeStop", this, Y, aa, ab); var Z = Math.round((W.width() - ab.originalSize.width) / X); if (Z) { V.eventResize(this, Y, Z, 0, aa, ab) } else { W.css("z-index", 8); V.showEvents(Y, W) } } }) } }, eventElementHandlers: function(X, W) { var V = this; W.click(function(Y) { if (!W.hasClass("ui-draggable-dragging") && !W.hasClass("ui-resizable-resizing")) { return V.trigger("eventClick", this, X, Y) } }).hover(function(Y) { V.trigger("eventMouseover", this, X, Y) }, function(Y) { V.trigger("eventMouseout", this, X, Y) }) }, option: function(W, X) { var V = this.options[W]; if (typeof V == "object") { return i(V, X || this.name) } return V }, sliceSegs: function(ag, X, aa) { var Y = [], ab, ad = ag.length, W, ae, ac, af, ah, V, Z; for (ab = 0; ab < ad; ab++) { W = ag[ab]; ae = W.start; ac = this.visEventEnd(W); if (ac > X && ae < aa) { if (ae < X) { af = M(X); V = false } else { af = ae; V = true } if (ac > aa) { ah = M(aa); Z = false } else { ah = ac; Z = true } Y.push({ event: W, start: af, end: ah, isStart: V, isEnd: Z, msLength: ah - af }) } } return Y.sort(x) } }; function F(X) { var ab = [], aa, V = X.length, W, Z, ac, Y; for (aa = 0; aa < V; aa++) { W = X[aa]; Z = 0; while (true) { ac = false; if (ab[Z]) { for (Y = 0; Y < ab[Z].length; Y++) { if (v(ab[Z][Y], W)) { ac = true; break } } } if (ac) { Z++ } else { break } } if (ab[Z]) { ab[Z].push(W) } else { ab[Z] = [W] } } return ab } function x(W, V) { return (V.msLength - W.msLength) * 100 + (W.event.start - V.event.start) } function v(W, V) { return W.end > V.start && W.start < V.end } var O = 86400000, o = 3600000, R = 60000; function S(W, X, V) { W.setFullYear(W.getFullYear() + X); if (!V) { u(W) } return W } function n(Y, Z, X) { if (+Y) { var V = Y.getMonth() + Z, W = M(Y); W.setDate(1); W.setMonth(V); Y.setMonth(V); if (!X) { u(Y) } while (Y.getMonth() != W.getMonth()) { Y.setDate(Y.getDate() + (Y < W ? 1 : -1)) } } return Y } function w(Y, Z, X) { if (+Y) { var V = Y.getDate() + Z, W = M(Y); W.setHours(9); W.setDate(V); Y.setDate(V); if (!X) { u(Y) } q(Y, W) } return Y } G.addDays = w; function q(W, V) { if (+W) { while (W.getDate() != V.getDate()) { W.setTime(+W + (W < V ? 1 : -1) * o) } } } function m(V, W) { V.setMinutes(V.getMinutes() + W); return V } function u(V) { V.setHours(0); V.setMinutes(0); V.setSeconds(0); V.setMilliseconds(0); return V } function M(V, W) { if (W) { return u(new Date(+V)) } return new Date(+V) } function c() { var V = 0, W; do { W = new Date(1970, V++, 1) } while (W.getHours() != 0); return W } function T(V, W, X) { W = W || 1; while (V.getDay() == 0 || (X && V.getDay() == 1 || !X && V.getDay() == 6)) { w(V, W) } return V } var f = G.parseDate = function(V) { if (typeof V == "object") { return V } if (typeof V == "number") { return new Date(V * 1000) } if (typeof V == "string") { if (V.match(/^\d+$/)) { return new Date(parseInt(V) * 1000) } return j(V, true) || (V ? new Date(V) : null) } return null }; var j = G.parseISO8601 = function(Z, W) { var V = Z.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 (!V) { return null } var Y = new Date(V[1], 0, 1), X = new Date(V[1], 0, 1, 9, 0), aa = 0; if (V[3]) { Y.setMonth(V[3] - 1); X.setMonth(V[3] - 1) } if (V[5]) { Y.setDate(V[5]); X.setDate(V[5]) } q(Y, X); if (V[7]) { Y.setHours(V[7]) } if (V[8]) { Y.setMinutes(V[8]) } if (V[10]) { Y.setSeconds(V[10]) } if (V[12]) { Y.setMilliseconds(Number("0." + V[12]) * 1000) } q(Y, X); if (!W) { if (V[14]) { aa = Number(V[16]) * 60 + Number(V[17]); aa *= V[15] == "-" ? 1 : -1 } aa -= Y.getTimezoneOffset() } return new Date(+Y + (aa * 60 * 1000)) }; var a = G.parseTime = function(X) { if (typeof X == "number") { return X * 60 } if (typeof X == "object") { return X.getHours() * 60 + X.getMinutes() } var V = X.match(/(\d+)(?::(\d+))?\s*(\w+)?/); if (V) { var W = parseInt(V[1]); if (V[3]) { W %= 12; if (V[3].toLowerCase().charAt(0) == "p") { W += 12 } } return W * 60 + (V[2] ? parseInt(V[2]) : 0) } }; var K = G.formatDate = function(W, X, V) { return s(W, null, X, V) }; var s = G.formatDates = function(ah, ag, af, ai) { ai = ai || C; var W = ah, Y = ag, Z, aa = af.length, ac, X, ae, ab = ""; for (Z = 0; Z < aa; Z++) { ac = af.charAt(Z); if (ac == "'") { for (X = Z + 1; X < aa; X++) { if (af.charAt(X) == "'") { if (W) { if (X == Z + 1) { ab += "'" } else { ab += af.substring(Z + 1, X) } Z = X } break } } } else { if (ac == "(") { for (X = Z + 1; X < aa; X++) { if (af.charAt(X) == ")") { var V = K(W, af.substring(Z + 1, X), ai); if (parseInt(V.replace(/\D/, ""))) { ab += V } Z = X; break } } } else { if (ac == "[") { for (X = Z + 1; X < aa; X++) { if (af.charAt(X) == "]") { var ad = af.substring(Z + 1, X); var V = K(W, ad, ai); if (V != K(Y, ad, ai)) { ab += V } Z = X; break } } } else { if (ac == "{") { W = ag; Y = ah } else { if (ac == "}") { W = ah; Y = ag } else { for (X = aa; X > Z; X--) { if (ae = r[af.substring(Z, X)]) { if (W) { ab += ae(W, ai) } Z = X - 1; break } } if (X == Z) { if (W) { ab += ac } } } } } } } } return ab }; var r = { s: function(V) { return V.getSeconds() }, ss: function(V) { return N(V.getSeconds()) }, m: function(V) { return V.getMinutes() }, mm: function(V) { return N(V.getMinutes()) }, h: function(V) { return V.getHours() % 12 || 12 }, hh: function(V) { return N(V.getHours() % 12 || 12) }, H: function(V) { return V.getHours() }, HH: function(V) { return N(V.getHours()) }, d: function(V) { return V.getDate() }, dd: function(V) { return N(V.getDate()) }, ddd: function(W, V) { return V.dayNamesShort[W.getDay()] }, dddd: function(W, V) { return V.dayNames[W.getDay()] }, M: function(V) { return V.getMonth() + 1 }, MM: function(V) { return N(V.getMonth() + 1) }, MMM: function(W, V) { return V.monthNamesShort[W.getMonth()] }, MMMM: function(W, V) { return V.monthNames[W.getMonth()] }, yy: function(V) { return (V.getFullYear() + "").substring(2) }, yyyy: function(V) { return V.getFullYear() }, t: function(V) { return V.getHours() < 12 ? "a" : "p" }, tt: function(V) { return V.getHours() < 12 ? "am" : "pm" }, T: function(V) { return V.getHours() < 12 ? "A" : "P" }, TT: function(V) { return V.getHours() < 12 ? "AM" : "PM" }, u: function(V) { return K(V, "yyyy-MM-dd'T'HH:mm:ss'Z'") }, S: function(W) { var V = W.getDate(); if (V > 10 && V < 20) { return "th" } return ["st", "nd", "rd"][V % 10 - 1] || "th" } }; function Q(W, X, V) { W.each(function() { var Z = A(this); var Y = X - U(Z); if (V) { Y -= (parseInt(Z.css("margin-left")) || 0) + (parseInt(Z.css("margin-right")) || 0) } Z.width(Y) }) } function U(V) { return (parseInt(V.css("border-left-width")) || 0) + (parseInt(V.css("padding-left")) || 0) + (parseInt(V.css("padding-right")) || 0) + (parseInt(V.css("border-right-width")) || 0) } function h(X, V, W) { X.each(function() { var Z = A(this); var Y = V - g(Z); if (W) { Y -= (parseInt(Z.css("margin-top")) || 0) + (parseInt(Z.css("margin-bottom")) || 0) } Z.height(Y) }) } function g(V) { return (parseInt(V.css("border-top-width")) || 0) + (parseInt(V.css("padding-top")) || 0) + (parseInt(V.css("padding-bottom")) || 0) + (parseInt(V.css("border-bottom-width")) || 0) } var y; function D(V) { if (y == l) { y = V.position().top != V.find("tr").position().top } } function I(X, Z, Y, W) { var V = X.position(); if (y) { V.top += W.position().top + Y.position().top - Z.position().top } return V } function d(X) { var ac = [], V = [], ab, aa, Y, Z, ad, W; this.row = function(af, ae) { ab = A(af); ac.push(ab.offset().top + ((y && ab.is("tr")) ? ab.parent().position().top : 0)) }; this.col = function(ae) { aa = A(ae); V.push(aa.offset().left) }; this.mouse = function(ae, ah) { if (Y == l) { ac.push(ac[ac.length - 1] + ab.outerHeight()); V.push(V[V.length - 1] + aa.outerWidth()); ad = W = -1 } var af, ag; for (af = 0; af < ac.length && ah >= ac[af]; af++) { } for (ag = 0; ag < V.length && ae >= V[ag]; ag++) { } af = af >= ac.length ? -1 : af - 1; ag = ag >= V.length ? -1 : ag - 1; if (af != ad || ag != W) { ad = af; W = ag; if (af == -1 || ag == -1) { this.cell = null } else { if (Y == l) { Y = af; Z = ag } this.cell = { row: af, col: ag, top: ac[af], left: V[ag], width: V[ag + 1] - V[ag], height: ac[af + 1] - ac[af], isOrig: af == Y && ag == Z, rowDelta: af - Y, colDelta: ag - Z} } X(this.cell) } } } var l, P = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"]; function N(V) { return (V < 10 ? "0" : "") + V } function i(Z, V) { if (Z[V] != l) { return Z[V] } var Y = V.split(/(?=[A-Z])/), X = Y.length - 1, W; for (; X >= 0; X--) { W = Z[Y[X].toLowerCase()]; if (W != l) { return W } } return Z[""] } })(jQuery);