{"version":3,"sources":["fullcalendar.js","locale-all.js"],"names":["factory","define","amd","exports","module","require","jQuery","moment","$","mergeOptions","optionObjs","mergeProps","complexOptions","compensateScroll","rowEls","scrollbarWidths","left","css","border-left-width","margin-left","right","border-right-width","margin-right","uncompensateScroll","disableCursor","addClass","enableCursor","removeClass","distributeHeight","els","availableHeight","shouldRedistribute","minOffset1","Math","floor","length","minOffset2","flexEls","flexOffsets","flexHeights","usedHeight","undistributeHeight","each","i","el","minOffset","naturalOffset","outerHeight","push","height","naturalHeight","newHeight","matchCellWidths","maxInnerWidth","find","innerEl","innerWidth","outerWidth","width","subtractInnerElHeight","outerEl","diff","both","add","position","getScrollParent","scrollParent","parents","filter","parent","this","test","eq","ownerDocument","document","getOuterRect","origin","offset","top","bottom","getClientRect","getScrollbarWidths","getCssFloat","clientWidth","clientHeight","getContentRect","widths","leftRightWidth","offsetWidth","bottomWidth","offsetHeight","sanitizeScrollbarWidth","getIsLeftRtlScrollbars","max","round","_isLeftRtlScrollbars","computeIsLeftRtlScrollbars","border","padding","overflow","direction","appendTo","children","res","remove","prop","parseFloat","isPrimaryMouseButton","ev","which","ctrlKey","getEvX","touches","originalEvent","pageX","getEvY","pageY","getEvIsTouch","type","preventSelection","on","preventDefault","allowSelection","off","intersectRects","rect1","rect2","min","constrainPoint","point","rect","getRectCenter","diffPoints","point1","point2","parseFieldSpecs","input","token","specs","tokens","split","isArray","charAt","field","substring","order","func","compareByFieldSpecs","obj1","obj2","fieldSpecs","cmp","compareByFieldSpec","fieldSpec","flexibleCompare","a","b","String","localeCompare","diffDayTime","duration","days","clone","stripTime","ms","time","diffDay","diffByUnit","unit","computeGreatestUnit","start","end","val","unitsDesc","computeRangeAs","isInt","computeDurationGreatestUnit","durationInput","isDuration","as","divideRangeByDuration","dur","months","durationHasTime","asMonths","abs","asDays","divideDurationByDuration","dur1","dur2","months1","months2","multiplyDuration","n","Boolean","hours","minutes","seconds","milliseconds","isNativeDate","Object","prototype","toString","call","Date","isTimeString","str","propObjs","complexProps","name","complexObjs","j","props","dest","unshift","undefined","copyOwnProps","src","hasOwnProp","obj","hasOwnPropMethod","applyAll","functions","thisObj","args","isFunction","ret","apply","removeMatching","array","testFunc","removeCnt","splice","removeExact","exactVal","firstDefined","arguments","htmlEscape","s","replace","stripHtmlEntities","text","cssToStr","cssProps","statements","join","attrsToStr","attrs","parts","capitaliseFirstLetter","toUpperCase","slice","compareNumbers","proxy","methodName","method","debounce","wait","immediate","timeout","context","timestamp","result","later","last","setTimeout","callNow","makeMoment","parseAsUTC","parseZone","isAmbigTime","isAmbigZone","ambigMatch","mom","isSingleString","isMoment","ambigDateOfMonthRegex","ambigTimeOrZoneRegex","exec","utc","_ambigTime","_ambigZone","utcOffset","_fullCalendar","englishMoment","locale","Class","extendClass","superClass","members","subClass","constructor","create","attachImmediatelyResolvingThen","promise","then","onResolve","Promise","resolve","attachImmediatelyRejectingThen","onReject","isHitsEqual","hit0","hit1","component","isHitPropsWithin","subHit","superHit","propName","getDraggedElMeta","eventProps","startTime","stick","prefix","FC","dataAttrPrefix","data","extend","isDaySegCollision","seg","otherSegs","otherSeg","leftCol","rightCol","compareDaySegCols","buildSlotSegLevels","segs","levels","computeSlotSegCollisions","level","computeForwardSlotSegs","k","forwardSegs","computeSlotSegPressures","forwardSeg","forwardPressure","results","isSlotSegCollision","seg1","seg2","convertEventsPayloadToLegacyArray","eventsPayload","id","eventInstances","legacyEvents","toLegacy","Iterator","items","Toolbar","calendar","toolbarOptions","setToolbarOptions","newToolbarOptions","render","sections","layout","empty","extraClasses","append","renderSection","removeElement","t","theme","sectionEl","buttonStr","calendarCustomButtons","opt","calendarButtonTextOverrides","overrides","buttonText","calendarButtonText","groupEl","groupChildren","isOnlyButtons","buttonName","customButtonProps","viewSpec","buttonClick","buttonIcon","buttonInnerHtml","buttonClasses","buttonEl","click","getCustomButtonIconClass","getIconClass","getViewSpec","viewsWithButtons","changeView","buttonTextOverride","buttonTextDefault","getClass","hasClass","mousedown","not","mouseup","hover","first","updateTitle","activateButton","deactivateButton","disableButton","enableButton","getViewsWithButtons","isOverlapsAllowedByFunc","overlapEventFootprints","overlapFunc","subjectEventInstance","eventInstance","isOverlapEventInstancesAllowed","overlapEventInstance","overlapEventDef","overlapVal","subjectLegacyInstance","def","getOverlap","filterLegacyEventInstances","legacyEventInstances","legacyQuery","legacyEventInstance","populateInstanceComputableOptions","options","instanceComputableOptions","getMomentLocaleData","localeCode","localeData","invertUnzonedRanges","ranges","constraintRange","dateRange","invertedRanges","startMs","sort","compareUnzonedRanges","UnzonedRange","endMs","range1","range2","isSourcesEquivalent","source0","source1","getPrimitive","eventDefsToEventInstances","eventDefs","unzonedRange","buildInstances","eventInstancesToEventRanges","map","EventRange","dateProfile","eventInstancesToUnzonedRanges","eventFootprintsToComponentFootprints","eventFootprints","eventFootprint","componentFootprint","fullCalendar","version","internalApiVersion","fcViews","views","fn","Array","_element","singleRes","element","destroy","removeData","warn","Calendar","dayIDs","log","console","window","hasOwnProperty","newMomentProto","oldMomentProto","momentProperties","hasTime","week","weeks","weekCalc","_locale","_fullCalendar_weekCalc","isoWeek","dayHours","set","stripZone","wasAmbigTime","hasZone","local","keepLocalTime","tzo","format","formatDate","oldMomentFormat","toISOString","date","formatStr","renderFakeFormatString","getParsedFormatString","fakeFormatString","formatRange","date1","date2","separator","isRTL","longDateFormat","renderParsedFormat","parsedFormat","leftI","rightI","middleI","sameUnits","unzonedDate1","unzonedDate2","renderedParts1","renderFakeFormatStringParts","renderedParts2","leftStr","rightStr","middleStr1","middleStr2","middleStr","isSame","processMaybeMarkers","parsedFormatStrCache","parseFormatString","chunks","chunkFormatString","buildFakeFormatString","buildSameUnits","match","chunker","splitStringLiteral","maybe","chunk","specialTokens","SPECIAL_TOKEN_MARKER","MAYBE_MARKER","PART_SEPARATOR","tokenInfo","units","largeTokenMap","fakePart","fakeRender","fakeParts","MAYBE_REGEXP","m0","m1","queryMostGranularFormatUnit","candidate","best","value","RegExp","T","Y","M","W","w","D","d","mixin","EmitterMixin","types","handler","_prepareIntercept","one","intercept","extra","guid","trigger","triggerHandler","triggerWith","hasHandlers","hash","_data","ListenerMixin","listenerId","listenTo","other","arg","callback","eventName","getListenerNamespace","stopListeningTo","ParsableModelMixin","standardPropMap","applyRawProps","rawProps","manualProps","otherProps","applyOtherRawProps","applyManualRawProps","ParsableModelMixin_allowRawProps","propDefs","proto","ParsableModelMixin_copyVerbatimStandardProps","Model","_props","_watchers","_globalWatchArgs","applyGlobalWatchers","argSets","watch","has","get","newProps","setProps","reset","oldProps","changeset","unset","names","changedProps","changedCnt","depList","startFunc","stopFunc","_this","unwatch","_watchDeps","deps","watcher","teardown","onBeforeDepChange","depName","isOptional","queuedChangeCnt","satisfyCnt","depCnt","isCallingStop","onDepChange","values","bind","bindTuples","forEach","flash","construct","executor","deferred","Deferred","reject","TaskQueue","q","isPaused","isRunning","queue","tryStart","pause","resume","canRunNext","runNext","runTask","shift","task","runTaskFunc","taskFunc","done","RenderQueue","waitsByNamespace","waitNamespace","waitId","namespace","waitMs","delayWait","clearWait","compoundTask","startWait","spawnWait","clearTimeout","newTask","shouldAppend","pop","Popover","isHidden","margin","show","hide","className","content","parentEl","autoHide","documentMousedown","target","closest","viewportTop","viewportLeft","viewportOffset","offsetParent","windowEl","viewportEl","is","scrollTop","scrollLeft","viewportConstrain","CoordCache","forcedOffsetParentEl","boundingRect","isHorizontal","isVertical","lefts","rights","tops","bottoms","build","offsetParentEl","queryBoundingRect","buildElHorizontals","buildElVerticals","clear","ensureBuilt","node","getHorizontalIndex","leftOffset","len","getVerticalIndex","topOffset","getLeftOffset","leftIndex","getLeftPosition","getRightOffset","getRightPosition","getWidth","getTopOffset","topIndex","getTopPosition","getBottomOffset","getBottomPosition","getHeight","scrollParentEl","isPointInBounds","isLeftInBounds","isTopInBounds","DragListener","subjectEl","originX","originY","scrollEl","isInteracting","isDistanceSurpassed","isDelayEnded","isDragging","isTouch","isGeneric","delay","delayTimeoutId","minDistance","shouldCancelTouchScroll","scrollAlwaysKills","startInteraction","extraOptions","GlobalEmitter","shouldIgnoreMouse","distance","bindHandlers","initAutoScroll","handleInteractionStart","startDelay","handleDistanceSurpassed","endInteraction","isCancelled","endDrag","destroyAutoScroll","unbindHandlers","handleInteractionEnd","globalEmitter","drag","handleMove","dragstop","touchmove","handleTouchMove","touchend","scroll","handleTouchScroll","mousemove","handleMouseMove","selectstart","contextmenu","startDrag","handleDragStart","distanceSq","dx","dy","handleDrag","updateAutoScroll","handleDragEnd","initialEv","handleDelayEnd","isAutoScroll","scrollBounds","scrollTopVel","scrollLeftVel","scrollIntervalId","scrollSensitivity","scrollSpeed","scrollIntervalMs","handleDebouncedScroll","endAutoScroll","computeScrollBounds","topCloseness","bottomCloseness","leftCloseness","rightCloseness","sensitivity","bounds","topVel","leftVel","setScrollVel","constrainScrollVel","setInterval","scrollHeight","scrollWidth","scrollIntervalFunc","frac","clearInterval","handleScrollEnd","HitDragListener","origHit","hit","coordAdjust","subjectRect","origPoint","hitsNeeded","queryHit","subjectCenter","handleHitOver","handleHitOut","handleHitDone","isOrig","hitsNotNeeded","releaseHits","prepareHits","touchMouseIgnoreWait","isTouching","mouseIgnoreDepth","handleScrollProxy","touchstart","handleTouchStart","touchcancel","handleTouchCancel","handleTouchEnd","handleMouseDown","handleMouseUp","handleClick","handleSelectStart","handleContextMenu","addEventListener","handleTouchMoveProxy","Event","passive","handleScroll","unbind","removeEventListener","stopTouch","skipMouseIgnore","startTouchMouseIgnore","neededCount","needed","unneeded","MouseFollower","sourceEl","top0","left0","y0","x0","topDelta","leftDelta","isFollowing","isAnimating","updatePosition","stop","shouldRevert","complete","revertDuration","animate","getEl","additionalClass","visibility","display","opacity","zIndex","sourceOffset","ChronoComponent","nextDayThreshold","addChild","chronoComponent","publiclyTrigger","_getCalendar","hasPublicHandlers","setElement","bindGlobalHandlers","renderSkeleton","unrenderSkeleton","unbindGlobalHandlers","renderDates","unrenderDates","getNowIndicatorUnit","renderNowIndicator","callChildren","unrenderNowIndicator","renderBusinessHours","unrenderBusinessHours","renderEventsPayload","unrenderEvents","getEventSegs","renderDrag","childDragEls","dragEls","unrenderDrag","renderSelectionFootprint","unrenderSelection","isEventDefDraggable","eventDef","isEventDefStartEditable","isEditable","isStartExplicitlyEditable","isEventDefGenerallyEditable","isExplicitlyEditable","isEventDefResizableFromStart","isEventDefResizable","isEventDefResizableFromEnd","isResizable","isDurationExplicitlyEditable","renderFgSegs","unrenderFgSegs","renderFgSegEls","disableResizing","hasEventRenderHandlers","html","renderedSegs","fgSegHtml","filterEventRenderEl","footprint","legacy","getEventLegacy","custom","_getView","buildGotoAnchorHtml","gotoOptions","innerHtml","forceOff","finalOptions","isPlainObject","JSON","stringify","range","isAllDay","subtract","getAllDayHtml","getDayClasses","noThemeHighlight","today","view","classes","activeUnzonedRange","containsDate","day","isDateInOtherMonth","getNow","computeDayRange","startDay","msToUtcMoment","endTimeMS","endDay","isMultiDayRange","dayRange","child","Grid","hasDayInteractions","hitsNeededDepth","dayClickListener","daySelectListener","segDragListener","segResizeListener","externalDragListener","initFillInternals","buildDayClickListener","buildDaySelectListener","setRange","rangeUpdated","processRangeOptions","displayEventTime","displayEventEnd","eventTimeFormat","computeEventTimeFormat","computeDisplayEventTime","computeDisplayEventEnd","getSafeHitFootprint","getHitFootprint","containsRange","getHitEl","bindDayHandler","dayTouchStart","dayMousedown","bindSegHandlers","segSelector","clearDragListeners","dragstart","externalDragStart","sortstart","selectLongPressDelay","isSelected","selectedEvent","renderHighlight","renderFill","componentFootprintToSegs","unrenderHighlight","unrenderFill","eventRangesToEventFootprints","eventRanges","eventRangeToEventFootprints","eventRange","EventFootprint","ComponentFootprint","eventFootprintsToSegs","eventFootprintToSegs","intersect","isStart","isEnd","dayClickHit","dragListener","interactionStart","hitOver","hitOut","interactionEnd","triggerDayClick","selectionFootprint","dragStart","unselect","origHitFootprint","hitFootprint","computeSelection","hitDone","reportSelection","footprint0","footprint1","wholeFootprint","computeSelectionFootprint","isSelectionFootprintAllowed","validUnzonedRange","businessHoursSegClasses","buildBusinessHourSegs","wholeDay","buildBusinessHourEventFootprints","_buildBusinessHourEventFootprints","businessHourDef","eventInstanceGroup","buildBusinessInstanceGroup","sliceRenderRanges","eventRenderRanges","eventSegs","bgSegs","fgSegs","getEventDef","hasBgRendering","concat","renderBgSegs","handleSegMouseout","unrenderBgSegs","bgEventSegEl","bgEventSegClasses","source","bgEventSegCss","background-color","getSegSkinCss","getEventTimeText","displayEnd","_getEventTimeText","getSegClasses","isDraggable","getSegCustomClasses","isEventDefSelected","getSegBackgroundColor","border-color","getSegBorderColor","color","getSegTextColor","backgroundColor","getSegDefaultBackgroundColor","borderColor","getSegDefaultBorderColor","textColor","getSegDefaultTextColor","sortEventSegs","compareEventSegs","f1","r1","f2","r2","eventOrderSpecs","mousedOverSeg","largeUnit","diffDates","bindSegHandlersToEl","bindSegHandlerToEl","handleSegTouchStart","handleSegMouseover","handleSegMousedown","handleSegClick","isDraggingSeg","isResizingSeg","isResizing","startSegResize","buildSegDragListener","eventLongPressDelay","buildSegSelectListener","selectEventInstance","isEventInstanceGroupAllowed","getAllEventRanges","renderHelperEventFootprints","sourceSeg","renderHelperEventFootprintEls","unrenderHelper","fabricateEventFootprint","dummyInstance","eventDateProfile","footprintToDateProfile","dummyEvent","SingleEventDef","EventSource","buildInstance","mouseFollower","eventDefMutation","eventManager","segDragStart","hideEventsWithId","origFootprint","mutatedEventInstanceGroup","dragHelperEls","isAllowed","computeEventDropMutation","buildMutatedEventInstanceGroup","applyDragOpacity","segDragStop","reportEventDrop","showEventsWithId","startFootprint","endFootprint","dateDelta","dateMutation","date0","getStart","clearEnd","forceTimed","forceAllDay","EventDefDateMutation","setDateDelta","EventDefMutation","setDateMutation","dragOptions","buildSegResizeListener","resizeMutation","segResizeStart","computeEventStartResizeMutation","computeEventEndResizeMutation","isEmpty","renderEventResize","unrenderEventResize","segResizeStop","reportEventResize","origEventFootprint","origRange","startDelta","getEnd","setStartDelta","endDelta","setEndDelta","isDraggingExternal","ui","accept","item","listenToExternalDrag","singleEventDef","meta","computeExternalDrop","EventInstanceGroup","isExternalInstanceGroupAllowed","reportExternalDrop","applyTimezone","parse","elsByFill","renderFillSegEls","segElMethod","fillSegHtml","fillSegTag","classesMethod","cssMethod","highlightSegClasses","DayTableMixin","breakOnWeeks","dayDates","dayIndices","daysPerRow","rowCnt","colCnt","colHeadFormat","updateDayTable","firstDay","dayIndex","isBefore","isHiddenDay","ceil","updateDayTableCols","computeColCnt","computeColHeadFormat","getCellDate","row","col","getCellDayIndex","getCellRange","getColDayIndex","getDateDayIndex","dayOffset","sliceRangeByRow","rowFirst","rowLast","segFirst","segLast","normalRange","rangeFirst","rangeLast","firstRowDayIndex","lastRowDayIndex","sliceRangeByDay","renderHeadHtml","renderHeadTrHtml","renderHeadIntroHtml","renderIntroHtml","renderHeadDateCellsHtml","htmls","renderHeadDateCellHtml","colspan","otherAttrs","isDateValid","classNames","renderBgTrHtml","renderBgIntroHtml","renderBgCellsHtml","renderBgCellHtml","bookendCells","trEl","introHtml","prepend","DayGrid","numbersVisible","bottomCoordPadding","cellEls","helperEls","rowCoordCache","colCoordCache","isRigid","renderDayRowHtml","getCellEl","removeSegPopover","renderNumberTrHtml","renderNumberIntroHtml","renderNumberCellsHtml","renderNumberCellHtml","weekCalcFirstDoW","isDayNumberVisible","dayNumbersVisible","cellWeekNumbersVisible","firstDayOfWeek","class","getCellHit","rowStructs","helperNodes","renderSegRows","rowNode","skeletonTop","rowEl","skeletonEl","tbodyEl","nodes","renderFillRow","startCol","endCol","toLowerCase","attr","popoverSegs","allDaySegs","grep","rowStruct","segRows","groupSegRows","renderSegRow","timeText","titleHtml","isResizableFromStart","isResizableFromEnd","skinCss","timeHtml","title","url","rowSegs","emptyCellsUntil","td","loneCellMatrix","parseInt","tr","cellMatrix","levelSegs","segLevels","buildSegLevels","levelCnt","tbody","segMatrix","segPopover","limitRows","levelLimit","rowLevelLimit","unlimitRow","computeRowLevelLimit","limitRow","iterInnerHeights","childNode","trHeight","rowHeight","trEls","segsBelow","getCellSegs","moreLink","renderMoreLink","moreWrap","moreNodes","limitedNodes","totalSegsBelow","colSegsBelow","rowspan","segMoreNodes","moreTd","after","moreEls","limitedEls","hiddenSegs","getMoreLinkText","clickOption","moreEl","dayEl","allSegs","reslicedAllSegs","resliceDaySegs","reslicedHiddenSegs","showSegPopover","zoomTo","topEl","renderSegPopoverContent","segContainer","dayDate","dayStart","dayEnd","newSegs","num","startLevel","TimeGrid","dayRanges","slotDuration","snapDuration","snapsPerSlot","labelFormat","labelInterval","colEls","slatContainerEl","slatEls","nowIndicatorEls","slatCoordCache","processOptions","renderHtml","renderContentSkeleton","renderSlatRowHtml","slotDate","isLabeled","axisHtml","slotTime","minTime","slotIterator","maxTime","axisStyleAttr","computeLabelInterval","slotsPerLabel","AGENDA_STOCK_SUB_DURATIONS","colIndex","slatIndex","slatTop","slatHeight","partial","localSnapIndex","snapIndex","snapTop","snapBottom","snap","computeSnapTime","sliceRangeByTimes","segRange","updateSize","isResize","updateSegVerticals","businessSegs","getTotalSlatHeight","computeDateTop","startOfDayDate","computeTimeTop","slatRemainder","slatCoverage","renderHelperSegs","unrenderHelperSegs","renderBusinessSegs","unrenderBusinessSegs","valueOf","colContainerEls","renderHighlightSegs","unrenderHighlightSegs","fgContainerEls","bgContainerEls","helperContainerEls","highlightContainerEls","businessContainerEls","helperSegs","highlightSegs","cellHtml","renderFgSegsIntoContainers","unrenderNamedSegs","attachSegsByCol","groupSegsByCol","segsByCol","containerEls","updateFgSegCoords","fullTimeText","startTimeText","zonedStart","msToMoment","zonedEnd","computeSegVerticals","assignSegVerticals","generateSegVerticalCss","computeFgSegHorizontals","assignFgSegHorizontals","level0","computeFgSegForwardBack","seriesBackwardPressure","seriesBackwardCoord","forwardCoord","sortForwardSegs","backwardCoord","compareForwardSegs","generateFgSegHorizontalCss","shouldOverlap","View","renderQueue","batchRenderDepth","isDatesRendered","isEventsRendered","isBaseRendered","queuedScroll","selectedEventInstance","isHiddenDayHash","isNowIndicatorRendered","initialNowDate","initialNowQueriedMs","nowIndicatorTimeoutID","nowIndicatorIntervalID","initHiddenDays","buildRenderQueue","initAutoBatchRender","initialize","event","freezeHeight","addScroll","queryScroll","thawHeight","popScroll","startBatchRender","stopBatchRender","computeTitle","currentRangeUnit","currentUnzonedRange","isRangeAllDay","computeTitleFormat","currentRangeAs","bindBaseRenderHandlers","unsetDate","unbindBaseRenderHandlers","setDate","currentDateProfile","newDateProfile","buildDateProfile","equals","requestDateRender","executeDateRender","requestDateUnrender","executeDateUnrender","fetchInitialEvents","usesMinMaxTime","requestEvents","bindEventChanges","resetEvents","unbindEventChanges","setEvents","unsetEvents","requestEventsRender","executeEventsRender","requestEventsUnrender","executeEventsUnrender","skipScroll","setDateProfileForRendering","startNowIndicator","computeInitialDateScroll","stopNowIndicator","onBaseRender","onBeforeBaseUnrender","applyScreenState","processUnselect","handleDocumentMousedown","update","startOf","updateNowIndicator","updateHeight","updateWidth","applyScroll","setHeight","getSuggestedViewHeight","isHeightAuto","isAuto","addForcedScroll","isForced","applyQueuedScroll","queryDateScroll","applyDateScroll","freezeContentHeight","thawContentHeight","renderEvents","onEventsRender","onBeforeEventsUnrender","destroyEvents","hasSingleHandlers","eventDefId","eventMutation","undoFunc","mutateEventsWithId","buildNewDateProfile","triggerEventDrop","isEvent","isSticky","addEventDef","triggerExternalDrop","triggerEventResize","durationDelta","select","renderSelection","triggerSelect","destroySelection","unselectEventInstance","processRangeUnselect","processEventUnselect","ignore","initialEvents","renderUnzonedRange","dateIncrement","intervalStart","intervalEnd","reportViewDatesChanged","buildPrevDateProfile","prevDate","buildNextDateProfile","nextDate","forceToValid","currentInfo","isValid","isDateAllDay","buildValidRange","constrainDate","buildCurrentRangeInfo","buildRenderRange","adjustActiveRange","intersectsWith","buildDateIncrement","getUnzonedRangeOption","dayCount","durationUnit","buildRangeFromDuration","buildRangeFromDayCount","buildCustomVisibleRange","getFallbackDuration","dateIncrementInput","dateIncrementDuration","alignment","skipHiddenDays","customAlignment","runningCount","visibleUnzonedRange","trimHiddenDays","fallback","inputUnzonedRange","parseUnzonedRange","hiddenDays","dayCnt","inArray","inc","isExclusive","out","Scroller","overflowX","overflowY","renderEl","applyOverflow","overflow-x","overflow-y","lockOverflow","getScrollTop","setScrollTop","getClientWidth","getClientHeight","proxyCall","viewsByType","currentDate","loadingLevel","viewSpecCache","initOptionsInternals","initMomentInternals","initCurrentDate","initEventManager","EventManager","getView","triggerInfo","optHandler","instantiateView","viewType","spec","isValidViewType","viewName","dateOrRange","recordOptionOverrides","visibleRange","renderView","newDate","getUnitViewSpec","defaultDateInput","setToolbarsTitle","updateToolbarButtons","prev","prevInfo","next","nextInfo","prevYear","nextYear","gotoDate","zonedDateInput","incrementDate","delta","getDate","pushLoading","popLoading","zonedStartInput","zonedEndInput","buildSelectFootprint","defaultTimedEventDuration","defaultAllDayEventDuration","rangeInput","rerenderEvents","elementVisible","rawSources","singleRawSource","freeze","rawSource","EventSourceParser","addSource","thaw","dirDefaults","localeDefaults","dynamicOverrides","optionsModel","populateOptionsHash","option","newOptionHash","setOptions","optionName","optionCnt","renderHeader","renderFooter","reinitView","rawOptions","localeOptionHash","defaults","rtlDefaults","opts","_week","weekNumberCalculation","monthNames","_months","monthNamesShort","_monthsShort","dayNames","_weekdays","dayNamesShort","_weekdaysShort","dow","localizeMoment","getIsAmbigTimezone","adjustedZonedDate","zonedDate","toArray","timeAdjust","ignoreEnd","EventDateProfile","now","humanizeDuration","humanize","getEventEnd","getDefaultEventEnd","allDay","cache","buildViewSpec","viewTypes","header","singleUnit","requestedViewType","viewOverrides","specChain","defaultsChain","overridesChain","buildViewSpecOptions","buildViewSpecButtonText","queryButtonText","buttonTextKey","contentEl","suggestedViewHeight","windowResizeProxy","ignoreWindowResize","calcSize","initialRender","anchorEl","customAction","themeClass","ThemeRegistry","getThemeClass","themeSystem","widgetClass","toggleClass","prependTo","initToolbars","resize","windowResize","toolbarsManager","forcedScroll","needsClearView","clearView","scrollState","shouldRecalc","_calcSize","contentHeightInput","heightInput","queryToolbarsHeight","footer","computeHeaderOptions","computeFooterOptions","todayInfo","reduce","accumulator","toolbar","toolbarHeight","BUSINESS_HOUR_EVENT_DEFAULTS","rendering","buildCurrentBusinessFootprints","_buildCurrentBusinessFootprints","businessDefInput","businessInstanceGroup","eventPeriod","currentPeriod","eventInstancesToFootprints","rawComplexDef","buildBusinessDefs","explicitEventDef","rawDefs","requireDow","defs","buildBusinessDef","rawDef","fullRawDef","RecurringEventDef","peerEventInstances","getPeerEventInstances","peerEventRanges","peerEventFootprints","constraintVal","getConstraint","eventAllowFunc","isFootprintAllowed","getEventInstancesWithoutId","selectAllowFunc","getEventInstances","constraintFootprints","constraintValToFootprints","isFootprintWithinConstraints","collectOverlapEventFootprints","footprintContainsFootprint","parseEventDefToInstances","parseFootprints","getEventInstancesWithId","targetFootprint","footprintsIntersect","eventInput","EventDefParser","rawInput","outerFootprint","innerFootprint","getEventSources","otherSources","getEventSourceById","getSourceById","normalizeId","addEventSource","sourceInput","removeEventSources","sourceMultiQuery","sources","removeAllSources","multiQuerySources","removeSource","removeEventSource","sourceQuery","querySources","refetchEventSources","refetchSource","refetchEvents","refetchAllSources","eventInputs","renderEvent","stickySource","removeEvents","legacyInstances","idMap","removeAllEventDefs","getEventDefByUid","_id","removeEventDefsById","clientEvents","updateEvents","eventPropsArray","updateEvent","createFromRawProps","titleRangeSeparator","monthYearFormat","forceEventDuration","defaultView","aspectRatio","center","weekends","weekNumbers","weekNumberTitle","scrollTime","showNonCurrentDates","lazyFetching","startParam","endParam","timezoneParam","timezone","year","month","allDayText","dragOpacity","dragRevertDuration","dragScroll","unselectAuto","dropAccept","eventOrder","eventLimit","eventLimitText","eventLimitClick","dayPopoverFormat","handleWindowResize","windowResizeDelay","longPressDelay","englishDefaults","buttonIcons","themeButtonIcons","locales","datepickerLocale","dpLocaleCode","dpOptions","fcOptions","weekHeader","dpComputableOptions","datepicker","regional","en","setDefaults","newFcOptions","momOptions","momComputableOptions","prevText","nextText","currentText","showMonthAfterYear","yearSuffix","dayOfMonthFormat","mediumTimeFormat","smallTimeFormat","extraSmallTimeFormat","hourFormat","noMeridiemTimeFormat","smallDayDateFormat","weekFormat","smallWeekFormat","startInput","endInput","otherRange","newRange","innerRange","ArrayEventSource","force","isWithinRange","setPeriod","EventPeriod","whenReleased","eventSource","requestSource","doomedSource","purgeSource","purgeAllSources","requestSources","getSources","matchInputs","matchingSources","matchInput","unbindPeriod","bindPeriod","uid","eventId","undoFuncs","getEventDefsById","removeEventDef","mutateSingle","defCopy","allInstances","requestsByUid","pendingCnt","freezeDepth","stuntedReleaseCnt","releaseCnt","eventDefsByUid","eventDefsById","eventInstanceGroupsById","isAfter","request","status","fetch","addEventDefs","tryRelease","completedCnt","eventDefUid","addEventInstance","isEmptyObject","removeEventInstancesForDef","matchingInstances","currentEventInstance","release","EventDef","rawId","constraint","overlap","editable","startEditable","durationEditable","miscProps","copy","copyVerbatimStandardProps","hasInverseRendering","getRendering","generateId","allowRawProps","uuid","calendarTransform","sourceTransform","eventDataTransform","EventInstance","rezone","superSuccess","endTime","dowHash","zonedDayStart","instanceStart","instanceEnd","unzonedDate","unzonedEnd","instances","setDow","dowNumbers","isInverse","sliceInverseRenderRanges","sliceNormalRenderRanges","slicedRange","slicedEventRanges","unzonedRanges","ownerDef","buildUnzonedRange","forcedAllDay","allDayDefault","origDateProfile","newRawProps","defMutation","applicableRawProps","createFromDiff","shouldRezone","dateProfile0","dateProfile1","subtractDates","endDiff","mutation","otherSource","parseEventDefs","rawEventDefs","sourceClasses","registerClass","EventSourceClass","currentTimezone","setRawEventDefs","events","FuncEventSource","JsonFeedEventSource","ajaxSettings","onSuccess","success","onError","error","requestParams","buildRequestParams","ajax","AJAX_DEFAULTS","callbackRes","customRequestParams","params","dataType","themeClassHash","register","themeName","themeSetting","JqueryUiTheme","StandardTheme","Theme","iconClasses","baseIconClass","iconOverrideOption","iconOverrideCustomButtonOption","iconOverridePrefix","processIconOverride","setIconOverride","iconOverrideHash","iconClassesCopy","applyIconOverridePrefix","indexOf","key","widget","widgetHeader","widgetContent","buttonGroup","button","cornerLeft","cornerRight","stateDefault","stateActive","stateDisabled","stateHover","stateDown","popoverHeader","popoverContent","headerRow","dayRow","listView","close","BootstrapTheme","tableGrid","tableList","popover","BasicView","scroller","dayGridClass","dayGrid","colWeekNumbersVisible","weekNumberWidth","headContainerEl","headRowEl","instantiateDayGrid","subclass","basicDayGridMethods","weekday","renderSkeletonHtml","renderHead","dayGridContainerEl","dayGridEl","hasRigidRows","weekNumberStyleAttr","totalHeight","scrollerHeight","computeScrollerHeight","setGridHeight","weekStart","MonthView","isFixedWeeks","basic","basicDay","basicWeek","fixedWeekCount","AgendaView","timeGridClass","timeGrid","axisWidth","noScrollRowEls","bottomRuleEl","instantiateTimeGrid","agendaTimeGridMethods","agendaDayGridMethods","timeGridWrapEl","timeGridEl","AGENDA_ALL_DAY_EVENT_LIMIT","timedSegs","dayEventsPayload","timedEventsPayload","daySegs","weekText","agenda","allDaySlot","slotEventOverlap","agendaDay","agendaWeek","ListView","grid","ListViewGrid","viewEnd","isDefaultPrevented","location","href","renderSegList","renderEmptyMessage","segsByDay","groupSegsByDay","tableEl","dayHeaderHtml","mainFormat","altFormat","bgColor","list","listDayFormat","noEventsMessage","listDay","listWeek","listDayAltFormat","listMonth","listYear","e","defineLocale","monthsShort","weekdays","weekdaysShort","weekdaysMin","meridiemParse","isPM","meridiem","LT","LTS","L","LL","LLL","LLLL","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","m","mm","h","hh","dd","MM","y","yy","dayOfMonthOrdinalParse","ordinal","doy","closeText","dayNamesMin","dateFormat","allDayHtml","1","2","3","4","5","6","7","8","9","0","١","٢","٣","٤","٥","٦","٧","٨","٩","٠","r","o","weekdaysParseExact","preparse","postformat","nextBigText","standalone","isFormat","monthsParseExact","ll","lll","llll","monthsParse","shortMonthsParse","longMonthsParse","l","Function","monthsNominativeEl","monthsGenitiveEl","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","۱","۲","۳","۴","۵","۶","۷","۸","۹","۰","१","२","३","४","५","६","७","८","९","०","meridiemHour","10","20","30","40","50","60","70","80","90","100","ss","substr","isNaN","monthsRegex","monthsShortRegex","monthsStrictRegex","monthsShortStrictRegex","words","correctGrammaticalCase","translate","nominative","accusative","genitive"],"mappings":"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","file":"fullcalendar.min.js","sourcesContent":["/*!\n * FullCalendar v3.5.1\n * Docs & License: https://fullcalendar.io/\n * (c) 2017 Adam Shaw\n */\n\n(function(factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine([ 'jquery', 'moment' ], factory);\n\t}\n\telse if (typeof exports === 'object') { // Node/CommonJS\n\t\tmodule.exports = factory(require('jquery'), require('moment'));\n\t}\n\telse {\n\t\tfactory(jQuery, moment);\n\t}\n})(function($, moment) {\n\n;;\n\nvar FC = $.fullCalendar = {\n\tversion: \"3.5.1\",\n\t// When introducing internal API incompatibilities (where fullcalendar plugins would break),\n\t// the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)\n\t// and the below integer should be incremented.\n\tinternalApiVersion: 10\n};\nvar fcViews = FC.views = {};\n\n\n$.fn.fullCalendar = function(options) {\n\tvar args = Array.prototype.slice.call(arguments, 1); // for a possible method call\n\tvar res = this; // what this function will return (this jQuery object by default)\n\n\tthis.each(function(i, _element) { // loop each DOM element involved\n\t\tvar element = $(_element);\n\t\tvar calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\n\t\tvar singleRes; // the returned value of this single method call\n\n\t\t// a method call\n\t\tif (typeof options === 'string') {\n\n\t\t\tif (options === 'getCalendar') {\n\t\t\t\tif (!i) { // first element only\n\t\t\t\t\tres = calendar;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (options === 'destroy') { // don't warn if no calendar object\n\t\t\t\tif (calendar) {\n\t\t\t\t\tcalendar.destroy();\n\t\t\t\t\telement.removeData('fullCalendar');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!calendar) {\n\t\t\t\tFC.warn(\"Attempting to call a FullCalendar method on an element with no calendar.\");\n\t\t\t}\n\t\t\telse if ($.isFunction(calendar[options])) {\n\t\t\t\tsingleRes = calendar[options].apply(calendar, args);\n\n\t\t\t\tif (!i) {\n\t\t\t\t\tres = singleRes; // record the first method call result\n\t\t\t\t}\n\t\t\t\tif (options === 'destroy') { // for the destroy method, must remove Calendar object data\n\t\t\t\t\telement.removeData('fullCalendar');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tFC.warn(\"'\" + options + \"' is an unknown FullCalendar method.\");\n\t\t\t}\n\t\t}\n\t\t// a new calendar initialization\n\t\telse if (!calendar) { // don't initialize twice\n\t\t\tcalendar = new Calendar(element, options);\n\t\t\telement.data('fullCalendar', calendar);\n\t\t\tcalendar.render();\n\t\t}\n\t});\n\n\treturn res;\n};\n\n\nvar complexOptions = [ // names of options that are objects whose properties should be combined\n\t'header',\n\t'footer',\n\t'buttonText',\n\t'buttonIcons',\n\t'themeButtonIcons'\n];\n\n\n// Merges an array of option objects into a single object\nfunction mergeOptions(optionObjs) {\n\treturn mergeProps(optionObjs, complexOptions);\n}\n\n;;\n\n// exports\nFC.applyAll = applyAll;\nFC.debounce = debounce;\nFC.isInt = isInt;\nFC.htmlEscape = htmlEscape;\nFC.cssToStr = cssToStr;\nFC.proxy = proxy;\nFC.capitaliseFirstLetter = capitaliseFirstLetter;\n\n\n/* FullCalendar-specific DOM Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\n\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\nfunction compensateScroll(rowEls, scrollbarWidths) {\n\tif (scrollbarWidths.left) {\n\t\trowEls.css({\n\t\t\t'border-left-width': 1,\n\t\t\t'margin-left': scrollbarWidths.left - 1\n\t\t});\n\t}\n\tif (scrollbarWidths.right) {\n\t\trowEls.css({\n\t\t\t'border-right-width': 1,\n\t\t\t'margin-right': scrollbarWidths.right - 1\n\t\t});\n\t}\n}\n\n\n// Undoes compensateScroll and restores all borders/margins\nfunction uncompensateScroll(rowEls) {\n\trowEls.css({\n\t\t'margin-left': '',\n\t\t'margin-right': '',\n\t\t'border-left-width': '',\n\t\t'border-right-width': ''\n\t});\n}\n\n\n// Make the mouse cursor express that an event is not allowed in the current area\nfunction disableCursor() {\n\t$('body').addClass('fc-not-allowed');\n}\n\n\n// Returns the mouse cursor to its original look\nfunction enableCursor() {\n\t$('body').removeClass('fc-not-allowed');\n}\n\n\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and \n// reduces the available height.\nfunction distributeHeight(els, availableHeight, shouldRedistribute) {\n\n\t// *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\n\t// and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\n\n\tvar minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\n\tvar minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\n\tvar flexEls = []; // elements that are allowed to expand. array of DOM nodes\n\tvar flexOffsets = []; // amount of vertical space it takes up\n\tvar flexHeights = []; // actual css height\n\tvar usedHeight = 0;\n\n\tundistributeHeight(els); // give all elements their natural height\n\n\t// find elements that are below the recommended height (expandable).\n\t// important to query for heights in a single first pass (to avoid reflow oscillation).\n\tels.each(function(i, el) {\n\t\tvar minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\n\t\tvar naturalOffset = $(el).outerHeight(true);\n\n\t\tif (naturalOffset < minOffset) {\n\t\t\tflexEls.push(el);\n\t\t\tflexOffsets.push(naturalOffset);\n\t\t\tflexHeights.push($(el).height());\n\t\t}\n\t\telse {\n\t\t\t// this element stretches past recommended height (non-expandable). mark the space as occupied.\n\t\t\tusedHeight += naturalOffset;\n\t\t}\n\t});\n\n\t// readjust the recommended height to only consider the height available to non-maxed-out rows.\n\tif (shouldRedistribute) {\n\t\tavailableHeight -= usedHeight;\n\t\tminOffset1 = Math.floor(availableHeight / flexEls.length);\n\t\tminOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\n\t}\n\n\t// assign heights to all expandable elements\n\t$(flexEls).each(function(i, el) {\n\t\tvar minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\n\t\tvar naturalOffset = flexOffsets[i];\n\t\tvar naturalHeight = flexHeights[i];\n\t\tvar newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\n\n\t\tif (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\n\t\t\t$(el).height(newHeight);\n\t\t}\n\t});\n}\n\n\n// Undoes distrubuteHeight, restoring all els to their natural height\nfunction undistributeHeight(els) {\n\tels.height('');\n}\n\n\n// Given `els`, a jQuery set of cells, find the cell with the largest natural width and set the widths of all the\n// cells to be that width.\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\nfunction matchCellWidths(els) {\n\tvar maxInnerWidth = 0;\n\n\tels.find('> *').each(function(i, innerEl) {\n\t\tvar innerWidth = $(innerEl).outerWidth();\n\t\tif (innerWidth > maxInnerWidth) {\n\t\t\tmaxInnerWidth = innerWidth;\n\t\t}\n\t});\n\n\tmaxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\n\n\tels.width(maxInnerWidth);\n\n\treturn maxInnerWidth;\n}\n\n\n// Given one element that resides inside another,\n// Subtracts the height of the inner element from the outer element.\nfunction subtractInnerElHeight(outerEl, innerEl) {\n\tvar both = outerEl.add(innerEl);\n\tvar diff;\n\n\t// effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\n\tboth.css({\n\t\tposition: 'relative', // cause a reflow, which will force fresh dimension recalculation\n\t\tleft: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\n\t});\n\tdiff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions\n\tboth.css({ position: '', left: '' }); // undo hack\n\n\treturn diff;\n}\n\n\n/* Element Geom Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.getOuterRect = getOuterRect;\nFC.getClientRect = getClientRect;\nFC.getContentRect = getContentRect;\nFC.getScrollbarWidths = getScrollbarWidths;\n\n\n// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\nfunction getScrollParent(el) {\n\tvar position = el.css('position'),\n\t\tscrollParent = el.parents().filter(function() {\n\t\t\tvar parent = $(this);\n\t\t\treturn (/(auto|scroll)/).test(\n\t\t\t\tparent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x')\n\t\t\t);\n\t\t}).eq(0);\n\n\treturn position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\n}\n\n\n// Queries the outer bounding area of a jQuery element.\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\n// Origin is optional.\nfunction getOuterRect(el, origin) {\n\tvar offset = el.offset();\n\tvar left = offset.left - (origin ? origin.left : 0);\n\tvar top = offset.top - (origin ? origin.top : 0);\n\n\treturn {\n\t\tleft: left,\n\t\tright: left + el.outerWidth(),\n\t\ttop: top,\n\t\tbottom: top + el.outerHeight()\n\t};\n}\n\n\n// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\n// Origin is optional.\n// WARNING: given element can't have borders\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\nfunction getClientRect(el, origin) {\n\tvar offset = el.offset();\n\tvar scrollbarWidths = getScrollbarWidths(el);\n\tvar left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);\n\tvar top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);\n\n\treturn {\n\t\tleft: left,\n\t\tright: left + el[0].clientWidth, // clientWidth includes padding but NOT scrollbars\n\t\ttop: top,\n\t\tbottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars\n\t};\n}\n\n\n// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\n// Origin is optional.\nfunction getContentRect(el, origin) {\n\tvar offset = el.offset(); // just outside of border, margin not included\n\tvar left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -\n\t\t(origin ? origin.left : 0);\n\tvar top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -\n\t\t(origin ? origin.top : 0);\n\n\treturn {\n\t\tleft: left,\n\t\tright: left + el.width(),\n\t\ttop: top,\n\t\tbottom: top + el.height()\n\t};\n}\n\n\n// Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.\n// WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\nfunction getScrollbarWidths(el) {\n\tvar leftRightWidth = el[0].offsetWidth - el[0].clientWidth;\n\tvar bottomWidth = el[0].offsetHeight - el[0].clientHeight;\n\tvar widths;\n\n\tleftRightWidth = sanitizeScrollbarWidth(leftRightWidth);\n\tbottomWidth = sanitizeScrollbarWidth(bottomWidth);\n\n\twidths = { left: 0, right: 0, top: 0, bottom: bottomWidth };\n\n\tif (getIsLeftRtlScrollbars() && el.css('direction') == 'rtl') { // is the scrollbar on the left side?\n\t\twidths.left = leftRightWidth;\n\t}\n\telse {\n\t\twidths.right = leftRightWidth;\n\t}\n\n\treturn widths;\n}\n\n\n// The scrollbar width computations in getScrollbarWidths are sometimes flawed when it comes to\n// retina displays, rounding, and IE11. Massage them into a usable value.\nfunction sanitizeScrollbarWidth(width) {\n\twidth = Math.max(0, width); // no negatives\n\twidth = Math.round(width);\n\treturn width;\n}\n\n\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\n\nvar _isLeftRtlScrollbars = null;\n\nfunction getIsLeftRtlScrollbars() { // responsible for caching the computation\n\tif (_isLeftRtlScrollbars === null) {\n\t\t_isLeftRtlScrollbars = computeIsLeftRtlScrollbars();\n\t}\n\treturn _isLeftRtlScrollbars;\n}\n\nfunction computeIsLeftRtlScrollbars() { // creates an offscreen test element, then removes it\n\tvar el = $('
')\n\t\t.css({\n\t\t\tposition: 'absolute',\n\t\t\ttop: -1000,\n\t\t\tleft: 0,\n\t\t\tborder: 0,\n\t\t\tpadding: 0,\n\t\t\toverflow: 'scroll',\n\t\t\tdirection: 'rtl'\n\t\t})\n\t\t.appendTo('body');\n\tvar innerEl = el.children();\n\tvar res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?\n\tel.remove();\n\treturn res;\n}\n\n\n// Retrieves a jQuery element's computed CSS value as a floating-point number.\n// If the queried value is non-numeric (ex: IE can return \"medium\" for border width), will just return zero.\nfunction getCssFloat(el, prop) {\n\treturn parseFloat(el.css(prop)) || 0;\n}\n\n\n/* Mouse / Touch Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.preventDefault = preventDefault;\n\n\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\nfunction isPrimaryMouseButton(ev) {\n\treturn ev.which == 1 && !ev.ctrlKey;\n}\n\n\nfunction getEvX(ev) {\n\tvar touches = ev.originalEvent.touches;\n\n\t// on mobile FF, pageX for touch events is present, but incorrect,\n\t// so, look at touch coordinates first.\n\tif (touches && touches.length) {\n\t\treturn touches[0].pageX;\n\t}\n\n\treturn ev.pageX;\n}\n\n\nfunction getEvY(ev) {\n\tvar touches = ev.originalEvent.touches;\n\n\t// on mobile FF, pageX for touch events is present, but incorrect,\n\t// so, look at touch coordinates first.\n\tif (touches && touches.length) {\n\t\treturn touches[0].pageY;\n\t}\n\n\treturn ev.pageY;\n}\n\n\nfunction getEvIsTouch(ev) {\n\treturn /^touch/.test(ev.type);\n}\n\n\nfunction preventSelection(el) {\n\tel.addClass('fc-unselectable')\n\t\t.on('selectstart', preventDefault);\n}\n\n\nfunction allowSelection(el) {\n\tel.removeClass('fc-unselectable')\n\t\t.off('selectstart', preventDefault);\n}\n\n\n// Stops a mouse/touch event from doing it's native browser action\nfunction preventDefault(ev) {\n\tev.preventDefault();\n}\n\n\n/* General Geometry Utils\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.intersectRects = intersectRects;\n\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\nfunction intersectRects(rect1, rect2) {\n\tvar res = {\n\t\tleft: Math.max(rect1.left, rect2.left),\n\t\tright: Math.min(rect1.right, rect2.right),\n\t\ttop: Math.max(rect1.top, rect2.top),\n\t\tbottom: Math.min(rect1.bottom, rect2.bottom)\n\t};\n\n\tif (res.left < res.right && res.top < res.bottom) {\n\t\treturn res;\n\t}\n\treturn false;\n}\n\n\n// Returns a new point that will have been moved to reside within the given rectangle\nfunction constrainPoint(point, rect) {\n\treturn {\n\t\tleft: Math.min(Math.max(point.left, rect.left), rect.right),\n\t\ttop: Math.min(Math.max(point.top, rect.top), rect.bottom)\n\t};\n}\n\n\n// Returns a point that is the center of the given rectangle\nfunction getRectCenter(rect) {\n\treturn {\n\t\tleft: (rect.left + rect.right) / 2,\n\t\ttop: (rect.top + rect.bottom) / 2\n\t};\n}\n\n\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\nfunction diffPoints(point1, point2) {\n\treturn {\n\t\tleft: point1.left - point2.left,\n\t\ttop: point1.top - point2.top\n\t};\n}\n\n\n/* Object Ordering by Field\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.parseFieldSpecs = parseFieldSpecs;\nFC.compareByFieldSpecs = compareByFieldSpecs;\nFC.compareByFieldSpec = compareByFieldSpec;\nFC.flexibleCompare = flexibleCompare;\n\n\nfunction parseFieldSpecs(input) {\n\tvar specs = [];\n\tvar tokens = [];\n\tvar i, token;\n\n\tif (typeof input === 'string') {\n\t\ttokens = input.split(/\\s*,\\s*/);\n\t}\n\telse if (typeof input === 'function') {\n\t\ttokens = [ input ];\n\t}\n\telse if ($.isArray(input)) {\n\t\ttokens = input;\n\t}\n\n\tfor (i = 0; i < tokens.length; i++) {\n\t\ttoken = tokens[i];\n\n\t\tif (typeof token === 'string') {\n\t\t\tspecs.push(\n\t\t\t\ttoken.charAt(0) == '-' ?\n\t\t\t\t\t{ field: token.substring(1), order: -1 } :\n\t\t\t\t\t{ field: token, order: 1 }\n\t\t\t);\n\t\t}\n\t\telse if (typeof token === 'function') {\n\t\t\tspecs.push({ func: token });\n\t\t}\n\t}\n\n\treturn specs;\n}\n\n\nfunction compareByFieldSpecs(obj1, obj2, fieldSpecs) {\n\tvar i;\n\tvar cmp;\n\n\tfor (i = 0; i < fieldSpecs.length; i++) {\n\t\tcmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i]);\n\t\tif (cmp) {\n\t\t\treturn cmp;\n\t\t}\n\t}\n\n\treturn 0;\n}\n\n\nfunction compareByFieldSpec(obj1, obj2, fieldSpec) {\n\tif (fieldSpec.func) {\n\t\treturn fieldSpec.func(obj1, obj2);\n\t}\n\treturn flexibleCompare(obj1[fieldSpec.field], obj2[fieldSpec.field]) *\n\t\t(fieldSpec.order || 1);\n}\n\n\nfunction flexibleCompare(a, b) {\n\tif (!a && !b) {\n\t\treturn 0;\n\t}\n\tif (b == null) {\n\t\treturn -1;\n\t}\n\tif (a == null) {\n\t\treturn 1;\n\t}\n\tif ($.type(a) === 'string' || $.type(b) === 'string') {\n\t\treturn String(a).localeCompare(String(b));\n\t}\n\treturn a - b;\n}\n\n\n/* Date Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.computeGreatestUnit = computeGreatestUnit;\nFC.divideRangeByDuration = divideRangeByDuration;\nFC.divideDurationByDuration = divideDurationByDuration;\nFC.multiplyDuration = multiplyDuration;\nFC.durationHasTime = durationHasTime;\n\nvar dayIDs = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ];\nvar unitsDesc = [ 'year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond' ]; // descending\n\n\n// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\n// Moments will have their timezones normalized.\nfunction diffDayTime(a, b) {\n\treturn moment.duration({\n\t\tdays: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\n\t\tms: a.time() - b.time() // time-of-day from day start. disregards timezone\n\t});\n}\n\n\n// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\nfunction diffDay(a, b) {\n\treturn moment.duration({\n\t\tdays: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\n\t});\n}\n\n\n// Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.\nfunction diffByUnit(a, b, unit) {\n\treturn moment.duration(\n\t\tMath.round(a.diff(b, unit, true)), // returnFloat=true\n\t\tunit\n\t);\n}\n\n\n// Computes the unit name of the largest whole-unit period of time.\n// For example, 48 hours will be \"days\" whereas 49 hours will be \"hours\".\n// Accepts start/end, a range object, or an original duration object.\nfunction computeGreatestUnit(start, end) {\n\tvar i, unit;\n\tvar val;\n\n\tfor (i = 0; i < unitsDesc.length; i++) {\n\t\tunit = unitsDesc[i];\n\t\tval = computeRangeAs(unit, start, end);\n\n\t\tif (val >= 1 && isInt(val)) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn unit; // will be \"milliseconds\" if nothing else matches\n}\n\n\n// like computeGreatestUnit, but has special abilities to interpret the source input for clues\nfunction computeDurationGreatestUnit(duration, durationInput) {\n\tvar unit = computeGreatestUnit(duration);\n\n\t// prevent days:7 from being interpreted as a week\n\tif (unit === 'week' && typeof durationInput === 'object' && durationInput.days) {\n\t\tunit = 'day';\n\t}\n\n\treturn unit;\n}\n\n\n// Computes the number of units (like \"hours\") in the given range.\n// Range can be a {start,end} object, separate start/end args, or a Duration.\n// Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling\n// of month-diffing logic (which tends to vary from version to version).\nfunction computeRangeAs(unit, start, end) {\n\n\tif (end != null) { // given start, end\n\t\treturn end.diff(start, unit, true);\n\t}\n\telse if (moment.isDuration(start)) { // given duration\n\t\treturn start.as(unit);\n\t}\n\telse { // given { start, end } range object\n\t\treturn start.end.diff(start.start, unit, true);\n\t}\n}\n\n\n// Intelligently divides a range (specified by a start/end params) by a duration\nfunction divideRangeByDuration(start, end, dur) {\n\tvar months;\n\n\tif (durationHasTime(dur)) {\n\t\treturn (end - start) / dur;\n\t}\n\tmonths = dur.asMonths();\n\tif (Math.abs(months) >= 1 && isInt(months)) {\n\t\treturn end.diff(start, 'months', true) / months;\n\t}\n\treturn end.diff(start, 'days', true) / dur.asDays();\n}\n\n\n// Intelligently divides one duration by another\nfunction divideDurationByDuration(dur1, dur2) {\n\tvar months1, months2;\n\n\tif (durationHasTime(dur1) || durationHasTime(dur2)) {\n\t\treturn dur1 / dur2;\n\t}\n\tmonths1 = dur1.asMonths();\n\tmonths2 = dur2.asMonths();\n\tif (\n\t\tMath.abs(months1) >= 1 && isInt(months1) &&\n\t\tMath.abs(months2) >= 1 && isInt(months2)\n\t) {\n\t\treturn months1 / months2;\n\t}\n\treturn dur1.asDays() / dur2.asDays();\n}\n\n\n// Intelligently multiplies a duration by a number\nfunction multiplyDuration(dur, n) {\n\tvar months;\n\n\tif (durationHasTime(dur)) {\n\t\treturn moment.duration(dur * n);\n\t}\n\tmonths = dur.asMonths();\n\tif (Math.abs(months) >= 1 && isInt(months)) {\n\t\treturn moment.duration({ months: months * n });\n\t}\n\treturn moment.duration({ days: dur.asDays() * n });\n}\n\n\n// Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)\nfunction durationHasTime(dur) {\n\treturn Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());\n}\n\n\nfunction isNativeDate(input) {\n\treturn Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\n}\n\n\n// Returns a boolean about whether the given input is a time string, like \"06:40:00\" or \"06:00\"\nfunction isTimeString(str) {\n\treturn typeof str === 'string' &&\n\t\t/^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\n}\n\n\n/* Logging and Debug\n----------------------------------------------------------------------------------------------------------------------*/\n\nFC.log = function() {\n\tvar console = window.console;\n\n\tif (console && console.log) {\n\t\treturn console.log.apply(console, arguments);\n\t}\n};\n\nFC.warn = function() {\n\tvar console = window.console;\n\n\tif (console && console.warn) {\n\t\treturn console.warn.apply(console, arguments);\n\t}\n\telse {\n\t\treturn FC.log.apply(FC, arguments);\n\t}\n};\n\n\n/* General Utilities\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar hasOwnPropMethod = {}.hasOwnProperty;\n\n\n// Merges an array of objects into a single object.\n// The second argument allows for an array of property names who's object values will be merged together.\nfunction mergeProps(propObjs, complexProps) {\n\tvar dest = {};\n\tvar i, name;\n\tvar complexObjs;\n\tvar j, val;\n\tvar props;\n\n\tif (complexProps) {\n\t\tfor (i = 0; i < complexProps.length; i++) {\n\t\t\tname = complexProps[i];\n\t\t\tcomplexObjs = [];\n\n\t\t\t// collect the trailing object values, stopping when a non-object is discovered\n\t\t\tfor (j = propObjs.length - 1; j >= 0; j--) {\n\t\t\t\tval = propObjs[j][name];\n\n\t\t\t\tif (typeof val === 'object') {\n\t\t\t\t\tcomplexObjs.unshift(val);\n\t\t\t\t}\n\t\t\t\telse if (val !== undefined) {\n\t\t\t\t\tdest[name] = val; // if there were no objects, this value will be used\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if the trailing values were objects, use the merged value\n\t\t\tif (complexObjs.length) {\n\t\t\t\tdest[name] = mergeProps(complexObjs);\n\t\t\t}\n\t\t}\n\t}\n\n\t// copy values into the destination, going from last to first\n\tfor (i = propObjs.length - 1; i >= 0; i--) {\n\t\tprops = propObjs[i];\n\n\t\tfor (name in props) {\n\t\t\tif (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\n\t\t\t\tdest[name] = props[name];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dest;\n}\n\n\nfunction copyOwnProps(src, dest) {\n\tfor (var name in src) {\n\t\tif (hasOwnProp(src, name)) {\n\t\t\tdest[name] = src[name];\n\t\t}\n\t}\n}\n\n\nfunction hasOwnProp(obj, name) {\n\treturn hasOwnPropMethod.call(obj, name);\n}\n\n\nfunction applyAll(functions, thisObj, args) {\n\tif ($.isFunction(functions)) {\n\t\tfunctions = [ functions ];\n\t}\n\tif (functions) {\n\t\tvar i;\n\t\tvar ret;\n\t\tfor (i=0; i/g, '>')\n\t\t.replace(/'/g, ''')\n\t\t.replace(/\"/g, '"')\n\t\t.replace(/\\n/g, '
');\n}\n\n\nfunction stripHtmlEntities(text) {\n\treturn text.replace(/&.*?;/g, '');\n}\n\n\n// Given a hash of CSS properties, returns a string of CSS.\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\nfunction cssToStr(cssProps) {\n\tvar statements = [];\n\n\t$.each(cssProps, function(name, val) {\n\t\tif (val != null) {\n\t\t\tstatements.push(name + ':' + val);\n\t\t}\n\t});\n\n\treturn statements.join(';');\n}\n\n\n// Given an object hash of HTML attribute names to values,\n// generates a string that can be injected between < > in HTML\nfunction attrsToStr(attrs) {\n\tvar parts = [];\n\n\t$.each(attrs, function(name, val) {\n\t\tif (val != null) {\n\t\t\tparts.push(name + '=\"' + htmlEscape(val) + '\"');\n\t\t}\n\t});\n\n\treturn parts.join(' ');\n}\n\n\nfunction capitaliseFirstLetter(str) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nfunction compareNumbers(a, b) { // for .sort()\n\treturn a - b;\n}\n\n\nfunction isInt(n) {\n\treturn n % 1 === 0;\n}\n\n\n// Returns a method bound to the given object context.\n// Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with\n// different contexts as identical when binding/unbinding events.\nfunction proxy(obj, methodName) {\n\tvar method = obj[methodName];\n\n\treturn function() {\n\t\treturn method.apply(obj, arguments);\n\t};\n}\n\n\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\nfunction debounce(func, wait, immediate) {\n\tvar timeout, args, context, timestamp, result;\n\n\tvar later = function() {\n\t\tvar last = +new Date() - timestamp;\n\t\tif (last < wait) {\n\t\t\ttimeout = setTimeout(later, wait - last);\n\t\t}\n\t\telse {\n\t\t\ttimeout = null;\n\t\t\tif (!immediate) {\n\t\t\t\tresult = func.apply(context, args);\n\t\t\t\tcontext = args = null;\n\t\t\t}\n\t\t}\n\t};\n\n\treturn function() {\n\t\tcontext = this;\n\t\targs = arguments;\n\t\ttimestamp = +new Date();\n\t\tvar callNow = immediate && !timeout;\n\t\tif (!timeout) {\n\t\t\ttimeout = setTimeout(later, wait);\n\t\t}\n\t\tif (callNow) {\n\t\t\tresult = func.apply(context, args);\n\t\t\tcontext = args = null;\n\t\t}\n\t\treturn result;\n\t};\n}\n\n;;\n\n/*\nGENERAL NOTE on moments throughout the *entire rest* of the codebase:\nAll moments are assumed to be ambiguously-zoned unless otherwise noted,\nwith the NOTABLE EXCEOPTION of start/end dates that live on *Event Objects*.\nAmbiguously-TIMED moments are assumed to be ambiguously-zoned by nature.\n*/\n\nvar ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\nvar ambigTimeOrZoneRegex =\n\t/^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\nvar newMomentProto = moment.fn; // where we will attach our new methods\nvar oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\n\n// tell momentjs to transfer these properties upon clone\nvar momentProperties = moment.momentProperties;\nmomentProperties.push('_fullCalendar');\nmomentProperties.push('_ambigTime');\nmomentProperties.push('_ambigZone');\n\n\n// Creating\n// -------------------------------------------------------------------------------------------------\n\n// Creates a new moment, similar to the vanilla moment(...) constructor, but with\n// extra features (ambiguous time, enhanced formatting). When given an existing moment,\n// it will function as a clone (and retain the zone of the moment). Anything else will\n// result in a moment in the local zone.\nFC.moment = function() {\n\treturn makeMoment(arguments);\n};\n\n// Sames as FC.moment, but forces the resulting moment to be in the UTC timezone.\nFC.moment.utc = function() {\n\tvar mom = makeMoment(arguments, true);\n\n\t// Force it into UTC because makeMoment doesn't guarantee it\n\t// (if given a pre-existing moment for example)\n\tif (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone\n\t\tmom.utc();\n\t}\n\n\treturn mom;\n};\n\n// Same as FC.moment, but when given an ISO8601 string, the timezone offset is preserved.\n// ISO8601 strings with no timezone offset will become ambiguously zoned.\nFC.moment.parseZone = function() {\n\treturn makeMoment(arguments, true, true);\n};\n\n// Builds an enhanced moment from args. When given an existing moment, it clones. When given a\n// native Date, or called with no arguments (the current time), the resulting moment will be local.\n// Anything else needs to be \"parsed\" (a string or an array), and will be affected by:\n// parseAsUTC - if there is no zone information, should we parse the input in UTC?\n// parseZone - if there is zone information, should we force the zone of the moment?\nfunction makeMoment(args, parseAsUTC, parseZone) {\n\tvar input = args[0];\n\tvar isSingleString = args.length == 1 && typeof input === 'string';\n\tvar isAmbigTime;\n\tvar isAmbigZone;\n\tvar ambigMatch;\n\tvar mom;\n\n\tif (moment.isMoment(input) || isNativeDate(input) || input === undefined) {\n\t\tmom = moment.apply(null, args);\n\t}\n\telse { // \"parsing\" is required\n\t\tisAmbigTime = false;\n\t\tisAmbigZone = false;\n\n\t\tif (isSingleString) {\n\t\t\tif (ambigDateOfMonthRegex.test(input)) {\n\t\t\t\t// accept strings like '2014-05', but convert to the first of the month\n\t\t\t\tinput += '-01';\n\t\t\t\targs = [ input ]; // for when we pass it on to moment's constructor\n\t\t\t\tisAmbigTime = true;\n\t\t\t\tisAmbigZone = true;\n\t\t\t}\n\t\t\telse if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {\n\t\t\t\tisAmbigTime = !ambigMatch[5]; // no time part?\n\t\t\t\tisAmbigZone = true;\n\t\t\t}\n\t\t}\n\t\telse if ($.isArray(input)) {\n\t\t\t// arrays have no timezone information, so assume ambiguous zone\n\t\t\tisAmbigZone = true;\n\t\t}\n\t\t// otherwise, probably a string with a format\n\n\t\tif (parseAsUTC || isAmbigTime) {\n\t\t\tmom = moment.utc.apply(moment, args);\n\t\t}\n\t\telse {\n\t\t\tmom = moment.apply(null, args);\n\t\t}\n\n\t\tif (isAmbigTime) {\n\t\t\tmom._ambigTime = true;\n\t\t\tmom._ambigZone = true; // ambiguous time always means ambiguous zone\n\t\t}\n\t\telse if (parseZone) { // let's record the inputted zone somehow\n\t\t\tif (isAmbigZone) {\n\t\t\t\tmom._ambigZone = true;\n\t\t\t}\n\t\t\telse if (isSingleString) {\n\t\t\t\tmom.utcOffset(input); // if not a valid zone, will assign UTC\n\t\t\t}\n\t\t}\n\t}\n\n\tmom._fullCalendar = true; // flag for extended functionality\n\n\treturn mom;\n}\n\n\n// Week Number\n// -------------------------------------------------------------------------------------------------\n\n\n// Returns the week number, considering the locale's custom week number calcuation\n// `weeks` is an alias for `week`\nnewMomentProto.week = newMomentProto.weeks = function(input) {\n\tvar weekCalc = this._locale._fullCalendar_weekCalc;\n\n\tif (input == null && typeof weekCalc === 'function') { // custom function only works for getter\n\t\treturn weekCalc(this);\n\t}\n\telse if (weekCalc === 'ISO') {\n\t\treturn oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter\n\t}\n\n\treturn oldMomentProto.week.apply(this, arguments); // local getter/setter\n};\n\n\n// Time-of-day\n// -------------------------------------------------------------------------------------------------\n\n// GETTER\n// Returns a Duration with the hours/minutes/seconds/ms values of the moment.\n// If the moment has an ambiguous time, a duration of 00:00 will be returned.\n//\n// SETTER\n// You can supply a Duration, a Moment, or a Duration-like argument.\n// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\nnewMomentProto.time = function(time) {\n\n\t// Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\n\t// `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\n\tif (!this._fullCalendar) {\n\t\treturn oldMomentProto.time.apply(this, arguments);\n\t}\n\n\tif (time == null) { // getter\n\t\treturn moment.duration({\n\t\t\thours: this.hours(),\n\t\t\tminutes: this.minutes(),\n\t\t\tseconds: this.seconds(),\n\t\t\tmilliseconds: this.milliseconds()\n\t\t});\n\t}\n\telse { // setter\n\n\t\tthis._ambigTime = false; // mark that the moment now has a time\n\n\t\tif (!moment.isDuration(time) && !moment.isMoment(time)) {\n\t\t\ttime = moment.duration(time);\n\t\t}\n\n\t\t// The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\n\t\t// Only for Duration times, not Moment times.\n\t\tvar dayHours = 0;\n\t\tif (moment.isDuration(time)) {\n\t\t\tdayHours = Math.floor(time.asDays()) * 24;\n\t\t}\n\n\t\t// We need to set the individual fields.\n\t\t// Can't use startOf('day') then add duration. In case of DST at start of day.\n\t\treturn this.hours(dayHours + time.hours())\n\t\t\t.minutes(time.minutes())\n\t\t\t.seconds(time.seconds())\n\t\t\t.milliseconds(time.milliseconds());\n\t}\n};\n\n// Converts the moment to UTC, stripping out its time-of-day and timezone offset,\n// but preserving its YMD. A moment with a stripped time will display no time\n// nor timezone offset when .format() is called.\nnewMomentProto.stripTime = function() {\n\n\tif (!this._ambigTime) {\n\n\t\tthis.utc(true); // keepLocalTime=true (for keeping *date* value)\n\n\t\t// set time to zero\n\t\tthis.set({\n\t\t\thours: 0,\n\t\t\tminutes: 0,\n\t\t\tseconds: 0,\n\t\t\tms: 0\n\t\t});\n\n\t\t// Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\n\t\t// which clears all ambig flags.\n\t\tthis._ambigTime = true;\n\t\tthis._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\n\t}\n\n\treturn this; // for chaining\n};\n\n// Returns if the moment has a non-ambiguous time (boolean)\nnewMomentProto.hasTime = function() {\n\treturn !this._ambigTime;\n};\n\n\n// Timezone\n// -------------------------------------------------------------------------------------------------\n\n// Converts the moment to UTC, stripping out its timezone offset, but preserving its\n// YMD and time-of-day. A moment with a stripped timezone offset will display no\n// timezone offset when .format() is called.\nnewMomentProto.stripZone = function() {\n\tvar wasAmbigTime;\n\n\tif (!this._ambigZone) {\n\n\t\twasAmbigTime = this._ambigTime;\n\n\t\tthis.utc(true); // keepLocalTime=true (for keeping date and time values)\n\n\t\t// the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore\n\t\tthis._ambigTime = wasAmbigTime || false;\n\n\t\t// Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\n\t\t// which clears the ambig flags.\n\t\tthis._ambigZone = true;\n\t}\n\n\treturn this; // for chaining\n};\n\n// Returns of the moment has a non-ambiguous timezone offset (boolean)\nnewMomentProto.hasZone = function() {\n\treturn !this._ambigZone;\n};\n\n\n// implicitly marks a zone\nnewMomentProto.local = function(keepLocalTime) {\n\n\t// for when converting from ambiguously-zoned to local,\n\t// keep the time values when converting from UTC -> local\n\toldMomentProto.local.call(this, this._ambigZone || keepLocalTime);\n\n\t// ensure non-ambiguous\n\t// this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals\n\tthis._ambigTime = false;\n\tthis._ambigZone = false;\n\n\treturn this; // for chaining\n};\n\n\n// implicitly marks a zone\nnewMomentProto.utc = function(keepLocalTime) {\n\n\toldMomentProto.utc.call(this, keepLocalTime);\n\n\t// ensure non-ambiguous\n\t// this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals\n\tthis._ambigTime = false;\n\tthis._ambigZone = false;\n\n\treturn this;\n};\n\n\n// implicitly marks a zone (will probably get called upon .utc() and .local())\nnewMomentProto.utcOffset = function(tzo) {\n\n\tif (tzo != null) { // setter\n\t\t// these assignments needs to happen before the original zone method is called.\n\t\t// I forget why, something to do with a browser crash.\n\t\tthis._ambigTime = false;\n\t\tthis._ambigZone = false;\n\t}\n\n\treturn oldMomentProto.utcOffset.apply(this, arguments);\n};\n\n\n// Formatting\n// -------------------------------------------------------------------------------------------------\n\nnewMomentProto.format = function() {\n\n\tif (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided?\n\t\treturn formatDate(this, arguments[0]); // our extended formatting\n\t}\n\tif (this._ambigTime) {\n\t\treturn oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\n\t}\n\tif (this._ambigZone) {\n\t\treturn oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\n\t}\n\tif (this._fullCalendar) { // enhanced non-ambig moment?\n\t\t// moment.format() doesn't ensure english, but we want to.\n\t\treturn oldMomentFormat(englishMoment(this));\n\t}\n\n\treturn oldMomentProto.format.apply(this, arguments);\n};\n\nnewMomentProto.toISOString = function() {\n\n\tif (this._ambigTime) {\n\t\treturn oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\n\t}\n\tif (this._ambigZone) {\n\t\treturn oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\n\t}\n\tif (this._fullCalendar) { // enhanced non-ambig moment?\n\t\t// depending on browser, moment might not output english. ensure english.\n\t\t// https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22\n\t\treturn oldMomentProto.toISOString.apply(englishMoment(this), arguments);\n\t}\n\n\treturn oldMomentProto.toISOString.apply(this, arguments);\n};\n\nfunction englishMoment(mom) {\n\tif (mom.locale() !== 'en') {\n\t\treturn mom.clone().locale('en');\n\t}\n\treturn mom;\n}\n\n;;\n(function() {\n\n// exports\nFC.formatDate = formatDate;\nFC.formatRange = formatRange;\nFC.oldMomentFormat = oldMomentFormat;\nFC.queryMostGranularFormatUnit = queryMostGranularFormatUnit;\n\n\n// Config\n// ---------------------------------------------------------------------------------------------------------------------\n\n/*\nInserted between chunks in the fake (\"intermediate\") formatting string.\nImportant that it passes as whitespace (\\s) because moment often identifies non-standalone months\nvia a regexp with an \\s.\n*/\nvar PART_SEPARATOR = '\\u000b'; // vertical tab\n\n/*\nInserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,\nbut rather, a \"special\" token that has custom rendering (see specialTokens map).\n*/\nvar SPECIAL_TOKEN_MARKER = '\\u001f'; // information separator 1\n\n/*\nInserted at the beginning and end of a span of text that must have non-zero numeric characters.\nHandling of these markers is done in a post-processing step at the very end of text rendering.\n*/\nvar MAYBE_MARKER = '\\u001e'; // information separator 2\nvar MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global\n\n/*\nAddition formatting tokens we want recognized\n*/\nvar specialTokens = {\n\tt: function(date) { // \"a\" or \"p\"\n\t\treturn oldMomentFormat(date, 'a').charAt(0);\n\t},\n\tT: function(date) { // \"A\" or \"P\"\n\t\treturn oldMomentFormat(date, 'A').charAt(0);\n\t}\n};\n\n/*\nThe first characters of formatting tokens for units that are 1 day or larger.\n`value` is for ranking relative size (lower means bigger).\n`unit` is a normalized unit, used for comparing moments.\n*/\nvar largeTokenMap = {\n\tY: { value: 1, unit: 'year' },\n\tM: { value: 2, unit: 'month' },\n\tW: { value: 3, unit: 'week' }, // ISO week\n\tw: { value: 3, unit: 'week' }, // local week\n\tD: { value: 4, unit: 'day' }, // day of month\n\td: { value: 4, unit: 'day' } // day of week\n};\n\n\n// Single Date Formatting\n// ---------------------------------------------------------------------------------------------------------------------\n\n/*\nFormats `date` with a Moment formatting string, but allow our non-zero areas and special token\n*/\nfunction formatDate(date, formatStr) {\n\treturn renderFakeFormatString(\n\t\tgetParsedFormatString(formatStr).fakeFormatString,\n\t\tdate\n\t);\n}\n\n/*\nCall this if you want Moment's original format method to be used\n*/\nfunction oldMomentFormat(mom, formatStr) {\n\treturn oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\n}\n\n\n// Date Range Formatting\n// -------------------------------------------------------------------------------------------------\n// TODO: make it work with timezone offset\n\n/*\nUsing a formatting string meant for a single date, generate a range string, like\n\"Sep 2 - 9 2013\", that intelligently inserts a separator where the dates differ.\nIf the dates are the same as far as the format string is concerned, just return a single\nrendering of one date, without any separator.\n*/\nfunction formatRange(date1, date2, formatStr, separator, isRTL) {\n\tvar localeData;\n\n\tdate1 = FC.moment.parseZone(date1);\n\tdate2 = FC.moment.parseZone(date2);\n\n\tlocaleData = date1.localeData();\n\n\t// Expand localized format strings, like \"LL\" -> \"MMMM D YYYY\".\n\t// BTW, this is not important for `formatDate` because it is impossible to put custom tokens\n\t// or non-zero areas in Moment's localized format strings.\n\tformatStr = localeData.longDateFormat(formatStr) || formatStr;\n\n\treturn renderParsedFormat(\n\t\tgetParsedFormatString(formatStr),\n\t\tdate1,\n\t\tdate2,\n\t\tseparator || ' - ',\n\t\tisRTL\n\t);\n}\n\n/*\nRenders a range with an already-parsed format string.\n*/\nfunction renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {\n\tvar sameUnits = parsedFormat.sameUnits;\n\tvar unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons\n\tvar unzonedDate2 = date2.clone().stripZone(); // \"\n\n\tvar renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);\n\tvar renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);\n\n\tvar leftI;\n\tvar leftStr = '';\n\tvar rightI;\n\tvar rightStr = '';\n\tvar middleI;\n\tvar middleStr1 = '';\n\tvar middleStr2 = '';\n\tvar middleStr = '';\n\n\t// Start at the leftmost side of the formatting string and continue until you hit a token\n\t// that is not the same between dates.\n\tfor (\n\t\tleftI = 0;\n\t\tleftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI]));\n\t\tleftI++\n\t) {\n\t\tleftStr += renderedParts1[leftI];\n\t}\n\n\t// Similarly, start at the rightmost side of the formatting string and move left\n\tfor (\n\t\trightI = sameUnits.length - 1;\n\t\trightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI]));\n\t\trightI--\n\t) {\n\t\t// If current chunk is on the boundary of unique date-content, and is a special-case\n\t\t// date-formatting postfix character, then don't consume it. Consider it unique date-content.\n\t\t// TODO: make configurable\n\t\tif (rightI - 1 === leftI && renderedParts1[rightI] === '.') {\n\t\t\tbreak;\n\t\t}\n\n\t\trightStr = renderedParts1[rightI] + rightStr;\n\t}\n\n\t// The area in the middle is different for both of the dates.\n\t// Collect them distinctly so we can jam them together later.\n\tfor (middleI = leftI; middleI <= rightI; middleI++) {\n\t\tmiddleStr1 += renderedParts1[middleI];\n\t\tmiddleStr2 += renderedParts2[middleI];\n\t}\n\n\tif (middleStr1 || middleStr2) {\n\t\tif (isRTL) {\n\t\t\tmiddleStr = middleStr2 + separator + middleStr1;\n\t\t}\n\t\telse {\n\t\t\tmiddleStr = middleStr1 + separator + middleStr2;\n\t\t}\n\t}\n\n\treturn processMaybeMarkers(\n\t\tleftStr + middleStr + rightStr\n\t);\n}\n\n\n// Format String Parsing\n// ---------------------------------------------------------------------------------------------------------------------\n\nvar parsedFormatStrCache = {};\n\n/*\nReturns a parsed format string, leveraging a cache.\n*/\nfunction getParsedFormatString(formatStr) {\n\treturn parsedFormatStrCache[formatStr] ||\n\t\t(parsedFormatStrCache[formatStr] = parseFormatString(formatStr));\n}\n\n/*\nParses a format string into the following:\n- fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.\n- sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like \"day\"),\n that indicates how similar a range's start & end must be in order to share the same formatted text.\n If not a token, then the value is null.\n Always a flat array (not nested liked \"chunks\").\n*/\nfunction parseFormatString(formatStr) {\n\tvar chunks = chunkFormatString(formatStr);\n\t\n\treturn {\n\t\tfakeFormatString: buildFakeFormatString(chunks),\n\t\tsameUnits: buildSameUnits(chunks)\n\t};\n}\n\n/*\nBreak the formatting string into an array of chunks.\nA 'maybe' chunk will have nested chunks.\n*/\nfunction chunkFormatString(formatStr) {\n\tvar chunks = [];\n\tvar match;\n\n\t// TODO: more descrimination\n\t// \\4 is a backreference to the first character of a multi-character set.\n\tvar chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g;\n\n\twhile ((match = chunker.exec(formatStr))) {\n\t\tif (match[1]) { // a literal string inside [ ... ]\n\t\t\tchunks.push.apply(chunks, // append\n\t\t\t\tsplitStringLiteral(match[1])\n\t\t\t);\n\t\t}\n\t\telse if (match[2]) { // non-zero formatting inside ( ... )\n\t\t\tchunks.push({ maybe: chunkFormatString(match[2]) });\n\t\t}\n\t\telse if (match[3]) { // a formatting token\n\t\t\tchunks.push({ token: match[3] });\n\t\t}\n\t\telse if (match[5]) { // an unenclosed literal string\n\t\t\tchunks.push.apply(chunks, // append\n\t\t\t\tsplitStringLiteral(match[5])\n\t\t\t);\n\t\t}\n\t}\n\n\treturn chunks;\n}\n\n/*\nPotentially splits a literal-text string into multiple parts. For special cases.\n*/\nfunction splitStringLiteral(s) {\n\tif (s === '. ') {\n\t\treturn [ '.', ' ' ]; // for locales with periods bound to the end of each year/month/date\n\t}\n\telse {\n\t\treturn [ s ];\n\t}\n}\n\n/*\nGiven chunks parsed from a real format string, generate a fake (aka \"intermediate\") format string with special control\ncharacters that will eventually be given to moment for formatting, and then post-processed.\n*/\nfunction buildFakeFormatString(chunks) {\n\tvar parts = [];\n\tvar i, chunk;\n\n\tfor (i = 0; i < chunks.length; i++) {\n\t\tchunk = chunks[i];\n\n\t\tif (typeof chunk === 'string') {\n\t\t\tparts.push('[' + chunk + ']');\n\t\t}\n\t\telse if (chunk.token) {\n\t\t\tif (chunk.token in specialTokens) {\n\t\t\t\tparts.push(\n\t\t\t\t\tSPECIAL_TOKEN_MARKER + // useful during post-processing\n\t\t\t\t\t'[' + chunk.token + ']' // preserve as literal text\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparts.push(chunk.token); // unprotected text implies a format string\n\t\t\t}\n\t\t}\n\t\telse if (chunk.maybe) {\n\t\t\tparts.push(\n\t\t\t\tMAYBE_MARKER + // useful during post-processing\n\t\t\t\tbuildFakeFormatString(chunk.maybe) +\n\t\t\t\tMAYBE_MARKER\n\t\t\t);\n\t\t}\n\t}\n\n\treturn parts.join(PART_SEPARATOR);\n}\n\n/*\nGiven parsed chunks from a real formatting string, generates an array of unit strings (like \"day\") that indicate\nin which regard two dates must be similar in order to share range formatting text.\nThe `chunks` can be nested (because of \"maybe\" chunks), however, the returned array will be flat.\n*/\nfunction buildSameUnits(chunks) {\n\tvar units = [];\n\tvar i, chunk;\n\tvar tokenInfo;\n\n\tfor (i = 0; i < chunks.length; i++) {\n\t\tchunk = chunks[i];\n\n\t\tif (chunk.token) {\n\t\t\ttokenInfo = largeTokenMap[chunk.token.charAt(0)];\n\t\t\tunits.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second\n\t\t}\n\t\telse if (chunk.maybe) {\n\t\t\tunits.push.apply(units, // append\n\t\t\t\tbuildSameUnits(chunk.maybe)\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tunits.push(null);\n\t\t}\n\t}\n\n\treturn units;\n}\n\n\n// Rendering to text\n// ---------------------------------------------------------------------------------------------------------------------\n\n/*\nFormats a date with a fake format string, post-processes the control characters, then returns.\n*/\nfunction renderFakeFormatString(fakeFormatString, date) {\n\treturn processMaybeMarkers(\n\t\trenderFakeFormatStringParts(fakeFormatString, date).join('')\n\t);\n}\n\n/*\nFormats a date into parts that will have been post-processed, EXCEPT for the \"maybe\" markers.\n*/\nfunction renderFakeFormatStringParts(fakeFormatString, date) {\n\tvar parts = [];\n\tvar fakeRender = oldMomentFormat(date, fakeFormatString);\n\tvar fakeParts = fakeRender.split(PART_SEPARATOR);\n\tvar i, fakePart;\n\n\tfor (i = 0; i < fakeParts.length; i++) {\n\t\tfakePart = fakeParts[i];\n\n\t\tif (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {\n\t\t\tparts.push(\n\t\t\t\t// the literal string IS the token's name.\n\t\t\t\t// call special token's registered function.\n\t\t\t\tspecialTokens[fakePart.substring(1)](date)\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tparts.push(fakePart);\n\t\t}\n\t}\n\n\treturn parts;\n}\n\n/*\nAccepts an almost-finally-formatted string and processes the \"maybe\" control characters, returning a new string.\n*/\nfunction processMaybeMarkers(s) {\n\treturn s.replace(MAYBE_REGEXP, function(m0, m1) { // regex assumed to have 'g' flag\n\t\tif (m1.match(/[1-9]/)) { // any non-zero numeric characters?\n\t\t\treturn m1;\n\t\t}\n\t\telse {\n\t\t\treturn '';\n\t\t}\n\t});\n}\n\n\n// Misc Utils\n// -------------------------------------------------------------------------------------------------\n\n/*\nReturns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.\n*/\nfunction queryMostGranularFormatUnit(formatStr) {\n\tvar chunks = chunkFormatString(formatStr);\n\tvar i, chunk;\n\tvar candidate;\n\tvar best;\n\n\tfor (i = 0; i < chunks.length; i++) {\n\t\tchunk = chunks[i];\n\n\t\tif (chunk.token) {\n\t\t\tcandidate = largeTokenMap[chunk.token.charAt(0)];\n\t\t\tif (candidate) {\n\t\t\t\tif (!best || candidate.value > best.value) {\n\t\t\t\t\tbest = candidate;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (best) {\n\t\treturn best.unit;\n\t}\n\n\treturn null;\n};\n\n})();\n\n// quick local references\nvar formatDate = FC.formatDate;\nvar formatRange = FC.formatRange;\nvar oldMomentFormat = FC.oldMomentFormat;\n\n;;\n\nFC.Class = Class; // export\n\n// Class that all other classes will inherit from\nfunction Class() { }\n\n\n// Called on a class to create a subclass.\n// Last argument contains instance methods. Any argument before the last are considered mixins.\nClass.extend = function() {\n\tvar members = {};\n\tvar i;\n\n\tfor (i = 0; i < arguments.length; i++) {\n\t\tcopyOwnProps(arguments[i], members);\n\t}\n\n\treturn extendClass(this, members);\n};\n\n\n// Adds new member variables/methods to the class's prototype.\n// Can be called with another class, or a plain object hash containing new members.\nClass.mixin = function(members) {\n\tcopyOwnProps(members, this.prototype);\n};\n\n\nfunction extendClass(superClass, members) {\n\tvar subClass;\n\n\t// ensure a constructor for the subclass, forwarding all arguments to the super-constructor if it doesn't exist\n\tif (hasOwnProp(members, 'constructor')) {\n\t\tsubClass = members.constructor;\n\t}\n\tif (typeof subClass !== 'function') {\n\t\tsubClass = members.constructor = function() {\n\t\t\tsuperClass.apply(this, arguments);\n\t\t};\n\t}\n\n\t// build the base prototype for the subclass, which is an new object chained to the superclass's prototype\n\tsubClass.prototype = Object.create(superClass.prototype);\n\n\t// copy each member variable/method onto the the subclass's prototype\n\tcopyOwnProps(members, subClass.prototype);\n\n\t// copy over all class variables/methods to the subclass, such as `extend` and `mixin`\n\tcopyOwnProps(superClass, subClass);\n\n\treturn subClass;\n}\n\n;;\n\nvar EmitterMixin = FC.EmitterMixin = {\n\n\t// jQuery-ification via $(this) allows a non-DOM object to have\n\t// the same event handling capabilities (including namespaces).\n\n\n\ton: function(types, handler) {\n\t\t$(this).on(types, this._prepareIntercept(handler));\n\t\treturn this; // for chaining\n\t},\n\n\n\tone: function(types, handler) {\n\t\t$(this).one(types, this._prepareIntercept(handler));\n\t\treturn this; // for chaining\n\t},\n\n\n\t_prepareIntercept: function(handler) {\n\t\t// handlers are always called with an \"event\" object as their first param.\n\t\t// sneak the `this` context and arguments into the extra parameter object\n\t\t// and forward them on to the original handler.\n\t\tvar intercept = function(ev, extra) {\n\t\t\treturn handler.apply(\n\t\t\t\textra.context || this,\n\t\t\t\textra.args || []\n\t\t\t);\n\t\t};\n\n\t\t// mimick jQuery's internal \"proxy\" system (risky, I know)\n\t\t// causing all functions with the same .guid to appear to be the same.\n\t\t// https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448\n\t\t// this is needed for calling .off with the original non-intercept handler.\n\t\tif (!handler.guid) {\n\t\t\thandler.guid = $.guid++;\n\t\t}\n\t\tintercept.guid = handler.guid;\n\n\t\treturn intercept;\n\t},\n\n\n\toff: function(types, handler) {\n\t\t$(this).off(types, handler);\n\n\t\treturn this; // for chaining\n\t},\n\n\n\ttrigger: function(types) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1); // arguments after the first\n\n\t\t// pass in \"extra\" info to the intercept\n\t\t$(this).triggerHandler(types, { args: args });\n\n\t\treturn this; // for chaining\n\t},\n\n\n\ttriggerWith: function(types, context, args) {\n\n\t\t// `triggerHandler` is less reliant on the DOM compared to `trigger`.\n\t\t// pass in \"extra\" info to the intercept.\n\t\t$(this).triggerHandler(types, { context: context, args: args });\n\n\t\treturn this; // for chaining\n\t},\n\n\n\thasHandlers: function(type) {\n\t\tvar hash = $._data(this, 'events'); // http://blog.jquery.com/2012/08/09/jquery-1-8-released/\n\n\t\treturn hash && hash[type] && hash[type].length > 0;\n\t}\n\n};\n\n;;\n\n/*\nUtility methods for easily listening to events on another object,\nand more importantly, easily unlistening from them.\n*/\nvar ListenerMixin = FC.ListenerMixin = (function() {\n\tvar guid = 0;\n\tvar ListenerMixin = {\n\n\t\tlistenerId: null,\n\n\t\t/*\n\t\tGiven an `other` object that has on/off methods, bind the given `callback` to an event by the given name.\n\t\tThe `callback` will be called with the `this` context of the object that .listenTo is being called on.\n\t\tCan be called:\n\t\t\t.listenTo(other, eventName, callback)\n\t\tOR\n\t\t\t.listenTo(other, {\n\t\t\t\teventName1: callback1,\n\t\t\t\teventName2: callback2\n\t\t\t})\n\t\t*/\n\t\tlistenTo: function(other, arg, callback) {\n\t\t\tif (typeof arg === 'object') { // given dictionary of callbacks\n\t\t\t\tfor (var eventName in arg) {\n\t\t\t\t\tif (arg.hasOwnProperty(eventName)) {\n\t\t\t\t\t\tthis.listenTo(other, eventName, arg[eventName]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (typeof arg === 'string') {\n\t\t\t\tother.on(\n\t\t\t\t\targ + '.' + this.getListenerNamespace(), // use event namespacing to identify this object\n\t\t\t\t\t$.proxy(callback, this) // always use `this` context\n\t\t\t\t\t\t// the usually-undesired jQuery guid behavior doesn't matter,\n\t\t\t\t\t\t// because we always unbind via namespace\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t/*\n\t\tCauses the current object to stop listening to events on the `other` object.\n\t\t`eventName` is optional. If omitted, will stop listening to ALL events on `other`.\n\t\t*/\n\t\tstopListeningTo: function(other, eventName) {\n\t\t\tother.off((eventName || '') + '.' + this.getListenerNamespace());\n\t\t},\n\n\t\t/*\n\t\tReturns a string, unique to this object, to be used for event namespacing\n\t\t*/\n\t\tgetListenerNamespace: function() {\n\t\t\tif (this.listenerId == null) {\n\t\t\t\tthis.listenerId = guid++;\n\t\t\t}\n\t\t\treturn '_listener' + this.listenerId;\n\t\t}\n\n\t};\n\treturn ListenerMixin;\n})();\n;;\n\nvar ParsableModelMixin = {\n\n\tstandardPropMap: {}, // will be cloned by allowRawProps\n\n\n\t/*\n\tReturns true/false for success\n\t*/\n\tapplyRawProps: function(rawProps) {\n\t\tvar standardPropMap = this.standardPropMap;\n\t\tvar manualProps = {};\n\t\tvar otherProps = {};\n\t\tvar propName;\n\n\t\tfor (propName in rawProps) {\n\t\t\tif (standardPropMap[propName] === true) { // copy automatically\n\t\t\t\tthis[propName] = rawProps[propName];\n\t\t\t}\n\t\t\telse if (standardPropMap[propName] === false) {\n\t\t\t\tmanualProps[propName] = rawProps[propName];\n\t\t\t}\n\t\t\telse {\n\t\t\t\totherProps[propName] = rawProps[propName];\n\t\t\t}\n\t\t}\n\n\t\tthis.applyOtherRawProps(otherProps);\n\n\t\treturn this.applyManualRawProps(manualProps);\n\t},\n\n\n\t/*\n\tIf subclasses override, they must call this supermethod and return the boolean response.\n\t*/\n\tapplyManualRawProps: function(rawProps) {\n\t\treturn true;\n\t},\n\n\n\tapplyOtherRawProps: function(rawProps) {\n\t\t// subclasses can implement\n\t}\n\n};\n\n\n/*\nTODO: devise a better system\n*/\nvar ParsableModelMixin_allowRawProps = function(propDefs) {\n\tvar proto = this.prototype;\n\n\tproto.standardPropMap = Object.create(proto.standardPropMap);\n\n\tcopyOwnProps(propDefs, proto.standardPropMap);\n};\n\n\n/*\nTODO: devise a better system\n*/\nvar ParsableModelMixin_copyVerbatimStandardProps = function(src, dest) {\n\tvar map = this.prototype.standardPropMap;\n\tvar propName;\n\n\tfor (propName in map) {\n\t\tif (\n\t\t\tsrc[propName] != null && // in the src object?\n\t\t\tmap[propName] === true // false means \"copy verbatim\"\n\t\t) {\n\t\t\tdest[propName] = src[propName];\n\t\t}\n\t}\n};\n\n;;\n\nvar Model = Class.extend(EmitterMixin, ListenerMixin, {\n\n\t_props: null,\n\t_watchers: null,\n\t_globalWatchArgs: null,\n\n\tconstructor: function() {\n\t\tthis._watchers = {};\n\t\tthis._props = {};\n\t\tthis.applyGlobalWatchers();\n\t},\n\n\tapplyGlobalWatchers: function() {\n\t\tvar argSets = this._globalWatchArgs || [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < argSets.length; i++) {\n\t\t\tthis.watch.apply(this, argSets[i]);\n\t\t}\n\t},\n\n\thas: function(name) {\n\t\treturn name in this._props;\n\t},\n\n\tget: function(name) {\n\t\tif (name === undefined) {\n\t\t\treturn this._props;\n\t\t}\n\n\t\treturn this._props[name];\n\t},\n\n\tset: function(name, val) {\n\t\tvar newProps;\n\n\t\tif (typeof name === 'string') {\n\t\t\tnewProps = {};\n\t\t\tnewProps[name] = val === undefined ? null : val;\n\t\t}\n\t\telse {\n\t\t\tnewProps = name;\n\t\t}\n\n\t\tthis.setProps(newProps);\n\t},\n\n\treset: function(newProps) {\n\t\tvar oldProps = this._props;\n\t\tvar changeset = {}; // will have undefined's to signal unsets\n\t\tvar name;\n\n\t\tfor (name in oldProps) {\n\t\t\tchangeset[name] = undefined;\n\t\t}\n\n\t\tfor (name in newProps) {\n\t\t\tchangeset[name] = newProps[name];\n\t\t}\n\n\t\tthis.setProps(changeset);\n\t},\n\n\tunset: function(name) { // accepts a string or array of strings\n\t\tvar newProps = {};\n\t\tvar names;\n\t\tvar i;\n\n\t\tif (typeof name === 'string') {\n\t\t\tnames = [ name ];\n\t\t}\n\t\telse {\n\t\t\tnames = name;\n\t\t}\n\n\t\tfor (i = 0; i < names.length; i++) {\n\t\t\tnewProps[names[i]] = undefined;\n\t\t}\n\n\t\tthis.setProps(newProps);\n\t},\n\n\tsetProps: function(newProps) {\n\t\tvar changedProps = {};\n\t\tvar changedCnt = 0;\n\t\tvar name, val;\n\n\t\tfor (name in newProps) {\n\t\t\tval = newProps[name];\n\n\t\t\t// a change in value?\n\t\t\t// if an object, don't check equality, because might have been mutated internally.\n\t\t\t// TODO: eventually enforce immutability.\n\t\t\tif (\n\t\t\t\ttypeof val === 'object' ||\n\t\t\t\tval !== this._props[name]\n\t\t\t) {\n\t\t\t\tchangedProps[name] = val;\n\t\t\t\tchangedCnt++;\n\t\t\t}\n\t\t}\n\n\t\tif (changedCnt) {\n\n\t\t\tthis.trigger('before:batchChange', changedProps);\n\n\t\t\tfor (name in changedProps) {\n\t\t\t\tval = changedProps[name];\n\n\t\t\t\tthis.trigger('before:change', name, val);\n\t\t\t\tthis.trigger('before:change:' + name, val);\n\t\t\t}\n\n\t\t\tfor (name in changedProps) {\n\t\t\t\tval = changedProps[name];\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\tdelete this._props[name];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._props[name] = val;\n\t\t\t\t}\n\n\t\t\t\tthis.trigger('change:' + name, val);\n\t\t\t\tthis.trigger('change', name, val);\n\t\t\t}\n\n\t\t\tthis.trigger('batchChange', changedProps);\n\t\t}\n\t},\n\n\twatch: function(name, depList, startFunc, stopFunc) {\n\t\tvar _this = this;\n\n\t\tthis.unwatch(name);\n\n\t\tthis._watchers[name] = this._watchDeps(depList, function(deps) {\n\t\t\tvar res = startFunc.call(_this, deps);\n\n\t\t\tif (res && res.then) {\n\t\t\t\t_this.unset(name); // put in an unset state while resolving\n\t\t\t\tres.then(function(val) {\n\t\t\t\t\t_this.set(name, val);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_this.set(name, res);\n\t\t\t}\n\t\t}, function() {\n\t\t\t_this.unset(name);\n\n\t\t\tif (stopFunc) {\n\t\t\t\tstopFunc.call(_this);\n\t\t\t}\n\t\t});\n\t},\n\n\tunwatch: function(name) {\n\t\tvar watcher = this._watchers[name];\n\n\t\tif (watcher) {\n\t\t\tdelete this._watchers[name];\n\t\t\twatcher.teardown();\n\t\t}\n\t},\n\n\t_watchDeps: function(depList, startFunc, stopFunc) {\n\t\tvar _this = this;\n\t\tvar queuedChangeCnt = 0;\n\t\tvar depCnt = depList.length;\n\t\tvar satisfyCnt = 0;\n\t\tvar values = {}; // what's passed as the `deps` arguments\n\t\tvar bindTuples = []; // array of [ eventName, handlerFunc ] arrays\n\t\tvar isCallingStop = false;\n\n\t\tfunction onBeforeDepChange(depName, val, isOptional) {\n\t\t\tqueuedChangeCnt++;\n\t\t\tif (queuedChangeCnt === 1) { // first change to cause a \"stop\" ?\n\t\t\t\tif (satisfyCnt === depCnt) { // all deps previously satisfied?\n\t\t\t\t\tisCallingStop = true;\n\t\t\t\t\tstopFunc();\n\t\t\t\t\tisCallingStop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onDepChange(depName, val, isOptional) {\n\n\t\t\tif (val === undefined) { // unsetting a value?\n\n\t\t\t\t// required dependency that was previously set?\n\t\t\t\tif (!isOptional && values[depName] !== undefined) {\n\t\t\t\t\tsatisfyCnt--;\n\t\t\t\t}\n\n\t\t\t\tdelete values[depName];\n\t\t\t}\n\t\t\telse { // setting a value?\n\n\t\t\t\t// required dependency that was previously unset?\n\t\t\t\tif (!isOptional && values[depName] === undefined) {\n\t\t\t\t\tsatisfyCnt++;\n\t\t\t\t}\n\n\t\t\t\tvalues[depName] = val;\n\t\t\t}\n\n\t\t\tqueuedChangeCnt--;\n\t\t\tif (!queuedChangeCnt) { // last change to cause a \"start\"?\n\n\t\t\t\t// now finally satisfied or satisfied all along?\n\t\t\t\tif (satisfyCnt === depCnt) {\n\n\t\t\t\t\t// if the stopFunc initiated another value change, ignore it.\n\t\t\t\t\t// it will be processed by another change event anyway.\n\t\t\t\t\tif (!isCallingStop) {\n\t\t\t\t\t\tstartFunc(values);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// intercept for .on() that remembers handlers\n\t\tfunction bind(eventName, handler) {\n\t\t\t_this.on(eventName, handler);\n\t\t\tbindTuples.push([ eventName, handler ]);\n\t\t}\n\n\t\t// listen to dependency changes\n\t\tdepList.forEach(function(depName) {\n\t\t\tvar isOptional = false;\n\n\t\t\tif (depName.charAt(0) === '?') { // TODO: more DRY\n\t\t\t\tdepName = depName.substring(1);\n\t\t\t\tisOptional = true;\n\t\t\t}\n\n\t\t\tbind('before:change:' + depName, function(val) {\n\t\t\t\tonBeforeDepChange(depName, val, isOptional);\n\t\t\t});\n\n\t\t\tbind('change:' + depName, function(val) {\n\t\t\t\tonDepChange(depName, val, isOptional);\n\t\t\t});\n\t\t});\n\n\t\t// process current dependency values\n\t\tdepList.forEach(function(depName) {\n\t\t\tvar isOptional = false;\n\n\t\t\tif (depName.charAt(0) === '?') { // TODO: more DRY\n\t\t\t\tdepName = depName.substring(1);\n\t\t\t\tisOptional = true;\n\t\t\t}\n\n\t\t\tif (_this.has(depName)) {\n\t\t\t\tvalues[depName] = _this.get(depName);\n\t\t\t\tsatisfyCnt++;\n\t\t\t}\n\t\t\telse if (isOptional) {\n\t\t\t\tsatisfyCnt++;\n\t\t\t}\n\t\t});\n\n\t\t// initially satisfied\n\t\tif (satisfyCnt === depCnt) {\n\t\t\tstartFunc(values);\n\t\t}\n\n\t\treturn {\n\t\t\tteardown: function() {\n\t\t\t\t// remove all handlers\n\t\t\t\tfor (var i = 0; i < bindTuples.length; i++) {\n\t\t\t\t\t_this.off(bindTuples[i][0], bindTuples[i][1]);\n\t\t\t\t}\n\t\t\t\tbindTuples = null;\n\n\t\t\t\t// was satisfied, so call stopFunc\n\t\t\t\tif (satisfyCnt === depCnt) {\n\t\t\t\t\tstopFunc();\n\t\t\t\t}\n\t\t\t},\n\t\t\tflash: function() {\n\t\t\t\tif (satisfyCnt === depCnt) {\n\t\t\t\t\tstopFunc();\n\t\t\t\t\tstartFunc(values);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t},\n\n\tflash: function(name) {\n\t\tvar watcher = this._watchers[name];\n\n\t\tif (watcher) {\n\t\t\twatcher.flash();\n\t\t}\n\t}\n\n});\n\n\nModel.watch = function(/* same arguments as this.watch() */) {\n\tvar proto = this.prototype;\n\n\tif (!proto._globalWatchArgs) {\n\t\tproto._globalWatchArgs = [];\n\t}\n\n\tproto._globalWatchArgs.push(arguments);\n};\n\n\nFC.Model = Model;\n\n\n;;\n\nvar Promise = {\n\n\tconstruct: function(executor) {\n\t\tvar deferred = $.Deferred();\n\t\tvar promise = deferred.promise();\n\n\t\tif (typeof executor === 'function') {\n\t\t\texecutor(\n\t\t\t\tfunction(val) { // resolve\n\t\t\t\t\tdeferred.resolve(val);\n\t\t\t\t\tattachImmediatelyResolvingThen(promise, val);\n\t\t\t\t},\n\t\t\t\tfunction() { // reject\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t\tattachImmediatelyRejectingThen(promise);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\treturn promise;\n\t},\n\n\tresolve: function(val) {\n\t\tvar deferred = $.Deferred().resolve(val);\n\t\tvar promise = deferred.promise();\n\n\t\tattachImmediatelyResolvingThen(promise, val);\n\n\t\treturn promise;\n\t},\n\n\treject: function() {\n\t\tvar deferred = $.Deferred().reject();\n\t\tvar promise = deferred.promise();\n\n\t\tattachImmediatelyRejectingThen(promise);\n\n\t\treturn promise;\n\t}\n\n};\n\n\nfunction attachImmediatelyResolvingThen(promise, val) {\n\tpromise.then = function(onResolve) {\n\t\tif (typeof onResolve === 'function') {\n\t\t\treturn Promise.resolve(onResolve(val));\n\t\t}\n\t\treturn promise;\n\t};\n}\n\n\nfunction attachImmediatelyRejectingThen(promise) {\n\tpromise.then = function(onResolve, onReject) {\n\t\tif (typeof onReject === 'function') {\n\t\t\tonReject();\n\t\t}\n\t\treturn promise;\n\t};\n}\n\n\nFC.Promise = Promise;\n\n;;\n\nvar TaskQueue = Class.extend(EmitterMixin, {\n\n\tq: null,\n\tisPaused: false,\n\tisRunning: false,\n\n\n\tconstructor: function() {\n\t\tthis.q = [];\n\t},\n\n\n\tqueue: function(/* taskFunc, taskFunc... */) {\n\t\tthis.q.push.apply(this.q, arguments); // append\n\t\tthis.tryStart();\n\t},\n\n\n\tpause: function() {\n\t\tthis.isPaused = true;\n\t},\n\n\n\tresume: function() {\n\t\tthis.isPaused = false;\n\t\tthis.tryStart();\n\t},\n\n\n\ttryStart: function() {\n\t\tif (!this.isRunning && this.canRunNext()) {\n\t\t\tthis.isRunning = true;\n\t\t\tthis.trigger('start');\n\t\t\tthis.runNext();\n\t\t}\n\t},\n\n\n\tcanRunNext: function() {\n\t\treturn !this.isPaused && this.q.length;\n\t},\n\n\n\trunNext: function() { // does not check canRunNext\n\t\tthis.runTask(this.q.shift());\n\t},\n\n\n\trunTask: function(task) {\n\t\tthis.runTaskFunc(task);\n\t},\n\n\n\trunTaskFunc: function(taskFunc) {\n\t\tvar _this = this;\n\t\tvar res = taskFunc();\n\n\t\tif (res && res.then) {\n\t\t\tres.then(done);\n\t\t}\n\t\telse {\n\t\t\tdone();\n\t\t}\n\n\t\tfunction done() {\n\t\t\tif (_this.canRunNext()) {\n\t\t\t\t_this.runNext();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_this.isRunning = false;\n\t\t\t\t_this.trigger('stop');\n\t\t\t}\n\t\t}\n\t}\n\n});\n\nFC.TaskQueue = TaskQueue;\n\n;;\n\nvar RenderQueue = TaskQueue.extend({\n\n\twaitsByNamespace: null,\n\twaitNamespace: null,\n\twaitId: null,\n\n\n\tconstructor: function(waitsByNamespace) {\n\t\tTaskQueue.call(this); // super-constructor\n\n\t\tthis.waitsByNamespace = waitsByNamespace || {};\n\t},\n\n\n\tqueue: function(taskFunc, namespace, type) {\n\t\tvar task = {\n\t\t\tfunc: taskFunc,\n\t\t\tnamespace: namespace,\n\t\t\ttype: type\n\t\t};\n\t\tvar waitMs;\n\n\t\tif (namespace) {\n\t\t\twaitMs = this.waitsByNamespace[namespace];\n\t\t}\n\n\t\tif (this.waitNamespace) {\n\t\t\tif (namespace === this.waitNamespace && waitMs != null) {\n\t\t\t\tthis.delayWait(waitMs);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.clearWait();\n\t\t\t\tthis.tryStart();\n\t\t\t}\n\t\t}\n\n\t\tif (this.compoundTask(task)) { // appended to queue?\n\n\t\t\tif (!this.waitNamespace && waitMs != null) {\n\t\t\t\tthis.startWait(namespace, waitMs);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.tryStart();\n\t\t\t}\n\t\t}\n\t},\n\n\n\tstartWait: function(namespace, waitMs) {\n\t\tthis.waitNamespace = namespace;\n\t\tthis.spawnWait(waitMs);\n\t},\n\n\n\tdelayWait: function(waitMs) {\n\t\tclearTimeout(this.waitId);\n\t\tthis.spawnWait(waitMs);\n\t},\n\n\n\tspawnWait: function(waitMs) {\n\t\tvar _this = this;\n\n\t\tthis.waitId = setTimeout(function() {\n\t\t\t_this.waitNamespace = null;\n\t\t\t_this.tryStart();\n\t\t}, waitMs);\n\t},\n\n\n\tclearWait: function() {\n\t\tif (this.waitNamespace) {\n\t\t\tclearTimeout(this.waitId);\n\t\t\tthis.waitId = null;\n\t\t\tthis.waitNamespace = null;\n\t\t}\n\t},\n\n\n\tcanRunNext: function() {\n\t\tif (!TaskQueue.prototype.canRunNext.apply(this, arguments)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// waiting for a certain namespace to stop receiving tasks?\n\t\tif (this.waitNamespace) {\n\n\t\t\t// if there was a different namespace task in the meantime,\n\t\t\t// that forces all previously-waiting tasks to suddenly execute.\n\t\t\t// TODO: find a way to do this in constant time.\n\t\t\tfor (var q = this.q, i = 0; i < q.length; i++) {\n\t\t\t\tif (q[i].namespace !== this.waitNamespace) {\n\t\t\t\t\treturn true; // allow execution\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\n\trunTask: function(task) {\n\t\tthis.runTaskFunc(task.func);\n\t},\n\n\n\tcompoundTask: function(newTask) {\n\t\tvar q = this.q;\n\t\tvar shouldAppend = true;\n\t\tvar i, task;\n\n\t\tif (newTask.namespace) {\n\n\t\t\tif (newTask.type === 'destroy' || newTask.type === 'init') {\n\n\t\t\t\t// remove all add/remove ops with same namespace, regardless of order\n\t\t\t\tfor (i = q.length - 1; i >= 0; i--) {\n\t\t\t\t\ttask = q[i];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttask.namespace === newTask.namespace &&\n\t\t\t\t\t\t(task.type === 'add' || task.type === 'remove')\n\t\t\t\t\t) {\n\t\t\t\t\t\tq.splice(i, 1); // remove task\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (newTask.type === 'destroy') {\n\t\t\t\t\t// eat away final init/destroy operation\n\t\t\t\t\tif (q.length) {\n\t\t\t\t\t\ttask = q[q.length - 1]; // last task\n\n\t\t\t\t\t\tif (task.namespace === newTask.namespace) {\n\n\t\t\t\t\t\t\t// the init and our destroy cancel each other out\n\t\t\t\t\t\t\tif (task.type === 'init') {\n\t\t\t\t\t\t\t\tshouldAppend = false;\n\t\t\t\t\t\t\t\tq.pop();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// prefer to use the destroy operation that's already present\n\t\t\t\t\t\t\telse if (task.type === 'destroy') {\n\t\t\t\t\t\t\t\tshouldAppend = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (newTask.type === 'init') {\n\t\t\t\t\t// eat away final init operation\n\t\t\t\t\tif (q.length) {\n\t\t\t\t\t\ttask = q[q.length - 1]; // last task\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttask.namespace === newTask.namespace &&\n\t\t\t\t\t\t\ttask.type === 'init'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// our init operation takes precedence\n\t\t\t\t\t\t\tq.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (shouldAppend) {\n\t\t\tq.push(newTask);\n\t\t}\n\n\t\treturn shouldAppend;\n\t}\n\n});\n\nFC.RenderQueue = RenderQueue;\n\n;;\n\n/* A rectangular panel that is absolutely positioned over other content\n------------------------------------------------------------------------------------------------------------------------\nOptions:\n\t- className (string)\n\t- content (HTML string or jQuery element set)\n\t- parentEl\n\t- top\n\t- left\n\t- right (the x coord of where the right edge should be. not a \"CSS\" right)\n\t- autoHide (boolean)\n\t- show (callback)\n\t- hide (callback)\n*/\n\nvar Popover = Class.extend(ListenerMixin, {\n\n\tisHidden: true,\n\toptions: null,\n\tel: null, // the container element for the popover. generated by this object\n\tmargin: 10, // the space required between the popover and the edges of the scroll container\n\n\n\tconstructor: function(options) {\n\t\tthis.options = options || {};\n\t},\n\n\n\t// Shows the popover on the specified position. Renders it if not already\n\tshow: function() {\n\t\tif (this.isHidden) {\n\t\t\tif (!this.el) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t\tthis.el.show();\n\t\t\tthis.position();\n\t\t\tthis.isHidden = false;\n\t\t\tthis.trigger('show');\n\t\t}\n\t},\n\n\n\t// Hides the popover, through CSS, but does not remove it from the DOM\n\thide: function() {\n\t\tif (!this.isHidden) {\n\t\t\tthis.el.hide();\n\t\t\tthis.isHidden = true;\n\t\t\tthis.trigger('hide');\n\t\t}\n\t},\n\n\n\t// Creates `this.el` and renders content inside of it\n\trender: function() {\n\t\tvar _this = this;\n\t\tvar options = this.options;\n\n\t\tthis.el = $('
')\n\t\t\t.addClass(options.className || '')\n\t\t\t.css({\n\t\t\t\t// position initially to the top left to avoid creating scrollbars\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t})\n\t\t\t.append(options.content)\n\t\t\t.appendTo(options.parentEl);\n\n\t\t// when a click happens on anything inside with a 'fc-close' className, hide the popover\n\t\tthis.el.on('click', '.fc-close', function() {\n\t\t\t_this.hide();\n\t\t});\n\n\t\tif (options.autoHide) {\n\t\t\tthis.listenTo($(document), 'mousedown', this.documentMousedown);\n\t\t}\n\t},\n\n\n\t// Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n\tdocumentMousedown: function(ev) {\n\t\t// only hide the popover if the click happened outside the popover\n\t\tif (this.el && !$(ev.target).closest(this.el).length) {\n\t\t\tthis.hide();\n\t\t}\n\t},\n\n\n\t// Hides and unregisters any handlers\n\tremoveElement: function() {\n\t\tthis.hide();\n\n\t\tif (this.el) {\n\t\t\tthis.el.remove();\n\t\t\tthis.el = null;\n\t\t}\n\n\t\tthis.stopListeningTo($(document), 'mousedown');\n\t},\n\n\n\t// Positions the popover optimally, using the top/left/right options\n\tposition: function() {\n\t\tvar options = this.options;\n\t\tvar origin = this.el.offsetParent().offset();\n\t\tvar width = this.el.outerWidth();\n\t\tvar height = this.el.outerHeight();\n\t\tvar windowEl = $(window);\n\t\tvar viewportEl = getScrollParent(this.el);\n\t\tvar viewportTop;\n\t\tvar viewportLeft;\n\t\tvar viewportOffset;\n\t\tvar top; // the \"position\" (not \"offset\") values for the popover\n\t\tvar left; //\n\n\t\t// compute top and left\n\t\ttop = options.top || 0;\n\t\tif (options.left !== undefined) {\n\t\t\tleft = options.left;\n\t\t}\n\t\telse if (options.right !== undefined) {\n\t\t\tleft = options.right - width; // derive the left value from the right value\n\t\t}\n\t\telse {\n\t\t\tleft = 0;\n\t\t}\n\n\t\tif (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result\n\t\t\tviewportEl = windowEl;\n\t\t\tviewportTop = 0; // the window is always at the top left\n\t\t\tviewportLeft = 0; // (and .offset() won't work if called here)\n\t\t}\n\t\telse {\n\t\t\tviewportOffset = viewportEl.offset();\n\t\t\tviewportTop = viewportOffset.top;\n\t\t\tviewportLeft = viewportOffset.left;\n\t\t}\n\n\t\t// if the window is scrolled, it causes the visible area to be further down\n\t\tviewportTop += windowEl.scrollTop();\n\t\tviewportLeft += windowEl.scrollLeft();\n\n\t\t// constrain to the view port. if constrained by two edges, give precedence to top/left\n\t\tif (options.viewportConstrain !== false) {\n\t\t\ttop = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\n\t\t\ttop = Math.max(top, viewportTop + this.margin);\n\t\t\tleft = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\n\t\t\tleft = Math.max(left, viewportLeft + this.margin);\n\t\t}\n\n\t\tthis.el.css({\n\t\t\ttop: top - origin.top,\n\t\t\tleft: left - origin.left\n\t\t});\n\t},\n\n\n\t// Triggers a callback. Calls a function in the option hash of the same name.\n\t// Arguments beyond the first `name` are forwarded on.\n\t// TODO: better code reuse for this. Repeat code\n\ttrigger: function(name) {\n\t\tif (this.options[name]) {\n\t\t\tthis.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\t}\n\n});\n\n;;\n\n/*\nA cache for the left/right/top/bottom/width/height values for one or more elements.\nWorks with both offset (from topleft document) and position (from offsetParent).\n\noptions:\n- els\n- isHorizontal\n- isVertical\n*/\nvar CoordCache = FC.CoordCache = Class.extend({\n\n\tels: null, // jQuery set (assumed to be siblings)\n\tforcedOffsetParentEl: null, // options can override the natural offsetParent\n\torigin: null, // {left,top} position of offsetParent of els\n\tboundingRect: null, // constrain cordinates to this rectangle. {left,right,top,bottom} or null\n\tisHorizontal: false, // whether to query for left/right/width\n\tisVertical: false, // whether to query for top/bottom/height\n\n\t// arrays of coordinates (offsets from topleft of document)\n\tlefts: null,\n\trights: null,\n\ttops: null,\n\tbottoms: null,\n\n\n\tconstructor: function(options) {\n\t\tthis.els = $(options.els);\n\t\tthis.isHorizontal = options.isHorizontal;\n\t\tthis.isVertical = options.isVertical;\n\t\tthis.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;\n\t},\n\n\n\t// Queries the els for coordinates and stores them.\n\t// Call this method before using and of the get* methods below.\n\tbuild: function() {\n\t\tvar offsetParentEl = this.forcedOffsetParentEl;\n\t\tif (!offsetParentEl && this.els.length > 0) {\n\t\t\toffsetParentEl = this.els.eq(0).offsetParent();\n\t\t}\n\n\t\tthis.origin = offsetParentEl ?\n\t\t\toffsetParentEl.offset() :\n\t\t\tnull;\n\n\t\tthis.boundingRect = this.queryBoundingRect();\n\n\t\tif (this.isHorizontal) {\n\t\t\tthis.buildElHorizontals();\n\t\t}\n\t\tif (this.isVertical) {\n\t\t\tthis.buildElVerticals();\n\t\t}\n\t},\n\n\n\t// Destroys all internal data about coordinates, freeing memory\n\tclear: function() {\n\t\tthis.origin = null;\n\t\tthis.boundingRect = null;\n\t\tthis.lefts = null;\n\t\tthis.rights = null;\n\t\tthis.tops = null;\n\t\tthis.bottoms = null;\n\t},\n\n\n\t// When called, if coord caches aren't built, builds them\n\tensureBuilt: function() {\n\t\tif (!this.origin) {\n\t\t\tthis.build();\n\t\t}\n\t},\n\n\n\t// Populates the left/right internal coordinate arrays\n\tbuildElHorizontals: function() {\n\t\tvar lefts = [];\n\t\tvar rights = [];\n\n\t\tthis.els.each(function(i, node) {\n\t\t\tvar el = $(node);\n\t\t\tvar left = el.offset().left;\n\t\t\tvar width = el.outerWidth();\n\n\t\t\tlefts.push(left);\n\t\t\trights.push(left + width);\n\t\t});\n\n\t\tthis.lefts = lefts;\n\t\tthis.rights = rights;\n\t},\n\n\n\t// Populates the top/bottom internal coordinate arrays\n\tbuildElVerticals: function() {\n\t\tvar tops = [];\n\t\tvar bottoms = [];\n\n\t\tthis.els.each(function(i, node) {\n\t\t\tvar el = $(node);\n\t\t\tvar top = el.offset().top;\n\t\t\tvar height = el.outerHeight();\n\n\t\t\ttops.push(top);\n\t\t\tbottoms.push(top + height);\n\t\t});\n\n\t\tthis.tops = tops;\n\t\tthis.bottoms = bottoms;\n\t},\n\n\n\t// Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n\t// If no intersection is made, returns undefined.\n\tgetHorizontalIndex: function(leftOffset) {\n\t\tthis.ensureBuilt();\n\n\t\tvar lefts = this.lefts;\n\t\tvar rights = this.rights;\n\t\tvar len = lefts.length;\n\t\tvar i;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (leftOffset >= lefts[i] && leftOffset < rights[i]) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Given a top offset (from document top), returns the index of the el that it vertically intersects.\n\t// If no intersection is made, returns undefined.\n\tgetVerticalIndex: function(topOffset) {\n\t\tthis.ensureBuilt();\n\n\t\tvar tops = this.tops;\n\t\tvar bottoms = this.bottoms;\n\t\tvar len = tops.length;\n\t\tvar i;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (topOffset >= tops[i] && topOffset < bottoms[i]) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Gets the left offset (from document left) of the element at the given index\n\tgetLeftOffset: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.lefts[leftIndex];\n\t},\n\n\n\t// Gets the left position (from offsetParent left) of the element at the given index\n\tgetLeftPosition: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.lefts[leftIndex] - this.origin.left;\n\t},\n\n\n\t// Gets the right offset (from document left) of the element at the given index.\n\t// This value is NOT relative to the document's right edge, like the CSS concept of \"right\" would be.\n\tgetRightOffset: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.rights[leftIndex];\n\t},\n\n\n\t// Gets the right position (from offsetParent left) of the element at the given index.\n\t// This value is NOT relative to the offsetParent's right edge, like the CSS concept of \"right\" would be.\n\tgetRightPosition: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.rights[leftIndex] - this.origin.left;\n\t},\n\n\n\t// Gets the width of the element at the given index\n\tgetWidth: function(leftIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.rights[leftIndex] - this.lefts[leftIndex];\n\t},\n\n\n\t// Gets the top offset (from document top) of the element at the given index\n\tgetTopOffset: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.tops[topIndex];\n\t},\n\n\n\t// Gets the top position (from offsetParent top) of the element at the given position\n\tgetTopPosition: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.tops[topIndex] - this.origin.top;\n\t},\n\n\t// Gets the bottom offset (from the document top) of the element at the given index.\n\t// This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\n\tgetBottomOffset: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.bottoms[topIndex];\n\t},\n\n\n\t// Gets the bottom position (from the offsetParent top) of the element at the given index.\n\t// This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\n\tgetBottomPosition: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.bottoms[topIndex] - this.origin.top;\n\t},\n\n\n\t// Gets the height of the element at the given index\n\tgetHeight: function(topIndex) {\n\t\tthis.ensureBuilt();\n\t\treturn this.bottoms[topIndex] - this.tops[topIndex];\n\t},\n\n\n\t// Bounding Rect\n\t// TODO: decouple this from CoordCache\n\n\t// Compute and return what the elements' bounding rectangle is, from the user's perspective.\n\t// Right now, only returns a rectangle if constrained by an overflow:scroll element.\n\t// Returns null if there are no elements\n\tqueryBoundingRect: function() {\n\t\tvar scrollParentEl;\n\n\t\tif (this.els.length > 0) {\n\t\t\tscrollParentEl = getScrollParent(this.els.eq(0));\n\n\t\t\tif (!scrollParentEl.is(document)) {\n\t\t\t\treturn getClientRect(scrollParentEl);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\tisPointInBounds: function(leftOffset, topOffset) {\n\t\treturn this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);\n\t},\n\n\tisLeftInBounds: function(leftOffset) {\n\t\treturn !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right);\n\t},\n\n\tisTopInBounds: function(topOffset) {\n\t\treturn !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom);\n\t}\n\n});\n\n;;\n\n/* Tracks a drag's mouse movement, firing various handlers\n----------------------------------------------------------------------------------------------------------------------*/\n// TODO: use Emitter\n\nvar DragListener = FC.DragListener = Class.extend(ListenerMixin, {\n\n\toptions: null,\n\tsubjectEl: null,\n\n\t// coordinates of the initial mousedown\n\toriginX: null,\n\toriginY: null,\n\n\t// the wrapping element that scrolls, or MIGHT scroll if there's overflow.\n\t// TODO: do this for wrappers that have overflow:hidden as well.\n\tscrollEl: null,\n\n\tisInteracting: false,\n\tisDistanceSurpassed: false,\n\tisDelayEnded: false,\n\tisDragging: false,\n\tisTouch: false,\n\tisGeneric: false, // initiated by 'dragstart' (jqui)\n\n\tdelay: null,\n\tdelayTimeoutId: null,\n\tminDistance: null,\n\n\tshouldCancelTouchScroll: true,\n\tscrollAlwaysKills: false,\n\n\n\tconstructor: function(options) {\n\t\tthis.options = options || {};\n\t},\n\n\n\t// Interaction (high-level)\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tstartInteraction: function(ev, extraOptions) {\n\n\t\tif (ev.type === 'mousedown') {\n\t\t\tif (GlobalEmitter.get().shouldIgnoreMouse()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (!isPrimaryMouseButton(ev)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tev.preventDefault(); // prevents native selection in most browsers\n\t\t\t}\n\t\t}\n\n\t\tif (!this.isInteracting) {\n\n\t\t\t// process options\n\t\t\textraOptions = extraOptions || {};\n\t\t\tthis.delay = firstDefined(extraOptions.delay, this.options.delay, 0);\n\t\t\tthis.minDistance = firstDefined(extraOptions.distance, this.options.distance, 0);\n\t\t\tthis.subjectEl = this.options.subjectEl;\n\n\t\t\tpreventSelection($('body'));\n\n\t\t\tthis.isInteracting = true;\n\t\t\tthis.isTouch = getEvIsTouch(ev);\n\t\t\tthis.isGeneric = ev.type === 'dragstart';\n\t\t\tthis.isDelayEnded = false;\n\t\t\tthis.isDistanceSurpassed = false;\n\n\t\t\tthis.originX = getEvX(ev);\n\t\t\tthis.originY = getEvY(ev);\n\t\t\tthis.scrollEl = getScrollParent($(ev.target));\n\n\t\t\tthis.bindHandlers();\n\t\t\tthis.initAutoScroll();\n\t\t\tthis.handleInteractionStart(ev);\n\t\t\tthis.startDelay(ev);\n\n\t\t\tif (!this.minDistance) {\n\t\t\t\tthis.handleDistanceSurpassed(ev);\n\t\t\t}\n\t\t}\n\t},\n\n\n\thandleInteractionStart: function(ev) {\n\t\tthis.trigger('interactionStart', ev);\n\t},\n\n\n\tendInteraction: function(ev, isCancelled) {\n\t\tif (this.isInteracting) {\n\t\t\tthis.endDrag(ev);\n\n\t\t\tif (this.delayTimeoutId) {\n\t\t\t\tclearTimeout(this.delayTimeoutId);\n\t\t\t\tthis.delayTimeoutId = null;\n\t\t\t}\n\n\t\t\tthis.destroyAutoScroll();\n\t\t\tthis.unbindHandlers();\n\n\t\t\tthis.isInteracting = false;\n\t\t\tthis.handleInteractionEnd(ev, isCancelled);\n\n\t\t\tallowSelection($('body'));\n\t\t}\n\t},\n\n\n\thandleInteractionEnd: function(ev, isCancelled) {\n\t\tthis.trigger('interactionEnd', ev, isCancelled || false);\n\t},\n\n\n\t// Binding To DOM\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tbindHandlers: function() {\n\t\t// some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,\n\t\t// so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.\n\t\tvar globalEmitter = GlobalEmitter.get();\n\n\t\tif (this.isGeneric) {\n\t\t\tthis.listenTo($(document), { // might only work on iOS because of GlobalEmitter's bind :(\n\t\t\t\tdrag: this.handleMove,\n\t\t\t\tdragstop: this.endInteraction\n\t\t\t});\n\t\t}\n\t\telse if (this.isTouch) {\n\t\t\tthis.listenTo(globalEmitter, {\n\t\t\t\ttouchmove: this.handleTouchMove,\n\t\t\t\ttouchend: this.endInteraction,\n\t\t\t\tscroll: this.handleTouchScroll\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.listenTo(globalEmitter, {\n\t\t\t\tmousemove: this.handleMouseMove,\n\t\t\t\tmouseup: this.endInteraction\n\t\t\t});\n\t\t}\n\n\t\tthis.listenTo(globalEmitter, {\n\t\t\tselectstart: preventDefault, // don't allow selection while dragging\n\t\t\tcontextmenu: preventDefault // long taps would open menu on Chrome dev tools\n\t\t});\n\t},\n\n\n\tunbindHandlers: function() {\n\t\tthis.stopListeningTo(GlobalEmitter.get());\n\t\tthis.stopListeningTo($(document)); // for isGeneric\n\t},\n\n\n\t// Drag (high-level)\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// extraOptions ignored if drag already started\n\tstartDrag: function(ev, extraOptions) {\n\t\tthis.startInteraction(ev, extraOptions); // ensure interaction began\n\n\t\tif (!this.isDragging) {\n\t\t\tthis.isDragging = true;\n\t\t\tthis.handleDragStart(ev);\n\t\t}\n\t},\n\n\n\thandleDragStart: function(ev) {\n\t\tthis.trigger('dragStart', ev);\n\t},\n\n\n\thandleMove: function(ev) {\n\t\tvar dx = getEvX(ev) - this.originX;\n\t\tvar dy = getEvY(ev) - this.originY;\n\t\tvar minDistance = this.minDistance;\n\t\tvar distanceSq; // current distance from the origin, squared\n\n\t\tif (!this.isDistanceSurpassed) {\n\t\t\tdistanceSq = dx * dx + dy * dy;\n\t\t\tif (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\n\t\t\t\tthis.handleDistanceSurpassed(ev);\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDragging) {\n\t\t\tthis.handleDrag(dx, dy, ev);\n\t\t}\n\t},\n\n\n\t// Called while the mouse is being moved and when we know a legitimate drag is taking place\n\thandleDrag: function(dx, dy, ev) {\n\t\tthis.trigger('drag', dx, dy, ev);\n\t\tthis.updateAutoScroll(ev); // will possibly cause scrolling\n\t},\n\n\n\tendDrag: function(ev) {\n\t\tif (this.isDragging) {\n\t\t\tthis.isDragging = false;\n\t\t\tthis.handleDragEnd(ev);\n\t\t}\n\t},\n\n\n\thandleDragEnd: function(ev) {\n\t\tthis.trigger('dragEnd', ev);\n\t},\n\n\n\t// Delay\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tstartDelay: function(initialEv) {\n\t\tvar _this = this;\n\n\t\tif (this.delay) {\n\t\t\tthis.delayTimeoutId = setTimeout(function() {\n\t\t\t\t_this.handleDelayEnd(initialEv);\n\t\t\t}, this.delay);\n\t\t}\n\t\telse {\n\t\t\tthis.handleDelayEnd(initialEv);\n\t\t}\n\t},\n\n\n\thandleDelayEnd: function(initialEv) {\n\t\tthis.isDelayEnded = true;\n\n\t\tif (this.isDistanceSurpassed) {\n\t\t\tthis.startDrag(initialEv);\n\t\t}\n\t},\n\n\n\t// Distance\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\thandleDistanceSurpassed: function(ev) {\n\t\tthis.isDistanceSurpassed = true;\n\n\t\tif (this.isDelayEnded) {\n\t\t\tthis.startDrag(ev);\n\t\t}\n\t},\n\n\n\t// Mouse / Touch\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\thandleTouchMove: function(ev) {\n\n\t\t// prevent inertia and touchmove-scrolling while dragging\n\t\tif (this.isDragging && this.shouldCancelTouchScroll) {\n\t\t\tev.preventDefault();\n\t\t}\n\n\t\tthis.handleMove(ev);\n\t},\n\n\n\thandleMouseMove: function(ev) {\n\t\tthis.handleMove(ev);\n\t},\n\n\n\t// Scrolling (unrelated to auto-scroll)\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\thandleTouchScroll: function(ev) {\n\t\t// if the drag is being initiated by touch, but a scroll happens before\n\t\t// the drag-initiating delay is over, cancel the drag\n\t\tif (!this.isDragging || this.scrollAlwaysKills) {\n\t\t\tthis.endInteraction(ev, true); // isCancelled=true\n\t\t}\n\t},\n\n\n\t// Utils\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Triggers a callback. Calls a function in the option hash of the same name.\n\t// Arguments beyond the first `name` are forwarded on.\n\ttrigger: function(name) {\n\t\tif (this.options[name]) {\n\t\t\tthis.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\t\t// makes _methods callable by event name. TODO: kill this\n\t\tif (this['_' + name]) {\n\t\t\tthis['_' + name].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\t}\n\n\n});\n\n;;\n/*\nthis.scrollEl is set in DragListener\n*/\nDragListener.mixin({\n\n\tisAutoScroll: false,\n\n\tscrollBounds: null, // { top, bottom, left, right }\n\tscrollTopVel: null, // pixels per second\n\tscrollLeftVel: null, // pixels per second\n\tscrollIntervalId: null, // ID of setTimeout for scrolling animation loop\n\n\t// defaults\n\tscrollSensitivity: 30, // pixels from edge for scrolling to start\n\tscrollSpeed: 200, // pixels per second, at maximum speed\n\tscrollIntervalMs: 50, // millisecond wait between scroll increment\n\n\n\tinitAutoScroll: function() {\n\t\tvar scrollEl = this.scrollEl;\n\n\t\tthis.isAutoScroll =\n\t\t\tthis.options.scroll &&\n\t\t\tscrollEl &&\n\t\t\t!scrollEl.is(window) &&\n\t\t\t!scrollEl.is(document);\n\n\t\tif (this.isAutoScroll) {\n\t\t\t// debounce makes sure rapid calls don't happen\n\t\t\tthis.listenTo(scrollEl, 'scroll', debounce(this.handleDebouncedScroll, 100));\n\t\t}\n\t},\n\n\n\tdestroyAutoScroll: function() {\n\t\tthis.endAutoScroll(); // kill any animation loop\n\n\t\t// remove the scroll handler if there is a scrollEl\n\t\tif (this.isAutoScroll) {\n\t\t\tthis.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(\n\t\t}\n\t},\n\n\n\t// Computes and stores the bounding rectangle of scrollEl\n\tcomputeScrollBounds: function() {\n\t\tif (this.isAutoScroll) {\n\t\t\tthis.scrollBounds = getOuterRect(this.scrollEl);\n\t\t\t// TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars\n\t\t}\n\t},\n\n\n\t// Called when the dragging is in progress and scrolling should be updated\n\tupdateAutoScroll: function(ev) {\n\t\tvar sensitivity = this.scrollSensitivity;\n\t\tvar bounds = this.scrollBounds;\n\t\tvar topCloseness, bottomCloseness;\n\t\tvar leftCloseness, rightCloseness;\n\t\tvar topVel = 0;\n\t\tvar leftVel = 0;\n\n\t\tif (bounds) { // only scroll if scrollEl exists\n\n\t\t\t// compute closeness to edges. valid range is from 0.0 - 1.0\n\t\t\ttopCloseness = (sensitivity - (getEvY(ev) - bounds.top)) / sensitivity;\n\t\t\tbottomCloseness = (sensitivity - (bounds.bottom - getEvY(ev))) / sensitivity;\n\t\t\tleftCloseness = (sensitivity - (getEvX(ev) - bounds.left)) / sensitivity;\n\t\t\trightCloseness = (sensitivity - (bounds.right - getEvX(ev))) / sensitivity;\n\n\t\t\t// translate vertical closeness into velocity.\n\t\t\t// mouse must be completely in bounds for velocity to happen.\n\t\t\tif (topCloseness >= 0 && topCloseness <= 1) {\n\t\t\t\ttopVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\n\t\t\t}\n\t\t\telse if (bottomCloseness >= 0 && bottomCloseness <= 1) {\n\t\t\t\ttopVel = bottomCloseness * this.scrollSpeed;\n\t\t\t}\n\n\t\t\t// translate horizontal closeness into velocity\n\t\t\tif (leftCloseness >= 0 && leftCloseness <= 1) {\n\t\t\t\tleftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\n\t\t\t}\n\t\t\telse if (rightCloseness >= 0 && rightCloseness <= 1) {\n\t\t\t\tleftVel = rightCloseness * this.scrollSpeed;\n\t\t\t}\n\t\t}\n\n\t\tthis.setScrollVel(topVel, leftVel);\n\t},\n\n\n\t// Sets the speed-of-scrolling for the scrollEl\n\tsetScrollVel: function(topVel, leftVel) {\n\n\t\tthis.scrollTopVel = topVel;\n\t\tthis.scrollLeftVel = leftVel;\n\n\t\tthis.constrainScrollVel(); // massages into realistic values\n\n\t\t// if there is non-zero velocity, and an animation loop hasn't already started, then START\n\t\tif ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\n\t\t\tthis.scrollIntervalId = setInterval(\n\t\t\t\tproxy(this, 'scrollIntervalFunc'), // scope to `this`\n\t\t\t\tthis.scrollIntervalMs\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\n\tconstrainScrollVel: function() {\n\t\tvar el = this.scrollEl;\n\n\t\tif (this.scrollTopVel < 0) { // scrolling up?\n\t\t\tif (el.scrollTop() <= 0) { // already scrolled all the way up?\n\t\t\t\tthis.scrollTopVel = 0;\n\t\t\t}\n\t\t}\n\t\telse if (this.scrollTopVel > 0) { // scrolling down?\n\t\t\tif (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down?\n\t\t\t\tthis.scrollTopVel = 0;\n\t\t\t}\n\t\t}\n\n\t\tif (this.scrollLeftVel < 0) { // scrolling left?\n\t\t\tif (el.scrollLeft() <= 0) { // already scrolled all the left?\n\t\t\t\tthis.scrollLeftVel = 0;\n\t\t\t}\n\t\t}\n\t\telse if (this.scrollLeftVel > 0) { // scrolling right?\n\t\t\tif (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right?\n\t\t\t\tthis.scrollLeftVel = 0;\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// This function gets called during every iteration of the scrolling animation loop\n\tscrollIntervalFunc: function() {\n\t\tvar el = this.scrollEl;\n\t\tvar frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\n\n\t\t// change the value of scrollEl's scroll\n\t\tif (this.scrollTopVel) {\n\t\t\tel.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\n\t\t}\n\t\tif (this.scrollLeftVel) {\n\t\t\tel.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\n\t\t}\n\n\t\tthis.constrainScrollVel(); // since the scroll values changed, recompute the velocities\n\n\t\t// if scrolled all the way, which causes the vels to be zero, stop the animation loop\n\t\tif (!this.scrollTopVel && !this.scrollLeftVel) {\n\t\t\tthis.endAutoScroll();\n\t\t}\n\t},\n\n\n\t// Kills any existing scrolling animation loop\n\tendAutoScroll: function() {\n\t\tif (this.scrollIntervalId) {\n\t\t\tclearInterval(this.scrollIntervalId);\n\t\t\tthis.scrollIntervalId = null;\n\n\t\t\tthis.handleScrollEnd();\n\t\t}\n\t},\n\n\n\t// Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\n\thandleDebouncedScroll: function() {\n\t\t// recompute all coordinates, but *only* if this is *not* part of our scrolling animation\n\t\tif (!this.scrollIntervalId) {\n\t\t\tthis.handleScrollEnd();\n\t\t}\n\t},\n\n\n\t// Called when scrolling has stopped, whether through auto scroll, or the user scrolling\n\thandleScrollEnd: function() {\n\t}\n\n});\n;;\n\n/* Tracks mouse movements over a component and raises events about which hit the mouse is over.\n------------------------------------------------------------------------------------------------------------------------\noptions:\n- subjectEl\n- subjectCenter\n*/\n\nvar HitDragListener = DragListener.extend({\n\n\tcomponent: null, // converts coordinates to hits\n\t\t// methods: hitsNeeded, hitsNotNeeded, queryHit\n\n\torigHit: null, // the hit the mouse was over when listening started\n\thit: null, // the hit the mouse is over\n\tcoordAdjust: null, // delta that will be added to the mouse coordinates when computing collisions\n\n\n\tconstructor: function(component, options) {\n\t\tDragListener.call(this, options); // call the super-constructor\n\n\t\tthis.component = component;\n\t},\n\n\n\t// Called when drag listening starts (but a real drag has not necessarily began).\n\t// ev might be undefined if dragging was started manually.\n\thandleInteractionStart: function(ev) {\n\t\tvar subjectEl = this.subjectEl;\n\t\tvar subjectRect;\n\t\tvar origPoint;\n\t\tvar point;\n\n\t\tthis.component.hitsNeeded();\n\t\tthis.computeScrollBounds(); // for autoscroll\n\n\t\tif (ev) {\n\t\t\torigPoint = { left: getEvX(ev), top: getEvY(ev) };\n\t\t\tpoint = origPoint;\n\n\t\t\t// constrain the point to bounds of the element being dragged\n\t\t\tif (subjectEl) {\n\t\t\t\tsubjectRect = getOuterRect(subjectEl); // used for centering as well\n\t\t\t\tpoint = constrainPoint(point, subjectRect);\n\t\t\t}\n\n\t\t\tthis.origHit = this.queryHit(point.left, point.top);\n\n\t\t\t// treat the center of the subject as the collision point?\n\t\t\tif (subjectEl && this.options.subjectCenter) {\n\n\t\t\t\t// only consider the area the subject overlaps the hit. best for large subjects.\n\t\t\t\t// TODO: skip this if hit didn't supply left/right/top/bottom\n\t\t\t\tif (this.origHit) {\n\t\t\t\t\tsubjectRect = intersectRects(this.origHit, subjectRect) ||\n\t\t\t\t\t\tsubjectRect; // in case there is no intersection\n\t\t\t\t}\n\n\t\t\t\tpoint = getRectCenter(subjectRect);\n\t\t\t}\n\n\t\t\tthis.coordAdjust = diffPoints(point, origPoint); // point - origPoint\n\t\t}\n\t\telse {\n\t\t\tthis.origHit = null;\n\t\t\tthis.coordAdjust = null;\n\t\t}\n\n\t\t// call the super-method. do it after origHit has been computed\n\t\tDragListener.prototype.handleInteractionStart.apply(this, arguments);\n\t},\n\n\n\t// Called when the actual drag has started\n\thandleDragStart: function(ev) {\n\t\tvar hit;\n\n\t\tDragListener.prototype.handleDragStart.apply(this, arguments); // call the super-method\n\n\t\t// might be different from this.origHit if the min-distance is large\n\t\thit = this.queryHit(getEvX(ev), getEvY(ev));\n\n\t\t// report the initial hit the mouse is over\n\t\t// especially important if no min-distance and drag starts immediately\n\t\tif (hit) {\n\t\t\tthis.handleHitOver(hit);\n\t\t}\n\t},\n\n\n\t// Called when the drag moves\n\thandleDrag: function(dx, dy, ev) {\n\t\tvar hit;\n\n\t\tDragListener.prototype.handleDrag.apply(this, arguments); // call the super-method\n\n\t\thit = this.queryHit(getEvX(ev), getEvY(ev));\n\n\t\tif (!isHitsEqual(hit, this.hit)) { // a different hit than before?\n\t\t\tif (this.hit) {\n\t\t\t\tthis.handleHitOut();\n\t\t\t}\n\t\t\tif (hit) {\n\t\t\t\tthis.handleHitOver(hit);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Called when dragging has been stopped\n\thandleDragEnd: function() {\n\t\tthis.handleHitDone();\n\t\tDragListener.prototype.handleDragEnd.apply(this, arguments); // call the super-method\n\t},\n\n\n\t// Called when a the mouse has just moved over a new hit\n\thandleHitOver: function(hit) {\n\t\tvar isOrig = isHitsEqual(hit, this.origHit);\n\n\t\tthis.hit = hit;\n\n\t\tthis.trigger('hitOver', this.hit, isOrig, this.origHit);\n\t},\n\n\n\t// Called when the mouse has just moved out of a hit\n\thandleHitOut: function() {\n\t\tif (this.hit) {\n\t\t\tthis.trigger('hitOut', this.hit);\n\t\t\tthis.handleHitDone();\n\t\t\tthis.hit = null;\n\t\t}\n\t},\n\n\n\t// Called after a hitOut. Also called before a dragStop\n\thandleHitDone: function() {\n\t\tif (this.hit) {\n\t\t\tthis.trigger('hitDone', this.hit);\n\t\t}\n\t},\n\n\n\t// Called when the interaction ends, whether there was a real drag or not\n\thandleInteractionEnd: function() {\n\t\tDragListener.prototype.handleInteractionEnd.apply(this, arguments); // call the super-method\n\n\t\tthis.origHit = null;\n\t\tthis.hit = null;\n\n\t\tthis.component.hitsNotNeeded();\n\t},\n\n\n\t// Called when scrolling has stopped, whether through auto scroll, or the user scrolling\n\thandleScrollEnd: function() {\n\t\tDragListener.prototype.handleScrollEnd.apply(this, arguments); // call the super-method\n\n\t\t// hits' absolute positions will be in new places after a user's scroll.\n\t\t// HACK for recomputing.\n\t\tif (this.isDragging) {\n\t\t\tthis.component.releaseHits();\n\t\t\tthis.component.prepareHits();\n\t\t}\n\t},\n\n\n\t// Gets the hit underneath the coordinates for the given mouse event\n\tqueryHit: function(left, top) {\n\n\t\tif (this.coordAdjust) {\n\t\t\tleft += this.coordAdjust.left;\n\t\t\ttop += this.coordAdjust.top;\n\t\t}\n\n\t\treturn this.component.queryHit(left, top);\n\t}\n\n});\n\n\n// Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.\n// Two null values will be considered equal, as two \"out of the component\" states are the same.\nfunction isHitsEqual(hit0, hit1) {\n\n\tif (!hit0 && !hit1) {\n\t\treturn true;\n\t}\n\n\tif (hit0 && hit1) {\n\t\treturn hit0.component === hit1.component &&\n\t\t\tisHitPropsWithin(hit0, hit1) &&\n\t\t\tisHitPropsWithin(hit1, hit0); // ensures all props are identical\n\t}\n\n\treturn false;\n}\n\n\n// Returns true if all of subHit's non-standard properties are within superHit\nfunction isHitPropsWithin(subHit, superHit) {\n\tfor (var propName in subHit) {\n\t\tif (!/^(component|left|right|top|bottom)$/.test(propName)) {\n\t\t\tif (subHit[propName] !== superHit[propName]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\n;;\n\n/*\nListens to document and window-level user-interaction events, like touch events and mouse events,\nand fires these events as-is to whoever is observing a GlobalEmitter.\nBest when used as a singleton via GlobalEmitter.get()\n\nNormalizes mouse/touch events. For examples:\n- ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click\n- compensates for various buggy scenarios where a touchend does not fire\n*/\n\nFC.touchMouseIgnoreWait = 500;\n\nvar GlobalEmitter = Class.extend(ListenerMixin, EmitterMixin, {\n\n\tisTouching: false,\n\tmouseIgnoreDepth: 0,\n\thandleScrollProxy: null,\n\n\n\tbind: function() {\n\t\tvar _this = this;\n\n\t\tthis.listenTo($(document), {\n\t\t\ttouchstart: this.handleTouchStart,\n\t\t\ttouchcancel: this.handleTouchCancel,\n\t\t\ttouchend: this.handleTouchEnd,\n\t\t\tmousedown: this.handleMouseDown,\n\t\t\tmousemove: this.handleMouseMove,\n\t\t\tmouseup: this.handleMouseUp,\n\t\t\tclick: this.handleClick,\n\t\t\tselectstart: this.handleSelectStart,\n\t\t\tcontextmenu: this.handleContextMenu\n\t\t});\n\n\t\t// because we need to call preventDefault\n\t\t// because https://www.chromestatus.com/features/5093566007214080\n\t\t// TODO: investigate performance because this is a global handler\n\t\twindow.addEventListener(\n\t\t\t'touchmove',\n\t\t\tthis.handleTouchMoveProxy = function(ev) {\n\t\t\t\t_this.handleTouchMove($.Event(ev));\n\t\t\t},\n\t\t\t{ passive: false } // allows preventDefault()\n\t\t);\n\n\t\t// attach a handler to get called when ANY scroll action happens on the page.\n\t\t// this was impossible to do with normal on/off because 'scroll' doesn't bubble.\n\t\t// http://stackoverflow.com/a/32954565/96342\n\t\twindow.addEventListener(\n\t\t\t'scroll',\n\t\t\tthis.handleScrollProxy = function(ev) {\n\t\t\t\t_this.handleScroll($.Event(ev));\n\t\t\t},\n\t\t\ttrue // useCapture\n\t\t);\n\t},\n\n\tunbind: function() {\n\t\tthis.stopListeningTo($(document));\n\n\t\twindow.removeEventListener(\n\t\t\t'touchmove',\n\t\t\tthis.handleTouchMoveProxy\n\t\t);\n\n\t\twindow.removeEventListener(\n\t\t\t'scroll',\n\t\t\tthis.handleScrollProxy,\n\t\t\ttrue // useCapture\n\t\t);\n\t},\n\n\n\t// Touch Handlers\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\thandleTouchStart: function(ev) {\n\n\t\t// if a previous touch interaction never ended with a touchend, then implicitly end it,\n\t\t// but since a new touch interaction is about to begin, don't start the mouse ignore period.\n\t\tthis.stopTouch(ev, true); // skipMouseIgnore=true\n\n\t\tthis.isTouching = true;\n\t\tthis.trigger('touchstart', ev);\n\t},\n\n\thandleTouchMove: function(ev) {\n\t\tif (this.isTouching) {\n\t\t\tthis.trigger('touchmove', ev);\n\t\t}\n\t},\n\n\thandleTouchCancel: function(ev) {\n\t\tif (this.isTouching) {\n\t\t\tthis.trigger('touchcancel', ev);\n\n\t\t\t// Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.\n\t\t\t// If touchend fires later, it won't have any effect b/c isTouching will be false.\n\t\t\tthis.stopTouch(ev);\n\t\t}\n\t},\n\n\thandleTouchEnd: function(ev) {\n\t\tthis.stopTouch(ev);\n\t},\n\n\n\t// Mouse Handlers\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\thandleMouseDown: function(ev) {\n\t\tif (!this.shouldIgnoreMouse()) {\n\t\t\tthis.trigger('mousedown', ev);\n\t\t}\n\t},\n\n\thandleMouseMove: function(ev) {\n\t\tif (!this.shouldIgnoreMouse()) {\n\t\t\tthis.trigger('mousemove', ev);\n\t\t}\n\t},\n\n\thandleMouseUp: function(ev) {\n\t\tif (!this.shouldIgnoreMouse()) {\n\t\t\tthis.trigger('mouseup', ev);\n\t\t}\n\t},\n\n\thandleClick: function(ev) {\n\t\tif (!this.shouldIgnoreMouse()) {\n\t\t\tthis.trigger('click', ev);\n\t\t}\n\t},\n\n\n\t// Misc Handlers\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\thandleSelectStart: function(ev) {\n\t\tthis.trigger('selectstart', ev);\n\t},\n\n\thandleContextMenu: function(ev) {\n\t\tthis.trigger('contextmenu', ev);\n\t},\n\n\thandleScroll: function(ev) {\n\t\tthis.trigger('scroll', ev);\n\t},\n\n\n\t// Utils\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\tstopTouch: function(ev, skipMouseIgnore) {\n\t\tif (this.isTouching) {\n\t\t\tthis.isTouching = false;\n\t\t\tthis.trigger('touchend', ev);\n\n\t\t\tif (!skipMouseIgnore) {\n\t\t\t\tthis.startTouchMouseIgnore();\n\t\t\t}\n\t\t}\n\t},\n\n\tstartTouchMouseIgnore: function() {\n\t\tvar _this = this;\n\t\tvar wait = FC.touchMouseIgnoreWait;\n\n\t\tif (wait) {\n\t\t\tthis.mouseIgnoreDepth++;\n\t\t\tsetTimeout(function() {\n\t\t\t\t_this.mouseIgnoreDepth--;\n\t\t\t}, wait);\n\t\t}\n\t},\n\n\tshouldIgnoreMouse: function() {\n\t\treturn this.isTouching || Boolean(this.mouseIgnoreDepth);\n\t}\n\n});\n\n\n// Singleton\n// ---------------------------------------------------------------------------------------------------------------------\n\n(function() {\n\tvar globalEmitter = null;\n\tvar neededCount = 0;\n\n\n\t// gets the singleton\n\tGlobalEmitter.get = function() {\n\n\t\tif (!globalEmitter) {\n\t\t\tglobalEmitter = new GlobalEmitter();\n\t\t\tglobalEmitter.bind();\n\t\t}\n\n\t\treturn globalEmitter;\n\t};\n\n\n\t// called when an object knows it will need a GlobalEmitter in the near future.\n\tGlobalEmitter.needed = function() {\n\t\tGlobalEmitter.get(); // ensures globalEmitter\n\t\tneededCount++;\n\t};\n\n\n\t// called when the object that originally called needed() doesn't need a GlobalEmitter anymore.\n\tGlobalEmitter.unneeded = function() {\n\t\tneededCount--;\n\n\t\tif (!neededCount) { // nobody else needs it\n\t\t\tglobalEmitter.unbind();\n\t\t\tglobalEmitter = null;\n\t\t}\n\t};\n\n})();\n\n;;\n\n/* Creates a clone of an element and lets it track the mouse as it moves\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar MouseFollower = Class.extend(ListenerMixin, {\n\n\toptions: null,\n\n\tsourceEl: null, // the element that will be cloned and made to look like it is dragging\n\tel: null, // the clone of `sourceEl` that will track the mouse\n\tparentEl: null, // the element that `el` (the clone) will be attached to\n\n\t// the initial position of el, relative to the offset parent. made to match the initial offset of sourceEl\n\ttop0: null,\n\tleft0: null,\n\n\t// the absolute coordinates of the initiating touch/mouse action\n\ty0: null,\n\tx0: null,\n\n\t// the number of pixels the mouse has moved from its initial position\n\ttopDelta: null,\n\tleftDelta: null,\n\n\tisFollowing: false,\n\tisHidden: false,\n\tisAnimating: false, // doing the revert animation?\n\n\tconstructor: function(sourceEl, options) {\n\t\tthis.options = options = options || {};\n\t\tthis.sourceEl = sourceEl;\n\t\tthis.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\n\t},\n\n\n\t// Causes the element to start following the mouse\n\tstart: function(ev) {\n\t\tif (!this.isFollowing) {\n\t\t\tthis.isFollowing = true;\n\n\t\t\tthis.y0 = getEvY(ev);\n\t\t\tthis.x0 = getEvX(ev);\n\t\t\tthis.topDelta = 0;\n\t\t\tthis.leftDelta = 0;\n\n\t\t\tif (!this.isHidden) {\n\t\t\t\tthis.updatePosition();\n\t\t\t}\n\n\t\t\tif (getEvIsTouch(ev)) {\n\t\t\t\tthis.listenTo($(document), 'touchmove', this.handleMove);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.listenTo($(document), 'mousemove', this.handleMove);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\n\t// `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\n\tstop: function(shouldRevert, callback) {\n\t\tvar _this = this;\n\t\tvar revertDuration = this.options.revertDuration;\n\n\t\tfunction complete() { // might be called by .animate(), which might change `this` context\n\t\t\t_this.isAnimating = false;\n\t\t\t_this.removeElement();\n\n\t\t\t_this.top0 = _this.left0 = null; // reset state for future updatePosition calls\n\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\n\t\tif (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time\n\t\t\tthis.isFollowing = false;\n\n\t\t\tthis.stopListeningTo($(document));\n\n\t\t\tif (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?\n\t\t\t\tthis.isAnimating = true;\n\t\t\t\tthis.el.animate({\n\t\t\t\t\ttop: this.top0,\n\t\t\t\t\tleft: this.left0\n\t\t\t\t}, {\n\t\t\t\t\tduration: revertDuration,\n\t\t\t\t\tcomplete: complete\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Gets the tracking element. Create it if necessary\n\tgetEl: function() {\n\t\tvar el = this.el;\n\n\t\tif (!el) {\n\t\t\tel = this.el = this.sourceEl.clone()\n\t\t\t\t.addClass(this.options.additionalClass || '')\n\t\t\t\t.css({\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tvisibility: '', // in case original element was hidden (commonly through hideEvents())\n\t\t\t\t\tdisplay: this.isHidden ? 'none' : '', // for when initially hidden\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tright: 'auto', // erase and set width instead\n\t\t\t\t\tbottom: 'auto', // erase and set height instead\n\t\t\t\t\twidth: this.sourceEl.width(), // explicit height in case there was a 'right' value\n\t\t\t\t\theight: this.sourceEl.height(), // explicit width in case there was a 'bottom' value\n\t\t\t\t\topacity: this.options.opacity || '',\n\t\t\t\t\tzIndex: this.options.zIndex\n\t\t\t\t});\n\n\t\t\t// we don't want long taps or any mouse interaction causing selection/menus.\n\t\t\t// would use preventSelection(), but that prevents selectstart, causing problems.\n\t\t\tel.addClass('fc-unselectable');\n\n\t\t\tel.appendTo(this.parentEl);\n\t\t}\n\n\t\treturn el;\n\t},\n\n\n\t// Removes the tracking element if it has already been created\n\tremoveElement: function() {\n\t\tif (this.el) {\n\t\t\tthis.el.remove();\n\t\t\tthis.el = null;\n\t\t}\n\t},\n\n\n\t// Update the CSS position of the tracking element\n\tupdatePosition: function() {\n\t\tvar sourceOffset;\n\t\tvar origin;\n\n\t\tthis.getEl(); // ensure this.el\n\n\t\t// make sure origin info was computed\n\t\tif (this.top0 === null) {\n\t\t\tsourceOffset = this.sourceEl.offset();\n\t\t\torigin = this.el.offsetParent().offset();\n\t\t\tthis.top0 = sourceOffset.top - origin.top;\n\t\t\tthis.left0 = sourceOffset.left - origin.left;\n\t\t}\n\n\t\tthis.el.css({\n\t\t\ttop: this.top0 + this.topDelta,\n\t\t\tleft: this.left0 + this.leftDelta\n\t\t});\n\t},\n\n\n\t// Gets called when the user moves the mouse\n\thandleMove: function(ev) {\n\t\tthis.topDelta = getEvY(ev) - this.y0;\n\t\tthis.leftDelta = getEvX(ev) - this.x0;\n\n\t\tif (!this.isHidden) {\n\t\t\tthis.updatePosition();\n\t\t}\n\t},\n\n\n\t// Temporarily makes the tracking element invisible. Can be called before following starts\n\thide: function() {\n\t\tif (!this.isHidden) {\n\t\t\tthis.isHidden = true;\n\t\t\tif (this.el) {\n\t\t\t\tthis.el.hide();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Show the tracking element after it has been temporarily hidden\n\tshow: function() {\n\t\tif (this.isHidden) {\n\t\t\tthis.isHidden = false;\n\t\t\tthis.updatePosition();\n\t\t\tthis.getEl().show();\n\t\t}\n\t}\n\n});\n\n;;\n\nvar ChronoComponent = Model.extend({\n\n\tchildren: null,\n\n\tel: null, // the view's containing element. set by Calendar(?)\n\n\t// frequently accessed options\n\tisRTL: false,\n\tnextDayThreshold: null,\n\n\n\tconstructor: function() {\n\t\tModel.call(this);\n\n\t\tthis.children = [];\n\n\t\tthis.nextDayThreshold = moment.duration(this.opt('nextDayThreshold'));\n\t\tthis.isRTL = this.opt('isRTL');\n\t},\n\n\n\taddChild: function(chronoComponent) {\n\t\tthis.children.push(chronoComponent);\n\t},\n\n\n\t// Options\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\topt: function(name) {\n\t\t// subclasses must implement\n\t},\n\n\n\tpubliclyTrigger: function(/**/) {\n\t\tvar calendar = this._getCalendar();\n\n\t\treturn calendar.publiclyTrigger.apply(calendar, arguments);\n\t},\n\n\n\thasPublicHandlers: function(/**/) {\n\t\tvar calendar = this._getCalendar();\n\n\t\treturn calendar.hasPublicHandlers.apply(calendar, arguments);\n\t},\n\n\n\t// Element\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Sets the container element that the view should render inside of, does global DOM-related initializations,\n\t// and renders all the non-date-related content inside.\n\tsetElement: function(el) {\n\t\tthis.el = el;\n\t\tthis.bindGlobalHandlers();\n\t\tthis.renderSkeleton();\n\t},\n\n\n\t// Removes the view's container element from the DOM, clearing any content beforehand.\n\t// Undoes any other DOM-related attachments.\n\tremoveElement: function() {\n\t\tthis.unrenderSkeleton();\n\t\tthis.unbindGlobalHandlers();\n\n\t\tthis.el.remove();\n\t\t// NOTE: don't null-out this.el in case the View was destroyed within an API callback.\n\t\t// We don't null-out the View's other jQuery element references upon destroy,\n\t\t// so we shouldn't kill this.el either.\n\t},\n\n\n\tbindGlobalHandlers: function() {\n\t},\n\n\n\tunbindGlobalHandlers: function() {\n\t},\n\n\n\t// Skeleton\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Renders the basic structure of the view before any content is rendered\n\trenderSkeleton: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Unrenders the basic structure of the view\n\tunrenderSkeleton: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Date Low-level Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// date-cell content only\n\trenderDates: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// date-cell content only\n\tunrenderDates: function() {\n\t\t// subclasses should override\n\t},\n\n\n\t// Now-Indicator\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator\n\t// should be refreshed. If something falsy is returned, no time indicator is rendered at all.\n\tgetNowIndicatorUnit: function() {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Renders a current time indicator at the given datetime\n\trenderNowIndicator: function(date) {\n\t\tthis.callChildren('renderNowIndicator', date);\n\t},\n\n\n\t// Undoes the rendering actions from renderNowIndicator\n\tunrenderNowIndicator: function() {\n\t\tthis.callChildren('unrenderNowIndicator');\n\t},\n\n\n\t// Business Hours\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\t// Renders business-hours onto the view. Assumes updateSize has already been called.\n\trenderBusinessHours: function() {\n\t\tthis.callChildren('renderBusinessHours');\n\t},\n\n\n\t// Unrenders previously-rendered business-hours\n\tunrenderBusinessHours: function() {\n\t\tthis.callChildren('unrenderBusinessHours');\n\t},\n\n\n\t// Event Low-level Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Renders the events onto the view.\n\t// TODO: eventually rename to `renderEvents` once legacy is gone.\n\trenderEventsPayload: function(eventsPayload) {\n\t\tthis.callChildren('renderEventsPayload', eventsPayload);\n\t},\n\n\n\t// Removes event elements from the view.\n\tunrenderEvents: function() {\n\t\tthis.callChildren('unrenderEvents');\n\n\t\t// we DON'T need to call updateHeight() because\n\t\t// a renderEventsPayload() call always happens after this, which will eventually call updateHeight()\n\t},\n\n\n\t// Retrieves all segment objects that are rendered in the view\n\tgetEventSegs: function() {\n\t\tvar children = this.children;\n\t\tvar segs = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < children.length; i++) {\n\t\t\tsegs.push.apply( // append\n\t\t\t\tsegs,\n\t\t\t\tchildren[i].getEventSegs()\n\t\t\t);\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t// Drag-n-Drop Rendering (for both events and external elements)\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\t// Renders a visual indication of a event or external-element drag over the given drop zone.\n\t// If an external-element, seg will be `null`.\n\t// Must return elements used for any mock events.\n\trenderDrag: function(eventFootprints, seg) {\n\t\tvar dragEls = null;\n\t\tvar children = this.children;\n\t\tvar i;\n\t\tvar childDragEls;\n\n\t\tfor (i = 0; i < children.length; i++) {\n\t\t\tchildDragEls = children[i].renderDrag(eventFootprints, seg);\n\n\t\t\tif (childDragEls) {\n\t\t\t\tif (!dragEls) {\n\t\t\t\t\tdragEls = childDragEls;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdragEls = dragEls.add(childDragEls);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn dragEls;\n\t},\n\n\n\t// Unrenders a visual indication of an event or external-element being dragged.\n\tunrenderDrag: function() {\n\t\tthis.callChildren('unrenderDrag');\n\t},\n\n\n\t// Selection\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\t// Renders a visual indication of the selection\n\t// TODO: rename to `renderSelection` after legacy is gone\n\trenderSelectionFootprint: function(componentFootprint) {\n\t\tthis.callChildren('renderSelectionFootprint', componentFootprint);\n\t},\n\n\n\t// Unrenders a visual indication of selection\n\tunrenderSelection: function() {\n\t\tthis.callChildren('unrenderSelection');\n\t},\n\n\n\t// Hit Areas\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\thitsNeeded: function() {\n\t\tthis.callChildren('hitsNeeded');\n\t},\n\n\n\thitsNotNeeded: function() {\n\t\tthis.callChildren('hitsNotNeeded');\n\t},\n\n\n\t// Called before one or more queryHit calls might happen. Should prepare any cached coordinates for queryHit\n\tprepareHits: function() {\n\t\tthis.callChildren('prepareHits');\n\t},\n\n\n\t// Called when queryHit calls have subsided. Good place to clear any coordinate caches.\n\treleaseHits: function() {\n\t\tthis.callChildren('releaseHits');\n\t},\n\n\n\t// Given coordinates from the topleft of the document, return data about the date-related area underneath.\n\t// Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).\n\t// Must have a `grid` property, a reference to this current grid. TODO: avoid this\n\t// The returned object will be processed by getHitFootprint and getHitEl.\n\tqueryHit: function(leftOffset, topOffset) {\n\t\tvar children = this.children;\n\t\tvar i;\n\t\tvar hit;\n\n\t\tfor (i = 0; i < children.length; i++) {\n\t\t\thit = children[i].queryHit(leftOffset, topOffset);\n\n\t\t\tif (hit) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn hit;\n\t},\n\n\n\n\t// Event Drag-n-Drop\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\t// Computes if the given event is allowed to be dragged by the user\n\tisEventDefDraggable: function(eventDef) {\n\t\treturn this.isEventDefStartEditable(eventDef);\n\t},\n\n\n\tisEventDefStartEditable: function(eventDef) {\n\t\tvar isEditable = eventDef.isStartExplicitlyEditable();\n\n\t\tif (isEditable == null) {\n\t\t\tisEditable = this.opt('eventStartEditable');\n\n\t\t\tif (isEditable == null) {\n\t\t\t\tisEditable = this.isEventDefGenerallyEditable(eventDef);\n\t\t\t}\n\t\t}\n\n\t\treturn isEditable;\n\t},\n\n\n\tisEventDefGenerallyEditable: function(eventDef) {\n\t\tvar isEditable = eventDef.isExplicitlyEditable();\n\n\t\tif (isEditable == null) {\n\t\t\tisEditable = this.opt('editable');\n\t\t}\n\n\t\treturn isEditable;\n\t},\n\n\n\t// Event Resizing\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\t// Computes if the given event is allowed to be resized from its starting edge\n\tisEventDefResizableFromStart: function(eventDef) {\n\t\treturn this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef);\n\t},\n\n\n\t// Computes if the given event is allowed to be resized from its ending edge\n\tisEventDefResizableFromEnd: function(eventDef) {\n\t\treturn this.isEventDefResizable(eventDef);\n\t},\n\n\n\t// Computes if the given event is allowed to be resized by the user at all\n\tisEventDefResizable: function(eventDef) {\n\t\tvar isResizable = eventDef.isDurationExplicitlyEditable();\n\n\t\tif (isResizable == null) {\n\t\t\tisResizable = this.opt('eventDurationEditable');\n\n\t\t\tif (isResizable == null) {\n\t\t\t\tisResizable = this.isEventDefGenerallyEditable(eventDef);\n\t\t\t}\n\t\t}\n\t\treturn isResizable;\n\t},\n\n\n\t// Foreground Segment Rendering\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\t// Renders foreground event segments onto the grid. May return a subset of segs that were rendered.\n\trenderFgSegs: function(segs) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders all currently rendered foreground segments\n\tunrenderFgSegs: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Renders and assigns an `el` property for each foreground event segment.\n\t// Only returns segments that successfully rendered.\n\t// A utility that subclasses may use.\n\trenderFgSegEls: function(segs, disableResizing) {\n\t\tvar _this = this;\n\t\tvar hasEventRenderHandlers = this.hasPublicHandlers('eventRender');\n\t\tvar html = '';\n\t\tvar renderedSegs = [];\n\t\tvar i;\n\n\t\tif (segs.length) { // don't build an empty html string\n\n\t\t\t// build a large concatenation of event segment HTML\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\thtml += this.fgSegHtml(segs[i], disableResizing);\n\t\t\t}\n\n\t\t\t// Grab individual elements from the combined HTML string. Use each as the default rendering.\n\t\t\t// Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\n\t\t\t$(html).each(function(i, node) {\n\t\t\t\tvar seg = segs[i];\n\t\t\t\tvar el = $(node);\n\n\t\t\t\tif (hasEventRenderHandlers) { // optimization\n\t\t\t\t\tel = _this.filterEventRenderEl(seg.footprint, el);\n\t\t\t\t}\n\n\t\t\t\tif (el) {\n\t\t\t\t\tel.data('fc-seg', seg); // used by handlers\n\t\t\t\t\tseg.el = el;\n\t\t\t\t\trenderedSegs.push(seg);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn renderedSegs;\n\t},\n\n\n\t// Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\n\tfgSegHtml: function(seg, disableResizing) {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Given an event and the default element used for rendering, returns the element that should actually be used.\n\t// Basically runs events and elements through the eventRender hook.\n\tfilterEventRenderEl: function(eventFootprint, el) {\n\t\tvar legacy = eventFootprint.getEventLegacy();\n\n\t\tvar custom = this.publiclyTrigger('eventRender', {\n\t\t\tcontext: legacy,\n\t\t\targs: [ legacy, el, this._getView() ]\n\t\t});\n\n\t\tif (custom === false) { // means don't render at all\n\t\t\tel = null;\n\t\t}\n\t\telse if (custom && custom !== true) {\n\t\t\tel = $(custom);\n\t\t}\n\n\t\treturn el;\n\t},\n\n\n\t// Navigation\n\t// ----------------------------------------------------------------------------------------------------------------\n\n\n\t// Generates HTML for an anchor to another view into the calendar.\n\t// Will either generate an tag or a non-clickable tag, depending on enabled settings.\n\t// `gotoOptions` can either be a moment input, or an object with the form:\n\t// { date, type, forceOff }\n\t// `type` is a view-type like \"day\" or \"week\". default value is \"day\".\n\t// `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\n\tbuildGotoAnchorHtml: function(gotoOptions, attrs, innerHtml) {\n\t\tvar date, type, forceOff;\n\t\tvar finalOptions;\n\n\t\tif ($.isPlainObject(gotoOptions)) {\n\t\t\tdate = gotoOptions.date;\n\t\t\ttype = gotoOptions.type;\n\t\t\tforceOff = gotoOptions.forceOff;\n\t\t}\n\t\telse {\n\t\t\tdate = gotoOptions; // a single moment input\n\t\t}\n\t\tdate = FC.moment(date); // if a string, parse it\n\n\t\tfinalOptions = { // for serialization into the link\n\t\t\tdate: date.format('YYYY-MM-DD'),\n\t\t\ttype: type || 'day'\n\t\t};\n\n\t\tif (typeof attrs === 'string') {\n\t\t\tinnerHtml = attrs;\n\t\t\tattrs = null;\n\t\t}\n\n\t\tattrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space\n\t\tinnerHtml = innerHtml || '';\n\n\t\tif (!forceOff && this.opt('navLinks')) {\n\t\t\treturn '' +\n\t\t\t\tinnerHtml +\n\t\t\t\t'';\n\t\t}\n\t\telse {\n\t\t\treturn '' +\n\t\t\t\tinnerHtml +\n\t\t\t\t'';\n\t\t}\n\t},\n\n\n\t// Date Formatting Utils\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\t// Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\n\t// Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\n\t// The timezones of the dates within `range` will be respected.\n\tformatRange: function(range, isAllDay, formatStr, separator) {\n\t\tvar end = range.end;\n\n\t\tif (isAllDay) {\n\t\t\tend = end.clone().subtract(1); // convert to inclusive. last ms of previous day\n\t\t}\n\n\t\treturn formatRange(range.start, end, formatStr, separator, this.isRTL);\n\t},\n\n\n\tgetAllDayHtml: function() {\n\t\treturn this.opt('allDayHtml') || htmlEscape(this.opt('allDayText'));\n\t},\n\n\n\t// Computes HTML classNames for a single-day element\n\tgetDayClasses: function(date, noThemeHighlight) {\n\t\tvar view = this._getView();\n\t\tvar classes = [];\n\t\tvar today;\n\n\t\tif (!view.activeUnzonedRange.containsDate(date)) {\n\t\t\tclasses.push('fc-disabled-day'); // TODO: jQuery UI theme?\n\t\t}\n\t\telse {\n\t\t\tclasses.push('fc-' + dayIDs[date.day()]);\n\n\t\t\tif (view.isDateInOtherMonth(date)) { // TODO: use ChronoComponent subclass somehow\n\t\t\t\tclasses.push('fc-other-month');\n\t\t\t}\n\n\t\t\ttoday = view.calendar.getNow();\n\n\t\t\tif (date.isSame(today, 'day')) {\n\t\t\t\tclasses.push('fc-today');\n\n\t\t\t\tif (noThemeHighlight !== true) {\n\t\t\t\t\tclasses.push(view.calendar.theme.getClass('today'));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (date < today) {\n\t\t\t\tclasses.push('fc-past');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclasses.push('fc-future');\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t},\n\n\n\t// Date Utils\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\t// Returns the date range of the full days the given range visually appears to occupy.\n\t// Returns a plain object with start/end, NOT an UnzonedRange!\n\tcomputeDayRange: function(unzonedRange) {\n\t\tvar calendar = this._getCalendar();\n\t\tvar startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts\n\t\tvar end = calendar.msToUtcMoment(unzonedRange.endMs);\n\t\tvar endTimeMS = +end.time(); // # of milliseconds into `endDay`\n\t\tvar endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\n\n\t\t// If the end time is actually inclusively part of the next day and is equal to or\n\t\t// beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n\t\t// Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n\t\tif (endTimeMS && endTimeMS >= this.nextDayThreshold) {\n\t\t\tendDay.add(1, 'days');\n\t\t}\n\n\t\t// If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n\t\tif (endDay <= startDay) {\n\t\t\tendDay = startDay.clone().add(1, 'days');\n\t\t}\n\n\t\treturn { start: startDay, end: endDay };\n\t},\n\n\n\t// Does the given range visually appear to occupy more than one day?\n\tisMultiDayRange: function(unzonedRange) {\n\t\tvar dayRange = this.computeDayRange(unzonedRange);\n\n\t\treturn dayRange.end.diff(dayRange.start, 'days') > 1;\n\t},\n\n\n\t// Utils\n\t// ---------------------------------------------------------------------------------------------------------------\n\n\n\tcallChildren: function(methodName) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\t\tvar children = this.children;\n\t\tvar i, child;\n\n\t\tfor (i = 0; i < children.length; i++) {\n\t\t\tchild = children[i];\n\t\t\tchild[methodName].apply(child, args);\n\t\t}\n\t},\n\n\n\t_getCalendar: function() { // TODO: strip out. move to generic parent.\n\t\treturn this.calendar || this.view.calendar;\n\t},\n\n\n\t_getView: function() { // TODO: strip out. move to generic parent.\n\t\treturn this.view;\n\t}\n\n});\n\n;;\n\n/* An abstract class comprised of a \"grid\" of areas that each represent a specific datetime\n----------------------------------------------------------------------------------------------------------------------\nContains:\n- hit system\n- range->footprint->seg pipeline\n- initializing day click\n- initializing selection system\n- initializing mouse/touch handlers for everything\n- initializing event rendering-related options\n*/\n\nvar Grid = FC.Grid = ChronoComponent.extend({\n\n\t// self-config, overridable by subclasses\n\thasDayInteractions: true, // can user click/select ranges of time?\n\n\tview: null, // a View object\n\tisRTL: null, // shortcut to the view's isRTL option\n\n\tunzonedRange: null,\n\n\thitsNeededDepth: 0, // necessary because multiple callers might need the same hits\n\n\tdayClickListener: null,\n\tdaySelectListener: null,\n\tsegDragListener: null,\n\tsegResizeListener: null,\n\texternalDragListener: null,\n\n\n\tconstructor: function(view) {\n\t\tthis.view = view;\n\n\t\tChronoComponent.call(this);\n\n\t\tthis.initFillInternals();\n\n\t\tthis.dayClickListener = this.buildDayClickListener();\n\t\tthis.daySelectListener = this.buildDaySelectListener();\n\t},\n\n\n\topt: function(name) {\n\t\treturn this.view.opt(name);\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Tells the grid about what period of time to display.\n\t// Any date-related internal data should be generated.\n\tsetRange: function(unzonedRange) {\n\t\tthis.unzonedRange = unzonedRange;\n\n\t\tthis.rangeUpdated();\n\t\tthis.processRangeOptions();\n\t},\n\n\n\t// Called when internal variables that rely on the range should be updated\n\trangeUpdated: function() {\n\t},\n\n\n\t// Updates values that rely on options and also relate to range\n\tprocessRangeOptions: function() {\n\t\tvar displayEventTime;\n\t\tvar displayEventEnd;\n\n\t\tthis.eventTimeFormat = // for Grid.event-rendering.js\n\t\t\tthis.opt('eventTimeFormat') ||\n\t\t\tthis.opt('timeFormat') || // deprecated\n\t\t\tthis.computeEventTimeFormat();\n\n\t\tdisplayEventTime = this.opt('displayEventTime');\n\t\tif (displayEventTime == null) {\n\t\t\tdisplayEventTime = this.computeDisplayEventTime(); // might be based off of range\n\t\t}\n\n\t\tdisplayEventEnd = this.opt('displayEventEnd');\n\t\tif (displayEventEnd == null) {\n\t\t\tdisplayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\n\t\t}\n\n\t\tthis.displayEventTime = displayEventTime;\n\t\tthis.displayEventEnd = displayEventEnd;\n\t},\n\n\n\n\t/* Hit Area\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\thitsNeeded: function() {\n\t\tif (!(this.hitsNeededDepth++)) {\n\t\t\tthis.prepareHits();\n\t\t}\n\t},\n\n\n\thitsNotNeeded: function() {\n\t\tif (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {\n\t\t\tthis.releaseHits();\n\t\t}\n\t},\n\n\n\tgetSafeHitFootprint: function(hit) {\n\t\tvar footprint = this.getHitFootprint(hit);\n\n\t\tif (!this.view.activeUnzonedRange.containsRange(footprint.unzonedRange)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn footprint;\n\t},\n\n\n\tgetHitFootprint: function(hit) {\n\t},\n\n\n\t// Given position-level information about a date-related area within the grid,\n\t// should return a jQuery element that best represents it. passed to dayClick callback.\n\tgetHitEl: function(hit) {\n\t},\n\n\n\t/* Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Sets the container element that the grid should render inside of.\n\t// Does other DOM-related initializations.\n\tsetElement: function(el) {\n\t\tChronoComponent.prototype.setElement.apply(this, arguments);\n\n\t\tif (this.hasDayInteractions) {\n\t\t\tpreventSelection(el);\n\n\t\t\tthis.bindDayHandler('touchstart', this.dayTouchStart);\n\t\t\tthis.bindDayHandler('mousedown', this.dayMousedown);\n\t\t}\n\n\t\t// attach event-element-related handlers. in Grid.events\n\t\t// same garbage collection note as above.\n\t\tthis.bindSegHandlers();\n\t},\n\n\n\tbindDayHandler: function(name, handler) {\n\t\tvar _this = this;\n\n\t\t// attach a handler to the grid's root element.\n\t\t// jQuery will take care of unregistering them when removeElement gets called.\n\t\tthis.el.on(name, function(ev) {\n\t\t\tif (\n\t\t\t\t!$(ev.target).is(\n\t\t\t\t\t_this.segSelector + ',' + // directly on an event element\n\t\t\t\t\t_this.segSelector + ' *,' + // within an event element\n\t\t\t\t\t'.fc-more,' + // a \"more..\" link\n\t\t\t\t\t'a[data-goto]' // a clickable nav link\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn handler.call(_this, ev);\n\t\t\t}\n\t\t});\n\t},\n\n\n\t// Removes the grid's container element from the DOM. Undoes any other DOM-related attachments.\n\t// DOES NOT remove any content beforehand (doesn't clear events or call unrenderDates), unlike View\n\tremoveElement: function() {\n\t\tChronoComponent.prototype.removeElement.apply(this, arguments);\n\n\t\tthis.clearDragListeners();\n\t},\n\n\n\t/* Handlers\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Binds DOM handlers to elements that reside outside the grid, such as the document\n\tbindGlobalHandlers: function() {\n\t\tChronoComponent.prototype.bindGlobalHandlers.apply(this, arguments);\n\n\t\tthis.listenTo($(document), {\n\t\t\tdragstart: this.externalDragStart, // jqui\n\t\t\tsortstart: this.externalDragStart // jqui\n\t\t});\n\t},\n\n\n\t// Unbinds DOM handlers from elements that reside outside the grid\n\tunbindGlobalHandlers: function() {\n\t\tChronoComponent.prototype.unbindGlobalHandlers.apply(this, arguments);\n\n\t\tthis.stopListeningTo($(document));\n\t},\n\n\n\t// Process a mousedown on an element that represents a day. For day clicking and selecting.\n\tdayMousedown: function(ev) {\n\n\t\t// HACK\n\t\t// This will still work even though bindDayHandler doesn't use GlobalEmitter.\n\t\tif (GlobalEmitter.get().shouldIgnoreMouse()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.dayClickListener.startInteraction(ev);\n\n\t\tif (this.opt('selectable')) {\n\t\t\tthis.daySelectListener.startInteraction(ev, {\n\t\t\t\tdistance: this.opt('selectMinDistance')\n\t\t\t});\n\t\t}\n\t},\n\n\n\tdayTouchStart: function(ev) {\n\t\tvar view = this.view;\n\t\tvar selectLongPressDelay;\n\n\t\t// On iOS (and Android?) when a new selection is initiated overtop another selection,\n\t\t// the touchend never fires because the elements gets removed mid-touch-interaction (my theory).\n\t\t// HACK: simply don't allow this to happen.\n\t\t// ALSO: prevent selection when an *event* is already raised.\n\t\tif (view.isSelected || view.selectedEvent) {\n\t\t\treturn;\n\t\t}\n\n\t\tselectLongPressDelay = this.opt('selectLongPressDelay');\n\t\tif (selectLongPressDelay == null) {\n\t\t\tselectLongPressDelay = this.opt('longPressDelay'); // fallback\n\t\t}\n\n\t\tthis.dayClickListener.startInteraction(ev);\n\n\t\tif (this.opt('selectable')) {\n\t\t\tthis.daySelectListener.startInteraction(ev, {\n\t\t\t\tdelay: selectLongPressDelay\n\t\t\t});\n\t\t}\n\t},\n\n\n\t// Kills all in-progress dragging.\n\t// Useful for when public API methods that result in re-rendering are invoked during a drag.\n\t// Also useful for when touch devices misbehave and don't fire their touchend.\n\tclearDragListeners: function() {\n\t\tthis.dayClickListener.endInteraction();\n\t\tthis.daySelectListener.endInteraction();\n\n\t\tif (this.segDragListener) {\n\t\t\tthis.segDragListener.endInteraction(); // will clear this.segDragListener\n\t\t}\n\t\tif (this.segResizeListener) {\n\t\t\tthis.segResizeListener.endInteraction(); // will clear this.segResizeListener\n\t\t}\n\t\tif (this.externalDragListener) {\n\t\t\tthis.externalDragListener.endInteraction(); // will clear this.externalDragListener\n\t\t}\n\t},\n\n\n\t/* Highlight\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)\n\trenderHighlight: function(componentFootprint) {\n\t\tthis.renderFill('highlight', this.componentFootprintToSegs(componentFootprint));\n\t},\n\n\n\t// Unrenders the emphasis on a date range\n\tunrenderHighlight: function() {\n\t\tthis.unrenderFill('highlight');\n\t},\n\n\n\t/* Converting eventRange -> eventFootprint\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\teventRangesToEventFootprints: function(eventRanges) {\n\t\tvar eventFootprints = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < eventRanges.length; i++) {\n\t\t\teventFootprints.push.apply(eventFootprints,\n\t\t\t\tthis.eventRangeToEventFootprints(eventRanges[i])\n\t\t\t);\n\t\t}\n\n\t\treturn eventFootprints;\n\t},\n\n\n\t// Given an event's unzoned date range, return an array of eventSpan objects.\n\t// eventSpan - { start, end, isStart, isEnd, otherthings... }\n\t// Subclasses can override.\n\t// Subclasses are obligated to forward eventRange.isStart/isEnd to the resulting spans.\n\t// TODO: somehow more DRY with Calendar::eventRangeToEventFootprints\n\teventRangeToEventFootprints: function(eventRange) {\n\t\treturn [\n\t\t\tnew EventFootprint(\n\t\t\t\tnew ComponentFootprint(\n\t\t\t\t\teventRange.unzonedRange,\n\t\t\t\t\teventRange.eventDef.isAllDay()\n\t\t\t\t),\n\t\t\t\teventRange.eventDef,\n\t\t\t\teventRange.eventInstance // might not exist\n\t\t\t)\n\t\t];\n\t},\n\n\n\t/* Converting componentFootprint/eventFootprint -> segs\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\teventFootprintsToSegs: function(eventFootprints) {\n\t\tvar segs = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < eventFootprints.length; i++) {\n\t\t\tsegs.push.apply(segs,\n\t\t\t\tthis.eventFootprintToSegs(eventFootprints[i])\n\t\t\t);\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t// Given an event's span (unzoned start/end and other misc data), and the event itself,\n\t// slices into segments and attaches event-derived properties to them.\n\t// eventSpan - { start, end, isStart, isEnd, otherthings... }\n\t// constraintRange allow additional clipping. optional. eventually remove this.\n\teventFootprintToSegs: function(eventFootprint, constraintRange) {\n\t\tvar unzonedRange = eventFootprint.componentFootprint.unzonedRange;\n\t\tvar segs;\n\t\tvar i, seg;\n\n\t\tif (constraintRange) {\n\t\t\tunzonedRange = unzonedRange.intersect(constraintRange);\n\t\t}\n\n\t\tsegs = this.componentFootprintToSegs(eventFootprint.componentFootprint);\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\n\t\t\tif (!unzonedRange.isStart) {\n\t\t\t\tseg.isStart = false;\n\t\t\t}\n\t\t\tif (!unzonedRange.isEnd) {\n\t\t\t\tseg.isEnd = false;\n\t\t\t}\n\n\t\t\tseg.footprint = eventFootprint;\n\t\t\t// TODO: rename to seg.eventFootprint\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\tcomponentFootprintToSegs: function(componentFootprint) {\n\t\t// subclasses must implement\n\t}\n\n});\n\n;;\n\nGrid.mixin({\n\n\t// Creates a listener that tracks the user's drag across day elements, for day clicking.\n\tbuildDayClickListener: function() {\n\t\tvar _this = this;\n\t\tvar dayClickHit; // null if invalid dayClick\n\n\t\tvar dragListener = new HitDragListener(this, {\n\t\t\tscroll: this.opt('dragScroll'),\n\t\t\tinteractionStart: function() {\n\t\t\t\tdayClickHit = dragListener.origHit;\n\t\t\t},\n\t\t\thitOver: function(hit, isOrig, origHit) {\n\t\t\t\t// if user dragged to another cell at any point, it can no longer be a dayClick\n\t\t\t\tif (!isOrig) {\n\t\t\t\t\tdayClickHit = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() { // called before mouse moves to a different hit OR moved out of all hits\n\t\t\t\tdayClickHit = null;\n\t\t\t},\n\t\t\tinteractionEnd: function(ev, isCancelled) {\n\t\t\t\tvar componentFootprint;\n\n\t\t\t\tif (!isCancelled && dayClickHit) {\n\t\t\t\t\tcomponentFootprint = _this.getSafeHitFootprint(dayClickHit);\n\n\t\t\t\t\tif (componentFootprint) {\n\t\t\t\t\t\t_this.view.triggerDayClick(componentFootprint, _this.getHitEl(dayClickHit), ev);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// because dayClickListener won't be called with any time delay, \"dragging\" will begin immediately,\n\t\t// which will kill any touchmoving/scrolling. Prevent this.\n\t\tdragListener.shouldCancelTouchScroll = false;\n\n\t\tdragListener.scrollAlwaysKills = true;\n\n\t\treturn dragListener;\n\t}\n\n});\n\n;;\n\nGrid.mixin({\n\n\t// Creates a listener that tracks the user's drag across day elements, for day selecting.\n\tbuildDaySelectListener: function() {\n\t\tvar _this = this;\n\t\tvar selectionFootprint; // null if invalid selection\n\n\t\tvar dragListener = new HitDragListener(this, {\n\t\t\tscroll: this.opt('dragScroll'),\n\t\t\tinteractionStart: function() {\n\t\t\t\tselectionFootprint = null;\n\t\t\t},\n\t\t\tdragStart: function() {\n\t\t\t\t_this.view.unselect(); // since we could be rendering a new selection, we want to clear any old one\n\t\t\t},\n\t\t\thitOver: function(hit, isOrig, origHit) {\n\t\t\t\tvar origHitFootprint;\n\t\t\t\tvar hitFootprint;\n\n\t\t\t\tif (origHit) { // click needs to have started on a hit\n\n\t\t\t\t\torigHitFootprint = _this.getSafeHitFootprint(origHit);\n\t\t\t\t\thitFootprint = _this.getSafeHitFootprint(hit);\n\n\t\t\t\t\tif (origHitFootprint && hitFootprint) {\n\t\t\t\t\t\tselectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tselectionFootprint = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (selectionFootprint) {\n\t\t\t\t\t\t_this.renderSelectionFootprint(selectionFootprint);\n\t\t\t\t\t}\n\t\t\t\t\telse if (selectionFootprint === false) {\n\t\t\t\t\t\tdisableCursor();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() { // called before mouse moves to a different hit OR moved out of all hits\n\t\t\t\tselectionFootprint = null;\n\t\t\t\t_this.unrenderSelection();\n\t\t\t},\n\t\t\thitDone: function() { // called after a hitOut OR before a dragEnd\n\t\t\t\tenableCursor();\n\t\t\t},\n\t\t\tinteractionEnd: function(ev, isCancelled) {\n\t\t\t\tif (!isCancelled && selectionFootprint) {\n\t\t\t\t\t// the selection will already have been rendered. just report it\n\t\t\t\t\t_this.view.reportSelection(selectionFootprint, ev);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn dragListener;\n\t},\n\n\n\t// Renders a visual indication of a selection. Will highlight by default but can be overridden by subclasses.\n\t// Given a span (unzoned start/end and other misc data)\n\trenderSelectionFootprint: function(componentFootprint) {\n\t\tthis.renderHighlight(componentFootprint);\n\t},\n\n\n\t// Unrenders any visual indications of a selection. Will unrender a highlight by default.\n\tunrenderSelection: function() {\n\t\tthis.unrenderHighlight();\n\t},\n\n\n\t// Given the first and last date-spans of a selection, returns another date-span object.\n\t// Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().\n\t// Will return false if the selection is invalid and this should be indicated to the user.\n\t// Will return null/undefined if a selection invalid but no error should be reported.\n\tcomputeSelection: function(footprint0, footprint1) {\n\t\tvar wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);\n\n\t\tif (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn wholeFootprint;\n\t},\n\n\n\t// Given two spans, must return the combination of the two.\n\t// TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.\n\t// Assumes both footprints are non-open-ended.\n\tcomputeSelectionFootprint: function(footprint0, footprint1) {\n\t\tvar ms = [\n\t\t\tfootprint0.unzonedRange.startMs,\n\t\t\tfootprint0.unzonedRange.endMs,\n\t\t\tfootprint1.unzonedRange.startMs,\n\t\t\tfootprint1.unzonedRange.endMs\n\t\t];\n\n\t\tms.sort(compareNumbers);\n\n\t\treturn new ComponentFootprint(\n\t\t\tnew UnzonedRange(ms[0], ms[3]),\n\t\t\tfootprint0.isAllDay\n\t\t);\n\t},\n\n\n\tisSelectionFootprintAllowed: function(componentFootprint) {\n\t\treturn this.view.validUnzonedRange.containsRange(componentFootprint.unzonedRange) &&\n\t\t\tthis.view.calendar.isSelectionFootprintAllowed(componentFootprint);\n\t}\n\n});\n\n;;\n\nGrid.mixin({\n\n\t// Generates an array of classNames to be used for the rendering business hours overlay. Called by the fill system.\n\t// Called by fillSegHtml.\n\tbusinessHoursSegClasses: function(seg) {\n\t\treturn [ 'fc-nonbusiness', 'fc-bgevent' ];\n\t},\n\n\n\t// Compute business hour segs for the grid's current date range.\n\t// Caller must ask if whole-day business hours are needed.\n\tbuildBusinessHourSegs: function(wholeDay) {\n\t\treturn this.eventFootprintsToSegs(\n\t\t\tthis.buildBusinessHourEventFootprints(wholeDay)\n\t\t);\n\t},\n\n\n\t// Compute business hour *events* for the grid's current date range.\n\t// Caller must ask if whole-day business hours are needed.\n\t// FOR RENDERING\n\tbuildBusinessHourEventFootprints: function(wholeDay) {\n\t\tvar calendar = this.view.calendar;\n\n\t\treturn this._buildBusinessHourEventFootprints(wholeDay, calendar.opt('businessHours'));\n\t},\n\n\n\t_buildBusinessHourEventFootprints: function(wholeDay, businessHourDef) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar eventInstanceGroup;\n\t\tvar eventRanges;\n\n\t\teventInstanceGroup = calendar.buildBusinessInstanceGroup(\n\t\t\twholeDay,\n\t\t\tbusinessHourDef,\n\t\t\tthis.unzonedRange\n\t\t);\n\n\t\tif (eventInstanceGroup) {\n\t\t\teventRanges = eventInstanceGroup.sliceRenderRanges(\n\t\t\t\tthis.unzonedRange,\n\t\t\t\tcalendar\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\teventRanges = [];\n\t\t}\n\n\t\treturn this.eventRangesToEventFootprints(eventRanges);\n\t}\n\n});\n\n;;\n\nGrid.mixin({\n\n\tsegs: null, // the *event* segments currently rendered in the grid. TODO: rename to `eventSegs`\n\n\t// derived from options\n\t// TODO: move initialization from Grid.js\n\teventTimeFormat: null,\n\tdisplayEventTime: null,\n\tdisplayEventEnd: null,\n\n\n\t// Generates the format string used for event time text, if not explicitly defined by 'timeFormat'\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.opt('smallTimeFormat');\n\t},\n\n\n\t// Determines whether events should have their end times displayed, if not explicitly defined by 'displayEventTime'.\n\t// Only applies to non-all-day events.\n\tcomputeDisplayEventTime: function() {\n\t\treturn true;\n\t},\n\n\n\t// Determines whether events should have their end times displayed, if not explicitly defined by 'displayEventEnd'\n\tcomputeDisplayEventEnd: function() {\n\t\treturn true;\n\t},\n\n\n\trenderEventsPayload: function(eventsPayload) {\n\t\tvar id, eventInstanceGroup;\n\t\tvar eventRenderRanges;\n\t\tvar eventFootprints;\n\t\tvar eventSegs;\n\t\tvar bgSegs = [];\n\t\tvar fgSegs = [];\n\n\t\tfor (id in eventsPayload) {\n\t\t\teventInstanceGroup = eventsPayload[id];\n\n\t\t\teventRenderRanges = eventInstanceGroup.sliceRenderRanges(this.view.activeUnzonedRange);\n\t\t\teventFootprints = this.eventRangesToEventFootprints(eventRenderRanges);\n\t\t\teventSegs = this.eventFootprintsToSegs(eventFootprints);\n\n\t\t\tif (eventInstanceGroup.getEventDef().hasBgRendering()) {\n\t\t\t\tbgSegs.push.apply(bgSegs, // append\n\t\t\t\t\teventSegs\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfgSegs.push.apply(fgSegs, // append\n\t\t\t\t\teventSegs\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.segs = [].concat( // record all segs\n\t\t\tthis.renderBgSegs(bgSegs) || bgSegs,\n\t\t\tthis.renderFgSegs(fgSegs) || fgSegs\n\t\t);\n\t},\n\n\n\t// Unrenders all events currently rendered on the grid\n\tunrenderEvents: function() {\n\t\tthis.handleSegMouseout(); // trigger an eventMouseout if user's mouse is over an event\n\t\tthis.clearDragListeners();\n\n\t\tthis.unrenderFgSegs();\n\t\tthis.unrenderBgSegs();\n\n\t\tthis.segs = null;\n\t},\n\n\n\t// Retrieves all rendered segment objects currently rendered on the grid\n\tgetEventSegs: function() {\n\t\treturn this.segs || [];\n\t},\n\n\n\t// Background Segment Rendering\n\t// ---------------------------------------------------------------------------------------------------------------\n\t// TODO: move this to ChronoComponent, but without fill\n\n\n\t// Renders the given background event segments onto the grid.\n\t// Returns a subset of the segs that were actually rendered.\n\trenderBgSegs: function(segs) {\n\t\treturn this.renderFill('bgEvent', segs);\n\t},\n\n\n\t// Unrenders all the currently rendered background event segments\n\tunrenderBgSegs: function() {\n\t\tthis.unrenderFill('bgEvent');\n\t},\n\n\n\t// Renders a background event element, given the default rendering. Called by the fill system.\n\tbgEventSegEl: function(seg, el) {\n\t\treturn this.filterEventRenderEl(seg.footprint, el);\n\t},\n\n\n\t// Generates an array of classNames to be used for the default rendering of a background event.\n\t// Called by fillSegHtml.\n\tbgEventSegClasses: function(seg) {\n\t\tvar eventDef = seg.footprint.eventDef;\n\n\t\treturn [ 'fc-bgevent' ].concat(\n\t\t\teventDef.className,\n\t\t\teventDef.source.className\n\t\t);\n\t},\n\n\n\t// Generates a semicolon-separated CSS string to be used for the default rendering of a background event.\n\t// Called by fillSegHtml.\n\tbgEventSegCss: function(seg) {\n\t\treturn {\n\t\t\t'background-color': this.getSegSkinCss(seg)['background-color']\n\t\t};\n\t},\n\n\n\t/* Rendering Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Compute the text that should be displayed on an event's element.\n\t// `range` can be the Event object itself, or something range-like, with at least a `start`.\n\t// If event times are disabled, or the event has no time, will return a blank string.\n\t// If not specified, formatStr will default to the eventTimeFormat setting,\n\t// and displayEnd will default to the displayEventEnd setting.\n\tgetEventTimeText: function(eventFootprint, formatStr, displayEnd) {\n\t\treturn this._getEventTimeText(\n\t\t\teventFootprint.eventInstance.dateProfile.start,\n\t\t\teventFootprint.eventInstance.dateProfile.end,\n\t\t\teventFootprint.componentFootprint.isAllDay,\n\t\t\tformatStr,\n\t\t\tdisplayEnd\n\t\t);\n\t},\n\n\n\t_getEventTimeText: function(start, end, isAllDay, formatStr, displayEnd) {\n\n\t\tif (formatStr == null) {\n\t\t\tformatStr = this.eventTimeFormat;\n\t\t}\n\n\t\tif (displayEnd == null) {\n\t\t\tdisplayEnd = this.displayEventEnd;\n\t\t}\n\n\t\tif (this.displayEventTime && !isAllDay) {\n\t\t\tif (displayEnd && end) {\n\t\t\t\treturn this.view.formatRange(\n\t\t\t\t\t{ start: start, end: end },\n\t\t\t\t\tfalse, // allDay\n\t\t\t\t\tformatStr\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn start.format(formatStr);\n\t\t\t}\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\t// Generic utility for generating the HTML classNames for an event segment's element\n\tgetSegClasses: function(seg, isDraggable, isResizable) {\n\t\tvar view = this.view;\n\t\tvar classes = [\n\t\t\t'fc-event',\n\t\t\tseg.isStart ? 'fc-start' : 'fc-not-start',\n\t\t\tseg.isEnd ? 'fc-end' : 'fc-not-end'\n\t\t].concat(this.getSegCustomClasses(seg));\n\n\t\tif (isDraggable) {\n\t\t\tclasses.push('fc-draggable');\n\t\t}\n\t\tif (isResizable) {\n\t\t\tclasses.push('fc-resizable');\n\t\t}\n\n\t\t// event is currently selected? attach a className.\n\t\tif (view.isEventDefSelected(seg.footprint.eventDef)) {\n\t\t\tclasses.push('fc-selected');\n\t\t}\n\n\t\treturn classes;\n\t},\n\n\n\t// List of classes that were defined by the caller of the API in some way\n\tgetSegCustomClasses: function(seg) {\n\t\tvar eventDef = seg.footprint.eventDef;\n\n\t\treturn [].concat(\n\t\t\teventDef.className, // guaranteed to be an array\n\t\t\teventDef.source.className\n\t\t);\n\t},\n\n\n\t// Utility for generating event skin-related CSS properties\n\tgetSegSkinCss: function(seg) {\n\t\treturn {\n\t\t\t'background-color': this.getSegBackgroundColor(seg),\n\t\t\t'border-color': this.getSegBorderColor(seg),\n\t\t\tcolor: this.getSegTextColor(seg)\n\t\t};\n\t},\n\n\n\t// Queries for caller-specified color, then falls back to default\n\tgetSegBackgroundColor: function(seg) {\n\t\tvar eventDef = seg.footprint.eventDef;\n\n\t\treturn eventDef.backgroundColor ||\n\t\t\teventDef.color ||\n\t\t\tthis.getSegDefaultBackgroundColor(seg);\n\t},\n\n\n\tgetSegDefaultBackgroundColor: function(seg) {\n\t\tvar source = seg.footprint.eventDef.source;\n\n\t\treturn source.backgroundColor ||\n\t\t\tsource.color ||\n\t\t\tthis.opt('eventBackgroundColor') ||\n\t\t\tthis.opt('eventColor');\n\t},\n\n\n\t// Queries for caller-specified color, then falls back to default\n\tgetSegBorderColor: function(seg) {\n\t\tvar eventDef = seg.footprint.eventDef;\n\n\t\treturn eventDef.borderColor ||\n\t\t\teventDef.color ||\n\t\t\tthis.getSegDefaultBorderColor(seg);\n\t},\n\n\n\tgetSegDefaultBorderColor: function(seg) {\n\t\tvar source = seg.footprint.eventDef.source;\n\n\t\treturn source.borderColor ||\n\t\t\tsource.color ||\n\t\t\tthis.opt('eventBorderColor') ||\n\t\t\tthis.opt('eventColor');\n\t},\n\n\n\t// Queries for caller-specified color, then falls back to default\n\tgetSegTextColor: function(seg) {\n\t\tvar eventDef = seg.footprint.eventDef;\n\n\t\treturn eventDef.textColor ||\n\t\t\tthis.getSegDefaultTextColor(seg);\n\t},\n\n\n\tgetSegDefaultTextColor: function(seg) {\n\t\tvar source = seg.footprint.eventDef.source;\n\n\t\treturn source.textColor ||\n\t\t\tthis.opt('eventTextColor');\n\t},\n\n\n\tsortEventSegs: function(segs) {\n\t\tsegs.sort(proxy(this, 'compareEventSegs'));\n\t},\n\n\n\t// A cmp function for determining which segments should take visual priority\n\tcompareEventSegs: function(seg1, seg2) {\n\t\tvar f1 = seg1.footprint.componentFootprint;\n\t\tvar r1 = f1.unzonedRange;\n\t\tvar f2 = seg2.footprint.componentFootprint;\n\t\tvar r2 = f2.unzonedRange;\n\n\t\treturn r1.startMs - r2.startMs || // earlier events go first\n\t\t\t(r2.endMs - r2.startMs) - (r1.endMs - r1.startMs) || // tie? longer events go first\n\t\t\tf2.isAllDay - f1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)\n\t\t\tcompareByFieldSpecs(\n\t\t\t\tseg1.footprint.eventDef,\n\t\t\t\tseg2.footprint.eventDef,\n\t\t\t\tthis.view.eventOrderSpecs\n\t\t\t);\n\t}\n\n});\n\n;;\n\n/*\nContains:\n- event clicking/mouseover/mouseout\n- things that are common to event dragging AND resizing\n- event helper rendering\n*/\nGrid.mixin({\n\n\t// self-config, overridable by subclasses\n\tsegSelector: '.fc-event-container > *', // what constitutes an event element?\n\n\tmousedOverSeg: null, // the segment object the user's mouse is over. null if over nothing\n\n\t// if defined, holds the unit identified (ex: \"year\" or \"month\") that determines the level of granularity\n\t// of the date areas. if not defined, assumes to be day and time granularity.\n\t// TODO: port isTimeScale into same system?\n\tlargeUnit: null,\n\n\n\t// Diffs the two dates, returning a duration, based on granularity of the grid\n\t// TODO: port isTimeScale into this system?\n\tdiffDates: function(a, b) {\n\t\tif (this.largeUnit) {\n\t\t\treturn diffByUnit(a, b, this.largeUnit);\n\t\t}\n\t\telse {\n\t\t\treturn diffDayTime(a, b);\n\t\t}\n\t},\n\n\n\t// Attaches event-element-related handlers for *all* rendered event segments of the view.\n\tbindSegHandlers: function() {\n\t\tthis.bindSegHandlersToEl(this.el);\n\t},\n\n\n\t// Attaches event-element-related handlers to an arbitrary container element. leverages bubbling.\n\tbindSegHandlersToEl: function(el) {\n\t\tthis.bindSegHandlerToEl(el, 'touchstart', this.handleSegTouchStart);\n\t\tthis.bindSegHandlerToEl(el, 'mouseenter', this.handleSegMouseover);\n\t\tthis.bindSegHandlerToEl(el, 'mouseleave', this.handleSegMouseout);\n\t\tthis.bindSegHandlerToEl(el, 'mousedown', this.handleSegMousedown);\n\t\tthis.bindSegHandlerToEl(el, 'click', this.handleSegClick);\n\t},\n\n\n\t// Executes a handler for any a user-interaction on a segment.\n\t// Handler gets called with (seg, ev), and with the `this` context of the Grid\n\tbindSegHandlerToEl: function(el, name, handler) {\n\t\tvar _this = this;\n\n\t\tel.on(name, this.segSelector, function(ev) {\n\t\t\tvar seg = $(this).data('fc-seg'); // grab segment data. put there by View::renderEventsPayload\n\n\t\t\t// only call the handlers if there is not a drag/resize in progress\n\t\t\tif (seg && !_this.isDraggingSeg && !_this.isResizingSeg) {\n\t\t\t\treturn handler.call(_this, seg, ev); // context will be the Grid\n\t\t\t}\n\t\t});\n\t},\n\n\n\thandleSegClick: function(seg, ev) {\n\t\tvar res = this.publiclyTrigger('eventClick', { // can return `false` to cancel\n\t\t\tcontext: seg.el[0],\n\t\t\targs: [ seg.footprint.getEventLegacy(), ev, this.view ]\n\t\t});\n\n\t\tif (res === false) {\n\t\t\tev.preventDefault();\n\t\t}\n\t},\n\n\n\t// Updates internal state and triggers handlers for when an event element is moused over\n\thandleSegMouseover: function(seg, ev) {\n\t\tif (\n\t\t\t!GlobalEmitter.get().shouldIgnoreMouse() &&\n\t\t\t!this.mousedOverSeg\n\t\t) {\n\t\t\tthis.mousedOverSeg = seg;\n\n\t\t\tif (this.view.isEventDefResizable(seg.footprint.eventDef)) {\n\t\t\t\tseg.el.addClass('fc-allow-mouse-resize');\n\t\t\t}\n\n\t\t\tthis.publiclyTrigger('eventMouseover', {\n\t\t\t\tcontext: seg.el[0],\n\t\t\t\targs: [ seg.footprint.getEventLegacy(), ev, this.view ]\n\t\t\t});\n\t\t}\n\t},\n\n\n\t// Updates internal state and triggers handlers for when an event element is moused out.\n\t// Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\n\thandleSegMouseout: function(seg, ev) {\n\t\tev = ev || {}; // if given no args, make a mock mouse event\n\n\t\tif (this.mousedOverSeg) {\n\t\t\tseg = seg || this.mousedOverSeg; // if given no args, use the currently moused-over segment\n\t\t\tthis.mousedOverSeg = null;\n\n\t\t\tif (this.view.isEventDefResizable(seg.footprint.eventDef)) {\n\t\t\t\tseg.el.removeClass('fc-allow-mouse-resize');\n\t\t\t}\n\n\t\t\tthis.publiclyTrigger('eventMouseout', {\n\t\t\t\tcontext: seg.el[0],\n\t\t\t\targs: [ seg.footprint.getEventLegacy(), ev, this.view ]\n\t\t\t});\n\t\t}\n\t},\n\n\n\thandleSegMousedown: function(seg, ev) {\n\t\tvar isResizing = this.startSegResize(seg, ev, { distance: 5 });\n\n\t\tif (!isResizing && this.view.isEventDefDraggable(seg.footprint.eventDef)) {\n\t\t\tthis.buildSegDragListener(seg)\n\t\t\t\t.startInteraction(ev, {\n\t\t\t\t\tdistance: 5\n\t\t\t\t});\n\t\t}\n\t},\n\n\n\thandleSegTouchStart: function(seg, ev) {\n\t\tvar view = this.view;\n\t\tvar eventDef = seg.footprint.eventDef;\n\t\tvar isSelected = view.isEventDefSelected(eventDef);\n\t\tvar isDraggable = view.isEventDefDraggable(eventDef);\n\t\tvar isResizable = view.isEventDefResizable(eventDef);\n\t\tvar isResizing = false;\n\t\tvar dragListener;\n\t\tvar eventLongPressDelay;\n\n\t\tif (isSelected && isResizable) {\n\t\t\t// only allow resizing of the event is selected\n\t\t\tisResizing = this.startSegResize(seg, ev);\n\t\t}\n\n\t\tif (!isResizing && (isDraggable || isResizable)) { // allowed to be selected?\n\n\t\t\teventLongPressDelay = this.opt('eventLongPressDelay');\n\t\t\tif (eventLongPressDelay == null) {\n\t\t\t\teventLongPressDelay = this.opt('longPressDelay'); // fallback\n\t\t\t}\n\n\t\t\tdragListener = isDraggable ?\n\t\t\t\tthis.buildSegDragListener(seg) :\n\t\t\t\tthis.buildSegSelectListener(seg); // seg isn't draggable, but still needs to be selected\n\n\t\t\tdragListener.startInteraction(ev, { // won't start if already started\n\t\t\t\tdelay: isSelected ? 0 : eventLongPressDelay // do delay if not already selected\n\t\t\t});\n\t\t}\n\t},\n\n\n\t// seg isn't draggable, but let's use a generic DragListener\n\t// simply for the delay, so it can be selected.\n\t// Has side effect of setting/unsetting `segDragListener`\n\tbuildSegSelectListener: function(seg) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar eventDef = seg.footprint.eventDef;\n\t\tvar eventInstance = seg.footprint.eventInstance; // null for inverse-background events\n\n\t\tif (this.segDragListener) {\n\t\t\treturn this.segDragListener;\n\t\t}\n\n\t\tvar dragListener = this.segDragListener = new DragListener({\n\t\t\tdragStart: function(ev) {\n\t\t\t\tif (\n\t\t\t\t\tdragListener.isTouch &&\n\t\t\t\t\t!view.isEventDefSelected(eventDef) &&\n\t\t\t\t\teventInstance\n\t\t\t\t) {\n\t\t\t\t\t// if not previously selected, will fire after a delay. then, select the event\n\t\t\t\t\tview.selectEventInstance(eventInstance);\n\t\t\t\t}\n\t\t\t},\n\t\t\tinteractionEnd: function(ev) {\n\t\t\t\t_this.segDragListener = null;\n\t\t\t}\n\t\t});\n\n\t\treturn dragListener;\n\t},\n\n\n\t// is it allowed, in relation to the view's validRange?\n\t// NOTE: very similar to isExternalInstanceGroupAllowed\n\tisEventInstanceGroupAllowed: function(eventInstanceGroup) {\n\t\tvar eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\n\t\tvar i;\n\n\t\tfor (i = 0; i < eventFootprints.length; i++) {\n\t\t\t// TODO: just use getAllEventRanges directly\n\t\t\tif (!this.view.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn this.view.calendar.isEventInstanceGroupAllowed(eventInstanceGroup);\n\t},\n\n\n\t/* Event Helper\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// TODO: should probably move this to Grid.events, like we did event dragging / resizing\n\n\n\trenderHelperEventFootprints: function(eventFootprints, sourceSeg) {\n\t\treturn this.renderHelperEventFootprintEls(eventFootprints, sourceSeg)\n\t\t\t.addClass('fc-helper');\n\t},\n\n\n\trenderHelperEventFootprintEls: function(eventFootprints, sourceSeg) {\n\t\t// Subclasses must implement.\n\t\t// Must return all mock event elements.\n\t},\n\n\n\t// Unrenders a mock event\n\t// TODO: have this in ChronoComponent\n\tunrenderHelper: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\tfabricateEventFootprint: function(componentFootprint) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar eventDateProfile = calendar.footprintToDateProfile(componentFootprint);\n\t\tvar dummyEvent = new SingleEventDef(new EventSource(calendar));\n\t\tvar dummyInstance;\n\n\t\tdummyEvent.dateProfile = eventDateProfile;\n\t\tdummyInstance = dummyEvent.buildInstance();\n\n\t\treturn new EventFootprint(componentFootprint, dummyEvent, dummyInstance);\n\t}\n\n});\n\n;;\n\n/*\nWired up via Grid.event-interation.js by calling\nbuildSegDragListener\n*/\nGrid.mixin({\n\n\tisDraggingSeg: false, // is a segment being dragged? boolean\n\n\n\t// Builds a listener that will track user-dragging on an event segment.\n\t// Generic enough to work with any type of Grid.\n\t// Has side effect of setting/unsetting `segDragListener`\n\tbuildSegDragListener: function(seg) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar calendar = view.calendar;\n\t\tvar eventManager = calendar.eventManager;\n\t\tvar el = seg.el;\n\t\tvar eventDef = seg.footprint.eventDef;\n\t\tvar eventInstance = seg.footprint.eventInstance; // null for inverse-background events\n\t\tvar isDragging;\n\t\tvar mouseFollower; // A clone of the original element that will move with the mouse\n\t\tvar eventDefMutation;\n\n\t\tif (this.segDragListener) {\n\t\t\treturn this.segDragListener;\n\t\t}\n\n\t\t// Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\n\t\t// of the view.\n\t\tvar dragListener = this.segDragListener = new HitDragListener(view, {\n\t\t\tscroll: this.opt('dragScroll'),\n\t\t\tsubjectEl: el,\n\t\t\tsubjectCenter: true,\n\t\t\tinteractionStart: function(ev) {\n\t\t\t\tseg.component = _this; // for renderDrag\n\t\t\t\tisDragging = false;\n\t\t\t\tmouseFollower = new MouseFollower(seg.el, {\n\t\t\t\t\tadditionalClass: 'fc-dragging',\n\t\t\t\t\tparentEl: view.el,\n\t\t\t\t\topacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),\n\t\t\t\t\trevertDuration: _this.opt('dragRevertDuration'),\n\t\t\t\t\tzIndex: 2 // one above the .fc-view\n\t\t\t\t});\n\t\t\t\tmouseFollower.hide(); // don't show until we know this is a real drag\n\t\t\t\tmouseFollower.start(ev);\n\t\t\t},\n\t\t\tdragStart: function(ev) {\n\t\t\t\tif (\n\t\t\t\t\tdragListener.isTouch &&\n\t\t\t\t\t!view.isEventDefSelected(eventDef) &&\n\t\t\t\t\teventInstance\n\t\t\t\t) {\n\t\t\t\t\t// if not previously selected, will fire after a delay. then, select the event\n\t\t\t\t\tview.selectEventInstance(eventInstance);\n\t\t\t\t}\n\t\t\t\tisDragging = true;\n\t\t\t\t_this.handleSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported\n\t\t\t\t_this.segDragStart(seg, ev);\n\t\t\t\tview.hideEventsWithId(eventDef.id); // hide all event segments. our mouseFollower will take over\n\t\t\t},\n\t\t\thitOver: function(hit, isOrig, origHit) {\n\t\t\t\tvar isAllowed = true;\n\t\t\t\tvar origFootprint;\n\t\t\t\tvar footprint;\n\t\t\t\tvar mutatedEventInstanceGroup;\n\t\t\t\tvar dragHelperEls;\n\n\t\t\t\t// starting hit could be forced (DayGrid.limit)\n\t\t\t\tif (seg.hit) {\n\t\t\t\t\torigHit = seg.hit;\n\t\t\t\t}\n\n\t\t\t\t// hit might not belong to this grid, so query origin grid\n\t\t\t\torigFootprint = origHit.component.getSafeHitFootprint(origHit);\n\t\t\t\tfootprint = hit.component.getSafeHitFootprint(hit);\n\n\t\t\t\tif (origFootprint && footprint) {\n\t\t\t\t\teventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);\n\n\t\t\t\t\tif (eventDefMutation) {\n\t\t\t\t\t\tmutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(\n\t\t\t\t\t\t\teventDef.id,\n\t\t\t\t\t\t\teventDefMutation\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisAllowed = _this.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tisAllowed = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tisAllowed = false;\n\t\t\t\t}\n\n\t\t\t\tif (!isAllowed) {\n\t\t\t\t\teventDefMutation = null;\n\t\t\t\t\tdisableCursor();\n\t\t\t\t}\n\n\t\t\t\t// if a valid drop location, have the subclass render a visual indication\n\t\t\t\tif (\n\t\t\t\t\teventDefMutation &&\n\t\t\t\t\t(dragHelperEls = view.renderDrag(\n\t\t\t\t\t\t_this.eventRangesToEventFootprints(\n\t\t\t\t\t\t\tmutatedEventInstanceGroup.sliceRenderRanges(_this.unzonedRange, calendar)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tseg\n\t\t\t\t\t))\n\t\t\t\t) {\n\t\t\t\t\tdragHelperEls.addClass('fc-dragging');\n\t\t\t\t\tif (!dragListener.isTouch) {\n\t\t\t\t\t\t_this.applyDragOpacity(dragHelperEls);\n\t\t\t\t\t}\n\n\t\t\t\t\tmouseFollower.hide(); // if the subclass is already using a mock event \"helper\", hide our own\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)\n\t\t\t\t}\n\n\t\t\t\tif (isOrig) {\n\t\t\t\t\t// needs to have moved hits to be a valid drop\n\t\t\t\t\teventDefMutation = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() { // called before mouse moves to a different hit OR moved out of all hits\n\t\t\t\tview.unrenderDrag(); // unrender whatever was done in renderDrag\n\t\t\t\tmouseFollower.show(); // show in case we are moving out of all hits\n\t\t\t\teventDefMutation = null;\n\t\t\t},\n\t\t\thitDone: function() { // Called after a hitOut OR before a dragEnd\n\t\t\t\tenableCursor();\n\t\t\t},\n\t\t\tinteractionEnd: function(ev) {\n\t\t\t\tdelete seg.component; // prevent side effects\n\n\t\t\t\t// do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\n\t\t\t\tmouseFollower.stop(!eventDefMutation, function() {\n\t\t\t\t\tif (isDragging) {\n\t\t\t\t\t\tview.unrenderDrag();\n\t\t\t\t\t\t_this.segDragStop(seg, ev);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (eventDefMutation) {\n\t\t\t\t\t\t// no need to re-show original, will rerender all anyways. esp important if eventRenderWait\n\t\t\t\t\t\tview.reportEventDrop(eventInstance, eventDefMutation, el, ev);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tview.showEventsWithId(eventDef.id);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t_this.segDragListener = null;\n\t\t\t}\n\t\t});\n\n\t\treturn dragListener;\n\t},\n\n\n\t// Called before event segment dragging starts\n\tsegDragStart: function(seg, ev) {\n\t\tthis.isDraggingSeg = true;\n\t\tthis.publiclyTrigger('eventDragStart', {\n\t\t\tcontext: seg.el[0],\n\t\t\targs: [\n\t\t\t\tseg.footprint.getEventLegacy(),\n\t\t\t\tev,\n\t\t\t\t{}, // jqui dummy\n\t\t\t\tthis.view\n\t\t\t]\n\t\t});\n\t},\n\n\n\t// Called after event segment dragging stops\n\tsegDragStop: function(seg, ev) {\n\t\tthis.isDraggingSeg = false;\n\t\tthis.publiclyTrigger('eventDragStop', {\n\t\t\tcontext: seg.el[0],\n\t\t\targs: [\n\t\t\t\tseg.footprint.getEventLegacy(),\n\t\t\t\tev,\n\t\t\t\t{}, // jqui dummy\n\t\t\t\tthis.view\n\t\t\t]\n\t\t});\n\t},\n\n\n\t// DOES NOT consider overlap/constraint\n\tcomputeEventDropMutation: function(startFootprint, endFootprint, eventDef) {\n\t\tvar date0 = startFootprint.unzonedRange.getStart();\n\t\tvar date1 = endFootprint.unzonedRange.getStart();\n\t\tvar clearEnd = false;\n\t\tvar forceTimed = false;\n\t\tvar forceAllDay = false;\n\t\tvar dateDelta;\n\t\tvar dateMutation;\n\t\tvar eventDefMutation;\n\n\t\tif (startFootprint.isAllDay !== endFootprint.isAllDay) {\n\t\t\tclearEnd = true;\n\n\t\t\tif (endFootprint.isAllDay) {\n\t\t\t\tforceAllDay = true;\n\t\t\t\tdate0.stripTime();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tforceTimed = true;\n\t\t\t}\n\t\t}\n\n\t\tdateDelta = this.diffDates(date1, date0);\n\n\t\tdateMutation = new EventDefDateMutation();\n\t\tdateMutation.clearEnd = clearEnd;\n\t\tdateMutation.forceTimed = forceTimed;\n\t\tdateMutation.forceAllDay = forceAllDay;\n\t\tdateMutation.setDateDelta(dateDelta);\n\n\t\teventDefMutation = new EventDefMutation();\n\t\teventDefMutation.setDateMutation(dateMutation);\n\n\t\treturn eventDefMutation;\n\t},\n\n\n\t// Utility for apply dragOpacity to a jQuery set\n\tapplyDragOpacity: function(els) {\n\t\tvar opacity = this.opt('dragOpacity');\n\n\t\tif (opacity != null) {\n\t\t\tels.css('opacity', opacity);\n\t\t}\n\t}\n\n});\n\n;;\n\n/*\nWired up via Grid.event-interation.js by calling\nstartSegResize\n*/\nGrid.mixin({\n\n\tisResizingSeg: false, // is a segment being resized? boolean\n\n\n\t// returns boolean whether resizing actually started or not.\n\t// assumes the seg allows resizing.\n\t// `dragOptions` are optional.\n\tstartSegResize: function(seg, ev, dragOptions) {\n\t\tif ($(ev.target).is('.fc-resizer')) {\n\t\t\tthis.buildSegResizeListener(seg, $(ev.target).is('.fc-start-resizer'))\n\t\t\t\t.startInteraction(ev, dragOptions);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\n\t// Creates a listener that tracks the user as they resize an event segment.\n\t// Generic enough to work with any type of Grid.\n\tbuildSegResizeListener: function(seg, isStart) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar calendar = view.calendar;\n\t\tvar eventManager = calendar.eventManager;\n\t\tvar el = seg.el;\n\t\tvar eventDef = seg.footprint.eventDef;\n\t\tvar eventInstance = seg.footprint.eventInstance;\n\t\tvar isDragging;\n\t\tvar resizeMutation; // zoned event date properties. falsy if invalid resize\n\n\t\t// Tracks mouse movement over the *grid's* coordinate map\n\t\tvar dragListener = this.segResizeListener = new HitDragListener(this, {\n\t\t\tscroll: this.opt('dragScroll'),\n\t\t\tsubjectEl: el,\n\t\t\tinteractionStart: function() {\n\t\t\t\tisDragging = false;\n\t\t\t},\n\t\t\tdragStart: function(ev) {\n\t\t\t\tisDragging = true;\n\t\t\t\t_this.handleSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported\n\t\t\t\t_this.segResizeStart(seg, ev);\n\t\t\t},\n\t\t\thitOver: function(hit, isOrig, origHit) {\n\t\t\t\tvar isAllowed = true;\n\t\t\t\tvar origHitFootprint = _this.getSafeHitFootprint(origHit);\n\t\t\t\tvar hitFootprint = _this.getSafeHitFootprint(hit);\n\t\t\t\tvar mutatedEventInstanceGroup;\n\n\t\t\t\tif (origHitFootprint && hitFootprint) {\n\t\t\t\t\tresizeMutation = isStart ?\n\t\t\t\t\t\t_this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) :\n\t\t\t\t\t\t_this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);\n\n\t\t\t\t\tif (resizeMutation) {\n\t\t\t\t\t\tmutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(\n\t\t\t\t\t\t\teventDef.id,\n\t\t\t\t\t\t\tresizeMutation\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisAllowed = _this.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tisAllowed = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tisAllowed = false;\n\t\t\t\t}\n\n\t\t\t\tif (!isAllowed) {\n\t\t\t\t\tresizeMutation = null;\n\t\t\t\t\tdisableCursor();\n\t\t\t\t}\n\t\t\t\telse if (resizeMutation.isEmpty()) {\n\t\t\t\t\t// no change. (FYI, event dates might have zones)\n\t\t\t\t\tresizeMutation = null;\n\t\t\t\t}\n\n\t\t\t\tif (resizeMutation) {\n\t\t\t\t\tview.hideEventsWithId(eventDef.id);\n\n\t\t\t\t\t_this.renderEventResize(\n\t\t\t\t\t\t_this.eventRangesToEventFootprints(\n\t\t\t\t\t\t\tmutatedEventInstanceGroup.sliceRenderRanges(_this.unzonedRange, calendar)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tseg\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() { // called before mouse moves to a different hit OR moved out of all hits\n\t\t\t\tresizeMutation = null;\n\t\t\t\tview.showEventsWithId(eventDef.id); // for when out-of-bounds. show original\n\t\t\t},\n\t\t\thitDone: function() { // resets the rendering to show the original event\n\t\t\t\t_this.unrenderEventResize();\n\t\t\t\tenableCursor();\n\t\t\t},\n\t\t\tinteractionEnd: function(ev) {\n\t\t\t\tif (isDragging) {\n\t\t\t\t\t_this.segResizeStop(seg, ev);\n\t\t\t\t}\n\n\t\t\t\tif (resizeMutation) { // valid date to resize to?\n\t\t\t\t\t// no need to re-show original, will rerender all anyways. esp important if eventRenderWait\n\t\t\t\t\tview.reportEventResize(eventInstance, resizeMutation, el, ev);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tview.showEventsWithId(eventDef.id);\n\t\t\t\t}\n\t\t\t\t_this.segResizeListener = null;\n\t\t\t}\n\t\t});\n\n\t\treturn dragListener;\n\t},\n\n\n\t// Called before event segment resizing starts\n\tsegResizeStart: function(seg, ev) {\n\t\tthis.isResizingSeg = true;\n\t\tthis.publiclyTrigger('eventResizeStart', {\n\t\t\tcontext: seg.el[0],\n\t\t\targs: [\n\t\t\t\tseg.footprint.getEventLegacy(),\n\t\t\t\tev,\n\t\t\t\t{}, // jqui dummy\n\t\t\t\tthis.view\n\t\t\t]\n\t\t});\n\t},\n\n\n\t// Called after event segment resizing stops\n\tsegResizeStop: function(seg, ev) {\n\t\tthis.isResizingSeg = false;\n\t\tthis.publiclyTrigger('eventResizeStop', {\n\t\t\tcontext: seg.el[0],\n\t\t\targs: [\n\t\t\t\tseg.footprint.getEventLegacy(),\n\t\t\t\tev,\n\t\t\t\t{}, // jqui dummy\n\t\t\t\tthis.view\n\t\t\t]\n\t\t});\n\t},\n\n\n\t// Returns new date-information for an event segment being resized from its start\n\tcomputeEventStartResizeMutation: function(startFootprint, endFootprint, origEventFootprint) {\n\t\tvar origRange = origEventFootprint.componentFootprint.unzonedRange;\n\t\tvar startDelta = this.diffDates(\n\t\t\tendFootprint.unzonedRange.getStart(),\n\t\t\tstartFootprint.unzonedRange.getStart()\n\t\t);\n\t\tvar dateMutation;\n\t\tvar eventDefMutation;\n\n\t\tif (origRange.getStart().add(startDelta) < origRange.getEnd()) {\n\n\t\t\tdateMutation = new EventDefDateMutation();\n\t\t\tdateMutation.setStartDelta(startDelta);\n\n\t\t\teventDefMutation = new EventDefMutation();\n\t\t\teventDefMutation.setDateMutation(dateMutation);\n\n\t\t\treturn eventDefMutation;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\n\t// Returns new date-information for an event segment being resized from its end\n\tcomputeEventEndResizeMutation: function(startFootprint, endFootprint, origEventFootprint) {\n\t\tvar origRange = origEventFootprint.componentFootprint.unzonedRange;\n\t\tvar endDelta = this.diffDates(\n\t\t\tendFootprint.unzonedRange.getEnd(),\n\t\t\tstartFootprint.unzonedRange.getEnd()\n\t\t);\n\t\tvar dateMutation;\n\t\tvar eventDefMutation;\n\n\t\tif (origRange.getEnd().add(endDelta) > origRange.getStart()) {\n\n\t\t\tdateMutation = new EventDefDateMutation();\n\t\t\tdateMutation.setEndDelta(endDelta);\n\n\t\t\teventDefMutation = new EventDefMutation();\n\t\t\teventDefMutation.setDateMutation(dateMutation);\n\n\t\t\treturn eventDefMutation;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\n\t// Renders a visual indication of an event being resized.\n\t// Must return elements used for any mock events.\n\trenderEventResize: function(eventFootprints, seg) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a visual indication of an event being resized.\n\tunrenderEventResize: function() {\n\t\t// subclasses must implement\n\t}\n\n});\n\n;;\n\n/*\nWired up via Grid.js by calling\nexternalDragStart\n*/\nGrid.mixin({\n\n\tisDraggingExternal: false, // jqui-dragging an external element? boolean\n\n\n\t// Called when a jQuery UI drag is initiated anywhere in the DOM\n\texternalDragStart: function(ev, ui) {\n\t\tvar el;\n\t\tvar accept;\n\n\t\tif (this.opt('droppable')) { // only listen if this setting is on\n\t\t\tel = $((ui ? ui.item : null) || ev.target);\n\n\t\t\t// Test that the dragged element passes the dropAccept selector or filter function.\n\t\t\t// FYI, the default is \"*\" (matches all)\n\t\t\taccept = this.opt('dropAccept');\n\t\t\tif ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\n\t\t\t\tif (!this.isDraggingExternal) { // prevent double-listening if fired twice\n\t\t\t\t\tthis.listenToExternalDrag(el, ev, ui);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Called when a jQuery UI drag starts and it needs to be monitored for dropping\n\tlistenToExternalDrag: function(el, ev, ui) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\n\t\tvar singleEventDef; // a null value signals an unsuccessful drag\n\n\t\t// listener that tracks mouse movement over date-associated pixel regions\n\t\tvar dragListener = _this.externalDragListener = new HitDragListener(this, {\n\t\t\tinteractionStart: function() {\n\t\t\t\t_this.isDraggingExternal = true;\n\t\t\t},\n\t\t\thitOver: function(hit) {\n\t\t\t\tvar isAllowed = true;\n\t\t\t\tvar hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid\n\t\t\t\tvar mutatedEventInstanceGroup;\n\n\t\t\t\tif (hitFootprint) {\n\t\t\t\t\tsingleEventDef = _this.computeExternalDrop(hitFootprint, meta);\n\n\t\t\t\t\tif (singleEventDef) {\n\t\t\t\t\t\tmutatedEventInstanceGroup = new EventInstanceGroup(\n\t\t\t\t\t\t\tsingleEventDef.buildInstances()\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisAllowed = meta.eventProps ? // isEvent?\n\t\t\t\t\t\t\t_this.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :\n\t\t\t\t\t\t\t_this.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tisAllowed = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tisAllowed = false;\n\t\t\t\t}\n\n\t\t\t\tif (!isAllowed) {\n\t\t\t\t\tsingleEventDef = null;\n\t\t\t\t\tdisableCursor();\n\t\t\t\t}\n\n\t\t\t\tif (singleEventDef) {\n\t\t\t\t\t_this.renderDrag( // called without a seg parameter\n\t\t\t\t\t\t_this.eventRangesToEventFootprints(\n\t\t\t\t\t\t\tmutatedEventInstanceGroup.sliceRenderRanges(_this.unzonedRange, view.calendar)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\thitOut: function() {\n\t\t\t\tsingleEventDef = null; // signal unsuccessful\n\t\t\t},\n\t\t\thitDone: function() { // Called after a hitOut OR before a dragEnd\n\t\t\t\tenableCursor();\n\t\t\t\t_this.unrenderDrag();\n\t\t\t},\n\t\t\tinteractionEnd: function(ev) {\n\n\t\t\t\tif (singleEventDef) { // element was dropped on a valid hit\n\t\t\t\t\tview.reportExternalDrop(\n\t\t\t\t\t\tsingleEventDef,\n\t\t\t\t\t\tBoolean(meta.eventProps), // isEvent\n\t\t\t\t\t\tBoolean(meta.stick), // isSticky\n\t\t\t\t\t\tel, ev, ui\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t_this.isDraggingExternal = false;\n\t\t\t\t_this.externalDragListener = null;\n\t\t\t}\n\t\t});\n\n\t\tdragListener.startDrag(ev); // start listening immediately\n\t},\n\n\n\t// Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\n\t// returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.\n\t// Returning a null value signals an invalid drop hit.\n\t// DOES NOT consider overlap/constraint.\n\t// Assumes both footprints are non-open-ended.\n\tcomputeExternalDrop: function(componentFootprint, meta) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar start = FC.moment.utc(componentFootprint.unzonedRange.startMs).stripZone();\n\t\tvar end;\n\t\tvar eventDef;\n\n\t\tif (componentFootprint.isAllDay) {\n\t\t\t// if dropped on an all-day span, and element's metadata specified a time, set it\n\t\t\tif (meta.startTime) {\n\t\t\t\tstart.time(meta.startTime);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstart.stripTime();\n\t\t\t}\n\t\t}\n\n\t\tif (meta.duration) {\n\t\t\tend = start.clone().add(meta.duration);\n\t\t}\n\n\t\tstart = calendar.applyTimezone(start);\n\n\t\tif (end) {\n\t\t\tend = calendar.applyTimezone(end);\n\t\t}\n\n\t\teventDef = SingleEventDef.parse(\n\t\t\t$.extend({}, meta.eventProps, {\n\t\t\t\tstart: start,\n\t\t\t\tend: end\n\t\t\t}),\n\t\t\tnew EventSource(calendar)\n\t\t);\n\n\t\treturn eventDef;\n\t},\n\n\n\t// NOTE: very similar to isEventInstanceGroupAllowed\n\t// when it's a completely anonymous external drag, no event.\n\tisExternalInstanceGroupAllowed: function(eventInstanceGroup) {\n\t\tvar calendar = this.view.calendar;\n\t\tvar eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\n\t\tvar i;\n\n\t\tfor (i = 0; i < eventFootprints.length; i++) {\n\t\t\tif (!this.view.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < eventFootprints.length; i++) {\n\t\t\t// treat it as a selection\n\t\t\t// TODO: pass in eventInstanceGroup instead\n\t\t\t// because we don't want calendar's constraint system to depend on a component's\n\t\t\t// determination of footprints.\n\t\t\tif (!calendar.isSelectionFootprintAllowed(eventFootprints[i].componentFootprint)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n});\n\n\n/* External-Dragging-Element Data\n----------------------------------------------------------------------------------------------------------------------*/\n\n// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\n// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\nFC.dataAttrPrefix = '';\n\n// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\n// to be used for Event Object creation.\n// A defined `.eventProps`, even when empty, indicates that an event should be created.\nfunction getDraggedElMeta(el) {\n\tvar prefix = FC.dataAttrPrefix;\n\tvar eventProps; // properties for creating the event, not related to date/time\n\tvar startTime; // a Duration\n\tvar duration;\n\tvar stick;\n\n\tif (prefix) { prefix += '-'; }\n\teventProps = el.data(prefix + 'event') || null;\n\n\tif (eventProps) {\n\t\tif (typeof eventProps === 'object') {\n\t\t\teventProps = $.extend({}, eventProps); // make a copy\n\t\t}\n\t\telse { // something like 1 or true. still signal event creation\n\t\t\teventProps = {};\n\t\t}\n\n\t\t// pluck special-cased date/time properties\n\t\tstartTime = eventProps.start;\n\t\tif (startTime == null) { startTime = eventProps.time; } // accept 'time' as well\n\t\tduration = eventProps.duration;\n\t\tstick = eventProps.stick;\n\t\tdelete eventProps.start;\n\t\tdelete eventProps.time;\n\t\tdelete eventProps.duration;\n\t\tdelete eventProps.stick;\n\t}\n\n\t// fallback to standalone attribute values for each of the date/time properties\n\tif (startTime == null) { startTime = el.data(prefix + 'start'); }\n\tif (startTime == null) { startTime = el.data(prefix + 'time'); } // accept 'time' as well\n\tif (duration == null) { duration = el.data(prefix + 'duration'); }\n\tif (stick == null) { stick = el.data(prefix + 'stick'); }\n\n\t// massage into correct data types\n\tstartTime = startTime != null ? moment.duration(startTime) : null;\n\tduration = duration != null ? moment.duration(duration) : null;\n\tstick = Boolean(stick);\n\n\treturn { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };\n}\n\n;;\n\nGrid.mixin({\n\n\t/* Fill System (highlight, background events, business hours)\n\t--------------------------------------------------------------------------------------------------------------------\n\tTODO: remove this system. like we did in TimeGrid\n\t*/\n\n\n\telsByFill: null, // a hash of jQuery element sets used for rendering each fill. Keyed by fill name.\n\n\n\tinitFillInternals: function() {\n\t\tthis.elsByFill = {};\n\t},\n\n\n\t// Renders a set of rectangles over the given segments of time.\n\t// MUST RETURN a subset of segs, the segs that were actually rendered.\n\t// Responsible for populating this.elsByFill. TODO: better API for expressing this requirement\n\trenderFill: function(type, segs) {\n\t\t// subclasses must implement\n\t},\n\n\n\t// Unrenders a specific type of fill that is currently rendered on the grid\n\tunrenderFill: function(type) {\n\t\tvar el = this.elsByFill[type];\n\n\t\tif (el) {\n\t\t\tel.remove();\n\t\t\tdelete this.elsByFill[type];\n\t\t}\n\t},\n\n\n\t// Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\n\t// Only returns segments that successfully rendered.\n\t// To be harnessed by renderFill (implemented by subclasses).\n\t// Analagous to renderFgSegEls.\n\trenderFillSegEls: function(type, segs) {\n\t\tvar _this = this;\n\t\tvar segElMethod = this[type + 'SegEl'];\n\t\tvar html = '';\n\t\tvar renderedSegs = [];\n\t\tvar i;\n\n\t\tif (segs.length) {\n\n\t\t\t// build a large concatenation of segment HTML\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\thtml += this.fillSegHtml(type, segs[i]);\n\t\t\t}\n\n\t\t\t// Grab individual elements from the combined HTML string. Use each as the default rendering.\n\t\t\t// Then, compute the 'el' for each segment.\n\t\t\t$(html).each(function(i, node) {\n\t\t\t\tvar seg = segs[i];\n\t\t\t\tvar el = $(node);\n\n\t\t\t\t// allow custom filter methods per-type\n\t\t\t\tif (segElMethod) {\n\t\t\t\t\tel = segElMethod.call(_this, seg, el);\n\t\t\t\t}\n\n\t\t\t\tif (el) { // custom filters did not cancel the render\n\t\t\t\t\tel = $(el); // allow custom filter to return raw DOM node\n\n\t\t\t\t\t// correct element type? (would be bad if a non-TD were inserted into a table for example)\n\t\t\t\t\tif (el.is(_this.fillSegTag)) {\n\t\t\t\t\t\tseg.el = el;\n\t\t\t\t\t\trenderedSegs.push(seg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn renderedSegs;\n\t},\n\n\n\tfillSegTag: 'div', // subclasses can override\n\n\n\t// Builds the HTML needed for one fill segment. Generic enough to work with different types.\n\tfillSegHtml: function(type, seg) {\n\n\t\t// custom hooks per-type\n\t\tvar classesMethod = this[type + 'SegClasses'];\n\t\tvar cssMethod = this[type + 'SegCss'];\n\n\t\tvar classes = classesMethod ? classesMethod.call(this, seg) : [];\n\t\tvar css = cssToStr(cssMethod ? cssMethod.call(this, seg) : {});\n\n\t\treturn '<' + this.fillSegTag +\n\t\t\t(classes.length ? ' class=\"' + classes.join(' ') + '\"' : '') +\n\t\t\t(css ? ' style=\"' + css + '\"' : '') +\n\t\t\t' />';\n\t},\n\n\n\t// Generates an array of classNames for rendering the highlight. Used by the fill system.\n\thighlightSegClasses: function() {\n\t\treturn [ 'fc-highlight' ];\n\t}\n\n});\n\n;;\n\n/*\nA set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.\nPrerequisite: the object being mixed into needs to be a *Grid*\n*/\nvar DayTableMixin = FC.DayTableMixin = {\n\n\tbreakOnWeeks: false, // should create a new row for each week?\n\tdayDates: null, // whole-day dates for each column. left to right\n\tdayIndices: null, // for each day from start, the offset\n\tdaysPerRow: null,\n\trowCnt: null,\n\tcolCnt: null,\n\tcolHeadFormat: null,\n\n\n\t// Populates internal variables used for date calculation and rendering\n\tupdateDayTable: function() {\n\t\tvar view = this.view;\n\t\tvar calendar = view.calendar;\n\t\tvar date = calendar.msToUtcMoment(this.unzonedRange.startMs, true);\n\t\tvar end = calendar.msToUtcMoment(this.unzonedRange.endMs, true);\n\t\tvar dayIndex = -1;\n\t\tvar dayIndices = [];\n\t\tvar dayDates = [];\n\t\tvar daysPerRow;\n\t\tvar firstDay;\n\t\tvar rowCnt;\n\n\t\twhile (date.isBefore(end)) { // loop each day from start to end\n\t\t\tif (view.isHiddenDay(date)) {\n\t\t\t\tdayIndices.push(dayIndex + 0.5); // mark that it's between indices\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdayIndex++;\n\t\t\t\tdayIndices.push(dayIndex);\n\t\t\t\tdayDates.push(date.clone());\n\t\t\t}\n\t\t\tdate.add(1, 'days');\n\t\t}\n\n\t\tif (this.breakOnWeeks) {\n\t\t\t// count columns until the day-of-week repeats\n\t\t\tfirstDay = dayDates[0].day();\n\t\t\tfor (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {\n\t\t\t\tif (dayDates[daysPerRow].day() == firstDay) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\trowCnt = Math.ceil(dayDates.length / daysPerRow);\n\t\t}\n\t\telse {\n\t\t\trowCnt = 1;\n\t\t\tdaysPerRow = dayDates.length;\n\t\t}\n\n\t\tthis.dayDates = dayDates;\n\t\tthis.dayIndices = dayIndices;\n\t\tthis.daysPerRow = daysPerRow;\n\t\tthis.rowCnt = rowCnt;\n\n\t\tthis.updateDayTableCols();\n\t},\n\n\n\t// Computes and assigned the colCnt property and updates any options that may be computed from it\n\tupdateDayTableCols: function() {\n\t\tthis.colCnt = this.computeColCnt();\n\t\tthis.colHeadFormat = this.opt('columnFormat') || this.computeColHeadFormat();\n\t},\n\n\n\t// Determines how many columns there should be in the table\n\tcomputeColCnt: function() {\n\t\treturn this.daysPerRow;\n\t},\n\n\n\t// Computes the ambiguously-timed moment for the given cell\n\tgetCellDate: function(row, col) {\n\t\treturn this.dayDates[\n\t\t\t\tthis.getCellDayIndex(row, col)\n\t\t\t].clone();\n\t},\n\n\n\t// Computes the ambiguously-timed date range for the given cell\n\tgetCellRange: function(row, col) {\n\t\tvar start = this.getCellDate(row, col);\n\t\tvar end = start.clone().add(1, 'days');\n\n\t\treturn { start: start, end: end };\n\t},\n\n\n\t// Returns the number of day cells, chronologically, from the first of the grid (0-based)\n\tgetCellDayIndex: function(row, col) {\n\t\treturn row * this.daysPerRow + this.getColDayIndex(col);\n\t},\n\n\n\t// Returns the numner of day cells, chronologically, from the first cell in *any given row*\n\tgetColDayIndex: function(col) {\n\t\tif (this.isRTL) {\n\t\t\treturn this.colCnt - 1 - col;\n\t\t}\n\t\telse {\n\t\t\treturn col;\n\t\t}\n\t},\n\n\n\t// Given a date, returns its chronolocial cell-index from the first cell of the grid.\n\t// If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n\t// If before the first offset, returns a negative number.\n\t// If after the last offset, returns an offset past the last cell offset.\n\t// Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n\tgetDateDayIndex: function(date) {\n\t\tvar dayIndices = this.dayIndices;\n\t\tvar dayOffset = date.diff(this.dayDates[0], 'days');\n\n\t\tif (dayOffset < 0) {\n\t\t\treturn dayIndices[0] - 1;\n\t\t}\n\t\telse if (dayOffset >= dayIndices.length) {\n\t\t\treturn dayIndices[dayIndices.length - 1] + 1;\n\t\t}\n\t\telse {\n\t\t\treturn dayIndices[dayOffset];\n\t\t}\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes a default column header formatting string if `colFormat` is not explicitly defined\n\tcomputeColHeadFormat: function() {\n\t\t// if more than one week row, or if there are a lot of columns with not much space,\n\t\t// put just the day numbers will be in each cell\n\t\tif (this.rowCnt > 1 || this.colCnt > 10) {\n\t\t\treturn 'ddd'; // \"Sat\"\n\t\t}\n\t\t// multiple days, so full single date string WON'T be in title text\n\t\telse if (this.colCnt > 1) {\n\t\t\treturn this.opt('dayOfMonthFormat'); // \"Sat 12/10\"\n\t\t}\n\t\t// single day, so full single date string will probably be in title text\n\t\telse {\n\t\t\treturn 'dddd'; // \"Saturday\"\n\t\t}\n\t},\n\n\n\t/* Slicing\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Slices up a date range into a segment for every week-row it intersects with\n\tsliceRangeByRow: function(unzonedRange) {\n\t\tvar daysPerRow = this.daysPerRow;\n\t\tvar normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\n\t\tvar rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\n\t\tvar rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\n\t\tvar segs = [];\n\t\tvar row;\n\t\tvar rowFirst, rowLast; // inclusive day-index range for current row\n\t\tvar segFirst, segLast; // inclusive day-index range for segment\n\n\t\tfor (row = 0; row < this.rowCnt; row++) {\n\t\t\trowFirst = row * daysPerRow;\n\t\t\trowLast = rowFirst + daysPerRow - 1;\n\n\t\t\t// intersect segment's offset range with the row's\n\t\t\tsegFirst = Math.max(rangeFirst, rowFirst);\n\t\t\tsegLast = Math.min(rangeLast, rowLast);\n\n\t\t\t// deal with in-between indices\n\t\t\tsegFirst = Math.ceil(segFirst); // in-between starts round to next cell\n\t\t\tsegLast = Math.floor(segLast); // in-between ends round to prev cell\n\n\t\t\tif (segFirst <= segLast) { // was there any intersection with the current row?\n\t\t\t\tsegs.push({\n\t\t\t\t\trow: row,\n\n\t\t\t\t\t// normalize to start of row\n\t\t\t\t\tfirstRowDayIndex: segFirst - rowFirst,\n\t\t\t\t\tlastRowDayIndex: segLast - rowFirst,\n\n\t\t\t\t\t// must be matching integers to be the segment's start/end\n\t\t\t\t\tisStart: segFirst === rangeFirst,\n\t\t\t\t\tisEnd: segLast === rangeLast\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t// Slices up a date range into a segment for every day-cell it intersects with.\n\t// TODO: make more DRY with sliceRangeByRow somehow.\n\tsliceRangeByDay: function(unzonedRange) {\n\t\tvar daysPerRow = this.daysPerRow;\n\t\tvar normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\n\t\tvar rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\n\t\tvar rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\n\t\tvar segs = [];\n\t\tvar row;\n\t\tvar rowFirst, rowLast; // inclusive day-index range for current row\n\t\tvar i;\n\t\tvar segFirst, segLast; // inclusive day-index range for segment\n\n\t\tfor (row = 0; row < this.rowCnt; row++) {\n\t\t\trowFirst = row * daysPerRow;\n\t\t\trowLast = rowFirst + daysPerRow - 1;\n\n\t\t\tfor (i = rowFirst; i <= rowLast; i++) {\n\n\t\t\t\t// intersect segment's offset range with the row's\n\t\t\t\tsegFirst = Math.max(rangeFirst, i);\n\t\t\t\tsegLast = Math.min(rangeLast, i);\n\n\t\t\t\t// deal with in-between indices\n\t\t\t\tsegFirst = Math.ceil(segFirst); // in-between starts round to next cell\n\t\t\t\tsegLast = Math.floor(segLast); // in-between ends round to prev cell\n\n\t\t\t\tif (segFirst <= segLast) { // was there any intersection with the current row?\n\t\t\t\t\tsegs.push({\n\t\t\t\t\t\trow: row,\n\n\t\t\t\t\t\t// normalize to start of row\n\t\t\t\t\t\tfirstRowDayIndex: segFirst - rowFirst,\n\t\t\t\t\t\tlastRowDayIndex: segLast - rowFirst,\n\n\t\t\t\t\t\t// must be matching integers to be the segment's start/end\n\t\t\t\t\t\tisStart: segFirst === rangeFirst,\n\t\t\t\t\t\tisEnd: segLast === rangeLast\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t/* Header Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderHeadHtml: function() {\n\t\tvar theme = this.view.calendar.theme;\n\n\t\treturn '' +\n\t\t\t'
' +\n\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\tthis.renderHeadTrHtml() +\n\t\t\t\t\t'' +\n\t\t\t\t'
' +\n\t\t\t'
';\n\t},\n\n\n\trenderHeadIntroHtml: function() {\n\t\treturn this.renderIntroHtml(); // fall back to generic\n\t},\n\n\n\trenderHeadTrHtml: function() {\n\t\treturn '' +\n\t\t\t'' +\n\t\t\t\t(this.isRTL ? '' : this.renderHeadIntroHtml()) +\n\t\t\t\tthis.renderHeadDateCellsHtml() +\n\t\t\t\t(this.isRTL ? this.renderHeadIntroHtml() : '') +\n\t\t\t'';\n\t},\n\n\n\trenderHeadDateCellsHtml: function() {\n\t\tvar htmls = [];\n\t\tvar col, date;\n\n\t\tfor (col = 0; col < this.colCnt; col++) {\n\t\t\tdate = this.getCellDate(0, col);\n\t\t\thtmls.push(this.renderHeadDateCellHtml(date));\n\t\t}\n\n\t\treturn htmls.join('');\n\t},\n\n\n\t// TODO: when internalApiVersion, accept an object for HTML attributes\n\t// (colspan should be no different)\n\trenderHeadDateCellHtml: function(date, colspan, otherAttrs) {\n\t\tvar view = this.view;\n\t\tvar isDateValid = view.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\n\t\tvar classNames = [\n\t\t\t'fc-day-header',\n\t\t\tview.calendar.theme.getClass('widgetHeader')\n\t\t];\n\t\tvar innerHtml = htmlEscape(date.format(this.colHeadFormat));\n\n\t\t// if only one row of days, the classNames on the header can represent the specific days beneath\n\t\tif (this.rowCnt === 1) {\n\t\t\tclassNames = classNames.concat(\n\t\t\t\t// includes the day-of-week class\n\t\t\t\t// noThemeHighlight=true (don't highlight the header)\n\t\t\t\tthis.getDayClasses(date, true)\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tclassNames.push('fc-' + dayIDs[date.day()]); // only add the day-of-week class\n\t\t}\n\n\t\treturn '' +\n ' 1 ?\n\t\t\t\t\t' colspan=\"' + colspan + '\"' :\n\t\t\t\t\t'') +\n\t\t\t\t(otherAttrs ?\n\t\t\t\t\t' ' + otherAttrs :\n\t\t\t\t\t'') +\n\t\t\t\t'>' +\n\t\t\t\t(isDateValid ?\n\t\t\t\t\t// don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\n\t\t\t\t\tview.buildGotoAnchorHtml(\n\t\t\t\t\t\t{ date: date, forceOff: this.rowCnt > 1 || this.colCnt === 1 },\n\t\t\t\t\t\tinnerHtml\n\t\t\t\t\t) :\n\t\t\t\t\t// if not valid, display text, but no link\n\t\t\t\t\tinnerHtml\n\t\t\t\t) +\n\t\t\t'';\n\t},\n\n\n\t/* Background Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBgTrHtml: function(row) {\n\t\treturn '' +\n\t\t\t'' +\n\t\t\t\t(this.isRTL ? '' : this.renderBgIntroHtml(row)) +\n\t\t\t\tthis.renderBgCellsHtml(row) +\n\t\t\t\t(this.isRTL ? this.renderBgIntroHtml(row) : '') +\n\t\t\t'';\n\t},\n\n\n\trenderBgIntroHtml: function(row) {\n\t\treturn this.renderIntroHtml(); // fall back to generic\n\t},\n\n\n\trenderBgCellsHtml: function(row) {\n\t\tvar htmls = [];\n\t\tvar col, date;\n\n\t\tfor (col = 0; col < this.colCnt; col++) {\n\t\t\tdate = this.getCellDate(row, col);\n\t\t\thtmls.push(this.renderBgCellHtml(date));\n\t\t}\n\n\t\treturn htmls.join('');\n\t},\n\n\n\trenderBgCellHtml: function(date, otherAttrs) {\n\t\tvar view = this.view;\n\t\tvar isDateValid = view.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\n\t\tvar classes = this.getDayClasses(date);\n\n\t\tclasses.unshift('fc-day', view.calendar.theme.getClass('widgetContent'));\n\n\t\treturn '';\n\t},\n\n\n\t/* Generic\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Generates the default HTML intro for any row. User classes should override\n\trenderIntroHtml: function() {\n\t},\n\n\n\t// TODO: a generic method for dealing with , RTL, intro\n\t// when increment internalApiVersion\n\t// wrapTr (scheduler)\n\n\n\t/* Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Applies the generic \"intro\" and \"outro\" HTML to the given cells.\n\t// Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\n\tbookendCells: function(trEl) {\n\t\tvar introHtml = this.renderIntroHtml();\n\n\t\tif (introHtml) {\n\t\t\tif (this.isRTL) {\n\t\t\t\ttrEl.append(introHtml);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttrEl.prepend(introHtml);\n\t\t\t}\n\t\t}\n\t}\n\n};\n\n;;\n\n/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {\n\n\tnumbersVisible: false, // should render a row for day/week numbers? set by outside view. TODO: make internal\n\tbottomCoordPadding: 0, // hack for extending the hit area for the last row of the coordinate grid\n\n\trowEls: null, // set of fake row elements\n\tcellEls: null, // set of whole-day elements comprising the row's background\n\thelperEls: null, // set of cell skeleton elements for rendering the mock event \"helper\"\n\n\trowCoordCache: null,\n\tcolCoordCache: null,\n\n\n\t// Renders the rows and columns into the component's `this.el`, which should already be assigned.\n\t// isRigid determins whether the individual rows should ignore the contents and be a constant height.\n\t// Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\n\trenderDates: function(isRigid) {\n\t\tvar view = this.view;\n\t\tvar rowCnt = this.rowCnt;\n\t\tvar colCnt = this.colCnt;\n\t\tvar html = '';\n\t\tvar row;\n\t\tvar col;\n\n\t\tfor (row = 0; row < rowCnt; row++) {\n\t\t\thtml += this.renderDayRowHtml(row, isRigid);\n\t\t}\n\t\tthis.el.html(html);\n\n\t\tthis.rowEls = this.el.find('.fc-row');\n\t\tthis.cellEls = this.el.find('.fc-day, .fc-disabled-day');\n\n\t\tthis.rowCoordCache = new CoordCache({\n\t\t\tels: this.rowEls,\n\t\t\tisVertical: true\n\t\t});\n\t\tthis.colCoordCache = new CoordCache({\n\t\t\tels: this.cellEls.slice(0, this.colCnt), // only the first row\n\t\t\tisHorizontal: true\n\t\t});\n\n\t\t// trigger dayRender with each cell's element\n\t\tfor (row = 0; row < rowCnt; row++) {\n\t\t\tfor (col = 0; col < colCnt; col++) {\n\t\t\t\tthis.publiclyTrigger('dayRender', {\n\t\t\t\t\tcontext: view,\n\t\t\t\t\targs: [\n\t\t\t\t\t\tthis.getCellDate(row, col),\n\t\t\t\t\t\tthis.getCellEl(row, col),\n\t\t\t\t\t\tview\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\n\n\tunrenderDates: function() {\n\t\tthis.removeSegPopover();\n\t},\n\n\n\trenderBusinessHours: function() {\n\t\tvar segs = this.buildBusinessHourSegs(true); // wholeDay=true\n\t\tthis.renderFill('businessHours', segs, 'bgevent');\n\t},\n\n\n\tunrenderBusinessHours: function() {\n\t\tthis.unrenderFill('businessHours');\n\t},\n\n\n\t// Generates the HTML for a single row, which is a div that wraps a table.\n\t// `row` is the row number.\n\trenderDayRowHtml: function(row, isRigid) {\n\t\tvar theme = this.view.calendar.theme;\n\t\tvar classes = [ 'fc-row', 'fc-week', theme.getClass('dayRow') ];\n\n\t\tif (isRigid) {\n\t\t\tclasses.push('fc-rigid');\n\t\t}\n\n\t\treturn '' +\n\t\t\t'
' +\n\t\t\t\t'
' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\tthis.renderBgTrHtml(row) +\n\t\t\t\t\t'
' +\n\t\t\t\t'
' +\n\t\t\t\t'
' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\t(this.numbersVisible ?\n\t\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t\tthis.renderNumberTrHtml(row) +\n\t\t\t\t\t\t\t'' :\n\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t) +\n\t\t\t\t\t'
' +\n\t\t\t\t'
' +\n\t\t\t'
';\n\t},\n\n\n\t/* Grid Number Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderNumberTrHtml: function(row) {\n\t\treturn '' +\n\t\t\t'' +\n\t\t\t\t(this.isRTL ? '' : this.renderNumberIntroHtml(row)) +\n\t\t\t\tthis.renderNumberCellsHtml(row) +\n\t\t\t\t(this.isRTL ? this.renderNumberIntroHtml(row) : '') +\n\t\t\t'';\n\t},\n\n\n\trenderNumberIntroHtml: function(row) {\n\t\treturn this.renderIntroHtml();\n\t},\n\n\n\trenderNumberCellsHtml: function(row) {\n\t\tvar htmls = [];\n\t\tvar col, date;\n\n\t\tfor (col = 0; col < this.colCnt; col++) {\n\t\t\tdate = this.getCellDate(row, col);\n\t\t\thtmls.push(this.renderNumberCellHtml(date));\n\t\t}\n\n\t\treturn htmls.join('');\n\t},\n\n\n\t// Generates the HTML for the s of the \"number\" row in the DayGrid's content skeleton.\n\t// The number row will only exist if either day numbers or week numbers are turned on.\n\trenderNumberCellHtml: function(date) {\n\t\tvar view = this.view;\n\t\tvar html = '';\n\t\tvar isDateValid = view.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\n\t\tvar isDayNumberVisible = view.dayNumbersVisible && isDateValid;\n\t\tvar classes;\n\t\tvar weekCalcFirstDoW;\n\n\t\tif (!isDayNumberVisible && !view.cellWeekNumbersVisible) {\n\t\t\t// no numbers in day cell (week number must be along the side)\n\t\t\treturn ''; // will create an empty space above events :(\n\t\t}\n\n\t\tclasses = this.getDayClasses(date);\n\t\tclasses.unshift('fc-day-top');\n\n\t\tif (view.cellWeekNumbersVisible) {\n\t\t\t// To determine the day of week number change under ISO, we cannot\n\t\t\t// rely on moment.js methods such as firstDayOfWeek() or weekday(),\n\t\t\t// because they rely on the locale's dow (possibly overridden by\n\t\t\t// our firstDay option), which may not be Monday. We cannot change\n\t\t\t// dow, because that would affect the calendar start day as well.\n\t\t\tif (date._locale._fullCalendar_weekCalc === 'ISO') {\n\t\t\t\tweekCalcFirstDoW = 1; // Monday by ISO 8601 definition\n\t\t\t}\n\t\t\telse {\n\t\t\t\tweekCalcFirstDoW = date._locale.firstDayOfWeek();\n\t\t\t}\n\t\t}\n\n\t\thtml += '';\n\n\t\tif (view.cellWeekNumbersVisible && (date.day() == weekCalcFirstDoW)) {\n\t\t\thtml += view.buildGotoAnchorHtml(\n\t\t\t\t{ date: date, type: 'week' },\n\t\t\t\t{ 'class': 'fc-week-number' },\n\t\t\t\tdate.format('w') // inner HTML\n\t\t\t);\n\t\t}\n\n\t\tif (isDayNumberVisible) {\n\t\t\thtml += view.buildGotoAnchorHtml(\n\t\t\t\tdate,\n\t\t\t\t{ 'class': 'fc-day-number' },\n\t\t\t\tdate.date() // inner HTML\n\t\t\t);\n\t\t}\n\n\t\thtml += '';\n\n\t\treturn html;\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes a default event time formatting string if `timeFormat` is not explicitly defined\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.opt('extraSmallTimeFormat'); // like \"6p\" or \"6:30p\"\n\t},\n\n\n\t// Computes a default `displayEventEnd` value if one is not expliclty defined\n\tcomputeDisplayEventEnd: function() {\n\t\treturn this.colCnt == 1; // we'll likely have space if there's only one day\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trangeUpdated: function() {\n\t\tthis.updateDayTable();\n\t},\n\n\n\t// Slices up the given span (unzoned start/end with other misc data) into an array of segments\n\tcomponentFootprintToSegs: function(componentFootprint) {\n\t\tvar segs = this.sliceRangeByRow(componentFootprint.unzonedRange);\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\n\t\t\tif (this.isRTL) {\n\t\t\t\tseg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;\n\t\t\t\tseg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tseg.leftCol = seg.firstRowDayIndex;\n\t\t\t\tseg.rightCol = seg.lastRowDayIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t/* Hit System\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tprepareHits: function() {\n\t\tthis.colCoordCache.build();\n\t\tthis.rowCoordCache.build();\n\t\tthis.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\n\t},\n\n\n\treleaseHits: function() {\n\t\tthis.colCoordCache.clear();\n\t\tthis.rowCoordCache.clear();\n\t},\n\n\n\tqueryHit: function(leftOffset, topOffset) {\n\t\tif (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {\n\t\t\tvar col = this.colCoordCache.getHorizontalIndex(leftOffset);\n\t\t\tvar row = this.rowCoordCache.getVerticalIndex(topOffset);\n\n\t\t\tif (row != null && col != null) {\n\t\t\t\treturn this.getCellHit(row, col);\n\t\t\t}\n\t\t}\n\t},\n\n\n\tgetHitFootprint: function(hit) {\n\t\tvar range = this.getCellRange(hit.row, hit.col);\n\n\t\treturn new ComponentFootprint(\n\t\t\tnew UnzonedRange(range.start, range.end),\n\t\t\ttrue // all-day?\n\t\t);\n\t},\n\n\n\tgetHitEl: function(hit) {\n\t\treturn this.getCellEl(hit.row, hit.col);\n\t},\n\n\n\t/* Cell System\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// FYI: the first column is the leftmost column, regardless of date\n\n\n\tgetCellHit: function(row, col) {\n\t\treturn {\n\t\t\trow: row,\n\t\t\tcol: col,\n\t\t\tcomponent: this, // needed unfortunately :(\n\t\t\tleft: this.colCoordCache.getLeftOffset(col),\n\t\t\tright: this.colCoordCache.getRightOffset(col),\n\t\t\ttop: this.rowCoordCache.getTopOffset(row),\n\t\t\tbottom: this.rowCoordCache.getBottomOffset(row)\n\t\t};\n\t},\n\n\n\tgetCellEl: function(row, col) {\n\t\treturn this.cellEls.eq(row * this.colCnt + col);\n\t},\n\n\n\t/* Event Drag Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// TODO: move to DayGrid.event, similar to what we did with Grid's drag methods\n\n\n\t// Renders a visual indication of an event or external element being dragged.\n\t// `eventLocation` has zoned start and end (optional)\n\trenderDrag: function(eventFootprints, seg) {\n\t\tvar i;\n\n\t\tfor (i = 0; i < eventFootprints.length; i++) {\n\t\t\tthis.renderHighlight(eventFootprints[i].componentFootprint);\n\t\t}\n\n\t\t// if a segment from the same calendar but another component is being dragged, render a helper event\n\t\tif (seg && seg.component !== this) {\n\t\t\treturn this.renderHelperEventFootprints(eventFootprints, seg); // returns mock event elements\n\t\t}\n\t},\n\n\n\t// Unrenders any visual indication of a hovering event\n\tunrenderDrag: function() {\n\t\tthis.unrenderHighlight();\n\t\tthis.unrenderHelper();\n\t},\n\n\n\t/* Event Resize Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event being resized\n\trenderEventResize: function(eventFootprints, seg) {\n\t\tvar i;\n\n\t\tfor (i = 0; i < eventFootprints.length; i++) {\n\t\t\tthis.renderHighlight(eventFootprints[i].componentFootprint);\n\t\t}\n\n\t\treturn this.renderHelperEventFootprints(eventFootprints, seg); // returns mock event elements\n\t},\n\n\n\t// Unrenders a visual indication of an event being resized\n\tunrenderEventResize: function() {\n\t\tthis.unrenderHighlight();\n\t\tthis.unrenderHelper();\n\t},\n\n\n\t/* Event Helper\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a mock \"helper\" event. `sourceSeg` is the associated internal segment object. It can be null.\n\trenderHelperEventFootprintEls: function(eventFootprints, sourceSeg) {\n\t\tvar helperNodes = [];\n\t\tvar segs = this.eventFootprintsToSegs(eventFootprints);\n\t\tvar rowStructs;\n\n\t\tsegs = this.renderFgSegEls(segs); // assigns each seg's el and returns a subset of segs that were rendered\n\t\trowStructs = this.renderSegRows(segs);\n\n\t\t// inject each new event skeleton into each associated row\n\t\tthis.rowEls.each(function(row, rowNode) {\n\t\t\tvar rowEl = $(rowNode); // the .fc-row\n\t\t\tvar skeletonEl = $('
'); // will be absolutely positioned\n\t\t\tvar skeletonTop;\n\n\t\t\t// If there is an original segment, match the top position. Otherwise, put it at the row's top level\n\t\t\tif (sourceSeg && sourceSeg.row === row) {\n\t\t\t\tskeletonTop = sourceSeg.el.position().top;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tskeletonTop = rowEl.find('.fc-content-skeleton tbody').position().top;\n\t\t\t}\n\n\t\t\tskeletonEl.css('top', skeletonTop)\n\t\t\t\t.find('table')\n\t\t\t\t\t.append(rowStructs[row].tbodyEl);\n\n\t\t\trowEl.append(skeletonEl);\n\t\t\thelperNodes.push(skeletonEl[0]);\n\t\t});\n\n\t\treturn ( // must return the elements rendered\n\t\t\tthis.helperEls = $(helperNodes) // array -> jQuery set\n\t\t);\n\t},\n\n\n\t// Unrenders any visual indication of a mock helper event\n\tunrenderHelper: function() {\n\t\tif (this.helperEls) {\n\t\t\tthis.helperEls.remove();\n\t\t\tthis.helperEls = null;\n\t\t}\n\t},\n\n\n\t/* Fill System (highlight, background events, business hours)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tfillSegTag: 'td', // override the default tag name\n\n\n\t// Renders a set of rectangles over the given segments of days.\n\t// Only returns segments that successfully rendered.\n\trenderFill: function(type, segs, className) {\n\t\tvar nodes = [];\n\t\tvar i, seg;\n\t\tvar skeletonEl;\n\n\t\tsegs = this.renderFillSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tskeletonEl = this.renderFillRow(type, seg, className);\n\t\t\tthis.rowEls.eq(seg.row).append(skeletonEl);\n\t\t\tnodes.push(skeletonEl[0]);\n\t\t}\n\n\t\tif (this.elsByFill[type]) {\n\t\t\tthis.elsByFill[type] = this.elsByFill[type].add(nodes);\n\t\t}\n\t\telse {\n\t\t\tthis.elsByFill[type] = $(nodes);\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t// Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\n\trenderFillRow: function(type, seg, className) {\n\t\tvar colCnt = this.colCnt;\n\t\tvar startCol = seg.leftCol;\n\t\tvar endCol = seg.rightCol + 1;\n\t\tvar skeletonEl;\n\t\tvar trEl;\n\n\t\tclassName = className || type.toLowerCase();\n\n\t\tskeletonEl = $(\n\t\t\t'
' +\n\t\t\t\t'
' +\n\t\t\t'
'\n\t\t);\n\t\ttrEl = skeletonEl.find('tr');\n\n\t\tif (startCol > 0) {\n\t\t\ttrEl.append('');\n\t\t}\n\n\t\ttrEl.append(\n\t\t\tseg.el.attr('colspan', endCol - startCol)\n\t\t);\n\n\t\tif (endCol < colCnt) {\n\t\t\ttrEl.append('');\n\t\t}\n\n\t\tthis.bookendCells(trEl);\n\n\t\treturn skeletonEl;\n\t}\n\n});\n\n;;\n\n/* Event-rendering methods for the DayGrid class\n----------------------------------------------------------------------------------------------------------------------*/\n\nDayGrid.mixin({\n\n\trowStructs: null, // an array of objects, each holding information about a row's foreground event-rendering\n\n\n\t// Unrenders all events currently rendered on the grid\n\tunrenderEvents: function() {\n\t\tthis.removeSegPopover(); // removes the \"more..\" events popover\n\t\tGrid.prototype.unrenderEvents.apply(this, arguments); // calls the super-method\n\t},\n\n\n\t// Retrieves all rendered segment objects currently rendered on the grid\n\tgetEventSegs: function() {\n\t\treturn Grid.prototype.getEventSegs.call(this) // get the segments from the super-method\n\t\t\t.concat(this.popoverSegs || []); // append the segments from the \"more...\" popover\n\t},\n\n\n\t// Renders the given background event segments onto the grid\n\trenderBgSegs: function(segs) {\n\n\t\t// don't render timed background events\n\t\tvar allDaySegs = $.grep(segs, function(seg) {\n\t\t\treturn seg.footprint.componentFootprint.isAllDay;\n\t\t});\n\n\t\treturn Grid.prototype.renderBgSegs.call(this, allDaySegs); // call the super-method\n\t},\n\n\n\t// Renders the given foreground event segments onto the grid\n\trenderFgSegs: function(segs) {\n\t\tvar rowStructs;\n\n\t\t// render an `.el` on each seg\n\t\t// returns a subset of the segs. segs that were actually rendered\n\t\tsegs = this.renderFgSegEls(segs);\n\n\t\trowStructs = this.rowStructs = this.renderSegRows(segs);\n\n\t\t// append to each row's content skeleton\n\t\tthis.rowEls.each(function(i, rowNode) {\n\t\t\t$(rowNode).find('.fc-content-skeleton > table').append(\n\t\t\t\trowStructs[i].tbodyEl\n\t\t\t);\n\t\t});\n\n\t\treturn segs; // return only the segs that were actually rendered\n\t},\n\n\n\t// Unrenders all currently rendered foreground event segments\n\tunrenderFgSegs: function() {\n\t\tvar rowStructs = this.rowStructs || [];\n\t\tvar rowStruct;\n\n\t\twhile ((rowStruct = rowStructs.pop())) {\n\t\t\trowStruct.tbodyEl.remove();\n\t\t}\n\n\t\tthis.rowStructs = null;\n\t},\n\n\n\t// Uses the given events array to generate elements that should be appended to each row's content skeleton.\n\t// Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\n\t// PRECONDITION: each segment shoud already have a rendered and assigned `.el`\n\trenderSegRows: function(segs) {\n\t\tvar rowStructs = [];\n\t\tvar segRows;\n\t\tvar row;\n\n\t\tsegRows = this.groupSegRows(segs); // group into nested arrays\n\n\t\t// iterate each row of segment groupings\n\t\tfor (row = 0; row < segRows.length; row++) {\n\t\t\trowStructs.push(\n\t\t\t\tthis.renderSegRow(row, segRows[row])\n\t\t\t);\n\t\t}\n\n\t\treturn rowStructs;\n\t},\n\n\n\t// Builds the HTML to be used for the default element for an individual segment\n\tfgSegHtml: function(seg, disableResizing) {\n\t\tvar view = this.view;\n\t\tvar eventDef = seg.footprint.eventDef;\n\t\tvar isAllDay = seg.footprint.componentFootprint.isAllDay;\n\t\tvar isDraggable = view.isEventDefDraggable(eventDef);\n\t\tvar isResizableFromStart = !disableResizing && isAllDay &&\n\t\t\tseg.isStart && view.isEventDefResizableFromStart(eventDef);\n\t\tvar isResizableFromEnd = !disableResizing && isAllDay &&\n\t\t\tseg.isEnd && view.isEventDefResizableFromEnd(eventDef);\n\t\tvar classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\n\t\tvar skinCss = cssToStr(this.getSegSkinCss(seg));\n\t\tvar timeHtml = '';\n\t\tvar timeText;\n\t\tvar titleHtml;\n\n\t\tclasses.unshift('fc-day-grid-event', 'fc-h-event');\n\n\t\t// Only display a timed events time if it is the starting segment\n\t\tif (seg.isStart) {\n\t\t\ttimeText = this.getEventTimeText(seg.footprint);\n\t\t\tif (timeText) {\n\t\t\t\ttimeHtml = '' + htmlEscape(timeText) + '';\n\t\t\t}\n\t\t}\n\n\t\ttitleHtml =\n\t\t\t'' +\n\t\t\t\t(htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height\n\t\t\t'';\n\t\t\n\t\treturn '' +\n\t\t\t\t'
' +\n\t\t\t\t\t(this.isRTL ?\n\t\t\t\t\t\ttitleHtml + ' ' + timeHtml : // put a natural space in between\n\t\t\t\t\t\ttimeHtml + ' ' + titleHtml //\n\t\t\t\t\t\t) +\n\t\t\t\t'
' +\n\t\t\t\t(isResizableFromStart ?\n\t\t\t\t\t'
' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t\t(isResizableFromEnd ?\n\t\t\t\t\t'
' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t'';\n\t},\n\n\n\t// Given a row # and an array of segments all in the same row, render a element, a skeleton that contains\n\t// the segments. Returns object with a bunch of internal data about how the render was calculated.\n\t// NOTE: modifies rowSegs\n\trenderSegRow: function(row, rowSegs) {\n\t\tvar colCnt = this.colCnt;\n\t\tvar segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\n\t\tvar levelCnt = Math.max(1, segLevels.length); // ensure at least one level\n\t\tvar tbody = $('');\n\t\tvar segMatrix = []; // lookup for which segments are rendered into which level+col cells\n\t\tvar cellMatrix = []; // lookup for all elements of the level+col matrix\n\t\tvar loneCellMatrix = []; // lookup for elements that only take up a single column\n\t\tvar i, levelSegs;\n\t\tvar col;\n\t\tvar tr;\n\t\tvar j, seg;\n\t\tvar td;\n\n\t\t// populates empty cells from the current column (`col`) to `endCol`\n\t\tfunction emptyCellsUntil(endCol) {\n\t\t\twhile (col < endCol) {\n\t\t\t\t// try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\n\t\t\t\ttd = (loneCellMatrix[i - 1] || [])[col];\n\t\t\t\tif (td) {\n\t\t\t\t\ttd.attr(\n\t\t\t\t\t\t'rowspan',\n\t\t\t\t\t\tparseInt(td.attr('rowspan') || 1, 10) + 1\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttd = $('');\n\t\t\t\t\ttr.append(td);\n\t\t\t\t}\n\t\t\t\tcellMatrix[i][col] = td;\n\t\t\t\tloneCellMatrix[i][col] = td;\n\t\t\t\tcol++;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < levelCnt; i++) { // iterate through all levels\n\t\t\tlevelSegs = segLevels[i];\n\t\t\tcol = 0;\n\t\t\ttr = $('');\n\n\t\t\tsegMatrix.push([]);\n\t\t\tcellMatrix.push([]);\n\t\t\tloneCellMatrix.push([]);\n\n\t\t\t// levelCnt might be 1 even though there are no actual levels. protect against this.\n\t\t\t// this single empty row is useful for styling.\n\t\t\tif (levelSegs) {\n\t\t\t\tfor (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\n\t\t\t\t\tseg = levelSegs[j];\n\n\t\t\t\t\temptyCellsUntil(seg.leftCol);\n\n\t\t\t\t\t// create a container that occupies or more columns. append the event element.\n\t\t\t\t\ttd = $('').append(seg.el);\n\t\t\t\t\tif (seg.leftCol != seg.rightCol) {\n\t\t\t\t\t\ttd.attr('colspan', seg.rightCol - seg.leftCol + 1);\n\t\t\t\t\t}\n\t\t\t\t\telse { // a single-column segment\n\t\t\t\t\t\tloneCellMatrix[i][col] = td;\n\t\t\t\t\t}\n\n\t\t\t\t\twhile (col <= seg.rightCol) {\n\t\t\t\t\t\tcellMatrix[i][col] = td;\n\t\t\t\t\t\tsegMatrix[i][col] = seg;\n\t\t\t\t\t\tcol++;\n\t\t\t\t\t}\n\n\t\t\t\t\ttr.append(td);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\temptyCellsUntil(colCnt); // finish off the row\n\t\t\tthis.bookendCells(tr);\n\t\t\ttbody.append(tr);\n\t\t}\n\n\t\treturn { // a \"rowStruct\"\n\t\t\trow: row, // the row number\n\t\t\ttbodyEl: tbody,\n\t\t\tcellMatrix: cellMatrix,\n\t\t\tsegMatrix: segMatrix,\n\t\t\tsegLevels: segLevels,\n\t\t\tsegs: rowSegs\n\t\t};\n\t},\n\n\n\t// Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\n\t// NOTE: modifies segs\n\tbuildSegLevels: function(segs) {\n\t\tvar levels = [];\n\t\tvar i, seg;\n\t\tvar j;\n\n\t\t// Give preference to elements with certain criteria, so they have\n\t\t// a chance to be closer to the top.\n\t\tthis.sortEventSegs(segs);\n\t\t\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\n\t\t\t// loop through levels, starting with the topmost, until the segment doesn't collide with other segments\n\t\t\tfor (j = 0; j < levels.length; j++) {\n\t\t\t\tif (!isDaySegCollision(seg, levels[j])) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// `j` now holds the desired subrow index\n\t\t\tseg.level = j;\n\n\t\t\t// create new level array if needed and append segment\n\t\t\t(levels[j] || (levels[j] = [])).push(seg);\n\t\t}\n\n\t\t// order segments left-to-right. very important if calendar is RTL\n\t\tfor (j = 0; j < levels.length; j++) {\n\t\t\tlevels[j].sort(compareDaySegCols);\n\t\t}\n\n\t\treturn levels;\n\t},\n\n\n\t// Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\n\tgroupSegRows: function(segs) {\n\t\tvar segRows = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < this.rowCnt; i++) {\n\t\t\tsegRows.push([]);\n\t\t}\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tsegRows[segs[i].row].push(segs[i]);\n\t\t}\n\n\t\treturn segRows;\n\t}\n\n});\n\n\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\nfunction isDaySegCollision(seg, otherSegs) {\n\tvar i, otherSeg;\n\n\tfor (i = 0; i < otherSegs.length; i++) {\n\t\totherSeg = otherSegs[i];\n\n\t\tif (\n\t\t\totherSeg.leftCol <= seg.rightCol &&\n\t\t\totherSeg.rightCol >= seg.leftCol\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n\n// A cmp function for determining the leftmost event\nfunction compareDaySegCols(a, b) {\n\treturn a.leftCol - b.leftCol;\n}\n\n;;\n\n/* Methods relate to limiting the number events for a given day on a DayGrid\n----------------------------------------------------------------------------------------------------------------------*/\n// NOTE: all the segs being passed around in here are foreground segs\n\nDayGrid.mixin({\n\n\tsegPopover: null, // the Popover that holds events that can't fit in a cell. null when not visible\n\tpopoverSegs: null, // an array of segment objects that the segPopover holds. null when not visible\n\n\n\tremoveSegPopover: function() {\n\t\tif (this.segPopover) {\n\t\t\tthis.segPopover.hide(); // in handler, will call segPopover's removeElement\n\t\t}\n\t},\n\n\n\t// Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\n\t// `levelLimit` can be false (don't limit), a number, or true (should be computed).\n\tlimitRows: function(levelLimit) {\n\t\tvar rowStructs = this.rowStructs || [];\n\t\tvar row; // row #\n\t\tvar rowLevelLimit;\n\n\t\tfor (row = 0; row < rowStructs.length; row++) {\n\t\t\tthis.unlimitRow(row);\n\n\t\t\tif (!levelLimit) {\n\t\t\t\trowLevelLimit = false;\n\t\t\t}\n\t\t\telse if (typeof levelLimit === 'number') {\n\t\t\t\trowLevelLimit = levelLimit;\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowLevelLimit = this.computeRowLevelLimit(row);\n\t\t\t}\n\n\t\t\tif (rowLevelLimit !== false) {\n\t\t\t\tthis.limitRow(row, rowLevelLimit);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Computes the number of levels a row will accomodate without going outside its bounds.\n\t// Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\n\t// `row` is the row number.\n\tcomputeRowLevelLimit: function(row) {\n\t\tvar rowEl = this.rowEls.eq(row); // the containing \"fake\" row div\n\t\tvar rowHeight = rowEl.height(); // TODO: cache somehow?\n\t\tvar trEls = this.rowStructs[row].tbodyEl.children();\n\t\tvar i, trEl;\n\t\tvar trHeight;\n\n\t\tfunction iterInnerHeights(i, childNode) {\n\t\t\ttrHeight = Math.max(trHeight, $(childNode).outerHeight());\n\t\t}\n\n\t\t// Reveal one level at a time and stop when we find one out of bounds\n\t\tfor (i = 0; i < trEls.length; i++) {\n\t\t\ttrEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)\n\n\t\t\t// with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,\n\t\t\t// so instead, find the tallest inner content element.\n\t\t\ttrHeight = 0;\n\t\t\ttrEl.find('> td > :first-child').each(iterInnerHeights);\n\n\t\t\tif (trEl.position().top + trHeight > rowHeight) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\n\t\treturn false; // should not limit at all\n\t},\n\n\n\t// Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\n\t// `row` is the row number.\n\t// `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\n\tlimitRow: function(row, levelLimit) {\n\t\tvar _this = this;\n\t\tvar rowStruct = this.rowStructs[row];\n\t\tvar moreNodes = []; // array of \"more\" links and DOM nodes\n\t\tvar col = 0; // col #, left-to-right (not chronologically)\n\t\tvar levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\n\t\tvar cellMatrix; // a matrix (by level, then column) of all jQuery elements in the row\n\t\tvar limitedNodes; // array of temporarily hidden level and segment DOM nodes\n\t\tvar i, seg;\n\t\tvar segsBelow; // array of segment objects below `seg` in the current `col`\n\t\tvar totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\n\t\tvar colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\n\t\tvar td, rowspan;\n\t\tvar segMoreNodes; // array of \"more\" cells that will stand-in for the current seg's cell\n\t\tvar j;\n\t\tvar moreTd, moreWrap, moreLink;\n\n\t\t// Iterates through empty level cells and places \"more\" links inside if need be\n\t\tfunction emptyCellsUntil(endCol) { // goes from current `col` to `endCol`\n\t\t\twhile (col < endCol) {\n\t\t\t\tsegsBelow = _this.getCellSegs(row, col, levelLimit);\n\t\t\t\tif (segsBelow.length) {\n\t\t\t\t\ttd = cellMatrix[levelLimit - 1][col];\n\t\t\t\t\tmoreLink = _this.renderMoreLink(row, col, segsBelow);\n\t\t\t\t\tmoreWrap = $('
').append(moreLink);\n\t\t\t\t\ttd.append(moreWrap);\n\t\t\t\t\tmoreNodes.push(moreWrap[0]);\n\t\t\t\t}\n\t\t\t\tcol++;\n\t\t\t}\n\t\t}\n\n\t\tif (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\n\t\t\tlevelSegs = rowStruct.segLevels[levelLimit - 1];\n\t\t\tcellMatrix = rowStruct.cellMatrix;\n\n\t\t\tlimitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level elements past the limit\n\t\t\t\t.addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\n\n\t\t\t// iterate though segments in the last allowable level\n\t\t\tfor (i = 0; i < levelSegs.length; i++) {\n\t\t\t\tseg = levelSegs[i];\n\t\t\t\temptyCellsUntil(seg.leftCol); // process empty cells before the segment\n\n\t\t\t\t// determine *all* segments below `seg` that occupy the same columns\n\t\t\t\tcolSegsBelow = [];\n\t\t\t\ttotalSegsBelow = 0;\n\t\t\t\twhile (col <= seg.rightCol) {\n\t\t\t\t\tsegsBelow = this.getCellSegs(row, col, levelLimit);\n\t\t\t\t\tcolSegsBelow.push(segsBelow);\n\t\t\t\t\ttotalSegsBelow += segsBelow.length;\n\t\t\t\t\tcol++;\n\t\t\t\t}\n\n\t\t\t\tif (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\n\t\t\t\t\ttd = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\n\t\t\t\t\trowspan = td.attr('rowspan') || 1;\n\t\t\t\t\tsegMoreNodes = [];\n\n\t\t\t\t\t// make a replacement for each column the segment occupies. will be one for each colspan\n\t\t\t\t\tfor (j = 0; j < colSegsBelow.length; j++) {\n\t\t\t\t\t\tmoreTd = $('').attr('rowspan', rowspan);\n\t\t\t\t\t\tsegsBelow = colSegsBelow[j];\n\t\t\t\t\t\tmoreLink = this.renderMoreLink(\n\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\tseg.leftCol + j,\n\t\t\t\t\t\t\t[ seg ].concat(segsBelow) // count seg as hidden too\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmoreWrap = $('
').append(moreLink);\n\t\t\t\t\t\tmoreTd.append(moreWrap);\n\t\t\t\t\t\tsegMoreNodes.push(moreTd[0]);\n\t\t\t\t\t\tmoreNodes.push(moreTd[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\ttd.addClass('fc-limited').after($(segMoreNodes)); // hide original and inject replacements\n\t\t\t\t\tlimitedNodes.push(td[0]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\temptyCellsUntil(this.colCnt); // finish off the level\n\t\t\trowStruct.moreEls = $(moreNodes); // for easy undoing later\n\t\t\trowStruct.limitedEls = $(limitedNodes); // for easy undoing later\n\t\t}\n\t},\n\n\n\t// Reveals all levels and removes all \"more\"-related elements for a grid's row.\n\t// `row` is a row number.\n\tunlimitRow: function(row) {\n\t\tvar rowStruct = this.rowStructs[row];\n\n\t\tif (rowStruct.moreEls) {\n\t\t\trowStruct.moreEls.remove();\n\t\t\trowStruct.moreEls = null;\n\t\t}\n\n\t\tif (rowStruct.limitedEls) {\n\t\t\trowStruct.limitedEls.removeClass('fc-limited');\n\t\t\trowStruct.limitedEls = null;\n\t\t}\n\t},\n\n\n\t// Renders an element that represents hidden event element for a cell.\n\t// Responsible for attaching click handler as well.\n\trenderMoreLink: function(row, col, hiddenSegs) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\n\t\treturn $('')\n\t\t\t.text(\n\t\t\t\tthis.getMoreLinkText(hiddenSegs.length)\n\t\t\t)\n\t\t\t.on('click', function(ev) {\n\t\t\t\tvar clickOption = _this.opt('eventLimitClick');\n\t\t\t\tvar date = _this.getCellDate(row, col);\n\t\t\t\tvar moreEl = $(this);\n\t\t\t\tvar dayEl = _this.getCellEl(row, col);\n\t\t\t\tvar allSegs = _this.getCellSegs(row, col);\n\n\t\t\t\t// rescope the segments to be within the cell's date\n\t\t\t\tvar reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\n\t\t\t\tvar reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\n\n\t\t\t\tif (typeof clickOption === 'function') {\n\t\t\t\t\t// the returned value can be an atomic option\n\t\t\t\t\tclickOption = _this.publiclyTrigger('eventLimitClick', {\n\t\t\t\t\t\tcontext: view,\n\t\t\t\t\t\targs: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdate: date.clone(),\n\t\t\t\t\t\t\t\tdayEl: dayEl,\n\t\t\t\t\t\t\t\tmoreEl: moreEl,\n\t\t\t\t\t\t\t\tsegs: reslicedAllSegs,\n\t\t\t\t\t\t\t\thiddenSegs: reslicedHiddenSegs\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tev,\n\t\t\t\t\t\t\tview\n\t\t\t\t\t\t]\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (clickOption === 'popover') {\n\t\t\t\t\t_this.showSegPopover(row, col, moreEl, reslicedAllSegs);\n\t\t\t\t}\n\t\t\t\telse if (typeof clickOption === 'string') { // a view name\n\t\t\t\t\tview.calendar.zoomTo(date, clickOption);\n\t\t\t\t}\n\t\t\t});\n\t},\n\n\n\t// Reveals the popover that displays all events within a cell\n\tshowSegPopover: function(row, col, moreLink, segs) {\n\t\tvar _this = this;\n\t\tvar view = this.view;\n\t\tvar moreWrap = moreLink.parent(); // the
wrapper around the \n\t\tvar topEl; // the element we want to match the top coordinate of\n\t\tvar options;\n\n\t\tif (this.rowCnt == 1) {\n\t\t\ttopEl = view.el; // will cause the popover to cover any sort of header\n\t\t}\n\t\telse {\n\t\t\ttopEl = this.rowEls.eq(row); // will align with top of row\n\t\t}\n\n\t\toptions = {\n\t\t\tclassName: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),\n\t\t\tcontent: this.renderSegPopoverContent(row, col, segs),\n\t\t\tparentEl: view.el, // attach to root of view. guarantees outside of scrollbars.\n\t\t\ttop: topEl.offset().top,\n\t\t\tautoHide: true, // when the user clicks elsewhere, hide the popover\n\t\t\tviewportConstrain: this.opt('popoverViewportConstrain'),\n\t\t\thide: function() {\n\t\t\t\t// kill everything when the popover is hidden\n\t\t\t\t// notify events to be removed\n\t\t\t\tif (_this.popoverSegs) {\n\t\t\t\t\tvar seg;\n\t\t\t\t\tvar legacy;\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tfor (i = 0; i < _this.popoverSegs.length; ++i) {\n\t\t\t\t\t\tseg = _this.popoverSegs[i];\n\t\t\t\t\t\tlegacy = seg.footprint.getEventLegacy();\n\n\t\t\t\t\t\t_this.publiclyTrigger('eventDestroy', {\n\t\t\t\t\t\t\tcontext: legacy,\n\t\t\t\t\t\t\targs: [ legacy, seg.el, view ]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_this.segPopover.removeElement();\n\t\t\t\t_this.segPopover = null;\n\t\t\t\t_this.popoverSegs = null;\n\t\t\t}\n\t\t};\n\n\t\t// Determine horizontal coordinate.\n\t\t// We use the moreWrap instead of the to avoid border confusion.\n\t\tif (this.isRTL) {\n\t\t\toptions.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\n\t\t}\n\t\telse {\n\t\t\toptions.left = moreWrap.offset().left - 1; // -1 to be over cell border\n\t\t}\n\n\t\tthis.segPopover = new Popover(options);\n\t\tthis.segPopover.show();\n\n\t\t// the popover doesn't live within the grid's container element, and thus won't get the event\n\t\t// delegated-handlers for free. attach event-related handlers to the popover.\n\t\tthis.bindSegHandlersToEl(this.segPopover.el);\n\t},\n\n\n\t// Builds the inner DOM contents of the segment popover\n\trenderSegPopoverContent: function(row, col, segs) {\n\t\tvar view = this.view;\n\t\tvar theme = view.calendar.theme;\n\t\tvar title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));\n\t\tvar content = $(\n\t\t\t'
' +\n\t\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t\t\thtmlEscape(title) +\n\t\t\t\t'' +\n\t\t\t\t'
' +\n\t\t\t'
' +\n\t\t\t'
' +\n\t\t\t\t'
' +\n\t\t\t'
'\n\t\t);\n\t\tvar segContainer = content.find('.fc-event-container');\n\t\tvar i;\n\n\t\t// render each seg's `el` and only return the visible segs\n\t\tsegs = this.renderFgSegEls(segs, true); // disableResizing=true\n\t\tthis.popoverSegs = segs;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\n\t\t\t// because segments in the popover are not part of a grid coordinate system, provide a hint to any\n\t\t\t// grids that want to do drag-n-drop about which cell it came from\n\t\t\tthis.hitsNeeded();\n\t\t\tsegs[i].hit = this.getCellHit(row, col);\n\t\t\tthis.hitsNotNeeded();\n\n\t\t\tsegContainer.append(segs[i].el);\n\t\t}\n\n\t\treturn content;\n\t},\n\n\n\t// Given the events within an array of segment objects, reslice them to be in a single day\n\tresliceDaySegs: function(segs, dayDate) {\n\t\tvar dayStart = dayDate.clone();\n\t\tvar dayEnd = dayStart.clone().add(1, 'days');\n\t\tvar dayRange = new UnzonedRange(dayStart, dayEnd);\n\t\tvar newSegs = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tnewSegs.push.apply(newSegs, // append\n\t\t\t\tthis.eventFootprintToSegs(segs[i].footprint, dayRange)\n\t\t\t);\n\t\t}\n\n\t\t// force an order because eventsToSegs doesn't guarantee one\n\t\t// TODO: research if still needed\n\t\tthis.sortEventSegs(newSegs);\n\n\t\treturn newSegs;\n\t},\n\n\n\t// Generates the text that should be inside a \"more\" link, given the number of events it represents\n\tgetMoreLinkText: function(num) {\n\t\tvar opt = this.opt('eventLimitText');\n\n\t\tif (typeof opt === 'function') {\n\t\t\treturn opt(num);\n\t\t}\n\t\telse {\n\t\t\treturn '+' + num + ' ' + opt;\n\t\t}\n\t},\n\n\n\t// Returns segments within a given cell.\n\t// If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\n\tgetCellSegs: function(row, col, startLevel) {\n\t\tvar segMatrix = this.rowStructs[row].segMatrix;\n\t\tvar level = startLevel || 0;\n\t\tvar segs = [];\n\t\tvar seg;\n\n\t\twhile (level < segMatrix.length) {\n\t\t\tseg = segMatrix[level][col];\n\t\t\tif (seg) {\n\t\t\t\tsegs.push(seg);\n\t\t\t}\n\t\t\tlevel++;\n\t\t}\n\n\t\treturn segs;\n\t}\n\n});\n\n;;\n\n/* A component that renders one or more columns of vertical time slots\n----------------------------------------------------------------------------------------------------------------------*/\n// We mixin DayTable, even though there is only a single row of days\n\nvar TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {\n\n\tdayRanges: null, // UnzonedRange[], of start-end of each day\n\tslotDuration: null, // duration of a \"slot\", a distinct time segment on given day, visualized by lines\n\tsnapDuration: null, // granularity of time for dragging and selecting\n\tsnapsPerSlot: null,\n\tlabelFormat: null, // formatting string for times running along vertical axis\n\tlabelInterval: null, // duration of how often a label should be displayed for a slot\n\n\tcolEls: null, // cells elements in the day-row background\n\tslatContainerEl: null, // div that wraps all the slat rows\n\tslatEls: null, // elements running horizontally across all columns\n\tnowIndicatorEls: null,\n\n\tcolCoordCache: null,\n\tslatCoordCache: null,\n\n\n\tconstructor: function() {\n\t\tGrid.apply(this, arguments); // call the super-constructor\n\n\t\tthis.processOptions();\n\t},\n\n\n\t// Renders the time grid into `this.el`, which should already be assigned.\n\t// Relies on the view's colCnt. In the future, this component should probably be self-sufficient.\n\trenderDates: function() {\n\t\tthis.el.html(this.renderHtml());\n\t\tthis.colEls = this.el.find('.fc-day, .fc-disabled-day');\n\t\tthis.slatContainerEl = this.el.find('.fc-slats');\n\t\tthis.slatEls = this.slatContainerEl.find('tr');\n\n\t\tthis.colCoordCache = new CoordCache({\n\t\t\tels: this.colEls,\n\t\t\tisHorizontal: true\n\t\t});\n\t\tthis.slatCoordCache = new CoordCache({\n\t\t\tels: this.slatEls,\n\t\t\tisVertical: true\n\t\t});\n\n\t\tthis.renderContentSkeleton();\n\t},\n\n\n\t// Renders the basic HTML skeleton for the grid\n\trenderHtml: function() {\n\t\tvar theme = this.view.calendar.theme;\n\n\t\treturn '' +\n\t\t\t'
' +\n\t\t\t\t'' +\n\t\t\t\t\tthis.renderBgTrHtml(0) + // row=0\n\t\t\t\t'
' +\n\t\t\t'
' +\n\t\t\t'
' +\n\t\t\t\t'' +\n\t\t\t\t\tthis.renderSlatRowHtml() +\n\t\t\t\t'
' +\n\t\t\t'
';\n\t},\n\n\n\t// Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\n\trenderSlatRowHtml: function() {\n\t\tvar view = this.view;\n\t\tvar calendar = view.calendar;\n\t\tvar theme = calendar.theme;\n\t\tvar isRTL = this.isRTL;\n\t\tvar html = '';\n\t\tvar slotTime = moment.duration(+this.view.minTime); // wish there was .clone() for durations\n\t\tvar slotIterator = moment.duration(0);\n\t\tvar slotDate; // will be on the view's first day, but we only care about its time\n\t\tvar isLabeled;\n\t\tvar axisHtml;\n\n\t\t// Calculate the time for each slot\n\t\twhile (slotTime < view.maxTime) {\n\t\t\tslotDate = calendar.msToUtcMoment(this.unzonedRange.startMs).time(slotTime);\n\t\t\tisLabeled = isInt(divideDurationByDuration(slotIterator, this.labelInterval));\n\n\t\t\taxisHtml =\n\t\t\t\t'' +\n\t\t\t\t\t(isLabeled ?\n\t\t\t\t\t\t'' + // for matchCellWidths\n\t\t\t\t\t\t\thtmlEscape(slotDate.format(this.labelFormat)) +\n\t\t\t\t\t\t'' :\n\t\t\t\t\t\t''\n\t\t\t\t\t\t) +\n\t\t\t\t'';\n\n\t\t\thtml +=\n\t\t\t\t'' +\n\t\t\t\t\t(!isRTL ? axisHtml : '') +\n\t\t\t\t\t'' +\n\t\t\t\t\t(isRTL ? axisHtml : '') +\n\t\t\t\t\"\";\n\n\t\t\tslotTime.add(this.slotDuration);\n\t\t\tslotIterator.add(this.slotDuration);\n\t\t}\n\n\t\treturn html;\n\t},\n\n\n\t/* Options\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Parses various options into properties of this object\n\tprocessOptions: function() {\n\t\tvar slotDuration = this.opt('slotDuration');\n\t\tvar snapDuration = this.opt('snapDuration');\n\t\tvar input;\n\n\t\tslotDuration = moment.duration(slotDuration);\n\t\tsnapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\n\n\t\tthis.slotDuration = slotDuration;\n\t\tthis.snapDuration = snapDuration;\n\t\tthis.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?\n\n\t\t// might be an array value (for TimelineView).\n\t\t// if so, getting the most granular entry (the last one probably).\n\t\tinput = this.opt('slotLabelFormat');\n\t\tif ($.isArray(input)) {\n\t\t\tinput = input[input.length - 1];\n\t\t}\n\n\t\tthis.labelFormat = input ||\n\t\t\tthis.opt('smallTimeFormat'); // the computed default\n\n\t\tinput = this.opt('slotLabelInterval');\n\t\tthis.labelInterval = input ?\n\t\t\tmoment.duration(input) :\n\t\t\tthis.computeLabelInterval(slotDuration);\n\t},\n\n\n\t// Computes an automatic value for slotLabelInterval\n\tcomputeLabelInterval: function(slotDuration) {\n\t\tvar i;\n\t\tvar labelInterval;\n\t\tvar slotsPerLabel;\n\n\t\t// find the smallest stock label interval that results in more than one slots-per-label\n\t\tfor (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\n\t\t\tlabelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);\n\t\t\tslotsPerLabel = divideDurationByDuration(labelInterval, slotDuration);\n\t\t\tif (isInt(slotsPerLabel) && slotsPerLabel > 1) {\n\t\t\t\treturn labelInterval;\n\t\t\t}\n\t\t}\n\n\t\treturn moment.duration(slotDuration); // fall back. clone\n\t},\n\n\n\t// Computes a default event time formatting string if `timeFormat` is not explicitly defined\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.opt('noMeridiemTimeFormat'); // like \"6:30\" (no AM/PM)\n\t},\n\n\n\t// Computes a default `displayEventEnd` value if one is not expliclty defined\n\tcomputeDisplayEventEnd: function() {\n\t\treturn true;\n\t},\n\n\n\t/* Hit System\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tprepareHits: function() {\n\t\tthis.colCoordCache.build();\n\t\tthis.slatCoordCache.build();\n\t},\n\n\n\treleaseHits: function() {\n\t\tthis.colCoordCache.clear();\n\t\t// NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop\n\t},\n\n\n\tqueryHit: function(leftOffset, topOffset) {\n\t\tvar snapsPerSlot = this.snapsPerSlot;\n\t\tvar colCoordCache = this.colCoordCache;\n\t\tvar slatCoordCache = this.slatCoordCache;\n\n\t\tif (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {\n\t\t\tvar colIndex = colCoordCache.getHorizontalIndex(leftOffset);\n\t\t\tvar slatIndex = slatCoordCache.getVerticalIndex(topOffset);\n\n\t\t\tif (colIndex != null && slatIndex != null) {\n\t\t\t\tvar slatTop = slatCoordCache.getTopOffset(slatIndex);\n\t\t\t\tvar slatHeight = slatCoordCache.getHeight(slatIndex);\n\t\t\t\tvar partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1\n\t\t\t\tvar localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\n\t\t\t\tvar snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\n\t\t\t\tvar snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;\n\t\t\t\tvar snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;\n\n\t\t\t\treturn {\n\t\t\t\t\tcol: colIndex,\n\t\t\t\t\tsnap: snapIndex,\n\t\t\t\t\tcomponent: this, // needed unfortunately :(\n\t\t\t\t\tleft: colCoordCache.getLeftOffset(colIndex),\n\t\t\t\t\tright: colCoordCache.getRightOffset(colIndex),\n\t\t\t\t\ttop: snapTop,\n\t\t\t\t\tbottom: snapBottom\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t},\n\n\n\tgetHitFootprint: function(hit) {\n\t\tvar start = this.getCellDate(0, hit.col); // row=0\n\t\tvar time = this.computeSnapTime(hit.snap); // pass in the snap-index\n\t\tvar end;\n\n\t\tstart.time(time);\n\t\tend = start.clone().add(this.snapDuration);\n\n\t\treturn new ComponentFootprint(\n\t\t\tnew UnzonedRange(start, end),\n\t\t\tfalse // all-day?\n\t\t);\n\t},\n\n\n\tgetHitEl: function(hit) {\n\t\treturn this.colEls.eq(hit.col);\n\t},\n\n\n\t/* Dates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trangeUpdated: function() {\n\t\tvar view = this.view;\n\n\t\tthis.updateDayTable();\n\n\t\tthis.dayRanges = this.dayDates.map(function(dayDate) {\n\t\t\treturn new UnzonedRange(\n\t\t\t\tdayDate.clone().add(view.minTime),\n\t\t\t\tdayDate.clone().add(view.maxTime)\n\t\t\t);\n\t\t});\n\t},\n\n\n\t// Given a row number of the grid, representing a \"snap\", returns a time (Duration) from its start-of-day\n\tcomputeSnapTime: function(snapIndex) {\n\t\treturn moment.duration(this.view.minTime + this.snapDuration * snapIndex);\n\t},\n\n\n\t// Slices up the given span (unzoned start/end with other misc data) into an array of segments\n\tcomponentFootprintToSegs: function(componentFootprint) {\n\t\tvar segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);\n\t\tvar i;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tif (this.isRTL) {\n\t\t\t\tsegs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsegs[i].col = segs[i].dayIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\tsliceRangeByTimes: function(unzonedRange) {\n\t\tvar segs = [];\n\t\tvar segRange;\n\t\tvar dayIndex;\n\n\t\tfor (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {\n\n\t\t\tsegRange = unzonedRange.intersect(this.dayRanges[dayIndex]);\n\n\t\t\tif (segRange) {\n\t\t\t\tsegs.push({\n\t\t\t\t\tstartMs: segRange.startMs,\n\t\t\t\t\tendMs: segRange.endMs,\n\t\t\t\t\tisStart: segRange.isStart,\n\t\t\t\t\tisEnd: segRange.isEnd,\n\t\t\t\t\tdayIndex: dayIndex\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\n\t/* Coordinates\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tupdateSize: function(isResize) { // NOT a standard Grid method\n\t\tthis.slatCoordCache.build();\n\n\t\tif (isResize) {\n\t\t\tthis.updateSegVerticals(\n\t\t\t\t[].concat(this.fgSegs || [], this.bgSegs || [], this.businessSegs || [])\n\t\t\t);\n\t\t}\n\t},\n\n\n\tgetTotalSlatHeight: function() {\n\t\treturn this.slatContainerEl.outerHeight();\n\t},\n\n\n\t// Computes the top coordinate, relative to the bounds of the grid, of the given date.\n\t// `ms` can be a millisecond UTC time OR a UTC moment.\n\t// A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\n\tcomputeDateTop: function(ms, startOfDayDate) {\n\t\treturn this.computeTimeTop(\n\t\t\tmoment.duration(\n\t\t\t\tms - startOfDayDate.clone().stripTime()\n\t\t\t)\n\t\t);\n\t},\n\n\n\t// Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\n\tcomputeTimeTop: function(time) {\n\t\tvar len = this.slatEls.length;\n\t\tvar slatCoverage = (time - this.view.minTime) / this.slotDuration; // floating-point value of # of slots covered\n\t\tvar slatIndex;\n\t\tvar slatRemainder;\n\n\t\t// compute a floating-point number for how many slats should be progressed through.\n\t\t// from 0 to number of slats (inclusive)\n\t\t// constrained because minTime/maxTime might be customized.\n\t\tslatCoverage = Math.max(0, slatCoverage);\n\t\tslatCoverage = Math.min(len, slatCoverage);\n\n\t\t// an integer index of the furthest whole slat\n\t\t// from 0 to number slats (*exclusive*, so len-1)\n\t\tslatIndex = Math.floor(slatCoverage);\n\t\tslatIndex = Math.min(slatIndex, len - 1);\n\n\t\t// how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\n\t\t// could be 1.0 if slatCoverage is covering *all* the slots\n\t\tslatRemainder = slatCoverage - slatIndex;\n\n\t\treturn this.slatCoordCache.getTopPosition(slatIndex) +\n\t\t\tthis.slatCoordCache.getHeight(slatIndex) * slatRemainder;\n\t},\n\n\n\n\t/* Event Drag Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event being dragged over the specified date(s).\n\t// A returned value of `true` signals that a mock \"helper\" event has been rendered.\n\trenderDrag: function(eventFootprints, seg) {\n\t\tvar i;\n\n\t\tif (seg) { // if there is event information for this drag, render a helper event\n\n\t\t\t// returns mock event elements\n\t\t\t// signal that a helper has been rendered\n\t\t\treturn this.renderHelperEventFootprints(eventFootprints);\n\t\t}\n\t\telse { // otherwise, just render a highlight\n\n\t\t\tfor (i = 0; i < eventFootprints.length; i++) {\n\t\t\t\tthis.renderHighlight(eventFootprints[i].componentFootprint);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Unrenders any visual indication of an event being dragged\n\tunrenderDrag: function() {\n\t\tthis.unrenderHelper();\n\t\tthis.unrenderHighlight();\n\t},\n\n\n\t/* Event Resize Visualization\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of an event being resized\n\trenderEventResize: function(eventFootprints, seg) {\n\t\treturn this.renderHelperEventFootprints(eventFootprints, seg); // returns mock event elements\n\t},\n\n\n\t// Unrenders any visual indication of an event being resized\n\tunrenderEventResize: function() {\n\t\tthis.unrenderHelper();\n\t},\n\n\n\t/* Event Helper\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a mock \"helper\" event. `sourceSeg` is the original segment object and might be null (an external drag)\n\trenderHelperEventFootprintEls: function(eventFootprints, sourceSeg) {\n\t\tvar segs = this.eventFootprintsToSegs(eventFootprints);\n\n\t\treturn this.renderHelperSegs( // returns mock event elements\n\t\t\tsegs,\n\t\t\tsourceSeg\n\t\t);\n\t},\n\n\n\t// Unrenders any mock helper event\n\tunrenderHelper: function() {\n\t\tthis.unrenderHelperSegs();\n\t},\n\n\n\t/* Business Hours\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBusinessHours: function() {\n\t\tthis.renderBusinessSegs(\n\t\t\tthis.buildBusinessHourSegs()\n\t\t);\n\t},\n\n\n\tunrenderBusinessHours: function() {\n\t\tthis.unrenderBusinessSegs();\n\t},\n\n\n\t/* Now Indicator\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tgetNowIndicatorUnit: function() {\n\t\treturn 'minute'; // will refresh on the minute\n\t},\n\n\n\trenderNowIndicator: function(date) {\n\t\t// seg system might be overkill, but it handles scenario where line needs to be rendered\n\t\t// more than once because of columns with the same date (resources columns for example)\n\t\tvar segs = this.componentFootprintToSegs(\n\t\t\tnew ComponentFootprint(\n\t\t\t\tnew UnzonedRange(date, date.valueOf() + 1), // protect against null range\n\t\t\t\tfalse // all-day\n\t\t\t)\n\t\t);\n\t\tvar top = this.computeDateTop(date, date);\n\t\tvar nodes = [];\n\t\tvar i;\n\n\t\t// render lines within the columns\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tnodes.push($('
')\n\t\t\t\t.css('top', top)\n\t\t\t\t.appendTo(this.colContainerEls.eq(segs[i].col))[0]);\n\t\t}\n\n\t\t// render an arrow over the axis\n\t\tif (segs.length > 0) { // is the current time in view?\n\t\t\tnodes.push($('
')\n\t\t\t\t.css('top', top)\n\t\t\t\t.appendTo(this.el.find('.fc-content-skeleton'))[0]);\n\t\t}\n\n\t\tthis.nowIndicatorEls = $(nodes);\n\t},\n\n\n\tunrenderNowIndicator: function() {\n\t\tif (this.nowIndicatorEls) {\n\t\t\tthis.nowIndicatorEls.remove();\n\t\t\tthis.nowIndicatorEls = null;\n\t\t}\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\n\trenderSelectionFootprint: function(componentFootprint) {\n\t\tif (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered\n\t\t\tthis.renderHelperEventFootprints([\n\t\t\t\tthis.fabricateEventFootprint(componentFootprint)\n\t\t\t]);\n\t\t}\n\t\telse {\n\t\t\tthis.renderHighlight(componentFootprint);\n\t\t}\n\t},\n\n\n\t// Unrenders any visual indication of a selection\n\tunrenderSelection: function() {\n\t\tthis.unrenderHelper();\n\t\tthis.unrenderHighlight();\n\t},\n\n\n\t/* Highlight\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderHighlight: function(componentFootprint) {\n\t\tthis.renderHighlightSegs(\n\t\t\tthis.componentFootprintToSegs(componentFootprint)\n\t\t);\n\t},\n\n\n\tunrenderHighlight: function() {\n\t\tthis.unrenderHighlightSegs();\n\t}\n\n});\n\n;;\n\n/* Methods for rendering SEGMENTS, pieces of content that live on the view\n ( this file is no longer just for events )\n----------------------------------------------------------------------------------------------------------------------*/\n\nTimeGrid.mixin({\n\n\tcolContainerEls: null, // containers for each column\n\n\t// inner-containers for each column where different types of segs live\n\tfgContainerEls: null,\n\tbgContainerEls: null,\n\thelperContainerEls: null,\n\thighlightContainerEls: null,\n\tbusinessContainerEls: null,\n\n\t// arrays of different types of displayed segments\n\tfgSegs: null,\n\tbgSegs: null,\n\thelperSegs: null,\n\thighlightSegs: null,\n\tbusinessSegs: null,\n\n\n\t// Renders the DOM that the view's content will live in\n\trenderContentSkeleton: function() {\n\t\tvar cellHtml = '';\n\t\tvar i;\n\t\tvar skeletonEl;\n\n\t\tfor (i = 0; i < this.colCnt; i++) {\n\t\t\tcellHtml +=\n\t\t\t\t'' +\n\t\t\t\t\t'
' +\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t'
' +\n\t\t\t\t'';\n\t\t}\n\n\t\tskeletonEl = $(\n\t\t\t'
' +\n\t\t\t\t'' +\n\t\t\t\t\t'' + cellHtml + '' +\n\t\t\t\t'
' +\n\t\t\t'
'\n\t\t);\n\n\t\tthis.colContainerEls = skeletonEl.find('.fc-content-col');\n\t\tthis.helperContainerEls = skeletonEl.find('.fc-helper-container');\n\t\tthis.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');\n\t\tthis.bgContainerEls = skeletonEl.find('.fc-bgevent-container');\n\t\tthis.highlightContainerEls = skeletonEl.find('.fc-highlight-container');\n\t\tthis.businessContainerEls = skeletonEl.find('.fc-business-container');\n\n\t\tthis.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level\n\t\tthis.el.append(skeletonEl);\n\t},\n\n\n\t/* Foreground Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderFgSegs: function(segs) {\n\t\tsegs = this.renderFgSegsIntoContainers(segs, this.fgContainerEls);\n\t\tthis.fgSegs = segs;\n\t\treturn segs; // needed for Grid::renderEvents\n\t},\n\n\n\tunrenderFgSegs: function() {\n\t\tthis.unrenderNamedSegs('fgSegs');\n\t},\n\n\n\t/* Foreground Helper Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderHelperSegs: function(segs, sourceSeg) {\n\t\tvar helperEls = [];\n\t\tvar i, seg;\n\t\tvar sourceEl;\n\n\t\tsegs = this.renderFgSegsIntoContainers(segs, this.helperContainerEls);\n\n\t\t// Try to make the segment that is in the same row as sourceSeg look the same\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tif (sourceSeg && sourceSeg.col === seg.col) {\n\t\t\t\tsourceEl = sourceSeg.el;\n\t\t\t\tseg.el.css({\n\t\t\t\t\tleft: sourceEl.css('left'),\n\t\t\t\t\tright: sourceEl.css('right'),\n\t\t\t\t\t'margin-left': sourceEl.css('margin-left'),\n\t\t\t\t\t'margin-right': sourceEl.css('margin-right')\n\t\t\t\t});\n\t\t\t}\n\t\t\thelperEls.push(seg.el[0]);\n\t\t}\n\n\t\tthis.helperSegs = segs;\n\n\t\treturn $(helperEls); // must return rendered helpers\n\t},\n\n\n\tunrenderHelperSegs: function() {\n\t\tthis.unrenderNamedSegs('helperSegs');\n\t},\n\n\n\t/* Background Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBgSegs: function(segs) {\n\t\tsegs = this.renderFillSegEls('bgEvent', segs); // TODO: old fill system\n\t\tthis.updateSegVerticals(segs);\n\t\tthis.attachSegsByCol(this.groupSegsByCol(segs), this.bgContainerEls);\n\t\tthis.bgSegs = segs;\n\t\treturn segs; // needed for Grid::renderEvents\n\t},\n\n\n\tunrenderBgSegs: function() {\n\t\tthis.unrenderNamedSegs('bgSegs');\n\t},\n\n\n\t/* Highlight\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderHighlightSegs: function(segs) {\n\t\tsegs = this.renderFillSegEls('highlight', segs); // TODO: instead of calling renderFill directly\n\t\tthis.updateSegVerticals(segs);\n\t\tthis.attachSegsByCol(this.groupSegsByCol(segs), this.highlightContainerEls);\n\t\tthis.highlightSegs = segs;\n\t},\n\n\n\tunrenderHighlightSegs: function() {\n\t\tthis.unrenderNamedSegs('highlightSegs');\n\t},\n\n\n\t/* Business Hours\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\trenderBusinessSegs: function(segs) {\n\t\tsegs = this.renderFillSegEls('businessHours', segs); // TODO: instead of calling renderFill directly\n\t\tthis.updateSegVerticals(segs);\n\t\tthis.attachSegsByCol(this.groupSegsByCol(segs), this.businessContainerEls);\n\t\tthis.businessSegs = segs;\n\t},\n\n\n\tunrenderBusinessSegs: function() {\n\t\tthis.unrenderNamedSegs('businessSegs');\n\t},\n\n\n\t/* Seg Rendering Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\n\tgroupSegsByCol: function(segs) {\n\t\tvar segsByCol = [];\n\t\tvar i;\n\n\t\tfor (i = 0; i < this.colCnt; i++) {\n\t\t\tsegsByCol.push([]);\n\t\t}\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tsegsByCol[segs[i].col].push(segs[i]);\n\t\t}\n\n\t\treturn segsByCol;\n\t},\n\n\n\t// Given segments grouped by column, insert the segments' elements into a parallel array of container\n\t// elements, each living within a column.\n\tattachSegsByCol: function(segsByCol, containerEls) {\n\t\tvar col;\n\t\tvar segs;\n\t\tvar i;\n\n\t\tfor (col = 0; col < this.colCnt; col++) { // iterate each column grouping\n\t\t\tsegs = segsByCol[col];\n\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\tcontainerEls.eq(col).append(segs[i].el);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Given the name of a property of `this` object, assumed to be an array of segments,\n\t// loops through each segment and removes from DOM. Will null-out the property afterwards.\n\tunrenderNamedSegs: function(propName) {\n\t\tvar segs = this[propName];\n\t\tvar i;\n\n\t\tif (segs) {\n\t\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\t\tsegs[i].el.remove();\n\t\t\t}\n\t\t\tthis[propName] = null;\n\t\t}\n\t},\n\n\n\n\t/* Foreground Event Rendering Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Given an array of foreground segments, render a DOM element for each, computes position,\n\t// and attaches to the column inner-container elements.\n\trenderFgSegsIntoContainers: function(segs, containerEls) {\n\t\tvar segsByCol;\n\t\tvar col;\n\n\t\tsegs = this.renderFgSegEls(segs); // will call fgSegHtml\n\t\tsegsByCol = this.groupSegsByCol(segs);\n\n\t\tfor (col = 0; col < this.colCnt; col++) {\n\t\t\tthis.updateFgSegCoords(segsByCol[col]);\n\t\t}\n\n\t\tthis.attachSegsByCol(segsByCol, containerEls);\n\n\t\treturn segs;\n\t},\n\n\n\t// Renders the HTML for a single event segment's default rendering\n\tfgSegHtml: function(seg, disableResizing) {\n\t\tvar view = this.view;\n\t\tvar calendar = view.calendar;\n\t\tvar componentFootprint = seg.footprint.componentFootprint;\n\t\tvar isAllDay = componentFootprint.isAllDay;\n\t\tvar eventDef = seg.footprint.eventDef;\n\t\tvar isDraggable = view.isEventDefDraggable(eventDef);\n\t\tvar isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);\n\t\tvar isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\n\t\tvar classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\n\t\tvar skinCss = cssToStr(this.getSegSkinCss(seg));\n\t\tvar timeText;\n\t\tvar fullTimeText; // more verbose time text. for the print stylesheet\n\t\tvar startTimeText; // just the start time text\n\n\t\tclasses.unshift('fc-time-grid-event', 'fc-v-event');\n\n\t\t// if the event appears to span more than one day...\n\t\tif (view.isMultiDayRange(componentFootprint.unzonedRange)) {\n\t\t\t// Don't display time text on segments that run entirely through a day.\n\t\t\t// That would appear as midnight-midnight and would look dumb.\n\t\t\t// Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\n\t\t\tif (seg.isStart || seg.isEnd) {\n\t\t\t\tvar zonedStart = calendar.msToMoment(seg.startMs);\n\t\t\t\tvar zonedEnd = calendar.msToMoment(seg.endMs);\n\t\t\t\ttimeText = this._getEventTimeText(zonedStart, zonedEnd, isAllDay);\n\t\t\t\tfullTimeText = this._getEventTimeText(zonedStart, zonedEnd, isAllDay, 'LT');\n\t\t\t\tstartTimeText = this._getEventTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Display the normal time text for the *event's* times\n\t\t\ttimeText = this.getEventTimeText(seg.footprint);\n\t\t\tfullTimeText = this.getEventTimeText(seg.footprint, 'LT');\n\t\t\tstartTimeText = this.getEventTimeText(seg.footprint, null, false); // displayEnd=false\n\t\t}\n\n\t\treturn '
' +\n\t\t\t\t'
' +\n\t\t\t\t\t(timeText ?\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t\t'' + htmlEscape(timeText) + '' +\n\t\t\t\t\t\t'
' :\n\t\t\t\t\t\t''\n\t\t\t\t\t\t) +\n\t\t\t\t\t(eventDef.title ?\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t\thtmlEscape(eventDef.title) +\n\t\t\t\t\t\t'
' :\n\t\t\t\t\t\t''\n\t\t\t\t\t\t) +\n\t\t\t\t'
' +\n\t\t\t\t'
' +\n\t\t\t\t/* TODO: write CSS for this\n\t\t\t\t(isResizableFromStart ?\n\t\t\t\t\t'
' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t\t*/\n\t\t\t\t(isResizableFromEnd ?\n\t\t\t\t\t'
' :\n\t\t\t\t\t''\n\t\t\t\t\t) +\n\t\t\t'';\n\t},\n\n\n\t/* Seg Position Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Refreshes the CSS top/bottom coordinates for each segment element.\n\t// Works when called after initial render, after a window resize/zoom for example.\n\tupdateSegVerticals: function(segs) {\n\t\tthis.computeSegVerticals(segs);\n\t\tthis.assignSegVerticals(segs);\n\t},\n\n\n\t// For each segment in an array, computes and assigns its top and bottom properties\n\tcomputeSegVerticals: function(segs) {\n\t\tvar i, seg;\n\t\tvar dayDate;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tdayDate = this.dayDates[seg.dayIndex];\n\n\t\t\tseg.top = this.computeDateTop(seg.startMs, dayDate);\n\t\t\tseg.bottom = this.computeDateTop(seg.endMs, dayDate);\n\t\t}\n\t},\n\n\n\t// Given segments that already have their top/bottom properties computed, applies those values to\n\t// the segments' elements.\n\tassignSegVerticals: function(segs) {\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\tseg.el.css(this.generateSegVerticalCss(seg));\n\t\t}\n\t},\n\n\n\t// Generates an object with CSS properties for the top/bottom coordinates of a segment element\n\tgenerateSegVerticalCss: function(seg) {\n\t\treturn {\n\t\t\ttop: seg.top,\n\t\t\tbottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\n\t\t};\n\t},\n\n\n\t/* Foreground Event Positioning Utils\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Given segments that are assumed to all live in the *same column*,\n\t// compute their verical/horizontal coordinates and assign to their elements.\n\tupdateFgSegCoords: function(segs) {\n\t\tthis.computeSegVerticals(segs); // horizontals relies on this\n\t\tthis.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array\n\t\tthis.assignSegVerticals(segs);\n\t\tthis.assignFgSegHorizontals(segs);\n\t},\n\n\n\t// Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\n\t// NOTE: Also reorders the given array by date!\n\tcomputeFgSegHorizontals: function(segs) {\n\t\tvar levels;\n\t\tvar level0;\n\t\tvar i;\n\n\t\tthis.sortEventSegs(segs); // order by certain criteria\n\t\tlevels = buildSlotSegLevels(segs);\n\t\tcomputeForwardSlotSegs(levels);\n\n\t\tif ((level0 = levels[0])) {\n\n\t\t\tfor (i = 0; i < level0.length; i++) {\n\t\t\t\tcomputeSlotSegPressures(level0[i]);\n\t\t\t}\n\n\t\t\tfor (i = 0; i < level0.length; i++) {\n\t\t\t\tthis.computeFgSegForwardBack(level0[i], 0, 0);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\n\t// from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\n\t// seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\n\t//\n\t// The segment might be part of a \"series\", which means consecutive segments with the same pressure\n\t// who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\n\t// segments behind this one in the current series, and `seriesBackwardCoord` is the starting\n\t// coordinate of the first segment in the series.\n\tcomputeFgSegForwardBack: function(seg, seriesBackwardPressure, seriesBackwardCoord) {\n\t\tvar forwardSegs = seg.forwardSegs;\n\t\tvar i;\n\n\t\tif (seg.forwardCoord === undefined) { // not already computed\n\n\t\t\tif (!forwardSegs.length) {\n\n\t\t\t\t// if there are no forward segments, this segment should butt up against the edge\n\t\t\t\tseg.forwardCoord = 1;\n\t\t\t}\n\t\t\telse {\n\n\t\t\t\t// sort highest pressure first\n\t\t\t\tthis.sortForwardSegs(forwardSegs);\n\n\t\t\t\t// this segment's forwardCoord will be calculated from the backwardCoord of the\n\t\t\t\t// highest-pressure forward segment.\n\t\t\t\tthis.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\n\t\t\t\tseg.forwardCoord = forwardSegs[0].backwardCoord;\n\t\t\t}\n\n\t\t\t// calculate the backwardCoord from the forwardCoord. consider the series\n\t\t\tseg.backwardCoord = seg.forwardCoord -\n\t\t\t\t(seg.forwardCoord - seriesBackwardCoord) / // available width for series\n\t\t\t\t(seriesBackwardPressure + 1); // # of segments in the series\n\n\t\t\t// use this segment's coordinates to computed the coordinates of the less-pressurized\n\t\t\t// forward segments\n\t\t\tfor (i=0; i seg2.top && seg1.top < seg2.bottom;\n}\n\n;;\n\n/* An abstract class from which other views inherit from\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar View = FC.View = ChronoComponent.extend({\n\n\ttype: null, // subclass' view name (string)\n\tname: null, // deprecated. use `type` instead\n\ttitle: null, // the text that will be displayed in the header's title\n\n\tcalendar: null, // owner Calendar object\n\tviewSpec: null,\n\toptions: null, // hash containing all options. already merged with view-specific-options\n\n\trenderQueue: null,\n\tbatchRenderDepth: 0,\n\tisDatesRendered: false,\n\tisEventsRendered: false,\n\tisBaseRendered: false, // related to viewRender/viewDestroy triggers\n\n\tqueuedScroll: null,\n\n\tisSelected: false, // boolean whether a range of time is user-selected or not\n\tselectedEventInstance: null,\n\n\teventOrderSpecs: null, // criteria for ordering events when they have same date/time\n\n\t// for date utils, computed from options\n\tisHiddenDayHash: null,\n\n\t// now indicator\n\tisNowIndicatorRendered: null,\n\tinitialNowDate: null, // result first getNow call\n\tinitialNowQueriedMs: null, // ms time the getNow was called\n\tnowIndicatorTimeoutID: null, // for refresh timing of now indicator\n\tnowIndicatorIntervalID: null, // \"\n\n\n\tconstructor: function(calendar, viewSpec) {\n\t\tthis.calendar = calendar;\n\t\tthis.viewSpec = viewSpec;\n\n\t\t// shortcuts\n\t\tthis.type = viewSpec.type;\n\t\tthis.options = viewSpec.options;\n\n\t\t// .name is deprecated\n\t\tthis.name = this.type;\n\n\t\tChronoComponent.call(this);\n\n\t\tthis.initHiddenDays();\n\t\tthis.eventOrderSpecs = parseFieldSpecs(this.opt('eventOrder'));\n\n\t\tthis.renderQueue = this.buildRenderQueue();\n\t\tthis.initAutoBatchRender();\n\n\t\tthis.initialize();\n\t},\n\n\n\tbuildRenderQueue: function() {\n\t\tvar _this = this;\n\t\tvar renderQueue = new RenderQueue({\n\t\t\tevent: this.opt('eventRenderWait')\n\t\t});\n\n\t\trenderQueue.on('start', function() {\n\t\t\t_this.freezeHeight();\n\t\t\t_this.addScroll(_this.queryScroll());\n\t\t});\n\n\t\trenderQueue.on('stop', function() {\n\t\t\t_this.thawHeight();\n\t\t\t_this.popScroll();\n\t\t});\n\n\t\treturn renderQueue;\n\t},\n\n\n\tinitAutoBatchRender: function() {\n\t\tvar _this = this;\n\n\t\tthis.on('before:change', function() {\n\t\t\t_this.startBatchRender();\n\t\t});\n\n\t\tthis.on('change', function() {\n\t\t\t_this.stopBatchRender();\n\t\t});\n\t},\n\n\n\tstartBatchRender: function() {\n\t\tif (!(this.batchRenderDepth++)) {\n\t\t\tthis.renderQueue.pause();\n\t\t}\n\t},\n\n\n\tstopBatchRender: function() {\n\t\tif (!(--this.batchRenderDepth)) {\n\t\t\tthis.renderQueue.resume();\n\t\t}\n\t},\n\n\n\t// A good place for subclasses to initialize member variables\n\tinitialize: function() {\n\t\t// subclasses can implement\n\t},\n\n\n\t// Retrieves an option with the given name\n\topt: function(name) {\n\t\treturn this.options[name];\n\t},\n\n\n\t/* Title and Date Formatting\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes what the title at the top of the calendar should be for this view\n\tcomputeTitle: function() {\n\t\tvar unzonedRange;\n\n\t\t// for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n\t\tif (/^(year|month)$/.test(this.currentRangeUnit)) {\n\t\t\tunzonedRange = this.currentUnzonedRange;\n\t\t}\n\t\telse { // for day units or smaller, use the actual day range\n\t\t\tunzonedRange = this.activeUnzonedRange;\n\t\t}\n\n\t\treturn this.formatRange(\n\t\t\t{\n\t\t\t\tstart: this.calendar.msToMoment(unzonedRange.startMs, this.isRangeAllDay),\n\t\t\t\tend: this.calendar.msToMoment(unzonedRange.endMs, this.isRangeAllDay)\n\t\t\t},\n\t\t\tthis.isRangeAllDay,\n\t\t\tthis.opt('titleFormat') || this.computeTitleFormat(),\n\t\t\tthis.opt('titleRangeSeparator')\n\t\t);\n\t},\n\n\n\t// Generates the format string that should be used to generate the title for the current date range.\n\t// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\n\tcomputeTitleFormat: function() {\n\t\tif (this.currentRangeUnit == 'year') {\n\t\t\treturn 'YYYY';\n\t\t}\n\t\telse if (this.currentRangeUnit == 'month') {\n\t\t\treturn this.opt('monthYearFormat'); // like \"September 2014\"\n\t\t}\n\t\telse if (this.currentRangeAs('days') > 1) {\n\t\t\treturn 'll'; // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n\t\t}\n\t\telse {\n\t\t\treturn 'LL'; // one day. longer, like \"September 9 2014\"\n\t\t}\n\t},\n\n\n\t// Element\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tsetElement: function(el) {\n\t\tChronoComponent.prototype.setElement.apply(this, arguments);\n\n\t\tthis.bindBaseRenderHandlers();\n\t},\n\n\n\tremoveElement: function() {\n\t\tthis.unsetDate();\n\t\tthis.unbindBaseRenderHandlers();\n\n\t\tChronoComponent.prototype.removeElement.apply(this, arguments);\n\t},\n\n\n\t// Date Setting/Unsetting\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tsetDate: function(date) {\n\t\tvar currentDateProfile = this.get('dateProfile');\n\t\tvar newDateProfile = this.buildDateProfile(date, null, true); // forceToValid=true\n\n\t\tif (\n\t\t\t!currentDateProfile ||\n\t\t\t!currentDateProfile.activeUnzonedRange.equals(newDateProfile.activeUnzonedRange)\n\t\t) {\n\t\t\tthis.set('dateProfile', newDateProfile);\n\t\t}\n\n\t\treturn newDateProfile.date;\n\t},\n\n\n\tunsetDate: function() {\n\t\tthis.unset('dateProfile');\n\t},\n\n\n\t// Date Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\trequestDateRender: function(dateProfile) {\n\t\tvar _this = this;\n\n\t\tthis.renderQueue.queue(function() {\n\t\t\t_this.executeDateRender(dateProfile);\n\t\t}, 'date', 'init');\n\t},\n\n\n\trequestDateUnrender: function() {\n\t\tvar _this = this;\n\n\t\tthis.renderQueue.queue(function() {\n\t\t\t_this.executeDateUnrender();\n\t\t}, 'date', 'destroy');\n\t},\n\n\n\t// Event Data\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tfetchInitialEvents: function(dateProfile) {\n\t\tvar calendar = this.calendar;\n\t\tvar forceAllDay = dateProfile.isRangeAllDay && !this.usesMinMaxTime;\n\n\t\treturn calendar.requestEvents(\n\t\t\tcalendar.msToMoment(dateProfile.activeUnzonedRange.startMs, forceAllDay),\n\t\t\tcalendar.msToMoment(dateProfile.activeUnzonedRange.endMs, forceAllDay)\n\t\t);\n\t},\n\n\n\tbindEventChanges: function() {\n\t\tthis.listenTo(this.calendar, 'eventsReset', this.resetEvents);\n\t},\n\n\n\tunbindEventChanges: function() {\n\t\tthis.stopListeningTo(this.calendar, 'eventsReset');\n\t},\n\n\n\tsetEvents: function(eventsPayload) {\n\t\tthis.set('currentEvents', eventsPayload);\n\t\tthis.set('hasEvents', true);\n\t},\n\n\n\tunsetEvents: function() {\n\t\tthis.unset('currentEvents');\n\t\tthis.unset('hasEvents');\n\t},\n\n\n\tresetEvents: function(eventsPayload) {\n\t\tthis.startBatchRender();\n\t\tthis.unsetEvents();\n\t\tthis.setEvents(eventsPayload);\n\t\tthis.stopBatchRender();\n\t},\n\n\n\t// Event Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\trequestEventsRender: function(eventsPayload) {\n\t\tvar _this = this;\n\n\t\tthis.renderQueue.queue(function() {\n\t\t\t_this.executeEventsRender(eventsPayload);\n\t\t}, 'event', 'init');\n\t},\n\n\n\trequestEventsUnrender: function() {\n\t\tvar _this = this;\n\n\t\tthis.renderQueue.queue(function() {\n\t\t\t_this.executeEventsUnrender();\n\t\t}, 'event', 'destroy');\n\t},\n\n\n\t// Date High-level Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// if dateProfile not specified, uses current\n\texecuteDateRender: function(dateProfile, skipScroll) {\n\n\t\tthis.setDateProfileForRendering(dateProfile);\n\n\t\tif (this.render) {\n\t\t\tthis.render(); // TODO: deprecate\n\t\t}\n\n\t\tthis.renderDates();\n\t\tthis.updateSize();\n\t\tthis.renderBusinessHours(); // might need coordinates, so should go after updateSize()\n\t\tthis.startNowIndicator();\n\n\t\tif (!skipScroll) {\n\t\t\tthis.addScroll(this.computeInitialDateScroll());\n\t\t}\n\n\t\tthis.isDatesRendered = true;\n\t\tthis.trigger('datesRendered');\n\t},\n\n\n\texecuteDateUnrender: function() {\n\n\t\tthis.unselect();\n\t\tthis.stopNowIndicator();\n\n\t\tthis.trigger('before:datesUnrendered');\n\n\t\tthis.unrenderBusinessHours();\n\t\tthis.unrenderDates();\n\n\t\tif (this.destroy) {\n\t\t\tthis.destroy(); // TODO: deprecate\n\t\t}\n\n\t\tthis.isDatesRendered = false;\n\t},\n\n\n\t// Determing when the \"meat\" of the view is rendered (aka the base)\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tbindBaseRenderHandlers: function() {\n\t\tvar _this = this;\n\n\t\tthis.on('datesRendered.baseHandler', function() {\n\t\t\t_this.onBaseRender();\n\t\t});\n\n\t\tthis.on('before:datesUnrendered.baseHandler', function() {\n\t\t\t_this.onBeforeBaseUnrender();\n\t\t});\n\t},\n\n\n\tunbindBaseRenderHandlers: function() {\n\t\tthis.off('.baseHandler');\n\t},\n\n\n\tonBaseRender: function() {\n\t\tthis.applyScreenState();\n\t\tthis.publiclyTrigger('viewRender', {\n\t\t\tcontext: this,\n\t\t\targs: [ this, this.el ]\n\t\t});\n\t},\n\n\n\tonBeforeBaseUnrender: function() {\n\t\tthis.applyScreenState();\n\t\tthis.publiclyTrigger('viewDestroy', {\n\t\t\tcontext: this,\n\t\t\targs: [ this, this.el ]\n\t\t});\n\t},\n\n\n\t// Misc view rendering utils\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Binds DOM handlers to elements that reside outside the view container, such as the document\n\tbindGlobalHandlers: function() {\n\t\tthis.listenTo(GlobalEmitter.get(), {\n\t\t\ttouchstart: this.processUnselect,\n\t\t\tmousedown: this.handleDocumentMousedown\n\t\t});\n\t},\n\n\n\t// Unbinds DOM handlers from elements that reside outside the view container\n\tunbindGlobalHandlers: function() {\n\t\tthis.stopListeningTo(GlobalEmitter.get());\n\t},\n\n\n\t/* Now Indicator\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Immediately render the current time indicator and begins re-rendering it at an interval,\n\t// which is defined by this.getNowIndicatorUnit().\n\t// TODO: somehow do this for the current whole day's background too\n\tstartNowIndicator: function() {\n\t\tvar _this = this;\n\t\tvar unit;\n\t\tvar update;\n\t\tvar delay; // ms wait value\n\n\t\tif (this.opt('nowIndicator')) {\n\t\t\tunit = this.getNowIndicatorUnit();\n\t\t\tif (unit) {\n\t\t\t\tupdate = proxy(this, 'updateNowIndicator'); // bind to `this`\n\n\t\t\t\tthis.initialNowDate = this.calendar.getNow();\n\t\t\t\tthis.initialNowQueriedMs = +new Date();\n\t\t\t\tthis.renderNowIndicator(this.initialNowDate);\n\t\t\t\tthis.isNowIndicatorRendered = true;\n\n\t\t\t\t// wait until the beginning of the next interval\n\t\t\t\tdelay = this.initialNowDate.clone().startOf(unit).add(1, unit) - this.initialNowDate;\n\t\t\t\tthis.nowIndicatorTimeoutID = setTimeout(function() {\n\t\t\t\t\t_this.nowIndicatorTimeoutID = null;\n\t\t\t\t\tupdate();\n\t\t\t\t\tdelay = +moment.duration(1, unit);\n\t\t\t\t\tdelay = Math.max(100, delay); // prevent too frequent\n\t\t\t\t\t_this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\n\t\t\t\t}, delay);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// rerenders the now indicator, computing the new current time from the amount of time that has passed\n\t// since the initial getNow call.\n\tupdateNowIndicator: function() {\n\t\tif (this.isNowIndicatorRendered) {\n\t\t\tthis.unrenderNowIndicator();\n\t\t\tthis.renderNowIndicator(\n\t\t\t\tthis.initialNowDate.clone().add(new Date() - this.initialNowQueriedMs) // add ms\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// Immediately unrenders the view's current time indicator and stops any re-rendering timers.\n\t// Won't cause side effects if indicator isn't rendered.\n\tstopNowIndicator: function() {\n\t\tif (this.isNowIndicatorRendered) {\n\n\t\t\tif (this.nowIndicatorTimeoutID) {\n\t\t\t\tclearTimeout(this.nowIndicatorTimeoutID);\n\t\t\t\tthis.nowIndicatorTimeoutID = null;\n\t\t\t}\n\t\t\tif (this.nowIndicatorIntervalID) {\n\t\t\t\tclearTimeout(this.nowIndicatorIntervalID);\n\t\t\t\tthis.nowIndicatorIntervalID = null;\n\t\t\t}\n\n\t\t\tthis.unrenderNowIndicator();\n\t\t\tthis.isNowIndicatorRendered = false;\n\t\t}\n\t},\n\n\n\t/* Dimensions\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// TODO: move some of these to ChronoComponent\n\n\n\t// Refreshes anything dependant upon sizing of the container element of the grid\n\tupdateSize: function(isResize) {\n\t\tvar scroll;\n\n\t\tif (isResize) {\n\t\t\tscroll = this.queryScroll();\n\t\t}\n\n\t\tthis.updateHeight(isResize);\n\t\tthis.updateWidth(isResize);\n\t\tthis.updateNowIndicator();\n\n\t\tif (isResize) {\n\t\t\tthis.applyScroll(scroll);\n\t\t}\n\t},\n\n\n\t// Refreshes the horizontal dimensions of the calendar\n\tupdateWidth: function(isResize) {\n\t\t// subclasses should implement\n\t},\n\n\n\t// Refreshes the vertical dimensions of the calendar\n\tupdateHeight: function(isResize) {\n\t\tvar calendar = this.calendar; // we poll the calendar for height information\n\n\t\tthis.setHeight(\n\t\t\tcalendar.getSuggestedViewHeight(),\n\t\t\tcalendar.isHeightAuto()\n\t\t);\n\t},\n\n\n\t// Updates the vertical dimensions of the calendar to the specified height.\n\t// if `isAuto` is set to true, height becomes merely a suggestion and the view should use its \"natural\" height.\n\tsetHeight: function(height, isAuto) {\n\t\t// subclasses should implement\n\t},\n\n\n\t/* Scroller\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\taddForcedScroll: function(scroll) {\n\t\tthis.addScroll(\n\t\t\t$.extend(scroll, { isForced: true })\n\t\t);\n\t},\n\n\n\taddScroll: function(scroll) {\n\t\tvar queuedScroll = this.queuedScroll || (this.queuedScroll = {});\n\n\t\tif (!queuedScroll.isForced) {\n\t\t\t$.extend(queuedScroll, scroll);\n\t\t}\n\t},\n\n\n\tpopScroll: function() {\n\t\tthis.applyQueuedScroll();\n\t\tthis.queuedScroll = null;\n\t},\n\n\n\tapplyQueuedScroll: function() {\n\t\tif (this.queuedScroll) {\n\t\t\tthis.applyScroll(this.queuedScroll);\n\t\t}\n\t},\n\n\n\tqueryScroll: function() {\n\t\tvar scroll = {};\n\n\t\tif (this.isDatesRendered) {\n\t\t\t$.extend(scroll, this.queryDateScroll());\n\t\t}\n\n\t\treturn scroll;\n\t},\n\n\n\tapplyScroll: function(scroll) {\n\t\tif (this.isDatesRendered) {\n\t\t\tthis.applyDateScroll(scroll);\n\t\t}\n\t},\n\n\n\tcomputeInitialDateScroll: function() {\n\t\treturn {}; // subclasses must implement\n\t},\n\n\n\tqueryDateScroll: function() {\n\t\treturn {}; // subclasses must implement\n\t},\n\n\n\tapplyDateScroll: function(scroll) {\n\t\t; // subclasses must implement\n\t},\n\n\n\t/* Height Freezing\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tfreezeHeight: function() {\n\t\tthis.calendar.freezeContentHeight();\n\t},\n\n\n\tthawHeight: function() {\n\t\tthis.calendar.thawContentHeight();\n\t},\n\n\n\t// Event High-level Rendering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\texecuteEventsRender: function(eventsPayload) {\n\n\t\tif (this.renderEvents) { // for legacy custom views\n\t\t\tthis.renderEvents(convertEventsPayloadToLegacyArray(eventsPayload));\n\t\t}\n\t\telse {\n\t\t\tthis.renderEventsPayload(eventsPayload);\n\t\t}\n\n\t\tthis.isEventsRendered = true;\n\n\t\tthis.onEventsRender();\n\t},\n\n\n\texecuteEventsUnrender: function() {\n\t\tthis.onBeforeEventsUnrender();\n\n\t\tif (this.destroyEvents) {\n\t\t\tthis.destroyEvents(); // TODO: deprecate\n\t\t}\n\n\t\tthis.unrenderEvents();\n\t\tthis.isEventsRendered = false;\n\t},\n\n\n\t// Event Rendering Triggers\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Signals that all events have been rendered\n\tonEventsRender: function() {\n\t\tvar _this = this;\n\t\tvar hasSingleHandlers = this.hasPublicHandlers('eventAfterRender');\n\n\t\tif (hasSingleHandlers || this.hasPublicHandlers('eventAfterAllRender')) {\n\t\t\tthis.applyScreenState();\n\t\t}\n\n\t\tif (hasSingleHandlers) {\n\t\t\tthis.getEventSegs().forEach(function(seg) {\n\t\t\t\tvar legacy;\n\n\t\t\t\tif (seg.el) { // necessary?\n\t\t\t\t\tlegacy = seg.footprint.getEventLegacy();\n\n\t\t\t\t\t_this.publiclyTrigger('eventAfterRender', {\n\t\t\t\t\t\tcontext: legacy,\n\t\t\t\t\t\targs: [ legacy, seg.el, _this ]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.publiclyTrigger('eventAfterAllRender', {\n\t\t\tcontext: this,\n\t\t\targs: [ this ]\n\t\t});\n\t},\n\n\n\t// Signals that all event elements are about to be removed\n\tonBeforeEventsUnrender: function() {\n\t\tvar _this = this;\n\n\t\tif (this.hasPublicHandlers('eventDestroy')) {\n\n\t\t\tthis.applyScreenState();\n\n\t\t\tthis.getEventSegs().forEach(function(seg) {\n\t\t\t\tvar legacy;\n\n\t\t\t\tif (seg.el) { // necessary?\n\t\t\t\t\tlegacy = seg.footprint.getEventLegacy();\n\n\t\t\t\t\t_this.publiclyTrigger('eventDestroy', {\n\t\t\t\t\t\tcontext: legacy,\n\t\t\t\t\t\targs: [ legacy, seg.el, _this ]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\n\tapplyScreenState: function() {\n\t\tthis.thawHeight();\n\t\tthis.freezeHeight();\n\t\tthis.applyQueuedScroll();\n\t},\n\n\n\t// Event Rendering Utils\n\t// -----------------------------------------------------------------------------------------------------------------\n\t// TODO: move this to ChronoComponent\n\n\n\t// Hides all rendered event segments linked to the given event\n\tshowEventsWithId: function(eventDefId) {\n\t\tthis.getEventSegs().forEach(function(seg) {\n\t\t\tif (\n\t\t\t\tseg.footprint.eventDef.id === eventDefId &&\n\t\t\t\tseg.el // necessary?\n\t\t\t) {\n\t\t\t\tseg.el.css('visibility', '');\n\t\t\t}\n\t\t});\n\t},\n\n\n\t// Shows all rendered event segments linked to the given event\n\thideEventsWithId: function(eventDefId) {\n\t\tthis.getEventSegs().forEach(function(seg) {\n\t\t\tif (\n\t\t\t\tseg.footprint.eventDef.id === eventDefId &&\n\t\t\t\tseg.el // necessary?\n\t\t\t) {\n\t\t\t\tseg.el.css('visibility', 'hidden');\n\t\t\t}\n\t\t});\n\t},\n\n\n\t/* Event Drag-n-Drop\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\treportEventDrop: function(eventInstance, eventMutation, el, ev) {\n\t\tvar eventManager = this.calendar.eventManager;\n\t\tvar undoFunc = eventManager.mutateEventsWithId(\n\t\t\teventInstance.def.id,\n\t\t\teventMutation,\n\t\t\tthis.calendar\n\t\t);\n\t\tvar dateMutation = eventMutation.dateMutation;\n\n\t\t// update the EventInstance, for handlers\n\t\tif (dateMutation) {\n\t\t\teventInstance.dateProfile = dateMutation.buildNewDateProfile(\n\t\t\t\teventInstance.dateProfile,\n\t\t\t\tthis.calendar\n\t\t\t);\n\t\t}\n\n\t\tthis.triggerEventDrop(\n\t\t\teventInstance,\n\t\t\t// a drop doesn't necessarily mean a date mutation (ex: resource change)\n\t\t\t(dateMutation && dateMutation.dateDelta) || moment.duration(),\n\t\t\tundoFunc,\n\t\t\tel, ev\n\t\t);\n\t},\n\n\n\t// Triggers event-drop handlers that have subscribed via the API\n\ttriggerEventDrop: function(eventInstance, dateDelta, undoFunc, el, ev) {\n\t\tthis.publiclyTrigger('eventDrop', {\n\t\t\tcontext: el[0],\n\t\t\targs: [\n\t\t\t\teventInstance.toLegacy(),\n\t\t\t\tdateDelta,\n\t\t\t\tundoFunc,\n\t\t\t\tev,\n\t\t\t\t{}, // {} = jqui dummy\n\t\t\t\tthis\n\t\t\t]\n\t\t});\n\t},\n\n\n\t/* External Element Drag-n-Drop\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\n\t// `meta` is the parsed data that has been embedded into the dragging event.\n\t// `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\n\treportExternalDrop: function(singleEventDef, isEvent, isSticky, el, ev, ui) {\n\n\t\tif (isEvent) {\n\t\t\tthis.calendar.eventManager.addEventDef(singleEventDef, isSticky);\n\t\t}\n\n\t\tthis.triggerExternalDrop(singleEventDef, isEvent, el, ev, ui);\n\t},\n\n\n\t// Triggers external-drop handlers that have subscribed via the API\n\ttriggerExternalDrop: function(singleEventDef, isEvent, el, ev, ui) {\n\n\t\t// trigger 'drop' regardless of whether element represents an event\n\t\tthis.publiclyTrigger('drop', {\n\t\t\tcontext: el[0],\n\t\t\targs: [\n\t\t\t\tsingleEventDef.dateProfile.start.clone(),\n\t\t\t\tev,\n\t\t\t\tui,\n\t\t\t\tthis\n\t\t\t]\n\t\t});\n\n\t\tif (isEvent) {\n\t\t\t// signal an external event landed\n\t\t\tthis.publiclyTrigger('eventReceive', {\n\t\t\t\tcontext: this,\n\t\t\t\targs: [\n\t\t\t\t\tsingleEventDef.buildInstance().toLegacy(),\n\t\t\t\t\tthis\n\t\t\t\t]\n\t\t\t});\n\t\t}\n\t},\n\n\n\t/* Event Resizing\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Must be called when an event in the view has been resized to a new length\n\treportEventResize: function(eventInstance, eventMutation, el, ev) {\n\t\tvar eventManager = this.calendar.eventManager;\n\t\tvar undoFunc = eventManager.mutateEventsWithId(\n\t\t\teventInstance.def.id,\n\t\t\teventMutation,\n\t\t\tthis.calendar\n\t\t);\n\n\t\t// update the EventInstance, for handlers\n\t\teventInstance.dateProfile = eventMutation.dateMutation.buildNewDateProfile(\n\t\t\teventInstance.dateProfile,\n\t\t\tthis.calendar\n\t\t);\n\n\t\tthis.triggerEventResize(\n\t\t\teventInstance,\n\t\t\teventMutation.dateMutation.endDelta,\n\t\t\tundoFunc,\n\t\t\tel, ev\n\t\t);\n\t},\n\n\n\t// Triggers event-resize handlers that have subscribed via the API\n\ttriggerEventResize: function(eventInstance, durationDelta, undoFunc, el, ev) {\n\t\tthis.publiclyTrigger('eventResize', {\n\t\t\tcontext: el[0],\n\t\t\targs: [\n\t\t\t\teventInstance.toLegacy(),\n\t\t\t\tdurationDelta,\n\t\t\t\tundoFunc,\n\t\t\t\tev,\n\t\t\t\t{}, // {} = jqui dummy\n\t\t\t\tthis\n\t\t\t]\n\t\t});\n\t},\n\n\n\t/* Selection (time range)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Selects a date span on the view. `start` and `end` are both Moments.\n\t// `ev` is the native mouse event that begin the interaction.\n\tselect: function(footprint, ev) {\n\t\tthis.unselect(ev);\n\t\tthis.renderSelectionFootprint(footprint);\n\t\tthis.reportSelection(footprint, ev);\n\t},\n\n\n\trenderSelectionFootprint: function(footprint, ev) {\n\t\tif (this.renderSelection) { // legacy method in custom view classes\n\t\t\tthis.renderSelection(\n\t\t\t\tfootprint.toLegacy(this.calendar)\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tChronoComponent.prototype.renderSelectionFootprint.apply(this, arguments);\n\t\t}\n\t},\n\n\n\t// Called when a new selection is made. Updates internal state and triggers handlers.\n\treportSelection: function(footprint, ev) {\n\t\tthis.isSelected = true;\n\t\tthis.triggerSelect(footprint, ev);\n\t},\n\n\n\t// Triggers handlers to 'select'\n\ttriggerSelect: function(footprint, ev) {\n\t\tvar dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\n\n\t\tthis.publiclyTrigger('select', {\n\t\t\tcontext: this,\n\t\t\targs: [\n\t\t\t\tdateProfile.start,\n\t\t\t\tdateProfile.end,\n\t\t\t\tev,\n\t\t\t\tthis\n\t\t\t]\n\t\t});\n\t},\n\n\n\t// Undoes a selection. updates in the internal state and triggers handlers.\n\t// `ev` is the native mouse event that began the interaction.\n\tunselect: function(ev) {\n\t\tif (this.isSelected) {\n\t\t\tthis.isSelected = false;\n\t\t\tif (this.destroySelection) {\n\t\t\t\tthis.destroySelection(); // TODO: deprecate\n\t\t\t}\n\t\t\tthis.unrenderSelection();\n\t\t\tthis.publiclyTrigger('unselect', {\n\t\t\t\tcontext: this,\n\t\t\t\targs: [ ev, this ]\n\t\t\t});\n\t\t}\n\t},\n\n\n\t/* Event Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tselectEventInstance: function(eventInstance) {\n\t\tif (\n\t\t\t!this.selectedEventInstance ||\n\t\t\tthis.selectedEventInstance !== eventInstance\n\t\t) {\n\t\t\tthis.unselectEventInstance();\n\n\t\t\tthis.getEventSegs().forEach(function(seg) {\n\t\t\t\tif (\n\t\t\t\t\tseg.footprint.eventInstance === eventInstance &&\n\t\t\t\t\tseg.el // necessary?\n\t\t\t\t) {\n\t\t\t\t\tseg.el.addClass('fc-selected');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.selectedEventInstance = eventInstance;\n\t\t}\n\t},\n\n\n\tunselectEventInstance: function() {\n\t\tif (this.selectedEventInstance) {\n\n\t\t\tthis.getEventSegs().forEach(function(seg) {\n\t\t\t\tif (seg.el) { // necessary?\n\t\t\t\t\tseg.el.removeClass('fc-selected');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.selectedEventInstance = null;\n\t\t}\n\t},\n\n\n\tisEventDefSelected: function(eventDef) {\n\t\t// event references might change on refetchEvents(), while selectedEventInstance doesn't,\n\t\t// so compare IDs\n\t\treturn this.selectedEventInstance && this.selectedEventInstance.def.id === eventDef.id;\n\t},\n\n\n\t/* Mouse / Touch Unselecting (time range & event unselection)\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// TODO: move consistently to down/start or up/end?\n\t// TODO: don't kill previous selection if touch scrolling\n\n\n\thandleDocumentMousedown: function(ev) {\n\t\tif (isPrimaryMouseButton(ev)) {\n\t\t\tthis.processUnselect(ev);\n\t\t}\n\t},\n\n\n\tprocessUnselect: function(ev) {\n\t\tthis.processRangeUnselect(ev);\n\t\tthis.processEventUnselect(ev);\n\t},\n\n\n\tprocessRangeUnselect: function(ev) {\n\t\tvar ignore;\n\n\t\t// is there a time-range selection?\n\t\tif (this.isSelected && this.opt('unselectAuto')) {\n\t\t\t// only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\n\t\t\tignore = this.opt('unselectCancel');\n\t\t\tif (!ignore || !$(ev.target).closest(ignore).length) {\n\t\t\t\tthis.unselect(ev);\n\t\t\t}\n\t\t}\n\t},\n\n\n\tprocessEventUnselect: function(ev) {\n\t\tif (this.selectedEventInstance) {\n\t\t\tif (!$(ev.target).closest('.fc-selected').length) {\n\t\t\t\tthis.unselectEventInstance();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/* Day Click\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Triggers handlers to 'dayClick'\n\t// Span has start/end of the clicked area. Only the start is useful.\n\ttriggerDayClick: function(footprint, dayEl, ev) {\n\t\tvar dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\n\n\t\tthis.publiclyTrigger('dayClick', {\n\t\t\tcontext: dayEl,\n\t\t\targs: [ dateProfile.start, ev, this ]\n\t\t});\n\t}\n\n});\n\n\nView.watch('displayingDates', [ 'dateProfile' ], function(deps) {\n\tthis.requestDateRender(deps.dateProfile);\n}, function() {\n\tthis.requestDateUnrender();\n});\n\n\nView.watch('initialEvents', [ 'dateProfile' ], function(deps) {\n\treturn this.fetchInitialEvents(deps.dateProfile);\n});\n\n\nView.watch('bindingEvents', [ 'initialEvents' ], function(deps) {\n\tthis.setEvents(deps.initialEvents);\n\tthis.bindEventChanges();\n}, function() {\n\tthis.unbindEventChanges();\n\tthis.unsetEvents();\n});\n\n\nView.watch('displayingEvents', [ 'displayingDates', 'hasEvents' ], function() {\n\tthis.requestEventsRender(this.get('currentEvents')); // if there were event mutations after initialEvents\n}, function() {\n\tthis.requestEventsUnrender();\n});\n\n\nfunction convertEventsPayloadToLegacyArray(eventsPayload) {\n\tvar legacyEvents = [];\n\tvar id;\n\tvar eventInstances;\n\tvar i;\n\n\tfor (id in eventsPayload) {\n\n\t\teventInstances = eventsPayload[id].eventInstances;\n\n\t\tfor (i = 0; i < eventInstances.length; i++) {\n\t\t\tlegacyEvents.push(\n\t\t\t\teventInstances[i].toLegacy()\n\t\t\t);\n\t\t}\n\t}\n\n\treturn legacyEvents;\n}\n\n;;\n\nView.mixin({\n\n\t// range the view is formally responsible for.\n\t// for example, a month view might have 1st-31st, excluding padded dates\n\tcurrentUnzonedRange: null,\n\tcurrentRangeUnit: null, // name of largest unit being displayed, like \"month\" or \"week\"\n\n\tisRangeAllDay: false,\n\n\t// date range with a rendered skeleton\n\t// includes not-active days that need some sort of DOM\n\trenderUnzonedRange: null,\n\n\t// dates that display events and accept drag-n-drop\n\tactiveUnzonedRange: null,\n\n\t// constraint for where prev/next operations can go and where events can be dragged/resized to.\n\t// an object with optional start and end properties.\n\tvalidUnzonedRange: null,\n\n\t// how far the current date will move for a prev/next operation\n\tdateIncrement: null,\n\n\tminTime: null, // Duration object that denotes the first visible time of any given day\n\tmaxTime: null, // Duration object that denotes the exclusive visible end time of any given day\n\tusesMinMaxTime: false, // whether minTime/maxTime will affect the activeUnzonedRange. Views must opt-in.\n\n\t// DEPRECATED\n\tstart: null, // use activeUnzonedRange\n\tend: null, // use activeUnzonedRange\n\tintervalStart: null, // use currentUnzonedRange\n\tintervalEnd: null, // use currentUnzonedRange\n\n\n\t/* Date Range Computation\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tsetDateProfileForRendering: function(dateProfile) {\n\t\tvar calendar = this.calendar;\n\n\t\tthis.currentUnzonedRange = dateProfile.currentUnzonedRange;\n\t\tthis.currentRangeUnit = dateProfile.currentRangeUnit;\n\t\tthis.isRangeAllDay = dateProfile.isRangeAllDay;\n\t\tthis.renderUnzonedRange = dateProfile.renderUnzonedRange;\n\t\tthis.activeUnzonedRange = dateProfile.activeUnzonedRange;\n\t\tthis.validUnzonedRange = dateProfile.validUnzonedRange;\n\t\tthis.dateIncrement = dateProfile.dateIncrement;\n\t\tthis.minTime = dateProfile.minTime;\n\t\tthis.maxTime = dateProfile.maxTime;\n\n\t\t// DEPRECATED, but we need to keep it updated...\n\t\tthis.start = calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, this.isRangeAllDay);\n\t\tthis.end = calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, this.isRangeAllDay);\n\t\tthis.intervalStart = calendar.msToMoment(dateProfile.currentUnzonedRange.startMs, this.isRangeAllDay);\n\t\tthis.intervalEnd = calendar.msToMoment(dateProfile.currentUnzonedRange.endMs, this.isRangeAllDay);\n\n\t\tthis.title = this.computeTitle();\n\t\tthis.calendar.reportViewDatesChanged(this, dateProfile);\n\t},\n\n\n\t// Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n\tbuildPrevDateProfile: function(date) {\n\t\tvar prevDate = date.clone().startOf(this.currentRangeUnit).subtract(this.dateIncrement);\n\n\t\treturn this.buildDateProfile(prevDate, -1);\n\t},\n\n\n\t// Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n\tbuildNextDateProfile: function(date) {\n\t\tvar nextDate = date.clone().startOf(this.currentRangeUnit).add(this.dateIncrement);\n\n\t\treturn this.buildDateProfile(nextDate, 1);\n\t},\n\n\n\t// Builds a structure holding dates/ranges for rendering around the given date.\n\t// Optional direction param indicates whether the date is being incremented/decremented\n\t// from its previous value. decremented = -1, incremented = 1 (default).\n\tbuildDateProfile: function(date, direction, forceToValid) {\n\t\tvar isDateAllDay = !date.hasTime();\n\t\tvar validUnzonedRange = this.buildValidRange();\n\t\tvar minTime = null;\n\t\tvar maxTime = null;\n\t\tvar currentInfo;\n\t\tvar renderUnzonedRange;\n\t\tvar activeUnzonedRange;\n\t\tvar isValid;\n\n\t\tif (forceToValid) {\n\t\t\tdate = this.calendar.msToUtcMoment(\n\t\t\t\tvalidUnzonedRange.constrainDate(date), // returns MS\n\t\t\t\tisDateAllDay\n\t\t\t);\n\t\t}\n\n\t\tcurrentInfo = this.buildCurrentRangeInfo(date, direction);\n\t\trenderUnzonedRange = this.buildRenderRange(currentInfo.unzonedRange, currentInfo.unit);\n\t\tactiveUnzonedRange = renderUnzonedRange.clone();\n\n\t\tif (!this.opt('showNonCurrentDates')) {\n\t\t\tactiveUnzonedRange = activeUnzonedRange.intersect(currentInfo.unzonedRange);\n\t\t}\n\n\t\tminTime = moment.duration(this.opt('minTime'));\n\t\tmaxTime = moment.duration(this.opt('maxTime'));\n\t\tactiveUnzonedRange = this.adjustActiveRange(activeUnzonedRange, minTime, maxTime);\n\n\t\tactiveUnzonedRange = activeUnzonedRange.intersect(validUnzonedRange);\n\n\t\tif (activeUnzonedRange) {\n\t\t\tdate = this.calendar.msToUtcMoment(\n\t\t\t\tactiveUnzonedRange.constrainDate(date), // returns MS\n\t\t\t\tisDateAllDay\n\t\t\t);\n\t\t}\n\n\t\t// it's invalid if the originally requested date is not contained,\n\t\t// or if the range is completely outside of the valid range.\n\t\tisValid = currentInfo.unzonedRange.intersectsWith(validUnzonedRange);\n\n\t\treturn {\n\t\t\tvalidUnzonedRange: validUnzonedRange,\n\t\t\tcurrentUnzonedRange: currentInfo.unzonedRange,\n\t\t\tcurrentRangeUnit: currentInfo.unit,\n\t\t\tisRangeAllDay: /^(year|month|week|day)$/.test(currentInfo.unit),\n\t\t\tactiveUnzonedRange: activeUnzonedRange,\n\t\t\trenderUnzonedRange: renderUnzonedRange,\n\t\t\tminTime: minTime,\n\t\t\tmaxTime: maxTime,\n\t\t\tisValid: isValid,\n\t\t\tdate: date,\n\t\t\tdateIncrement: this.buildDateIncrement(currentInfo.duration)\n\t\t\t\t// pass a fallback (might be null) ^\n\t\t};\n\t},\n\n\n\t// Builds an object with optional start/end properties.\n\t// Indicates the minimum/maximum dates to display.\n\tbuildValidRange: function() {\n\t\treturn this.getUnzonedRangeOption('validRange', this.calendar.getNow()) ||\n\t\t\tnew UnzonedRange(); // completely open-ended\n\t},\n\n\n\t// Builds a structure with info about the \"current\" range, the range that is\n\t// highlighted as being the current month for example.\n\t// See buildDateProfile for a description of `direction`.\n\t// Guaranteed to have `range` and `unit` properties. `duration` is optional.\n\t// TODO: accept a MS-time instead of a moment `date`?\n\tbuildCurrentRangeInfo: function(date, direction) {\n\t\tvar duration = null;\n\t\tvar unit = null;\n\t\tvar unzonedRange = null;\n\t\tvar dayCount;\n\n\t\tif (this.viewSpec.duration) {\n\t\t\tduration = this.viewSpec.duration;\n\t\t\tunit = this.viewSpec.durationUnit;\n\t\t\tunzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\n\t\t}\n\t\telse if ((dayCount = this.opt('dayCount'))) {\n\t\t\tunit = 'day';\n\t\t\tunzonedRange = this.buildRangeFromDayCount(date, direction, dayCount);\n\t\t}\n\t\telse if ((unzonedRange = this.buildCustomVisibleRange(date))) {\n\t\t\tunit = computeGreatestUnit(unzonedRange.getStart(), unzonedRange.getEnd());\n\t\t}\n\t\telse {\n\t\t\tduration = this.getFallbackDuration();\n\t\t\tunit = computeGreatestUnit(duration);\n\t\t\tunzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\n\t\t}\n\n\t\treturn { duration: duration, unit: unit, unzonedRange: unzonedRange };\n\t},\n\n\n\tgetFallbackDuration: function() {\n\t\treturn moment.duration({ days: 1 });\n\t},\n\n\n\t// Returns a new activeUnzonedRange to have time values (un-ambiguate)\n\t// minTime or maxTime causes the range to expand.\n\tadjustActiveRange: function(unzonedRange, minTime, maxTime) {\n\t\tvar start = unzonedRange.getStart();\n\t\tvar end = unzonedRange.getEnd();\n\n\t\tif (this.usesMinMaxTime) {\n\n\t\t\tif (minTime < 0) {\n\t\t\t\tstart.time(0).add(minTime);\n\t\t\t}\n\n\t\t\tif (maxTime > 24 * 60 * 60 * 1000) { // beyond 24 hours?\n\t\t\t\tend.time(maxTime - (24 * 60 * 60 * 1000));\n\t\t\t}\n\t\t}\n\n\t\treturn new UnzonedRange(start, end);\n\t},\n\n\n\t// Builds the \"current\" range when it is specified as an explicit duration.\n\t// `unit` is the already-computed computeGreatestUnit value of duration.\n\t// TODO: accept a MS-time instead of a moment `date`?\n\tbuildRangeFromDuration: function(date, direction, duration, unit) {\n\t\tvar alignment = this.opt('dateAlignment');\n\t\tvar start = date.clone();\n\t\tvar end;\n\t\tvar dateIncrementInput;\n\t\tvar dateIncrementDuration;\n\n\t\t// if the view displays a single day or smaller\n\t\tif (duration.as('days') <= 1) {\n\t\t\tif (this.isHiddenDay(start)) {\n\t\t\t\tstart = this.skipHiddenDays(start, direction);\n\t\t\t\tstart.startOf('day');\n\t\t\t}\n\t\t}\n\n\t\t// compute what the alignment should be\n\t\tif (!alignment) {\n\t\t\tdateIncrementInput = this.opt('dateIncrement');\n\n\t\t\tif (dateIncrementInput) {\n\t\t\t\tdateIncrementDuration = moment.duration(dateIncrementInput);\n\n\t\t\t\t// use the smaller of the two units\n\t\t\t\tif (dateIncrementDuration < duration) {\n\t\t\t\t\talignment = computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\talignment = unit;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\talignment = unit;\n\t\t\t}\n\t\t}\n\n\t\tstart.startOf(alignment);\n\t\tend = start.clone().add(duration);\n\n\t\treturn new UnzonedRange(start, end);\n\t},\n\n\n\t// Builds the \"current\" range when a dayCount is specified.\n\t// TODO: accept a MS-time instead of a moment `date`?\n\tbuildRangeFromDayCount: function(date, direction, dayCount) {\n\t\tvar customAlignment = this.opt('dateAlignment');\n\t\tvar runningCount = 0;\n\t\tvar start = date.clone();\n\t\tvar end;\n\n\t\tif (customAlignment) {\n\t\t\tstart.startOf(customAlignment);\n\t\t}\n\n\t\tstart.startOf('day');\n\t\tstart = this.skipHiddenDays(start, direction);\n\n\t\tend = start.clone();\n\t\tdo {\n\t\t\tend.add(1, 'day');\n\t\t\tif (!this.isHiddenDay(end)) {\n\t\t\t\trunningCount++;\n\t\t\t}\n\t\t} while (runningCount < dayCount);\n\n\t\treturn new UnzonedRange(start, end);\n\t},\n\n\n\t// Builds a normalized range object for the \"visible\" range,\n\t// which is a way to define the currentUnzonedRange and activeUnzonedRange at the same time.\n\t// TODO: accept a MS-time instead of a moment `date`?\n\tbuildCustomVisibleRange: function(date) {\n\t\tvar visibleUnzonedRange = this.getUnzonedRangeOption(\n\t\t\t'visibleRange',\n\t\t\tthis.calendar.applyTimezone(date) // correct zone. also generates new obj that avoids mutations\n\t\t);\n\n\t\tif (visibleUnzonedRange && (visibleUnzonedRange.startMs === null || visibleUnzonedRange.endMs === null)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn visibleUnzonedRange;\n\t},\n\n\n\t// Computes the range that will represent the element/cells for *rendering*,\n\t// but which may have voided days/times.\n\tbuildRenderRange: function(currentUnzonedRange, currentRangeUnit) {\n\t\t// cut off days in the currentUnzonedRange that are hidden\n\t\treturn this.trimHiddenDays(currentUnzonedRange);\n\t},\n\n\n\t// Compute the duration value that should be added/substracted to the current date\n\t// when a prev/next operation happens.\n\tbuildDateIncrement: function(fallback) {\n\t\tvar dateIncrementInput = this.opt('dateIncrement');\n\t\tvar customAlignment;\n\n\t\tif (dateIncrementInput) {\n\t\t\treturn moment.duration(dateIncrementInput);\n\t\t}\n\t\telse if ((customAlignment = this.opt('dateAlignment'))) {\n\t\t\treturn moment.duration(1, customAlignment);\n\t\t}\n\t\telse if (fallback) {\n\t\t\treturn fallback;\n\t\t}\n\t\telse {\n\t\t\treturn moment.duration({ days: 1 });\n\t\t}\n\t},\n\n\n\t// Remove days from the beginning and end of the range that are computed as hidden.\n\ttrimHiddenDays: function(inputUnzonedRange) {\n\t\tvar start = inputUnzonedRange.getStart();\n\t\tvar end = inputUnzonedRange.getEnd();\n\n\t\tstart = this.skipHiddenDays(start);\n\t\tend = this.skipHiddenDays(end, -1, true);\n\n\t\treturn new UnzonedRange(start, end);\n\t},\n\n\n\t// Compute the number of the give units in the \"current\" range.\n\t// Will return a floating-point number. Won't round.\n\tcurrentRangeAs: function(unit) {\n\t\tvar currentUnzonedRange = this.currentUnzonedRange;\n\n\t\treturn moment.utc(currentUnzonedRange.endMs).diff(\n\t\t\tmoment.utc(currentUnzonedRange.startMs),\n\t\t\tunit,\n\t\t\ttrue\n\t\t);\n\t},\n\n\n\t// For ChronoComponent::getDayClasses\n\tisDateInOtherMonth: function(date) {\n\t\treturn false;\n\t},\n\n\n\t// Arguments after name will be forwarded to a hypothetical function value\n\t// WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\n\t// Always clone your objects if you fear mutation.\n\tgetUnzonedRangeOption: function(name) {\n\t\tvar val = this.opt(name);\n\n\t\tif (typeof val === 'function') {\n\t\t\tval = val.apply(\n\t\t\t\tnull,\n\t\t\t\tArray.prototype.slice.call(arguments, 1)\n\t\t\t);\n\t\t}\n\n\t\tif (val) {\n\t\t\treturn this.calendar.parseUnzonedRange(val);\n\t\t}\n\t},\n\n\n\t/* Hidden Days\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Initializes internal variables related to calculating hidden days-of-week\n\tinitHiddenDays: function() {\n\t\tvar hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\n\t\tvar isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n\t\tvar dayCnt = 0;\n\t\tvar i;\n\n\t\tif (this.opt('weekends') === false) {\n\t\t\thiddenDays.push(0, 6); // 0=sunday, 6=saturday\n\t\t}\n\n\t\tfor (i = 0; i < 7; i++) {\n\t\t\tif (\n\t\t\t\t!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)\n\t\t\t) {\n\t\t\t\tdayCnt++;\n\t\t\t}\n\t\t}\n\n\t\tif (!dayCnt) {\n\t\t\tthrow 'invalid hiddenDays'; // all days were hidden? bad.\n\t\t}\n\n\t\tthis.isHiddenDayHash = isHiddenDayHash;\n\t},\n\n\n\t// Is the current day hidden?\n\t// `day` is a day-of-week index (0-6), or a Moment\n\tisHiddenDay: function(day) {\n\t\tif (moment.isMoment(day)) {\n\t\t\tday = day.day();\n\t\t}\n\t\treturn this.isHiddenDayHash[day];\n\t},\n\n\n\t// Incrementing the current day until it is no longer a hidden day, returning a copy.\n\t// DOES NOT CONSIDER validUnzonedRange!\n\t// If the initial value of `date` is not a hidden day, don't do anything.\n\t// Pass `isExclusive` as `true` if you are dealing with an end date.\n\t// `inc` defaults to `1` (increment one day forward each time)\n\tskipHiddenDays: function(date, inc, isExclusive) {\n\t\tvar out = date.clone();\n\t\tinc = inc || 1;\n\t\twhile (\n\t\t\tthis.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]\n\t\t) {\n\t\t\tout.add(inc, 'days');\n\t\t}\n\t\treturn out;\n\t}\n\n});\n\n;;\n\n/*\nEmbodies a div that has potential scrollbars\n*/\nvar Scroller = FC.Scroller = Class.extend({\n\n\tel: null, // the guaranteed outer element\n\tscrollEl: null, // the element with the scrollbars\n\toverflowX: null,\n\toverflowY: null,\n\n\n\tconstructor: function(options) {\n\t\toptions = options || {};\n\t\tthis.overflowX = options.overflowX || options.overflow || 'auto';\n\t\tthis.overflowY = options.overflowY || options.overflow || 'auto';\n\t},\n\n\n\trender: function() {\n\t\tthis.el = this.renderEl();\n\t\tthis.applyOverflow();\n\t},\n\n\n\trenderEl: function() {\n\t\treturn (this.scrollEl = $('
'));\n\t},\n\n\n\t// sets to natural height, unlocks overflow\n\tclear: function() {\n\t\tthis.setHeight('auto');\n\t\tthis.applyOverflow();\n\t},\n\n\n\tdestroy: function() {\n\t\tthis.el.remove();\n\t},\n\n\n\t// Overflow\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tapplyOverflow: function() {\n\t\tthis.scrollEl.css({\n\t\t\t'overflow-x': this.overflowX,\n\t\t\t'overflow-y': this.overflowY\n\t\t});\n\t},\n\n\n\t// Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\n\t// Useful for preserving scrollbar widths regardless of future resizes.\n\t// Can pass in scrollbarWidths for optimization.\n\tlockOverflow: function(scrollbarWidths) {\n\t\tvar overflowX = this.overflowX;\n\t\tvar overflowY = this.overflowY;\n\n\t\tscrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\n\n\t\tif (overflowX === 'auto') {\n\t\t\toverflowX = (\n\t\t\t\t\tscrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?\n\t\t\t\t\t// OR scrolling pane with massless scrollbars?\n\t\t\t\t\tthis.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth\n\t\t\t\t\t\t// subtract 1 because of IE off-by-one issue\n\t\t\t\t) ? 'scroll' : 'hidden';\n\t\t}\n\n\t\tif (overflowY === 'auto') {\n\t\t\toverflowY = (\n\t\t\t\t\tscrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?\n\t\t\t\t\t// OR scrolling pane with massless scrollbars?\n\t\t\t\t\tthis.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight\n\t\t\t\t\t\t// subtract 1 because of IE off-by-one issue\n\t\t\t\t) ? 'scroll' : 'hidden';\n\t\t}\n\n\t\tthis.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });\n\t},\n\n\n\t// Getters / Setters\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tsetHeight: function(height) {\n\t\tthis.scrollEl.height(height);\n\t},\n\n\n\tgetScrollTop: function() {\n\t\treturn this.scrollEl.scrollTop();\n\t},\n\n\n\tsetScrollTop: function(top) {\n\t\tthis.scrollEl.scrollTop(top);\n\t},\n\n\n\tgetClientWidth: function() {\n\t\treturn this.scrollEl[0].clientWidth;\n\t},\n\n\n\tgetClientHeight: function() {\n\t\treturn this.scrollEl[0].clientHeight;\n\t},\n\n\n\tgetScrollbarWidths: function() {\n\t\treturn getScrollbarWidths(this.scrollEl);\n\t}\n\n});\n\n;;\nfunction Iterator(items) {\n this.items = items || [];\n}\n\n\n/* Calls a method on every item passing the arguments through */\nIterator.prototype.proxyCall = function(methodName) {\n var args = Array.prototype.slice.call(arguments, 1);\n var results = [];\n\n this.items.forEach(function(item) {\n results.push(item[methodName].apply(item, args));\n });\n\n return results;\n};\n\n;;\n\n/* Toolbar with buttons and title\n----------------------------------------------------------------------------------------------------------------------*/\n\nfunction Toolbar(calendar, toolbarOptions) {\n\tvar t = this;\n\n\t// exports\n\tt.setToolbarOptions = setToolbarOptions;\n\tt.render = render;\n\tt.removeElement = removeElement;\n\tt.updateTitle = updateTitle;\n\tt.activateButton = activateButton;\n\tt.deactivateButton = deactivateButton;\n\tt.disableButton = disableButton;\n\tt.enableButton = enableButton;\n\tt.getViewsWithButtons = getViewsWithButtons;\n\tt.el = null; // mirrors local `el`\n\n\t// locals\n\tvar el;\n\tvar viewsWithButtons = [];\n\n\t// method to update toolbar-specific options, not calendar-wide options\n\tfunction setToolbarOptions(newToolbarOptions) {\n\t\ttoolbarOptions = newToolbarOptions;\n\t}\n\n\t// can be called repeatedly and will rerender\n\tfunction render() {\n\t\tvar sections = toolbarOptions.layout;\n\n\t\tif (sections) {\n\t\t\tif (!el) {\n\t\t\t\tel = this.el = $(\"
\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\tel.empty();\n\t\t\t}\n\t\t\tel.append(renderSection('left'))\n\t\t\t\t.append(renderSection('right'))\n\t\t\t\t.append(renderSection('center'))\n\t\t\t\t.append('
');\n\t\t}\n\t\telse {\n\t\t\tremoveElement();\n\t\t}\n\t}\n\n\n\tfunction removeElement() {\n\t\tif (el) {\n\t\t\tel.remove();\n\t\t\tel = t.el = null;\n\t\t}\n\t}\n\n\n\tfunction renderSection(position) {\n\t\tvar theme = calendar.theme;\n\t\tvar sectionEl = $('
');\n\t\tvar buttonStr = toolbarOptions.layout[position];\n\t\tvar calendarCustomButtons = calendar.opt('customButtons') || {};\n\t\tvar calendarButtonTextOverrides = calendar.overrides.buttonText || {};\n\t\tvar calendarButtonText = calendar.opt('buttonText') || {};\n\n\t\tif (buttonStr) {\n\t\t\t$.each(buttonStr.split(' '), function(i) {\n\t\t\t\tvar groupChildren = $();\n\t\t\t\tvar isOnlyButtons = true;\n\t\t\t\tvar groupEl;\n\n\t\t\t\t$.each(this.split(','), function(j, buttonName) {\n\t\t\t\t\tvar customButtonProps;\n\t\t\t\t\tvar viewSpec;\n\t\t\t\t\tvar buttonClick;\n\t\t\t\t\tvar buttonIcon; // only one of these will be set\n\t\t\t\t\tvar buttonText; // \"\n\t\t\t\t\tvar buttonInnerHtml;\n\t\t\t\t\tvar buttonClasses;\n\t\t\t\t\tvar buttonEl;\n\n\t\t\t\t\tif (buttonName == 'title') {\n\t\t\t\t\t\tgroupChildren = groupChildren.add($('

 

')); // we always want it to take up height\n\t\t\t\t\t\tisOnlyButtons = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\n\t\t\t\t\t\tif ((customButtonProps = calendarCustomButtons[buttonName])) {\n\t\t\t\t\t\t\tbuttonClick = function(ev) {\n\t\t\t\t\t\t\t\tif (customButtonProps.click) {\n\t\t\t\t\t\t\t\t\tcustomButtonProps.click.call(buttonEl[0], ev);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t(buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\n\t\t\t\t\t\t\t(buttonIcon = theme.getIconClass(buttonName)) ||\n\t\t\t\t\t\t\t(buttonText = customButtonProps.text); // jshint ignore:line\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ((viewSpec = calendar.getViewSpec(buttonName))) {\n\t\t\t\t\t\t\tviewsWithButtons.push(buttonName);\n\t\t\t\t\t\t\tbuttonClick = function() {\n\t\t\t\t\t\t\t\tcalendar.changeView(buttonName);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t(buttonText = viewSpec.buttonTextOverride) ||\n\t\t\t\t\t\t\t(buttonIcon = theme.getIconClass(buttonName)) ||\n\t\t\t\t\t\t\t(buttonText = viewSpec.buttonTextDefault); // jshint ignore:line\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (calendar[buttonName]) { // a calendar method\n\t\t\t\t\t\t\tbuttonClick = function() {\n\t\t\t\t\t\t\t\tcalendar[buttonName]();\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t(buttonText = calendarButtonTextOverrides[buttonName]) ||\n\t\t\t\t\t\t\t(buttonIcon = theme.getIconClass(buttonName)) ||\n\t\t\t\t\t\t\t(buttonText = calendarButtonText[buttonName]); // jshint ignore:line\n\t\t\t\t\t\t\t// ^ everything else is considered default\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (buttonClick) {\n\n\t\t\t\t\t\t\tbuttonClasses = [\n\t\t\t\t\t\t\t\t'fc-' + buttonName + '-button',\n\t\t\t\t\t\t\t\ttheme.getClass('button'),\n\t\t\t\t\t\t\t\ttheme.getClass('stateDefault')\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tif (buttonText) {\n\t\t\t\t\t\t\t\tbuttonInnerHtml = htmlEscape(buttonText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (buttonIcon) {\n\t\t\t\t\t\t\t\tbuttonInnerHtml = \"\";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbuttonEl = $( // type=\"button\" so that it doesn't submit a form\n\t\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.click(function(ev) {\n\t\t\t\t\t\t\t\t\t// don't process clicks for disabled buttons\n\t\t\t\t\t\t\t\t\tif (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {\n\n\t\t\t\t\t\t\t\t\t\tbuttonClick(ev);\n\n\t\t\t\t\t\t\t\t\t\t// after the click action, if the button becomes the \"active\" tab, or disabled,\n\t\t\t\t\t\t\t\t\t\t// it should never have a hover class, so remove it now.\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tbuttonEl.hasClass(theme.getClass('stateActive')) ||\n\t\t\t\t\t\t\t\t\t\t\tbuttonEl.hasClass(theme.getClass('stateDisabled'))\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tbuttonEl.removeClass(theme.getClass('stateHover'));\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.mousedown(function() {\n\t\t\t\t\t\t\t\t\t// the *down* effect (mouse pressed in).\n\t\t\t\t\t\t\t\t\t// only on buttons that are not the \"active\" tab, or disabled\n\t\t\t\t\t\t\t\t\tbuttonEl\n\t\t\t\t\t\t\t\t\t\t.not('.' + theme.getClass('stateActive'))\n\t\t\t\t\t\t\t\t\t\t.not('.' + theme.getClass('stateDisabled'))\n\t\t\t\t\t\t\t\t\t\t.addClass(theme.getClass('stateDown'));\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.mouseup(function() {\n\t\t\t\t\t\t\t\t\t// undo the *down* effect\n\t\t\t\t\t\t\t\t\tbuttonEl.removeClass(theme.getClass('stateDown'));\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.hover(\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\t// the *hover* effect.\n\t\t\t\t\t\t\t\t\t\t// only on buttons that are not the \"active\" tab, or disabled\n\t\t\t\t\t\t\t\t\t\tbuttonEl\n\t\t\t\t\t\t\t\t\t\t\t.not('.' + theme.getClass('stateActive'))\n\t\t\t\t\t\t\t\t\t\t\t.not('.' + theme.getClass('stateDisabled'))\n\t\t\t\t\t\t\t\t\t\t\t.addClass(theme.getClass('stateHover'));\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\t// undo the *hover* effect\n\t\t\t\t\t\t\t\t\t\tbuttonEl\n\t\t\t\t\t\t\t\t\t\t\t.removeClass(theme.getClass('stateHover'))\n\t\t\t\t\t\t\t\t\t\t\t.removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tgroupChildren = groupChildren.add(buttonEl);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (isOnlyButtons) {\n\t\t\t\t\tgroupChildren\n\t\t\t\t\t\t.first().addClass(theme.getClass('cornerLeft')).end()\n\t\t\t\t\t\t.last().addClass(theme.getClass('cornerRight')).end();\n\t\t\t\t}\n\n\t\t\t\tif (groupChildren.length > 1) {\n\t\t\t\t\tgroupEl = $('
');\n\t\t\t\t\tif (isOnlyButtons) {\n\t\t\t\t\t\tgroupEl.addClass(theme.getClass('buttonGroup'));\n\t\t\t\t\t}\n\t\t\t\t\tgroupEl.append(groupChildren);\n\t\t\t\t\tsectionEl.append(groupEl);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsectionEl.append(groupChildren); // 1 or 0 children\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn sectionEl;\n\t}\n\n\n\tfunction updateTitle(text) {\n\t\tif (el) {\n\t\t\tel.find('h2').text(text);\n\t\t}\n\t}\n\n\n\tfunction activateButton(buttonName) {\n\t\tif (el) {\n\t\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t\t.addClass(calendar.theme.getClass('stateActive'));\n\t\t}\n\t}\n\n\n\tfunction deactivateButton(buttonName) {\n\t\tif (el) {\n\t\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t\t.removeClass(calendar.theme.getClass('stateActive'));\n\t\t}\n\t}\n\n\n\tfunction disableButton(buttonName) {\n\t\tif (el) {\n\t\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t\t.prop('disabled', true)\n\t\t\t\t.addClass(calendar.theme.getClass('stateDisabled'));\n\t\t}\n\t}\n\n\n\tfunction enableButton(buttonName) {\n\t\tif (el) {\n\t\t\tel.find('.fc-' + buttonName + '-button')\n\t\t\t\t.prop('disabled', false)\n\t\t\t\t.removeClass(calendar.theme.getClass('stateDisabled'));\n\t\t}\n\t}\n\n\n\tfunction getViewsWithButtons() {\n\t\treturn viewsWithButtons;\n\t}\n\n}\n\n;;\n\nvar Calendar = FC.Calendar = Class.extend(EmitterMixin, {\n\n\tview: null, // current View object\n\tviewsByType: null, // holds all instantiated view instances, current or not\n\tcurrentDate: null, // unzoned moment. private (public API should use getDate instead)\n\ttheme: null,\n\tloadingLevel: 0, // number of simultaneous loading tasks\n\n\n\tconstructor: function(el, overrides) {\n\n\t\t// declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.\n\t\t// unneeded() is called in destroy.\n\t\tGlobalEmitter.needed();\n\n\t\tthis.el = el;\n\t\tthis.viewsByType = {};\n\t\tthis.viewSpecCache = {};\n\n\t\tthis.initOptionsInternals(overrides);\n\t\tthis.initMomentInternals(); // needs to happen after options hash initialized\n\t\tthis.initCurrentDate();\n\t\tthis.initEventManager();\n\n\t\tEventManager.call(this); // needs options immediately\n\t\tthis.initialize();\n\t},\n\n\n\t// Subclasses can override this for initialization logic after the constructor has been called\n\tinitialize: function() {\n\t},\n\n\n\t// Public API\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tgetView: function() {\n\t\treturn this.view;\n\t},\n\n\n\tpubliclyTrigger: function(name, triggerInfo) {\n\t\tvar optHandler = this.opt(name);\n\t\tvar context;\n\t\tvar args;\n\n\t\tif ($.isPlainObject(triggerInfo)) {\n\t\t\tcontext = triggerInfo.context;\n\t\t\targs = triggerInfo.args;\n\t\t}\n\t\telse if ($.isArray(triggerInfo)) {\n\t\t\targs = triggerInfo;\n\t\t}\n\n\t\tif (context == null) {\n\t\t\tcontext = this.el[0]; // fallback context\n\t\t}\n\n\t\tif (!args) {\n\t\t\targs = [];\n\t\t}\n\n\t\tthis.triggerWith(name, context, args); // Emitter's method\n\n\t\tif (optHandler) {\n\t\t\treturn optHandler.apply(context, args);\n\t\t}\n\t},\n\n\n\thasPublicHandlers: function(name) {\n\t\treturn this.hasHandlers(name) ||\n\t\t\tthis.opt(name); // handler specified in options\n\t},\n\n\n\t// View\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Given a view name for a custom view or a standard view, creates a ready-to-go View object\n\tinstantiateView: function(viewType) {\n\t\tvar spec = this.getViewSpec(viewType);\n\n\t\treturn new spec['class'](this, spec);\n\t},\n\n\n\t// Returns a boolean about whether the view is okay to instantiate at some point\n\tisValidViewType: function(viewType) {\n\t\treturn Boolean(this.getViewSpec(viewType));\n\t},\n\n\n\tchangeView: function(viewName, dateOrRange) {\n\n\t\tif (dateOrRange) {\n\n\t\t\tif (dateOrRange.start && dateOrRange.end) { // a range\n\t\t\t\tthis.recordOptionOverrides({ // will not rerender\n\t\t\t\t\tvisibleRange: dateOrRange\n\t\t\t\t});\n\t\t\t}\n\t\t\telse { // a date\n\t\t\t\tthis.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate\n\t\t\t}\n\t\t}\n\n\t\tthis.renderView(viewName);\n\t},\n\n\n\t// Forces navigation to a view for the given date.\n\t// `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n\tzoomTo: function(newDate, viewType) {\n\t\tvar spec;\n\n\t\tviewType = viewType || 'day'; // day is default zoom\n\t\tspec = this.getViewSpec(viewType) || this.getUnitViewSpec(viewType);\n\n\t\tthis.currentDate = newDate.clone();\n\t\tthis.renderView(spec ? spec.type : null);\n\t},\n\n\n\t// Current Date\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tinitCurrentDate: function() {\n\t\tvar defaultDateInput = this.opt('defaultDate');\n\n\t\t// compute the initial ambig-timezone date\n\t\tif (defaultDateInput != null) {\n\t\t\tthis.currentDate = this.moment(defaultDateInput).stripZone();\n\t\t}\n\t\telse {\n\t\t\tthis.currentDate = this.getNow(); // getNow already returns unzoned\n\t\t}\n\t},\n\n\n\treportViewDatesChanged: function(view, dateProfile) {\n\t\tthis.currentDate = dateProfile.date; // might have been constrained by view dates\n\t\tthis.setToolbarsTitle(view.title);\n\t\tthis.updateToolbarButtons();\n\t},\n\n\n\tprev: function() {\n\t\tvar prevInfo = this.view.buildPrevDateProfile(this.currentDate);\n\n\t\tif (prevInfo.isValid) {\n\t\t\tthis.currentDate = prevInfo.date;\n\t\t\tthis.renderView();\n\t\t}\n\t},\n\n\n\tnext: function() {\n\t\tvar nextInfo = this.view.buildNextDateProfile(this.currentDate);\n\n\t\tif (nextInfo.isValid) {\n\t\t\tthis.currentDate = nextInfo.date;\n\t\t\tthis.renderView();\n\t\t}\n\t},\n\n\n\tprevYear: function() {\n\t\tthis.currentDate.add(-1, 'years');\n\t\tthis.renderView();\n\t},\n\n\n\tnextYear: function() {\n\t\tthis.currentDate.add(1, 'years');\n\t\tthis.renderView();\n\t},\n\n\n\ttoday: function() {\n\t\tthis.currentDate = this.getNow(); // should deny like prev/next?\n\t\tthis.renderView();\n\t},\n\n\n\tgotoDate: function(zonedDateInput) {\n\t\tthis.currentDate = this.moment(zonedDateInput).stripZone();\n\t\tthis.renderView();\n\t},\n\n\n\tincrementDate: function(delta) {\n\t\tthis.currentDate.add(moment.duration(delta));\n\t\tthis.renderView();\n\t},\n\n\n\t// for external API\n\tgetDate: function() {\n\t\treturn this.applyTimezone(this.currentDate); // infuse the calendar's timezone\n\t},\n\n\n\t// Loading Triggering\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Should be called when any type of async data fetching begins\n\tpushLoading: function() {\n\t\tif (!(this.loadingLevel++)) {\n\t\t\tthis.publiclyTrigger('loading', [ true, this.view ]);\n\t\t}\n\t},\n\n\n\t// Should be called when any type of async data fetching completes\n\tpopLoading: function() {\n\t\tif (!(--this.loadingLevel)) {\n\t\t\tthis.publiclyTrigger('loading', [ false, this.view ]);\n\t\t}\n\t},\n\n\n\t// Selection\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// this public method receives start/end dates in any format, with any timezone\n\tselect: function(zonedStartInput, zonedEndInput) {\n\t\tthis.view.select(\n\t\t\tthis.buildSelectFootprint.apply(this, arguments)\n\t\t);\n\t},\n\n\n\tunselect: function() { // safe to be called before renderView\n\t\tif (this.view) {\n\t\t\tthis.view.unselect();\n\t\t}\n\t},\n\n\n\t// Given arguments to the select method in the API, returns a span (unzoned start/end and other info)\n\tbuildSelectFootprint: function(zonedStartInput, zonedEndInput) {\n\t\tvar start = this.moment(zonedStartInput).stripZone();\n\t\tvar end;\n\n\t\tif (zonedEndInput) {\n\t\t\tend = this.moment(zonedEndInput).stripZone();\n\t\t}\n\t\telse if (start.hasTime()) {\n\t\t\tend = start.clone().add(this.defaultTimedEventDuration);\n\t\t}\n\t\telse {\n\t\t\tend = start.clone().add(this.defaultAllDayEventDuration);\n\t\t}\n\n\t\treturn new ComponentFootprint(\n\t\t\tnew UnzonedRange(start, end),\n\t\t\t!start.hasTime()\n\t\t);\n\t},\n\n\n\t// Misc\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// will return `null` if invalid range\n\tparseUnzonedRange: function(rangeInput) {\n\t\tvar start = null;\n\t\tvar end = null;\n\n\t\tif (rangeInput.start) {\n\t\t\tstart = this.moment(rangeInput.start).stripZone();\n\t\t}\n\n\t\tif (rangeInput.end) {\n\t\t\tend = this.moment(rangeInput.end).stripZone();\n\t\t}\n\n\t\tif (!start && !end) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (start && end && end.isBefore(start)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn new UnzonedRange(start, end);\n\t},\n\n\n\trerenderEvents: function() { // API method. destroys old events if previously rendered.\n\t\tif (this.elementVisible()) {\n\t\t\tthis.view.flash('displayingEvents');\n\t\t}\n\t},\n\n\n\tinitEventManager: function() {\n\t\tvar _this = this;\n\t\tvar eventManager = new EventManager(this);\n\t\tvar rawSources = this.opt('eventSources') || [];\n\t\tvar singleRawSource = this.opt('events');\n\n\t\tthis.eventManager = eventManager;\n\n\t\tif (singleRawSource) {\n\t\t\trawSources.unshift(singleRawSource);\n\t\t}\n\n\t\teventManager.on('release', function(eventsPayload) {\n\t\t\t_this.trigger('eventsReset', eventsPayload);\n\t\t});\n\n\t\teventManager.freeze();\n\n\t\trawSources.forEach(function(rawSource) {\n\t\t\tvar source = EventSourceParser.parse(rawSource, _this);\n\n\t\t\tif (source) {\n\t\t\t\teventManager.addSource(source);\n\t\t\t}\n\t\t});\n\n\t\teventManager.thaw();\n\t},\n\n\n\trequestEvents: function(start, end) {\n\t\treturn this.eventManager.requestEvents(\n\t\t\tstart,\n\t\t\tend,\n\t\t\tthis.opt('timezone'),\n\t\t\t!this.opt('lazyFetching')\n\t\t);\n\t}\n\n});\n\n;;\n/*\nOptions binding/triggering system.\n*/\nCalendar.mixin({\n\n\tdirDefaults: null, // option defaults related to LTR or RTL\n\tlocaleDefaults: null, // option defaults related to current locale\n\toverrides: null, // option overrides given to the fullCalendar constructor\n\tdynamicOverrides: null, // options set with dynamic setter method. higher precedence than view overrides.\n\toptionsModel: null, // all defaults combined with overrides\n\n\n\tinitOptionsInternals: function(overrides) {\n\t\tthis.overrides = $.extend({}, overrides); // make a copy\n\t\tthis.dynamicOverrides = {};\n\t\tthis.optionsModel = new Model();\n\n\t\tthis.populateOptionsHash();\n\t},\n\n\n\t// public getter/setter\n\toption: function(name, value) {\n\t\tvar newOptionHash;\n\n\t\tif (typeof name === 'string') {\n\t\t\tif (value === undefined) { // getter\n\t\t\t\treturn this.optionsModel.get(name);\n\t\t\t}\n\t\t\telse { // setter for individual option\n\t\t\t\tnewOptionHash = {};\n\t\t\t\tnewOptionHash[name] = value;\n\t\t\t\tthis.setOptions(newOptionHash);\n\t\t\t}\n\t\t}\n\t\telse if (typeof name === 'object') { // compound setter with object input\n\t\t\tthis.setOptions(name);\n\t\t}\n\t},\n\n\n\t// private getter\n\topt: function(name) {\n\t\treturn this.optionsModel.get(name);\n\t},\n\n\n\tsetOptions: function(newOptionHash) {\n\t\tvar optionCnt = 0;\n\t\tvar optionName;\n\n\t\tthis.recordOptionOverrides(newOptionHash); // will trigger optionsModel watchers\n\n\t\tfor (optionName in newOptionHash) {\n\t\t\toptionCnt++;\n\t\t}\n\n\t\t// special-case handling of single option change.\n\t\t// if only one option change, `optionName` will be its name.\n\t\tif (optionCnt === 1) {\n\t\t\tif (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {\n\t\t\t\tthis.updateSize(true); // true = allow recalculation of height\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (optionName === 'defaultDate') {\n\t\t\t\treturn; // can't change date this way. use gotoDate instead\n\t\t\t}\n\t\t\telse if (optionName === 'businessHours') {\n\t\t\t\tif (this.view) {\n\t\t\t\t\tthis.view.unrenderBusinessHours();\n\t\t\t\t\tthis.view.renderBusinessHours();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (optionName === 'timezone') {\n\t\t\t\tthis.view.flash('initialEvents');\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// catch-all. rerender the header and footer and rebuild/rerender the current view\n\t\tthis.renderHeader();\n\t\tthis.renderFooter();\n\n\t\t// even non-current views will be affected by this option change. do before rerender\n\t\t// TODO: detangle\n\t\tthis.viewsByType = {};\n\n\t\tthis.reinitView();\n\t},\n\n\n\t// Computes the flattened options hash for the calendar and assigns to `this.options`.\n\t// Assumes this.overrides and this.dynamicOverrides have already been initialized.\n\tpopulateOptionsHash: function() {\n\t\tvar locale, localeDefaults;\n\t\tvar isRTL, dirDefaults;\n\t\tvar rawOptions;\n\n\t\tlocale = firstDefined( // explicit locale option given?\n\t\t\tthis.dynamicOverrides.locale,\n\t\t\tthis.overrides.locale\n\t\t);\n\t\tlocaleDefaults = localeOptionHash[locale];\n\t\tif (!localeDefaults) { // explicit locale option not given or invalid?\n\t\t\tlocale = Calendar.defaults.locale;\n\t\t\tlocaleDefaults = localeOptionHash[locale] || {};\n\t\t}\n\n\t\tisRTL = firstDefined( // based on options computed so far, is direction RTL?\n\t\t\tthis.dynamicOverrides.isRTL,\n\t\t\tthis.overrides.isRTL,\n\t\t\tlocaleDefaults.isRTL,\n\t\t\tCalendar.defaults.isRTL\n\t\t);\n\t\tdirDefaults = isRTL ? Calendar.rtlDefaults : {};\n\n\t\tthis.dirDefaults = dirDefaults;\n\t\tthis.localeDefaults = localeDefaults;\n\n\t\trawOptions = mergeOptions([ // merge defaults and overrides. lowest to highest precedence\n\t\t\tCalendar.defaults, // global defaults\n\t\t\tdirDefaults,\n\t\t\tlocaleDefaults,\n\t\t\tthis.overrides,\n\t\t\tthis.dynamicOverrides\n\t\t]);\n\t\tpopulateInstanceComputableOptions(rawOptions); // fill in gaps with computed options\n\n\t\tthis.optionsModel.reset(rawOptions);\n\t},\n\n\n\t// stores the new options internally, but does not rerender anything.\n\trecordOptionOverrides: function(newOptionHash) {\n\t\tvar optionName;\n\n\t\tfor (optionName in newOptionHash) {\n\t\t\tthis.dynamicOverrides[optionName] = newOptionHash[optionName];\n\t\t}\n\n\t\tthis.viewSpecCache = {}; // the dynamic override invalidates the options in this cache, so just clear it\n\t\tthis.populateOptionsHash(); // this.options needs to be recomputed after the dynamic override\n\t}\n\n});\n\n;;\n\nCalendar.mixin({\n\n\tdefaultAllDayEventDuration: null,\n\tdefaultTimedEventDuration: null,\n\tlocaleData: null,\n\n\n\tinitMomentInternals: function() {\n\t\tvar _this = this;\n\n\t\tthis.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));\n\t\tthis.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));\n\n\t\t// Called immediately, and when any of the options change.\n\t\t// Happens before any internal objects rebuild or rerender, because this is very core.\n\t\tthis.optionsModel.watch('buildingMomentLocale', [\n\t\t\t'?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',\n\t\t\t'?firstDay', '?weekNumberCalculation'\n\t\t], function(opts) {\n\t\t\tvar weekNumberCalculation = opts.weekNumberCalculation;\n\t\t\tvar firstDay = opts.firstDay;\n\t\t\tvar _week;\n\n\t\t\t// normalize\n\t\t\tif (weekNumberCalculation === 'iso') {\n\t\t\t\tweekNumberCalculation = 'ISO'; // normalize\n\t\t\t}\n\n\t\t\tvar localeData = Object.create( // make a cheap copy\n\t\t\t\tgetMomentLocaleData(opts.locale) // will fall back to en\n\t\t\t);\n\n\t\t\tif (opts.monthNames) {\n\t\t\t\tlocaleData._months = opts.monthNames;\n\t\t\t}\n\t\t\tif (opts.monthNamesShort) {\n\t\t\t\tlocaleData._monthsShort = opts.monthNamesShort;\n\t\t\t}\n\t\t\tif (opts.dayNames) {\n\t\t\t\tlocaleData._weekdays = opts.dayNames;\n\t\t\t}\n\t\t\tif (opts.dayNamesShort) {\n\t\t\t\tlocaleData._weekdaysShort = opts.dayNamesShort;\n\t\t\t}\n\n\t\t\tif (firstDay == null && weekNumberCalculation === 'ISO') {\n\t\t\t\tfirstDay = 1;\n\t\t\t}\n\t\t\tif (firstDay != null) {\n\t\t\t\t_week = Object.create(localeData._week); // _week: { dow: # }\n\t\t\t\t_week.dow = firstDay;\n\t\t\t\tlocaleData._week = _week;\n\t\t\t}\n\n\t\t\tif ( // whitelist certain kinds of input\n\t\t\t\tweekNumberCalculation === 'ISO' ||\n\t\t\t\tweekNumberCalculation === 'local' ||\n\t\t\t\ttypeof weekNumberCalculation === 'function'\n\t\t\t) {\n\t\t\t\tlocaleData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it\n\t\t\t}\n\n\t\t\t_this.localeData = localeData;\n\n\t\t\t// If the internal current date object already exists, move to new locale.\n\t\t\t// We do NOT need to do this technique for event dates, because this happens when converting to \"segments\".\n\t\t\tif (_this.currentDate) {\n\t\t\t\t_this.localizeMoment(_this.currentDate); // sets to localeData\n\t\t\t}\n\t\t});\n\t},\n\n\n\t// Builds a moment using the settings of the current calendar: timezone and locale.\n\t// Accepts anything the vanilla moment() constructor accepts.\n\tmoment: function() {\n\t\tvar mom;\n\n\t\tif (this.opt('timezone') === 'local') {\n\t\t\tmom = FC.moment.apply(null, arguments);\n\n\t\t\t// Force the moment to be local, because FC.moment doesn't guarantee it.\n\t\t\tif (mom.hasTime()) { // don't give ambiguously-timed moments a local zone\n\t\t\t\tmom.local();\n\t\t\t}\n\t\t}\n\t\telse if (this.opt('timezone') === 'UTC') {\n\t\t\tmom = FC.moment.utc.apply(null, arguments); // process as UTC\n\t\t}\n\t\telse {\n\t\t\tmom = FC.moment.parseZone.apply(null, arguments); // let the input decide the zone\n\t\t}\n\n\t\tthis.localizeMoment(mom); // TODO\n\n\t\treturn mom;\n\t},\n\n\n\tmsToMoment: function(ms, forceAllDay) {\n\t\tvar mom = FC.moment.utc(ms); // TODO: optimize by using Date.UTC\n\n\t\tif (forceAllDay) {\n\t\t\tmom.stripTime();\n\t\t}\n\t\telse {\n\t\t\tmom = this.applyTimezone(mom); // may or may not apply locale\n\t\t}\n\n\t\tthis.localizeMoment(mom);\n\n\t\treturn mom;\n\t},\n\n\n\tmsToUtcMoment: function(ms, forceAllDay) {\n\t\tvar mom = FC.moment.utc(ms); // TODO: optimize by using Date.UTC\n\n\t\tif (forceAllDay) {\n\t\t\tmom.stripTime();\n\t\t}\n\n\t\tthis.localizeMoment(mom);\n\n\t\treturn mom;\n\t},\n\n\n\t// Updates the given moment's locale settings to the current calendar locale settings.\n\tlocalizeMoment: function(mom) {\n\t\tmom._locale = this.localeData;\n\t},\n\n\n\t// Returns a boolean about whether or not the calendar knows how to calculate\n\t// the timezone offset of arbitrary dates in the current timezone.\n\tgetIsAmbigTimezone: function() {\n\t\treturn this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';\n\t},\n\n\n\t// Returns a copy of the given date in the current timezone. Has no effect on dates without times.\n\tapplyTimezone: function(date) {\n\t\tif (!date.hasTime()) {\n\t\t\treturn date.clone();\n\t\t}\n\n\t\tvar zonedDate = this.moment(date.toArray());\n\t\tvar timeAdjust = date.time() - zonedDate.time();\n\t\tvar adjustedZonedDate;\n\n\t\t// Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)\n\t\tif (timeAdjust) { // is the time result different than expected?\n\t\t\tadjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds\n\t\t\tif (date.time() - adjustedZonedDate.time() === 0) { // does it match perfectly now?\n\t\t\t\tzonedDate = adjustedZonedDate;\n\t\t\t}\n\t\t}\n\n\t\treturn zonedDate;\n\t},\n\n\n\t/*\n\tAssumes the footprint is non-open-ended.\n\t*/\n\tfootprintToDateProfile: function(componentFootprint, ignoreEnd) {\n\t\tvar start = FC.moment.utc(componentFootprint.unzonedRange.startMs);\n\t\tvar end;\n\n\t\tif (!ignoreEnd) {\n\t\t\tend = FC.moment.utc(componentFootprint.unzonedRange.endMs);\n\t\t}\n\n\t\tif (componentFootprint.isAllDay) {\n\t\t\tstart.stripTime();\n\n\t\t\tif (end) {\n\t\t\t\tend.stripTime();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tstart = this.applyTimezone(start);\n\n\t\t\tif (end) {\n\t\t\t\tend = this.applyTimezone(end);\n\t\t\t}\n\t\t}\n\n\t\treturn new EventDateProfile(start, end, this);\n\t},\n\n\n\t// Returns a moment for the current date, as defined by the client's computer or from the `now` option.\n\t// Will return an moment with an ambiguous timezone.\n\tgetNow: function() {\n\t\tvar now = this.opt('now');\n\t\tif (typeof now === 'function') {\n\t\t\tnow = now();\n\t\t}\n\t\treturn this.moment(now).stripZone();\n\t},\n\n\n\t// Produces a human-readable string for the given duration.\n\t// Side-effect: changes the locale of the given duration.\n\thumanizeDuration: function(duration) {\n\t\treturn duration.locale(this.opt('locale')).humanize();\n\t},\n\n\n\n\t// Event-Specific Date Utilities. TODO: move\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t// Get an event's normalized end date. If not present, calculate it from the defaults.\n\tgetEventEnd: function(event) {\n\t\tif (event.end) {\n\t\t\treturn event.end.clone();\n\t\t}\n\t\telse {\n\t\t\treturn this.getDefaultEventEnd(event.allDay, event.start);\n\t\t}\n\t},\n\n\n\t// Given an event's allDay status and start date, return what its fallback end date should be.\n\t// TODO: rename to computeDefaultEventEnd\n\tgetDefaultEventEnd: function(allDay, zonedStart) {\n\t\tvar end = zonedStart.clone();\n\n\t\tif (allDay) {\n\t\t\tend.stripTime().add(this.defaultAllDayEventDuration);\n\t\t}\n\t\telse {\n\t\t\tend.add(this.defaultTimedEventDuration);\n\t\t}\n\n\t\tif (this.getIsAmbigTimezone()) {\n\t\t\tend.stripZone(); // we don't know what the tzo should be\n\t\t}\n\n\t\treturn end;\n\t}\n\n});\n\n;;\n\nCalendar.mixin({\n\n\tviewSpecCache: null, // cache of view definitions (initialized in Calendar.js)\n\n\n\t// Gets information about how to create a view. Will use a cache.\n\tgetViewSpec: function(viewType) {\n\t\tvar cache = this.viewSpecCache;\n\n\t\treturn cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));\n\t},\n\n\n\t// Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n\t// Preference is given to views that have corresponding buttons.\n\tgetUnitViewSpec: function(unit) {\n\t\tvar viewTypes;\n\t\tvar i;\n\t\tvar spec;\n\n\t\tif ($.inArray(unit, unitsDesc) != -1) {\n\n\t\t\t// put views that have buttons first. there will be duplicates, but oh well\n\t\t\tviewTypes = this.header.getViewsWithButtons(); // TODO: include footer as well?\n\t\t\t$.each(FC.views, function(viewType) { // all views\n\t\t\t\tviewTypes.push(viewType);\n\t\t\t});\n\n\t\t\tfor (i = 0; i < viewTypes.length; i++) {\n\t\t\t\tspec = this.getViewSpec(viewTypes[i]);\n\t\t\t\tif (spec) {\n\t\t\t\t\tif (spec.singleUnit == unit) {\n\t\t\t\t\t\treturn spec;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Builds an object with information on how to create a given view\n\tbuildViewSpec: function(requestedViewType) {\n\t\tvar viewOverrides = this.overrides.views || {};\n\t\tvar specChain = []; // for the view. lowest to highest priority\n\t\tvar defaultsChain = []; // for the view. lowest to highest priority\n\t\tvar overridesChain = []; // for the view. lowest to highest priority\n\t\tvar viewType = requestedViewType;\n\t\tvar spec; // for the view\n\t\tvar overrides; // for the view\n\t\tvar durationInput;\n\t\tvar duration;\n\t\tvar unit;\n\n\t\t// iterate from the specific view definition to a more general one until we hit an actual View class\n\t\twhile (viewType) {\n\t\t\tspec = fcViews[viewType];\n\t\t\toverrides = viewOverrides[viewType];\n\t\t\tviewType = null; // clear. might repopulate for another iteration\n\n\t\t\tif (typeof spec === 'function') { // TODO: deprecate\n\t\t\t\tspec = { 'class': spec };\n\t\t\t}\n\n\t\t\tif (spec) {\n\t\t\t\tspecChain.unshift(spec);\n\t\t\t\tdefaultsChain.unshift(spec.defaults || {});\n\t\t\t\tdurationInput = durationInput || spec.duration;\n\t\t\t\tviewType = viewType || spec.type;\n\t\t\t}\n\n\t\t\tif (overrides) {\n\t\t\t\toverridesChain.unshift(overrides); // view-specific option hashes have options at zero-level\n\t\t\t\tdurationInput = durationInput || overrides.duration;\n\t\t\t\tviewType = viewType || overrides.type;\n\t\t\t}\n\t\t}\n\n\t\tspec = mergeProps(specChain);\n\t\tspec.type = requestedViewType;\n\t\tif (!spec['class']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fall back to top-level `duration` option\n\t\tdurationInput = durationInput ||\n\t\t\tthis.dynamicOverrides.duration ||\n\t\t\tthis.overrides.duration;\n\n\t\tif (durationInput) {\n\t\t\tduration = moment.duration(durationInput);\n\n\t\t\tif (duration.valueOf()) { // valid?\n\n\t\t\t\tunit = computeDurationGreatestUnit(duration, durationInput);\n\n\t\t\t\tspec.duration = duration;\n\t\t\t\tspec.durationUnit = unit;\n\n\t\t\t\t// view is a single-unit duration, like \"week\" or \"day\"\n\t\t\t\t// incorporate options for this. lowest priority\n\t\t\t\tif (duration.as(unit) === 1) {\n\t\t\t\t\tspec.singleUnit = unit;\n\t\t\t\t\toverridesChain.unshift(viewOverrides[unit] || {});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tspec.defaults = mergeOptions(defaultsChain);\n\t\tspec.overrides = mergeOptions(overridesChain);\n\n\t\tthis.buildViewSpecOptions(spec);\n\t\tthis.buildViewSpecButtonText(spec, requestedViewType);\n\n\t\treturn spec;\n\t},\n\n\n\t// Builds and assigns a view spec's options object from its already-assigned defaults and overrides\n\tbuildViewSpecOptions: function(spec) {\n\t\tspec.options = mergeOptions([ // lowest to highest priority\n\t\t\tCalendar.defaults, // global defaults\n\t\t\tspec.defaults, // view's defaults (from ViewSubclass.defaults)\n\t\t\tthis.dirDefaults,\n\t\t\tthis.localeDefaults, // locale and dir take precedence over view's defaults!\n\t\t\tthis.overrides, // calendar's overrides (options given to constructor)\n\t\t\tspec.overrides, // view's overrides (view-specific options)\n\t\t\tthis.dynamicOverrides // dynamically set via setter. highest precedence\n\t\t]);\n\t\tpopulateInstanceComputableOptions(spec.options);\n\t},\n\n\n\t// Computes and assigns a view spec's buttonText-related options\n\tbuildViewSpecButtonText: function(spec, requestedViewType) {\n\n\t\t// given an options object with a possible `buttonText` hash, lookup the buttonText for the\n\t\t// requested view, falling back to a generic unit entry like \"week\" or \"day\"\n\t\tfunction queryButtonText(options) {\n\t\t\tvar buttonText = options.buttonText || {};\n\t\t\treturn buttonText[requestedViewType] ||\n\t\t\t\t// view can decide to look up a certain key\n\t\t\t\t(spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||\n\t\t\t\t// a key like \"month\"\n\t\t\t\t(spec.singleUnit ? buttonText[spec.singleUnit] : null);\n\t\t}\n\n\t\t// highest to lowest priority\n\t\tspec.buttonTextOverride =\n\t\t\tqueryButtonText(this.dynamicOverrides) ||\n\t\t\tqueryButtonText(this.overrides) || // constructor-specified buttonText lookup hash takes precedence\n\t\t\tspec.overrides.buttonText; // `buttonText` for view-specific options is a string\n\n\t\t// highest to lowest priority. mirrors buildViewSpecOptions\n\t\tspec.buttonTextDefault =\n\t\t\tqueryButtonText(this.localeDefaults) ||\n\t\t\tqueryButtonText(this.dirDefaults) ||\n\t\t\tspec.defaults.buttonText || // a single string. from ViewSubclass.defaults\n\t\t\tqueryButtonText(Calendar.defaults) ||\n\t\t\t(spec.duration ? this.humanizeDuration(spec.duration) : null) || // like \"3 days\"\n\t\t\trequestedViewType; // fall back to given view name\n\t}\n\n});\n\n;;\n\nCalendar.mixin({\n\n\tel: null,\n\tcontentEl: null,\n\tsuggestedViewHeight: null,\n\twindowResizeProxy: null,\n\tignoreWindowResize: 0,\n\n\n\trender: function() {\n\t\tif (!this.contentEl) {\n\t\t\tthis.initialRender();\n\t\t}\n\t\telse if (this.elementVisible()) {\n\t\t\t// mainly for the public API\n\t\t\tthis.calcSize();\n\t\t\tthis.renderView();\n\t\t}\n\t},\n\n\n\tinitialRender: function() {\n\t\tvar _this = this;\n\t\tvar el = this.el;\n\n\t\tel.addClass('fc');\n\n\t\t// event delegation for nav links\n\t\tel.on('click.fc', 'a[data-goto]', function(ev) {\n\t\t\tvar anchorEl = $(this);\n\t\t\tvar gotoOptions = anchorEl.data('goto'); // will automatically parse JSON\n\t\t\tvar date = _this.moment(gotoOptions.date);\n\t\t\tvar viewType = gotoOptions.type;\n\n\t\t\t// property like \"navLinkDayClick\". might be a string or a function\n\t\t\tvar customAction = _this.view.opt('navLink' + capitaliseFirstLetter(viewType) + 'Click');\n\n\t\t\tif (typeof customAction === 'function') {\n\t\t\t\tcustomAction(date, ev);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (typeof customAction === 'string') {\n\t\t\t\t\tviewType = customAction;\n\t\t\t\t}\n\t\t\t\t_this.zoomTo(date, viewType);\n\t\t\t}\n\t\t});\n\n\t\t// called immediately, and upon option change\n\t\tthis.optionsModel.watch('settingTheme', [ '?theme', '?themeSystem' ], function(opts) {\n\t\t\tvar themeClass = ThemeRegistry.getThemeClass(opts.themeSystem || opts.theme);\n\t\t\tvar theme = new themeClass(_this.optionsModel);\n\t\t\tvar widgetClass = theme.getClass('widget');\n\n\t\t\t_this.theme = theme;\n\n\t\t\tif (widgetClass) {\n\t\t\t\tel.addClass(widgetClass);\n\t\t\t}\n\t\t}, function() {\n\t\t\tvar widgetClass = _this.theme.getClass('widget');\n\n\t\t\t_this.theme = null;\n\n\t\t\tif (widgetClass) {\n\t\t\t\tel.removeClass(widgetClass);\n\t\t\t}\n\t\t});\n\n\t\t// called immediately, and upon option change.\n\t\t// HACK: locale often affects isRTL, so we explicitly listen to that too.\n\t\tthis.optionsModel.watch('applyingDirClasses', [ '?isRTL', '?locale' ], function(opts) {\n\t\t\tel.toggleClass('fc-ltr', !opts.isRTL);\n\t\t\tel.toggleClass('fc-rtl', opts.isRTL);\n\t\t});\n\n\t\tthis.contentEl = $(\"
\").prependTo(el);\n\n\t\tthis.initToolbars();\n\t\tthis.renderHeader();\n\t\tthis.renderFooter();\n\t\tthis.renderView(this.opt('defaultView'));\n\n\t\tif (this.opt('handleWindowResize')) {\n\t\t\t$(window).resize(\n\t\t\t\tthis.windowResizeProxy = debounce( // prevents rapid calls\n\t\t\t\t\tthis.windowResize.bind(this),\n\t\t\t\t\tthis.opt('windowResizeDelay')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t},\n\n\n\tdestroy: function() {\n\n\t\tif (this.view) {\n\t\t\tthis.view.removeElement();\n\n\t\t\t// NOTE: don't null-out this.view in case API methods are called after destroy.\n\t\t\t// It is still the \"current\" view, just not rendered.\n\t\t}\n\n\t\tthis.toolbarsManager.proxyCall('removeElement');\n\t\tthis.contentEl.remove();\n\t\tthis.el.removeClass('fc fc-ltr fc-rtl');\n\n\t\t// removes theme-related root className\n\t\tthis.optionsModel.unwatch('settingTheme');\n\n\t\tthis.el.off('.fc'); // unbind nav link handlers\n\n\t\tif (this.windowResizeProxy) {\n\t\t\t$(window).unbind('resize', this.windowResizeProxy);\n\t\t\tthis.windowResizeProxy = null;\n\t\t}\n\n\t\tGlobalEmitter.unneeded();\n\t},\n\n\n\telementVisible: function() {\n\t\treturn this.el.is(':visible');\n\t},\n\n\n\n\t// View Rendering\n\t// -----------------------------------------------------------------------------------\n\n\n\t// Renders a view because of a date change, view-type change, or for the first time.\n\t// If not given a viewType, keep the current view but render different dates.\n\t// Accepts an optional scroll state to restore to.\n\trenderView: function(viewType, forcedScroll) {\n\n\t\tthis.ignoreWindowResize++;\n\n\t\tvar needsClearView = this.view && viewType && this.view.type !== viewType;\n\n\t\t// if viewType is changing, remove the old view's rendering\n\t\tif (needsClearView) {\n\t\t\tthis.freezeContentHeight(); // prevent a scroll jump when view element is removed\n\t\t\tthis.clearView();\n\t\t}\n\n\t\t// if viewType changed, or the view was never created, create a fresh view\n\t\tif (!this.view && viewType) {\n\t\t\tthis.view =\n\t\t\t\tthis.viewsByType[viewType] ||\n\t\t\t\t(this.viewsByType[viewType] = this.instantiateView(viewType));\n\n\t\t\tthis.view.setElement(\n\t\t\t\t$(\"
\").appendTo(this.contentEl)\n\t\t\t);\n\t\t\tthis.toolbarsManager.proxyCall('activateButton', viewType);\n\t\t}\n\n\t\tif (this.view) {\n\n\t\t\tif (forcedScroll) {\n\t\t\t\tthis.view.addForcedScroll(forcedScroll);\n\t\t\t}\n\n\t\t\tif (this.elementVisible()) {\n\t\t\t\tthis.view.setDate(this.currentDate);\n\t\t\t}\n\t\t}\n\n\t\tif (needsClearView) {\n\t\t\tthis.thawContentHeight();\n\t\t}\n\n\t\tthis.ignoreWindowResize--;\n\t},\n\n\n\t// Unrenders the current view and reflects this change in the Header.\n\t// Unregsiters the `view`, but does not remove from viewByType hash.\n\tclearView: function() {\n\t\tthis.toolbarsManager.proxyCall('deactivateButton', this.view.type);\n\t\tthis.view.removeElement();\n\t\tthis.view = null;\n\t},\n\n\n\t// Destroys the view, including the view object. Then, re-instantiates it and renders it.\n\t// Maintains the same scroll state.\n\t// TODO: maintain any other user-manipulated state.\n\treinitView: function() {\n\t\tthis.ignoreWindowResize++;\n\t\tthis.freezeContentHeight();\n\n\t\tvar viewType = this.view.type;\n\t\tvar scrollState = this.view.queryScroll();\n\t\tthis.clearView();\n\t\tthis.calcSize();\n\t\tthis.renderView(viewType, scrollState);\n\n\t\tthis.thawContentHeight();\n\t\tthis.ignoreWindowResize--;\n\t},\n\n\n\t// Resizing\n\t// -----------------------------------------------------------------------------------\n\n\n\tgetSuggestedViewHeight: function() {\n\t\tif (this.suggestedViewHeight === null) {\n\t\t\tthis.calcSize();\n\t\t}\n\t\treturn this.suggestedViewHeight;\n\t},\n\n\n\tisHeightAuto: function() {\n\t\treturn this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';\n\t},\n\n\n\tupdateSize: function(shouldRecalc) {\n\t\tif (this.elementVisible()) {\n\n\t\t\tif (shouldRecalc) {\n\t\t\t\tthis._calcSize();\n\t\t\t}\n\n\t\t\tthis.ignoreWindowResize++;\n\t\t\tthis.view.updateSize(true); // isResize=true. will poll getSuggestedViewHeight() and isHeightAuto()\n\t\t\tthis.ignoreWindowResize--;\n\n\t\t\treturn true; // signal success\n\t\t}\n\t},\n\n\n\tcalcSize: function() {\n\t\tif (this.elementVisible()) {\n\t\t\tthis._calcSize();\n\t\t}\n\t},\n\n\n\t_calcSize: function() { // assumes elementVisible\n\t\tvar contentHeightInput = this.opt('contentHeight');\n\t\tvar heightInput = this.opt('height');\n\n\t\tif (typeof contentHeightInput === 'number') { // exists and not 'auto'\n\t\t\tthis.suggestedViewHeight = contentHeightInput;\n\t\t}\n\t\telse if (typeof contentHeightInput === 'function') { // exists and is a function\n\t\t\tthis.suggestedViewHeight = contentHeightInput();\n\t\t}\n\t\telse if (typeof heightInput === 'number') { // exists and not 'auto'\n\t\t\tthis.suggestedViewHeight = heightInput - this.queryToolbarsHeight();\n\t\t}\n\t\telse if (typeof heightInput === 'function') { // exists and is a function\n\t\t\tthis.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();\n\t\t}\n\t\telse if (heightInput === 'parent') { // set to height of parent element\n\t\t\tthis.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();\n\t\t}\n\t\telse {\n\t\t\tthis.suggestedViewHeight = Math.round(\n\t\t\t\tthis.contentEl.width() /\n\t\t\t\tMath.max(this.opt('aspectRatio'), .5)\n\t\t\t);\n\t\t}\n\t},\n\n\n\twindowResize: function(ev) {\n\t\tif (\n\t\t\t!this.ignoreWindowResize &&\n\t\t\tev.target === window && // so we don't process jqui \"resize\" events that have bubbled up\n\t\t\tthis.view.renderUnzonedRange // view has already been rendered\n\t\t) {\n\t\t\tif (this.updateSize(true)) {\n\t\t\t\tthis.publiclyTrigger('windowResize', [ this.view ]);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/* Height \"Freezing\"\n\t-----------------------------------------------------------------------------*/\n\n\n\tfreezeContentHeight: function() {\n\t\tthis.contentEl.css({\n\t\t\twidth: '100%',\n\t\t\theight: this.contentEl.height(),\n\t\t\toverflow: 'hidden'\n\t\t});\n\t},\n\n\n\tthawContentHeight: function() {\n\t\tthis.contentEl.css({\n\t\t\twidth: '',\n\t\t\theight: '',\n\t\t\toverflow: ''\n\t\t});\n\t}\n\n});\n\n;;\n\nCalendar.mixin({\n\n\theader: null,\n\tfooter: null,\n\ttoolbarsManager: null,\n\n\n\tinitToolbars: function() {\n\t\tthis.header = new Toolbar(this, this.computeHeaderOptions());\n\t\tthis.footer = new Toolbar(this, this.computeFooterOptions());\n\t\tthis.toolbarsManager = new Iterator([ this.header, this.footer ]);\n\t},\n\n\n\tcomputeHeaderOptions: function() {\n\t\treturn {\n\t\t\textraClasses: 'fc-header-toolbar',\n\t\t\tlayout: this.opt('header')\n\t\t};\n\t},\n\n\n\tcomputeFooterOptions: function() {\n\t\treturn {\n\t\t\textraClasses: 'fc-footer-toolbar',\n\t\t\tlayout: this.opt('footer')\n\t\t};\n\t},\n\n\n\t// can be called repeatedly and Header will rerender\n\trenderHeader: function() {\n\t\tvar header = this.header;\n\n\t\theader.setToolbarOptions(this.computeHeaderOptions());\n\t\theader.render();\n\n\t\tif (header.el) {\n\t\t\tthis.el.prepend(header.el);\n\t\t}\n\t},\n\n\n\t// can be called repeatedly and Footer will rerender\n\trenderFooter: function() {\n\t\tvar footer = this.footer;\n\n\t\tfooter.setToolbarOptions(this.computeFooterOptions());\n\t\tfooter.render();\n\n\t\tif (footer.el) {\n\t\t\tthis.el.append(footer.el);\n\t\t}\n\t},\n\n\n\tsetToolbarsTitle: function(title) {\n\t\tthis.toolbarsManager.proxyCall('updateTitle', title);\n\t},\n\n\n\tupdateToolbarButtons: function() {\n\t\tvar now = this.getNow();\n\t\tvar view = this.view;\n\t\tvar todayInfo = view.buildDateProfile(now);\n\t\tvar prevInfo = view.buildPrevDateProfile(this.currentDate);\n\t\tvar nextInfo = view.buildNextDateProfile(this.currentDate);\n\n\t\tthis.toolbarsManager.proxyCall(\n\t\t\t(todayInfo.isValid && !view.currentUnzonedRange.containsDate(now)) ?\n\t\t\t\t'enableButton' :\n\t\t\t\t'disableButton',\n\t\t\t'today'\n\t\t);\n\n\t\tthis.toolbarsManager.proxyCall(\n\t\t\tprevInfo.isValid ?\n\t\t\t\t'enableButton' :\n\t\t\t\t'disableButton',\n\t\t\t'prev'\n\t\t);\n\n\t\tthis.toolbarsManager.proxyCall(\n\t\t\tnextInfo.isValid ?\n\t\t\t\t'enableButton' :\n\t\t\t\t'disableButton',\n\t\t\t'next'\n\t\t);\n\t},\n\n\n\tqueryToolbarsHeight: function() {\n\t\treturn this.toolbarsManager.items.reduce(function(accumulator, toolbar) {\n\t\t\tvar toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin\n\t\t\treturn accumulator + toolbarHeight;\n\t\t}, 0);\n\t}\n\n});\n\n;;\n\nvar BUSINESS_HOUR_EVENT_DEFAULTS = {\n\tstart: '09:00',\n\tend: '17:00',\n\tdow: [ 1, 2, 3, 4, 5 ], // monday - friday\n\trendering: 'inverse-background'\n\t// classNames are defined in businessHoursSegClasses\n};\n\n\n/*\nreturns ComponentFootprint[]\n`businessHourDef` is optional. Use Calendar's setting if omitted.\n*/\nCalendar.prototype.buildCurrentBusinessFootprints = function(wholeDay) {\n\treturn this._buildCurrentBusinessFootprints(wholeDay, this.opt('businessHours'));\n};\n\n\nCalendar.prototype._buildCurrentBusinessFootprints = function(wholeDay, businessDefInput) {\n\tvar eventPeriod = this.eventManager.currentPeriod;\n\tvar businessInstanceGroup;\n\n\tif (eventPeriod) {\n\t\tbusinessInstanceGroup = this.buildBusinessInstanceGroup(\n\t\t\twholeDay,\n\t\t\tbusinessDefInput,\n\t\t\teventPeriod.unzonedRange\n\t\t);\n\n\t\tif (businessInstanceGroup) {\n\t\t\treturn this.eventInstancesToFootprints( // in Calendar.constraints.js\n\t\t\t\tbusinessInstanceGroup.eventInstances\n\t\t\t);\n\t\t}\n\t}\n\n\treturn [];\n};\n\n\n/*\nIf there are business hours, and they are within range, returns populated EventInstanceGroup.\nIf there are business hours, but they aren't within range, returns a zero-item EventInstanceGroup.\nIf there are NOT business hours, returns undefined.\n*/\nCalendar.prototype.buildBusinessInstanceGroup = function(wholeDay, rawComplexDef, unzonedRange) {\n\tvar eventDefs = this.buildBusinessDefs(wholeDay, rawComplexDef);\n\tvar eventInstanceGroup;\n\n\tif (eventDefs.length) {\n\t\teventInstanceGroup = new EventInstanceGroup(\n\t\t\teventDefsToEventInstances(eventDefs, unzonedRange)\n\t\t);\n\n\t\t// so that inverse-background rendering can happen even when no eventRanges in view\n\t\teventInstanceGroup.explicitEventDef = eventDefs[0];\n\n\t\treturn eventInstanceGroup;\n\t}\n};\n\n\nCalendar.prototype.buildBusinessDefs = function(wholeDay, rawComplexDef) {\n\tvar rawDefs = [];\n\tvar requireDow = false;\n\tvar i;\n\tvar defs = [];\n\n\tif (rawComplexDef === true) {\n\t\trawDefs = [ {} ]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim\n\t}\n\telse if ($.isPlainObject(rawComplexDef)) {\n\t\trawDefs = [ rawComplexDef ];\n\t}\n\telse if ($.isArray(rawComplexDef)) {\n\t\trawDefs = rawComplexDef;\n\t\trequireDow = true; // every sub-definition NEEDS a day-of-week\n\t}\n\n\tfor (i = 0; i < rawDefs.length; i++) {\n\t\tif (!requireDow || rawDefs[i].dow) {\n\t\t\tdefs.push(\n\t\t\t\tthis.buildBusinessDef(wholeDay, rawDefs[i])\n\t\t\t);\n\t\t}\n\t}\n\n\treturn defs;\n};\n\n\nCalendar.prototype.buildBusinessDef = function(wholeDay, rawDef) {\n\tvar fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);\n\n\tif (wholeDay) {\n\t\tfullRawDef.start = null;\n\t\tfullRawDef.end = null;\n\t}\n\n\treturn RecurringEventDef.parse(\n\t\tfullRawDef,\n\t\tnew EventSource(this) // dummy source\n\t);\n};\n\n;;\n\n/*\ndetermines if eventInstanceGroup is allowed,\nin relation to other EVENTS and business hours.\n*/\nCalendar.prototype.isEventInstanceGroupAllowed = function(eventInstanceGroup) {\n\tvar eventDef = eventInstanceGroup.getEventDef();\n\tvar eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\n\tvar i;\n\n\tvar peerEventInstances = this.getPeerEventInstances(eventDef);\n\tvar peerEventRanges = eventInstancesToEventRanges(peerEventInstances);\n\tvar peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\n\n\tvar constraintVal = eventDef.getConstraint();\n\tvar overlapVal = eventDef.getOverlap();\n\n\tvar eventAllowFunc = this.opt('eventAllow');\n\n\tfor (i = 0; i < eventFootprints.length; i++) {\n\t\tif (\n\t\t\t!this.isFootprintAllowed(\n\t\t\t\teventFootprints[i].componentFootprint,\n\t\t\t\tpeerEventFootprints,\n\t\t\t\tconstraintVal,\n\t\t\t\toverlapVal,\n\t\t\t\teventFootprints[i].eventInstance\n\t\t\t)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (eventAllowFunc) {\n\t\tfor (i = 0; i < eventFootprints.length; i++) {\n\t\t\tif (\n\t\t\t\teventAllowFunc(\n\t\t\t\t\teventFootprints[i].componentFootprint.toLegacy(this),\n\t\t\t\t\teventFootprints[i].getEventLegacy()\n\t\t\t\t) === false\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n};\n\n\nCalendar.prototype.getPeerEventInstances = function(eventDef) {\n\treturn this.eventManager.getEventInstancesWithoutId(eventDef.id);\n};\n\n\nCalendar.prototype.isSelectionFootprintAllowed = function(componentFootprint) {\n\tvar peerEventInstances = this.eventManager.getEventInstances();\n\tvar peerEventRanges = eventInstancesToEventRanges(peerEventInstances);\n\tvar peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\n\n\tvar selectAllowFunc;\n\n\tif (\n\t\tthis.isFootprintAllowed(\n\t\t\tcomponentFootprint,\n\t\t\tpeerEventFootprints,\n\t\t\tthis.opt('selectConstraint'),\n\t\t\tthis.opt('selectOverlap')\n\t\t)\n\t) {\n\t\tselectAllowFunc = this.opt('selectAllow');\n\n\t\tif (selectAllowFunc) {\n\t\t\treturn selectAllowFunc(componentFootprint.toLegacy(this)) !== false;\n\t\t}\n\t\telse {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\n\nCalendar.prototype.isFootprintAllowed = function(\n\tcomponentFootprint,\n\tpeerEventFootprints,\n\tconstraintVal,\n\toverlapVal,\n\tsubjectEventInstance // optional\n) {\n\tvar constraintFootprints; // ComponentFootprint[]\n\tvar overlapEventFootprints; // EventFootprint[]\n\n\tif (constraintVal != null) {\n\t\tconstraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);\n\n\t\tif (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\toverlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);\n\n\tif (overlapVal === false) {\n\t\tif (overlapEventFootprints.length) {\n\t\t\treturn false;\n\t\t}\n\t}\n\telse if (typeof overlapVal === 'function') {\n\t\tif (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (subjectEventInstance) {\n\t\tif (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n};\n\n\n// Constraint\n// ------------------------------------------------------------------------------------------------\n\n\nCalendar.prototype.isFootprintWithinConstraints = function(componentFootprint, constraintFootprints) {\n\tvar i;\n\n\tfor (i = 0; i < constraintFootprints.length; i++) {\n\t\tif (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\n\nCalendar.prototype.constraintValToFootprints = function(constraintVal, isAllDay) {\n\tvar eventInstances;\n\n\tif (constraintVal === 'businessHours') {\n\t\treturn this.buildCurrentBusinessFootprints(isAllDay);\n\t}\n\telse if (typeof constraintVal === 'object') {\n\t\teventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events\n\n\t\tif (!eventInstances) { // invalid input. fallback to parsing footprint directly\n\t\t\treturn this.parseFootprints(constraintVal);\n\t\t}\n\t\telse {\n\t\t\treturn this.eventInstancesToFootprints(eventInstances);\n\t\t}\n\t}\n\telse if (constraintVal != null) { // an ID\n\t\teventInstances = this.eventManager.getEventInstancesWithId(constraintVal);\n\n\t\treturn this.eventInstancesToFootprints(eventInstances);\n\t}\n};\n\n\n// conversion util\nCalendar.prototype.eventInstancesToFootprints = function(eventInstances) {\n\treturn eventFootprintsToComponentFootprints(\n\t\tthis.eventRangesToEventFootprints(\n\t\t\teventInstancesToEventRanges(eventInstances)\n\t\t)\n\t);\n};\n\n\n// Overlap\n// ------------------------------------------------------------------------------------------------\n\n\nCalendar.prototype.collectOverlapEventFootprints = function(peerEventFootprints, targetFootprint) {\n\tvar overlapEventFootprints = [];\n\tvar i;\n\n\tfor (i = 0; i < peerEventFootprints.length; i++) {\n\t\tif (\n\t\t\tthis.footprintsIntersect(\n\t\t\t\ttargetFootprint,\n\t\t\t\tpeerEventFootprints[i].componentFootprint\n\t\t\t)\n\t\t) {\n\t\t\toverlapEventFootprints.push(peerEventFootprints[i]);\n\t\t}\n\t}\n\n\treturn overlapEventFootprints;\n};\n\n\n// optional subjectEventInstance\nfunction isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {\n\tvar i;\n\n\tfor (i = 0; i < overlapEventFootprints.length; i++) {\n\t\tif (\n\t\t\t!overlapFunc(\n\t\t\t\toverlapEventFootprints[i].eventInstance.toLegacy(),\n\t\t\t\tsubjectEventInstance ? subjectEventInstance.toLegacy() : null\n\t\t\t)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n\nfunction isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {\n\tvar subjectLegacyInstance = subjectEventInstance.toLegacy();\n\tvar i;\n\tvar overlapEventInstance;\n\tvar overlapEventDef;\n\tvar overlapVal;\n\n\tfor (i = 0; i < overlapEventFootprints.length; i++) {\n\t\toverlapEventInstance = overlapEventFootprints[i].eventInstance;\n\t\toverlapEventDef = overlapEventInstance.def;\n\n\t\t// don't need to pass in calendar, because don't want to consider global eventOverlap property,\n\t\t// because we already considered that earlier in the process.\n\t\toverlapVal = overlapEventDef.getOverlap();\n\n\t\tif (overlapVal === false) {\n\t\t\treturn false;\n\t\t}\n\t\telse if (typeof overlapVal === 'function') {\n\t\t\tif (\n\t\t\t\t!overlapVal(\n\t\t\t\t\toverlapEventInstance.toLegacy(),\n\t\t\t\t\tsubjectLegacyInstance\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n\n\n// Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints\n// ------------------------------------------------------------------------------------------------\n// NOTE: this might seem like repetitive code with the Grid class, however, this code is related to\n// constraints whereas the Grid code is related to rendering. Each approach might want to convert\n// eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make\n// this more DRY.\n\n\n/*\nReturns false on invalid input.\n*/\nCalendar.prototype.parseEventDefToInstances = function(eventInput) {\n\tvar eventPeriod = this.eventManager.currentPeriod;\n\tvar eventDef = EventDefParser.parse(eventInput, new EventSource(this));\n\n\tif (!eventDef) { // invalid\n\t\treturn false;\n\t}\n\n\tif (eventPeriod) {\n\t\treturn eventDef.buildInstances(eventPeriod.unzonedRange);\n\t}\n\telse {\n\t\treturn [];\n\t}\n};\n\n\nCalendar.prototype.eventRangesToEventFootprints = function(eventRanges) {\n\tvar i;\n\tvar eventFootprints = [];\n\n\tfor (i = 0; i < eventRanges.length; i++) {\n\t\teventFootprints.push.apply(eventFootprints, // append\n\t\t\tthis.eventRangeToEventFootprints(eventRanges[i])\n\t\t);\n\t}\n\n\treturn eventFootprints;\n};\n\n\n/*\nTODO: somehow more DRY with Grid::eventRangeToEventFootprints\n*/\nCalendar.prototype.eventRangeToEventFootprints = function(eventRange) {\n\treturn [\n\t\tnew EventFootprint(\n\t\t\tnew ComponentFootprint(\n\t\t\t\teventRange.unzonedRange,\n\t\t\t\teventRange.eventDef.isAllDay()\n\t\t\t),\n\t\t\teventRange.eventDef,\n\t\t\teventRange.eventInstance // might not exist\n\t\t)\n\t];\n};\n\n\n/*\nParses footprints directly.\nVery similar to EventDateProfile::parse :(\n*/\nCalendar.prototype.parseFootprints = function(rawInput) {\n\tvar start, end;\n\n\tif (rawInput.start) {\n\t\tstart = this.moment(rawInput.start);\n\n\t\tif (!start.isValid()) {\n\t\t\tstart = null;\n\t\t}\n\t}\n\n\tif (rawInput.end) {\n\t\tend = this.moment(rawInput.end);\n\n\t\tif (!end.isValid()) {\n\t\t\tend = null;\n\t\t}\n\t}\n\n\treturn [\n\t\tnew ComponentFootprint(\n\t\t\tnew UnzonedRange(start, end),\n\t\t\t(start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay\n\t\t)\n\t];\n};\n\n\n// Footprint Utils\n// ----------------------------------------------------------------------------------------\n\n\nCalendar.prototype.footprintContainsFootprint = function(outerFootprint, innerFootprint) {\n\treturn outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);\n};\n\n\nCalendar.prototype.footprintsIntersect = function(footprint0, footprint1) {\n\treturn footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);\n};\n\n;;\n\nCalendar.mixin({\n\n\t// Sources\n\t// ------------------------------------------------------------------------------------\n\n\n\tgetEventSources: function() {\n\t\treturn this.eventManager.otherSources.slice(); // clone\n\t},\n\n\n\tgetEventSourceById: function(id) {\n\t\treturn this.eventManager.getSourceById(\n\t\t\tEventSource.normalizeId(id)\n\t\t);\n\t},\n\n\n\taddEventSource: function(sourceInput) {\n\t\tvar source = EventSourceParser.parse(sourceInput, this);\n\n\t\tif (source) {\n\t\t\tthis.eventManager.addSource(source);\n\t\t}\n\t},\n\n\n\tremoveEventSources: function(sourceMultiQuery) {\n\t\tvar eventManager = this.eventManager;\n\t\tvar sources;\n\t\tvar i;\n\n\t\tif (sourceMultiQuery == null) {\n\t\t\tthis.eventManager.removeAllSources();\n\t\t}\n\t\telse {\n\t\t\tsources = eventManager.multiQuerySources(sourceMultiQuery);\n\n\t\t\teventManager.freeze();\n\n\t\t\tfor (i = 0; i < sources.length; i++) {\n\t\t\t\teventManager.removeSource(sources[i]);\n\t\t\t}\n\n\t\t\teventManager.thaw();\n\t\t}\n\t},\n\n\n\tremoveEventSource: function(sourceQuery) {\n\t\tvar eventManager = this.eventManager;\n\t\tvar sources = eventManager.querySources(sourceQuery);\n\t\tvar i;\n\n\t\teventManager.freeze();\n\n\t\tfor (i = 0; i < sources.length; i++) {\n\t\t\teventManager.removeSource(sources[i]);\n\t\t}\n\n\t\teventManager.thaw();\n\t},\n\n\n\trefetchEventSources: function(sourceMultiQuery) {\n\t\tvar eventManager = this.eventManager;\n\t\tvar sources = eventManager.multiQuerySources(sourceMultiQuery);\n\t\tvar i;\n\n\t\teventManager.freeze();\n\n\t\tfor (i = 0; i < sources.length; i++) {\n\t\t\teventManager.refetchSource(sources[i]);\n\t\t}\n\n\t\teventManager.thaw();\n\t},\n\n\n\t// Events\n\t// ------------------------------------------------------------------------------------\n\n\n\trefetchEvents: function() {\n\t\tthis.eventManager.refetchAllSources();\n\t},\n\n\n\trenderEvents: function(eventInputs, isSticky) {\n\t\tthis.eventManager.freeze();\n\n\t\tfor (var i = 0; i < eventInputs.length; i++) {\n\t\t\tthis.renderEvent(eventInputs[i], isSticky);\n\t\t}\n\n\t\tthis.eventManager.thaw();\n\t},\n\n\n\trenderEvent: function(eventInput, isSticky) {\n\t\tvar eventManager = this.eventManager;\n\t\tvar eventDef = EventDefParser.parse(\n\t\t\teventInput,\n\t\t\teventInput.source || eventManager.stickySource\n\t\t);\n\n\t\tif (eventDef) {\n\t\t\teventManager.addEventDef(eventDef, isSticky);\n\t\t}\n\t},\n\n\n\t// legacyQuery operates on legacy event instance objects\n\tremoveEvents: function(legacyQuery) {\n\t\tvar eventManager = this.eventManager;\n\t\tvar eventInstances = eventManager.getEventInstances();\n\t\tvar legacyInstances;\n\t\tvar idMap = {};\n\t\tvar eventDef;\n\t\tvar i;\n\n\t\tif (legacyQuery == null) { // shortcut for removing all\n\t\t\teventManager.removeAllEventDefs();\n\t\t}\n\t\telse {\n\t\t\tlegacyInstances = eventInstances.map(function(eventInstance) {\n\t\t\t\treturn eventInstance.toLegacy();\n\t\t\t});\n\n\t\t\tlegacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery);\n\n\t\t\t// compute unique IDs\n\t\t\tfor (i = 0; i < legacyInstances.length; i++) {\n\t\t\t\teventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);\n\t\t\t\tidMap[eventDef.id] = true;\n\t\t\t}\n\n\t\t\teventManager.freeze();\n\n\t\t\tfor (i in idMap) { // reuse `i` as an \"id\"\n\t\t\t\teventManager.removeEventDefsById(i);\n\t\t\t}\n\n\t\t\teventManager.thaw();\n\t\t}\n\t},\n\n\n\t// legacyQuery operates on legacy event instance objects\n\tclientEvents: function(legacyQuery) {\n\t\tvar eventInstances = this.eventManager.getEventInstances();\n\t\tvar legacyEventInstances = eventInstances.map(function(eventInstance) {\n\t\t\treturn eventInstance.toLegacy();\n\t\t});\n\n\t\treturn filterLegacyEventInstances(legacyEventInstances, legacyQuery);\n\t},\n\n\n\tupdateEvents: function(eventPropsArray) {\n\t\tthis.eventManager.freeze();\n\n\t\tfor (var i = 0; i < eventPropsArray.length; i++) {\n\t\t\tthis.updateEvent(eventPropsArray[i]);\n\t\t}\n\n\t\tthis.eventManager.thaw();\n\t},\n\n\n\tupdateEvent: function(eventProps) {\n\t\tvar eventDef = this.eventManager.getEventDefByUid(eventProps._id);\n\t\tvar eventInstance;\n\t\tvar eventDefMutation;\n\n\t\tif (eventDef instanceof SingleEventDef) {\n\t\t\teventInstance = eventDef.buildInstance();\n\n\t\t\teventDefMutation = EventDefMutation.createFromRawProps(\n\t\t\t\teventInstance,\n\t\t\t\teventProps, // raw props\n\t\t\t\tnull // largeUnit -- who uses it?\n\t\t\t);\n\n\t\t\tthis.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release\n\t\t}\n\t}\n\n});\n\n\nfunction filterLegacyEventInstances(legacyEventInstances, legacyQuery) {\n\tif (legacyQuery == null) {\n\t\treturn legacyEventInstances;\n\t}\n\telse if ($.isFunction(legacyQuery)) {\n\t\treturn legacyEventInstances.filter(legacyQuery);\n\t}\n\telse { // an event ID\n\t\tlegacyQuery += ''; // normalize to string\n\n\t\treturn legacyEventInstances.filter(function(legacyEventInstance) {\n\t\t\t// soft comparison because id not be normalized to string\n\t\t\treturn legacyEventInstance.id == legacyQuery;\n\t\t});\n\t}\n}\n\n;;\n\nCalendar.defaults = {\n\n\ttitleRangeSeparator: ' \\u2013 ', // en dash\n\tmonthYearFormat: 'MMMM YYYY', // required for en. other locales rely on datepicker computable option\n\n\tdefaultTimedEventDuration: '02:00:00',\n\tdefaultAllDayEventDuration: { days: 1 },\n\tforceEventDuration: false,\n\tnextDayThreshold: '09:00:00', // 9am\n\n\t// display\n\tdefaultView: 'month',\n\taspectRatio: 1.35,\n\theader: {\n\t\tleft: 'title',\n\t\tcenter: '',\n\t\tright: 'today prev,next'\n\t},\n\tweekends: true,\n\tweekNumbers: false,\n\n\tweekNumberTitle: 'W',\n\tweekNumberCalculation: 'local',\n\t\n\t//editable: false,\n\n\t//nowIndicator: false,\n\n\tscrollTime: '06:00:00',\n\tminTime: '00:00:00',\n\tmaxTime: '24:00:00',\n\tshowNonCurrentDates: true,\n\t\n\t// event ajax\n\tlazyFetching: true,\n\tstartParam: 'start',\n\tendParam: 'end',\n\ttimezoneParam: 'timezone',\n\n\ttimezone: false,\n\n\t//allDayDefault: undefined,\n\n\t// locale\n\tisRTL: false,\n\tbuttonText: {\n\t\tprev: \"prev\",\n\t\tnext: \"next\",\n\t\tprevYear: \"prev year\",\n\t\tnextYear: \"next year\",\n\t\tyear: 'year', // TODO: locale files need to specify this\n\t\ttoday: 'today',\n\t\tmonth: 'month',\n\t\tweek: 'week',\n\t\tday: 'day'\n\t},\n\t//buttonIcons: null,\n\n\tallDayText: 'all-day',\n\t\n\t// jquery-ui theming\n\ttheme: false,\n\t//themeButtonIcons: null,\n\n\t//eventResizableFromStart: false,\n\tdragOpacity: .75,\n\tdragRevertDuration: 500,\n\tdragScroll: true,\n\t\n\t//selectable: false,\n\tunselectAuto: true,\n\t//selectMinDistance: 0,\n\t\n\tdropAccept: '*',\n\n\teventOrder: 'title',\n\t//eventRenderWait: null,\n\n\teventLimit: false,\n\teventLimitText: 'more',\n\teventLimitClick: 'popover',\n\tdayPopoverFormat: 'LL',\n\t\n\thandleWindowResize: true,\n\twindowResizeDelay: 100, // milliseconds before an updateSize happens\n\n\tlongPressDelay: 1000\n\t\n};\n\n\nCalendar.englishDefaults = { // used by locale.js\n\tdayPopoverFormat: 'dddd, MMMM D'\n};\n\n\nCalendar.rtlDefaults = { // right-to-left defaults\n\theader: { // TODO: smarter solution (first/center/last ?)\n\t\tleft: 'next,prev today',\n\t\tcenter: '',\n\t\tright: 'title'\n\t},\n\tbuttonIcons: {\n\t\tprev: 'right-single-arrow',\n\t\tnext: 'left-single-arrow',\n\t\tprevYear: 'right-double-arrow',\n\t\tnextYear: 'left-double-arrow'\n\t},\n\tthemeButtonIcons: {\n\t\tprev: 'circle-triangle-e',\n\t\tnext: 'circle-triangle-w',\n\t\tnextYear: 'seek-prev',\n\t\tprevYear: 'seek-next'\n\t}\n};\n\n;;\n\nvar localeOptionHash = FC.locales = {}; // initialize and expose\n\n\n// TODO: document the structure and ordering of a FullCalendar locale file\n\n\n// Initialize jQuery UI datepicker translations while using some of the translations\n// Will set this as the default locales for datepicker.\nFC.datepickerLocale = function(localeCode, dpLocaleCode, dpOptions) {\n\n\t// get the FullCalendar internal option hash for this locale. create if necessary\n\tvar fcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {});\n\n\t// transfer some simple options from datepicker to fc\n\tfcOptions.isRTL = dpOptions.isRTL;\n\tfcOptions.weekNumberTitle = dpOptions.weekHeader;\n\n\t// compute some more complex options from datepicker\n\t$.each(dpComputableOptions, function(name, func) {\n\t\tfcOptions[name] = func(dpOptions);\n\t});\n\n\t// is jQuery UI Datepicker is on the page?\n\tif ($.datepicker) {\n\n\t\t// Register the locale data.\n\t\t// FullCalendar and MomentJS use locale codes like \"pt-br\" but Datepicker\n\t\t// does it like \"pt-BR\" or if it doesn't have the locale, maybe just \"pt\".\n\t\t// Make an alias so the locale can be referenced either way.\n\t\t$.datepicker.regional[dpLocaleCode] =\n\t\t\t$.datepicker.regional[localeCode] = // alias\n\t\t\t\tdpOptions;\n\n\t\t// Alias 'en' to the default locale data. Do this every time.\n\t\t$.datepicker.regional.en = $.datepicker.regional[''];\n\n\t\t// Set as Datepicker's global defaults.\n\t\t$.datepicker.setDefaults(dpOptions);\n\t}\n};\n\n\n// Sets FullCalendar-specific translations. Will set the locales as the global default.\nFC.locale = function(localeCode, newFcOptions) {\n\tvar fcOptions;\n\tvar momOptions;\n\n\t// get the FullCalendar internal option hash for this locale. create if necessary\n\tfcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {});\n\n\t// provided new options for this locales? merge them in\n\tif (newFcOptions) {\n\t\tfcOptions = localeOptionHash[localeCode] = mergeOptions([ fcOptions, newFcOptions ]);\n\t}\n\n\t// compute locale options that weren't defined.\n\t// always do this. newFcOptions can be undefined when initializing from i18n file,\n\t// so no way to tell if this is an initialization or a default-setting.\n\tmomOptions = getMomentLocaleData(localeCode); // will fall back to en\n\t$.each(momComputableOptions, function(name, func) {\n\t\tif (fcOptions[name] == null) {\n\t\t\tfcOptions[name] = func(momOptions, fcOptions);\n\t\t}\n\t});\n\n\t// set it as the default locale for FullCalendar\n\tCalendar.defaults.locale = localeCode;\n};\n\n\n// NOTE: can't guarantee any of these computations will run because not every locale has datepicker\n// configs, so make sure there are English fallbacks for these in the defaults file.\nvar dpComputableOptions = {\n\n\tbuttonText: function(dpOptions) {\n\t\treturn {\n\t\t\t// the translations sometimes wrongly contain HTML entities\n\t\t\tprev: stripHtmlEntities(dpOptions.prevText),\n\t\t\tnext: stripHtmlEntities(dpOptions.nextText),\n\t\t\ttoday: stripHtmlEntities(dpOptions.currentText)\n\t\t};\n\t},\n\n\t// Produces format strings like \"MMMM YYYY\" -> \"September 2014\"\n\tmonthYearFormat: function(dpOptions) {\n\t\treturn dpOptions.showMonthAfterYear ?\n\t\t\t'YYYY[' + dpOptions.yearSuffix + '] MMMM' :\n\t\t\t'MMMM YYYY[' + dpOptions.yearSuffix + ']';\n\t}\n\n};\n\nvar momComputableOptions = {\n\n\t// Produces format strings like \"ddd M/D\" -> \"Fri 9/15\"\n\tdayOfMonthFormat: function(momOptions, fcOptions) {\n\t\tvar format = momOptions.longDateFormat('l'); // for the format like \"M/D/YYYY\"\n\n\t\t// strip the year off the edge, as well as other misc non-whitespace chars\n\t\tformat = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\n\n\t\tif (fcOptions.isRTL) {\n\t\t\tformat += ' ddd'; // for RTL, add day-of-week to end\n\t\t}\n\t\telse {\n\t\t\tformat = 'ddd ' + format; // for LTR, add day-of-week to beginning\n\t\t}\n\t\treturn format;\n\t},\n\n\t// Produces format strings like \"h:mma\" -> \"6:00pm\"\n\tmediumTimeFormat: function(momOptions) { // can't be called `timeFormat` because collides with option\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \"h(:mm)a\" -> \"6pm\" / \"6:30pm\"\n\tsmallTimeFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(':mm', '(:mm)')\n\t\t\t.replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\n\t\t\t.replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \"h(:mm)t\" -> \"6p\" / \"6:30p\"\n\textraSmallTimeFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(':mm', '(:mm)')\n\t\t\t.replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\n\t\t\t.replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \"ha\" / \"H\" -> \"6pm\" / \"18\"\n\thourFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(':mm', '')\n\t\t\t.replace(/(\\Wmm)$/, '') // like above, but for foreign locales\n\t\t\t.replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n\t},\n\n\t// Produces format strings like \"h:mm\" -> \"6:30\" (with no AM/PM)\n\tnoMeridiemTimeFormat: function(momOptions) {\n\t\treturn momOptions.longDateFormat('LT')\n\t\t\t.replace(/\\s*a$/i, ''); // remove trailing AM/PM\n\t}\n\n};\n\n\n// options that should be computed off live calendar options (considers override options)\n// TODO: best place for this? related to locale?\n// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it\nvar instanceComputableOptions = {\n\n\t// Produces format strings for results like \"Mo 16\"\n\tsmallDayDateFormat: function(options) {\n\t\treturn options.isRTL ?\n\t\t\t'D dd' :\n\t\t\t'dd D';\n\t},\n\n\t// Produces format strings for results like \"Wk 5\"\n\tweekFormat: function(options) {\n\t\treturn options.isRTL ?\n\t\t\t'w[ ' + options.weekNumberTitle + ']' :\n\t\t\t'[' + options.weekNumberTitle + ' ]w';\n\t},\n\n\t// Produces format strings for results like \"Wk5\"\n\tsmallWeekFormat: function(options) {\n\t\treturn options.isRTL ?\n\t\t\t'w[' + options.weekNumberTitle + ']' :\n\t\t\t'[' + options.weekNumberTitle + ']w';\n\t}\n\n};\n\n// TODO: make these computable properties in optionsModel\nfunction populateInstanceComputableOptions(options) {\n\t$.each(instanceComputableOptions, function(name, func) {\n\t\tif (options[name] == null) {\n\t\t\toptions[name] = func(options);\n\t\t}\n\t});\n}\n\n\n// Returns moment's internal locale data. If doesn't exist, returns English.\nfunction getMomentLocaleData(localeCode) {\n\treturn moment.localeData(localeCode) || moment.localeData('en');\n}\n\n\n// Initialize English by forcing computation of moment-derived options.\n// Also, sets it as the default.\nFC.locale('en', Calendar.englishDefaults);\n\n;;\n\nvar UnzonedRange = FC.UnzonedRange = Class.extend({\n\n\tstartMs: null, // if null, no start constraint\n\tendMs: null, // if null, no end constraint\n\n\t// TODO: move these into footprint.\n\t// Especially, doesn't make sense for null startMs/endMs.\n\tisStart: true,\n\tisEnd: true,\n\n\tconstructor: function(startInput, endInput) {\n\n\t\tif (moment.isMoment(startInput)) {\n\t\t\tstartInput = startInput.clone().stripZone();\n\t\t}\n\n\t\tif (moment.isMoment(endInput)) {\n\t\t\tendInput = endInput.clone().stripZone();\n\t\t}\n\n\t\tif (startInput) {\n\t\t\tthis.startMs = startInput.valueOf();\n\t\t}\n\n\t\tif (endInput) {\n\t\t\tthis.endMs = endInput.valueOf();\n\t\t}\n\t},\n\n\tintersect: function(otherRange) {\n\t\tvar startMs = this.startMs;\n\t\tvar endMs = this.endMs;\n\t\tvar newRange = null;\n\n\t\tif (otherRange.startMs !== null) {\n\t\t\tif (startMs === null) {\n\t\t\t\tstartMs = otherRange.startMs;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstartMs = Math.max(startMs, otherRange.startMs);\n\t\t\t}\n\t\t}\n\n\t\tif (otherRange.endMs !== null) {\n\t\t\tif (endMs === null) {\n\t\t\t\tendMs = otherRange.endMs;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tendMs = Math.min(endMs, otherRange.endMs);\n\t\t\t}\n\t\t}\n\n\t\tif (startMs === null || endMs === null || startMs < endMs) {\n\t\t\tnewRange = new UnzonedRange(startMs, endMs);\n\t\t\tnewRange.isStart = this.isStart && startMs === this.startMs;\n\t\t\tnewRange.isEnd = this.isEnd && endMs === this.endMs;\n\t\t}\n\n\t\treturn newRange;\n\t},\n\n\n\tintersectsWith: function(otherRange) {\n\t\treturn (this.endMs === null || otherRange.startMs === null || this.endMs > otherRange.startMs) &&\n\t\t\t(this.startMs === null || otherRange.endMs === null || this.startMs < otherRange.endMs);\n\t},\n\n\n\tcontainsRange: function(innerRange) {\n\t\treturn (this.startMs === null || (innerRange.startMs !== null && innerRange.startMs >= this.startMs)) &&\n\t\t\t(this.endMs === null || (innerRange.endMs !== null && innerRange.endMs <= this.endMs));\n\t},\n\n\n\t// `date` can be a moment, a Date, or a millisecond time.\n\tcontainsDate: function(date) {\n\t\tvar ms = date.valueOf();\n\n\t\treturn (this.startMs === null || ms >= this.startMs) &&\n\t\t\t(this.endMs === null || ms < this.endMs);\n\t},\n\n\n\t// If the given date is not within the given range, move it inside.\n\t// (If it's past the end, make it one millisecond before the end).\n\t// `date` can be a moment, a Date, or a millisecond time.\n\t// Returns a MS-time.\n\tconstrainDate: function(date) {\n\t\tvar ms = date.valueOf();\n\n\t\tif (this.startMs !== null && ms < this.startMs) {\n\t\t\tms = this.startMs;\n\t\t}\n\n\t\tif (this.endMs !== null && ms >= this.endMs) {\n\t\t\tms = this.endMs - 1;\n\t\t}\n\n\t\treturn ms;\n\t},\n\n\n\tequals: function(otherRange) {\n\t\treturn this.startMs === otherRange.startMs && this.endMs === otherRange.endMs;\n\t},\n\n\n\tclone: function() {\n\t\tvar range = new UnzonedRange(this.startMs, this.endMs);\n\n\t\trange.isStart = this.isStart;\n\t\trange.isEnd = this.isEnd;\n\n\t\treturn range;\n\t},\n\n\n\t// Returns an ambig-zoned moment from startMs.\n\t// BEWARE: returned moment is not localized.\n\t// Formatting and start-of-week will be default.\n\tgetStart: function() {\n\t\tif (this.startMs !== null) {\n\t\t\treturn FC.moment.utc(this.startMs).stripZone();\n\t\t}\n\t},\n\n\t// Returns an ambig-zoned moment from startMs.\n\t// BEWARE: returned moment is not localized.\n\t// Formatting and start-of-week will be default.\n\tgetEnd: function() {\n\t\tif (this.endMs !== null) {\n\t\t\treturn FC.moment.utc(this.endMs).stripZone();\n\t\t}\n\t}\n\n});\n\n\n/*\nSIDEEFFECT: will mutate eventRanges.\nWill return a new array result.\nOnly works for non-open-ended ranges.\n*/\nfunction invertUnzonedRanges(ranges, constraintRange) {\n\tvar invertedRanges = [];\n\tvar startMs = constraintRange.startMs; // the end of the previous range. the start of the new range\n\tvar i;\n\tvar dateRange;\n\n\t// ranges need to be in order. required for our date-walking algorithm\n\tranges.sort(compareUnzonedRanges);\n\n\tfor (i = 0; i < ranges.length; i++) {\n\t\tdateRange = ranges[i];\n\n\t\t// add the span of time before the event (if there is any)\n\t\tif (dateRange.startMs > startMs) { // compare millisecond time (skip any ambig logic)\n\t\t\tinvertedRanges.push(\n\t\t\t\tnew UnzonedRange(startMs, dateRange.startMs)\n\t\t\t);\n\t\t}\n\n\t\tif (dateRange.endMs > startMs) {\n\t\t\tstartMs = dateRange.endMs;\n\t\t}\n\t}\n\n\t// add the span of time after the last event (if there is any)\n\tif (startMs < constraintRange.endMs) { // compare millisecond time (skip any ambig logic)\n\t\tinvertedRanges.push(\n\t\t\tnew UnzonedRange(startMs, constraintRange.endMs)\n\t\t);\n\t}\n\n\treturn invertedRanges;\n}\n\n\n/*\nOnly works for non-open-ended ranges.\n*/\nfunction compareUnzonedRanges(range1, range2) {\n\treturn range1.startMs - range2.startMs; // earlier ranges go first\n}\n\n;;\n\n/*\nMeant to be immutable\n*/\nvar ComponentFootprint = FC.ComponentFootprint = Class.extend({\n\n\tunzonedRange: null,\n\tisAllDay: false, // component can choose to ignore this\n\n\n\tconstructor: function(unzonedRange, isAllDay) {\n\t\tthis.unzonedRange = unzonedRange;\n\t\tthis.isAllDay = isAllDay;\n\t},\n\n\n\t/*\n\tOnly works for non-open-ended ranges.\n\t*/\n\ttoLegacy: function(calendar) {\n\t\treturn {\n\t\t\tstart: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay),\n\t\t\tend: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay)\n\t\t};\n\t}\n\n});\n\n;;\n\nvar EventManager = Class.extend(EmitterMixin, ListenerMixin, {\n\n\tcurrentPeriod: null,\n\n\tcalendar: null,\n\tstickySource: null,\n\totherSources: null, // does not include sticky source\n\n\n\tconstructor: function(calendar) {\n\t\tthis.calendar = calendar;\n\t\tthis.stickySource = new ArrayEventSource(calendar);\n\t\tthis.otherSources = [];\n\t},\n\n\n\trequestEvents: function(start, end, timezone, force) {\n\t\tif (\n\t\t\tforce ||\n\t\t\t!this.currentPeriod ||\n\t\t\t!this.currentPeriod.isWithinRange(start, end) ||\n\t\t\ttimezone !== this.currentPeriod.timezone\n\t\t) {\n\t\t\tthis.setPeriod( // will change this.currentPeriod\n\t\t\t\tnew EventPeriod(start, end, timezone)\n\t\t\t);\n\t\t}\n\n\t\treturn this.currentPeriod.whenReleased();\n\t},\n\n\n\t// Source Adding/Removing\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\taddSource: function(eventSource) {\n\t\tthis.otherSources.push(eventSource);\n\n\t\tif (this.currentPeriod) {\n\t\t\tthis.currentPeriod.requestSource(eventSource); // might release\n\t\t}\n\t},\n\n\n\tremoveSource: function(doomedSource) {\n\t\tremoveExact(this.otherSources, doomedSource);\n\n\t\tif (this.currentPeriod) {\n\t\t\tthis.currentPeriod.purgeSource(doomedSource); // might release\n\t\t}\n\t},\n\n\n\tremoveAllSources: function() {\n\t\tthis.otherSources = [];\n\n\t\tif (this.currentPeriod) {\n\t\t\tthis.currentPeriod.purgeAllSources(); // might release\n\t\t}\n\t},\n\n\n\t// Source Refetching\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\trefetchSource: function(eventSource) {\n\t\tvar currentPeriod = this.currentPeriod;\n\n\t\tif (currentPeriod) {\n\t\t\tcurrentPeriod.freeze();\n\t\t\tcurrentPeriod.purgeSource(eventSource);\n\t\t\tcurrentPeriod.requestSource(eventSource);\n\t\t\tcurrentPeriod.thaw();\n\t\t}\n\t},\n\n\n\trefetchAllSources: function() {\n\t\tvar currentPeriod = this.currentPeriod;\n\n\t\tif (currentPeriod) {\n\t\t\tcurrentPeriod.freeze();\n\t\t\tcurrentPeriod.purgeAllSources();\n\t\t\tcurrentPeriod.requestSources(this.getSources());\n\t\t\tcurrentPeriod.thaw();\n\t\t}\n\t},\n\n\n\t// Source Querying\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tgetSources: function() {\n\t\treturn [ this.stickySource ].concat(this.otherSources);\n\t},\n\n\n\t// like querySources, but accepts multple match criteria (like multiple IDs)\n\tmultiQuerySources: function(matchInputs) {\n\n\t\t// coerce into an array\n\t\tif (!matchInputs) {\n\t\t\tmatchInputs = [];\n\t\t}\n\t\telse if (!$.isArray(matchInputs)) {\n\t\t\tmatchInputs = [ matchInputs ];\n\t\t}\n\n\t\tvar matchingSources = [];\n\t\tvar i;\n\n\t\t// resolve raw inputs to real event source objects\n\t\tfor (i = 0; i < matchInputs.length; i++) {\n\t\t\tmatchingSources.push.apply( // append\n\t\t\t\tmatchingSources,\n\t\t\t\tthis.querySources(matchInputs[i])\n\t\t\t);\n\t\t}\n\n\t\treturn matchingSources;\n\t},\n\n\n\t// matchInput can either by a real event source object, an ID, or the function/URL for the source.\n\t// returns an array of matching source objects.\n\tquerySources: function(matchInput) {\n\t\tvar sources = this.otherSources;\n\t\tvar i, source;\n\n\t\t// given a proper event source object\n\t\tfor (i = 0; i < sources.length; i++) {\n\t\t\tsource = sources[i];\n\n\t\t\tif (source === matchInput) {\n\t\t\t\treturn [ source ];\n\t\t\t}\n\t\t}\n\n\t\t// an ID match\n\t\tsource = this.getSourceById(EventSource.normalizeId(matchInput));\n\t\tif (source) {\n\t\t\treturn [ source ];\n\t\t}\n\n\t\t// parse as an event source\n\t\tmatchInput = EventSourceParser.parse(matchInput, this.calendar);\n\t\tif (matchInput) {\n\n\t\t\treturn $.grep(sources, function(source) {\n\t\t\t\treturn isSourcesEquivalent(matchInput, source);\n\t\t\t});\n\t\t}\n\t},\n\n\n\t/*\n\tID assumed to already be normalized\n\t*/\n\tgetSourceById: function(id) {\n\t\treturn $.grep(this.otherSources, function(source) {\n\t\t\treturn source.id && source.id === id;\n\t\t})[0];\n\t},\n\n\n\t// Event-Period\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tsetPeriod: function(eventPeriod) {\n\t\tif (this.currentPeriod) {\n\t\t\tthis.unbindPeriod(this.currentPeriod);\n\t\t\tthis.currentPeriod = null;\n\t\t}\n\n\t\tthis.currentPeriod = eventPeriod;\n\t\tthis.bindPeriod(eventPeriod);\n\n\t\teventPeriod.requestSources(this.getSources());\n\t},\n\n\n\tbindPeriod: function(eventPeriod) {\n\t\tthis.listenTo(eventPeriod, 'release', function(eventsPayload) {\n\t\t\tthis.trigger('release', eventsPayload);\n\t\t});\n\t},\n\n\n\tunbindPeriod: function(eventPeriod) {\n\t\tthis.stopListeningTo(eventPeriod);\n\t},\n\n\n\t// Event Getting/Adding/Removing\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tgetEventDefByUid: function(uid) {\n\t\tif (this.currentPeriod) {\n\t\t\treturn this.currentPeriod.getEventDefByUid(uid);\n\t\t}\n\t},\n\n\n\taddEventDef: function(eventDef, isSticky) {\n\t\tif (isSticky) {\n\t\t\tthis.stickySource.addEventDef(eventDef);\n\t\t}\n\n\t\tif (this.currentPeriod) {\n\t\t\tthis.currentPeriod.addEventDef(eventDef); // might release\n\t\t}\n\t},\n\n\n\tremoveEventDefsById: function(eventId) {\n\t\tthis.getSources().forEach(function(eventSource) {\n\t\t\teventSource.removeEventDefsById(eventId);\n\t\t});\n\n\t\tif (this.currentPeriod) {\n\t\t\tthis.currentPeriod.removeEventDefsById(eventId); // might release\n\t\t}\n\t},\n\n\n\tremoveAllEventDefs: function() {\n\t\tthis.getSources().forEach(function(eventSource) {\n\t\t\teventSource.removeAllEventDefs();\n\t\t});\n\n\t\tif (this.currentPeriod) {\n\t\t\tthis.currentPeriod.removeAllEventDefs();\n\t\t}\n\t},\n\n\n\t// Event Mutating\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\t/*\n\tReturns an undo function.\n\t*/\n\tmutateEventsWithId: function(eventDefId, eventDefMutation) {\n\t\tvar currentPeriod = this.currentPeriod;\n\t\tvar eventDefs;\n\t\tvar undoFuncs = [];\n\n\t\tif (currentPeriod) {\n\n\t\t\tcurrentPeriod.freeze();\n\n\t\t\teventDefs = currentPeriod.getEventDefsById(eventDefId);\n\t\t\teventDefs.forEach(function(eventDef) {\n\t\t\t\t// add/remove esp because id might change\n\t\t\t\tcurrentPeriod.removeEventDef(eventDef);\n\t\t\t\tundoFuncs.push(eventDefMutation.mutateSingle(eventDef));\n\t\t\t\tcurrentPeriod.addEventDef(eventDef);\n\t\t\t});\n\n\t\t\tcurrentPeriod.thaw();\n\n\t\t\treturn function() {\n\t\t\t\tcurrentPeriod.freeze();\n\n\t\t\t\tfor (var i = 0; i < eventDefs.length; i++) {\n\t\t\t\t\tcurrentPeriod.removeEventDef(eventDefs[i]);\n\t\t\t\t\tundoFuncs[i]();\n\t\t\t\t\tcurrentPeriod.addEventDef(eventDefs[i]);\n\t\t\t\t}\n\n\t\t\t\tcurrentPeriod.thaw();\n\t\t\t};\n\t\t}\n\n\t\treturn function() { };\n\t},\n\n\n\t/*\n\tcopies and then mutates\n\t*/\n\tbuildMutatedEventInstanceGroup: function(eventDefId, eventDefMutation) {\n\t\tvar eventDefs = this.getEventDefsById(eventDefId);\n\t\tvar i;\n\t\tvar defCopy;\n\t\tvar allInstances = [];\n\n\t\tfor (i = 0; i < eventDefs.length; i++) {\n\t\t\tdefCopy = eventDefs[i].clone();\n\n\t\t\tif (defCopy instanceof SingleEventDef) {\n\t\t\t\teventDefMutation.mutateSingle(defCopy);\n\n\t\t\t\tallInstances.push.apply(allInstances, // append\n\t\t\t\t\tdefCopy.buildInstances()\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn new EventInstanceGroup(allInstances);\n\t},\n\n\n\t// Freezing\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tfreeze: function() {\n\t\tif (this.currentPeriod) {\n\t\t\tthis.currentPeriod.freeze();\n\t\t}\n\t},\n\n\n\tthaw: function() {\n\t\tif (this.currentPeriod) {\n\t\t\tthis.currentPeriod.thaw();\n\t\t}\n\t}\n\n});\n\n\n// Methods that straight-up query the current EventPeriod for an array of results.\n[\n\t'getEventDefsById',\n\t'getEventInstances',\n\t'getEventInstancesWithId',\n\t'getEventInstancesWithoutId'\n].forEach(function(methodName) {\n\n\tEventManager.prototype[methodName] = function() {\n\t\tvar currentPeriod = this.currentPeriod;\n\n\t\tif (currentPeriod) {\n\t\t\treturn currentPeriod[methodName].apply(currentPeriod, arguments);\n\t\t}\n\n\t\treturn [];\n\t};\n});\n\n\nfunction isSourcesEquivalent(source0, source1) {\n\treturn source0.getPrimitive() == source1.getPrimitive();\n}\n\n;;\n\nvar EventPeriod = Class.extend(EmitterMixin, {\n\n\tstart: null,\n\tend: null,\n\ttimezone: null,\n\n\tunzonedRange: null,\n\n\trequestsByUid: null,\n\tpendingCnt: 0,\n\n\tfreezeDepth: 0,\n\tstuntedReleaseCnt: 0,\n\treleaseCnt: 0,\n\n\teventDefsByUid: null,\n\teventDefsById: null,\n\teventInstanceGroupsById: null,\n\n\n\tconstructor: function(start, end, timezone) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.timezone = timezone;\n\n\t\tthis.unzonedRange = new UnzonedRange(\n\t\t\tstart.clone().stripZone(),\n\t\t\tend.clone().stripZone()\n\t\t);\n\n\t\tthis.requestsByUid = {};\n\t\tthis.eventDefsByUid = {};\n\t\tthis.eventDefsById = {};\n\t\tthis.eventInstanceGroupsById = {};\n\t},\n\n\n\tisWithinRange: function(start, end) {\n\t\t// TODO: use a range util function?\n\t\treturn !start.isBefore(this.start) && !end.isAfter(this.end);\n\t},\n\n\n\t// Requesting and Purging\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\trequestSources: function(sources) {\n\t\tthis.freeze();\n\n\t\tfor (var i = 0; i < sources.length; i++) {\n\t\t\tthis.requestSource(sources[i]);\n\t\t}\n\n\t\tthis.thaw();\n\t},\n\n\n\trequestSource: function(source) {\n\t\tvar _this = this;\n\t\tvar request = { source: source, status: 'pending' };\n\n\t\tthis.requestsByUid[source.uid] = request;\n\t\tthis.pendingCnt += 1;\n\n\t\tsource.fetch(this.start, this.end, this.timezone).then(function(eventDefs) {\n\t\t\tif (request.status !== 'cancelled') {\n\t\t\t\trequest.status = 'completed';\n\t\t\t\trequest.eventDefs = eventDefs;\n\n\t\t\t\t_this.addEventDefs(eventDefs);\n\t\t\t\t_this.pendingCnt--;\n\t\t\t\t_this.tryRelease();\n\t\t\t}\n\t\t}, function() { // failure\n\t\t\tif (request.status !== 'cancelled') {\n\t\t\t\trequest.status = 'failed';\n\n\t\t\t\t_this.pendingCnt--;\n\t\t\t\t_this.tryRelease();\n\t\t\t}\n\t\t});\n\t},\n\n\n\tpurgeSource: function(source) {\n\t\tvar request = this.requestsByUid[source.uid];\n\n\t\tif (request) {\n\t\t\tdelete this.requestsByUid[source.uid];\n\n\t\t\tif (request.status === 'pending') {\n\t\t\t\trequest.status = 'cancelled';\n\t\t\t\tthis.pendingCnt--;\n\t\t\t\tthis.tryRelease();\n\t\t\t}\n\t\t\telse if (request.status === 'completed') {\n\t\t\t\trequest.eventDefs.forEach(this.removeEventDef.bind(this));\n\t\t\t}\n\t\t}\n\t},\n\n\n\tpurgeAllSources: function() {\n\t\tvar requestsByUid = this.requestsByUid;\n\t\tvar uid, request;\n\t\tvar completedCnt = 0;\n\n\t\tfor (uid in requestsByUid) {\n\t\t\trequest = requestsByUid[uid];\n\n\t\t\tif (request.status === 'pending') {\n\t\t\t\trequest.status = 'cancelled';\n\t\t\t}\n\t\t\telse if (request.status === 'completed') {\n\t\t\t\tcompletedCnt++;\n\t\t\t}\n\t\t}\n\n\t\tthis.requestsByUid = {};\n\t\tthis.pendingCnt = 0;\n\n\t\tif (completedCnt) {\n\t\t\tthis.removeAllEventDefs(); // might release\n\t\t}\n\t},\n\n\n\t// Event Definitions\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tgetEventDefByUid: function(eventDefUid) {\n\t\treturn this.eventDefsByUid[eventDefUid];\n\t},\n\n\n\tgetEventDefsById: function(eventDefId) {\n\t\tvar a = this.eventDefsById[eventDefId];\n\n\t\tif (a) {\n\t\t\treturn a.slice(); // clone\n\t\t}\n\n\t\treturn [];\n\t},\n\n\n\taddEventDefs: function(eventDefs) {\n\t\tfor (var i = 0; i < eventDefs.length; i++) {\n\t\t\tthis.addEventDef(eventDefs[i]);\n\t\t}\n\t},\n\n\n\taddEventDef: function(eventDef) {\n\t\tvar eventDefsById = this.eventDefsById;\n\t\tvar eventDefId = eventDef.id;\n\t\tvar eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);\n\t\tvar eventInstances = eventDef.buildInstances(this.unzonedRange);\n\t\tvar i;\n\n\t\teventDefs.push(eventDef);\n\n\t\tthis.eventDefsByUid[eventDef.uid] = eventDef;\n\n\t\tfor (i = 0; i < eventInstances.length; i++) {\n\t\t\tthis.addEventInstance(eventInstances[i], eventDefId);\n\t\t}\n\t},\n\n\n\tremoveEventDefsById: function(eventDefId) {\n\t\tvar _this = this;\n\n\t\tthis.getEventDefsById(eventDefId).forEach(function(eventDef) {\n\t\t\t_this.removeEventDef(eventDef);\n\t\t});\n\t},\n\n\n\tremoveAllEventDefs: function() {\n\t\tvar isEmpty = $.isEmptyObject(this.eventDefsByUid);\n\n\t\tthis.eventDefsByUid = {};\n\t\tthis.eventDefsById = {};\n\t\tthis.eventInstanceGroupsById = {};\n\n\t\tif (!isEmpty) {\n\t\t\tthis.tryRelease();\n\t\t}\n\t},\n\n\n\tremoveEventDef: function(eventDef) {\n\t\tvar eventDefsById = this.eventDefsById;\n\t\tvar eventDefs = eventDefsById[eventDef.id];\n\n\t\tdelete this.eventDefsByUid[eventDef.uid];\n\n\t\tif (eventDefs) {\n\t\t\tremoveExact(eventDefs, eventDef);\n\n\t\t\tif (!eventDefs.length) {\n\t\t\t\tdelete eventDefsById[eventDef.id];\n\t\t\t}\n\n\t\t\tthis.removeEventInstancesForDef(eventDef);\n\t\t}\n\t},\n\n\n\t// Event Instances\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\tgetEventInstances: function() { // TODO: consider iterator\n\t\tvar eventInstanceGroupsById = this.eventInstanceGroupsById;\n\t\tvar eventInstances = [];\n\t\tvar id;\n\n\t\tfor (id in eventInstanceGroupsById) {\n\t\t\teventInstances.push.apply(eventInstances, // append\n\t\t\t\teventInstanceGroupsById[id].eventInstances\n\t\t\t);\n\t\t}\n\n\t\treturn eventInstances;\n\t},\n\n\n\tgetEventInstancesWithId: function(eventDefId) {\n\t\tvar eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];\n\n\t\tif (eventInstanceGroup) {\n\t\t\treturn eventInstanceGroup.eventInstances.slice(); // clone\n\t\t}\n\n\t\treturn [];\n\t},\n\n\n\tgetEventInstancesWithoutId: function(eventDefId) { // TODO: consider iterator\n\t\tvar eventInstanceGroupsById = this.eventInstanceGroupsById;\n\t\tvar matchingInstances = [];\n\t\tvar id;\n\n\t\tfor (id in eventInstanceGroupsById) {\n\t\t\tif (id !== eventDefId) {\n\t\t\t\tmatchingInstances.push.apply(matchingInstances, // append\n\t\t\t\t\teventInstanceGroupsById[id].eventInstances\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn matchingInstances;\n\t},\n\n\n\taddEventInstance: function(eventInstance, eventDefId) {\n\t\tvar eventInstanceGroupsById = this.eventInstanceGroupsById;\n\t\tvar eventInstanceGroup = eventInstanceGroupsById[eventDefId] ||\n\t\t\t(eventInstanceGroupsById[eventDefId] = new EventInstanceGroup());\n\n\t\teventInstanceGroup.eventInstances.push(eventInstance);\n\n\t\tthis.tryRelease();\n\t},\n\n\n\tremoveEventInstancesForDef: function(eventDef) {\n\t\tvar eventInstanceGroupsById = this.eventInstanceGroupsById;\n\t\tvar eventInstanceGroup = eventInstanceGroupsById[eventDef.id];\n\t\tvar removeCnt;\n\n\t\tif (eventInstanceGroup) {\n\t\t\tremoveCnt = removeMatching(eventInstanceGroup.eventInstances, function(currentEventInstance) {\n\t\t\t\treturn currentEventInstance.def === eventDef;\n\t\t\t});\n\n\t\t\tif (!eventInstanceGroup.eventInstances.length) {\n\t\t\t\tdelete eventInstanceGroupsById[eventDef.id];\n\t\t\t}\n\n\t\t\tif (removeCnt) {\n\t\t\t\tthis.tryRelease();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// Releasing and Freezing\n\t// -----------------------------------------------------------------------------------------------------------------\n\n\n\ttryRelease: function() {\n\t\tif (!this.pendingCnt) {\n\t\t\tif (!this.freezeDepth) {\n\t\t\t\tthis.release();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.stuntedReleaseCnt++;\n\t\t\t}\n\t\t}\n\t},\n\n\n\trelease: function() {\n\t\tthis.releaseCnt++;\n\t\tthis.trigger('release', this.eventInstanceGroupsById);\n\t},\n\n\n\twhenReleased: function() {\n\t\tvar _this = this;\n\n\t\tif (this.releaseCnt) {\n\t\t\treturn Promise.resolve(this.eventInstanceGroupsById);\n\t\t}\n\t\telse {\n\t\t\treturn Promise.construct(function(onResolve) {\n\t\t\t\t_this.one('release', onResolve);\n\t\t\t});\n\t\t}\n\t},\n\n\n\tfreeze: function() {\n\t\tif (!(this.freezeDepth++)) {\n\t\t\tthis.stuntedReleaseCnt = 0;\n\t\t}\n\t},\n\n\n\tthaw: function() {\n\t\tif (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) {\n\t\t\tthis.release();\n\t\t}\n\t}\n\n});\n\n;;\n\nvar EventDefParser = {\n\n\tparse: function(eventInput, source) {\n\t\tif (\n\t\t\tisTimeString(eventInput.start) || moment.isDuration(eventInput.start) ||\n\t\t\tisTimeString(eventInput.end) || moment.isDuration(eventInput.end)\n\t\t) {\n\t\t\treturn RecurringEventDef.parse(eventInput, source);\n\t\t}\n\t\telse {\n\t\t\treturn SingleEventDef.parse(eventInput, source);\n\t\t}\n\t}\n\n};\n\n;;\n\nvar EventDef = FC.EventDef = Class.extend(ParsableModelMixin, {\n\n\tsource: null, // required\n\n\tid: null, // normalized supplied ID\n\trawId: null, // unnormalized supplied ID\n\tuid: null, // internal ID. new ID for every definition\n\n\t// NOTE: eventOrder sorting relies on these\n\ttitle: null,\n\turl: null,\n\trendering: null,\n\tconstraint: null,\n\toverlap: null,\n\teditable: null,\n\tstartEditable: null,\n\tdurationEditable: null,\n\tcolor: null,\n\tbackgroundColor: null,\n\tborderColor: null,\n\ttextColor: null,\n\n\tclassName: null, // an array. TODO: rename to className*s* (API breakage)\n\tmiscProps: null,\n\n\n\tconstructor: function(source) {\n\t\tthis.source = source;\n\t\tthis.className = [];\n\t\tthis.miscProps = {};\n\t},\n\n\n\tisAllDay: function() {\n\t\t// subclasses must implement\n\t},\n\n\n\tbuildInstances: function(unzonedRange) {\n\t\t// subclasses must implement\n\t},\n\n\n\tclone: function() {\n\t\tvar copy = new this.constructor(this.source);\n\n\t\tcopy.id = this.id;\n\t\tcopy.rawId = this.rawId;\n\t\tcopy.uid = this.uid; // not really unique anymore :(\n\n\t\tEventDef.copyVerbatimStandardProps(this, copy);\n\n\t\tcopy.className = this.className; // should clone?\n\t\tcopy.miscProps = $.extend({}, this.miscProps);\n\n\t\treturn copy;\n\t},\n\n\n\thasInverseRendering: function() {\n\t\treturn this.getRendering() === 'inverse-background';\n\t},\n\n\n\thasBgRendering: function() {\n\t\tvar rendering = this.getRendering();\n\n\t\treturn rendering === 'inverse-background' || rendering === 'background';\n\t},\n\n\n\tgetRendering: function() {\n\t\tif (this.rendering != null) {\n\t\t\treturn this.rendering;\n\t\t}\n\n\t\treturn this.source.rendering;\n\t},\n\n\n\tgetConstraint: function() {\n\t\tif (this.constraint != null) {\n\t\t\treturn this.constraint;\n\t\t}\n\n\t\tif (this.source.constraint != null) {\n\t\t\treturn this.source.constraint;\n\t\t}\n\n\t\treturn this.source.calendar.opt('eventConstraint'); // what about View option?\n\t},\n\n\n\tgetOverlap: function() {\n\t\tif (this.overlap != null) {\n\t\t\treturn this.overlap;\n\t\t}\n\n\t\tif (this.source.overlap != null) {\n\t\t\treturn this.source.overlap;\n\t\t}\n\n\t\treturn this.source.calendar.opt('eventOverlap'); // what about View option?\n\t},\n\n\n\tisStartExplicitlyEditable: function() {\n\t\tif (this.startEditable !== null) {\n\t\t\treturn this.startEditable;\n\t\t}\n\n\t\treturn this.source.startEditable;\n\t},\n\n\n\tisDurationExplicitlyEditable: function() {\n\t\tif (this.durationEditable !== null) {\n\t\t\treturn this.durationEditable;\n\t\t}\n\n\t\treturn this.source.durationEditable;\n\t},\n\n\n\tisExplicitlyEditable: function() {\n\t\tif (this.editable !== null) {\n\t\t\treturn this.editable;\n\t\t}\n\n\t\treturn this.source.editable;\n\t},\n\n\n\ttoLegacy: function() {\n\t\tvar obj = $.extend({}, this.miscProps);\n\n\t\tobj._id = this.uid;\n\t\tobj.source = this.source;\n\t\tobj.className = this.className; // should clone?\n\t\tobj.allDay = this.isAllDay();\n\n\t\tif (this.rawId != null) {\n\t\t\tobj.id = this.rawId;\n\t\t}\n\n\t\tEventDef.copyVerbatimStandardProps(this, obj);\n\n\t\treturn obj;\n\t},\n\n\n\tapplyManualRawProps: function(rawProps) {\n\n\t\tif (rawProps.id != null) {\n\t\t\tthis.id = EventDef.normalizeId((this.rawId = rawProps.id));\n\t\t}\n\t\telse {\n\t\t\tthis.id = EventDef.generateId();\n\t\t}\n\n\t\tif (rawProps._id != null) { // accept this prop, even tho somewhat internal\n\t\t\tthis.uid = String(rawProps._id);\n\t\t}\n\t\telse {\n\t\t\tthis.uid = EventDef.generateId();\n\t\t}\n\n\t\t// TODO: converge with EventSource\n\t\tif ($.isArray(rawProps.className)) {\n\t\t\tthis.className = rawProps.className;\n\t\t}\n\t\tif (typeof rawProps.className === 'string') {\n\t\t\tthis.className = rawProps.className.split(/\\s+/);\n\t\t}\n\n\t\treturn true;\n\t},\n\n\n\tapplyOtherRawProps: function(rawProps) {\n\t\tthis.miscProps = rawProps;\n\t}\n\n});\n\n// finish initializing the mixin\nEventDef.allowRawProps = ParsableModelMixin_allowRawProps;\nEventDef.copyVerbatimStandardProps = ParsableModelMixin_copyVerbatimStandardProps;\n\n\n// IDs\n// ---------------------------------------------------------------------------------------------------------------------\n// TODO: converge with EventSource\n\n\nEventDef.uuid = 0;\n\n\nEventDef.normalizeId = function(id) {\n\treturn String(id);\n};\n\n\nEventDef.generateId = function() {\n\treturn '_fc' + (EventDef.uuid++);\n};\n\n\n// Parsing\n// ---------------------------------------------------------------------------------------------------------------------\n\n\nEventDef.allowRawProps({\n\t// not automatically assigned (`false`)\n\t_id: false,\n\tid: false,\n\tclassName: false,\n\tsource: false, // will ignored\n\n\t// automatically assigned (`true`)\n\ttitle: true,\n\turl: true,\n\trendering: true,\n\tconstraint: true,\n\toverlap: true,\n\teditable: true,\n\tstartEditable: true,\n\tdurationEditable: true,\n\tcolor: true,\n\tbackgroundColor: true,\n\tborderColor: true,\n\ttextColor: true\n});\n\n\nEventDef.parse = function(rawInput, source) {\n\tvar def = new this(source);\n\tvar calendarTransform = source.calendar.opt('eventDataTransform');\n\tvar sourceTransform = source.eventDataTransform;\n\n\tif (calendarTransform) {\n\t\trawInput = calendarTransform(rawInput);\n\t}\n\tif (sourceTransform) {\n\t\trawInput = sourceTransform(rawInput);\n\t}\n\n\tif (def.applyRawProps(rawInput)) {\n\t\treturn def;\n\t}\n\n\treturn false;\n};\n\n;;\n\nvar SingleEventDef = EventDef.extend({\n\n\tdateProfile: null,\n\n\n\t/*\n\tWill receive start/end params, but will be ignored.\n\t*/\n\tbuildInstances: function() {\n\t\treturn [ this.buildInstance() ];\n\t},\n\n\n\tbuildInstance: function() {\n\t\treturn new EventInstance(\n\t\t\tthis, // definition\n\t\t\tthis.dateProfile\n\t\t);\n\t},\n\n\n\tisAllDay: function() {\n\t\treturn this.dateProfile.isAllDay();\n\t},\n\n\n\tclone: function() {\n\t\tvar def = EventDef.prototype.clone.call(this);\n\n\t\tdef.dateProfile = this.dateProfile;\n\n\t\treturn def;\n\t},\n\n\n\trezone: function() {\n\t\tvar calendar = this.source.calendar;\n\t\tvar dateProfile = this.dateProfile;\n\n\t\tthis.dateProfile = new EventDateProfile(\n\t\t\tcalendar.moment(dateProfile.start),\n\t\t\tdateProfile.end ? calendar.moment(dateProfile.end) : null,\n\t\t\tcalendar\n\t\t);\n\t},\n\n\n\t/*\n\tNOTE: if super-method fails, should still attempt to apply\n\t*/\n\tapplyManualRawProps: function(rawProps) {\n\t\tvar superSuccess = EventDef.prototype.applyManualRawProps.apply(this, arguments);\n\t\tvar dateProfile = EventDateProfile.parse(rawProps, this.source); // returns null on failure\n\n\t\tif (dateProfile) {\n\t\t\tthis.dateProfile = dateProfile;\n\n\t\t\t// make sure `date` shows up in the legacy event objects as-is\n\t\t\tif (rawProps.date != null) {\n\t\t\t\tthis.miscProps.date = rawProps.date;\n\t\t\t}\n\n\t\t\treturn superSuccess;\n\t\t}\n\t\telse {\n\t\t\treturn false;\n\t\t}\n\t}\n\n});\n\n\n// Parsing\n// ---------------------------------------------------------------------------------------------------------------------\n\n\nSingleEventDef.allowRawProps({ // false = manually process\n\tstart: false,\n\tdate: false, // alias for 'start'\n\tend: false,\n\tallDay: false\n});\n\n;;\n\nvar RecurringEventDef = EventDef.extend({\n\n\tstartTime: null, // duration\n\tendTime: null, // duration, or null\n\tdowHash: null, // object hash, or null\n\n\n\tisAllDay: function() {\n\t\treturn !this.startTime && !this.endTime;\n\t},\n\n\n\tbuildInstances: function(unzonedRange) {\n\t\tvar calendar = this.source.calendar;\n\t\tvar unzonedDate = unzonedRange.getStart();\n\t\tvar unzonedEnd = unzonedRange.getEnd();\n\t\tvar zonedDayStart;\n\t\tvar instanceStart, instanceEnd;\n\t\tvar instances = [];\n\n\t\twhile (unzonedDate.isBefore(unzonedEnd)) {\n\n\t\t\t// if everyday, or this particular day-of-week\n\t\t\tif (!this.dowHash || this.dowHash[unzonedDate.day()]) {\n\n\t\t\t\tzonedDayStart = calendar.applyTimezone(unzonedDate);\n\t\t\t\tinstanceStart = zonedDayStart.clone();\n\t\t\t\tinstanceEnd = null;\n\n\t\t\t\tif (this.startTime) {\n\t\t\t\t\tinstanceStart.time(this.startTime);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tinstanceStart.stripTime();\n\t\t\t\t}\n\n\t\t\t\tif (this.endTime) {\n\t\t\t\t\tinstanceEnd = zonedDayStart.clone().time(this.endTime);\n\t\t\t\t}\n\n\t\t\t\tinstances.push(\n\t\t\t\t\tnew EventInstance(\n\t\t\t\t\t\tthis, // definition\n\t\t\t\t\t\tnew EventDateProfile(instanceStart, instanceEnd, calendar)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tunzonedDate.add(1, 'days');\n\t\t}\n\n\t\treturn instances;\n\t},\n\n\n\tsetDow: function(dowNumbers) {\n\n\t\tif (!this.dowHash) {\n\t\t\tthis.dowHash = {};\n\t\t}\n\n\t\tfor (var i = 0; i < dowNumbers.length; i++) {\n\t\t\tthis.dowHash[dowNumbers[i]] = true;\n\t\t}\n\t},\n\n\n\tclone: function() {\n\t\tvar def = EventDef.prototype.clone.call(this);\n\n\t\tif (def.startTime) {\n\t\t\tdef.startTime = moment.duration(this.startTime);\n\t\t}\n\n\t\tif (def.endTime) {\n\t\t\tdef.endTime = moment.duration(this.endTime);\n\t\t}\n\n\t\tif (this.dowHash) {\n\t\t\tdef.dowHash = $.extend({}, this.dowHash);\n\t\t}\n\n\t\treturn def;\n\t},\n\n\n\t/*\n\tNOTE: if super-method fails, should still attempt to apply\n\t*/\n\tapplyRawProps: function(rawProps) {\n\t\tvar superSuccess = EventDef.prototype.applyRawProps.apply(this, arguments);\n\n\t\tif (rawProps.start) {\n\t\t\tthis.startTime = moment.duration(rawProps.start);\n\t\t}\n\n\t\tif (rawProps.end) {\n\t\t\tthis.endTime = moment.duration(rawProps.end);\n\t\t}\n\n\t\tif (rawProps.dow) {\n\t\t\tthis.setDow(rawProps.dow);\n\t\t}\n\n\t\treturn superSuccess;\n\t}\n\n});\n\n\n// Parsing\n// ---------------------------------------------------------------------------------------------------------------------\n\n\nRecurringEventDef.allowRawProps({ // false = manually process\n\tstart: false,\n\tend: false,\n\tdow: false\n});\n\n;;\n\nvar EventInstance = Class.extend({\n\n\tdef: null, // EventDef\n\tdateProfile: null, // EventDateProfile\n\n\n\tconstructor: function(def, dateProfile) {\n\t\tthis.def = def;\n\t\tthis.dateProfile = dateProfile;\n\t},\n\n\n\ttoLegacy: function() {\n\t\tvar dateProfile = this.dateProfile;\n\t\tvar obj = this.def.toLegacy();\n\n\t\tobj.start = dateProfile.start.clone();\n\t\tobj.end = dateProfile.end ? dateProfile.end.clone() : null;\n\n\t\treturn obj;\n\t}\n\n});\n\n;;\n\n/*\nIt's expected that there will be at least one EventInstance,\nOR that an explicitEventDef is assigned.\n*/\nvar EventInstanceGroup = Class.extend({\n\n\teventInstances: null,\n\texplicitEventDef: null, // optional\n\n\n\tconstructor: function(eventInstances) {\n\t\tthis.eventInstances = eventInstances || [];\n\t},\n\n\n\tgetAllEventRanges: function() {\n\t\treturn eventInstancesToEventRanges(this.eventInstances);\n\t},\n\n\n\tsliceRenderRanges: function(constraintRange) {\n\t\tif (this.isInverse()) {\n\t\t\treturn this.sliceInverseRenderRanges(constraintRange);\n\t\t}\n\t\telse {\n\t\t\treturn this.sliceNormalRenderRanges(constraintRange);\n\t\t}\n\t},\n\n\n\tsliceNormalRenderRanges: function(constraintRange) {\n\t\tvar eventInstances = this.eventInstances;\n\t\tvar i, eventInstance;\n\t\tvar slicedRange;\n\t\tvar slicedEventRanges = [];\n\n\t\tfor (i = 0; i < eventInstances.length; i++) {\n\t\t\teventInstance = eventInstances[i];\n\n\t\t\tslicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange);\n\n\t\t\tif (slicedRange) {\n\t\t\t\tslicedEventRanges.push(\n\t\t\t\t\tnew EventRange(\n\t\t\t\t\t\tslicedRange,\n\t\t\t\t\t\teventInstance.def,\n\t\t\t\t\t\teventInstance\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn slicedEventRanges;\n\t},\n\n\n\tsliceInverseRenderRanges: function(constraintRange) {\n\t\tvar unzonedRanges = eventInstancesToUnzonedRanges(this.eventInstances);\n\t\tvar ownerDef = this.getEventDef();\n\n\t\tunzonedRanges = invertUnzonedRanges(unzonedRanges, constraintRange);\n\n\t\treturn unzonedRanges.map(function(unzonedRange) {\n\t\t\treturn new EventRange(unzonedRange, ownerDef); // don't give an EventDef\n\t\t});\n\t},\n\n\n\tisInverse: function() {\n\t\treturn this.getEventDef().hasInverseRendering();\n\t},\n\n\n\tgetEventDef: function() {\n\t\treturn this.explicitEventDef || this.eventInstances[0].def;\n\t}\n\n});\n\n;;\n\n/*\nMeant to be immutable\n*/\nvar EventDateProfile = Class.extend({\n\n\tstart: null,\n\tend: null,\n\tunzonedRange: null,\n\n\n\tconstructor: function(start, end, calendar) {\n\t\tthis.start = start;\n\t\tthis.end = end || null;\n\t\tthis.unzonedRange = this.buildUnzonedRange(calendar);\n\t},\n\n\n\tisAllDay: function() {\n\t\treturn !(this.start.hasTime() || (this.end && this.end.hasTime()));\n\t},\n\n\n\t/*\n\tNeeds a Calendar object\n\t*/\n\tbuildUnzonedRange: function(calendar) {\n\t\tvar startMs = this.start.clone().stripZone().valueOf();\n\t\tvar endMs = this.getEnd(calendar).stripZone().valueOf();\n\n\t\treturn new UnzonedRange(startMs, endMs);\n\t},\n\n\n\t/*\n\tNeeds a Calendar object\n\t*/\n\tgetEnd: function(calendar) {\n\t\treturn this.end ?\n\t\t\tthis.end.clone() :\n\t\t\t// derive the end from the start and allDay. compute allDay if necessary\n\t\t\tcalendar.getDefaultEventEnd(\n\t\t\t\tthis.isAllDay(),\n\t\t\t\tthis.start\n\t\t\t);\n\t}\n\n});\n\n\n/*\nNeeds an EventSource object\n*/\nEventDateProfile.parse = function(rawProps, source) {\n\tvar startInput = rawProps.start || rawProps.date;\n\tvar endInput = rawProps.end;\n\n\tif (!startInput) {\n\t\treturn false;\n\t}\n\n\tvar calendar = source.calendar;\n\tvar start = calendar.moment(startInput);\n\tvar end = endInput ? calendar.moment(endInput) : null;\n\tvar forcedAllDay = rawProps.allDay;\n\tvar forceEventDuration = calendar.opt('forceEventDuration');\n\n\tif (!start.isValid()) {\n\t\treturn false;\n\t}\n\n\tif (end && (!end.isValid() || !end.isAfter(start))) {\n\t\tend = null;\n\t}\n\n\tif (forcedAllDay == null) {\n\t\tforcedAllDay = source.allDayDefault;\n\t\tif (forcedAllDay == null) {\n\t\t\tforcedAllDay = calendar.opt('allDayDefault');\n\t\t}\n\t}\n\n\tif (forcedAllDay === true) {\n\t\tstart.stripTime();\n\t\tif (end) {\n\t\t\tend.stripTime();\n\t\t}\n\t}\n\telse if (forcedAllDay === false) {\n\t\tif (!start.hasTime()) {\n\t\t\tstart.time(0);\n\t\t}\n\t\tif (end && !end.hasTime()) {\n\t\t\tend.time(0);\n\t\t}\n\t}\n\n\tif (!end && forceEventDuration) {\n\t\tend = calendar.getDefaultEventEnd(!start.hasTime(), start);\n\t}\n\n\treturn new EventDateProfile(start, end, calendar);\n};\n\n;;\n\nvar EventRange = Class.extend({\n\n\tunzonedRange: null,\n\teventDef: null,\n\teventInstance: null, // optional\n\n\n\tconstructor: function(unzonedRange, eventDef, eventInstance) {\n\t\tthis.unzonedRange = unzonedRange;\n\t\tthis.eventDef = eventDef;\n\n\t\tif (eventInstance) {\n\t\t\tthis.eventInstance = eventInstance;\n\t\t}\n\t}\n\n});\n\n;;\n\nvar EventFootprint = FC.EventFootprint = Class.extend({\n\n\tcomponentFootprint: null,\n\teventDef: null,\n\teventInstance: null, // optional\n\n\n\tconstructor: function(componentFootprint, eventDef, eventInstance) {\n\t\tthis.componentFootprint = componentFootprint;\n\t\tthis.eventDef = eventDef;\n\n\t\tif (eventInstance) {\n\t\t\tthis.eventInstance = eventInstance;\n\t\t}\n\t},\n\n\n\tgetEventLegacy: function() {\n\t\treturn (this.eventInstance || this.eventDef).toLegacy();\n\t}\n\n});\n\n;;\n\nvar EventDefMutation = FC.EventDefMutation = Class.extend({\n\n\t// won't ever be empty. will be null instead.\n\t// callers should use setDateMutation for setting.\n\tdateMutation: null,\n\n\t// hack to get updateEvent/createFromRawProps to work.\n\t// not undo-able and not considered in isEmpty.\n\trawProps: null, // raw (pre-parse-like)\n\n\n\t/*\n\teventDef assumed to be a SingleEventDef.\n\treturns an undo function.\n\t*/\n\tmutateSingle: function(eventDef) {\n\t\tvar origDateProfile;\n\n\t\tif (this.dateMutation) {\n\t\t\torigDateProfile = eventDef.dateProfile;\n\n\t\t\teventDef.dateProfile = this.dateMutation.buildNewDateProfile(\n\t\t\t\torigDateProfile,\n\t\t\t\teventDef.source.calendar\n\t\t\t);\n\t\t}\n\n\t\t// can't undo\n\t\tif (this.rawProps) {\n\t\t\teventDef.applyRawProps(this.rawProps);\n\t\t}\n\n\t\tif (origDateProfile) {\n\t\t\treturn function() {\n\t\t\t\teventDef.dateProfile = origDateProfile;\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\treturn function() { };\n\t\t}\n\t},\n\n\n\tsetDateMutation: function(dateMutation) {\n\t\tif (dateMutation && !dateMutation.isEmpty()) {\n\t\t\tthis.dateMutation = dateMutation;\n\t\t}\n\t\telse {\n\t\t\tthis.dateMutation = null;\n\t\t}\n\t},\n\n\n\tisEmpty: function() {\n\t\treturn !this.dateMutation;\n\t}\n\n});\n\n\nEventDefMutation.createFromRawProps = function(eventInstance, newRawProps, largeUnit) {\n\tvar eventDef = eventInstance.def;\n\tvar applicableRawProps = {};\n\tvar propName;\n\tvar newDateProfile;\n\tvar dateMutation;\n\tvar defMutation;\n\n\tfor (propName in newRawProps) {\n\t\tif (\n\t\t\t// ignore object-type custom properties and any date-related properties,\n\t\t\t// as well as any other internal property\n\t\t\ttypeof newRawProps[propName] !== 'object' &&\n\t\t\tpropName !== 'start' && propName !== 'end' && propName !== 'allDay' &&\n\t\t\tpropName !== 'source' && propName !== '_id'\n\t\t) {\n\t\t\tapplicableRawProps[propName] = newRawProps[propName];\n\t\t}\n\t}\n\n\tnewDateProfile = EventDateProfile.parse(newRawProps, eventDef.source);\n\n\tif (newDateProfile) { // no failure?\n\t\tdateMutation = EventDefDateMutation.createFromDiff(\n\t\t\teventInstance.dateProfile,\n\t\t\tnewDateProfile,\n\t\t\tlargeUnit\n\t\t);\n\t}\n\n\tdefMutation = new EventDefMutation();\n\tdefMutation.rawProps = applicableRawProps;\n\n\tif (dateMutation) {\n\t\tdefMutation.dateMutation = dateMutation;\n\t}\n\n\treturn defMutation;\n};\n\n;;\n\nvar EventDefDateMutation = Class.extend({\n\n\tclearEnd: false,\n\tforceTimed: false,\n\tforceAllDay: false,\n\n\t// Durations. if 0-ms duration, will be null instead.\n\t// Callers should not set this directly.\n\tdateDelta: null,\n\tstartDelta: null,\n\tendDelta: null,\n\n\n\t/*\n\treturns an undo function.\n\t*/\n\tbuildNewDateProfile: function(eventDateProfile, calendar) {\n\t\tvar start = eventDateProfile.start.clone();\n\t\tvar end = null;\n\t\tvar shouldRezone = false;\n\n\t\tif (!this.clearEnd && eventDateProfile.end) {\n\t\t\tend = eventDateProfile.end.clone();\n\t\t}\n\n\t\tif (this.forceTimed) {\n\t\t\tshouldRezone = true;\n\n\t\t\tif (!start.hasTime()) {\n\t\t\t\tstart.time(0);\n\t\t\t}\n\n\t\t\tif (end && !end.hasTime()) {\n\t\t\t\tend.time(0);\n\t\t\t}\n\t\t}\n\t\telse if (this.forceAllDay) {\n\n\t\t\tif (start.hasTime()) {\n\t\t\t\tstart.stripTime();\n\t\t\t}\n\n\t\t\tif (end && end.hasTime()) {\n\t\t\t\tend.stripTime();\n\t\t\t}\n\t\t}\n\n\t\tif (this.dateDelta) {\n\t\t\tshouldRezone = true;\n\n\t\t\tstart.add(this.dateDelta);\n\n\t\t\tif (end) {\n\t\t\t\tend.add(this.dateDelta);\n\t\t\t}\n\t\t}\n\n\t\t// do this before adding startDelta to start, so we can work off of start\n\t\tif (this.endDelta) {\n\t\t\tshouldRezone = true;\n\n\t\t\tif (!end) {\n\t\t\t\tend = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\n\t\t\t}\n\n\t\t\tend.add(this.endDelta);\n\t\t}\n\n\t\tif (this.startDelta) {\n\t\t\tshouldRezone = true;\n\n\t\t\tstart.add(this.startDelta);\n\t\t}\n\n\t\tif (shouldRezone) {\n\t\t\tstart = calendar.applyTimezone(start);\n\n\t\t\tif (end) {\n\t\t\t\tend = calendar.applyTimezone(end);\n\t\t\t}\n\t\t}\n\n\t\t// TODO: okay to access calendar option?\n\t\tif (!end && calendar.opt('forceEventDuration')) {\n\t\t\tend = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\n\t\t}\n\n\t\treturn new EventDateProfile(start, end, calendar);\n\t},\n\n\n\tsetDateDelta: function(dateDelta) {\n\t\tif (dateDelta && dateDelta.valueOf()) {\n\t\t\tthis.dateDelta = dateDelta;\n\t\t}\n\t\telse {\n\t\t\tthis.dateDelta = null;\n\t\t}\n\t},\n\n\n\tsetStartDelta: function(startDelta) {\n\t\tif (startDelta && startDelta.valueOf()) {\n\t\t\tthis.startDelta = startDelta;\n\t\t}\n\t\telse {\n\t\t\tthis.startDelta = null;\n\t\t}\n\t},\n\n\n\tsetEndDelta: function(endDelta) {\n\t\tif (endDelta && endDelta.valueOf()) {\n\t\t\tthis.endDelta = endDelta;\n\t\t}\n\t\telse {\n\t\t\tthis.endDelta = null;\n\t\t}\n\t},\n\n\n\tisEmpty: function() {\n\t\treturn !this.clearEnd && !this.forceTimed && !this.forceAllDay &&\n\t\t\t!this.dateDelta && !this.startDelta && !this.endDelta;\n\t}\n\n});\n\n\nEventDefDateMutation.createFromDiff = function(dateProfile0, dateProfile1, largeUnit) {\n\tvar clearEnd = dateProfile0.end && !dateProfile1.end;\n\tvar forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay();\n\tvar forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay();\n\tvar dateDelta;\n\tvar endDiff;\n\tvar endDelta;\n\tvar mutation;\n\n\t// subtracts the dates in the appropriate way, returning a duration\n\tfunction subtractDates(date1, date0) { // date1 - date0\n\t\tif (largeUnit) {\n\t\t\treturn diffByUnit(date1, date0, largeUnit); // poorly named\n\t\t}\n\t\telse if (dateProfile1.isAllDay()) {\n\t\t\treturn diffDay(date1, date0); // poorly named\n\t\t}\n\t\telse {\n\t\t\treturn diffDayTime(date1, date0); // poorly named\n\t\t}\n\t}\n\n\tdateDelta = subtractDates(dateProfile1.start, dateProfile0.start);\n\n\tif (dateProfile1.end) {\n\t\t// use unzonedRanges because dateProfile0.end might be null\n\t\tendDiff = subtractDates(\n\t\t\tdateProfile1.unzonedRange.getEnd(),\n\t\t\tdateProfile0.unzonedRange.getEnd()\n\t\t);\n\t\tendDelta = endDiff.subtract(dateDelta);\n\t}\n\n\tmutation = new EventDefDateMutation();\n\tmutation.clearEnd = clearEnd;\n\tmutation.forceTimed = forceTimed;\n\tmutation.forceAllDay = forceAllDay;\n\tmutation.setDateDelta(dateDelta);\n\tmutation.setEndDelta(endDelta);\n\n\treturn mutation;\n};\n\n;;\n\nfunction eventDefsToEventInstances(eventDefs, unzonedRange) {\n\tvar eventInstances = [];\n\tvar i;\n\n\tfor (i = 0; i < eventDefs.length; i++) {\n\t\teventInstances.push.apply(eventInstances, // append\n\t\t\teventDefs[i].buildInstances(unzonedRange)\n\t\t);\n\t}\n\n\treturn eventInstances;\n}\n\n\nfunction eventInstancesToEventRanges(eventInstances) {\n\treturn eventInstances.map(function(eventInstance) {\n\t\treturn new EventRange(\n\t\t\teventInstance.dateProfile.unzonedRange,\n\t\t\teventInstance.def,\n\t\t\teventInstance\n\t\t);\n\t});\n}\n\n\nfunction eventInstancesToUnzonedRanges(eventInstances) {\n\treturn eventInstances.map(function(eventInstance) {\n\t\treturn eventInstance.dateProfile.unzonedRange;\n\t});\n}\n\n\nfunction eventFootprintsToComponentFootprints(eventFootprints) {\n\treturn eventFootprints.map(function(eventFootprint) {\n\t\treturn eventFootprint.componentFootprint;\n\t});\n}\n\n;;\n\nvar EventSource = Class.extend(ParsableModelMixin, {\n\n\tcalendar: null,\n\n\tid: null, // can stay null\n\tuid: null,\n\tcolor: null,\n\tbackgroundColor: null,\n\tborderColor: null,\n\ttextColor: null,\n\tclassName: null, // array\n\teditable: null,\n\tstartEditable: null,\n\tdurationEditable: null,\n\trendering: null,\n\toverlap: null,\n\tconstraint: null,\n\tallDayDefault: null,\n\teventDataTransform: null, // optional function\n\n\n\tconstructor: function(calendar) {\n\t\tthis.calendar = calendar;\n\t\tthis.className = [];\n\t\tthis.uid = String(EventSource.uuid++);\n\t},\n\n\n\tfetch: function(start, end, timezone) {\n\t\t// subclasses must implement. must return a promise.\n\t},\n\n\n\tremoveEventDefsById: function(eventDefId) {\n\t\t// optional for subclasses to implement\n\t},\n\n\n\tremoveAllEventDefs: function() {\n\t\t// optional for subclasses to implement\n\t},\n\n\n\t/*\n\tFor compairing/matching\n\t*/\n\tgetPrimitive: function(otherSource) {\n\t\t// subclasses must implement\n\t},\n\n\n\tparseEventDefs: function(rawEventDefs) {\n\t\tvar i;\n\t\tvar eventDef;\n\t\tvar eventDefs = [];\n\n\t\tfor (i = 0; i < rawEventDefs.length; i++) {\n\t\t\teventDef = EventDefParser.parse(\n\t\t\t\trawEventDefs[i],\n\t\t\t\tthis // source\n\t\t\t);\n\n\t\t\tif (eventDef) {\n\t\t\t\teventDefs.push(eventDef);\n\t\t\t}\n\t\t}\n\n\t\treturn eventDefs;\n\t},\n\n\n\tapplyManualRawProps: function(rawProps) {\n\n\t\tif (rawProps.id != null) {\n\t\t\tthis.id = EventSource.normalizeId(rawProps.id);\n\t\t}\n\n\t\t// TODO: converge with EventDef\n\t\tif ($.isArray(rawProps.className)) {\n\t\t\tthis.className = rawProps.className;\n\t\t}\n\t\telse if (typeof rawProps.className === 'string') {\n\t\t\tthis.className = rawProps.className.split(/\\s+/);\n\t\t}\n\n\t\treturn true;\n\t}\n\n});\n\n\n// finish initializing the mixin\nEventSource.allowRawProps = ParsableModelMixin_allowRawProps;\n\n\n// IDs\n// ---------------------------------------------------------------------------------------------------------------------\n// TODO: converge with EventDef\n\n\nEventSource.uuid = 0;\n\n\nEventSource.normalizeId = function(id) {\n\tif (id) {\n\t\treturn String(id);\n\t}\n\n\treturn null;\n};\n\n\n// Parsing\n// ---------------------------------------------------------------------------------------------------------------------\n\n\nEventSource.allowRawProps({\n\t// manually process...\n\tid: false,\n\tclassName: false,\n\n\t// automatically transfer...\n\tcolor: true,\n\tbackgroundColor: true,\n\tborderColor: true,\n\ttextColor: true,\n\teditable: true,\n\tstartEditable: true,\n\tdurationEditable: true,\n\trendering: true,\n\toverlap: true,\n\tconstraint: true,\n\tallDayDefault: true,\n\teventDataTransform: true\n});\n\n\n/*\nrawInput can be any data type!\n*/\nEventSource.parse = function(rawInput, calendar) {\n\tvar source = new this(calendar);\n\n\tif (typeof rawInput === 'object') {\n\t\tif (source.applyRawProps(rawInput)) {\n\t\t\treturn source;\n\t\t}\n\t}\n\n\treturn false;\n};\n\n\nFC.EventSource = EventSource;\n\n;;\n\nvar EventSourceParser = {\n\n\tsourceClasses: [],\n\n\n\tregisterClass: function(EventSourceClass) {\n\t\tthis.sourceClasses.unshift(EventSourceClass); // give highest priority\n\t},\n\n\n\tparse: function(rawInput, calendar) {\n\t\tvar sourceClasses = this.sourceClasses;\n\t\tvar i;\n\t\tvar eventSource;\n\n\t\tfor (i = 0; i < sourceClasses.length; i++) {\n\t\t\teventSource = sourceClasses[i].parse(rawInput, calendar);\n\n\t\t\tif (eventSource) {\n\t\t\t\treturn eventSource;\n\t\t\t}\n\t\t}\n\t}\n\n};\n\n\nFC.EventSourceParser = EventSourceParser;\n\n;;\n\nvar ArrayEventSource = EventSource.extend({\n\n\trawEventDefs: null, // unparsed\n\teventDefs: null,\n\tcurrentTimezone: null,\n\n\n\tconstructor: function(calendar) {\n\t\tEventSource.apply(this, arguments); // super-constructor\n\t\tthis.eventDefs = []; // for if setRawEventDefs is never called\n\t},\n\n\n\tsetRawEventDefs: function(rawEventDefs) {\n\t\tthis.rawEventDefs = rawEventDefs;\n\t\tthis.eventDefs = this.parseEventDefs(rawEventDefs);\n\t},\n\n\n\tfetch: function(start, end, timezone) {\n\t\tvar eventDefs = this.eventDefs;\n\t\tvar i;\n\n\t\tif (\n\t\t\tthis.currentTimezone !== null &&\n\t\t\tthis.currentTimezone !== timezone\n\t\t) {\n\t\t\tfor (i = 0; i < eventDefs.length; i++) {\n\t\t\t\tif (eventDefs[i] instanceof SingleEventDef) {\n\t\t\t\t\teventDefs[i].rezone();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.currentTimezone = timezone;\n\n\t\treturn Promise.resolve(eventDefs);\n\t},\n\n\n\taddEventDef: function(eventDef) {\n\t\tthis.eventDefs.push(eventDef);\n\t},\n\n\n\t/*\n\teventDefId already normalized to a string\n\t*/\n\tremoveEventDefsById: function(eventDefId) {\n\t\treturn removeMatching(this.eventDefs, function(eventDef) {\n\t\t\treturn eventDef.id === eventDefId;\n\t\t});\n\t},\n\n\n\tremoveAllEventDefs: function() {\n\t\tthis.eventDefs = [];\n\t},\n\n\n\tgetPrimitive: function() {\n\t\treturn this.rawEventDefs;\n\t},\n\n\n\tapplyManualRawProps: function(rawProps) {\n\t\tvar superSuccess = EventSource.prototype.applyManualRawProps.apply(this, arguments);\n\n\t\tthis.setRawEventDefs(rawProps.events);\n\n\t\treturn superSuccess;\n\t}\n\n});\n\n\nArrayEventSource.allowRawProps({\n\tevents: false // don't automatically transfer\n});\n\n\nArrayEventSource.parse = function(rawInput, calendar) {\n\tvar rawProps;\n\n\t// normalize raw input\n\tif ($.isArray(rawInput.events)) { // extended form\n\t\trawProps = rawInput;\n\t}\n\telse if ($.isArray(rawInput)) { // short form\n\t\trawProps = { events: rawInput };\n\t}\n\n\tif (rawProps) {\n\t\treturn EventSource.parse.call(this, rawProps, calendar);\n\t}\n\n\treturn false;\n};\n\n\nEventSourceParser.registerClass(ArrayEventSource);\n\nFC.ArrayEventSource = ArrayEventSource;\n\n;;\n\nvar FuncEventSource = EventSource.extend({\n\n\tfunc: null,\n\n\n\tfetch: function(start, end, timezone) {\n\t\tvar _this = this;\n\n\t\tthis.calendar.pushLoading();\n\n\t\treturn Promise.construct(function(onResolve) {\n\t\t\t_this.func.call(\n\t\t\t\tthis.calendar,\n\t\t\t\tstart.clone(),\n\t\t\t\tend.clone(),\n\t\t\t\ttimezone,\n\t\t\t\tfunction(rawEventDefs) {\n\t\t\t\t\t_this.calendar.popLoading();\n\n\t\t\t\t\tonResolve(_this.parseEventDefs(rawEventDefs));\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t},\n\n\n\tgetPrimitive: function() {\n\t\treturn this.func;\n\t},\n\n\n\tapplyManualRawProps: function(rawProps) {\n\t\tvar superSuccess = EventSource.prototype.applyManualRawProps.apply(this, arguments);\n\n\t\tthis.func = rawProps.events;\n\n\t\treturn superSuccess;\n\t}\n\n});\n\n\nFuncEventSource.allowRawProps({\n\tevents: false // don't automatically transfer\n});\n\n\nFuncEventSource.parse = function(rawInput, calendar) {\n\tvar rawProps;\n\n\t// normalize raw input\n\tif ($.isFunction(rawInput.events)) { // extended form\n\t\trawProps = rawInput;\n\t}\n\telse if ($.isFunction(rawInput)) { // short form\n\t\trawProps = { events: rawInput };\n\t}\n\n\tif (rawProps) {\n\t\treturn EventSource.parse.call(this, rawProps, calendar);\n\t}\n\n\treturn false;\n};\n\n\nEventSourceParser.registerClass(FuncEventSource);\n\nFC.FuncEventSource = FuncEventSource;\n\n;;\n\nvar JsonFeedEventSource = EventSource.extend({\n\n\t// these props must all be manually set before calling fetch\n\tstartParam: null,\n\tendParam: null,\n\ttimezoneParam: null,\n\tajaxSettings: null,\n\n\n\tfetch: function(start, end, timezone) {\n\t\tvar _this = this;\n\t\tvar ajaxSettings = this.ajaxSettings;\n\t\tvar onSuccess = ajaxSettings.success;\n\t\tvar onError = ajaxSettings.error;\n\t\tvar requestParams = this.buildRequestParams(start, end, timezone);\n\n\t\t// todo: eventually handle the promise's then,\n\t\t// don't intercept success/error\n\t\t// tho will be a breaking API change\n\n\t\tthis.calendar.pushLoading();\n\n\t\treturn Promise.construct(function(onResolve, onReject) {\n\t\t\t$.ajax($.extend(\n\t\t\t\t{}, // avoid mutation\n\t\t\t\tJsonFeedEventSource.AJAX_DEFAULTS,\n\t\t\t\tajaxSettings, // should have a `url`\n\t\t\t\t{\n\t\t\t\t\tdata: requestParams,\n\t\t\t\t\tsuccess: function(rawEventDefs) {\n\t\t\t\t\t\tvar callbackRes;\n\n\t\t\t\t\t\t_this.calendar.popLoading();\n\n\t\t\t\t\t\tif (rawEventDefs) {\n\t\t\t\t\t\t\tcallbackRes = applyAll(onSuccess, this, arguments); // redirect `this`\n\n\t\t\t\t\t\t\tif ($.isArray(callbackRes)) {\n\t\t\t\t\t\t\t\trawEventDefs = callbackRes;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tonResolve(_this.parseEventDefs(rawEventDefs));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tonReject();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\t_this.calendar.popLoading();\n\n\t\t\t\t\t\tapplyAll(onError, this, arguments); // redirect `this`\n\t\t\t\t\t\tonReject();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t));\n\t\t});\n\t},\n\n\n\tbuildRequestParams: function(start, end, timezone) {\n\t\tvar calendar = this.calendar;\n\t\tvar ajaxSettings = this.ajaxSettings;\n\t\tvar startParam, endParam, timezoneParam;\n\t\tvar customRequestParams;\n\t\tvar params = {};\n\n\t\tstartParam = this.startParam;\n\t\tif (startParam == null) {\n\t\t\tstartParam = calendar.opt('startParam');\n\t\t}\n\n\t\tendParam = this.endParam;\n\t\tif (endParam == null) {\n\t\t\tendParam = calendar.opt('endParam');\n\t\t}\n\n\t\ttimezoneParam = this.timezoneParam;\n\t\tif (timezoneParam == null) {\n\t\t\ttimezoneParam = calendar.opt('timezoneParam');\n\t\t}\n\n\t\t// retrieve any outbound GET/POST $.ajax data from the options\n\t\tif ($.isFunction(ajaxSettings.data)) {\n\t\t\t// supplied as a function that returns a key/value object\n\t\t\tcustomRequestParams = ajaxSettings.data();\n\t\t}\n\t\telse {\n\t\t\t// probably supplied as a straight key/value object\n\t\t\tcustomRequestParams = ajaxSettings.data || {};\n\t\t}\n\n\t\t$.extend(params, customRequestParams);\n\n\t\tparams[startParam] = start.format();\n\t\tparams[endParam] = end.format();\n\n\t\tif (timezone && timezone !== 'local') {\n\t\t\tparams[timezoneParam] = timezone;\n\t\t}\n\n\t\treturn params;\n\t},\n\n\n\tgetPrimitive: function() {\n\t\treturn this.ajaxSettings.url;\n\t},\n\n\n\tapplyOtherRawProps: function(rawProps) {\n\t\tEventSource.prototype.applyOtherRawProps.apply(this, arguments);\n\n\t\tthis.ajaxSettings = rawProps;\n\t}\n\n});\n\n\nJsonFeedEventSource.AJAX_DEFAULTS = {\n\tdataType: 'json',\n\tcache: false\n};\n\n\nJsonFeedEventSource.allowRawProps({\n\t// automatically transfer (true)...\n\tstartParam: true,\n\tendParam: true,\n\ttimezoneParam: true\n});\n\n\nJsonFeedEventSource.parse = function(rawInput, calendar) {\n\tvar rawProps;\n\n\t// normalize raw input\n\tif (typeof rawInput.url === 'string') { // extended form\n\t\trawProps = rawInput;\n\t}\n\telse if (typeof rawInput === 'string') { // short form\n\t\trawProps = { url: rawInput }; // will end up in ajaxSettings\n\t}\n\n\tif (rawProps) {\n\t\treturn EventSource.parse.call(this, rawProps, calendar);\n\t}\n\n\treturn false;\n};\n\n\nEventSourceParser.registerClass(JsonFeedEventSource);\n\nFC.JsonFeedEventSource = JsonFeedEventSource;\n\n;;\n\nvar ThemeRegistry = FC.ThemeRegistry = {\n\n\tthemeClassHash: {},\n\n\n\tregister: function(themeName, themeClass) {\n\t\tthis.themeClassHash[themeName] = themeClass;\n\t},\n\n\n\tgetThemeClass: function(themeSetting) {\n\t\tif (!themeSetting) {\n\t\t\treturn StandardTheme;\n\t\t}\n\t\telse if (themeSetting === true) {\n\t\t\treturn JqueryUiTheme;\n\t\t}\n\t\telse {\n\t\t\treturn this.themeClassHash[themeSetting];\n\t\t}\n\t}\n\n};\n\n;;\n\nvar Theme = FC.Theme = Class.extend({\n\n\tclasses: {},\n\ticonClasses: {},\n\tbaseIconClass: '',\n\ticonOverrideOption: null,\n\ticonOverrideCustomButtonOption: null,\n\ticonOverridePrefix: '',\n\n\n\tconstructor: function(optionsModel) {\n\t\tthis.optionsModel = optionsModel;\n\t\tthis.processIconOverride();\n\t},\n\n\n\tprocessIconOverride: function() {\n\t\tif (this.iconOverrideOption) {\n\t\t\tthis.setIconOverride(\n\t\t\t\tthis.optionsModel.get(this.iconOverrideOption)\n\t\t\t);\n\t\t}\n\t},\n\n\n\tsetIconOverride: function(iconOverrideHash) {\n\t\tvar iconClassesCopy;\n\t\tvar buttonName;\n\n\t\tif ($.isPlainObject(iconOverrideHash)) {\n\t\t\ticonClassesCopy = $.extend({}, this.iconClasses);\n\n\t\t\tfor (buttonName in iconOverrideHash) {\n\t\t\t\ticonClassesCopy[buttonName] = this.applyIconOverridePrefix(\n\t\t\t\t\ticonOverrideHash[buttonName]\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.iconClasses = iconClassesCopy;\n\t\t}\n\t\telse if (iconOverrideHash === false) {\n\t\t\tthis.iconClasses = {};\n\t\t}\n\t},\n\n\n\tapplyIconOverridePrefix: function(className) {\n\t\tvar prefix = this.iconOverridePrefix;\n\n\t\tif (prefix && className.indexOf(prefix) !== 0) { // if not already present\n\t\t\tclassName = prefix + className;\n\t\t}\n\n\t\treturn className;\n\t},\n\n\n\tgetClass: function(key) {\n\t\treturn this.classes[key] || '';\n\t},\n\n\n\tgetIconClass: function(buttonName) {\n\t\tvar className = this.iconClasses[buttonName];\n\n\t\tif (className) {\n\t\t\treturn this.baseIconClass + ' ' + className;\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\tgetCustomButtonIconClass: function(customButtonProps) {\n\t\tvar className;\n\n\t\tif (this.iconOverrideCustomButtonOption) {\n\t\t\tclassName = customButtonProps[this.iconOverrideCustomButtonOption];\n\n\t\t\tif (className) {\n\t\t\t\treturn this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\n\t\t\t}\n\t\t}\n\n\t\treturn '';\n\t}\n\n});\n\n;;\n\nvar StandardTheme = Theme.extend({\n\n\tclasses: {\n\t\twidget: 'fc-unthemed',\n\t\twidgetHeader: 'fc-widget-header',\n\t\twidgetContent: 'fc-widget-content',\n\n\t\tbuttonGroup: 'fc-button-group',\n\t\tbutton: 'fc-button',\n\t\tcornerLeft: 'fc-corner-left',\n\t\tcornerRight: 'fc-corner-right',\n\t\tstateDefault: 'fc-state-default',\n\t\tstateActive: 'fc-state-active',\n\t\tstateDisabled: 'fc-state-disabled',\n\t\tstateHover: 'fc-state-hover',\n\t\tstateDown: 'fc-state-down',\n\n\t\tpopoverHeader: 'fc-widget-header',\n\t\tpopoverContent: 'fc-widget-content',\n\n\t\t// day grid\n\t\theaderRow: 'fc-widget-header',\n\t\tdayRow: 'fc-widget-content',\n\n\t\t// list view\n\t\tlistView: 'fc-widget-content'\n\t},\n\n\tbaseIconClass: 'fc-icon',\n\ticonClasses: {\n\t\tclose: 'fc-icon-x',\n\t\tprev: 'fc-icon-left-single-arrow',\n\t\tnext: 'fc-icon-right-single-arrow',\n\t\tprevYear: 'fc-icon-left-double-arrow',\n\t\tnextYear: 'fc-icon-right-double-arrow'\n\t},\n\n\ticonOverrideOption: 'buttonIcons',\n\ticonOverrideCustomButtonOption: 'icon',\n\ticonOverridePrefix: 'fc-icon-'\n\n});\n\nThemeRegistry.register('standard', StandardTheme);\n\n;;\n\nvar JqueryUiTheme = Theme.extend({\n\n\tclasses: {\n\t\twidget: 'ui-widget',\n\t\twidgetHeader: 'ui-widget-header',\n\t\twidgetContent: 'ui-widget-content',\n\n\t\tbuttonGroup: 'fc-button-group',\n\t\tbutton: 'ui-button',\n\t\tcornerLeft: 'ui-corner-left',\n\t\tcornerRight: 'ui-corner-right',\n\t\tstateDefault: 'ui-state-default',\n\t\tstateActive: 'ui-state-active',\n\t\tstateDisabled: 'ui-state-disabled',\n\t\tstateHover: 'ui-state-hover',\n\t\tstateDown: 'ui-state-down',\n\n\t\ttoday: 'ui-state-highlight',\n\n\t\tpopoverHeader: 'ui-widget-header',\n\t\tpopoverContent: 'ui-widget-content',\n\n\t\t// day grid\n\t\theaderRow: 'ui-widget-header',\n\t\tdayRow: 'ui-widget-content',\n\n\t\t// list view\n\t\tlistView: 'ui-widget-content'\n\t},\n\n\tbaseIconClass: 'ui-icon',\n\ticonClasses: {\n\t\tclose: 'ui-icon-closethick',\n\t\tprev: 'ui-icon-circle-triangle-w',\n\t\tnext: 'ui-icon-circle-triangle-e',\n\t\tprevYear: 'ui-icon-seek-prev',\n\t\tnextYear: 'ui-icon-seek-next'\n\t},\n\n\ticonOverrideOption: 'themeButtonIcons',\n\ticonOverrideCustomButtonOption: 'themeIcon',\n\ticonOverridePrefix: 'ui-icon-'\n\n});\n\nThemeRegistry.register('jquery-ui', JqueryUiTheme);\n\n;;\n\nvar BootstrapTheme = Theme.extend({\n\n\tclasses: {\n\t\twidget: 'fc-bootstrap3',\n\n\t\ttableGrid: 'table-bordered', // avoid `table` class b/c don't want margins. only border color\n\t\ttableList: 'table table-striped', // `table` class creates bottom margin but who cares\n\n\t\tbuttonGroup: 'btn-group',\n\t\tbutton: 'btn btn-default',\n\t\tstateActive: 'active',\n\t\tstateDisabled: 'disabled',\n\n\t\ttoday: 'alert alert-info', // the plain `info` class requires `.table`, too much to ask\n\n\t\tpopover: 'panel panel-default',\n\t\tpopoverHeader: 'panel-heading',\n\t\tpopoverContent: 'panel-body',\n\n\t\t// day grid\n\t\theaderRow: 'panel-default', // avoid `panel` class b/c don't want margins/radius. only border color\n\t\tdayRow: 'panel-default', // \"\n\n\t\t// list view\n\t\tlistView: 'panel panel-default'\n\t},\n\n\tbaseIconClass: 'glyphicon',\n\ticonClasses: {\n\t\tclose: 'glyphicon-remove',\n\t\tprev: 'glyphicon-chevron-left',\n\t\tnext: 'glyphicon-chevron-right',\n\t\tprevYear: 'glyphicon-backward',\n\t\tnextYear: 'glyphicon-forward'\n\t},\n\n\ticonOverrideOption: 'bootstrapGlyphicons',\n\ticonOverrideCustomButtonOption: 'bootstrapGlyphicon',\n\ticonOverridePrefix: 'glyphicon-'\n\n});\n\nThemeRegistry.register('bootstrap3', BootstrapTheme);\n\n;;\n\n/* An abstract class for the \"basic\" views, as well as month view. Renders one or more rows of day cells.\n----------------------------------------------------------------------------------------------------------------------*/\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\n// It is responsible for managing width/height.\n\nvar BasicView = FC.BasicView = View.extend({\n\n\tscroller: null,\n\n\tdayGridClass: DayGrid, // class the dayGrid will be instantiated from (overridable by subclasses)\n\tdayGrid: null, // the main subcomponent that does most of the heavy lifting\n\n\tdayNumbersVisible: false, // display day numbers on each day cell?\n\tcolWeekNumbersVisible: false, // display week numbers along the side?\n\tcellWeekNumbersVisible: false, // display week numbers in day cell?\n\n\tweekNumberWidth: null, // width of all the week-number cells running down the side\n\n\theadContainerEl: null, // div that hold's the dayGrid's rendered date header\n\theadRowEl: null, // the fake row element of the day-of-week header\n\n\n\tinitialize: function() {\n\t\tthis.dayGrid = this.instantiateDayGrid();\n\t\tthis.addChild(this.dayGrid);\n\n\t\tthis.scroller = new Scroller({\n\t\t\toverflowX: 'hidden',\n\t\t\toverflowY: 'auto'\n\t\t});\n\t},\n\n\n\t// Generates the DayGrid object this view needs. Draws from this.dayGridClass\n\tinstantiateDayGrid: function() {\n\t\t// generate a subclass on the fly with BasicView-specific behavior\n\t\t// TODO: cache this subclass\n\t\tvar subclass = this.dayGridClass.extend(basicDayGridMethods);\n\n\t\treturn new subclass(this);\n\t},\n\n\n\t// Computes the date range that will be rendered.\n\tbuildRenderRange: function(currentUnzonedRange, currentRangeUnit) {\n\t\tvar renderUnzonedRange = View.prototype.buildRenderRange.apply(this, arguments); // an UnzonedRange\n\t\tvar start = this.calendar.msToUtcMoment(renderUnzonedRange.startMs, this.isRangeAllDay);\n\t\tvar end = this.calendar.msToUtcMoment(renderUnzonedRange.endMs, this.isRangeAllDay);\n\n\t\t// year and month views should be aligned with weeks. this is already done for week\n\t\tif (/^(year|month)$/.test(currentRangeUnit)) {\n\t\t\tstart.startOf('week');\n\n\t\t\t// make end-of-week if not already\n\t\t\tif (end.weekday()) {\n\t\t\t\tend.add(1, 'week').startOf('week'); // exclusively move backwards\n\t\t\t}\n\t\t}\n\n\t\treturn this.trimHiddenDays(new UnzonedRange(start, end));\n\t},\n\n\n\t// Renders the view into `this.el`, which should already be assigned\n\trenderDates: function() {\n\n\t\tthis.dayGrid.breakOnWeeks = /year|month|week/.test(this.currentRangeUnit); // do before Grid::setRange\n\t\tthis.dayGrid.setRange(this.renderUnzonedRange);\n\n\t\tthis.dayNumbersVisible = this.dayGrid.rowCnt > 1; // TODO: make grid responsible\n\t\tif (this.opt('weekNumbers')) {\n\t\t\tif (this.opt('weekNumbersWithinDays')) {\n\t\t\t\tthis.cellWeekNumbersVisible = true;\n\t\t\t\tthis.colWeekNumbersVisible = false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.cellWeekNumbersVisible = false;\n\t\t\t\tthis.colWeekNumbersVisible = true;\n\t\t\t};\n\t\t}\n\t\tthis.dayGrid.numbersVisible = this.dayNumbersVisible ||\n\t\t\tthis.cellWeekNumbersVisible || this.colWeekNumbersVisible;\n\n\t\tthis.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());\n\t\tthis.renderHead();\n\n\t\tthis.scroller.render();\n\t\tvar dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');\n\t\tvar dayGridEl = $('
').appendTo(dayGridContainerEl);\n\t\tthis.el.find('.fc-body > tr > td').append(dayGridContainerEl);\n\n\t\tthis.dayGrid.setElement(dayGridEl);\n\t\tthis.dayGrid.renderDates(this.hasRigidRows());\n\t},\n\n\n\t// render the day-of-week headers\n\trenderHead: function() {\n\t\tthis.headContainerEl =\n\t\t\tthis.el.find('.fc-head-container')\n\t\t\t\t.html(this.dayGrid.renderHeadHtml());\n\t\tthis.headRowEl = this.headContainerEl.find('.fc-row');\n\t},\n\n\n\t// Unrenders the content of the view. Since we haven't separated skeleton rendering from date rendering,\n\t// always completely kill the dayGrid's rendering.\n\tunrenderDates: function() {\n\t\tthis.dayGrid.unrenderDates();\n\t\tthis.dayGrid.removeElement();\n\t\tthis.scroller.destroy();\n\t},\n\n\n\t// Builds the HTML skeleton for the view.\n\t// The day-grid component will render inside of a container defined by this HTML.\n\trenderSkeletonHtml: function() {\n\t\tvar theme = this.calendar.theme;\n\n\t\treturn '' +\n\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t'
';\n\t},\n\n\n\t// Generates an HTML attribute string for setting the width of the week number column, if it is known\n\tweekNumberStyleAttr: function() {\n\t\tif (this.weekNumberWidth !== null) {\n\t\t\treturn 'style=\"width:' + this.weekNumberWidth + 'px\"';\n\t\t}\n\t\treturn '';\n\t},\n\n\n\t// Determines whether each row should have a constant height\n\thasRigidRows: function() {\n\t\tvar eventLimit = this.opt('eventLimit');\n\t\treturn eventLimit && typeof eventLimit !== 'number';\n\t},\n\n\n\t/* Dimensions\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Refreshes the horizontal dimensions of the view\n\tupdateWidth: function() {\n\t\tif (this.colWeekNumbersVisible) {\n\t\t\t// Make sure all week number cells running down the side have the same width.\n\t\t\t// Record the width for cells created later.\n\t\t\tthis.weekNumberWidth = matchCellWidths(\n\t\t\t\tthis.el.find('.fc-week-number')\n\t\t\t);\n\t\t}\n\t},\n\n\n\t// Adjusts the vertical dimensions of the view to the specified values\n\tsetHeight: function(totalHeight, isAuto) {\n\t\tvar eventLimit = this.opt('eventLimit');\n\t\tvar scrollerHeight;\n\t\tvar scrollbarWidths;\n\n\t\t// reset all heights to be natural\n\t\tthis.scroller.clear();\n\t\tuncompensateScroll(this.headRowEl);\n\n\t\tthis.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\n\n\t\t// is the event limit a constant level number?\n\t\tif (eventLimit && typeof eventLimit === 'number') {\n\t\t\tthis.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\n\t\t}\n\n\t\t// distribute the height to the rows\n\t\t// (totalHeight is a \"recommended\" value if isAuto)\n\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\tthis.setGridHeight(scrollerHeight, isAuto);\n\n\t\t// is the event limit dynamically calculated?\n\t\tif (eventLimit && typeof eventLimit !== 'number') {\n\t\t\tthis.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\n\t\t}\n\n\t\tif (!isAuto) { // should we force dimensions of the scroll container?\n\n\t\t\tthis.scroller.setHeight(scrollerHeight);\n\t\t\tscrollbarWidths = this.scroller.getScrollbarWidths();\n\n\t\t\tif (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\n\n\t\t\t\tcompensateScroll(this.headRowEl, scrollbarWidths);\n\n\t\t\t\t// doing the scrollbar compensation might have created text overflow which created more height. redo\n\t\t\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\t\t\tthis.scroller.setHeight(scrollerHeight);\n\t\t\t}\n\n\t\t\t// guarantees the same scrollbar widths\n\t\t\tthis.scroller.lockOverflow(scrollbarWidths);\n\t\t}\n\t},\n\n\n\t// given a desired total height of the view, returns what the height of the scroller should be\n\tcomputeScrollerHeight: function(totalHeight) {\n\t\treturn totalHeight -\n\t\t\tsubtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n\t},\n\n\n\t// Sets the height of just the DayGrid component in this view\n\tsetGridHeight: function(height, isAuto) {\n\t\tif (isAuto) {\n\t\t\tundistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\n\t\t}\n\t\telse {\n\t\t\tdistributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\n\t\t}\n\t},\n\n\n\t/* Scroll\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tcomputeInitialDateScroll: function() {\n\t\treturn { top: 0 };\n\t},\n\n\n\tqueryDateScroll: function() {\n\t\treturn { top: this.scroller.getScrollTop() };\n\t},\n\n\n\tapplyDateScroll: function(scroll) {\n\t\tif (scroll.top !== undefined) {\n\t\t\tthis.scroller.setScrollTop(scroll.top);\n\t\t}\n\t},\n\n\n\t/* Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders the given events onto the view and populates the segments array\n\trenderEventsPayload: function(eventsPayload) {\n\t\tthis.dayGrid.renderEventsPayload(eventsPayload);\n\n\t\t// must compensate for events that overflow the row\n\t\t// TODO: how will ChronoComponent handle this?\n\t\tthis.updateHeight();\n\t}\n\n});\n\n\n// Methods that will customize the rendering behavior of the BasicView's dayGrid\nvar basicDayGridMethods = {\n\n\n\t// Generates the HTML that will go before the day-of week header cells\n\trenderHeadIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\tif (view.colWeekNumbersVisible) {\n\t\t\treturn '' +\n\t\t\t\t'' +\n\t\t\t\t\t'' + // needed for matchCellWidths\n\t\t\t\t\t\thtmlEscape(this.opt('weekNumberTitle')) +\n\t\t\t\t\t'' +\n\t\t\t\t'';\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\t// Generates the HTML that will go before content-skeleton cells that display the day/week numbers\n\trenderNumberIntroHtml: function(row) {\n\t\tvar view = this.view;\n\t\tvar weekStart = this.getCellDate(row, 0);\n\n\t\tif (view.colWeekNumbersVisible) {\n\t\t\treturn '' +\n\t\t\t\t'' +\n\t\t\t\t\tview.buildGotoAnchorHtml( // aside from link, important for matchCellWidths\n\t\t\t\t\t\t{ date: weekStart, type: 'week', forceOff: this.colCnt === 1 },\n\t\t\t\t\t\tweekStart.format('w') // inner HTML\n\t\t\t\t\t) +\n\t\t\t\t'';\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\t// Generates the HTML that goes before the day bg cells for each day-row\n\trenderBgIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\tif (view.colWeekNumbersVisible) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn '';\n\t},\n\n\n\t// Generates the HTML that goes before every other type of row generated by DayGrid.\n\t// Affects helper-skeleton and highlight-skeleton rows.\n\trenderIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\tif (view.colWeekNumbersVisible) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn '';\n\t}\n\n};\n\n;;\n\n/* A month view with day cells running in rows (one-per-week) and columns\n----------------------------------------------------------------------------------------------------------------------*/\n\nvar MonthView = FC.MonthView = BasicView.extend({\n\n\n\t// Computes the date range that will be rendered.\n\tbuildRenderRange: function() {\n\t\tvar renderUnzonedRange = BasicView.prototype.buildRenderRange.apply(this, arguments);\n\t\tvar start = this.calendar.msToUtcMoment(renderUnzonedRange.startMs, this.isRangeAllDay);\n\t\tvar end = this.calendar.msToUtcMoment(renderUnzonedRange.endMs, this.isRangeAllDay);\n\t\tvar rowCnt;\n\n\t\t// ensure 6 weeks\n\t\tif (this.isFixedWeeks()) {\n\t\t\trowCnt = Math.ceil( // could be partial weeks due to hiddenDays\n\t\t\t\tend.diff(start, 'weeks', true) // dontRound=true\n\t\t\t);\n\t\t\tend.add(6 - rowCnt, 'weeks');\n\t\t}\n\n\t\treturn new UnzonedRange(start, end);\n\t},\n\n\n\t// Overrides the default BasicView behavior to have special multi-week auto-height logic\n\tsetGridHeight: function(height, isAuto) {\n\n\t\t// if auto, make the height of each row the height that it would be if there were 6 weeks\n\t\tif (isAuto) {\n\t\t\theight *= this.rowCnt / 6;\n\t\t}\n\n\t\tdistributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\n\t},\n\n\n\tisFixedWeeks: function() {\n\t\treturn this.opt('fixedWeekCount');\n\t},\n\n\n\tisDateInOtherMonth: function(date) {\n\t\treturn date.month() !== moment.utc(this.currentUnzonedRange.startMs).month(); // TODO: optimize\n\t}\n\n});\n\n;;\n\nfcViews.basic = {\n\t'class': BasicView\n};\n\nfcViews.basicDay = {\n\ttype: 'basic',\n\tduration: { days: 1 }\n};\n\nfcViews.basicWeek = {\n\ttype: 'basic',\n\tduration: { weeks: 1 }\n};\n\nfcViews.month = {\n\t'class': MonthView,\n\tduration: { months: 1 }, // important for prev/next\n\tdefaults: {\n\t\tfixedWeekCount: true\n\t}\n};\n;;\n\n/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\n----------------------------------------------------------------------------------------------------------------------*/\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\n// Responsible for managing width/height.\n\nvar AgendaView = FC.AgendaView = View.extend({\n\n\tscroller: null,\n\n\ttimeGridClass: TimeGrid, // class used to instantiate the timeGrid. subclasses can override\n\ttimeGrid: null, // the main time-grid subcomponent of this view\n\n\tdayGridClass: DayGrid, // class used to instantiate the dayGrid. subclasses can override\n\tdayGrid: null, // the \"all-day\" subcomponent. if all-day is turned off, this will be null\n\n\taxisWidth: null, // the width of the time axis running down the side\n\n\theadContainerEl: null, // div that hold's the timeGrid's rendered date header\n\tnoScrollRowEls: null, // set of fake row elements that must compensate when scroller has scrollbars\n\n\t// when the time-grid isn't tall enough to occupy the given height, we render an
underneath\n\tbottomRuleEl: null,\n\n\t// indicates that minTime/maxTime affects rendering\n\tusesMinMaxTime: true,\n\n\n\tinitialize: function() {\n\t\tthis.timeGrid = this.instantiateTimeGrid();\n\t\tthis.addChild(this.timeGrid);\n\n\t\tif (this.opt('allDaySlot')) { // should we display the \"all-day\" area?\n\t\t\tthis.dayGrid = this.instantiateDayGrid(); // the all-day subcomponent of this view\n\t\t\tthis.addChild(this.dayGrid);\n\t\t}\n\n\t\tthis.scroller = new Scroller({\n\t\t\toverflowX: 'hidden',\n\t\t\toverflowY: 'auto'\n\t\t});\n\t},\n\n\n\t// Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass\n\tinstantiateTimeGrid: function() {\n\t\tvar subclass = this.timeGridClass.extend(agendaTimeGridMethods);\n\n\t\treturn new subclass(this);\n\t},\n\n\n\t// Instantiates the DayGrid object this view might need. Draws from this.dayGridClass\n\tinstantiateDayGrid: function() {\n\t\tvar subclass = this.dayGridClass.extend(agendaDayGridMethods);\n\n\t\treturn new subclass(this);\n\t},\n\n\n\t/* Rendering\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders the view into `this.el`, which has already been assigned\n\trenderDates: function() {\n\n\t\tthis.timeGrid.setRange(this.renderUnzonedRange);\n\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.setRange(this.renderUnzonedRange);\n\t\t}\n\n\t\tthis.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());\n\t\tthis.renderHead();\n\n\t\tthis.scroller.render();\n\t\tvar timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');\n\t\tvar timeGridEl = $('
').appendTo(timeGridWrapEl);\n\t\tthis.el.find('.fc-body > tr > td').append(timeGridWrapEl);\n\n\t\tthis.timeGrid.setElement(timeGridEl);\n\t\tthis.timeGrid.renderDates();\n\n\t\t// the
that sometimes displays under the time-grid\n\t\tthis.bottomRuleEl = $('
')\n\t\t\t.appendTo(this.timeGrid.el); // inject it into the time-grid\n\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.setElement(this.el.find('.fc-day-grid'));\n\t\t\tthis.dayGrid.renderDates();\n\n\t\t\t// have the day-grid extend it's coordinate area over the
dividing the two grids\n\t\t\tthis.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\n\t\t}\n\n\t\tthis.noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)'); // fake rows not within the scroller\n\t},\n\n\n\t// render the day-of-week headers\n\trenderHead: function() {\n\t\tthis.headContainerEl =\n\t\t\tthis.el.find('.fc-head-container')\n\t\t\t\t.html(this.timeGrid.renderHeadHtml());\n\t},\n\n\n\t// Unrenders the content of the view. Since we haven't separated skeleton rendering from date rendering,\n\t// always completely kill each grid's rendering.\n\t// TODO: move this over to ChronoComponent\n\tunrenderDates: function() {\n\t\tthis.timeGrid.unrenderDates();\n\t\tthis.timeGrid.removeElement();\n\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.unrenderDates();\n\t\t\tthis.dayGrid.removeElement();\n\t\t}\n\n\t\tthis.scroller.destroy();\n\t},\n\n\n\t// Builds the HTML skeleton for the view.\n\t// The day-grid and time-grid components will render inside containers defined by this HTML.\n\trenderSkeletonHtml: function() {\n\t\tvar theme = this.calendar.theme;\n\n\t\treturn '' +\n\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t'
' +\n\t\t\t\t\t\t\t(this.dayGrid ?\n\t\t\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t\t\t'
' :\n\t\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t\t) +\n\t\t\t\t\t\t'
';\n\t},\n\n\n\t// Generates an HTML attribute string for setting the width of the axis, if it is known\n\taxisStyleAttr: function() {\n\t\tif (this.axisWidth !== null) {\n\t\t\t return 'style=\"width:' + this.axisWidth + 'px\"';\n\t\t}\n\t\treturn '';\n\t},\n\n\n\t/* Now Indicator\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tgetNowIndicatorUnit: function() {\n\t\treturn this.timeGrid.getNowIndicatorUnit();\n\t},\n\n\n\t/* Dimensions\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\tupdateSize: function(isResize) {\n\t\tthis.timeGrid.updateSize(isResize);\n\n\t\tView.prototype.updateSize.call(this, isResize); // call the super-method\n\t},\n\n\n\t// Refreshes the horizontal dimensions of the view\n\tupdateWidth: function() {\n\t\t// make all axis cells line up, and record the width so newly created axis cells will have it\n\t\tthis.axisWidth = matchCellWidths(this.el.find('.fc-axis'));\n\t},\n\n\n\t// Adjusts the vertical dimensions of the view to the specified values\n\tsetHeight: function(totalHeight, isAuto) {\n\t\tvar eventLimit;\n\t\tvar scrollerHeight;\n\t\tvar scrollbarWidths;\n\n\t\t// reset all dimensions back to the original state\n\t\tthis.bottomRuleEl.hide(); // .show() will be called later if this
is necessary\n\t\tthis.scroller.clear(); // sets height to 'auto' and clears overflow\n\t\tuncompensateScroll(this.noScrollRowEls);\n\n\t\t// limit number of events in the all-day area\n\t\tif (this.dayGrid) {\n\t\t\tthis.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\n\n\t\t\teventLimit = this.opt('eventLimit');\n\t\t\tif (eventLimit && typeof eventLimit !== 'number') {\n\t\t\t\teventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\n\t\t\t}\n\t\t\tif (eventLimit) {\n\t\t\t\tthis.dayGrid.limitRows(eventLimit);\n\t\t\t}\n\t\t}\n\n\t\tif (!isAuto) { // should we force dimensions of the scroll container?\n\n\t\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\t\tthis.scroller.setHeight(scrollerHeight);\n\t\t\tscrollbarWidths = this.scroller.getScrollbarWidths();\n\n\t\t\tif (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\n\n\t\t\t\t// make the all-day and header rows lines up\n\t\t\t\tcompensateScroll(this.noScrollRowEls, scrollbarWidths);\n\n\t\t\t\t// the scrollbar compensation might have changed text flow, which might affect height, so recalculate\n\t\t\t\t// and reapply the desired height to the scroller.\n\t\t\t\tscrollerHeight = this.computeScrollerHeight(totalHeight);\n\t\t\t\tthis.scroller.setHeight(scrollerHeight);\n\t\t\t}\n\n\t\t\t// guarantees the same scrollbar widths\n\t\t\tthis.scroller.lockOverflow(scrollbarWidths);\n\n\t\t\t// if there's any space below the slats, show the horizontal rule.\n\t\t\t// this won't cause any new overflow, because lockOverflow already called.\n\t\t\tif (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\n\t\t\t\tthis.bottomRuleEl.show();\n\t\t\t}\n\t\t}\n\t},\n\n\n\t// given a desired total height of the view, returns what the height of the scroller should be\n\tcomputeScrollerHeight: function(totalHeight) {\n\t\treturn totalHeight -\n\t\t\tsubtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n\t},\n\n\n\t/* Scroll\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Computes the initial pre-configured scroll state prior to allowing the user to change it\n\tcomputeInitialDateScroll: function() {\n\t\tvar scrollTime = moment.duration(this.opt('scrollTime'));\n\t\tvar top = this.timeGrid.computeTimeTop(scrollTime);\n\n\t\t// zoom can give weird floating-point values. rather scroll a little bit further\n\t\ttop = Math.ceil(top);\n\n\t\tif (top) {\n\t\t\ttop++; // to overcome top border that slots beyond the first have. looks better\n\t\t}\n\n\t\treturn { top: top };\n\t},\n\n\n\tqueryDateScroll: function() {\n\t\treturn { top: this.scroller.getScrollTop() };\n\t},\n\n\n\tapplyDateScroll: function(scroll) {\n\t\tif (scroll.top !== undefined) {\n\t\t\tthis.scroller.setScrollTop(scroll.top);\n\t\t}\n\t},\n\n\n\t/* Hit Areas\n\t------------------------------------------------------------------------------------------------------------------*/\n\t// forward all hit-related method calls to the grids (dayGrid might not be defined)\n\n\n\tgetHitFootprint: function(hit) {\n\t\t// TODO: hit.component is set as a hack to identify where the hit came from\n\t\treturn hit.component.getHitFootprint(hit);\n\t},\n\n\n\tgetHitEl: function(hit) {\n\t\t// TODO: hit.component is set as a hack to identify where the hit came from\n\t\treturn hit.component.getHitEl(hit);\n\t},\n\n\n\t/* Events\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders events onto the view and populates the View's segment array\n\trenderEventsPayload: function(eventsPayload) {\n\t\tvar dayEventsPayload = {};\n\t\tvar timedEventsPayload = {};\n\t\tvar daySegs = [];\n\t\tvar timedSegs;\n\t\tvar id, eventInstanceGroup;\n\n\t\t// separate the events into all-day and timed\n\t\tfor (id in eventsPayload) {\n\t\t\teventInstanceGroup = eventsPayload[id];\n\n\t\t\tif (eventInstanceGroup.getEventDef().isAllDay()) {\n\t\t\t\tdayEventsPayload[id] = eventInstanceGroup;\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttimedEventsPayload[id] = eventInstanceGroup;\n\t\t\t}\n\t\t}\n\n\t\t// render the events in the subcomponents\n\t\ttimedSegs = this.timeGrid.renderEventsPayload(timedEventsPayload);\n\t\tif (this.dayGrid) {\n\t\t\tdaySegs = this.dayGrid.renderEventsPayload(dayEventsPayload);\n\t\t}\n\n\t\t// the all-day area is flexible and might have a lot of events, so shift the height\n\t\t// TODO: how will ChronoComponent handle this?\n\t\tthis.updateHeight();\n\t},\n\n\n\t/* Dragging (for events and external elements)\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// A returned value of `true` signals that a mock \"helper\" event has been rendered.\n\trenderDrag: function(eventFootprints, seg) {\n\t\tif (eventFootprints.length) {\n\t\t\tif (!eventFootprints[0].componentFootprint.isAllDay) {\n\t\t\t\treturn this.timeGrid.renderDrag(eventFootprints, seg);\n\t\t\t}\n\t\t\telse if (this.dayGrid) {\n\t\t\t\treturn this.dayGrid.renderDrag(eventFootprints, seg);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/* Selection\n\t------------------------------------------------------------------------------------------------------------------*/\n\n\n\t// Renders a visual indication of a selection\n\trenderSelectionFootprint: function(componentFootprint) {\n\t\tif (!componentFootprint.isAllDay) {\n\t\t\tthis.timeGrid.renderSelectionFootprint(componentFootprint);\n\t\t}\n\t\telse if (this.dayGrid) {\n\t\t\tthis.dayGrid.renderSelectionFootprint(componentFootprint);\n\t\t}\n\t}\n\n});\n\n\n// Methods that will customize the rendering behavior of the AgendaView's timeGrid\n// TODO: move into TimeGrid\nvar agendaTimeGridMethods = {\n\n\n\t// Generates the HTML that will go before the day-of week header cells\n\trenderHeadIntroHtml: function() {\n\t\tvar view = this.view;\n\t\tvar weekStart = view.calendar.msToUtcMoment(this.unzonedRange.startMs, true);\n\t\tvar weekText;\n\n\t\tif (this.opt('weekNumbers')) {\n\t\t\tweekText = weekStart.format(this.opt('smallWeekFormat'));\n\n\t\t\treturn '' +\n\t\t\t\t'' +\n\t\t\t\t\tview.buildGotoAnchorHtml( // aside from link, important for matchCellWidths\n\t\t\t\t\t\t{ date: weekStart, type: 'week', forceOff: this.colCnt > 1 },\n\t\t\t\t\t\thtmlEscape(weekText) // inner HTML\n\t\t\t\t\t) +\n\t\t\t\t'';\n\t\t}\n\t\telse {\n\t\t\treturn '';\n\t\t}\n\t},\n\n\n\t// Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\n\trenderBgIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\treturn '';\n\t},\n\n\n\t// Generates the HTML that goes before all other types of cells.\n\t// Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\n\trenderIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\treturn '';\n\t}\n\n};\n\n\n// Methods that will customize the rendering behavior of the AgendaView's dayGrid\nvar agendaDayGridMethods = {\n\n\n\t// Generates the HTML that goes before the all-day cells\n\trenderBgIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\treturn '' +\n\t\t\t'' +\n\t\t\t\t'' + // needed for matchCellWidths\n\t\t\t\t\tview.getAllDayHtml() +\n\t\t\t\t'' +\n\t\t\t'';\n\t},\n\n\n\t// Generates the HTML that goes before all other types of cells.\n\t// Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\n\trenderIntroHtml: function() {\n\t\tvar view = this.view;\n\n\t\treturn '';\n\t}\n\n};\n\n;;\n\nvar AGENDA_ALL_DAY_EVENT_LIMIT = 5;\n\n// potential nice values for the slot-duration and interval-duration\n// from largest to smallest\nvar AGENDA_STOCK_SUB_DURATIONS = [\n\t{ hours: 1 },\n\t{ minutes: 30 },\n\t{ minutes: 15 },\n\t{ seconds: 30 },\n\t{ seconds: 15 }\n];\n\nfcViews.agenda = {\n\t'class': AgendaView,\n\tdefaults: {\n\t\tallDaySlot: true,\n\t\tslotDuration: '00:30:00',\n\t\tslotEventOverlap: true // a bad name. confused with overlap/constraint system\n\t}\n};\n\nfcViews.agendaDay = {\n\ttype: 'agenda',\n\tduration: { days: 1 }\n};\n\nfcViews.agendaWeek = {\n\ttype: 'agenda',\n\tduration: { weeks: 1 }\n};\n;;\n\n/*\nResponsible for the scroller, and forwarding event-related actions into the \"grid\"\n*/\nvar ListView = View.extend({\n\n\tgrid: null,\n\tscroller: null,\n\n\tinitialize: function() {\n\t\tthis.grid = new ListViewGrid(this);\n\t\tthis.addChild(this.grid);\n\n\t\tthis.scroller = new Scroller({\n\t\t\toverflowX: 'hidden',\n\t\t\toverflowY: 'auto'\n\t\t});\n\t},\n\n\trenderSkeleton: function() {\n\t\tthis.el.addClass(\n\t\t\t'fc-list-view ' +\n\t\t\tthis.calendar.theme.getClass('listView')\n\t\t);\n\n\t\tthis.scroller.render();\n\t\tthis.scroller.el.appendTo(this.el);\n\n\t\tthis.grid.setElement(this.scroller.scrollEl);\n\t},\n\n\tunrenderSkeleton: function() {\n\t\tthis.scroller.destroy(); // will remove the Grid too\n\t},\n\n\tsetHeight: function(totalHeight, isAuto) {\n\t\tthis.scroller.setHeight(this.computeScrollerHeight(totalHeight));\n\t},\n\n\tcomputeScrollerHeight: function(totalHeight) {\n\t\treturn totalHeight -\n\t\t\tsubtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n\t},\n\n\trenderDates: function() {\n\t\tthis.grid.setRange(this.renderUnzonedRange); // needs to process range-related options\n\t},\n\n\tisEventDefResizable: function(eventDef) {\n\t\treturn false;\n\t},\n\n\tisEventDefDraggable: function(eventDef) {\n\t\treturn false;\n\t}\n\n});\n\n/*\nResponsible for event rendering and user-interaction.\nIts \"el\" is the inner-content of the above view's scroller.\n*/\nvar ListViewGrid = Grid.extend({\n\n\tdayDates: null, // localized ambig-time moment array\n\tdayRanges: null, // UnzonedRange[], of start-end of each day\n\tsegSelector: '.fc-list-item', // which elements accept event actions\n\thasDayInteractions: false, // no day selection or day clicking\n\n\trangeUpdated: function() {\n\t\tvar calendar = this.view.calendar;\n\t\tvar dayStart = calendar.msToUtcMoment(this.unzonedRange.startMs, true);\n\t\tvar viewEnd = calendar.msToUtcMoment(this.unzonedRange.endMs, true);\n\t\tvar dayDates = [];\n\t\tvar dayRanges = [];\n\n\t\twhile (dayStart < viewEnd) {\n\n\t\t\tdayDates.push(dayStart.clone());\n\n\t\t\tdayRanges.push(new UnzonedRange(\n\t\t\t\tdayStart,\n\t\t\t\tdayStart.clone().add(1, 'day')\n\t\t\t));\n\n\t\t\tdayStart.add(1, 'day');\n\t\t}\n\n\t\tthis.dayDates = dayDates;\n\t\tthis.dayRanges = dayRanges;\n\t},\n\n\t// slices by day\n\tcomponentFootprintToSegs: function(footprint) {\n\t\tvar view = this.view;\n\t\tvar dayRanges = this.dayRanges;\n\t\tvar dayIndex;\n\t\tvar segRange;\n\t\tvar seg;\n\t\tvar segs = [];\n\n\t\tfor (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\n\t\t\tsegRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);\n\n\t\t\tif (segRange) {\n\t\t\t\tseg = {\n\t\t\t\t\tstartMs: segRange.startMs,\n\t\t\t\t\tendMs: segRange.endMs,\n\t\t\t\t\tisStart: segRange.isStart,\n\t\t\t\t\tisEnd: segRange.isEnd,\n\t\t\t\t\tdayIndex: dayIndex\n\t\t\t\t};\n\n\t\t\t\tsegs.push(seg);\n\n\t\t\t\t// detect when footprint won't go fully into the next day,\n\t\t\t\t// and mutate the latest seg to the be the end.\n\t\t\t\tif (\n\t\t\t\t\t!seg.isEnd && !footprint.isAllDay &&\n\t\t\t\t\tfootprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + view.nextDayThreshold\n\t\t\t\t) {\n\t\t\t\t\tseg.endMs = footprint.unzonedRange.endMs;\n\t\t\t\t\tseg.isEnd = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\t// like \"4:00am\"\n\tcomputeEventTimeFormat: function() {\n\t\treturn this.opt('mediumTimeFormat');\n\t},\n\n\t// for events with a url, the whole should be clickable,\n\t// but it's impossible to wrap with an tag. simulate this.\n\thandleSegClick: function(seg, ev) {\n\t\tvar url;\n\n\t\tGrid.prototype.handleSegClick.apply(this, arguments); // super. might prevent the default action\n\n\t\t// not clicking on or within an with an href\n\t\tif (!$(ev.target).closest('a[href]').length) {\n\t\t\turl = seg.footprint.eventDef.url;\n\n\t\t\tif (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler\n\t\t\t\twindow.location.href = url; // simulate link click\n\t\t\t}\n\t\t}\n\t},\n\n\t// returns list of foreground segs that were actually rendered\n\trenderFgSegs: function(segs) {\n\t\tsegs = this.renderFgSegEls(segs); // might filter away hidden events\n\n\t\tif (!segs.length) {\n\t\t\tthis.renderEmptyMessage();\n\t\t}\n\t\telse {\n\t\t\tthis.renderSegList(segs);\n\t\t}\n\n\t\treturn segs;\n\t},\n\n\trenderEmptyMessage: function() {\n\t\tthis.el.html(\n\t\t\t'
' + // TODO: try less wraps\n\t\t\t'
' +\n\t\t\t'
' +\n\t\t\t\thtmlEscape(this.opt('noEventsMessage')) +\n\t\t\t'
' +\n\t\t\t'
' +\n\t\t\t'
'\n\t\t);\n\t},\n\n\t// render the event segments in the view\n\trenderSegList: function(allSegs) {\n\t\tvar segsByDay = this.groupSegsByDay(allSegs); // sparse array\n\t\tvar dayIndex;\n\t\tvar daySegs;\n\t\tvar i;\n\t\tvar tableEl = $('
');\n\t\tvar tbodyEl = tableEl.find('tbody');\n\n\t\tfor (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\n\t\t\tdaySegs = segsByDay[dayIndex];\n\n\t\t\tif (daySegs) { // sparse array, so might be undefined\n\n\t\t\t\t// append a day header\n\t\t\t\ttbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));\n\n\t\t\t\tthis.sortEventSegs(daySegs);\n\n\t\t\t\tfor (i = 0; i < daySegs.length; i++) {\n\t\t\t\t\ttbodyEl.append(daySegs[i].el); // append event row\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.el.empty().append(tableEl);\n\t},\n\n\t// Returns a sparse array of arrays, segs grouped by their dayIndex\n\tgroupSegsByDay: function(segs) {\n\t\tvar segsByDay = []; // sparse array\n\t\tvar i, seg;\n\n\t\tfor (i = 0; i < segs.length; i++) {\n\t\t\tseg = segs[i];\n\t\t\t(segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\n\t\t\t\t.push(seg);\n\t\t}\n\n\t\treturn segsByDay;\n\t},\n\n\t// generates the HTML for the day headers that live amongst the event rows\n\tdayHeaderHtml: function(dayDate) {\n\t\tvar view = this.view;\n\t\tvar mainFormat = this.opt('listDayFormat');\n\t\tvar altFormat = this.opt('listDayAltFormat');\n\n\t\treturn '' +\n\t\t\t'' +\n\t\t\t\t(mainFormat ?\n\t\t\t\t\tview.buildGotoAnchorHtml(\n\t\t\t\t\t\tdayDate,\n\t\t\t\t\t\t{ 'class': 'fc-list-heading-main' },\n\t\t\t\t\t\thtmlEscape(dayDate.format(mainFormat)) // inner HTML\n\t\t\t\t\t) :\n\t\t\t\t\t'') +\n\t\t\t\t(altFormat ?\n\t\t\t\t\tview.buildGotoAnchorHtml(\n\t\t\t\t\t\tdayDate,\n\t\t\t\t\t\t{ 'class': 'fc-list-heading-alt' },\n\t\t\t\t\t\thtmlEscape(dayDate.format(altFormat)) // inner HTML\n\t\t\t\t\t) :\n\t\t\t\t\t'') +\n\t\t\t'' +\n\t\t'';\n\t},\n\n\t// generates the HTML for a single event row\n\tfgSegHtml: function(seg) {\n\t\tvar view = this.view;\n\t\tvar calendar = view.calendar;\n\t\tvar theme = calendar.theme;\n\t\tvar classes = [ 'fc-list-item' ].concat(this.getSegCustomClasses(seg));\n\t\tvar bgColor = this.getSegBackgroundColor(seg);\n\t\tvar eventFootprint = seg.footprint;\n\t\tvar eventDef = eventFootprint.eventDef;\n\t\tvar componentFootprint = eventFootprint.componentFootprint;\n\t\tvar url = eventDef.url;\n\t\tvar timeHtml;\n\n\t\tif (componentFootprint.isAllDay) {\n\t\t\ttimeHtml = view.getAllDayHtml();\n\t\t}\n\t\t// if the event appears to span more than one day\n\t\telse if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\n\t\t\tif (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day\n\t\t\t\ttimeHtml = htmlEscape(this._getEventTimeText(\n\t\t\t\t\tcalendar.msToMoment(seg.startMs),\n\t\t\t\t\tcalendar.msToMoment(seg.endMs),\n\t\t\t\t\tcomponentFootprint.isAllDay\n\t\t\t\t));\n\t\t\t}\n\t\t\telse { // inner segment that lasts the whole day\n\t\t\t\ttimeHtml = view.getAllDayHtml();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Display the normal time text for the *event's* times\n\t\t\ttimeHtml = htmlEscape(this.getEventTimeText(eventFootprint));\n\t\t}\n\n\t\tif (url) {\n\t\t\tclasses.push('fc-has-url');\n\t\t}\n\n\t\treturn '' +\n\t\t\t(this.displayEventTime ?\n\t\t\t\t'' +\n\t\t\t\t\t(timeHtml || '') +\n\t\t\t\t'' :\n\t\t\t\t'') +\n\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t'' +\n\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t\t\thtmlEscape(eventDef.title || '') +\n\t\t\t\t'
' +\n\t\t\t'' +\n\t\t'';\n\t}\n\n});\n\n;;\n\nfcViews.list = {\n\t'class': ListView,\n\tbuttonTextKey: 'list', // what to lookup in locale files\n\tdefaults: {\n\t\tbuttonText: 'list', // text to display for English\n\t\tlistDayFormat: 'LL', // like \"January 1, 2016\"\n\t\tnoEventsMessage: 'No events to display'\n\t}\n};\n\nfcViews.listDay = {\n\ttype: 'list',\n\tduration: { days: 1 },\n\tdefaults: {\n\t\tlistDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header\n\t}\n};\n\nfcViews.listWeek = {\n\ttype: 'list',\n\tduration: { weeks: 1 },\n\tdefaults: {\n\t\tlistDayFormat: 'dddd', // day-of-week is more important\n\t\tlistDayAltFormat: 'LL'\n\t}\n};\n\nfcViews.listMonth = {\n\ttype: 'list',\n\tduration: { month: 1 },\n\tdefaults: {\n\t\tlistDayAltFormat: 'dddd' // day-of-week is nice-to-have\n\t}\n};\n\nfcViews.listYear = {\n\ttype: 'list',\n\tduration: { year: 1 },\n\tdefaults: {\n\t\tlistDayAltFormat: 'dddd' // day-of-week is nice-to-have\n\t}\n};\n\n;;\n\r\nreturn FC; // export for Node/CommonJS\r\n});","!function(e){\"function\"==typeof define&&define.amd?define([\"jquery\",\"moment\"],e):\"object\"==typeof exports?module.exports=e(require(\"jquery\"),require(\"moment\")):e(jQuery,moment)}(function(e,a){!function(){!function(){a.defineLocale(\"af\",{months:\"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag\".split(\"_\"),weekdaysShort:\"Son_Maa_Din_Woe_Don_Vry_Sat\".split(\"_\"),weekdaysMin:\"So_Ma_Di_Wo_Do_Vr_Sa\".split(\"_\"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?\"vm\":\"VM\":t?\"nm\":\"NM\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Vandag om] LT\",nextDay:\"[Môre om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[Gister om] LT\",lastWeek:\"[Laas] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"oor %s\",past:\"%s gelede\",s:\"'n paar sekondes\",m:\"'n minuut\",mm:\"%d minute\",h:\"'n uur\",hh:\"%d ure\",d:\"'n dag\",dd:\"%d dae\",M:\"'n maand\",MM:\"%d maande\",y:\"'n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"af\",\"af\",{closeText:\"Selekteer\",prevText:\"Vorige\",nextText:\"Volgende\",currentText:\"Vandag\",monthNames:[\"Januarie\",\"Februarie\",\"Maart\",\"April\",\"Mei\",\"Junie\",\"Julie\",\"Augustus\",\"September\",\"Oktober\",\"November\",\"Desember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mrt\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Des\"],dayNames:[\"Sondag\",\"Maandag\",\"Dinsdag\",\"Woensdag\",\"Donderdag\",\"Vrydag\",\"Saterdag\"],dayNamesShort:[\"Son\",\"Maa\",\"Din\",\"Woe\",\"Don\",\"Vry\",\"Sat\"],dayNamesMin:[\"So\",\"Ma\",\"Di\",\"Wo\",\"Do\",\"Vr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"af\",{buttonText:{year:\"Jaar\",month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayHtml:\"Heeldag\",eventLimitText:\"Addisionele\",noEventsMessage:\"Daar is geen gebeurtenis\"})}(),function(){!function(){var e={1:\"١\",2:\"٢\",3:\"٣\",4:\"٤\",5:\"٥\",6:\"٦\",7:\"٧\",8:\"٨\",9:\"٩\",0:\"٠\"},t={\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"٠\":\"0\"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:[\"أقل من ثانية\",\"ثانية واحدة\",[\"ثانيتان\",\"ثانيتين\"],\"%d ثوان\",\"%d ثانية\",\"%d ثانية\"],m:[\"أقل من دقيقة\",\"دقيقة واحدة\",[\"دقيقتان\",\"دقيقتين\"],\"%d دقائق\",\"%d دقيقة\",\"%d دقيقة\"],h:[\"أقل من ساعة\",\"ساعة واحدة\",[\"ساعتان\",\"ساعتين\"],\"%d ساعات\",\"%d ساعة\",\"%d ساعة\"],d:[\"أقل من يوم\",\"يوم واحد\",[\"يومان\",\"يومين\"],\"%d أيام\",\"%d يومًا\",\"%d يوم\"],M:[\"أقل من شهر\",\"شهر واحد\",[\"شهران\",\"شهرين\"],\"%d أشهر\",\"%d شهرا\",\"%d شهر\"],y:[\"أقل من عام\",\"عام واحد\",[\"عامان\",\"عامين\"],\"%d أعوام\",\"%d عامًا\",\"%d عام\"]},s=function(e){return function(a,t,s,d){var i=n(a),o=r[e][n(a)];return 2===i&&(o=o[t?0:1]),o.replace(/%d/i,a)}},d=[\"كانون الثاني يناير\",\"شباط فبراير\",\"آذار مارس\",\"نيسان أبريل\",\"أيار مايو\",\"حزيران يونيو\",\"تموز يوليو\",\"آب أغسطس\",\"أيلول سبتمبر\",\"تشرين الأول أكتوبر\",\"تشرين الثاني نوفمبر\",\"كانون الأول ديسمبر\"];a.defineLocale(\"ar\",{months:d,monthsShort:d,weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/‏M/‏YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,a,t){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم عند الساعة] LT\",nextDay:\"[غدًا عند الساعة] LT\",nextWeek:\"dddd [عند الساعة] LT\",lastDay:\"[أمس عند الساعة] LT\",lastWeek:\"dddd [عند الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"بعد %s\",past:\"منذ %s\",s:s(\"s\"),m:s(\"m\"),mm:s(\"m\"),h:s(\"h\"),hh:s(\"h\"),d:s(\"d\"),dd:s(\"d\"),M:s(\"M\"),MM:s(\"M\"),y:s(\"y\"),yy:s(\"y\")},preparse:function(e){return e.replace(/\\u200f/g,\"\").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,\",\")},postformat:function(a){return a.replace(/\\d/g,function(a){return e[a]}).replace(/,/g,\"،\")},week:{dow:6,doy:12}})}(),e.fullCalendar.datepickerLocale(\"ar\",\"ar\",{closeText:\"إغلاق\",prevText:\"<السابق\",nextText:\"التالي>\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ar\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})}(),function(){!function(){a.defineLocale(\"ar-dz\",{months:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),monthsShort:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"أح_إث_ثلا_أر_خم_جم_سب\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:0,doy:4}})}(),e.fullCalendar.datepickerLocale(\"ar-dz\",\"ar-DZ\",{closeText:\"إغلاق\",prevText:\"<السابق\",nextText:\"التالي>\",currentText:\"اليوم\",monthNames:[\"جانفي\",\"فيفري\",\"مارس\",\"أفريل\",\"ماي\",\"جوان\",\"جويلية\",\"أوت\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ar-dz\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})}(),function(){!function(){a.defineLocale(\"ar-kw\",{months:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),monthsShort:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),weekdays:\"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:0,doy:12}})}(),e.fullCalendar.datepickerLocale(\"ar-kw\",\"ar\",{closeText:\"إغلاق\",prevText:\"<السابق\",nextText:\"التالي>\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ar-kw\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})}(),function(){!function(){var e={1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",0:\"0\"},t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:[\"أقل من ثانية\",\"ثانية واحدة\",[\"ثانيتان\",\"ثانيتين\"],\"%d ثوان\",\"%d ثانية\",\"%d ثانية\"],m:[\"أقل من دقيقة\",\"دقيقة واحدة\",[\"دقيقتان\",\"دقيقتين\"],\"%d دقائق\",\"%d دقيقة\",\"%d دقيقة\"],h:[\"أقل من ساعة\",\"ساعة واحدة\",[\"ساعتان\",\"ساعتين\"],\"%d ساعات\",\"%d ساعة\",\"%d ساعة\"],d:[\"أقل من يوم\",\"يوم واحد\",[\"يومان\",\"يومين\"],\"%d أيام\",\"%d يومًا\",\"%d يوم\"],M:[\"أقل من شهر\",\"شهر واحد\",[\"شهران\",\"شهرين\"],\"%d أشهر\",\"%d شهرا\",\"%d شهر\"],y:[\"أقل من عام\",\"عام واحد\",[\"عامان\",\"عامين\"],\"%d أعوام\",\"%d عامًا\",\"%d عام\"]},r=function(e){return function(a,r,s,d){var i=t(a),o=n[e][t(a)];return 2===i&&(o=o[r?0:1]),o.replace(/%d/i,a)}},s=[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"];a.defineLocale(\"ar-ly\",{months:s,monthsShort:s,weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/‏M/‏YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,a,t){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم عند الساعة] LT\",nextDay:\"[غدًا عند الساعة] LT\",nextWeek:\"dddd [عند الساعة] LT\",lastDay:\"[أمس عند الساعة] LT\",lastWeek:\"dddd [عند الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"بعد %s\",past:\"منذ %s\",s:r(\"s\"),m:r(\"m\"),mm:r(\"m\"),h:r(\"h\"),hh:r(\"h\"),d:r(\"d\"),dd:r(\"d\"),M:r(\"M\"),MM:r(\"M\"),y:r(\"y\"),yy:r(\"y\")},preparse:function(e){return e.replace(/\\u200f/g,\"\").replace(/،/g,\",\")},postformat:function(a){return a.replace(/\\d/g,function(a){return e[a]}).replace(/,/g,\"،\")},week:{dow:6,doy:12}})}(),e.fullCalendar.datepickerLocale(\"ar-ly\",\"ar\",{closeText:\"إغلاق\",prevText:\"<السابق\",nextText:\"التالي>\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ar-ly\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})}(),function(){!function(){a.defineLocale(\"ar-ma\",{months:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),monthsShort:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),weekdays:\"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:6,doy:12}})}(),e.fullCalendar.datepickerLocale(\"ar-ma\",\"ar\",{closeText:\"إغلاق\",prevText:\"<السابق\",nextText:\"التالي>\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ar-ma\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})}(),function(){!function(){var e={1:\"١\",2:\"٢\",3:\"٣\",4:\"٤\",5:\"٥\",6:\"٦\",7:\"٧\",8:\"٨\",9:\"٩\",0:\"٠\"},t={\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"٠\":\"0\"};a.defineLocale(\"ar-sa\",{months:\"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),monthsShort:\"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,a,t){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,\",\")},postformat:function(a){return a.replace(/\\d/g,function(a){return e[a]}).replace(/,/g,\"،\")},week:{dow:0,doy:6}})}(),e.fullCalendar.datepickerLocale(\"ar-sa\",\"ar\",{closeText:\"إغلاق\",prevText:\"<السابق\",nextText:\"التالي>\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ar-sa\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})}(),function(){!function(){a.defineLocale(\"ar-tn\",{months:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),monthsShort:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"ar-tn\",\"ar\",{closeText:\"إغلاق\",prevText:\"<السابق\",nextText:\"التالي>\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ar-tn\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})}(),function(){!function(){a.defineLocale(\"bg\",{months:\"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември\".split(\"_\"),monthsShort:\"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек\".split(\"_\"),weekdays:\"неделя_понеделник_вторник_сряда_четвъртък_петък_събота\".split(\"_\"),weekdaysShort:\"нед_пон_вто_сря_чет_пет_съб\".split(\"_\"),weekdaysMin:\"нд_пн_вт_ср_чт_пт_сб\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Днес в] LT\",nextDay:\"[Утре в] LT\",nextWeek:\"dddd [в] LT\",lastDay:\"[Вчера в] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[В изминалата] dddd [в] LT\";case 1:case 2:case 4:case 5:return\"[В изминалия] dddd [в] LT\"}},sameElse:\"L\"},relativeTime:{future:\"след %s\",past:\"преди %s\",s:\"няколко секунди\",m:\"минута\",mm:\"%d минути\",h:\"час\",hh:\"%d часа\",d:\"ден\",dd:\"%d дни\",M:\"месец\",MM:\"%d месеца\",y:\"година\",yy:\"%d години\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+\"-ев\":0===t?e+\"-ен\":t>10&&t<20?e+\"-ти\":1===a?e+\"-ви\":2===a?e+\"-ри\":7===a||8===a?e+\"-ми\":e+\"-ти\"},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"bg\",\"bg\",{closeText:\"затвори\",prevText:\"<назад\",nextText:\"напред>\",nextBigText:\">>\",currentText:\"днес\",monthNames:[\"Януари\",\"Февруари\",\"Март\",\"Април\",\"Май\",\"Юни\",\"Юли\",\"Август\",\"Септември\",\"Октомври\",\"Ноември\",\"Декември\"],monthNamesShort:[\"Яну\",\"Фев\",\"Мар\",\"Апр\",\"Май\",\"Юни\",\"Юли\",\"Авг\",\"Сеп\",\"Окт\",\"Нов\",\"Дек\"],dayNames:[\"Неделя\",\"Понеделник\",\"Вторник\",\"Сряда\",\"Четвъртък\",\"Петък\",\"Събота\"],dayNamesShort:[\"Нед\",\"Пон\",\"Вто\",\"Сря\",\"Чет\",\"Пет\",\"Съб\"],dayNamesMin:[\"Не\",\"По\",\"Вт\",\"Ср\",\"Че\",\"Пе\",\"Съ\"],weekHeader:\"Wk\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"bg\",{buttonText:{month:\"Месец\",week:\"Седмица\",day:\"Ден\",list:\"График\"},allDayText:\"Цял ден\",eventLimitText:function(e){return\"+още \"+e},noEventsMessage:\"Няма събития за показване\"})}(),function(){!function(){a.defineLocale(\"ca\",{months:{standalone:\"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre\".split(\"_\"),format:\"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\"_\"),isFormat:/D[oD]?(\\s)+MMMM/},monthsShort:\"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte\".split(\"_\"),weekdaysShort:\"dg._dl._dt._dc._dj._dv._ds.\".split(\"_\"),weekdaysMin:\"Dg_Dl_Dt_Dc_Dj_Dv_Ds\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"[el] D MMMM [de] YYYY\",ll:\"D MMM YYYY\",LLL:\"[el] D MMMM [de] YYYY [a les] H:mm\",lll:\"D MMM YYYY, H:mm\",LLLL:\"[el] dddd D MMMM [de] YYYY [a les] H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},calendar:{sameDay:function(){return\"[avui a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextDay:function(){return\"[demà a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextWeek:function(){return\"dddd [a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastDay:function(){return\"[ahir a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [passat a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"d'aquí %s\",past:\"fa %s\",s:\"uns segons\",m:\"un minut\",mm:\"%d minuts\",h:\"una hora\",hh:\"%d hores\",d:\"un dia\",dd:\"%d dies\",M:\"un mes\",MM:\"%d mesos\",y:\"un any\",yy:\"%d anys\"},dayOfMonthOrdinalParse:/\\d{1,2}(r|n|t|è|a)/,ordinal:function(e,a){var t=1===e?\"r\":2===e?\"n\":3===e?\"r\":4===e?\"t\":\"è\";return\"w\"!==a&&\"W\"!==a||(t=\"a\"),e+t},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"ca\",\"ca\",{closeText:\"Tanca\",prevText:\"Anterior\",nextText:\"Següent\",currentText:\"Avui\",monthNames:[\"gener\",\"febrer\",\"març\",\"abril\",\"maig\",\"juny\",\"juliol\",\"agost\",\"setembre\",\"octubre\",\"novembre\",\"desembre\"],monthNamesShort:[\"gen\",\"feb\",\"març\",\"abr\",\"maig\",\"juny\",\"jul\",\"ag\",\"set\",\"oct\",\"nov\",\"des\"],dayNames:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"],dayNamesShort:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],dayNamesMin:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],weekHeader:\"Set\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ca\",{buttonText:{month:\"Mes\",week:\"Setmana\",day:\"Dia\",list:\"Agenda\"},allDayText:\"Tot el dia\",eventLimitText:\"més\",noEventsMessage:\"No hi ha esdeveniments per mostrar\"})}(),function(){!function(){function e(e){return e>1&&e<5&&1!=~~(e/10)}function t(a,t,n,r){var s=a+\" \";switch(n){case\"s\":return t||r?\"pár sekund\":\"pár sekundami\";case\"m\":return t?\"minuta\":r?\"minutu\":\"minutou\";case\"mm\":return t||r?s+(e(a)?\"minuty\":\"minut\"):s+\"minutami\";case\"h\":return t?\"hodina\":r?\"hodinu\":\"hodinou\";case\"hh\":return t||r?s+(e(a)?\"hodiny\":\"hodin\"):s+\"hodinami\";case\"d\":return t||r?\"den\":\"dnem\";case\"dd\":return t||r?s+(e(a)?\"dny\":\"dní\"):s+\"dny\";case\"M\":return t||r?\"měsíc\":\"měsícem\";case\"MM\":return t||r?s+(e(a)?\"měsíce\":\"měsíců\"):s+\"měsíci\";case\"y\":return t||r?\"rok\":\"rokem\";case\"yy\":return t||r?s+(e(a)?\"roky\":\"let\"):s+\"lety\"}}var n=\"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec\".split(\"_\"),r=\"led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro\".split(\"_\");a.defineLocale(\"cs\",{months:n,monthsShort:r,monthsParse:function(e,a){var t,n=[];for(t=0;t<12;t++)n[t]=new RegExp(\"^\"+e[t]+\"$|^\"+a[t]+\"$\",\"i\");return n}(n,r),shortMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp(\"^\"+e[a]+\"$\",\"i\");return t}(r),longMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp(\"^\"+e[a]+\"$\",\"i\");return t}(n),weekdays:\"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota\".split(\"_\"),weekdaysShort:\"ne_po_út_st_čt_pá_so\".split(\"_\"),weekdaysMin:\"ne_po_út_st_čt_pá_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\",l:\"D. M. YYYY\"},calendar:{sameDay:\"[dnes v] LT\",nextDay:\"[zítra v] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v neděli v] LT\";case 1:case 2:return\"[v] dddd [v] LT\";case 3:return\"[ve středu v] LT\";case 4:return\"[ve čtvrtek v] LT\";case 5:return\"[v pátek v] LT\";case 6:return\"[v sobotu v] LT\"}},lastDay:\"[včera v] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulou neděli v] LT\";case 1:case 2:return\"[minulé] dddd [v] LT\";case 3:return\"[minulou středu v] LT\";case 4:case 5:return\"[minulý] dddd [v] LT\";case 6:return\"[minulou sobotu v] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"před %s\",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"cs\",\"cs\",{closeText:\"Zavřít\",prevText:\"<Dříve\",nextText:\"Později>\",currentText:\"Nyní\",monthNames:[\"leden\",\"únor\",\"březen\",\"duben\",\"květen\",\"červen\",\"červenec\",\"srpen\",\"září\",\"říjen\",\"listopad\",\"prosinec\"],monthNamesShort:[\"led\",\"úno\",\"bře\",\"dub\",\"kvě\",\"čer\",\"čvc\",\"srp\",\"zář\",\"říj\",\"lis\",\"pro\"],dayNames:[\"neděle\",\"pondělí\",\"úterý\",\"středa\",\"čtvrtek\",\"pátek\",\"sobota\"],dayNamesShort:[\"ne\",\"po\",\"út\",\"st\",\"čt\",\"pá\",\"so\"],dayNamesMin:[\"ne\",\"po\",\"út\",\"st\",\"čt\",\"pá\",\"so\"],weekHeader:\"Týd\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"cs\",{buttonText:{month:\"Měsíc\",week:\"Týden\",day:\"Den\",list:\"Agenda\"},allDayText:\"Celý den\",eventLimitText:function(e){return\"+další: \"+e},noEventsMessage:\"Žádné akce k zobrazení\"})}(),function(){!function(){a.defineLocale(\"da\",{months:\"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag\".split(\"_\"),weekdaysShort:\"søn_man_tir_ons_tor_fre_lør\".split(\"_\"),weekdaysMin:\"sø_ma_ti_on_to_fr_lø\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd [d.] D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"på dddd [kl.] LT\",lastDay:\"[i går kl.] LT\",lastWeek:\"[i] dddd[s kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"få sekunder\",m:\"et minut\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dage\",M:\"en måned\",MM:\"%d måneder\",y:\"et år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"da\",\"da\",{closeText:\"Luk\",prevText:\"<Forrige\",nextText:\"Næste>\",currentText:\"Idag\",monthNames:[\"Januar\",\"Februar\",\"Marts\",\"April\",\"Maj\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Søndag\",\"Mandag\",\"Tirsdag\",\"Onsdag\",\"Torsdag\",\"Fredag\",\"Lørdag\"],dayNamesShort:[\"Søn\",\"Man\",\"Tir\",\"Ons\",\"Tor\",\"Fre\",\"Lør\"],dayNamesMin:[\"Sø\",\"Ma\",\"Ti\",\"On\",\"To\",\"Fr\",\"Lø\"],weekHeader:\"Uge\",dateFormat:\"dd-mm-yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"da\",{buttonText:{month:\"Måned\",week:\"Uge\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dagen\",eventLimitText:\"flere\",noEventsMessage:\"Ingen arrangementer at vise\"})}(),function(){!function(){function e(e,a,t,n){var r={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return a?r[t][0]:r[t][1]}a.defineLocale(\"de\",{months:\"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",m:e,mm:\"%d Minuten\",h:e,hh:\"%d Stunden\",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"de\",\"de\",{closeText:\"Schließen\",prevText:\"<Zurück\",nextText:\"Vor>\",currentText:\"Heute\",monthNames:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],dayNamesShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],dayNamesMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"KW\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"de\",{buttonText:{month:\"Monat\",week:\"Woche\",day:\"Tag\",list:\"Terminübersicht\"},allDayText:\"Ganztägig\",eventLimitText:function(e){return\"+ weitere \"+e},noEventsMessage:\"Keine Ereignisse anzuzeigen\"})}(),function(){!function(){function e(e,a,t,n){var r={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return a?r[t][0]:r[t][1]}a.defineLocale(\"de-at\",{months:\"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",m:e,mm:\"%d Minuten\",h:e,hh:\"%d Stunden\",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"de-at\",\"de\",{closeText:\"Schließen\",prevText:\"<Zurück\",nextText:\"Vor>\",currentText:\"Heute\",monthNames:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],dayNamesShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],dayNamesMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"KW\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"de-at\",{buttonText:{month:\"Monat\",week:\"Woche\",day:\"Tag\",list:\"Terminübersicht\"},allDayText:\"Ganztägig\",eventLimitText:function(e){return\"+ weitere \"+e},noEventsMessage:\"Keine Ereignisse anzuzeigen\"})}(),function(){!function(){function e(e,a,t,n){var r={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return a?r[t][0]:r[t][1]}a.defineLocale(\"de-ch\",{months:\"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH.mm\",LLLL:\"dddd, D. MMMM YYYY HH.mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",m:e,mm:\"%d Minuten\",h:e,hh:\"%d Stunden\",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"de-ch\",\"de\",{closeText:\"Schließen\",prevText:\"<Zurück\",nextText:\"Vor>\",currentText:\"Heute\",monthNames:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],dayNamesShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],dayNamesMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],\nweekHeader:\"KW\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"de-ch\",{buttonText:{month:\"Monat\",week:\"Woche\",day:\"Tag\",list:\"Terminübersicht\"},allDayText:\"Ganztägig\",eventLimitText:function(e){return\"+ weitere \"+e},noEventsMessage:\"Keine Ereignisse anzuzeigen\"})}(),function(){!function(){function e(e){return e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}a.defineLocale(\"el\",{monthsNominativeEl:\"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος\".split(\"_\"),monthsGenitiveEl:\"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου\".split(\"_\"),months:function(e,a){return e?/D/.test(a.substring(0,a.indexOf(\"MMMM\")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:\"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ\".split(\"_\"),weekdays:\"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο\".split(\"_\"),weekdaysShort:\"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ\".split(\"_\"),weekdaysMin:\"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα\".split(\"_\"),meridiem:function(e,a,t){return e>11?t?\"μμ\":\"ΜΜ\":t?\"πμ\":\"ΠΜ\"},isPM:function(e){return\"μ\"===(e+\"\").toLowerCase()[0]},meridiemParse:/[ΠΜ]\\.?Μ?\\.?/i,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendarEl:{sameDay:\"[Σήμερα {}] LT\",nextDay:\"[Αύριο {}] LT\",nextWeek:\"dddd [{}] LT\",lastDay:\"[Χθες {}] LT\",lastWeek:function(){switch(this.day()){case 6:return\"[το προηγούμενο] dddd [{}] LT\";default:return\"[την προηγούμενη] dddd [{}] LT\"}},sameElse:\"L\"},calendar:function(a,t){var n=this._calendarEl[a],r=t&&t.hours();return e(n)&&(n=n.apply(t)),n.replace(\"{}\",r%12==1?\"στη\":\"στις\")},relativeTime:{future:\"σε %s\",past:\"%s πριν\",s:\"λίγα δευτερόλεπτα\",m:\"ένα λεπτό\",mm:\"%d λεπτά\",h:\"μία ώρα\",hh:\"%d ώρες\",d:\"μία μέρα\",dd:\"%d μέρες\",M:\"ένας μήνας\",MM:\"%d μήνες\",y:\"ένας χρόνος\",yy:\"%d χρόνια\"},dayOfMonthOrdinalParse:/\\d{1,2}η/,ordinal:\"%dη\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"el\",\"el\",{closeText:\"Κλείσιμο\",prevText:\"Προηγούμενος\",nextText:\"Επόμενος\",currentText:\"Σήμερα\",monthNames:[\"Ιανουάριος\",\"Φεβρουάριος\",\"Μάρτιος\",\"Απρίλιος\",\"Μάιος\",\"Ιούνιος\",\"Ιούλιος\",\"Αύγουστος\",\"Σεπτέμβριος\",\"Οκτώβριος\",\"Νοέμβριος\",\"Δεκέμβριος\"],monthNamesShort:[\"Ιαν\",\"Φεβ\",\"Μαρ\",\"Απρ\",\"Μαι\",\"Ιουν\",\"Ιουλ\",\"Αυγ\",\"Σεπ\",\"Οκτ\",\"Νοε\",\"Δεκ\"],dayNames:[\"Κυριακή\",\"Δευτέρα\",\"Τρίτη\",\"Τετάρτη\",\"Πέμπτη\",\"Παρασκευή\",\"Σάββατο\"],dayNamesShort:[\"Κυρ\",\"Δευ\",\"Τρι\",\"Τετ\",\"Πεμ\",\"Παρ\",\"Σαβ\"],dayNamesMin:[\"Κυ\",\"Δε\",\"Τρ\",\"Τε\",\"Πε\",\"Πα\",\"Σα\"],weekHeader:\"Εβδ\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"el\",{buttonText:{month:\"Μήνας\",week:\"Εβδομάδα\",day:\"Ημέρα\",list:\"Ατζέντα\"},allDayText:\"Ολοήμερο\",eventLimitText:\"περισσότερα\",noEventsMessage:\"Δεν υπάρχουν γεγονότα για να εμφανιστεί\"})}(),function(){!function(){a.defineLocale(\"en-au\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"en-au\",\"en-AU\",{closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",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\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"en-au\")}(),function(){!function(){a.defineLocale(\"en-ca\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"YYYY-MM-DD\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")}})}(),e.fullCalendar.locale(\"en-ca\")}(),function(){!function(){a.defineLocale(\"en-gb\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"en-gb\",\"en-GB\",{closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",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\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"en-gb\")}(),function(){!function(){a.defineLocale(\"en-ie\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})}(),e.fullCalendar.locale(\"en-ie\")}(),function(){!function(){a.defineLocale(\"en-nz\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"en-nz\",\"en-NZ\",{closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",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\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"en-nz\")}(),function(){!function(){var e=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),t=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\");a.defineLocale(\"es\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(a,n){return a?/-MMM-/.test(n)?t[a.month()]:e[a.month()]:e},monthsParseExact:!0,weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[mañana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"es\",\"es\",{closeText:\"Cerrar\",prevText:\"<Ant\",nextText:\"Sig>\",currentText:\"Hoy\",monthNames:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],monthNamesShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],dayNames:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"],dayNamesShort:[\"dom\",\"lun\",\"mar\",\"mié\",\"jue\",\"vie\",\"sáb\"],dayNamesMin:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"es\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"Día\",list:\"Agenda\"},allDayHtml:\"Todo
el día\",eventLimitText:\"más\",noEventsMessage:\"No hay eventos para mostrar\"})}(),function(){!function(){var e=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),t=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\");a.defineLocale(\"es-do\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(a,n){return a?/-MMM-/.test(n)?t[a.month()]:e[a.month()]:e},monthsParseExact:!0,weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY h:mm A\",LLLL:\"dddd, D [de] MMMM [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[mañana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"es-do\",\"es\",{closeText:\"Cerrar\",prevText:\"<Ant\",nextText:\"Sig>\",currentText:\"Hoy\",monthNames:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],monthNamesShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],dayNames:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"],dayNamesShort:[\"dom\",\"lun\",\"mar\",\"mié\",\"jue\",\"vie\",\"sáb\"],dayNamesMin:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"es-do\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"Día\",list:\"Agenda\"},allDayHtml:\"Todo
el día\",eventLimitText:\"más\",noEventsMessage:\"No hay eventos para mostrar\"})}(),function(){!function(){function e(e,a,t,n){var r={s:[\"mõne sekundi\",\"mõni sekund\",\"paar sekundit\"],m:[\"ühe minuti\",\"üks minut\"],mm:[e+\" minuti\",e+\" minutit\"],h:[\"ühe tunni\",\"tund aega\",\"üks tund\"],hh:[e+\" tunni\",e+\" tundi\"],d:[\"ühe päeva\",\"üks päev\"],M:[\"kuu aja\",\"kuu aega\",\"üks kuu\"],MM:[e+\" kuu\",e+\" kuud\"],y:[\"ühe aasta\",\"aasta\",\"üks aasta\"],yy:[e+\" aasta\",e+\" aastat\"]};return a?r[t][2]?r[t][2]:r[t][1]:n?r[t][0]:r[t][1]}a.defineLocale(\"et\",{months:\"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember\".split(\"_\"),monthsShort:\"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets\".split(\"_\"),weekdays:\"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev\".split(\"_\"),weekdaysShort:\"P_E_T_K_N_R_L\".split(\"_\"),weekdaysMin:\"P_E_T_K_N_R_L\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[Täna,] LT\",nextDay:\"[Homme,] LT\",nextWeek:\"[Järgmine] dddd LT\",lastDay:\"[Eile,] LT\",lastWeek:\"[Eelmine] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s pärast\",past:\"%s tagasi\",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:\"%d päeva\",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"et\",\"et\",{closeText:\"Sulge\",prevText:\"Eelnev\",nextText:\"Järgnev\",currentText:\"Täna\",monthNames:[\"Jaanuar\",\"Veebruar\",\"Märts\",\"Aprill\",\"Mai\",\"Juuni\",\"Juuli\",\"August\",\"September\",\"Oktoober\",\"November\",\"Detsember\"],monthNamesShort:[\"Jaan\",\"Veebr\",\"Märts\",\"Apr\",\"Mai\",\"Juuni\",\"Juuli\",\"Aug\",\"Sept\",\"Okt\",\"Nov\",\"Dets\"],dayNames:[\"Pühapäev\",\"Esmaspäev\",\"Teisipäev\",\"Kolmapäev\",\"Neljapäev\",\"Reede\",\"Laupäev\"],dayNamesShort:[\"Pühap\",\"Esmasp\",\"Teisip\",\"Kolmap\",\"Neljap\",\"Reede\",\"Laup\"],dayNamesMin:[\"P\",\"E\",\"T\",\"K\",\"N\",\"R\",\"L\"],weekHeader:\"näd\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"et\",{buttonText:{month:\"Kuu\",week:\"Nädal\",day:\"Päev\",list:\"Päevakord\"},allDayText:\"Kogu päev\",eventLimitText:function(e){return\"+ veel \"+e},noEventsMessage:\"Kuvamiseks puuduvad sündmused\"})}(),function(){!function(){a.defineLocale(\"eu\",{months:\"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua\".split(\"_\"),monthsShort:\"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.\".split(\"_\"),monthsParseExact:!0,weekdays:\"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata\".split(\"_\"),weekdaysShort:\"ig._al._ar._az._og._ol._lr.\".split(\"_\"),weekdaysMin:\"ig_al_ar_az_og_ol_lr\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY[ko] MMMM[ren] D[a]\",LLL:\"YYYY[ko] MMMM[ren] D[a] HH:mm\",LLLL:\"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm\",l:\"YYYY-M-D\",ll:\"YYYY[ko] MMM D[a]\",lll:\"YYYY[ko] MMM D[a] HH:mm\",llll:\"ddd, YYYY[ko] MMM D[a] HH:mm\"},calendar:{sameDay:\"[gaur] LT[etan]\",nextDay:\"[bihar] LT[etan]\",nextWeek:\"dddd LT[etan]\",lastDay:\"[atzo] LT[etan]\",lastWeek:\"[aurreko] dddd LT[etan]\",sameElse:\"L\"},relativeTime:{future:\"%s barru\",past:\"duela %s\",s:\"segundo batzuk\",m:\"minutu bat\",mm:\"%d minutu\",h:\"ordu bat\",hh:\"%d ordu\",d:\"egun bat\",dd:\"%d egun\",M:\"hilabete bat\",MM:\"%d hilabete\",y:\"urte bat\",yy:\"%d urte\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"eu\",\"eu\",{closeText:\"Egina\",prevText:\"<Aur\",nextText:\"Hur>\",currentText:\"Gaur\",monthNames:[\"urtarrila\",\"otsaila\",\"martxoa\",\"apirila\",\"maiatza\",\"ekaina\",\"uztaila\",\"abuztua\",\"iraila\",\"urria\",\"azaroa\",\"abendua\"],monthNamesShort:[\"urt.\",\"ots.\",\"mar.\",\"api.\",\"mai.\",\"eka.\",\"uzt.\",\"abu.\",\"ira.\",\"urr.\",\"aza.\",\"abe.\"],dayNames:[\"igandea\",\"astelehena\",\"asteartea\",\"asteazkena\",\"osteguna\",\"ostirala\",\"larunbata\"],dayNamesShort:[\"ig.\",\"al.\",\"ar.\",\"az.\",\"og.\",\"ol.\",\"lr.\"],dayNamesMin:[\"ig\",\"al\",\"ar\",\"az\",\"og\",\"ol\",\"lr\"],weekHeader:\"As\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"eu\",{buttonText:{month:\"Hilabetea\",week:\"Astea\",day:\"Eguna\",list:\"Agenda\"},allDayHtml:\"Egun
osoa\",eventLimitText:\"gehiago\",noEventsMessage:\"Ez dago ekitaldirik erakusteko\"})}(),function(){!function(){var e={1:\"۱\",2:\"۲\",3:\"۳\",4:\"۴\",5:\"۵\",6:\"۶\",7:\"۷\",8:\"۸\",9:\"۹\",0:\"۰\"},t={\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\",\"۰\":\"0\"};a.defineLocale(\"fa\",{months:\"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر\".split(\"_\"),monthsShort:\"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر\".split(\"_\"),weekdays:\"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه\".split(\"_\"),weekdaysShort:\"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه\".split(\"_\"),weekdaysMin:\"ی_د_س_چ_پ_ج_ش\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,a,t){return e<12?\"قبل از ظهر\":\"بعد از ظهر\"},calendar:{sameDay:\"[امروز ساعت] LT\",nextDay:\"[فردا ساعت] LT\",nextWeek:\"dddd [ساعت] LT\",lastDay:\"[دیروز ساعت] LT\",lastWeek:\"dddd [پیش] [ساعت] LT\",sameElse:\"L\"},relativeTime:{future:\"در %s\",past:\"%s پیش\",s:\"چند ثانیه\",m:\"یک دقیقه\",mm:\"%d دقیقه\",h:\"یک ساعت\",hh:\"%d ساعت\",d:\"یک روز\",dd:\"%d روز\",M:\"یک ماه\",MM:\"%d ماه\",y:\"یک سال\",yy:\"%d سال\"},preparse:function(e){return e.replace(/[۰-۹]/g,function(e){return t[e]}).replace(/،/g,\",\")},postformat:function(a){return a.replace(/\\d/g,function(a){return e[a]}).replace(/,/g,\"،\")},dayOfMonthOrdinalParse:/\\d{1,2}م/,ordinal:\"%dم\",week:{dow:6,doy:12}})}(),e.fullCalendar.datepickerLocale(\"fa\",\"fa\",{closeText:\"بستن\",prevText:\"<قبلی\",nextText:\"بعدی>\",currentText:\"امروز\",monthNames:[\"ژانویه\",\"فوریه\",\"مارس\",\"آوریل\",\"مه\",\"ژوئن\",\"ژوئیه\",\"اوت\",\"سپتامبر\",\"اکتبر\",\"نوامبر\",\"دسامبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"يکشنبه\",\"دوشنبه\",\"سه‌شنبه\",\"چهارشنبه\",\"پنجشنبه\",\"جمعه\",\"شنبه\"],dayNamesShort:[\"ی\",\"د\",\"س\",\"چ\",\"پ\",\"ج\",\"ش\"],dayNamesMin:[\"ی\",\"د\",\"س\",\"چ\",\"پ\",\"ج\",\"ش\"],weekHeader:\"هف\",dateFormat:\"yy/mm/dd\",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"fa\",{buttonText:{month:\"ماه\",week:\"هفته\",day:\"روز\",list:\"برنامه\"},allDayText:\"تمام روز\",eventLimitText:function(e){return\"بیش از \"+e},noEventsMessage:\"هیچ رویدادی به نمایش\"})}(),function(){!function(){function e(e,a,n,r){var s=\"\";switch(n){case\"s\":return r?\"muutaman sekunnin\":\"muutama sekunti\";case\"m\":return r?\"minuutin\":\"minuutti\";case\"mm\":s=r?\"minuutin\":\"minuuttia\";break;case\"h\":return r?\"tunnin\":\"tunti\";case\"hh\":s=r?\"tunnin\":\"tuntia\";break;case\"d\":return r?\"päivän\":\"päivä\";case\"dd\":s=r?\"päivän\":\"päivää\";break;case\"M\":return r?\"kuukauden\":\"kuukausi\";case\"MM\":s=r?\"kuukauden\":\"kuukautta\";break;case\"y\":return r?\"vuoden\":\"vuosi\";case\"yy\":s=r?\"vuoden\":\"vuotta\"}return s=t(e,r)+\" \"+s}function t(e,a){return e<10?a?r[e]:n[e]:e}var n=\"nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän\".split(\" \"),r=[\"nolla\",\"yhden\",\"kahden\",\"kolmen\",\"neljän\",\"viiden\",\"kuuden\",n[7],n[8],n[9]];a.defineLocale(\"fi\",{months:\"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu\".split(\"_\"),monthsShort:\"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu\".split(\"_\"),weekdays:\"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai\".split(\"_\"),weekdaysShort:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),weekdaysMin:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"Do MMMM[ta] YYYY\",LLL:\"Do MMMM[ta] YYYY, [klo] HH.mm\",LLLL:\"dddd, Do MMMM[ta] YYYY, [klo] HH.mm\",l:\"D.M.YYYY\",ll:\"Do MMM YYYY\",lll:\"Do MMM YYYY, [klo] HH.mm\",llll:\"ddd, Do MMM YYYY, [klo] HH.mm\"},calendar:{sameDay:\"[tänään] [klo] LT\",nextDay:\"[huomenna] [klo] LT\",nextWeek:\"dddd [klo] LT\",lastDay:\"[eilen] [klo] LT\",lastWeek:\"[viime] dddd[na] [klo] LT\",sameElse:\"L\"},relativeTime:{future:\"%s päästä\",past:\"%s sitten\",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"fi\",\"fi\",{closeText:\"Sulje\",prevText:\"«Edellinen\",nextText:\"Seuraava»\",currentText:\"Tänään\",monthNames:[\"Tammikuu\",\"Helmikuu\",\"Maaliskuu\",\"Huhtikuu\",\"Toukokuu\",\"Kesäkuu\",\"Heinäkuu\",\"Elokuu\",\"Syyskuu\",\"Lokakuu\",\"Marraskuu\",\"Joulukuu\"],monthNamesShort:[\"Tammi\",\"Helmi\",\"Maalis\",\"Huhti\",\"Touko\",\"Kesä\",\"Heinä\",\"Elo\",\"Syys\",\"Loka\",\"Marras\",\"Joulu\"],dayNamesShort:[\"Su\",\"Ma\",\"Ti\",\"Ke\",\"To\",\"Pe\",\"La\"],dayNames:[\"Sunnuntai\",\"Maanantai\",\"Tiistai\",\"Keskiviikko\",\"Torstai\",\"Perjantai\",\"Lauantai\"],dayNamesMin:[\"Su\",\"Ma\",\"Ti\",\"Ke\",\"To\",\"Pe\",\"La\"],weekHeader:\"Vk\",dateFormat:\"d.m.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"fi\",{buttonText:{month:\"Kuukausi\",week:\"Viikko\",day:\"Päivä\",list:\"Tapahtumat\"},allDayText:\"Koko päivä\",eventLimitText:\"lisää\",noEventsMessage:\"Ei näytettäviä tapahtumia\"})}(),function(){!function(){a.defineLocale(\"fr\",{months:\"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),monthsShort:\"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"Di_Lu_Ma_Me_Je_Ve_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd’hui à] LT\",nextDay:\"[Demain à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[Hier à] LT\",lastWeek:\"dddd [dernier à] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case\"D\":return e+(1===e?\"er\":\"\");default:case\"M\":case\"Q\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"fr\",\"fr\",{closeText:\"Fermer\",prevText:\"Précédent\",nextText:\"Suivant\",currentText:\"Aujourd'hui\",monthNames:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"],monthNamesShort:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],dayNames:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"],dayNamesShort:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],dayNamesMin:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],weekHeader:\"Sem.\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"fr\",{buttonText:{year:\"Année\",month:\"Mois\",week:\"Semaine\",day:\"Jour\",list:\"Mon planning\"},allDayHtml:\"Toute la
journée\",eventLimitText:\"en plus\",noEventsMessage:\"Aucun événement à afficher\"})}(),function(){!function(){a.defineLocale(\"fr-ca\",{months:\"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),monthsShort:\"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"Di_Lu_Ma_Me_Je_Ve_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd’hui à] LT\",nextDay:\"[Demain à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[Hier à] LT\",lastWeek:\"dddd [dernier à] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}}})}(),e.fullCalendar.datepickerLocale(\"fr-ca\",\"fr-CA\",{closeText:\"Fermer\",prevText:\"Précédent\",nextText:\"Suivant\",currentText:\"Aujourd'hui\",monthNames:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"],monthNamesShort:[\"janv.\",\"févr.\",\"mars\",\"avril\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],dayNames:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"],dayNamesShort:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],dayNamesMin:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],weekHeader:\"Sem.\",dateFormat:\"yy-mm-dd\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"fr-ca\",{buttonText:{year:\"Année\",month:\"Mois\",week:\"Semaine\",day:\"Jour\",list:\"Mon planning\"},allDayHtml:\"Toute la
journée\",eventLimitText:\"en plus\",noEventsMessage:\"Aucun événement à afficher\"})}(),function(){!function(){a.defineLocale(\"fr-ch\",{months:\"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),monthsShort:\"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"Di_Lu_Ma_Me_Je_Ve_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd’hui à] LT\",nextDay:\"[Demain à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[Hier à] LT\",lastWeek:\"dddd [dernier à] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"fr-ch\",\"fr-CH\",{closeText:\"Fermer\",prevText:\"<Préc\",nextText:\"Suiv>\",currentText:\"Courant\",monthNames:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"],monthNamesShort:[\"janv.\",\"févr.\",\"mars\",\"avril\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],dayNames:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"],dayNamesShort:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],dayNamesMin:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"fr-ch\",{buttonText:{year:\"Année\",month:\"Mois\",week:\"Semaine\",day:\"Jour\",list:\"Mon planning\"},allDayHtml:\"Toute la
journée\",eventLimitText:\"en plus\",noEventsMessage:\"Aucun événement à afficher\"})}(),function(){!function(){a.defineLocale(\"gl\",{months:\"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro\".split(\"_\"),monthsShort:\"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"domingo_luns_martes_mércores_xoves_venres_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mér._xov._ven._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mé_xo_ve_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoxe \"+(1!==this.hours()?\"ás\":\"á\")+\"] LT\"},nextDay:function(){return\"[mañá \"+(1!==this.hours()?\"ás\":\"á\")+\"] LT\"},nextWeek:function(){return\"dddd [\"+(1!==this.hours()?\"ás\":\"a\")+\"] LT\"},lastDay:function(){return\"[onte \"+(1!==this.hours()?\"á\":\"a\")+\"] LT\"},lastWeek:function(){return\"[o] dddd [pasado \"+(1!==this.hours()?\"ás\":\"a\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:function(e){return 0===e.indexOf(\"un\")?\"n\"+e:\"en \"+e},past:\"hai %s\",s:\"uns segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"unha hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",M:\"un mes\",MM:\"%d meses\",y:\"un ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"gl\",\"gl\",{closeText:\"Pechar\",prevText:\"<Ant\",nextText:\"Seg>\",currentText:\"Hoxe\",monthNames:[\"Xaneiro\",\"Febreiro\",\"Marzo\",\"Abril\",\"Maio\",\"Xuño\",\"Xullo\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Decembro\"],monthNamesShort:[\"Xan\",\"Feb\",\"Mar\",\"Abr\",\"Mai\",\"Xuñ\",\"Xul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dec\"],dayNames:[\"Domingo\",\"Luns\",\"Martes\",\"Mércores\",\"Xoves\",\"Venres\",\"Sábado\"],dayNamesShort:[\"Dom\",\"Lun\",\"Mar\",\"Mér\",\"Xov\",\"Ven\",\"Sáb\"],dayNamesMin:[\"Do\",\"Lu\",\"Ma\",\"Mé\",\"Xo\",\"Ve\",\"Sá\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"gl\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"Día\",list:\"Axenda\"},allDayHtml:\"Todo
o día\",eventLimitText:\"máis\",noEventsMessage:\"Non hai eventos para amosar\"})}(),function(){\n!function(){a.defineLocale(\"he\",{months:\"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר\".split(\"_\"),monthsShort:\"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳\".split(\"_\"),weekdays:\"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת\".split(\"_\"),weekdaysShort:\"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳\".split(\"_\"),weekdaysMin:\"א_ב_ג_ד_ה_ו_ש\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [ב]MMMM YYYY\",LLL:\"D [ב]MMMM YYYY HH:mm\",LLLL:\"dddd, D [ב]MMMM YYYY HH:mm\",l:\"D/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[היום ב־]LT\",nextDay:\"[מחר ב־]LT\",nextWeek:\"dddd [בשעה] LT\",lastDay:\"[אתמול ב־]LT\",lastWeek:\"[ביום] dddd [האחרון בשעה] LT\",sameElse:\"L\"},relativeTime:{future:\"בעוד %s\",past:\"לפני %s\",s:\"מספר שניות\",m:\"דקה\",mm:\"%d דקות\",h:\"שעה\",hh:function(e){return 2===e?\"שעתיים\":e+\" שעות\"},d:\"יום\",dd:function(e){return 2===e?\"יומיים\":e+\" ימים\"},M:\"חודש\",MM:function(e){return 2===e?\"חודשיים\":e+\" חודשים\"},y:\"שנה\",yy:function(e){return 2===e?\"שנתיים\":e%10==0&&10!==e?e+\" שנה\":e+\" שנים\"}},meridiemParse:/אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה\"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,a,t){return e<5?\"לפנות בוקר\":e<10?\"בבוקר\":e<12?t?'לפנה\"צ':\"לפני הצהריים\":e<18?t?'אחה\"צ':\"אחרי הצהריים\":\"בערב\"}})}(),e.fullCalendar.datepickerLocale(\"he\",\"he\",{closeText:\"סגור\",prevText:\"<הקודם\",nextText:\"הבא>\",currentText:\"היום\",monthNames:[\"ינואר\",\"פברואר\",\"מרץ\",\"אפריל\",\"מאי\",\"יוני\",\"יולי\",\"אוגוסט\",\"ספטמבר\",\"אוקטובר\",\"נובמבר\",\"דצמבר\"],monthNamesShort:[\"ינו\",\"פבר\",\"מרץ\",\"אפר\",\"מאי\",\"יוני\",\"יולי\",\"אוג\",\"ספט\",\"אוק\",\"נוב\",\"דצמ\"],dayNames:[\"ראשון\",\"שני\",\"שלישי\",\"רביעי\",\"חמישי\",\"שישי\",\"שבת\"],dayNamesShort:[\"א'\",\"ב'\",\"ג'\",\"ד'\",\"ה'\",\"ו'\",\"שבת\"],dayNamesMin:[\"א'\",\"ב'\",\"ג'\",\"ד'\",\"ה'\",\"ו'\",\"שבת\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"he\",{buttonText:{month:\"חודש\",week:\"שבוע\",day:\"יום\",list:\"סדר יום\"},allDayText:\"כל היום\",eventLimitText:\"אחר\",noEventsMessage:\"אין אירועים להצגה\",weekNumberTitle:\"שבוע\"})}(),function(){!function(){var e={1:\"१\",2:\"२\",3:\"३\",4:\"४\",5:\"५\",6:\"६\",7:\"७\",8:\"८\",9:\"९\",0:\"०\"},t={\"१\":\"1\",\"२\":\"2\",\"३\":\"3\",\"४\":\"4\",\"५\":\"5\",\"६\":\"6\",\"७\":\"7\",\"८\":\"8\",\"९\":\"9\",\"०\":\"0\"};a.defineLocale(\"hi\",{months:\"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर\".split(\"_\"),monthsShort:\"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.\".split(\"_\"),monthsParseExact:!0,weekdays:\"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार\".split(\"_\"),weekdaysShort:\"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि\".split(\"_\"),weekdaysMin:\"र_सो_मं_बु_गु_शु_श\".split(\"_\"),longDateFormat:{LT:\"A h:mm बजे\",LTS:\"A h:mm:ss बजे\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm बजे\",LLLL:\"dddd, D MMMM YYYY, A h:mm बजे\"},calendar:{sameDay:\"[आज] LT\",nextDay:\"[कल] LT\",nextWeek:\"dddd, LT\",lastDay:\"[कल] LT\",lastWeek:\"[पिछले] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s में\",past:\"%s पहले\",s:\"कुछ ही क्षण\",m:\"एक मिनट\",mm:\"%d मिनट\",h:\"एक घंटा\",hh:\"%d घंटे\",d:\"एक दिन\",dd:\"%d दिन\",M:\"एक महीने\",MM:\"%d महीने\",y:\"एक वर्ष\",yy:\"%d वर्ष\"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return t[e]})},postformat:function(a){return a.replace(/\\d/g,function(a){return e[a]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,a){return 12===e&&(e=0),\"रात\"===a?e<4?e:e+12:\"सुबह\"===a?e:\"दोपहर\"===a?e>=10?e:e+12:\"शाम\"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?\"रात\":e<10?\"सुबह\":e<17?\"दोपहर\":e<20?\"शाम\":\"रात\"},week:{dow:0,doy:6}})}(),e.fullCalendar.datepickerLocale(\"hi\",\"hi\",{closeText:\"बंद\",prevText:\"पिछला\",nextText:\"अगला\",currentText:\"आज\",monthNames:[\"जनवरी \",\"फरवरी\",\"मार्च\",\"अप्रेल\",\"मई\",\"जून\",\"जूलाई\",\"अगस्त \",\"सितम्बर\",\"अक्टूबर\",\"नवम्बर\",\"दिसम्बर\"],monthNamesShort:[\"जन\",\"फर\",\"मार्च\",\"अप्रेल\",\"मई\",\"जून\",\"जूलाई\",\"अग\",\"सित\",\"अक्ट\",\"नव\",\"दि\"],dayNames:[\"रविवार\",\"सोमवार\",\"मंगलवार\",\"बुधवार\",\"गुरुवार\",\"शुक्रवार\",\"शनिवार\"],dayNamesShort:[\"रवि\",\"सोम\",\"मंगल\",\"बुध\",\"गुरु\",\"शुक्र\",\"शनि\"],dayNamesMin:[\"रवि\",\"सोम\",\"मंगल\",\"बुध\",\"गुरु\",\"शुक्र\",\"शनि\"],weekHeader:\"हफ्ता\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"hi\",{buttonText:{month:\"महीना\",week:\"सप्ताह\",day:\"दिन\",list:\"कार्यसूची\"},allDayText:\"सभी दिन\",eventLimitText:function(e){return\"+अधिक \"+e},noEventsMessage:\"कोई घटनाओं को प्रदर्शित करने के लिए\"})}(),function(){!function(){function e(e,a,t){var n=e+\" \";switch(t){case\"m\":return a?\"jedna minuta\":\"jedne minute\";case\"mm\":return n+=1===e?\"minuta\":2===e||3===e||4===e?\"minute\":\"minuta\";case\"h\":return a?\"jedan sat\":\"jednog sata\";case\"hh\":return n+=1===e?\"sat\":2===e||3===e||4===e?\"sata\":\"sati\";case\"dd\":return n+=1===e?\"dan\":\"dana\";case\"MM\":return n+=1===e?\"mjesec\":2===e||3===e||4===e?\"mjeseca\":\"mjeseci\";case\"yy\":return n+=1===e?\"godina\":2===e||3===e||4===e?\"godine\":\"godina\"}}a.defineLocale(\"hr\",{months:{format:\"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca\".split(\"_\"),standalone:\"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac\".split(\"_\")},monthsShort:\"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._čet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_če_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[jučer u] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:return\"[prošlu] dddd [u] LT\";case 6:return\"[prošle] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[prošli] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",m:e,mm:e,h:e,hh:e,d:\"dan\",dd:e,M:\"mjesec\",MM:e,y:\"godinu\",yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"hr\",\"hr\",{closeText:\"Zatvori\",prevText:\"<\",nextText:\">\",currentText:\"Danas\",monthNames:[\"Siječanj\",\"Veljača\",\"Ožujak\",\"Travanj\",\"Svibanj\",\"Lipanj\",\"Srpanj\",\"Kolovoz\",\"Rujan\",\"Listopad\",\"Studeni\",\"Prosinac\"],monthNamesShort:[\"Sij\",\"Velj\",\"Ožu\",\"Tra\",\"Svi\",\"Lip\",\"Srp\",\"Kol\",\"Ruj\",\"Lis\",\"Stu\",\"Pro\"],dayNames:[\"Nedjelja\",\"Ponedjeljak\",\"Utorak\",\"Srijeda\",\"Četvrtak\",\"Petak\",\"Subota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Sri\",\"Čet\",\"Pet\",\"Sub\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"Sr\",\"Če\",\"Pe\",\"Su\"],weekHeader:\"Tje\",dateFormat:\"dd.mm.yy.\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"hr\",{buttonText:{prev:\"Prijašnji\",next:\"Sljedeći\",month:\"Mjesec\",week:\"Tjedan\",day:\"Dan\",list:\"Raspored\"},allDayText:\"Cijeli dan\",eventLimitText:function(e){return\"+ još \"+e},noEventsMessage:\"Nema događaja za prikaz\"})}(),function(){!function(){function e(e,a,t,n){var r=e;switch(t){case\"s\":return n||a?\"néhány másodperc\":\"néhány másodperce\";case\"m\":return\"egy\"+(n||a?\" perc\":\" perce\");case\"mm\":return r+(n||a?\" perc\":\" perce\");case\"h\":return\"egy\"+(n||a?\" óra\":\" órája\");case\"hh\":return r+(n||a?\" óra\":\" órája\");case\"d\":return\"egy\"+(n||a?\" nap\":\" napja\");case\"dd\":return r+(n||a?\" nap\":\" napja\");case\"M\":return\"egy\"+(n||a?\" hónap\":\" hónapja\");case\"MM\":return r+(n||a?\" hónap\":\" hónapja\");case\"y\":return\"egy\"+(n||a?\" év\":\" éve\");case\"yy\":return r+(n||a?\" év\":\" éve\")}return\"\"}function t(e){return(e?\"\":\"[múlt] \")+\"[\"+n[this.day()]+\"] LT[-kor]\"}var n=\"vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton\".split(\" \");a.defineLocale(\"hu\",{months:\"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december\".split(\"_\"),monthsShort:\"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec\".split(\"_\"),weekdays:\"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat\".split(\"_\"),weekdaysShort:\"vas_hét_kedd_sze_csüt_pén_szo\".split(\"_\"),weekdaysMin:\"v_h_k_sze_cs_p_szo\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY. MMMM D.\",LLL:\"YYYY. MMMM D. H:mm\",LLLL:\"YYYY. MMMM D., dddd H:mm\"},meridiemParse:/de|du/i,isPM:function(e){return\"u\"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?\"de\":\"DE\":!0===t?\"du\":\"DU\"},calendar:{sameDay:\"[ma] LT[-kor]\",nextDay:\"[holnap] LT[-kor]\",nextWeek:function(){return t.call(this,!0)},lastDay:\"[tegnap] LT[-kor]\",lastWeek:function(){return t.call(this,!1)},sameElse:\"L\"},relativeTime:{future:\"%s múlva\",past:\"%s\",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"hu\",\"hu\",{closeText:\"bezár\",prevText:\"vissza\",nextText:\"előre\",currentText:\"ma\",monthNames:[\"Január\",\"Február\",\"Március\",\"Április\",\"Május\",\"Június\",\"Július\",\"Augusztus\",\"Szeptember\",\"Október\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Már\",\"Ápr\",\"Máj\",\"Jún\",\"Júl\",\"Aug\",\"Szep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Vasárnap\",\"Hétfő\",\"Kedd\",\"Szerda\",\"Csütörtök\",\"Péntek\",\"Szombat\"],dayNamesShort:[\"Vas\",\"Hét\",\"Ked\",\"Sze\",\"Csü\",\"Pén\",\"Szo\"],dayNamesMin:[\"V\",\"H\",\"K\",\"Sze\",\"Cs\",\"P\",\"Szo\"],weekHeader:\"Hét\",dateFormat:\"yy.mm.dd.\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"\"}),e.fullCalendar.locale(\"hu\",{buttonText:{month:\"Hónap\",week:\"Hét\",day:\"Nap\",list:\"Napló\"},allDayText:\"Egész nap\",eventLimitText:\"további\",noEventsMessage:\"Nincs megjeleníthető események\"})}(),function(){!function(){a.defineLocale(\"id\",{months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Rab_Kam_Jum_Sab\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),\"pagi\"===a?e:\"siang\"===a?e>=11?e:e+12:\"sore\"===a||\"malam\"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?\"pagi\":e<15?\"siang\":e<19?\"sore\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Besok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kemarin pukul] LT\",lastWeek:\"dddd [lalu pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lalu\",s:\"beberapa detik\",m:\"semenit\",mm:\"%d menit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"id\",\"id\",{closeText:\"Tutup\",prevText:\"<mundur\",nextText:\"maju>\",currentText:\"hari ini\",monthNames:[\"Januari\",\"Februari\",\"Maret\",\"April\",\"Mei\",\"Juni\",\"Juli\",\"Agustus\",\"September\",\"Oktober\",\"Nopember\",\"Desember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Agus\",\"Sep\",\"Okt\",\"Nop\",\"Des\"],dayNames:[\"Minggu\",\"Senin\",\"Selasa\",\"Rabu\",\"Kamis\",\"Jumat\",\"Sabtu\"],dayNamesShort:[\"Min\",\"Sen\",\"Sel\",\"Rab\",\"kam\",\"Jum\",\"Sab\"],dayNamesMin:[\"Mg\",\"Sn\",\"Sl\",\"Rb\",\"Km\",\"jm\",\"Sb\"],weekHeader:\"Mg\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"id\",{buttonText:{month:\"Bulan\",week:\"Minggu\",day:\"Hari\",list:\"Agenda\"},allDayHtml:\"Sehari
penuh\",eventLimitText:\"lebih\",noEventsMessage:\"Tidak ada acara untuk ditampilkan\"})}(),function(){!function(){function e(e){return e%100==11||e%10!=1}function t(a,t,n,r){var s=a+\" \";switch(n){case\"s\":return t||r?\"nokkrar sekúndur\":\"nokkrum sekúndum\";case\"m\":return t?\"mínúta\":\"mínútu\";case\"mm\":return e(a)?s+(t||r?\"mínútur\":\"mínútum\"):t?s+\"mínúta\":s+\"mínútu\";case\"hh\":return e(a)?s+(t||r?\"klukkustundir\":\"klukkustundum\"):s+\"klukkustund\";case\"d\":return t?\"dagur\":r?\"dag\":\"degi\";case\"dd\":return e(a)?t?s+\"dagar\":s+(r?\"daga\":\"dögum\"):t?s+\"dagur\":s+(r?\"dag\":\"degi\");case\"M\":return t?\"mánuður\":r?\"mánuð\":\"mánuði\";case\"MM\":return e(a)?t?s+\"mánuðir\":s+(r?\"mánuði\":\"mánuðum\"):t?s+\"mánuður\":s+(r?\"mánuð\":\"mánuði\");case\"y\":return t||r?\"ár\":\"ári\";case\"yy\":return e(a)?s+(t||r?\"ár\":\"árum\"):s+(t||r?\"ár\":\"ári\")}}a.defineLocale(\"is\",{months:\"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des\".split(\"_\"),weekdays:\"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur\".split(\"_\"),weekdaysShort:\"sun_mán_þri_mið_fim_fös_lau\".split(\"_\"),weekdaysMin:\"Su_Má_Þr_Mi_Fi_Fö_La\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd, D. MMMM YYYY [kl.] H:mm\"},calendar:{sameDay:\"[í dag kl.] LT\",nextDay:\"[á morgun kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[í gær kl.] LT\",lastWeek:\"[síðasta] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"eftir %s\",past:\"fyrir %s síðan\",s:t,m:t,mm:t,h:\"klukkustund\",hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"is\",\"is\",{closeText:\"Loka\",prevText:\"< Fyrri\",nextText:\"Næsti >\",currentText:\"Í dag\",monthNames:[\"Janúar\",\"Febrúar\",\"Mars\",\"Apríl\",\"Maí\",\"Júní\",\"Júlí\",\"Ágúst\",\"September\",\"Október\",\"Nóvember\",\"Desember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maí\",\"Jún\",\"Júl\",\"Ágú\",\"Sep\",\"Okt\",\"Nóv\",\"Des\"],dayNames:[\"Sunnudagur\",\"Mánudagur\",\"Þriðjudagur\",\"Miðvikudagur\",\"Fimmtudagur\",\"Föstudagur\",\"Laugardagur\"],dayNamesShort:[\"Sun\",\"Mán\",\"Þri\",\"Mið\",\"Fim\",\"Fös\",\"Lau\"],dayNamesMin:[\"Su\",\"Má\",\"Þr\",\"Mi\",\"Fi\",\"Fö\",\"La\"],weekHeader:\"Vika\",dateFormat:\"dd.mm.yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"is\",{buttonText:{month:\"Mánuður\",week:\"Vika\",day:\"Dagur\",list:\"Dagskrá\"},allDayHtml:\"Allan
daginn\",eventLimitText:\"meira\",noEventsMessage:\"Engir viðburðir til að sýna\"})}(),function(){!function(){a.defineLocale(\"it\",{months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),weekdays:\"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Oggi alle] LT\",nextDay:\"[Domani alle] LT\",nextWeek:\"dddd [alle] LT\",lastDay:\"[Ieri alle] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[la scorsa] dddd [alle] LT\";default:return\"[lo scorso] dddd [alle] LT\"}},sameElse:\"L\"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?\"tra\":\"in\")+\" \"+e},past:\"%s fa\",s:\"alcuni secondi\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"it\",\"it\",{closeText:\"Chiudi\",prevText:\"<Prec\",nextText:\"Succ>\",currentText:\"Oggi\",monthNames:[\"Gennaio\",\"Febbraio\",\"Marzo\",\"Aprile\",\"Maggio\",\"Giugno\",\"Luglio\",\"Agosto\",\"Settembre\",\"Ottobre\",\"Novembre\",\"Dicembre\"],monthNamesShort:[\"Gen\",\"Feb\",\"Mar\",\"Apr\",\"Mag\",\"Giu\",\"Lug\",\"Ago\",\"Set\",\"Ott\",\"Nov\",\"Dic\"],dayNames:[\"Domenica\",\"Lunedì\",\"Martedì\",\"Mercoledì\",\"Giovedì\",\"Venerdì\",\"Sabato\"],dayNamesShort:[\"Dom\",\"Lun\",\"Mar\",\"Mer\",\"Gio\",\"Ven\",\"Sab\"],dayNamesMin:[\"Do\",\"Lu\",\"Ma\",\"Me\",\"Gi\",\"Ve\",\"Sa\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"it\",{buttonText:{month:\"Mese\",week:\"Settimana\",day:\"Giorno\",list:\"Agenda\"},allDayHtml:\"Tutto il
giorno\",eventLimitText:function(e){return\"+altri \"+e},noEventsMessage:\"Non ci sono eventi da visualizzare\"})}(),function(){!function(){a.defineLocale(\"ja\",{months:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日\".split(\"_\"),weekdaysShort:\"日_月_火_水_木_金_土\".split(\"_\"),weekdaysMin:\"日_月_火_水_木_金_土\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日 HH:mm\",LLLL:\"YYYY年M月D日 HH:mm dddd\",l:\"YYYY/MM/DD\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日 HH:mm dddd\"},meridiemParse:/午前|午後/i,isPM:function(e){return\"午後\"===e},meridiem:function(e,a,t){return e<12?\"午前\":\"午後\"},calendar:{sameDay:\"[今日] LT\",nextDay:\"[明日] LT\",nextWeek:\"[来週]dddd LT\",lastDay:\"[昨日] LT\",lastWeek:\"[前週]dddd LT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}日/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"日\";default:return e}},relativeTime:{future:\"%s後\",past:\"%s前\",s:\"数秒\",m:\"1分\",mm:\"%d分\",h:\"1時間\",hh:\"%d時間\",d:\"1日\",dd:\"%d日\",M:\"1ヶ月\",MM:\"%dヶ月\",y:\"1年\",yy:\"%d年\"}})}(),e.fullCalendar.datepickerLocale(\"ja\",\"ja\",{closeText:\"閉じる\",prevText:\"<前\",nextText:\"次>\",currentText:\"今日\",monthNames:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],monthNamesShort:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],dayNames:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"],dayNamesShort:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],dayNamesMin:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],weekHeader:\"週\",dateFormat:\"yy/mm/dd\",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"年\"}),e.fullCalendar.locale(\"ja\",{buttonText:{month:\"月\",week:\"週\",day:\"日\",list:\"予定リスト\"},allDayText:\"終日\",eventLimitText:function(e){return\"他 \"+e+\" 件\"},noEventsMessage:\"イベントが表示されないように\"})}(),function(){!function(){var e={0:\"-ші\",1:\"-ші\",2:\"-ші\",3:\"-ші\",4:\"-ші\",5:\"-ші\",6:\"-шы\",7:\"-ші\",8:\"-ші\",9:\"-шы\",10:\"-шы\",20:\"-шы\",30:\"-шы\",40:\"-шы\",50:\"-ші\",60:\"-шы\",70:\"-ші\",80:\"-ші\",90:\"-шы\",100:\"-ші\"};a.defineLocale(\"kk\",{months:\"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан\".split(\"_\"),monthsShort:\"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел\".split(\"_\"),weekdays:\"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі\".split(\"_\"),weekdaysShort:\"жек_дүй_сей_сәр_бей_жұм_сен\".split(\"_\"),weekdaysMin:\"жк_дй_сй_ср_бй_жм_сн\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Бүгін сағат] LT\",nextDay:\"[Ертең сағат] LT\",nextWeek:\"dddd [сағат] LT\",lastDay:\"[Кеше сағат] LT\",lastWeek:\"[Өткен аптаның] dddd [сағат] LT\",sameElse:\"L\"},relativeTime:{future:\"%s ішінде\",past:\"%s бұрын\",s:\"бірнеше секунд\",m:\"бір минут\",mm:\"%d минут\",h:\"бір сағат\",hh:\"%d сағат\",d:\"бір күн\",dd:\"%d күн\",M:\"бір ай\",MM:\"%d ай\",y:\"бір жыл\",yy:\"%d жыл\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ші|шы)/,ordinal:function(a){var t=a%10,n=a>=100?100:null;return a+(e[a]||e[t]||e[n])},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"kk\",\"kk\",{closeText:\"Жабу\",prevText:\"<Алдыңғы\",nextText:\"Келесі>\",currentText:\"Бүгін\",monthNames:[\"Қаңтар\",\"Ақпан\",\"Наурыз\",\"Сәуір\",\"Мамыр\",\"Маусым\",\"Шілде\",\"Тамыз\",\"Қыркүйек\",\"Қазан\",\"Қараша\",\"Желтоқсан\"],monthNamesShort:[\"Қаң\",\"Ақп\",\"Нау\",\"Сәу\",\"Мам\",\"Мау\",\"Шіл\",\"Там\",\"Қыр\",\"Қаз\",\"Қар\",\"Жел\"],dayNames:[\"Жексенбі\",\"Дүйсенбі\",\"Сейсенбі\",\"Сәрсенбі\",\"Бейсенбі\",\"Жұма\",\"Сенбі\"],dayNamesShort:[\"жкс\",\"дсн\",\"ссн\",\"срс\",\"бсн\",\"жма\",\"снб\"],dayNamesMin:[\"Жк\",\"Дс\",\"Сс\",\"Ср\",\"Бс\",\"Жм\",\"Сн\"],weekHeader:\"Не\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"kk\",{buttonText:{month:\"Ай\",week:\"Апта\",day:\"Күн\",list:\"Күн тәртібі\"},allDayText:\"Күні бойы\",eventLimitText:function(e){return\"+ тағы \"+e},noEventsMessage:\"Көрсету үшін оқиғалар жоқ\"})}(),function(){!function(){a.defineLocale(\"ko\",{months:\"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월\".split(\"_\"),monthsShort:\"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월\".split(\"_\"),weekdays:\"일요일_월요일_화요일_수요일_목요일_금요일_토요일\".split(\"_\"),weekdaysShort:\"일_월_화_수_목_금_토\".split(\"_\"),weekdaysMin:\"일_월_화_수_목_금_토\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"YYYY.MM.DD\",LL:\"YYYY년 MMMM D일\",LLL:\"YYYY년 MMMM D일 A h:mm\",LLLL:\"YYYY년 MMMM D일 dddd A h:mm\",l:\"YYYY.MM.DD\",ll:\"YYYY년 MMMM D일\",lll:\"YYYY년 MMMM D일 A h:mm\",llll:\"YYYY년 MMMM D일 dddd A h:mm\"},calendar:{sameDay:\"오늘 LT\",nextDay:\"내일 LT\",nextWeek:\"dddd LT\",lastDay:\"어제 LT\",lastWeek:\"지난주 dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s 후\",past:\"%s 전\",s:\"몇 초\",ss:\"%d초\",m:\"1분\",mm:\"%d분\",h:\"한 시간\",hh:\"%d시간\",d:\"하루\",dd:\"%d일\",M:\"한 달\",MM:\"%d달\",y:\"일 년\",yy:\"%d년\"},dayOfMonthOrdinalParse:/\\d{1,2}일/,ordinal:\"%d일\",meridiemParse:/오전|오후/,isPM:function(e){return\"오후\"===e},meridiem:function(e,a,t){return e<12?\"오전\":\"오후\"}})}(),e.fullCalendar.datepickerLocale(\"ko\",\"ko\",{closeText:\"닫기\",prevText:\"이전달\",nextText:\"다음달\",currentText:\"오늘\",monthNames:[\"1월\",\"2월\",\"3월\",\"4월\",\"5월\",\"6월\",\"7월\",\"8월\",\"9월\",\"10월\",\"11월\",\"12월\"],monthNamesShort:[\"1월\",\"2월\",\"3월\",\"4월\",\"5월\",\"6월\",\"7월\",\"8월\",\"9월\",\"10월\",\"11월\",\"12월\"],dayNames:[\"일요일\",\"월요일\",\"화요일\",\"수요일\",\"목요일\",\"금요일\",\"토요일\"],dayNamesShort:[\"일\",\"월\",\"화\",\"수\",\"목\",\"금\",\"토\"],dayNamesMin:[\"일\",\"월\",\"화\",\"수\",\"목\",\"금\",\"토\"],weekHeader:\"주\",dateFormat:\"yy. m. d.\",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"년\"}),e.fullCalendar.locale(\"ko\",{buttonText:{month:\"월\",week:\"주\",day:\"일\",list:\"일정목록\"},allDayText:\"종일\",eventLimitText:\"개\",noEventsMessage:\"일정이 없습니다\"})}(),function(){!function(){function e(e,a,t,n){var r={m:[\"eng Minutt\",\"enger Minutt\"],h:[\"eng Stonn\",\"enger Stonn\"],d:[\"een Dag\",\"engem Dag\"],M:[\"ee Mount\",\"engem Mount\"],y:[\"ee Joer\",\"engem Joer\"]};return a?r[t][0]:r[t][1]}function t(e){return r(e.substr(0,e.indexOf(\" \")))?\"a \"+e:\"an \"+e}function n(e){return r(e.substr(0,e.indexOf(\" \")))?\"viru \"+e:\"virun \"+e}function r(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10,t=e/10;return r(0===a?t:a)}if(e<1e4){for(;e>=10;)e/=10;return r(e)}return e/=1e3,r(e)}a.defineLocale(\"lb\",{months:\"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg\".split(\"_\"),weekdaysShort:\"So._Mé._Dë._Më._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mé_Dë_Më_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm [Auer]\",LTS:\"H:mm:ss [Auer]\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm [Auer]\",LLLL:\"dddd, D. MMMM YYYY H:mm [Auer]\"},calendar:{sameDay:\"[Haut um] LT\",sameElse:\"L\",nextDay:\"[Muer um] LT\",nextWeek:\"dddd [um] LT\",lastDay:\"[Gëschter um] LT\",lastWeek:function(){switch(this.day()){case 2:case 4:return\"[Leschten] dddd [um] LT\";default:return\"[Leschte] dddd [um] LT\"}}},relativeTime:{future:t,past:n,s:\"e puer Sekonnen\",m:e,mm:\"%d Minutten\",h:e,hh:\"%d Stonnen\",d:e,dd:\"%d Deeg\",M:e,MM:\"%d Méint\",y:e,yy:\"%d Joer\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"lb\",\"lb\",{closeText:\"Fäerdeg\",prevText:\"Zréck\",nextText:\"Weider\",currentText:\"Haut\",monthNames:[\"Januar\",\"Februar\",\"Mäerz\",\"Abrëll\",\"Mee\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mäe\",\"Abr\",\"Mee\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonndeg\",\"Méindeg\",\"Dënschdeg\",\"Mëttwoch\",\"Donneschdeg\",\"Freideg\",\"Samschdeg\"],dayNamesShort:[\"Son\",\"Méi\",\"Dën\",\"Mët\",\"Don\",\"Fre\",\"Sam\"],dayNamesMin:[\"So\",\"Mé\",\"Dë\",\"Më\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"W\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"lb\",{buttonText:{month:\"Mount\",week:\"Woch\",day:\"Dag\",list:\"Terminiwwersiicht\"},allDayText:\"Ganzen Dag\",eventLimitText:\"méi\",noEventsMessage:\"Nee Evenementer ze affichéieren\"})}(),function(){!function(){function e(e,a,t,n){return a?\"kelios sekundės\":n?\"kelių sekundžių\":\"kelias sekundes\"}function t(e,a,t,n){return a?r(t)[0]:n?r(t)[1]:r(t)[2]}function n(e){return e%10==0||e>10&&e<20}function r(e){return d[e].split(\"_\")}function s(e,a,s,d){var i=e+\" \";return 1===e?i+t(e,a,s[0],d):a?i+(n(e)?r(s)[1]:r(s)[0]):d?i+r(s)[1]:i+(n(e)?r(s)[1]:r(s)[2])}var d={m:\"minutė_minutės_minutę\",mm:\"minutės_minučių_minutes\",h:\"valanda_valandos_valandą\",hh:\"valandos_valandų_valandas\",d:\"diena_dienos_dieną\",dd:\"dienos_dienų_dienas\",M:\"mėnuo_mėnesio_mėnesį\",MM:\"mėnesiai_mėnesių_mėnesius\",y:\"metai_metų_metus\",yy:\"metai_metų_metus\"};a.defineLocale(\"lt\",{months:{format:\"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio\".split(\"_\"),standalone:\"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis\".split(\"_\"),isFormat:/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/},monthsShort:\"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd\".split(\"_\"),weekdays:{format:\"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį\".split(\"_\"),standalone:\"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis\".split(\"_\"),isFormat:/dddd HH:mm/},weekdaysShort:\"Sek_Pir_Ant_Tre_Ket_Pen_Šeš\".split(\"_\"),weekdaysMin:\"S_P_A_T_K_Pn_Š\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY [m.] MMMM D [d.]\",LLL:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",LLLL:\"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]\",l:\"YYYY-MM-DD\",ll:\"YYYY [m.] MMMM D [d.]\",lll:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",llll:\"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]\"},calendar:{sameDay:\"[Šiandien] LT\",nextDay:\"[Rytoj] LT\",nextWeek:\"dddd LT\",lastDay:\"[Vakar] LT\",lastWeek:\"[Praėjusį] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"po %s\",past:\"prieš %s\",s:e,m:t,mm:s,h:t,hh:s,d:t,dd:s,M:t,MM:s,y:t,yy:s},dayOfMonthOrdinalParse:/\\d{1,2}-oji/,ordinal:function(e){return e+\"-oji\"},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"lt\",\"lt\",{closeText:\"Uždaryti\",prevText:\"<Atgal\",nextText:\"Pirmyn>\",currentText:\"Šiandien\",monthNames:[\"Sausis\",\"Vasaris\",\"Kovas\",\"Balandis\",\"Gegužė\",\"Birželis\",\"Liepa\",\"Rugpjūtis\",\"Rugsėjis\",\"Spalis\",\"Lapkritis\",\"Gruodis\"],monthNamesShort:[\"Sau\",\"Vas\",\"Kov\",\"Bal\",\"Geg\",\"Bir\",\"Lie\",\"Rugp\",\"Rugs\",\"Spa\",\"Lap\",\"Gru\"],dayNames:[\"sekmadienis\",\"pirmadienis\",\"antradienis\",\"trečiadienis\",\"ketvirtadienis\",\"penktadienis\",\"šeštadienis\"],dayNamesShort:[\"sek\",\"pir\",\"ant\",\"tre\",\"ket\",\"pen\",\"šeš\"],dayNamesMin:[\"Se\",\"Pr\",\"An\",\"Tr\",\"Ke\",\"Pe\",\"Še\"],weekHeader:\"SAV\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"\"}),e.fullCalendar.locale(\"lt\",{buttonText:{month:\"Mėnuo\",week:\"Savaitė\",day:\"Diena\",list:\"Darbotvarkė\"},allDayText:\"Visą dieną\",eventLimitText:\"daugiau\",noEventsMessage:\"Nėra įvykių rodyti\"})}(),function(){!function(){function e(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function t(a,t,n){return a+\" \"+e(s[n],a,t)}function n(a,t,n){return e(s[n],a,t)}function r(e,a){return a?\"dažas sekundes\":\"dažām sekundēm\"}var s={m:\"minūtes_minūtēm_minūte_minūtes\".split(\"_\"),mm:\"minūtes_minūtēm_minūte_minūtes\".split(\"_\"),h:\"stundas_stundām_stunda_stundas\".split(\"_\"),hh:\"stundas_stundām_stunda_stundas\".split(\"_\"),d:\"dienas_dienām_diena_dienas\".split(\"_\"),dd:\"dienas_dienām_diena_dienas\".split(\"_\"),M:\"mēneša_mēnešiem_mēnesis_mēneši\".split(\"_\"),MM:\"mēneša_mēnešiem_mēnesis_mēneši\".split(\"_\"),y:\"gada_gadiem_gads_gadi\".split(\"_\"),yy:\"gada_gadiem_gads_gadi\".split(\"_\")};a.defineLocale(\"lv\",{months:\"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena\".split(\"_\"),weekdaysShort:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysMin:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY.\",LL:\"YYYY. [gada] D. MMMM\",LLL:\"YYYY. [gada] D. MMMM, HH:mm\",LLLL:\"YYYY. [gada] D. MMMM, dddd, HH:mm\"},calendar:{sameDay:\"[Šodien pulksten] LT\",nextDay:\"[Rīt pulksten] LT\",nextWeek:\"dddd [pulksten] LT\",lastDay:\"[Vakar pulksten] LT\",lastWeek:\"[Pagājušā] dddd [pulksten] LT\",sameElse:\"L\"},relativeTime:{future:\"pēc %s\",past:\"pirms %s\",s:r,m:n,mm:t,h:n,hh:t,d:n,dd:t,M:n,MM:t,y:n,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"lv\",\"lv\",{closeText:\"Aizvērt\",prevText:\"Iepr.\",nextText:\"Nāk.\",currentText:\"Šodien\",monthNames:[\"Janvāris\",\"Februāris\",\"Marts\",\"Aprīlis\",\"Maijs\",\"Jūnijs\",\"Jūlijs\",\"Augusts\",\"Septembris\",\"Oktobris\",\"Novembris\",\"Decembris\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Mai\",\"Jūn\",\"Jūl\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"svētdiena\",\"pirmdiena\",\"otrdiena\",\"trešdiena\",\"ceturtdiena\",\"piektdiena\",\"sestdiena\"],dayNamesShort:[\"svt\",\"prm\",\"otr\",\"tre\",\"ctr\",\"pkt\",\"sst\"],dayNamesMin:[\"Sv\",\"Pr\",\"Ot\",\"Tr\",\"Ct\",\"Pk\",\"Ss\"],weekHeader:\"Ned.\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"lv\",{buttonText:{month:\"Mēnesis\",week:\"Nedēļa\",day:\"Diena\",list:\"Dienas kārtība\"},allDayText:\"Visu dienu\",eventLimitText:function(e){return\"+vēl \"+e},noEventsMessage:\"Nav notikumu\"})}(),function(){!function(){a.defineLocale(\"mk\",{months:\"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември\".split(\"_\"),monthsShort:\"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек\".split(\"_\"),weekdays:\"недела_понеделник_вторник_среда_четврток_петок_сабота\".split(\"_\"),weekdaysShort:\"нед_пон_вто_сре_чет_пет_саб\".split(\"_\"),weekdaysMin:\"нe_пo_вт_ср_че_пе_сa\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Денес во] LT\",nextDay:\"[Утре во] LT\",nextWeek:\"[Во] dddd [во] LT\",lastDay:\"[Вчера во] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[Изминатата] dddd [во] LT\";case 1:case 2:case 4:case 5:return\"[Изминатиот] dddd [во] LT\"}},sameElse:\"L\"},relativeTime:{future:\"после %s\",past:\"пред %s\",s:\"неколку секунди\",m:\"минута\",mm:\"%d минути\",h:\"час\",hh:\"%d часа\",d:\"ден\",dd:\"%d дена\",M:\"месец\",MM:\"%d месеци\",y:\"година\",yy:\"%d години\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+\"-ев\":0===t?e+\"-ен\":t>10&&t<20?e+\"-ти\":1===a?e+\"-ви\":2===a?e+\"-ри\":7===a||8===a?e+\"-ми\":e+\"-ти\"},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"mk\",\"mk\",{closeText:\"Затвори\",prevText:\"<\",nextText:\">\",currentText:\"Денес\",monthNames:[\"Јануари\",\"Февруари\",\"Март\",\"Април\",\"Мај\",\"Јуни\",\"Јули\",\"Август\",\"Септември\",\"Октомври\",\"Ноември\",\"Декември\"],monthNamesShort:[\"Јан\",\"Фев\",\"Мар\",\"Апр\",\"Мај\",\"Јун\",\"Јул\",\"Авг\",\"Сеп\",\"Окт\",\"Ное\",\"Дек\"],dayNames:[\"Недела\",\"Понеделник\",\"Вторник\",\"Среда\",\"Четврток\",\"Петок\",\"Сабота\"],dayNamesShort:[\"Нед\",\"Пон\",\"Вто\",\"Сре\",\"Чет\",\"Пет\",\"Саб\"],dayNamesMin:[\"Не\",\"По\",\"Вт\",\"Ср\",\"Че\",\"Пе\",\"Са\"],weekHeader:\"Сед\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"mk\",{buttonText:{month:\"Месец\",week:\"Недела\",day:\"Ден\",list:\"График\"},allDayText:\"Цел ден\",eventLimitText:function(e){return\"+повеќе \"+e},noEventsMessage:\"Нема настани за прикажување\"})}(),function(){!function(){a.defineLocale(\"ms\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),\n\"pagi\"===a?e:\"tengahari\"===a?e>=11?e:e+12:\"petang\"===a||\"malam\"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?\"pagi\":e<15?\"tengahari\":e<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"ms\",\"ms\",{closeText:\"Tutup\",prevText:\"<Sebelum\",nextText:\"Selepas>\",currentText:\"hari ini\",monthNames:[\"Januari\",\"Februari\",\"Mac\",\"April\",\"Mei\",\"Jun\",\"Julai\",\"Ogos\",\"September\",\"Oktober\",\"November\",\"Disember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mac\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Ogo\",\"Sep\",\"Okt\",\"Nov\",\"Dis\"],dayNames:[\"Ahad\",\"Isnin\",\"Selasa\",\"Rabu\",\"Khamis\",\"Jumaat\",\"Sabtu\"],dayNamesShort:[\"Aha\",\"Isn\",\"Sel\",\"Rab\",\"kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"Is\",\"Se\",\"Ra\",\"Kh\",\"Ju\",\"Sa\"],weekHeader:\"Mg\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ms\",{buttonText:{month:\"Bulan\",week:\"Minggu\",day:\"Hari\",list:\"Agenda\"},allDayText:\"Sepanjang hari\",eventLimitText:function(e){return\"masih ada \"+e+\" acara\"},noEventsMessage:\"Tiada peristiwa untuk dipaparkan\"})}(),function(){!function(){a.defineLocale(\"ms-my\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),\"pagi\"===a?e:\"tengahari\"===a?e>=11?e:e+12:\"petang\"===a||\"malam\"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?\"pagi\":e<15?\"tengahari\":e<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"ms-my\",\"ms\",{closeText:\"Tutup\",prevText:\"<Sebelum\",nextText:\"Selepas>\",currentText:\"hari ini\",monthNames:[\"Januari\",\"Februari\",\"Mac\",\"April\",\"Mei\",\"Jun\",\"Julai\",\"Ogos\",\"September\",\"Oktober\",\"November\",\"Disember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mac\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Ogo\",\"Sep\",\"Okt\",\"Nov\",\"Dis\"],dayNames:[\"Ahad\",\"Isnin\",\"Selasa\",\"Rabu\",\"Khamis\",\"Jumaat\",\"Sabtu\"],dayNamesShort:[\"Aha\",\"Isn\",\"Sel\",\"Rab\",\"kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"Is\",\"Se\",\"Ra\",\"Kh\",\"Ju\",\"Sa\"],weekHeader:\"Mg\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ms-my\",{buttonText:{month:\"Bulan\",week:\"Minggu\",day:\"Hari\",list:\"Agenda\"},allDayText:\"Sepanjang hari\",eventLimitText:function(e){return\"masih ada \"+e+\" acara\"},noEventsMessage:\"Tiada peristiwa untuk dipaparkan\"})}(),function(){!function(){a.defineLocale(\"nb\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag\".split(\"_\"),weekdaysShort:\"sø._ma._ti._on._to._fr._lø.\".split(\"_\"),weekdaysMin:\"sø_ma_ti_on_to_fr_lø\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[i går kl.] LT\",lastWeek:\"[forrige] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"noen sekunder\",m:\"ett minutt\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dager\",M:\"en måned\",MM:\"%d måneder\",y:\"ett år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"nb\",\"nb\",{closeText:\"Lukk\",prevText:\"«Forrige\",nextText:\"Neste»\",currentText:\"I dag\",monthNames:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\"september\",\"oktober\",\"november\",\"desember\"],monthNamesShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"mai\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"des\"],dayNamesShort:[\"søn\",\"man\",\"tir\",\"ons\",\"tor\",\"fre\",\"lør\"],dayNames:[\"søndag\",\"mandag\",\"tirsdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lørdag\"],dayNamesMin:[\"sø\",\"ma\",\"ti\",\"on\",\"to\",\"fr\",\"lø\"],weekHeader:\"Uke\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"nb\",{buttonText:{month:\"Måned\",week:\"Uke\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dagen\",eventLimitText:\"til\",noEventsMessage:\"Ingen hendelser å vise\"})}(),function(){!function(){var e=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),t=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;a.defineLocale(\"nl\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(a,n){return a?/-MMM-/.test(n)?t[a.month()]:e[a.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"Zo_Ma_Di_Wo_Do_Vr_Za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",m:\"één minuut\",mm:\"%d minuten\",h:\"één uur\",hh:\"%d uur\",d:\"één dag\",dd:\"%d dagen\",M:\"één maand\",MM:\"%d maanden\",y:\"één jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"nl\",\"nl\",{closeText:\"Sluiten\",prevText:\"←\",nextText:\"→\",currentText:\"Vandaag\",monthNames:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"],monthNamesShort:[\"jan\",\"feb\",\"mrt\",\"apr\",\"mei\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],dayNames:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"],dayNamesShort:[\"zon\",\"maa\",\"din\",\"woe\",\"don\",\"vri\",\"zat\"],dayNamesMin:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],weekHeader:\"Wk\",dateFormat:\"dd-mm-yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"nl\",{buttonText:{month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dag\",eventLimitText:\"extra\",noEventsMessage:\"Geen evenementen om te laten zien\"})}(),function(){!function(){var e=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),t=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;a.defineLocale(\"nl-be\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(a,n){return a?/-MMM-/.test(n)?t[a.month()]:e[a.month()]:e},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"Zo_Ma_Di_Wo_Do_Vr_Za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",m:\"één minuut\",mm:\"%d minuten\",h:\"één uur\",hh:\"%d uur\",d:\"één dag\",dd:\"%d dagen\",M:\"één maand\",MM:\"%d maanden\",y:\"één jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"nl-be\",\"nl-BE\",{closeText:\"Sluiten\",prevText:\"←\",nextText:\"→\",currentText:\"Vandaag\",monthNames:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"],monthNamesShort:[\"jan\",\"feb\",\"mrt\",\"apr\",\"mei\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],dayNames:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"],dayNamesShort:[\"zon\",\"maa\",\"din\",\"woe\",\"don\",\"vri\",\"zat\"],dayNamesMin:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"nl-be\",{buttonText:{month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dag\",eventLimitText:\"extra\",noEventsMessage:\"Geen evenementen om te laten zien\"})}(),function(){!function(){a.defineLocale(\"nn\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des\".split(\"_\"),weekdays:\"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag\".split(\"_\"),weekdaysShort:\"sun_mån_tys_ons_tor_fre_lau\".split(\"_\"),weekdaysMin:\"su_må_ty_on_to_fr_lø\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[I dag klokka] LT\",nextDay:\"[I morgon klokka] LT\",nextWeek:\"dddd [klokka] LT\",lastDay:\"[I går klokka] LT\",lastWeek:\"[Føregåande] dddd [klokka] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s sidan\",s:\"nokre sekund\",m:\"eit minutt\",mm:\"%d minutt\",h:\"ein time\",hh:\"%d timar\",d:\"ein dag\",dd:\"%d dagar\",M:\"ein månad\",MM:\"%d månader\",y:\"eit år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"nn\",\"nn\",{closeText:\"Lukk\",prevText:\"«Førre\",nextText:\"Neste»\",currentText:\"I dag\",monthNames:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\"september\",\"oktober\",\"november\",\"desember\"],monthNamesShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"mai\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"des\"],dayNamesShort:[\"sun\",\"mån\",\"tys\",\"ons\",\"tor\",\"fre\",\"lau\"],dayNames:[\"sundag\",\"måndag\",\"tysdag\",\"onsdag\",\"torsdag\",\"fredag\",\"laurdag\"],dayNamesMin:[\"su\",\"må\",\"ty\",\"on\",\"to\",\"fr\",\"la\"],weekHeader:\"Veke\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"nn\",{buttonText:{month:\"Månad\",week:\"Veke\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Heile dagen\",eventLimitText:\"til\",noEventsMessage:\"Ingen hendelser å vise\"})}(),function(){!function(){function e(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function t(a,t,n){var r=a+\" \";switch(n){case\"m\":return t?\"minuta\":\"minutę\";case\"mm\":return r+(e(a)?\"minuty\":\"minut\");case\"h\":return t?\"godzina\":\"godzinę\";case\"hh\":return r+(e(a)?\"godziny\":\"godzin\");case\"MM\":return r+(e(a)?\"miesiące\":\"miesięcy\");case\"yy\":return r+(e(a)?\"lata\":\"lat\")}}var n=\"styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień\".split(\"_\"),r=\"stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia\".split(\"_\");a.defineLocale(\"pl\",{months:function(e,a){return e?\"\"===a?\"(\"+r[e.month()]+\"|\"+n[e.month()]+\")\":/D MMMM/.test(a)?r[e.month()]:n[e.month()]:n},monthsShort:\"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru\".split(\"_\"),weekdays:\"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota\".split(\"_\"),weekdaysShort:\"ndz_pon_wt_śr_czw_pt_sob\".split(\"_\"),weekdaysMin:\"Nd_Pn_Wt_Śr_Cz_Pt_So\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Dziś o] LT\",nextDay:\"[Jutro o] LT\",nextWeek:\"[W] dddd [o] LT\",lastDay:\"[Wczoraj o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[W zeszłą niedzielę o] LT\";case 3:return\"[W zeszłą środę o] LT\";case 6:return\"[W zeszłą sobotę o] LT\";default:return\"[W zeszły] dddd [o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"%s temu\",s:\"kilka sekund\",m:t,mm:t,h:t,hh:t,d:\"1 dzień\",dd:\"%d dni\",M:\"miesiąc\",MM:t,y:\"rok\",yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"pl\",\"pl\",{closeText:\"Zamknij\",prevText:\"<Poprzedni\",nextText:\"Następny>\",currentText:\"Dziś\",monthNames:[\"Styczeń\",\"Luty\",\"Marzec\",\"Kwiecień\",\"Maj\",\"Czerwiec\",\"Lipiec\",\"Sierpień\",\"Wrzesień\",\"Październik\",\"Listopad\",\"Grudzień\"],monthNamesShort:[\"Sty\",\"Lu\",\"Mar\",\"Kw\",\"Maj\",\"Cze\",\"Lip\",\"Sie\",\"Wrz\",\"Pa\",\"Lis\",\"Gru\"],dayNames:[\"Niedziela\",\"Poniedziałek\",\"Wtorek\",\"Środa\",\"Czwartek\",\"Piątek\",\"Sobota\"],dayNamesShort:[\"Nie\",\"Pn\",\"Wt\",\"Śr\",\"Czw\",\"Pt\",\"So\"],dayNamesMin:[\"N\",\"Pn\",\"Wt\",\"Śr\",\"Cz\",\"Pt\",\"So\"],weekHeader:\"Tydz\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"pl\",{buttonText:{month:\"Miesiąc\",week:\"Tydzień\",day:\"Dzień\",list:\"Plan dnia\"},allDayText:\"Cały dzień\",eventLimitText:\"więcej\",noEventsMessage:\"Brak wydarzeń do wyświetlenia\"})}(),function(){!function(){a.defineLocale(\"pt\",{months:\"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro\".split(\"_\"),monthsShort:\"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez\".split(\"_\"),weekdays:\"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ter_Qua_Qui_Sex_Sáb\".split(\"_\"),weekdaysMin:\"Do_2ª_3ª_4ª_5ª_6ª_Sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY HH:mm\"},calendar:{sameDay:\"[Hoje às] LT\",nextDay:\"[Amanhã às] LT\",nextWeek:\"dddd [às] LT\",lastDay:\"[Ontem às] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Último] dddd [às] LT\":\"[Última] dddd [às] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"há %s\",s:\"segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um mês\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"pt\",\"pt\",{closeText:\"Fechar\",prevText:\"Anterior\",nextText:\"Seguinte\",currentText:\"Hoje\",monthNames:[\"Janeiro\",\"Fevereiro\",\"Março\",\"Abril\",\"Maio\",\"Junho\",\"Julho\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Dezembro\"],monthNamesShort:[\"Jan\",\"Fev\",\"Mar\",\"Abr\",\"Mai\",\"Jun\",\"Jul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dez\"],dayNames:[\"Domingo\",\"Segunda-feira\",\"Terça-feira\",\"Quarta-feira\",\"Quinta-feira\",\"Sexta-feira\",\"Sábado\"],dayNamesShort:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"Sáb\"],dayNamesMin:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"Sáb\"],weekHeader:\"Sem\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"pt\",{buttonText:{month:\"Mês\",week:\"Semana\",day:\"Dia\",list:\"Agenda\"},allDayText:\"Todo o dia\",eventLimitText:\"mais\",noEventsMessage:\"Não há eventos para mostrar\"})}(),function(){!function(){a.defineLocale(\"pt-br\",{months:\"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro\".split(\"_\"),monthsShort:\"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez\".split(\"_\"),weekdays:\"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ter_Qua_Qui_Sex_Sáb\".split(\"_\"),weekdaysMin:\"Do_2ª_3ª_4ª_5ª_6ª_Sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY [às] HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY [às] HH:mm\"},calendar:{sameDay:\"[Hoje às] LT\",nextDay:\"[Amanhã às] LT\",nextWeek:\"dddd [às] LT\",lastDay:\"[Ontem às] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Último] dddd [às] LT\":\"[Última] dddd [às] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"%s atrás\",s:\"poucos segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um mês\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\"})}(),e.fullCalendar.datepickerLocale(\"pt-br\",\"pt-BR\",{closeText:\"Fechar\",prevText:\"<Anterior\",nextText:\"Próximo>\",currentText:\"Hoje\",monthNames:[\"Janeiro\",\"Fevereiro\",\"Março\",\"Abril\",\"Maio\",\"Junho\",\"Julho\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Dezembro\"],monthNamesShort:[\"Jan\",\"Fev\",\"Mar\",\"Abr\",\"Mai\",\"Jun\",\"Jul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dez\"],dayNames:[\"Domingo\",\"Segunda-feira\",\"Terça-feira\",\"Quarta-feira\",\"Quinta-feira\",\"Sexta-feira\",\"Sábado\"],dayNamesShort:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"Sáb\"],dayNamesMin:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"Sáb\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"pt-br\",{buttonText:{month:\"Mês\",week:\"Semana\",day:\"Dia\",list:\"Compromissos\"},allDayText:\"dia inteiro\",eventLimitText:function(e){return\"mais +\"+e},noEventsMessage:\"Não há eventos para mostrar\"})}(),function(){!function(){function e(e,a,t){var n={mm:\"minute\",hh:\"ore\",dd:\"zile\",MM:\"luni\",yy:\"ani\"},r=\" \";return(e%100>=20||e>=100&&e%100==0)&&(r=\" de \"),e+r+n[t]}a.defineLocale(\"ro\",{months:\"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie\".split(\"_\"),monthsShort:\"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"duminică_luni_marți_miercuri_joi_vineri_sâmbătă\".split(\"_\"),weekdaysShort:\"Dum_Lun_Mar_Mie_Joi_Vin_Sâm\".split(\"_\"),weekdaysMin:\"Du_Lu_Ma_Mi_Jo_Vi_Sâ\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[azi la] LT\",nextDay:\"[mâine la] LT\",nextWeek:\"dddd [la] LT\",lastDay:\"[ieri la] LT\",lastWeek:\"[fosta] dddd [la] LT\",sameElse:\"L\"},relativeTime:{future:\"peste %s\",past:\"%s în urmă\",s:\"câteva secunde\",m:\"un minut\",mm:e,h:\"o oră\",hh:e,d:\"o zi\",dd:e,M:\"o lună\",MM:e,y:\"un an\",yy:e},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"ro\",\"ro\",{closeText:\"Închide\",prevText:\"« Luna precedentă\",nextText:\"Luna următoare »\",currentText:\"Azi\",monthNames:[\"Ianuarie\",\"Februarie\",\"Martie\",\"Aprilie\",\"Mai\",\"Iunie\",\"Iulie\",\"August\",\"Septembrie\",\"Octombrie\",\"Noiembrie\",\"Decembrie\"],monthNamesShort:[\"Ian\",\"Feb\",\"Mar\",\"Apr\",\"Mai\",\"Iun\",\"Iul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Duminică\",\"Luni\",\"Marţi\",\"Miercuri\",\"Joi\",\"Vineri\",\"Sâmbătă\"],dayNamesShort:[\"Dum\",\"Lun\",\"Mar\",\"Mie\",\"Joi\",\"Vin\",\"Sâm\"],dayNamesMin:[\"Du\",\"Lu\",\"Ma\",\"Mi\",\"Jo\",\"Vi\",\"Sâ\"],weekHeader:\"Săpt\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ro\",{buttonText:{prev:\"precedentă\",next:\"următoare\",month:\"Lună\",week:\"Săptămână\",day:\"Zi\",list:\"Agendă\"},allDayText:\"Toată ziua\",eventLimitText:function(e){return\"+alte \"+e},noEventsMessage:\"Nu există evenimente de afișat\"})}(),function(){!function(){function e(e,a){var t=e.split(\"_\");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(a,t,n){var r={mm:t?\"минута_минуты_минут\":\"минуту_минуты_минут\",hh:\"час_часа_часов\",dd:\"день_дня_дней\",MM:\"месяц_месяца_месяцев\",yy:\"год_года_лет\"};return\"m\"===n?t?\"минута\":\"минуту\":a+\" \"+e(r[n],+a)}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];a.defineLocale(\"ru\",{months:{format:\"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря\".split(\"_\"),standalone:\"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь\".split(\"_\")},monthsShort:{format:\"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.\".split(\"_\"),standalone:\"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.\".split(\"_\")},weekdays:{standalone:\"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота\".split(\"_\"),format:\"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу\".split(\"_\"),isFormat:/\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/},weekdaysShort:\"вс_пн_вт_ср_чт_пт_сб\".split(\"_\"),weekdaysMin:\"вс_пн_вт_ср_чт_пт_сб\".split(\"_\"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,monthsShortRegex:/^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY г.\",LLL:\"D MMMM YYYY г., HH:mm\",LLLL:\"dddd, D MMMM YYYY г., HH:mm\"},calendar:{sameDay:\"[Сегодня в] LT\",nextDay:\"[Завтра в] LT\",lastDay:\"[Вчера в] LT\",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?\"[Во] dddd [в] LT\":\"[В] dddd [в] LT\";switch(this.day()){case 0:return\"[В следующее] dddd [в] LT\";case 1:case 2:case 4:return\"[В следующий] dddd [в] LT\";case 3:case 5:case 6:return\"[В следующую] dddd [в] LT\"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?\"[Во] dddd [в] LT\":\"[В] dddd [в] LT\";switch(this.day()){case 0:return\"[В прошлое] dddd [в] LT\";case 1:case 2:case 4:return\"[В прошлый] dddd [в] LT\";case 3:case 5:case 6:return\"[В прошлую] dddd [в] LT\"}},sameElse:\"L\"},relativeTime:{future:\"через %s\",past:\"%s назад\",s:\"несколько секунд\",m:t,mm:t,h:\"час\",hh:t,d:\"день\",dd:t,M:\"месяц\",MM:t,y:\"год\",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,a,t){return e<4?\"ночи\":e<12?\"утра\":e<17?\"дня\":\"вечера\"},dayOfMonthOrdinalParse:/\\d{1,2}-(й|го|я)/,ordinal:function(e,a){switch(a){case\"M\":case\"d\":case\"DDD\":return e+\"-й\";case\"D\":return e+\"-го\";case\"w\":case\"W\":return e+\"-я\";default:return e}},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"ru\",\"ru\",{closeText:\"Закрыть\",prevText:\"<Пред\",nextText:\"След>\",currentText:\"Сегодня\",monthNames:[\"Январь\",\"Февраль\",\"Март\",\"Апрель\",\"Май\",\"Июнь\",\"Июль\",\"Август\",\"Сентябрь\",\"Октябрь\",\"Ноябрь\",\"Декабрь\"],monthNamesShort:[\"Янв\",\"Фев\",\"Мар\",\"Апр\",\"Май\",\"Июн\",\"Июл\",\"Авг\",\"Сен\",\"Окт\",\"Ноя\",\"Дек\"],dayNames:[\"воскресенье\",\"понедельник\",\"вторник\",\"среда\",\"четверг\",\"пятница\",\"суббота\"],dayNamesShort:[\"вск\",\"пнд\",\"втр\",\"срд\",\"чтв\",\"птн\",\"сбт\"],dayNamesMin:[\"Вс\",\"Пн\",\"Вт\",\"Ср\",\"Чт\",\"Пт\",\"Сб\"],weekHeader:\"Нед\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"ru\",{buttonText:{month:\"Месяц\",week:\"Неделя\",day:\"День\",list:\"Повестка дня\"},allDayText:\"Весь день\",eventLimitText:function(e){return\"+ ещё \"+e},noEventsMessage:\"Нет событий для отображения\"})}(),function(){!function(){function e(e){return e>1&&e<5}function t(a,t,n,r){var s=a+\" \";switch(n){case\"s\":return t||r?\"pár sekúnd\":\"pár sekundami\";case\"m\":return t?\"minúta\":r?\"minútu\":\"minútou\";case\"mm\":return t||r?s+(e(a)?\"minúty\":\"minút\"):s+\"minútami\";case\"h\":return t?\"hodina\":r?\"hodinu\":\"hodinou\";case\"hh\":return t||r?s+(e(a)?\"hodiny\":\"hodín\"):s+\"hodinami\";case\"d\":return t||r?\"deň\":\"dňom\";case\"dd\":return t||r?s+(e(a)?\"dni\":\"dní\"):s+\"dňami\";case\"M\":return t||r?\"mesiac\":\"mesiacom\";case\"MM\":return t||r?s+(e(a)?\"mesiace\":\"mesiacov\"):s+\"mesiacmi\";case\"y\":return t||r?\"rok\":\"rokom\";case\"yy\":return t||r?s+(e(a)?\"roky\":\"rokov\"):s+\"rokmi\"}}var n=\"január_február_marec_apríl_máj_jún_júl_august_september_október_november_december\".split(\"_\"),r=\"jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec\".split(\"_\");a.defineLocale(\"sk\",{months:n,monthsShort:r,weekdays:\"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota\".split(\"_\"),weekdaysShort:\"ne_po_ut_st_št_pi_so\".split(\"_\"),weekdaysMin:\"ne_po_ut_st_št_pi_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[dnes o] LT\",nextDay:\"[zajtra o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v nedeľu o] LT\";case 1:case 2:return\"[v] dddd [o] LT\";case 3:return\"[v stredu o] LT\";case 4:return\"[vo štvrtok o] LT\";case 5:return\"[v piatok o] LT\";case 6:return\"[v sobotu o] LT\"}},lastDay:\"[včera o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulú nedeľu o] LT\";case 1:case 2:return\"[minulý] dddd [o] LT\";case 3:return\"[minulú stredu o] LT\";case 4:case 5:return\"[minulý] dddd [o] LT\";case 6:return\"[minulú sobotu o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pred %s\",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"sk\",\"sk\",{closeText:\"Zavrieť\",prevText:\"<Predchádzajúci\",nextText:\"Nasledujúci>\",currentText:\"Dnes\",monthNames:[\"január\",\"február\",\"marec\",\"apríl\",\"máj\",\"jún\",\"júl\",\"august\",\"september\",\"október\",\"november\",\"december\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Máj\",\"Jún\",\"Júl\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"nedeľa\",\"pondelok\",\"utorok\",\"streda\",\"štvrtok\",\"piatok\",\"sobota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Str\",\"Štv\",\"Pia\",\"Sob\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"St\",\"Št\",\"Pia\",\"So\"],weekHeader:\"Ty\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"sk\",{buttonText:{month:\"Mesiac\",week:\"Týždeň\",day:\"Deň\",list:\"Rozvrh\"},allDayText:\"Celý deň\",eventLimitText:function(e){return\"+ďalšie: \"+e},noEventsMessage:\"Žiadne akcie na zobrazenie\"})}(),function(){!function(){function e(e,a,t,n){var r=e+\" \";switch(t){case\"s\":return a||n?\"nekaj sekund\":\"nekaj sekundami\";case\"m\":return a?\"ena minuta\":\"eno minuto\";case\"mm\":return r+=1===e?a?\"minuta\":\"minuto\":2===e?a||n?\"minuti\":\"minutama\":e<5?a||n?\"minute\":\"minutami\":a||n?\"minut\":\"minutami\";case\"h\":return a?\"ena ura\":\"eno uro\";case\"hh\":return r+=1===e?a?\"ura\":\"uro\":2===e?a||n?\"uri\":\"urama\":e<5?a||n?\"ure\":\"urami\":a||n?\"ur\":\"urami\";case\"d\":return a||n?\"en dan\":\"enim dnem\";case\"dd\":return r+=1===e?a||n?\"dan\":\"dnem\":2===e?a||n?\"dni\":\"dnevoma\":a||n?\"dni\":\"dnevi\";case\"M\":return a||n?\"en mesec\":\"enim mesecem\";case\"MM\":return r+=1===e?a||n?\"mesec\":\"mesecem\":2===e?a||n?\"meseca\":\"mesecema\":e<5?a||n?\"mesece\":\"meseci\":a||n?\"mesecev\":\"meseci\";case\"y\":return a||n?\"eno leto\":\"enim letom\";case\"yy\":return r+=1===e?a||n?\"leto\":\"letom\":2===e?a||n?\"leti\":\"letoma\":e<5?a||n?\"leta\":\"leti\":a||n?\"let\":\"leti\"}}a.defineLocale(\"sl\",{months:\"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota\".split(\"_\"),weekdaysShort:\"ned._pon._tor._sre._čet._pet._sob.\".split(\"_\"),weekdaysMin:\"ne_po_to_sr_če_pe_so\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danes ob] LT\",nextDay:\"[jutri ob] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v] [nedeljo] [ob] LT\";case 3:return\"[v] [sredo] [ob] LT\";case 6:return\"[v] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[v] dddd [ob] LT\"}},lastDay:\"[včeraj ob] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[prejšnjo] [nedeljo] [ob] LT\";case 3:return\"[prejšnjo] [sredo] [ob] LT\";case 6:return\"[prejšnjo] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[prejšnji] dddd [ob] LT\"}},sameElse:\"L\"},relativeTime:{future:\"čez %s\",past:\"pred %s\",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"sl\",\"sl\",{closeText:\"Zapri\",prevText:\"<Prejšnji\",nextText:\"Naslednji>\",currentText:\"Trenutni\",monthNames:[\"Januar\",\"Februar\",\"Marec\",\"April\",\"Maj\",\"Junij\",\"Julij\",\"Avgust\",\"September\",\"Oktober\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Avg\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Nedelja\",\"Ponedeljek\",\"Torek\",\"Sreda\",\"Četrtek\",\"Petek\",\"Sobota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Tor\",\"Sre\",\"Čet\",\"Pet\",\"Sob\"],dayNamesMin:[\"Ne\",\"Po\",\"To\",\"Sr\",\"Če\",\"Pe\",\"So\"],weekHeader:\"Teden\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"sl\",{buttonText:{month:\"Mesec\",week:\"Teden\",day:\"Dan\",list:\"Dnevni red\"},allDayText:\"Ves dan\",eventLimitText:\"več\",noEventsMessage:\"Ni dogodkov za prikaz\"})}(),function(){!function(){var e={words:{m:[\"jedan minut\",\"jedne minute\"],mm:[\"minut\",\"minute\",\"minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"sat\",\"sata\",\"sati\"],dd:[\"dan\",\"dana\",\"dana\"],MM:[\"mesec\",\"meseca\",\"meseci\"],yy:[\"godina\",\"godine\",\"godina\"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(a,t,n){var r=e.words[n];return 1===n.length?t?r[0]:r[1]:a+\" \"+e.correctGrammaticalCase(a,r)}};a.defineLocale(\"sr\",{months:\"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sre._čet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_če_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedelju] [u] LT\";case 3:return\"[u] [sredu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juče u] LT\",lastWeek:function(){return[\"[prošle] [nedelje] [u] LT\",\"[prošlog] [ponedeljka] [u] LT\",\"[prošlog] [utorka] [u] LT\",\"[prošle] [srede] [u] LT\",\"[prošlog] [četvrtka] [u] LT\",\"[prošlog] [petka] [u] LT\",\"[prošle] [subote] [u] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pre %s\",s:\"nekoliko sekundi\",m:e.translate,\nmm:e.translate,h:e.translate,hh:e.translate,d:\"dan\",dd:e.translate,M:\"mesec\",MM:e.translate,y:\"godinu\",yy:e.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"sr\",\"sr-SR\",{closeText:\"Zatvori\",prevText:\"<\",nextText:\">\",currentText:\"Danas\",monthNames:[\"Januar\",\"Februar\",\"Mart\",\"April\",\"Maj\",\"Jun\",\"Jul\",\"Avgust\",\"Septembar\",\"Oktobar\",\"Novembar\",\"Decembar\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Avg\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Nedelja\",\"Ponedeljak\",\"Utorak\",\"Sreda\",\"Četvrtak\",\"Petak\",\"Subota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Sre\",\"Čet\",\"Pet\",\"Sub\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"Sr\",\"Če\",\"Pe\",\"Su\"],weekHeader:\"Sed\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"sr\",{buttonText:{prev:\"Prethodna\",next:\"Sledeći\",month:\"Mеsеc\",week:\"Nеdеlja\",day:\"Dan\",list:\"Planеr\"},allDayText:\"Cеo dan\",eventLimitText:function(e){return\"+ još \"+e},noEventsMessage:\"Nеma događaja za prikaz\"})}(),function(){!function(){var e={words:{m:[\"један минут\",\"једне минуте\"],mm:[\"минут\",\"минуте\",\"минута\"],h:[\"један сат\",\"једног сата\"],hh:[\"сат\",\"сата\",\"сати\"],dd:[\"дан\",\"дана\",\"дана\"],MM:[\"месец\",\"месеца\",\"месеци\"],yy:[\"година\",\"године\",\"година\"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(a,t,n){var r=e.words[n];return 1===n.length?t?r[0]:r[1]:a+\" \"+e.correctGrammaticalCase(a,r)}};a.defineLocale(\"sr-cyrl\",{months:\"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар\".split(\"_\"),monthsShort:\"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.\".split(\"_\"),monthsParseExact:!0,weekdays:\"недеља_понедељак_уторак_среда_четвртак_петак_субота\".split(\"_\"),weekdaysShort:\"нед._пон._уто._сре._чет._пет._суб.\".split(\"_\"),weekdaysMin:\"не_по_ут_ср_че_пе_су\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[данас у] LT\",nextDay:\"[сутра у] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[у] [недељу] [у] LT\";case 3:return\"[у] [среду] [у] LT\";case 6:return\"[у] [суботу] [у] LT\";case 1:case 2:case 4:case 5:return\"[у] dddd [у] LT\"}},lastDay:\"[јуче у] LT\",lastWeek:function(){return[\"[прошле] [недеље] [у] LT\",\"[прошлог] [понедељка] [у] LT\",\"[прошлог] [уторка] [у] LT\",\"[прошле] [среде] [у] LT\",\"[прошлог] [четвртка] [у] LT\",\"[прошлог] [петка] [у] LT\",\"[прошле] [суботе] [у] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"за %s\",past:\"пре %s\",s:\"неколико секунди\",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:\"дан\",dd:e.translate,M:\"месец\",MM:e.translate,y:\"годину\",yy:e.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"sr-cyrl\",\"sr\",{closeText:\"Затвори\",prevText:\"<\",nextText:\">\",currentText:\"Данас\",monthNames:[\"Јануар\",\"Фебруар\",\"Март\",\"Април\",\"Мај\",\"Јун\",\"Јул\",\"Август\",\"Септембар\",\"Октобар\",\"Новембар\",\"Децембар\"],monthNamesShort:[\"Јан\",\"Феб\",\"Мар\",\"Апр\",\"Мај\",\"Јун\",\"Јул\",\"Авг\",\"Сеп\",\"Окт\",\"Нов\",\"Дец\"],dayNames:[\"Недеља\",\"Понедељак\",\"Уторак\",\"Среда\",\"Четвртак\",\"Петак\",\"Субота\"],dayNamesShort:[\"Нед\",\"Пон\",\"Уто\",\"Сре\",\"Чет\",\"Пет\",\"Суб\"],dayNamesMin:[\"Не\",\"По\",\"Ут\",\"Ср\",\"Че\",\"Пе\",\"Су\"],weekHeader:\"Сед\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"sr-cyrl\",{buttonText:{prev:\"Претходна\",next:\"следећи\",month:\"Месец\",week:\"Недеља\",day:\"Дан\",list:\"Планер\"},allDayText:\"Цео дан\",eventLimitText:function(e){return\"+ још \"+e},noEventsMessage:\"Нема догађаја за приказ\"})}(),function(){!function(){a.defineLocale(\"sv\",{months:\"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag\".split(\"_\"),weekdaysShort:\"sön_mån_tis_ons_tor_fre_lör\".split(\"_\"),weekdaysMin:\"sö_må_ti_on_to_fr_lö\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D MMMM YYYY [kl.] HH:mm\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd D MMM YYYY HH:mm\"},calendar:{sameDay:\"[Idag] LT\",nextDay:\"[Imorgon] LT\",lastDay:\"[Igår] LT\",nextWeek:\"[På] dddd LT\",lastWeek:\"[I] dddd[s] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"för %s sedan\",s:\"några sekunder\",m:\"en minut\",mm:\"%d minuter\",h:\"en timme\",hh:\"%d timmar\",d:\"en dag\",dd:\"%d dagar\",M:\"en månad\",MM:\"%d månader\",y:\"ett år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}(e|a)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"e\":1===a?\"a\":2===a?\"a\":\"e\")},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"sv\",\"sv\",{closeText:\"Stäng\",prevText:\"«Förra\",nextText:\"Nästa»\",currentText:\"Idag\",monthNames:[\"Januari\",\"Februari\",\"Mars\",\"April\",\"Maj\",\"Juni\",\"Juli\",\"Augusti\",\"September\",\"Oktober\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNamesShort:[\"Sön\",\"Mån\",\"Tis\",\"Ons\",\"Tor\",\"Fre\",\"Lör\"],dayNames:[\"Söndag\",\"Måndag\",\"Tisdag\",\"Onsdag\",\"Torsdag\",\"Fredag\",\"Lördag\"],dayNamesMin:[\"Sö\",\"Må\",\"Ti\",\"On\",\"To\",\"Fr\",\"Lö\"],weekHeader:\"Ve\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"sv\",{buttonText:{month:\"Månad\",week:\"Vecka\",day:\"Dag\",list:\"Program\"},allDayText:\"Heldag\",eventLimitText:\"till\",noEventsMessage:\"Inga händelser att visa\"})}(),function(){!function(){a.defineLocale(\"th\",{months:\"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม\".split(\"_\"),monthsShort:\"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.\".split(\"_\"),monthsParseExact:!0,weekdays:\"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์\".split(\"_\"),weekdaysShort:\"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์\".split(\"_\"),weekdaysMin:\"อา._จ._อ._พ._พฤ._ศ._ส.\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY เวลา H:mm\",LLLL:\"วันddddที่ D MMMM YYYY เวลา H:mm\"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return\"หลังเที่ยง\"===e},meridiem:function(e,a,t){return e<12?\"ก่อนเที่ยง\":\"หลังเที่ยง\"},calendar:{sameDay:\"[วันนี้ เวลา] LT\",nextDay:\"[พรุ่งนี้ เวลา] LT\",nextWeek:\"dddd[หน้า เวลา] LT\",lastDay:\"[เมื่อวานนี้ เวลา] LT\",lastWeek:\"[วัน]dddd[ที่แล้ว เวลา] LT\",sameElse:\"L\"},relativeTime:{future:\"อีก %s\",past:\"%sที่แล้ว\",s:\"ไม่กี่วินาที\",m:\"1 นาที\",mm:\"%d นาที\",h:\"1 ชั่วโมง\",hh:\"%d ชั่วโมง\",d:\"1 วัน\",dd:\"%d วัน\",M:\"1 เดือน\",MM:\"%d เดือน\",y:\"1 ปี\",yy:\"%d ปี\"}})}(),e.fullCalendar.datepickerLocale(\"th\",\"th\",{closeText:\"ปิด\",prevText:\"« ย้อน\",nextText:\"ถัดไป »\",currentText:\"วันนี้\",monthNames:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"],monthNamesShort:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],dayNames:[\"อาทิตย์\",\"จันทร์\",\"อังคาร\",\"พุธ\",\"พฤหัสบดี\",\"ศุกร์\",\"เสาร์\"],dayNamesShort:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],dayNamesMin:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"th\",{buttonText:{month:\"เดือน\",week:\"สัปดาห์\",day:\"วัน\",list:\"แผนงาน\"},allDayText:\"ตลอดวัน\",eventLimitText:\"เพิ่มเติม\",noEventsMessage:\"ไม่มีกิจกรรมที่จะแสดง\"})}(),function(){!function(){var e={1:\"'inci\",5:\"'inci\",8:\"'inci\",70:\"'inci\",80:\"'inci\",2:\"'nci\",7:\"'nci\",20:\"'nci\",50:\"'nci\",3:\"'üncü\",4:\"'üncü\",100:\"'üncü\",6:\"'ncı\",9:\"'uncu\",10:\"'uncu\",30:\"'uncu\",60:\"'ıncı\",90:\"'ıncı\"};a.defineLocale(\"tr\",{months:\"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık\".split(\"_\"),monthsShort:\"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara\".split(\"_\"),weekdays:\"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi\".split(\"_\"),weekdaysShort:\"Paz_Pts_Sal_Çar_Per_Cum_Cts\".split(\"_\"),weekdaysMin:\"Pz_Pt_Sa_Ça_Pe_Cu_Ct\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bugün saat] LT\",nextDay:\"[yarın saat] LT\",nextWeek:\"[haftaya] dddd [saat] LT\",lastDay:\"[dün] LT\",lastWeek:\"[geçen hafta] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s sonra\",past:\"%s önce\",s:\"birkaç saniye\",m:\"bir dakika\",mm:\"%d dakika\",h:\"bir saat\",hh:\"%d saat\",d:\"bir gün\",dd:\"%d gün\",M:\"bir ay\",MM:\"%d ay\",y:\"bir yıl\",yy:\"%d yıl\"},dayOfMonthOrdinalParse:/\\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)return a+\"'ıncı\";var t=a%10,n=a%100-t,r=a>=100?100:null;return a+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"tr\",\"tr\",{closeText:\"kapat\",prevText:\"<geri\",nextText:\"ileri>\",currentText:\"bugün\",monthNames:[\"Ocak\",\"Şubat\",\"Mart\",\"Nisan\",\"Mayıs\",\"Haziran\",\"Temmuz\",\"Ağustos\",\"Eylül\",\"Ekim\",\"Kasım\",\"Aralık\"],monthNamesShort:[\"Oca\",\"Şub\",\"Mar\",\"Nis\",\"May\",\"Haz\",\"Tem\",\"Ağu\",\"Eyl\",\"Eki\",\"Kas\",\"Ara\"],dayNames:[\"Pazar\",\"Pazartesi\",\"Salı\",\"Çarşamba\",\"Perşembe\",\"Cuma\",\"Cumartesi\"],dayNamesShort:[\"Pz\",\"Pt\",\"Sa\",\"Ça\",\"Pe\",\"Cu\",\"Ct\"],dayNamesMin:[\"Pz\",\"Pt\",\"Sa\",\"Ça\",\"Pe\",\"Cu\",\"Ct\"],weekHeader:\"Hf\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"tr\",{buttonText:{next:\"ileri\",month:\"Ay\",week:\"Hafta\",day:\"Gün\",list:\"Ajanda\"},allDayText:\"Tüm gün\",eventLimitText:\"daha fazla\",noEventsMessage:\"Herhangi bir etkinlik görüntülemek için\"})}(),function(){!function(){function e(e,a){var t=e.split(\"_\");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(a,t,n){var r={mm:t?\"хвилина_хвилини_хвилин\":\"хвилину_хвилини_хвилин\",hh:t?\"година_години_годин\":\"годину_години_годин\",dd:\"день_дні_днів\",MM:\"місяць_місяці_місяців\",yy:\"рік_роки_років\"};return\"m\"===n?t?\"хвилина\":\"хвилину\":\"h\"===n?t?\"година\":\"годину\":a+\" \"+e(r[n],+a)}function n(e,a){var t={nominative:\"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота\".split(\"_\"),accusative:\"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу\".split(\"_\"),genitive:\"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи\".split(\"_\")};return e?t[/(\\[[ВвУу]\\]) ?dddd/.test(a)?\"accusative\":/\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(a)?\"genitive\":\"nominative\"][e.day()]:t.nominative}function r(e){return function(){return e+\"о\"+(11===this.hours()?\"б\":\"\")+\"] LT\"}}a.defineLocale(\"uk\",{months:{format:\"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня\".split(\"_\"),standalone:\"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень\".split(\"_\")},monthsShort:\"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд\".split(\"_\"),weekdays:n,weekdaysShort:\"нд_пн_вт_ср_чт_пт_сб\".split(\"_\"),weekdaysMin:\"нд_пн_вт_ср_чт_пт_сб\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY р.\",LLL:\"D MMMM YYYY р., HH:mm\",LLLL:\"dddd, D MMMM YYYY р., HH:mm\"},calendar:{sameDay:r(\"[Сьогодні \"),nextDay:r(\"[Завтра \"),lastDay:r(\"[Вчора \"),nextWeek:r(\"[У] dddd [\"),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return r(\"[Минулої] dddd [\").call(this);case 1:case 2:case 4:return r(\"[Минулого] dddd [\").call(this)}},sameElse:\"L\"},relativeTime:{future:\"за %s\",past:\"%s тому\",s:\"декілька секунд\",m:t,mm:t,h:\"годину\",hh:t,d:\"день\",dd:t,M:\"місяць\",MM:t,y:\"рік\",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,a,t){return e<4?\"ночі\":e<12?\"ранку\":e<17?\"дня\":\"вечора\"},dayOfMonthOrdinalParse:/\\d{1,2}-(й|го)/,ordinal:function(e,a){switch(a){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return e+\"-й\";case\"D\":return e+\"-го\";default:return e}},week:{dow:1,doy:7}})}(),e.fullCalendar.datepickerLocale(\"uk\",\"uk\",{closeText:\"Закрити\",prevText:\"<\",nextText:\">\",currentText:\"Сьогодні\",monthNames:[\"Січень\",\"Лютий\",\"Березень\",\"Квітень\",\"Травень\",\"Червень\",\"Липень\",\"Серпень\",\"Вересень\",\"Жовтень\",\"Листопад\",\"Грудень\"],monthNamesShort:[\"Січ\",\"Лют\",\"Бер\",\"Кві\",\"Тра\",\"Чер\",\"Лип\",\"Сер\",\"Вер\",\"Жов\",\"Лис\",\"Гру\"],dayNames:[\"неділя\",\"понеділок\",\"вівторок\",\"середа\",\"четвер\",\"п’ятниця\",\"субота\"],dayNamesShort:[\"нед\",\"пнд\",\"вів\",\"срд\",\"чтв\",\"птн\",\"сбт\"],dayNamesMin:[\"Нд\",\"Пн\",\"Вт\",\"Ср\",\"Чт\",\"Пт\",\"Сб\"],weekHeader:\"Тиж\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"uk\",{buttonText:{month:\"Місяць\",week:\"Тиждень\",day:\"День\",list:\"Порядок денний\"},allDayText:\"Увесь день\",eventLimitText:function(e){return\"+ще \"+e+\"...\"},noEventsMessage:\"Немає подій для відображення\"})}(),function(){!function(){a.defineLocale(\"vi\",{months:\"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12\".split(\"_\"),monthsShort:\"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12\".split(\"_\"),monthsParseExact:!0,weekdays:\"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy\".split(\"_\"),weekdaysShort:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysMin:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?\"sa\":\"SA\":t?\"ch\":\"CH\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [năm] YYYY\",LLL:\"D MMMM [năm] YYYY HH:mm\",LLLL:\"dddd, D MMMM [năm] YYYY HH:mm\",l:\"DD/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[Hôm nay lúc] LT\",nextDay:\"[Ngày mai lúc] LT\",nextWeek:\"dddd [tuần tới lúc] LT\",lastDay:\"[Hôm qua lúc] LT\",lastWeek:\"dddd [tuần rồi lúc] LT\",sameElse:\"L\"},relativeTime:{future:\"%s tới\",past:\"%s trước\",s:\"vài giây\",m:\"một phút\",mm:\"%d phút\",h:\"một giờ\",hh:\"%d giờ\",d:\"một ngày\",dd:\"%d ngày\",M:\"một tháng\",MM:\"%d tháng\",y:\"một năm\",yy:\"%d năm\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"vi\",\"vi\",{closeText:\"Đóng\",prevText:\"<Trước\",nextText:\"Tiếp>\",currentText:\"Hôm nay\",monthNames:[\"Tháng Một\",\"Tháng Hai\",\"Tháng Ba\",\"Tháng Tư\",\"Tháng Năm\",\"Tháng Sáu\",\"Tháng Bảy\",\"Tháng Tám\",\"Tháng Chín\",\"Tháng Mười\",\"Tháng Mười Một\",\"Tháng Mười Hai\"],monthNamesShort:[\"Tháng 1\",\"Tháng 2\",\"Tháng 3\",\"Tháng 4\",\"Tháng 5\",\"Tháng 6\",\"Tháng 7\",\"Tháng 8\",\"Tháng 9\",\"Tháng 10\",\"Tháng 11\",\"Tháng 12\"],dayNames:[\"Chủ Nhật\",\"Thứ Hai\",\"Thứ Ba\",\"Thứ Tư\",\"Thứ Năm\",\"Thứ Sáu\",\"Thứ Bảy\"],dayNamesShort:[\"CN\",\"T2\",\"T3\",\"T4\",\"T5\",\"T6\",\"T7\"],dayNamesMin:[\"CN\",\"T2\",\"T3\",\"T4\",\"T5\",\"T6\",\"T7\"],weekHeader:\"Tu\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),e.fullCalendar.locale(\"vi\",{buttonText:{month:\"Tháng\",week:\"Tuần\",day:\"Ngày\",list:\"Lịch biểu\"},allDayText:\"Cả ngày\",eventLimitText:function(e){return\"+ thêm \"+e},noEventsMessage:\"Không có sự kiện để hiển thị\"})}(),function(){!function(){a.defineLocale(\"zh-cn\",{months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"周日_周一_周二_周三_周四_周五_周六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY年MMMD日\",LL:\"YYYY年MMMD日\",LLL:\"YYYY年MMMD日Ah点mm分\",LLLL:\"YYYY年MMMD日ddddAh点mm分\",l:\"YYYY年MMMD日\",ll:\"YYYY年MMMD日\",lll:\"YYYY年MMMD日 HH:mm\",llll:\"YYYY年MMMD日dddd HH:mm\"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),\"凌晨\"===a||\"早上\"===a||\"上午\"===a?e:\"下午\"===a||\"晚上\"===a?e+12:e>=11?e:e+12},meridiem:function(e,a,t){var n=100*e+a;return n<600?\"凌晨\":n<900?\"早上\":n<1130?\"上午\":n<1230?\"中午\":n<1800?\"下午\":\"晚上\"},calendar:{sameDay:\"[今天]LT\",nextDay:\"[明天]LT\",nextWeek:\"[下]ddddLT\",lastDay:\"[昨天]LT\",lastWeek:\"[上]ddddLT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(日|月|周)/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"日\";case\"M\":return e+\"月\";case\"w\":case\"W\":return e+\"周\";default:return e}},relativeTime:{future:\"%s内\",past:\"%s前\",s:\"几秒\",m:\"1 分钟\",mm:\"%d 分钟\",h:\"1 小时\",hh:\"%d 小时\",d:\"1 天\",dd:\"%d 天\",M:\"1 个月\",MM:\"%d 个月\",y:\"1 年\",yy:\"%d 年\"},week:{dow:1,doy:4}})}(),e.fullCalendar.datepickerLocale(\"zh-cn\",\"zh-CN\",{closeText:\"关闭\",prevText:\"<上月\",nextText:\"下月>\",currentText:\"今天\",monthNames:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],monthNamesShort:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],dayNames:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"],dayNamesShort:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],dayNamesMin:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],weekHeader:\"周\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"年\"}),e.fullCalendar.locale(\"zh-cn\",{buttonText:{month:\"月\",week:\"周\",day:\"日\",list:\"日程\"},allDayText:\"全天\",eventLimitText:function(e){return\"另外 \"+e+\" 个\"},noEventsMessage:\"没有事件显示\"})}(),function(){!function(){a.defineLocale(\"zh-tw\",{months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"週日_週一_週二_週三_週四_週五_週六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY年MMMD日\",LL:\"YYYY年MMMD日\",LLL:\"YYYY年MMMD日 HH:mm\",LLLL:\"YYYY年MMMD日dddd HH:mm\",l:\"YYYY年MMMD日\",ll:\"YYYY年MMMD日\",lll:\"YYYY年MMMD日 HH:mm\",llll:\"YYYY年MMMD日dddd HH:mm\"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),\"凌晨\"===a||\"早上\"===a||\"上午\"===a?e:\"中午\"===a?e>=11?e:e+12:\"下午\"===a||\"晚上\"===a?e+12:void 0},meridiem:function(e,a,t){var n=100*e+a;return n<600?\"凌晨\":n<900?\"早上\":n<1130?\"上午\":n<1230?\"中午\":n<1800?\"下午\":\"晚上\"},calendar:{sameDay:\"[今天]LT\",nextDay:\"[明天]LT\",nextWeek:\"[下]ddddLT\",lastDay:\"[昨天]LT\",lastWeek:\"[上]ddddLT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(日|月|週)/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"日\";case\"M\":return e+\"月\";case\"w\":case\"W\":return e+\"週\";default:return e}},relativeTime:{future:\"%s內\",past:\"%s前\",s:\"幾秒\",m:\"1 分鐘\",mm:\"%d 分鐘\",h:\"1 小時\",hh:\"%d 小時\",d:\"1 天\",dd:\"%d 天\",M:\"1 個月\",MM:\"%d 個月\",y:\"1 年\",yy:\"%d 年\"}})}(),e.fullCalendar.datepickerLocale(\"zh-tw\",\"zh-TW\",{closeText:\"關閉\",prevText:\"<上月\",nextText:\"下月>\",currentText:\"今天\",monthNames:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],monthNamesShort:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],dayNames:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"],dayNamesShort:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],dayNamesMin:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],weekHeader:\"周\",dateFormat:\"yy/mm/dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"年\"}),e.fullCalendar.locale(\"zh-tw\",{buttonText:{month:\"月\",week:\"週\",day:\"天\",list:\"活動列表\"},allDayText:\"整天\",eventLimitText:\"顯示更多\",noEventsMessage:\"没有任何活動\"})}(),a.locale(\"en\"),e.fullCalendar.locale(\"en\"),e.datepicker&&e.datepicker.setDefaults(e.datepicker.regional[\"\"])});"]}