From 2cf39613da62fd98fa359fdf21c47011bbc5a63b Mon Sep 17 00:00:00 2001 From: German Correa Date: Tue, 28 Nov 2017 17:23:51 -0300 Subject: [PATCH] Agrega plenaria de Umberto Agrega facebbok y comentarios en el sidebar mejora link de cronograma --- calendario.php | 25 + cronograma.pdf | Bin 25889 -> 25866 bytes header.php | 3 +- js/calprog.js | 33 + js/fullcalendar/CHANGELOG.txt | 1248 ++ js/fullcalendar/CONTRIBUTING.txt | 127 + js/fullcalendar/LICENSE.txt | 20 + js/fullcalendar/demos/agenda-views.html | 106 + js/fullcalendar/demos/background-events.html | 102 + js/fullcalendar/demos/basic-views.html | 106 + js/fullcalendar/demos/default.html | 100 + js/fullcalendar/demos/external-dragging.html | 135 + js/fullcalendar/demos/gcal.html | 78 + js/fullcalendar/demos/js/theme-chooser.js | 109 + js/fullcalendar/demos/json.html | 85 + js/fullcalendar/demos/json/events.json | 56 + js/fullcalendar/demos/list-views.html | 115 + js/fullcalendar/demos/locales.html | 143 + js/fullcalendar/demos/php/get-events.php | 50 + js/fullcalendar/demos/php/get-timezones.php | 9 + js/fullcalendar/demos/php/utils.php | 130 + js/fullcalendar/demos/selectable.html | 121 + js/fullcalendar/demos/themes.html | 234 + js/fullcalendar/demos/timezones.html | 128 + js/fullcalendar/demos/week-numbers.html | 111 + js/fullcalendar/fullcalendar.css | 1494 ++ js/fullcalendar/fullcalendar.js | 18336 ++++++++++++++++ js/fullcalendar/fullcalendar.min.css | 5 + js/fullcalendar/fullcalendar.min.js | 11 + js/fullcalendar/fullcalendar.print.css | 208 + js/fullcalendar/fullcalendar.print.min.css | 5 + js/fullcalendar/fullcalsched.zip | Bin 0 -> 267479 bytes js/fullcalendar/gcal.js | 292 + js/fullcalendar/gcal.min.js | 6 + js/fullcalendar/lib/jquery-ui.min.js | 13 + js/fullcalendar/lib/jquery.min.js | 4 + js/fullcalendar/lib/moment.min.js | 1 + js/fullcalendar/locale-all.js | 5 + js/fullcalendar/locale/af.js | 1 + js/fullcalendar/locale/ar-dz.js | 1 + js/fullcalendar/locale/ar-kw.js | 1 + js/fullcalendar/locale/ar-ly.js | 1 + js/fullcalendar/locale/ar-ma.js | 1 + js/fullcalendar/locale/ar-sa.js | 1 + js/fullcalendar/locale/ar-tn.js | 1 + js/fullcalendar/locale/ar.js | 1 + js/fullcalendar/locale/bg.js | 1 + js/fullcalendar/locale/ca.js | 1 + js/fullcalendar/locale/cs.js | 1 + js/fullcalendar/locale/da.js | 1 + js/fullcalendar/locale/de-at.js | 1 + js/fullcalendar/locale/de-ch.js | 1 + js/fullcalendar/locale/de.js | 1 + js/fullcalendar/locale/el.js | 1 + js/fullcalendar/locale/en-au.js | 1 + js/fullcalendar/locale/en-ca.js | 1 + js/fullcalendar/locale/en-gb.js | 1 + js/fullcalendar/locale/en-ie.js | 1 + js/fullcalendar/locale/en-nz.js | 1 + js/fullcalendar/locale/es-do.js | 1 + js/fullcalendar/locale/es-us.js | 1 + js/fullcalendar/locale/es.js | 1 + js/fullcalendar/locale/et.js | 1 + js/fullcalendar/locale/eu.js | 1 + js/fullcalendar/locale/fa.js | 1 + js/fullcalendar/locale/fi.js | 1 + js/fullcalendar/locale/fr-ca.js | 1 + js/fullcalendar/locale/fr-ch.js | 1 + js/fullcalendar/locale/fr.js | 1 + js/fullcalendar/locale/gl.js | 1 + js/fullcalendar/locale/he.js | 1 + js/fullcalendar/locale/hi.js | 1 + js/fullcalendar/locale/hr.js | 1 + js/fullcalendar/locale/hu.js | 1 + js/fullcalendar/locale/id.js | 1 + js/fullcalendar/locale/is.js | 1 + js/fullcalendar/locale/it.js | 1 + js/fullcalendar/locale/ja.js | 1 + js/fullcalendar/locale/kk.js | 1 + js/fullcalendar/locale/ko.js | 1 + js/fullcalendar/locale/lb.js | 1 + js/fullcalendar/locale/lt.js | 1 + js/fullcalendar/locale/lv.js | 1 + js/fullcalendar/locale/mk.js | 1 + js/fullcalendar/locale/ms-my.js | 1 + js/fullcalendar/locale/ms.js | 1 + js/fullcalendar/locale/nb.js | 1 + js/fullcalendar/locale/nl-be.js | 1 + js/fullcalendar/locale/nl.js | 1 + js/fullcalendar/locale/nn.js | 1 + js/fullcalendar/locale/pl.js | 1 + js/fullcalendar/locale/pt-br.js | 1 + js/fullcalendar/locale/pt.js | 1 + js/fullcalendar/locale/ro.js | 1 + js/fullcalendar/locale/ru.js | 1 + js/fullcalendar/locale/sk.js | 1 + js/fullcalendar/locale/sl.js | 1 + js/fullcalendar/locale/sq.js | 1 + js/fullcalendar/locale/sr-cyrl.js | 1 + js/fullcalendar/locale/sr.js | 1 + js/fullcalendar/locale/sv.js | 1 + js/fullcalendar/locale/th.js | 1 + js/fullcalendar/locale/tr.js | 1 + js/fullcalendar/locale/uk.js | 1 + js/fullcalendar/locale/vi.js | 1 + js/fullcalendar/locale/zh-cn.js | 1 + js/fullcalendar/locale/zh-tw.js | 1 + js/fullcalendar/sched/CHANGELOG.txt | 228 + js/fullcalendar/sched/CONTRIBUTING.txt | 34 + js/fullcalendar/sched/LICENSE.txt | 18 + .../sched/demos/background-events.html | 106 + .../sched/demos/column-grouping.html | 113 + js/fullcalendar/sched/demos/columns.html | 108 + .../sched/demos/dynamic-add-remove.html | 132 + .../sched/demos/external-dragging.html | 193 + js/fullcalendar/sched/demos/gcal.html | 74 + js/fullcalendar/sched/demos/grouping.html | 98 + .../sched/demos/js/theme-chooser.js | 109 + js/fullcalendar/sched/demos/json.html | 99 + js/fullcalendar/sched/demos/json/events.json | 7 + .../sched/demos/json/resources.json | 31 + .../sched/demos/misc-callbacks.html | 108 + js/fullcalendar/sched/demos/no-overlap.html | 108 + js/fullcalendar/sched/demos/ordering.html | 112 + .../sched/demos/rendering-hooks.html | 104 + js/fullcalendar/sched/demos/scale.html | 104 + js/fullcalendar/sched/demos/selectable.html | 128 + js/fullcalendar/sched/demos/simple.html | 98 + js/fullcalendar/sched/demos/themes.html | 225 + .../sched/demos/vertical-resource-view.html | 99 + .../sched/lib/fullcalendar.min.css | 5 + js/fullcalendar/sched/lib/fullcalendar.min.js | 11 + .../sched/lib/fullcalendar.print.min.css | 5 + js/fullcalendar/sched/lib/gcal.min.js | 6 + js/fullcalendar/sched/lib/jquery-ui.min.js | 13 + js/fullcalendar/sched/lib/jquery.min.js | 4 + js/fullcalendar/sched/lib/moment.min.js | 7 + js/fullcalendar/sched/scheduler.css | 523 + js/fullcalendar/sched/scheduler.js | 6244 ++++++ js/fullcalendar/sched/scheduler.min.css | 5 + js/fullcalendar/sched/scheduler.min.js | 9 + prgr/plenarias.html | 3 +- programa.php | 2 +- sidebar.php | 29 +- 144 files changed, 33117 insertions(+), 8 deletions(-) create mode 100644 calendario.php create mode 100644 js/calprog.js create mode 100644 js/fullcalendar/CHANGELOG.txt create mode 100644 js/fullcalendar/CONTRIBUTING.txt create mode 100644 js/fullcalendar/LICENSE.txt create mode 100644 js/fullcalendar/demos/agenda-views.html create mode 100644 js/fullcalendar/demos/background-events.html create mode 100644 js/fullcalendar/demos/basic-views.html create mode 100644 js/fullcalendar/demos/default.html create mode 100644 js/fullcalendar/demos/external-dragging.html create mode 100644 js/fullcalendar/demos/gcal.html create mode 100644 js/fullcalendar/demos/js/theme-chooser.js create mode 100644 js/fullcalendar/demos/json.html create mode 100644 js/fullcalendar/demos/json/events.json create mode 100644 js/fullcalendar/demos/list-views.html create mode 100644 js/fullcalendar/demos/locales.html create mode 100644 js/fullcalendar/demos/php/get-events.php create mode 100644 js/fullcalendar/demos/php/get-timezones.php create mode 100644 js/fullcalendar/demos/php/utils.php create mode 100644 js/fullcalendar/demos/selectable.html create mode 100644 js/fullcalendar/demos/themes.html create mode 100644 js/fullcalendar/demos/timezones.html create mode 100644 js/fullcalendar/demos/week-numbers.html create mode 100644 js/fullcalendar/fullcalendar.css create mode 100644 js/fullcalendar/fullcalendar.js create mode 100644 js/fullcalendar/fullcalendar.min.css create mode 100644 js/fullcalendar/fullcalendar.min.js create mode 100644 js/fullcalendar/fullcalendar.print.css create mode 100644 js/fullcalendar/fullcalendar.print.min.css create mode 100644 js/fullcalendar/fullcalsched.zip create mode 100644 js/fullcalendar/gcal.js create mode 100644 js/fullcalendar/gcal.min.js create mode 100644 js/fullcalendar/lib/jquery-ui.min.js create mode 100644 js/fullcalendar/lib/jquery.min.js create mode 100644 js/fullcalendar/lib/moment.min.js create mode 100644 js/fullcalendar/locale-all.js create mode 100644 js/fullcalendar/locale/af.js create mode 100644 js/fullcalendar/locale/ar-dz.js create mode 100644 js/fullcalendar/locale/ar-kw.js create mode 100644 js/fullcalendar/locale/ar-ly.js create mode 100644 js/fullcalendar/locale/ar-ma.js create mode 100644 js/fullcalendar/locale/ar-sa.js create mode 100644 js/fullcalendar/locale/ar-tn.js create mode 100644 js/fullcalendar/locale/ar.js create mode 100644 js/fullcalendar/locale/bg.js create mode 100644 js/fullcalendar/locale/ca.js create mode 100644 js/fullcalendar/locale/cs.js create mode 100644 js/fullcalendar/locale/da.js create mode 100644 js/fullcalendar/locale/de-at.js create mode 100644 js/fullcalendar/locale/de-ch.js create mode 100644 js/fullcalendar/locale/de.js create mode 100644 js/fullcalendar/locale/el.js create mode 100644 js/fullcalendar/locale/en-au.js create mode 100644 js/fullcalendar/locale/en-ca.js create mode 100644 js/fullcalendar/locale/en-gb.js create mode 100644 js/fullcalendar/locale/en-ie.js create mode 100644 js/fullcalendar/locale/en-nz.js create mode 100644 js/fullcalendar/locale/es-do.js create mode 100644 js/fullcalendar/locale/es-us.js create mode 100644 js/fullcalendar/locale/es.js create mode 100644 js/fullcalendar/locale/et.js create mode 100644 js/fullcalendar/locale/eu.js create mode 100644 js/fullcalendar/locale/fa.js create mode 100644 js/fullcalendar/locale/fi.js create mode 100644 js/fullcalendar/locale/fr-ca.js create mode 100644 js/fullcalendar/locale/fr-ch.js create mode 100644 js/fullcalendar/locale/fr.js create mode 100644 js/fullcalendar/locale/gl.js create mode 100644 js/fullcalendar/locale/he.js create mode 100644 js/fullcalendar/locale/hi.js create mode 100644 js/fullcalendar/locale/hr.js create mode 100644 js/fullcalendar/locale/hu.js create mode 100644 js/fullcalendar/locale/id.js create mode 100644 js/fullcalendar/locale/is.js create mode 100644 js/fullcalendar/locale/it.js create mode 100644 js/fullcalendar/locale/ja.js create mode 100644 js/fullcalendar/locale/kk.js create mode 100644 js/fullcalendar/locale/ko.js create mode 100644 js/fullcalendar/locale/lb.js create mode 100644 js/fullcalendar/locale/lt.js create mode 100644 js/fullcalendar/locale/lv.js create mode 100644 js/fullcalendar/locale/mk.js create mode 100644 js/fullcalendar/locale/ms-my.js create mode 100644 js/fullcalendar/locale/ms.js create mode 100644 js/fullcalendar/locale/nb.js create mode 100644 js/fullcalendar/locale/nl-be.js create mode 100644 js/fullcalendar/locale/nl.js create mode 100644 js/fullcalendar/locale/nn.js create mode 100644 js/fullcalendar/locale/pl.js create mode 100644 js/fullcalendar/locale/pt-br.js create mode 100644 js/fullcalendar/locale/pt.js create mode 100644 js/fullcalendar/locale/ro.js create mode 100644 js/fullcalendar/locale/ru.js create mode 100644 js/fullcalendar/locale/sk.js create mode 100644 js/fullcalendar/locale/sl.js create mode 100644 js/fullcalendar/locale/sq.js create mode 100644 js/fullcalendar/locale/sr-cyrl.js create mode 100644 js/fullcalendar/locale/sr.js create mode 100644 js/fullcalendar/locale/sv.js create mode 100644 js/fullcalendar/locale/th.js create mode 100644 js/fullcalendar/locale/tr.js create mode 100644 js/fullcalendar/locale/uk.js create mode 100644 js/fullcalendar/locale/vi.js create mode 100644 js/fullcalendar/locale/zh-cn.js create mode 100644 js/fullcalendar/locale/zh-tw.js create mode 100644 js/fullcalendar/sched/CHANGELOG.txt create mode 100644 js/fullcalendar/sched/CONTRIBUTING.txt create mode 100644 js/fullcalendar/sched/LICENSE.txt create mode 100644 js/fullcalendar/sched/demos/background-events.html create mode 100644 js/fullcalendar/sched/demos/column-grouping.html create mode 100644 js/fullcalendar/sched/demos/columns.html create mode 100644 js/fullcalendar/sched/demos/dynamic-add-remove.html create mode 100644 js/fullcalendar/sched/demos/external-dragging.html create mode 100644 js/fullcalendar/sched/demos/gcal.html create mode 100644 js/fullcalendar/sched/demos/grouping.html create mode 100644 js/fullcalendar/sched/demos/js/theme-chooser.js create mode 100644 js/fullcalendar/sched/demos/json.html create mode 100644 js/fullcalendar/sched/demos/json/events.json create mode 100644 js/fullcalendar/sched/demos/json/resources.json create mode 100644 js/fullcalendar/sched/demos/misc-callbacks.html create mode 100644 js/fullcalendar/sched/demos/no-overlap.html create mode 100644 js/fullcalendar/sched/demos/ordering.html create mode 100644 js/fullcalendar/sched/demos/rendering-hooks.html create mode 100644 js/fullcalendar/sched/demos/scale.html create mode 100644 js/fullcalendar/sched/demos/selectable.html create mode 100644 js/fullcalendar/sched/demos/simple.html create mode 100644 js/fullcalendar/sched/demos/themes.html create mode 100644 js/fullcalendar/sched/demos/vertical-resource-view.html create mode 100644 js/fullcalendar/sched/lib/fullcalendar.min.css create mode 100644 js/fullcalendar/sched/lib/fullcalendar.min.js create mode 100644 js/fullcalendar/sched/lib/fullcalendar.print.min.css create mode 100644 js/fullcalendar/sched/lib/gcal.min.js create mode 100644 js/fullcalendar/sched/lib/jquery-ui.min.js create mode 100644 js/fullcalendar/sched/lib/jquery.min.js create mode 100644 js/fullcalendar/sched/lib/moment.min.js create mode 100644 js/fullcalendar/sched/scheduler.css create mode 100644 js/fullcalendar/sched/scheduler.js create mode 100644 js/fullcalendar/sched/scheduler.min.css create mode 100644 js/fullcalendar/sched/scheduler.min.js diff --git a/calendario.php b/calendario.php new file mode 100644 index 0000000..e479a23 --- /dev/null +++ b/calendario.php @@ -0,0 +1,25 @@ + + + + + + + + + + +
+
+
+

Calendario

+
+ +
+ +
+
+ + + + + diff --git a/cronograma.pdf b/cronograma.pdf index 04250241ded15019aed0d86dca06204bb4bbf09d..3d922350775f399e766af5bd7f92592ed0047fd1 100644 GIT binary patch delta 16680 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 KNJQjBq5m&)n)34i delta 16689 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 diff --git a/header.php b/header.php index 5225c50..a914f40 100644 --- a/header.php +++ b/header.php @@ -17,8 +17,7 @@ - - + diff --git a/js/calprog.js b/js/calprog.js new file mode 100644 index 0000000..4e8e1a3 --- /dev/null +++ b/js/calprog.js @@ -0,0 +1,33 @@ +$(document).ready(function(){ + + $("#calendario").fullCalendar({ + locale: 'es', + schedulerLicenseKey: 'CC-Attribution-NonCommercial-NoDerivatives', + defaultDate: '2017-12-21', + defaultView: 'agendaWeek', + visibleRange:{ + start: '2017-12-21', + end: '2017-12-23' + }, + allDaySlot: false, + minTime: "08:00:00", + maxTime: "22:00:00", + resources: [ + { id:"s1", title: "Salon 1"}, + { id:"s2", title: "Salon 2"}, + + + ], + + events: [ + { + id:"1", + resourceid: 's1', + title: "Charla Pedorra", + start: "2017-12-21T12:00", + end: "2017-12-21T13:00" + } + ] + + }); +}); diff --git a/js/fullcalendar/CHANGELOG.txt b/js/fullcalendar/CHANGELOG.txt new file mode 100644 index 0000000..d638867 --- /dev/null +++ b/js/fullcalendar/CHANGELOG.txt @@ -0,0 +1,1248 @@ + +v3.6.2 (2017-10-23) +------------------- + +Bugfixes: +- Google Calendar event sources not calling `loading` callback (#3884) +- `eventDataTransform` w/ eventConstraint shouldn't be called during event resizing (#3859) +- `navLinks` would go to the previously navigated date (#3869) +- `nowIndicator` arrow would repeatedly render (#3872) +- fc-content-skeleton DOM element would repeatedly render on navigation in agenda view + + +v3.6.1 (2017-10-11) +------------------- + +Bugfixes: +- JSON feed event sources always requesting current page (#3865) +- multi-day events appearing multiple times in more+ popover (#3856) + + +v3.6.0 (2017-10-10) +------------------- + +Features: +- `agendaEventMinHeight` for guaranteeing height (#961, #3788) thx @Stafie +- `columnHeader` can be set to `false` to hide headings (#3438, #3787) thx @caseyjhol +- export all View classes (#2851, #3831) +- `updateEvent`, update complex attributes (#2864) +- Albanian locale (#3847) thx @alensaqe + +Bugfixes: +- objects used as non-standard Event properties ignored by `updateEvent` (#3839) +- listDay error if event goes over period (#3843) +- `validDays` with `hiddenDays`, js error when no days active (#3846) +- json feed Event Source object no longer has `url` property (#3845) +- `updateEvent`, allDay to timed, when no end, wrong end date (#3144) +- `removeEvents` by `_id` stopped working (#3828) +- correct `this` context in FuncEventSource (#3848) thx @declspec +- js event not received in unselect callback when selecting another cell (#3832) + +Incompatibilities: +- The `viewRender` callback might now be fired AFTER events have been rendered + to the DOM. However, the eventRender/eventAfterRender/eventAfterAllRender callbacks + will always be fired after `viewRender`, just as before. +- The internal `Grid` class (accessed via `$.fullCalendar.Grid`) has been removed. + For monkeypatching, use DayGrid/TimeGrid directly. + + +v3.5.1 (2017-09-06) +------------------- + +- fixed loading trigger not firing (#3810) +- fixed overaggressively fetching events, on option changes (#3820) +- fixed event object `date` property being discarded (tho still parsed) (#3819) +- fixed event object `_id` property being discarded (#3811) + + +v3.5.0 (2017-08-30) +------------------- + +Features: +- Bootstrap 3 theme support (#2334, #3566) + - via `themeSystem: 'bootstrap3'` (the `theme` option is deprecated) + - new `bootstrapGlyphicons` option + - jQuery UI "Cupertino" theme no longer included in zip archive + - improved theme switcher on demo page (#1436) + (big thanks to @joankaradimov) +- 25% event rendering performance improvement across the board (#2524) +- console message for unknown method/calendar (#3253) +- Serbian cyrilic/latin (#3656) +- available via Packagist (#2999, #3617) + +Bugfixes: +- slot time label invisible when minTime starts out of alignment (#2786) +- bug with inverse-background event rendering when out of range (#3652) +- wrongly disabled prev/next when current date outside of validRange (#3686, #3651) +- updateEvent, error when changing allDay from false to true (#3518) +- updateEvent doesn't support ID changes (#2928) +- Promise then method doesn't forward result (#3744) +- Korean typo (#3693) +- fixed switching from any view to listview, eventAfterRender isn't called (#3751) + +Incompatibilities: +- Event Objects obtained from clientEvents or various callbacks are no longer + references to internally used objects. Rather, they are static object copies. +- `clientEvents` method no longer returns events in same order as received. + Do not depend on order. + + +v3.4.0 (2017-04-27) +------------------- + +- composer.json for Composer (PHP package manager) (#3617) +- fix toISOString for locales with non-trivial postformatting (#3619) +- fix for nested inverse-background events (#3609) +- Estonian locale (#3600) +- fixed Latvian localization (#3525) +- internal refactor of async systems + + +v3.3.1 (2017-04-01) +------------------- + +Bugfixes: +- stale calendar title when navigate away from then back to the a view (#3604) +- js error when gotoDate immediately after calendar initialization (#3598) +- agenda view scrollbars causes misalignment in jquery 3.2.1 (#3612) +- navigation bug when trying to navigate to a day of another week (#3610) +- dateIncrement not working when duration and dateIncrement have different units + + +v3.3.0 (2017-03-23) +------------------- + +Features: +- `visibleRange` - complete control over view's date range (#2847, #3105, #3245) +- `validRange` - restrict date range (#429) +- `changeView` - pass in a date or visibleRange as second param (#3366) +- `dateIncrement` - customize prev/next jump (#2710) +- `dateAlignment` - custom view alignment, like start-of-week (#3113) +- `dayCount` - force a fixed number-of-days, even with hiddenDays (#2753) +- `showNonCurrentDates` - option to hide day cells for prev/next months (#437) +- can define a defaultView with a duration/visibleRange/dayCount with needing + to create a custom view in the `views` object. Known as a "Generic View". + +Behavior Changes: +- when custom view is specified with duration `{days:7}`, + it will no longer align with the start of the week. (#2847) +- when `gotoDate` is called on a custom view with a duration of multiple days, + the view will always shift to begin with the given date. (#3515) + +Bugfixes: +- event rendering when excessive `minTime`/`maxTime` (#2530) +- event dragging not shown when excessive `minTime`/`maxTime` (#3055) +- excessive `minTime`/`maxTime` not reflected in event fetching (#3514) + - when minTime is negative, or maxTime beyond 24 hours, when event data is requested + via a function or a feed, the given data params will have time parts. +- external event dragging via touchpunch broken (#3544) +- can't make an immediate new selection after existing selection, with mouse. + introduced in v3.2.0 (#3558) + + +v3.2.0 (2017-02-14) +------------------- + +Features: +- `selectMinDistance`, threshold before a mouse selection begins (#2428) + +Bugfixes: +- iOS 10, unwanted scrolling while dragging events/selection (#3403) +- dayClick triggered when swiping on touch devices (#3332) +- dayClick not functioning on Firefix mobile (#3450) +- title computed incorrectly for views with no weekends (#2884) +- unwanted scrollbars in month-view when non-integer width (#3453, #3444) +- incorrect date formatting for locales with non-standlone month/day names (#3478) +- date formatting, incorrect omission of trailing period for certain locales (#2504, #3486) +- formatRange should collapse same week numbers (#3467) +- Taiwanese locale updated (#3426) +- Finnish noEventsMessage updated (#3476) +- Croatian (hr) buttonText is blank (#3270) +- JSON feed PHP example, date range math bug (#3485) + + +v3.1.0 (2016-12-05) +------------------- + +- experimental support for implicitly batched ("debounced") event rendering (#2938) + - `eventRenderWait` (off by default) +- new `footer` option, similar to header toolbar (#654, #3299) +- event rendering batch methods (#3351): + - `renderEvents` + - `updateEvents` +- more granular touch settings (#3377): + - `eventLongPressDelay` + - `selectLongPressDelay` +- eventDestroy not called when removing the popover (#3416, #3419) +- print stylesheet and gcal extension now offered as minified (#3415) +- fc-today in agenda header cells (#3361, #3365) +- height-related options in tandem with other options (#3327, #3384) +- Kazakh locale (#3394) +- Afrikaans locale (#3390) +- internal refactor related to timing of rendering and firing handlers. + calls to rerender the current date-range and events from within handlers + might not execute immediately. instead, will execute after handler finishes. + + +v3.0.1 (2016-09-26) +------------------- + +Bugfixes: +- list view rendering event times incorrectly (#3334) +- list view rendering events/days out of order (#3347) +- events with no title rendering as "undefined" +- add .fc scope to table print styles (#3343) +- "display no events" text fix for German (#3354) + + +v3.0.0 (2016-09-04) +------------------- + +Features: +- List View (#560) + - new views: `listDay`, `listWeek`, `listMonth`, `listYear`, and simply `list` + - `listDayFormat` + - `listDayAltFormat` + - `noEventsMessage` +- Clickable day/week numbers for easier navigation (#424) + - `navLinks` + - `navLinkDayClick` + - `navLinkWeekClick` +- Programmatically allow/disallow user interactions: + - `eventAllow` (#2740) + - `selectAllow` (#2511) +- Option to display week numbers in cells (#3024) + - `weekNumbersWithinDays` (set to `true` to activate) +- When week calc is ISO, default first day-of-week to Monday (#3255) +- Macedonian locale (#2739) +- Malay locale + +Breaking Changes: +- IE8 support dropped +- jQuery: minimum support raised to v2.0.0 +- MomentJS: minimum support raised to v2.9.0 +- `lang` option renamed to `locale` +- dist files have been renamed to be more consistent with MomentJS: + - `lang/` -> `locale/` + - `lang-all.js` -> `locale-all.js` +- behavior of moment methods no longer affected by ambiguousness: + - `isSame` + - `isBefore` + - `isAfter` +- View-Option-Hashes no longer supported (deprecated in 2.2.4) +- removed `weekMode` setting +- removed `axisFormat` setting +- DOM structure of month/basic-view day cell numbers changed + +Bugfixes: +- `$.fullCalendar.version` incorrect (#3292) + +Build System: +- using gulp instead of grunt (faster) +- using npm internally for dependencies instead of bower +- changed repo directory structure + + +v2.9.1 (2016-07-31) +------------------- + +- multiple definitions for businessHours (#2686) +- businessHours for single day doesn't display weekends (#2944) +- height/contentHeight can accept a function or 'parent' for dynamic value (#3271) +- fix +more popover clipped by overflow (#3232) +- fix +more popover positioned incorrectly when scrolled (#3137) +- Norwegian Nynorsk translation (#3246) +- fix isAnimating JS error (#3285) + + +v2.9.0 (2016-07-10) +------------------- + +- Setters for (almost) all options (#564). + See [docs](http://fullcalendar.io/docs/utilities/dynamic_options/) for more info. +- Travis CI improvements (#3266) + + +v2.8.0 (2016-06-19) +------------------- + +- getEventSources method (#3103, #2433) +- getEventSourceById method (#3223) +- refetchEventSources method (#3103, #1328, #254) +- removeEventSources method (#3165, #948) +- prevent flicker when refetchEvents is called (#3123, #2558) +- fix for removing event sources that share same URL (#3209) +- jQuery 3 support (#3197, #3124) +- Travis CI integration (#3218) +- EditorConfig for promoting consistent code style (#141) +- use en dash when formatting ranges (#3077) +- height:auto always shows scrollbars in month view on FF (#3202) +- new languages: + - Basque (#2992) + - Galician (#194) + - Luxembourgish (#2979) + + +v2.7.3 (2016-06-02) +------------------- + +internal enhancements that plugins can benefit from: +- EventEmitter not correctly working with stopListeningTo +- normalizeEvent hook for manipulating event data + + +v2.7.2 (2016-05-20) +------------------- + +- fixed desktops/laptops with touch support not accepting mouse events for + dayClick/dragging/resizing (#3154, #3149) +- fixed dayClick incorrectly triggered on touch scroll (#3152) +- fixed touch event dragging wrongfully beginning upon scrolling document (#3160) +- fixed minified JS still contained comments +- UI change: mouse users must hover over an event to reveal its resizers + + +v2.7.1 (2016-05-01) +------------------- + +- dayClick not firing on touch devices (#3138) +- icons for prev/next not working in MS Edge (#2852) +- fix bad languages troubles with firewalls (#3133, #3132) +- update all dev dependencies (#3145, #3010, #2901, #251) +- git-ignore npm debug logs (#3011) +- misc automated test updates (#3139, #3147) +- Google Calendar htmlLink not always defined (#2844) + + +v2.7.0 (2016-04-23) +------------------- + +touch device support (#994): + - smoother scrolling + - interactions initiated via "long press": + - event drag-n-drop + - event resize + - time-range selecting + - `longPressDelay` + + +v2.6.1 (2016-02-17) +------------------- + +- make `nowIndicator` positioning refresh on window resize + + +v2.6.0 (2016-01-07) +------------------- + +- current time indicator (#414) +- bundled with most recent version of moment (2.11.0) +- UMD wrapper around lang files now handles commonjs (#2918) +- fix bug where external event dragging would not respect eventOverlap +- fix bug where external event dropping would not render the whole-day highlight + + +v2.5.0 (2015-11-30) +------------------- + +- internal timezone refactor. fixes #2396, #2900, #2945, #2711 +- internal "grid" system refactor. improved API for plugins. + + +v2.4.0 (2015-08-16) +------------------- + +- add new buttons to the header via `customButtons` ([225]) +- control stacking order of events via `eventOrder` ([364]) +- control frequency of slot text via `slotLabelInterval` ([946]) +- `displayEventTime` ([1904]) +- `on` and `off` methods ([1910]) +- renamed `axisFormat` to `slotLabelFormat` + +[225]: https://code.google.com/p/fullcalendar/issues/detail?id=225 +[364]: https://code.google.com/p/fullcalendar/issues/detail?id=364 +[946]: https://code.google.com/p/fullcalendar/issues/detail?id=946 +[1904]: https://code.google.com/p/fullcalendar/issues/detail?id=1904 +[1910]: https://code.google.com/p/fullcalendar/issues/detail?id=1910 + + +v2.3.2 (2015-06-14) +------------------- + +- minor code adjustment in preparation for plugins + + +v2.3.1 (2015-03-08) +------------------- + +- Fix week view column title for en-gb ([PR220]) +- Publish to NPM ([2447]) +- Detangle bower from npm package ([PR179]) + +[PR220]: https://github.com/arshaw/fullcalendar/pull/220 +[2447]: https://code.google.com/p/fullcalendar/issues/detail?id=2447 +[PR179]: https://github.com/arshaw/fullcalendar/pull/179 + + +v2.3.0 (2015-02-21) +------------------- + +- internal refactoring in preparation for other views +- businessHours now renders on whole-days in addition to timed areas +- events in "more" popover not sorted by time ([2385]) +- avoid using moment's deprecated zone method ([2443]) +- destroying the calendar sometimes causes all window resize handlers to be unbound ([2432]) +- multiple calendars on one page, can't accept external elements after navigating ([2433]) +- accept external events from jqui sortable ([1698]) +- external jqui drop processed before reverting ([1661]) +- IE8 fix: month view renders incorrectly ([2428]) +- IE8 fix: eventLimit:true wouldn't activate "more" link ([2330]) +- IE8 fix: dragging an event with an href +- IE8 fix: invisible element while dragging agenda view events +- IE8 fix: erratic external element dragging + +[2385]: https://code.google.com/p/fullcalendar/issues/detail?id=2385 +[2443]: https://code.google.com/p/fullcalendar/issues/detail?id=2443 +[2432]: https://code.google.com/p/fullcalendar/issues/detail?id=2432 +[2433]: https://code.google.com/p/fullcalendar/issues/detail?id=2433 +[1698]: https://code.google.com/p/fullcalendar/issues/detail?id=1698 +[1661]: https://code.google.com/p/fullcalendar/issues/detail?id=1661 +[2428]: https://code.google.com/p/fullcalendar/issues/detail?id=2428 +[2330]: https://code.google.com/p/fullcalendar/issues/detail?id=2330 + + +v2.2.7 (2015-02-10) +------------------- + +- view.title wasn't defined in viewRender callback ([2407]) +- FullCalendar versions >= 2.2.5 brokenness with Moment versions <= 2.8.3 ([2417]) +- Support Bokmal Norwegian language specifically ([2427]) + +[2407]: https://code.google.com/p/fullcalendar/issues/detail?id=2407 +[2417]: https://code.google.com/p/fullcalendar/issues/detail?id=2417 +[2427]: https://code.google.com/p/fullcalendar/issues/detail?id=2427 + + +v2.2.6 (2015-01-11) +------------------- + +- Compatibility with Moment v2.9. Was breaking GCal plugin ([2408]) +- View object's `title` property mistakenly omitted ([2407]) +- Single-day views with hiddens days could cause prev/next misbehavior ([2406]) +- Don't let the current date ever be a hidden day (solves [2395]) +- Hebrew locale ([2157]) + +[2408]: https://code.google.com/p/fullcalendar/issues/detail?id=2408 +[2407]: https://code.google.com/p/fullcalendar/issues/detail?id=2407 +[2406]: https://code.google.com/p/fullcalendar/issues/detail?id=2406 +[2395]: https://code.google.com/p/fullcalendar/issues/detail?id=2395 +[2157]: https://code.google.com/p/fullcalendar/issues/detail?id=2157 + + +v2.2.5 (2014-12-30) +------------------- + +- `buttonText` specified for custom views via the `views` option + - bugfix: wrong default value, couldn't override default + - feature: default value taken from locale + + +v2.2.4 (2014-12-29) +------------------- + +- Arbitrary durations for basic/agenda views with the `views` option ([692]) +- Specify view-specific options using the `views` option. fixes [2283] +- Deprecate view-option-hashes +- Formalize and expose View API ([1055]) +- updateEvent method, more intuitive behavior. fixes [2194] + +[692]: https://code.google.com/p/fullcalendar/issues/detail?id=692 +[2283]: https://code.google.com/p/fullcalendar/issues/detail?id=2283 +[1055]: https://code.google.com/p/fullcalendar/issues/detail?id=1055 +[2194]: https://code.google.com/p/fullcalendar/issues/detail?id=2194 + + +v2.2.3 (2014-11-26) +------------------- + +- removeEventSource with Google Calendar object source, would not remove ([2368]) +- Events with invalid end dates are still accepted and rendered ([2350], [2237], [2296]) +- Bug when rendering business hours and navigating away from original view ([2365]) +- Links to Google Calendar events will use current timezone ([2122]) +- Google Calendar plugin works with timezone names that have spaces +- Google Calendar plugin accepts person email addresses as calendar IDs +- Internally use numeric sort instead of alphanumeric sort ([2370]) + +[2368]: https://code.google.com/p/fullcalendar/issues/detail?id=2368 +[2350]: https://code.google.com/p/fullcalendar/issues/detail?id=2350 +[2237]: https://code.google.com/p/fullcalendar/issues/detail?id=2237 +[2296]: https://code.google.com/p/fullcalendar/issues/detail?id=2296 +[2365]: https://code.google.com/p/fullcalendar/issues/detail?id=2365 +[2122]: https://code.google.com/p/fullcalendar/issues/detail?id=2122 +[2370]: https://code.google.com/p/fullcalendar/issues/detail?id=2370 + + +v2.2.2 (2014-11-19) +------------------- + +- Fixes to Google Calendar API V3 code + - wouldn't recognize a lone-string Google Calendar ID if periods before the @ symbol + - removeEventSource wouldn't work when given a Google Calendar ID + + +v2.2.1 (2014-11-19) +------------------- + +- Migrate Google Calendar plugin to use V3 of the API ([1526]) + +[1526]: https://code.google.com/p/fullcalendar/issues/detail?id=1526 + + +v2.2.0 (2014-11-14) +------------------- + +- Background events. Event object's `rendering` property ([144], [1286]) +- `businessHours` option ([144]) +- Controlling where events can be dragged/resized and selections can go ([396], [1286], [2253]) + - `eventOverlap`, `selectOverlap`, and similar + - `eventConstraint`, `selectConstraint`, and similar +- Improvements to dragging and dropping external events ([2004]) + - Associating with real event data. used with `eventReceive` + - Associating a `duration` +- Performance boost for moment creation + - Be aware, FullCalendar-specific methods now attached directly to global moment.fn + - Helps with [issue 2259][2259] +- Reintroduced forgotten `dropAccept` option ([2312]) + +[144]: https://code.google.com/p/fullcalendar/issues/detail?id=144 +[396]: https://code.google.com/p/fullcalendar/issues/detail?id=396 +[1286]: https://code.google.com/p/fullcalendar/issues/detail?id=1286 +[2004]: https://code.google.com/p/fullcalendar/issues/detail?id=2004 +[2253]: https://code.google.com/p/fullcalendar/issues/detail?id=2253 +[2259]: https://code.google.com/p/fullcalendar/issues/detail?id=2259 +[2312]: https://code.google.com/p/fullcalendar/issues/detail?id=2312 + + +v2.1.1 (2014-08-29) +------------------- + +- removeEventSource not working with array ([2203]) +- mouseout not triggered after mouseover+updateEvent ([829]) +- agenda event's render with no href, not clickable ([2263]) + +[2203]: https://code.google.com/p/fullcalendar/issues/detail?id=2203 +[829]: https://code.google.com/p/fullcalendar/issues/detail?id=829 +[2263]: https://code.google.com/p/fullcalendar/issues/detail?id=2263 + + +v2.1.0 (2014-08-25) +------------------- + +Large code refactor with better OOP, better code reuse, and more comments. +**No more reliance on jQuery UI** for event dragging, resizing, or anything else. + +Significant changes to HTML/CSS skeleton: +- Leverages tables for liquid rendering of days and events. No costly manual repositioning ([809]) +- **Backwards-incompatibilities**: + - **Many classNames have changed. Custom CSS will likely need to be adjusted.** + - IE7 definitely not supported anymore + - In `eventRender` callback, `element` will not be attached to DOM yet + - Events are styled to be one line by default ([1992]). Can be undone through custom CSS, + but not recommended (might get gaps [like this][111] in certain situations). + +A "more..." link when there are too many events on a day ([304]). Works with month and basic views +as well as the all-day section of the agenda views. New options: +- `eventLimit`. a number or `true` +- `eventLimitClick`. the `"popover`" value will reveal all events in a raised panel (the default) +- `eventLimitText` +- `dayPopoverFormat` + +Changes related to height and scrollbars: +- `aspectRatio`/`height`/`contentHeight` values will be honored *no matter what* + - If too many events causing too much vertical space, scrollbars will be used ([728]). + This is default behavior for month view (**backwards-incompatibility**) + - If too few slots in agenda view, view will stretch to be the correct height ([2196]) +- `'auto'` value for `height`/`contentHeight` options. If content is too tall, the view will + vertically stretch to accomodate and no scrollbars will be used ([521]). +- Tall weeks in month view will borrow height from other weeks ([243]) +- Automatically scroll the view then dragging/resizing an event ([1025], [2078]) +- New `fixedWeekCount` option to determines the number of weeks in month view + - Supersedes `weekMode` (**deprecated**). Instead, use a combination of `fixedWeekCount` and + one of the height options, possibly with an `'auto'` value + +Much nicer, glitch-free rendering of calendar *for printers* ([35]). Things you might not expect: +- Buttons will become hidden +- Agenda views display a flat list of events where the time slots would be + +Other issues resolved along the way: +- Space on right side of agenda events configurable through CSS ([204]) +- Problem with window resize ([259]) +- Events sorting stays consistent across weeks ([510]) +- Agenda's columns misaligned on wide screens ([511]) +- Run `selectHelper` through `eventRender` callbacks ([629]) +- Keyboard access, tabbing ([637]) +- Run resizing events through `eventRender` ([714]) +- Resize an event to a different day in agenda views ([736]) +- Allow selection across days in agenda views ([778]) +- Mouseenter delegated event not working on event elements ([936]) +- Agenda event dragging, snapping to different columns is erratic ([1101]) +- Android browser cuts off Day view at 8 PM with no scroll bar ([1203]) +- Don't fire `eventMouseover`/`eventMouseout` while dragging/resizing ([1297]) +- Customize the resize handle text ("=") ([1326]) +- If agenda event is too short, don't overwrite `.fc-event-time` ([1700]) +- Zooming calendar causes events to misalign ([1996]) +- Event destroy callback on event removal ([2017]) +- Agenda views, when RTL, should have axis on right ([2132]) +- Make header buttons more accessibile ([2151]) +- daySelectionMousedown should interpret OSX ctrl+click as a right mouse click ([2169]) +- Best way to display time text on multi-day events *with times* ([2172]) +- Eliminate table use for header layout ([2186]) +- Event delegation used for event-related callbacks (like `eventClick`). Speedier. + +[35]: https://code.google.com/p/fullcalendar/issues/detail?id=35 +[204]: https://code.google.com/p/fullcalendar/issues/detail?id=204 +[243]: https://code.google.com/p/fullcalendar/issues/detail?id=243 +[259]: https://code.google.com/p/fullcalendar/issues/detail?id=259 +[304]: https://code.google.com/p/fullcalendar/issues/detail?id=304 +[510]: https://code.google.com/p/fullcalendar/issues/detail?id=510 +[511]: https://code.google.com/p/fullcalendar/issues/detail?id=511 +[521]: https://code.google.com/p/fullcalendar/issues/detail?id=521 +[629]: https://code.google.com/p/fullcalendar/issues/detail?id=629 +[637]: https://code.google.com/p/fullcalendar/issues/detail?id=637 +[714]: https://code.google.com/p/fullcalendar/issues/detail?id=714 +[728]: https://code.google.com/p/fullcalendar/issues/detail?id=728 +[736]: https://code.google.com/p/fullcalendar/issues/detail?id=736 +[778]: https://code.google.com/p/fullcalendar/issues/detail?id=778 +[809]: https://code.google.com/p/fullcalendar/issues/detail?id=809 +[936]: https://code.google.com/p/fullcalendar/issues/detail?id=936 +[1025]: https://code.google.com/p/fullcalendar/issues/detail?id=1025 +[1101]: https://code.google.com/p/fullcalendar/issues/detail?id=1101 +[1203]: https://code.google.com/p/fullcalendar/issues/detail?id=1203 +[1297]: https://code.google.com/p/fullcalendar/issues/detail?id=1297 +[1326]: https://code.google.com/p/fullcalendar/issues/detail?id=1326 +[1700]: https://code.google.com/p/fullcalendar/issues/detail?id=1700 +[1992]: https://code.google.com/p/fullcalendar/issues/detail?id=1992 +[1996]: https://code.google.com/p/fullcalendar/issues/detail?id=1996 +[2017]: https://code.google.com/p/fullcalendar/issues/detail?id=2017 +[2078]: https://code.google.com/p/fullcalendar/issues/detail?id=2078 +[2132]: https://code.google.com/p/fullcalendar/issues/detail?id=2132 +[2151]: https://code.google.com/p/fullcalendar/issues/detail?id=2151 +[2169]: https://code.google.com/p/fullcalendar/issues/detail?id=2169 +[2172]: https://code.google.com/p/fullcalendar/issues/detail?id=2172 +[2186]: https://code.google.com/p/fullcalendar/issues/detail?id=2186 +[2196]: https://code.google.com/p/fullcalendar/issues/detail?id=2196 +[111]: https://code.google.com/p/fullcalendar/issues/detail?id=111 + + +v2.0.3 (2014-08-15) +------------------- + +- moment-2.8.1 compatibility ([2221]) +- relative path in bower.json ([PR 117]) +- upgraded jquery-ui and misc dev dependencies + +[2221]: https://code.google.com/p/fullcalendar/issues/detail?id=2221 +[PR 117]: https://github.com/arshaw/fullcalendar/pull/177 + + +v2.0.2 (2014-06-24) +------------------- + +- bug with persisting addEventSource calls ([2191]) +- bug with persisting removeEvents calls with an array source ([2187]) +- bug with removeEvents method when called with 0 removes all events ([2082]) + +[2191]: https://code.google.com/p/fullcalendar/issues/detail?id=2191 +[2187]: https://code.google.com/p/fullcalendar/issues/detail?id=2187 +[2082]: https://code.google.com/p/fullcalendar/issues/detail?id=2082 + + +v2.0.1 (2014-06-15) +------------------- + +- `delta` parameters reintroduced in `eventDrop` and `eventResize` handlers ([2156]) + - **Note**: this changes the argument order for `revertFunc` +- wrongfully triggering a windowResize when resizing an agenda view event ([1116]) +- `this` values in event drag-n-drop/resize handlers consistently the DOM node ([1177]) +- `displayEventEnd` - v2 workaround to force display of an end time ([2090]) +- don't modify passed-in eventSource items ([954]) +- destroy method now removes fc-ltr class ([2033]) +- weeks of last/next month still visible when weekends are hidden ([2095]) +- fixed memory leak when destroying calendar with selectable/droppable ([2137]) +- Icelandic language ([2180]) +- Bahasa Indonesia language ([PR 172]) + +[1116]: https://code.google.com/p/fullcalendar/issues/detail?id=1116 +[1177]: https://code.google.com/p/fullcalendar/issues/detail?id=1177 +[2090]: https://code.google.com/p/fullcalendar/issues/detail?id=2090 +[954]: https://code.google.com/p/fullcalendar/issues/detail?id=954 +[2033]: https://code.google.com/p/fullcalendar/issues/detail?id=2033 +[2095]: https://code.google.com/p/fullcalendar/issues/detail?id=2095 +[2137]: https://code.google.com/p/fullcalendar/issues/detail?id=2137 +[2156]: https://code.google.com/p/fullcalendar/issues/detail?id=2156 +[2180]: https://code.google.com/p/fullcalendar/issues/detail?id=2180 +[PR 172]: https://github.com/arshaw/fullcalendar/pull/172 + + +v2.0.0 (2014-06-01) +------------------- + +Internationalization support, timezone support, and [MomentJS] integration. Extensive changes, many +of which are backwards incompatible. + +[Full list of changes][Upgrading-to-v2] | [Affected Issues][Date-Milestone] + +An automated testing framework has been set up ([Karma] + [Jasmine]) and tests have been written +which cover about half of FullCalendar's functionality. Special thanks to @incre-d, @vidbina, and +@sirrocco for the help. + +In addition, the main development repo has been repurposed to also include the built distributable +JS/CSS for the project and will serve as the new [Bower] endpoint. + +[MomentJS]: http://momentjs.com/ +[Upgrading-to-v2]: http://arshaw.com/fullcalendar/wiki/Upgrading-to-v2/ +[Date-Milestone]: https://code.google.com/p/fullcalendar/issues/list?can=1&q=milestone%3Ddate +[Karma]: http://karma-runner.github.io/ +[Jasmine]: http://jasmine.github.io/ +[Bower]: http://bower.io/ + + +v1.6.4 (2013-09-01) +------------------- + +- better algorithm for positioning timed agenda events ([1115]) +- `slotEventOverlap` option to tweak timed agenda event overlapping ([218]) +- selection bug when slot height is customized ([1035]) +- supply view argument in `loading` callback ([1018]) +- fixed week number not displaying in agenda views ([1951]) +- fixed fullCalendar not initializing with no options ([1356]) +- NPM's `package.json`, no more warnings or errors ([1762]) +- building the bower component should output `bower.json` instead of `component.json` ([PR 125]) +- use bower internally for fetching new versions of jQuery and jQuery UI + +[1115]: https://code.google.com/p/fullcalendar/issues/detail?id=1115 +[218]: https://code.google.com/p/fullcalendar/issues/detail?id=218 +[1035]: https://code.google.com/p/fullcalendar/issues/detail?id=1035 +[1018]: https://code.google.com/p/fullcalendar/issues/detail?id=1018 +[1951]: https://code.google.com/p/fullcalendar/issues/detail?id=1951 +[1356]: https://code.google.com/p/fullcalendar/issues/detail?id=1356 +[1762]: https://code.google.com/p/fullcalendar/issues/detail?id=1762 +[PR 125]: https://github.com/arshaw/fullcalendar/pull/125 + + +v1.6.3 (2013-08-10) +------------------- + +- `viewRender` callback ([PR 15]) +- `viewDestroy` callback ([PR 15]) +- `eventDestroy` callback ([PR 111]) +- `handleWindowResize` option ([PR 54]) +- `eventStartEditable`/`startEditable` options ([PR 49]) +- `eventDurationEditable`/`durationEditable` options ([PR 49]) +- specify function for `$.ajax` `data` parameter for JSON event sources ([PR 59]) +- fixed bug with agenda event dropping in wrong column ([PR 55]) +- easier event element z-index customization ([PR 58]) +- classNames on past/future days ([PR 88]) +- allow `null`/`undefined` event titles ([PR 84]) +- small optimize for agenda event rendering ([PR 56]) +- deprecated: + - `viewDisplay` + - `disableDragging` + - `disableResizing` +- bundled with latest jQuery (1.10.2) and jQuery UI (1.10.3) + +[PR 15]: https://github.com/arshaw/fullcalendar/pull/15 +[PR 111]: https://github.com/arshaw/fullcalendar/pull/111 +[PR 54]: https://github.com/arshaw/fullcalendar/pull/54 +[PR 49]: https://github.com/arshaw/fullcalendar/pull/49 +[PR 59]: https://github.com/arshaw/fullcalendar/pull/59 +[PR 55]: https://github.com/arshaw/fullcalendar/pull/55 +[PR 58]: https://github.com/arshaw/fullcalendar/pull/58 +[PR 88]: https://github.com/arshaw/fullcalendar/pull/88 +[PR 84]: https://github.com/arshaw/fullcalendar/pull/84 +[PR 56]: https://github.com/arshaw/fullcalendar/pull/56 + + +v1.6.2 (2013-07-18) +------------------- + +- `hiddenDays` option ([686]) +- bugfix: when `eventRender` returns `false`, incorrect stacking of events ([762]) +- bugfix: couldn't change `event.backgroundImage` when calling `updateEvent` (thx @stephenharris) + +[686]: https://code.google.com/p/fullcalendar/issues/detail?id=686 +[762]: https://code.google.com/p/fullcalendar/issues/detail?id=762 + + +v1.6.1 (2013-04-14) +------------------- + +- fixed event inner content overflow bug ([1783]) +- fixed table header className bug [1772] +- removed text-shadow on events (better for general use, thx @tkrotoff) + +[1783]: https://code.google.com/p/fullcalendar/issues/detail?id=1783 +[1772]: https://code.google.com/p/fullcalendar/issues/detail?id=1772 + + +v1.6.0 (2013-03-18) +------------------- + +- visual facelift, with bootstrap-inspired buttons and colors +- simplified HTML/CSS for events and buttons +- `dayRender`, for modifying a day cell ([191], thx @althaus) +- week numbers on side of calendar ([295]) + - `weekNumber` + - `weekNumberCalculation` + - `weekNumberTitle` + - `W` formatting variable +- finer snapping granularity for agenda view events ([495], thx @ms-doodle-com) +- `eventAfterAllRender` ([753], thx @pdrakeweb) +- `eventDataTransform` (thx @joeyspo) +- `data-date` attributes on cells (thx @Jae) +- expose `$.fullCalendar.dateFormatters` +- when clicking fast on buttons, prevent text selection +- bundled with latest jQuery (1.9.1) and jQuery UI (1.10.2) +- Grunt/Lumbar build system for internal development +- build for Bower package manager +- build for jQuery plugin site + +[191]: https://code.google.com/p/fullcalendar/issues/detail?id=191 +[295]: https://code.google.com/p/fullcalendar/issues/detail?id=295 +[495]: https://code.google.com/p/fullcalendar/issues/detail?id=495 +[753]: https://code.google.com/p/fullcalendar/issues/detail?id=753 + + +v1.5.4 (2012-09-05) +------------------- + +- made compatible with jQuery 1.8.* (thx @archaeron) +- bundled with jQuery 1.8.1 and jQuery UI 1.8.23 + + +v1.5.3 (2012-02-06) +------------------- + +- fixed dragging issue with jQuery UI 1.8.16 ([1168]) +- bundled with jQuery 1.7.1 and jQuery UI 1.8.17 + +[1168]: https://code.google.com/p/fullcalendar/issues/detail?id=1168 + + +v1.5.2 (2011-08-21) +------------------- + +- correctly process UTC "Z" ISO8601 date strings ([750]) + +[750]: https://code.google.com/p/fullcalendar/issues/detail?id=750 + + +v1.5.1 (2011-04-09) +------------------- + +- more flexible ISO8601 date parsing ([814]) +- more flexible parsing of UNIX timestamps ([826]) +- FullCalendar now buildable from source on a Mac ([795]) +- FullCalendar QA'd in FF4 ([883]) +- upgraded to jQuery 1.5.2 (which supports IE9) and jQuery UI 1.8.11 + +[814]: https://code.google.com/p/fullcalendar/issues/detail?id=814 +[826]: https://code.google.com/p/fullcalendar/issues/detail?id=826 +[795]: https://code.google.com/p/fullcalendar/issues/detail?id=795 +[883]: https://code.google.com/p/fullcalendar/issues/detail?id=883 + + +v1.5 (2011-03-19) +----------------- + +- slicker default styling for buttons +- reworked a lot of the calendar's HTML and accompanying CSS (solves [327] and [395]) +- more printer-friendly (fullcalendar-print.css) +- fullcalendar now inherits styles from jquery-ui themes differently. + styles for buttons are distinct from styles for calendar cells. + (solves [299]) +- can now color events through FullCalendar options and Event-Object properties ([117]) + THIS IS NOW THE PREFERRED METHOD OF COLORING EVENTS (as opposed to using className and CSS) + - FullCalendar options: + - eventColor (changes both background and border) + - eventBackgroundColor + - eventBorderColor + - eventTextColor + - Event-Object options: + - color (changes both background and border) + - backgroundColor + - borderColor + - textColor +- can now specify an event source as an *object* with a `url` property (json feed) or + an `events` property (function or array) with additional properties that will + be applied to the entire event source: + - color (changes both background and border) + - backgroudColor + - borderColor + - textColor + - className + - editable + - allDayDefault + - ignoreTimezone + - startParam (for a feed) + - endParam (for a feed) + - ANY OF THE JQUERY $.ajax OPTIONS + allows for easily changing from GET to POST and sending additional parameters ([386]) + allows for easily attaching ajax handlers such as `error` ([754]) + allows for turning caching on ([355]) +- Google Calendar feeds are now specified differently: + - specify a simple string of your feed's URL + - specify an *object* with a `url` property of your feed's URL. + you can include any of the new Event-Source options in this object. + - the old `$.fullCalendar.gcalFeed` method still works +- no more IE7 SSL popup ([504]) +- remove `cacheParam` - use json event source `cache` option instead +- latest jquery/jquery-ui + +[327]: https://code.google.com/p/fullcalendar/issues/detail?id=327 +[395]: https://code.google.com/p/fullcalendar/issues/detail?id=395 +[299]: https://code.google.com/p/fullcalendar/issues/detail?id=299 +[117]: https://code.google.com/p/fullcalendar/issues/detail?id=117 +[386]: https://code.google.com/p/fullcalendar/issues/detail?id=386 +[754]: https://code.google.com/p/fullcalendar/issues/detail?id=754 +[355]: https://code.google.com/p/fullcalendar/issues/detail?id=355 +[504]: https://code.google.com/p/fullcalendar/issues/detail?id=504 + + +v1.4.11 (2011-02-22) +-------------------- + +- fixed rerenderEvents bug ([790]) +- fixed bug with faulty dragging of events from all-day slot in agenda views +- bundled with jquery 1.5 and jquery-ui 1.8.9 + +[790]: https://code.google.com/p/fullcalendar/issues/detail?id=790 + + +v1.4.10 (2011-01-02) +-------------------- + +- fixed bug with resizing event to different week in 5-day month view ([740]) +- fixed bug with events not sticking after a removeEvents call ([757]) +- fixed bug with underlying parseTime method, and other uses of parseInt ([688]) + +[740]: https://code.google.com/p/fullcalendar/issues/detail?id=740 +[757]: https://code.google.com/p/fullcalendar/issues/detail?id=757 +[688]: https://code.google.com/p/fullcalendar/issues/detail?id=688 + + +v1.4.9 (2010-11-16) +------------------- + +- new algorithm for vertically stacking events ([111]) +- resizing an event to a different week ([306]) +- bug: some events not rendered with consecutive calls to addEventSource ([679]) + +[111]: https://code.google.com/p/fullcalendar/issues/detail?id=111 +[306]: https://code.google.com/p/fullcalendar/issues/detail?id=306 +[679]: https://code.google.com/p/fullcalendar/issues/detail?id=679 + + +v1.4.8 (2010-10-16) +------------------- + +- ignoreTimezone option (set to `false` to process UTC offsets in ISO8601 dates) +- bugfixes + - event refetching not being called under certain conditions ([417], [554]) + - event refetching being called multiple times under certain conditions ([586], [616]) + - selection cannot be triggered by right mouse button ([558]) + - agenda view left axis sized incorrectly ([465]) + - IE js error when calendar is too narrow ([517]) + - agenda view looks strange when no scrollbars ([235]) + - improved parsing of ISO8601 dates with UTC offsets +- $.fullCalendar.version +- an internal refactor of the code, for easier future development and modularity + +[417]: https://code.google.com/p/fullcalendar/issues/detail?id=417 +[554]: https://code.google.com/p/fullcalendar/issues/detail?id=554 +[586]: https://code.google.com/p/fullcalendar/issues/detail?id=586 +[616]: https://code.google.com/p/fullcalendar/issues/detail?id=616 +[558]: https://code.google.com/p/fullcalendar/issues/detail?id=558 +[465]: https://code.google.com/p/fullcalendar/issues/detail?id=465 +[517]: https://code.google.com/p/fullcalendar/issues/detail?id=517 +[235]: https://code.google.com/p/fullcalendar/issues/detail?id=235 + + +v1.4.7 (2010-07-05) +------------------- + +- "dropping" external objects onto the calendar + - droppable (boolean, to turn on/off) + - dropAccept (to filter which events the calendar will accept) + - drop (trigger) +- selectable options can now be specified with a View Option Hash +- bugfixes + - dragged & reverted events having wrong time text ([406]) + - bug rendering events that have an endtime with seconds, but no hours/minutes ([477]) + - gotoDate date overflow bug ([429]) + - wrong date reported when clicking on edge of last column in agenda views [412] +- support newlines in event titles +- select/unselect callbacks now passes native js event + +[406]: https://code.google.com/p/fullcalendar/issues/detail?id=406 +[477]: https://code.google.com/p/fullcalendar/issues/detail?id=477 +[429]: https://code.google.com/p/fullcalendar/issues/detail?id=429 +[412]: https://code.google.com/p/fullcalendar/issues/detail?id=412 + + +v1.4.6 (2010-05-31) +------------------- + +- "selecting" days or timeslots + - options: selectable, selectHelper, unselectAuto, unselectCancel + - callbacks: select, unselect + - methods: select, unselect +- when dragging an event, the highlighting reflects the duration of the event +- code compressing by Google Closure Compiler +- bundled with jQuery 1.4.2 and jQuery UI 1.8.1 + + +v1.4.5 (2010-02-21) +------------------- + +- lazyFetching option, which can force the calendar to fetch events on every view/date change +- scroll state of agenda views are preserved when switching back to view +- bugfixes + - calling methods on an uninitialized fullcalendar throws error + - IE6/7 bug where an entire view becomes invisible ([320]) + - error when rendering a hidden calendar (in jquery ui tabs for example) in IE ([340]) + - interconnected bugs related to calendar resizing and scrollbars + - when switching views or clicking prev/next, calendar would "blink" ([333]) + - liquid-width calendar's events shifted (depending on initial height of browser) ([341]) + - more robust underlying algorithm for calendar resizing + +[320]: https://code.google.com/p/fullcalendar/issues/detail?id=320 +[340]: https://code.google.com/p/fullcalendar/issues/detail?id=340 +[333]: https://code.google.com/p/fullcalendar/issues/detail?id=333 +[341]: https://code.google.com/p/fullcalendar/issues/detail?id=341 + + +v1.4.4 (2010-02-03) +------------------- + +- optimized event rendering in all views (events render in 1/10 the time) +- gotoDate() does not force the calendar to unnecessarily rerender +- render() method now correctly readjusts height + + +v1.4.3 (2009-12-22) +------------------- + +- added destroy method +- Google Calendar event pages respect currentTimezone +- caching now handled by jQuery's ajax +- protection from setting aspectRatio to zero +- bugfixes + - parseISO8601 and DST caused certain events to display day before + - button positioning problem in IE6 + - ajax event source removed after recently being added, events still displayed + - event not displayed when end is an empty string + - dynamically setting calendar height when no events have been fetched, throws error + + +v1.4.2 (2009-12-02) +------------------- + +- eventAfterRender trigger +- getDate & getView methods +- height & contentHeight options (explicitly sets the pixel height) +- minTime & maxTime options (restricts shown hours in agenda view) +- getters [for all options] and setters [for height, contentHeight, and aspectRatio ONLY! stay tuned..] +- render method now readjusts calendar's size +- bugfixes + - lightbox scripts that use iframes (like fancybox) + - day-of-week classNames were off when firstDay=1 + - guaranteed space on right side of agenda events (even when stacked) + - accepts ISO8601 dates with a space (instead of 'T') + + +v1.4.1 (2009-10-31) +------------------- + +- can exclude weekends with new 'weekends' option +- gcal feed 'currentTimezone' option +- bugfixes + - year/month/date option sometimes wouldn't set correctly (depending on current date) + - daylight savings issue caused agenda views to start at 1am (for BST users) +- cleanup of gcal.js code + + +v1.4 (2009-10-19) +----------------- + +- agendaWeek and agendaDay views +- added some options for agenda views: + - allDaySlot + - allDayText + - firstHour + - slotMinutes + - defaultEventMinutes + - axisFormat +- modified some existing options/triggers to work with agenda views: + - dragOpacity and timeFormat can now accept a "View Hash" (a new concept) + - dayClick now has an allDay parameter + - eventDrop now has an an allDay parameter + (this will affect those who use revertFunc, adjust parameter list) +- added 'prevYear' and 'nextYear' for buttons in header +- minor change for theme users, ui-state-hover not applied to active/inactive buttons +- added event-color-changing example in docs +- better defaults for right-to-left themed button icons + + +v1.3.2 (2009-10-13) +------------------- + +- Bugfixes (please upgrade from 1.3.1!) + - squashed potential infinite loop when addMonths and addDays + is called with an invalid date + - $.fullCalendar.parseDate() now correctly parses IETF format + - when switching views, the 'today' button sticks inactive, fixed +- gotoDate now can accept a single Date argument +- documentation for changes in 1.3.1 and 1.3.2 now on website + + +v1.3.1 (2009-09-30) +------------------- + +- Important Bugfixes (please upgrade from 1.3!) + - When current date was late in the month, for long months, and prev/next buttons + were clicked in month-view, some months would be skipped/repeated + - In certain time zones, daylight savings time would cause certain days + to be misnumbered in month-view +- Subtle change in way week interval is chosen when switching from month to basicWeek/basicDay view +- Added 'allDayDefault' option +- Added 'changeView' and 'render' methods + + +v1.3 (2009-09-21) +----------------- + +- different 'views': month/basicWeek/basicDay +- more flexible 'header' system for buttons +- themable by jQuery UI themes +- resizable events (require jQuery UI resizable plugin) +- rescoped & rewritten CSS, enhanced default look +- cleaner css & rendering techniques for right-to-left +- reworked options & API to support multiple views / be consistent with jQuery UI +- refactoring of entire codebase + - broken into different JS & CSS files, assembled w/ build scripts + - new test suite for new features, uses firebug-lite +- refactored docs +- Options + - + date + - + defaultView + - + aspectRatio + - + disableResizing + - + monthNames (use instead of $.fullCalendar.monthNames) + - + monthNamesShort (use instead of $.fullCalendar.monthAbbrevs) + - + dayNames (use instead of $.fullCalendar.dayNames) + - + dayNamesShort (use instead of $.fullCalendar.dayAbbrevs) + - + theme + - + buttonText + - + buttonIcons + - x draggable -> editable/disableDragging + - x fixedWeeks -> weekMode + - x abbrevDayHeadings -> columnFormat + - x buttons/title -> header + - x eventDragOpacity -> dragOpacity + - x eventRevertDuration -> dragRevertDuration + - x weekStart -> firstDay + - x rightToLeft -> isRTL + - x showTime (use 'allDay' CalEvent property instead) +- Triggered Actions + - + eventResizeStart + - + eventResizeStop + - + eventResize + - x monthDisplay -> viewDisplay + - x resize -> windowResize + - 'eventDrop' params changed, can revert if ajax cuts out +- CalEvent Properties + - x showTime -> allDay + - x draggable -> editable + - 'end' is now INCLUSIVE when allDay=true + - 'url' now produces a real tag, more native clicking/tab behavior +- Methods: + - + renderEvent + - x prevMonth -> prev + - x nextMonth -> next + - x prevYear/nextYear -> moveDate + - x refresh -> rerenderEvents/refetchEvents + - x removeEvent -> removeEvents + - x getEventsByID -> clientEvents +- Utilities: + - 'formatDate' format string completely changed (inspired by jQuery UI datepicker + datejs) + - 'formatDates' added to support date-ranges +- Google Calendar Options: + - x draggable -> editable +- Bugfixes + - gcal extension fetched 25 results max, now fetches all + + +v1.2.1 (2009-06-29) +------------------- + +- bugfixes + - allows and corrects invalid end dates for events + - doesn't throw an error in IE while rendering when display:none + - fixed 'loading' callback when used w/ multiple addEventSource calls + - gcal className can now be an array + + +v1.2 (2009-05-31) +----------------- + +- expanded API + - 'className' CalEvent attribute + - 'source' CalEvent attribute + - dynamically get/add/remove/update events of current month + - locale improvements: change month/day name text + - better date formatting ($.fullCalendar.formatDate) + - multiple 'event sources' allowed + - dynamically add/remove event sources +- options for prevYear and nextYear buttons +- docs have been reworked (include addition of Google Calendar docs) +- changed behavior of parseDate for number strings + (now interpets as unix timestamp, not MS times) +- bugfixes + - rightToLeft month start bug + - off-by-one errors with month formatting commands + - events from previous months sticking when clicking prev/next quickly +- Google Calendar API changed to work w/ multiple event sources + - can also provide 'className' and 'draggable' options +- date utilties moved from $ to $.fullCalendar +- more documentation in source code +- minified version of fullcalendar.js +- test suit (available from svn) +- top buttons now use `' + ) + .click(function(ev) { + // don't process clicks for disabled buttons + if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) { + + buttonClick(ev); + + // after the click action, if the button becomes the "active" tab, or disabled, + // it should never have a hover class, so remove it now. + if ( + buttonEl.hasClass(theme.getClass('stateActive')) || + buttonEl.hasClass(theme.getClass('stateDisabled')) + ) { + buttonEl.removeClass(theme.getClass('stateHover')); + } + } + }) + .mousedown(function() { + // the *down* effect (mouse pressed in). + // only on buttons that are not the "active" tab, or disabled + buttonEl + .not('.' + theme.getClass('stateActive')) + .not('.' + theme.getClass('stateDisabled')) + .addClass(theme.getClass('stateDown')); + }) + .mouseup(function() { + // undo the *down* effect + buttonEl.removeClass(theme.getClass('stateDown')); + }) + .hover( + function() { + // the *hover* effect. + // only on buttons that are not the "active" tab, or disabled + buttonEl + .not('.' + theme.getClass('stateActive')) + .not('.' + theme.getClass('stateDisabled')) + .addClass(theme.getClass('stateHover')); + }, + function() { + // undo the *hover* effect + buttonEl + .removeClass(theme.getClass('stateHover')) + .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup + } + ); + + groupChildren = groupChildren.add(buttonEl); + } + } + }); + + if (isOnlyButtons) { + groupChildren + .first().addClass(theme.getClass('cornerLeft')).end() + .last().addClass(theme.getClass('cornerRight')).end(); + } + + if (groupChildren.length > 1) { + groupEl = $('
'); + if (isOnlyButtons) { + groupEl.addClass(theme.getClass('buttonGroup')); + } + groupEl.append(groupChildren); + sectionEl.append(groupEl); + } + else { + sectionEl.append(groupChildren); // 1 or 0 children + } + }); + } + + return sectionEl; + } + + + function updateTitle(text) { + if (el) { + el.find('h2').text(text); + } + } + + + function activateButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .addClass(calendar.theme.getClass('stateActive')); + } + } + + + function deactivateButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .removeClass(calendar.theme.getClass('stateActive')); + } + } + + + function disableButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .prop('disabled', true) + .addClass(calendar.theme.getClass('stateDisabled')); + } + } + + + function enableButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .prop('disabled', false) + .removeClass(calendar.theme.getClass('stateDisabled')); + } + } + + + function getViewsWithButtons() { + return viewsWithButtons; + } + +} + +;; + +var Calendar = FC.Calendar = Class.extend(EmitterMixin, ListenerMixin, { + + view: null, // current View object + viewsByType: null, // holds all instantiated view instances, current or not + currentDate: null, // unzoned moment. private (public API should use getDate instead) + theme: null, + businessHourGenerator: null, + loadingLevel: 0, // number of simultaneous loading tasks + + + constructor: function(el, overrides) { + + // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection. + // unneeded() is called in destroy. + GlobalEmitter.needed(); + + this.el = el; + this.viewsByType = {}; + this.viewSpecCache = {}; + + this.initOptionsInternals(overrides); + this.initMomentInternals(); // needs to happen after options hash initialized + this.initCurrentDate(); + this.initEventManager(); + + this.constructed(); + }, + + + // useful for monkeypatching. TODO: BaseClass? + constructed: function() { + }, + + + // Public API + // ----------------------------------------------------------------------------------------------------------------- + + + getView: function() { + return this.view; + }, + + + publiclyTrigger: function(name, triggerInfo) { + var optHandler = this.opt(name); + var context; + var args; + + if ($.isPlainObject(triggerInfo)) { + context = triggerInfo.context; + args = triggerInfo.args; + } + else if ($.isArray(triggerInfo)) { + args = triggerInfo; + } + + if (context == null) { + context = this.el[0]; // fallback context + } + + if (!args) { + args = []; + } + + this.triggerWith(name, context, args); // Emitter's method + + if (optHandler) { + return optHandler.apply(context, args); + } + }, + + + hasPublicHandlers: function(name) { + return this.hasHandlers(name) || + this.opt(name); // handler specified in options + }, + + + // View + // ----------------------------------------------------------------------------------------------------------------- + + + // Given a view name for a custom view or a standard view, creates a ready-to-go View object + instantiateView: function(viewType) { + var spec = this.getViewSpec(viewType); + + return new spec['class'](this, spec); + }, + + + // Returns a boolean about whether the view is okay to instantiate at some point + isValidViewType: function(viewType) { + return Boolean(this.getViewSpec(viewType)); + }, + + + changeView: function(viewName, dateOrRange) { + + if (dateOrRange) { + + if (dateOrRange.start && dateOrRange.end) { // a range + this.recordOptionOverrides({ // will not rerender + visibleRange: dateOrRange + }); + } + else { // a date + this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate + } + } + + this.renderView(viewName); + }, + + + // Forces navigation to a view for the given date. + // `viewType` can be a specific view name or a generic one like "week" or "day". + zoomTo: function(newDate, viewType) { + var spec; + + viewType = viewType || 'day'; // day is default zoom + spec = this.getViewSpec(viewType) || this.getUnitViewSpec(viewType); + + this.currentDate = newDate.clone(); + this.renderView(spec ? spec.type : null); + }, + + + // Current Date + // ----------------------------------------------------------------------------------------------------------------- + + + initCurrentDate: function() { + var defaultDateInput = this.opt('defaultDate'); + + // compute the initial ambig-timezone date + if (defaultDateInput != null) { + this.currentDate = this.moment(defaultDateInput).stripZone(); + } + else { + this.currentDate = this.getNow(); // getNow already returns unzoned + } + }, + + + prev: function() { + var prevInfo = this.view.buildPrevDateProfile(this.currentDate); + + if (prevInfo.isValid) { + this.currentDate = prevInfo.date; + this.renderView(); + } + }, + + + next: function() { + var nextInfo = this.view.buildNextDateProfile(this.currentDate); + + if (nextInfo.isValid) { + this.currentDate = nextInfo.date; + this.renderView(); + } + }, + + + prevYear: function() { + this.currentDate.add(-1, 'years'); + this.renderView(); + }, + + + nextYear: function() { + this.currentDate.add(1, 'years'); + this.renderView(); + }, + + + today: function() { + this.currentDate = this.getNow(); // should deny like prev/next? + this.renderView(); + }, + + + gotoDate: function(zonedDateInput) { + this.currentDate = this.moment(zonedDateInput).stripZone(); + this.renderView(); + }, + + + incrementDate: function(delta) { + this.currentDate.add(moment.duration(delta)); + this.renderView(); + }, + + + // for external API + getDate: function() { + return this.applyTimezone(this.currentDate); // infuse the calendar's timezone + }, + + + // Loading Triggering + // ----------------------------------------------------------------------------------------------------------------- + + + // Should be called when any type of async data fetching begins + pushLoading: function() { + if (!(this.loadingLevel++)) { + this.publiclyTrigger('loading', [ true, this.view ]); + } + }, + + + // Should be called when any type of async data fetching completes + popLoading: function() { + if (!(--this.loadingLevel)) { + this.publiclyTrigger('loading', [ false, this.view ]); + } + }, + + + // Selection + // ----------------------------------------------------------------------------------------------------------------- + + + // this public method receives start/end dates in any format, with any timezone + select: function(zonedStartInput, zonedEndInput) { + this.view.select( + this.buildSelectFootprint.apply(this, arguments) + ); + }, + + + unselect: function() { // safe to be called before renderView + if (this.view) { + this.view.unselect(); + } + }, + + + // Given arguments to the select method in the API, returns a span (unzoned start/end and other info) + buildSelectFootprint: function(zonedStartInput, zonedEndInput) { + var start = this.moment(zonedStartInput).stripZone(); + var end; + + if (zonedEndInput) { + end = this.moment(zonedEndInput).stripZone(); + } + else if (start.hasTime()) { + end = start.clone().add(this.defaultTimedEventDuration); + } + else { + end = start.clone().add(this.defaultAllDayEventDuration); + } + + return new ComponentFootprint( + new UnzonedRange(start, end), + !start.hasTime() + ); + }, + + + // Misc + // ----------------------------------------------------------------------------------------------------------------- + + + // will return `null` if invalid range + parseUnzonedRange: function(rangeInput) { + var start = null; + var end = null; + + if (rangeInput.start) { + start = this.moment(rangeInput.start).stripZone(); + } + + if (rangeInput.end) { + end = this.moment(rangeInput.end).stripZone(); + } + + if (!start && !end) { + return null; + } + + if (start && end && end.isBefore(start)) { + return null; + } + + return new UnzonedRange(start, end); + }, + + + rerenderEvents: function() { // API method. destroys old events if previously rendered. + this.view.flash('displayingEvents'); + }, + + + initEventManager: function() { + var _this = this; + var eventManager = new EventManager(this); + var rawSources = this.opt('eventSources') || []; + var singleRawSource = this.opt('events'); + + this.eventManager = eventManager; + + if (singleRawSource) { + rawSources.unshift(singleRawSource); + } + + eventManager.on('release', function(eventsPayload) { + _this.trigger('eventsReset', eventsPayload); + }); + + eventManager.freeze(); + + rawSources.forEach(function(rawSource) { + var source = EventSourceParser.parse(rawSource, _this); + + if (source) { + eventManager.addSource(source); + } + }); + + eventManager.thaw(); + }, + + + requestEvents: function(start, end) { + return this.eventManager.requestEvents( + start, + end, + this.opt('timezone'), + !this.opt('lazyFetching') + ); + } + +}); + +;; +/* +Options binding/triggering system. +*/ +Calendar.mixin({ + + dirDefaults: null, // option defaults related to LTR or RTL + localeDefaults: null, // option defaults related to current locale + overrides: null, // option overrides given to the fullCalendar constructor + dynamicOverrides: null, // options set with dynamic setter method. higher precedence than view overrides. + optionsModel: null, // all defaults combined with overrides + + + initOptionsInternals: function(overrides) { + this.overrides = $.extend({}, overrides); // make a copy + this.dynamicOverrides = {}; + this.optionsModel = new Model(); + + this.populateOptionsHash(); + }, + + + // public getter/setter + option: function(name, value) { + var newOptionHash; + + if (typeof name === 'string') { + if (value === undefined) { // getter + return this.optionsModel.get(name); + } + else { // setter for individual option + newOptionHash = {}; + newOptionHash[name] = value; + this.setOptions(newOptionHash); + } + } + else if (typeof name === 'object') { // compound setter with object input + this.setOptions(name); + } + }, + + + // private getter + opt: function(name) { + return this.optionsModel.get(name); + }, + + + setOptions: function(newOptionHash) { + var optionCnt = 0; + var optionName; + + this.recordOptionOverrides(newOptionHash); // will trigger optionsModel watchers + + for (optionName in newOptionHash) { + optionCnt++; + } + + // special-case handling of single option change. + // if only one option change, `optionName` will be its name. + if (optionCnt === 1) { + if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') { + this.updateViewSize(true); // isResize=true + return; + } + else if (optionName === 'defaultDate') { + return; // can't change date this way. use gotoDate instead + } + else if (optionName === 'businessHours') { + return; // optionsModel already reacts to this + } + else if (optionName === 'timezone') { + this.view.flash('initialEvents'); + return; + } + } + + // catch-all. rerender the header and footer and rebuild/rerender the current view + this.renderHeader(); + this.renderFooter(); + + // even non-current views will be affected by this option change. do before rerender + // TODO: detangle + this.viewsByType = {}; + + this.reinitView(); + }, + + + // Computes the flattened options hash for the calendar and assigns to `this.options`. + // Assumes this.overrides and this.dynamicOverrides have already been initialized. + populateOptionsHash: function() { + var locale, localeDefaults; + var isRTL, dirDefaults; + var rawOptions; + + locale = firstDefined( // explicit locale option given? + this.dynamicOverrides.locale, + this.overrides.locale + ); + localeDefaults = localeOptionHash[locale]; + if (!localeDefaults) { // explicit locale option not given or invalid? + locale = Calendar.defaults.locale; + localeDefaults = localeOptionHash[locale] || {}; + } + + isRTL = firstDefined( // based on options computed so far, is direction RTL? + this.dynamicOverrides.isRTL, + this.overrides.isRTL, + localeDefaults.isRTL, + Calendar.defaults.isRTL + ); + dirDefaults = isRTL ? Calendar.rtlDefaults : {}; + + this.dirDefaults = dirDefaults; + this.localeDefaults = localeDefaults; + + rawOptions = mergeOptions([ // merge defaults and overrides. lowest to highest precedence + Calendar.defaults, // global defaults + dirDefaults, + localeDefaults, + this.overrides, + this.dynamicOverrides + ]); + populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options + + this.optionsModel.reset(rawOptions); + }, + + + // stores the new options internally, but does not rerender anything. + recordOptionOverrides: function(newOptionHash) { + var optionName; + + for (optionName in newOptionHash) { + this.dynamicOverrides[optionName] = newOptionHash[optionName]; + } + + this.viewSpecCache = {}; // the dynamic override invalidates the options in this cache, so just clear it + this.populateOptionsHash(); // this.options needs to be recomputed after the dynamic override + } + +}); + +;; + +Calendar.mixin({ + + defaultAllDayEventDuration: null, + defaultTimedEventDuration: null, + localeData: null, + + + initMomentInternals: function() { + var _this = this; + + this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration')); + this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration')); + + // Called immediately, and when any of the options change. + // Happens before any internal objects rebuild or rerender, because this is very core. + this.optionsModel.watch('buildingMomentLocale', [ + '?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort', + '?firstDay', '?weekNumberCalculation' + ], function(opts) { + var weekNumberCalculation = opts.weekNumberCalculation; + var firstDay = opts.firstDay; + var _week; + + // normalize + if (weekNumberCalculation === 'iso') { + weekNumberCalculation = 'ISO'; // normalize + } + + var localeData = Object.create( // make a cheap copy + getMomentLocaleData(opts.locale) // will fall back to en + ); + + if (opts.monthNames) { + localeData._months = opts.monthNames; + } + if (opts.monthNamesShort) { + localeData._monthsShort = opts.monthNamesShort; + } + if (opts.dayNames) { + localeData._weekdays = opts.dayNames; + } + if (opts.dayNamesShort) { + localeData._weekdaysShort = opts.dayNamesShort; + } + + if (firstDay == null && weekNumberCalculation === 'ISO') { + firstDay = 1; + } + if (firstDay != null) { + _week = Object.create(localeData._week); // _week: { dow: # } + _week.dow = firstDay; + localeData._week = _week; + } + + if ( // whitelist certain kinds of input + weekNumberCalculation === 'ISO' || + weekNumberCalculation === 'local' || + typeof weekNumberCalculation === 'function' + ) { + localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it + } + + _this.localeData = localeData; + + // If the internal current date object already exists, move to new locale. + // We do NOT need to do this technique for event dates, because this happens when converting to "segments". + if (_this.currentDate) { + _this.localizeMoment(_this.currentDate); // sets to localeData + } + }); + }, + + + // Builds a moment using the settings of the current calendar: timezone and locale. + // Accepts anything the vanilla moment() constructor accepts. + moment: function() { + var mom; + + if (this.opt('timezone') === 'local') { + mom = FC.moment.apply(null, arguments); + + // Force the moment to be local, because FC.moment doesn't guarantee it. + if (mom.hasTime()) { // don't give ambiguously-timed moments a local zone + mom.local(); + } + } + else if (this.opt('timezone') === 'UTC') { + mom = FC.moment.utc.apply(null, arguments); // process as UTC + } + else { + mom = FC.moment.parseZone.apply(null, arguments); // let the input decide the zone + } + + this.localizeMoment(mom); // TODO + + return mom; + }, + + + msToMoment: function(ms, forceAllDay) { + var mom = FC.moment.utc(ms); // TODO: optimize by using Date.UTC + + if (forceAllDay) { + mom.stripTime(); + } + else { + mom = this.applyTimezone(mom); // may or may not apply locale + } + + this.localizeMoment(mom); + + return mom; + }, + + + msToUtcMoment: function(ms, forceAllDay) { + var mom = FC.moment.utc(ms); // TODO: optimize by using Date.UTC + + if (forceAllDay) { + mom.stripTime(); + } + + this.localizeMoment(mom); + + return mom; + }, + + + // Updates the given moment's locale settings to the current calendar locale settings. + localizeMoment: function(mom) { + mom._locale = this.localeData; + }, + + + // Returns a boolean about whether or not the calendar knows how to calculate + // the timezone offset of arbitrary dates in the current timezone. + getIsAmbigTimezone: function() { + return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC'; + }, + + + // Returns a copy of the given date in the current timezone. Has no effect on dates without times. + applyTimezone: function(date) { + if (!date.hasTime()) { + return date.clone(); + } + + var zonedDate = this.moment(date.toArray()); + var timeAdjust = date.time() - zonedDate.time(); + var adjustedZonedDate; + + // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396) + if (timeAdjust) { // is the time result different than expected? + adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds + if (date.time() - adjustedZonedDate.time() === 0) { // does it match perfectly now? + zonedDate = adjustedZonedDate; + } + } + + return zonedDate; + }, + + + /* + Assumes the footprint is non-open-ended. + */ + footprintToDateProfile: function(componentFootprint, ignoreEnd) { + var start = FC.moment.utc(componentFootprint.unzonedRange.startMs); + var end; + + if (!ignoreEnd) { + end = FC.moment.utc(componentFootprint.unzonedRange.endMs); + } + + if (componentFootprint.isAllDay) { + start.stripTime(); + + if (end) { + end.stripTime(); + } + } + else { + start = this.applyTimezone(start); + + if (end) { + end = this.applyTimezone(end); + } + } + + return new EventDateProfile(start, end, this); + }, + + + // Returns a moment for the current date, as defined by the client's computer or from the `now` option. + // Will return an moment with an ambiguous timezone. + getNow: function() { + var now = this.opt('now'); + if (typeof now === 'function') { + now = now(); + } + return this.moment(now).stripZone(); + }, + + + // Produces a human-readable string for the given duration. + // Side-effect: changes the locale of the given duration. + humanizeDuration: function(duration) { + return duration.locale(this.opt('locale')).humanize(); + }, + + + + // Event-Specific Date Utilities. TODO: move + // ----------------------------------------------------------------------------------------------------------------- + + + // Get an event's normalized end date. If not present, calculate it from the defaults. + getEventEnd: function(event) { + if (event.end) { + return event.end.clone(); + } + else { + return this.getDefaultEventEnd(event.allDay, event.start); + } + }, + + + // Given an event's allDay status and start date, return what its fallback end date should be. + // TODO: rename to computeDefaultEventEnd + getDefaultEventEnd: function(allDay, zonedStart) { + var end = zonedStart.clone(); + + if (allDay) { + end.stripTime().add(this.defaultAllDayEventDuration); + } + else { + end.add(this.defaultTimedEventDuration); + } + + if (this.getIsAmbigTimezone()) { + end.stripZone(); // we don't know what the tzo should be + } + + return end; + } + +}); + +;; + +Calendar.mixin({ + + viewSpecCache: null, // cache of view definitions (initialized in Calendar.js) + + + // Gets information about how to create a view. Will use a cache. + getViewSpec: function(viewType) { + var cache = this.viewSpecCache; + + return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType)); + }, + + + // Given a duration singular unit, like "week" or "day", finds a matching view spec. + // Preference is given to views that have corresponding buttons. + getUnitViewSpec: function(unit) { + var viewTypes; + var i; + var spec; + + if ($.inArray(unit, unitsDesc) != -1) { + + // put views that have buttons first. there will be duplicates, but oh well + viewTypes = this.header.getViewsWithButtons(); // TODO: include footer as well? + $.each(FC.views, function(viewType) { // all views + viewTypes.push(viewType); + }); + + for (i = 0; i < viewTypes.length; i++) { + spec = this.getViewSpec(viewTypes[i]); + if (spec) { + if (spec.singleUnit == unit) { + return spec; + } + } + } + } + }, + + + // Builds an object with information on how to create a given view + buildViewSpec: function(requestedViewType) { + var viewOverrides = this.overrides.views || {}; + var specChain = []; // for the view. lowest to highest priority + var defaultsChain = []; // for the view. lowest to highest priority + var overridesChain = []; // for the view. lowest to highest priority + var viewType = requestedViewType; + var spec; // for the view + var overrides; // for the view + var durationInput; + var duration; + var unit; + + // iterate from the specific view definition to a more general one until we hit an actual View class + while (viewType) { + spec = fcViews[viewType]; + overrides = viewOverrides[viewType]; + viewType = null; // clear. might repopulate for another iteration + + if (typeof spec === 'function') { // TODO: deprecate + spec = { 'class': spec }; + } + + if (spec) { + specChain.unshift(spec); + defaultsChain.unshift(spec.defaults || {}); + durationInput = durationInput || spec.duration; + viewType = viewType || spec.type; + } + + if (overrides) { + overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level + durationInput = durationInput || overrides.duration; + viewType = viewType || overrides.type; + } + } + + spec = mergeProps(specChain); + spec.type = requestedViewType; + if (!spec['class']) { + return false; + } + + // fall back to top-level `duration` option + durationInput = durationInput || + this.dynamicOverrides.duration || + this.overrides.duration; + + if (durationInput) { + duration = moment.duration(durationInput); + + if (duration.valueOf()) { // valid? + + unit = computeDurationGreatestUnit(duration, durationInput); + + spec.duration = duration; + spec.durationUnit = unit; + + // view is a single-unit duration, like "week" or "day" + // incorporate options for this. lowest priority + if (duration.as(unit) === 1) { + spec.singleUnit = unit; + overridesChain.unshift(viewOverrides[unit] || {}); + } + } + } + + spec.defaults = mergeOptions(defaultsChain); + spec.overrides = mergeOptions(overridesChain); + + this.buildViewSpecOptions(spec); + this.buildViewSpecButtonText(spec, requestedViewType); + + return spec; + }, + + + // Builds and assigns a view spec's options object from its already-assigned defaults and overrides + buildViewSpecOptions: function(spec) { + spec.options = mergeOptions([ // lowest to highest priority + Calendar.defaults, // global defaults + spec.defaults, // view's defaults (from ViewSubclass.defaults) + this.dirDefaults, + this.localeDefaults, // locale and dir take precedence over view's defaults! + this.overrides, // calendar's overrides (options given to constructor) + spec.overrides, // view's overrides (view-specific options) + this.dynamicOverrides // dynamically set via setter. highest precedence + ]); + populateInstanceComputableOptions(spec.options); + }, + + + // Computes and assigns a view spec's buttonText-related options + buildViewSpecButtonText: function(spec, requestedViewType) { + + // given an options object with a possible `buttonText` hash, lookup the buttonText for the + // requested view, falling back to a generic unit entry like "week" or "day" + function queryButtonText(options) { + var buttonText = options.buttonText || {}; + return buttonText[requestedViewType] || + // view can decide to look up a certain key + (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) || + // a key like "month" + (spec.singleUnit ? buttonText[spec.singleUnit] : null); + } + + // highest to lowest priority + spec.buttonTextOverride = + queryButtonText(this.dynamicOverrides) || + queryButtonText(this.overrides) || // constructor-specified buttonText lookup hash takes precedence + spec.overrides.buttonText; // `buttonText` for view-specific options is a string + + // highest to lowest priority. mirrors buildViewSpecOptions + spec.buttonTextDefault = + queryButtonText(this.localeDefaults) || + queryButtonText(this.dirDefaults) || + spec.defaults.buttonText || // a single string. from ViewSubclass.defaults + queryButtonText(Calendar.defaults) || + (spec.duration ? this.humanizeDuration(spec.duration) : null) || // like "3 days" + requestedViewType; // fall back to given view name + } + +}); + +;; + +Calendar.mixin({ + + el: null, + contentEl: null, + suggestedViewHeight: null, + ignoreUpdateViewSize: 0, + freezeContentHeightDepth: 0, + windowResizeProxy: null, + + + render: function() { + if (!this.contentEl) { + this.initialRender(); + } + else if (this.elementVisible()) { + // mainly for the public API + this.calcSize(); + this.renderView(); + } + }, + + + initialRender: function() { + var _this = this; + var el = this.el; + + el.addClass('fc'); + + // event delegation for nav links + el.on('click.fc', 'a[data-goto]', function(ev) { + var anchorEl = $(this); + var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON + var date = _this.moment(gotoOptions.date); + var viewType = gotoOptions.type; + + // property like "navLinkDayClick". might be a string or a function + var customAction = _this.view.opt('navLink' + capitaliseFirstLetter(viewType) + 'Click'); + + if (typeof customAction === 'function') { + customAction(date, ev); + } + else { + if (typeof customAction === 'string') { + viewType = customAction; + } + _this.zoomTo(date, viewType); + } + }); + + // called immediately, and upon option change + this.optionsModel.watch('settingTheme', [ '?theme', '?themeSystem' ], function(opts) { + var themeClass = ThemeRegistry.getThemeClass(opts.themeSystem || opts.theme); + var theme = new themeClass(_this.optionsModel); + var widgetClass = theme.getClass('widget'); + + _this.theme = theme; + + if (widgetClass) { + el.addClass(widgetClass); + } + }, function() { + var widgetClass = _this.theme.getClass('widget'); + + _this.theme = null; + + if (widgetClass) { + el.removeClass(widgetClass); + } + }); + + this.optionsModel.watch('settingBusinessHourGenerator', [ '?businessHours' ], function(deps) { + _this.businessHourGenerator = new BusinessHourGenerator(deps.businessHours, _this); + + if (_this.view) { + _this.view.set('businessHourGenerator', _this.businessHourGenerator); + } + }, function() { + _this.businessHourGenerator = null; + }); + + // called immediately, and upon option change. + // HACK: locale often affects isRTL, so we explicitly listen to that too. + this.optionsModel.watch('applyingDirClasses', [ '?isRTL', '?locale' ], function(opts) { + el.toggleClass('fc-ltr', !opts.isRTL); + el.toggleClass('fc-rtl', opts.isRTL); + }); + + this.contentEl = $("
").prependTo(el); + + this.initToolbars(); + this.renderHeader(); + this.renderFooter(); + this.renderView(this.opt('defaultView')); + + if (this.opt('handleWindowResize')) { + $(window).resize( + this.windowResizeProxy = debounce( // prevents rapid calls + this.windowResize.bind(this), + this.opt('windowResizeDelay') + ) + ); + } + }, + + + destroy: function() { + if (this.view) { + this.clearView(); + } + + this.toolbarsManager.proxyCall('removeElement'); + this.contentEl.remove(); + this.el.removeClass('fc fc-ltr fc-rtl'); + + // removes theme-related root className + this.optionsModel.unwatch('settingTheme'); + this.optionsModel.unwatch('settingBusinessHourGenerator'); + + this.el.off('.fc'); // unbind nav link handlers + + if (this.windowResizeProxy) { + $(window).unbind('resize', this.windowResizeProxy); + this.windowResizeProxy = null; + } + + GlobalEmitter.unneeded(); + }, + + + elementVisible: function() { + return this.el.is(':visible'); + }, + + + // Render Queue + // ----------------------------------------------------------------------------------------------------------------- + + + bindViewHandlers: function(view) { + var _this = this; + + view.watch('titleForCalendar', [ 'title' ], function(deps) { // TODO: better system + if (view === _this.view) { // hack + _this.setToolbarsTitle(deps.title); + } + }); + + view.watch('dateProfileForCalendar', [ 'dateProfile' ], function(deps) { + if (view === _this.view) { // hack + _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates + _this.updateToolbarButtons(deps.dateProfile); + } + }); + }, + + + unbindViewHandlers: function(view) { + view.unwatch('titleForCalendar'); + view.unwatch('dateProfileForCalendar'); + }, + + + // View Rendering + // ----------------------------------------------------------------------------------- + + + // Renders a view because of a date change, view-type change, or for the first time. + // If not given a viewType, keep the current view but render different dates. + // Accepts an optional scroll state to restore to. + renderView: function(viewType) { + var oldView = this.view; + var newView; + + this.freezeContentHeight(); + + if (oldView && viewType && oldView.type !== viewType) { + this.clearView(); + } + + // if viewType changed, or the view was never created, create a fresh view + if (!this.view && viewType) { + newView = this.view = + this.viewsByType[viewType] || + (this.viewsByType[viewType] = this.instantiateView(viewType)); + + this.bindViewHandlers(newView); + + newView.setElement( + $("
").appendTo(this.contentEl) + ); + + this.toolbarsManager.proxyCall('activateButton', viewType); + } + + if (this.view) { + + // prevent unnecessary change firing + if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) { + this.view.set('businessHourGenerator', this.businessHourGenerator); + } + + this.view.setDate(this.currentDate); + } + + this.thawContentHeight(); + }, + + + // Unrenders the current view and reflects this change in the Header. + // Unregsiters the `view`, but does not remove from viewByType hash. + clearView: function() { + var currentView = this.view; + + this.toolbarsManager.proxyCall('deactivateButton', currentView.type); + + this.unbindViewHandlers(currentView); + + currentView.removeElement(); + currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time + + this.view = null; + }, + + + // Destroys the view, including the view object. Then, re-instantiates it and renders it. + // Maintains the same scroll state. + // TODO: maintain any other user-manipulated state. + reinitView: function() { + var oldView = this.view; + var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll + this.freezeContentHeight(); + + this.clearView(); + this.calcSize(); + this.renderView(oldView.type); // needs the type to freshly render + + this.view.applyScroll(scroll); + this.thawContentHeight(); + }, + + + // Resizing + // ----------------------------------------------------------------------------------- + + + getSuggestedViewHeight: function() { + if (this.suggestedViewHeight === null) { + this.calcSize(); + } + return this.suggestedViewHeight; + }, + + + isHeightAuto: function() { + return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto'; + }, + + + updateViewSize: function(isResize) { + var view = this.view; + var scroll; + + if (!this.ignoreUpdateViewSize && view) { + + if (isResize) { + this.calcSize(); + scroll = view.queryScroll(); + } + + this.ignoreUpdateViewSize++; + + view.updateSize( + this.getSuggestedViewHeight(), + this.isHeightAuto(), + isResize + ); + + this.ignoreUpdateViewSize--; + + if (isResize) { + view.applyScroll(scroll); + } + + return true; // signal success + } + }, + + + calcSize: function() { + if (this.elementVisible()) { + this._calcSize(); + } + }, + + + _calcSize: function() { // assumes elementVisible + var contentHeightInput = this.opt('contentHeight'); + var heightInput = this.opt('height'); + + if (typeof contentHeightInput === 'number') { // exists and not 'auto' + this.suggestedViewHeight = contentHeightInput; + } + else if (typeof contentHeightInput === 'function') { // exists and is a function + this.suggestedViewHeight = contentHeightInput(); + } + else if (typeof heightInput === 'number') { // exists and not 'auto' + this.suggestedViewHeight = heightInput - this.queryToolbarsHeight(); + } + else if (typeof heightInput === 'function') { // exists and is a function + this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight(); + } + else if (heightInput === 'parent') { // set to height of parent element + this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight(); + } + else { + this.suggestedViewHeight = Math.round( + this.contentEl.width() / + Math.max(this.opt('aspectRatio'), .5) + ); + } + }, + + + windowResize: function(ev) { + if ( + ev.target === window && // so we don't process jqui "resize" events that have bubbled up + this.view && + this.view.isDatesRendered + ) { + if (this.updateViewSize(true)) { // isResize=true, returns true on success + this.publiclyTrigger('windowResize', [ this.view ]); + } + } + }, + + + /* Height "Freezing" + -----------------------------------------------------------------------------*/ + + + freezeContentHeight: function() { + if (!(this.freezeContentHeightDepth++)) { + this.forceFreezeContentHeight(); + } + }, + + + forceFreezeContentHeight: function() { + this.contentEl.css({ + width: '100%', + height: this.contentEl.height(), + overflow: 'hidden' + }); + }, + + + thawContentHeight: function() { + this.freezeContentHeightDepth--; + + // always bring back to natural height + this.contentEl.css({ + width: '', + height: '', + overflow: '' + }); + + // but if there are future thaws, re-freeze + if (this.freezeContentHeightDepth) { + this.forceFreezeContentHeight(); + } + } + +}); + +;; + +Calendar.mixin({ + + header: null, + footer: null, + toolbarsManager: null, + + + initToolbars: function() { + this.header = new Toolbar(this, this.computeHeaderOptions()); + this.footer = new Toolbar(this, this.computeFooterOptions()); + this.toolbarsManager = new Iterator([ this.header, this.footer ]); + }, + + + computeHeaderOptions: function() { + return { + extraClasses: 'fc-header-toolbar', + layout: this.opt('header') + }; + }, + + + computeFooterOptions: function() { + return { + extraClasses: 'fc-footer-toolbar', + layout: this.opt('footer') + }; + }, + + + // can be called repeatedly and Header will rerender + renderHeader: function() { + var header = this.header; + + header.setToolbarOptions(this.computeHeaderOptions()); + header.render(); + + if (header.el) { + this.el.prepend(header.el); + } + }, + + + // can be called repeatedly and Footer will rerender + renderFooter: function() { + var footer = this.footer; + + footer.setToolbarOptions(this.computeFooterOptions()); + footer.render(); + + if (footer.el) { + this.el.append(footer.el); + } + }, + + + setToolbarsTitle: function(title) { + this.toolbarsManager.proxyCall('updateTitle', title); + }, + + + updateToolbarButtons: function(dateProfile) { + var now = this.getNow(); + var view = this.view; + var todayInfo = view.buildDateProfile(now); + var prevInfo = view.buildPrevDateProfile(this.currentDate); + var nextInfo = view.buildNextDateProfile(this.currentDate); + + this.toolbarsManager.proxyCall( + (todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now)) ? + 'enableButton' : + 'disableButton', + 'today' + ); + + this.toolbarsManager.proxyCall( + prevInfo.isValid ? + 'enableButton' : + 'disableButton', + 'prev' + ); + + this.toolbarsManager.proxyCall( + nextInfo.isValid ? + 'enableButton' : + 'disableButton', + 'next' + ); + }, + + + queryToolbarsHeight: function() { + return this.toolbarsManager.items.reduce(function(accumulator, toolbar) { + var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin + return accumulator + toolbarHeight; + }, 0); + } + +}); + +;; + +/* +determines if eventInstanceGroup is allowed, +in relation to other EVENTS and business hours. +*/ +Calendar.prototype.isEventInstanceGroupAllowed = function(eventInstanceGroup) { + var eventDef = eventInstanceGroup.getEventDef(); + var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges()); + var i; + + var peerEventInstances = this.getPeerEventInstances(eventDef); + var peerEventRanges = peerEventInstances.map(eventInstanceToEventRange); + var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges); + + var constraintVal = eventDef.getConstraint(); + var overlapVal = eventDef.getOverlap(); + + var eventAllowFunc = this.opt('eventAllow'); + + for (i = 0; i < eventFootprints.length; i++) { + if ( + !this.isFootprintAllowed( + eventFootprints[i].componentFootprint, + peerEventFootprints, + constraintVal, + overlapVal, + eventFootprints[i].eventInstance + ) + ) { + return false; + } + } + + if (eventAllowFunc) { + for (i = 0; i < eventFootprints.length; i++) { + if ( + eventAllowFunc( + eventFootprints[i].componentFootprint.toLegacy(this), + eventFootprints[i].getEventLegacy() + ) === false + ) { + return false; + } + } + } + + return true; +}; + + +Calendar.prototype.getPeerEventInstances = function(eventDef) { + return this.eventManager.getEventInstancesWithoutId(eventDef.id); +}; + + +Calendar.prototype.isSelectionFootprintAllowed = function(componentFootprint) { + var peerEventInstances = this.eventManager.getEventInstances(); + var peerEventRanges = peerEventInstances.map(eventInstanceToEventRange); + var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges); + + var selectAllowFunc; + + if ( + this.isFootprintAllowed( + componentFootprint, + peerEventFootprints, + this.opt('selectConstraint'), + this.opt('selectOverlap') + ) + ) { + selectAllowFunc = this.opt('selectAllow'); + + if (selectAllowFunc) { + return selectAllowFunc(componentFootprint.toLegacy(this)) !== false; + } + else { + return true; + } + } + + return false; +}; + + +Calendar.prototype.isFootprintAllowed = function( + componentFootprint, + peerEventFootprints, + constraintVal, + overlapVal, + subjectEventInstance // optional +) { + var constraintFootprints; // ComponentFootprint[] + var overlapEventFootprints; // EventFootprint[] + + if (constraintVal != null) { + constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay); + + if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) { + return false; + } + } + + overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint); + + if (overlapVal === false) { + if (overlapEventFootprints.length) { + return false; + } + } + else if (typeof overlapVal === 'function') { + if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) { + return false; + } + } + + if (subjectEventInstance) { + if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) { + return false; + } + } + + return true; +}; + + +// Constraint +// ------------------------------------------------------------------------------------------------ + + +Calendar.prototype.isFootprintWithinConstraints = function(componentFootprint, constraintFootprints) { + var i; + + for (i = 0; i < constraintFootprints.length; i++) { + if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) { + return true; + } + } + + return false; +}; + + +Calendar.prototype.constraintValToFootprints = function(constraintVal, isAllDay) { + var eventInstances; + + if (constraintVal === 'businessHours') { + return this.buildCurrentBusinessFootprints(isAllDay); + } + else if (typeof constraintVal === 'object') { + eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events + + if (!eventInstances) { // invalid input. fallback to parsing footprint directly + return this.parseFootprints(constraintVal); + } + else { + return this.eventInstancesToFootprints(eventInstances); + } + } + else if (constraintVal != null) { // an ID + eventInstances = this.eventManager.getEventInstancesWithId(constraintVal); + + return this.eventInstancesToFootprints(eventInstances); + } +}; + + +// returns ComponentFootprint[] +// uses current view's range +Calendar.prototype.buildCurrentBusinessFootprints = function(isAllDay) { + var view = this.view; + var businessHourGenerator = view.get('businessHourGenerator'); + var unzonedRange = view.dateProfile.activeUnzonedRange; + var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange); + + if (eventInstanceGroup) { + return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances); + } + else { + return []; + } +}; + + +// conversion util +Calendar.prototype.eventInstancesToFootprints = function(eventInstances) { + var eventRanges = eventInstances.map(eventInstanceToEventRange); + var eventFootprints = this.eventRangesToEventFootprints(eventRanges); + + return eventFootprints.map(eventFootprintToComponentFootprint); +}; + + +// Overlap +// ------------------------------------------------------------------------------------------------ + + +Calendar.prototype.collectOverlapEventFootprints = function(peerEventFootprints, targetFootprint) { + var overlapEventFootprints = []; + var i; + + for (i = 0; i < peerEventFootprints.length; i++) { + if ( + this.footprintsIntersect( + targetFootprint, + peerEventFootprints[i].componentFootprint + ) + ) { + overlapEventFootprints.push(peerEventFootprints[i]); + } + } + + return overlapEventFootprints; +}; + + +// optional subjectEventInstance +function isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) { + var i; + + for (i = 0; i < overlapEventFootprints.length; i++) { + if ( + !overlapFunc( + overlapEventFootprints[i].eventInstance.toLegacy(), + subjectEventInstance ? subjectEventInstance.toLegacy() : null + ) + ) { + return false; + } + } + + return true; +} + + +function isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) { + var subjectLegacyInstance = subjectEventInstance.toLegacy(); + var i; + var overlapEventInstance; + var overlapEventDef; + var overlapVal; + + for (i = 0; i < overlapEventFootprints.length; i++) { + overlapEventInstance = overlapEventFootprints[i].eventInstance; + overlapEventDef = overlapEventInstance.def; + + // don't need to pass in calendar, because don't want to consider global eventOverlap property, + // because we already considered that earlier in the process. + overlapVal = overlapEventDef.getOverlap(); + + if (overlapVal === false) { + return false; + } + else if (typeof overlapVal === 'function') { + if ( + !overlapVal( + overlapEventInstance.toLegacy(), + subjectLegacyInstance + ) + ) { + return false; + } + } + } + + return true; +} + + +// Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints +// ------------------------------------------------------------------------------------------------ +// NOTE: this might seem like repetitive code with the Grid class, however, this code is related to +// constraints whereas the Grid code is related to rendering. Each approach might want to convert +// eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make +// this more DRY. + + +/* +Returns false on invalid input. +*/ +Calendar.prototype.parseEventDefToInstances = function(eventInput) { + var eventManager = this.eventManager; + var eventDef = EventDefParser.parse(eventInput, new EventSource(this)); + + if (!eventDef) { // invalid + return false; + } + + return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange); +}; + + +Calendar.prototype.eventRangesToEventFootprints = function(eventRanges) { + var i; + var eventFootprints = []; + + for (i = 0; i < eventRanges.length; i++) { + eventFootprints.push.apply( // footprints + eventFootprints, + this.eventRangeToEventFootprints(eventRanges[i]) + ); + } + + return eventFootprints; +}; + + +Calendar.prototype.eventRangeToEventFootprints = function(eventRange) { + return [ eventRangeToEventFootprint(eventRange) ]; +}; + + +/* +Parses footprints directly. +Very similar to EventDateProfile::parse :( +*/ +Calendar.prototype.parseFootprints = function(rawInput) { + var start, end; + + if (rawInput.start) { + start = this.moment(rawInput.start); + + if (!start.isValid()) { + start = null; + } + } + + if (rawInput.end) { + end = this.moment(rawInput.end); + + if (!end.isValid()) { + end = null; + } + } + + return [ + new ComponentFootprint( + new UnzonedRange(start, end), + (start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay + ) + ]; +}; + + +// Footprint Utils +// ---------------------------------------------------------------------------------------- + + +Calendar.prototype.footprintContainsFootprint = function(outerFootprint, innerFootprint) { + return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange); +}; + + +Calendar.prototype.footprintsIntersect = function(footprint0, footprint1) { + return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange); +}; + +;; + +Calendar.mixin({ + + // Sources + // ------------------------------------------------------------------------------------ + + + getEventSources: function() { + return this.eventManager.otherSources.slice(); // clone + }, + + + getEventSourceById: function(id) { + return this.eventManager.getSourceById( + EventSource.normalizeId(id) + ); + }, + + + addEventSource: function(sourceInput) { + var source = EventSourceParser.parse(sourceInput, this); + + if (source) { + this.eventManager.addSource(source); + } + }, + + + removeEventSources: function(sourceMultiQuery) { + var eventManager = this.eventManager; + var sources; + var i; + + if (sourceMultiQuery == null) { + this.eventManager.removeAllSources(); + } + else { + sources = eventManager.multiQuerySources(sourceMultiQuery); + + eventManager.freeze(); + + for (i = 0; i < sources.length; i++) { + eventManager.removeSource(sources[i]); + } + + eventManager.thaw(); + } + }, + + + removeEventSource: function(sourceQuery) { + var eventManager = this.eventManager; + var sources = eventManager.querySources(sourceQuery); + var i; + + eventManager.freeze(); + + for (i = 0; i < sources.length; i++) { + eventManager.removeSource(sources[i]); + } + + eventManager.thaw(); + }, + + + refetchEventSources: function(sourceMultiQuery) { + var eventManager = this.eventManager; + var sources = eventManager.multiQuerySources(sourceMultiQuery); + var i; + + eventManager.freeze(); + + for (i = 0; i < sources.length; i++) { + eventManager.refetchSource(sources[i]); + } + + eventManager.thaw(); + }, + + + // Events + // ------------------------------------------------------------------------------------ + + + refetchEvents: function() { + this.eventManager.refetchAllSources(); + }, + + + renderEvents: function(eventInputs, isSticky) { + this.eventManager.freeze(); + + for (var i = 0; i < eventInputs.length; i++) { + this.renderEvent(eventInputs[i], isSticky); + } + + this.eventManager.thaw(); + }, + + + renderEvent: function(eventInput, isSticky) { + var eventManager = this.eventManager; + var eventDef = EventDefParser.parse( + eventInput, + eventInput.source || eventManager.stickySource + ); + + if (eventDef) { + eventManager.addEventDef(eventDef, isSticky); + } + }, + + + // legacyQuery operates on legacy event instance objects + removeEvents: function(legacyQuery) { + var eventManager = this.eventManager; + var legacyInstances = []; + var idMap = {}; + var eventDef; + var i; + + if (legacyQuery == null) { // shortcut for removing all + eventManager.removeAllEventDefs(true); // persist=true + } + else { + eventManager.getEventInstances().forEach(function(eventInstance) { + legacyInstances.push(eventInstance.toLegacy()); + }); + + legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery); + + // compute unique IDs + for (i = 0; i < legacyInstances.length; i++) { + eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id); + idMap[eventDef.id] = true; + } + + eventManager.freeze(); + + for (i in idMap) { // reuse `i` as an "id" + eventManager.removeEventDefsById(i, true); // persist=true + } + + eventManager.thaw(); + } + }, + + + // legacyQuery operates on legacy event instance objects + clientEvents: function(legacyQuery) { + var legacyEventInstances = []; + + this.eventManager.getEventInstances().forEach(function(eventInstance) { + legacyEventInstances.push(eventInstance.toLegacy()); + }); + + return filterLegacyEventInstances(legacyEventInstances, legacyQuery); + }, + + + updateEvents: function(eventPropsArray) { + this.eventManager.freeze(); + + for (var i = 0; i < eventPropsArray.length; i++) { + this.updateEvent(eventPropsArray[i]); + } + + this.eventManager.thaw(); + }, + + + updateEvent: function(eventProps) { + var eventDef = this.eventManager.getEventDefByUid(eventProps._id); + var eventInstance; + var eventDefMutation; + + if (eventDef instanceof SingleEventDef) { + eventInstance = eventDef.buildInstance(); + + eventDefMutation = EventDefMutation.createFromRawProps( + eventInstance, + eventProps, // raw props + null // largeUnit -- who uses it? + ); + + this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release + } + } + +}); + + +function filterLegacyEventInstances(legacyEventInstances, legacyQuery) { + if (legacyQuery == null) { + return legacyEventInstances; + } + else if ($.isFunction(legacyQuery)) { + return legacyEventInstances.filter(legacyQuery); + } + else { // an event ID + legacyQuery += ''; // normalize to string + + return legacyEventInstances.filter(function(legacyEventInstance) { + // soft comparison because id not be normalized to string + return legacyEventInstance.id == legacyQuery || + legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match + }); + } +} + +;; + +Calendar.defaults = { + + titleRangeSeparator: ' \u2013 ', // en dash + monthYearFormat: 'MMMM YYYY', // required for en. other locales rely on datepicker computable option + + defaultTimedEventDuration: '02:00:00', + defaultAllDayEventDuration: { days: 1 }, + forceEventDuration: false, + nextDayThreshold: '09:00:00', // 9am + + // display + columnHeader: true, + defaultView: 'month', + aspectRatio: 1.35, + header: { + left: 'title', + center: '', + right: 'today prev,next' + }, + weekends: true, + weekNumbers: false, + + weekNumberTitle: 'W', + weekNumberCalculation: 'local', + + //editable: false, + + //nowIndicator: false, + + scrollTime: '06:00:00', + minTime: '00:00:00', + maxTime: '24:00:00', + showNonCurrentDates: true, + + // event ajax + lazyFetching: true, + startParam: 'start', + endParam: 'end', + timezoneParam: 'timezone', + + timezone: false, + + //allDayDefault: undefined, + + // locale + isRTL: false, + buttonText: { + prev: "prev", + next: "next", + prevYear: "prev year", + nextYear: "next year", + year: 'year', // TODO: locale files need to specify this + today: 'today', + month: 'month', + week: 'week', + day: 'day' + }, + //buttonIcons: null, + + allDayText: 'all-day', + + // allows setting a min-height to the event segment to prevent short events overlapping each other + agendaEventMinHeight: 0, + + // jquery-ui theming + theme: false, + //themeButtonIcons: null, + + //eventResizableFromStart: false, + dragOpacity: .75, + dragRevertDuration: 500, + dragScroll: true, + + //selectable: false, + unselectAuto: true, + //selectMinDistance: 0, + + dropAccept: '*', + + eventOrder: 'title', + //eventRenderWait: null, + + eventLimit: false, + eventLimitText: 'more', + eventLimitClick: 'popover', + dayPopoverFormat: 'LL', + + handleWindowResize: true, + windowResizeDelay: 100, // milliseconds before an updateSize happens + + longPressDelay: 1000 + +}; + + +Calendar.englishDefaults = { // used by locale.js + dayPopoverFormat: 'dddd, MMMM D' +}; + + +Calendar.rtlDefaults = { // right-to-left defaults + header: { // TODO: smarter solution (first/center/last ?) + left: 'next,prev today', + center: '', + right: 'title' + }, + buttonIcons: { + prev: 'right-single-arrow', + next: 'left-single-arrow', + prevYear: 'right-double-arrow', + nextYear: 'left-double-arrow' + }, + themeButtonIcons: { + prev: 'circle-triangle-e', + next: 'circle-triangle-w', + nextYear: 'seek-prev', + prevYear: 'seek-next' + } +}; + +;; + +var localeOptionHash = FC.locales = {}; // initialize and expose + + +// TODO: document the structure and ordering of a FullCalendar locale file + + +// Initialize jQuery UI datepicker translations while using some of the translations +// Will set this as the default locales for datepicker. +FC.datepickerLocale = function(localeCode, dpLocaleCode, dpOptions) { + + // get the FullCalendar internal option hash for this locale. create if necessary + var fcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {}); + + // transfer some simple options from datepicker to fc + fcOptions.isRTL = dpOptions.isRTL; + fcOptions.weekNumberTitle = dpOptions.weekHeader; + + // compute some more complex options from datepicker + $.each(dpComputableOptions, function(name, func) { + fcOptions[name] = func(dpOptions); + }); + + // is jQuery UI Datepicker is on the page? + if ($.datepicker) { + + // Register the locale data. + // FullCalendar and MomentJS use locale codes like "pt-br" but Datepicker + // does it like "pt-BR" or if it doesn't have the locale, maybe just "pt". + // Make an alias so the locale can be referenced either way. + $.datepicker.regional[dpLocaleCode] = + $.datepicker.regional[localeCode] = // alias + dpOptions; + + // Alias 'en' to the default locale data. Do this every time. + $.datepicker.regional.en = $.datepicker.regional['']; + + // Set as Datepicker's global defaults. + $.datepicker.setDefaults(dpOptions); + } +}; + + +// Sets FullCalendar-specific translations. Will set the locales as the global default. +FC.locale = function(localeCode, newFcOptions) { + var fcOptions; + var momOptions; + + // get the FullCalendar internal option hash for this locale. create if necessary + fcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {}); + + // provided new options for this locales? merge them in + if (newFcOptions) { + fcOptions = localeOptionHash[localeCode] = mergeOptions([ fcOptions, newFcOptions ]); + } + + // compute locale options that weren't defined. + // always do this. newFcOptions can be undefined when initializing from i18n file, + // so no way to tell if this is an initialization or a default-setting. + momOptions = getMomentLocaleData(localeCode); // will fall back to en + $.each(momComputableOptions, function(name, func) { + if (fcOptions[name] == null) { + fcOptions[name] = func(momOptions, fcOptions); + } + }); + + // set it as the default locale for FullCalendar + Calendar.defaults.locale = localeCode; +}; + + +// NOTE: can't guarantee any of these computations will run because not every locale has datepicker +// configs, so make sure there are English fallbacks for these in the defaults file. +var dpComputableOptions = { + + buttonText: function(dpOptions) { + return { + // the translations sometimes wrongly contain HTML entities + prev: stripHtmlEntities(dpOptions.prevText), + next: stripHtmlEntities(dpOptions.nextText), + today: stripHtmlEntities(dpOptions.currentText) + }; + }, + + // Produces format strings like "MMMM YYYY" -> "September 2014" + monthYearFormat: function(dpOptions) { + return dpOptions.showMonthAfterYear ? + 'YYYY[' + dpOptions.yearSuffix + '] MMMM' : + 'MMMM YYYY[' + dpOptions.yearSuffix + ']'; + } + +}; + +var momComputableOptions = { + + // Produces format strings like "ddd M/D" -> "Fri 9/15" + dayOfMonthFormat: function(momOptions, fcOptions) { + var format = momOptions.longDateFormat('l'); // for the format like "M/D/YYYY" + + // strip the year off the edge, as well as other misc non-whitespace chars + format = format.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g, ''); + + if (fcOptions.isRTL) { + format += ' ddd'; // for RTL, add day-of-week to end + } + else { + format = 'ddd ' + format; // for LTR, add day-of-week to beginning + } + return format; + }, + + // Produces format strings like "h:mma" -> "6:00pm" + mediumTimeFormat: function(momOptions) { // can't be called `timeFormat` because collides with option + return momOptions.longDateFormat('LT') + .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand + }, + + // Produces format strings like "h(:mm)a" -> "6pm" / "6:30pm" + smallTimeFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(':mm', '(:mm)') + .replace(/(\Wmm)$/, '($1)') // like above, but for foreign locales + .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand + }, + + // Produces format strings like "h(:mm)t" -> "6p" / "6:30p" + extraSmallTimeFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(':mm', '(:mm)') + .replace(/(\Wmm)$/, '($1)') // like above, but for foreign locales + .replace(/\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand + }, + + // Produces format strings like "ha" / "H" -> "6pm" / "18" + hourFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(':mm', '') + .replace(/(\Wmm)$/, '') // like above, but for foreign locales + .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand + }, + + // Produces format strings like "h:mm" -> "6:30" (with no AM/PM) + noMeridiemTimeFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(/\s*a$/i, ''); // remove trailing AM/PM + } + +}; + + +// options that should be computed off live calendar options (considers override options) +// TODO: best place for this? related to locale? +// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it +var instanceComputableOptions = { + + // Produces format strings for results like "Mo 16" + smallDayDateFormat: function(options) { + return options.isRTL ? + 'D dd' : + 'dd D'; + }, + + // Produces format strings for results like "Wk 5" + weekFormat: function(options) { + return options.isRTL ? + 'w[ ' + options.weekNumberTitle + ']' : + '[' + options.weekNumberTitle + ' ]w'; + }, + + // Produces format strings for results like "Wk5" + smallWeekFormat: function(options) { + return options.isRTL ? + 'w[' + options.weekNumberTitle + ']' : + '[' + options.weekNumberTitle + ']w'; + } + +}; + +// TODO: make these computable properties in optionsModel +function populateInstanceComputableOptions(options) { + $.each(instanceComputableOptions, function(name, func) { + if (options[name] == null) { + options[name] = func(options); + } + }); +} + + +// Returns moment's internal locale data. If doesn't exist, returns English. +function getMomentLocaleData(localeCode) { + return moment.localeData(localeCode) || moment.localeData('en'); +} + + +// Initialize English by forcing computation of moment-derived options. +// Also, sets it as the default. +FC.locale('en', Calendar.englishDefaults); + +;; + +var UnzonedRange = FC.UnzonedRange = Class.extend({ + + startMs: null, // if null, no start constraint + endMs: null, // if null, no end constraint + + // TODO: move these into footprint. + // Especially, doesn't make sense for null startMs/endMs. + isStart: true, + isEnd: true, + + constructor: function(startInput, endInput) { + + if (moment.isMoment(startInput)) { + startInput = startInput.clone().stripZone(); + } + + if (moment.isMoment(endInput)) { + endInput = endInput.clone().stripZone(); + } + + if (startInput) { + this.startMs = startInput.valueOf(); + } + + if (endInput) { + this.endMs = endInput.valueOf(); + } + }, + + intersect: function(otherRange) { + var startMs = this.startMs; + var endMs = this.endMs; + var newRange = null; + + if (otherRange.startMs !== null) { + if (startMs === null) { + startMs = otherRange.startMs; + } + else { + startMs = Math.max(startMs, otherRange.startMs); + } + } + + if (otherRange.endMs !== null) { + if (endMs === null) { + endMs = otherRange.endMs; + } + else { + endMs = Math.min(endMs, otherRange.endMs); + } + } + + if (startMs === null || endMs === null || startMs < endMs) { + newRange = new UnzonedRange(startMs, endMs); + newRange.isStart = this.isStart && startMs === this.startMs; + newRange.isEnd = this.isEnd && endMs === this.endMs; + } + + return newRange; + }, + + + intersectsWith: function(otherRange) { + return (this.endMs === null || otherRange.startMs === null || this.endMs > otherRange.startMs) && + (this.startMs === null || otherRange.endMs === null || this.startMs < otherRange.endMs); + }, + + + containsRange: function(innerRange) { + return (this.startMs === null || (innerRange.startMs !== null && innerRange.startMs >= this.startMs)) && + (this.endMs === null || (innerRange.endMs !== null && innerRange.endMs <= this.endMs)); + }, + + + // `date` can be a moment, a Date, or a millisecond time. + containsDate: function(date) { + var ms = date.valueOf(); + + return (this.startMs === null || ms >= this.startMs) && + (this.endMs === null || ms < this.endMs); + }, + + + // If the given date is not within the given range, move it inside. + // (If it's past the end, make it one millisecond before the end). + // `date` can be a moment, a Date, or a millisecond time. + // Returns a MS-time. + constrainDate: function(date) { + var ms = date.valueOf(); + + if (this.startMs !== null && ms < this.startMs) { + ms = this.startMs; + } + + if (this.endMs !== null && ms >= this.endMs) { + ms = this.endMs - 1; + } + + return ms; + }, + + + equals: function(otherRange) { + return this.startMs === otherRange.startMs && this.endMs === otherRange.endMs; + }, + + + clone: function() { + var range = new UnzonedRange(this.startMs, this.endMs); + + range.isStart = this.isStart; + range.isEnd = this.isEnd; + + return range; + }, + + + // Returns an ambig-zoned moment from startMs. + // BEWARE: returned moment is not localized. + // Formatting and start-of-week will be default. + getStart: function() { + if (this.startMs !== null) { + return FC.moment.utc(this.startMs).stripZone(); + } + }, + + // Returns an ambig-zoned moment from startMs. + // BEWARE: returned moment is not localized. + // Formatting and start-of-week will be default. + getEnd: function() { + if (this.endMs !== null) { + return FC.moment.utc(this.endMs).stripZone(); + } + }, + + + as: function(unit) { + return moment.utc(this.endMs).diff( + moment.utc(this.startMs), + unit, + true + ); + } + +}); + + +/* +SIDEEFFECT: will mutate eventRanges. +Will return a new array result. +Only works for non-open-ended ranges. +*/ +function invertUnzonedRanges(ranges, constraintRange) { + var invertedRanges = []; + var startMs = constraintRange.startMs; // the end of the previous range. the start of the new range + var i; + var dateRange; + + // ranges need to be in order. required for our date-walking algorithm + ranges.sort(compareUnzonedRanges); + + for (i = 0; i < ranges.length; i++) { + dateRange = ranges[i]; + + // add the span of time before the event (if there is any) + if (dateRange.startMs > startMs) { // compare millisecond time (skip any ambig logic) + invertedRanges.push( + new UnzonedRange(startMs, dateRange.startMs) + ); + } + + if (dateRange.endMs > startMs) { + startMs = dateRange.endMs; + } + } + + // add the span of time after the last event (if there is any) + if (startMs < constraintRange.endMs) { // compare millisecond time (skip any ambig logic) + invertedRanges.push( + new UnzonedRange(startMs, constraintRange.endMs) + ); + } + + return invertedRanges; +} + + +/* +Only works for non-open-ended ranges. +*/ +function compareUnzonedRanges(range1, range2) { + return range1.startMs - range2.startMs; // earlier ranges go first +} + +;; + +/* +Meant to be immutable +*/ +var ComponentFootprint = FC.ComponentFootprint = Class.extend({ + + unzonedRange: null, + isAllDay: false, // component can choose to ignore this + + + constructor: function(unzonedRange, isAllDay) { + this.unzonedRange = unzonedRange; + this.isAllDay = isAllDay; + }, + + + /* + Only works for non-open-ended ranges. + */ + toLegacy: function(calendar) { + return { + start: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay), + end: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay) + }; + } + +}); + +;; + +var EventPeriod = Class.extend(EmitterMixin, { + + start: null, + end: null, + timezone: null, + + unzonedRange: null, + + requestsByUid: null, + pendingCnt: 0, + + freezeDepth: 0, + stuntedReleaseCnt: 0, + releaseCnt: 0, + + eventDefsByUid: null, + eventDefsById: null, + eventInstanceGroupsById: null, + + + constructor: function(start, end, timezone) { + this.start = start; + this.end = end; + this.timezone = timezone; + + this.unzonedRange = new UnzonedRange( + start.clone().stripZone(), + end.clone().stripZone() + ); + + this.requestsByUid = {}; + this.eventDefsByUid = {}; + this.eventDefsById = {}; + this.eventInstanceGroupsById = {}; + }, + + + isWithinRange: function(start, end) { + // TODO: use a range util function? + return !start.isBefore(this.start) && !end.isAfter(this.end); + }, + + + // Requesting and Purging + // ----------------------------------------------------------------------------------------------------------------- + + + requestSources: function(sources) { + this.freeze(); + + for (var i = 0; i < sources.length; i++) { + this.requestSource(sources[i]); + } + + this.thaw(); + }, + + + requestSource: function(source) { + var _this = this; + var request = { source: source, status: 'pending' }; + + this.requestsByUid[source.uid] = request; + this.pendingCnt += 1; + + source.fetch(this.start, this.end, this.timezone).then(function(eventDefs) { + if (request.status !== 'cancelled') { + request.status = 'completed'; + request.eventDefs = eventDefs; + + _this.addEventDefs(eventDefs); + _this.pendingCnt--; + _this.tryRelease(); + } + }, function() { // failure + if (request.status !== 'cancelled') { + request.status = 'failed'; + + _this.pendingCnt--; + _this.tryRelease(); + } + }); + }, + + + purgeSource: function(source) { + var request = this.requestsByUid[source.uid]; + + if (request) { + delete this.requestsByUid[source.uid]; + + if (request.status === 'pending') { + request.status = 'cancelled'; + this.pendingCnt--; + this.tryRelease(); + } + else if (request.status === 'completed') { + request.eventDefs.forEach(this.removeEventDef.bind(this)); + } + } + }, + + + purgeAllSources: function() { + var requestsByUid = this.requestsByUid; + var uid, request; + var completedCnt = 0; + + for (uid in requestsByUid) { + request = requestsByUid[uid]; + + if (request.status === 'pending') { + request.status = 'cancelled'; + } + else if (request.status === 'completed') { + completedCnt++; + } + } + + this.requestsByUid = {}; + this.pendingCnt = 0; + + if (completedCnt) { + this.removeAllEventDefs(); // might release + } + }, + + + // Event Definitions + // ----------------------------------------------------------------------------------------------------------------- + + + getEventDefByUid: function(eventDefUid) { + return this.eventDefsByUid[eventDefUid]; + }, + + + getEventDefsById: function(eventDefId) { + var a = this.eventDefsById[eventDefId]; + + if (a) { + return a.slice(); // clone + } + + return []; + }, + + + addEventDefs: function(eventDefs) { + for (var i = 0; i < eventDefs.length; i++) { + this.addEventDef(eventDefs[i]); + } + }, + + + addEventDef: function(eventDef) { + var eventDefsById = this.eventDefsById; + var eventDefId = eventDef.id; + var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []); + var eventInstances = eventDef.buildInstances(this.unzonedRange); + var i; + + eventDefs.push(eventDef); + + this.eventDefsByUid[eventDef.uid] = eventDef; + + for (i = 0; i < eventInstances.length; i++) { + this.addEventInstance(eventInstances[i], eventDefId); + } + }, + + + removeEventDefsById: function(eventDefId) { + var _this = this; + + this.getEventDefsById(eventDefId).forEach(function(eventDef) { + _this.removeEventDef(eventDef); + }); + }, + + + removeAllEventDefs: function() { + var isEmpty = $.isEmptyObject(this.eventDefsByUid); + + this.eventDefsByUid = {}; + this.eventDefsById = {}; + this.eventInstanceGroupsById = {}; + + if (!isEmpty) { + this.tryRelease(); + } + }, + + + removeEventDef: function(eventDef) { + var eventDefsById = this.eventDefsById; + var eventDefs = eventDefsById[eventDef.id]; + + delete this.eventDefsByUid[eventDef.uid]; + + if (eventDefs) { + removeExact(eventDefs, eventDef); + + if (!eventDefs.length) { + delete eventDefsById[eventDef.id]; + } + + this.removeEventInstancesForDef(eventDef); + } + }, + + + // Event Instances + // ----------------------------------------------------------------------------------------------------------------- + + + getEventInstances: function() { // TODO: consider iterator + var eventInstanceGroupsById = this.eventInstanceGroupsById; + var eventInstances = []; + var id; + + for (id in eventInstanceGroupsById) { + eventInstances.push.apply(eventInstances, // append + eventInstanceGroupsById[id].eventInstances + ); + } + + return eventInstances; + }, + + + getEventInstancesWithId: function(eventDefId) { + var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId]; + + if (eventInstanceGroup) { + return eventInstanceGroup.eventInstances.slice(); // clone + } + + return []; + }, + + + getEventInstancesWithoutId: function(eventDefId) { // TODO: consider iterator + var eventInstanceGroupsById = this.eventInstanceGroupsById; + var matchingInstances = []; + var id; + + for (id in eventInstanceGroupsById) { + if (id !== eventDefId) { + matchingInstances.push.apply(matchingInstances, // append + eventInstanceGroupsById[id].eventInstances + ); + } + } + + return matchingInstances; + }, + + + addEventInstance: function(eventInstance, eventDefId) { + var eventInstanceGroupsById = this.eventInstanceGroupsById; + var eventInstanceGroup = eventInstanceGroupsById[eventDefId] || + (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup()); + + eventInstanceGroup.eventInstances.push(eventInstance); + + this.tryRelease(); + }, + + + removeEventInstancesForDef: function(eventDef) { + var eventInstanceGroupsById = this.eventInstanceGroupsById; + var eventInstanceGroup = eventInstanceGroupsById[eventDef.id]; + var removeCnt; + + if (eventInstanceGroup) { + removeCnt = removeMatching(eventInstanceGroup.eventInstances, function(currentEventInstance) { + return currentEventInstance.def === eventDef; + }); + + if (!eventInstanceGroup.eventInstances.length) { + delete eventInstanceGroupsById[eventDef.id]; + } + + if (removeCnt) { + this.tryRelease(); + } + } + }, + + + // Releasing and Freezing + // ----------------------------------------------------------------------------------------------------------------- + + + tryRelease: function() { + if (!this.pendingCnt) { + if (!this.freezeDepth) { + this.release(); + } + else { + this.stuntedReleaseCnt++; + } + } + }, + + + release: function() { + this.releaseCnt++; + this.trigger('release', this.eventInstanceGroupsById); + }, + + + whenReleased: function() { + var _this = this; + + if (this.releaseCnt) { + return Promise.resolve(this.eventInstanceGroupsById); + } + else { + return Promise.construct(function(onResolve) { + _this.one('release', onResolve); + }); + } + }, + + + freeze: function() { + if (!(this.freezeDepth++)) { + this.stuntedReleaseCnt = 0; + } + }, + + + thaw: function() { + if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) { + this.release(); + } + } + +}); + +;; + +var EventManager = Class.extend(EmitterMixin, ListenerMixin, { + + currentPeriod: null, + + calendar: null, + stickySource: null, + otherSources: null, // does not include sticky source + + + constructor: function(calendar) { + this.calendar = calendar; + this.stickySource = new ArrayEventSource(calendar); + this.otherSources = []; + }, + + + requestEvents: function(start, end, timezone, force) { + if ( + force || + !this.currentPeriod || + !this.currentPeriod.isWithinRange(start, end) || + timezone !== this.currentPeriod.timezone + ) { + this.setPeriod( // will change this.currentPeriod + new EventPeriod(start, end, timezone) + ); + } + + return this.currentPeriod.whenReleased(); + }, + + + // Source Adding/Removing + // ----------------------------------------------------------------------------------------------------------------- + + + addSource: function(eventSource) { + this.otherSources.push(eventSource); + + if (this.currentPeriod) { + this.currentPeriod.requestSource(eventSource); // might release + } + }, + + + removeSource: function(doomedSource) { + removeExact(this.otherSources, doomedSource); + + if (this.currentPeriod) { + this.currentPeriod.purgeSource(doomedSource); // might release + } + }, + + + removeAllSources: function() { + this.otherSources = []; + + if (this.currentPeriod) { + this.currentPeriod.purgeAllSources(); // might release + } + }, + + + // Source Refetching + // ----------------------------------------------------------------------------------------------------------------- + + + refetchSource: function(eventSource) { + var currentPeriod = this.currentPeriod; + + if (currentPeriod) { + currentPeriod.freeze(); + currentPeriod.purgeSource(eventSource); + currentPeriod.requestSource(eventSource); + currentPeriod.thaw(); + } + }, + + + refetchAllSources: function() { + var currentPeriod = this.currentPeriod; + + if (currentPeriod) { + currentPeriod.freeze(); + currentPeriod.purgeAllSources(); + currentPeriod.requestSources(this.getSources()); + currentPeriod.thaw(); + } + }, + + + // Source Querying + // ----------------------------------------------------------------------------------------------------------------- + + + getSources: function() { + return [ this.stickySource ].concat(this.otherSources); + }, + + + // like querySources, but accepts multple match criteria (like multiple IDs) + multiQuerySources: function(matchInputs) { + + // coerce into an array + if (!matchInputs) { + matchInputs = []; + } + else if (!$.isArray(matchInputs)) { + matchInputs = [ matchInputs ]; + } + + var matchingSources = []; + var i; + + // resolve raw inputs to real event source objects + for (i = 0; i < matchInputs.length; i++) { + matchingSources.push.apply( // append + matchingSources, + this.querySources(matchInputs[i]) + ); + } + + return matchingSources; + }, + + + // matchInput can either by a real event source object, an ID, or the function/URL for the source. + // returns an array of matching source objects. + querySources: function(matchInput) { + var sources = this.otherSources; + var i, source; + + // given a proper event source object + for (i = 0; i < sources.length; i++) { + source = sources[i]; + + if (source === matchInput) { + return [ source ]; + } + } + + // an ID match + source = this.getSourceById(EventSource.normalizeId(matchInput)); + if (source) { + return [ source ]; + } + + // parse as an event source + matchInput = EventSourceParser.parse(matchInput, this.calendar); + if (matchInput) { + + return $.grep(sources, function(source) { + return isSourcesEquivalent(matchInput, source); + }); + } + }, + + + /* + ID assumed to already be normalized + */ + getSourceById: function(id) { + return $.grep(this.otherSources, function(source) { + return source.id && source.id === id; + })[0]; + }, + + + // Event-Period + // ----------------------------------------------------------------------------------------------------------------- + + + setPeriod: function(eventPeriod) { + if (this.currentPeriod) { + this.unbindPeriod(this.currentPeriod); + this.currentPeriod = null; + } + + this.currentPeriod = eventPeriod; + this.bindPeriod(eventPeriod); + + eventPeriod.requestSources(this.getSources()); + }, + + + bindPeriod: function(eventPeriod) { + this.listenTo(eventPeriod, 'release', function(eventsPayload) { + this.trigger('release', eventsPayload); + }); + }, + + + unbindPeriod: function(eventPeriod) { + this.stopListeningTo(eventPeriod); + }, + + + // Event Getting/Adding/Removing + // ----------------------------------------------------------------------------------------------------------------- + + + getEventDefByUid: function(uid) { + if (this.currentPeriod) { + return this.currentPeriod.getEventDefByUid(uid); + } + }, + + + addEventDef: function(eventDef, isSticky) { + if (isSticky) { + this.stickySource.addEventDef(eventDef); + } + + if (this.currentPeriod) { + this.currentPeriod.addEventDef(eventDef); // might release + } + }, + + + removeEventDefsById: function(eventId) { + this.getSources().forEach(function(eventSource) { + eventSource.removeEventDefsById(eventId); + }); + + if (this.currentPeriod) { + this.currentPeriod.removeEventDefsById(eventId); // might release + } + }, + + + removeAllEventDefs: function() { + this.getSources().forEach(function(eventSource) { + eventSource.removeAllEventDefs(); + }); + + if (this.currentPeriod) { + this.currentPeriod.removeAllEventDefs(); + } + }, + + + // Event Mutating + // ----------------------------------------------------------------------------------------------------------------- + + + /* + Returns an undo function. + */ + mutateEventsWithId: function(eventDefId, eventDefMutation) { + var currentPeriod = this.currentPeriod; + var eventDefs; + var undoFuncs = []; + + if (currentPeriod) { + + currentPeriod.freeze(); + + eventDefs = currentPeriod.getEventDefsById(eventDefId); + eventDefs.forEach(function(eventDef) { + // add/remove esp because id might change + currentPeriod.removeEventDef(eventDef); + undoFuncs.push(eventDefMutation.mutateSingle(eventDef)); + currentPeriod.addEventDef(eventDef); + }); + + currentPeriod.thaw(); + + return function() { + currentPeriod.freeze(); + + for (var i = 0; i < eventDefs.length; i++) { + currentPeriod.removeEventDef(eventDefs[i]); + undoFuncs[i](); + currentPeriod.addEventDef(eventDefs[i]); + } + + currentPeriod.thaw(); + }; + } + + return function() { }; + }, + + + /* + copies and then mutates + */ + buildMutatedEventInstanceGroup: function(eventDefId, eventDefMutation) { + var eventDefs = this.getEventDefsById(eventDefId); + var i; + var defCopy; + var allInstances = []; + + for (i = 0; i < eventDefs.length; i++) { + defCopy = eventDefs[i].clone(); + + if (defCopy instanceof SingleEventDef) { + eventDefMutation.mutateSingle(defCopy); + + allInstances.push.apply(allInstances, // append + defCopy.buildInstances() + ); + } + } + + return new EventInstanceGroup(allInstances); + }, + + + // Freezing + // ----------------------------------------------------------------------------------------------------------------- + + + freeze: function() { + if (this.currentPeriod) { + this.currentPeriod.freeze(); + } + }, + + + thaw: function() { + if (this.currentPeriod) { + this.currentPeriod.thaw(); + } + } + +}); + + +// Methods that straight-up query the current EventPeriod for an array of results. +[ + 'getEventDefsById', + 'getEventInstances', + 'getEventInstancesWithId', + 'getEventInstancesWithoutId' +].forEach(function(methodName) { + + EventManager.prototype[methodName] = function() { + var currentPeriod = this.currentPeriod; + + if (currentPeriod) { + return currentPeriod[methodName].apply(currentPeriod, arguments); + } + + return []; + }; +}); + + +function isSourcesEquivalent(source0, source1) { + return source0.getPrimitive() == source1.getPrimitive(); +} + +;; + +var BUSINESS_HOUR_EVENT_DEFAULTS = { + start: '09:00', + end: '17:00', + dow: [ 1, 2, 3, 4, 5 ], // monday - friday + rendering: 'inverse-background' + // classNames are defined in businessHoursSegClasses +}; + + +var BusinessHourGenerator = FC.BusinessHourGenerator = Class.extend({ + + rawComplexDef: null, + calendar: null, // for anonymous EventSource + + + constructor: function(rawComplexDef, calendar) { + this.rawComplexDef = rawComplexDef; + this.calendar = calendar; + }, + + + buildEventInstanceGroup: function(isAllDay, unzonedRange) { + var eventDefs = this.buildEventDefs(isAllDay); + var eventInstanceGroup; + + if (eventDefs.length) { + eventInstanceGroup = new EventInstanceGroup( + eventDefsToEventInstances(eventDefs, unzonedRange) + ); + + // so that inverse-background rendering can happen even when no eventRanges in view + eventInstanceGroup.explicitEventDef = eventDefs[0]; + + return eventInstanceGroup; + } + }, + + + buildEventDefs: function(isAllDay) { + var rawComplexDef = this.rawComplexDef; + var rawDefs = []; + var requireDow = false; + var i; + var defs = []; + + if (rawComplexDef === true) { + rawDefs = [ {} ]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim + } + else if ($.isPlainObject(rawComplexDef)) { + rawDefs = [ rawComplexDef ]; + } + else if ($.isArray(rawComplexDef)) { + rawDefs = rawComplexDef; + requireDow = true; // every sub-definition NEEDS a day-of-week + } + + for (i = 0; i < rawDefs.length; i++) { + if (!requireDow || rawDefs[i].dow) { + defs.push( + this.buildEventDef(isAllDay, rawDefs[i]) + ); + } + } + + return defs; + }, + + + buildEventDef: function(isAllDay, rawDef) { + var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef); + + if (isAllDay) { + fullRawDef.start = null; + fullRawDef.end = null; + } + + return RecurringEventDef.parse( + fullRawDef, + new EventSource(this.calendar) // dummy source + ); + } + +}); + +;; + +var EventDefParser = { + + parse: function(eventInput, source) { + if ( + isTimeString(eventInput.start) || moment.isDuration(eventInput.start) || + isTimeString(eventInput.end) || moment.isDuration(eventInput.end) + ) { + return RecurringEventDef.parse(eventInput, source); + } + else { + return SingleEventDef.parse(eventInput, source); + } + } + +}; + +;; + +var EventDef = FC.EventDef = Class.extend(ParsableModelMixin, { + + source: null, // required + + id: null, // normalized supplied ID + rawId: null, // unnormalized supplied ID + uid: null, // internal ID. new ID for every definition + + // NOTE: eventOrder sorting relies on these + title: null, + url: null, + rendering: null, + constraint: null, + overlap: null, + editable: null, + startEditable: null, + durationEditable: null, + color: null, + backgroundColor: null, + borderColor: null, + textColor: null, + + className: null, // an array. TODO: rename to className*s* (API breakage) + miscProps: null, + + + constructor: function(source) { + this.source = source; + this.className = []; + this.miscProps = {}; + }, + + + isAllDay: function() { + // subclasses must implement + }, + + + buildInstances: function(unzonedRange) { + // subclasses must implement + }, + + + clone: function() { + var copy = new this.constructor(this.source); + + copy.id = this.id; + copy.rawId = this.rawId; + copy.uid = this.uid; // not really unique anymore :( + + EventDef.copyVerbatimStandardProps(this, copy); + + copy.className = this.className.slice(); // copy + copy.miscProps = $.extend({}, this.miscProps); + + return copy; + }, + + + hasInverseRendering: function() { + return this.getRendering() === 'inverse-background'; + }, + + + hasBgRendering: function() { + var rendering = this.getRendering(); + + return rendering === 'inverse-background' || rendering === 'background'; + }, + + + getRendering: function() { + if (this.rendering != null) { + return this.rendering; + } + + return this.source.rendering; + }, + + + getConstraint: function() { + if (this.constraint != null) { + return this.constraint; + } + + if (this.source.constraint != null) { + return this.source.constraint; + } + + return this.source.calendar.opt('eventConstraint'); // what about View option? + }, + + + getOverlap: function() { + if (this.overlap != null) { + return this.overlap; + } + + if (this.source.overlap != null) { + return this.source.overlap; + } + + return this.source.calendar.opt('eventOverlap'); // what about View option? + }, + + + isStartExplicitlyEditable: function() { + if (this.startEditable !== null) { + return this.startEditable; + } + + return this.source.startEditable; + }, + + + isDurationExplicitlyEditable: function() { + if (this.durationEditable !== null) { + return this.durationEditable; + } + + return this.source.durationEditable; + }, + + + isExplicitlyEditable: function() { + if (this.editable !== null) { + return this.editable; + } + + return this.source.editable; + }, + + + toLegacy: function() { + var obj = $.extend({}, this.miscProps); + + obj._id = this.uid; + obj.source = this.source; + obj.className = this.className.slice(); // copy + obj.allDay = this.isAllDay(); + + if (this.rawId != null) { + obj.id = this.rawId; + } + + EventDef.copyVerbatimStandardProps(this, obj); + + return obj; + }, + + + applyManualStandardProps: function(rawProps) { + + if (rawProps.id != null) { + this.id = EventDef.normalizeId((this.rawId = rawProps.id)); + } + else { + this.id = EventDef.generateId(); + } + + if (rawProps._id != null) { // accept this prop, even tho somewhat internal + this.uid = String(rawProps._id); + } + else { + this.uid = EventDef.generateId(); + } + + // TODO: converge with EventSource + if ($.isArray(rawProps.className)) { + this.className = rawProps.className; + } + if (typeof rawProps.className === 'string') { + this.className = rawProps.className.split(/\s+/); + } + + return true; + }, + + + applyMiscProps: function(rawProps) { + $.extend(this.miscProps, rawProps); + } + +}); + +// finish initializing the mixin +EventDef.defineStandardProps = ParsableModelMixin_defineStandardProps; +EventDef.copyVerbatimStandardProps = ParsableModelMixin_copyVerbatimStandardProps; + + +// IDs +// --------------------------------------------------------------------------------------------------------------------- +// TODO: converge with EventSource + + +EventDef.uuid = 0; + + +EventDef.normalizeId = function(id) { + return String(id); +}; + + +EventDef.generateId = function() { + return '_fc' + (EventDef.uuid++); +}; + + +// Parsing +// --------------------------------------------------------------------------------------------------------------------- + + +EventDef.defineStandardProps({ + // not automatically assigned (`false`) + _id: false, + id: false, + className: false, + source: false, // will ignored + + // automatically assigned (`true`) + title: true, + url: true, + rendering: true, + constraint: true, + overlap: true, + editable: true, + startEditable: true, + durationEditable: true, + color: true, + backgroundColor: true, + borderColor: true, + textColor: true +}); + + +EventDef.parse = function(rawInput, source) { + var def = new this(source); + + if (def.applyProps(rawInput)) { + return def; + } + + return false; +}; + +;; + +var SingleEventDef = EventDef.extend({ + + dateProfile: null, + + + /* + Will receive start/end params, but will be ignored. + */ + buildInstances: function() { + return [ this.buildInstance() ]; + }, + + + buildInstance: function() { + return new EventInstance( + this, // definition + this.dateProfile + ); + }, + + + isAllDay: function() { + return this.dateProfile.isAllDay(); + }, + + + clone: function() { + var def = EventDef.prototype.clone.call(this); + + def.dateProfile = this.dateProfile; + + return def; + }, + + + rezone: function() { + var calendar = this.source.calendar; + var dateProfile = this.dateProfile; + + this.dateProfile = new EventDateProfile( + calendar.moment(dateProfile.start), + dateProfile.end ? calendar.moment(dateProfile.end) : null, + calendar + ); + }, + + + /* + NOTE: if super-method fails, should still attempt to apply + */ + applyManualStandardProps: function(rawProps) { + var superSuccess = EventDef.prototype.applyManualStandardProps.apply(this, arguments); + var dateProfile = EventDateProfile.parse(rawProps, this.source); // returns null on failure + + if (dateProfile) { + this.dateProfile = dateProfile; + + // make sure `date` shows up in the legacy event objects as-is + if (rawProps.date != null) { + this.miscProps.date = rawProps.date; + } + + return superSuccess; + } + else { + return false; + } + } + +}); + + +// Parsing +// --------------------------------------------------------------------------------------------------------------------- + + +SingleEventDef.defineStandardProps({ // false = manually process + start: false, + date: false, // alias for 'start' + end: false, + allDay: false +}); + +;; + +var RecurringEventDef = EventDef.extend({ + + startTime: null, // duration + endTime: null, // duration, or null + dowHash: null, // object hash, or null + + + isAllDay: function() { + return !this.startTime && !this.endTime; + }, + + + buildInstances: function(unzonedRange) { + var calendar = this.source.calendar; + var unzonedDate = unzonedRange.getStart(); + var unzonedEnd = unzonedRange.getEnd(); + var zonedDayStart; + var instanceStart, instanceEnd; + var instances = []; + + while (unzonedDate.isBefore(unzonedEnd)) { + + // if everyday, or this particular day-of-week + if (!this.dowHash || this.dowHash[unzonedDate.day()]) { + + zonedDayStart = calendar.applyTimezone(unzonedDate); + instanceStart = zonedDayStart.clone(); + instanceEnd = null; + + if (this.startTime) { + instanceStart.time(this.startTime); + } + else { + instanceStart.stripTime(); + } + + if (this.endTime) { + instanceEnd = zonedDayStart.clone().time(this.endTime); + } + + instances.push( + new EventInstance( + this, // definition + new EventDateProfile(instanceStart, instanceEnd, calendar) + ) + ); + } + + unzonedDate.add(1, 'days'); + } + + return instances; + }, + + + setDow: function(dowNumbers) { + + if (!this.dowHash) { + this.dowHash = {}; + } + + for (var i = 0; i < dowNumbers.length; i++) { + this.dowHash[dowNumbers[i]] = true; + } + }, + + + clone: function() { + var def = EventDef.prototype.clone.call(this); + + if (def.startTime) { + def.startTime = moment.duration(this.startTime); + } + + if (def.endTime) { + def.endTime = moment.duration(this.endTime); + } + + if (this.dowHash) { + def.dowHash = $.extend({}, this.dowHash); + } + + return def; + }, + + + /* + NOTE: if super-method fails, should still attempt to apply + */ + applyProps: function(rawProps) { + var superSuccess = EventDef.prototype.applyProps.apply(this, arguments); + + if (rawProps.start) { + this.startTime = moment.duration(rawProps.start); + } + + if (rawProps.end) { + this.endTime = moment.duration(rawProps.end); + } + + if (rawProps.dow) { + this.setDow(rawProps.dow); + } + + return superSuccess; + } + +}); + + +// Parsing +// --------------------------------------------------------------------------------------------------------------------- + + +RecurringEventDef.defineStandardProps({ // false = manually process + start: false, + end: false, + dow: false +}); + +;; + +var EventInstance = Class.extend({ + + def: null, // EventDef + dateProfile: null, // EventDateProfile + + + constructor: function(def, dateProfile) { + this.def = def; + this.dateProfile = dateProfile; + }, + + + toLegacy: function() { + var dateProfile = this.dateProfile; + var obj = this.def.toLegacy(); + + obj.start = dateProfile.start.clone(); + obj.end = dateProfile.end ? dateProfile.end.clone() : null; + + return obj; + } + +}); + +;; + +/* +It's expected that there will be at least one EventInstance, +OR that an explicitEventDef is assigned. +*/ +var EventInstanceGroup = FC.EventInstanceGroup = Class.extend({ + + eventInstances: null, + explicitEventDef: null, // optional + + + constructor: function(eventInstances) { + this.eventInstances = eventInstances || []; + }, + + + getAllEventRanges: function(constraintRange) { + if (constraintRange) { + return this.sliceNormalRenderRanges(constraintRange); + } + else { + return this.eventInstances.map(eventInstanceToEventRange); + } + }, + + + sliceRenderRanges: function(constraintRange) { + if (this.isInverse()) { + return this.sliceInverseRenderRanges(constraintRange); + } + else { + return this.sliceNormalRenderRanges(constraintRange); + } + }, + + + sliceNormalRenderRanges: function(constraintRange) { + var eventInstances = this.eventInstances; + var i, eventInstance; + var slicedRange; + var slicedEventRanges = []; + + for (i = 0; i < eventInstances.length; i++) { + eventInstance = eventInstances[i]; + + slicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange); + + if (slicedRange) { + slicedEventRanges.push( + new EventRange( + slicedRange, + eventInstance.def, + eventInstance + ) + ); + } + } + + return slicedEventRanges; + }, + + + sliceInverseRenderRanges: function(constraintRange) { + var unzonedRanges = this.eventInstances.map(eventInstanceToUnzonedRange); + var ownerDef = this.getEventDef(); + + unzonedRanges = invertUnzonedRanges(unzonedRanges, constraintRange); + + return unzonedRanges.map(function(unzonedRange) { + return new EventRange(unzonedRange, ownerDef); // don't give an EventInstance + }); + }, + + + isInverse: function() { + return this.getEventDef().hasInverseRendering(); + }, + + + getEventDef: function() { + return this.explicitEventDef || this.eventInstances[0].def; + } + +}); + +;; + +/* +Meant to be immutable +*/ +var EventDateProfile = Class.extend({ + + start: null, + end: null, + unzonedRange: null, + + + constructor: function(start, end, calendar) { + this.start = start; + this.end = end || null; + this.unzonedRange = this.buildUnzonedRange(calendar); + }, + + + isAllDay: function() { // why recompute this every time? + return !(this.start.hasTime() || (this.end && this.end.hasTime())); + }, + + + /* + Needs a Calendar object + */ + buildUnzonedRange: function(calendar) { + var startMs = this.start.clone().stripZone().valueOf(); + var endMs = this.getEnd(calendar).stripZone().valueOf(); + + return new UnzonedRange(startMs, endMs); + }, + + + /* + Needs a Calendar object + */ + getEnd: function(calendar) { + return this.end ? + this.end.clone() : + // derive the end from the start and allDay. compute allDay if necessary + calendar.getDefaultEventEnd( + this.isAllDay(), + this.start + ); + } + +}); + + +EventDateProfile.isStandardProp = function(propName) { + return propName === 'start' || propName === 'date' || propName === 'end' || propName === 'allDay'; +}; + + +/* +Needs an EventSource object +*/ +EventDateProfile.parse = function(rawProps, source) { + var startInput = rawProps.start || rawProps.date; + var endInput = rawProps.end; + + if (!startInput) { + return false; + } + + var calendar = source.calendar; + var start = calendar.moment(startInput); + var end = endInput ? calendar.moment(endInput) : null; + var forcedAllDay = rawProps.allDay; + var forceEventDuration = calendar.opt('forceEventDuration'); + + if (!start.isValid()) { + return false; + } + + if (end && (!end.isValid() || !end.isAfter(start))) { + end = null; + } + + if (forcedAllDay == null) { + forcedAllDay = source.allDayDefault; + if (forcedAllDay == null) { + forcedAllDay = calendar.opt('allDayDefault'); + } + } + + if (forcedAllDay === true) { + start.stripTime(); + if (end) { + end.stripTime(); + } + } + else if (forcedAllDay === false) { + if (!start.hasTime()) { + start.time(0); + } + if (end && !end.hasTime()) { + end.time(0); + } + } + + if (!end && forceEventDuration) { + end = calendar.getDefaultEventEnd(!start.hasTime(), start); + } + + return new EventDateProfile(start, end, calendar); +}; + +;; + +var EventRange = Class.extend({ + + unzonedRange: null, + eventDef: null, + eventInstance: null, // optional + + + constructor: function(unzonedRange, eventDef, eventInstance) { + this.unzonedRange = unzonedRange; + this.eventDef = eventDef; + + if (eventInstance) { + this.eventInstance = eventInstance; + } + } + +}); + +;; + +var EventFootprint = FC.EventFootprint = Class.extend({ + + componentFootprint: null, + eventDef: null, + eventInstance: null, // optional + + + constructor: function(componentFootprint, eventDef, eventInstance) { + this.componentFootprint = componentFootprint; + this.eventDef = eventDef; + + if (eventInstance) { + this.eventInstance = eventInstance; + } + }, + + + getEventLegacy: function() { + return (this.eventInstance || this.eventDef).toLegacy(); + } + +}); + +;; + +var EventDefMutation = FC.EventDefMutation = Class.extend({ + + // won't ever be empty. will be null instead. + // callers should use setDateMutation for setting. + dateMutation: null, + + // hacks to get updateEvent/createFromRawProps to work. + // not undo-able and not considered in isEmpty. + eventDefId: null, // standard manual props + className: null, // " + verbatimStandardProps: null, + miscProps: null, + + + /* + eventDef assumed to be a SingleEventDef. + returns an undo function. + */ + mutateSingle: function(eventDef) { + var origDateProfile; + + if (this.dateMutation) { + origDateProfile = eventDef.dateProfile; + + eventDef.dateProfile = this.dateMutation.buildNewDateProfile( + origDateProfile, + eventDef.source.calendar + ); + } + + // can't undo + // TODO: more DRY with EventDef::applyManualStandardProps + if (this.eventDefId != null) { + eventDef.id = EventDef.normalizeId((eventDef.rawId = this.eventDefId)); + } + + // can't undo + // TODO: more DRY with EventDef::applyManualStandardProps + if (this.className) { + eventDef.className = this.className; + } + + // can't undo + if (this.verbatimStandardProps) { + SingleEventDef.copyVerbatimStandardProps( + this.verbatimStandardProps, // src + eventDef // dest + ); + } + + // can't undo + if (this.miscProps) { + eventDef.applyMiscProps(this.miscProps); + } + + if (origDateProfile) { + return function() { + eventDef.dateProfile = origDateProfile; + }; + } + else { + return function() { }; + } + }, + + + setDateMutation: function(dateMutation) { + if (dateMutation && !dateMutation.isEmpty()) { + this.dateMutation = dateMutation; + } + else { + this.dateMutation = null; + } + }, + + + isEmpty: function() { + return !this.dateMutation; + } + +}); + + +EventDefMutation.createFromRawProps = function(eventInstance, rawProps, largeUnit) { + var eventDef = eventInstance.def; + var dateProps = {}; + var standardProps = {}; + var miscProps = {}; + var verbatimStandardProps = {}; + var eventDefId = null; + var className = null; + var propName; + var dateProfile; + var dateMutation; + var defMutation; + + for (propName in rawProps) { + if (EventDateProfile.isStandardProp(propName)) { + dateProps[propName] = rawProps[propName]; + } + else if (eventDef.isStandardProp(propName)) { + standardProps[propName] = rawProps[propName]; + } + else if (eventDef.miscProps[propName] !== rawProps[propName]) { // only if changed + miscProps[propName] = rawProps[propName]; + } + } + + dateProfile = EventDateProfile.parse(dateProps, eventDef.source); + + if (dateProfile) { // no failure? + dateMutation = EventDefDateMutation.createFromDiff( + eventInstance.dateProfile, + dateProfile, + largeUnit + ); + } + + if (standardProps.id !== eventDef.id) { + eventDefId = standardProps.id; // only apply if there's a change + } + + if (!isArraysEqual(standardProps.className, eventDef.className)) { + className = standardProps.className; // only apply if there's a change + } + + EventDef.copyVerbatimStandardProps( + standardProps, // src + verbatimStandardProps // dest + ); + + defMutation = new EventDefMutation(); + defMutation.eventDefId = eventDefId; + defMutation.className = className; + defMutation.verbatimStandardProps = verbatimStandardProps; + defMutation.miscProps = miscProps; + + if (dateMutation) { + defMutation.dateMutation = dateMutation; + } + + return defMutation; +}; + +;; + +var EventDefDateMutation = Class.extend({ + + clearEnd: false, + forceTimed: false, + forceAllDay: false, + + // Durations. if 0-ms duration, will be null instead. + // Callers should not set this directly. + dateDelta: null, + startDelta: null, + endDelta: null, + + + /* + returns an undo function. + */ + buildNewDateProfile: function(eventDateProfile, calendar) { + var start = eventDateProfile.start.clone(); + var end = null; + var shouldRezone = false; + + if (eventDateProfile.end && !this.clearEnd) { + end = eventDateProfile.end.clone(); + } + // if there will be an end-date mutation, guarantee an end, + // ambigously-zoned according to the original allDay + else if (this.endDelta && !end) { + end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start); + } + + if (this.forceTimed) { + shouldRezone = true; + + if (!start.hasTime()) { + start.time(0); + } + + if (end && !end.hasTime()) { + end.time(0); + } + } + else if (this.forceAllDay) { + + if (start.hasTime()) { + start.stripTime(); + } + + if (end && end.hasTime()) { + end.stripTime(); + } + } + + if (this.dateDelta) { + shouldRezone = true; + + start.add(this.dateDelta); + + if (end) { + end.add(this.dateDelta); + } + } + + // do this before adding startDelta to start, so we can work off of start + if (this.endDelta) { + shouldRezone = true; + + end.add(this.endDelta); + } + + if (this.startDelta) { + shouldRezone = true; + + start.add(this.startDelta); + } + + if (shouldRezone) { + start = calendar.applyTimezone(start); + + if (end) { + end = calendar.applyTimezone(end); + } + } + + // TODO: okay to access calendar option? + if (!end && calendar.opt('forceEventDuration')) { + end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start); + } + + return new EventDateProfile(start, end, calendar); + }, + + + setDateDelta: function(dateDelta) { + if (dateDelta && dateDelta.valueOf()) { + this.dateDelta = dateDelta; + } + else { + this.dateDelta = null; + } + }, + + + setStartDelta: function(startDelta) { + if (startDelta && startDelta.valueOf()) { + this.startDelta = startDelta; + } + else { + this.startDelta = null; + } + }, + + + setEndDelta: function(endDelta) { + if (endDelta && endDelta.valueOf()) { + this.endDelta = endDelta; + } + else { + this.endDelta = null; + } + }, + + + isEmpty: function() { + return !this.clearEnd && !this.forceTimed && !this.forceAllDay && + !this.dateDelta && !this.startDelta && !this.endDelta; + } + +}); + + +EventDefDateMutation.createFromDiff = function(dateProfile0, dateProfile1, largeUnit) { + var clearEnd = dateProfile0.end && !dateProfile1.end; + var forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay(); + var forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay(); + var dateDelta; + var endDiff; + var endDelta; + var mutation; + + // subtracts the dates in the appropriate way, returning a duration + function subtractDates(date1, date0) { // date1 - date0 + if (largeUnit) { + return diffByUnit(date1, date0, largeUnit); // poorly named + } + else if (dateProfile1.isAllDay()) { + return diffDay(date1, date0); // poorly named + } + else { + return diffDayTime(date1, date0); // poorly named + } + } + + dateDelta = subtractDates(dateProfile1.start, dateProfile0.start); + + if (dateProfile1.end) { + // use unzonedRanges because dateProfile0.end might be null + endDiff = subtractDates( + dateProfile1.unzonedRange.getEnd(), + dateProfile0.unzonedRange.getEnd() + ); + endDelta = endDiff.subtract(dateDelta); + } + + mutation = new EventDefDateMutation(); + mutation.clearEnd = clearEnd; + mutation.forceTimed = forceTimed; + mutation.forceAllDay = forceAllDay; + mutation.setDateDelta(dateDelta); + mutation.setEndDelta(endDelta); + + return mutation; +}; + +;; + +function eventDefsToEventInstances(eventDefs, unzonedRange) { + var eventInstances = []; + var i; + + for (i = 0; i < eventDefs.length; i++) { + eventInstances.push.apply(eventInstances, // append + eventDefs[i].buildInstances(unzonedRange) + ); + } + + return eventInstances; +} + + +function eventInstanceToEventRange(eventInstance) { + return new EventRange( + eventInstance.dateProfile.unzonedRange, + eventInstance.def, + eventInstance + ); +} + + +function eventRangeToEventFootprint(eventRange) { + return new EventFootprint( + new ComponentFootprint( + eventRange.unzonedRange, + eventRange.eventDef.isAllDay() + ), + eventRange.eventDef, + eventRange.eventInstance // might not exist + ); +} + + +function eventInstanceToUnzonedRange(eventInstance) { + return eventInstance.dateProfile.unzonedRange; +} + + +function eventFootprintToComponentFootprint(eventFootprint) { + return eventFootprint.componentFootprint; +} + +;; + +var EventSource = Class.extend(ParsableModelMixin, { + + calendar: null, + + id: null, // can stay null + uid: null, + color: null, + backgroundColor: null, + borderColor: null, + textColor: null, + className: null, // array + editable: null, + startEditable: null, + durationEditable: null, + rendering: null, + overlap: null, + constraint: null, + allDayDefault: null, + eventDataTransform: null, // optional function + + + // can we do away with calendar? at least for the abstract? + // useful for buildEventDef + constructor: function(calendar) { + this.calendar = calendar; + this.className = []; + this.uid = String(EventSource.uuid++); + }, + + + fetch: function(start, end, timezone) { + // subclasses must implement. must return a promise. + }, + + + removeEventDefsById: function(eventDefId) { + // optional for subclasses to implement + }, + + + removeAllEventDefs: function() { + // optional for subclasses to implement + }, + + + /* + For compairing/matching + */ + getPrimitive: function(otherSource) { + // subclasses must implement + }, + + + parseEventDefs: function(rawEventDefs) { + var i; + var eventDef; + var eventDefs = []; + + for (i = 0; i < rawEventDefs.length; i++) { + eventDef = this.parseEventDef(rawEventDefs[i]); + + if (eventDef) { + eventDefs.push(eventDef); + } + } + + return eventDefs; + }, + + + parseEventDef: function(rawInput) { + var calendarTransform = this.calendar.opt('eventDataTransform'); + var sourceTransform = this.eventDataTransform; + + if (calendarTransform) { + rawInput = calendarTransform(rawInput); + } + if (sourceTransform) { + rawInput = sourceTransform(rawInput); + } + + return EventDefParser.parse(rawInput, this); + }, + + + applyManualStandardProps: function(rawProps) { + + if (rawProps.id != null) { + this.id = EventSource.normalizeId(rawProps.id); + } + + // TODO: converge with EventDef + if ($.isArray(rawProps.className)) { + this.className = rawProps.className; + } + else if (typeof rawProps.className === 'string') { + this.className = rawProps.className.split(/\s+/); + } + + return true; + } + +}); + + +// finish initializing the mixin +EventSource.defineStandardProps = ParsableModelMixin_defineStandardProps; + + +// IDs +// --------------------------------------------------------------------------------------------------------------------- +// TODO: converge with EventDef + + +EventSource.uuid = 0; + + +EventSource.normalizeId = function(id) { + if (id) { + return String(id); + } + + return null; +}; + + +// Parsing +// --------------------------------------------------------------------------------------------------------------------- + + +EventSource.defineStandardProps({ + // manually process... + id: false, + className: false, + + // automatically transfer... + color: true, + backgroundColor: true, + borderColor: true, + textColor: true, + editable: true, + startEditable: true, + durationEditable: true, + rendering: true, + overlap: true, + constraint: true, + allDayDefault: true, + eventDataTransform: true +}); + + +/* +rawInput can be any data type! +*/ +EventSource.parse = function(rawInput, calendar) { + var source = new this(calendar); + + if (typeof rawInput === 'object') { + if (source.applyProps(rawInput)) { + return source; + } + } + + return false; +}; + + +FC.EventSource = EventSource; + +;; + +var EventSourceParser = { + + sourceClasses: [], + + + registerClass: function(EventSourceClass) { + this.sourceClasses.unshift(EventSourceClass); // give highest priority + }, + + + parse: function(rawInput, calendar) { + var sourceClasses = this.sourceClasses; + var i; + var eventSource; + + for (i = 0; i < sourceClasses.length; i++) { + eventSource = sourceClasses[i].parse(rawInput, calendar); + + if (eventSource) { + return eventSource; + } + } + } + +}; + + +FC.EventSourceParser = EventSourceParser; + +;; + +var ArrayEventSource = EventSource.extend({ + + rawEventDefs: null, // unparsed + eventDefs: null, + currentTimezone: null, + + + constructor: function(calendar) { + EventSource.apply(this, arguments); // super-constructor + this.eventDefs = []; // for if setRawEventDefs is never called + }, + + + setRawEventDefs: function(rawEventDefs) { + this.rawEventDefs = rawEventDefs; + this.eventDefs = this.parseEventDefs(rawEventDefs); + }, + + + fetch: function(start, end, timezone) { + var eventDefs = this.eventDefs; + var i; + + if ( + this.currentTimezone !== null && + this.currentTimezone !== timezone + ) { + for (i = 0; i < eventDefs.length; i++) { + if (eventDefs[i] instanceof SingleEventDef) { + eventDefs[i].rezone(); + } + } + } + + this.currentTimezone = timezone; + + return Promise.resolve(eventDefs); + }, + + + addEventDef: function(eventDef) { + this.eventDefs.push(eventDef); + }, + + + /* + eventDefId already normalized to a string + */ + removeEventDefsById: function(eventDefId) { + return removeMatching(this.eventDefs, function(eventDef) { + return eventDef.id === eventDefId; + }); + }, + + + removeAllEventDefs: function() { + this.eventDefs = []; + }, + + + getPrimitive: function() { + return this.rawEventDefs; + }, + + + applyManualStandardProps: function(rawProps) { + var superSuccess = EventSource.prototype.applyManualStandardProps.apply(this, arguments); + + this.setRawEventDefs(rawProps.events); + + return superSuccess; + } + +}); + + +ArrayEventSource.defineStandardProps({ + events: false // don't automatically transfer +}); + + +ArrayEventSource.parse = function(rawInput, calendar) { + var rawProps; + + // normalize raw input + if ($.isArray(rawInput.events)) { // extended form + rawProps = rawInput; + } + else if ($.isArray(rawInput)) { // short form + rawProps = { events: rawInput }; + } + + if (rawProps) { + return EventSource.parse.call(this, rawProps, calendar); + } + + return false; +}; + + +EventSourceParser.registerClass(ArrayEventSource); + +FC.ArrayEventSource = ArrayEventSource; + +;; + +var FuncEventSource = EventSource.extend({ + + func: null, + + + fetch: function(start, end, timezone) { + var _this = this; + + this.calendar.pushLoading(); + + return Promise.construct(function(onResolve) { + _this.func.call( + _this.calendar, + start.clone(), + end.clone(), + timezone, + function(rawEventDefs) { + _this.calendar.popLoading(); + + onResolve(_this.parseEventDefs(rawEventDefs)); + } + ); + }); + }, + + + getPrimitive: function() { + return this.func; + }, + + + applyManualStandardProps: function(rawProps) { + var superSuccess = EventSource.prototype.applyManualStandardProps.apply(this, arguments); + + this.func = rawProps.events; + + return superSuccess; + } + +}); + + +FuncEventSource.defineStandardProps({ + events: false // don't automatically transfer +}); + + +FuncEventSource.parse = function(rawInput, calendar) { + var rawProps; + + // normalize raw input + if ($.isFunction(rawInput.events)) { // extended form + rawProps = rawInput; + } + else if ($.isFunction(rawInput)) { // short form + rawProps = { events: rawInput }; + } + + if (rawProps) { + return EventSource.parse.call(this, rawProps, calendar); + } + + return false; +}; + + +EventSourceParser.registerClass(FuncEventSource); + +FC.FuncEventSource = FuncEventSource; + +;; + +var JsonFeedEventSource = EventSource.extend({ + + // these props must all be manually set before calling fetch + url: null, + startParam: null, + endParam: null, + timezoneParam: null, + ajaxSettings: null, // does not include url + + + fetch: function(start, end, timezone) { + var _this = this; + var ajaxSettings = this.ajaxSettings; + var onSuccess = ajaxSettings.success; + var onError = ajaxSettings.error; + var requestParams = this.buildRequestParams(start, end, timezone); + + // todo: eventually handle the promise's then, + // don't intercept success/error + // tho will be a breaking API change + + this.calendar.pushLoading(); + + return Promise.construct(function(onResolve, onReject) { + $.ajax($.extend( + {}, // destination + JsonFeedEventSource.AJAX_DEFAULTS, + ajaxSettings, + { + url: _this.url, + data: requestParams, + success: function(rawEventDefs) { + var callbackRes; + + _this.calendar.popLoading(); + + if (rawEventDefs) { + callbackRes = applyAll(onSuccess, this, arguments); // redirect `this` + + if ($.isArray(callbackRes)) { + rawEventDefs = callbackRes; + } + + onResolve(_this.parseEventDefs(rawEventDefs)); + } + else { + onReject(); + } + }, + error: function() { + _this.calendar.popLoading(); + + applyAll(onError, this, arguments); // redirect `this` + onReject(); + } + } + )); + }); + }, + + + buildRequestParams: function(start, end, timezone) { + var calendar = this.calendar; + var ajaxSettings = this.ajaxSettings; + var startParam, endParam, timezoneParam; + var customRequestParams; + var params = {}; + + startParam = this.startParam; + if (startParam == null) { + startParam = calendar.opt('startParam'); + } + + endParam = this.endParam; + if (endParam == null) { + endParam = calendar.opt('endParam'); + } + + timezoneParam = this.timezoneParam; + if (timezoneParam == null) { + timezoneParam = calendar.opt('timezoneParam'); + } + + // retrieve any outbound GET/POST $.ajax data from the options + if ($.isFunction(ajaxSettings.data)) { + // supplied as a function that returns a key/value object + customRequestParams = ajaxSettings.data(); + } + else { + // probably supplied as a straight key/value object + customRequestParams = ajaxSettings.data || {}; + } + + $.extend(params, customRequestParams); + + params[startParam] = start.format(); + params[endParam] = end.format(); + + if (timezone && timezone !== 'local') { + params[timezoneParam] = timezone; + } + + return params; + }, + + + getPrimitive: function() { + return this.url; + }, + + + applyMiscProps: function(rawProps) { + EventSource.prototype.applyMiscProps.apply(this, arguments); + + this.ajaxSettings = rawProps; + } + +}); + + +JsonFeedEventSource.AJAX_DEFAULTS = { + dataType: 'json', + cache: false +}; + + +JsonFeedEventSource.defineStandardProps({ + // automatically transfer (true)... + url: true, + startParam: true, + endParam: true, + timezoneParam: true +}); + + +JsonFeedEventSource.parse = function(rawInput, calendar) { + var rawProps; + + // normalize raw input + if (typeof rawInput.url === 'string') { // extended form + rawProps = rawInput; + } + else if (typeof rawInput === 'string') { // short form + rawProps = { url: rawInput }; + } + + if (rawProps) { + return EventSource.parse.call(this, rawProps, calendar); + } + + return false; +}; + + +EventSourceParser.registerClass(JsonFeedEventSource); + +FC.JsonFeedEventSource = JsonFeedEventSource; + +;; + +var ThemeRegistry = FC.ThemeRegistry = { + + themeClassHash: {}, + + + register: function(themeName, themeClass) { + this.themeClassHash[themeName] = themeClass; + }, + + + getThemeClass: function(themeSetting) { + if (!themeSetting) { + return StandardTheme; + } + else if (themeSetting === true) { + return JqueryUiTheme; + } + else { + return this.themeClassHash[themeSetting]; + } + } + +}; + +;; + +var Theme = FC.Theme = Class.extend({ + + classes: {}, + iconClasses: {}, + baseIconClass: '', + iconOverrideOption: null, + iconOverrideCustomButtonOption: null, + iconOverridePrefix: '', + + + constructor: function(optionsModel) { + this.optionsModel = optionsModel; + this.processIconOverride(); + }, + + + processIconOverride: function() { + if (this.iconOverrideOption) { + this.setIconOverride( + this.optionsModel.get(this.iconOverrideOption) + ); + } + }, + + + setIconOverride: function(iconOverrideHash) { + var iconClassesCopy; + var buttonName; + + if ($.isPlainObject(iconOverrideHash)) { + iconClassesCopy = $.extend({}, this.iconClasses); + + for (buttonName in iconOverrideHash) { + iconClassesCopy[buttonName] = this.applyIconOverridePrefix( + iconOverrideHash[buttonName] + ); + } + + this.iconClasses = iconClassesCopy; + } + else if (iconOverrideHash === false) { + this.iconClasses = {}; + } + }, + + + applyIconOverridePrefix: function(className) { + var prefix = this.iconOverridePrefix; + + if (prefix && className.indexOf(prefix) !== 0) { // if not already present + className = prefix + className; + } + + return className; + }, + + + getClass: function(key) { + return this.classes[key] || ''; + }, + + + getIconClass: function(buttonName) { + var className = this.iconClasses[buttonName]; + + if (className) { + return this.baseIconClass + ' ' + className; + } + + return ''; + }, + + + getCustomButtonIconClass: function(customButtonProps) { + var className; + + if (this.iconOverrideCustomButtonOption) { + className = customButtonProps[this.iconOverrideCustomButtonOption]; + + if (className) { + return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className); + } + } + + return ''; + } + +}); + +;; + +var StandardTheme = Theme.extend({ + + classes: { + widget: 'fc-unthemed', + widgetHeader: 'fc-widget-header', + widgetContent: 'fc-widget-content', + + buttonGroup: 'fc-button-group', + button: 'fc-button', + cornerLeft: 'fc-corner-left', + cornerRight: 'fc-corner-right', + stateDefault: 'fc-state-default', + stateActive: 'fc-state-active', + stateDisabled: 'fc-state-disabled', + stateHover: 'fc-state-hover', + stateDown: 'fc-state-down', + + popoverHeader: 'fc-widget-header', + popoverContent: 'fc-widget-content', + + // day grid + headerRow: 'fc-widget-header', + dayRow: 'fc-widget-content', + + // list view + listView: 'fc-widget-content' + }, + + baseIconClass: 'fc-icon', + iconClasses: { + close: 'fc-icon-x', + prev: 'fc-icon-left-single-arrow', + next: 'fc-icon-right-single-arrow', + prevYear: 'fc-icon-left-double-arrow', + nextYear: 'fc-icon-right-double-arrow' + }, + + iconOverrideOption: 'buttonIcons', + iconOverrideCustomButtonOption: 'icon', + iconOverridePrefix: 'fc-icon-' + +}); + +ThemeRegistry.register('standard', StandardTheme); + +;; + +var JqueryUiTheme = Theme.extend({ + + classes: { + widget: 'ui-widget', + widgetHeader: 'ui-widget-header', + widgetContent: 'ui-widget-content', + + buttonGroup: 'fc-button-group', + button: 'ui-button', + cornerLeft: 'ui-corner-left', + cornerRight: 'ui-corner-right', + stateDefault: 'ui-state-default', + stateActive: 'ui-state-active', + stateDisabled: 'ui-state-disabled', + stateHover: 'ui-state-hover', + stateDown: 'ui-state-down', + + today: 'ui-state-highlight', + + popoverHeader: 'ui-widget-header', + popoverContent: 'ui-widget-content', + + // day grid + headerRow: 'ui-widget-header', + dayRow: 'ui-widget-content', + + // list view + listView: 'ui-widget-content' + }, + + baseIconClass: 'ui-icon', + iconClasses: { + close: 'ui-icon-closethick', + prev: 'ui-icon-circle-triangle-w', + next: 'ui-icon-circle-triangle-e', + prevYear: 'ui-icon-seek-prev', + nextYear: 'ui-icon-seek-next' + }, + + iconOverrideOption: 'themeButtonIcons', + iconOverrideCustomButtonOption: 'themeIcon', + iconOverridePrefix: 'ui-icon-' + +}); + +ThemeRegistry.register('jquery-ui', JqueryUiTheme); + +;; + +var BootstrapTheme = Theme.extend({ + + classes: { + widget: 'fc-bootstrap3', + + tableGrid: 'table-bordered', // avoid `table` class b/c don't want margins. only border color + tableList: 'table table-striped', // `table` class creates bottom margin but who cares + + buttonGroup: 'btn-group', + button: 'btn btn-default', + stateActive: 'active', + stateDisabled: 'disabled', + + today: 'alert alert-info', // the plain `info` class requires `.table`, too much to ask + + popover: 'panel panel-default', + popoverHeader: 'panel-heading', + popoverContent: 'panel-body', + + // day grid + headerRow: 'panel-default', // avoid `panel` class b/c don't want margins/radius. only border color + dayRow: 'panel-default', // " + + // list view + listView: 'panel panel-default' + }, + + baseIconClass: 'glyphicon', + iconClasses: { + close: 'glyphicon-remove', + prev: 'glyphicon-chevron-left', + next: 'glyphicon-chevron-right', + prevYear: 'glyphicon-backward', + nextYear: 'glyphicon-forward' + }, + + iconOverrideOption: 'bootstrapGlyphicons', + iconOverrideCustomButtonOption: 'bootstrapGlyphicon', + iconOverridePrefix: 'glyphicon-' + +}); + +ThemeRegistry.register('bootstrap3', BootstrapTheme); + +;; + +var DayGridFillRenderer = FillRenderer.extend({ + + fillSegTag: 'td', // override the default tag name + + + attachSegEls: function(type, segs) { + var nodes = []; + var i, seg; + var skeletonEl; + + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + skeletonEl = this.renderFillRow(type, seg); + this.component.rowEls.eq(seg.row).append(skeletonEl); + nodes.push(skeletonEl[0]); + } + + return nodes; + }, + + + // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered. + renderFillRow: function(type, seg) { + var colCnt = this.component.colCnt; + var startCol = seg.leftCol; + var endCol = seg.rightCol + 1; + var className; + var skeletonEl; + var trEl; + + if (type === 'businessHours') { + className = 'bgevent'; + } + else { + className = type.toLowerCase(); + } + + skeletonEl = $( + '
' + + '
' + + '
' + ); + trEl = skeletonEl.find('tr'); + + if (startCol > 0) { + trEl.append(''); + } + + trEl.append( + seg.el.attr('colspan', endCol - startCol) + ); + + if (endCol < colCnt) { + trEl.append(''); + } + + this.component.bookendCells(trEl); + + return skeletonEl; + } +}); + +;; + +/* Event-rendering methods for the DayGrid class +----------------------------------------------------------------------------------------------------------------------*/ + +var DayGridEventRenderer = EventRenderer.extend({ + + dayGrid: null, + rowStructs: null, // an array of objects, each holding information about a row's foreground event-rendering + + + constructor: function(dayGrid) { + EventRenderer.apply(this, arguments); + + this.dayGrid = dayGrid; + }, + + + renderBgRanges: function(eventRanges) { + // don't render timed background events + eventRanges = $.grep(eventRanges, function(eventRange) { + return eventRange.eventDef.isAllDay(); + }); + + EventRenderer.prototype.renderBgRanges.call(this, eventRanges); + }, + + + // Renders the given foreground event segments onto the grid + renderFgSegs: function(segs) { + var rowStructs = this.rowStructs = this.renderSegRows(segs); + + // append to each row's content skeleton + this.dayGrid.rowEls.each(function(i, rowNode) { + $(rowNode).find('.fc-content-skeleton > table').append( + rowStructs[i].tbodyEl + ); + }); + }, + + + // Unrenders all currently rendered foreground event segments + unrenderFgSegs: function() { + var rowStructs = this.rowStructs || []; + var rowStruct; + + while ((rowStruct = rowStructs.pop())) { + rowStruct.tbodyEl.remove(); + } + + this.rowStructs = null; + }, + + + // Uses the given events array to generate elements that should be appended to each row's content skeleton. + // Returns an array of rowStruct objects (see the bottom of `renderSegRow`). + // PRECONDITION: each segment shoud already have a rendered and assigned `.el` + renderSegRows: function(segs) { + var rowStructs = []; + var segRows; + var row; + + segRows = this.groupSegRows(segs); // group into nested arrays + + // iterate each row of segment groupings + for (row = 0; row < segRows.length; row++) { + rowStructs.push( + this.renderSegRow(row, segRows[row]) + ); + } + + return rowStructs; + }, + + + // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains + // the segments. Returns object with a bunch of internal data about how the render was calculated. + // NOTE: modifies rowSegs + renderSegRow: function(row, rowSegs) { + var colCnt = this.dayGrid.colCnt; + var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels + var levelCnt = Math.max(1, segLevels.length); // ensure at least one level + var tbody = $(''); + var segMatrix = []; // lookup for which segments are rendered into which level+col cells + var cellMatrix = []; // lookup for all elements of the level+col matrix + var loneCellMatrix = []; // lookup for elements that only take up a single column + var i, levelSegs; + var col; + var tr; + var j, seg; + var td; + + // populates empty cells from the current column (`col`) to `endCol` + function emptyCellsUntil(endCol) { + while (col < endCol) { + // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell + td = (loneCellMatrix[i - 1] || [])[col]; + if (td) { + td.attr( + 'rowspan', + parseInt(td.attr('rowspan') || 1, 10) + 1 + ); + } + else { + td = $(''); + tr.append(td); + } + cellMatrix[i][col] = td; + loneCellMatrix[i][col] = td; + col++; + } + } + + for (i = 0; i < levelCnt; i++) { // iterate through all levels + levelSegs = segLevels[i]; + col = 0; + tr = $(''); + + segMatrix.push([]); + cellMatrix.push([]); + loneCellMatrix.push([]); + + // levelCnt might be 1 even though there are no actual levels. protect against this. + // this single empty row is useful for styling. + if (levelSegs) { + for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level + seg = levelSegs[j]; + + emptyCellsUntil(seg.leftCol); + + // create a container that occupies or more columns. append the event element. + td = $('').append(seg.el); + if (seg.leftCol != seg.rightCol) { + td.attr('colspan', seg.rightCol - seg.leftCol + 1); + } + else { // a single-column segment + loneCellMatrix[i][col] = td; + } + + while (col <= seg.rightCol) { + cellMatrix[i][col] = td; + segMatrix[i][col] = seg; + col++; + } + + tr.append(td); + } + } + + emptyCellsUntil(colCnt); // finish off the row + this.dayGrid.bookendCells(tr); + tbody.append(tr); + } + + return { // a "rowStruct" + row: row, // the row number + tbodyEl: tbody, + cellMatrix: cellMatrix, + segMatrix: segMatrix, + segLevels: segLevels, + segs: rowSegs + }; + }, + + + // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels. + // NOTE: modifies segs + buildSegLevels: function(segs) { + var levels = []; + var i, seg; + var j; + + // Give preference to elements with certain criteria, so they have + // a chance to be closer to the top. + this.sortEventSegs(segs); + + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + + // loop through levels, starting with the topmost, until the segment doesn't collide with other segments + for (j = 0; j < levels.length; j++) { + if (!isDaySegCollision(seg, levels[j])) { + break; + } + } + // `j` now holds the desired subrow index + seg.level = j; + + // create new level array if needed and append segment + (levels[j] || (levels[j] = [])).push(seg); + } + + // order segments left-to-right. very important if calendar is RTL + for (j = 0; j < levels.length; j++) { + levels[j].sort(compareDaySegCols); + } + + return levels; + }, + + + // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row + groupSegRows: function(segs) { + var segRows = []; + var i; + + for (i = 0; i < this.dayGrid.rowCnt; i++) { + segRows.push([]); + } + + for (i = 0; i < segs.length; i++) { + segRows[segs[i].row].push(segs[i]); + } + + return segRows; + }, + + + // Computes a default event time formatting string if `timeFormat` is not explicitly defined + computeEventTimeFormat: function() { + return this.opt('extraSmallTimeFormat'); // like "6p" or "6:30p" + }, + + + // Computes a default `displayEventEnd` value if one is not expliclty defined + computeDisplayEventEnd: function() { + return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day + }, + + + // Builds the HTML to be used for the default element for an individual segment + fgSegHtml: function(seg, disableResizing) { + var view = this.view; + var eventDef = seg.footprint.eventDef; + var isAllDay = seg.footprint.componentFootprint.isAllDay; + var isDraggable = view.isEventDefDraggable(eventDef); + var isResizableFromStart = !disableResizing && isAllDay && + seg.isStart && view.isEventDefResizableFromStart(eventDef); + var isResizableFromEnd = !disableResizing && isAllDay && + seg.isEnd && view.isEventDefResizableFromEnd(eventDef); + var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd); + var skinCss = cssToStr(this.getSkinCss(eventDef)); + var timeHtml = ''; + var timeText; + var titleHtml; + + classes.unshift('fc-day-grid-event', 'fc-h-event'); + + // Only display a timed events time if it is the starting segment + if (seg.isStart) { + timeText = this.getTimeText(seg.footprint); + if (timeText) { + timeHtml = '' + htmlEscape(timeText) + ''; + } + } + + titleHtml = + '' + + (htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height + ''; + + return '' + + '
' + + (this.isRTL ? + titleHtml + ' ' + timeHtml : // put a natural space in between + timeHtml + ' ' + titleHtml // + ) + + '
' + + (isResizableFromStart ? + '
' : + '' + ) + + (isResizableFromEnd ? + '
' : + '' + ) + + ''; + } + +}); + + +// Computes whether two segments' columns collide. They are assumed to be in the same row. +function isDaySegCollision(seg, otherSegs) { + var i, otherSeg; + + for (i = 0; i < otherSegs.length; i++) { + otherSeg = otherSegs[i]; + + if ( + otherSeg.leftCol <= seg.rightCol && + otherSeg.rightCol >= seg.leftCol + ) { + return true; + } + } + + return false; +} + + +// A cmp function for determining the leftmost event +function compareDaySegCols(a, b) { + return a.leftCol - b.leftCol; +} + +;; + +var DayGridHelperRenderer = HelperRenderer.extend({ + + + // Renders a mock "helper" event. `sourceSeg` is the associated internal segment object. It can be null. + renderSegs: function(segs, sourceSeg) { + var helperNodes = []; + var rowStructs; + + // TODO: not good to call eventRenderer this way + rowStructs = this.eventRenderer.renderSegRows(segs); + + // inject each new event skeleton into each associated row + this.component.rowEls.each(function(row, rowNode) { + var rowEl = $(rowNode); // the .fc-row + var skeletonEl = $('
'); // will be absolutely positioned + var skeletonTopEl; + var skeletonTop; + + // If there is an original segment, match the top position. Otherwise, put it at the row's top level + if (sourceSeg && sourceSeg.row === row) { + skeletonTop = sourceSeg.el.position().top; + } + else { + skeletonTopEl = rowEl.find('.fc-content-skeleton tbody'); + if (!skeletonTopEl.length) { // when no events + skeletonTopEl = rowEl.find('.fc-content-skeleton table'); + } + + skeletonTop = skeletonTopEl.position().top; + } + + skeletonEl.css('top', skeletonTop) + .find('table') + .append(rowStructs[row].tbodyEl); + + rowEl.append(skeletonEl); + helperNodes.push(skeletonEl[0]); + }); + + return $(helperNodes); // must return the elements rendered + } + +}); + +;; + +/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week. +----------------------------------------------------------------------------------------------------------------------*/ + +var DayGrid = FC.DayGrid = InteractiveDateComponent.extend(StandardInteractionsMixin, DayTableMixin, { + + eventRendererClass: DayGridEventRenderer, + businessHourRendererClass: BusinessHourRenderer, + helperRendererClass: DayGridHelperRenderer, + fillRendererClass: DayGridFillRenderer, + + view: null, // TODO: make more general and/or remove + helperRenderer: null, + + cellWeekNumbersVisible: false, // display week numbers in day cell? + + bottomCoordPadding: 0, // hack for extending the hit area for the last row of the coordinate grid + + headContainerEl: null, // div that hold's the date header + rowEls: null, // set of fake row elements + cellEls: null, // set of whole-day elements comprising the row's background + + rowCoordCache: null, + colCoordCache: null, + + // isRigid determines whether the individual rows should ignore the contents and be a constant height. + // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient. + isRigid: false, + + hasAllDayBusinessHours: true, + + + constructor: function(view) { + this.view = view; // do first, for opt calls during initialization + + InteractiveDateComponent.call(this); + }, + + + // Slices up the given span (unzoned start/end with other misc data) into an array of segments + componentFootprintToSegs: function(componentFootprint) { + var segs = this.sliceRangeByRow(componentFootprint.unzonedRange); + var i, seg; + + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + + if (this.isRTL) { + seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex; + seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex; + } + else { + seg.leftCol = seg.firstRowDayIndex; + seg.rightCol = seg.lastRowDayIndex; + } + } + + return segs; + }, + + + /* Date Rendering + ------------------------------------------------------------------------------------------------------------------*/ + + + renderDates: function(dateProfile) { + this.dateProfile = dateProfile; + this.updateDayTable(); + this.renderGrid(); + }, + + + unrenderDates: function() { + this.removeSegPopover(); + }, + + + // Renders the rows and columns into the component's `this.el`, which should already be assigned. + renderGrid: function() { + var view = this.view; + var rowCnt = this.rowCnt; + var colCnt = this.colCnt; + var html = ''; + var row; + var col; + + if (this.headContainerEl) { + this.headContainerEl.html(this.renderHeadHtml()); + } + + for (row = 0; row < rowCnt; row++) { + html += this.renderDayRowHtml(row, this.isRigid); + } + this.el.html(html); + + this.rowEls = this.el.find('.fc-row'); + this.cellEls = this.el.find('.fc-day, .fc-disabled-day'); + + this.rowCoordCache = new CoordCache({ + els: this.rowEls, + isVertical: true + }); + this.colCoordCache = new CoordCache({ + els: this.cellEls.slice(0, this.colCnt), // only the first row + isHorizontal: true + }); + + // trigger dayRender with each cell's element + for (row = 0; row < rowCnt; row++) { + for (col = 0; col < colCnt; col++) { + this.publiclyTrigger('dayRender', { + context: view, + args: [ + this.getCellDate(row, col), + this.getCellEl(row, col), + view + ] + }); + } + } + }, + + + // Generates the HTML for a single row, which is a div that wraps a table. + // `row` is the row number. + renderDayRowHtml: function(row, isRigid) { + var theme = this.view.calendar.theme; + var classes = [ 'fc-row', 'fc-week', theme.getClass('dayRow') ]; + + if (isRigid) { + classes.push('fc-rigid'); + } + + return '' + + '
' + + '
' + + '
' + + this.renderBgTrHtml(row) + + '
' + + '
' + + '
' + + '' + + (this.getIsNumbersVisible() ? + '' + + this.renderNumberTrHtml(row) + + '' : + '' + ) + + '
' + + '
' + + '
'; + }, + + + getIsNumbersVisible: function() { + return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible; + }, + + + getIsDayNumbersVisible: function() { + return this.rowCnt > 1; + }, + + + /* Grid Number Rendering + ------------------------------------------------------------------------------------------------------------------*/ + + + renderNumberTrHtml: function(row) { + return '' + + '' + + (this.isRTL ? '' : this.renderNumberIntroHtml(row)) + + this.renderNumberCellsHtml(row) + + (this.isRTL ? this.renderNumberIntroHtml(row) : '') + + ''; + }, + + + renderNumberIntroHtml: function(row) { + return this.renderIntroHtml(); + }, + + + renderNumberCellsHtml: function(row) { + var htmls = []; + var col, date; + + for (col = 0; col < this.colCnt; col++) { + date = this.getCellDate(row, col); + htmls.push(this.renderNumberCellHtml(date)); + } + + return htmls.join(''); + }, + + + // Generates the HTML for the s of the "number" row in the DayGrid's content skeleton. + // The number row will only exist if either day numbers or week numbers are turned on. + renderNumberCellHtml: function(date) { + var view = this.view; + var html = ''; + var isDateValid = this.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow. + var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid; + var classes; + var weekCalcFirstDoW; + + if (!isDayNumberVisible && !this.cellWeekNumbersVisible) { + // no numbers in day cell (week number must be along the side) + return ''; // will create an empty space above events :( + } + + classes = this.getDayClasses(date); + classes.unshift('fc-day-top'); + + if (this.cellWeekNumbersVisible) { + // To determine the day of week number change under ISO, we cannot + // rely on moment.js methods such as firstDayOfWeek() or weekday(), + // because they rely on the locale's dow (possibly overridden by + // our firstDay option), which may not be Monday. We cannot change + // dow, because that would affect the calendar start day as well. + if (date._locale._fullCalendar_weekCalc === 'ISO') { + weekCalcFirstDoW = 1; // Monday by ISO 8601 definition + } + else { + weekCalcFirstDoW = date._locale.firstDayOfWeek(); + } + } + + html += ''; + + if (this.cellWeekNumbersVisible && (date.day() == weekCalcFirstDoW)) { + html += view.buildGotoAnchorHtml( + { date: date, type: 'week' }, + { 'class': 'fc-week-number' }, + date.format('w') // inner HTML + ); + } + + if (isDayNumberVisible) { + html += view.buildGotoAnchorHtml( + date, + { 'class': 'fc-day-number' }, + date.date() // inner HTML + ); + } + + html += ''; + + return html; + }, + + + /* Hit System + ------------------------------------------------------------------------------------------------------------------*/ + + + prepareHits: function() { + this.colCoordCache.build(); + this.rowCoordCache.build(); + this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack + }, + + + releaseHits: function() { + this.colCoordCache.clear(); + this.rowCoordCache.clear(); + }, + + + queryHit: function(leftOffset, topOffset) { + if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) { + var col = this.colCoordCache.getHorizontalIndex(leftOffset); + var row = this.rowCoordCache.getVerticalIndex(topOffset); + + if (row != null && col != null) { + return this.getCellHit(row, col); + } + } + }, + + + getHitFootprint: function(hit) { + var range = this.getCellRange(hit.row, hit.col); + + return new ComponentFootprint( + new UnzonedRange(range.start, range.end), + true // all-day? + ); + }, + + + getHitEl: function(hit) { + return this.getCellEl(hit.row, hit.col); + }, + + + /* Cell System + ------------------------------------------------------------------------------------------------------------------*/ + // FYI: the first column is the leftmost column, regardless of date + + + getCellHit: function(row, col) { + return { + row: row, + col: col, + component: this, // needed unfortunately :( + left: this.colCoordCache.getLeftOffset(col), + right: this.colCoordCache.getRightOffset(col), + top: this.rowCoordCache.getTopOffset(row), + bottom: this.rowCoordCache.getBottomOffset(row) + }; + }, + + + getCellEl: function(row, col) { + return this.cellEls.eq(row * this.colCnt + col); + }, + + + /* Event Rendering + ------------------------------------------------------------------------------------------------------------------*/ + + + // Unrenders all events currently rendered on the grid + unrenderEvents: function() { + this.removeSegPopover(); // removes the "more.." events popover + + InteractiveDateComponent.prototype.unrenderEvents.apply(this, arguments); + }, + + + // Retrieves all rendered segment objects currently rendered on the grid + getOwnEventSegs: function() { + return InteractiveDateComponent.prototype.getOwnEventSegs.apply(this, arguments) // get the segments from the super-method + .concat(this.popoverSegs || []); // append the segments from the "more..." popover + }, + + + /* Event Drag Visualization + ------------------------------------------------------------------------------------------------------------------*/ + + + // Renders a visual indication of an event or external element being dragged. + // `eventLocation` has zoned start and end (optional) + renderDrag: function(eventFootprints, seg, isTouch) { + var i; + + for (i = 0; i < eventFootprints.length; i++) { + this.renderHighlight(eventFootprints[i].componentFootprint); + } + + // render drags from OTHER components as helpers + if (eventFootprints.length && seg && seg.component !== this) { + this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch); + + return true; // signal helpers rendered + } + }, + + + // Unrenders any visual indication of a hovering event + unrenderDrag: function(seg) { + this.unrenderHighlight(); + this.helperRenderer.unrender(); + }, + + + /* Event Resize Visualization + ------------------------------------------------------------------------------------------------------------------*/ + + + // Renders a visual indication of an event being resized + renderEventResize: function(eventFootprints, seg, isTouch) { + var i; + + for (i = 0; i < eventFootprints.length; i++) { + this.renderHighlight(eventFootprints[i].componentFootprint); + } + + this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch); + }, + + + // Unrenders a visual indication of an event being resized + unrenderEventResize: function(seg) { + this.unrenderHighlight(); + this.helperRenderer.unrender(); + } + +}); + +;; + +/* Methods relate to limiting the number events for a given day on a DayGrid +----------------------------------------------------------------------------------------------------------------------*/ +// NOTE: all the segs being passed around in here are foreground segs + +DayGrid.mixin({ + + segPopover: null, // the Popover that holds events that can't fit in a cell. null when not visible + popoverSegs: null, // an array of segment objects that the segPopover holds. null when not visible + + + removeSegPopover: function() { + if (this.segPopover) { + this.segPopover.hide(); // in handler, will call segPopover's removeElement + } + }, + + + // Limits the number of "levels" (vertically stacking layers of events) for each row of the grid. + // `levelLimit` can be false (don't limit), a number, or true (should be computed). + limitRows: function(levelLimit) { + var rowStructs = this.eventRenderer.rowStructs || []; + var row; // row # + var rowLevelLimit; + + for (row = 0; row < rowStructs.length; row++) { + this.unlimitRow(row); + + if (!levelLimit) { + rowLevelLimit = false; + } + else if (typeof levelLimit === 'number') { + rowLevelLimit = levelLimit; + } + else { + rowLevelLimit = this.computeRowLevelLimit(row); + } + + if (rowLevelLimit !== false) { + this.limitRow(row, rowLevelLimit); + } + } + }, + + + // Computes the number of levels a row will accomodate without going outside its bounds. + // Assumes the row is "rigid" (maintains a constant height regardless of what is inside). + // `row` is the row number. + computeRowLevelLimit: function(row) { + var rowEl = this.rowEls.eq(row); // the containing "fake" row div + var rowHeight = rowEl.height(); // TODO: cache somehow? + var trEls = this.eventRenderer.rowStructs[row].tbodyEl.children(); + var i, trEl; + var trHeight; + + function iterInnerHeights(i, childNode) { + trHeight = Math.max(trHeight, $(childNode).outerHeight()); + } + + // Reveal one level at a time and stop when we find one out of bounds + for (i = 0; i < trEls.length; i++) { + trEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal) + + // with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell, + // so instead, find the tallest inner content element. + trHeight = 0; + trEl.find('> td > :first-child').each(iterInnerHeights); + + if (trEl.position().top + trHeight > rowHeight) { + return i; + } + } + + return false; // should not limit at all + }, + + + // Limits the given grid row to the maximum number of levels and injects "more" links if necessary. + // `row` is the row number. + // `levelLimit` is a number for the maximum (inclusive) number of levels allowed. + limitRow: function(row, levelLimit) { + var _this = this; + var rowStruct = this.eventRenderer.rowStructs[row]; + var moreNodes = []; // array of "more" links and DOM nodes + var col = 0; // col #, left-to-right (not chronologically) + var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right + var cellMatrix; // a matrix (by level, then column) of all jQuery elements in the row + var limitedNodes; // array of temporarily hidden level and segment DOM nodes + var i, seg; + var segsBelow; // array of segment objects below `seg` in the current `col` + var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies + var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column) + var td, rowspan; + var segMoreNodes; // array of "more" cells that will stand-in for the current seg's cell + var j; + var moreTd, moreWrap, moreLink; + + // Iterates through empty level cells and places "more" links inside if need be + function emptyCellsUntil(endCol) { // goes from current `col` to `endCol` + while (col < endCol) { + segsBelow = _this.getCellSegs(row, col, levelLimit); + if (segsBelow.length) { + td = cellMatrix[levelLimit - 1][col]; + moreLink = _this.renderMoreLink(row, col, segsBelow); + moreWrap = $('
').append(moreLink); + td.append(moreWrap); + moreNodes.push(moreWrap[0]); + } + col++; + } + } + + if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit? + levelSegs = rowStruct.segLevels[levelLimit - 1]; + cellMatrix = rowStruct.cellMatrix; + + limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level elements past the limit + .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array + + // iterate though segments in the last allowable level + for (i = 0; i < levelSegs.length; i++) { + seg = levelSegs[i]; + emptyCellsUntil(seg.leftCol); // process empty cells before the segment + + // determine *all* segments below `seg` that occupy the same columns + colSegsBelow = []; + totalSegsBelow = 0; + while (col <= seg.rightCol) { + segsBelow = this.getCellSegs(row, col, levelLimit); + colSegsBelow.push(segsBelow); + totalSegsBelow += segsBelow.length; + col++; + } + + if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links? + td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell + rowspan = td.attr('rowspan') || 1; + segMoreNodes = []; + + // make a replacement for each column the segment occupies. will be one for each colspan + for (j = 0; j < colSegsBelow.length; j++) { + moreTd = $('').attr('rowspan', rowspan); + segsBelow = colSegsBelow[j]; + moreLink = this.renderMoreLink( + row, + seg.leftCol + j, + [ seg ].concat(segsBelow) // count seg as hidden too + ); + moreWrap = $('
').append(moreLink); + moreTd.append(moreWrap); + segMoreNodes.push(moreTd[0]); + moreNodes.push(moreTd[0]); + } + + td.addClass('fc-limited').after($(segMoreNodes)); // hide original and inject replacements + limitedNodes.push(td[0]); + } + } + + emptyCellsUntil(this.colCnt); // finish off the level + rowStruct.moreEls = $(moreNodes); // for easy undoing later + rowStruct.limitedEls = $(limitedNodes); // for easy undoing later + } + }, + + + // Reveals all levels and removes all "more"-related elements for a grid's row. + // `row` is a row number. + unlimitRow: function(row) { + var rowStruct = this.eventRenderer.rowStructs[row]; + + if (rowStruct.moreEls) { + rowStruct.moreEls.remove(); + rowStruct.moreEls = null; + } + + if (rowStruct.limitedEls) { + rowStruct.limitedEls.removeClass('fc-limited'); + rowStruct.limitedEls = null; + } + }, + + + // Renders an element that represents hidden event element for a cell. + // Responsible for attaching click handler as well. + renderMoreLink: function(row, col, hiddenSegs) { + var _this = this; + var view = this.view; + + return $('') + .text( + this.getMoreLinkText(hiddenSegs.length) + ) + .on('click', function(ev) { + var clickOption = _this.opt('eventLimitClick'); + var date = _this.getCellDate(row, col); + var moreEl = $(this); + var dayEl = _this.getCellEl(row, col); + var allSegs = _this.getCellSegs(row, col); + + // rescope the segments to be within the cell's date + var reslicedAllSegs = _this.resliceDaySegs(allSegs, date); + var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date); + + if (typeof clickOption === 'function') { + // the returned value can be an atomic option + clickOption = _this.publiclyTrigger('eventLimitClick', { + context: view, + args: [ + { + date: date.clone(), + dayEl: dayEl, + moreEl: moreEl, + segs: reslicedAllSegs, + hiddenSegs: reslicedHiddenSegs + }, + ev, + view + ] + }); + } + + if (clickOption === 'popover') { + _this.showSegPopover(row, col, moreEl, reslicedAllSegs); + } + else if (typeof clickOption === 'string') { // a view name + view.calendar.zoomTo(date, clickOption); + } + }); + }, + + + // Reveals the popover that displays all events within a cell + showSegPopover: function(row, col, moreLink, segs) { + var _this = this; + var view = this.view; + var moreWrap = moreLink.parent(); // the
wrapper around the + var topEl; // the element we want to match the top coordinate of + var options; + + if (this.rowCnt == 1) { + topEl = view.el; // will cause the popover to cover any sort of header + } + else { + topEl = this.rowEls.eq(row); // will align with top of row + } + + options = { + className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'), + content: this.renderSegPopoverContent(row, col, segs), + parentEl: view.el, // attach to root of view. guarantees outside of scrollbars. + top: topEl.offset().top, + autoHide: true, // when the user clicks elsewhere, hide the popover + viewportConstrain: this.opt('popoverViewportConstrain'), + hide: function() { + // kill everything when the popover is hidden + // notify events to be removed + if (_this.popoverSegs) { + _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs); + } + _this.segPopover.removeElement(); + _this.segPopover = null; + _this.popoverSegs = null; + } + }; + + // Determine horizontal coordinate. + // We use the moreWrap instead of the to avoid border confusion. + if (this.isRTL) { + options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border + } + else { + options.left = moreWrap.offset().left - 1; // -1 to be over cell border + } + + this.segPopover = new Popover(options); + this.segPopover.show(); + + // the popover doesn't live within the grid's container element, and thus won't get the event + // delegated-handlers for free. attach event-related handlers to the popover. + this.bindAllSegHandlersToEl(this.segPopover.el); + + this.triggerAfterEventSegsRendered(segs); + }, + + + // Builds the inner DOM contents of the segment popover + renderSegPopoverContent: function(row, col, segs) { + var view = this.view; + var theme = view.calendar.theme; + var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat')); + var content = $( + '
' + + '' + + '' + + htmlEscape(title) + + '' + + '
' + + '
' + + '
' + + '
' + + '
' + ); + var segContainer = content.find('.fc-event-container'); + var i; + + // render each seg's `el` and only return the visible segs + segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true + this.popoverSegs = segs; + + for (i = 0; i < segs.length; i++) { + + // because segments in the popover are not part of a grid coordinate system, provide a hint to any + // grids that want to do drag-n-drop about which cell it came from + this.hitsNeeded(); + segs[i].hit = this.getCellHit(row, col); + this.hitsNotNeeded(); + + segContainer.append(segs[i].el); + } + + return content; + }, + + + // Given the events within an array of segment objects, reslice them to be in a single day + resliceDaySegs: function(segs, dayDate) { + var dayStart = dayDate.clone(); + var dayEnd = dayStart.clone().add(1, 'days'); + var dayRange = new UnzonedRange(dayStart, dayEnd); + var newSegs = []; + var i, seg; + var slicedRange; + + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange); + + if (slicedRange) { + newSegs.push( + $.extend({}, seg, { + footprint: new EventFootprint( + new ComponentFootprint( + slicedRange, + seg.footprint.componentFootprint.isAllDay + ), + seg.footprint.eventDef, + seg.footprint.eventInstance + ), + isStart: seg.isStart && slicedRange.isStart, + isEnd: seg.isEnd && slicedRange.isEnd + }) + ); + } + } + + // force an order because eventsToSegs doesn't guarantee one + // TODO: research if still needed + this.eventRenderer.sortEventSegs(newSegs); + + return newSegs; + }, + + + // Generates the text that should be inside a "more" link, given the number of events it represents + getMoreLinkText: function(num) { + var opt = this.opt('eventLimitText'); + + if (typeof opt === 'function') { + return opt(num); + } + else { + return '+' + num + ' ' + opt; + } + }, + + + // Returns segments within a given cell. + // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs. + getCellSegs: function(row, col, startLevel) { + var segMatrix = this.eventRenderer.rowStructs[row].segMatrix; + var level = startLevel || 0; + var segs = []; + var seg; + + while (level < segMatrix.length) { + seg = segMatrix[level][col]; + if (seg) { + segs.push(seg); + } + level++; + } + + return segs; + } + +}); + +;; + +/* An abstract class for the "basic" views, as well as month view. Renders one or more rows of day cells. +----------------------------------------------------------------------------------------------------------------------*/ +// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting. +// It is responsible for managing width/height. + +var BasicView = FC.BasicView = View.extend({ + + scroller: null, + + dayGridClass: DayGrid, // class the dayGrid will be instantiated from (overridable by subclasses) + dayGrid: null, // the main subcomponent that does most of the heavy lifting + + weekNumberWidth: null, // width of all the week-number cells running down the side + + + constructor: function() { + View.apply(this, arguments); + + this.dayGrid = this.instantiateDayGrid(); + this.dayGrid.isRigid = this.hasRigidRows(); + + if (this.opt('weekNumbers')) { + if (this.opt('weekNumbersWithinDays')) { + this.dayGrid.cellWeekNumbersVisible = true; + this.dayGrid.colWeekNumbersVisible = false; + } + else { + this.dayGrid.cellWeekNumbersVisible = false; + this.dayGrid.colWeekNumbersVisible = true; + }; + } + + this.addChild(this.dayGrid); + + this.scroller = new Scroller({ + overflowX: 'hidden', + overflowY: 'auto' + }); + }, + + + // Generates the DayGrid object this view needs. Draws from this.dayGridClass + instantiateDayGrid: function() { + // generate a subclass on the fly with BasicView-specific behavior + // TODO: cache this subclass + var subclass = this.dayGridClass.extend(basicDayGridMethods); + + return new subclass(this); + }, + + + // Computes the date range that will be rendered. + buildRenderRange: function(currentUnzonedRange, currentRangeUnit, isRangeAllDay) { + var renderUnzonedRange = View.prototype.buildRenderRange.apply(this, arguments); // an UnzonedRange + var start = this.calendar.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay); + var end = this.calendar.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay); + + // year and month views should be aligned with weeks. this is already done for week + if (/^(year|month)$/.test(currentRangeUnit)) { + start.startOf('week'); + + // make end-of-week if not already + if (end.weekday()) { + end.add(1, 'week').startOf('week'); // exclusively move backwards + } + } + + return new UnzonedRange(start, end); + }, + + + executeDateRender: function(dateProfile) { + this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit); + + View.prototype.executeDateRender.apply(this, arguments); + }, + + + renderSkeleton: function() { + var dayGridContainerEl; + var dayGridEl; + + this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml()); + + this.scroller.render(); + + dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container'); + dayGridEl = $('
').appendTo(dayGridContainerEl); + + this.el.find('.fc-body > tr > td').append(dayGridContainerEl); + + this.dayGrid.headContainerEl = this.el.find('.fc-head-container'); + this.dayGrid.setElement(dayGridEl); + }, + + + unrenderSkeleton: function() { + this.dayGrid.removeElement(); + this.scroller.destroy(); + }, + + + // Builds the HTML skeleton for the view. + // The day-grid component will render inside of a container defined by this HTML. + renderSkeletonHtml: function() { + var theme = this.calendar.theme; + + return '' + + '' + + (this.opt('columnHeader') ? + '' + + '' + + '' + + '' + + '' : + '' + ) + + '' + + '' + + '' + + '' + + '' + + '
 
'; + }, + + + // Generates an HTML attribute string for setting the width of the week number column, if it is known + weekNumberStyleAttr: function() { + if (this.weekNumberWidth !== null) { + return 'style="width:' + this.weekNumberWidth + 'px"'; + } + return ''; + }, + + + // Determines whether each row should have a constant height + hasRigidRows: function() { + var eventLimit = this.opt('eventLimit'); + + return eventLimit && typeof eventLimit !== 'number'; + }, + + + /* Dimensions + ------------------------------------------------------------------------------------------------------------------*/ + + + // Refreshes the horizontal dimensions of the view + updateSize: function(totalHeight, isAuto, isResize) { + var eventLimit = this.opt('eventLimit'); + var headRowEl = this.dayGrid.headContainerEl.find('.fc-row'); + var scrollerHeight; + var scrollbarWidths; + + // hack to give the view some height prior to dayGrid's columns being rendered + // TODO: separate setting height from scroller VS dayGrid. + if (!this.dayGrid.rowEls) { + if (!isAuto) { + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.scroller.setHeight(scrollerHeight); + } + return; + } + + View.prototype.updateSize.apply(this, arguments); + + if (this.dayGrid.colWeekNumbersVisible) { + // Make sure all week number cells running down the side have the same width. + // Record the width for cells created later. + this.weekNumberWidth = matchCellWidths( + this.el.find('.fc-week-number') + ); + } + + // reset all heights to be natural + this.scroller.clear(); + uncompensateScroll(headRowEl); + + this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed + + // is the event limit a constant level number? + if (eventLimit && typeof eventLimit === 'number') { + this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after + } + + // distribute the height to the rows + // (totalHeight is a "recommended" value if isAuto) + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.setGridHeight(scrollerHeight, isAuto); + + // is the event limit dynamically calculated? + if (eventLimit && typeof eventLimit !== 'number') { + this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set + } + + if (!isAuto) { // should we force dimensions of the scroll container? + + this.scroller.setHeight(scrollerHeight); + scrollbarWidths = this.scroller.getScrollbarWidths(); + + if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars? + + compensateScroll(headRowEl, scrollbarWidths); + + // doing the scrollbar compensation might have created text overflow which created more height. redo + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.scroller.setHeight(scrollerHeight); + } + + // guarantees the same scrollbar widths + this.scroller.lockOverflow(scrollbarWidths); + } + }, + + + // given a desired total height of the view, returns what the height of the scroller should be + computeScrollerHeight: function(totalHeight) { + return totalHeight - + subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }, + + + // Sets the height of just the DayGrid component in this view + setGridHeight: function(height, isAuto) { + if (isAuto) { + undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding + } + else { + distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows + } + }, + + + /* Scroll + ------------------------------------------------------------------------------------------------------------------*/ + + + computeInitialDateScroll: function() { + return { top: 0 }; + }, + + + queryDateScroll: function() { + return { top: this.scroller.getScrollTop() }; + }, + + + applyDateScroll: function(scroll) { + if (scroll.top !== undefined) { + this.scroller.setScrollTop(scroll.top); + } + } + +}); + + +// Methods that will customize the rendering behavior of the BasicView's dayGrid +var basicDayGridMethods = { // not relly methods anymore + + + colWeekNumbersVisible: false, // display week numbers along the side? + + + // Generates the HTML that will go before the day-of week header cells + renderHeadIntroHtml: function() { + var view = this.view; + + if (this.colWeekNumbersVisible) { + return '' + + '' + + '' + // needed for matchCellWidths + htmlEscape(this.opt('weekNumberTitle')) + + '' + + ''; + } + + return ''; + }, + + + // Generates the HTML that will go before content-skeleton cells that display the day/week numbers + renderNumberIntroHtml: function(row) { + var view = this.view; + var weekStart = this.getCellDate(row, 0); + + if (this.colWeekNumbersVisible) { + return '' + + '' + + view.buildGotoAnchorHtml( // aside from link, important for matchCellWidths + { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, + weekStart.format('w') // inner HTML + ) + + ''; + } + + return ''; + }, + + + // Generates the HTML that goes before the day bg cells for each day-row + renderBgIntroHtml: function() { + var view = this.view; + + if (this.colWeekNumbersVisible) { + return ''; + } + + return ''; + }, + + + // Generates the HTML that goes before every other type of row generated by DayGrid. + // Affects helper-skeleton and highlight-skeleton rows. + renderIntroHtml: function() { + var view = this.view; + + if (this.colWeekNumbersVisible) { + return ''; + } + + return ''; + }, + + + getIsNumbersVisible: function() { + return DayGrid.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible; + } + +}; + +;; + +/* A month view with day cells running in rows (one-per-week) and columns +----------------------------------------------------------------------------------------------------------------------*/ + +var MonthView = FC.MonthView = BasicView.extend({ + + + // Computes the date range that will be rendered. + buildRenderRange: function(currentUnzonedRange, currentRangeUnit, isRangeAllDay) { + var renderUnzonedRange = BasicView.prototype.buildRenderRange.apply(this, arguments); + var start = this.calendar.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay); + var end = this.calendar.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay); + var rowCnt; + + // ensure 6 weeks + if (this.isFixedWeeks()) { + rowCnt = Math.ceil( // could be partial weeks due to hiddenDays + end.diff(start, 'weeks', true) // dontRound=true + ); + end.add(6 - rowCnt, 'weeks'); + } + + return new UnzonedRange(start, end); + }, + + + // Overrides the default BasicView behavior to have special multi-week auto-height logic + setGridHeight: function(height, isAuto) { + + // if auto, make the height of each row the height that it would be if there were 6 weeks + if (isAuto) { + height *= this.rowCnt / 6; + } + + distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows + }, + + + isFixedWeeks: function() { + return this.opt('fixedWeekCount'); + }, + + + isDateInOtherMonth: function(date, dateProfile) { + return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize + } + +}); + +;; + +fcViews.basic = { + 'class': BasicView +}; + +fcViews.basicDay = { + type: 'basic', + duration: { days: 1 } +}; + +fcViews.basicWeek = { + type: 'basic', + duration: { weeks: 1 } +}; + +fcViews.month = { + 'class': MonthView, + duration: { months: 1 }, // important for prev/next + defaults: { + fixedWeekCount: true + } +}; +;; + +var TimeGridFillRenderer = FillRenderer.extend({ + + + attachSegEls: function(type, segs) { + var timeGrid = this.component; + var containerEls; + + // TODO: more efficient lookup + if (type === 'bgEvent') { + containerEls = timeGrid.bgContainerEls; + } + else if (type === 'businessHours') { + containerEls = timeGrid.businessContainerEls; + } + else if (type === 'highlight') { + containerEls = timeGrid.highlightContainerEls; + } + + timeGrid.updateSegVerticals(segs); + timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls); + + return segs.map(function(seg) { + return seg.el[0]; + }); + } + +}); + +;; + +/* +Only handles foreground segs. +Does not own rendering. Use for low-level util methods by TimeGrid. +*/ +var TimeGridEventRenderer = EventRenderer.extend({ + + timeGrid: null, + + + constructor: function(timeGrid) { + EventRenderer.apply(this, arguments); + + this.timeGrid = timeGrid; + }, + + + renderFgSegs: function(segs) { + this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls); + }, + + + // Given an array of foreground segments, render a DOM element for each, computes position, + // and attaches to the column inner-container elements. + renderFgSegsIntoContainers: function(segs, containerEls) { + var segsByCol; + var col; + + segsByCol = this.timeGrid.groupSegsByCol(segs); + + for (col = 0; col < this.timeGrid.colCnt; col++) { + this.updateFgSegCoords(segsByCol[col]); + } + + this.timeGrid.attachSegsByCol(segsByCol, containerEls); + }, + + + unrenderFgSegs: function() { + if (this.fgSegs) { // hack + this.fgSegs.forEach(function(seg) { + seg.el.remove(); + }); + } + }, + + + // Computes a default event time formatting string if `timeFormat` is not explicitly defined + computeEventTimeFormat: function() { + return this.opt('noMeridiemTimeFormat'); // like "6:30" (no AM/PM) + }, + + + // Computes a default `displayEventEnd` value if one is not expliclty defined + computeDisplayEventEnd: function() { + return true; + }, + + + // Renders the HTML for a single event segment's default rendering + fgSegHtml: function(seg, disableResizing) { + var view = this.view; + var calendar = view.calendar; + var componentFootprint = seg.footprint.componentFootprint; + var isAllDay = componentFootprint.isAllDay; + var eventDef = seg.footprint.eventDef; + var isDraggable = view.isEventDefDraggable(eventDef); + var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef); + var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef); + var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd); + var skinCss = cssToStr(this.getSkinCss(eventDef)); + var timeText; + var fullTimeText; // more verbose time text. for the print stylesheet + var startTimeText; // just the start time text + + classes.unshift('fc-time-grid-event', 'fc-v-event'); + + // if the event appears to span more than one day... + if (view.isMultiDayRange(componentFootprint.unzonedRange)) { + // Don't display time text on segments that run entirely through a day. + // That would appear as midnight-midnight and would look dumb. + // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am) + if (seg.isStart || seg.isEnd) { + var zonedStart = calendar.msToMoment(seg.startMs); + var zonedEnd = calendar.msToMoment(seg.endMs); + timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay); + fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT'); + startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false + } + } + else { + // Display the normal time text for the *event's* times + timeText = this.getTimeText(seg.footprint); + fullTimeText = this.getTimeText(seg.footprint, 'LT'); + startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false + } + + return '
' + + '
' + + (timeText ? + '
' + + '' + htmlEscape(timeText) + '' + + '
' : + '' + ) + + (eventDef.title ? + '
' + + htmlEscape(eventDef.title) + + '
' : + '' + ) + + '
' + + '
' + + /* TODO: write CSS for this + (isResizableFromStart ? + '
' : + '' + ) + + */ + (isResizableFromEnd ? + '
' : + '' + ) + + ''; + }, + + + // Given segments that are assumed to all live in the *same column*, + // compute their verical/horizontal coordinates and assign to their elements. + updateFgSegCoords: function(segs) { + this.timeGrid.computeSegVerticals(segs); // horizontals relies on this + this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array + this.timeGrid.assignSegVerticals(segs); + this.assignFgSegHorizontals(segs); + }, + + + // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each. + // NOTE: Also reorders the given array by date! + computeFgSegHorizontals: function(segs) { + var levels; + var level0; + var i; + + this.sortEventSegs(segs); // order by certain criteria + levels = buildSlotSegLevels(segs); + computeForwardSlotSegs(levels); + + if ((level0 = levels[0])) { + + for (i = 0; i < level0.length; i++) { + computeSlotSegPressures(level0[i]); + } + + for (i = 0; i < level0.length; i++) { + this.computeFgSegForwardBack(level0[i], 0, 0); + } + } + }, + + + // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range + // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and + // seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left. + // + // The segment might be part of a "series", which means consecutive segments with the same pressure + // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of + // segments behind this one in the current series, and `seriesBackwardCoord` is the starting + // coordinate of the first segment in the series. + computeFgSegForwardBack: function(seg, seriesBackwardPressure, seriesBackwardCoord) { + var forwardSegs = seg.forwardSegs; + var i; + + if (seg.forwardCoord === undefined) { // not already computed + + if (!forwardSegs.length) { + + // if there are no forward segments, this segment should butt up against the edge + seg.forwardCoord = 1; + } + else { + + // sort highest pressure first + this.sortForwardSegs(forwardSegs); + + // this segment's forwardCoord will be calculated from the backwardCoord of the + // highest-pressure forward segment. + this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord); + seg.forwardCoord = forwardSegs[0].backwardCoord; + } + + // calculate the backwardCoord from the forwardCoord. consider the series + seg.backwardCoord = seg.forwardCoord - + (seg.forwardCoord - seriesBackwardCoord) / // available width for series + (seriesBackwardPressure + 1); // # of segments in the series + + // use this segment's coordinates to computed the coordinates of the less-pressurized + // forward segments + for (i=0; i seg2.top && seg1.top < seg2.bottom; +} + +;; + +var TimeGridHelperRenderer = HelperRenderer.extend({ + + + renderSegs: function(segs, sourceSeg) { + var helperNodes = []; + var i, seg; + var sourceEl; + + // TODO: not good to call eventRenderer this way + this.eventRenderer.renderFgSegsIntoContainers( + segs, + this.component.helperContainerEls + ); + + // Try to make the segment that is in the same row as sourceSeg look the same + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + + if (sourceSeg && sourceSeg.col === seg.col) { + sourceEl = sourceSeg.el; + seg.el.css({ + left: sourceEl.css('left'), + right: sourceEl.css('right'), + 'margin-left': sourceEl.css('margin-left'), + 'margin-right': sourceEl.css('margin-right') + }); + } + + helperNodes.push(seg.el[0]); + } + + return $(helperNodes); // must return the elements rendered + } + +}); + +;; + +/* A component that renders one or more columns of vertical time slots +----------------------------------------------------------------------------------------------------------------------*/ +// We mixin DayTable, even though there is only a single row of days + +var TimeGrid = FC.TimeGrid = InteractiveDateComponent.extend(StandardInteractionsMixin, DayTableMixin, { + + eventRendererClass: TimeGridEventRenderer, + businessHourRendererClass: BusinessHourRenderer, + helperRendererClass: TimeGridHelperRenderer, + fillRendererClass: TimeGridFillRenderer, + + view: null, // TODO: make more general and/or remove + helperRenderer: null, + + dayRanges: null, // UnzonedRange[], of start-end of each day + slotDuration: null, // duration of a "slot", a distinct time segment on given day, visualized by lines + snapDuration: null, // granularity of time for dragging and selecting + snapsPerSlot: null, + labelFormat: null, // formatting string for times running along vertical axis + labelInterval: null, // duration of how often a label should be displayed for a slot + + headContainerEl: null, // div that hold's the date header + colEls: null, // cells elements in the day-row background + slatContainerEl: null, // div that wraps all the slat rows + slatEls: null, // elements running horizontally across all columns + nowIndicatorEls: null, + + colCoordCache: null, + slatCoordCache: null, + + bottomRuleEl: null, // hidden by default + contentSkeletonEl: null, + colContainerEls: null, // containers for each column + + // inner-containers for each column where different types of segs live + fgContainerEls: null, + bgContainerEls: null, + helperContainerEls: null, + highlightContainerEls: null, + businessContainerEls: null, + + // arrays of different types of displayed segments + helperSegs: null, + highlightSegs: null, + businessSegs: null, + + + constructor: function(view) { + this.view = view; // do first, for opt calls during initialization + + InteractiveDateComponent.call(this); // call the super-constructor + + this.processOptions(); + }, + + + // Slices up the given span (unzoned start/end with other misc data) into an array of segments + componentFootprintToSegs: function(componentFootprint) { + var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange); + var i; + + for (i = 0; i < segs.length; i++) { + if (this.isRTL) { + segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex; + } + else { + segs[i].col = segs[i].dayIndex; + } + } + + return segs; + }, + + + /* Date Handling + ------------------------------------------------------------------------------------------------------------------*/ + + + sliceRangeByTimes: function(unzonedRange) { + var segs = []; + var segRange; + var dayIndex; + + for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) { + + segRange = unzonedRange.intersect(this.dayRanges[dayIndex]); + + if (segRange) { + segs.push({ + startMs: segRange.startMs, + endMs: segRange.endMs, + isStart: segRange.isStart, + isEnd: segRange.isEnd, + dayIndex: dayIndex + }); + } + } + + return segs; + }, + + + /* Options + ------------------------------------------------------------------------------------------------------------------*/ + + + // Parses various options into properties of this object + processOptions: function() { + var slotDuration = this.opt('slotDuration'); + var snapDuration = this.opt('snapDuration'); + var input; + + slotDuration = moment.duration(slotDuration); + snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration; + + this.slotDuration = slotDuration; + this.snapDuration = snapDuration; + this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple? + + // might be an array value (for TimelineView). + // if so, getting the most granular entry (the last one probably). + input = this.opt('slotLabelFormat'); + if ($.isArray(input)) { + input = input[input.length - 1]; + } + + this.labelFormat = input || + this.opt('smallTimeFormat'); // the computed default + + input = this.opt('slotLabelInterval'); + this.labelInterval = input ? + moment.duration(input) : + this.computeLabelInterval(slotDuration); + }, + + + // Computes an automatic value for slotLabelInterval + computeLabelInterval: function(slotDuration) { + var i; + var labelInterval; + var slotsPerLabel; + + // find the smallest stock label interval that results in more than one slots-per-label + for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) { + labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]); + slotsPerLabel = divideDurationByDuration(labelInterval, slotDuration); + if (isInt(slotsPerLabel) && slotsPerLabel > 1) { + return labelInterval; + } + } + + return moment.duration(slotDuration); // fall back. clone + }, + + + /* Date Rendering + ------------------------------------------------------------------------------------------------------------------*/ + + + renderDates: function(dateProfile) { + this.dateProfile = dateProfile; + this.updateDayTable(); + this.renderSlats(); + this.renderColumns(); + }, + + + unrenderDates: function() { + //this.unrenderSlats(); // don't need this because repeated .html() calls clear + this.unrenderColumns(); + }, + + + renderSkeleton: function() { + var theme = this.view.calendar.theme; + + this.el.html( + '
' + + '
' + + '' + ); + + this.bottomRuleEl = this.el.find('hr'); + }, + + + renderSlats: function() { + var theme = this.view.calendar.theme; + + this.slatContainerEl = this.el.find('> .fc-slats') + .html( // avoids needing ::unrenderSlats() + '' + + this.renderSlatRowHtml() + + '
' + ); + + this.slatEls = this.slatContainerEl.find('tr'); + + this.slatCoordCache = new CoordCache({ + els: this.slatEls, + isVertical: true + }); + }, + + + // Generates the HTML for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL. + renderSlatRowHtml: function() { + var view = this.view; + var calendar = view.calendar; + var theme = calendar.theme; + var isRTL = this.isRTL; + var dateProfile = this.dateProfile; + var html = ''; + var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations + var slotIterator = moment.duration(0); + var slotDate; // will be on the view's first day, but we only care about its time + var isLabeled; + var axisHtml; + + // Calculate the time for each slot + while (slotTime < dateProfile.maxTime) { + slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime); + isLabeled = isInt(divideDurationByDuration(slotIterator, this.labelInterval)); + + axisHtml = + '' + + (isLabeled ? + '' + // for matchCellWidths + htmlEscape(slotDate.format(this.labelFormat)) + + '' : + '' + ) + + ''; + + html += + '' + + (!isRTL ? axisHtml : '') + + '' + + (isRTL ? axisHtml : '') + + ""; + + slotTime.add(this.slotDuration); + slotIterator.add(this.slotDuration); + } + + return html; + }, + + + renderColumns: function() { + var dateProfile = this.dateProfile; + var theme = this.view.calendar.theme; + + this.dayRanges = this.dayDates.map(function(dayDate) { + return new UnzonedRange( + dayDate.clone().add(dateProfile.minTime), + dayDate.clone().add(dateProfile.maxTime) + ); + }); + + if (this.headContainerEl) { + this.headContainerEl.html(this.renderHeadHtml()); + } + + this.el.find('> .fc-bg').html( + '' + + this.renderBgTrHtml(0) + // row=0 + '
' + ); + + this.colEls = this.el.find('.fc-day, .fc-disabled-day'); + + this.colCoordCache = new CoordCache({ + els: this.colEls, + isHorizontal: true + }); + + this.renderContentSkeleton(); + }, + + + unrenderColumns: function() { + this.unrenderContentSkeleton(); + }, + + + /* Content Skeleton + ------------------------------------------------------------------------------------------------------------------*/ + + + // Renders the DOM that the view's content will live in + renderContentSkeleton: function() { + var cellHtml = ''; + var i; + var skeletonEl; + + for (i = 0; i < this.colCnt; i++) { + cellHtml += + '' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + ''; + } + + skeletonEl = this.contentSkeletonEl = $( + '
' + + '' + + '' + cellHtml + '' + + '
' + + '
' + ); + + this.colContainerEls = skeletonEl.find('.fc-content-col'); + this.helperContainerEls = skeletonEl.find('.fc-helper-container'); + this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)'); + this.bgContainerEls = skeletonEl.find('.fc-bgevent-container'); + this.highlightContainerEls = skeletonEl.find('.fc-highlight-container'); + this.businessContainerEls = skeletonEl.find('.fc-business-container'); + + this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level + this.el.append(skeletonEl); + }, + + + unrenderContentSkeleton: function() { + this.contentSkeletonEl.remove(); + this.contentSkeletonEl = null; + this.colContainerEls = null; + this.helperContainerEls = null; + this.fgContainerEls = null; + this.bgContainerEls = null; + this.highlightContainerEls = null; + this.businessContainerEls = null; + }, + + + // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col + groupSegsByCol: function(segs) { + var segsByCol = []; + var i; + + for (i = 0; i < this.colCnt; i++) { + segsByCol.push([]); + } + + for (i = 0; i < segs.length; i++) { + segsByCol[segs[i].col].push(segs[i]); + } + + return segsByCol; + }, + + + // Given segments grouped by column, insert the segments' elements into a parallel array of container + // elements, each living within a column. + attachSegsByCol: function(segsByCol, containerEls) { + var col; + var segs; + var i; + + for (col = 0; col < this.colCnt; col++) { // iterate each column grouping + segs = segsByCol[col]; + + for (i = 0; i < segs.length; i++) { + containerEls.eq(col).append(segs[i].el); + } + } + }, + + + /* Now Indicator + ------------------------------------------------------------------------------------------------------------------*/ + + + getNowIndicatorUnit: function() { + return 'minute'; // will refresh on the minute + }, + + + renderNowIndicator: function(date) { + // seg system might be overkill, but it handles scenario where line needs to be rendered + // more than once because of columns with the same date (resources columns for example) + var segs = this.componentFootprintToSegs( + new ComponentFootprint( + new UnzonedRange(date, date.valueOf() + 1), // protect against null range + false // all-day + ) + ); + var top = this.computeDateTop(date, date); + var nodes = []; + var i; + + // render lines within the columns + for (i = 0; i < segs.length; i++) { + nodes.push($('
') + .css('top', top) + .appendTo(this.colContainerEls.eq(segs[i].col))[0]); + } + + // render an arrow over the axis + if (segs.length > 0) { // is the current time in view? + nodes.push($('
') + .css('top', top) + .appendTo(this.el.find('.fc-content-skeleton'))[0]); + } + + this.nowIndicatorEls = $(nodes); + }, + + + unrenderNowIndicator: function() { + if (this.nowIndicatorEls) { + this.nowIndicatorEls.remove(); + this.nowIndicatorEls = null; + } + }, + + + /* Coordinates + ------------------------------------------------------------------------------------------------------------------*/ + + + updateSize: function(totalHeight, isAuto, isResize) { + InteractiveDateComponent.prototype.updateSize.apply(this, arguments); + + this.slatCoordCache.build(); + + if (isResize) { + this.updateSegVerticals( + [].concat(this.eventRenderer.getSegs(), this.businessSegs || []) + ); + } + }, + + + getTotalSlatHeight: function() { + return this.slatContainerEl.outerHeight(); + }, + + + // Computes the top coordinate, relative to the bounds of the grid, of the given date. + // `ms` can be a millisecond UTC time OR a UTC moment. + // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight. + computeDateTop: function(ms, startOfDayDate) { + return this.computeTimeTop( + moment.duration( + ms - startOfDayDate.clone().stripTime() + ) + ); + }, + + + // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration). + computeTimeTop: function(time) { + var len = this.slatEls.length; + var dateProfile = this.dateProfile; + var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered + var slatIndex; + var slatRemainder; + + // compute a floating-point number for how many slats should be progressed through. + // from 0 to number of slats (inclusive) + // constrained because minTime/maxTime might be customized. + slatCoverage = Math.max(0, slatCoverage); + slatCoverage = Math.min(len, slatCoverage); + + // an integer index of the furthest whole slat + // from 0 to number slats (*exclusive*, so len-1) + slatIndex = Math.floor(slatCoverage); + slatIndex = Math.min(slatIndex, len - 1); + + // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition. + // could be 1.0 if slatCoverage is covering *all* the slots + slatRemainder = slatCoverage - slatIndex; + + return this.slatCoordCache.getTopPosition(slatIndex) + + this.slatCoordCache.getHeight(slatIndex) * slatRemainder; + }, + + + // Refreshes the CSS top/bottom coordinates for each segment element. + // Works when called after initial render, after a window resize/zoom for example. + updateSegVerticals: function(segs) { + this.computeSegVerticals(segs); + this.assignSegVerticals(segs); + }, + + + // For each segment in an array, computes and assigns its top and bottom properties + computeSegVerticals: function(segs) { + var eventMinHeight = this.opt('agendaEventMinHeight'); + var i, seg; + var dayDate; + + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + dayDate = this.dayDates[seg.dayIndex]; + + seg.top = this.computeDateTop(seg.startMs, dayDate); + seg.bottom = Math.max( + seg.top + eventMinHeight, + this.computeDateTop(seg.endMs, dayDate) + ); + } + }, + + + // Given segments that already have their top/bottom properties computed, applies those values to + // the segments' elements. + assignSegVerticals: function(segs) { + var i, seg; + + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + seg.el.css(this.generateSegVerticalCss(seg)); + } + }, + + + // Generates an object with CSS properties for the top/bottom coordinates of a segment element + generateSegVerticalCss: function(seg) { + return { + top: seg.top, + bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container + }; + }, + + + /* Hit System + ------------------------------------------------------------------------------------------------------------------*/ + + + prepareHits: function() { + this.colCoordCache.build(); + this.slatCoordCache.build(); + }, + + + releaseHits: function() { + this.colCoordCache.clear(); + // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop + }, + + + queryHit: function(leftOffset, topOffset) { + var snapsPerSlot = this.snapsPerSlot; + var colCoordCache = this.colCoordCache; + var slatCoordCache = this.slatCoordCache; + + if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) { + var colIndex = colCoordCache.getHorizontalIndex(leftOffset); + var slatIndex = slatCoordCache.getVerticalIndex(topOffset); + + if (colIndex != null && slatIndex != null) { + var slatTop = slatCoordCache.getTopOffset(slatIndex); + var slatHeight = slatCoordCache.getHeight(slatIndex); + var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1 + var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat + var snapIndex = slatIndex * snapsPerSlot + localSnapIndex; + var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight; + var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight; + + return { + col: colIndex, + snap: snapIndex, + component: this, // needed unfortunately :( + left: colCoordCache.getLeftOffset(colIndex), + right: colCoordCache.getRightOffset(colIndex), + top: snapTop, + bottom: snapBottom + }; + } + } + }, + + + getHitFootprint: function(hit) { + var start = this.getCellDate(0, hit.col); // row=0 + var time = this.computeSnapTime(hit.snap); // pass in the snap-index + var end; + + start.time(time); + end = start.clone().add(this.snapDuration); + + return new ComponentFootprint( + new UnzonedRange(start, end), + false // all-day? + ); + }, + + + // Given a row number of the grid, representing a "snap", returns a time (Duration) from its start-of-day + computeSnapTime: function(snapIndex) { + return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex); + }, + + + getHitEl: function(hit) { + return this.colEls.eq(hit.col); + }, + + + /* Event Drag Visualization + ------------------------------------------------------------------------------------------------------------------*/ + + + // Renders a visual indication of an event being dragged over the specified date(s). + // A returned value of `true` signals that a mock "helper" event has been rendered. + renderDrag: function(eventFootprints, seg, isTouch) { + var i; + + if (seg) { // if there is event information for this drag, render a helper event + + if (eventFootprints.length) { + this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch); + + // signal that a helper has been rendered + return true; + } + } + else { // otherwise, just render a highlight + + for (i = 0; i < eventFootprints.length; i++) { + this.renderHighlight(eventFootprints[i].componentFootprint); + } + } + }, + + + // Unrenders any visual indication of an event being dragged + unrenderDrag: function(seg) { + this.unrenderHighlight(); + this.helperRenderer.unrender(); + }, + + + /* Event Resize Visualization + ------------------------------------------------------------------------------------------------------------------*/ + + + // Renders a visual indication of an event being resized + renderEventResize: function(eventFootprints, seg, isTouch) { + this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch); + }, + + + // Unrenders any visual indication of an event being resized + unrenderEventResize: function(seg) { + this.helperRenderer.unrender(); + }, + + + /* Selection + ------------------------------------------------------------------------------------------------------------------*/ + + + // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight. + renderSelectionFootprint: function(componentFootprint) { + if (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered + this.helperRenderer.renderComponentFootprint(componentFootprint); + } + else { + this.renderHighlight(componentFootprint); + } + }, + + + // Unrenders any visual indication of a selection + unrenderSelection: function() { + this.helperRenderer.unrender(); + this.unrenderHighlight(); + } + +}); + +;; + +/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically. +----------------------------------------------------------------------------------------------------------------------*/ +// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on). +// Responsible for managing width/height. + +var AgendaView = FC.AgendaView = View.extend({ + + scroller: null, + + timeGridClass: TimeGrid, // class used to instantiate the timeGrid. subclasses can override + timeGrid: null, // the main time-grid subcomponent of this view + + dayGridClass: DayGrid, // class used to instantiate the dayGrid. subclasses can override + dayGrid: null, // the "all-day" subcomponent. if all-day is turned off, this will be null + + axisWidth: null, // the width of the time axis running down the side + + // indicates that minTime/maxTime affects rendering + usesMinMaxTime: true, + + + constructor: function() { + View.apply(this, arguments); + + this.timeGrid = this.instantiateTimeGrid(); + this.addChild(this.timeGrid); + + if (this.opt('allDaySlot')) { // should we display the "all-day" area? + this.dayGrid = this.instantiateDayGrid(); // the all-day subcomponent of this view + this.addChild(this.dayGrid); + } + + this.scroller = new Scroller({ + overflowX: 'hidden', + overflowY: 'auto' + }); + }, + + + // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass + instantiateTimeGrid: function() { + var subclass = this.timeGridClass.extend(agendaTimeGridMethods); + + return new subclass(this); + }, + + + // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass + instantiateDayGrid: function() { + var subclass = this.dayGridClass.extend(agendaDayGridMethods); + + return new subclass(this); + }, + + + /* Rendering + ------------------------------------------------------------------------------------------------------------------*/ + + + renderSkeleton: function() { + var timeGridWrapEl; + var timeGridEl; + + this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml()); + + this.scroller.render(); + + timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container'); + timeGridEl = $('
').appendTo(timeGridWrapEl); + + this.el.find('.fc-body > tr > td').append(timeGridWrapEl); + + this.timeGrid.headContainerEl = this.el.find('.fc-head-container'); + this.timeGrid.setElement(timeGridEl); + + if (this.dayGrid) { + this.dayGrid.setElement(this.el.find('.fc-day-grid')); + + // have the day-grid extend it's coordinate area over the
dividing the two grids + this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight(); + } + }, + + + unrenderSkeleton: function() { + this.timeGrid.removeElement(); + + if (this.dayGrid) { + this.dayGrid.removeElement(); + } + + this.scroller.destroy(); + }, + + + // Builds the HTML skeleton for the view. + // The day-grid and time-grid components will render inside containers defined by this HTML. + renderSkeletonHtml: function() { + var theme = this.calendar.theme; + + return '' + + '' + + (this.opt('columnHeader') ? + '' + + '' + + '' + + '' + + '' : + '' + ) + + '' + + '' + + '' + + '' + + '' + + '
 
' + + (this.dayGrid ? + '
' + + '
' : + '' + ) + + '
'; + }, + + + // Generates an HTML attribute string for setting the width of the axis, if it is known + axisStyleAttr: function() { + if (this.axisWidth !== null) { + return 'style="width:' + this.axisWidth + 'px"'; + } + return ''; + }, + + + /* Now Indicator + ------------------------------------------------------------------------------------------------------------------*/ + + + getNowIndicatorUnit: function() { + return this.timeGrid.getNowIndicatorUnit(); + }, + + + /* Dimensions + ------------------------------------------------------------------------------------------------------------------*/ + + + // Adjusts the vertical dimensions of the view to the specified values + updateSize: function(totalHeight, isAuto, isResize) { + var eventLimit; + var scrollerHeight; + var scrollbarWidths; + + View.prototype.updateSize.apply(this, arguments); + + // make all axis cells line up, and record the width so newly created axis cells will have it + this.axisWidth = matchCellWidths(this.el.find('.fc-axis')); + + // hack to give the view some height prior to timeGrid's columns being rendered + // TODO: separate setting height from scroller VS timeGrid. + if (!this.timeGrid.colEls) { + if (!isAuto) { + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.scroller.setHeight(scrollerHeight); + } + return; + } + + // set of fake row elements that must compensate when scroller has scrollbars + var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)'); + + // reset all dimensions back to the original state + this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this
is necessary + this.scroller.clear(); // sets height to 'auto' and clears overflow + uncompensateScroll(noScrollRowEls); + + // limit number of events in the all-day area + if (this.dayGrid) { + this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed + + eventLimit = this.opt('eventLimit'); + if (eventLimit && typeof eventLimit !== 'number') { + eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure "auto" goes to a real number + } + if (eventLimit) { + this.dayGrid.limitRows(eventLimit); + } + } + + if (!isAuto) { // should we force dimensions of the scroll container? + + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.scroller.setHeight(scrollerHeight); + scrollbarWidths = this.scroller.getScrollbarWidths(); + + if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars? + + // make the all-day and header rows lines up + compensateScroll(noScrollRowEls, scrollbarWidths); + + // the scrollbar compensation might have changed text flow, which might affect height, so recalculate + // and reapply the desired height to the scroller. + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.scroller.setHeight(scrollerHeight); + } + + // guarantees the same scrollbar widths + this.scroller.lockOverflow(scrollbarWidths); + + // if there's any space below the slats, show the horizontal rule. + // this won't cause any new overflow, because lockOverflow already called. + if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) { + this.timeGrid.bottomRuleEl.show(); + } + } + }, + + + // given a desired total height of the view, returns what the height of the scroller should be + computeScrollerHeight: function(totalHeight) { + return totalHeight - + subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }, + + + /* Scroll + ------------------------------------------------------------------------------------------------------------------*/ + + + // Computes the initial pre-configured scroll state prior to allowing the user to change it + computeInitialDateScroll: function() { + var scrollTime = moment.duration(this.opt('scrollTime')); + var top = this.timeGrid.computeTimeTop(scrollTime); + + // zoom can give weird floating-point values. rather scroll a little bit further + top = Math.ceil(top); + + if (top) { + top++; // to overcome top border that slots beyond the first have. looks better + } + + return { top: top }; + }, + + + queryDateScroll: function() { + return { top: this.scroller.getScrollTop() }; + }, + + + applyDateScroll: function(scroll) { + if (scroll.top !== undefined) { + this.scroller.setScrollTop(scroll.top); + } + }, + + + /* Hit Areas + ------------------------------------------------------------------------------------------------------------------*/ + // forward all hit-related method calls to the grids (dayGrid might not be defined) + + + getHitFootprint: function(hit) { + // TODO: hit.component is set as a hack to identify where the hit came from + return hit.component.getHitFootprint(hit); + }, + + + getHitEl: function(hit) { + // TODO: hit.component is set as a hack to identify where the hit came from + return hit.component.getHitEl(hit); + }, + + + /* Event Rendering + ------------------------------------------------------------------------------------------------------------------*/ + + + executeEventRender: function(eventsPayload) { + var dayEventsPayload = {}; + var timedEventsPayload = {}; + var id, eventInstanceGroup; + + // separate the events into all-day and timed + for (id in eventsPayload) { + eventInstanceGroup = eventsPayload[id]; + + if (eventInstanceGroup.getEventDef().isAllDay()) { + dayEventsPayload[id] = eventInstanceGroup; + } + else { + timedEventsPayload[id] = eventInstanceGroup; + } + } + + this.timeGrid.executeEventRender(timedEventsPayload); + + if (this.dayGrid) { + this.dayGrid.executeEventRender(dayEventsPayload); + } + }, + + + /* Dragging/Resizing Routing + ------------------------------------------------------------------------------------------------------------------*/ + + + // A returned value of `true` signals that a mock "helper" event has been rendered. + renderDrag: function(eventFootprints, seg, isTouch) { + var groups = groupEventFootprintsByAllDay(eventFootprints); + var renderedHelper = false; + + renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch); + + if (this.dayGrid) { + renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper; + } + + return renderedHelper; + }, + + + renderEventResize: function(eventFootprints, seg, isTouch) { + var groups = groupEventFootprintsByAllDay(eventFootprints); + + this.timeGrid.renderEventResize(groups.timed, seg, isTouch); + + if (this.dayGrid) { + this.dayGrid.renderEventResize(groups.allDay, seg, isTouch); + } + }, + + + /* Selection + ------------------------------------------------------------------------------------------------------------------*/ + + + // Renders a visual indication of a selection + renderSelectionFootprint: function(componentFootprint) { + if (!componentFootprint.isAllDay) { + this.timeGrid.renderSelectionFootprint(componentFootprint); + } + else if (this.dayGrid) { + this.dayGrid.renderSelectionFootprint(componentFootprint); + } + } + +}); + + +// Methods that will customize the rendering behavior of the AgendaView's timeGrid +// TODO: move into TimeGrid +var agendaTimeGridMethods = { + + + // Generates the HTML that will go before the day-of week header cells + renderHeadIntroHtml: function() { + var view = this.view; + var calendar = view.calendar; + var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true); + var weekText; + + if (this.opt('weekNumbers')) { + weekText = weekStart.format(this.opt('smallWeekFormat')); + + return '' + + '' + + view.buildGotoAnchorHtml( // aside from link, important for matchCellWidths + { date: weekStart, type: 'week', forceOff: this.colCnt > 1 }, + htmlEscape(weekText) // inner HTML + ) + + ''; + } + else { + return ''; + } + }, + + + // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column. + renderBgIntroHtml: function() { + var view = this.view; + + return ''; + }, + + + // Generates the HTML that goes before all other types of cells. + // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid. + renderIntroHtml: function() { + var view = this.view; + + return ''; + } + +}; + + +// Methods that will customize the rendering behavior of the AgendaView's dayGrid +var agendaDayGridMethods = { + + + // Generates the HTML that goes before the all-day cells + renderBgIntroHtml: function() { + var view = this.view; + + return '' + + '' + + '' + // needed for matchCellWidths + view.getAllDayHtml() + + '' + + ''; + }, + + + // Generates the HTML that goes before all other types of cells. + // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid. + renderIntroHtml: function() { + var view = this.view; + + return ''; + } + +}; + + +function groupEventFootprintsByAllDay(eventFootprints) { + var allDay = []; + var timed = []; + var i; + + for (i = 0; i < eventFootprints.length; i++) { + if (eventFootprints[i].componentFootprint.isAllDay) { + allDay.push(eventFootprints[i]); + } + else { + timed.push(eventFootprints[i]); + } + } + + return { allDay: allDay, timed: timed }; +} + +;; + +var AGENDA_ALL_DAY_EVENT_LIMIT = 5; + +// potential nice values for the slot-duration and interval-duration +// from largest to smallest +var AGENDA_STOCK_SUB_DURATIONS = [ + { hours: 1 }, + { minutes: 30 }, + { minutes: 15 }, + { seconds: 30 }, + { seconds: 15 } +]; + +fcViews.agenda = { + 'class': AgendaView, + defaults: { + allDaySlot: true, + slotDuration: '00:30:00', + slotEventOverlap: true // a bad name. confused with overlap/constraint system + } +}; + +fcViews.agendaDay = { + type: 'agenda', + duration: { days: 1 } +}; + +fcViews.agendaWeek = { + type: 'agenda', + duration: { weeks: 1 } +}; +;; + +/* +Responsible for the scroller, and forwarding event-related actions into the "grid". +*/ +var ListView = FC.ListView = View.extend({ + + segSelector: '.fc-list-item', // which elements accept event actions + //eventRendererClass is below + //eventPointingClass is below + + scroller: null, + contentEl: null, + + dayDates: null, // localized ambig-time moment array + dayRanges: null, // UnzonedRange[], of start-end of each day + + + constructor: function() { + View.apply(this, arguments); + + this.scroller = new Scroller({ + overflowX: 'hidden', + overflowY: 'auto' + }); + }, + + + renderSkeleton: function() { + this.el.addClass( + 'fc-list-view ' + + this.calendar.theme.getClass('listView') + ); + + this.scroller.render(); + this.scroller.el.appendTo(this.el); + + this.contentEl = this.scroller.scrollEl; // shortcut + }, + + + unrenderSkeleton: function() { + this.scroller.destroy(); // will remove the Grid too + }, + + + updateSize: function(totalHeight, isAuto, isResize) { + this.scroller.setHeight(this.computeScrollerHeight(totalHeight)); + }, + + + computeScrollerHeight: function(totalHeight) { + return totalHeight - + subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }, + + + renderDates: function(dateProfile) { + var calendar = this.calendar; + var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true); + var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true); + var dayDates = []; + var dayRanges = []; + + while (dayStart < viewEnd) { + + dayDates.push(dayStart.clone()); + + dayRanges.push(new UnzonedRange( + dayStart, + dayStart.clone().add(1, 'day') + )); + + dayStart.add(1, 'day'); + } + + this.dayDates = dayDates; + this.dayRanges = dayRanges; + + // all real rendering happens in EventRenderer + }, + + + // slices by day + componentFootprintToSegs: function(footprint) { + var dayRanges = this.dayRanges; + var dayIndex; + var segRange; + var seg; + var segs = []; + + for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) { + segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]); + + if (segRange) { + seg = { + startMs: segRange.startMs, + endMs: segRange.endMs, + isStart: segRange.isStart, + isEnd: segRange.isEnd, + dayIndex: dayIndex + }; + + segs.push(seg); + + // detect when footprint won't go fully into the next day, + // and mutate the latest seg to the be the end. + if ( + !seg.isEnd && !footprint.isAllDay && + dayIndex + 1 < dayRanges.length && + footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold + ) { + seg.endMs = footprint.unzonedRange.endMs; + seg.isEnd = true; + break; + } + } + } + + return segs; + }, + + + eventRendererClass: EventRenderer.extend({ + + + renderFgSegs: function(segs) { + if (!segs.length) { + this.component.renderEmptyMessage(); + } + else { + this.component.renderSegList(segs); + } + }, + + + // generates the HTML for a single event row + fgSegHtml: function(seg) { + var view = this.view; + var calendar = view.calendar; + var theme = calendar.theme; + var eventFootprint = seg.footprint; + var eventDef = eventFootprint.eventDef; + var componentFootprint = eventFootprint.componentFootprint; + var url = eventDef.url; + var classes = [ 'fc-list-item' ].concat(this.getClasses(eventDef)); + var bgColor = this.getBgColor(eventDef); + var timeHtml; + + if (componentFootprint.isAllDay) { + timeHtml = view.getAllDayHtml(); + } + // if the event appears to span more than one day + else if (view.isMultiDayRange(componentFootprint.unzonedRange)) { + if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day + timeHtml = htmlEscape(this._getTimeText( + calendar.msToMoment(seg.startMs), + calendar.msToMoment(seg.endMs), + componentFootprint.isAllDay + )); + } + else { // inner segment that lasts the whole day + timeHtml = view.getAllDayHtml(); + } + } + else { + // Display the normal time text for the *event's* times + timeHtml = htmlEscape(this.getTimeText(eventFootprint)); + } + + if (url) { + classes.push('fc-has-url'); + } + + return '' + + (this.displayEventTime ? + '' + + (timeHtml || '') + + '' : + '') + + '' + + '' + + '' + + '' + + '' + + htmlEscape(eventDef.title || '') + + '' + + '' + + ''; + }, + + + // like "4:00am" + computeEventTimeFormat: function() { + return this.opt('mediumTimeFormat'); + } + + }), + + + eventPointingClass: EventPointing.extend({ + + // for events with a url, the whole should be clickable, + // but it's impossible to wrap with an tag. simulate this. + handleClick: function(seg, ev) { + var url; + + EventPointing.prototype.handleClick.apply(this, arguments); // super. might prevent the default action + + // not clicking on or within an with an href + if (!$(ev.target).closest('a[href]').length) { + url = seg.footprint.eventDef.url; + + if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler + window.location.href = url; // simulate link click + } + } + } + + }), + + + renderEmptyMessage: function() { + this.contentEl.html( + '
' + // TODO: try less wraps + '
' + + '
' + + htmlEscape(this.opt('noEventsMessage')) + + '
' + + '
' + + '
' + ); + }, + + + // render the event segments in the view + renderSegList: function(allSegs) { + var segsByDay = this.groupSegsByDay(allSegs); // sparse array + var dayIndex; + var daySegs; + var i; + var tableEl = $('
'); + var tbodyEl = tableEl.find('tbody'); + + for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) { + daySegs = segsByDay[dayIndex]; + + if (daySegs) { // sparse array, so might be undefined + + // append a day header + tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex])); + + this.eventRenderer.sortEventSegs(daySegs); + + for (i = 0; i < daySegs.length; i++) { + tbodyEl.append(daySegs[i].el); // append event row + } + } + } + + this.contentEl.empty().append(tableEl); + }, + + + // Returns a sparse array of arrays, segs grouped by their dayIndex + groupSegsByDay: function(segs) { + var segsByDay = []; // sparse array + var i, seg; + + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = [])) + .push(seg); + } + + return segsByDay; + }, + + + // generates the HTML for the day headers that live amongst the event rows + dayHeaderHtml: function(dayDate) { + var mainFormat = this.opt('listDayFormat'); + var altFormat = this.opt('listDayAltFormat'); + + return '' + + '' + + (mainFormat ? + this.buildGotoAnchorHtml( + dayDate, + { 'class': 'fc-list-heading-main' }, + htmlEscape(dayDate.format(mainFormat)) // inner HTML + ) : + '') + + (altFormat ? + this.buildGotoAnchorHtml( + dayDate, + { 'class': 'fc-list-heading-alt' }, + htmlEscape(dayDate.format(altFormat)) // inner HTML + ) : + '') + + '' + + ''; + } + +}); + +;; + +fcViews.list = { + 'class': ListView, + buttonTextKey: 'list', // what to lookup in locale files + defaults: { + buttonText: 'list', // text to display for English + listDayFormat: 'LL', // like "January 1, 2016" + noEventsMessage: 'No events to display' + } +}; + +fcViews.listDay = { + type: 'list', + duration: { days: 1 }, + defaults: { + listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header + } +}; + +fcViews.listWeek = { + type: 'list', + duration: { weeks: 1 }, + defaults: { + listDayFormat: 'dddd', // day-of-week is more important + listDayAltFormat: 'LL' + } +}; + +fcViews.listMonth = { + type: 'list', + duration: { month: 1 }, + defaults: { + listDayAltFormat: 'dddd' // day-of-week is nice-to-have + } +}; + +fcViews.listYear = { + type: 'list', + duration: { year: 1 }, + defaults: { + listDayAltFormat: 'dddd' // day-of-week is nice-to-have + } +}; + +;; + +return FC; // export for Node/CommonJS +}); \ No newline at end of file diff --git a/js/fullcalendar/fullcalendar.min.css b/js/fullcalendar/fullcalendar.min.css new file mode 100644 index 0000000..cf1b3e3 --- /dev/null +++ b/js/fullcalendar/fullcalendar.min.css @@ -0,0 +1,5 @@ +/*! + * FullCalendar v3.6.2 Stylesheet + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */.fc button,.fc table,body .fc{font-size:1em}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-icon,.fc-unselectable{-webkit-touch-callout:none;-khtml-user-select:none}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc th,.fc-basic-view td.fc-week-number,.fc-icon,.fc-toolbar{text-align:center}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close,a[data-goto]{cursor:pointer}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-icon,.fc-row.fc-rigid,.fc-time-grid-event{overflow:hidden}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc.fc-bootstrap3 a,.ui-widget .fc-event{text-decoration:none}.fc-limited{display:none}.fc-icon,.fc-toolbar .fc-center{display:inline-block}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-icon:after,.fc-toolbar button{position:relative}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff;border-width:1px;border-style:solid}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc-icon{height:1em;line-height:1em;font-size:1em;font-family:"Courier New",Courier,monospace;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon-left-single-arrow:after{content:"\02039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\0203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\000AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\000BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\000D7";font-size:200%;top:6%}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666;font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-bootstrap3 .fc-time-grid .fc-slats table,.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.ui-widget .fc-event{color:#fff;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc.fc-bootstrap3 a[data-goto]:hover{text-decoration:underline}.fc-bootstrap3 hr.fc-divider{border-color:inherit}.fc-bootstrap3 .fc-today.alert{border-radius:0}.fc-bootstrap3 .fc-popover .panel-body{padding:0}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\000A0-\000A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee} \ No newline at end of file diff --git a/js/fullcalendar/fullcalendar.min.js b/js/fullcalendar/fullcalendar.min.js new file mode 100644 index 0000000..ea46dd1 --- /dev/null +++ b/js/fullcalendar/fullcalendar.min.js @@ -0,0 +1,11 @@ +/*! + * FullCalendar v3.6.2 + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */ +!function(t){"function"==typeof define&&define.amd?define(["jquery","moment"],t):"object"==typeof exports?module.exports=t(require("jquery"),require("moment")):t(jQuery,moment)}(function(t,e){function n(t){return j(t,qt)}function i(t,e){e.left&&t.css({"border-left-width":1,"margin-left":e.left-1}),e.right&&t.css({"border-right-width":1,"margin-right":e.right-1})}function r(t){t.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function s(){t("body").addClass("fc-not-allowed")}function o(){t("body").removeClass("fc-not-allowed")}function a(e,n,i){var r=Math.floor(n/e.length),s=Math.floor(n-r*(e.length-1)),o=[],a=[],u=[],c=0;l(e),e.each(function(n,i){var l=n===e.length-1?s:r,h=t(i).outerHeight(!0);h *").each(function(e,i){var r=t(i).outerWidth();r>n&&(n=r)}),n++,e.width(n),n}function c(t,e){var n,i=t.add(e);return i.css({position:"relative",left:-1}),n=t.outerHeight()-e.outerHeight(),i.css({position:"",left:""}),n}function h(e){var n=e.css("position"),i=e.parents().filter(function(){var e=t(this);return/(auto|scroll)/.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==n&&i.length?i:t(e[0].ownerDocument||document)}function d(t,e){var n=t.offset(),i=n.left-(e?e.left:0),r=n.top-(e?e.top:0);return{left:i,right:i+t.outerWidth(),top:r,bottom:r+t.outerHeight()}}function f(t,e){var n=t.offset(),i=p(t),r=n.left+w(t,"border-left-width")+i.left-(e?e.left:0),s=n.top+w(t,"border-top-width")+i.top-(e?e.top:0);return{left:r,right:r+t[0].clientWidth,top:s,bottom:s+t[0].clientHeight}}function g(t,e){var n=t.offset(),i=n.left+w(t,"border-left-width")+w(t,"padding-left")-(e?e.left:0),r=n.top+w(t,"border-top-width")+w(t,"padding-top")-(e?e.top:0);return{left:i,right:i+t.width(),top:r,bottom:r+t.height()}}function p(t){var e,n=t[0].offsetWidth-t[0].clientWidth,i=t[0].offsetHeight-t[0].clientHeight;return n=v(n),i=v(i),e={left:0,right:0,top:0,bottom:i},m()&&"rtl"==t.css("direction")?e.left=n:e.right=n,e}function v(t){return t=Math.max(0,t),t=Math.round(t)}function m(){return null===Yt&&(Yt=y()),Yt}function y(){var e=t("
").css({position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}).appendTo("body"),n=e.children(),i=n.offset().left>e.offset().left;return e.remove(),i}function w(t,e){return parseFloat(t.css(e))||0}function D(t){return 1==t.which&&!t.ctrlKey}function b(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageX:t.pageX}function E(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageY:t.pageY}function S(t){return/^touch/.test(t.type)}function C(t){t.addClass("fc-unselectable").on("selectstart",T)}function R(t){t.removeClass("fc-unselectable").off("selectstart",T)}function T(t){t.preventDefault()}function I(t,e){var n={left:Math.max(t.left,e.left),right:Math.min(t.right,e.right),top:Math.max(t.top,e.top),bottom:Math.min(t.bottom,e.bottom)};return n.left=1&&at(r)));n++);return i}function N(t,e){var n=O(t);return"week"===n&&"object"==typeof e&&e.days&&(n="day"),n}function V(t,n,i){return null!=i?i.diff(n,t,!0):e.isDuration(n)?n.as(t):n.end.diff(n.start,t,!0)}function G(t,e,n){var i;return _(n)?(e-t)/n:(i=n.asMonths(),Math.abs(i)>=1&&at(i)?e.diff(t,"months",!0)/i:e.diff(t,"days",!0)/n.asDays())}function U(t,e){var n,i;return _(t)||_(e)?t/e:(n=t.asMonths(),i=e.asMonths(),Math.abs(n)>=1&&at(n)&&Math.abs(i)>=1&&at(i)?n/i:t.asDays()/e.asDays())}function W(t,n){var i;return _(t)?e.duration(t*n):(i=t.asMonths(),Math.abs(i)>=1&&at(i)?e.duration({months:i*n}):e.duration({days:t.asDays()*n}))}function _(t){return Boolean(t.hours()||t.minutes()||t.seconds()||t.milliseconds())}function q(t){return"[object Date]"===Object.prototype.toString.call(t)||t instanceof Date}function Y(t){return"string"==typeof t&&/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t)}function j(t,e){var n,i,r,s,o,a,l={};if(e)for(n=0;n=0;s--)if("object"==typeof(o=t[s][i]))r.unshift(o);else if(void 0!==o){l[i]=o;break}r.length&&(l[i]=j(r))}for(n=t.length-1;n>=0;n--){a=t[n];for(i in a)i in l||(l[i]=a[i])}return l}function Z(t,e){for(var n in t)Q(t,n)&&(e[n]=t[n])}function Q(t,e){return Qt.call(t,e)}function $(e,n,i){if(t.isFunction(e)&&(e=[e]),e){var r,s;for(r=0;r/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
")}function nt(t){return t.replace(/&.*?;/g,"")}function it(e){var n=[];return t.each(e,function(t,e){null!=e&&n.push(t+":"+e)}),n.join(";")}function rt(e){var n=[];return t.each(e,function(t,e){null!=e&&n.push(t+'="'+et(e)+'"')}),n.join(" ")}function st(t){return t.charAt(0).toUpperCase()+t.slice(1)}function ot(t,e){return t-e}function at(t){return t%1==0}function lt(t,e){var n=t[e];return function(){return n.apply(t,arguments)}}function ut(t,e,n){var i,r,s,o,a,l=function(){var u=+new Date-o;u"),g.append(o("left")).append(o("right")).append(o("center")).append('
')):s()}function s(){g&&(g.remove(),g=f.el=null)}function o(i){var r=e.theme,s=t('
'),o=n.layout[i],a=e.opt("customButtons")||{},l=e.overrides.buttonText||{},u=e.opt("buttonText")||{};return o&&t.each(o.split(" "),function(n){var i,o=t(),c=!0;t.each(this.split(","),function(n,i){var s,h,d,f,g,v,m,y;"title"==i?(o=o.add(t("

 

")),c=!1):((s=a[i])?(d=function(t){s.click&&s.click.call(y[0],t)},(f=r.getCustomButtonIconClass(s))||(f=r.getIconClass(i))||(g=s.text)):(h=e.getViewSpec(i))?(p.push(i),d=function(){e.changeView(i)},(g=h.buttonTextOverride)||(f=r.getIconClass(i))||(g=h.buttonTextDefault)):e[i]&&(d=function(){e[i]()},(g=l[i])||(f=r.getIconClass(i))||(g=u[i])),d&&(m=["fc-"+i+"-button",r.getClass("button"),r.getClass("stateDefault")],g?v=et(g):f&&(v=""),y=t('").click(function(t){y.hasClass(r.getClass("stateDisabled"))||(d(t),(y.hasClass(r.getClass("stateActive"))||y.hasClass(r.getClass("stateDisabled")))&&y.removeClass(r.getClass("stateHover")))}).mousedown(function(){y.not("."+r.getClass("stateActive")).not("."+r.getClass("stateDisabled")).addClass(r.getClass("stateDown"))}).mouseup(function(){y.removeClass(r.getClass("stateDown"))}).hover(function(){y.not("."+r.getClass("stateActive")).not("."+r.getClass("stateDisabled")).addClass(r.getClass("stateHover"))},function(){y.removeClass(r.getClass("stateHover")).removeClass(r.getClass("stateDown"))}),o=o.add(y)))}),c&&o.first().addClass(r.getClass("cornerLeft")).end().last().addClass(r.getClass("cornerRight")).end(),o.length>1?(i=t("
"),c&&i.addClass(r.getClass("buttonGroup")),i.append(o),s.append(i)):s.append(o)}),s}function a(t){g&&g.find("h2").text(t)}function l(t){g&&g.find(".fc-"+t+"-button").addClass(e.theme.getClass("stateActive"))}function u(t){g&&g.find(".fc-"+t+"-button").removeClass(e.theme.getClass("stateActive"))}function c(t){g&&g.find(".fc-"+t+"-button").prop("disabled",!0).addClass(e.theme.getClass("stateDisabled"))}function h(t){g&&g.find(".fc-"+t+"-button").prop("disabled",!1).removeClass(e.theme.getClass("stateDisabled"))}function d(){return p}var f=this;f.setToolbarOptions=i,f.render=r,f.removeElement=s,f.updateTitle=a,f.activateButton=l,f.deactivateButton=u,f.disableButton=c,f.enableButton=h,f.getViewsWithButtons=d,f.el=null;var g,p=[]}function Et(t,e,n){var i;for(i=0;is&&r.push(new Ue(s,i.startMs)),i.endMs>s&&(s=i.endMs);return s=t.leftCol)return!0;return!1}function At(t,e){return t.leftCol-e.leftCol}function Lt(t){var e,n,i,r=[];for(e=0;ee.top&&t.tops&&(!l[o]||u.isSame(c,l[o]))&&(o-1!==s||"."!==f[o]);o--)v=f[o]+v;for(a=s;a<=o;a++)m+=f[a],y+=g[a];return(m||y)&&(w=r?y+i+m:m+i+y),d(p+w+v)}function r(t){return D[t]||(D[t]=s(t))}function s(t){var e=o(t);return{fakeFormatString:l(e),sameUnits:u(e)}}function o(t){for(var e,n=[],i=/\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;e=i.exec(t);)e[1]?n.push.apply(n,a(e[1])):e[2]?n.push({maybe:o(e[2])}):e[3]?n.push({token:e[3]}):e[5]&&n.push.apply(n,a(e[5]));return n}function a(t){return". "===t?["."," "]:[t]}function l(t){var e,n,i=[];for(e=0;er.value)&&(r=i);return r?r.unit:null}Wt.formatDate=t,Wt.formatRange=n,Wt.oldMomentFormat=e,Wt.queryMostGranularFormatUnit=f;var g="\v",p="",v="",m=new RegExp(v+"([^"+v+"]*)"+v,"g"),y={t:function(t){return e(t,"a").charAt(0)},T:function(t){return e(t,"A").charAt(0)}},w={Y:{value:1,unit:"year"},M:{value:2,unit:"month"},W:{value:3,unit:"week"},w:{value:3,unit:"week"},D:{value:4,unit:"day"},d:{value:4,unit:"day"}},D={}}();var ee=Wt.formatDate,ne=Wt.formatRange,ie=Wt.oldMomentFormat;Wt.Class=dt,dt.extend=function(){var t,e={};for(t=0;t0}},se=Wt.ListenerMixin=function(){var e=0;return{listenerId:null,listenTo:function(e,n,i){if("object"==typeof n)for(var r in n)n.hasOwnProperty(r)&&this.listenTo(e,r,n[r]);else"string"==typeof n&&e.on(n+"."+this.getListenerNamespace(),t.proxy(i,this))},stopListeningTo:function(t,e){t.off((e||"")+"."+this.getListenerNamespace())},getListenerNamespace:function(){return null==this.listenerId&&(this.listenerId=e++),"_listener"+this.listenerId}}}(),oe={standardPropMap:{},applyProps:function(t){var e,n=this.standardPropMap,i={},r={};for(e in t)!0===n[e]?this[e]=t[e]:!1===n[e]?i[e]=t[e]:r[e]=t[e];return this.applyMiscProps(r),this.applyManualStandardProps(i)},applyManualStandardProps:function(t){return!0},applyMiscProps:function(t){},isStandardProp:function(t){return t in this.standardPropMap}},ae=function(t){var e=this.prototype;e.hasOwnProperty("standardPropMap")||(e.standardPropMap=Object.create(e.standardPropMap)),Z(t,e.standardPropMap)},le=function(t,e){var n,i=this.prototype.standardPropMap;for(n in i)null!=t[n]&&!0===i[n]&&(e[n]=t[n])},ue=dt.extend(re,se,{_props:null,_watchers:null,_globalWatchArgs:{},constructor:function(){this._watchers={},this._props={},this.applyGlobalWatchers(),this.constructed()},constructed:function(){},applyGlobalWatchers:function(){var t,e=this._globalWatchArgs;for(t in e)this.watch.apply(this,e[t])},has:function(t){return t in this._props},get:function(t){return void 0===t?this._props:this._props[t]},set:function(t,e){var n;"string"==typeof t?(n={},n[t]=void 0===e?null:e):n=t,this.setProps(n)},reset:function(t){var e,n=this._props,i={};for(e in n)i[e]=void 0;for(e in t)i[e]=t[e];this.setProps(i)},unset:function(t){var e,n,i={};for(e="string"==typeof t?[t]:t,n=0;n=0;e--)switch(n=i[e],n.type){case"init":r=!1;case"add":case"remove":i.splice(e,1)}return r&&i.push(t),r}});Wt.RenderQueue=de;var fe=dt.extend(se,{isHidden:!0,options:null,el:null,margin:10,constructor:function(t){this.options=t||{}},show:function(){this.isHidden&&(this.el||this.render(),this.el.show(),this.position(),this.isHidden=!1,this.trigger("show"))},hide:function(){this.isHidden||(this.el.hide(),this.isHidden=!0,this.trigger("hide"))},render:function(){var e=this,n=this.options;this.el=t('
').addClass(n.className||"").css({top:0,left:0}).append(n.content).appendTo(n.parentEl),this.el.on("click",".fc-close",function(){e.hide()}),n.autoHide&&this.listenTo(t(document),"mousedown",this.documentMousedown)},documentMousedown:function(e){this.el&&!t(e.target).closest(this.el).length&&this.hide()},removeElement:function(){this.hide(),this.el&&(this.el.remove(),this.el=null),this.stopListeningTo(t(document),"mousedown")},position:function(){var e,n,i,r,s,o=this.options,a=this.el.offsetParent().offset(),l=this.el.outerWidth(),u=this.el.outerHeight(),c=t(window),d=h(this.el);r=o.top||0,s=void 0!==o.left?o.left:void 0!==o.right?o.right-l:0,d.is(window)||d.is(document)?(d=c,e=0,n=0):(i=d.offset(),e=i.top,n=i.left),e+=c.scrollTop(),n+=c.scrollLeft(),!1!==o.viewportConstrain&&(r=Math.min(r,e+d.outerHeight()-u-this.margin),r=Math.max(r,e+this.margin),s=Math.min(s,n+d.outerWidth()-l-this.margin),s=Math.max(s,n+this.margin)),this.el.css({top:r-a.top,left:s-a.left})},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1))}}),ge=Wt.CoordCache=dt.extend({els:null,forcedOffsetParentEl:null,origin:null,boundingRect:null,isHorizontal:!1,isVertical:!1,lefts:null,rights:null,tops:null,bottoms:null,constructor:function(e){this.els=t(e.els),this.isHorizontal=e.isHorizontal,this.isVertical=e.isVertical,this.forcedOffsetParentEl=e.offsetParent?t(e.offsetParent):null},build:function(){var t=this.forcedOffsetParentEl;!t&&this.els.length>0&&(t=this.els.eq(0).offsetParent()),this.origin=t?t.offset():null,this.boundingRect=this.queryBoundingRect(),this.isHorizontal&&this.buildElHorizontals(),this.isVertical&&this.buildElVerticals()},clear:function(){this.origin=null,this.boundingRect=null,this.lefts=null,this.rights=null,this.tops=null,this.bottoms=null},ensureBuilt:function(){this.origin||this.build()},buildElHorizontals:function(){var e=[],n=[];this.els.each(function(i,r){var s=t(r),o=s.offset().left,a=s.outerWidth();e.push(o),n.push(o+a)}),this.lefts=e,this.rights=n},buildElVerticals:function(){var e=[],n=[];this.els.each(function(i,r){var s=t(r),o=s.offset().top,a=s.outerHeight();e.push(o),n.push(o+a)}),this.tops=e,this.bottoms=n},getHorizontalIndex:function(t){this.ensureBuilt();var e,n=this.lefts,i=this.rights,r=n.length;for(e=0;e=n[e]&&t=n[e]&&t0&&(t=h(this.els.eq(0)),!t.is(document))?f(t):null},isPointInBounds:function(t,e){return this.isLeftInBounds(t)&&this.isTopInBounds(e)},isLeftInBounds:function(t){return!this.boundingRect||t>=this.boundingRect.left&&t=this.boundingRect.top&&t=i*i&&this.handleDistanceSurpassed(t),this.isDragging&&this.handleDrag(e,n,t)},handleDrag:function(t,e,n){this.trigger("drag",t,e,n),this.updateAutoScroll(n)},endDrag:function(t){this.isDragging&&(this.isDragging=!1,this.handleDragEnd(t))},handleDragEnd:function(t){this.trigger("dragEnd",t)},startDelay:function(t){var e=this;this.delay?this.delayTimeoutId=setTimeout(function(){e.handleDelayEnd(t)},this.delay):this.handleDelayEnd(t)},handleDelayEnd:function(t){this.isDelayEnded=!0,this.isDistanceSurpassed&&this.startDrag(t)},handleDistanceSurpassed:function(t){this.isDistanceSurpassed=!0,this.isDelayEnded&&this.startDrag(t)},handleTouchMove:function(t){this.isDragging&&this.shouldCancelTouchScroll&&t.preventDefault(),this.handleMove(t)},handleMouseMove:function(t){this.handleMove(t)},handleTouchScroll:function(t){this.isDragging&&!this.scrollAlwaysKills||this.endInteraction(t,!0)},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1)),this["_"+t]&&this["_"+t].apply(this,Array.prototype.slice.call(arguments,1))}});pe.mixin({isAutoScroll:!1,scrollBounds:null,scrollTopVel:null,scrollLeftVel:null,scrollIntervalId:null,scrollSensitivity:30,scrollSpeed:200,scrollIntervalMs:50,initAutoScroll:function(){var t=this.scrollEl;this.isAutoScroll=this.options.scroll&&t&&!t.is(window)&&!t.is(document),this.isAutoScroll&&this.listenTo(t,"scroll",ut(this.handleDebouncedScroll,100))},destroyAutoScroll:function(){this.endAutoScroll(),this.isAutoScroll&&this.stopListeningTo(this.scrollEl,"scroll")},computeScrollBounds:function(){this.isAutoScroll&&(this.scrollBounds=d(this.scrollEl))},updateAutoScroll:function(t){var e,n,i,r,s=this.scrollSensitivity,o=this.scrollBounds,a=0,l=0;o&&(e=(s-(E(t)-o.top))/s,n=(s-(o.bottom-E(t)))/s,i=(s-(b(t)-o.left))/s,r=(s-(o.right-b(t)))/s,e>=0&&e<=1?a=e*this.scrollSpeed*-1:n>=0&&n<=1&&(a=n*this.scrollSpeed),i>=0&&i<=1?l=i*this.scrollSpeed*-1:r>=0&&r<=1&&(l=r*this.scrollSpeed)),this.setScrollVel(a,l)},setScrollVel:function(t,e){this.scrollTopVel=t,this.scrollLeftVel=e,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(lt(this,"scrollIntervalFunc"),this.scrollIntervalMs))},constrainScrollVel:function(){var t=this.scrollEl;this.scrollTopVel<0?t.scrollTop()<=0&&(this.scrollTopVel=0):this.scrollTopVel>0&&t.scrollTop()+t[0].clientHeight>=t[0].scrollHeight&&(this.scrollTopVel=0),this.scrollLeftVel<0?t.scrollLeft()<=0&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&t.scrollLeft()+t[0].clientWidth>=t[0].scrollWidth&&(this.scrollLeftVel=0)},scrollIntervalFunc:function(){var t=this.scrollEl,e=this.scrollIntervalMs/1e3;this.scrollTopVel&&t.scrollTop(t.scrollTop()+this.scrollTopVel*e),this.scrollLeftVel&&t.scrollLeft(t.scrollLeft()+this.scrollLeftVel*e),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.endAutoScroll()},endAutoScroll:function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.handleScrollEnd())},handleDebouncedScroll:function(){this.scrollIntervalId||this.handleScrollEnd()},handleScrollEnd:function(){}});var ve=pe.extend({component:null,origHit:null,hit:null,coordAdjust:null,constructor:function(t,e){pe.call(this,e),this.component=t},handleInteractionStart:function(t){var e,n,i,r=this.subjectEl;this.component.hitsNeeded(),this.computeScrollBounds(),t?(n={left:b(t),top:E(t)},i=n,r&&(e=d(r),i=H(i,e)),this.origHit=this.queryHit(i.left,i.top),r&&this.options.subjectCenter&&(this.origHit&&(e=I(this.origHit,e)||e),i=M(e)),this.coordAdjust=x(i,n)):(this.origHit=null,this.coordAdjust=null),pe.prototype.handleInteractionStart.apply(this,arguments)},handleDragStart:function(t){var e;pe.prototype.handleDragStart.apply(this,arguments),(e=this.queryHit(b(t),E(t)))&&this.handleHitOver(e)},handleDrag:function(t,e,n){var i;pe.prototype.handleDrag.apply(this,arguments),i=this.queryHit(b(n),E(n)),vt(i,this.hit)||(this.hit&&this.handleHitOut(),i&&this.handleHitOver(i))},handleDragEnd:function(){this.handleHitDone(),pe.prototype.handleDragEnd.apply(this,arguments)},handleHitOver:function(t){var e=vt(t,this.origHit);this.hit=t,this.trigger("hitOver",this.hit,e,this.origHit)},handleHitOut:function(){this.hit&&(this.trigger("hitOut",this.hit),this.handleHitDone(),this.hit=null)},handleHitDone:function(){this.hit&&this.trigger("hitDone",this.hit)},handleInteractionEnd:function(){pe.prototype.handleInteractionEnd.apply(this,arguments),this.origHit=null,this.hit=null,this.component.hitsNotNeeded()},handleScrollEnd:function(){pe.prototype.handleScrollEnd.apply(this,arguments),this.isDragging&&(this.component.releaseHits(),this.component.prepareHits())},queryHit:function(t,e){return this.coordAdjust&&(t+=this.coordAdjust.left,e+=this.coordAdjust.top),this.component.queryHit(t,e)}});Wt.touchMouseIgnoreWait=500;var me=dt.extend(se,re,{isTouching:!1,mouseIgnoreDepth:0,handleScrollProxy:null,bind:function(){var e=this;this.listenTo(t(document),{touchstart:this.handleTouchStart,touchcancel:this.handleTouchCancel,touchend:this.handleTouchEnd,mousedown:this.handleMouseDown,mousemove:this.handleMouseMove,mouseup:this.handleMouseUp,click:this.handleClick,selectstart:this.handleSelectStart,contextmenu:this.handleContextMenu}),window.addEventListener("touchmove",this.handleTouchMoveProxy=function(n){e.handleTouchMove(t.Event(n))},{passive:!1}),window.addEventListener("scroll",this.handleScrollProxy=function(n){e.handleScroll(t.Event(n))},!0)},unbind:function(){this.stopListeningTo(t(document)),window.removeEventListener("touchmove",this.handleTouchMoveProxy),window.removeEventListener("scroll",this.handleScrollProxy,!0)},handleTouchStart:function(t){this.stopTouch(t,!0),this.isTouching=!0,this.trigger("touchstart",t)},handleTouchMove:function(t){this.isTouching&&this.trigger("touchmove",t)},handleTouchCancel:function(t){this.isTouching&&(this.trigger("touchcancel",t),this.stopTouch(t))},handleTouchEnd:function(t){this.stopTouch(t)},handleMouseDown:function(t){this.shouldIgnoreMouse()||this.trigger("mousedown",t)},handleMouseMove:function(t){this.shouldIgnoreMouse()||this.trigger("mousemove",t)},handleMouseUp:function(t){this.shouldIgnoreMouse()||this.trigger("mouseup",t)},handleClick:function(t){this.shouldIgnoreMouse()||this.trigger("click",t)},handleSelectStart:function(t){this.trigger("selectstart",t)},handleContextMenu:function(t){this.trigger("contextmenu",t)},handleScroll:function(t){this.trigger("scroll",t)},stopTouch:function(t,e){this.isTouching&&(this.isTouching=!1,this.trigger("touchend",t),e||this.startTouchMouseIgnore())},startTouchMouseIgnore:function(){var t=this,e=Wt.touchMouseIgnoreWait;e&&(this.mouseIgnoreDepth++,setTimeout(function(){t.mouseIgnoreDepth--},e))},shouldIgnoreMouse:function(){return this.isTouching||Boolean(this.mouseIgnoreDepth)}});!function(){var t=null,e=0;me.get=function(){return t||(t=new me,t.bind()),t},me.needed=function(){me.get(),e++},me.unneeded=function(){--e||(t.unbind(),t=null)}}();var ye=dt.extend(se,{options:null,sourceEl:null,el:null,parentEl:null,top0:null,left0:null,y0:null,x0:null,topDelta:null,leftDelta:null,isFollowing:!1,isHidden:!1,isAnimating:!1,constructor:function(e,n){this.options=n=n||{},this.sourceEl=e,this.parentEl=n.parentEl?t(n.parentEl):e.parent()},start:function(e){this.isFollowing||(this.isFollowing=!0,this.y0=E(e),this.x0=b(e),this.topDelta=0,this.leftDelta=0,this.isHidden||this.updatePosition(),S(e)?this.listenTo(t(document),"touchmove",this.handleMove):this.listenTo(t(document),"mousemove",this.handleMove))},stop:function(e,n){function i(){r.isAnimating=!1,r.removeElement(),r.top0=r.left0=null,n&&n()}var r=this,s=this.options.revertDuration;this.isFollowing&&!this.isAnimating&&(this.isFollowing=!1,this.stopListeningTo(t(document)),e&&s&&!this.isHidden?(this.isAnimating=!0,this.el.animate({top:this.top0,left:this.left0},{duration:s,complete:i})):i())},getEl:function(){var t=this.el;return t||(t=this.el=this.sourceEl.clone().addClass(this.options.additionalClass||"").css({position:"absolute",visibility:"",display:this.isHidden?"none":"",margin:0,right:"auto",bottom:"auto",width:this.sourceEl.width(),height:this.sourceEl.height(),opacity:this.options.opacity||"",zIndex:this.options.zIndex}),t.addClass("fc-unselectable"),t.appendTo(this.parentEl)),t},removeElement:function(){this.el&&(this.el.remove(),this.el=null)},updatePosition:function(){var t,e;this.getEl(),null===this.top0&&(t=this.sourceEl.offset(),e=this.el.offsetParent().offset(),this.top0=t.top-e.top,this.left0=t.left-e.left),this.el.css({top:this.top0+this.topDelta,left:this.left0+this.leftDelta})},handleMove:function(t){this.topDelta=E(t)-this.y0,this.leftDelta=b(t)-this.x0,this.isHidden||this.updatePosition()},hide:function(){this.isHidden||(this.isHidden=!0,this.el&&this.el.hide())},show:function(){this.isHidden&&(this.isHidden=!1,this.updatePosition(),this.getEl().show())}}),we=Wt.Scroller=dt.extend({el:null,scrollEl:null,overflowX:null,overflowY:null,constructor:function(t){t=t||{},this.overflowX=t.overflowX||t.overflow||"auto",this.overflowY=t.overflowY||t.overflow||"auto"},render:function(){this.el=this.renderEl(),this.applyOverflow()},renderEl:function(){return this.scrollEl=t('
')},clear:function(){this.setHeight("auto"),this.applyOverflow()},destroy:function(){this.el.remove()},applyOverflow:function(){this.scrollEl.css({"overflow-x":this.overflowX,"overflow-y":this.overflowY})},lockOverflow:function(t){var e=this.overflowX,n=this.overflowY;t=t||this.getScrollbarWidths(),"auto"===e&&(e=t.top||t.bottom||this.scrollEl[0].scrollWidth-1>this.scrollEl[0].clientWidth?"scroll":"hidden"),"auto"===n&&(n=t.left||t.right||this.scrollEl[0].scrollHeight-1>this.scrollEl[0].clientHeight?"scroll":"hidden"),this.scrollEl.css({"overflow-x":e,"overflow-y":n})},setHeight:function(t){this.scrollEl.height(t)},getScrollTop:function(){return this.scrollEl.scrollTop()},setScrollTop:function(t){this.scrollEl.scrollTop(t)},getClientWidth:function(){return this.scrollEl[0].clientWidth},getClientHeight:function(){return this.scrollEl[0].clientHeight},getScrollbarWidths:function(){return p(this.scrollEl)}});yt.prototype.proxyCall=function(t){var e=Array.prototype.slice.call(arguments,1),n=[];return this.items.forEach(function(i){n.push(i[t].apply(i,e))}),n};var De=dt.extend({view:null,component:null,constructor:function(t){this.view=t._getView(),this.component=t},opt:function(t){return this.view.opt(t)},end:function(){}}),be=De.extend({dragListener:null,constructor:function(t){De.call(this,t),this.dragListener=this.buildDragListener()},end:function(){this.dragListener.endInteraction()},bindToEl:function(t){var e=this.component,n=this.dragListener;e.bindDateHandlerToEl(t,"mousedown",function(t){e.shouldIgnoreMouse()||n.startInteraction(t)}),e.bindDateHandlerToEl(t,"touchstart",function(t){e.shouldIgnoreTouch()||n.startInteraction(t)})},buildDragListener:function(){var t,e=this,n=this.component,i=new ve(n,{scroll:this.opt("dragScroll"),interactionStart:function(){t=i.origHit},hitOver:function(e,n,i){n||(t=null)},hitOut:function(){t=null},interactionEnd:function(i,r){var s;!r&&t&&(s=n.getSafeHitFootprint(t))&&e.view.triggerDayClick(s,n.getHitEl(t),i)}});return i.shouldCancelTouchScroll=!1,i.scrollAlwaysKills=!0,i}}),Ee=Wt.DateSelecting=De.extend({dragListener:null,constructor:function(t){De.call(this,t),this.dragListener=this.buildDragListener()},end:function(){this.dragListener.endInteraction()},getDelay:function(){var t=this.opt("selectLongPressDelay");return null==t&&(t=this.opt("longPressDelay")),t},bindToEl:function(t){var e=this,n=this.component,i=this.dragListener;n.bindDateHandlerToEl(t,"mousedown",function(t){e.opt("selectable")&&!n.shouldIgnoreMouse()&&i.startInteraction(t,{distance:e.opt("selectMinDistance")})}),n.bindDateHandlerToEl(t,"touchstart",function(t){e.opt("selectable")&&!n.shouldIgnoreTouch()&&i.startInteraction(t,{delay:e.getDelay()})}),C(t)},buildDragListener:function(){var t,e=this,n=this.component;return new ve(n,{scroll:this.opt("dragScroll"),interactionStart:function(){t=null},dragStart:function(t){e.view.unselect(t)},hitOver:function(i,r,o){var a,l;o&&(a=n.getSafeHitFootprint(o),l=n.getSafeHitFootprint(i),t=a&&l?e.computeSelection(a,l):null,t?n.renderSelectionFootprint(t):!1===t&&s())},hitOut:function(){t=null,n.unrenderSelection()},hitDone:function(){o()},interactionEnd:function(n,i){!i&&t&&e.view.reportSelection(t,n)}})},computeSelection:function(t,e){var n=this.computeSelectionFootprint(t,e);return!(n&&!this.isSelectionFootprintAllowed(n))&&n},computeSelectionFootprint:function(t,e){var n=[t.unzonedRange.startMs,t.unzonedRange.endMs,e.unzonedRange.startMs,e.unzonedRange.endMs];return n.sort(ot),new We(new Ue(n[0],n[3]),t.isAllDay)},isSelectionFootprintAllowed:function(t){return this.component.dateProfile.validUnzonedRange.containsRange(t.unzonedRange)&&this.view.calendar.isSelectionFootprintAllowed(t)}}),Se=Wt.EventDragging=De.extend({eventPointing:null,dragListener:null,isDragging:!1,constructor:function(t,e){De.call(this,t),this.eventPointing=e},end:function(){this.dragListener&&this.dragListener.endInteraction()},getSelectionDelay:function(){var t=this.opt("eventLongPressDelay");return null==t&&(t=this.opt("longPressDelay")),t},bindToEl:function(t){var e=this.component;e.bindSegHandlerToEl(t,"mousedown",this.handleMousedown.bind(this)),e.bindSegHandlerToEl(t,"touchstart",this.handleTouchStart.bind(this))},handleMousedown:function(t,e){this.component.canStartDrag(t,e)&&this.buildDragListener(t).startInteraction(e,{distance:5})},handleTouchStart:function(t,e){var n=this.component,i={delay:this.view.isEventDefSelected(t.footprint.eventDef)?0:this.getSelectionDelay()};n.canStartDrag(t,e)?this.buildDragListener(t).startInteraction(e,i):n.canStartSelection(t,e)&&this.buildSelectListener(t).startInteraction(e,i)},buildSelectListener:function(t){var e=this,n=this.view,i=t.footprint.eventDef,r=t.footprint.eventInstance;if(this.dragListener)return this.dragListener;var s=this.dragListener=new pe({dragStart:function(t){s.isTouch&&!n.isEventDefSelected(i)&&r&&n.selectEventInstance(r)},interactionEnd:function(t){e.dragListener=null}});return s},buildDragListener:function(t){var e,n,i,r=this,a=this.component,l=this.view,u=l.calendar,c=u.eventManager,h=t.el,d=t.footprint.eventDef,f=t.footprint.eventInstance;if(this.dragListener)return this.dragListener;var g=this.dragListener=new ve(l,{scroll:this.opt("dragScroll"),subjectEl:h,subjectCenter:!0,interactionStart:function(i){t.component=a,e=!1,n=new ye(t.el,{additionalClass:"fc-dragging",parentEl:l.el,opacity:g.isTouch?null:r.opt("dragOpacity"),revertDuration:r.opt("dragRevertDuration"),zIndex:2}),n.hide(),n.start(i)},dragStart:function(n){g.isTouch&&!l.isEventDefSelected(d)&&f&&l.selectEventInstance(f),e=!0,r.eventPointing.handleMouseout(t,n),r.segDragStart(t,n),l.hideEventsWithId(t.footprint.eventDef.id)},hitOver:function(e,o,h){var f,p,v,m=!0;t.hit&&(h=t.hit),f=h.component.getSafeHitFootprint(h),p=e.component.getSafeHitFootprint(e),f&&p?(i=r.computeEventDropMutation(f,p,d),i?(v=c.buildMutatedEventInstanceGroup(d.id,i),m=a.isEventInstanceGroupAllowed(v)):m=!1):m=!1,m||(i=null,s()),i&&l.renderDrag(a.eventRangesToEventFootprints(v.sliceRenderRanges(a.dateProfile.renderUnzonedRange,u)),t,g.isTouch)?n.hide():n.show(),o&&(i=null)},hitOut:function(){l.unrenderDrag(t),n.show(),i=null},hitDone:function(){o()},interactionEnd:function(s){delete t.component,n.stop(!i,function(){e&&(l.unrenderDrag(t),r.segDragStop(t,s)),l.showEventsWithId(t.footprint.eventDef.id),i&&l.reportEventDrop(f,i,h,s)}),r.dragListener=null}});return g},segDragStart:function(t,e){this.isDragging=!0,this.component.publiclyTrigger("eventDragStart",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},segDragStop:function(t,e){this.isDragging=!1,this.component.publiclyTrigger("eventDragStop",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},computeEventDropMutation:function(t,e,n){var i=new rn;return i.setDateMutation(this.computeEventDateMutation(t,e)),i},computeEventDateMutation:function(t,e){var n,i,r=t.unzonedRange.getStart(),s=e.unzonedRange.getStart(),o=!1,a=!1,l=!1;return t.isAllDay!==e.isAllDay&&(o=!0,e.isAllDay?(l=!0,r.stripTime()):a=!0),n=this.component.diffDates(s,r),i=new sn,i.clearEnd=o,i.forceTimed=a,i.forceAllDay=l,i.setDateDelta(n),i}}),Ce=Wt.EventResizing=De.extend({eventPointing:null,dragListener:null,isResizing:!1,constructor:function(t,e){De.call(this,t),this.eventPointing=e},end:function(){this.dragListener&&this.dragListener.endInteraction()},bindToEl:function(t){var e=this.component;e.bindSegHandlerToEl(t,"mousedown",this.handleMouseDown.bind(this)),e.bindSegHandlerToEl(t,"touchstart",this.handleTouchStart.bind(this))},handleMouseDown:function(e,n){this.component.canStartResize(e,n)&&this.buildDragListener(e,t(n.target).is(".fc-start-resizer")).startInteraction(n,{distance:5})},handleTouchStart:function(e,n){this.component.canStartResize(e,n)&&this.buildDragListener(e,t(n.target).is(".fc-start-resizer")).startInteraction(n)},buildDragListener:function(t,e){var n,i,r=this,a=this.component,l=this.view,u=l.calendar,c=u.eventManager,h=t.el,d=t.footprint.eventDef,f=t.footprint.eventInstance;return this.dragListener=new ve(a,{scroll:this.opt("dragScroll"),subjectEl:h,interactionStart:function(){n=!1},dragStart:function(e){n=!0,r.eventPointing.handleMouseout(t,e),r.segResizeStart(t,e)},hitOver:function(n,o,h){var f,g=!0,p=a.getSafeHitFootprint(h),v=a.getSafeHitFootprint(n);p&&v?(i=e?r.computeEventStartResizeMutation(p,v,t.footprint):r.computeEventEndResizeMutation(p,v,t.footprint),i?(f=c.buildMutatedEventInstanceGroup(d.id,i),g=a.isEventInstanceGroupAllowed(f)):g=!1):g=!1,g?i.isEmpty()&&(i=null):(i=null,s()),i&&(l.hideEventsWithId(t.footprint.eventDef.id),l.renderEventResize(a.eventRangesToEventFootprints(f.sliceRenderRanges(a.dateProfile.renderUnzonedRange,u)),t))},hitOut:function(){i=null},hitDone:function(){l.unrenderEventResize(t),l.showEventsWithId(t.footprint.eventDef.id),o()},interactionEnd:function(e){n&&r.segResizeStop(t,e),i&&l.reportEventResize(f,i,h,e),r.dragListener=null}})},segResizeStart:function(t,e){this.isResizing=!0,this.component.publiclyTrigger("eventResizeStart",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},segResizeStop:function(t,e){this.isResizing=!1,this.component.publiclyTrigger("eventResizeStop",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},computeEventStartResizeMutation:function(t,e,n){var i,r,s=n.componentFootprint.unzonedRange,o=this.component.diffDates(e.unzonedRange.getStart(),t.unzonedRange.getStart());return s.getStart().add(o)s.getStart()&&(i=new sn,i.setEndDelta(o),r=new rn,r.setDateMutation(i),r)}}),Re=Wt.ExternalDropping=De.extend(se,{dragListener:null,isDragging:!1,end:function(){this.dragListener&&this.dragListener.endInteraction()},bindToDocument:function(){this.listenTo(t(document),{dragstart:this.handleDragStart,sortstart:this.handleDragStart})},unbindFromDocument:function(){this.stopListeningTo(t(document))},handleDragStart:function(e,n){var i,r;this.opt("droppable")&&(i=t((n?n.item:null)||e.target),r=this.opt("dropAccept"),(t.isFunction(r)?r.call(i[0],i):i.is(r))&&(this.isDragging||this.listenToExternalDrag(i,e,n)))},listenToExternalDrag:function(t,e,n){var i,r=this,a=this.component,l=this.view,u=wt(t);(r.dragListener=new ve(a,{interactionStart:function(){r.isDragging=!0},hitOver:function(t){var e,n=!0,o=t.component.getSafeHitFootprint(t);o?(i=r.computeExternalDrop(o,u),i?(e=new Je(i.buildInstances()),n=u.eventProps?a.isEventInstanceGroupAllowed(e):a.isExternalInstanceGroupAllowed(e)):n=!1):n=!1,n||(i=null,s()),i&&a.renderDrag(a.eventRangesToEventFootprints(e.sliceRenderRanges(a.dateProfile.renderUnzonedRange,l.calendar)))},hitOut:function(){i=null},hitDone:function(){o(),a.unrenderDrag()},interactionEnd:function(e){i&&l.reportExternalDrop(i,Boolean(u.eventProps),Boolean(u.stick),t,e,n),r.isDragging=!1,r.dragListener=null}})).startDrag(e)},computeExternalDrop:function(e,n){var i,r=this.view.calendar,s=Wt.moment.utc(e.unzonedRange.startMs).stripZone();return e.isAllDay&&(n.startTime?s.time(n.startTime):s.stripTime()),n.duration&&(i=s.clone().add(n.duration)),s=r.applyTimezone(s),i&&(i=r.applyTimezone(i)),$e.parse(t.extend({},n.eventProps,{start:s,end:i}),new on(r))}});Wt.dataAttrPrefix="";var Te=Wt.EventPointing=De.extend({mousedOverSeg:null,bindToEl:function(t){var e=this.component;e.bindSegHandlerToEl(t,"click",this.handleClick.bind(this)),e.bindSegHandlerToEl(t,"mouseenter",this.handleMouseover.bind(this)),e.bindSegHandlerToEl(t,"mouseleave",this.handleMouseout.bind(this))},handleClick:function(t,e){!1===this.component.publiclyTrigger("eventClick",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,this.view]})&&e.preventDefault()},handleMouseover:function(t,e){me.get().shouldIgnoreMouse()||this.mousedOverSeg||(this.mousedOverSeg=t,this.view.isEventDefResizable(t.footprint.eventDef)&&t.el.addClass("fc-allow-mouse-resize"),this.component.publiclyTrigger("eventMouseover",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,this.view]}))},handleMouseout:function(t,e){this.mousedOverSeg&&(this.mousedOverSeg=null,this.view.isEventDefResizable(t.footprint.eventDef)&&t.el.removeClass("fc-allow-mouse-resize"),this.component.publiclyTrigger("eventMouseout",{context:t.el[0],args:[t.footprint.getEventLegacy(),e||{},this.view]}))},end:function(){this.mousedOverSeg&&this.handleMouseout(this.mousedOverSeg)}}),Ie=Wt.StandardInteractionsMixin={dateClickingClass:be,dateSelectingClass:Ee,eventPointingClass:Te,eventDraggingClass:Se,eventResizingClass:Ce,externalDroppingClass:Re},He=Wt.EventRenderer=dt.extend({view:null,component:null,fillRenderer:null,fgSegs:null,bgSegs:null,eventTimeFormat:null,displayEventTime:null,displayEventEnd:null,constructor:function(t,e){this.view=t._getView(),this.component=t,this.fillRenderer=e},opt:function(t){return this.view.opt(t)},rangeUpdated:function(){var t,e;this.eventTimeFormat=this.opt("eventTimeFormat")||this.opt("timeFormat")||this.computeEventTimeFormat(),t=this.opt("displayEventTime"),null==t&&(t=this.computeDisplayEventTime()),e=this.opt("displayEventEnd"),null==e&&(e=this.computeDisplayEventEnd()),this.displayEventTime=t,this.displayEventEnd=e},render:function(t){var e,n,i,r=this.component._getDateProfile(),s=[],o=[];for(e in t)n=t[e],i=n.sliceRenderRanges(r.activeUnzonedRange),n.getEventDef().hasBgRendering()?s.push.apply(s,i):o.push.apply(o,i);this.renderBgRanges(s),this.renderFgRanges(o)},unrender:function(){this.unrenderBgRanges(),this.unrenderFgRanges()},renderFgRanges:function(t){var e=this.component.eventRangesToEventFootprints(t),n=this.component.eventFootprintsToSegs(e);n=this.renderFgSegEls(n),!1!==this.renderFgSegs(n)&&(this.fgSegs=n)},unrenderFgRanges:function(){this.unrenderFgSegs(this.fgSegs||[]),this.fgSegs=null},renderBgRanges:function(t){var e=this.component.eventRangesToEventFootprints(t),n=this.component.eventFootprintsToSegs(e);!1!==this.renderBgSegs(n)&&(this.bgSegs=n)},unrenderBgRanges:function(){this.unrenderBgSegs(),this.bgSegs=null},getSegs:function(){return(this.bgSegs||[]).concat(this.fgSegs||[])},renderFgSegs:function(t){return!1},unrenderFgSegs:function(t){},renderBgSegs:function(t){var e=this;if(!this.fillRenderer)return!1;this.fillRenderer.renderSegs("bgEvent",t,{getClasses:function(t){return e.getBgClasses(t.footprint.eventDef)},getCss:function(t){return{"background-color":e.getBgColor(t.footprint.eventDef)}},filterEl:function(t,n){return e.filterEventRenderEl(t.footprint,n)}})},unrenderBgSegs:function(){this.fillRenderer&&this.fillRenderer.unrender("bgEvent")},renderFgSegEls:function(e,n){var i,r=this,s=this.view.hasPublicHandlers("eventRender"),o="",a=[];if(e.length){for(i=0;i"},attachSegEls:function(t,e){},reportEls:function(e,n){this.elsByFill[e]?this.elsByFill[e]=this.elsByFill[e].add(n):this.elsByFill[e]=t(n)}}),Pe=Wt.HelperRenderer=dt.extend({view:null,component:null,eventRenderer:null,helperEls:null,constructor:function(t,e){this.view=t._getView(),this.component=t,this.eventRenderer=e},renderComponentFootprint:function(t){this.renderEventFootprints([this.fabricateEventFootprint(t)])},renderEventDraggingFootprints:function(t,e,n){this.renderEventFootprints(t,e,"fc-dragging",n?null:this.view.opt("dragOpacity"))},renderEventResizingFootprints:function(t,e,n){this.renderEventFootprints(t,e,"fc-resizing")},renderEventFootprints:function(t,e,n,i){var r,s=this.component.eventFootprintsToSegs(t),o="fc-helper "+(n||"");for(s=this.eventRenderer.renderFgSegEls(s),r=0;r'+i+"
":""+i+""},getAllDayHtml:function(){return this.opt("allDayHtml")||et(this.opt("allDayText"))},getDayClasses:function(t,e){var n,i=this._getView(),r=[];return this.dateProfile.activeUnzonedRange.containsDate(t)?(r.push("fc-"+jt[t.day()]),i.isDateInOtherMonth(t,this.dateProfile)&&r.push("fc-other-month"),n=i.calendar.getNow(),t.isSame(n,"day")?(r.push("fc-today"),!0!==e&&r.push(i.calendar.theme.getClass("today"))):t=this.nextDayThreshold&&s.add(1,"days"),s<=n&&(s=n.clone().add(1,"days")),{start:n,end:s}},isMultiDayRange:function(t){var e=this.computeDayRange(t);return e.end.diff(e.start,"days")>1}});var ke=Wt.InteractiveDateComponent=Fe.extend({dateClickingClass:null,dateSelectingClass:null,eventPointingClass:null,eventDraggingClass:null,eventResizingClass:null,externalDroppingClass:null,dateClicking:null,dateSelecting:null,eventPointing:null,eventDragging:null,eventResizing:null,externalDropping:null,segSelector:".fc-event-container > *",largeUnit:null,constructor:function(){Fe.call(this),this.dateSelectingClass&&(this.dateClicking=new this.dateClickingClass(this)),this.dateSelectingClass&&(this.dateSelecting=new this.dateSelectingClass(this)),this.eventPointingClass&&(this.eventPointing=new this.eventPointingClass(this)),this.eventDraggingClass&&this.eventPointing&&(this.eventDragging=new this.eventDraggingClass(this,this.eventPointing)),this.eventResizingClass&&this.eventPointing&&(this.eventResizing=new this.eventResizingClass(this,this.eventPointing)),this.externalDroppingClass&&(this.externalDropping=new this.externalDroppingClass(this))},setElement:function(t){Fe.prototype.setElement.apply(this,arguments),this.dateClicking&&this.dateClicking.bindToEl(t),this.dateSelecting&&this.dateSelecting.bindToEl(t),this.bindAllSegHandlersToEl(t)},unrender:function(){this.endInteractions(),Fe.prototype.unrender.apply(this,arguments)},executeEventUnrender:function(){this.endInteractions(),Fe.prototype.executeEventUnrender.apply(this,arguments)},bindGlobalHandlers:function(){Fe.prototype.bindGlobalHandlers.apply(this,arguments),this.externalDropping&&this.externalDropping.bindToDocument()},unbindGlobalHandlers:function(){Fe.prototype.unbindGlobalHandlers.apply(this,arguments),this.externalDropping&&this.externalDropping.unbindFromDocument()},bindDateHandlerToEl:function(e,n,i){var r=this;this.el.on(n,function(e){if(!t(e.target).is(r.segSelector+","+r.segSelector+" *,.fc-more,a[data-goto]"))return i.call(r,e)})},bindAllSegHandlersToEl:function(t){[this.eventPointing,this.eventDragging,this.eventResizing].forEach(function(e){e&&e.bindToEl(t)})},bindSegHandlerToEl:function(e,n,i){var r=this;e.on(n,this.segSelector,function(e){var n=t(this).data("fc-seg");if(n&&!r.shouldIgnoreEventPointing())return i.call(r,n,e)})},shouldIgnoreMouse:function(){return me.get().shouldIgnoreMouse()},shouldIgnoreTouch:function(){var t=this._getView();return t.isSelected||t.selectedEvent},shouldIgnoreEventPointing:function(){return this.eventDragging&&this.eventDragging.isDragging||this.eventResizing&&this.eventResizing.isResizing},canStartSelection:function(t,e){return S(e)&&!this.canStartResize(t,e)&&(this.isEventDefDraggable(t.footprint.eventDef)||this.isEventDefResizable(t.footprint.eventDef))},canStartDrag:function(t,e){return!this.canStartResize(t,e)&&this.isEventDefDraggable(t.footprint.eventDef)},canStartResize:function(e,n){var i=this._getView(),r=e.footprint.eventDef;return(!S(n)||i.isEventDefSelected(r))&&this.isEventDefResizable(r)&&t(n.target).is(".fc-resizer")},endInteractions:function(){[this.dateClicking,this.dateSelecting,this.eventPointing,this.eventDragging,this.eventResizing].forEach(function(t){t&&t.end()})},isEventDefDraggable:function(t){return this.isEventDefStartEditable(t)},isEventDefStartEditable:function(t){var e=t.isStartExplicitlyEditable();return null==e&&null==(e=this.opt("eventStartEditable"))&&(e=this.isEventDefGenerallyEditable(t)),e},isEventDefGenerallyEditable:function(t){var e=t.isExplicitlyEditable();return null==e&&(e=this.opt("editable")),e},isEventDefResizableFromStart:function(t){return this.opt("eventResizableFromStart")&&this.isEventDefResizable(t)},isEventDefResizableFromEnd:function(t){return this.isEventDefResizable(t)},isEventDefResizable:function(t){var e=t.isDurationExplicitlyEditable();return null==e&&null==(e=this.opt("eventDurationEditable"))&&(e=this.isEventDefGenerallyEditable(t)),e},diffDates:function(t,e){return this.largeUnit?L(t,e,this.largeUnit):B(t,e)},isEventInstanceGroupAllowed:function(t){var e,n=this._getView(),i=this.dateProfile,r=this.eventRangesToEventFootprints(t.getAllEventRanges());for(e=0;e=e.length?e[e.length-1]+1:e[n]},computeColHeadFormat:function(){return this.rowCnt>1||this.colCnt>10?"ddd":this.colCnt>1?this.opt("dayOfMonthFormat"):"dddd"},sliceRangeByRow:function(t){var e,n,i,r,s,o=this.daysPerRow,a=this.view.computeDayRange(t),l=this.getDateDayIndex(a.start),u=this.getDateDayIndex(a.end.clone().subtract(1,"days")),c=[];for(e=0;e'+this.renderHeadTrHtml()+"
"},renderHeadIntroHtml:function(){return this.renderIntroHtml()},renderHeadTrHtml:function(){return""+(this.isRTL?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRTL?this.renderHeadIntroHtml():"")+""},renderHeadDateCellsHtml:function(){var t,e,n=[];for(t=0;t1?' colspan="'+e+'"':"")+(n?" "+n:"")+">"+(r?i.buildGotoAnchorHtml({date:t,forceOff:this.rowCnt>1||1===this.colCnt},o):o)+""},renderBgTrHtml:function(t){return""+(this.isRTL?"":this.renderBgIntroHtml(t))+this.renderBgCellsHtml(t)+(this.isRTL?this.renderBgIntroHtml(t):"")+""},renderBgIntroHtml:function(t){return this.renderIntroHtml()},renderBgCellsHtml:function(t){var e,n,i=[];for(e=0;e"},renderIntroHtml:function(){},bookendCells:function(t){var e=this.renderIntroHtml();e&&(this.isRTL?t.append(e):t.prepend(e))}},Ae=Wt.View=ke.extend({type:null,name:null,title:null,calendar:null,viewSpec:null,options:null,renderQueue:null,batchRenderDepth:0,queuedScroll:null,isSelected:!1,selectedEventInstance:null,eventOrderSpecs:null,isHiddenDayHash:null,isNowIndicatorRendered:null,initialNowDate:null,initialNowQueriedMs:null,nowIndicatorTimeoutID:null,nowIndicatorIntervalID:null,constructor:function(t,e){this.calendar=t,this.viewSpec=e,this.type=e.type,this.options=e.options,this.name=this.type,ke.call(this),this.initRenderQueue(),this.initHiddenDays(),this.bindBaseRenderHandlers(),this.eventOrderSpecs=P(this.opt("eventOrder")),this.initialize&&this.initialize()},_getView:function(){return this},opt:function(t){return this.options[t]},initRenderQueue:function(){this.renderQueue=new de({event:this.opt("eventRenderWait")}),this.renderQueue.on("start",this.onRenderQueueStart.bind(this)),this.renderQueue.on("stop",this.onRenderQueueStop.bind(this)),this.on("before:change",this.startBatchRender),this.on("change",this.stopBatchRender)},onRenderQueueStart:function(){this.calendar.freezeContentHeight(),this.addScroll(this.queryScroll())},onRenderQueueStop:function(){this.calendar.updateViewSize()&&this.popScroll(),this.calendar.thawContentHeight()},startBatchRender:function(){this.batchRenderDepth++||this.renderQueue.pause()},stopBatchRender:function(){--this.batchRenderDepth||this.renderQueue.resume()},requestRender:function(t,e,n){this.renderQueue.queue(t,e,n)},whenSizeUpdated:function(t){this.renderQueue.isRunning?this.renderQueue.one("stop",t.bind(this)):t.call(this)},computeTitle:function(t){var e;return e=/^(year|month)$/.test(t.currentRangeUnit)?t.currentUnzonedRange:t.activeUnzonedRange,this.formatRange({start:this.calendar.msToMoment(e.startMs,t.isRangeAllDay),end:this.calendar.msToMoment(e.endMs,t.isRangeAllDay)},t.isRangeAllDay,this.opt("titleFormat")||this.computeTitleFormat(t),this.opt("titleRangeSeparator"))},computeTitleFormat:function(t){var e=t.currentRangeUnit;return"year"==e?"YYYY":"month"==e?this.opt("monthYearFormat"):t.currentUnzonedRange.as("days")>1?"ll":"LL"},setDate:function(t){var e=this.get("dateProfile"),n=this.buildDateProfile(t,null,!0);e&&e.activeUnzonedRange.equals(n.activeUnzonedRange)||this.set("dateProfile",n)},unsetDate:function(){this.unset("dateProfile")},fetchInitialEvents:function(t){var e=this.calendar,n=t.isRangeAllDay&&!this.usesMinMaxTime;return e.requestEvents(e.msToMoment(t.activeUnzonedRange.startMs,n),e.msToMoment(t.activeUnzonedRange.endMs,n))},bindEventChanges:function(){this.listenTo(this.calendar,"eventsReset",this.resetEvents)},unbindEventChanges:function(){this.stopListeningTo(this.calendar,"eventsReset")},setEvents:function(t){this.set("currentEvents",t),this.set("hasEvents",!0)},unsetEvents:function(){this.unset("currentEvents"),this.unset("hasEvents")},resetEvents:function(t){this.startBatchRender(),this.unsetEvents(),this.setEvents(t),this.stopBatchRender()},requestDateRender:function(t){var e=this;this.requestRender(function(){e.executeDateRender(t)},"date","init")},requestDateUnrender:function(){var t=this;this.requestRender(function(){t.executeDateUnrender()},"date","destroy")},executeDateRender:function(t){Fe.prototype.executeDateRender.apply(this,arguments),this.render&&this.render(),this.trigger("datesRendered"),this.addScroll({isDateInit:!0}),this.startNowIndicator()},executeDateUnrender:function(){this.unselect(),this.stopNowIndicator(),this.trigger("before:datesUnrendered"),this.destroy&&this.destroy(),Fe.prototype.executeDateUnrender.apply(this,arguments)},bindBaseRenderHandlers:function(){var t=this;this.on("datesRendered",function(){t.whenSizeUpdated(t.triggerViewRender)}),this.on("before:datesUnrendered",function(){t.triggerViewDestroy()})},triggerViewRender:function(){this.publiclyTrigger("viewRender",{context:this,args:[this,this.el]})},triggerViewDestroy:function(){this.publiclyTrigger("viewDestroy",{context:this,args:[this,this.el]})},requestEventsRender:function(t){var e=this;this.requestRender(function(){e.executeEventRender(t),e.whenSizeUpdated(e.triggerAfterEventsRendered)},"event","init")},requestEventsUnrender:function(){var t=this;this.requestRender(function(){t.triggerBeforeEventsDestroyed(),t.executeEventUnrender()},"event","destroy")},requestBusinessHoursRender:function(t){var e=this;this.requestRender(function(){e.renderBusinessHours(t)},"businessHours","init")},requestBusinessHoursUnrender:function(){var t=this;this.requestRender(function(){t.unrenderBusinessHours()},"businessHours","destroy")},bindGlobalHandlers:function(){ke.prototype.bindGlobalHandlers.apply(this,arguments),this.listenTo(me.get(),{touchstart:this.processUnselect,mousedown:this.handleDocumentMousedown})},unbindGlobalHandlers:function(){ke.prototype.unbindGlobalHandlers.apply(this,arguments),this.stopListeningTo(me.get())},startNowIndicator:function(){var t,n,i,r=this;this.opt("nowIndicator")&&(t=this.getNowIndicatorUnit())&&(n=lt(this,"updateNowIndicator"),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=+new Date,i=this.initialNowDate.clone().startOf(t).add(1,t)-this.initialNowDate,this.nowIndicatorTimeoutID=setTimeout(function(){r.nowIndicatorTimeoutID=null,n(),i=+e.duration(1,t),i=Math.max(100,i),r.nowIndicatorIntervalID=setInterval(n,i)},i))},updateNowIndicator:function(){this.isDatesRendered&&this.initialNowDate&&(this.unrenderNowIndicator(),this.renderNowIndicator(this.initialNowDate.clone().add(new Date-this.initialNowQueriedMs)),this.isNowIndicatorRendered=!0)},stopNowIndicator:function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearInterval(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},updateSize:function(t,e,n){this.setHeight?this.setHeight(t,e):ke.prototype.updateSize.apply(this,arguments),this.updateNowIndicator()},addScroll:function(e){var n=this.queuedScroll||(this.queuedScroll={});t.extend(n,e)},popScroll:function(){this.applyQueuedScroll(),this.queuedScroll=null},applyQueuedScroll:function(){this.queuedScroll&&this.applyScroll(this.queuedScroll)},queryScroll:function(){var e={};return this.isDatesRendered&&t.extend(e,this.queryDateScroll()),e},applyScroll:function(e){e.isDateInit&&this.isDatesRendered&&t.extend(e,this.computeInitialDateScroll()),this.isDatesRendered&&this.applyDateScroll(e)},computeInitialDateScroll:function(){return{}},queryDateScroll:function(){return{}},applyDateScroll:function(t){},reportEventDrop:function(t,n,i,r){var s=this.calendar.eventManager,o=s.mutateEventsWithId(t.def.id,n,this.calendar),a=n.dateMutation;a&&(t.dateProfile=a.buildNewDateProfile(t.dateProfile,this.calendar)),this.triggerEventDrop(t,a&&a.dateDelta||e.duration(),o,i,r)},triggerEventDrop:function(t,e,n,i,r){this.publiclyTrigger("eventDrop",{context:i[0],args:[t.toLegacy(),e,n,r,{},this]})},reportExternalDrop:function(t,e,n,i,r,s){e&&this.calendar.eventManager.addEventDef(t,n),this.triggerExternalDrop(t,e,i,r,s)},triggerExternalDrop:function(t,e,n,i,r){this.publiclyTrigger("drop",{context:n[0],args:[t.dateProfile.start.clone(),i,r,this]}),e&&this.publiclyTrigger("eventReceive",{context:this,args:[t.buildInstance().toLegacy(),this]})},reportEventResize:function(t,e,n,i){var r=this.calendar.eventManager,s=r.mutateEventsWithId(t.def.id,e,this.calendar);t.dateProfile=e.dateMutation.buildNewDateProfile(t.dateProfile,this.calendar),this.triggerEventResize(t,e.dateMutation.endDelta,s,n,i)},triggerEventResize:function(t,e,n,i,r){this.publiclyTrigger("eventResize",{context:i[0],args:[t.toLegacy(),e,n,r,{},this]})},select:function(t,e){this.unselect(e),this.renderSelectionFootprint(t),this.reportSelection(t,e)},renderSelectionFootprint:function(t,e){this.renderSelection?this.renderSelection(t.toLegacy(this.calendar)):ke.prototype.renderSelectionFootprint.apply(this,arguments)},reportSelection:function(t,e){this.isSelected=!0,this.triggerSelect(t,e)},triggerSelect:function(t,e){var n=this.calendar.footprintToDateProfile(t);this.publiclyTrigger("select",{context:this,args:[n.start,n.end,e,this]})},unselect:function(t){this.isSelected&&(this.isSelected=!1,this.destroySelection&&this.destroySelection(),this.unrenderSelection(),this.publiclyTrigger("unselect",{context:this,args:[t,this]}))},selectEventInstance:function(t){this.selectedEventInstance&&this.selectedEventInstance===t||(this.unselectEventInstance(),this.getEventSegs().forEach(function(e){e.footprint.eventInstance===t&&e.el&&e.el.addClass("fc-selected")}),this.selectedEventInstance=t)},unselectEventInstance:function(){this.selectedEventInstance&&(this.getEventSegs().forEach(function(t){t.el&&t.el.removeClass("fc-selected")}),this.selectedEventInstance=null)},isEventDefSelected:function(t){return this.selectedEventInstance&&this.selectedEventInstance.def.id===t.id},handleDocumentMousedown:function(t){D(t)&&this.processUnselect(t)},processUnselect:function(t){this.processRangeUnselect(t),this.processEventUnselect(t)},processRangeUnselect:function(e){var n;this.isSelected&&this.opt("unselectAuto")&&((n=this.opt("unselectCancel"))&&t(e.target).closest(n).length||this.unselect(e))},processEventUnselect:function(e){this.selectedEventInstance&&(t(e.target).closest(".fc-selected").length||this.unselectEventInstance())},triggerBaseRendered:function(){this.publiclyTrigger("viewRender",{context:this,args:[this,this.el]})},triggerBaseUnrendered:function(){this.publiclyTrigger("viewDestroy",{context:this,args:[this,this.el]})},triggerDayClick:function(t,e,n){var i=this.calendar.footprintToDateProfile(t);this.publiclyTrigger("dayClick",{context:e,args:[i.start,n,this]})}});Ae.watch("displayingDates",["isInDom","dateProfile"],function(t){this.requestDateRender(t.dateProfile)},function(){this.requestDateUnrender()}),Ae.watch("displayingBusinessHours",["displayingDates","businessHourGenerator"],function(t){this.requestBusinessHoursRender(t.businessHourGenerator)},function(){this.requestBusinessHoursUnrender()}),Ae.watch("initialEvents",["dateProfile"],function(t){return this.fetchInitialEvents(t.dateProfile)}),Ae.watch("bindingEvents",["initialEvents"],function(t){this.setEvents(t.initialEvents),this.bindEventChanges()},function(){this.unbindEventChanges(),this.unsetEvents()}),Ae.watch("displayingEvents",["displayingDates","hasEvents"],function(){this.requestEventsRender(this.get("currentEvents"))},function(){this.requestEventsUnrender()}),Ae.watch("title",["dateProfile"],function(t){return this.title=this.computeTitle(t.dateProfile)}),Ae.watch("legacyDateProps",["dateProfile"],function(t){var e=this.calendar,n=t.dateProfile;this.start=e.msToMoment(n.activeUnzonedRange.startMs,n.isRangeAllDay),this.end=e.msToMoment(n.activeUnzonedRange.endMs,n.isRangeAllDay),this.intervalStart=e.msToMoment(n.currentUnzonedRange.startMs,n.isRangeAllDay),this.intervalEnd=e.msToMoment(n.currentUnzonedRange.endMs,n.isRangeAllDay)}),Ae.mixin({usesMinMaxTime:!1,start:null,end:null,intervalStart:null,intervalEnd:null,buildPrevDateProfile:function(t){var e=this.get("dateProfile"),n=t.clone().startOf(e.currentRangeUnit).subtract(e.dateIncrement);return this.buildDateProfile(n,-1)},buildNextDateProfile:function(t){var e=this.get("dateProfile"),n=t.clone().startOf(e.currentRangeUnit).add(e.dateIncrement);return this.buildDateProfile(n,1)},buildDateProfile:function(t,n,i){var r,s,o,a,l,u,c=!t.hasTime(),h=null,d=null;return r=this.buildValidRange(),r=this.trimHiddenDays(r),i&&(t=this.calendar.msToUtcMoment(r.constrainDate(t),c)),s=this.buildCurrentRangeInfo(t,n),o=/^(year|month|week|day)$/.test(s.unit),a=this.buildRenderRange(this.trimHiddenDays(s.unzonedRange),s.unit,o),a=this.trimHiddenDays(a),l=a.clone(),this.opt("showNonCurrentDates")||(l=l.intersect(s.unzonedRange)),h=e.duration(this.opt("minTime")),d=e.duration(this.opt("maxTime")),l=this.adjustActiveRange(l,h,d),l=l.intersect(r),l&&(t=this.calendar.msToUtcMoment(l.constrainDate(t),c)),u=s.unzonedRange.intersectsWith(r),{validUnzonedRange:r,currentUnzonedRange:s.unzonedRange,currentRangeUnit:s.unit,isRangeAllDay:o,activeUnzonedRange:l,renderUnzonedRange:a,minTime:h,maxTime:d,isValid:u,date:t,dateIncrement:this.buildDateIncrement(s.duration)}},buildValidRange:function(){return this.getUnzonedRangeOption("validRange",this.calendar.getNow())||new Ue},buildCurrentRangeInfo:function(t,e){var n,i=null,r=null,s=null;return this.viewSpec.duration?(i=this.viewSpec.duration,r=this.viewSpec.durationUnit,s=this.buildRangeFromDuration(t,e,i,r)):(n=this.opt("dayCount"))?(r="day",s=this.buildRangeFromDayCount(t,e,n)):(s=this.buildCustomVisibleRange(t))?r=O(s.getStart(),s.getEnd()):(i=this.getFallbackDuration(),r=O(i),s=this.buildRangeFromDuration(t,e,i,r)),{duration:i,unit:r,unzonedRange:s}},getFallbackDuration:function(){return e.duration({days:1})},adjustActiveRange:function(t,e,n){var i=t.getStart(),r=t.getEnd();return this.usesMinMaxTime&&(e<0&&i.time(0).add(e),n>864e5&&r.time(n-864e5)),new Ue(i,r)},buildRangeFromDuration:function(t,n,i,r){var s,o,a,l=this.opt("dateAlignment"),u=t.clone();return i.as("days")<=1&&this.isHiddenDay(u)&&(u=this.skipHiddenDays(u,n),u.startOf("day")),l||(o=this.opt("dateIncrement"),o?(a=e.duration(o),l=a").prependTo(n),this.initToolbars(),this.renderHeader(),this.renderFooter(),this.renderView(this.opt("defaultView")),this.opt("handleWindowResize")&&t(window).resize(this.windowResizeProxy=ut(this.windowResize.bind(this),this.opt("windowResizeDelay")))},destroy:function(){this.view&&this.clearView(),this.toolbarsManager.proxyCall("removeElement"),this.contentEl.remove(),this.el.removeClass("fc fc-ltr fc-rtl"),this.optionsModel.unwatch("settingTheme"),this.optionsModel.unwatch("settingBusinessHourGenerator"),this.el.off(".fc"),this.windowResizeProxy&&(t(window).unbind("resize",this.windowResizeProxy),this.windowResizeProxy=null),me.unneeded()},elementVisible:function(){return this.el.is(":visible")},bindViewHandlers:function(t){var e=this;t.watch("titleForCalendar",["title"],function(n){t===e.view&&e.setToolbarsTitle(n.title)}),t.watch("dateProfileForCalendar",["dateProfile"],function(n){t===e.view&&(e.currentDate=n.dateProfile.date,e.updateToolbarButtons(n.dateProfile))})},unbindViewHandlers:function(t){t.unwatch("titleForCalendar"),t.unwatch("dateProfileForCalendar")},renderView:function(e){var n,i=this.view;this.freezeContentHeight(),i&&e&&i.type!==e&&this.clearView(),!this.view&&e&&(n=this.view=this.viewsByType[e]||(this.viewsByType[e]=this.instantiateView(e)),this.bindViewHandlers(n),n.setElement(t("
").appendTo(this.contentEl)),this.toolbarsManager.proxyCall("activateButton",e)),this.view&&(this.view.get("businessHourGenerator")!==this.businessHourGenerator&&this.view.set("businessHourGenerator",this.businessHourGenerator),this.view.setDate(this.currentDate)),this.thawContentHeight()},clearView:function(){var t=this.view;this.toolbarsManager.proxyCall("deactivateButton",t.type),this.unbindViewHandlers(t),t.removeElement(),t.unsetDate(),this.view=null},reinitView:function(){var t=this.view,e=t.queryScroll();this.freezeContentHeight(),this.clearView(),this.calcSize(),this.renderView(t.type),this.view.applyScroll(e),this.thawContentHeight()},getSuggestedViewHeight:function(){return null===this.suggestedViewHeight&&this.calcSize(),this.suggestedViewHeight},isHeightAuto:function(){return"auto"===this.opt("contentHeight")||"auto"===this.opt("height")},updateViewSize:function(t){var e,n=this.view;if(!this.ignoreUpdateViewSize&&n)return t&&(this.calcSize(),e=n.queryScroll()),this.ignoreUpdateViewSize++,n.updateSize(this.getSuggestedViewHeight(),this.isHeightAuto(),t),this.ignoreUpdateViewSize--,t&&n.applyScroll(e),!0},calcSize:function(){this.elementVisible()&&this._calcSize()},_calcSize:function(){var t=this.opt("contentHeight"),e=this.opt("height");this.suggestedViewHeight="number"==typeof t?t:"function"==typeof t?t():"number"==typeof e?e-this.queryToolbarsHeight():"function"==typeof e?e()-this.queryToolbarsHeight():"parent"===e?this.el.parent().height()-this.queryToolbarsHeight():Math.round(this.contentEl.width()/Math.max(this.opt("aspectRatio"),.5))},windowResize:function(t){t.target===window&&this.view&&this.view.isDatesRendered&&this.updateViewSize(!0)&&this.publiclyTrigger("windowResize",[this.view])},freezeContentHeight:function(){this.freezeContentHeightDepth++||this.forceFreezeContentHeight()},forceFreezeContentHeight:function(){this.contentEl.css({width:"100%",height:this.contentEl.height(),overflow:"hidden"})},thawContentHeight:function(){this.freezeContentHeightDepth--,this.contentEl.css({width:"",height:"",overflow:""}),this.freezeContentHeightDepth&&this.forceFreezeContentHeight()}}),Le.mixin({header:null,footer:null,toolbarsManager:null,initToolbars:function(){this.header=new bt(this,this.computeHeaderOptions()),this.footer=new bt(this,this.computeFooterOptions()),this.toolbarsManager=new yt([this.header,this.footer])},computeHeaderOptions:function(){return{extraClasses:"fc-header-toolbar",layout:this.opt("header")}},computeFooterOptions:function(){return{extraClasses:"fc-footer-toolbar",layout:this.opt("footer")}},renderHeader:function(){var t=this.header;t.setToolbarOptions(this.computeHeaderOptions()),t.render(),t.el&&this.el.prepend(t.el)},renderFooter:function(){var t=this.footer;t.setToolbarOptions(this.computeFooterOptions()),t.render(),t.el&&this.el.append(t.el)},setToolbarsTitle:function(t){this.toolbarsManager.proxyCall("updateTitle",t)},updateToolbarButtons:function(t){var e=this.getNow(),n=this.view,i=n.buildDateProfile(e),r=n.buildPrevDateProfile(this.currentDate),s=n.buildNextDateProfile(this.currentDate);this.toolbarsManager.proxyCall(i.isValid&&!t.currentUnzonedRange.containsDate(e)?"enableButton":"disableButton","today"),this.toolbarsManager.proxyCall(r.isValid?"enableButton":"disableButton","prev"),this.toolbarsManager.proxyCall(s.isValid?"enableButton":"disableButton","next")},queryToolbarsHeight:function(){return this.toolbarsManager.items.reduce(function(t,e){return t+(e.el?e.el.outerHeight(!0):0)},0)}}),Le.prototype.isEventInstanceGroupAllowed=function(t){var e,n=t.getEventDef(),i=this.eventRangesToEventFootprints(t.getAllEventRanges()),r=this.getPeerEventInstances(n),s=r.map(Pt),o=this.eventRangesToEventFootprints(s),a=n.getConstraint(),l=n.getOverlap(),u=this.opt("eventAllow");for(e=0;et.startMs)&&(null===this.startMs||null===t.endMs||this.startMs=this.startMs)&&(null===this.endMs||null!==t.endMs&&t.endMs<=this.endMs)},containsDate:function(t){var e=t.valueOf();return(null===this.startMs||e>=this.startMs)&&(null===this.endMs||e=this.endMs&&(e=this.endMs-1),e},equals:function(t){return this.startMs===t.startMs&&this.endMs===t.endMs},clone:function(){var t=new Ue(this.startMs,this.endMs);return t.isStart=this.isStart,t.isEnd=this.isEnd,t},getStart:function(){if(null!==this.startMs)return Wt.moment.utc(this.startMs).stripZone()},getEnd:function(){if(null!==this.endMs)return Wt.moment.utc(this.endMs).stripZone()},as:function(t){return e.utc(this.endMs).diff(e.utc(this.startMs),t,!0)}}),We=Wt.ComponentFootprint=dt.extend({unzonedRange:null,isAllDay:!1,constructor:function(t,e){this.unzonedRange=t,this.isAllDay=e},toLegacy:function(t){return{start:t.msToMoment(this.unzonedRange.startMs,this.isAllDay),end:t.msToMoment(this.unzonedRange.endMs,this.isAllDay)}}}),_e=dt.extend(re,{start:null,end:null,timezone:null,unzonedRange:null,requestsByUid:null,pendingCnt:0,freezeDepth:0,stuntedReleaseCnt:0,releaseCnt:0,eventDefsByUid:null,eventDefsById:null,eventInstanceGroupsById:null,constructor:function(t,e,n){this.start=t,this.end=e,this.timezone=n,this.unzonedRange=new Ue(t.clone().stripZone(),e.clone().stripZone()),this.requestsByUid={},this.eventDefsByUid={},this.eventDefsById={},this.eventInstanceGroupsById={}},isWithinRange:function(t,e){return!t.isBefore(this.start)&&!e.isAfter(this.end)},requestSources:function(t){this.freeze();for(var e=0;e
'),s=r.find("tr"),a>0&&s.append(''),s.append(n.el.attr("colspan",l-a)),l'),this.component.bookendCells(s),r}}),mn=He.extend({dayGrid:null,rowStructs:null,constructor:function(t){He.apply(this,arguments),this.dayGrid=t},renderBgRanges:function(e){e=t.grep(e,function(t){return t.eventDef.isAllDay()}),He.prototype.renderBgRanges.call(this,e)},renderFgSegs:function(e){var n=this.rowStructs=this.renderSegRows(e);this.dayGrid.rowEls.each(function(e,i){t(i).find(".fc-content-skeleton > table").append(n[e].tbodyEl)})},unrenderFgSegs:function(){for(var t,e=this.rowStructs||[];t=e.pop();)t.tbodyEl.remove();this.rowStructs=null},renderSegRows:function(t){var e,n,i=[];for(e=this.groupSegRows(t),n=0;n"),a.append(c)),v[r][o]=c,m[r][o]=c,o++}var r,s,o,a,l,u,c,h=this.dayGrid.colCnt,d=this.buildSegLevels(n),f=Math.max(1,d.length),g=t(""),p=[],v=[],m=[];for(r=0;r"),p.push([]),v.push([]),m.push([]),s)for(l=0;l').append(u.el),u.leftCol!=u.rightCol?c.attr("colspan",u.rightCol-u.leftCol+1):m[r][o]=c;o<=u.rightCol;)v[r][o]=c,p[r][o]=u,o++;a.append(c)}i(h),this.dayGrid.bookendCells(a),g.append(a)}return{row:e,tbodyEl:g,cellMatrix:v,segMatrix:p,segLevels:d,segs:n}},buildSegLevels:function(t){var e,n,i,r=[];for(this.sortEventSegs(t),e=0;e'+et(n)+""),i=''+(et(s.title||"")||" ")+"",'
'+(this.isRTL?i+" "+d:d+" "+i)+"
"+(l?'
':"")+(u?'
':"")+""}}),yn=Pe.extend({renderSegs:function(e,n){var i,r=[];return i=this.eventRenderer.renderSegRows(e),this.component.rowEls.each(function(e,s){var o,a,l=t(s),u=t('
');n&&n.row===e?a=n.el.position().top:(o=l.find(".fc-content-skeleton tbody"),o.length||(o=l.find(".fc-content-skeleton table")),a=o.position().top),u.css("top",a).find("table").append(i[e].tbodyEl),l.append(u),r.push(u[0])}),t(r)}}),wn=Wt.DayGrid=ke.extend(Ie,Be,{eventRendererClass:mn,businessHourRendererClass:Me,helperRendererClass:yn,fillRendererClass:vn,view:null,helperRenderer:null,cellWeekNumbersVisible:!1,bottomCoordPadding:0,headContainerEl:null,rowEls:null,cellEls:null,rowCoordCache:null,colCoordCache:null,isRigid:!1,hasAllDayBusinessHours:!0,constructor:function(t){this.view=t,ke.call(this)},componentFootprintToSegs:function(t){var e,n,i=this.sliceRangeByRow(t.unzonedRange);for(e=0;e
'+this.renderBgTrHtml(t)+'
'+(this.getIsNumbersVisible()?""+this.renderNumberTrHtml(t)+"":"")+"
"},getIsNumbersVisible:function(){return this.getIsDayNumbersVisible()||this.cellWeekNumbersVisible},getIsDayNumbersVisible:function(){return this.rowCnt>1},renderNumberTrHtml:function(t){return""+(this.isRTL?"":this.renderNumberIntroHtml(t))+this.renderNumberCellsHtml(t)+(this.isRTL?this.renderNumberIntroHtml(t):"")+""},renderNumberIntroHtml:function(t){return this.renderIntroHtml()},renderNumberCellsHtml:function(t){var e,n,i=[];for(e=0;e",this.cellWeekNumbersVisible&&t.day()==n&&(r+=i.buildGotoAnchorHtml({date:t,type:"week"},{class:"fc-week-number"},t.format("w"))),o&&(r+=i.buildGotoAnchorHtml(t,{class:"fc-day-number"},t.date())),r+=""):""},prepareHits:function(){this.colCoordCache.build(),this.rowCoordCache.build(),this.rowCoordCache.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},releaseHits:function(){this.colCoordCache.clear(),this.rowCoordCache.clear()},queryHit:function(t,e){if(this.colCoordCache.isLeftInBounds(t)&&this.rowCoordCache.isTopInBounds(e)){var n=this.colCoordCache.getHorizontalIndex(t),i=this.rowCoordCache.getVerticalIndex(e);if(null!=i&&null!=n)return this.getCellHit(i,n)}},getHitFootprint:function(t){var e=this.getCellRange(t.row,t.col);return new We(new Ue(e.start,e.end),!0)},getHitEl:function(t){return this.getCellEl(t.row,t.col)},getCellHit:function(t,e){return{row:t,col:e,component:this,left:this.colCoordCache.getLeftOffset(e),right:this.colCoordCache.getRightOffset(e),top:this.rowCoordCache.getTopOffset(t),bottom:this.rowCoordCache.getBottomOffset(t)}},getCellEl:function(t,e){return this.cellEls.eq(t*this.colCnt+e)},unrenderEvents:function(){this.removeSegPopover(),ke.prototype.unrenderEvents.apply(this,arguments)},getOwnEventSegs:function(){return ke.prototype.getOwnEventSegs.apply(this,arguments).concat(this.popoverSegs||[])},renderDrag:function(t,e,n){var i;for(i=0;i td > :first-child").each(n),r.position().top+s>a)return i;return!1},limitRow:function(e,n){function i(i){for(;E").append(y),d.append(m),b.push(m[0])),E++}var r,s,o,a,l,u,c,h,d,f,g,p,v,m,y,w=this,D=this.eventRenderer.rowStructs[e],b=[],E=0;if(n&&n').attr("rowspan",f),u=h[p],y=this.renderMoreLink(e,l.leftCol+p,[l].concat(u)),m=t("
").append(y),v.append(m),g.push(v[0]),b.push(v[0]);d.addClass("fc-limited").after(t(g)),o.push(d[0])}}i(this.colCnt),D.moreEls=t(b),D.limitedEls=t(o)}},unlimitRow:function(t){var e=this.eventRenderer.rowStructs[t];e.moreEls&&(e.moreEls.remove(),e.moreEls=null),e.limitedEls&&(e.limitedEls.removeClass("fc-limited"),e.limitedEls=null)},renderMoreLink:function(e,n,i){var r=this,s=this.view;return t('').text(this.getMoreLinkText(i.length)).on("click",function(o){var a=r.opt("eventLimitClick"),l=r.getCellDate(e,n),u=t(this),c=r.getCellEl(e,n),h=r.getCellSegs(e,n),d=r.resliceDaySegs(h,l),f=r.resliceDaySegs(i,l);"function"==typeof a&&(a=r.publiclyTrigger("eventLimitClick",{context:s,args:[{date:l.clone(),dayEl:c,moreEl:u,segs:d,hiddenSegs:f},o,s]})),"popover"===a?r.showSegPopover(e,n,u,d):"string"==typeof a&&s.calendar.zoomTo(l,a)})},showSegPopover:function(t,e,n,i){var r,s,o=this,a=this.view,l=n.parent();r=1==this.rowCnt?a.el:this.rowEls.eq(t),s={className:"fc-more-popover "+a.calendar.theme.getClass("popover"),content:this.renderSegPopoverContent(t,e,i),parentEl:a.el,top:r.offset().top,autoHide:!0,viewportConstrain:this.opt("popoverViewportConstrain"),hide:function(){o.popoverSegs&&o.triggerBeforeEventSegsDestroyed(o.popoverSegs),o.segPopover.removeElement(),o.segPopover=null,o.popoverSegs=null}},this.isRTL?s.right=l.offset().left+l.outerWidth()+1:s.left=l.offset().left-1,this.segPopover=new fe(s),this.segPopover.show(),this.bindAllSegHandlersToEl(this.segPopover.el),this.triggerAfterEventSegsRendered(i)},renderSegPopoverContent:function(e,n,i){var r,s=this.view,o=s.calendar.theme,a=this.getCellDate(e,n).format(this.opt("dayPopoverFormat")),l=t('
'+et(a)+'
'),u=l.find(".fc-event-container");for(i=this.eventRenderer.renderFgSegEls(i,!0),this.popoverSegs=i,r=0;r').appendTo(e),this.el.find(".fc-body > tr > td").append(e),this.dayGrid.headContainerEl=this.el.find(".fc-head-container"),this.dayGrid.setElement(n)},unrenderSkeleton:function(){this.dayGrid.removeElement(),this.scroller.destroy()},renderSkeletonHtml:function(){var t=this.calendar.theme;return''+(this.opt("columnHeader")?'':"")+'
 
'},weekNumberStyleAttr:function(){return null!==this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},hasRigidRows:function(){var t=this.opt("eventLimit");return t&&"number"!=typeof t},updateSize:function(t,e,n){var s,o,a=this.opt("eventLimit"),l=this.dayGrid.headContainerEl.find(".fc-row");if(!this.dayGrid.rowEls)return void(e||(s=this.computeScrollerHeight(t),this.scroller.setHeight(s)));Ae.prototype.updateSize.apply(this,arguments),this.dayGrid.colWeekNumbersVisible&&(this.weekNumberWidth=u(this.el.find(".fc-week-number"))),this.scroller.clear(),r(l),this.dayGrid.removeSegPopover(),a&&"number"==typeof a&&this.dayGrid.limitRows(a),s=this.computeScrollerHeight(t),this.setGridHeight(s,e),a&&"number"!=typeof a&&this.dayGrid.limitRows(a),e||(this.scroller.setHeight(s),o=this.scroller.getScrollbarWidths(),(o.left||o.right)&&(i(l,o),s=this.computeScrollerHeight(t),this.scroller.setHeight(s)),this.scroller.lockOverflow(o))},computeScrollerHeight:function(t){return t-c(this.el,this.scroller.el)},setGridHeight:function(t,e){e?l(this.dayGrid.rowEls):a(this.dayGrid.rowEls,t,!0)},computeInitialDateScroll:function(){return{top:0}},queryDateScroll:function(){return{top:this.scroller.getScrollTop()}},applyDateScroll:function(t){void 0!==t.top&&this.scroller.setScrollTop(t.top)}}),bn={colWeekNumbersVisible:!1,renderHeadIntroHtml:function(){var t=this.view;return this.colWeekNumbersVisible?'"+et(this.opt("weekNumberTitle"))+"":""},renderNumberIntroHtml:function(t){var e=this.view,n=this.getCellDate(t,0);return this.colWeekNumbersVisible?'"+e.buildGotoAnchorHtml({date:n,type:"week",forceOff:1===this.colCnt},n.format("w"))+"":""},renderBgIntroHtml:function(){var t=this.view;return this.colWeekNumbersVisible?'":""},renderIntroHtml:function(){var t=this.view +;return this.colWeekNumbersVisible?'":""},getIsNumbersVisible:function(){return wn.prototype.getIsNumbersVisible.apply(this,arguments)||this.colWeekNumbersVisible}},En=Wt.MonthView=Dn.extend({buildRenderRange:function(t,e,n){var i,r=Dn.prototype.buildRenderRange.apply(this,arguments),s=this.calendar.msToUtcMoment(r.startMs,n),o=this.calendar.msToUtcMoment(r.endMs,n);return this.isFixedWeeks()&&(i=Math.ceil(o.diff(s,"weeks",!0)),o.add(6-i,"weeks")),new Ue(s,o)},setGridHeight:function(t,e){e&&(t*=this.rowCnt/6),a(this.dayGrid.rowEls,t,!e)},isFixedWeeks:function(){return this.opt("fixedWeekCount")},isDateInOtherMonth:function(t,n){return t.month()!==e.utc(n.currentUnzonedRange.startMs).month()}});_t.basic={class:Dn},_t.basicDay={type:"basic",duration:{days:1}},_t.basicWeek={type:"basic",duration:{weeks:1}},_t.month={class:En,duration:{months:1},defaults:{fixedWeekCount:!0}};var Sn=xe.extend({attachSegEls:function(t,e){var n,i=this.component;return"bgEvent"===t?n=i.bgContainerEls:"businessHours"===t?n=i.businessContainerEls:"highlight"===t&&(n=i.highlightContainerEls),i.updateSegVerticals(e),i.attachSegsByCol(i.groupSegsByCol(e),n),e.map(function(t){return t.el[0]})}}),Cn=He.extend({timeGrid:null,constructor:function(t){He.apply(this,arguments),this.timeGrid=t},renderFgSegs:function(t){this.renderFgSegsIntoContainers(t,this.timeGrid.fgContainerEls)},renderFgSegsIntoContainers:function(t,e){var n,i;for(n=this.timeGrid.groupSegsByCol(t),i=0;i
'+(n?'
'+et(n)+"
":"")+(u.title?'
'+et(u.title)+"
":"")+'
'+(d?'
':"")+""},updateFgSegCoords:function(t){this.timeGrid.computeSegVerticals(t),this.computeFgSegHorizontals(t),this.timeGrid.assignSegVerticals(t),this.assignFgSegHorizontals(t)},computeFgSegHorizontals:function(t){var e,n,i;if(this.sortEventSegs(t),e=Lt(t),Ot(e),n=e[0]){for(i=0;i=0;n--)if(i=e.duration(Pn[n]),r=U(i,t),at(r)&&r>1)return i;return e.duration(t)},renderDates:function(t){this.dateProfile=t,this.updateDayTable(),this.renderSlats(),this.renderColumns()},unrenderDates:function(){this.unrenderColumns()},renderSkeleton:function(){var t=this.view.calendar.theme;this.el.html('
'),this.bottomRuleEl=this.el.find("hr")},renderSlats:function(){var t=this.view.calendar.theme;this.slatContainerEl=this.el.find("> .fc-slats").html(''+this.renderSlatRowHtml()+"
"),this.slatEls=this.slatContainerEl.find("tr"),this.slatCoordCache=new ge({els:this.slatEls,isVertical:!0})},renderSlatRowHtml:function(){for(var t,n,i,r=this.view,s=r.calendar,o=s.theme,a=this.isRTL,l=this.dateProfile,u="",c=e.duration(+l.minTime),h=e.duration(0);c"+(n?""+et(t.format(this.labelFormat))+"":"")+"",u+='"+(a?"":i)+''+(a?i:"")+"",c.add(this.slotDuration),h.add(this.slotDuration);return u},renderColumns:function(){var t=this.dateProfile,e=this.view.calendar.theme;this.dayRanges=this.dayDates.map(function(e){return new Ue(e.clone().add(t.minTime),e.clone().add(t.maxTime))}),this.headContainerEl&&this.headContainerEl.html(this.renderHeadHtml()),this.el.find("> .fc-bg").html(''+this.renderBgTrHtml(0)+"
"),this.colEls=this.el.find(".fc-day, .fc-disabled-day"),this.colCoordCache=new ge({els:this.colEls,isHorizontal:!0}),this.renderContentSkeleton()},unrenderColumns:function(){this.unrenderContentSkeleton()},renderContentSkeleton:function(){var e,n,i="";for(e=0;e
';n=this.contentSkeletonEl=t('
'+i+"
"),this.colContainerEls=n.find(".fc-content-col"),this.helperContainerEls=n.find(".fc-helper-container"),this.fgContainerEls=n.find(".fc-event-container:not(.fc-helper-container)"),this.bgContainerEls=n.find(".fc-bgevent-container"),this.highlightContainerEls=n.find(".fc-highlight-container"),this.businessContainerEls=n.find(".fc-business-container"),this.bookendCells(n.find("tr")),this.el.append(n)},unrenderContentSkeleton:function(){this.contentSkeletonEl.remove(),this.contentSkeletonEl=null,this.colContainerEls=null,this.helperContainerEls=null,this.fgContainerEls=null,this.bgContainerEls=null,this.highlightContainerEls=null,this.businessContainerEls=null},groupSegsByCol:function(t){var e,n=[];for(e=0;e
').css("top",r).appendTo(this.colContainerEls.eq(i[n].col))[0]);i.length>0&&s.push(t('
').css("top",r).appendTo(this.el.find(".fc-content-skeleton"))[0]),this.nowIndicatorEls=t(s)},unrenderNowIndicator:function(){this.nowIndicatorEls&&(this.nowIndicatorEls.remove(),this.nowIndicatorEls=null)},updateSize:function(t,e,n){ke.prototype.updateSize.apply(this,arguments),this.slatCoordCache.build(),n&&this.updateSegVerticals([].concat(this.eventRenderer.getSegs(),this.businessSegs||[]))},getTotalSlatHeight:function(){return this.slatContainerEl.outerHeight()},computeDateTop:function(t,n){return this.computeTimeTop(e.duration(t-n.clone().stripTime()))},computeTimeTop:function(t){var e,n,i=this.slatEls.length,r=this.dateProfile,s=(t-r.minTime)/this.slotDuration;return s=Math.max(0,s),s=Math.min(i,s),e=Math.floor(s),e=Math.min(e,i-1),n=s-e,this.slatCoordCache.getTopPosition(e)+this.slatCoordCache.getHeight(e)*n},updateSegVerticals:function(t){this.computeSegVerticals(t),this.assignSegVerticals(t)},computeSegVerticals:function(t){var e,n,i,r=this.opt("agendaEventMinHeight");for(e=0;e').appendTo(e),this.el.find(".fc-body > tr > td").append(e),this.timeGrid.headContainerEl=this.el.find(".fc-head-container"),this.timeGrid.setElement(n),this.dayGrid&&(this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight())},unrenderSkeleton:function(){this.timeGrid.removeElement(),this.dayGrid&&this.dayGrid.removeElement(),this.scroller.destroy()},renderSkeletonHtml:function(){var t=this.calendar.theme;return''+(this.opt("columnHeader")?'':"")+'
 
'+(this.dayGrid?'

':"")+"
"},axisStyleAttr:function(){return null!==this.axisWidth?'style="width:'+this.axisWidth+'px"':""},getNowIndicatorUnit:function(){return this.timeGrid.getNowIndicatorUnit()},updateSize:function(t,e,n){var s,o,a;if(Ae.prototype.updateSize.apply(this,arguments),this.axisWidth=u(this.el.find(".fc-axis")),!this.timeGrid.colEls)return void(e||(o=this.computeScrollerHeight(t),this.scroller.setHeight(o)));var l=this.el.find(".fc-row:not(.fc-scroller *)");this.timeGrid.bottomRuleEl.hide(),this.scroller.clear(),r(l),this.dayGrid&&(this.dayGrid.removeSegPopover(),s=this.opt("eventLimit"),s&&"number"!=typeof s&&(s=xn),s&&this.dayGrid.limitRows(s)),e||(o=this.computeScrollerHeight(t),this.scroller.setHeight(o),a=this.scroller.getScrollbarWidths(),(a.left||a.right)&&(i(l,a),o=this.computeScrollerHeight(t),this.scroller.setHeight(o)),this.scroller.lockOverflow(a),this.timeGrid.getTotalSlatHeight()"+e.buildGotoAnchorHtml({date:i,type:"week",forceOff:this.colCnt>1},et(t))+""):'"},renderBgIntroHtml:function(){var t=this.view;return'"},renderIntroHtml:function(){return'"}},Mn={renderBgIntroHtml:function(){var t=this.view;return'"+t.getAllDayHtml()+""},renderIntroHtml:function(){return'"}},xn=5,Pn=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];_t.agenda={class:In,defaults:{allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0}},_t.agendaDay={type:"agenda",duration:{days:1}},_t.agendaWeek={type:"agenda",duration:{weeks:1}};var zn=Wt.ListView=Ae.extend({segSelector:".fc-list-item",scroller:null,contentEl:null,dayDates:null,dayRanges:null,constructor:function(){Ae.apply(this,arguments),this.scroller=new we({overflowX:"hidden",overflowY:"auto"})},renderSkeleton:function(){this.el.addClass("fc-list-view "+this.calendar.theme.getClass("listView")),this.scroller.render(),this.scroller.el.appendTo(this.el),this.contentEl=this.scroller.scrollEl},unrenderSkeleton:function(){this.scroller.destroy()},updateSize:function(t,e,n){this.scroller.setHeight(this.computeScrollerHeight(t))},computeScrollerHeight:function(t){return t-c(this.el,this.scroller.el)},renderDates:function(t){for(var e=this.calendar,n=e.msToUtcMoment(t.renderUnzonedRange.startMs,!0),i=e.msToUtcMoment(t.renderUnzonedRange.endMs,!0),r=[],s=[];n'+(this.displayEventTime?''+(e||"")+"":"")+'"+et(o.title||"")+""},computeEventTimeFormat:function(){return this.opt("mediumTimeFormat")}}),eventPointingClass:Te.extend({handleClick:function(e,n){var i;Te.prototype.handleClick.apply(this,arguments),t(n.target).closest("a[href]").length||(i=e.footprint.eventDef.url)&&!n.isDefaultPrevented()&&(window.location.href=i)}}),renderEmptyMessage:function(){this.contentEl.html('
'+et(this.opt("noEventsMessage"))+"
")},renderSegList:function(e){var n,i,r,s=this.groupSegsByDay(e),o=t('
'),a=o.find("tbody");for(n=0;n'+(e?this.buildGotoAnchorHtml(t,{class:"fc-list-heading-main"},et(t.format(e))):"")+(n?this.buildGotoAnchorHtml(t,{class:"fc-list-heading-alt"},et(t.format(n))):"")+""}});return _t.list={class:zn,buttonTextKey:"list",defaults:{buttonText:"list",listDayFormat:"LL",noEventsMessage:"No events to display"}},_t.listDay={type:"list",duration:{days:1},defaults:{listDayFormat:"dddd"}},_t.listWeek={type:"list",duration:{weeks:1},defaults:{listDayFormat:"dddd",listDayAltFormat:"LL"}},_t.listMonth={type:"list",duration:{month:1},defaults:{listDayAltFormat:"dddd"}},_t.listYear={type:"list",duration:{year:1},defaults:{listDayAltFormat:"dddd"}},Wt}); \ No newline at end of file diff --git a/js/fullcalendar/fullcalendar.print.css b/js/fullcalendar/fullcalendar.print.css new file mode 100644 index 0000000..9d906b9 --- /dev/null +++ b/js/fullcalendar/fullcalendar.print.css @@ -0,0 +1,208 @@ +/*! + * FullCalendar v3.6.2 Print Stylesheet + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */ + +/* + * Include this stylesheet on your page to get a more printer-friendly calendar. + * When including this stylesheet, use the media='print' attribute of the tag. + * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css. + */ + +.fc { + max-width: 100% !important; +} + + +/* Global Event Restyling +--------------------------------------------------------------------------------------------------*/ + +.fc-event { + background: #fff !important; + color: #000 !important; + page-break-inside: avoid; +} + +.fc-event .fc-resizer { + display: none; +} + + +/* Table & Day-Row Restyling +--------------------------------------------------------------------------------------------------*/ + +.fc th, +.fc td, +.fc hr, +.fc thead, +.fc tbody, +.fc-row { + border-color: #ccc !important; + background: #fff !important; +} + +/* kill the overlaid, absolutely-positioned components */ +/* common... */ +.fc-bg, +.fc-bgevent-skeleton, +.fc-highlight-skeleton, +.fc-helper-skeleton, +/* for timegrid. within cells within table skeletons... */ +.fc-bgevent-container, +.fc-business-container, +.fc-highlight-container, +.fc-helper-container { + display: none; +} + +/* don't force a min-height on rows (for DayGrid) */ +.fc tbody .fc-row { + height: auto !important; /* undo height that JS set in distributeHeight */ + min-height: 0 !important; /* undo the min-height from each view's specific stylesheet */ +} + +.fc tbody .fc-row .fc-content-skeleton { + position: static; /* undo .fc-rigid */ + padding-bottom: 0 !important; /* use a more border-friendly method for this... */ +} + +.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { /* only works in newer browsers */ + padding-bottom: 1em; /* ...gives space within the skeleton. also ensures min height in a way */ +} + +.fc tbody .fc-row .fc-content-skeleton table { + /* provides a min-height for the row, but only effective for IE, which exaggerates this value, + making it look more like 3em. for other browers, it will already be this tall */ + height: 1em; +} + + +/* Undo month-view event limiting. Display all events and hide the "more" links +--------------------------------------------------------------------------------------------------*/ + +.fc-more-cell, +.fc-more { + display: none !important; +} + +.fc tr.fc-limited { + display: table-row !important; +} + +.fc td.fc-limited { + display: table-cell !important; +} + +.fc-popover { + display: none; /* never display the "more.." popover in print mode */ +} + + +/* TimeGrid Restyling +--------------------------------------------------------------------------------------------------*/ + +/* undo the min-height 100% trick used to fill the container's height */ +.fc-time-grid { + min-height: 0 !important; +} + +/* don't display the side axis at all ("all-day" and time cells) */ +.fc-agenda-view .fc-axis { + display: none; +} + +/* don't display the horizontal lines */ +.fc-slats, +.fc-time-grid hr { /* this hr is used when height is underused and needs to be filled */ + display: none !important; /* important overrides inline declaration */ +} + +/* let the container that holds the events be naturally positioned and create real height */ +.fc-time-grid .fc-content-skeleton { + position: static; +} + +/* in case there are no events, we still want some height */ +.fc-time-grid .fc-content-skeleton table { + height: 4em; +} + +/* kill the horizontal spacing made by the event container. event margins will be done below */ +.fc-time-grid .fc-event-container { + margin: 0 !important; +} + + +/* TimeGrid *Event* Restyling +--------------------------------------------------------------------------------------------------*/ + +/* naturally position events, vertically stacking them */ +.fc-time-grid .fc-event { + position: static !important; + margin: 3px 2px !important; +} + +/* for events that continue to a future day, give the bottom border back */ +.fc-time-grid .fc-event.fc-not-end { + border-bottom-width: 1px !important; +} + +/* indicate the event continues via "..." text */ +.fc-time-grid .fc-event.fc-not-end:after { + content: "..."; +} + +/* for events that are continuations from previous days, give the top border back */ +.fc-time-grid .fc-event.fc-not-start { + border-top-width: 1px !important; +} + +/* indicate the event is a continuation via "..." text */ +.fc-time-grid .fc-event.fc-not-start:before { + content: "..."; +} + +/* time */ + +/* undo a previous declaration and let the time text span to a second line */ +.fc-time-grid .fc-event .fc-time { + white-space: normal !important; +} + +/* hide the the time that is normally displayed... */ +.fc-time-grid .fc-event .fc-time span { + display: none; +} + +/* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */ +.fc-time-grid .fc-event .fc-time:after { + content: attr(data-full); +} + + +/* Vertical Scroller & Containers +--------------------------------------------------------------------------------------------------*/ + +/* kill the scrollbars and allow natural height */ +.fc-scroller, +.fc-day-grid-container, /* these divs might be assigned height, which we need to cleared */ +.fc-time-grid-container { /* */ + overflow: visible !important; + height: auto !important; +} + +/* kill the horizontal border/padding used to compensate for scrollbars */ +.fc-row { + border: 0 !important; + margin: 0 !important; +} + + +/* Button Controls +--------------------------------------------------------------------------------------------------*/ + +.fc-button-group, +.fc button { + display: none; /* don't display any button-related controls */ +} diff --git a/js/fullcalendar/fullcalendar.print.min.css b/js/fullcalendar/fullcalendar.print.min.css new file mode 100644 index 0000000..7640787 --- /dev/null +++ b/js/fullcalendar/fullcalendar.print.min.css @@ -0,0 +1,5 @@ +/*! + * FullCalendar v3.6.2 Print Stylesheet + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-event .fc-resizer,.fc-helper-container,.fc-helper-skeleton,.fc-highlight-container,.fc-highlight-skeleton{display:none}.fc tbody .fc-row,.fc-time-grid{min-height:0!important}.fc-time-grid .fc-event.fc-not-end:after,.fc-time-grid .fc-event.fc-not-start:before{content:"..."}.fc{max-width:100%!important}.fc-event{background:#fff!important;color:#000!important;page-break-inside:avoid}.fc hr,.fc tbody,.fc td,.fc th,.fc thead,.fc-row{border-color:#ccc!important;background:#fff!important}.fc tbody .fc-row{height:auto!important}.fc tbody .fc-row .fc-content-skeleton{position:static;padding-bottom:0!important}.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td{padding-bottom:1em}.fc tbody .fc-row .fc-content-skeleton table{height:1em}.fc-more,.fc-more-cell{display:none!important}.fc tr.fc-limited{display:table-row!important}.fc td.fc-limited{display:table-cell!important}.fc-agenda-view .fc-axis,.fc-popover{display:none}.fc-slats,.fc-time-grid hr{display:none!important}.fc button,.fc-button-group,.fc-time-grid .fc-event .fc-time span{display:none}.fc-time-grid .fc-content-skeleton{position:static}.fc-time-grid .fc-content-skeleton table{height:4em}.fc-time-grid .fc-event-container{margin:0!important}.fc-time-grid .fc-event{position:static!important;margin:3px 2px!important}.fc-time-grid .fc-event.fc-not-end{border-bottom-width:1px!important}.fc-time-grid .fc-event.fc-not-start{border-top-width:1px!important}.fc-time-grid .fc-event .fc-time{white-space:normal!important}.fc-time-grid .fc-event .fc-time:after{content:attr(data-full)}.fc-day-grid-container,.fc-scroller,.fc-time-grid-container{overflow:visible!important;height:auto!important}.fc-row{border:0!important;margin:0!important} \ No newline at end of file diff --git a/js/fullcalendar/fullcalsched.zip b/js/fullcalendar/fullcalsched.zip new file mode 100644 index 0000000000000000000000000000000000000000..32da89439beebd427c9ed83a028f1f95205f544e GIT binary patch literal 267479 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 HrDFE(?8-_U}ff= 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

;x|*c$y<(eRhL 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

"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("

")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("

").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n) +}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("
").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("
").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n; +this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
    ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("
    ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
    ").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
    ").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"
    ",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t(""),this.iconSpace=t(" "),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"").addClass(this._triggerClass).html(o?t("").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t(""),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s)) +}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?""+i+"":q?"":""+i+"",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?""+n+"":q?"":""+n+"",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"",l=j?"
    "+(Y?h:"")+(this._isInRange(t,r)?"":"")+(Y?"":h)+"
    ":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="
    "}for(T+="
    "+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"
    "+"",P=u?"":"",w=0;7>w;w++)M=(w+c)%7,P+="";for(T+=P+"",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="",W=u?"":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+""}Z++,Z>11&&(Z=0,te++),T+="
    "+this._get(t,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+""+p[M]+"
    "+this._get(t,"calculateWeek")(A)+""+(F&&!_?" ":L?""+A.getDate()+"":""+A.getDate()+"")+"
    "+(X?"
    "+(U[0]>0&&C===U[1]-1?"
    ":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="
    ",y="";if(o||!m)y+=""+a[e]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+=""}if(v||(b+=y+(!o&&m&&_?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!_)b+=""+i+"";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":" ")+y),b+="
    "},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("
    ").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())} +},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog +},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("
    ").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("
    "),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("").button({label:t("").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html(" ")},_createButtonPane:function(){this.uiDialogButtonPane=t("
    "),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("
    ").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("
    ").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("
    ").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("
    ").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("
    ").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("
    "),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("").parent().append("")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("
    ").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("
    ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("
    ").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("
    ").attr("role","tooltip"),s=t("
    ").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}); \ No newline at end of file diff --git a/js/fullcalendar/lib/jquery.min.js b/js/fullcalendar/lib/jquery.min.js new file mode 100644 index 0000000..644d35e --- /dev/null +++ b/js/fullcalendar/lib/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), +null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/demos/column-grouping.html b/js/fullcalendar/sched/demos/column-grouping.html new file mode 100644 index 0000000..f9083bc --- /dev/null +++ b/js/fullcalendar/sched/demos/column-grouping.html @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/demos/columns.html b/js/fullcalendar/sched/demos/columns.html new file mode 100644 index 0000000..991a838 --- /dev/null +++ b/js/fullcalendar/sched/demos/columns.html @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/demos/dynamic-add-remove.html b/js/fullcalendar/sched/demos/dynamic-add-remove.html new file mode 100644 index 0000000..dccc881 --- /dev/null +++ b/js/fullcalendar/sched/demos/dynamic-add-remove.html @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + +

    + HINT: click on a resource to delete it. +

    + +
    + + + diff --git a/js/fullcalendar/sched/demos/external-dragging.html b/js/fullcalendar/sched/demos/external-dragging.html new file mode 100644 index 0000000..1d47266 --- /dev/null +++ b/js/fullcalendar/sched/demos/external-dragging.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + +
    + +
    +

    Draggable Events

    +
    My Event 1
    +
    My Event 2
    +
    My Event 3
    +
    My Event 4
    +
    My Event 5
    +

    + + +

    +
    + +
    + +
    + +
    + + diff --git a/js/fullcalendar/sched/demos/gcal.html b/js/fullcalendar/sched/demos/gcal.html new file mode 100644 index 0000000..763ed8a --- /dev/null +++ b/js/fullcalendar/sched/demos/gcal.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/demos/grouping.html b/js/fullcalendar/sched/demos/grouping.html new file mode 100644 index 0000000..2be4c74 --- /dev/null +++ b/js/fullcalendar/sched/demos/grouping.html @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/demos/js/theme-chooser.js b/js/fullcalendar/sched/demos/js/theme-chooser.js new file mode 100644 index 0000000..be0cd33 --- /dev/null +++ b/js/fullcalendar/sched/demos/js/theme-chooser.js @@ -0,0 +1,109 @@ + +function initThemeChooser(settings) { + var isInitialized = false; + var $currentStylesheet = $(); + var $loading = $('#loading'); + var $systemSelect = $('#theme-system-selector select') + .on('change', function() { + setThemeSystem(this.value); + }); + + setThemeSystem($systemSelect.val()); + + + function setThemeSystem(themeSystem) { + var $allSelectWraps = $('.selector[data-theme-system]').hide(); + var $selectWrap = $allSelectWraps.filter('[data-theme-system="' + themeSystem +'"]').show(); + var $select = $selectWrap.find('select') + .off('change') // avoid duplicate handlers :( + .on('change', function() { + setTheme(themeSystem, this.value); + }); + + setTheme(themeSystem, $select.val()); + } + + + function setTheme(themeSystem, themeName) { + var stylesheetUrl = generateStylesheetUrl(themeSystem, themeName); + var $stylesheet; + + function done() { + if (!isInitialized) { + isInitialized = true; + settings.init(themeSystem); + } + else { + settings.change(themeSystem); + } + + showCredits(themeSystem, themeName); + } + + if (stylesheetUrl) { + $stylesheet = $('').appendTo('head'); + $loading.show(); + + whenStylesheetLoaded($stylesheet[0], function() { + $currentStylesheet.remove(); + $currentStylesheet = $stylesheet; + $loading.hide(); + done(); + }); + } else { + $currentStylesheet.remove(); + $currentStylesheet = $(); + done(); + } + } + + + function generateStylesheetUrl(themeSystem, themeName) { + if (themeSystem === 'jquery-ui') { + return 'https://code.jquery.com/ui/1.12.1/themes/' + themeName + '/jquery-ui.css'; + } + else if (themeSystem === 'bootstrap3') { + if (themeName) { + return 'https://bootswatch.com/' + themeName + '/bootstrap.min.css'; + } + else { // the default bootstrap theme + return 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'; + } + } + } + + + function showCredits(themeSystem, themeName) { + var creditId; + + if (themeSystem === 'jquery-ui') { + creditId = 'jquery-ui'; + } + else if (themeSystem === 'bootstrap3') { + if (themeName) { + creditId = 'bootstrap-custom'; + } + else { + creditId = 'bootstrap-standard'; + } + } + + $('.credits').hide() + .filter('[data-credit-id="' + creditId + '"]').show(); + } + + + function whenStylesheetLoaded(linkNode, callback) { + var isReady = false; + + function ready() { + if (!isReady) { // avoid double-call + isReady = true; + callback(); + } + } + + linkNode.onload = ready; // does not work cross-browser + setTimeout(ready, 2000); // max wait. also handles browsers that don't support onload + } +} diff --git a/js/fullcalendar/sched/demos/json.html b/js/fullcalendar/sched/demos/json.html new file mode 100644 index 0000000..13b6267 --- /dev/null +++ b/js/fullcalendar/sched/demos/json.html @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + +
    + This page should be running from a webserver, to allow fetching from the json/ directory. +
    + +
    loading...
    + +
    + + + diff --git a/js/fullcalendar/sched/demos/json/events.json b/js/fullcalendar/sched/demos/json/events.json new file mode 100644 index 0000000..6dba80d --- /dev/null +++ b/js/fullcalendar/sched/demos/json/events.json @@ -0,0 +1,7 @@ +[ + { "id": "1", "resourceId": "b", "start": "2017-10-07T02:00:00", "end": "2017-10-07T07:00:00", "title": "event 1" }, + { "id": "2", "resourceId": "c", "start": "2017-10-07T05:00:00", "end": "2017-10-07T22:00:00", "title": "event 2" }, + { "id": "3", "resourceId": "d", "start": "2017-10-06", "end": "2017-10-08", "title": "event 3" }, + { "id": "4", "resourceId": "e", "start": "2017-10-07T03:00:00", "end": "2017-10-07T08:00:00", "title": "event 4" }, + { "id": "5", "resourceId": "f", "start": "2017-10-07T00:30:00", "end": "2017-10-07T02:30:00", "title": "event 5" } +] diff --git a/js/fullcalendar/sched/demos/json/resources.json b/js/fullcalendar/sched/demos/json/resources.json new file mode 100644 index 0000000..f4b922d --- /dev/null +++ b/js/fullcalendar/sched/demos/json/resources.json @@ -0,0 +1,31 @@ +[ + { "id": "a", "title": "Auditorium A" }, + { "id": "b", "title": "Auditorium B", "eventColor": "green" }, + { "id": "c", "title": "Auditorium C", "eventColor": "orange" }, + { "id": "d", "title": "Auditorium D", "children": [ + { "id": "d1", "title": "Room D1" }, + { "id": "d2", "title": "Room D2" } + ] }, + { "id": "e", "title": "Auditorium E" }, + { "id": "f", "title": "Auditorium F", "eventColor": "red" }, + { "id": "g", "title": "Auditorium G" }, + { "id": "h", "title": "Auditorium H" }, + { "id": "i", "title": "Auditorium I" }, + { "id": "j", "title": "Auditorium J" }, + { "id": "k", "title": "Auditorium K" }, + { "id": "l", "title": "Auditorium L" }, + { "id": "m", "title": "Auditorium M" }, + { "id": "n", "title": "Auditorium N" }, + { "id": "o", "title": "Auditorium O" }, + { "id": "p", "title": "Auditorium P" }, + { "id": "q", "title": "Auditorium Q" }, + { "id": "r", "title": "Auditorium R" }, + { "id": "s", "title": "Auditorium S" }, + { "id": "t", "title": "Auditorium T" }, + { "id": "u", "title": "Auditorium U" }, + { "id": "v", "title": "Auditorium V" }, + { "id": "w", "title": "Auditorium W" }, + { "id": "x", "title": "Auditorium X" }, + { "id": "y", "title": "Auditorium Y" }, + { "id": "z", "title": "Auditorium Z" } +] diff --git a/js/fullcalendar/sched/demos/misc-callbacks.html b/js/fullcalendar/sched/demos/misc-callbacks.html new file mode 100644 index 0000000..d8b23a5 --- /dev/null +++ b/js/fullcalendar/sched/demos/misc-callbacks.html @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/demos/no-overlap.html b/js/fullcalendar/sched/demos/no-overlap.html new file mode 100644 index 0000000..c288744 --- /dev/null +++ b/js/fullcalendar/sched/demos/no-overlap.html @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + +

    + Things render a bit differently with eventOverlap:false +

    + +
    + + + diff --git a/js/fullcalendar/sched/demos/ordering.html b/js/fullcalendar/sched/demos/ordering.html new file mode 100644 index 0000000..cbfd923 --- /dev/null +++ b/js/fullcalendar/sched/demos/ordering.html @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + +

    Ordered by occupancy (descending)

    + +
    + + + diff --git a/js/fullcalendar/sched/demos/rendering-hooks.html b/js/fullcalendar/sched/demos/rendering-hooks.html new file mode 100644 index 0000000..3c87379 --- /dev/null +++ b/js/fullcalendar/sched/demos/rendering-hooks.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/demos/scale.html b/js/fullcalendar/sched/demos/scale.html new file mode 100644 index 0000000..5842e0a --- /dev/null +++ b/js/fullcalendar/sched/demos/scale.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/demos/selectable.html b/js/fullcalendar/sched/demos/selectable.html new file mode 100644 index 0000000..7ae25c1 --- /dev/null +++ b/js/fullcalendar/sched/demos/selectable.html @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + +
    + +

    + + +

    + + + diff --git a/js/fullcalendar/sched/demos/simple.html b/js/fullcalendar/sched/demos/simple.html new file mode 100644 index 0000000..1e391d6 --- /dev/null +++ b/js/fullcalendar/sched/demos/simple.html @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/demos/themes.html b/js/fullcalendar/sched/demos/themes.html new file mode 100644 index 0000000..4572fa3 --- /dev/null +++ b/js/fullcalendar/sched/demos/themes.html @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + +
    + +
    + +
    + Theme System: + + +
    + + + + + + + +
    + + + +
    +
    + +
    + + + diff --git a/js/fullcalendar/sched/demos/vertical-resource-view.html b/js/fullcalendar/sched/demos/vertical-resource-view.html new file mode 100644 index 0000000..887bab2 --- /dev/null +++ b/js/fullcalendar/sched/demos/vertical-resource-view.html @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + +
    + + + diff --git a/js/fullcalendar/sched/lib/fullcalendar.min.css b/js/fullcalendar/sched/lib/fullcalendar.min.css new file mode 100644 index 0000000..cf1b3e3 --- /dev/null +++ b/js/fullcalendar/sched/lib/fullcalendar.min.css @@ -0,0 +1,5 @@ +/*! + * FullCalendar v3.6.2 Stylesheet + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */.fc button,.fc table,body .fc{font-size:1em}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-icon,.fc-unselectable{-webkit-touch-callout:none;-khtml-user-select:none}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc th,.fc-basic-view td.fc-week-number,.fc-icon,.fc-toolbar{text-align:center}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close,a[data-goto]{cursor:pointer}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-icon,.fc-row.fc-rigid,.fc-time-grid-event{overflow:hidden}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc.fc-bootstrap3 a,.ui-widget .fc-event{text-decoration:none}.fc-limited{display:none}.fc-icon,.fc-toolbar .fc-center{display:inline-block}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-icon:after,.fc-toolbar button{position:relative}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff;border-width:1px;border-style:solid}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc-icon{height:1em;line-height:1em;font-size:1em;font-family:"Courier New",Courier,monospace;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon-left-single-arrow:after{content:"\02039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\0203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\000AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\000BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\000D7";font-size:200%;top:6%}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666;font-size:.9em;margin-top:2px}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.ui-widget .fc-disabled-day{background-image:none}.fc-bootstrap3 .fc-time-grid .fc-slats table,.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.ui-widget .fc-event{color:#fff;font-weight:400}.ui-widget td.fc-axis{font-weight:400}.fc.fc-bootstrap3 a[data-goto]:hover{text-decoration:underline}.fc-bootstrap3 hr.fc-divider{border-color:inherit}.fc-bootstrap3 .fc-today.alert{border-radius:0}.fc-bootstrap3 .fc-popover .panel-body{padding:0}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\000A0-\000A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee} \ No newline at end of file diff --git a/js/fullcalendar/sched/lib/fullcalendar.min.js b/js/fullcalendar/sched/lib/fullcalendar.min.js new file mode 100644 index 0000000..ea46dd1 --- /dev/null +++ b/js/fullcalendar/sched/lib/fullcalendar.min.js @@ -0,0 +1,11 @@ +/*! + * FullCalendar v3.6.2 + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */ +!function(t){"function"==typeof define&&define.amd?define(["jquery","moment"],t):"object"==typeof exports?module.exports=t(require("jquery"),require("moment")):t(jQuery,moment)}(function(t,e){function n(t){return j(t,qt)}function i(t,e){e.left&&t.css({"border-left-width":1,"margin-left":e.left-1}),e.right&&t.css({"border-right-width":1,"margin-right":e.right-1})}function r(t){t.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function s(){t("body").addClass("fc-not-allowed")}function o(){t("body").removeClass("fc-not-allowed")}function a(e,n,i){var r=Math.floor(n/e.length),s=Math.floor(n-r*(e.length-1)),o=[],a=[],u=[],c=0;l(e),e.each(function(n,i){var l=n===e.length-1?s:r,h=t(i).outerHeight(!0);h *").each(function(e,i){var r=t(i).outerWidth();r>n&&(n=r)}),n++,e.width(n),n}function c(t,e){var n,i=t.add(e);return i.css({position:"relative",left:-1}),n=t.outerHeight()-e.outerHeight(),i.css({position:"",left:""}),n}function h(e){var n=e.css("position"),i=e.parents().filter(function(){var e=t(this);return/(auto|scroll)/.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==n&&i.length?i:t(e[0].ownerDocument||document)}function d(t,e){var n=t.offset(),i=n.left-(e?e.left:0),r=n.top-(e?e.top:0);return{left:i,right:i+t.outerWidth(),top:r,bottom:r+t.outerHeight()}}function f(t,e){var n=t.offset(),i=p(t),r=n.left+w(t,"border-left-width")+i.left-(e?e.left:0),s=n.top+w(t,"border-top-width")+i.top-(e?e.top:0);return{left:r,right:r+t[0].clientWidth,top:s,bottom:s+t[0].clientHeight}}function g(t,e){var n=t.offset(),i=n.left+w(t,"border-left-width")+w(t,"padding-left")-(e?e.left:0),r=n.top+w(t,"border-top-width")+w(t,"padding-top")-(e?e.top:0);return{left:i,right:i+t.width(),top:r,bottom:r+t.height()}}function p(t){var e,n=t[0].offsetWidth-t[0].clientWidth,i=t[0].offsetHeight-t[0].clientHeight;return n=v(n),i=v(i),e={left:0,right:0,top:0,bottom:i},m()&&"rtl"==t.css("direction")?e.left=n:e.right=n,e}function v(t){return t=Math.max(0,t),t=Math.round(t)}function m(){return null===Yt&&(Yt=y()),Yt}function y(){var e=t("
    ").css({position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}).appendTo("body"),n=e.children(),i=n.offset().left>e.offset().left;return e.remove(),i}function w(t,e){return parseFloat(t.css(e))||0}function D(t){return 1==t.which&&!t.ctrlKey}function b(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageX:t.pageX}function E(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageY:t.pageY}function S(t){return/^touch/.test(t.type)}function C(t){t.addClass("fc-unselectable").on("selectstart",T)}function R(t){t.removeClass("fc-unselectable").off("selectstart",T)}function T(t){t.preventDefault()}function I(t,e){var n={left:Math.max(t.left,e.left),right:Math.min(t.right,e.right),top:Math.max(t.top,e.top),bottom:Math.min(t.bottom,e.bottom)};return n.left=1&&at(r)));n++);return i}function N(t,e){var n=O(t);return"week"===n&&"object"==typeof e&&e.days&&(n="day"),n}function V(t,n,i){return null!=i?i.diff(n,t,!0):e.isDuration(n)?n.as(t):n.end.diff(n.start,t,!0)}function G(t,e,n){var i;return _(n)?(e-t)/n:(i=n.asMonths(),Math.abs(i)>=1&&at(i)?e.diff(t,"months",!0)/i:e.diff(t,"days",!0)/n.asDays())}function U(t,e){var n,i;return _(t)||_(e)?t/e:(n=t.asMonths(),i=e.asMonths(),Math.abs(n)>=1&&at(n)&&Math.abs(i)>=1&&at(i)?n/i:t.asDays()/e.asDays())}function W(t,n){var i;return _(t)?e.duration(t*n):(i=t.asMonths(),Math.abs(i)>=1&&at(i)?e.duration({months:i*n}):e.duration({days:t.asDays()*n}))}function _(t){return Boolean(t.hours()||t.minutes()||t.seconds()||t.milliseconds())}function q(t){return"[object Date]"===Object.prototype.toString.call(t)||t instanceof Date}function Y(t){return"string"==typeof t&&/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t)}function j(t,e){var n,i,r,s,o,a,l={};if(e)for(n=0;n=0;s--)if("object"==typeof(o=t[s][i]))r.unshift(o);else if(void 0!==o){l[i]=o;break}r.length&&(l[i]=j(r))}for(n=t.length-1;n>=0;n--){a=t[n];for(i in a)i in l||(l[i]=a[i])}return l}function Z(t,e){for(var n in t)Q(t,n)&&(e[n]=t[n])}function Q(t,e){return Qt.call(t,e)}function $(e,n,i){if(t.isFunction(e)&&(e=[e]),e){var r,s;for(r=0;r/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
    ")}function nt(t){return t.replace(/&.*?;/g,"")}function it(e){var n=[];return t.each(e,function(t,e){null!=e&&n.push(t+":"+e)}),n.join(";")}function rt(e){var n=[];return t.each(e,function(t,e){null!=e&&n.push(t+'="'+et(e)+'"')}),n.join(" ")}function st(t){return t.charAt(0).toUpperCase()+t.slice(1)}function ot(t,e){return t-e}function at(t){return t%1==0}function lt(t,e){var n=t[e];return function(){return n.apply(t,arguments)}}function ut(t,e,n){var i,r,s,o,a,l=function(){var u=+new Date-o;u"),g.append(o("left")).append(o("right")).append(o("center")).append('
    ')):s()}function s(){g&&(g.remove(),g=f.el=null)}function o(i){var r=e.theme,s=t('
    '),o=n.layout[i],a=e.opt("customButtons")||{},l=e.overrides.buttonText||{},u=e.opt("buttonText")||{};return o&&t.each(o.split(" "),function(n){var i,o=t(),c=!0;t.each(this.split(","),function(n,i){var s,h,d,f,g,v,m,y;"title"==i?(o=o.add(t("

     

    ")),c=!1):((s=a[i])?(d=function(t){s.click&&s.click.call(y[0],t)},(f=r.getCustomButtonIconClass(s))||(f=r.getIconClass(i))||(g=s.text)):(h=e.getViewSpec(i))?(p.push(i),d=function(){e.changeView(i)},(g=h.buttonTextOverride)||(f=r.getIconClass(i))||(g=h.buttonTextDefault)):e[i]&&(d=function(){e[i]()},(g=l[i])||(f=r.getIconClass(i))||(g=u[i])),d&&(m=["fc-"+i+"-button",r.getClass("button"),r.getClass("stateDefault")],g?v=et(g):f&&(v=""),y=t('").click(function(t){y.hasClass(r.getClass("stateDisabled"))||(d(t),(y.hasClass(r.getClass("stateActive"))||y.hasClass(r.getClass("stateDisabled")))&&y.removeClass(r.getClass("stateHover")))}).mousedown(function(){y.not("."+r.getClass("stateActive")).not("."+r.getClass("stateDisabled")).addClass(r.getClass("stateDown"))}).mouseup(function(){y.removeClass(r.getClass("stateDown"))}).hover(function(){y.not("."+r.getClass("stateActive")).not("."+r.getClass("stateDisabled")).addClass(r.getClass("stateHover"))},function(){y.removeClass(r.getClass("stateHover")).removeClass(r.getClass("stateDown"))}),o=o.add(y)))}),c&&o.first().addClass(r.getClass("cornerLeft")).end().last().addClass(r.getClass("cornerRight")).end(),o.length>1?(i=t("
    "),c&&i.addClass(r.getClass("buttonGroup")),i.append(o),s.append(i)):s.append(o)}),s}function a(t){g&&g.find("h2").text(t)}function l(t){g&&g.find(".fc-"+t+"-button").addClass(e.theme.getClass("stateActive"))}function u(t){g&&g.find(".fc-"+t+"-button").removeClass(e.theme.getClass("stateActive"))}function c(t){g&&g.find(".fc-"+t+"-button").prop("disabled",!0).addClass(e.theme.getClass("stateDisabled"))}function h(t){g&&g.find(".fc-"+t+"-button").prop("disabled",!1).removeClass(e.theme.getClass("stateDisabled"))}function d(){return p}var f=this;f.setToolbarOptions=i,f.render=r,f.removeElement=s,f.updateTitle=a,f.activateButton=l,f.deactivateButton=u,f.disableButton=c,f.enableButton=h,f.getViewsWithButtons=d,f.el=null;var g,p=[]}function Et(t,e,n){var i;for(i=0;is&&r.push(new Ue(s,i.startMs)),i.endMs>s&&(s=i.endMs);return s=t.leftCol)return!0;return!1}function At(t,e){return t.leftCol-e.leftCol}function Lt(t){var e,n,i,r=[];for(e=0;ee.top&&t.tops&&(!l[o]||u.isSame(c,l[o]))&&(o-1!==s||"."!==f[o]);o--)v=f[o]+v;for(a=s;a<=o;a++)m+=f[a],y+=g[a];return(m||y)&&(w=r?y+i+m:m+i+y),d(p+w+v)}function r(t){return D[t]||(D[t]=s(t))}function s(t){var e=o(t);return{fakeFormatString:l(e),sameUnits:u(e)}}function o(t){for(var e,n=[],i=/\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;e=i.exec(t);)e[1]?n.push.apply(n,a(e[1])):e[2]?n.push({maybe:o(e[2])}):e[3]?n.push({token:e[3]}):e[5]&&n.push.apply(n,a(e[5]));return n}function a(t){return". "===t?["."," "]:[t]}function l(t){var e,n,i=[];for(e=0;er.value)&&(r=i);return r?r.unit:null}Wt.formatDate=t,Wt.formatRange=n,Wt.oldMomentFormat=e,Wt.queryMostGranularFormatUnit=f;var g="\v",p="",v="",m=new RegExp(v+"([^"+v+"]*)"+v,"g"),y={t:function(t){return e(t,"a").charAt(0)},T:function(t){return e(t,"A").charAt(0)}},w={Y:{value:1,unit:"year"},M:{value:2,unit:"month"},W:{value:3,unit:"week"},w:{value:3,unit:"week"},D:{value:4,unit:"day"},d:{value:4,unit:"day"}},D={}}();var ee=Wt.formatDate,ne=Wt.formatRange,ie=Wt.oldMomentFormat;Wt.Class=dt,dt.extend=function(){var t,e={};for(t=0;t0}},se=Wt.ListenerMixin=function(){var e=0;return{listenerId:null,listenTo:function(e,n,i){if("object"==typeof n)for(var r in n)n.hasOwnProperty(r)&&this.listenTo(e,r,n[r]);else"string"==typeof n&&e.on(n+"."+this.getListenerNamespace(),t.proxy(i,this))},stopListeningTo:function(t,e){t.off((e||"")+"."+this.getListenerNamespace())},getListenerNamespace:function(){return null==this.listenerId&&(this.listenerId=e++),"_listener"+this.listenerId}}}(),oe={standardPropMap:{},applyProps:function(t){var e,n=this.standardPropMap,i={},r={};for(e in t)!0===n[e]?this[e]=t[e]:!1===n[e]?i[e]=t[e]:r[e]=t[e];return this.applyMiscProps(r),this.applyManualStandardProps(i)},applyManualStandardProps:function(t){return!0},applyMiscProps:function(t){},isStandardProp:function(t){return t in this.standardPropMap}},ae=function(t){var e=this.prototype;e.hasOwnProperty("standardPropMap")||(e.standardPropMap=Object.create(e.standardPropMap)),Z(t,e.standardPropMap)},le=function(t,e){var n,i=this.prototype.standardPropMap;for(n in i)null!=t[n]&&!0===i[n]&&(e[n]=t[n])},ue=dt.extend(re,se,{_props:null,_watchers:null,_globalWatchArgs:{},constructor:function(){this._watchers={},this._props={},this.applyGlobalWatchers(),this.constructed()},constructed:function(){},applyGlobalWatchers:function(){var t,e=this._globalWatchArgs;for(t in e)this.watch.apply(this,e[t])},has:function(t){return t in this._props},get:function(t){return void 0===t?this._props:this._props[t]},set:function(t,e){var n;"string"==typeof t?(n={},n[t]=void 0===e?null:e):n=t,this.setProps(n)},reset:function(t){var e,n=this._props,i={};for(e in n)i[e]=void 0;for(e in t)i[e]=t[e];this.setProps(i)},unset:function(t){var e,n,i={};for(e="string"==typeof t?[t]:t,n=0;n=0;e--)switch(n=i[e],n.type){case"init":r=!1;case"add":case"remove":i.splice(e,1)}return r&&i.push(t),r}});Wt.RenderQueue=de;var fe=dt.extend(se,{isHidden:!0,options:null,el:null,margin:10,constructor:function(t){this.options=t||{}},show:function(){this.isHidden&&(this.el||this.render(),this.el.show(),this.position(),this.isHidden=!1,this.trigger("show"))},hide:function(){this.isHidden||(this.el.hide(),this.isHidden=!0,this.trigger("hide"))},render:function(){var e=this,n=this.options;this.el=t('
    ').addClass(n.className||"").css({top:0,left:0}).append(n.content).appendTo(n.parentEl),this.el.on("click",".fc-close",function(){e.hide()}),n.autoHide&&this.listenTo(t(document),"mousedown",this.documentMousedown)},documentMousedown:function(e){this.el&&!t(e.target).closest(this.el).length&&this.hide()},removeElement:function(){this.hide(),this.el&&(this.el.remove(),this.el=null),this.stopListeningTo(t(document),"mousedown")},position:function(){var e,n,i,r,s,o=this.options,a=this.el.offsetParent().offset(),l=this.el.outerWidth(),u=this.el.outerHeight(),c=t(window),d=h(this.el);r=o.top||0,s=void 0!==o.left?o.left:void 0!==o.right?o.right-l:0,d.is(window)||d.is(document)?(d=c,e=0,n=0):(i=d.offset(),e=i.top,n=i.left),e+=c.scrollTop(),n+=c.scrollLeft(),!1!==o.viewportConstrain&&(r=Math.min(r,e+d.outerHeight()-u-this.margin),r=Math.max(r,e+this.margin),s=Math.min(s,n+d.outerWidth()-l-this.margin),s=Math.max(s,n+this.margin)),this.el.css({top:r-a.top,left:s-a.left})},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1))}}),ge=Wt.CoordCache=dt.extend({els:null,forcedOffsetParentEl:null,origin:null,boundingRect:null,isHorizontal:!1,isVertical:!1,lefts:null,rights:null,tops:null,bottoms:null,constructor:function(e){this.els=t(e.els),this.isHorizontal=e.isHorizontal,this.isVertical=e.isVertical,this.forcedOffsetParentEl=e.offsetParent?t(e.offsetParent):null},build:function(){var t=this.forcedOffsetParentEl;!t&&this.els.length>0&&(t=this.els.eq(0).offsetParent()),this.origin=t?t.offset():null,this.boundingRect=this.queryBoundingRect(),this.isHorizontal&&this.buildElHorizontals(),this.isVertical&&this.buildElVerticals()},clear:function(){this.origin=null,this.boundingRect=null,this.lefts=null,this.rights=null,this.tops=null,this.bottoms=null},ensureBuilt:function(){this.origin||this.build()},buildElHorizontals:function(){var e=[],n=[];this.els.each(function(i,r){var s=t(r),o=s.offset().left,a=s.outerWidth();e.push(o),n.push(o+a)}),this.lefts=e,this.rights=n},buildElVerticals:function(){var e=[],n=[];this.els.each(function(i,r){var s=t(r),o=s.offset().top,a=s.outerHeight();e.push(o),n.push(o+a)}),this.tops=e,this.bottoms=n},getHorizontalIndex:function(t){this.ensureBuilt();var e,n=this.lefts,i=this.rights,r=n.length;for(e=0;e=n[e]&&t=n[e]&&t0&&(t=h(this.els.eq(0)),!t.is(document))?f(t):null},isPointInBounds:function(t,e){return this.isLeftInBounds(t)&&this.isTopInBounds(e)},isLeftInBounds:function(t){return!this.boundingRect||t>=this.boundingRect.left&&t=this.boundingRect.top&&t=i*i&&this.handleDistanceSurpassed(t),this.isDragging&&this.handleDrag(e,n,t)},handleDrag:function(t,e,n){this.trigger("drag",t,e,n),this.updateAutoScroll(n)},endDrag:function(t){this.isDragging&&(this.isDragging=!1,this.handleDragEnd(t))},handleDragEnd:function(t){this.trigger("dragEnd",t)},startDelay:function(t){var e=this;this.delay?this.delayTimeoutId=setTimeout(function(){e.handleDelayEnd(t)},this.delay):this.handleDelayEnd(t)},handleDelayEnd:function(t){this.isDelayEnded=!0,this.isDistanceSurpassed&&this.startDrag(t)},handleDistanceSurpassed:function(t){this.isDistanceSurpassed=!0,this.isDelayEnded&&this.startDrag(t)},handleTouchMove:function(t){this.isDragging&&this.shouldCancelTouchScroll&&t.preventDefault(),this.handleMove(t)},handleMouseMove:function(t){this.handleMove(t)},handleTouchScroll:function(t){this.isDragging&&!this.scrollAlwaysKills||this.endInteraction(t,!0)},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1)),this["_"+t]&&this["_"+t].apply(this,Array.prototype.slice.call(arguments,1))}});pe.mixin({isAutoScroll:!1,scrollBounds:null,scrollTopVel:null,scrollLeftVel:null,scrollIntervalId:null,scrollSensitivity:30,scrollSpeed:200,scrollIntervalMs:50,initAutoScroll:function(){var t=this.scrollEl;this.isAutoScroll=this.options.scroll&&t&&!t.is(window)&&!t.is(document),this.isAutoScroll&&this.listenTo(t,"scroll",ut(this.handleDebouncedScroll,100))},destroyAutoScroll:function(){this.endAutoScroll(),this.isAutoScroll&&this.stopListeningTo(this.scrollEl,"scroll")},computeScrollBounds:function(){this.isAutoScroll&&(this.scrollBounds=d(this.scrollEl))},updateAutoScroll:function(t){var e,n,i,r,s=this.scrollSensitivity,o=this.scrollBounds,a=0,l=0;o&&(e=(s-(E(t)-o.top))/s,n=(s-(o.bottom-E(t)))/s,i=(s-(b(t)-o.left))/s,r=(s-(o.right-b(t)))/s,e>=0&&e<=1?a=e*this.scrollSpeed*-1:n>=0&&n<=1&&(a=n*this.scrollSpeed),i>=0&&i<=1?l=i*this.scrollSpeed*-1:r>=0&&r<=1&&(l=r*this.scrollSpeed)),this.setScrollVel(a,l)},setScrollVel:function(t,e){this.scrollTopVel=t,this.scrollLeftVel=e,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(lt(this,"scrollIntervalFunc"),this.scrollIntervalMs))},constrainScrollVel:function(){var t=this.scrollEl;this.scrollTopVel<0?t.scrollTop()<=0&&(this.scrollTopVel=0):this.scrollTopVel>0&&t.scrollTop()+t[0].clientHeight>=t[0].scrollHeight&&(this.scrollTopVel=0),this.scrollLeftVel<0?t.scrollLeft()<=0&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&t.scrollLeft()+t[0].clientWidth>=t[0].scrollWidth&&(this.scrollLeftVel=0)},scrollIntervalFunc:function(){var t=this.scrollEl,e=this.scrollIntervalMs/1e3;this.scrollTopVel&&t.scrollTop(t.scrollTop()+this.scrollTopVel*e),this.scrollLeftVel&&t.scrollLeft(t.scrollLeft()+this.scrollLeftVel*e),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.endAutoScroll()},endAutoScroll:function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.handleScrollEnd())},handleDebouncedScroll:function(){this.scrollIntervalId||this.handleScrollEnd()},handleScrollEnd:function(){}});var ve=pe.extend({component:null,origHit:null,hit:null,coordAdjust:null,constructor:function(t,e){pe.call(this,e),this.component=t},handleInteractionStart:function(t){var e,n,i,r=this.subjectEl;this.component.hitsNeeded(),this.computeScrollBounds(),t?(n={left:b(t),top:E(t)},i=n,r&&(e=d(r),i=H(i,e)),this.origHit=this.queryHit(i.left,i.top),r&&this.options.subjectCenter&&(this.origHit&&(e=I(this.origHit,e)||e),i=M(e)),this.coordAdjust=x(i,n)):(this.origHit=null,this.coordAdjust=null),pe.prototype.handleInteractionStart.apply(this,arguments)},handleDragStart:function(t){var e;pe.prototype.handleDragStart.apply(this,arguments),(e=this.queryHit(b(t),E(t)))&&this.handleHitOver(e)},handleDrag:function(t,e,n){var i;pe.prototype.handleDrag.apply(this,arguments),i=this.queryHit(b(n),E(n)),vt(i,this.hit)||(this.hit&&this.handleHitOut(),i&&this.handleHitOver(i))},handleDragEnd:function(){this.handleHitDone(),pe.prototype.handleDragEnd.apply(this,arguments)},handleHitOver:function(t){var e=vt(t,this.origHit);this.hit=t,this.trigger("hitOver",this.hit,e,this.origHit)},handleHitOut:function(){this.hit&&(this.trigger("hitOut",this.hit),this.handleHitDone(),this.hit=null)},handleHitDone:function(){this.hit&&this.trigger("hitDone",this.hit)},handleInteractionEnd:function(){pe.prototype.handleInteractionEnd.apply(this,arguments),this.origHit=null,this.hit=null,this.component.hitsNotNeeded()},handleScrollEnd:function(){pe.prototype.handleScrollEnd.apply(this,arguments),this.isDragging&&(this.component.releaseHits(),this.component.prepareHits())},queryHit:function(t,e){return this.coordAdjust&&(t+=this.coordAdjust.left,e+=this.coordAdjust.top),this.component.queryHit(t,e)}});Wt.touchMouseIgnoreWait=500;var me=dt.extend(se,re,{isTouching:!1,mouseIgnoreDepth:0,handleScrollProxy:null,bind:function(){var e=this;this.listenTo(t(document),{touchstart:this.handleTouchStart,touchcancel:this.handleTouchCancel,touchend:this.handleTouchEnd,mousedown:this.handleMouseDown,mousemove:this.handleMouseMove,mouseup:this.handleMouseUp,click:this.handleClick,selectstart:this.handleSelectStart,contextmenu:this.handleContextMenu}),window.addEventListener("touchmove",this.handleTouchMoveProxy=function(n){e.handleTouchMove(t.Event(n))},{passive:!1}),window.addEventListener("scroll",this.handleScrollProxy=function(n){e.handleScroll(t.Event(n))},!0)},unbind:function(){this.stopListeningTo(t(document)),window.removeEventListener("touchmove",this.handleTouchMoveProxy),window.removeEventListener("scroll",this.handleScrollProxy,!0)},handleTouchStart:function(t){this.stopTouch(t,!0),this.isTouching=!0,this.trigger("touchstart",t)},handleTouchMove:function(t){this.isTouching&&this.trigger("touchmove",t)},handleTouchCancel:function(t){this.isTouching&&(this.trigger("touchcancel",t),this.stopTouch(t))},handleTouchEnd:function(t){this.stopTouch(t)},handleMouseDown:function(t){this.shouldIgnoreMouse()||this.trigger("mousedown",t)},handleMouseMove:function(t){this.shouldIgnoreMouse()||this.trigger("mousemove",t)},handleMouseUp:function(t){this.shouldIgnoreMouse()||this.trigger("mouseup",t)},handleClick:function(t){this.shouldIgnoreMouse()||this.trigger("click",t)},handleSelectStart:function(t){this.trigger("selectstart",t)},handleContextMenu:function(t){this.trigger("contextmenu",t)},handleScroll:function(t){this.trigger("scroll",t)},stopTouch:function(t,e){this.isTouching&&(this.isTouching=!1,this.trigger("touchend",t),e||this.startTouchMouseIgnore())},startTouchMouseIgnore:function(){var t=this,e=Wt.touchMouseIgnoreWait;e&&(this.mouseIgnoreDepth++,setTimeout(function(){t.mouseIgnoreDepth--},e))},shouldIgnoreMouse:function(){return this.isTouching||Boolean(this.mouseIgnoreDepth)}});!function(){var t=null,e=0;me.get=function(){return t||(t=new me,t.bind()),t},me.needed=function(){me.get(),e++},me.unneeded=function(){--e||(t.unbind(),t=null)}}();var ye=dt.extend(se,{options:null,sourceEl:null,el:null,parentEl:null,top0:null,left0:null,y0:null,x0:null,topDelta:null,leftDelta:null,isFollowing:!1,isHidden:!1,isAnimating:!1,constructor:function(e,n){this.options=n=n||{},this.sourceEl=e,this.parentEl=n.parentEl?t(n.parentEl):e.parent()},start:function(e){this.isFollowing||(this.isFollowing=!0,this.y0=E(e),this.x0=b(e),this.topDelta=0,this.leftDelta=0,this.isHidden||this.updatePosition(),S(e)?this.listenTo(t(document),"touchmove",this.handleMove):this.listenTo(t(document),"mousemove",this.handleMove))},stop:function(e,n){function i(){r.isAnimating=!1,r.removeElement(),r.top0=r.left0=null,n&&n()}var r=this,s=this.options.revertDuration;this.isFollowing&&!this.isAnimating&&(this.isFollowing=!1,this.stopListeningTo(t(document)),e&&s&&!this.isHidden?(this.isAnimating=!0,this.el.animate({top:this.top0,left:this.left0},{duration:s,complete:i})):i())},getEl:function(){var t=this.el;return t||(t=this.el=this.sourceEl.clone().addClass(this.options.additionalClass||"").css({position:"absolute",visibility:"",display:this.isHidden?"none":"",margin:0,right:"auto",bottom:"auto",width:this.sourceEl.width(),height:this.sourceEl.height(),opacity:this.options.opacity||"",zIndex:this.options.zIndex}),t.addClass("fc-unselectable"),t.appendTo(this.parentEl)),t},removeElement:function(){this.el&&(this.el.remove(),this.el=null)},updatePosition:function(){var t,e;this.getEl(),null===this.top0&&(t=this.sourceEl.offset(),e=this.el.offsetParent().offset(),this.top0=t.top-e.top,this.left0=t.left-e.left),this.el.css({top:this.top0+this.topDelta,left:this.left0+this.leftDelta})},handleMove:function(t){this.topDelta=E(t)-this.y0,this.leftDelta=b(t)-this.x0,this.isHidden||this.updatePosition()},hide:function(){this.isHidden||(this.isHidden=!0,this.el&&this.el.hide())},show:function(){this.isHidden&&(this.isHidden=!1,this.updatePosition(),this.getEl().show())}}),we=Wt.Scroller=dt.extend({el:null,scrollEl:null,overflowX:null,overflowY:null,constructor:function(t){t=t||{},this.overflowX=t.overflowX||t.overflow||"auto",this.overflowY=t.overflowY||t.overflow||"auto"},render:function(){this.el=this.renderEl(),this.applyOverflow()},renderEl:function(){return this.scrollEl=t('
    ')},clear:function(){this.setHeight("auto"),this.applyOverflow()},destroy:function(){this.el.remove()},applyOverflow:function(){this.scrollEl.css({"overflow-x":this.overflowX,"overflow-y":this.overflowY})},lockOverflow:function(t){var e=this.overflowX,n=this.overflowY;t=t||this.getScrollbarWidths(),"auto"===e&&(e=t.top||t.bottom||this.scrollEl[0].scrollWidth-1>this.scrollEl[0].clientWidth?"scroll":"hidden"),"auto"===n&&(n=t.left||t.right||this.scrollEl[0].scrollHeight-1>this.scrollEl[0].clientHeight?"scroll":"hidden"),this.scrollEl.css({"overflow-x":e,"overflow-y":n})},setHeight:function(t){this.scrollEl.height(t)},getScrollTop:function(){return this.scrollEl.scrollTop()},setScrollTop:function(t){this.scrollEl.scrollTop(t)},getClientWidth:function(){return this.scrollEl[0].clientWidth},getClientHeight:function(){return this.scrollEl[0].clientHeight},getScrollbarWidths:function(){return p(this.scrollEl)}});yt.prototype.proxyCall=function(t){var e=Array.prototype.slice.call(arguments,1),n=[];return this.items.forEach(function(i){n.push(i[t].apply(i,e))}),n};var De=dt.extend({view:null,component:null,constructor:function(t){this.view=t._getView(),this.component=t},opt:function(t){return this.view.opt(t)},end:function(){}}),be=De.extend({dragListener:null,constructor:function(t){De.call(this,t),this.dragListener=this.buildDragListener()},end:function(){this.dragListener.endInteraction()},bindToEl:function(t){var e=this.component,n=this.dragListener;e.bindDateHandlerToEl(t,"mousedown",function(t){e.shouldIgnoreMouse()||n.startInteraction(t)}),e.bindDateHandlerToEl(t,"touchstart",function(t){e.shouldIgnoreTouch()||n.startInteraction(t)})},buildDragListener:function(){var t,e=this,n=this.component,i=new ve(n,{scroll:this.opt("dragScroll"),interactionStart:function(){t=i.origHit},hitOver:function(e,n,i){n||(t=null)},hitOut:function(){t=null},interactionEnd:function(i,r){var s;!r&&t&&(s=n.getSafeHitFootprint(t))&&e.view.triggerDayClick(s,n.getHitEl(t),i)}});return i.shouldCancelTouchScroll=!1,i.scrollAlwaysKills=!0,i}}),Ee=Wt.DateSelecting=De.extend({dragListener:null,constructor:function(t){De.call(this,t),this.dragListener=this.buildDragListener()},end:function(){this.dragListener.endInteraction()},getDelay:function(){var t=this.opt("selectLongPressDelay");return null==t&&(t=this.opt("longPressDelay")),t},bindToEl:function(t){var e=this,n=this.component,i=this.dragListener;n.bindDateHandlerToEl(t,"mousedown",function(t){e.opt("selectable")&&!n.shouldIgnoreMouse()&&i.startInteraction(t,{distance:e.opt("selectMinDistance")})}),n.bindDateHandlerToEl(t,"touchstart",function(t){e.opt("selectable")&&!n.shouldIgnoreTouch()&&i.startInteraction(t,{delay:e.getDelay()})}),C(t)},buildDragListener:function(){var t,e=this,n=this.component;return new ve(n,{scroll:this.opt("dragScroll"),interactionStart:function(){t=null},dragStart:function(t){e.view.unselect(t)},hitOver:function(i,r,o){var a,l;o&&(a=n.getSafeHitFootprint(o),l=n.getSafeHitFootprint(i),t=a&&l?e.computeSelection(a,l):null,t?n.renderSelectionFootprint(t):!1===t&&s())},hitOut:function(){t=null,n.unrenderSelection()},hitDone:function(){o()},interactionEnd:function(n,i){!i&&t&&e.view.reportSelection(t,n)}})},computeSelection:function(t,e){var n=this.computeSelectionFootprint(t,e);return!(n&&!this.isSelectionFootprintAllowed(n))&&n},computeSelectionFootprint:function(t,e){var n=[t.unzonedRange.startMs,t.unzonedRange.endMs,e.unzonedRange.startMs,e.unzonedRange.endMs];return n.sort(ot),new We(new Ue(n[0],n[3]),t.isAllDay)},isSelectionFootprintAllowed:function(t){return this.component.dateProfile.validUnzonedRange.containsRange(t.unzonedRange)&&this.view.calendar.isSelectionFootprintAllowed(t)}}),Se=Wt.EventDragging=De.extend({eventPointing:null,dragListener:null,isDragging:!1,constructor:function(t,e){De.call(this,t),this.eventPointing=e},end:function(){this.dragListener&&this.dragListener.endInteraction()},getSelectionDelay:function(){var t=this.opt("eventLongPressDelay");return null==t&&(t=this.opt("longPressDelay")),t},bindToEl:function(t){var e=this.component;e.bindSegHandlerToEl(t,"mousedown",this.handleMousedown.bind(this)),e.bindSegHandlerToEl(t,"touchstart",this.handleTouchStart.bind(this))},handleMousedown:function(t,e){this.component.canStartDrag(t,e)&&this.buildDragListener(t).startInteraction(e,{distance:5})},handleTouchStart:function(t,e){var n=this.component,i={delay:this.view.isEventDefSelected(t.footprint.eventDef)?0:this.getSelectionDelay()};n.canStartDrag(t,e)?this.buildDragListener(t).startInteraction(e,i):n.canStartSelection(t,e)&&this.buildSelectListener(t).startInteraction(e,i)},buildSelectListener:function(t){var e=this,n=this.view,i=t.footprint.eventDef,r=t.footprint.eventInstance;if(this.dragListener)return this.dragListener;var s=this.dragListener=new pe({dragStart:function(t){s.isTouch&&!n.isEventDefSelected(i)&&r&&n.selectEventInstance(r)},interactionEnd:function(t){e.dragListener=null}});return s},buildDragListener:function(t){var e,n,i,r=this,a=this.component,l=this.view,u=l.calendar,c=u.eventManager,h=t.el,d=t.footprint.eventDef,f=t.footprint.eventInstance;if(this.dragListener)return this.dragListener;var g=this.dragListener=new ve(l,{scroll:this.opt("dragScroll"),subjectEl:h,subjectCenter:!0,interactionStart:function(i){t.component=a,e=!1,n=new ye(t.el,{additionalClass:"fc-dragging",parentEl:l.el,opacity:g.isTouch?null:r.opt("dragOpacity"),revertDuration:r.opt("dragRevertDuration"),zIndex:2}),n.hide(),n.start(i)},dragStart:function(n){g.isTouch&&!l.isEventDefSelected(d)&&f&&l.selectEventInstance(f),e=!0,r.eventPointing.handleMouseout(t,n),r.segDragStart(t,n),l.hideEventsWithId(t.footprint.eventDef.id)},hitOver:function(e,o,h){var f,p,v,m=!0;t.hit&&(h=t.hit),f=h.component.getSafeHitFootprint(h),p=e.component.getSafeHitFootprint(e),f&&p?(i=r.computeEventDropMutation(f,p,d),i?(v=c.buildMutatedEventInstanceGroup(d.id,i),m=a.isEventInstanceGroupAllowed(v)):m=!1):m=!1,m||(i=null,s()),i&&l.renderDrag(a.eventRangesToEventFootprints(v.sliceRenderRanges(a.dateProfile.renderUnzonedRange,u)),t,g.isTouch)?n.hide():n.show(),o&&(i=null)},hitOut:function(){l.unrenderDrag(t),n.show(),i=null},hitDone:function(){o()},interactionEnd:function(s){delete t.component,n.stop(!i,function(){e&&(l.unrenderDrag(t),r.segDragStop(t,s)),l.showEventsWithId(t.footprint.eventDef.id),i&&l.reportEventDrop(f,i,h,s)}),r.dragListener=null}});return g},segDragStart:function(t,e){this.isDragging=!0,this.component.publiclyTrigger("eventDragStart",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},segDragStop:function(t,e){this.isDragging=!1,this.component.publiclyTrigger("eventDragStop",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},computeEventDropMutation:function(t,e,n){var i=new rn;return i.setDateMutation(this.computeEventDateMutation(t,e)),i},computeEventDateMutation:function(t,e){var n,i,r=t.unzonedRange.getStart(),s=e.unzonedRange.getStart(),o=!1,a=!1,l=!1;return t.isAllDay!==e.isAllDay&&(o=!0,e.isAllDay?(l=!0,r.stripTime()):a=!0),n=this.component.diffDates(s,r),i=new sn,i.clearEnd=o,i.forceTimed=a,i.forceAllDay=l,i.setDateDelta(n),i}}),Ce=Wt.EventResizing=De.extend({eventPointing:null,dragListener:null,isResizing:!1,constructor:function(t,e){De.call(this,t),this.eventPointing=e},end:function(){this.dragListener&&this.dragListener.endInteraction()},bindToEl:function(t){var e=this.component;e.bindSegHandlerToEl(t,"mousedown",this.handleMouseDown.bind(this)),e.bindSegHandlerToEl(t,"touchstart",this.handleTouchStart.bind(this))},handleMouseDown:function(e,n){this.component.canStartResize(e,n)&&this.buildDragListener(e,t(n.target).is(".fc-start-resizer")).startInteraction(n,{distance:5})},handleTouchStart:function(e,n){this.component.canStartResize(e,n)&&this.buildDragListener(e,t(n.target).is(".fc-start-resizer")).startInteraction(n)},buildDragListener:function(t,e){var n,i,r=this,a=this.component,l=this.view,u=l.calendar,c=u.eventManager,h=t.el,d=t.footprint.eventDef,f=t.footprint.eventInstance;return this.dragListener=new ve(a,{scroll:this.opt("dragScroll"),subjectEl:h,interactionStart:function(){n=!1},dragStart:function(e){n=!0,r.eventPointing.handleMouseout(t,e),r.segResizeStart(t,e)},hitOver:function(n,o,h){var f,g=!0,p=a.getSafeHitFootprint(h),v=a.getSafeHitFootprint(n);p&&v?(i=e?r.computeEventStartResizeMutation(p,v,t.footprint):r.computeEventEndResizeMutation(p,v,t.footprint),i?(f=c.buildMutatedEventInstanceGroup(d.id,i),g=a.isEventInstanceGroupAllowed(f)):g=!1):g=!1,g?i.isEmpty()&&(i=null):(i=null,s()),i&&(l.hideEventsWithId(t.footprint.eventDef.id),l.renderEventResize(a.eventRangesToEventFootprints(f.sliceRenderRanges(a.dateProfile.renderUnzonedRange,u)),t))},hitOut:function(){i=null},hitDone:function(){l.unrenderEventResize(t),l.showEventsWithId(t.footprint.eventDef.id),o()},interactionEnd:function(e){n&&r.segResizeStop(t,e),i&&l.reportEventResize(f,i,h,e),r.dragListener=null}})},segResizeStart:function(t,e){this.isResizing=!0,this.component.publiclyTrigger("eventResizeStart",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},segResizeStop:function(t,e){this.isResizing=!1,this.component.publiclyTrigger("eventResizeStop",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,{},this.view]})},computeEventStartResizeMutation:function(t,e,n){var i,r,s=n.componentFootprint.unzonedRange,o=this.component.diffDates(e.unzonedRange.getStart(),t.unzonedRange.getStart());return s.getStart().add(o)s.getStart()&&(i=new sn,i.setEndDelta(o),r=new rn,r.setDateMutation(i),r)}}),Re=Wt.ExternalDropping=De.extend(se,{dragListener:null,isDragging:!1,end:function(){this.dragListener&&this.dragListener.endInteraction()},bindToDocument:function(){this.listenTo(t(document),{dragstart:this.handleDragStart,sortstart:this.handleDragStart})},unbindFromDocument:function(){this.stopListeningTo(t(document))},handleDragStart:function(e,n){var i,r;this.opt("droppable")&&(i=t((n?n.item:null)||e.target),r=this.opt("dropAccept"),(t.isFunction(r)?r.call(i[0],i):i.is(r))&&(this.isDragging||this.listenToExternalDrag(i,e,n)))},listenToExternalDrag:function(t,e,n){var i,r=this,a=this.component,l=this.view,u=wt(t);(r.dragListener=new ve(a,{interactionStart:function(){r.isDragging=!0},hitOver:function(t){var e,n=!0,o=t.component.getSafeHitFootprint(t);o?(i=r.computeExternalDrop(o,u),i?(e=new Je(i.buildInstances()),n=u.eventProps?a.isEventInstanceGroupAllowed(e):a.isExternalInstanceGroupAllowed(e)):n=!1):n=!1,n||(i=null,s()),i&&a.renderDrag(a.eventRangesToEventFootprints(e.sliceRenderRanges(a.dateProfile.renderUnzonedRange,l.calendar)))},hitOut:function(){i=null},hitDone:function(){o(),a.unrenderDrag()},interactionEnd:function(e){i&&l.reportExternalDrop(i,Boolean(u.eventProps),Boolean(u.stick),t,e,n),r.isDragging=!1,r.dragListener=null}})).startDrag(e)},computeExternalDrop:function(e,n){var i,r=this.view.calendar,s=Wt.moment.utc(e.unzonedRange.startMs).stripZone();return e.isAllDay&&(n.startTime?s.time(n.startTime):s.stripTime()),n.duration&&(i=s.clone().add(n.duration)),s=r.applyTimezone(s),i&&(i=r.applyTimezone(i)),$e.parse(t.extend({},n.eventProps,{start:s,end:i}),new on(r))}});Wt.dataAttrPrefix="";var Te=Wt.EventPointing=De.extend({mousedOverSeg:null,bindToEl:function(t){var e=this.component;e.bindSegHandlerToEl(t,"click",this.handleClick.bind(this)),e.bindSegHandlerToEl(t,"mouseenter",this.handleMouseover.bind(this)),e.bindSegHandlerToEl(t,"mouseleave",this.handleMouseout.bind(this))},handleClick:function(t,e){!1===this.component.publiclyTrigger("eventClick",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,this.view]})&&e.preventDefault()},handleMouseover:function(t,e){me.get().shouldIgnoreMouse()||this.mousedOverSeg||(this.mousedOverSeg=t,this.view.isEventDefResizable(t.footprint.eventDef)&&t.el.addClass("fc-allow-mouse-resize"),this.component.publiclyTrigger("eventMouseover",{context:t.el[0],args:[t.footprint.getEventLegacy(),e,this.view]}))},handleMouseout:function(t,e){this.mousedOverSeg&&(this.mousedOverSeg=null,this.view.isEventDefResizable(t.footprint.eventDef)&&t.el.removeClass("fc-allow-mouse-resize"),this.component.publiclyTrigger("eventMouseout",{context:t.el[0],args:[t.footprint.getEventLegacy(),e||{},this.view]}))},end:function(){this.mousedOverSeg&&this.handleMouseout(this.mousedOverSeg)}}),Ie=Wt.StandardInteractionsMixin={dateClickingClass:be,dateSelectingClass:Ee,eventPointingClass:Te,eventDraggingClass:Se,eventResizingClass:Ce,externalDroppingClass:Re},He=Wt.EventRenderer=dt.extend({view:null,component:null,fillRenderer:null,fgSegs:null,bgSegs:null,eventTimeFormat:null,displayEventTime:null,displayEventEnd:null,constructor:function(t,e){this.view=t._getView(),this.component=t,this.fillRenderer=e},opt:function(t){return this.view.opt(t)},rangeUpdated:function(){var t,e;this.eventTimeFormat=this.opt("eventTimeFormat")||this.opt("timeFormat")||this.computeEventTimeFormat(),t=this.opt("displayEventTime"),null==t&&(t=this.computeDisplayEventTime()),e=this.opt("displayEventEnd"),null==e&&(e=this.computeDisplayEventEnd()),this.displayEventTime=t,this.displayEventEnd=e},render:function(t){var e,n,i,r=this.component._getDateProfile(),s=[],o=[];for(e in t)n=t[e],i=n.sliceRenderRanges(r.activeUnzonedRange),n.getEventDef().hasBgRendering()?s.push.apply(s,i):o.push.apply(o,i);this.renderBgRanges(s),this.renderFgRanges(o)},unrender:function(){this.unrenderBgRanges(),this.unrenderFgRanges()},renderFgRanges:function(t){var e=this.component.eventRangesToEventFootprints(t),n=this.component.eventFootprintsToSegs(e);n=this.renderFgSegEls(n),!1!==this.renderFgSegs(n)&&(this.fgSegs=n)},unrenderFgRanges:function(){this.unrenderFgSegs(this.fgSegs||[]),this.fgSegs=null},renderBgRanges:function(t){var e=this.component.eventRangesToEventFootprints(t),n=this.component.eventFootprintsToSegs(e);!1!==this.renderBgSegs(n)&&(this.bgSegs=n)},unrenderBgRanges:function(){this.unrenderBgSegs(),this.bgSegs=null},getSegs:function(){return(this.bgSegs||[]).concat(this.fgSegs||[])},renderFgSegs:function(t){return!1},unrenderFgSegs:function(t){},renderBgSegs:function(t){var e=this;if(!this.fillRenderer)return!1;this.fillRenderer.renderSegs("bgEvent",t,{getClasses:function(t){return e.getBgClasses(t.footprint.eventDef)},getCss:function(t){return{"background-color":e.getBgColor(t.footprint.eventDef)}},filterEl:function(t,n){return e.filterEventRenderEl(t.footprint,n)}})},unrenderBgSegs:function(){this.fillRenderer&&this.fillRenderer.unrender("bgEvent")},renderFgSegEls:function(e,n){var i,r=this,s=this.view.hasPublicHandlers("eventRender"),o="",a=[];if(e.length){for(i=0;i"},attachSegEls:function(t,e){},reportEls:function(e,n){this.elsByFill[e]?this.elsByFill[e]=this.elsByFill[e].add(n):this.elsByFill[e]=t(n)}}),Pe=Wt.HelperRenderer=dt.extend({view:null,component:null,eventRenderer:null,helperEls:null,constructor:function(t,e){this.view=t._getView(),this.component=t,this.eventRenderer=e},renderComponentFootprint:function(t){this.renderEventFootprints([this.fabricateEventFootprint(t)])},renderEventDraggingFootprints:function(t,e,n){this.renderEventFootprints(t,e,"fc-dragging",n?null:this.view.opt("dragOpacity"))},renderEventResizingFootprints:function(t,e,n){this.renderEventFootprints(t,e,"fc-resizing")},renderEventFootprints:function(t,e,n,i){var r,s=this.component.eventFootprintsToSegs(t),o="fc-helper "+(n||"");for(s=this.eventRenderer.renderFgSegEls(s),r=0;r'+i+"":""+i+""},getAllDayHtml:function(){return this.opt("allDayHtml")||et(this.opt("allDayText"))},getDayClasses:function(t,e){var n,i=this._getView(),r=[];return this.dateProfile.activeUnzonedRange.containsDate(t)?(r.push("fc-"+jt[t.day()]),i.isDateInOtherMonth(t,this.dateProfile)&&r.push("fc-other-month"),n=i.calendar.getNow(),t.isSame(n,"day")?(r.push("fc-today"),!0!==e&&r.push(i.calendar.theme.getClass("today"))):t=this.nextDayThreshold&&s.add(1,"days"),s<=n&&(s=n.clone().add(1,"days")),{start:n,end:s}},isMultiDayRange:function(t){var e=this.computeDayRange(t);return e.end.diff(e.start,"days")>1}});var ke=Wt.InteractiveDateComponent=Fe.extend({dateClickingClass:null,dateSelectingClass:null,eventPointingClass:null,eventDraggingClass:null,eventResizingClass:null,externalDroppingClass:null,dateClicking:null,dateSelecting:null,eventPointing:null,eventDragging:null,eventResizing:null,externalDropping:null,segSelector:".fc-event-container > *",largeUnit:null,constructor:function(){Fe.call(this),this.dateSelectingClass&&(this.dateClicking=new this.dateClickingClass(this)),this.dateSelectingClass&&(this.dateSelecting=new this.dateSelectingClass(this)),this.eventPointingClass&&(this.eventPointing=new this.eventPointingClass(this)),this.eventDraggingClass&&this.eventPointing&&(this.eventDragging=new this.eventDraggingClass(this,this.eventPointing)),this.eventResizingClass&&this.eventPointing&&(this.eventResizing=new this.eventResizingClass(this,this.eventPointing)),this.externalDroppingClass&&(this.externalDropping=new this.externalDroppingClass(this))},setElement:function(t){Fe.prototype.setElement.apply(this,arguments),this.dateClicking&&this.dateClicking.bindToEl(t),this.dateSelecting&&this.dateSelecting.bindToEl(t),this.bindAllSegHandlersToEl(t)},unrender:function(){this.endInteractions(),Fe.prototype.unrender.apply(this,arguments)},executeEventUnrender:function(){this.endInteractions(),Fe.prototype.executeEventUnrender.apply(this,arguments)},bindGlobalHandlers:function(){Fe.prototype.bindGlobalHandlers.apply(this,arguments),this.externalDropping&&this.externalDropping.bindToDocument()},unbindGlobalHandlers:function(){Fe.prototype.unbindGlobalHandlers.apply(this,arguments),this.externalDropping&&this.externalDropping.unbindFromDocument()},bindDateHandlerToEl:function(e,n,i){var r=this;this.el.on(n,function(e){if(!t(e.target).is(r.segSelector+","+r.segSelector+" *,.fc-more,a[data-goto]"))return i.call(r,e)})},bindAllSegHandlersToEl:function(t){[this.eventPointing,this.eventDragging,this.eventResizing].forEach(function(e){e&&e.bindToEl(t)})},bindSegHandlerToEl:function(e,n,i){var r=this;e.on(n,this.segSelector,function(e){var n=t(this).data("fc-seg");if(n&&!r.shouldIgnoreEventPointing())return i.call(r,n,e)})},shouldIgnoreMouse:function(){return me.get().shouldIgnoreMouse()},shouldIgnoreTouch:function(){var t=this._getView();return t.isSelected||t.selectedEvent},shouldIgnoreEventPointing:function(){return this.eventDragging&&this.eventDragging.isDragging||this.eventResizing&&this.eventResizing.isResizing},canStartSelection:function(t,e){return S(e)&&!this.canStartResize(t,e)&&(this.isEventDefDraggable(t.footprint.eventDef)||this.isEventDefResizable(t.footprint.eventDef))},canStartDrag:function(t,e){return!this.canStartResize(t,e)&&this.isEventDefDraggable(t.footprint.eventDef)},canStartResize:function(e,n){var i=this._getView(),r=e.footprint.eventDef;return(!S(n)||i.isEventDefSelected(r))&&this.isEventDefResizable(r)&&t(n.target).is(".fc-resizer")},endInteractions:function(){[this.dateClicking,this.dateSelecting,this.eventPointing,this.eventDragging,this.eventResizing].forEach(function(t){t&&t.end()})},isEventDefDraggable:function(t){return this.isEventDefStartEditable(t)},isEventDefStartEditable:function(t){var e=t.isStartExplicitlyEditable();return null==e&&null==(e=this.opt("eventStartEditable"))&&(e=this.isEventDefGenerallyEditable(t)),e},isEventDefGenerallyEditable:function(t){var e=t.isExplicitlyEditable();return null==e&&(e=this.opt("editable")),e},isEventDefResizableFromStart:function(t){return this.opt("eventResizableFromStart")&&this.isEventDefResizable(t)},isEventDefResizableFromEnd:function(t){return this.isEventDefResizable(t)},isEventDefResizable:function(t){var e=t.isDurationExplicitlyEditable();return null==e&&null==(e=this.opt("eventDurationEditable"))&&(e=this.isEventDefGenerallyEditable(t)),e},diffDates:function(t,e){return this.largeUnit?L(t,e,this.largeUnit):B(t,e)},isEventInstanceGroupAllowed:function(t){var e,n=this._getView(),i=this.dateProfile,r=this.eventRangesToEventFootprints(t.getAllEventRanges());for(e=0;e=e.length?e[e.length-1]+1:e[n]},computeColHeadFormat:function(){return this.rowCnt>1||this.colCnt>10?"ddd":this.colCnt>1?this.opt("dayOfMonthFormat"):"dddd"},sliceRangeByRow:function(t){var e,n,i,r,s,o=this.daysPerRow,a=this.view.computeDayRange(t),l=this.getDateDayIndex(a.start),u=this.getDateDayIndex(a.end.clone().subtract(1,"days")),c=[];for(e=0;e'+this.renderHeadTrHtml()+"
    "},renderHeadIntroHtml:function(){return this.renderIntroHtml()},renderHeadTrHtml:function(){return""+(this.isRTL?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRTL?this.renderHeadIntroHtml():"")+""},renderHeadDateCellsHtml:function(){var t,e,n=[];for(t=0;t1?' colspan="'+e+'"':"")+(n?" "+n:"")+">"+(r?i.buildGotoAnchorHtml({date:t,forceOff:this.rowCnt>1||1===this.colCnt},o):o)+""},renderBgTrHtml:function(t){return""+(this.isRTL?"":this.renderBgIntroHtml(t))+this.renderBgCellsHtml(t)+(this.isRTL?this.renderBgIntroHtml(t):"")+""},renderBgIntroHtml:function(t){return this.renderIntroHtml()},renderBgCellsHtml:function(t){var e,n,i=[];for(e=0;e"},renderIntroHtml:function(){},bookendCells:function(t){var e=this.renderIntroHtml();e&&(this.isRTL?t.append(e):t.prepend(e))}},Ae=Wt.View=ke.extend({type:null,name:null,title:null,calendar:null,viewSpec:null,options:null,renderQueue:null,batchRenderDepth:0,queuedScroll:null,isSelected:!1,selectedEventInstance:null,eventOrderSpecs:null,isHiddenDayHash:null,isNowIndicatorRendered:null,initialNowDate:null,initialNowQueriedMs:null,nowIndicatorTimeoutID:null,nowIndicatorIntervalID:null,constructor:function(t,e){this.calendar=t,this.viewSpec=e,this.type=e.type,this.options=e.options,this.name=this.type,ke.call(this),this.initRenderQueue(),this.initHiddenDays(),this.bindBaseRenderHandlers(),this.eventOrderSpecs=P(this.opt("eventOrder")),this.initialize&&this.initialize()},_getView:function(){return this},opt:function(t){return this.options[t]},initRenderQueue:function(){this.renderQueue=new de({event:this.opt("eventRenderWait")}),this.renderQueue.on("start",this.onRenderQueueStart.bind(this)),this.renderQueue.on("stop",this.onRenderQueueStop.bind(this)),this.on("before:change",this.startBatchRender),this.on("change",this.stopBatchRender)},onRenderQueueStart:function(){this.calendar.freezeContentHeight(),this.addScroll(this.queryScroll())},onRenderQueueStop:function(){this.calendar.updateViewSize()&&this.popScroll(),this.calendar.thawContentHeight()},startBatchRender:function(){this.batchRenderDepth++||this.renderQueue.pause()},stopBatchRender:function(){--this.batchRenderDepth||this.renderQueue.resume()},requestRender:function(t,e,n){this.renderQueue.queue(t,e,n)},whenSizeUpdated:function(t){this.renderQueue.isRunning?this.renderQueue.one("stop",t.bind(this)):t.call(this)},computeTitle:function(t){var e;return e=/^(year|month)$/.test(t.currentRangeUnit)?t.currentUnzonedRange:t.activeUnzonedRange,this.formatRange({start:this.calendar.msToMoment(e.startMs,t.isRangeAllDay),end:this.calendar.msToMoment(e.endMs,t.isRangeAllDay)},t.isRangeAllDay,this.opt("titleFormat")||this.computeTitleFormat(t),this.opt("titleRangeSeparator"))},computeTitleFormat:function(t){var e=t.currentRangeUnit;return"year"==e?"YYYY":"month"==e?this.opt("monthYearFormat"):t.currentUnzonedRange.as("days")>1?"ll":"LL"},setDate:function(t){var e=this.get("dateProfile"),n=this.buildDateProfile(t,null,!0);e&&e.activeUnzonedRange.equals(n.activeUnzonedRange)||this.set("dateProfile",n)},unsetDate:function(){this.unset("dateProfile")},fetchInitialEvents:function(t){var e=this.calendar,n=t.isRangeAllDay&&!this.usesMinMaxTime;return e.requestEvents(e.msToMoment(t.activeUnzonedRange.startMs,n),e.msToMoment(t.activeUnzonedRange.endMs,n))},bindEventChanges:function(){this.listenTo(this.calendar,"eventsReset",this.resetEvents)},unbindEventChanges:function(){this.stopListeningTo(this.calendar,"eventsReset")},setEvents:function(t){this.set("currentEvents",t),this.set("hasEvents",!0)},unsetEvents:function(){this.unset("currentEvents"),this.unset("hasEvents")},resetEvents:function(t){this.startBatchRender(),this.unsetEvents(),this.setEvents(t),this.stopBatchRender()},requestDateRender:function(t){var e=this;this.requestRender(function(){e.executeDateRender(t)},"date","init")},requestDateUnrender:function(){var t=this;this.requestRender(function(){t.executeDateUnrender()},"date","destroy")},executeDateRender:function(t){Fe.prototype.executeDateRender.apply(this,arguments),this.render&&this.render(),this.trigger("datesRendered"),this.addScroll({isDateInit:!0}),this.startNowIndicator()},executeDateUnrender:function(){this.unselect(),this.stopNowIndicator(),this.trigger("before:datesUnrendered"),this.destroy&&this.destroy(),Fe.prototype.executeDateUnrender.apply(this,arguments)},bindBaseRenderHandlers:function(){var t=this;this.on("datesRendered",function(){t.whenSizeUpdated(t.triggerViewRender)}),this.on("before:datesUnrendered",function(){t.triggerViewDestroy()})},triggerViewRender:function(){this.publiclyTrigger("viewRender",{context:this,args:[this,this.el]})},triggerViewDestroy:function(){this.publiclyTrigger("viewDestroy",{context:this,args:[this,this.el]})},requestEventsRender:function(t){var e=this;this.requestRender(function(){e.executeEventRender(t),e.whenSizeUpdated(e.triggerAfterEventsRendered)},"event","init")},requestEventsUnrender:function(){var t=this;this.requestRender(function(){t.triggerBeforeEventsDestroyed(),t.executeEventUnrender()},"event","destroy")},requestBusinessHoursRender:function(t){var e=this;this.requestRender(function(){e.renderBusinessHours(t)},"businessHours","init")},requestBusinessHoursUnrender:function(){var t=this;this.requestRender(function(){t.unrenderBusinessHours()},"businessHours","destroy")},bindGlobalHandlers:function(){ke.prototype.bindGlobalHandlers.apply(this,arguments),this.listenTo(me.get(),{touchstart:this.processUnselect,mousedown:this.handleDocumentMousedown})},unbindGlobalHandlers:function(){ke.prototype.unbindGlobalHandlers.apply(this,arguments),this.stopListeningTo(me.get())},startNowIndicator:function(){var t,n,i,r=this;this.opt("nowIndicator")&&(t=this.getNowIndicatorUnit())&&(n=lt(this,"updateNowIndicator"),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=+new Date,i=this.initialNowDate.clone().startOf(t).add(1,t)-this.initialNowDate,this.nowIndicatorTimeoutID=setTimeout(function(){r.nowIndicatorTimeoutID=null,n(),i=+e.duration(1,t),i=Math.max(100,i),r.nowIndicatorIntervalID=setInterval(n,i)},i))},updateNowIndicator:function(){this.isDatesRendered&&this.initialNowDate&&(this.unrenderNowIndicator(),this.renderNowIndicator(this.initialNowDate.clone().add(new Date-this.initialNowQueriedMs)),this.isNowIndicatorRendered=!0)},stopNowIndicator:function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearInterval(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},updateSize:function(t,e,n){this.setHeight?this.setHeight(t,e):ke.prototype.updateSize.apply(this,arguments),this.updateNowIndicator()},addScroll:function(e){var n=this.queuedScroll||(this.queuedScroll={});t.extend(n,e)},popScroll:function(){this.applyQueuedScroll(),this.queuedScroll=null},applyQueuedScroll:function(){this.queuedScroll&&this.applyScroll(this.queuedScroll)},queryScroll:function(){var e={};return this.isDatesRendered&&t.extend(e,this.queryDateScroll()),e},applyScroll:function(e){e.isDateInit&&this.isDatesRendered&&t.extend(e,this.computeInitialDateScroll()),this.isDatesRendered&&this.applyDateScroll(e)},computeInitialDateScroll:function(){return{}},queryDateScroll:function(){return{}},applyDateScroll:function(t){},reportEventDrop:function(t,n,i,r){var s=this.calendar.eventManager,o=s.mutateEventsWithId(t.def.id,n,this.calendar),a=n.dateMutation;a&&(t.dateProfile=a.buildNewDateProfile(t.dateProfile,this.calendar)),this.triggerEventDrop(t,a&&a.dateDelta||e.duration(),o,i,r)},triggerEventDrop:function(t,e,n,i,r){this.publiclyTrigger("eventDrop",{context:i[0],args:[t.toLegacy(),e,n,r,{},this]})},reportExternalDrop:function(t,e,n,i,r,s){e&&this.calendar.eventManager.addEventDef(t,n),this.triggerExternalDrop(t,e,i,r,s)},triggerExternalDrop:function(t,e,n,i,r){this.publiclyTrigger("drop",{context:n[0],args:[t.dateProfile.start.clone(),i,r,this]}),e&&this.publiclyTrigger("eventReceive",{context:this,args:[t.buildInstance().toLegacy(),this]})},reportEventResize:function(t,e,n,i){var r=this.calendar.eventManager,s=r.mutateEventsWithId(t.def.id,e,this.calendar);t.dateProfile=e.dateMutation.buildNewDateProfile(t.dateProfile,this.calendar),this.triggerEventResize(t,e.dateMutation.endDelta,s,n,i)},triggerEventResize:function(t,e,n,i,r){this.publiclyTrigger("eventResize",{context:i[0],args:[t.toLegacy(),e,n,r,{},this]})},select:function(t,e){this.unselect(e),this.renderSelectionFootprint(t),this.reportSelection(t,e)},renderSelectionFootprint:function(t,e){this.renderSelection?this.renderSelection(t.toLegacy(this.calendar)):ke.prototype.renderSelectionFootprint.apply(this,arguments)},reportSelection:function(t,e){this.isSelected=!0,this.triggerSelect(t,e)},triggerSelect:function(t,e){var n=this.calendar.footprintToDateProfile(t);this.publiclyTrigger("select",{context:this,args:[n.start,n.end,e,this]})},unselect:function(t){this.isSelected&&(this.isSelected=!1,this.destroySelection&&this.destroySelection(),this.unrenderSelection(),this.publiclyTrigger("unselect",{context:this,args:[t,this]}))},selectEventInstance:function(t){this.selectedEventInstance&&this.selectedEventInstance===t||(this.unselectEventInstance(),this.getEventSegs().forEach(function(e){e.footprint.eventInstance===t&&e.el&&e.el.addClass("fc-selected")}),this.selectedEventInstance=t)},unselectEventInstance:function(){this.selectedEventInstance&&(this.getEventSegs().forEach(function(t){t.el&&t.el.removeClass("fc-selected")}),this.selectedEventInstance=null)},isEventDefSelected:function(t){return this.selectedEventInstance&&this.selectedEventInstance.def.id===t.id},handleDocumentMousedown:function(t){D(t)&&this.processUnselect(t)},processUnselect:function(t){this.processRangeUnselect(t),this.processEventUnselect(t)},processRangeUnselect:function(e){var n;this.isSelected&&this.opt("unselectAuto")&&((n=this.opt("unselectCancel"))&&t(e.target).closest(n).length||this.unselect(e))},processEventUnselect:function(e){this.selectedEventInstance&&(t(e.target).closest(".fc-selected").length||this.unselectEventInstance())},triggerBaseRendered:function(){this.publiclyTrigger("viewRender",{context:this,args:[this,this.el]})},triggerBaseUnrendered:function(){this.publiclyTrigger("viewDestroy",{context:this,args:[this,this.el]})},triggerDayClick:function(t,e,n){var i=this.calendar.footprintToDateProfile(t);this.publiclyTrigger("dayClick",{context:e,args:[i.start,n,this]})}});Ae.watch("displayingDates",["isInDom","dateProfile"],function(t){this.requestDateRender(t.dateProfile)},function(){this.requestDateUnrender()}),Ae.watch("displayingBusinessHours",["displayingDates","businessHourGenerator"],function(t){this.requestBusinessHoursRender(t.businessHourGenerator)},function(){this.requestBusinessHoursUnrender()}),Ae.watch("initialEvents",["dateProfile"],function(t){return this.fetchInitialEvents(t.dateProfile)}),Ae.watch("bindingEvents",["initialEvents"],function(t){this.setEvents(t.initialEvents),this.bindEventChanges()},function(){this.unbindEventChanges(),this.unsetEvents()}),Ae.watch("displayingEvents",["displayingDates","hasEvents"],function(){this.requestEventsRender(this.get("currentEvents"))},function(){this.requestEventsUnrender()}),Ae.watch("title",["dateProfile"],function(t){return this.title=this.computeTitle(t.dateProfile)}),Ae.watch("legacyDateProps",["dateProfile"],function(t){var e=this.calendar,n=t.dateProfile;this.start=e.msToMoment(n.activeUnzonedRange.startMs,n.isRangeAllDay),this.end=e.msToMoment(n.activeUnzonedRange.endMs,n.isRangeAllDay),this.intervalStart=e.msToMoment(n.currentUnzonedRange.startMs,n.isRangeAllDay),this.intervalEnd=e.msToMoment(n.currentUnzonedRange.endMs,n.isRangeAllDay)}),Ae.mixin({usesMinMaxTime:!1,start:null,end:null,intervalStart:null,intervalEnd:null,buildPrevDateProfile:function(t){var e=this.get("dateProfile"),n=t.clone().startOf(e.currentRangeUnit).subtract(e.dateIncrement);return this.buildDateProfile(n,-1)},buildNextDateProfile:function(t){var e=this.get("dateProfile"),n=t.clone().startOf(e.currentRangeUnit).add(e.dateIncrement);return this.buildDateProfile(n,1)},buildDateProfile:function(t,n,i){var r,s,o,a,l,u,c=!t.hasTime(),h=null,d=null;return r=this.buildValidRange(),r=this.trimHiddenDays(r),i&&(t=this.calendar.msToUtcMoment(r.constrainDate(t),c)),s=this.buildCurrentRangeInfo(t,n),o=/^(year|month|week|day)$/.test(s.unit),a=this.buildRenderRange(this.trimHiddenDays(s.unzonedRange),s.unit,o),a=this.trimHiddenDays(a),l=a.clone(),this.opt("showNonCurrentDates")||(l=l.intersect(s.unzonedRange)),h=e.duration(this.opt("minTime")),d=e.duration(this.opt("maxTime")),l=this.adjustActiveRange(l,h,d),l=l.intersect(r),l&&(t=this.calendar.msToUtcMoment(l.constrainDate(t),c)),u=s.unzonedRange.intersectsWith(r),{validUnzonedRange:r,currentUnzonedRange:s.unzonedRange,currentRangeUnit:s.unit,isRangeAllDay:o,activeUnzonedRange:l,renderUnzonedRange:a,minTime:h,maxTime:d,isValid:u,date:t,dateIncrement:this.buildDateIncrement(s.duration)}},buildValidRange:function(){return this.getUnzonedRangeOption("validRange",this.calendar.getNow())||new Ue},buildCurrentRangeInfo:function(t,e){var n,i=null,r=null,s=null;return this.viewSpec.duration?(i=this.viewSpec.duration,r=this.viewSpec.durationUnit,s=this.buildRangeFromDuration(t,e,i,r)):(n=this.opt("dayCount"))?(r="day",s=this.buildRangeFromDayCount(t,e,n)):(s=this.buildCustomVisibleRange(t))?r=O(s.getStart(),s.getEnd()):(i=this.getFallbackDuration(),r=O(i),s=this.buildRangeFromDuration(t,e,i,r)),{duration:i,unit:r,unzonedRange:s}},getFallbackDuration:function(){return e.duration({days:1})},adjustActiveRange:function(t,e,n){var i=t.getStart(),r=t.getEnd();return this.usesMinMaxTime&&(e<0&&i.time(0).add(e),n>864e5&&r.time(n-864e5)),new Ue(i,r)},buildRangeFromDuration:function(t,n,i,r){var s,o,a,l=this.opt("dateAlignment"),u=t.clone();return i.as("days")<=1&&this.isHiddenDay(u)&&(u=this.skipHiddenDays(u,n),u.startOf("day")),l||(o=this.opt("dateIncrement"),o?(a=e.duration(o),l=a").prependTo(n),this.initToolbars(),this.renderHeader(),this.renderFooter(),this.renderView(this.opt("defaultView")),this.opt("handleWindowResize")&&t(window).resize(this.windowResizeProxy=ut(this.windowResize.bind(this),this.opt("windowResizeDelay")))},destroy:function(){this.view&&this.clearView(),this.toolbarsManager.proxyCall("removeElement"),this.contentEl.remove(),this.el.removeClass("fc fc-ltr fc-rtl"),this.optionsModel.unwatch("settingTheme"),this.optionsModel.unwatch("settingBusinessHourGenerator"),this.el.off(".fc"),this.windowResizeProxy&&(t(window).unbind("resize",this.windowResizeProxy),this.windowResizeProxy=null),me.unneeded()},elementVisible:function(){return this.el.is(":visible")},bindViewHandlers:function(t){var e=this;t.watch("titleForCalendar",["title"],function(n){t===e.view&&e.setToolbarsTitle(n.title)}),t.watch("dateProfileForCalendar",["dateProfile"],function(n){t===e.view&&(e.currentDate=n.dateProfile.date,e.updateToolbarButtons(n.dateProfile))})},unbindViewHandlers:function(t){t.unwatch("titleForCalendar"),t.unwatch("dateProfileForCalendar")},renderView:function(e){var n,i=this.view;this.freezeContentHeight(),i&&e&&i.type!==e&&this.clearView(),!this.view&&e&&(n=this.view=this.viewsByType[e]||(this.viewsByType[e]=this.instantiateView(e)),this.bindViewHandlers(n),n.setElement(t("
    ").appendTo(this.contentEl)),this.toolbarsManager.proxyCall("activateButton",e)),this.view&&(this.view.get("businessHourGenerator")!==this.businessHourGenerator&&this.view.set("businessHourGenerator",this.businessHourGenerator),this.view.setDate(this.currentDate)),this.thawContentHeight()},clearView:function(){var t=this.view;this.toolbarsManager.proxyCall("deactivateButton",t.type),this.unbindViewHandlers(t),t.removeElement(),t.unsetDate(),this.view=null},reinitView:function(){var t=this.view,e=t.queryScroll();this.freezeContentHeight(),this.clearView(),this.calcSize(),this.renderView(t.type),this.view.applyScroll(e),this.thawContentHeight()},getSuggestedViewHeight:function(){return null===this.suggestedViewHeight&&this.calcSize(),this.suggestedViewHeight},isHeightAuto:function(){return"auto"===this.opt("contentHeight")||"auto"===this.opt("height")},updateViewSize:function(t){var e,n=this.view;if(!this.ignoreUpdateViewSize&&n)return t&&(this.calcSize(),e=n.queryScroll()),this.ignoreUpdateViewSize++,n.updateSize(this.getSuggestedViewHeight(),this.isHeightAuto(),t),this.ignoreUpdateViewSize--,t&&n.applyScroll(e),!0},calcSize:function(){this.elementVisible()&&this._calcSize()},_calcSize:function(){var t=this.opt("contentHeight"),e=this.opt("height");this.suggestedViewHeight="number"==typeof t?t:"function"==typeof t?t():"number"==typeof e?e-this.queryToolbarsHeight():"function"==typeof e?e()-this.queryToolbarsHeight():"parent"===e?this.el.parent().height()-this.queryToolbarsHeight():Math.round(this.contentEl.width()/Math.max(this.opt("aspectRatio"),.5))},windowResize:function(t){t.target===window&&this.view&&this.view.isDatesRendered&&this.updateViewSize(!0)&&this.publiclyTrigger("windowResize",[this.view])},freezeContentHeight:function(){this.freezeContentHeightDepth++||this.forceFreezeContentHeight()},forceFreezeContentHeight:function(){this.contentEl.css({width:"100%",height:this.contentEl.height(),overflow:"hidden"})},thawContentHeight:function(){this.freezeContentHeightDepth--,this.contentEl.css({width:"",height:"",overflow:""}),this.freezeContentHeightDepth&&this.forceFreezeContentHeight()}}),Le.mixin({header:null,footer:null,toolbarsManager:null,initToolbars:function(){this.header=new bt(this,this.computeHeaderOptions()),this.footer=new bt(this,this.computeFooterOptions()),this.toolbarsManager=new yt([this.header,this.footer])},computeHeaderOptions:function(){return{extraClasses:"fc-header-toolbar",layout:this.opt("header")}},computeFooterOptions:function(){return{extraClasses:"fc-footer-toolbar",layout:this.opt("footer")}},renderHeader:function(){var t=this.header;t.setToolbarOptions(this.computeHeaderOptions()),t.render(),t.el&&this.el.prepend(t.el)},renderFooter:function(){var t=this.footer;t.setToolbarOptions(this.computeFooterOptions()),t.render(),t.el&&this.el.append(t.el)},setToolbarsTitle:function(t){this.toolbarsManager.proxyCall("updateTitle",t)},updateToolbarButtons:function(t){var e=this.getNow(),n=this.view,i=n.buildDateProfile(e),r=n.buildPrevDateProfile(this.currentDate),s=n.buildNextDateProfile(this.currentDate);this.toolbarsManager.proxyCall(i.isValid&&!t.currentUnzonedRange.containsDate(e)?"enableButton":"disableButton","today"),this.toolbarsManager.proxyCall(r.isValid?"enableButton":"disableButton","prev"),this.toolbarsManager.proxyCall(s.isValid?"enableButton":"disableButton","next")},queryToolbarsHeight:function(){return this.toolbarsManager.items.reduce(function(t,e){return t+(e.el?e.el.outerHeight(!0):0)},0)}}),Le.prototype.isEventInstanceGroupAllowed=function(t){var e,n=t.getEventDef(),i=this.eventRangesToEventFootprints(t.getAllEventRanges()),r=this.getPeerEventInstances(n),s=r.map(Pt),o=this.eventRangesToEventFootprints(s),a=n.getConstraint(),l=n.getOverlap(),u=this.opt("eventAllow");for(e=0;et.startMs)&&(null===this.startMs||null===t.endMs||this.startMs=this.startMs)&&(null===this.endMs||null!==t.endMs&&t.endMs<=this.endMs)},containsDate:function(t){var e=t.valueOf();return(null===this.startMs||e>=this.startMs)&&(null===this.endMs||e=this.endMs&&(e=this.endMs-1),e},equals:function(t){return this.startMs===t.startMs&&this.endMs===t.endMs},clone:function(){var t=new Ue(this.startMs,this.endMs);return t.isStart=this.isStart,t.isEnd=this.isEnd,t},getStart:function(){if(null!==this.startMs)return Wt.moment.utc(this.startMs).stripZone()},getEnd:function(){if(null!==this.endMs)return Wt.moment.utc(this.endMs).stripZone()},as:function(t){return e.utc(this.endMs).diff(e.utc(this.startMs),t,!0)}}),We=Wt.ComponentFootprint=dt.extend({unzonedRange:null,isAllDay:!1,constructor:function(t,e){this.unzonedRange=t,this.isAllDay=e},toLegacy:function(t){return{start:t.msToMoment(this.unzonedRange.startMs,this.isAllDay),end:t.msToMoment(this.unzonedRange.endMs,this.isAllDay)}}}),_e=dt.extend(re,{start:null,end:null,timezone:null,unzonedRange:null,requestsByUid:null,pendingCnt:0,freezeDepth:0,stuntedReleaseCnt:0,releaseCnt:0,eventDefsByUid:null,eventDefsById:null,eventInstanceGroupsById:null,constructor:function(t,e,n){this.start=t,this.end=e,this.timezone=n,this.unzonedRange=new Ue(t.clone().stripZone(),e.clone().stripZone()),this.requestsByUid={},this.eventDefsByUid={},this.eventDefsById={},this.eventInstanceGroupsById={}},isWithinRange:function(t,e){return!t.isBefore(this.start)&&!e.isAfter(this.end)},requestSources:function(t){this.freeze();for(var e=0;e
    '),s=r.find("tr"),a>0&&s.append(''),s.append(n.el.attr("colspan",l-a)),l'),this.component.bookendCells(s),r}}),mn=He.extend({dayGrid:null,rowStructs:null,constructor:function(t){He.apply(this,arguments),this.dayGrid=t},renderBgRanges:function(e){e=t.grep(e,function(t){return t.eventDef.isAllDay()}),He.prototype.renderBgRanges.call(this,e)},renderFgSegs:function(e){var n=this.rowStructs=this.renderSegRows(e);this.dayGrid.rowEls.each(function(e,i){t(i).find(".fc-content-skeleton > table").append(n[e].tbodyEl)})},unrenderFgSegs:function(){for(var t,e=this.rowStructs||[];t=e.pop();)t.tbodyEl.remove();this.rowStructs=null},renderSegRows:function(t){var e,n,i=[];for(e=this.groupSegRows(t),n=0;n"),a.append(c)),v[r][o]=c,m[r][o]=c,o++}var r,s,o,a,l,u,c,h=this.dayGrid.colCnt,d=this.buildSegLevels(n),f=Math.max(1,d.length),g=t(""),p=[],v=[],m=[];for(r=0;r"),p.push([]),v.push([]),m.push([]),s)for(l=0;l').append(u.el),u.leftCol!=u.rightCol?c.attr("colspan",u.rightCol-u.leftCol+1):m[r][o]=c;o<=u.rightCol;)v[r][o]=c,p[r][o]=u,o++;a.append(c)}i(h),this.dayGrid.bookendCells(a),g.append(a)}return{row:e,tbodyEl:g,cellMatrix:v,segMatrix:p,segLevels:d,segs:n}},buildSegLevels:function(t){var e,n,i,r=[];for(this.sortEventSegs(t),e=0;e'+et(n)+""),i=''+(et(s.title||"")||" ")+"",'
    '+(this.isRTL?i+" "+d:d+" "+i)+"
    "+(l?'
    ':"")+(u?'
    ':"")+""}}),yn=Pe.extend({renderSegs:function(e,n){var i,r=[];return i=this.eventRenderer.renderSegRows(e),this.component.rowEls.each(function(e,s){var o,a,l=t(s),u=t('
    ');n&&n.row===e?a=n.el.position().top:(o=l.find(".fc-content-skeleton tbody"),o.length||(o=l.find(".fc-content-skeleton table")),a=o.position().top),u.css("top",a).find("table").append(i[e].tbodyEl),l.append(u),r.push(u[0])}),t(r)}}),wn=Wt.DayGrid=ke.extend(Ie,Be,{eventRendererClass:mn,businessHourRendererClass:Me,helperRendererClass:yn,fillRendererClass:vn,view:null,helperRenderer:null,cellWeekNumbersVisible:!1,bottomCoordPadding:0,headContainerEl:null,rowEls:null,cellEls:null,rowCoordCache:null,colCoordCache:null,isRigid:!1,hasAllDayBusinessHours:!0,constructor:function(t){this.view=t,ke.call(this)},componentFootprintToSegs:function(t){var e,n,i=this.sliceRangeByRow(t.unzonedRange);for(e=0;e
    '+this.renderBgTrHtml(t)+'
    '+(this.getIsNumbersVisible()?""+this.renderNumberTrHtml(t)+"":"")+"
    "},getIsNumbersVisible:function(){return this.getIsDayNumbersVisible()||this.cellWeekNumbersVisible},getIsDayNumbersVisible:function(){return this.rowCnt>1},renderNumberTrHtml:function(t){return""+(this.isRTL?"":this.renderNumberIntroHtml(t))+this.renderNumberCellsHtml(t)+(this.isRTL?this.renderNumberIntroHtml(t):"")+""},renderNumberIntroHtml:function(t){return this.renderIntroHtml()},renderNumberCellsHtml:function(t){var e,n,i=[];for(e=0;e",this.cellWeekNumbersVisible&&t.day()==n&&(r+=i.buildGotoAnchorHtml({date:t,type:"week"},{class:"fc-week-number"},t.format("w"))),o&&(r+=i.buildGotoAnchorHtml(t,{class:"fc-day-number"},t.date())),r+=""):""},prepareHits:function(){this.colCoordCache.build(),this.rowCoordCache.build(),this.rowCoordCache.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},releaseHits:function(){this.colCoordCache.clear(),this.rowCoordCache.clear()},queryHit:function(t,e){if(this.colCoordCache.isLeftInBounds(t)&&this.rowCoordCache.isTopInBounds(e)){var n=this.colCoordCache.getHorizontalIndex(t),i=this.rowCoordCache.getVerticalIndex(e);if(null!=i&&null!=n)return this.getCellHit(i,n)}},getHitFootprint:function(t){var e=this.getCellRange(t.row,t.col);return new We(new Ue(e.start,e.end),!0)},getHitEl:function(t){return this.getCellEl(t.row,t.col)},getCellHit:function(t,e){return{row:t,col:e,component:this,left:this.colCoordCache.getLeftOffset(e),right:this.colCoordCache.getRightOffset(e),top:this.rowCoordCache.getTopOffset(t),bottom:this.rowCoordCache.getBottomOffset(t)}},getCellEl:function(t,e){return this.cellEls.eq(t*this.colCnt+e)},unrenderEvents:function(){this.removeSegPopover(),ke.prototype.unrenderEvents.apply(this,arguments)},getOwnEventSegs:function(){return ke.prototype.getOwnEventSegs.apply(this,arguments).concat(this.popoverSegs||[])},renderDrag:function(t,e,n){var i;for(i=0;i td > :first-child").each(n),r.position().top+s>a)return i;return!1},limitRow:function(e,n){function i(i){for(;E").append(y),d.append(m),b.push(m[0])),E++}var r,s,o,a,l,u,c,h,d,f,g,p,v,m,y,w=this,D=this.eventRenderer.rowStructs[e],b=[],E=0;if(n&&n').attr("rowspan",f),u=h[p],y=this.renderMoreLink(e,l.leftCol+p,[l].concat(u)),m=t("
    ").append(y),v.append(m),g.push(v[0]),b.push(v[0]);d.addClass("fc-limited").after(t(g)),o.push(d[0])}}i(this.colCnt),D.moreEls=t(b),D.limitedEls=t(o)}},unlimitRow:function(t){var e=this.eventRenderer.rowStructs[t];e.moreEls&&(e.moreEls.remove(),e.moreEls=null),e.limitedEls&&(e.limitedEls.removeClass("fc-limited"),e.limitedEls=null)},renderMoreLink:function(e,n,i){var r=this,s=this.view;return t('').text(this.getMoreLinkText(i.length)).on("click",function(o){var a=r.opt("eventLimitClick"),l=r.getCellDate(e,n),u=t(this),c=r.getCellEl(e,n),h=r.getCellSegs(e,n),d=r.resliceDaySegs(h,l),f=r.resliceDaySegs(i,l);"function"==typeof a&&(a=r.publiclyTrigger("eventLimitClick",{context:s,args:[{date:l.clone(),dayEl:c,moreEl:u,segs:d,hiddenSegs:f},o,s]})),"popover"===a?r.showSegPopover(e,n,u,d):"string"==typeof a&&s.calendar.zoomTo(l,a)})},showSegPopover:function(t,e,n,i){var r,s,o=this,a=this.view,l=n.parent();r=1==this.rowCnt?a.el:this.rowEls.eq(t),s={className:"fc-more-popover "+a.calendar.theme.getClass("popover"),content:this.renderSegPopoverContent(t,e,i),parentEl:a.el,top:r.offset().top,autoHide:!0,viewportConstrain:this.opt("popoverViewportConstrain"),hide:function(){o.popoverSegs&&o.triggerBeforeEventSegsDestroyed(o.popoverSegs),o.segPopover.removeElement(),o.segPopover=null,o.popoverSegs=null}},this.isRTL?s.right=l.offset().left+l.outerWidth()+1:s.left=l.offset().left-1,this.segPopover=new fe(s),this.segPopover.show(),this.bindAllSegHandlersToEl(this.segPopover.el),this.triggerAfterEventSegsRendered(i)},renderSegPopoverContent:function(e,n,i){var r,s=this.view,o=s.calendar.theme,a=this.getCellDate(e,n).format(this.opt("dayPopoverFormat")),l=t('
    '+et(a)+'
    '),u=l.find(".fc-event-container");for(i=this.eventRenderer.renderFgSegEls(i,!0),this.popoverSegs=i,r=0;r').appendTo(e),this.el.find(".fc-body > tr > td").append(e),this.dayGrid.headContainerEl=this.el.find(".fc-head-container"),this.dayGrid.setElement(n)},unrenderSkeleton:function(){this.dayGrid.removeElement(),this.scroller.destroy()},renderSkeletonHtml:function(){var t=this.calendar.theme;return''+(this.opt("columnHeader")?'':"")+'
     
    '},weekNumberStyleAttr:function(){return null!==this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},hasRigidRows:function(){var t=this.opt("eventLimit");return t&&"number"!=typeof t},updateSize:function(t,e,n){var s,o,a=this.opt("eventLimit"),l=this.dayGrid.headContainerEl.find(".fc-row");if(!this.dayGrid.rowEls)return void(e||(s=this.computeScrollerHeight(t),this.scroller.setHeight(s)));Ae.prototype.updateSize.apply(this,arguments),this.dayGrid.colWeekNumbersVisible&&(this.weekNumberWidth=u(this.el.find(".fc-week-number"))),this.scroller.clear(),r(l),this.dayGrid.removeSegPopover(),a&&"number"==typeof a&&this.dayGrid.limitRows(a),s=this.computeScrollerHeight(t),this.setGridHeight(s,e),a&&"number"!=typeof a&&this.dayGrid.limitRows(a),e||(this.scroller.setHeight(s),o=this.scroller.getScrollbarWidths(),(o.left||o.right)&&(i(l,o),s=this.computeScrollerHeight(t),this.scroller.setHeight(s)),this.scroller.lockOverflow(o))},computeScrollerHeight:function(t){return t-c(this.el,this.scroller.el)},setGridHeight:function(t,e){e?l(this.dayGrid.rowEls):a(this.dayGrid.rowEls,t,!0)},computeInitialDateScroll:function(){return{top:0}},queryDateScroll:function(){return{top:this.scroller.getScrollTop()}},applyDateScroll:function(t){void 0!==t.top&&this.scroller.setScrollTop(t.top)}}),bn={colWeekNumbersVisible:!1,renderHeadIntroHtml:function(){var t=this.view;return this.colWeekNumbersVisible?'"+et(this.opt("weekNumberTitle"))+"":""},renderNumberIntroHtml:function(t){var e=this.view,n=this.getCellDate(t,0);return this.colWeekNumbersVisible?'"+e.buildGotoAnchorHtml({date:n,type:"week",forceOff:1===this.colCnt},n.format("w"))+"":""},renderBgIntroHtml:function(){var t=this.view;return this.colWeekNumbersVisible?'":""},renderIntroHtml:function(){var t=this.view +;return this.colWeekNumbersVisible?'":""},getIsNumbersVisible:function(){return wn.prototype.getIsNumbersVisible.apply(this,arguments)||this.colWeekNumbersVisible}},En=Wt.MonthView=Dn.extend({buildRenderRange:function(t,e,n){var i,r=Dn.prototype.buildRenderRange.apply(this,arguments),s=this.calendar.msToUtcMoment(r.startMs,n),o=this.calendar.msToUtcMoment(r.endMs,n);return this.isFixedWeeks()&&(i=Math.ceil(o.diff(s,"weeks",!0)),o.add(6-i,"weeks")),new Ue(s,o)},setGridHeight:function(t,e){e&&(t*=this.rowCnt/6),a(this.dayGrid.rowEls,t,!e)},isFixedWeeks:function(){return this.opt("fixedWeekCount")},isDateInOtherMonth:function(t,n){return t.month()!==e.utc(n.currentUnzonedRange.startMs).month()}});_t.basic={class:Dn},_t.basicDay={type:"basic",duration:{days:1}},_t.basicWeek={type:"basic",duration:{weeks:1}},_t.month={class:En,duration:{months:1},defaults:{fixedWeekCount:!0}};var Sn=xe.extend({attachSegEls:function(t,e){var n,i=this.component;return"bgEvent"===t?n=i.bgContainerEls:"businessHours"===t?n=i.businessContainerEls:"highlight"===t&&(n=i.highlightContainerEls),i.updateSegVerticals(e),i.attachSegsByCol(i.groupSegsByCol(e),n),e.map(function(t){return t.el[0]})}}),Cn=He.extend({timeGrid:null,constructor:function(t){He.apply(this,arguments),this.timeGrid=t},renderFgSegs:function(t){this.renderFgSegsIntoContainers(t,this.timeGrid.fgContainerEls)},renderFgSegsIntoContainers:function(t,e){var n,i;for(n=this.timeGrid.groupSegsByCol(t),i=0;i
    '+(n?'
    '+et(n)+"
    ":"")+(u.title?'
    '+et(u.title)+"
    ":"")+'
    '+(d?'
    ':"")+""},updateFgSegCoords:function(t){this.timeGrid.computeSegVerticals(t),this.computeFgSegHorizontals(t),this.timeGrid.assignSegVerticals(t),this.assignFgSegHorizontals(t)},computeFgSegHorizontals:function(t){var e,n,i;if(this.sortEventSegs(t),e=Lt(t),Ot(e),n=e[0]){for(i=0;i=0;n--)if(i=e.duration(Pn[n]),r=U(i,t),at(r)&&r>1)return i;return e.duration(t)},renderDates:function(t){this.dateProfile=t,this.updateDayTable(),this.renderSlats(),this.renderColumns()},unrenderDates:function(){this.unrenderColumns()},renderSkeleton:function(){var t=this.view.calendar.theme;this.el.html('
    '),this.bottomRuleEl=this.el.find("hr")},renderSlats:function(){var t=this.view.calendar.theme;this.slatContainerEl=this.el.find("> .fc-slats").html(''+this.renderSlatRowHtml()+"
    "),this.slatEls=this.slatContainerEl.find("tr"),this.slatCoordCache=new ge({els:this.slatEls,isVertical:!0})},renderSlatRowHtml:function(){for(var t,n,i,r=this.view,s=r.calendar,o=s.theme,a=this.isRTL,l=this.dateProfile,u="",c=e.duration(+l.minTime),h=e.duration(0);c"+(n?""+et(t.format(this.labelFormat))+"":"")+"",u+='"+(a?"":i)+''+(a?i:"")+"",c.add(this.slotDuration),h.add(this.slotDuration);return u},renderColumns:function(){var t=this.dateProfile,e=this.view.calendar.theme;this.dayRanges=this.dayDates.map(function(e){return new Ue(e.clone().add(t.minTime),e.clone().add(t.maxTime))}),this.headContainerEl&&this.headContainerEl.html(this.renderHeadHtml()),this.el.find("> .fc-bg").html(''+this.renderBgTrHtml(0)+"
    "),this.colEls=this.el.find(".fc-day, .fc-disabled-day"),this.colCoordCache=new ge({els:this.colEls,isHorizontal:!0}),this.renderContentSkeleton()},unrenderColumns:function(){this.unrenderContentSkeleton()},renderContentSkeleton:function(){var e,n,i="";for(e=0;e
    ';n=this.contentSkeletonEl=t('
    '+i+"
    "),this.colContainerEls=n.find(".fc-content-col"),this.helperContainerEls=n.find(".fc-helper-container"),this.fgContainerEls=n.find(".fc-event-container:not(.fc-helper-container)"),this.bgContainerEls=n.find(".fc-bgevent-container"),this.highlightContainerEls=n.find(".fc-highlight-container"),this.businessContainerEls=n.find(".fc-business-container"),this.bookendCells(n.find("tr")),this.el.append(n)},unrenderContentSkeleton:function(){this.contentSkeletonEl.remove(),this.contentSkeletonEl=null,this.colContainerEls=null,this.helperContainerEls=null,this.fgContainerEls=null,this.bgContainerEls=null,this.highlightContainerEls=null,this.businessContainerEls=null},groupSegsByCol:function(t){var e,n=[];for(e=0;e
    ').css("top",r).appendTo(this.colContainerEls.eq(i[n].col))[0]);i.length>0&&s.push(t('
    ').css("top",r).appendTo(this.el.find(".fc-content-skeleton"))[0]),this.nowIndicatorEls=t(s)},unrenderNowIndicator:function(){this.nowIndicatorEls&&(this.nowIndicatorEls.remove(),this.nowIndicatorEls=null)},updateSize:function(t,e,n){ke.prototype.updateSize.apply(this,arguments),this.slatCoordCache.build(),n&&this.updateSegVerticals([].concat(this.eventRenderer.getSegs(),this.businessSegs||[]))},getTotalSlatHeight:function(){return this.slatContainerEl.outerHeight()},computeDateTop:function(t,n){return this.computeTimeTop(e.duration(t-n.clone().stripTime()))},computeTimeTop:function(t){var e,n,i=this.slatEls.length,r=this.dateProfile,s=(t-r.minTime)/this.slotDuration;return s=Math.max(0,s),s=Math.min(i,s),e=Math.floor(s),e=Math.min(e,i-1),n=s-e,this.slatCoordCache.getTopPosition(e)+this.slatCoordCache.getHeight(e)*n},updateSegVerticals:function(t){this.computeSegVerticals(t),this.assignSegVerticals(t)},computeSegVerticals:function(t){var e,n,i,r=this.opt("agendaEventMinHeight");for(e=0;e').appendTo(e),this.el.find(".fc-body > tr > td").append(e),this.timeGrid.headContainerEl=this.el.find(".fc-head-container"),this.timeGrid.setElement(n),this.dayGrid&&(this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight())},unrenderSkeleton:function(){this.timeGrid.removeElement(),this.dayGrid&&this.dayGrid.removeElement(),this.scroller.destroy()},renderSkeletonHtml:function(){var t=this.calendar.theme;return''+(this.opt("columnHeader")?'':"")+'
     
    '+(this.dayGrid?'

    ':"")+"
    "},axisStyleAttr:function(){return null!==this.axisWidth?'style="width:'+this.axisWidth+'px"':""},getNowIndicatorUnit:function(){return this.timeGrid.getNowIndicatorUnit()},updateSize:function(t,e,n){var s,o,a;if(Ae.prototype.updateSize.apply(this,arguments),this.axisWidth=u(this.el.find(".fc-axis")),!this.timeGrid.colEls)return void(e||(o=this.computeScrollerHeight(t),this.scroller.setHeight(o)));var l=this.el.find(".fc-row:not(.fc-scroller *)");this.timeGrid.bottomRuleEl.hide(),this.scroller.clear(),r(l),this.dayGrid&&(this.dayGrid.removeSegPopover(),s=this.opt("eventLimit"),s&&"number"!=typeof s&&(s=xn),s&&this.dayGrid.limitRows(s)),e||(o=this.computeScrollerHeight(t),this.scroller.setHeight(o),a=this.scroller.getScrollbarWidths(),(a.left||a.right)&&(i(l,a),o=this.computeScrollerHeight(t),this.scroller.setHeight(o)),this.scroller.lockOverflow(a),this.timeGrid.getTotalSlatHeight()"+e.buildGotoAnchorHtml({date:i,type:"week",forceOff:this.colCnt>1},et(t))+""):'"},renderBgIntroHtml:function(){var t=this.view;return'"},renderIntroHtml:function(){return'"}},Mn={renderBgIntroHtml:function(){var t=this.view;return'"+t.getAllDayHtml()+""},renderIntroHtml:function(){return'"}},xn=5,Pn=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];_t.agenda={class:In,defaults:{allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0}},_t.agendaDay={type:"agenda",duration:{days:1}},_t.agendaWeek={type:"agenda",duration:{weeks:1}};var zn=Wt.ListView=Ae.extend({segSelector:".fc-list-item",scroller:null,contentEl:null,dayDates:null,dayRanges:null,constructor:function(){Ae.apply(this,arguments),this.scroller=new we({overflowX:"hidden",overflowY:"auto"})},renderSkeleton:function(){this.el.addClass("fc-list-view "+this.calendar.theme.getClass("listView")),this.scroller.render(),this.scroller.el.appendTo(this.el),this.contentEl=this.scroller.scrollEl},unrenderSkeleton:function(){this.scroller.destroy()},updateSize:function(t,e,n){this.scroller.setHeight(this.computeScrollerHeight(t))},computeScrollerHeight:function(t){return t-c(this.el,this.scroller.el)},renderDates:function(t){for(var e=this.calendar,n=e.msToUtcMoment(t.renderUnzonedRange.startMs,!0),i=e.msToUtcMoment(t.renderUnzonedRange.endMs,!0),r=[],s=[];n'+(this.displayEventTime?''+(e||"")+"":"")+'"+et(o.title||"")+""},computeEventTimeFormat:function(){return this.opt("mediumTimeFormat")}}),eventPointingClass:Te.extend({handleClick:function(e,n){var i;Te.prototype.handleClick.apply(this,arguments),t(n.target).closest("a[href]").length||(i=e.footprint.eventDef.url)&&!n.isDefaultPrevented()&&(window.location.href=i)}}),renderEmptyMessage:function(){this.contentEl.html('
    '+et(this.opt("noEventsMessage"))+"
    ")},renderSegList:function(e){var n,i,r,s=this.groupSegsByDay(e),o=t('
    '),a=o.find("tbody");for(n=0;n'+(e?this.buildGotoAnchorHtml(t,{class:"fc-list-heading-main"},et(t.format(e))):"")+(n?this.buildGotoAnchorHtml(t,{class:"fc-list-heading-alt"},et(t.format(n))):"")+""}});return _t.list={class:zn,buttonTextKey:"list",defaults:{buttonText:"list",listDayFormat:"LL",noEventsMessage:"No events to display"}},_t.listDay={type:"list",duration:{days:1},defaults:{listDayFormat:"dddd"}},_t.listWeek={type:"list",duration:{weeks:1},defaults:{listDayFormat:"dddd",listDayAltFormat:"LL"}},_t.listMonth={type:"list",duration:{month:1},defaults:{listDayAltFormat:"dddd"}},_t.listYear={type:"list",duration:{year:1},defaults:{listDayAltFormat:"dddd"}},Wt}); \ No newline at end of file diff --git a/js/fullcalendar/sched/lib/fullcalendar.print.min.css b/js/fullcalendar/sched/lib/fullcalendar.print.min.css new file mode 100644 index 0000000..7640787 --- /dev/null +++ b/js/fullcalendar/sched/lib/fullcalendar.print.min.css @@ -0,0 +1,5 @@ +/*! + * FullCalendar v3.6.2 Print Stylesheet + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-event .fc-resizer,.fc-helper-container,.fc-helper-skeleton,.fc-highlight-container,.fc-highlight-skeleton{display:none}.fc tbody .fc-row,.fc-time-grid{min-height:0!important}.fc-time-grid .fc-event.fc-not-end:after,.fc-time-grid .fc-event.fc-not-start:before{content:"..."}.fc{max-width:100%!important}.fc-event{background:#fff!important;color:#000!important;page-break-inside:avoid}.fc hr,.fc tbody,.fc td,.fc th,.fc thead,.fc-row{border-color:#ccc!important;background:#fff!important}.fc tbody .fc-row{height:auto!important}.fc tbody .fc-row .fc-content-skeleton{position:static;padding-bottom:0!important}.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td{padding-bottom:1em}.fc tbody .fc-row .fc-content-skeleton table{height:1em}.fc-more,.fc-more-cell{display:none!important}.fc tr.fc-limited{display:table-row!important}.fc td.fc-limited{display:table-cell!important}.fc-agenda-view .fc-axis,.fc-popover{display:none}.fc-slats,.fc-time-grid hr{display:none!important}.fc button,.fc-button-group,.fc-time-grid .fc-event .fc-time span{display:none}.fc-time-grid .fc-content-skeleton{position:static}.fc-time-grid .fc-content-skeleton table{height:4em}.fc-time-grid .fc-event-container{margin:0!important}.fc-time-grid .fc-event{position:static!important;margin:3px 2px!important}.fc-time-grid .fc-event.fc-not-end{border-bottom-width:1px!important}.fc-time-grid .fc-event.fc-not-start{border-top-width:1px!important}.fc-time-grid .fc-event .fc-time{white-space:normal!important}.fc-time-grid .fc-event .fc-time:after{content:attr(data-full)}.fc-day-grid-container,.fc-scroller,.fc-time-grid-container{overflow:visible!important;height:auto!important}.fc-row{border:0!important;margin:0!important} \ No newline at end of file diff --git a/js/fullcalendar/sched/lib/gcal.min.js b/js/fullcalendar/sched/lib/gcal.min.js new file mode 100644 index 0000000..6b19000 --- /dev/null +++ b/js/fullcalendar/sched/lib/gcal.min.js @@ -0,0 +1,6 @@ +/*! + * FullCalendar v3.6.2 Google Calendar Plugin + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */ +!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){function a(e){var a;return/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(e)?e:(a=/^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(e))||(a=/^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(e))?decodeURIComponent(a[1]):void 0}function r(e,a){return e.replace(/(\?.*?)?(#|$)/,function(e,r,t){return(r?r+"&":"?")+a+t})}var t=e.fullCalendar,n=t.Promise,o=t.EventSource,l=t.JsonFeedEventSource,i=t.EventSourceParser,s=t.applyAll,c=o.extend({googleCalendarApiKey:null,googleCalendarId:null,googleCalendarError:null,ajaxSettings:null,constructor:function(){o.apply(this,arguments),this.ajaxSettings={}},fetch:function(a,r,t){var o=this,i=this.buildUrl(),c=this.buildRequestParams(a,r,t),d=this.ajaxSettings,u=d.success;return c?(this.calendar.pushLoading(),n.construct(function(a,r){e.ajax(e.extend({},l.AJAX_DEFAULTS,d,{url:i,data:c,success:function(t){var n,l;o.calendar.popLoading(),t.error?(o.reportError("Google Calendar API: "+t.error.message,t.error.errors),r()):t.items&&(n=o.gcalItemsToRawEventDefs(t.items,c.timeZone),l=s(u,this,[n].concat(Array.prototype.slice.call(arguments,1))),e.isArray(l)&&(n=l),a(o.parseEventDefs(n)))}}))})):n.reject()},gcalItemsToRawEventDefs:function(e,a){var r=this;return e.map(function(e){return r.gcalItemToRawEventDef(e,a)})},gcalItemToRawEventDef:function(e,a){var t=e.htmlLink||null;return t&&a&&(t=r(t,"ctz="+a)),{id:e.id,title:e.summary,start:e.start.dateTime||e.start.date,end:e.end.dateTime||e.end.date,url:t,location:e.location,description:e.description}},buildUrl:function(){return c.API_BASE+"/"+encodeURIComponent(this.googleCalendarId)+"/events?callback=?"},buildRequestParams:function(a,r,t){var n,o=this.googleCalendarApiKey||this.calendar.opt("googleCalendarApiKey");return o?(a.hasZone()||(a=a.clone().utc().add(-1,"day")),r.hasZone()||(r=r.clone().utc().add(1,"day")),n=e.extend(this.ajaxSettings.data||{},{key:o,timeMin:a.format(),timeMax:r.format(),singleEvents:!0,maxResults:9999}),t&&"local"!==t&&(n.timeZone=t.replace(" ","_")),n):(this.reportError("Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/"),null)},reportError:function(e,a){var r=this.calendar,n=r.opt("googleCalendarError"),o=a||[{message:e}];this.googleCalendarError&&this.googleCalendarError.apply(r,o),n&&n.apply(r,o),t.warn.apply(null,[e].concat(a||[]))},getPrimitive:function(){return this.googleCalendarId},applyManualStandardProps:function(e){var r=o.prototype.applyManualStandardProps.apply(this,arguments),t=e.googleCalendarId;return null==t&&e.url&&(t=a(e.url)),null!=t&&(this.googleCalendarId=t,r)},applyMiscProps:function(a){e.extend(this.ajaxSettings,a)}});c.API_BASE="https://www.googleapis.com/calendar/v3/calendars",c.defineStandardProps({url:!1,googleCalendarId:!1,googleCalendarApiKey:!0,googleCalendarError:!0}),c.parse=function(e,a){var r;return"object"==typeof e?r=e:"string"==typeof e&&(r={url:e}),!!r&&o.parse.call(this,r,a)},i.registerClass(c),t.GcalEventSource=c}); \ No newline at end of file diff --git a/js/fullcalendar/sched/lib/jquery-ui.min.js b/js/fullcalendar/sched/lib/jquery-ui.min.js new file mode 100644 index 0000000..25398a1 --- /dev/null +++ b/js/fullcalendar/sched/lib/jquery-ui.min.js @@ -0,0 +1,13 @@ +/*! jQuery UI - v1.12.1 - 2016-09-14 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={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:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("
    "))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
    "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("

    ")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("

    ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n) +}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("
    ").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("
    ").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n; +this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
      ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("
      ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("
      ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
      ").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
      ").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"
      ",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t(""),this.iconSpace=t(" "),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"").addClass(this._triggerClass).html(o?t("").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t(""),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s)) +}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?""+i+"":q?"":""+i+"",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?""+n+"":q?"":""+n+"",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"",l=j?"
      "+(Y?h:"")+(this._isInRange(t,r)?"":"")+(Y?"":h)+"
      ":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="
      "}for(T+="
      "+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"
      "+"",P=u?"":"",w=0;7>w;w++)M=(w+c)%7,P+="";for(T+=P+"",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="",W=u?"":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+""}Z++,Z>11&&(Z=0,te++),T+="
      "+this._get(t,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+""+p[M]+"
      "+this._get(t,"calculateWeek")(A)+""+(F&&!_?" ":L?""+A.getDate()+"":""+A.getDate()+"")+"
      "+(X?"
      "+(U[0]>0&&C===U[1]-1?"
      ":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="
      ",y="";if(o||!m)y+=""+a[e]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+=""}if(v||(b+=y+(!o&&m&&_?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!_)b+=""+i+"";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":" ")+y),b+="
      "},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("
      ").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())} +},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
      ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
      "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
      "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog +},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("
      ").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("
      "),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("").button({label:t("").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html(" ")},_createButtonPane:function(){this.uiDialogButtonPane=t("
      "),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("
      ").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("
      ").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("
      ").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("
      ").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("
      ").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("
      "),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("").parent().append("")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("
      ").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("
      ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("
      ").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("
      ").attr("role","tooltip"),s=t("
      ").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}); \ No newline at end of file diff --git a/js/fullcalendar/sched/lib/jquery.min.js b/js/fullcalendar/sched/lib/jquery.min.js new file mode 100644 index 0000000..644d35e --- /dev/null +++ b/js/fullcalendar/sched/lib/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), +a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
      "],col:[2,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), +null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("