PageSourceSearch

https://www.adph.org.uk/wp-content/plugins/events-manager/includes/js/events-manager.js?ver=7.2.3.1

js adph.org.uk collected 2026-09-24 09:32:57 UTC 432,458 bytes, 4,712 lines download raw bytes

1jQuery(document).ready( function($){
2
3	// backcompat changes 6.x to 5.x
4	if( $('#recurrence-frequency').length > 0  ){
5		$('#recurrence-frequency').addClass('em-recurrence-frequency');
6		$('.event-form-when .interval-desc').each( function(){
7			this.classList.add(this.id);
8		});
9		$('.event-form-when .alternate-selector').each( function(){
10			this.classList.add('em-' + this.id);
11		});
12		$('#recurrence-interval').addClass('em-recurrence-interval');
13	}
14	$('#em-wrapper').addClass('em');
15
16	// Add keyboard accessibility for em-icon button spans
17	$(document).on('keydown', 'span.em-icon[role="button"]', function(e){
18		if( e.key === 'Enter' || e.keyCode === 13 ){
19			e.preventDefault();
20			$(this).trigger('click');
21		}
22	});
23
24	/* Time Entry - legacy @deprecated */
25	$('#start-time').each(function(i, el){
26		$(el).addClass('em-time-input em-time-start').next('#end-time').addClass('em-time-input em-time-end').parent().addClass('em-time-range');
27	});
28
29	/*
30	 * ADMIN AREA AND PUBLIC FORMS (Still polishing this section up, note that form ids and classes may change accordingly)
31	 */
32	//Events List
33	//Approve/Reject Links
34	$('.events-table').on('click', '.em-event-delete', function(){
35		if( !confirm("Are you sure you want to delete?") ){ return false; }
36		window.location.href = this.href;
37	});
38	//Forms
39	$('#event-form #event-image-delete, #location-form #location-image-delete').on('click', function(){
40		var el = $(this);
41		if( el.is(':checked') ){
42			el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').hide();
43		}else{
44			el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').show();
45		}
46	});
47
48	//Manual Booking
49	$(document).on('click', 'a.em-booking-button', function(e){
50		e.preventDefault();
51		var button = $(this);
52		if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){
53			button.text(EM.bb_booking);
54			var button_data = button.attr('id').split('_');
55			$.ajax({
56				url: EM.ajaxurl,
57				dataType: 'jsonp',
58				data: {
59					event_id : button_data[1],
60					_wpnonce : button_data[2],
61					action : 'booking_add_one'
62				},
63				success : function(response, statusText, xhr, $form) {
64					if(response.result){
65						button.text(EM.bb_booked);
66						button.addClass('disabled');
67					}else{
68						button.text(EM.bb_error);
69					}
70					if(response.message != '') alert(response.message);
71					$(document).triggerHandler('em_booking_button_response', [response, button]);
72				},
73				error : function(){ button.text(EM.bb_error); }
74			});
75		}
76		return false;
77	});
78	$(document).on('click', 'a.em-cancel-button', function(e){
79		e.preventDefault();
80		var button = $(this);
81		if( button.text() != EM.bb_cancelled && button.text() != EM.bb_canceling){
82			button.text(EM.bb_canceling);
83			// old method is splitting id with _ and second/third items are id and nonce, otherwise supply it all via data attributes
84			var button_data = button.attr('id').split('_');
85			let button_ajax = {};
86			if( button_data.length < 3 || !('booking_id' in button[0].dataset) ){
87				// legacy support
88				button_ajax = {
89					booking_id : button_data[1],
90					_wpnonce : button_data[2],
91					action : 'booking_cancel',
92				};
93			}
94			let ajax_data = Object.assign( button_ajax, button[0].dataset);
95			$.ajax({
96				url: EM.ajaxurl,
97				dataType: 'jsonp',
98				data: ajax_data,
99				success : function(response, statusText, xhr, $form) {
100					if(response.result){
101						button.text(EM.bb_cancelled);
102						button.addClass('disabled');
103					}else{
104						button.text(EM.bb_cancel_error);
105					}
106				},
107				error : function(){ button.text(EM.bb_cancel_error); }
108			});
109		}
110		return false;
111	});
112	$(document).on('click', 'a.em-booking-button-action', function(e){
113		e.preventDefault();
114		var button = $(this);
115		var button_data = {
116			_wpnonce : button.attr('data-nonce'),
117			action : button.attr('data-action'),
118		}
119		if( button.attr('data-event-id') ) button_data.event_id =  button.attr('data-event-id');
120		if( button.attr('data-booking-id') ) button_data.booking_id =  button.attr('data-booking-id');
121		if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){
122			if( button.attr('data-loading') ){
123				button.text(button.attr('data-loading'));
124			}else{
125				button.text(EM.bb_booking);
126			}
127			$.ajax({
128				url: EM.ajaxurl,
129				dataType: 'jsonp',
130				data: button_data,
131				success : function(response, statusText, xhr, $form) {
132					if(response.result){
133						if( button.attr('data-success') ){
134							button.text(button.attr('data-success'));
135						}else{
136							button.text(EM.bb_booked);
137						}
138						button.addClass('disabled');
139					}else{
140						if( button.attr('data-error') ){
141							button.text(button.attr('data-error'));
142						}else{
143							button.text(EM.bb_error);
144						}
145					}
146					if(response.message != '') alert(response.message);
147					$(document).triggerHandler('em_booking_button_action_response', [response, button]);
148				},
149				error : function(){
150					if( button.attr('data-error') ){
151						button.text(button.attr('data-error'));
152					}else{
153						button.text(EM.bb_error);
154					}
155				}
156			});
157		}
158		return false;
159	});
160
161	//Datepicker - legacy
162	var load_ui_css; //load jquery ui css?
163	if( $('.em-date-single, .em-date-range, #em-date-start').length > 0 ){
164		load_ui_css = true;
165	}
166	if( load_ui_css ) em_load_jquery_css();
167
168	//previously in em-admin.php
169	$('#em-wrapper input.select-all').on('change', function(){
170		if($(this).is(':checked')){
171			$('input.row-selector').prop('checked', true);
172			$('input.select-all').prop('checked', true);
173		}else{
174			$('input.row-selector').prop('checked', false);
175			$('input.select-all').prop('checked', false);
176		}
177	});
178
179	/* Load any maps */
180	if( $('.em-location-map').length > 0 || $('.em-locations-map').length > 0 || $('#em-map').length > 0 || $('.em-search-geo').length > 0 ){
181		em_maps_load();
182	}
183
184	/* Location Type Selection */
185	$('.em-location-types .em-location-types-select').on('change', function(){
186		let el = $(this);
187		if( el.val() == 0 ){
188			$('.em-location-type').hide();
189		}else{
190			let location_type = el.find('option:selected').data('display-class');
191			$('.em-location-type').hide();
192			$('.em-location-type.'+location_type).show();
193			if( location_type != 'em-location-type-place' ){
194				jQuery('#em-location-reset a').trigger('click');
195			}
196		}
197		if( el.data('active') !== '' && el.val() !== el.data('active') ){
198			$('.em-location-type-delete-active-alert').hide();
199			$('.em-location-type-delete-active-alert').show();
200		}else{
201			$('.em-location-type-delete-active-alert').hide();
202		}
203	}).trigger('change');
204
205	//Finally, add autocomplete here
206	if( jQuery( 'div.em-location-data [name="location_name"]' ).length > 0 ){
207		$('div.em-location-data [name="location_name"]').em_selectize({
208			plugins: ["restore_on_backspace"],
209			valueField: "id",
210			labelField: "label",
211			searchField: "label",
212			create:true,
213			createOnBlur: true,
214			maxItems:1,
215			persist: false,
216			addPrecedence : true,
217			selectOnTab : true,
218			diacritics : true,
219			render: {
220				item: function (item, escape) {
221					return "<div>" + escape(item.label) + "</div>";
222				},
223				option: function (item, escape) {
224					let meta = '';
225					if( typeof(item.address) !== 'undefined' ) {
226						if (item.address !== '' && item.town !== '') {
227							meta = escape(item.address) + ', ' + escape(item.town);
228						} else if (item.address !== '') {
229							meta = escape(item.address);
230						} else if (item.town !== '') {
231							meta = escape(item.town);
232						}
233					}
234					return  '<div class="em-locations-autocomplete-item">' +
235						'<div class="em-locations-autocomplete-label">' + escape(item.label) + '</div>' +
236						'<div style="font-size:11px; text-decoration:italic;">' + meta + '</div>' +
237						'</div>';
238
239				},
240			},
241			load: function (query, callback) {
242				if (!query.length) return callback();
243				$.ajax({
244					url: EM.locationajaxurl,
245					data: {
246						q : query,
247						method : 'selectize'
248					},
249					dataType : 'json',
250					type: "POST",
251					error: function () {
252						callback();
253					},
254					success: function ( data ) {
255						callback( data );
256					},
257				});
258			},
259			onItemAdd : function (value, data) {
260				this.clearCache();
261				var option = this.options[value];
262				if( value === option.label ){
263					jQuery('input#location-address').focus();
264					return;
265				}
266				jQuery("input#location-name" ).val(option.value);
267				jQuery('input#location-address').val(option.address);
268				jQuery('input#location-town').val(option.town);
269				jQuery('input#location-state').val(option.state);
270				jQuery('input#location-region').val(option.region);
271				jQuery('input#location-postcode').val(option.postcode);
272				jQuery('input#location-latitude').val(option.latitude);
273				jQuery('input#location-longitude').val(option.longitude);
274				if( typeof(option.country) === 'undefined' || option.country === '' ){
275					jQuery('select#location-country option:selected').removeAttr('selected');
276				}else{
277					jQuery('select#location-country option[value="'+option.country+'"]').attr('selected', 'selected');
278				}
279				jQuery("input#location-id" ).val(option.id).trigger('change');
280				jQuery('div.em-location-data input, div.em-location-data select').prop('readonly', true).css('opacity', '0.5');
281				jQuery('#em-location-reset').show();
282				jQuery('#em-location-search-tip').hide();
283				// selectize stuff
284				this.disable();
285				this.$control.blur();
286				jQuery('div.em-location-data [class^="em-selectize"]').each( function(){
287					if( 'selectize' in this ) {
288						this.selectize.disable();
289					}
290				})
291				// trigger hook
292				jQuery(document).triggerHandler('em_locations_autocomplete_selected', [event, option]);
293			}
294		});
295		jQuery('#em-location-reset a').on('click', function(){
296			jQuery('div.em-location-data input, div.em-location-data select').each( function(){
297				this.style.removeProperty('opacity')
298				this.readOnly = false;
299				if( this.type == 'text' ) this.value = '';
300			});
301			jQuery('div.em-location-data option:selected').removeAttr('selected');
302			jQuery('input#location-id').val('');
303			jQuery('#em-location-reset').hide();
304			jQuery('#em-location-search-tip').show();
305			jQuery('#em-map').hide();
306			jQuery('#em-map-404').show();
307			if(typeof(marker) !== 'undefined'){
308				marker.setPosition(new google.maps.LatLng(0, 0));
309				infoWindow.close();
310				marker.setDraggable(true);
311			}
312			// clear selectize autocompleter values, re-enable any selectize ddms
313			let $selectize = $("div.em-location-data input#location-name")[0].selectize;
314			$selectize.enable();
315			$selectize.clear(true);
316			$selectize.clearOptions();
317			jQuery('div.em-location-data select.em-selectize').each( function(){
318				if( 'selectize' in this ){
319					this.selectize.enable();
320					this.selectize.clear(true);
321				}
322			});
323			// return true
324			return false;
325		});
326		if( jQuery('input#location-id').val() != '0' && jQuery('input#location-id').val() != '' ){
327			jQuery('div.em-location-data input, div.em-location-data select').each( function(){
328				this.style.setProperty('opacity','0.5', 'important')
329				this.readOnly = true;
330			});
331			jQuery('#em-location-reset').show();
332			jQuery('#em-location-search-tip').hide();
333			jQuery('div.em-location-data select.em-selectize, div.em-location-data input.em-selectize-autocomplete').each( function(){
334				if( 'selectize' in this ) this.selectize.disable();
335			});
336		}
337	}
338
339	// Add click handler for recurrence conversion links
340	document.querySelectorAll( '.em-convert-recurrence-link' ).forEach( link => {
341		link.addEventListener( 'click', function ( e ) {
342			if ( !confirm( EM.convert_recurring_warning ) ) {
343				e.preventDefault();
344				return false;
345			}
346			let nonce = this.getAttribute( 'data-nonce' );
347			if ( nonce ) {
348				this.href = this.href.replace( 'nonce=x', 'nonce=' + nonce );
349			}
350		} );
351	} );
352
353	// trigger selectize loader
354	em_setup_ui_elements(document);
355
356	/* Done! */
357	$(document).triggerHandler('em_javascript_loaded');
358});
359
360/**
361 * Sets up external UI libraries and adds them to elements within the supplied container. This can be a jQuery or DOM element, subfunctions will either handle accordingly or this function will ensure it's the right one to pass on..
362 * @param jQuery|DOMElement container
363 */
364function em_setup_ui_elements ( $container ) {
365	let container = ( $container instanceof jQuery ) ? $container[0] : $container;
366	// Selectize
367	em_setup_selectize( $container );
368	// Tippy
369	em_setup_tippy( $container );
370	// Moment JS
371	em_setup_moment_times( $container );
372	// Date & Time Pickers
373	if( container.querySelector('.em-datepicker') ){
374		em_setup_datepicker( container );
375	}
376	if( container.querySelector(".em-time-input") ){
377		em_setup_timepicker( container );
378	}
379	// Phone numbers
380	em_setup_phone_inputs( container );
381	// let other things hook in
382	document.dispatchEvent( new CustomEvent( 'em_setup_ui_elements', { detail: { container : container } } ) );
383}
384
385/**
386 * Unsetup containers with UI elements, primarily useful if intending on duplicating an element which would require re-setup.
387 * @param $container
388 */
389function em_unsetup_ui_elements( $container ) {
390	let container = $container instanceof jQuery ? $container[0] : $container;
391	em_unsetup_selectize( container );
392	em_unsetup_tippy( container );
393	em_unsetup_datepicker( container );
394	em_unsetup_timepicker( container );
395	em_unsetup_phone_inputs( container );
396	// let other things hook in
397	document.dispatchEvent( new CustomEvent( 'em_unsetup_ui_elements', { detail: { container : container } } ) );
398}
399
400/* Local JS Timezone related placeholders */
401/* Moment JS Timzeone PH */
402function em_setup_moment_times( container_element ) {
403	container = jQuery(container_element);
404	if( window.moment ){
405		var replace_specials = function( day, string ){
406			// replace things not supported by moment
407			string = string.replace(/##T/g, Intl.DateTimeFormat().resolvedOptions().timeZone);
408			string = string.replace(/#T/g, "GMT"+day.format('Z'));
409			string = string.replace(/###t/g, day.utcOffset()*-60);
410			string = string.replace(/##t/g, day.isDST());
411			string = string.replace(/#t/g, day.daysInMonth());
412			return string;
413		};
414		container.find('.em-date-momentjs').each( function(){
415			// Start Date
416			var el = jQuery(this);
417			var day_start = moment.unix(el.data('date-start'));
418			var date_start_string = replace_specials(day_start, day_start.format(el.data('date-format')));
419			if( el.data('date-start') !== el.data('date-end') ){
420				// End Date
421				var day_end = moment.unix(el.data('date-end'));
422				var day_end_string = replace_specials(day_start, day_end.format(el.data('date-format')));
423				// Output
424				var date_string = date_start_string + el.data('date-separator') + day_end_string;
425			}else{
426				var date_string = date_start_string;
427			}
428			el.text(date_string);
429		});
430		var get_date_string = function(ts, format){
431			let date = new Date(ts * 1000);
432			let minutes = date.getMinutes();
433			if( format == 24 ){
434				let hours = date.getHours();
435				hours = hours < 10 ? '0' + hours : hours;
436				minutes = minutes < 10 ? '0' + minutes : minutes;
437				return hours + ':' + minutes;
438			}else{
439				let hours = date.getHours() % 12;
440				let ampm = hours >= 12 ? 'PM' : 'AM';
441				if( hours === 0 ) hours = 12; // the hour '0' should be '12'
442				minutes = minutes < 10 ? '0'+minutes : minutes;
443				return hours + ':' + minutes + ' ' + ampm;
444			}
445		}
446		container.find('.em-time-localjs').each( function(){
447			var el = jQuery(this);
448			var strTime = get_date_string( el.data('time'), el.data('time-format') );
449			if( el.data('time-end') ){
450				var separator = el.data('time-separator') ? el.data('time-separator') : ' - ';
451				strTime = strTime + separator + get_date_string( el.data('time-end'), el.data('time-format') );
452			}
453			el.text(strTime);
454		});
455	}
456};
457
458function em_load_jquery_css( wrapper = false ){
459	if( EM.ui_css && jQuery('link#jquery-ui-em-css').length == 0 ){
460		var script = document.createElement("link");
461		script.id = 'jquery-ui-em-css';
462		script.rel = "stylesheet";
463		script.href = EM.ui_css;
464		document.body.appendChild(script);
465		if( wrapper ){
466			em_setup_jquery_ui_wrapper();
467		}
468	}
469}
470
471function em_setup_jquery_ui_wrapper(){
472	if( jQuery('#em-jquery-ui').length === 0 ){
473		jQuery('body').append('<div id="em-jquery-ui" class="em">');
474	}
475}
476
477/* Useful function for adding the em_ajax flag to a url, regardless of querystring format */
478var em_ajaxify = function(url){
479	if ( url.search('em_ajax=0') != -1){
480		url = url.replace('em_ajax=0','em_ajax=1');
481	}else if( url.search(/\?/) != -1 ){
482		url = url + "&em_ajax=1";
483	}else{
484		url = url + "?em_ajax=1";
485	}
486	return url;
487};
488
489// load externals after DOM load, supplied by EM.assets, only if selector matches
490var em_setup_scripts = function( $container = false ) {
491	let container = $container || document;
492	if( EM && 'assets' in EM ) {
493		let baseURL = EM.url + '/includes/external/';
494		for ( const [selector, assets] of Object.entries(EM.assets) ) {
495			// load scripts if one element exists for selector
496			if ( container.querySelector(selector) ) {
497				if ('css' in assets) {
498					// Iterate through assets.css object and add stylesheet to head
499					for (const [id, value] of Object.entries(assets.css)) {
500						// Check if the stylesheet with the given ID already exists
501						if (!document.getElementById( id + '-css' )) {
502							// Create a new link element for the stylesheet
503							const link = document.createElement('link');
504							link.id = id + '-css';
505							link.rel = 'stylesheet';
506							link.href = value.match(/^http/) ? value : baseURL + value;
507
508							// Append the stylesheet to the document head
509							document.head.appendChild(link);
510						}
511					}
512				}
513				if ('js' in assets) {
514					// add a tracking of all assets to load, and execute loaded hooks after all assets are loaded and in order of dependence
515					let loaded = {};
516					let loadedListener = function( id ) {
517						loaded[id] = false;
518						if ( Object.entries( loaded ).length === Object.entries( assets.js ).length ) {
519							// all items for this asset loaded, so we go through all the entries and fire their events
520							for ( id of Object.keys( loaded ) ) {
521								loadAsset( id )
522							}
523						}
524					};
525					let loadAsset = function( id ) {
526						if ( !loaded[id] ) {
527							let asset = assets.js[id];
528							if ( typeof asset === 'object' && 'event' in asset ) {
529								if ( asset?.requires) {
530									loadAsset( asset.requires );
531								}
532								document.dispatchEvent( new CustomEvent( asset.event, {
533									detail: {
534										container: container,
535									}
536								} ) );
537							}
538							loaded[id] = true;
539						}
540					};
541					// Iterate through assets.js object and add script to head
542					for ( const [ id, value ] of Object.entries(assets.js)) {
543						// Check if the script with the given ID already exists
544						if ( !document.getElementById( id + '-js' ) ) {
545							// Create a new script element for the JavaScript file
546							const script = document.createElement('script');
547							script.id = id + '-js';
548							script.async = true;
549							if ( typeof value === 'object' ) {
550								// add locale data
551								if ( 'locale' in value && value.locale ) {
552									script.dataset.locale = value.locale;
553								}
554								script.src = value.url.match(/^http/g) ? value.url : baseURL + value.url;
555							} else {
556								script.src = value.match(/^http/g) ? value : baseURL + value;
557							}
558							// listen for loads so we execute the real onload hooks once all files are loaded (or errorred out)
559							script.onload = () => loadedListener(id);
560							script.onerror = () => loadedListener(id);
561							// Append the script to the document head
562							document.head.appendChild(script);
563						}
564					}
565				}
566			}
567		}
568	}
569}
570document.addEventListener('DOMContentLoaded', () => em_setup_scripts( document ));
571
572// WP List Tables front-end stuff
573const setupListTable = function( listTable ) {
574	// handle checks of multiple items using shift
575	const checkboxes = listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]' );
576	const listTableForm = listTable.querySelector('form.em-list-table-form');
577	let lastChecked;
578
579	//Pagination link clicks
580	listTable.querySelectorAll('.tablenav-pages a').forEach( el => {
581		el.addEventListener('click', function ( e ) {
582			e.preventDefault();
583			//get page no from url, change page, submit form
584			let match = el.href.match(/#[0-9]+/);
585			if ( match != null && match.length > 0 ) {
586				let pno = match[0].replace('#', '');
587				listTableForm.querySelector('input[name=pno]').val(pno);
588			} else {
589				// new way
590				let url = new URL(el.href);
591				if ( url.searchParams.has('paged') ) {
592					listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = url.searchParams.get('paged') );
593				} else {
594					listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = 1 );
595				}
596			}
597			listTableForm.requestSubmit();
598			return false;
599		});
600	});
601	// Pagination - Input page number
602	listTable.querySelectorAll('.tablenav-pages input[name=paged]').forEach( function ( input ){
603		input.addEventListener('change', function (e) {
604			e.preventDefault();
605			let last = listTableForm.querySelector('.tablenav-pages a.last-page');
606			if ( last ) {
607				// check val isn't more than last page
608				let url = new URL(last.href);
609				if ( url.searchParams.has('paged') ) {
610					let lastPage = parseInt(url.searchParams.get('paged'));
611					if ( parseInt(input.value) > lastPage ) {
612						input.value = lastPage;
613					}
614				}
615			} else {
616				// make sure it's less than current page, we're on last page already
617				let lastPage = listTableForm.querySelector('input[name=pno]');
618				if (lastPage && lastPage.value && parseInt(input.value) > parseInt(lastPage.value)) {
619					input.value = lastPage.value;
620					e.preventDefault();
621					return false;
622				}
623			}
624			listTableForm.querySelectorAll('input[name=pno]').forEach( el => el.value = input.value );
625			listTableForm.requestSubmit();
626			return false;
627		});
628	});
629
630	// handle checkboxes
631	listTable.addEventListener('click', function(e){
632		// handle selecting all checkboxes
633		if( e.target.matches('.manage-column.column-cb input') ){
634			listTable.querySelectorAll('.check-column input').forEach( function( checkbox ){
635				checkbox.checked = e.target.checked;
636				checkbox.closest('tr').classList.toggle('selected', e.target.checked);
637				// enable/disable bulk actions filter
638				listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){
639					e.target.checked ? el.removeAttribute('disabled') : el.setAttribute('disabled', true);
640					e.target.checked ? el.classList.remove('disabled') : el.classList.add('disabled', true);
641				});
642			});
643		} else if ( e.target.matches('tbody .check-column input[type="checkbox"]') ) {
644			// handle multiple checks
645			let inBetween = false;
646			if ( e.shiftKey ) {
647				checkboxes.forEach(checkbox => {
648					if ( checkbox === e.target || checkbox === lastChecked ) {
649						inBetween = !inBetween;
650					}
651					if ( inBetween || checkbox === lastChecked ) {
652						checkbox.checked = lastChecked.checked;
653					}
654					checkbox.closest('tr').classList.toggle('selected', checkbox.checked);
655				});
656			} else {
657				e.target.closest('tr').classList.toggle('selected', e.target.checked);
658			}
659			// enable/disable bulk actions filter
660			let somethingSelected = e.target.checked || listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]:checked' ).length > 0;
661			listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){
662				somethingSelected ? el.removeAttribute('disabled') : el.setAttribute('disabled', true);
663				somethingSelected ? el.classList.remove('disabled') : el.classList.add('disabled', true);
664			});
665			lastChecked = e.target;
666		} else if ( e.target.closest('tbody td.column-primary') ) {
667			// handle row expand/collapse
668			if ( e.target.matches('a[href],button:not(.toggle-row)') ) return true; // allow links to pass
669			e.preventDefault();
670			let rowExpandTrigger = e.target.closest('td.column-primary');
671			let row = rowExpandTrigger.closest('tr');
672			if( row.classList.contains('expanded') ) {
673				row.classList.remove('expanded');
674				row.classList.add('collapsed');
675				rowExpandTrigger.querySelector('button.toggle-row').classList.remove('expanded');
676			} else {
677				row.classList.add('expanded');
678				row.classList.remove('collapsed');
679				rowExpandTrigger.querySelector('button.toggle-row').classList.add('expanded');
680			}
681		}
682	});
683	// disable filter since no checkboxes initially selected
684	listTable.querySelectorAll('.tablenav .bulkactions-input').forEach( (el) => {
685		el.querySelectorAll('input,select,button').forEach(function (el) {
686			el.setAttribute('disabled', true);
687			el.classList.add('disabled', true);
688		})
689	});
690
691	// Sorting by headers
692	listTable.querySelector('thead').addEventListener('click', function( e ) {
693		// get th element
694		let th = e.target.tagName.toLowerCase() === 'th' ? e.target : e.target.closest('th');
695		if( th && (th.classList.contains('sorted') || th.classList.contains('sortable')) ) {
696			e.preventDefault();
697			// add args to form and submit it
698			let params = ( new URL( th.querySelector('a').href) ).searchParams;
699			if ( params.get('orderby') ) {
700				listTableForm.querySelector('input[name="orderby"]').value = params.get('orderby');
701				let order = params.get('order') ? params.get('order') : 'asc';
702				listTableForm.querySelector('input[name="order"]').value = order;
703				listTableForm.requestSubmit();
704			}
705		}
706	});
707
708	// show/hide filters trigger
709	let filterTrigger = listTable.querySelector('button.filters-trigger');
710	if( filterTrigger ) {
711		filterTrigger.addEventListener('click', function(e){
712			e.preventDefault();
713			if( filterTrigger.classList.contains('hidden') ) {
714				listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.remove('hidden') );
715				filterTrigger.classList.remove('hidden');
716				filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelHide);
717				if( '_tippy' in filterTrigger ){
718					filterTrigger._tippy.setContent( filterTrigger.dataset.labelHide );
719				}
720			} else {
721				listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.add('hidden') );
722				filterTrigger.classList.add('hidden');
723				filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelShow);
724				if( '_tippy' in filterTrigger ){
725					filterTrigger._tippy.setContent( filterTrigger.dataset.labelShow );
726				}
727			}
728		});
729		listTable.addEventListener('em_resize', function(){
730			if( listTable.classList.contains('size-small') ) {
731				filterTrigger.classList.remove('hidden'); // force hide click
732				filterTrigger.click();
733			}
734		});
735	}
736
737	// EXPAND/COLLAPSE - RESPONSIVE
738	// handle expand/collapse in responsive mode when clicking the expand/collapse (all)
739	let expandTrigger = listTable.querySelector('button.small-expand-trigger');
740	if( expandTrigger ) {
741		// detect click and add expand class to table, expanded class to trigger
742		expandTrigger.addEventListener('click', function(e){
743			e.preventDefault();
744			if( expandTrigger.classList.contains('expanded') ) {
745				listTable.querySelectorAll('tbody tr.expanded, tbody button.toggle-row.expanded').forEach( el => el.classList.remove('expanded') );
746				listTable.classList.remove('expanded');
747				expandTrigger.classList.remove('expanded');
748			} else {
749				listTable.querySelectorAll('tbody tr, tbody button.toggle-row').forEach( el => {
750					el.classList.add('expanded');
751					el.classList.remove('collapsed');
752				});
753				listTable.classList.add('expanded');
754				expandTrigger.classList.add('expanded');
755			}
756		});
757	}
758
759	// handle filters when pressing enter, submitting a search
760	listTable.querySelectorAll('.tablenav .actions input[type="text"]').forEach( function (input) {
761		input.addEventListener('keypress', function (e) {
762			let keycode = (e.keyCode ? e.keyCode : e.which);
763			if (keycode === 13) {
764				e.preventDefault();
765				listTableForm.requestSubmit();
766			}
767		});
768	});
769
770	// handle size breakpoints
771	let breakpoints = {
772		'xsmall' : 465,
773		'small' : 640,
774		'medium' : 930,
775		'large' : false,
776	}
777	// submissions
778	EM_ResizeObserver( breakpoints, [ listTable ] );
779
780	//Widgets and filter submissions
781	listTableForm.addEventListener('submit', function (e) {
782		e.preventDefault();
783		//append loading spinner
784		listTable.classList.add('em-working');
785		let loadingDiv = document.createElement('div');
786		loadingDiv.id = 'em-loading';
787		listTable.append(loadingDiv);
788		listTable.querySelectorAll('.em-list-table-error-notice').forEach( el => el.remove() );
789		//ajax call
790		fetch( EM.ajaxurl, { method: 'POST', body: new FormData(listTableForm) } ).then( function( response ) {
791			if ( response.ok ) {
792				return response.text();
793			} else {
794				throw new Error('Network Response ' + response.status);
795			}
796		}).then( function( data ) {
797			if ( !data ) {
798				throw new Error('Empty string received');
799			}
800			if (!listTable.classList.contains('frontend')) {
801				// remove modals as they are supplied again on the backend
802				listTableForm.querySelectorAll('.em-list-table-trigger').forEach(function ( trigger ) {
803					let modal = document.querySelector(trigger.rel);
804					if( modal ) {
805						modal.remove();
806					}
807				});
808			}
809			// get new data as DOM object
810			let wrapper = document.createElement('div');
811			wrapper.innerHTML = data;
812			let newListTable = wrapper.firstElementChild;
813			// replace old table with new table
814			listTable.replaceWith( newListTable );
815			// fire hook - note that form and data should not be used! This is for backward compatibility with an old jQuery hook being fired. Expect future consequences if you use them, obtain everything from listTable or prevListTable!
816			document.dispatchEvent( new CustomEvent('em_list_table_filtered', { detail: { prevListTable: listTable, listTable: newListTable, form: newListTable.firstElementChild, data: data } }) );
817		}).catch( function( error ) {
818			let div = document.createElement('div');
819			div.innerHTML = '<p>There was an unexpected error retrieving table data with error <code>' + error.message + '</code>
819, please try again or contact an administrator.</p>';
820			div.setAttribute('class', 'em-warning error em-list-table-error-notice');
821			listTable.querySelector('.table-wrap').before(div);
822			loadingDiv.remove();
823			listTable.classList.remove('em-working');
824		});
825		return false;
826	});
827
828	//Settings & Export Modal
829
830	/**
831	 * Handle trigger of settings and export modals.
832	 */
833	listTable.querySelectorAll('.em-list-table-trigger').forEach( trigger => {
834		trigger.addEventListener('click', function (e) {
835			e.preventDefault();
836			let modal = document.querySelector( trigger.getAttribute('rel') );
837			openModal(modal);
838		});
839	});
840
841	/**
842	 * Handle submission of settings forms, by copying over hidden input values such as cols and limit to main form.
843	 */
844	listTable.querySelectorAll('.em-list-table-settings form').forEach( form => {
845		form.addEventListener('submit', function (e) {
846			e.preventDefault();
847			//we know we'll deal with cols, so wipe hidden value from main
848			let modal = form.closest('.em-modal');
849			let match = listTableForm.querySelector("[name=cols]");
850			match.value = '';
851			let tableCols = form.querySelectorAll('.em-list-table-cols-selected .item');
852			tableCols.forEach( function (item_match) {
853				if (!item_match.classList.contains('hidden')) {
854					if (match.value !== '') {
855						match.value = match.value + ',' + item_match.getAttribute('data-value');
856					} else {
857						match.value = item_match.getAttribute('data-value');
858					}
859				}
860			});
861			// sync row count
862			let limit = form.querySelector('select[name="limit"]');
863			if( limit ) {
864				listTableForm.querySelector('[name="limit"]').value = limit.value;
865			}
866			// sync custom inputs
867			form.querySelectorAll('[data-setting]').forEach( function( input ) {
868				listTableForm.querySelectorAll('[name="'+input.name+'"]').forEach( el => el.remove() );
869				let persisted = input.cloneNode(true);
870				persisted.classList.add('hidden')
871				listTableForm.appendChild( persisted );
872			});
873			closeModal(modal);
874			// send events out
875			modal.dispatchEvent( new CustomEvent('submitted') );
876			listTable.dispatchEvent( new CustomEvent( 'em_list_table_settings_submitted', {
877				detail: {
878					listTableForm: listTableForm,
879					form: form,
880					modal: modal
881				},
882				bubbles: true
883			}) );
884			// submit main form
885			listTableForm.requestSubmit();
886		});
887	});
888
889	/**
890	 * Handle submission of export forms, by copying over filters and hidden inputs with the data-persist attribute from main list table form.
891	 */
892	listTable.querySelectorAll('.em-list-table-export > form').forEach( function( exportForm ) {
893		exportForm.addEventListener('submit', function(e) {
894			var formFilters = this.querySelector('.em-list-table-filters');
895			if ( formFilters ) {
896				// get all filter inputs in main list table form and copy over so export inherits all filters to output right results
897				let filters = listTableForm.querySelectorAll('.em-list-table-filters [name]');
898				formFilters.innerHTML = ''; // Empty the filters, none to copy over
899				if( filters ) {
900					filters.forEach( function( filter ) {
901						formFilters.appendChild( filter.cloneNode(true) );
902					});
903				}
904				let peristentData = listTableForm.querySelectorAll('[data-persist]');
905				if( peristentData ) {
906					peristentData.forEach( function( filter ) {
907						formFilters.appendChild( filter.cloneNode(true) );
908					});
909				}
910			}
911		});
912	});
913
914	// sortables
915	listTable.querySelectorAll(".em-list-table-cols-sortable").forEach( function(sortable) {
916		Sortable.create( sortable );
917	});
918
919	// add trigger
920	document.dispatchEvent( new CustomEvent('em_list_table_setup', { detail: { listTable: listTable, listTableForm: listTableForm } }) );
921
922	// add extra listeners that we might want to block such as in bulk actions and row actions
923
924	/* ----------------- Row/Bulk Action Handlers ----------------- */
925
926	const actionMessages = JSON.parse( listTableForm.dataset.actionMessages );
927	let isBulkAction = false;
928
929	listTable.addEventListener('click', function( e ) {
930		if( e.target.matches('a[data-row_action]') ) {
931			e.preventDefault();
932			let el = e.target;
933			let tr = el.closest('tr');
934
935			if( !isBulkAction ) {
936				let confirmation = []
937				// check if we need to confirm something specific
938				if ( el.dataset.confirmation && el.dataset.confirmation in actionMessages ) {
939					confirmation.push( actionMessages[el.dataset.confirmation] );
940				}
941				// check context of action and warn then propagate if upstream
942				if ( el.dataset.row_action in actionMessages ) {
943					confirmation.push( actionMessages[el.dataset.row_action] );
944				}
945
946				if ( confirmation.length > 0 ) {
947					if ( !confirm( confirmation.join("\n\n") ) ) {
948						return false;
949					}
950				}
951			}
952
953			// close dropdown if applicable
954			let dropdown = el.closest('[data-tippy-root], .em-tooltip-ddm-content');
955			if ( dropdown ) {
956				if ( '_tippy' in dropdown ) {
957					dropdown._tippy.hide();
958				}
959			}
960
961			// handle upstream rows, add a loading class to them so they don't get double-tapped, no checks necessary here since we have clicked a single row item
962			if( el.dataset.upstream ) {
963				// block any same upstream_id row so it's loading already pending refresh
964				listTable.querySelectorAll('tr[data-id="' + tr.dataset.id + '"]').forEach( tr => tr.classList.add('loading') );
965			}
966
967			// prep and fetch/refresh
968			let formData = new FormData( listTableForm );
969			for( const [key, value] of Object.entries(el.dataset) ) {
970				formData.set(key, value);
971			}
972			formData.set('view', listTable.dataset.view);
973			formData.set('action', listTable.dataset.basename + '_row');
974			listTableRowAction( tr, formData );
975
976			return false; // stop propagation
977		}
978	});
979
980	// Action links (approve/reject etc.) - circumvent if a warning is required
981	listTable.addEventListener( 'click', function( e ) {
982		if( e.target.matches('a[data-row_action]') ) {
983			e.preventDefault();
984		}
985	});
986
987	listTable.querySelectorAll('button.em-list-table-bulk-action').forEach( function( button ) {
988		button.addEventListener('click', function (e) {
989			e.preventDefault(); // override default
990			let actionSelector = listTableForm.querySelector('select.bulk-action-selector');
991			let action = actionSelector.options[actionSelector.selectedIndex];
992			
993			// check if we need to confirm
994			if ( action.dataset.confirm ) {
995				if ( !confirm( action.dataset.confirm ) ) {
996					isBulkAction = false; // just in case
997					return false;
998				}
999			}
1000
1001			isBulkAction = true;
1002			// find all checked items and perform action on them if the action actually exists for that row (e.g. you can't re-approve an approved booking)
1003			let rows = listTableForm.querySelectorAll('tbody .check-column input:checked');
1004			rows.forEach( function ( checkbox ) {
1005				let actionTrigger = checkbox.parentElement.querySelector('[data-row_action="' + action.value + '"]');
1006				// check if sibling has the relevant action
1007				if( actionTrigger ) {
1008					let tr = checkbox.closest('tr');
1009					if ( actionTrigger.dataset.upstream ) {
1010						// check if not already in an upstream process, proceed if not
1011						if ( !tr.classList.contains('loading') ) { // if loading, already in upstream from another row
1012							// trigger the first booking id row in this table, it'll handle upstream stuff
1013							actionTrigger.click();
1014						}
1015					} else {
1016						// regular action, just click it
1017						actionTrigger.click();
1018					}
1019				}
1020			});
1021			isBulkAction = false;
1022		});
1023	});
1024
1025
1026	// add a listener to refresh related booking rows if upstream
1027	listTable.addEventListener('em_list_table_row_action_complete', function(e){
1028		if ( e.detail.upstream ) {
1029			// find any rows other than the current one and trigger a refresh
1030			let currentRow = e.detail.currentRow;
1031			let formData = e.detail.formData;
1032			if( formData.get('row_action') === 'delete' ) {
1033				let feedback = currentRow.querySelector('.column-primary span.em-icon-trash.em-tooltip');
1034				if ( feedback ) {
1035					listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) {
1036						// apply to all rows of same booking_id except the one we just updated
1037						if ( tr !== currentRow ) {
1038							let td = tr.querySelector('.column-primary');
1039							td.prepend(feedback.cloneNode(true));
1040							em_setup_tippy(td);
1041						}
1042						tr.classList.remove('faded-out');
1043						tr.classList.remove('loading');
1044					});
1045				}
1046			} else if( formData.get('row_action') !== 'refresh' ) {
1047				let feedback = currentRow.querySelector('.column-primary span.em-icon.em-tooltip').getAttribute('aria-label');
1048				formData.set('row_action', 'refresh'); // this is a special action that just refreshes the row
1049				formData.set('feedback', feedback);
1050				listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) {
1051					// apply to all rows of same booking_id except the one we just updated
1052					if( tr !== currentRow ) {
1053						listTableRowAction(tr, formData);
1054						// delete current booking_id and reset isUpstreamAction if we're done
1055						delete isUpstreamAction[e.detail.booking_id];
1056						if (Object.keys(isUpstreamAction).length) {
1057							isUpstreamAction = false;
1058						}
1059					}
1060				});
1061			}
1062		}
1063	});
1064
1065	// setup rows with actions if there are any
1066	listTable.querySelectorAll('td.column-actions a').forEach( (action) => {
1067		action.classList.add('em-tooltip');
1068		action.setAttribute('aria-label', action.innerText);
1069	});
1070}
1071
1072let listTableRowAction = function( tr, formData, upstream = false ){
1073	let listTable = tr.closest('.em-list-table');
1074	tr.classList.add('loading');
1075	formData.set('row_id', tr.dataset.id );
1076	fetch( EM.ajaxurl, { method: 'post', body : formData } ).then( function( response ) {
1077		return response.text();
1078	}).then( function( html ) {
1079		tr.classList.add('faded-out');
1080		if ( formData.get('row_action') === 'delete' ) {
1081			// the text provided is the icon, nothing else
1082			tr.querySelectorAll('th.check-column input[type="checkbox"], .em-list-table-actions').forEach( el => el.remove() );
1083			let td = tr.querySelector('.column-primary');
1084			let wrapper = document.createElement('div');
1085			wrapper.innerHTML = html;
1086			let icon = wrapper.firstElementChild;
1087			em_setup_tippy(wrapper); // no actions to set up
1088			td.prepend(icon);
1089		} else {
1090			tr.innerHTML = html
1091			setupListTableExtras(tr);
1092		}
1093		tr.classList.remove('faded-out');
1094		tr.classList.remove('loading');
1095		listTable.dispatchEvent( new CustomEvent('em_list_table_row_action_complete', { detail: { currentRow: tr, formData: formData, upstream: upstream } } ) );
1096	});
1097}
1098
1099const setupListTableExtras = function( listTable ) {
1100	// setup rows with actions if there are any
1101	listTable.querySelectorAll('td.column-actions a').forEach( (action) => {
1102		action.classList.add('em-tooltip');
1103		action.setAttribute('aria-label', action.innerText);
1104	});
1105	// remove tooltips within tooltips in cell tooltips
1106	listTable.querySelectorAll('td .em-list-table-col-tooltip .em-list-table-col-tooltip').forEach( (subtip) => {
1107		subtip.querySelectorAll('.em-tooltip').forEach( el => el.remove() );
1108		subtip.querySelectorAll('.em-tooltip-content').forEach( el => el.classList.remove('hidden') );
1109	});
1110	// set up tippy, selectize etc.
1111	em_setup_tippy( listTable );
1112	em_setup_selectize( listTable );
1113}
1114
1115document.addEventListener('em_list_table_filtered', function(e){
1116	setupListTable( e.detail.listTable );
1117	// re-setup tippy, selectize etc.
1118	setupListTableExtras( e.detail.listTable );
1119});
1120
1121// init
1122document.addEventListener('DOMContentLoaded', function() {
1123	// add back-compat stuff
1124	document.querySelectorAll('.em_obj div.tablenav').forEach( function( tablenav ){
1125		let em_obj = tablenav.closest('.em_obj');
1126		em_obj.classList.add('em-list-table','legacy', 'frontend');
1127		em_obj.querySelector('& > form').classList.add('em-list-table-form');
1128	});
1129	// find tables
1130	document.querySelectorAll('.em-list-table').forEach( listTable => setupListTable(listTable) );
1131});
1132
1133// add extra setup to bookings list table
1134document.addEventListener('em_list_table_setup'  , function(e){
1135	let listTable = e.detail.listTable;
1136	let listTableForm = e.detail.listTableForm;
1137	if( listTable.classList.contains('em-bookings-table') ) {
1138
1139		// handle submitting the settings modal form with booking-speficic extras
1140		listTable.addEventListener('em_list_table_settings_submitted', function(e){
1141			let form = e.detail.form;
1142			let listTableForm = e.detail.listTableForm;
1143			// get the views ddm and sync it to the table filter
1144			let views_select = form.querySelector('select[name="view"]');
1145			if ( views_select ) {
1146				let view_radio = listTableForm.querySelector('[name="view"][value="' + views_select.value + '"]');
1147				if( view_radio ) {
1148					view_radio.checked = true; // this doesn't trigger an event as we don't want that
1149				}
1150				let view_option = listTableForm.querySelector('button.em-bookings-table-view-option[data-view]');
1151				if ( view_option ) {
1152					view_option.setAttribute('data-view', views_select.value);
1153					view_option.innerText = views_select.options[views_select.selectedIndex].innerText;
1154				}
1155			}
1156		});
1157
1158		// setup views dropdown to switch between different booking table views
1159		let views_ddm_options = {
1160			theme : 'light-border',
1161			allowHTML : true,
1162			interactive : true,
1163			trigger : 'manual',
1164			placement : 'bottom',
1165			zIndex : 1000000,
1166			touch: true,
1167		};
1168		let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, };
1169
1170		// TODO unify this with the search view dropdown JS to remove redundant code
1171		listTable.querySelectorAll('.em-bookings-table-views-trigger').forEach( function( trigger ){
1172			tooltip_vars.content = trigger.parentElement.getAttribute('aria-label');
1173			let views_tooltip = tippy(trigger.parentElement, tooltip_vars);
1174			let views_content = trigger.parentElement.querySelector('.em-bookings-table-views-options');
1175			let views_content_parent = views_content.parentElement;
1176			let tippy_content = document.createElement('div');
1177			views_ddm_options.content = tippy_content;
1178			let views_ddm = tippy(trigger, views_ddm_options);
1179			views_ddm.setProps({
1180				onShow(instance){
1181					views_tooltip.disable();
1182					tippy_content.append(views_content);
1183				},
1184				onShown(instance){ // keyboard support
1185					views_content.querySelector('input:checked').focus();
1186				},
1187				onHidden(instance){
1188					views_tooltip.enable();
1189					if( views_content.parentElement !== views_content_parent ) {
1190						views_content_parent.append(views_content);
1191					}
1192				}
1193			});
1194			let tippy_listener = function(e){
1195				if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
1196				e.preventDefault();
1197				e.stopPropagation();
1198				trigger._tippy.show();
1199				views_tooltip.hide();
1200			}
1201			trigger.addEventListener('click', tippy_listener);
1202			trigger.addEventListener('keydown', tippy_listener);
1203			trigger.firstElementChild.addEventListener('focus', function(e){
1204				views_ddm.hide();
1205				views_tooltip.enable();
1206				views_tooltip.show();
1207			});
1208			trigger.firstElementChild.addEventListener('blur', function(){
1209				views_tooltip.hide();
1210			});
1211
1212			// TODO Remove this dependence on jQuery. Copied it from the search.js file, but it seems that even a vanilla document.addEventListener('blur') isn't intercepting these blur/focus events.
1213			let $ = jQuery;
1214			$views = $(listTable).find('.em-bookings-table-views');
1215			$views.on('focus blur', '.em-bookings-table-views-options input', function(){
1216				if( document.activeElement === this ){
1217					this.parentElement.classList.add('focused');
1218				}else{
1219					this.parentElement.classList.remove('focused');
1220				}
1221			});
1222
1223			$views.on('keydown click', '.em-bookings-table-views-options input', function( e ){
1224				// get relevant vars
1225				if( e.type === 'keydown' && e.which !== 13 ){
1226					if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) {
1227						if (e.which === 38) {
1228							if (this.parentElement.previousElementSibling) {
1229								this.parentElement.previousElementSibling.focus();
1230							}
1231						} else if (e.which === 40) {
1232							if (this.parentElement.nextElementSibling) {
1233								this.parentElement.nextElementSibling.focus();
1234							}
1235						}
1236						return false;
1237					} else if ( e.which === 9 ) {
1238						// focus out
1239						views_ddm.hide();
1240					}
1241					return true;
1242				}
1243				this.checked = true;
1244				let input = $(this);
1245				// mark label selected
1246				input.closest('fieldset').find('label').removeClass('checked');
1247				input.parent().addClass('checked');
1248				// get other reference elements we need
1249				let views_wrapper = $(this).closest('.em-bookings-table-views');
1250				let view_type = this.value;
1251				let trigger = views_wrapper.children('.em-bookings-table-views-trigger');
1252				let trigger_option = trigger.children('.em-search-view-option');
1253				// change view, if different
1254				if( view_type !== trigger_option.attr('data-view') ){
1255					trigger_option.attr('data-view', this.value).text(this.parentElement.innerText);
1256					// remove cols value if it's just a switch in view, so we get default cols (if there is one)
1257					listTableForm.querySelector('input[name="cols"][type="hidden"]').value = '';
1258					// set the view type and trigger a form submit
1259					listTableForm.requestSubmit();
1260				}
1261				views_ddm.hide();
1262			});
1263		});
1264	}
1265});
1266
1267// backcompat for em_bookings_filtered jQuery trigger
1268document.addEventListener('em_list_table_filtered', function( e ){
1269	if( e.detail.listTable.classList.contains('em-bookings-table') && window.jQuery ) {
1270		jQuery(document).triggerHandler('em_bookings_filtered', [jQuery(e.detail.data), e.detail.listTable, jQuery(e.detail.form)]); // backwards compatibility
1271	}
1272})
1273
1274function em_setup_datepicker( container ){
1275	wrap = jQuery(container);
1276
1277	//apply datepickers - jQuery UI (backcompat)
1278	let dateDivs = wrap.find('.em-date-single, .em-date-range');
1279	if( dateDivs.length > 0 ){
1280		//default picker vals
1281		var datepicker_vals = {
1282			dateFormat: "yy-mm-dd",
1283			changeMonth: true,
1284			changeYear: true,
1285			firstDay : EM.firstDay,
1286			yearRange:'c-100:c+15',
1287			beforeShow : function( el, inst ){
1288				em_setup_jquery_ui_wrapper();
1289				inst.dpDiv.appendTo('#em-jquery-ui');
1290			}
1291		};
1292		if( EM.dateFormat ) datepicker_vals.dateFormat = EM.dateFormat;
1293		if( EM.yearRange ) datepicker_vals.yearRange = EM.yearRange;
1294		jQuery(document).triggerHandler('em_datepicker', datepicker_vals);
1295		//apply datepickers to elements
1296		dateDivs.find('input.em-date-input-loc').each(function(i,dateInput){
1297			//init the datepicker
1298			var dateInput = jQuery(dateInput);
1299			var dateValue = dateInput.nextAll('input.em-date-input').first();
1300			var dateValue_value = dateValue.val();
1301			dateInput.datepicker(datepicker_vals);
1302			dateInput.datepicker('option', 'altField', dateValue);
1303			//now set the value
1304			if( dateValue_value ){
1305				var this_date_formatted = jQuery.datepicker.formatDate( EM.dateFormat, jQuery.datepicker.parseDate('yy-mm-dd', dateValue_value) );
1306				dateInput.val(this_date_formatted);
1307				dateValue.val(dateValue_value);
1308			}
1309			//add logic for texts
1310			dateInput.on('change', function(){
1311				if( jQuery(this).val() == '' ){
1312					jQuery(this).nextAll('.em-date-input').first().val('');
1313				}
1314			});
1315		});
1316		//deal with date ranges
1317		dateDivs.filter('.em-date-range').find('input.em-date-input-loc[type="text"]').each(function(i,dateInput){
1318			//finally, apply start/end logic to this field
1319			dateInput = jQuery(dateInput);
1320			if( dateInput.hasClass('em-date-start') ){
1321				dateInput.datepicker('option','onSelect', function( selectedDate ) {
1322					//get corresponding end date input, we expect ranges to be contained in .em-date-range with a start/end input element
1323					var startDate = jQuery(this);
1324					var endDate = startDate.parents('.em-date-range').find('.em-date-end').first();
1325					var startValue = startDate.nextAll('input.em-date-input').first().val();
1326					var endValue = endDate.nextAll('input.em-date-input').first().val();
1327					startDate.trigger('em_datepicker_change');
1328					if( startValue > endValue && endValue != '' ){
1329						endDate.datepicker( "setDate" , selectedDate );
1330						endDate.trigger('change').trigger('em_datepicker_change');
1331					}
1332					endDate.datepicker( "option", 'minDate', selectedDate );
1333				});
1334			}else if( dateInput.hasClass('em-date-end') ){
1335				var startInput = dateInput.parents('.em-date-range').find('.em-date-start').first();
1336				if( startInput.val() != '' ){
1337					dateInput.datepicker('option', 'minDate', startInput.val());
1338				}
1339			}
1340		});
1341	}
1342
1343	// datpicker - new format
1344	let datePickerDivs = wrap.find('.em-datepicker, .em-datepicker-range');
1345	if( datePickerDivs.length > 0 ){
1346		// wrappers and locale
1347		let datepicker_wrapper = jQuery('#em-flatpickr');
1348		if( datepicker_wrapper.length === 0 ){
1349			datepicker_wrapper = jQuery('<div class="em pixelbones em-flatpickr" id="em-flatpickr"></div>').appendTo('body');
1350		}
1351		// locale
1352		if( 'locale' in EM.datepicker ){
1353			flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]);
1354			flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay;
1355		}
1356		//default picker vals
1357		let datepicker_onChanging;
1358		let datepicker_options = {
1359			appendTo : datepicker_wrapper[0],
1360			dateFormat: "Y-m-d",
1361			disableMoble : "true",
1362			allowInput : true,
1363			onChange : [function( selectedDates, dateStr, instance ){
1364				if ( datepicker_onChanging !== selectedDates) {
1365					let wrapper = jQuery(instance.input).closest('.em-datepicker');
1366					let data_wrapper = wrapper.find('.em-datepicker-data');
1367					let inputs = data_wrapper.find('input');
1368					let dateFormat = function(d) {
1369						let month = '' + (d.getMonth() + 1),
1370							day = '' + d.getDate(),
1371							year = d.getFullYear();
1372						if (month.length < 2) month = '0' + month;
1373						if (day.length < 2) day = '0' + day;
1374						return [year, month, day].join('-');
1375					}
1376					if ( selectedDates.length === 0 ){
1377						if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ) {
1378							let input = instance.input.classList.contains('em-date-input-start') ? inputs[0] : input
1378s[1];
1379							input.setAttribute('value', '');
1380							if ( inputs.filter(input => input.value !== '').length === 0 ) {
1381								wrapper.removeClass('has-value');
1382							}
1383						} else {
1384							wrapper.removeClass('has-value');
1385							inputs.attr('value', '');
1386							if( instance.config.mode === 'multiple' ) {
1387								// empty pill selection
1388								let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates');
1389								if (datesEl) {
1390									datesEl.querySelectorAll('.item:not(.clear-all)').forEach( el => el.remove() );
1391									datesEl.classList.remove('has-value');
1392								}
1393							}
1394						}
1395					} else {
1396						wrapper.addClass('has-value');
1397						if ( instance.config.mode === 'range' && selectedDates[1] !== undefined ) {
1398							// deal with end date
1399							inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1400							inputs[1].setAttribute('value', dateFormat(selectedDates[1]));
1401						} else if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ){
1402							if( instance.input.classList.contains('em-date-input-start') ){
1403								inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1404								// set min-date of other datepicker
1405								let fp;
1406								if( wrapper.attr('data-until-id') ){
1407									let fp_inputData = jQuery('#' + wrapper.attr('data-until-id') + ' .em-date-input-end');
1408									fp = fp_inputData[0]._flatpickr;
1409								}else {
1410									fp = wrapper.find('.em-date-input-end')[0]._flatpickr;
1411								}
1412								if( fp.selectedDates[0] !== undefined && fp.selectedDates[0] < selectedDates[0] ){
1413									fp.setDate(selectedDates[0], false);
1414									inputs[1].setAttribute('value', dateFormat(fp.selectedDates[0]));
1415								}
1416								fp.set('minDate', selectedDates[0]);
1417							}else{
1418								inputs[1].setAttribute('value', dateFormat(selectedDates[0]));
1419							}
1420						} else if ( instance.config.mode === 'multiple' ){
1421							inputs[0].setAttribute('value', dateStr);
1422							// Sort the selected dates chronologically
1423							selectedDates.sort(function(a, b) { return a - b; });
1424							// Build pill selection for multiple dates
1425							let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates');
1426							datesEl.classList.add('has-value');
1427							if ( datesEl ) {
1428								// Remove existing date pills but preserve the clear-all button
1429								datesEl.querySelectorAll('.item:not(.clear-all)').forEach(el => el.remove());
1430	
1431								// Sort dates chronologically
1432								selectedDates.sort((a, b) => a - b);
1433	
1434								// Group sequential dates into ranges
1435								let groups = [], currentGroup = [];
1436								selectedDates.forEach((date, i) => {
1437									if (currentGroup.length === 0) {
1438										currentGroup.push(date);
1439									} else {
1440										let lastDate = currentGroup[currentGroup.length - 1];
1441										let diffDays = (date - lastDate) / (1000 * 3600 * 24);
1442										if (diffDays === 1) {
1443											currentGroup.push(date);
1444										} else {
1445											groups.push(currentGroup);
1446											currentGroup = [date];
1447										}
1448									}
1449									if (i === selectedDates.length - 1) groups.push(currentGroup);
1450								});
1451	
1452								// Insert pills and maintain date values
1453								groups.forEach(group => {
1454									let div = document.createElement('div');
1455									div.className = 'item';
1456									let formattedDates = group.map(date => instance.formatDate(date, 'Y-m-d'));
1457									div.dataset.date = formattedDates.join(',');
1458									let startText = instance.formatDate(group[0], instance.config.altFormat);
1459									let endText = instance.formatDate(group[group.length - 1], instance.config.altFormat);
1460									div.innerHTML = `<span>${group.length > 1 ? startText + ' - ' + endText : startText}</span><a href="#" class="remove" tabindex="-1" title="Remove">×</a>`;
1461									datesEl.insertBefore(div, datesEl.querySelector('.clear-all'));
1462								});
1463							}
1464						} else {
1465							inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1466						}
1467					}
1468					inputs.trigger('change');
1469					let current_date = data_wrapper.attr('date-value');
1470					data_wrapper.attr('data-value', inputs.toArray().map(input => input.value).filter(value => value !== '').join(','));
1471					if( current_date === dateStr ) data_wrapper.trigger('change');
1472					wrapper[0].dispatchEvent( new CustomEvent('datepicker-onChange', { detail: { selectedDates : selectedDates, dateStr: dateStr, instance: instance } }) );
1473				}
1474				datepicker_onChanging = null; // reset regardless, since it's to prevent onClose firing this twice
1475			}],
1476			onClose : function( selectedDates, dateStr, instance ){
1477				// deal with single date choice and clicking out
1478				if( instance.config.mode === 'range' && selectedDates[1] !== undefined ){
1479					if(selectedDates.length === 1){
1480						instance.setDate([selectedDates[0],selectedDates[0]], true); // wouldn't have been triggered with a single date selection
1481					}
1482				} else {
1483					// trigger an onChange
1484					datepicker_options.onChange[0](selectedDates, dateStr, instance);
1485					datepicker_onChanging = selectedDates; // set flag to prevent onChange firing twice
1486				}
1487			},
1488			locale : {},
1489		};
1490		if( EM.datepicker.format !== datepicker_options.dateFormat ){
1491			datepicker_options.altFormat = EM.datepicker.format;
1492			datepicker_options.altInput = true;
1493		}
1494		jQuery(document).triggerHandler('em_datepicker_options', datepicker_options);
1495		//apply datepickers to elements
1496		datePickerDivs.each( function(i,datePickerDiv) {
1497			// hide fallback fields, show range or single
1498			datePickerDiv = jQuery(datePickerDiv);
1499			datePickerDiv.find('.em-datepicker-data').addClass('hidden');
1500			let isRange = datePickerDiv.hasClass('em-datepicker-range');
1501			let altOptions = {};
1502			if( datePickerDiv.attr('data-datepicker') ){
1503				altOptions = JSON.parse(datePickerDiv.attr('data-datepicker'));
1504				if( typeof altOptions !== 'object' ){
1505					altOptions = {};
1506				}
1507			}
1508			let otherOptions = {};
1509			if( datePickerDiv.find('script.datepicker-options').length > 0 ){
1510				otherOptions = JSON.parse( datePickerDiv.find('script.datepicker-options').text() );
1511				if( typeof altOptions !== 'object' ){
1512					otherOptions = {};
1513				}
1514			}
1515			let options = Object.assign({}, datepicker_options, altOptions, otherOptions); // clone, mainly shallow concern for 'mode'
1516			options.mode = isRange ? 'range' : 'single';
1517			if ( datePickerDiv.hasClass('em-datepicker-multiple') ) {
1518				options.mode = 'multiple';
1519			}
1520			if( isRange && 'onClose' in options ){
1521				options.onClose = [function( selectedDates, dateStr, instance ){
1522					if(selectedDates.length === 1){ // deal with single date choice and clicking out
1523						instance.setDate([selectedDates[0],selectedDates[0]], true);
1524					}
1525				}];
1526			}
1527			if( datePickerDiv.attr('data-separator') ) options.locale.rangeSeparator = datePickerDiv.attr('data-separator');
1528			if( datePickerDiv.attr('data-format') ) options.altFormat = datePickerDiv.attr('data-format');
1529			let FPs = datePickerDiv.find('.em-date-input');
1530			//if ( FPs.hasClass(flatpickr-input) ) return; // already initialized
1531			if ( FPs[0].tagName.toLowerCase() === 'input' ) {
1532				FPs.attr('type', 'text');
1533			} else {
1534				options.wrap = true;
1535				FPs.find('input[type="hidden"]').attr('type', 'text');
1536			}
1537			FPs.flatpickr(options);
1538		});
1539		em_setup_datepicker_dates( datePickerDivs );
1540		// fire trigger
1541		jQuery(document).triggerHandler('em_flatpickr_loaded', [wrap]);
1542		container.dispatchEvent( new CustomEvent('em_datepicker_loaded', { bubbles: true, detail: { container: wrap, datepickers: datePickerDivs } } ) );
1543	}
1544}
1545
1546function em_setup_datepicker_dates( container ) {
1547	let datePickerContainer = jQuery(container);
1548	let datePickerDivs = datePickerContainer.first().hasClass('em-datepicker') ? datePickerContainer : datePickerContainer.find('.em-datepicker, .em-datepicker-range') ;
1549	// add values to elements, done once all datepickers instantiated so we don't get errors with date range els in separate divs
1550	datePickerDivs.each( function(i,datePickerDiv) {
1551		datePickerDiv = jQuery(datePickerDiv);
1552		let FPs = datePickerDiv.find('.em-date-input');
1553		//if ( FPs.hasClass(flatpickr-input) ) return;
1554		let inputs = datePickerDiv.find('.em-datepicker-data input');
1555		inputs.attr('type', 'hidden'); // hide so not tabbable
1556		if( datePickerDiv.hasClass('em-datepicker-until') ){
1557			let start_fp = FPs.filter('.em-date-input-start')[0]._flatpickr;
1558			let end_fp;
1559			if( datePickerDiv.attr('data-until-id') ){
1560				end_fp = jQuery('#' + datePickerDiv.attr('data-until-id') + ' .em-date-input-end')[0]._flatpickr;
1561			}else{
1562				end_fp = FPs.filter('.em-date-input-end')[0]._flatpickr;
1563				if( inputs[1] && inputs[1].value ) {
1564					end_fp.setDate(inputs[1].value, false, 'Y-m-d');
1565				}
1566			}
1567			if( inputs[0] && inputs[0].value ){
1568				start_fp.setDate(inputs[0].value, false, 'Y-m-d');
1569				end_fp.set('minDate', inputs[0].value);
1570			}
1571			start_fp._inputData = inputs[0] ? [inputs[0]] : [];
1572			end_fp._inputData = inputs[1] ? [inputs[1]] : [];
1573		}else if( datePickerDiv.hasClass('em-datepicker-multiple') ){
1574			// handle multiple pre-loaded dates
1575			if( inputs[0] && inputs[0].value ){
1576				let datesArray = inputs[0].value.split(',');
1577				FPs[0]._flatpickr.setDate(datesArray, true, 'Y-m-d');
1578			}
1579			FPs[0]._flatpickr._inputData = [ inputs[0] ];
1580		}else{
1581			let dates = [];
1582			FPs[0]._flatpickr._inputData = [];
1583			inputs.each( function( i, input ){
1584				if( input.value ){
1585					dates.push(input.value);
1586					FPs[0]._flatpickr._inputData.push(input);
1587				}
1588			});
1589			FPs[0]._flatpickr.setDate(dates, false, 'Y-m-d');
1590		}
1591	});
1592}
1593
1594/**
1595 * Deregister the datepicker
1596 * @param wrap
1597 */
1598function em_unsetup_datepicker( wrap ) {
1599	wrap.querySelectorAll(".em-datepicker .em-date-input.flatpickr-input").forEach( function( el ){
1600		if( '_flatpickr' in el ){
1601			el._flatpickr.destroy();
1602		}
1603	});
1604}
1605
1606/**
1607 * Handle the remove button for each date selection pill
1608 */
1609document.addEventListener('click', function(e) {
1610	if ( !e.target.closest('.em-datepicker-dates .item:not(.clear-all) .remove') ) return;
1611
1612	e.preventDefault();
1613	const pill = e.target.closest('.item');
1614	const datesContainer = pill.closest('.em-datepicker-dates');
1615	const datepickerContainer = datesContainer.closest('.em-datepicker');
1616	const dateInput = datepickerContainer.querySelector('.em-date-input');
1617
1618	// Remove pill
1619	pill.remove();
1620
1621	// Rebuild dates array from remaining pills
1622	const newDates = [];
1623	datesContainer.querySelectorAll('.item:not(.clear-all)').forEach(item => {
1624		const dates = item.dataset.date.split(',');
1625		dates.forEach(date => newDates.push(date));
1626	});
1627
1628	// Update Flatpickr instance
1629	const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr;
1630	if (fp) fp.setDate(newDates, true, 'Y-m-d');
1631
1632	// Update hidden input
1633	const altInput = datepickerContainer.querySelector('.em-datepicker-data input');
1634	if (altInput) {
1635		altInput.value = newDates.join(',');
1636		altInput.dispatchEvent(new Event('change'));
1637	}
1638});
1639
1640/**
1641 * Handle the Clear All button
1642 */
1643document.addEventListener('click', function(e) {
1644	if ( !e.target.closest('.em-datepicker-dates .clear-all') ) return;
1645
1646	e.preventDefault();
1647	const datesContainer = e.target.closest('.em-datepicker-dates');
1648	const datepickerContainer = datesContainer.closest('.em-datepicker');
1649	const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr;
1650
1651	// Remove all pills
1652	datesContainer.querySelectorAll('.item:not(.clear-all)').forEach( item => item.remove() );
1653
1654	// Clear Flatpickr instance
1655	if (fp) fp.clear();
1656
1657	// Update hidden input
1658	const altInput = datepickerContainer.querySelector('.em-datepicker-data input');
1659	if (altInput) {
1660		altInput.value = '';
1661		altInput.dispatchEvent(new Event('change'));
1662	}
1663});
1664
1665
1666
1667function em_setup_timepicker( container ){
1668	wrap = jQuery(container);
1669	var timepicker_options = {
1670		step:15
1671	}
1672	timepicker_options.timeFormat = EM.show24hours == 1 ? 'G:i':'g:i A';
1673	jQuery(document).triggerHandler('em_timepicker_options', timepicker_options);
1674	wrap.find(".em-time-input").em_timepicker(timepicker_options).each( function(i, el){
1675		this.dataset.seconds = this.value ? jQuery(this).em_timepicker('getSecondsFromMidnight') : '';
1676	});
1677
1678	/**
1679	 * A function that retargets an the change event to the .em-time-range enclosing div whilst maintinaing the originally triggered target.
1680	 * This is done because the em_timepicker short-circuits the bubbling.
1681	 *
1682	 * @param {Event} e - The original event to be retargeted.
1683	 */
1684	let retargetEvent = function(e) {
1685		e.stopPropagation();
1686		const customEvent = new CustomEvent('change', {
1687			bubbles: true,
1688			cancelable: true,
1689			detail: { target: e.target }
1690		});
1691
1692		// Override the target getter to return the original element
1693		Object.defineProperty(customEvent, 'target', {
1694			configurable: true,
1695			get: () => e.target,
1696		});
1697		e.target.closest('.em-time-range').dispatchEvent( customEvent );
1698	};
1699
1700	// Keep the duration between the two inputs.
1701	wrap.find(".em-time-range input.em-time-start").each( function(i, el){
1702		var time = jQuery(el);
1703		time.data('oldTime', time.em_timepicker('getSecondsFromMidnight'));
1704	}).on('change', function( e ) {
1705		var start = jQuery(this);
1706		var wrapper = start.closest('.em-time-range');
1707		var end = wrapper.find('.em-time-end').first();
1708		if ( end.val() ) { // Only update when second input has a value.
1709			// Calculate duration.
1710			var oldTime = start.data('oldTime');
1711			var duration = (end.em_timepicker('getSecondsFromMidnight') - oldTime) * 1000;
1712			var time = start.em_timepicker('getSecondsFromMidnight');
1713			if(  this.value && end.em_timepicker('getSecondsFromMidnight') >= oldTime ){
1714				// Calculate and update the time in the second input.
1715				end.em_timepicker('setTime', new Date(start.em_timepicker('getTime').getTime() + duration));
1716			}
1717			start.data('oldTime', time);
1718		}
1719		if ( start.val() || end.val() ) {
1720			wrapper.find('.em-time-all-day').prop('checked', false).prop('indeterminate', false);
1721		}
1722		this.dataset.seconds = start.val() ? start.em_timepicker('getSecondsFromMidnight') : '';
1723		retargetEvent(e);
1724	});
1725	// Validate.
1726	container.querySelectorAll('.em-time-range').forEach( el => el.addEventListener('change', function (e) {
1727		if ( e.target.matches('input.em-time-end') ) {
1728			let end = jQuery(e.target);
1729			e.target.dataset.seconds = end.val() ? end.em_timepicker('getSecondsFromMidnight') : '';
1730			let start = end.prevAll('.em-time-start');
1731			let wrapper = e.target.closest('.event-form-when, .em-time-range');
1732			let start_date_element = wrapper.querySelector('.em-date-end');
1733			let end_date_element = wrapper.querySelector('.em-date-start');
1734			let start_date = start_date_element ? start_date_element.value : '';
1735			let end_date = end_date_element ? end_date_element.value : '';
1736			if ( start.val() ) {
1737				let hasError = start.em_timepicker('getTime') > end.em_timepicker('getTime') && (!end_date || start_date === end_date);
1738				e.target.classList.toggle('error', hasError);
1739			}
1740			if (end_date_element) {
1741				wrapper.querySelectorAll('.em-time-all-day').forEach(function (checkbox) {
1742					checkbox.checked = false;
1743					checkbox.indeterminate = false;
1744				});
1745			}
1746		} else if ( e.target.matches('.em-date-end') ) {
1747			jQuery(e.target.closest('.event-form-when')).find('.em-time-end').trigger('change');
1748		} else if ( e.target.matches('input.em-time-all-day') ) {
1749			e.currentTarget.querySelectorAll('.em-time-input').forEach(function (input) {
1750				input.readOnly = e.target.checked;
1751			});
1752			if ( e.target.checked ) {
1753				// set 12am and 11:59pm for start/end times
1754				e.currentTarget.querySelectorAll('.em-time-start').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 00:00:00') ) );
1755				e.currentTarget.querySelectorAll('.em-time-end').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 23:59:59') ) );
1756			}
1757		}
1758	}) );
1759	// listen to and dispatch the event
1760	wrap.find(".em-time-range input.em-time-end").on('change', retargetEvent );
1761}
1762
1763function em_unsetup_timepicker( container ) {
1764	jQuery(container).find('.em-time-range input.em-time-end, .em-time-range input.em-time-start').unbind(['click','focus','change']); //clear all timepickers - consequently, also other click/blur/change events, recreate the further down
1765}
1766
1767let em_close_other_selectized = function(){
1768	// find all other selectized items and close them
1769	let control = this.classList.contains('selectize-control') ? this.closest('.em-selectize.selectize-control') : this;
1770	document.querySelectorAll('.em-selectize.dropdown-active').forEach( function( el ){
1771		if( el !== control && 'selectize' in el.previousElementSibling) {
1772			el.previousElementSibling.selectize.close();
1773		}
1774	});
1775}
1776
1777document.addEventListener('events_manager_js_loaded', function(){
1778	EM_Selectize.define('multidropdown', function( options ) {
1779		if( !this.$input.hasClass('multidropdown') ) return;
1780		let s = this;
1781		let s_setup = s.setup;
1782		let s_refreshOptions = s.refreshOptions;
1783		let s_open = s.open;
1784		let s_close = s.close;
1785		let placeholder;
1786		let placeholder_text
1787		let placeholder_default;
1788		let placeholder_label;
1789		let counter;
1790		let isClosing = false;
1791		this.changeFunction = function() {
1792			let items = s.getValue();
1793			let selected_text = this.$input.attr('data-selected-text') ? this.$input.attr('data-selected-text') : '%d Selected';
1794			counter.children('span.selected-text').text(selected_text.replace('%d', items.length));
1795			if( items.length > 0 ) {
1796				counter.removeClass('hidden');
1797				placeholder_text.text( placeholder_label );
1798				s.$control_input.attr('placeholder', s.$input.attr('placeholder'));
1799			} else {
1800				counter.addClass('hidden');
1801				placeholder_text.text( placeholder_default );
1802			}
1803		}
1804		this.setup = function() {
1805			s_setup.apply(s);
1806			s.isDropdownClosingPlaceholder = false;
1807			// add section to top of selection to show the dropdown text
1808			placeholder = jQuery('<div class="em-selectize-placeholder"></div>').prependTo(s.$wrapper);
1809			let clear_text = this.$input.attr('data-clear-text') ? this.$input.attr('data-clear-text') : 'Clear Selection';
1810			counter = jQuery('<span class="placeholder-count hidden"><a href="#" class="remove" tabindex="-1">X</a><span class="selected-text"></span><span class="clear-selection">' + clear_text + '</span></div>').prependTo(placeholder);
1811			placeholder_text = jQuery('<span class="placeholder-text"></span>').appendTo(placeholder);
1812			placeholder_default = s.$input.attr('data-default') ? s.$input.attr('data-default') : s.$input.attr('placeholder');
1813			placeholder_label = s.$input.attr('data-label') ? s.$input.attr('data-label') : s.$input.attr('placeholder');
1814			placeholder_text.text( placeholder_default );
1815			s.$dropdown.prepend(s.$control_input.parent());
1816			s.on('dropdown_close', function() {
1817				s.$wrapper.removeClass('dropdown-active');
1818			});
1819			s.on('dropdown_open', function() {
1820				s.$wrapper.addClass('dropdown-active');
1821				s.$control_input.val('');
1822			});
1823			s.on('change', this.changeFunction);
1824			placeholder.on('focus blur click', function (e) {
1825				// only if we're clicking on the placeholder
1826				if( this.matches('.em-selectize-placeholder') ) {
1827					if ( !s.isOpen && e.type !== 'blur' ){
1828						s.open();
1829					} else if ( s.isOpen && e.type !== 'focus' ) {
1830						s.close();
1831					}
1832				}
1833			}).on('focus blur click mousedown mouseup', function( e ){
1834				if( this.matches('.em-selectize-placeholder') ) {
1835					// stope selectize doing anything to our own open/close actions
1836					e.stopPropagation();
1837					e.preventDefault();
1838					if( e.type === 'click' ) {
1839						em_close_other_selectized.call( this.closest('.selectize-control') );
1840						if ( s.isOpen && s.$control_input.val() && !this.matches('.placeholder-count') && !this.closest('.placeholder-count') ) {
1841							isClosing = true;
1842							s.close();
1843						}
1844					} else {
1845						isClosing = false;
1846					}
1847					return false;
1848				}
1849			});
1850			counter.on( 'click' , function( e ){
1851				e.preventDefault();
1852				e.stopPropagation();
1853				s.clear();
1854				if( s.isOpen ) s.refreshOptions();
1855			});
1856			this.changeFunction();
1857		}
1858
1859		// prevent dropdown from closing when no options are found, because the search input shows within the dropdown in multidropdown
1860		this.refreshOptions = function ( ...args ) {
1861			s_refreshOptions.apply(s, args);
1862			if ( !this.hasOptions && this.lastQuery ) {
1863				// intervene on closing only if not in a closing process caused by our own listeners
1864				if( isClosing === false ) {
1865					this.$wrapper.addClass("dropdown-active");
1866					s.isOpen = true;
1867				}
1868				this.$wrapper.addClass("no-options");
1869				isClosing = false;
1870			} else {
1871				this.$wrapper.removeClass("no-options");
1872			}
1873		};
1874	});
1875});
1876
1877function em_setup_selectize( container_element ){
1878	container = jQuery(container_element); // in case we were given a dom object
1879
1880	container.find('.em-selectize.selectize-control').on( 'click', em_close_other_selectized );
1881
1882	let optionRender = function (item, escape) {
1883		let html = '<div class="option"';
1884		if( 'data' in item ){
1885			// any key/value object pairs wrapped in a 'data' key within JSON object in the data-data attribute is added automatically as a data-key="value" attribute
1886			Object.entries(item.data).forEach( function( item_data ){
1887				html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"';
1888			});
1889		}
1890		html +=	'>';
1891		if( this.$input.hasClass('checkboxes') ){
1892			html += item.text.replace(/^(\s+)?/i, '$1<span></span> ');
1893		}else{
1894			html += item.text;
1895		}
1896		html += '</div>';
1897		return html;
1898	};
1899
1900	// Selectize General
1901	container.find('select:not([multiple]).em-selectize, .em-selectize select:not([multiple])').em_selectize({
1902		selectOnTab : false,
1903		render: {
1904			option: optionRender,
1905		},
1906	}).on('change', ( e ) => {
1907		e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) )
1908	});
1909	container.find('select[multiple].em-selectize, .em-selectize select[multiple]').em_selectize({
1910		selectOnTab : false,
1911		hideSelected : false,
1912		plugins: ["remove_button", 'click2deselect','multidropdown'],
1913		diacritics : true,
1914		render: {
1915			item: function (item, escape) {
1916				return '<div class="item"><span>' + item.text.replace(/^\s+/i, '') + '</span></div>';
1917			},
1918			option : optionRender,
1919			optgroup : function (item, escape) {
1920				let html = '<div class="optgroup" data-group="' + escape(item.label) + '"';
1921				if( 'data' in item ){
1922					// any key/value object pairs wrapped in a 'data' key within JSON object in the data-data attribute is added automatically as a data-key="value" attribute
1923					Object.entries(item.data).forEach( function( item_data ){
1924						html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"';
1925					});
1926				}
1927				html +=	'>';
1928				return html + item.html + '</div>';
1929			}
1930
1931		},
1932	}).on('change', ( e ) => {
1933		e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) )
1934	});
1935	container.find('.em-selectize:not(.always-open)').each( function(){
1936		if( 'selectize' in this ){
1937			let s = this.selectize;
1938			this.selectize.$wrapper.on('keydown', function(e) {
1939				if( e.keyCode === 9 ) {
1940					s.blur();
1941				}
1942			});
1943		}
1944	});
1945	container.find('.em-selectize.always-open').each( function(){
1946		//extra behaviour for selectize "always open mode"
1947		if( 'selectize' in this ){
1948			let s = this.selectize;
1949			s.open();
1950			s.advanceSelection = function(){}; // remove odd item shuffling
1951			s.setActiveItem = function(){}; // remove odd item shuffling
1952			// add event listener to fix remove button issues due to above hacks
1953			this.selectize.$control.on('click', '.remove', function(e) {
1954				if ( s.isLocked  ) return;
1955				var $item = jQuery(e.currentTarget).parent();
1956				s.removeItem($item.attr('data-value'));
1957				s.refreshOptions();
1958				return false;
1959			});
1960		}
1961	});
1962
1963	// Sortables - selectize and sorting columns, usually in list tables
1964	container.find('.em-list-table-modal .em-list-table-cols').each( function(){
1965		let parent = jQuery(this);
1966		let sortables = jQuery(this).find('.em-list-table-cols-sortable');
1967		parent.find('.em-selectize.always-open').each( function() {
1968			//extra behaviour for selectize column picker
1969			if ('selectize' in this) {
1970				let selectize = this.selectize;
1971				// add event listener to fix remove button issues due to above hacks
1972				selectize.on('item_add', function (value, item) {
1973					let col = item.clone();
1974					let option  = selectize.getOption(value);
1975					let type = option.attr('data-type');
1976					col.appendTo(sortables);
1977					col.attr('data-type', type);
1978					if( option.attr('data-header') ) {
1979						col.children('span:first-child').text( option.attr('data-header') );
1980					}
1981					jQuery('<input type="hidden" name="cols[' + value + ']" value="1">').appendTo(col);
1982				});
1983				selectize.on('item_remove', function (value) {
1984					parent.find('.item[data-value="'+ value +'"]').remove();
1985				});
1986				parent.on('click', '.em-list-table-cols-selected .item .remove', function(){
1987					let value = this.parentElement.getAttribute('data-value');
1988					selectize.removeItem(value, true);
1989				});
1990			}
1991		});
1992	});
1993}
1994
1995function em_unsetup_selectize( container ) {
1996	container.querySelectorAll('.em-selectize').forEach( function( el ) {
1997		//extra behaviour for selectize "always open mode"
1998		if ( 'selectize' in el ) {
1999			el.selectize.destroy();
2000		}
2001	});
2002}
2003
2004function em_setup_tippy( container_element ){
2005	let container = jQuery(container_element);
2006	var tooltip_vars = {
2007		theme : 'light-border',
2008		appendTo : 'parent',
2009		content(reference) {
2010			if( reference.dataset.content ){
2011				try {
2012					let content = container[0].querySelector(reference.dataset.content);
2013					if (content) {
2014						content.classList.remove('hidden');
2015						return content;
2016					}
2017				} catch ( error ) {
2018					console.log('Invlid tooltip selector in %o : %o', reference, error);
2019				}
2020			};
2021			return reference.getAttribute('aria-label') ?? reference.title ?? '';
2022		},
2023		'touch' : ['hold', 300],
2024		allowHTML : true,
2025	};
2026	jQuery(document).trigger('em-tippy-vars',[tooltip_vars, container]);
2027	container.find('.em-tooltip').each( ( i, tooltip ) => tippy( tooltip, tooltip_vars ) );
2028	// Set up Tippy DDMs
2029	let tippy_ddm_options = {
2030		theme : 'light-border',
2031		arrow : false,
2032		allowHTML : true,
2033		interactive : true,
2034		trigger : 'manual',
2035		placement : 'bottom',
2036		zIndex : 1000000,
2037		touch : true,
2038	};
2039	jQuery(document).trigger('em-tippy-ddm-vars',[tippy_ddm_options, container]);
2040	container.find('.em-tooltip-ddm').each( function(){
2041		let ddm_content, ddm_content_sibling;
2042		if( this.getAttribute('data-content') ){
2043			ddm_content = document.getElementById(this.getAttribute('data-content'))
2044			ddm_content_sibling = ddm_content.previousElementSibling;
2045		}else{
2046			ddm_content = this.nextElementSibling;
2047			ddm_content_sibling = ddm_content.previousElementSibling;
2048		}
2049		let tippy_content = document.createElement('div');
2050		// allow for custom width
2051		let button_width = this.getAttribute('data-button-width');
2052		if( button_width ){
2053			if( button_width == 'match' ){
2054				tippy_ddm_options.maxWidth = this.clientWidth;
2055				ddm_content.style.width = this.clientWidth + 'px';
2056			}else{
2057				tippy_ddm_options.maxWidth = this.getAttribute('data-button-width');
2058			}
2059		}
2060		tippy_ddm_options.content = tippy_content;
2061		let tippy_ddm = tippy(this, tippy_ddm_options);
2062		tippy_ddm.props.distance = 50;
2063		tippy_ddm.setProps({
2064			onShow(instance){
2065				if( instance.reference.getAttribute('data-tooltip-class') ) {
2066					instance.popper.classList.add( instance.reference.getAttribute('data-tooltip-class') );
2067				}
2068				instance.popper.classList.add( 'em-tooltip-ddm-display' );
2069				tippy_content.append(ddm_content);
2070				ddm_content.classList.remove('em-tooltip-ddm-content');
2071			},
2072			onShown(instance){ // keyboard support
2073				ddm_content.firstElementChild.focus();
2074			},
2075			onHidden(instance){
2076				if( ddm_content.previousElementSibling !== ddm_content_sibling ) {
2077					ddm_content_sibling.after(ddm_content);
2078					ddm_content.classList.add('em-tooltip-ddm-content');
2079				}
2080			},
2081		});
2082		let tippy_listener = function(e){
2083			if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
2084			e.preventDefault();
2085			e.stopPropagation();
2086			this._tippy.show();
2087		}
2088		this.addEventListener('click', tippy_listener);
2089		this.addEventListener('keydown', tippy_listener);
2090		tippy_content.addEventListener('blur', function(){
2091			tippy_content.hide();
2092		});
2093		tippy_content.addEventListener('mouseover', function(){
2094			ddm_content.firstElementChild.blur();
2095		});
2096	});
2097}
2098
2099function em_unsetup_tippy( container ) {
2100	container.querySelectorAll('.em-tooltip-ddm').forEach( function( el ){
2101		if ( '_tippy' in el ) {
2102			el._tippy.destroy();
2103		}
2104	});
2105}
2106
2107/*
2108 * MAP FUNCTIONS
2109 */
2110var em_maps_loaded = false;
2111var maps = {};
2112var maps_markers = {};
2113var maps_infoWindows = {};
2114var content
2115//loads maps script if not already loaded and executes EM maps script
2116function em_maps_load(){
2117	if( !em_maps_loaded ){
2118		if ( jQuery('script#google-maps').length == 0 && ( typeof google !== 'object' || typeof google.maps !== 'object' ) ){
2119			let script = document.createElement("script");
2120			script.type = "text/javascript";
2121			script.id = "google-maps";
2122			script.async = true;
2123			let proto = (EM.is_ssl) ? 'https:' : 'http:';
2124			if( typeof EM.google_maps_api !== 'undefined' ){
2125				script.src = proto + '//maps.google.com/maps/api/js?loading=async&v=quarterly&libraries=places&callback=em_maps&key='+EM.google_maps_api;
2126			}else{
2127				script.src = proto + '//maps.google.com/maps/api/js?loading=async&v=quarterly&libraries=places&callback=em_maps';
2128			}
2129			document.body.appendChild(script);
2130		}else if( typeof google === 'object' && typeof google.maps === 'object' && !em_maps_loaded ){
2131			em_maps();
2132		}else if( jQuery('script#google-maps').length > 0 ){
2133			jQuery(window).load(function(){ if( !em_maps_loaded ) em_maps(); }); //google isn't loaded so wait for page to load resources
2134		}
2135	}
2136}
2137jQuery(document).on('em_view_loaded_map', function( e, view, form ){
2138	if( !em_maps_loaded ){
2139		em_maps_load();
2140	}else{
2141		let map = view.find('div.em-locations-map');
2142		em_maps_load_locations( map[0] );
2143	}
2144});
2145//re-usable function to load global location maps
2146async function em_maps_load_locations( element ){
2147	const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
2148	let el = element;
2149	let map_id = el.getAttribute('id').replace('em-locations-map-','');
2150	let em_data;
2151	if ( document.getElementById('em-locations-map-coords-'+map_id) ) {
2152		em_data = JSON.parse( document.getElementById('em-locations-map-coords-'+map_id).text );
2153	} else {
2154		let coords_data = el.parentElement.querySelector('.em-locations-map-coords');
2155		if ( coords_data ) {
2156			em_data = JSON.parse( coords_data.text );
2157		} else {
2158			em_data = {};
2159		}
2160	}
2161	jQuery.getJSON(document.URL, em_data , function( data ) {
2162		if( data.length > 0 ){
2163			//define default options and allow option for extension via event triggers
2164			let map_options = {
2165				mapTypeId: google.maps.MapTypeId.ROADMAP,
2166				mapId: 'em-locations-map-' + map_id
2167			};
2168			if( typeof EM.google_map_id_styles == 'object' && typeof EM.google_map_id_styles[map_id] !== 'undefined' ){ console.log(EM.google_map_id_styles[map_id]); map_options.styles = EM.google_map_id_styles[map_id]; }
2169			else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
2170			jQuery(document).triggerHandler('em_maps_locations_map_options', map_options);
2171			let marker_options = {};
2172			jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
2173
2174			maps[map_id] = new google.maps.Map(el, map_options);
2175			maps_markers[map_id] = [];
2176
2177			let bounds = new google.maps.LatLngBounds();
2178
2179			jQuery.map( data, function( location, i ){
2180				if( !(location.location_latitude == 0 && location.location_longitude == 0) ){
2181					let latitude = parseFloat( location.location_latitude );
2182					let longitude = parseFloat( location.location_longitude );
2183					let location_position = new google.maps.LatLng( latitude, longitude );
2184					//extend the default marker options
2185					jQuery.extend(marker_options, {
2186						position: location_position,
2187						map: maps[map_id]
2188					})
2189					let marker = new AdvancedMarkerElement(marker_options);
2190					maps_markers[map_id] = marker;
2191					em_map_InfoWindow ( location.location_name, location.location_balloon, marker );
2192					//extend bounds
2193					bounds.extend(new google.maps.LatLng(latitude,longitude))
2194				}
2195			});
2196			// Zoom in to the bounds
2197			maps[map_id].fitBounds(bounds);
2198
2199			//Call a hook if exists
2200			if( jQuery ) {
2201				jQuery(document).triggerHandler('em_maps_locations_hook', [maps[map_id], data, map_id, maps_markers[map_id]]);
2202			}
2203			document.dispatchEvent( new CustomEvent('em_maps_locations_hook', {
2204				detail: {
2205					map : maps[map_id],
2206					data : data,
2207					id : map_id,
2208					markers : maps_markers[map_id],
2209					el : el,
2210				},
2211				cancellable : true,
2212			}));
2213		} else {
2214			el.firstElementChild.innerHTML = 'No locations found';
2215			if( jQuery ) {
2216				jQuery(document).triggerHandler('em_maps_locations_hook_not_found', [ jQuery(el) ]);
2217			}
2218			document.dispatchEvent( new CustomEvent('em_maps_locations_hook_not_found', {
2219				detail: {
2220					id : map_id,
2221					el : el
2222				},
2223				cancellable : true,
2224			}));
2225		}
2226	});
2227}
2228async function em_maps_load_location(el){
2229	el = jQuery(el);
2230	const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
2231	let mapId = el.attr('id');
2232	let map_id = mapId.replace('em-location-map-','');
2233	let map_title = el.attr('title');
2234	let em_LatLng = new google.maps.LatLng( jQuery('#em-location-map-coords-'+map_id+' .lat').text(), jQuery('#em-location-map-coords-'+map_id+' .lng').text());
2235	//extend map and markers via event triggers
2236	let map_options = {
2237		zoom: 14,
2238		center: em_LatLng,
2239		mapTypeId: google.maps.MapTypeId.ROADMAP,
2240		mapTypeControl: false,
2241		gestureHandling: 'cooperative',
2242		mapId: mapId,
2243	};
2244	if( typeof EM.google_map_id_styles == 'object' && typeof EM.google_map_id_styles[map_id] !== 'undefined' ){ console.log(EM.google_map_id_styles[map_id]); map_options.styles = EM.google_map_id_styles[map_id]; }
2245	else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
2246	jQuery(document).triggerHandler('em_maps_location_map_options', map_options);
2247	maps[map_id] = new google.maps.Map( document.getElementById('em-location-map-'+map_id), map_options);
2248	let marker_options = {
2249		position: em_LatLng,
2250		map: maps[map_id],
2251		title: map_title,
2252	};
2253	jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
2254	let marker = new AdvancedMarkerElement(marker_options);
2255	maps_markers[map_id] = marker;
2256	let content = jQuery('#em-location-map-info-'+map_id + ' .em-map-balloon-content').get(0);
2257	em_map_InfoWindow( map_title, content, marker, true );
2258
2259	//JS Hook for handling map after instantiation
2260	//Example hook, which you can add elsewhere in your theme's JS - jQuery(document).on('em_maps_location_hook', function(){ alert('hi');} );
2261	jQuery(document).triggerHandler('em_maps_location_hook', [maps[map_id], infoWindow, maps_markers[map_id], map_id]);
2262	//map resize listener
2263	jQuery(window).on('resize', function(e) {
2264		google.maps.event.trigger(maps[map_id], "resize");
2265		maps[map_id].setCenter(maps_markers[map_id].position);
2266		maps[map_id].panBy(40,-70);
2267	});
2268}
2269jQuery(document).on('em_search_ajax', function(e, vars, wrapper){
2270	if( em_maps_loaded ){
2271		wrapper.find('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } );
2272		wrapper.find('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); });
2273	}
2274});
2275//Load single maps (each map is treated as a seperate map).
2276async function em_maps() {
2277	/**
2278	 * InfoWindow object - Location info bubble on map, showing the current map
2279	 */
2280	let infoWindow;
2281	//Find all the maps on this page and load them
2282	jQuery('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } );
2283	jQuery('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); } );
2284
2285	//Location stuff - only needed if inputs for location exist
2286	if( jQuery('select#location-select-id, input#location-address').length > 0 ){
2287		const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
2288		let map
2289		let marker;
2290
2291		// refresh map with current location info
2292		let refresh_map_location = function(){
2293			let location_latitude = jQuery('#location-latitude').val();
2294			let location_longitude = jQuery('#location-longitude').val();
2295			let hasCoords = location_latitude != 0 || location_longitude != 0;
2296			if( hasCoords ){
2297				let position = new google.maps.LatLng(location_latitude, location_longitude); //the location coords
2298				marker.position = position;
2299				let mapTitle = (jQuery('input#location-name').length > 0) ? jQuery('input#location-name').val():jQuery('input#title').val();
2300				mapTitle = em_esc_attr(mapTitle);
2301				marker.title = mapTitle ;
2302				marker.gmpDraggable = true;
2303				jQuery('#em-map').show();
2304				jQuery('#em-map-404').hide();
2305				google.maps.event.trigger(map, 'resize');
2306				map.setCenter(position);
2307				map.panBy(40,-55);
2308				infoWindow?.close();
2309				infoWindow = em_map_InfoWindow( mapTitle, em_esc_attr(jQuery('#location-address').val()) + '<br>' + em_esc_attr(jQuery('#location-town').val()), marker, true );
2310				jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]);
2311			} else {
2312				jQuery('#em-map').hide();
2313				jQuery('#em-map-404').show();
2314			}
2315		};
2316
2317		// Add listeners for changes to address or location ID
2318
2319		// get or refresh the map by location id
2320		let get_map_by_id = function(id){
2321			if(jQuery('#em-map').length > 0){
2322				jQuery('#em-map-404 .em-loading-maps').show();
2323				jQuery.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){
2324					let hasCoords = data.location_latitude != 0 && data.location_longitude != 0;
2325					if( hasCoords ){
2326						loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude);
2327						marker.position = loc_latlng;
2328						marker.title = data.location_name;
2329						marker.gmpDraggable = false;
2330						jQuery('#em-map').show();
2331						jQuery('#em-map-404').hide();
2332						jQuery('#em-map-404 .em-loading-maps').hide();
2333						map.setCenter(loc_latlng);
2334						map.panBy(40,-55);
2335						infoWindow?.close();
2336						infoWindow = em_map_InfoWindow( data.location_name, data.location_balloon, marker, true );
2337						google.maps.event.trigger(map, 'resize');
2338						jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]);
2339					}else{
2340						jQuery('#em-map').hide();
2341						jQuery('#em-map-404').show();
2342						jQuery('#em-map-404 .em-loading-maps').hide();
2343					}
2344				});
2345			}
2346		};
2347		jQuery('#location-select-id, input#location-id').on('change', function() { get_map_by_id( jQuery(this).val() ); } );
2348
2349		// detect changes to address fields and build a coordinate from geocoding
2350		jQuery('#location-name, #location-town, #location-address, #location-state, #location-postcode, #location-country').on('change', function(){
2351			//build address
2352			if( jQuery(this).prop('readonly') === true ) return;
2353			let addresses = [ jQuery('#location-address').val(), jQuery('#location-town').val(), jQuery('#location-state').val(), jQuery('#location-postcode').val() ];
2354			let address = '';
2355			jQuery.each( addresses, function(i, val){
2356				if( val != '' ){
2357					address = ( address == '' ) ? address+val:address+', '+val;
2358				}
2359			});
2360			if( address == '' ){ //in case only name is entered, no address
2361				jQuery('#em-map').hide();
2362				jQuery('#em-map-404').show();
2363				return false;
2364			}
2365			//do country last, as it's using the text version
2366			if( jQuery('#location-country option:selected').val() != 0 ){
2367				address = ( address == '' ) ? address+jQuery('#location-country option:selected').text():address+', '+jQuery('#location-country option:selected').text();
2368			}
2369			//add working indcator whilst we search
2370			jQuery('#em-map-404 .em-loading-maps').show();
2371			//search!
2372			if( address != '' && jQuery('#em-map').length > 0 ){
2373				let geocoder = new google.maps.Geocoder();
2374				geocoder.geocode( { 'address': address }, function(results, status) {
2375					if (status == google.maps.GeocoderStatus.OK) {
2376						jQuery('#location-latitude').val(results[0].geometry.location.lat());
2377						jQuery('#location-longitude').val(results[0].geometry.location.lng());
2378					}
2379					refresh_map_location();
2380				});
2381			}
2382		});
2383		
2384		// Check if we are on a location editing page, and if address was previously entered, if so we check location coords
2385		let location_latitude = jQuery('#location-latitude').val();
2386		let location_longitude = jQuery('#location-longitude').val();
2387		let hasCoords = location_latitude != 0 || location_longitude != 0;
2388		if ( !hasCoords  ) {
2389			// check if there's any address items that were added previously
2390			if ( document.getElementById('location-address')?.value != '' && (document.getElementById('location-address')?.value != '' || document.getElementById('location-town')?.value != '' || document.getElementById('location-state')?.value != '' || document.getElementById('location-postcode')?.value != '' ) ) {
2391				// trigger a change so we reload the address and coords
2392				jQuery('#location-address').trigger('change');
2393				if ( 'google_maps_resave_location' in EM ) {
2394					alert(EM.google_maps_resave_location);
2395				}
2396			}
2397		}
2398
2399		// Load map initially
2400		if(jQuery('#em-map').length > 0){
2401			let em_LatLng = new google.maps.LatLng(0, 0);
2402			let map_options = {
2403				zoom: 14,
2404				center: em_LatLng,
2405				mapTypeId: google.maps.MapTypeId.ROADMAP,
2406				mapTypeControl: false,
2407				gestureHandling: 'cooperative',
2408				mapId: 'em-map',
2409			};
2410			if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
2411			map = new google.maps.Map( document.getElementById('em-map'), map_options);
2412			marker = new AdvancedMarkerElement({
2413				position: em_LatLng,
2414				map: map,
2415				gmpDraggable: true,
2416			});
2417			google.maps.event.addListener(marker, 'dragend', function() {
2418				let position = marker.position;
2419				jQuery('#location-latitude').val(position.lat);
2420				jQuery('#location-longitude').val(position.lng);
2421				map.setCenter(position);
2422				map.panBy(40,-55);
2423			});
2424			if( jQuery('#location-select-id').length > 0 ){
2425				jQuery('#location-select-id').trigger('change');
2426			}else{
2427				refresh_map_location();
2428			}
2429			jQuery(document).triggerHandler('em_map_loaded', [map, infoWindow, marker]);
2430		}
2431		//map resize listener
2432		jQuery(window).on('resize', function(e) {
2433			google.maps.event.trigger(map, "resize");
2434			map.setCenter(marker.position);
2435			map.panBy(40,-55);
2436		});
2437	}
2438	em_maps_loaded = true; //maps have been loaded
2439	jQuery(document).triggerHandler('em_maps_loaded');
2440}
2441
2442function em_map_InfoWindow( title, content, marker, open = false ) {
2443	let title_content = document.createElement("div");
2444	let map_id = marker.map.mapId.replace(/em-location-maps?-/,'');
2445	title_content.className = "em-map-balloon-title";
2446	title_content.innerHTML = title;
2447	if ( typeof content === 'string' ) {
2448		let wrapper = document.createElement("div");
2449		wrapper.innerHTML = content;
2450		content = wrapper;
2451	}
2452	// wrap content in div with class if not already done
2453	content.classList.add('em-map-balloon-content');
2454	let infoWindow = new google.maps.InfoWindow( {
2455		content: content,
2456		headerContent: title_content,
2457	} );
2458	infoWindow.addListener('domready', function() {
2459		marker.map.panBy(40,-70);
2460	});
2461	if ( !( map_id in maps_infoWindows ) ) {
2462		maps_infoWindows[ map_id ] = [];
2463	}
2464	maps_infoWindows[ map_id ].push( infoWindow );
2465	let open_options = {
2466		shouldFocus: false,
2467		anchor: marker,
2468		map: marker.map,
2469	};
2470	marker.addListener("gmp-click", () => {
2471		maps_infoWindows[ map_id ]?.forEach( ( infoWindow ) => infoWindow.close() );
2472		infoWindow.open( open_options );
2473	});
2474	if ( open ) {
2475		maps_infoWindows[ map_id ]?.forEach( ( infoWindow ) => infoWindow.close() );
2476		infoWindow.open( open_options );
2477	}
2478	return infoWindow;
2479}
2480
2481/**
2482 * @deprecated use em_map_infowindow instead
2483 * @param marker
2484 * @param message
2485 * @param map
2486 */
2487function em_map_infobox(marker, message, map) {
2488	let iw = new google.maps.InfoWindow({ content: message });
2489	google.maps.event.addListener(marker, 'click', function() {
2490		if( infoWindow ) infoWindow.close();
2491		infoWindow = iw;
2492		iw.open(map,marker);
2493	});
2494}
2495
2496function em_esc_attr( str ){
2497	if( typeof str !== 'string' ) return '';
2498	return str.replace(/</gi,'&lt;').replace(/>/gi,'&gt;');
2499}
2500
2501// Modal Open/Close
2502let openModal = function( modal, onOpen = null ){
2503	modal = jQuery(modal);
2504	modal.appendTo(document.body);
2505	setTimeout( function(){
2506		modal.addClass('active').find('.em-modal-popup').addClass('active');
2507		jQuery(document).triggerHandler('em_modal_open', [modal]);
2508		document.dispatchEvent( new CustomEvent('em_modal_open', { detail: { modal: modal } }) );
2509		if( typeof onOpen === 'function' ){
2510			setTimeout( onOpen, 200); // timeout allows css transition
2511		}
2512	}, 100); // timeout allows css transition
2513};
2514let closeModal = function( modal, onClose = null ){
2515	modal = jQuery(modal);
2516	modal.removeClass('active').find('.em-modal-popup').removeClass('active');
2517	setTimeout( function(){
2518		if( modal.attr('data-parent') ){
2519			let wrapper = jQuery('#' + modal.attr('data-parent') );
2520			if( wrapper.length ) {
2521				modal.appendTo(wrapper);
2522			}
2523		}
2524		modal[0].dispatchEvent( new CustomEvent('em_modal_close', { bubbles: true, detail: { modal: modal } } ) );
2525		if( typeof onClose === 'function' ){
2526			onClose();
2527		}
2528	}, 500); // timeout allows css transition
2529}
2530jQuery(document).on('click', '.em-modal .em-close-modal', function(e){
2531	let modal = jQuery(this).closest('.em-modal');
2532	if( !modal.attr('data-prevent-close') ) {
2533		closeModal(modal);
2534	}
2535});
2536jQuery(document).on('click', '.em-modal', function(e){
2537	var target = jQuery(e.target);
2538	if( target.hasClass('em-modal') ) {
2539		let modal = jQuery(this);
2540		if( !modal.attr('data-prevent-close') ){
2541			closeModal(modal);
2542		}
2543	}
2544});
2545
2546function EM_Alert( content ){
2547	// find the alert modal, create if not
2548	let modal = document.getElementById('em-alert-modal');
2549	if( modal === null ){
2550		modal = document.createElement('div');
2551		modal.setAttribute('class', "em pixelbones em-modal");
2552		modal.id = 'em-alert-modal';
2553		modal.innerHTML = '<div class="em-modal-popup"><header><a class="em-close-modal"></a><div class="em-modal-title">&nbsp;</div></header><div class="em-modal-content" id="em-alert-modal-content"></div></div>';
2554		document.body.append(modal);
2555	}
2556	document.getElementById('em-alert-modal-content').innerHTML = content;
2557	openModal(modal);
2558};
2559
2560//Events Search
2561jQuery(document).ready( function($){
2562	// handle the views tip/ddm
2563	let views_ddm_options = {
2564		theme : 'light-border',
2565		allowHTML : true,
2566		interactive : true,
2567		trigger : 'manual',
2568		placement : 'bottom',
2569		zIndex : 1000000,
2570		touch: true,
2571	};
2572	$(document).trigger('em-search-views-trigger-vars',[views_ddm_options]);
2573	let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, };
2574	$(document).trigger('em-tippy-vars',[tooltip_vars]);
2575
2576	// sync main search texts to advanced search
2577	let search_forms = $('.em-search:not(.em-search-advanced)');
2578	search_forms.each( function(){
2579		/*
2580		 * Important references we'll reuse in scope
2581		 */
2582		let search = $(this);
2583		let search_id = search.attr('id').replace('em-search-', '');
2584		let search_form = search.find('.em-search-form').first();
2585		let search_advanced = search.find('.em-search-advanced'); // there should only be one anyway
2586
2587		/*
2588		 * Counter functions
2589		 */
2590		const update_input_count = function( input, qty = 1 ){
2591			let el = jQuery(input);
2592			let total = qty > 0 ? qty : null;
2593			el.attr('data-advanced-total-input', total);
2594			update_search_totals();
2595		};
2596
2597		const update_search_totals = function( applied = false ){
2598			// set everything to 0, recount
2599			search.find('span.total-count').remove();
2600			// find all fields with total attributes and sum them up
2601			let total = 0;
2602			search_advanced.find('[data-advanced-total-input]').each( function(){
2603				let total_input = this.getAttribute('data-advanced-total-input');
2604				total += Math.abs( total_input );
2605			});
2606			search.attr('data-advanced-total', total);
2607			update_trigger_count( applied );
2608			// find all sections with totals and display them (added above)
2609			search_advanced.find('.em-search-advanced-section').each( function(){
2610				let section = $(this);
2611				let section_total = 0;
2612				section.attr('data-advanced-total', 0);
2613				// go through all set qtys and calculate
2614				section.find('[data-advanced-total-input]').each( function(){
2615					let total_input = this.getAttribute('data-advanced-total-input');
2616					section_total += Math.abs( total_input );
2617				});
2618				section.attr('data-advanced-total', section_total);
2619				update_section_count(section);
2620			});
2621			// update triggers, search, clear button etc.
2622			if( total > 0 || !search.attr('data-advanced-previous-total') || total != search.attr('data-advanced-previous-total') ){
2623				update_submit_buttons( true );
2624			}
2625			update_clear_button_count();
2626		}
2627
2628		const update_trigger_count = function( applied = false ){
2629			let triggers = jQuery('.em-search-advanced-trigger[data-search-advanced-id="em-search-advanced-'+ search_id +'"]'); // search like this ato apply to external triggers
2630			triggers.find('span.total-count').remove();
2631			let total = search.attr('data-advanced-total');
2632			if( total > 0 ){
2633				let trigger_count = jQuery('<span class="total-count">'+ total + '</span>').appendTo(triggers);
2634				if( !applied ){
2635					trigger_count.addClass('tentative');
2636				}
2637			}
2638		};
2639
2640		const update_submit_buttons = function( enabled = false ){
2641			// update the clear link
2642			let submit_button = search_advanced.find('button[type="submit"]');
2643			let main_submit_button = search.find('.em-search-main-bar button[type="submit"]');
2644			let submit_buttons = submit_button.add( main_submit_button ); // merge together to apply chanegs
2645			if( enabled ){
2646				submit_buttons.removeClass('disabled').attr('aria-disabled', 'false');
2647			}else{
2648				submit_buttons.addClass('disabled').attr('aria-disabled', 'true');
2649			}
2650		};
2651
2652		const update_section_count = function( section ){
2653			let section_total = section.attr('data-advanced-total');
2654			section.find('header span.total-count').remove();
2655			if( section_total > 0 ){
2656				$('<span class="total-count">'+ section_total +'</span>').appendTo( section.find('header') );
2657			}
2658		};
2659
2660		const update_clear_button_count = function(){
2661			// update the clear link
2662			let clear_link = search_advanced.find('button[type="reset"]');
2663			if( !clear_link.attr('data-placeholder') ){
2664				clear_link.attr('data-placeholder', clear_link.text());
2665			}
2666			let total = search.attr('data-advanced-total');
2667			if( total > 0 ){
2668				clear_link.text( clear_link.attr('data-placeholder') + ' (' + total + ')' ).prop('disabled', false);
2669				clear_link.removeClass('disabled').attr('aria-disabled', 'false');
2670			}else{
2671				clear_link.text( clear_link.attr('data-placeholder') );
2672				clear_link.addClass('disabled').attr('aria-disabled', 'true');
2673			}
2674		};
2675
2676		/*
2677		 * Triggers
2678		 */
2679		search.find('.em-search-views-trigger').each( function(){
2680			tooltip_vars.content = this.parentElement.getAttribute('aria-label');
2681			let views_tooltip = tippy(this.parentElement, tooltip_vars);
2682			let views_content = this.parentElement.querySelector('.em-search-views-options');
2683			let views_content_parent = views_content.parentElement;
2684			let tippy_content = document.createElement('div');
2685			views_ddm_options.content = tippy_content;
2686			let views_ddm = tippy(this, views_ddm_options);
2687			views_ddm.setProps({
2688				onShow(instance){
2689					views_tooltip.disable();
2690					tippy_content.append(views_content);
2691				},
2692				onShown(instance){ // keyboard support
2693					views_content.querySelector('input:checked').focus();
2694				},
2695				onHidden(instance){
2696					views_tooltip.enable();
2697					if( views_content.parentElement !== views_content_parent ) {
2698						views_content_parent.append(views_content);
2699					}
2700				}
2701			});
2702			let tippy_listener = function(e){
2703				if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
2704				e.preventDefault();
2705				e.stopPropagation();
2706				this._tippy.show();
2707				views_tooltip.hide();
2708			}
2709			this.addEventListener('click', tippy_listener);
2710			this.addEventListener('keydown', tippy_listener);
2711			this.firstElementChild.addEventListener('focus', function(e){
2712				views_ddm.hide();
2713				views_tooltip.enable();
2714				views_tooltip.show();
2715			});
2716			this.firstElementChild.addEventListener('blur', function(){
2717				views_tooltip.hide();
2718			});
2719
2720			search.on('focus blur', '.em-search-views-options input', function(){
2721				if( document.activeElement === this ){
2722					this.parentElement.classList.add('focused');
2723				}else{
2724					this.parentElement.classList.remove('focused');
2725				}
2726			});
2727
2728			search[0].addEventListener('change', function(){
2729				update_submit_buttons(true);
2730			});
2731
2732			search.on('keydown click', '.em-search-views-options input', function( e ){
2733				// get relevant vars
2734				if( e.type === 'keydown' && e.which !== 13 ){
2735					if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) {
2736						if (e.which === 38) {
2737							if (this.parentElement.previousElementSibling) {
2738								this.parentElement.previousElementSibling.focus();
2739							}
2740						} else if (e.which === 40) {
2741							if (this.parentElement.nextElementSibling) {
2742								this.parentElement.nextElementSibling.focus();
2743							}
2744						}
2745						return false;
2746					} else if ( e.which === 9 ) {
2747						// focus out
2748						views_ddm.hide();
2749					}
2750					return true;
2751				}
2752				this.checked = true;
2753				let input = $(this);
2754				// mark label selected
2755				input.closest('fieldset').find('label').removeClass('checked');
2756				input.parent().addClass('checked');
2757				// get other reference elements we need
2758				let views_wrapper = $(this).closest('.em-search-views');
2759				let view_type = this.value;
2760				let trigger = views_wrapper.children('.em-search-views-trigger');
2761				let trigger_option = trigger.children('.em-search-view-option');
2762				// change view, if different
2763				if( view_type !== trigger_option.attr('data-view') ){
2764					trigger_option.attr('data-view', this.value).text(this.parentElement.innerText);
2765					// remove custom search vals from current view so it's not used into another view
2766					$('#em-view-'+search_id).find('#em-view-custom-data-search-'+search_id).remove();
2767					// trigger custom event in case form disabled due to no search vals
2768					search_form.find('button[type="submit"]').focus();
2769					search_form.trigger('forcesubmit');
2770				}
2771				views_ddm.hide();
2772			});
2773		});
2774
2775		search.find('.em-search-sort-trigger').each( function(){
2776			tooltip_vars.content = this.parentElement.getAttribute('aria-label');
2777			let views_tooltip = tippy(this.parentElement, tooltip_vars);
2778			search.on('keydown click', '.em-search-sort-option', function( e ){
2779				// get other reference elements we need
2780				let order = this.dataset.sort === 'ASC' ? 'DESC' : 'ASC';
2781				this.setAttribute('data-sort', order);
2782				this.parentElement.querySelector('input[name="order"]').value = order;
2783				// trigger custom event in case form disabled due to no search vals
2784				search_form.find('button[type="submit"]').focus();
2785				search_form.trigger('forcesubmit');
2786			});
2787		});
2788
2789		// add trigger logic for advanced popup modal
2790		let search_advanced_trigger_click = function( e ){
2791			if( search.hasClass('advanced-mode-inline') ){
2792				// inline
2793				if( !search_advanced.hasClass('visible') ){
2794					search_advanced.slideDown().addClass('visible');
2795					if( '_tippy' in this ){
2796						this._tippy.setContent(this.getAttribute('data-label-hide'));
2797					}
2798				}else{
2799					search_advanced.slideUp().removeClass('visible');
2800					if( '_tippy' in this ){
2801						this._tippy.setContent(this.getAttribute('data-label-show'));
2802					}
2803				}
2804			}else{
2805				// wrap modal popup element in a form, so taht it's 'accessible' with keyboard
2806				if( !search_advanced.hasClass('active') ) {
2807					let form_wrapper = $('<form action="" method="post" class="em-search-advanced-form" id="em-search-form-advanced-' + search_id + '"></form>');
2808					form_wrapper.appendTo(search_advanced);
2809					search_advanced.find('.em-modal-popup').appendTo(form_wrapper);
2810					// open modal
2811					let button = this;
2812					openModal(search_advanced, function () {
2813						// Do this instead
2814						button.blur();
2815						search_advanced.find('input.em-search-text').focus();
2816					});
2817				}
2818			}
2819		};
2820		search.on('click', 'button.em-search-advanced-trigger:not([data-search-advanced-id],[data-parent-trigger])', search_advanced_trigger_click);
2821		search_form.on('search_advanced_trigger', search_advanced_trigger_click);
2822
2823		search_advanced.on('em_modal_close', function(){
2824			search_advanced.find('.em-modal-popup').appendTo(search_advanced);
2825			search_advanced.children('form').remove();
2826			let trigger = search.find('button.em-search-advanced-trigger').focus();
2827			if( trigger.length > 0 && '_tippy' in trigger[0] ){
2828				trigger[0]._tippy.hide();
2829			}
2830		});
2831
2832		// add header toggle logic to expand/collapse sections - add directly to elements since they move around the DOM due to modal
2833		search_advanced.find('.em-search-advanced-section > header').on('click', function(){
2834			let header = $(this);
2835			let section = header.closest('section');
2836			let content = header.siblings('.em-search-section-content');
2837			if( section.hasClass('active') ){
2838				content.slideUp();
2839				section.removeClass('active');
2840			}else{
2841				content.slideDown();
2842				section.addClass('active');
2843			}
2844		});
2845
2846		/*
2847		 *  Advanced Search Field Listeners - Main Search Form
2848		 */
2849
2850		let search_form_advanced_calculate_totals_inputs = function( input ){
2851			// for textboxes we only need to add or remove 1 advanced
2852			let el = $(input);
2853			let qty = el.val() !== '' ? 1:0;
2854			update_input_count( el, qty );
2855		};
2856
2857		// These are for the main search bar, syncing information back into the advanced form
2858		search.on('change input', '.em-search-main-bar input.em-search-text', function( e ){
2859			// sync advanced input field with same text
2860			let advanced_search_input = search_advanced.find('input.em-search-text');
2861			if ( advanced_search_input.length === 0 ) {
2862				search_form_advanced_calculate_totals_inputs(this);
2863			} else {
2864				advanced_search_input.val( this.value );
2865				// recalculate totals from here
2866				search_form_advanced_calculate_totals_inputs(advanced_search_input[0]);
2867			}
2868			// any change without advanced form should show the search form still
2869			update_submit_buttons( true);
2870		});
2871		search.on('change', '.em-search-main-bar input.em-search-geo-coords', function(){
2872			let el = $(this);
2873			let advanced_geo = search_advanced.find('div.em-search-geo');
2874			// copy over value and class names
2875			let advanced_geo_coords = advanced_geo.find('input.em-search-geo-coords');
2876			if( advanced_geo_coords.length > 0 ) {
2877				advanced_geo_coords.val(el.val()).attr('class', el.attr('class'));
2878				let geo_text = el.siblings('input.em-search-geo').first();
2879				advanced_geo.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class'));
2880				// calculate totals from here
2881				search_form_advanced_calculate_totals_inputs(advanced_geo_coords);
2882			} else {
2883				// calculate totals from here
2884				search_form_advanced_calculate_totals_inputs(this);
2885			}
2886		});
2887		search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2888			if( !('_flatpickr' in this) ) return;
2889			this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) {
2890				// any change without advanced form should show the search form
2891				let advanced_datepicker = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input');
2892				if( advanced_datepicker.length === 0 ) {
2893					// update counter
2894					let qty = dateStr ? 1:0;
2895					update_input_count(instance.input, qty);
2896				} else {
2897					// update advanced search form datepicker values, trigger a close for it to handle the rest
2898					advanced_datepicker[0]._flatpickr.setDate( selectedDates, true );
2899					advanced_datepicker[0]._flatpickr.close();
2900				}
2901			});
2902		});
2903
2904		search.find('select.em-selectize').each(function () {
2905			if( 'selectize' in this ) {
2906				this.selectize.on('change', function () {
2907					search_advanced_selectize_change(this);
2908				});
2909			}
2910		});
2911
2912		/*
2913		 *  Advanced Search Field Listeners - Advanced Search Form
2914		 */
2915
2916		// regular text advanced or hidden inputs that represent another ui
2917		search_advanced.on('change input', 'input.em-search-text', function( e ){
2918			if( e.type === 'change' ){
2919				// copy over place info on change only, not on each keystroke
2920				search.find('.em-search-main input.em-search-text').val( this.value );
2921			}
2922			search_form_advanced_calculate_totals_inputs(this);
2923		});
2924		search_advanced.on('change', 'input.em-search-geo-coords', function( e ){
2925			search_form_advanced_calculate_totals_inputs(this);
2926			//update values in main search
2927			let el = $(this);
2928			let main = search.find('.em-search-main div.em-search-geo');
2929			if( main.length > 0 ){
2930				// copy over value and class names
2931				main.find('input.em-search-geo-coords').val( el.val() ).attr('class', el.attr('class'));
2932				let geo_text = el.siblings('input.em-search-geo');
2933				main.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class'));
2934			}
2935		});
2936		search_advanced.on('clear_search', function(){
2937			let text = $(this).find('input.em-search-text');
2938			if( text.length === 0 ) {
2939				// select geo from main if it exists, so we keep counts synced
2940				text = search.find('input.em-search-text');
2941			}
2942			text.val('').attr('value', null).trigger('change'); // value attr removed as well due to compat issues in Chrome (possibly more)
2943		});
2944		/* Not sure we should be calculating this... since it's always set to something.
2945		search_advanced.on('change', 'select.em-search-geo-unit, select.em-search-geo-distance', function( e ){
2946			// combine both values into parent, if value set then it's a toggle
2947			let el = jQuery(this);
2948			let qty = el.val() ? 1 : null;
2949			el.closest('.em-search-geo-units').attr('data-advanced-total-input', qty);
2950			update_search_totals();
2951		});
2952		 */
2953		search_advanced.on('change', 'input[type="checkbox"]', function( e ){
2954			let el = $(this);
2955			let qty = el.prop('checked') ? 1:0;
2956			update_input_count( el, qty );
2957		});
2958		search_advanced.on('calculate_totals', function(){
2959			search_advanced.find('input.em-search-text, input.em-search-geo-coords').each( function(){
2960				search_form_advanced_calculate_totals_inputs(this);
2961			});
2962			search_advanced.find('input[type="checkbox"]').trigger('change');
2963		});
2964		search_advanced.on('clear_search', function(){
2965			let geo = $(this).find('input.em-search-geo');
2966			if( geo.length === 0 ) {
2967				// select geo from main if it exists, so we keep counts synced
2968				geo = search.find('input.em-search-geo');
2969			}
2970			geo.removeClass('off').removeClass('on').val('');
2971			geo.siblings('input.em-search-geo-coords').val('').trigger('change');
2972			search_advanced.find('input[type="checkbox"]').prop("checked", false).trigger('change').prop("checked", false); // set checked after trigger because something seems to be checking during event
2973		});
2974
2975		// datepicker advanced logic
2976		search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2977			if( !('_flatpickr' in this) ) return;
2978			this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) {
2979				// check previous value against current value, no change, no go
2980				let previous_value = instance.input.getAttribute('data-previous-value');
2981				if( previous_value !== dateStr ){
2982					// update counter
2983					let qty = dateStr ? 1:0;
2984					update_input_count(instance.input, qty);
2985					// update main search form datepicker values
2986					let main_datepicker = search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input');
2987					if( main_datepicker.length > 0 ) {
2988						main_datepicker[0]._flatpickr.setDate(selectedDates, true);
2989					}
2990					// set for next time
2991					instance.input.setAttribute('data-previous-value', dateStr);
2992				}
2993			});
2994		});
2995		search_advanced.on('calculate_totals', function(){
2996			search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').first().each( function(){
2997				let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0;
2998				update_input_count(this, qty);
2999			});
3000		});
3001		search_advanced.on('clear_search', function(){
3002			let datepickers = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input');
3003			if( datepickers.length === 0 ) {
3004				// find datepickers on main form so syncing is sent up
3005				datepickers = search.find('.em-datepicker input.em-search-scope.flatpickr-input');
3006			}
3007			datepickers.each(function () {
3008				this._flatpickr.clear();
3009				update_input_count(this, 0);
3010			});
3011		});
3012		// clear the date total for calendars, before anything is done
3013		let scope_calendar_check = function(){
3014			search.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){
3015				if( search.attr('data-view') == 'calendar' ){
3016					this.setAttribute('data-advanced-total-input', 0);
3017					this._flatpickr.input.disabled = true;
3018				}else{
3019					this._flatpickr.input.disabled = false;
3020					let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0;
3021					this.setAttribute('data-advanced-total-input', qty);
3022				}
3023			});
3024		};
3025		$(document).on('em_search_loaded', scope_calendar_check);
3026		scope_calendar_check();
3027
3028		// selectize advanced
3029		let search_advanced_selectize_change = function( selectize ){
3030			let qty = selectize.items.length;
3031			// handle 'all' default values
3032			if( qty == 1 && !selectize.items[0] ){
3033				qty = 0;
3034			}
3035			if ( selectize.$input.closest('.em-search-advanced').length === 0 ) {
3036				// sync advanced input field with same text
3037				let classSearch = '.' + selectize.$input.attr('class').replaceAll(' ', '.').trim();
3038				let advanced_search_input = search_advanced.find( classSearch );
3039				if ( advanced_search_input.length > 0 ) {
3040					// copy over values
3041					advanced_search_input[0].selectize.setValue( selectize.items );
3042					// recalculate totals from here
3043					search_advanced_selectize_change(advanced_search_input[0].selectize);
3044				}
3045			}
3046			update_input_count( selectize.$input, qty );
3047		};
3048
3049		search_advanced.find('select.em-selectize').each(function () {
3050			if( 'selectize' in this ) {
3051				this.selectize.on('change', function () {
3052					search_advanced_selectize_change(this);
3053				});
3054			}
3055		});
3056		search_advanced.on('calculate_totals', function(){
3057			$(this).find('select.em-selectize').each( function(){
3058				search_advanced_selectize_change(this.selectize);
3059			});
3060		});
3061		search_advanced.on('clear_search', function(){
3062			let clearSearch = function(){
3063				this.selectize.clear();
3064				this.selectize.refreshItems();
3065				this.selectize.refreshOptions(false);
3066				this.selectize.blur();
3067			};
3068			search_advanced.find('select.em-selectize').each( clearSearch );
3069			search.find('.em-search-main-bar select.em-selectize').each( clearSearch );
3070		});
3071
3072		// location-specific stuff for dropdowns (powered by selectize)
3073		let locations_selectize_load_complete = function(){
3074			if( 'selectize' in this ) {
3075				this.selectize.settings.placeholder = this.selectize.settings.original_placeholder;
3076				this.selectize.updatePlaceholder();
3077				// get options from select again
3078				let options = [];
3079				this.selectize.$input.find('option').each( function(){
3080					let value = this.value !== null ? this.value : this.innerHTML;
3081					options.push({ value : value, text: this.innerHTML});
3082				});
3083				this.selectize.addOption(options);
3084				this.selectize.refreshOptions(false);
3085			}
3086		};
3087		let locations_selectize_load_start = function(){
3088			if( 'selectize' in this ){
3089				this.selectize.clearOptions();
3090				if( !('original_placeholder' in this.selectize.settings) ) this.selectize.settings.original_placeholder = this.selectize.settings.placeholder;
3091				this.selectize.settings.placeholder = EM.txt_loading;
3092				this.selectize.updatePlaceholder();
3093			}
3094		};
3095		$('.em-search-advanced select[name=country], .em-search select[name=country]').on('change', function(){
3096			var el = $(this);
3097			let wrapper = el.closest('.em-search-location');
3098			wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>');
3099			wrapper.find('select[name=region]').html('<option value="">'+EM.txt_loading+'</option>');
3100			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>');
3101			wrapper.find('select[name=state], select[name=region], select[name=town]').each( locations_selectize_load_start );
3102			if( el.val() != '' ){
3103				wrapper.find('.em-search-location-meta').slideDown();
3104				var data = {
3105					action : 'search_states',
3106					country : el.val(),
3107					return_html : true,
3108				};
3109				wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3110				data.action = 'search_regions';
3111				wrapper.find('select[name=region]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3112				data.action = 'search_towns';
3113				wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3114			}else{
3115				wrapper.find('.em-search-location-meta').slideUp();
3116			}
3117		});
3118		$('.em-search-advanced select[name=region], .em-search select[name=region]').on('change', function(){
3119			var el = $(this);
3120			let wrapper = el.closest('.em-search-location');
3121			wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>');
3122			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>');
3123			wrapper.find('select[name=state], select[name=town]').each( locations_selectize_load_start );
3124			var data = {
3125				action : 'search_states',
3126				region : el.val(),
3127				country : wrapper.find('select[name=country]').val(),
3128				return_html : true
3129			};
3130			wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3131			data.action = 'search_towns';
3132			wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3133		});
3134		$('.em-search-advanced select[name=state], .em-search select[name=state]').on('change', function(){
3135			var el = $(this);
3136			let wrapper = el.closest('.em-search-location');
3137			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>').each( locations_selectize_load_start );
3138			var data = {
3139				action : 'search_towns',
3140				state : el.val(),
3141				region : wrapper.find('select[name=region]').val(),
3142				country : wrapper.find('select[name=country]').val(),
3143				return_html : true
3144			};
3145			wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3146		});
3147
3148		/*
3149		 *  Clear & Search Actions
3150		 */
3151		// handle clear link for advanced
3152		search_advanced.on( 'click', 'button[type="reset"]', function(){
3153			// clear text search advanced, run clear hook for other parts to hook into
3154			if( search.attr('data-advanced-total') == 0 ) return;
3155			// search text and geo search
3156			search_advanced.find('input.em-search-text, input.em-search-geo').val('').attr('data-advanced-total-input', null).trigger('change');
3157			// other implementations hook here and do what you need
3158			search.trigger('clear_search');
3159			search_advanced.trigger('clear_search');
3160			// remove counters, set data counters to 0, hide section and submit form without search settings
3161			update_search_totals(true); // in theory, this is 0 and removes everything
3162			if( search_advanced.hasClass('em-modal') ) {
3163				search_advanced_trigger_click();
3164			}
3165			search_advanced.append('<input name="clear_search" type="hidden" value="1">');
3166			search_advanced.find('button[type="submit"]').trigger('forceclick');
3167			update_clear_button_count();
3168		}).each( function(){
3169			search_advanced.trigger('calculate_totals');
3170			update_search_totals(true);
3171		});
3172		const on_update_trigger_count = function(e, applied = true){
3173			update_trigger_count( applied );
3174		};
3175		search.on('update_trigger_count', on_update_trigger_count);
3176		search_advanced.on('update_trigger_count', on_update_trigger_count);
3177
3178		// handle submission for advanced
3179		search_advanced.on( 'click forceclick', 'button[type="submit"]', function(e){
3180			e.preventDefault();
3181			if( this.classList.contains('disabled') && e.type !== 'forceclick' ) return false;
3182			// close attach back to search form
3183			if( search_advanced.hasClass('em-modal') ) {
3184				closeModal(search_advanced, function () {
3185					// submit for search
3186					search_form.submit();
3187				});
3188			}else{
3189				search_form.submit();
3190			}
3191			return false; // we handled it
3192		});
3193
3194		search.on('submit forcesubmit', '.em-search-form', function(e){
3195			if ( search.hasClass('no-ajax') ) {
3196				return true;
3197			}
3198			e.preventDefault();
3199			let form = $(this);
3200			let submit_buttons = form.find('button[type="submit"]');
3201			if( e.type !== 'forcesubmit' && submit_buttons.hasClass('disabled') ) return false;
3202			let wrapper = form.closest('.em-search');
3203			if( wrapper.hasClass('em-search-legacy') ){
3204				em_submit_legacy_search_form(form);
3205			}else{
3206				let view = $('#em-view-'+search_id);
3207				let view_type = form.find('[name="view"]:checked, [name="view"][type="hidden"], .em-search-view-option-hidden').val();
3208				if( Array.isArray(view_type) ) view_type = view_type.shift();
3209				// copy over custom view information, remove it further down
3210				let custom_view_data = view.find('#em-view-custom-data-search-'+search_id).clone();
3211				let custom_view_data_container = $('<div class="em-view-custom-data"></div>');
3212				custom_view_data.children().appendTo(custom_view_data_container);
3213				custom_view_data.remove();
3214				custom_view_data_container.appendTo(form);
3215				// add loading stuff
3216				view.append('<div class="em-loading"></div>');
3217				submit_buttons.each( function(){
3218					if( EM.txt_searching !== this.innerHTML ) {
3219						this.setAttribute('data-button-text', this.innerHTML);
3220						this.innerHTML = EM.txt_searching;
3221					}
3222				});
3223				var vars = form.serialize();
3224				$.ajax( EM.ajaxurl, {
3225					type : 'POST',
3226					dataType : 'html',
3227					data : vars,
3228					success : function(responseText){
3229						submit_buttons.each( function(){
3230							this.innerHTML = this.getAttribute('data-button-text');
3231						});
3232						view = EM_View_Updater( view, responseText );
3233						// update view definitions
3234						view.attr('data-view', view_type);
3235						search.attr('data-view', view_type);
3236						search_advanced.attr('data-view', view_type);
3237						jQuery(document).triggerHandler('em_view_loaded_'+view_type, [view, form, e]);
3238						jQuery(document).triggerHandler('em_search_loaded', [view, form, e]); // ajax has loaded new results
3239						jQuery(document).triggerHandler('em_search_result', [vars, view, e]); // legacy for backcompat, use the above
3240						wrapper.find('.count.tentative').removeClass('tentative');
3241						// deactivate submit button until changes are made again
3242						submit_buttons.addClass('disabled').attr('aria-disabled', 'true');
3243						// update search totals
3244						update_search_totals(true);
3245						search.attr('data-advanced-previous-total', search.attr('data-advanced-total')); // so we know if filters were used in previous search
3246						update_submit_buttons(false);
3247						custom_view_data_container.remove(); // remove data so it's reloaded again later
3248						search.find('input[name="clear_search"]').remove();
3249					}
3250				});
3251			}
3252			return false;
3253		});
3254
3255		// observe resizing
3256		EM_ResizeObserver( EM.search.breakpoints, [search[0]]);
3257	});
3258
3259	// handle external triggers, e.g. a calendar shortcut for a hidden search form
3260	$(document).on('click', '.em-search-advanced-trigger[data-search-advanced-id], .em-search-advanced-trigger[data-parent-trigger]', function(){
3261		if( this.getAttribute('data-search-advanced-id') ){
3262			// trigger the search form by parent
3263			let search_advanced_form = document.getElementById( this.getAttribute('data-search-advanced-id') );
3264			if( search_advanced_form ){
3265				let search_form = search_advanced_form.closest('form.em-search-form');
3266				if( search_form ){
3267					search_form.dispatchEvent( new CustomEvent('search_advanced_trigger') );
3268					return;
3269				}
3270			}
3271		} else if( this.getAttribute('data-parent-trigger') ) {
3272			let trigger = document.getElementById(this.getAttribute('data-parent-trigger'));
3273			if ( trigger ) {
3274				trigger.click();
3275				return;
3276			}
3277		}
3278		console.log('Cannot locate a valid advanced search form trigger for %o', this);
3279	});
3280
3281	$(document).on('click', '.em-view-container .em-ajax.em-pagination a.page-numbers', function(e){
3282		let a = $(this);
3283		let view = a.closest('.em-view-container');
3284		let href = a.attr('href');
3285		//add data-em-ajax att if it exists
3286		let data = a.closest('.em-pagination').attr('data-em-ajax');
3287		if( data ){
3288			href += href.includes('?') ? '&' : '?';
3289			href += data;
3290		}
3291		// build querystring from url
3292		let url_params = new URL(href, window.location.origin).searchParams;
3293		if( view.attr('data-view') ) {
3294			url_params.set('view', view.attr('data-view'));
3295		}
3296		// start ajax
3297		view.append('<div class="loading" id="em-loading"></div>');
3298		$.ajax( EM.ajaxurl, {
3299			type : 'POST',
3300			dataType : 'html',
3301			data : url_params.toString(),
3302			success : function(responseText) {
3303				view = EM_View_Updater( view, responseText );
3304				view.find('.em-pagination').each( function(){
3305					paginationObserver.observe(this);
3306				});
3307				jQuery(document).triggerHandler('em_page_loaded', [view]);
3308				view[0].scrollIntoView({ behavior: "smooth" });
3309			}
3310		});
3311		e.preventDefault();
3312		return false;
3313	});
3314
3315	const paginationObserver = new ResizeObserver( function( entries ){
3316		for (let entry of entries) {
3317			let el = entry.target;
3318			if( !el.classList.contains('observing') ) {
3319				el.classList.add('observing'); // prevent endless loop on resizing within this check
3320				// check if any pagination parts are overflowing
3321				let overflowing = false;
3322				el.classList.remove('overflowing');
3323				for ( const item of el.querySelectorAll('.not-current')) {
3324					if( item.scrollHeight > item.clientHeight || item.scrollWidth > item.clientWidth ){
3325						overflowing = true;
3326						break; // break if one has overflown
3327					}
3328				};
3329				// add or remove overflow classes
3330				if( overflowing ){
3331					el.classList.add('overflowing')
3332				}
3333				el.classList.remove('observing');
3334			}
3335		}
3336	});
3337	$('.em-pagination').each( function(){
3338		paginationObserver.observe(this);
3339	});
3340
3341	/* START Legacy */
3342	// deprecated - hide/show the advanced search advanced link - relevant for old template overrides
3343	$(document).on('click change', '.em-search-legacy .em-toggle', function(e){
3344		e.preventDefault();
3345		//show or hide advanced search, hidden by default
3346		var el = $(this);
3347		var rel = el.attr('rel').split(':');
3348		if( el.hasClass('show-search') ){
3349			if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideUp(); }
3350			else{ $(rel[0]).slideUp(); }
3351			el.find('.show, .show-advanced').show();
3352			el.find('.hide, .hide-advanced').hide();
3353			el.removeClass('show-search');
3354		}else{
3355			if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideDown(); }
3356			else{ $(rel[0]).slideDown(); }
3357			el.find('.show, .show-advanced').hide();
3358			el.find('.hide, .hide-advanced').show();
3359			el.addClass('show-search');
3360		}
3361	});
3362	// handle search form submission
3363	let em_submit_legacy_search_form = function( form ){
3364		if( this.em_search && this.em_search.value == EM.txt_search){ this.em_search.value = ''; }
3365		var results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
3366		if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
3367		if( results_wrapper.length > 0 ){
3368			results_wrapper.append('<div class="loading" id="em-loading"></div>');
3369			var submitButton = form.find('.em-search-submit button');
3370			submitButton.attr('data-button-text', submitButton.val()).val(EM.txt_searching);
3371			var img = submitButton.children('img');
3372			if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-mag.png', 'search-loading.gif'));
3373			var vars = form.serialize();
3374			$.ajax( EM.ajaxurl, {
3375				type : 'POST',
3376				dataType : 'html',
3377				data : vars,
3378				success : function(responseText){
3379					submitButton.val(submitButton.attr('data-button-text'));
3380					if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-loading.gif', 'search-mag.png'));
3381					results_wrapper.replaceWith(responseText);
3382					if( form.find('input[name=em_search]').val() == '' ){ form.find('input[name=em_search]').val(EM.txt_search); }
3383					//reload results_wrapper
3384					results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
3385					if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
3386					jQuery(document).triggerHandler('em_search_ajax', [vars, results_wrapper, e]); //ajax has loaded new results
3387				}
3388			});
3389			e.preventDefault();
3390			return false;
3391		}
3392	};
3393	if( $('.em-search-ajax').length > 0 ){
3394		$(document).on('click', '.em-search-ajax a.page-numbers', function(e){
3395			var a = $(this);
3396			var data = a.closest('.em-pagination').attr('data-em-ajax');
3397			var wrapper = a.closest('.em-search-ajax');
3398			var wrapper_parent = wrapper.parent();
3399			var qvars = a.attr('href').split('?');
3400			var vars = qvars[1];
3401			//add data-em-ajax att if it exists
3402			if( data != '' ){
3403				vars = vars != '' ? vars+'&'+data : data;
3404			}
3405			vars += '&legacy=1';
3406			wrapper.append('<div class="loading" id="em-loading"></div>');
3407			$.ajax( EM.ajaxurl, {
3408				type : 'POST',
3409				dataType : 'html',
3410				data : vars,
3411				success : function(responseText) {
3412					wrapper.replaceWith(responseText);
3413					wrapper = wrapper_parent.find('.em-search-ajax');
3414					jQuery(document).triggerHandler('em_search_ajax', [vars, wrapper, e]); //ajax has loaded new results
3415				}
3416			});
3417			e.preventDefault();
3418			return false;
3419		});
3420	}
3421	/* END Legacy */
3422});
3423
3424/*
3425* CALENDAR
3426*/
3427jQuery(document).ready( function($){
3428
3429	const em_calendar_init = function( calendar ){
3430		calendar = $(calendar);
3431		if( !calendar.attr('id') || !calendar.attr('id').match(/^em-calendar-[0-9]+$/) ){
3432			calendar.attr('id', 'em-calendar-' + Math.floor(Math.random() * 10000)); // retroactively add id to old templates
3433		}
3434		calendar.find('a').off("click");
3435		calendar.on('click', 'a.em-calnav, a.em-calnav-today', function(e){
3436			e.preventDefault();
3437			const el = $(this);
3438			if( el.attr('href') === '') return; // do nothing if disabled or no link provided
3439			el.closest('.em-calendar').prepend('<div class="loading" id="em-loading"></div>');
3440			let url = el.attr('href');
3441			const view_id = el.closest('[data-view-id]').data('view-id');
3442			const custom_data = $('form#em-view-custom-data-calendar-'+ view_id);
3443			let form_data = new FormData();
3444			if( custom_data.length > 0 ){
3445				form_data = new FormData(custom_data[0]);
3446				let $URL = new URL(url, window.location.origin);
3447				let url_params = $URL.searchParams;
3448				for (const [key, value] of url_params.entries()) {
3449					if( key === 'mo' ) {
3450						form_data.set('month', value);
3451					} else if ( key === 'yr' ) {
3452						form_data.set('year', value);
3453					} else {
3454						form_data.set(key, value);
3455					}
3456				}
3457				// remove mo and yr from URL
3458				$URL.searchParams.delete('mo');
3459				$URL.searchParams.delete('yr');
3460				url = $URL.toString();
3461			}
3462			if ( calendar.attr('data-timezone') ) {
3463				form_data.set('calendar_timezone', calendar.attr('data-timezone') );
3464			}
3465			form_data.set('id', view_id);
3466			form_data.set('ajaxCalendar', 1); // AJAX trigger
3467			form_data.set('em_ajax', 1); // AJAX trigger
3468			// check advanced trigger
3469			if( calendar.hasClass('with-advanced') ){
3470				form_data.set('has_advanced_trigger', 1);
3471			}
3472			$.ajax({
3473				url: url,
3474				data: form_data,
3475				processData: false,
3476				contentType: false,
3477				method: 'POST',
3478				success: function( data ){
3479					let view = EM_View_Updater( calendar, data );
3480					if( view.hasClass('em-view-container') ){
3481						calendar = view.find('.em-calendar');
3482					}else{
3483						calendar = view;
3484					}
3485					calendar[0].dispatchEvent( new CustomEvent( 'em_calendar_load', { bubbles: true } ) );
3486				},
3487				dataType: 'html'
3488			});
3489		} );
3490		calendar[0].addEventListener('reload', () => {
3491			calendar_trigger_ajax( calendar, calendar.attr('data-year'), calendar.attr('data-month') );
3492		});
3493		let calendar_trigger_ajax = function( calendar, year, month ){
3494			let link = calendar.find('.em-calnav-next');
3495			let url = new URL(link.attr('href'), window.location.origin);
3496			url.searchParams.set('mo', month);
3497			url.searchParams.set('yr', year);
3498			link.attr('href', url.toString()).trigger('click');
3499		};
3500		let calendar_resize_monthpicker = function( instance, text ){
3501			let span = $('<span class="marker">'+ text +'</span>');
3502			span.insertAfter(instance);
3503			let width = span.width() + 40;
3504			span.remove();
3505			instance.style.setProperty('width', width+'px', 'important');
3506		}
3507		let calendar_month_init = function(){
3508			let month_form = calendar.find('.month form');
3509			calendar.find('.event-style-pill .em-cal-event').on('click', function( e ){
3510				e.preventDefault();
3511				if( !(calendar.hasClass('preview-tooltips') && calendar.data('preview-tooltips-trigger')) && !(calendar.hasClass('preview-modal')) ) {
3512					let link = this.getAttribute('data-event-url');
3513					if (link !== null) {
3514						window.location.href = link;
3515					}
3516				}
3517				// select this date, all others no
3518				e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') );
3519				e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected');
3520			});
3521			if( month_form.length > 0 ){
3522				month_form.find('input[type="submit"]').hide();
3523				let select = $('<select style="display:none;visibility:hidden;"></select>').appendTo(month_form);
3524				let option = $('<option></option>').appendTo(select);
3525				let current_datetime = calendar.find('select[name="month"]').val() + calendar.find('select[name="year"]').val();
3526				let month = calendar.find('select[name="month"]');
3527				let year = calendar.find('select[name="year"]');
3528				let monthpicker = calendar.find('.em-month-picker');
3529				let month_value = monthpicker.data('month-value');
3530				monthpicker.prop('type', 'text').prop('value', month_value);
3531				calendar_resize_monthpicker( monthpicker[0], month_value );
3532				let monthpicker_wrapper = $('#em-flatpickr');
3533				if( monthpicker_wrapper.length === 0 ) {
3534					monthpicker_wrapper = $('<div class="em pixelbones" id="em-flatpickr"></div>').appendTo('body');
3535				}
3536				let minDate = null;
3537				if( calendar.data('scope') === 'future' ){
3538					minDate = new Date();
3539					minDate.setMonth(minDate.getMonth()-1);
3540				}
3541				// locale
3542				if( 'locale' in EM.datepicker ){
3543					flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]);
3544					flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay;
3545				}
3546				let fp = monthpicker.flatpickr({
3547					appendTo : monthpicker_wrapper[0],
3548					dateFormat : EM?.calendar?.month_format,
3549					minDate : minDate,
3550					disableMobile: "true",
3551					plugins: [
3552						new monthSelectPlugin({
3553							shorthand: true,
3554							dateFormat: EM?.calendar?.month_format || 'F Y',
3555							altFormat: EM?.calendar?.month_format || 'F Y',
3556						})
3557					],
3558					onChange: function(selectedDates, dateStr, instance) {
3559						calendar_resize_monthpicker( instance.input, dateStr );
3560						calendar_trigger_ajax( calendar, selectedDates[0].getFullYear(), selectedDates[0].getMonth()+1);
3561					},
3562				});
3563				// this bit fixes issues if the supplied text value has a mismatch with the real text value due to localization differences between WP and flatpickr
3564				let month_real_value = monthpicker.val() + '-01';
3565				fp.setDate( new Date( month_real_value ) );
3566				// add classes to month picker
3567				monthpicker.addClass('select-toggle');
3568			}
3569			if( calendar.hasClass('preview-tooltips') ){
3570				let tooltip_vars = {
3571					theme : 'light-border',
3572					allowHTML : true,
3573					interactive : true,
3574					trigger : 'mouseenter focus click',
3575					content(reference) {
3576						return document.createElement('div');
3577					},
3578					onShow( instance ){
3579						const id = instance.reference.getAttribute('data-event-id');
3580						const template = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]');
3581						instance.props.content.append(template.first().clone()[0]);
3582					},
3583					onHide( instance ){
3584						instance.props.content.innerHTML = '';
3585					}
3586				};
3587				if( calendar.data('preview-tooltips-trigger') ) {
3588					tooltip_vars.trigger = calendar.data('preview-tooltips-trigger');
3589				}
3590				$(document).trigger('em-tippy-cal-event-vars',[tooltip_vars]);
3591				tippy(calendar.find('.em-cal-event').toArray(), tooltip_vars);
3592			}else if( calendar.hasClass('preview-modal') ){
3593				// Modal
3594				calendar.find('.em-cal-event').on('click', function( e ){
3595					const id = this.getAttribute('data-event-id');
3596					const modal = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]');
3597					modal.attr('data-calendar-id', calendar.attr('id'));
3598					openModal(modal);
3599					// select this date, all others no
3600					e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') );
3601					e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected');
3602				});
3603			}
3604			// responsive mobile view for date clicks
3605			if( calendar.hasClass('responsive-dateclick-modal') ){
3606				calendar.find('.eventful .em-cal-day-date, .eventful-post .em-cal-day-date, .eventful-pre .em-cal-day-date').on('click', function( e ){
3607					//if( calendar.hasClass('size-small') || calendar.hasClass('size-medium') ){
3608					e.preventDefault();
3609					const id = this.getAttribute('data-timestamp');
3610					const modal = calendar.find('.em-cal-date-content[data-calendar-date="'+id+'"], .em-cal-date-content[data-timestamp="'+id+'"]');
3611					modal.attr('data-calendar-id', calendar.attr('id'));
3612					openModal(modal);
3613					// select this date, all others no
3614					e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') );
3615					e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected');
3616				});
3617			}
3618			// observe resizing if not fixed
3619			if( !calendar.hasClass('size-fixed') ){
3620				EM_ResizeObserver( EM.calendar.breakpoints, [calendar[0], calendar[0]]);
3621			}
3622			// even aspect, because aspect ratio can screw up widths vs row template heights
3623			let calendar_body = calendar.find('.em-cal-body');
3624			if( calendar_body.hasClass('even-aspect') ) {
3625				let ro_function = function (el) {
3626					let width = el.firstElementChild.getBoundingClientRect().width;
3627					if (width > 0) {
3628						el.style.setProperty('--grid-auto-rows', 'minmax(' + width + 'px, auto)');
3629					}
3630				}
3631				let ro = new ResizeObserver(function (entries) {
3632					for (let entry of entries) {
3633						ro_function(entry.target);
3634					}
3635				});
3636				ro.observe(calendar_body[0]);
3637				ro_function(calendar_body[0]);
3638			}
3639
3640			// figure out colors
3641			calendar.find('.date-day-colors').each( function(){
3642				let colors = JSON.parse(this.getAttribute('data-colors'));
3643				let day = $(this).siblings('.em-cal-day-date.colored');
3644				let sides = {
3645					1 : { 1 : '--date-border-color', 'class' : 'one' },
3646					2 : { 1 : '--date-border-color-top', 2 : '--date-border-color-bottom', 'class' : 'two' },
3647					3 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 'class' : 'three' },
3648					4 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 4 : '--date-border-color-left', 'class' : 'four' },
3649				};
3650				for (let i = 0; i < colors.length; i += 4) {
3651					const ring_colors = colors.slice(i, i + 4);
3652					// add a ring
3653					let outer_ring = day.children().first();
3654					let new_ring = $('<div class="ring"></div>').prependTo(day);
3655					outer_ring.appendTo(new_ring);
3656					new_ring.addClass( sides[ring_colors.length].class );
3657					for ( let it = 0; it < ring_colors.length; it++ ){
3658						new_ring.css(sides[ring_colors.length][it+1], ring_colors[it]);
3659					}
3660				}
3661			});
3662
3663			if( calendar.hasClass('with-advanced') ){
3664				const trigger = calendar.find('.em-search-advanced-trigger');
3665				const search_advanced = $('#'+trigger.attr('data-search-advanced-id'));
3666				search_advanced.triggerHandler('update_trigger_count');
3667			}
3668		}
3669		calendar_month_init();
3670		$(document).triggerHandler('em_calendar_loaded', [calendar]);
3671	};
3672	$('.em-calendar').each( function(){
3673		let calendar = $(this);
3674		em_calendar_init( calendar );
3675	});
3676	$(document).on('em_calendar_load', '.em-calendar', function(){
3677		em_calendar_init( this );
3678	});
3679	$(document).on('em_view_loaded_calendar', function( e, view, form ){
3680		let calendar;
3681		if( view.hasClass('em-calendar') ){
3682			calendar = view;
3683		}else {
3684			calendar = view.find('.em-calendar').first();
3685		}
3686		em_calendar_init( calendar );
3687	});
3688});
3689
3690let EM_View_Updater = function( element, html ){
3691	let content = jQuery(html);
3692	let view = element.hasClass('em-view-container') ? element : element.parent('.em-view-container');
3693	if( view.length > 0 ){
3694		if( content.hasClass('em-view-container') ){
3695			view.replaceWith(content);
3696			view = content;
3697		}else{
3698			view.empty().append(content);
3699		}
3700	}else{
3701		// create a view if possible
3702		if( content.hasClass('em-view-container') ){
3703			element.replaceWith(content);
3704			view = content;
3705		}else if( content.attr('data-view-id') ){
3706			let view = jQuery('<div class="em em-view-container"></div>');
3707			let view_id = content.attr('data-view-id');
3708			view.attr('data-view-id', view_id);
3709			view.attr('id', 'em-view-'+ view_id);
3710			view.attr('data-view-type', content.attr('data-view-type'));
3711			view.append(content);
3712			element.replaceWith(view);
3713		}
3714	}
3715	em_setup_ui_elements( view[0] );
3716	return view;
3717}
3718
3719/**
3720 * Resize watcher for EM elements. Supply an object (localized array) of name > breakpoint, in order of least to largest and it'll add size-{name} class name according to the breakpoint.
3721 * An object item with value false will represent any screensize, i.e. it should be the last value when all breakpoints aren't met.
3722 * @param breakpoints
3723 * @param elements
3724 * @constructor
3725 */
3726let EM_ResizeObserver = function( breakpoints, elements ){
3727	const ro = new ResizeObserver( function( entries ){
3728		for (let entry of entries) {
3729			let el = entry.target;
3730			if( !el.classList.contains('size-fixed') ) {
3731				for (const [name, breakpoint] of Object.entries(breakpoints)) {
3732					if (el.offsetWidth <= breakpoint || breakpoint === false) {
3733						for (let breakpoint_name of Object.keys(breakpoints)) {
3734							if (breakpoint_name !== name) el.classList.remove('size-' + breakpoint_name);
3735						}
3736						// add class and trigger event only once
3737						if(	!el.classList.contains('size-' + name) ) {
3738							el.classList.add('size-' + name);
3739							el.dispatchEvent( new CustomEvent('em_resize') );
3740						}
3741						break;
3742					}
3743				}
3744			}
3745		}
3746	});
3747	elements.forEach( function( el ){
3748		if( typeof el !== 'undefined' ){
3749			ro.observe(el);
3750		}
3751	});
3752	return ro;
3753};
3754
3755// event list and event page (inc. some extra booking form logic) - todo/cleanup
3756jQuery(document).ready( function($){
3757	// Events List
3758	let breakpoints = {
3759		'small' : 600,
3760		'large' : false,
3761	}
3762	const events_ro = EM_ResizeObserver( breakpoints, $('.em-list').toArray() );
3763	$(document).on('em_page_loaded em_view_loaded_list em_view_loaded_list-grouped em_view_loaded_grid', function( e, view ){
3764		let new_elements = view.find('.em-list').each( function(){
3765			if( !this.classList.contains('size-fixed') ){
3766				events_ro.observe( this );
3767			}
3768		});
3769	});
3770
3771	$(document).on('click', '.em-grid .em-item[data-href]', function(e){
3772		if( e.target.type !== 'a' ){
3773			window.location.href = this.getAttribute('data-href');
3774		}
3775	});
3776
3777	// Single event area
3778	breakpoints = {
3779		'small' : 600,
3780		'medium' : 900,
3781		'large' : false,
3782	}
3783	const event_ro = EM_ResizeObserver( breakpoints, $('.em-item-single').toArray() );
3784	$(document).on('em_view_loaded', function( e, view ){
3785		let new_elements = view.find('.em-event-single').each( function(){
3786			if( !this.classList.contains('size-fixed') ){
3787				event_ro.observe( this );
3788			}
3789		});
3790	});
3791	// booking form area (WIP)
3792	$(document).on("click", ".em-event-booking-form .em-login-trigger a", function( e ){
3793		e.preventDefault();
3794		var parent = $(this).closest('.em-event-booking-form');
3795		parent.find('.em-login-trigger').hide();
3796		parent.find('.em-login-content').fadeIn();
3797		let login_form = parent.find('.em-login');
3798		login_form[0].scrollIntoView({
3799			behavior: 'smooth'
3800		});
3801		login_form.first().find('input[name="log"]').focus();
3802
3803	});
3804	$(document).on("click", ".em-event-booking-form .em-login-cancel", function( e ){
3805		e.preventDefault();
3806		let parent = $(this).closest('.em-event-booking-form');
3807		parent.find('.em-login-content').hide();
3808		parent.find('.em-login-trigger').show();
3809	});
3810	EM_ResizeObserver( {'small': 500, 'large' : false}, $('.em-login').toArray());
3811
3812});
3813
3814// handle generic ajax submission forms vanilla style
3815document.addEventListener('DOMContentLoaded', function () {
3816	document.querySelectorAll('form.em-ajax-form').forEach( function(el){
3817		el.addEventListener('submit', function(e){
3818			e.preventDefault();
3819			let form = e.currentTarget;
3820			let formData =  new FormData(form);
3821			let button = form.querySelector('button[type="submit"]');
3822			let loader;
3823
3824			if( form.classList.contains('no-overlay-spinner') ){
3825				form.classList.add('loading');
3826			}else{
3827				let loader = document.createElement('div');
3828				loader.id = 'em-loading';
3829				form.append(loader);
3830			}
3831
3832			var request = new XMLHttpRequest();
3833			if( form.getAttribute('data-api-url') ){
3834				request.open('POST', form.getAttribute('data-api-url'), true);
3835				request.setRequestHeader('X-WP-Nonce', EM.api_nonce);
3836			}else{
3837				request.open('POST', EM.ajaxurl, true);
3838			}
3839
3840			request.onload = function() {
3841				if( loader ) loader.remove();
3842				if (this.status >= 200 && this.status < 400) {
3843					// Success!
3844					try {
3845						let data = JSON.parse(this.response);
3846						let notice;
3847						if( !form.classList.contains('no-inline-notice') ){
3848							notice = form.querySelector('.em-notice');
3849							if( !notice ){
3850								notice = document.createElement('div');
3851								form.prepend(notice);
3852								if( formData.get('action') ){
3853									form.dispatchEvent( new CustomEvent( 'em_ajax_form_success_' + formData.get('action'), {
3854										detail : {
3855											form : form,
3856											notice : notice,
3857											response : data,
3858										}
3859									}) );
3860								}
3861							}
3862							notice.innerHTML = '';
3863							notice.setAttribute('class', 'em-notice');
3864						}
3865						if( data.result ){
3866							if( !form.classList.contains('no-inline-notice') ){
3867								notice.classList.add('em-notice-success');
3868								notice.innerHTML = data.message;
3869								form.replaceWith(notice);
3870							}else{
3871								form.classList.add('load-successful');
3872								form.classList.remove('loading');
3873								if( data.message ){
3874									EM_Alert(data.message);
3875								}
3876							}
3877						}else{
3878							if( !form.classList.contains('no-inline-notice') ){
3879								notice.classList.add('em-notice-error');
3880								notice.innerHTML = data.errors;
3881							}else{
3882								EM_Alert(data.errors);
3883							}
3884						}
3885					} catch(e) {
3886						alert( 'Error Encountered : ' + e);
3887					}
3888				} else {
3889					alert('Error encountered... please see debug logs or contact support.');
3890				}
3891				form.classList.remove('loading');
3892			};
3893
3894			request.onerror = function() {
3895				alert('Connection error encountered... please see debug logs or contact support.');
3896			};
3897
3898			request.send( formData );
3899			return false;
3900		});
3901	});
3902});
3903
3904// phone numbers
3905let em_setup_phone_inputs = function( container ){};
3906let em_unsetup_phone_inputs = function( container ){};
3907if ( EM.phone ) {
3908
3909	let getCountry = function() {
3910		var timezones = {
3911			"Africa/Abidjan": { c : ["CI", "BF", "GH", "GM", "GN", "ML", "MR", "SH", "SL", "SN", "TG"] },
3912			"Africa/Accra": { c : ["GH"] },
3913			"Africa/Addis_Ababa": { c : ["ET"] },
3914			"Africa/Algiers": { c : ["DZ"] },
3915			"Africa/Asmara": { c : ["ER"] },
3916			"Africa/Asmera": { c : ["ER"] },
3917			"Africa/Bamako": { c : ["ML"] },
3918			"Africa/Bangui": { c : ["CF"] },
3919			"Africa/Banjul": { c : ["GM"] },
3920			"Africa/Bissau": { c : ["GW"] },
3921			"Africa/Blantyre": { c : ["MW"] },
3922			"Africa/Brazzaville": { c : ["CG"] },
3923			"Africa/Bujumbura": { c : ["BI"] },
3924			"Africa/Cairo": { c : ["EG"] },
3925			"Africa/Casablanca": { c : ["MA"] },
3926			"Africa/Ceuta": { c : ["ES"] },
3927			"Africa/Conakry": { c : ["GN"] },
3928			"Africa/Dakar": { c : ["SN"] },
3929			"Africa/Dar_es_Salaam": { c : ["TZ"] },
3930			"Africa/Djibouti": { c : ["DJ"] },
3931			"Africa/Douala": { c : ["CM"] },
3932			"Africa/El_Aaiun": { c : ["EH"] },
3933			"Africa/Freetown": { c : ["SL"] },
3934			"Africa/Gaborone": { c : ["BW"] },
3935			"Africa/Harare": { c : ["ZW"] },
3936			"Africa/Johannesburg": { c : ["ZA", "LS", "SZ"] },
3937			"Africa/Juba": { c : ["SS"] },
3938			"Africa/Kampala": { c : ["UG"] },
3939			"Africa/Khartoum": { c : ["SD"] },
3940			"Africa/Kigali": { c : ["RW"] },
3941			"Africa/Kinshasa": { c : ["CD"] },
3942			"Africa/Lagos": { c : ["NG", "AO", "BJ", "CD", "CF", "CG", "CM", "GA", "GQ", "NE"] },
3943			"Africa/Libreville": { c : ["GA"] },
3944			"Africa/Lome": { c : ["TG"] },
3945			"Africa/Luanda": { c : ["AO"] },
3946			"Africa/Lubumbashi": { c : ["CD"] },
3947			"Africa/Lusaka": { c : ["ZM"] },
3948			"Africa/Malabo": { c : ["GQ"] },
3949			"Africa/Maputo": { c : ["MZ", "BI", "BW", "CD", "MW", "RW", "ZM", "ZW"] },
3950			"Africa/Maseru": { c : ["LS"] },
3951			"Africa/Mbabane": { c : ["SZ"] },
3952			"Africa/Mogadishu": { c : ["SO"] },
3953			"Africa/Monrovia": { c : ["LR"] },
3954			"Africa/Nairobi": { c : ["KE", "DJ", "ER", "ET", "KM", "MG", "SO", "TZ", "UG", "YT"] },
3955			"Africa/Ndjamena": { c : ["TD"] },
3956			"Africa/Niamey": { c : ["NE"] },
3957			"Africa/Nouakchott": { c : ["MR"] },
3958			"Africa/Ouagadougou": { c : ["BF"] },
3959			"Africa/Porto-Novo": { c : ["BJ"] },
3960			"Africa/Sao_Tome": { c : ["ST"] },
3961			"Africa/Timbuktu": { c : ["ML"] },
3962			"Africa/Tripoli": { c : ["LY"] },
3963			"Africa/Tunis": { c : ["TN"] },
3964			"Africa/Windhoek": { c : ["NA"] },
3965			"America/Adak": { c : ["US"] },
3966			"America/Anchorage": { c : ["US"] },
3967			"America/Anguilla": { c : ["AI"] },
3968			"America/Antigua": { c : ["AG"] },
3969			"America/Araguaina": { c : ["BR"] },
3970			"America/Argentina/Buenos_Aires": { c : ["AR"] },
3971			"America/Argentina/Catamarca": { c : ["AR"] },
3972			"America/Argentina/ComodRivadavia": { c : ["AR"] },
3973			"America/Argentina/Cordoba": { c : ["AR"] },
3974			"America/Argentina/Jujuy": { c : ["AR"] },
3975			"America/Argentina/La_Rioja": { c : ["AR"] },
3976			"America/Argentina/Mendoza": { c : ["AR"] },
3977			"America/Argentina/Rio_Gallegos": { c : ["AR"] },
3978			"America/Argentina/Salta": { c : ["AR"] },
3979			"America/Argentina/San_Juan": { c : ["AR"] },
3980			"America/Argentina/San_Luis": { c : ["AR"] },
3981			"America/Argentina/Tucuman": { c : ["AR"] },
3982			"America/Argentina/Ushuaia": { c : ["AR"] },
3983			"America/Aruba": { c : ["AW"] },
3984			"America/Asuncion": { c : ["PY"] },
3985			"America/Atikokan": { c : ["CA"] },
3986			"America/Atka": {},
3987			"America/Bahia": { c : ["BR"] },
3988			"America/Bahia_Banderas": { c : ["MX"] },
3989			"America/Barbados": { c : ["BB"] },
3990			"America/Belem": { c : ["BR"] },
3991			"America/Belize": { c : ["BZ"] },
3992			"America/Blanc-Sablon": { c : ["CA"] },
3993			"America/Boa_Vista": { c : ["BR"] },
3994			"America/Bogota": { c : ["CO"] },
3995			"America/Boise": { c : ["US"] },
3996			"America/Buenos_Aires": { c : ["AR"] },
3997			"America/Cambridge_Bay": { c : ["CA"] },
3998			"America/Campo_Grande": { c : ["BR"] },
3999			"America/Cancun": { c : ["MX"] },
4000			"America/Caracas": { c : ["VE"] },
4001			"America/Catamarca": {},
4002			"America/Cayenne": { c : ["GF"] },
4003			"America/Cayman": { c : ["KY"] },
4004			"America/Chicago": { c : ["US"] },
4005			"America/Chihuahua": { c : ["MX"] },
4006			"America/Coral_Harbour": { c : ["CA"] },
4007			"America/Cordoba": { c: ['AR'] },
4008			"America/Costa_Rica": { c : ["CR"] },
4009			"America/Creston": { c : ["CA"] },
4010			"America/Cuiaba": { c : ["BR"] },
4011			"America/Curacao": { c : ["CW"] },
4012			"America/Danmarkshavn": { c : ["GL"] },
4013			"America/Dawson": { c : ["CA"] },
4014			"America/Dawson_Creek": { c : ["CA"] },
4015			"America/Denver": { c : ["US"] },
4016			"America/Detroit": { c : ["US"] },
4017			"America/Dominica": { c : ["DM"] },
4018			"America/Edmonton": { c : ["CA"] },
4019			"America/Eirunepe": { c : ["BR"] },
4020			"America/El_Salvador": { c : ["SV"] },
4021			"America/Ensenada": {},
4022			"America/Fort_Nelson": { c : ["CA"] },
4023			"America/Fort_Wayne": {},
4024			"America/Fortaleza": { c : ["BR"] },
4025			"America/Glace_Bay": { c : ["CA"] },
4026			"America/Godthab": {},
4027			"America/Goose_Bay": { c : ["CA"] },
4028			"America/Grand_Turk": { c : ["TC"] },
4029			"America/Grenada": { c : ["GD"] },
4030			"America/Guadeloupe": { c : ["GP"] },
4031			"America/Guatemala": { c : ["GT"] },
4032			"America/Guayaquil": { c : ["EC"] },
4033			"America/Guyana": { c : ["GY"] },
4034			"America/Halifax": { c : ["CA"] },
4035			"America/Havana": { c : ["CU"] },
4036			"America/Hermosillo": { c : ["MX"] },
4037			"America/Indiana/Indianapolis": { c : ["US"] },
4038			"America/Indiana/Knox": { c : ["US"] },
4039			"America/Indiana/Marengo": { c : ["US"] },
4040			"America/Indiana/Petersburg": { c : ["US"] },
4041			"America/Indiana/Tell_City": { c : ["US"] },
4042			"America/Indiana/Vevay": { c : ["US"] },
4043			"America/Indiana/Vincennes": { c : ["US"] },
4044			"America/Indiana/Winamac": { c : ["US"] },
4045			"America/Indianapolis": {},
4046			"America/Inuvik": { c : ["CA"] },
4047			"America/Iqaluit": { c : ["CA"] },
4048			"America/Jamaica": { c : ["JM"] },
4049			"America/Jujuy": {},
4050			"America/Juneau": { c : ["US"] },
4051			"America/Kentucky/Louisville": { c : ["US"] },
4052			"America/Kentucky/Monticello": { c : ["US"] },
4053			"America/Knox_IN": {},
4054			"America/Kralendijk": { c : ["BQ"] },
4055			"America/La_Paz": { c : ["BO"] },
4056			"America/Lima": { c : ["PE"] },
4057			"America/Los_Angeles": { c : ["US"] },
4058			"America/Louisville": {},
4059			"America/Lower_Princes": { c : ["SX"] },
4060			"America/Maceio": { c : ["BR"] },
4061			"America/Managua": { c : ["NI"] },
4062			"America/Manaus": { c : ["BR"] },
4063			"America/Marigot": { c : ["MF"] },
4064			"America/Martinique": { c : ["MQ"] },
4065			"America/Matamoros": { c : ["MX"] },
4066			"America/Mazatlan": { c : ["MX"] },
4067			"America/Mendoza": {},
4068			"America/Menominee": { c : ["US"] },
4069			"America/Merida": { c : ["MX"] },
4070			"America/Metlakatla": { c : ["US"] },
4071			"America/Mexico_City": { c : ["MX"] },
4072			"America/Miquelon": { c : ["PM"] },
4073			"America/Moncton": { c : ["CA"] },
4074			"America/Monterrey": { c : ["MX"] },
4075			"America/Montevideo": { c : ["UY"] },
4076			"America/Montreal": { c : ["CA"] },
4077			"America/Montserrat": { c : ["MS"] },
4078			"America/Nassau": { c : ["BS"] },
4079			"America/New_York": { c : ["US"] },
4080			"America/Nipigon": { c : ["CA"] },
4081			"America/Nome": { c : ["US"] },
4082			"America/Noronha": { c : ["BR"] },
4083			"America/North_Dakota/Beulah": { c : ["US"] },
4084			"America/North_Dakota/Center": { c : ["US"] },
4085			"America/North_Dakota/New_Salem": { c : ["US"] },
4086			"America/Nuuk": { c : ["GL"] },
4087			"America/Ojinaga": { c : ["MX"] },
4088			"America/Panama": { c : ["PA", "CA", "KY"] },
4089			"America/Pangnirtung": { c : ["CA"] },
4090			"America/Paramaribo": { c : ["SR"] },
4091			"America/Phoenix": { c : ["US", "CA"] },
4092			"America/Port-au-Prince": { c : ["HT"] },
4093			"America/Port_of_Spain": { c : ["TT"] },
4094			"America/Porto_Acre": {},
4095			"America/Porto_Velho": { c : ["BR"] },
4096			"America/Puerto_Rico": { c : ["PR", "AG", "CA", "AI","AW","BL","BQ","CW","DM","GD","GP","KN","LC","MF","MS","SX","TT","VC","VG","VI"] },
4097			"America/Punta_Arenas": { c : ["CL"] },
4098			"America/Rainy_River": { c : ["CA"] },
4099			"America/Rankin_Inlet": { c : ["CA"] },
4100			"America/Recife": { c : ["BR"] },
4101			"America/Regina": { c : ["CA"] },
4102			"America/Resolute": { c : ["CA"] },
4103			"America/Rio_Branco": { c : ["BR"] },
4104			"America/Rosario": {},
4105			"America/Santa_Isabel": {},
4106			"America/Santarem": { c : ["BR"] },
4107			"America/Santiago": { c : ["CL"] },
4108			"America/Santo_Domingo": { c : ["DO"] },
4109			"America/Sao_Paulo": { c : ["BR"] },
4110			"America/Scoresbysund": { c : ["GL"] },
4111			"America/Shiprock": {},
4112			"America/Sitka": { c : ["US"] },
4113			"America/St_Barthelemy": { c : ["BL"] },
4114			"America/St_Johns": { c : ["CA"] },
4115			"America/St_Kitts": { c : ["KN"] },
4116			"America/St_Lucia": { c : ["LC"] },
4117			"America/St_Thomas": { c : ["VI"] },
4118			"America/St_Vincent": { c : ["VC"] },
4119			"America/Swift_Current": { c : ["CA"] },
4120			"America/Tegucigalpa": { c : ["HN"] },
4121			"America/Thule": { c : ["GL"] },
4122			"America/Thunder_Bay": { c : ["CA"] },
4123			"America/Tijuana": { c : ["MX"] },
4124			"America/Toronto": { c : ["CA", "BS"] },
4125			"America/Tortola": { c : ["VG"] },
4126			"America/Vancouver": { c : ["CA"] },
4127			"America/Virgin": { c : ["VI"] },
4128			"America/Whitehorse": { c : ["CA"] },
4129			"America/Winnipeg": { c : ["CA"] },
4130			"America/Yakutat": { c : ["US"] },
4131			"America/Yellowknife": { c : ["CA"] },
4132			"Antarctica/Casey": { c : ["AQ"] },
4133			"Antarctica/Davis": { c : ["AQ"] },
4134			"Antarctica/DumontDUrville": { c : ["AQ"] },
4135			"Antarctica/Macquarie": { c : ["AU"] },
4136			"Antarctica/Mawson": { c : ["AQ"] },
4137			"Antarctica/McMurdo": { c : ["AQ"] },
4138			"Antarctica/Palmer": { c : ["AQ"] },
4139			"Antarctica/Rothera": { c : ["AQ"] },
4140			"Antarctica/South_Pole": { c : ["AQ"] },
4141			"Antarctica/Syowa": { c : ["AQ"] },
4142			"Antarctica/Troll": { c : ["AQ"] },
4143			"Antarctica/Vostok": { c : ["AQ"] },
4144			"Arctic/Longyearbyen": { c : ["SJ"] },
4145			"Asia/Aden": { c : ["YE"] },
4146			"Asia/Almaty": { c : ["KZ"] },
4147			"Asia/Amman": { c : ["JO"] },
4148			"Asia/Anadyr": { c : ["RU"] },
4149			"Asia/Aqtau": { c : ["KZ"] },
4150			"Asia/Aqtobe": { c : ["KZ"] },
4151			"Asia/Ashgabat": { c : ["TM"] },
4152			"Asia/Ashkhabad": {},
4153			"Asia/Atyrau": { c : ["KZ"] },
4154			"Asia/Baghdad": { c : ["IQ"] },
4155			"Asia/Bahrain": { c : ["BH"] },
4156			"Asia/Baku": { c : ["AZ"] },
4157			"Asia/Bangkok": { c : ["TH", "KH", "LA", "VN"] },
4158			"Asia/Barnaul": { c : ["RU"] },
4159			"Asia/Beirut": { c : ["LB"] },
4160			"Asia/Bishkek": { c : ["KG"] },
4161			"Asia/Brunei": { c : ["BN"] },
4162			"Asia/Calcutta": {},
4163			"Asia/Chita": { c : ["RU"] },
4164			"Asia/Choibalsan": { c : ["MN"] },
4165			"Asia/Chongqing": {},
4166			"Asia/Chungking": {},
4167			"Asia/Colombo": { c : ["LK"] },
4168			"Asia/Dacca": {},
4169			"Asia/Damascus": { c : ["SY"] },
4170			"Asia/Dhaka": { c : ["BD"] },
4171			"Asia/Dili": { c : ["TL"] },
4172			"Asia/Dubai": { c : ["AE", "OM"] },
4173			"Asia/Dushanbe": { c : ["TJ"] },
4174			"Asia/Famagusta": { c : ["CY"] },
4175			"Asia/Gaza": { c : ["PS"] },
4176			"Asia/Harbin": {},
4177			"Asia/Hebron": { c : ["PS"] },
4178			"Asia/Ho_Chi_Minh": { c : ["VN"] },
4179			"Asia/Hong_Kong": { c : ["HK"] },
4180			"Asia/Hovd": { c : ["MN"] },
4181			"Asia/Irkutsk": { c : ["RU"] },
4182			"Asia/Istanbul": {},
4183			"Asia/Jakarta": { c : ["ID"] },
4184			"Asia/Jayapura": { c : ["ID"] },
4185			"Asia/Jerusalem": { c : ["IL"] },
4186			"Asia/Kabul": { c : ["AF"] },
4187			"Asia/Kamchatka": { c : ["RU"] },
4188			"Asia/Karachi": { c : ["PK"] },
4189			"Asia/Kashgar": {},
4190			"Asia/Kathmandu": { c : ["NP"] },
4191			"Asia/Katmandu": {},
4192			"Asia/Khandyga": { c : ["RU"] },
4193			"Asia/Kolkata": { c : ["IN"] },
4194			"Asia/Krasnoyarsk": { c : ["RU"] },
4195			"Asia/Kuala_Lumpur": { c : ["MY"] },
4196			"Asia/Kuching": { c : ["MY"] },
4197			"Asia/Kuwait": { c : ["KW"] },
4198			"Asia/Macao": {},
4199			"Asia/Macau": { c : ["MO"] },
4200			"Asia/Magadan": { c : ["RU"] },
4201			"Asia/Makassar": { c : ["ID"] },
4202			"Asia/Manila": { c : ["PH"] },
4203			"Asia/Muscat": { c : ["OM"] },
4204			"Asia/Nicosia": { c : ["CY"] },
4205			"Asia/Novokuznetsk": { c : ["RU"] },
4206			"Asia/Novosibirsk": { c : ["RU"] },
4207			"Asia/Omsk": { c : ["RU"] },
4208			"Asia/Oral": { c : ["KZ"] },
4209			"Asia/Phnom_Penh": { c : ["KH"] },
4210			"Asia/Pontianak": { c : ["ID"] },
4211			"Asia/Pyongyang": { c : ["KP"] },
4212			"Asia/Qatar": { c : ["QA", "BH"] },
4213			"Asia/Qostanay": { c : ["KZ"] },
4214			"Asia/Qyzylorda": { c : ["KZ"] },
4215			"Asia/Rangoon": {},
4216			"Asia/Riyadh": { c : ["SA", "AQ", "KW", "YE"] },
4217			"Asia/Saigon": {},
4218			"Asia/Sakhalin": { c : ["RU"] },
4219			"Asia/Samarkand": { c : ["UZ"] },
4220			"Asia/Seoul": { c : ["KR"] },
4221			"Asia/Shanghai": { c : ["CN"] },
4222			"Asia/Singapore": { c : ["SG", "MY"] },
4223			"Asia/Srednekolymsk": { c : ["RU"] },
4224			"Asia/Taipei": { c : ["TW"] },
4225			"Asia/Tashkent": { c : ["UZ"] },
4226			"Asia/Tbilisi": { c : ["GE"] },
4227			"Asia/Tehran": { c : ["IR"] },
4228			"Asia/Tel_Aviv": {},
4229			"Asia/Thimbu": {},
4230			"Asia/Thimphu": { c : ["BT"] },
4231			"Asia/Tokyo": { c : ["JP"] },
4232			"Asia/Tomsk": { c : ["RU"] },
4233			"Asia/Ujung_Pandang": {},
4234			"Asia/Ulaanbaatar": { c : ["MN"] },
4235			"Asia/Ulan_Bator": {},
4236			"Asia/Urumqi": { c : ["CN"] },
4237			"Asia/Ust-Nera": { c : ["RU"] },
4238			"Asia/Vientiane": { c : ["LA"] },
4239			"Asia/Vladivostok": { c : ["RU"] },
4240			"Asia/Yakutsk": { c : ["RU"] },
4241			"Asia/Yangon": { c : ["MM"] },
4242			"Asia/Yekaterinburg": { c : ["RU"] },
4243			"Asia/Yerevan": { c : ["AM"] },
4244			"Atlantic/Azores": { c : ["PT"] },
4245			"Atlantic/Bermuda": { c : ["BM"] },
4246			"Atlantic/Canary": { c : ["ES"] },
4247			"Atlantic/Cape_Verde": { c : ["CV"] },
4248			"Atlantic/Faeroe": {},
4249			"Atlantic/Faroe": { c : ["FO"] },
4250			"Atlantic/Jan_Mayen": { c : ["SJ"] },
4251			"Atlantic/Madeira": { c : ["PT"] },
4252			"Atlantic/Reykjavik": { c : ["IS"] },
4253			"Atlantic/South_Georgia": { c : ["GS"] },
4254			"Atlantic/St_Helena": { c : ["SH"] },
4255			"Atlantic/Stanley": { c : ["FK"] },
4256			"Australia/ACT": {},
4257			"Australia/Adelaide": { c : ["AU"] },
4258			"Australia/Brisbane": { c : ["AU"] },
4259			"Australia/Broken_Hill": { c : ["AU"] },
4260			"Australia/Canberra": {},
4261			"Australia/Currie": {},
4262			"Australia/Darwin": { c : ["AU"] },
4263			"Australia/Eucla": { c : ["AU"] },
4264			"Australia/Hobart": { c : ["AU"] },
4265			"Australia/LHI": {},
4266			"Australia/Lindeman": { c : ["AU"] },
4267			"Australia/Lord_Howe": { c : ["AU"] },
4268			"Australia/Melbourne": { c : ["AU"] },
4269			"Australia/NSW": {},
4270			"Australia/North": {},
4271			"Australia/Perth": { c : ["AU"] },
4272			"Australia/Queensland": {},
4273			"Australia/South": {},
4274			"Australia/Sydney": { c : ["AU"] },
4275			"Australia/Tasmania": {},
4276			"Australia/Victoria": {},
4277			"Australia/West": {},
4278			"Australia/Yancowinna": {},
4279			"Brazil/Acre": {},
4280			"Brazil/DeNoronha": {},
4281			"Brazil/East": {},
4282			"Brazil/West": {},
4283			CET: { c : ["XK"] },
4284			CST6CDT: {},
4285			"Canada/Atlantic": {},
4286			"Canada/Central": {},
4287			"Canada/Eastern": { c : ["CA"] },
4288			"Canada/Mountain": {},
4289			"Canada/Newfoundland": {},
4290			"Canada/Pacific": {},
4291			"Canada/Saskatchewan": {},
4292			"Canada/Yukon": {},
4293			"Chile/Continental": {},
4294			"Chile/EasterIsland": {},
4295			Cuba: {},
4296			EET: {},
4297			EST: {},
4298			EST5EDT: {},
4299			Egypt: {},
4300			Eire: {},
4301			"Etc/GMT": { c : ["AC"] },
4302			"Etc/GMT+0": {},
4303			"Etc/GMT+1": {},
4304			"Etc/GMT+10": {},
4305			"Etc/GMT+11": {},
4306			"Etc/GMT+12": {},
4307			"Etc/GMT+2": {},
4308			"Etc/GMT+3": {},
4309			"Etc/GMT+4": {},
4310			"Etc/GMT+5": {},
4311			"Etc/GMT+6": {},
4312			"Etc/GMT+7": {},
4313			"Etc/GMT+8": {},
4314			"Etc/GMT+9": {},
4315			"Etc/GMT-0": {},
4316			"Etc/GMT-1": {},
4317			"Etc/GMT-10": {},
4318			"Etc/GMT-11": {},
4319			"Etc/GMT-12": {},
4320			"Etc/GMT-13": {},
4321			"Etc/GMT-14": {},
4322			"Etc/GMT-2": {},
4323			"Etc/GMT-3": {},
4324			"Etc/GMT-4": {},
4325			"Etc/GMT-5": {},
4326			"Etc/GMT-6": {},
4327			"Etc/GMT-7": {},
4328			"Etc/GMT-8": {},
4329			"Etc/GMT-9": {},
4330			"Etc/GMT0": {},
4331			"Etc/Greenwich": {},
4332			"Etc/UCT": {},
4333			"Etc/UTC": {},
4334			"Etc/Universal": {},
4335			"Etc/Zulu": {},
4336			"Europe/Amsterdam": { c : ["NL"] },
4337			"Europe/Andorra": { c : ["AD"] },
4338			"Europe/Astrakhan": { c : ["RU"] },
4339			"Europe/Athens": { c : ["GR"] },
4340			"Europe/Belfast": { c : ["GB"] },
4341			"Europe/Belgrade": { c : ["RS", "BA", "HR", "ME", "MK", "SI"] },
4342			"Europe/Berlin": { c : ["DE"] },
4343			"Europe/Bratislava": { c : ["SK"] },
4344			"Europe/Brussels": { c : ["BE"] },
4345			"Europe/Bucharest": { c : ["RO"] },
4346			"Europe/Budapest": { c : ["HU"] },
4347			"Europe/Busingen": { c : ["DE"] },
4348			"Europe/Chisinau": { c : ["MD"] },
4349			"Europe/Copenhagen": { c : ["DK"] },
4350			"Europe/Dublin": { c : ["IE"] },
4351			"Europe/Gibraltar": { c : ["GI"] },
4352			"Europe/Guernsey": { c : ["GG"] },
4353			"Europe/Helsinki": { c : ["FI", "AX"] },
4354			"Europe/Isle_of_Man": { c : ["IM"] },
4355			"Europe/Istanbul": { c : ["TR"] },
4356			"Europe/Jersey": { c : ["JE"] },
4357			"Europe/Kaliningrad": { c : ["RU"] },
4358			"Europe/Kiev": { c : ["UA"] },
4359			"Europe/Kirov": { c : ["RU"] },
4360			"Europe/Lisbon": { c : ["PT"] },
4361			"Europe/Ljubljana": { c : ["SI"] },
4362			"Europe/London": { c : ["GB", "GG", "IM", "JE"] },
4363			"Europe/Luxembourg": { c : ["LU"] },
4364			"Europe/Madrid": { c : ["ES"] },
4365			"Europe/Malta": { c : ["MT"] },
4366			"Europe/Mariehamn": { c : ["AX"] },
4367			"Europe/Minsk": { c : ["BY"] },
4368			"Europe/Monaco": { c : ["MC"] },
4369			"Europe/Moscow": { c : ["RU"] },
4370			"Europe/Nicosia": {},
4371			"Europe/Oslo": { c : ["NO", "SJ", "BV"] },
4372			"Europe/Paris": { c : ["FR"] },
4373			"Europe/Podgorica": { c : ["ME"] },
4374			"Europe/Prague": { c : ["CZ", "SK"] },
4375			"Europe/Riga": { c : ["LV"] },
4376			"Europe/Rome": { c : ["IT", "SM", "VA"] },
4377			"Europe/Samara": { c : ["RU"] },
4378			"Europe/San_Marino": { c : ["SM"] },
4379			"Europe/Sarajevo": { c : ["BA"] },
4380			"Europe/Saratov": { c : ["RU"] },
4381			"Europe/Simferopol": { c : ["RU", "UA"] },
4382			"Europe/Skopje": { c : ["MK"] },
4383			"Europe/Sofia": { c : ["BG"] },
4384			"Europe/Stockholm": { c : ["SE"] },
4385			"Europe/Tallinn": { c : ["EE"] },
4386			"Europe/Tirane": { c : ["AL"] },
4387			"Europe/Tiraspol": {},
4388			"Europe/Ulyanovsk": { c : ["RU"] },
4389			"Europe/Uzhgorod": { c : ["UA"] },
4390			"Europe/Vaduz": { c : ["LI"] },
4391			"Europe/Vatican": { c : ["VA"] },
4392			"Europe/Vienna": { c : ["AT"] },
4393			"Europe/Vilnius": { c : ["LT"] },
4394			"Europe/Volgograd": { c : ["RU"] },
4395			"Europe/Warsaw": { c : ["PL"] },
4396			"Europe/Zagreb": { c : ["HR"] },
4397			"Europe/Zaporozhye": { c : ["UA"] },
4398			"Europe/Zurich": { c : ["CH", "DE", "LI"] },
4399			Factory: {},
4400			GB: { c : ["GB"] },
4401			"GB-Eire": { c : ["GB"] },
4402			GMT: { c : ["AC"] },
4403			"GMT+0": {},
4404			"GMT-0": {},
4405			GMT0: {},
4406			Greenwich: {},
4407			HST: {},
4408			Hongkong: {},
4409			Iceland: {},
4410			"Indian/Antananarivo": { c : ["MG"] },
4411			"Indian/Chagos": { c : ["IO"] },
4412			"Indian/Christmas": { c : ["CX"] },
4413			"Indian/Cocos": { c : ["CC"] },
4414			"Indian/Comoro": { c : ["KM"] },
4415			"Indian/Kerguelen": { c : ["TF", "HM"] },
4416			"Indian/Mahe": { c : ["SC"] },
4417			"Indian/Maldives": { c : ["MV"] },
4418			"Indian/Mauritius": { c : ["MU"] },
4419			"Indian/Mayotte": { c : ["YT"] },
4420			"Indian/Reunion": { c : ["RE", "TF"] },
4421			Iran: {},
4422			Israel: {},
4423			Jamaica: {},
4424			Japan: {},
4425			Kwajalein: {},
4426			Libya: {},
4427			MET: {},
4428			MST: {},
4429			MST7MDT: {},
4430			"Mexico/BajaNorte": {},
4431			"Mexico/BajaSur": {},
4432			"Mexico/General": {},
4433			NZ: { c : ["NZ"] },
4434			"NZ-CHAT": {},
4435			Navajo: {},
4436			PRC: {},
4437			PST8PDT: {},
4438			"Pacific/Apia": { c : ["WS"] },
4439			"Pacific/Auckland": { c : ["NZ", "AQ"] },
4440			"Pacific/Bougainville": { c : ["PG"] },
4441			"Pacific/Chatham": { c : ["NZ"] },
4442			"Pacific/Chuuk": { c : ["FM"] },
4443			"Pacific/Easter": { c : ["CL"] },
4444			"Pacific/Efate": { c : ["VU"] },
4445			"Pacific/Enderbury": {},
4446			"Pacific/Fakaofo": { c : ["TK"] },
4447			"Pacific/Fiji": { c : ["FJ"] },
4448			"Pacific/Funafuti": { c : ["TV"] },
4449			"Pacific/Galapagos": { c : ["EC"] },
4450			"Pacific/Gambier": { c : ["PF"] },
4451			"Pacific/Guadalcanal": { c : ["SB"] },
4452			"Pacific/Guam": { c : ["GU", "MP"] },
4453			"Pacific/Honolulu": { c : ["US", "UM"] },
4454			"Pacific/Johnston": { c : ["UM"] },
4455			"Pacific/Kanton": { c : ["KI"] },
4456			"Pacific/Kiritimati": { c : ["KI"] },
4457			"Pacific/Kosrae": { c : ["FM"] },
4458			"Pacific/Kwajalein": { c : ["MH"] },
4459			"Pacific/Majuro": { c : ["MH"] },
4460			"Pacific/Marquesas": { c : ["PF"] },
4461			"Pacific/Midway": { c : ["UM"] },
4462			"Pacific/Nauru": { c : ["NR"] },
4463			"Pacific/Niue": { c : ["NU"] },
4464			"Pacific/Norfolk": { c : ["NF"] },
4465			"Pacific/Noumea": { c : ["NC"] },
4466			"Pacific/Pago_Pago": { c : ["AS", "UM"] },
4467			"Pacific/Palau": { c : ["PW"] },
4468			"Pacific/Pitcairn": { c : ["PN"] },
4469			"Pacific/Pohnpei": { c : ["FM"] },
4470			"Pacific/Ponape": {},
4471			"Pacific/Port_Moresby": { c : ["PG", "AQ"] },
4472			"Pacific/Rarotonga": { c : ["CK"] },
4473			"Pacific/Saipan": { c : ["MP"] },
4474			"Pacific/Samoa": { c : ["WS"] },
4475			"Pacific/Tahiti": { c : ["PF"] },
4476			"Pacific/Tarawa": { c : ["KI"] },
4477			"Pacific/Tongatapu": { c : ["TO"] },
4478			"Pacific/Truk": {},
4479			"Pacific/Wake": { c : ["UM"] },
4480			"Pacific/Wallis": { c : ["WF"] },
4481			"Pacific/Yap": {},
4482			Poland: {},
4483			Portugal: {},
4484			ROC: {},
4485			ROK: {},
4486			Singapore: { c : ["SG"] },
4487			Turkey: {},
4488			UCT: {},
4489			"US/Alaska": {},
4490			"US/Aleutian": {},
4491			"US/Arizona": { c : ["US"] },
4492			"US/Central": {},
4493			"US/East-Indiana": {},
4494			"US/Eastern": {},
4495			"US/Hawaii": { c : ["US"] },
4496			"US/Indiana-Starke": {},
4497			"US/Michigan": {},
4498			"US/Mountain": {},
4499			"US/Pacific": {},
4500			"US/Samoa": { c : ["WS"] },
4501			UTC: {},
4502			Universal: {},
4503			"W-SU": {},
4504			WET: {},
4505			Zulu: {
4506			}
4507		};
4508
4509		const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
4510
4511		if (timezone === "" || !timezone) {
4512			return null;
4513		}
4514
4515		return timezones[timezone].c[0];
4516	}
4517
4518	let utilsScriptLoaded;
4519
4520	em_setup_phone_inputs = async function ( container, overriding_options = {} ) {
4521		if ( !EM.phone ) return false;
4522		if( !utilsScriptLoaded ) {
4523			import( EM.url + '/includes/external/intl-tel-input/js/intlTelInputWithUtils.js' ).then( () => {
4524				utilsScriptLoaded = true;
4525				em_setup_phone_inputs( container );
4526			});
4527			return false;
4528		} // on initial load, we wait for scripts to load
4529		container.querySelectorAll('input.em-phone-intl[type="tel"]').forEach( function(input){
4530			// change name and allow a hidden field for submission
4531			let alt = document.createElement('input');
4532			let name = input.name;
4533			if( name ) {
4534				// check if there's an ending ] in the name if so modify the name within the last brackets
4535				let lastBracket = name.lastIndexOf(']');
4536				if( lastBracket > -1 ) {
4537					input.name = name.substring(0, lastBracket) + '_intl]';
4538				} else {
4539					input.name = name + '_intl';
4540				}
4541				alt.name = name;
4542			}
4543			input.classList.add('em-intl-tel');
4544			// copy all classes and remove ones we know we don't want
4545			alt.setAttribute('class', input.getAttribute('class') + ' em-intl-tel-full');
4546			alt.classList.remove('em-intl-tel');
4547			alt.type = 'hidden';
4548			if( input.id ) {
4549				alt.id = input.id + '-full'
4550			}
4551			alt.value = input.value;
4552			// add data-name to the full input if it exists, for use in dynamic input forms for JS submission within forms
4553			if( input.getAttribute('data-name') ) {
4554				alt.setAttribute('data-name', input.getAttribute('data-name'));
4555				input.removeAttribute('data-name');
4556			}
4557			input.after(alt);
4558
4559			let default_options = Object.assign({
4560				autoPlaceholder: 'aggressive',
4561				separateDialCode : true,
4562			}, EM.phone.options);
4563			let options = Object.assign( default_options, overriding_options );
4564
4565			if( EM.phone.detectJS || options.detectJS ) {
4566				let country = getCountry();
4567				if( country ) {
4568					options.initialCountry = country;
4569				} else if ( EM.phone.initialCountry ) {
4570					options.initialCountry = EM.phone.initialCountry;
4571				}
4572			}
4573			if( options.onlyCountries ) {
4574				if( Array.isArray(options.onlyCountries) && options.onlyCountries.length > 0 ) {
4575					// make sure initial country is not excluded
4576					if (!options.onlyCountries.includes(options.initialCountry && options.initialCountry)) {
4577						options.onlyCountries.push(options.initialCountry);
4578					}
4579				} else {
4580					options.onlyCountries = [];
4581				}
4582			}
4583
4584			let iti = EM.intlTelInput( input, options);
4585			if ( !input?.checkVisibility() ) {
4586				// if the input is hidden, we need some trickery to correctly obtain the padding by adding a clone of the minimum into the array
4587				// intl-tel-input does this, but because it's not wrapped in an em element the padding isn't correctly styled via CSS
4588				let body = document.body;
4589				let container = document.createElement('div');
4590				container.style.visibility = "hidden";
4591				container.classList.add('em');
4592				body.appendChild( container );
4593				let containerClone = input.parentNode.cloneNode( false );
4594				container.appendChild( containerClone );
4595				let countryContainerClone = iti.ui.countryContainer.cloneNode();
4596				containerClone.appendChild( countryContainerClone );
4597				let selectedCountryClone = iti.ui.selectedCountry.cloneNode( true );
4598				countryContainerClone.appendChild( selectedCountryClone );
4599				let width = selectedCountryClone.offsetWidth + 12; // add extra padding
4600				input.style.setProperty('padding-left', width + 'px', 'important' );
4601				body.removeChild( container );
4602			}
4603			//iti.countryContainer.querySelector('button')?.setAttribute('data-nostyle', '');
4604			let pixels = parseInt( input.style.paddingLeft.replace('px', '') ); // pad this an extra px
4605			input.style.setProperty('padding-left', pixels + 'px', 'important' );
4606
4607			// do some basic inline validation
4608			input.addEventListener('change', function( e ){
4609				alt.value = iti.getNumber();
4610				if ( input.value.trim() ) {
4611					let wrapper = input.closest('.iti')
4612					if ( iti.isValidNumber() ) {
4613						wrapper.classList.remove("invalid-number");
4614						if ( wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error') ) {
4615							wrapper.nextElementSibling.remove();
4616						}
4617					} else {
4618						wrapper.classList.add("invalid-number");
4619						const errorCode = iti.getValidationError();
4620						let errorMsg;
4621						if( !(wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error')) ) {
4622							// create a div em-form-error class name and append after input
4623							errorMsg = document.createElement('div');
4624							errorMsg.classList.add('em-inline-error');
4625							wrapper.after(errorMsg);
4626						} else {
4627							errorMsg = wrapper.nextElementSibling;
4628						}
4629						errorMsg.innerHTML = '<span class="em-icon"></span> ' + EM.phone.error;
4630						errorMsg.classList.remove("hide");
4631					}
4632				}
4633			});
4634			
4635			// trigger changes
4636			input.addEventListener('countrychange', function( e ){
4637				alt.value = iti.getNumber();
4638				// check input padding inline style and set it to important
4639				if( input.getAttribute('style') ) {
4640					let pixels = parseInt(input.style.paddingLeft.replace('px', '')); // pad this an extra px
4641					input.style.setProperty('padding-left', pixels + 'px', 'important' );
4642				}
4643			});
4644
4645			input.addEventListener('open:countrydropdown', function( e ) {
4646				document.querySelectorAll('.iti.iti--container.iti--fullscreen-popup').forEach( function( el ) {
4647					if ( !el.closest('.em') ) {
4648						// wrap in an .em div
4649						let div = document.createElement('div');
4650						div.classList.add('em');
4651						el.parentNode.insertBefore(div, el);
4652						div.appendChild(el);
4653						el.querySelector('input.iti__search-input')?.focus();
4654					}
4655				});
4656			});
4657
4658		});
4659	};
4660
4661	em_unsetup_phone_inputs = function( container ) {
4662		container.querySelectorAll( 'input.em-phone-intl[type="tel"]' ).forEach( function(el){
4663			let iti = EM.intlTelInput?.getInstance(el);
4664			if ( iti ) {
4665				iti.destroy();
4666				// remove alt field as well and unset the _intl suffix, which may have a trailing ] so needs a preg
4667				el.name = el.name.replace(/_intl]$/, ']').replace(/_intl$/, '');
4668				el.parentElement.querySelector('input.em-intl-tel-full')?.remove();
4669			}
4670		});
4671	};
4672}
4673
4674/*!
4675 * jquery-timepicker v1.13.16 - Copyright (c) 2020 Jon Thornton - https://www.jonthornton.com/jquery-timepicker/
4676 * Did a search/replace of timepicker to em_timepicker to prevent conflicts.
4677 */
4678(function(){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function(obj){return typeof obj}}else{_typeof=function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable});keys.push.apply(keys,symbols)}return keys}
4678function _objectSpread2(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}}return target}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _createForOfIteratorHelper(o){if(typeof Symbol==="undefined"||o[Symbol.iterator]==null){if(Array.isArray(o)||(o=_unsupportedIterableToArray(o))){var i=0;var F=function(){};return{s:F,n:function(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function(e){throw e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var it,normalCompletion=true,didErr=false,err;return{s:function(){it=o[Symbol.iterator]()},n:function(){var step=it.next();normalCompletion=step.done;return step},e:function(e){didErr=true;err=e},f:function(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}var ONE_DAY=86400;var roundingFunction=function roundingFunction(seconds,settings){if(seconds===null){return null}else if(typeof settings.step!=="number"){return seconds}else{var offset=seconds%(settings.step*60);var start=settings.minTime||0;offset-=start%(settings.step*60);if(offset>=settings.step*30){seconds+=settings.step*60-offset}else{seconds-=offset}return _moduloSeconds(seconds,settings)}};function _moduloSeconds(seconds,settings){if(seconds==ONE_DAY&&settings.show2400){return seconds}return seconds%ONE_DAY}var DEFAULT_SETTINGS={appendTo:"body",className:null,closeOnWindowScroll:false,disableTextInput:false,disableTimeRanges:[],disableTouchKeyboard:false,durationTime:null,forceRoundTime:false,lang:{},listWidth:null,maxTime:null,minTime:null,noneOption:false,orientation:"l",roundingFunction:roundingFunction,scrollDefault:null,selectOnBlur:false,show2400:false,showDuration:false,showOn:["click","focus"],showOnFocus:true,step:30,stopScrollPropagation:false,timeFormat:"g:ia",typeaheadHighlight:true,useSelect:false,wrapHours:true};var DEFAULT_LANG={am:"am",pm:"pm",AM:"AM",PM:"PM",decimal:".",mins:"mins",hr:"hr",hrs:"hrs"};var Timepicker=function(){function Timepicker(targetEl){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,Timepicker);this._handleFormatValue=this._handleFormatValue.bind(this);this._handleKeyUp=this._handleKeyUp.bind(this);this.targetEl=targetEl;var attrOptions=Timepicker.extractAttrOptions(targetEl,Object.keys(DEFAULT_SETTINGS));this.settings=this.parseSettings(_objectSpread2(_objectSpread2(_objectSpread2({},DEFAULT_SETTINGS),options),attrOptions))}_createClass(Timepicker,[{key:"hideMe",value:function hideMe(){if(this.settings.useSelect){this.targetEl.blur();return}if(!this.list||!Timepicker.isVisible(this.list)){return}if(this.settings.selectOnBlur){this._selectValue()}this.list.hide();var hideTimepickerEvent=new CustomEvent("hideTimepicker");this.targetEl.dispatchEvent(hideTimepickerEvent)}},{key:"_findRow",value:function _findRow(value){if(!value&&value!==0){return false}var out=false;var value=this.settings.roundingFunction(value,this.settings);if(!this.list){return false}this.list.find("li").each(function(i,obj){var parsed=Number.parseInt(obj.dataset.time);if(Number.isNaN(parsed)){return}if(parsed==value){out=obj;return false}});return out}},{key:"_hideKeyboard",value:function _hideKeyboard(){return(window.navigator.msMaxTouchPoints||"ontouchstart"in document)&&this.settings.disableTouchKeyboard}},{key:"_setTimeValue",value:function _setTimeValue(value,source){if(this.targetEl.nodeName==="INPUT"){if(value!==null||this.targetEl.value!=""){this.targetEl.value=value}var tp=this;var settings=tp.settings;if(settings.useSelect&&source!="select"&&tp.list){tp.list.val(tp._roundAndFormatTime(tp.time2int(value)))}}
4678var selectTimeEvent=new Event("selectTime");if(this.selectedValue!=value){this.selectedValue=value;var changeTimeEvent=new Event("changeTime");var changeEvent=new CustomEvent("change",{detail:"em_timepicker"});if(source=="select"){this.targetEl.dispatchEvent(selectTimeEvent);this.targetEl.dispatchEvent(changeTimeEvent);this.targetEl.dispatchEvent(changeEvent)}else if(["error","initial"].indexOf(source)==-1){this.targetEl.dispatchEvent(changeTimeEvent)}return true}else{if(["error","initial"].indexOf(source)==-1){this.targetEl.dispatchEvent(selectTimeEvent)}return false}}},{key:"_getTimeValue",value:function _getTimeValue(){if(this.targetEl.nodeName==="INPUT"){return this.targetEl.value}else{return this.selectedValue}}},{key:"_selectValue",value:function _selectValue(){var tp=this;var settings=tp.settings;var list=tp.list;var cursor=list.find(".ui-em_timepicker-selected");if(cursor.hasClass("ui-em_timepicker-disabled")){return false}if(!cursor.length){return true}var timeValue=cursor.get(0).dataset.time;if(timeValue){var parsedTimeValue=Number.parseInt(timeValue);if(!Number.isNaN(parsedTimeValue)){timeValue=parsedTimeValue}}if(timeValue!==null){if(typeof timeValue!="string"){timeValue=tp._int2time(timeValue)}tp._setTimeValue(timeValue,"select")}return true}},{key:"time2int",value:function time2int(timeString){if(timeString===""||timeString===null||timeString===undefined)return null;if(timeString instanceof Date){return timeString.getHours()*3600+timeString.getMinutes()*60+timeString.getSeconds()}if(typeof timeString!="string"){return timeString}timeString=timeString.toLowerCase().replace(/[\s\.]/g,"");if(timeString.slice(-1)=="a"||timeString.slice(-1)=="p"){timeString+="m"}var pattern=/^(([^0-9]*))?([0-9]?[0-9])(([0-5][0-9]))?(([0-5][0-9]))?(([^0-9]*))$/;var hasDelimetersMatch=timeString.match(/\W/);if(hasDelimetersMatch){pattern=/^(([^0-9]*))?([0-9]?[0-9])(\W+([0-5][0-9]?))?(\W+([0-5][0-9]))?(([^0-9]*))$/}var time=timeString.match(pattern);if(!time){return null}var hour=parseInt(time[3]*1,10);var ampm=time[2]||time[9];var hours=hour;var minutes=time[5]*1||0;var seconds=time[7]*1||0;if(!ampm&&time[3].length==2&&time[3][0]=="0"){ampm="am"}if(hour<=12&&ampm){ampm=ampm.trim();var isPm=ampm==this.settings.lang.pm||ampm==this.settings.lang.PM;if(hour==12){hours=isPm?12:0}else{hours=hour+(isPm?12:0)}}else{var t=hour*3600+minutes*60+seconds;if(t>=ONE_DAY+(this.settings.show2400?1:0)){if(this.settings.wrapHours===false){return null}hours=hour%24}}var timeInt=hours*3600+minutes*60+seconds;if(hour<12&&!ampm&&this.settings._twelveHourTime&&this.settings.scrollDefault){var delta=timeInt-this.settings.scrollDefault();if(delta<0&&delta>=ONE_DAY/-2){timeInt=(timeInt+ONE_DAY/2)%ONE_DAY}}return timeInt}},{key:"parseSettings",value:function parseSettings(settings){var _this=this;settings.lang=_objectSpread2(_objectSpread2({},DEFAULT_LANG),settings.lang);this.settings=settings;if(settings.minTime){settings.minTime=this.time2int(settings.minTime)}if(settings.maxTime){settings.maxTime=this.time2int(settings.maxTime)}if(settings.listWidth){settings.listWidth=this.time2int(settings.listWidth)}if(settings.durationTime&&typeof settings.durationTime!=="function"){settings.durationTime=this.time2int(settings.durationTime)}if(settings.scrollDefault=="now"){settings.scrollDefault=function(){return settings.roundingFunction(_this.time2int(new Date),settings)}}else if(settings.scrollDefault&&typeof settings.scrollDefault!="function"){var val=settings.scrollDefault;settings.scrollDefault=function(){return settings.roundingFunction(_this.time2int(val),settings)}}else if(settings.minTime){settings.scrollDefault=function(){return settings.roundingFunction(settings.minTime,settings)}}if(typeof settings.timeFormat==="string"&&settings.timeFormat.match(/[gh]/)){settings._twelveHourTime=true}if(settings.showOnFocus===false&&settings.showOn.indexOf("focus")!=-1){settings.showOn.splice(settings.showOn.indexOf("focus"),1)}if(!settings.disableTimeRanges){settings.disableTimeRanges=[]}if(settings.disableTimeRanges.length>0){for(var i in settings.disableTimeRanges){settings.disableTimeRanges[i]=[this.time2int(sett
4678ings.disableTimeRanges[i][0]),this.time2int(settings.disableTimeRanges[i][1])]}settings.disableTimeRanges=settings.disableTimeRanges.sort(function(a,b){return a[0]-b[0]});for(var i=settings.disableTimeRanges.length-1;i>0;i--){if(settings.disableTimeRanges[i][0]<=settings.disableTimeRanges[i-1][1]){settings.disableTimeRanges[i-1]=[Math.min(settings.disableTimeRanges[i][0],settings.disableTimeRanges[i-1][0]),Math.max(settings.disableTimeRanges[i][1],settings.disableTimeRanges[i-1][1])];settings.disableTimeRanges.splice(i,1)}}}return settings}},{key:"_disableTextInputHandler",value:function _disableTextInputHandler(e){switch(e.keyCode){case 13:case 9:return;default:e.preventDefault()}}},{key:"_int2duration",value:function _int2duration(seconds,step){seconds=Math.abs(seconds);var minutes=Math.round(seconds/60),duration=[],hours,mins;if(minutes<60){duration=[minutes,this.settings.lang.mins]}else{hours=Math.floor(minutes/60);mins=minutes%60;if(step==30&&mins==30){hours+=this.settings.lang.decimal+5}duration.push(hours);duration.push(hours==1?this.settings.lang.hr:this.settings.lang.hrs);if(step!=30&&mins){duration.push(mins);duration.push(this.settings.lang.mins)}}return duration.join(" ")}},{key:"_roundAndFormatTime",value:function _roundAndFormatTime(seconds){seconds=this.settings.roundingFunction(seconds,this.settings);if(seconds!==null){return this._int2time(seconds)}}},{key:"_int2time",value:function _int2time(timeInt){if(typeof timeInt!="number"){return null}var seconds=parseInt(timeInt%60),minutes=parseInt(timeInt/60%60),hours=parseInt(timeInt/(60*60)%24);var time=new Date(1970,0,2,hours,minutes,seconds,0);if(isNaN(time.getTime())){return null}if(typeof this.settings.timeFormat==="function"){return this.settings.timeFormat(time)}var output="";var hour,code;for(var i=0;i<this.settings.timeFormat.length;i++){code=this.settings.timeFormat.charAt(i);switch(code){case"a":output+=time.getHours()>11?this.settings.lang.pm:this.settings.lang.am;break;case"A":output+=time.getHours()>11?this.settings.lang.PM:this.settings.lang.AM;break;case"g":hour=time.getHours()%12;output+=hour===0?"12":hour;break;case"G":hour=time.getHours();if(timeInt===ONE_DAY)hour=this.settings.show2400?24:0;output+=hour;break;case"h":hour=time.getHours()%12;if(hour!==0&&hour<10){hour="0"+hour}output+=hour===0?"12":hour;break;case"H":hour=time.getHours();if(timeInt===ONE_DAY)hour=this.settings.show2400?24:0;output+=hour>9?hour:"0"+hour;break;case"i":var minutes=time.getMinutes();output+=minutes>9?minutes:"0"+minutes;break;case"s":seconds=time.getSeconds();output+=seconds>9?seconds:"0"+seconds;break;case"\\":i++;output+=this.settings.timeFormat.charAt(i);break;default:output+=code}}return output}},{key:"_setSelected",value:function _setSelected(){var list=this.list;list.find("li").removeClass("ui-em_timepicker-selected");var timeValue=this.time2int(this._getTimeValue());if(timeValue===null){return}var selected=this._findRow(timeValue);if(selected){var selectedRect=selected.getBoundingClientRect();var listRect=list.get(0).getBoundingClientRect();var topDelta=selectedRect.top-listRect.top;if(topDelta+selectedRect.height>listRect.height||topDelta<0){var newScroll=list.scrollTop()+(selectedRect.top-listRect.top)-selectedRect.height;list.scrollTop(newScroll)}var parsed=Number.parseInt(selected.dataset.time);if(this.settings.forceRoundTime||parsed===timeValue){selected.classList.add("ui-em_timepicker-selected")}}}},{key:"_isFocused",value:function _isFocused(el){return el===document.activeElement}},{key:"_handleFormatValue",value:function _handleFormatValue(e){if(e&&e.detail=="em_timepicker"){return}this._formatValue(e)}},{key:"_formatValue",value:function _formatValue(e,origin){if(this.targetEl.value===""){this._setTimeValue(null,origin);return}if(this._isFocused(this.targetEl)&&(!e||e.type!="change")){return}var settings=this.settings;var seconds=this.time2int(this.targetEl.value);if(seconds===null){var timeFormatErrorEvent=new CustomEvent("timeFormatError");this.targetEl.dispatchEvent(timeFormatErrorEvent);return}var rangeError=false;if(settings.minTime!==null&&settings.maxTime!==null&&(seconds<settings.minTime||seconds>
4678settings.maxTime)){rangeError=true}var _iterator=_createForOfIteratorHelper(settings.disableTimeRanges),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var range=_step.value;if(seconds>=range[0]&&seconds<range[1]){rangeError=true;break}}}catch(err){_iterator.e(err)}finally{_iterator.f()}if(settings.forceRoundTime){var roundSeconds=settings.roundingFunction(seconds,settings);if(roundSeconds!=seconds){seconds=roundSeconds;origin=null}}var prettyTime=this._int2time(seconds);if(rangeError){this._setTimeValue(prettyTime);var timeRangeErrorEvent=new CustomEvent("timeRangeError");this.targetEl.dispatchEvent(timeRangeErrorEvent)}else{this._setTimeValue(prettyTime,origin)}}},{key:"_generateNoneElement",value:function _generateNoneElement(optionValue,useSelect){var label,className,value;if(_typeof(optionValue)=="object"){label=optionValue.label;className=optionValue.className;value=optionValue.value}else if(typeof optionValue=="string"){label=optionValue;value=""}else{$.error("Invalid noneOption value")}var el;if(useSelect){el=document.createElement("option");el.value=value}else{el=document.createElement("li");el.dataset.time=String(value)}el.innerText=label;el.classList.add(className);return el}},{key:"_handleKeyUp",value:function _handleKeyUp(e){if(!this.list||!Timepicker.isVisible(this.list)||this.settings.disableTextInput){return true}if(e.type==="paste"||e.type==="cut"){setTimeout(function(){if(this.settings.typeaheadHighlight){this._setSelected()}else{this.list.hide()}},0);return}switch(e.keyCode){case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:case 104:case 105:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 65:case 77:case 80:case 186:case 8:case 46:if(this.settings.typeaheadHighlight){this._setSelected()}else{this.list.hide()}break}}}],[{key:"extractAttrOptions",value:function extractAttrOptions(element,keys){var output={};var _iterator2=_createForOfIteratorHelper(keys),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var key=_step2.value;if(key in element.dataset){output[key]=element.dataset[key]}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return output}},{key:"isVisible",value:function isVisible(elem){var el=elem[0];return el.offsetWidth>0&&el.offsetHeight>0}},{key:"hideAll",value:function hideAll(){var _iterator3=_createForOfIteratorHelper(document.getElementsByClassName("ui-em_timepicker-input")),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var el=_step3.value;var tp=el.em_timepickerObj;if(tp){tp.hideMe()}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}}]);return Timepicker}();(function(factory){if((typeof exports==="undefined"?"undefined":_typeof(exports))==="object"&&exports&&(typeof module==="undefined"?"undefined":_typeof(module))==="object"&&module&&module.exports===exports){factory(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else{factory(jQuery)}})(function($){var _lang={};var methods={init:function init(options){return this.each(function(){var self=$(this);var tp=new Timepicker(this,options);var settings=tp.settings;_lang=settings.lang;this.em_timepickerObj=tp;self.addClass("ui-em_timepicker-input");if(settings.useSelect){_render(self)}else{self.prop("autocomplete","off");if(settings.showOn){for(var i in settings.showOn){self.on(settings.showOn[i]+".em_timepicker",methods.show)}}self.on("change.em_timepicker",tp._handleFormatValue);self.on("keydown.em_timepicker",_keydownhandler);self.on("keyup.em_timepicker",tp._handleKeyUp);if(settings.disableTextInput){self.on("keydown.em_timepicker",tp._disableTextInputHandler)}self.on("cut.em_timepicker",tp._handleKeyUp);self.on("paste.em_timepicker",tp._handleKeyUp);tp._formatValue(null,"initial")}})},show:function show(e){var self=$(this);var tp=self[0].em_timepickerObj;var settings=tp.settings;if(e){e.preventDefault()}if(settings.useSelect){tp.list.trigger("focus");return}if(tp._hideKeyboard()){self.trigger("blur")}var list=tp.list;if(self.prop("readonly")){return}if(!list||list.length===0||typeof settings.durationTime==="function"){_render(self);list=tp.list}if(Timepicker.isVisible(list)){return}if(self.is("input")){tp.selectedValue=self.val()}tp._setSelected();Timepicker.hideAll();if(typeof settings.listWidth=="number"){list.width(self.outerWidth()*settings.listWidth)}list.show();var listOffset={};if(settings.orientation.match(/r/)){listOffset.left=self.offset().left+self.outerWidth()-list.outerWidth()+parseInt(list.css("marginLeft").replace("px",""),10)}else if(settings.orientation.match(/l/)){listOffset.left=self.offset().left+parseInt(list.css("marginLeft").replace("px",""),10)}else if(settings.orientation.match(/c/)){listOffset.left=self.offset().left+(self.outerWidth()-list.outerWidth())/2+parseInt(list.css("marginLeft").replace("px",""),10)}var verticalOrientation;if(settings.orientation.match(/t/)){verticalOrientation="t"}else if(settings.orientation.match(/b/)){verticalOrientation="b"}else if(self.offset().top+self.outerHeight(true)+list.outerHeight()>$(window).height()+$(window).scrollTop()){verticalOrientation="t"}else{verticalOrientation="b"}if(verticalOrientation=="t"){list.addClass("ui-em_timepicker-positioned-top");listOffset.top=self.offset().top-list.outerHeight()+parseInt(list.css("marginTop").replace("px",""),10)}else{list.removeClass("ui-em_timepicker-positioned-top");listOffset.top=self.offset().top+self.outerHeight()+parseInt(list.css("marginTop").replace("px",""),10)}list.offset(listOffset);var selected=list.find(".ui-em_timepicker-selected");if(!selected.length){var timeInt=tp.time2int(tp._getTimeValue());if(timeInt!==null){selected=$(tp._findRow(timeInt))}else if(settings.scrollDefault){selected=$(tp._findRow(settings.scrollDefault()))}}if(!selected.length||selected.hasClass("ui-em_timepicker-disabled")){selected=list.find("li:not(.ui-em_timepicker-disabled):first")}if(selected&&selected.length){var topOffset=list.scrollTop()+selected.position().top-selected.outerHeight();list.scrollTop(topOffset)}else{list.scrollTop(0)}if(settings.stopScrollPropagation){$(document).on("wheel.ui-em_timepicker",".ui-em_timepicker-wrapper",function(e){e.preventDefault();var currentScroll=$(this).scrollTop();$(this).scrollTop(currentScroll+e.originalEvent.deltaY)})}$(document).on("mousedown.ui-em_timepicker",_closeHandler);$(window).on("resize.ui-em_timepicker",_closeHandler);if(settings.closeOnWindowScroll){$(document).on("scroll.ui-em_timepicker",_closeHandler)}self.trigger("showTimepicker");return this},hide:function hide(e){var tp=this[0].em_timepickerObj;if(tp){tp.hideMe()}Timepicker.hideAll();return this},option:function option(key,value){if(typeof key=="string"&&typeof value=="undefined"){var tp=this[0].em_timepickerObj;return tp.settings[key]}return this.each(function(){var self=$(this);var tp=self[0].em_timepickerObj;var settings=tp.settings;var list=tp.list;
4678if(_typeof(key)=="object"){settings=$.extend(settings,key)}else if(typeof key=="string"){settings[key]=value}settings=tp.parseSettings(settings);tp.settings=settings;tp._formatValue({type:"change"},"initial");if(list){list.remove();tp.list=null}if(settings.useSelect){_render(self)}})},getSecondsFromMidnight:function getSecondsFromMidnight(){var tp=this[0].em_timepickerObj;return tp.time2int(tp._getTimeValue())},getTime:function getTime(relative_date){var tp=this[0].em_timepickerObj;var time_string=tp._getTimeValue();if(!time_string){return null}var offset=tp.time2int(time_string);if(offset===null){return null}if(!relative_date){relative_date=new Date}var time=new Date(relative_date);time.setHours(offset/3600);time.setMinutes(offset%3600/60);time.setSeconds(offset%60);time.setMilliseconds(0);return time},isVisible:function isVisible(){var tp=this[0].em_timepickerObj;return!!(tp&&tp.list&&Timepicker.isVisible(tp.list))},setTime:function setTime(value){var tp=this[0].em_timepickerObj;var settings=tp.settings;if(settings.forceRoundTime){var prettyTime=tp._roundAndFormatTime(tp.time2int(value))}else{var prettyTime=tp._int2time(tp.time2int(value))}if(value&&prettyTime===null&&settings.noneOption){prettyTime=value}tp._setTimeValue(prettyTime,"initial");tp._formatValue({type:"change"},"initial");if(tp&&tp.list){tp._setSelected()}return this},remove:function remove(){var self=this;if(!self.hasClass("ui-em_timepicker-input")){return}var tp=self[0].em_timepickerObj;var settings=tp.settings;self.removeAttr("autocomplete","off");self.removeClass("ui-em_timepicker-input");self.removeData("em_timepicker-obj");self.off(".em_timepicker");if(tp.list){tp.list.remove()}if(settings.useSelect){self.show()}tp.list=null;return this}};function _render(self){var tp=self[0].em_timepickerObj;var list=tp.list;var settings=tp.settings;if(list&&list.length){list.remove();tp.list=null}if(settings.useSelect){list=$("<select></select>",{class:"ui-em_timepicker-select"});if(self.attr("name")){list.attr("name","ui-em_timepicker-"+self.attr("name"))}var wrapped_list=list}else{list=$("<ul></ul>",{class:"ui-em_timepicker-list"});var wrapped_list=$("<div></div>",{class:"ui-em_timepicker-wrapper",tabindex:-1});wrapped_list.css({display:"none",position:"absolute"}).append(list)}if(settings.noneOption){if(settings.noneOption===true){settings.noneOption=settings.useSelect?"Time...":"None"}if($.isArray(settings.noneOption)){for(var i in settings.noneOption){if(parseInt(i,10)==i){var noneElement=tp._generateNoneElement(settings.noneOption[i],settings.useSelect);list.append(noneElement)}}}else{var noneElement=tp._generateNoneElement(settings.noneOption,settings.useSelect);list.append(noneElement)}}if(settings.className){wrapped_list.addClass(settings.className)}if((settings.minTime!==null||settings.durationTime!==null)&&settings.showDuration){var stepval=typeof settings.step=="function"?"function":settings.step;wrapped_list.addClass("ui-em_timepicker-with-duration");wrapped_list.addClass("ui-em_timepicker-step-"+settings.step)}var durStart=settings.minTime;if(typeof settings.durationTime==="function"){durStart=tp.time2int(settings.durationTime())}else if(settings.durationTime!==null){durStart=settings.durationTime}var start=settings.minTime!==null?settings.minTime:0;var end=settings.maxTime!==null?settings.maxTime:start+ONE_DAY-1;if(end<start){end+=ONE_DAY}if(end===ONE_DAY-1&&$.type(settings.timeFormat)==="string"&&settings.show2400){end=ONE_DAY}var dr=settings.disableTimeRanges;var drCur=0;var drLen=dr.length;var stepFunc=settings.step;if(typeof stepFunc!="function"){stepFunc=function stepFunc(){return settings.step}}for(var i=start,j=0;i<=end;j++,i+=stepFunc(j)*60){var timeInt=i;var timeString=tp._int2time(timeInt);if(settings.useSelect){var row=$("<option></option>",{value:timeString});row.text(timeString)}else{var row=$("<li></li>");row.addClass(timeInt%ONE_DAY<ONE_DAY/2?"ui-em_timepicker-am":"ui-em_timepicker-pm");row.attr("data-time",roundingFunction(timeInt,settings));row.text(timeString)}if((settings.minTime!==null||settings.durationTime!==null)&&settings.showDuration){var durationString=tp._int2duration(i-durStart,settings.step);if(settings.useSelect){row.text(row.text()+" ("+durationString+")")}else{var duration=$("<span></span>",{class:"ui-em_timepicker-duration"});duration.text(" ("+durationString+")");row.append(duration)}}if(drCur<drLen){if(timeInt>=dr[drCur][1]){drCur+=1}if(dr[drCur]&&timeInt>=dr[drCur][0]&&timeInt<dr[drCur][1]){if(settings.useSelect){row.prop("disabled",true)}else{row.addClass("ui-em_timepicker-disabled")}}}list.append(row)}wrapped_list.data("em_timepicker-input",self);tp.list=wrapped_list;if(settings.useSelect){if(self.val()){list.val(tp._roundAndFormatTime(tp.time2int(self.val())))}list.on("focus",function(){$(this).data("em_timepicker-input").trigger("showTimepicker")});list.on("blur",function(){$(this).data("em_timepicker-input").trigger("hideTimepicker")});list.on("change",function(){tp._setTimeValue($(this).val(),"select")});tp._setTimeValue(list.val(),"initial");self.hide().after(list)}else{var appendTo=settings.appendTo;if(typeof appendTo==="string"){appendTo=$(appendTo)}else if(typeof appendTo==="function"){appendTo=appendTo(self)}appendTo.append(wrapped_list);tp._setSelected();list.on("mousedown click","li",function(e){self.off("focus.em_timepicker");self.on("focus.em_timepicker-ie-hack",function(){self.off("focus.em_timepicker-ie-hack");self.on("focus.em_timepicker",methods.show)});if(!tp._hideKeyboard()){self[0].focus()}list.find("li").removeClass("ui-em_timepicker-selected");$(this).addClass("ui-em_timepicker-selected");if(tp._selectValue()){self.trigger("hideTimepicker");list.on("mouseup.em_timepicker click.em_timepicker","li",function(e){list.off("mouseup.em_timepicker click.em_timepicker");wrapped_list.hide()})}})}}function _closeHandler(e){if(e.target==window){return}var target=$(e.target);if(target.closest(".ui-em_timepicker-input").length||target.closest(".ui-em_timepicker-wrapper").length){return}Timepicker.hideAll();$(document).off(".ui-em_timepicker");$(window).off(".ui-em_timepicker")}function _keydownhandler(e){var self=$(this);var tp=self[0].em_timepickerObj;var list=tp.list;if(!list||!Timepicker.isVisible(list)){if(e.keyCode==40){methods.show.call(self.get(0));list=tp.list;if(!tp._hideKeyboard()){self.trigger("focus")}}else{return true}}switch(e.keyCode){case 13:if(tp._selectValue()){tp._formatValue({type:"change"});tp.hideMe()}e.preventDefault();return false;case 38:var selected=list.find(".ui-em_timepicker-selected");if(!selected.length){list.find("li").each(function(i,obj){if($(obj).position().top>0){selected=$(obj);return false}});selected.addClass("ui-em_timepicker-selected")}else if(!selected.is(":first-child")){selected.removeClass("ui-em_timepicker-selected");selected.prev().addClass("ui-em_timepicker-selected");if(selected.prev().position().top<selected.outerHeight()){list.scrollTop(list.scrollTop()-selected.outerHeight())}}return false;case 40:selected=list.find(".ui-em_timepicker-selected");if(selected.length===0){list.find("li").each(function(i,obj){if($(obj).position().top>0){selected=$(obj);return false}});selected.addClass("ui-em_timepicker-selected")}else if(!selected.is(":last-child")){selected.removeClass("ui-em_timepicker-selected");selected.next().addClass("ui-em_timepicker-selected");if(selected.next().position().top+2*selected.outerHeight()>list.outerHeight()){list.scrollTop(list.scrollTop()+selected.outerHeight())}}return false;case 27:list.find("li").removeClass("ui-em_timepicker-selected");tp.hideMe();break;case 9:tp.hideMe();break;default:return true}}$.fn.em_timepicker=function(method){if(!this.length)return this;if(methods[method]){if(!this.hasClass("ui-em_timepicker-input")){return this}return methods[method].apply(this,Array.prototype.slice.call(arguments,1
4678))}else if(_typeof(method)==="object"||!method){return methods.init.apply(this,arguments)}else{$.error("Method "+method+" does not exist on jQuery.em_timepicker")}};$.fn.em_timepicker.defaults=DEFAULT_SETTINGS})})();
4679
4680/*!
4681 * flatpickr v4.6.13,, @license MIT
vendor: 50,644 bytes, lines 4682-4683
4682 */
4683!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).flatpickr=n()}(this,(function(){"use strict";var e=function(){return(e=Object.assign||function(e){for(var n,t=1,a=arguments.length;t<a;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e}).apply(this,arguments)};function n(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var a=Array(e),i=0;for(n=0;n<t;n++)for(var o=arguments[n],r=0,l=o.length;r<l;r++,i++)a[i]=o[r];return a}var t=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],a={_disable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:"object"==typeof window&&-1===window.navigator.userAgent.indexOf("MSIE"),ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enableSeconds:!1,enableTime:!1,errorHandler:function(e){return"undefined"!=typeof console&&console.warn(e)},getWeek:function(e){var n=new Date(e.getTime());n.setHours(0,0,0,0),n.setDate(n.getDate()+3-(n.getDay()+6)%7);var t=new Date(n.getFullYear(),0,4);return 1+Math.round(((n.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},i={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var n=e%100;if(n>3&&n<21)return"th";switch(n%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},o=function(e,n){return void 0===n&&(n=2),("000"+e).slice(-1*n)},r=function(e){return!0===e?1:0};function l(e,n){var t;return function(){var a=this,i=arguments;clearTimeout(t),t=setTimeout((function(){return e.apply(a,i)}),n)}}var c=function(e){return e instanceof Array?e:[e]};function s(e,n,t){if(!0===t)return e.classList.add(n);e.classList.remove(n)}function d(e,n,t){var a=window.document.createElement(e);return n=n||"",t=t||"",a.className=n,void 0!==t&&(a.textContent=t),a}function u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,n){return n(e)?e:e.parentNode?f(e.parentNode,n):void 0}function m(e,n){var t=d("div","numInputWrapper"),a=d("input","numInput "+e),i=d("span","arrowUp"),o=d("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?a.type="number":(a.type="text",a.pattern="\\d*"),void 0!==n)for(var r in n)a.setAttribute(r,n[r]);return t.appendChild(a),t.appendChild(i),t.appendChild(o),t}function g(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(n){return e.target}}var p=function(){},h=function(e,n,t){return t.months[n?"shorthand":"longhand"][e]},v={D:p,F:function(e,n,t){e.setMonth(t.months.longhand.indexOf(n))},G:function(e,n){e.setHours((e.getHours()>=12?12:0)+parseFloat(n))},H:function(e,n){e.setHours(parseFloat(n))},J:function(e,n){e.setDate(parseFloat(n))},K:function(e,n,t){e.setHours(e.getHours()%12+12*r(new RegExp(t.amPM[1],"i").test(n)))},M:function(e,n,t){e.setMonth(t.months.shorthand.indexOf(n))},S:function(e,n){e.setSeconds(parseFloat(n))},U:function(e,n){return new Date(1e3*parseFloat(n))},W:function(e,n,t){var a=parseInt(n),i=new Date(e.getFullYear(),0,2+7*(a-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+t.firstDayOfWeek),i},Y:function(e,n){e.setFullYear(parseFloat(n))},Z:function(e,n){return new Date(n)},d:function(e,n){e.setDate(parseFloat(n))},h:function(e,n){e.setHours((e.getHours()>=12?12:0)+parseFloat(n))},i:function(e,n){e.setMinutes(parseFloat(n))},j:function(e,n){e.setDate(parseFloat(n))},l:p,m:function(e,n){e.setMonth(parseFloat(n)-1)},n:function(e,n){e.setMonth(parseFloat(n)-1)},s:function(e,n){e.setSeconds(parseFloat(n))},u:function(e,n){return new Date(parseFloat(n))},w:p,y:function(e,n){e.setFullYear(2e3+parseFloat(n))}},D={D:"",F:"",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},w={Z:function(e){return e.toISOString()},D:function(e,n,t){return n.weekdays.shorthand[w.w(e,n,t)]},F:function(e,n,t){return h(w.n(e,n,t)-1,!1,n)},G:function(e,n,t){return o(w.h(e,n,t))},H:function(e){return o(e.getHours())},J:function(e,n){return void 0!==n.ordinal?e.getDate()+n.ordinal(e.getDate()):e.getDate()},K:function(e,n){return n.amPM[r(e.getHours()>11)]},M:function(e,n){return h(e.getMonth(),!0,n)},S:function(e){return o(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,n,t){return t.getWeek(e)},Y:function(e){return o(e.getFullYear(),4)},d:function(e){return o(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return o(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,n){return n.weekdays.longhand[e.getDay()]},m:function(e){return o(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},b=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o,l=e.isMobile,c=void 0!==l&&l;return function(e,n,a){var i=a||r;return void 0===t.formatDate||c?n.split("").map((function(n,a,o){return w[n]&&"\\"!==o[a-1]?w[n](e,i,t):"\\"!==n?n:""})).join(""):t.formatDate(e,n,i)}},C=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o;return function(e,n,i,o){if(0===e||e){var l,c=o||r,s=e;if(e instanceof Date)l=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)l=new Date(e);else if("string"==typeof e){var d=n||(t||a).dateFormat,u=String(e).trim();if("today"===u)l=new Date,i=!0;else if(t&&t.parseDate)l=t.parseDate(e,d);else if(/Z$/.test(u)||/GMT$/.test(u))l=new Date(e);else{for(var f=void 0,m=[],g=0,p=0,h="";g<d.length;g++){var w=d[g],b="\\"===w,C="\\"===d[g-1]||b;if(D[w]&&!C){h+=D[w];var M=new RegExp(h).exec(e);M&&(f=!0)&&m["Y"!==w?"push":"unshift"]({fn:v[w],val:M[++p]})}else b||(h+=".")}l=t&&t.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0),m.forEach((function(e){var n=e.fn,t=e.val;return l=n(l,t,c)||l})),l=f?l:void 0}}if(l instanceof Date&&!isNaN(l.getTime()))return!0===i&&l.setHours(0,0,0,0),l;t.errorHandler(new Error("Invalid date provided: "+s))}}};function M(e,n,t){return void 0===t&&(t=!0),!1!==t?new Date(e.getTime()).setHours(0,0,0,0)-new Date(n.getTime()).setHours(0,0,0,0):e.getTime()-n.getTime()}var y=function(e,n,t){return 3600*e+60*n+t},x=864e5;function E(e){var n=e.defaultHour,t=e.defaultMinute,a=e.defaultSeconds;if(void 0!==e.minDate){var i=e.minDate.getHours(),o=e.minDate.getMinutes(),r=e.minDate.getSeconds();n<i&&(n=i),n===i&&t<o&&(t=o),n===i&&t===o&&a<r&&(a=e.minDate.getSeconds())}if(void 0!==e.maxDate){var l=e.maxDate.getHours(),c=e.maxDate.getMinutes();(n=Math.min(n,l))===l&&(t=Math.min(c,t)),n===l&&t===c&&(a=e.maxDate.getSeconds())}return{hours:n,minutes:t,seconds:a}}"function"!=typeof Object.assign&&(Object.assign=function(e){for(var n=[],t=1;t<arguments.length;t++)n[t-1]=arguments[t];if(!e)throw TypeError("Cannot convert undefined or null to object");for(var a=function(n){n&&Object.keys(n).forEach((function(t){return e[t]=n[t]}))},i=0,o=n;i<o.length;i++){var r=o[i];a(r)}return e});function k(p,v){var w={config:e(e({},a),I.defaultConfig),l10n:i};function k(){var e;return(null===(e=w.calendarContainer)||void 0===e?void 0:e.getRootNode()).activeElement||document.activeElement}function T(e){return e.bind(w)}function S(){var e=w.config;!1===e.weekNumbers&&1===e.showMonths||!0!==e.noCalendar&&window.requestAnimationFrame((function(){if(void 0!==w.calendarContainer&&(w.calendarContainer.style.visibility="hidden",w.calendarContainer.style.display="block"),void 0!==w.daysContainer){var n=(w.days.offsetWidth+1)*e.showMonths;w.daysContainer.style.width=n+"px",w.calendarContainer.style.width=n+(void 0!==w.weekWrapper?w.weekWrapper.offsetWidth:0)+"px",w.calendarContainer.style.removeProperty("visibility"),w.calendarContainer.style.removeProperty("display")}}))}function _(e){if(0===w.selectedDates.length){var n=void 0===w.config.minDate||M(new Date,w.config.minDate)>=0?new Date:new Date(w.config.minDate.getTime()),t=E(w.config);n.setHours(t.hours,t.minutes,t.seconds,n.getMilliseconds()),w.selectedDates=[n],w.latestSelectedDateObj=n}void 0!==e&&"blur"!==e.type&&function(e){e.preventDefault();var n="keydown"===e.type,t=g(e),a=t;void 0!==w.amPM&&t===w.amPM&&(w.amPM.textContent=w.l10n.amPM[r(w.amPM.textContent===w.l10n.amPM[0])]);var i=parseFloat(a.getAttribute("min")),l=parseFloat(a.getAttribute("max")),c=parseFloat(a.getAttribute("step")),s=parseInt(a.value,10),d=e.delta||(n?38===e.which?1:-1:0),u=s+c*d;if(void 0!==a.value&&2===a.value.length){var f=a===w.hourElement,m=a===w.minuteElement;u<i?(u=l+u+r(!f)+(r(f)&&r(!w.amPM)),m&&L(void 0,-1,w.hourElement)):u>l&&(u=a===w.hourElement?u-l-r(!w.amPM):i,m&&L(void 0,1,w.hourElement)),w.amPM&&f&&(1===c?u+s===23:Math.abs(u-s)>c)&&(w.amPM.textContent=w.l10n.amPM[r(w.amPM.textContent===w.l10n.amPM[0])]),a.value=o(u)}}(e);var a=w._input.value;O(),ye(),w._input.value!==a&&w._debouncedChange()}function O(){if(void 0!==w.hourElement&&void 0!==w.minuteElement){var e,n,t=(parseInt(w.hourElement.value.slice(-2),10)||0)%24,a=(parseInt(w.minuteElement.value,10)||0)%60,i=void 0!==w.secondElement?(parseInt(w.secondElement.value,10)||0)%60:0;void 0!==w.amPM&&(e=t,n=w.amPM.textContent,t=e%12+12*r(n===w.l10n.amPM[1]));var o=void 0!==w.config.minTime||w.config.minDate&&w.minDateHasTime&&w.latestSelectedDateObj&&0===M(w.latestSelectedDateObj,w.config.minDate,!0),l=void 0!==w.config.maxTime||w.config.maxDate&&w.maxDateHasTime&&w.latestSelectedDateObj&&0===M(w.latestSelectedDateObj,w.config.maxDate,!0);if(void 0!==w.config.maxTime&&void 0!==w.config.minTime&&w.config.minTime>w.config.maxTime){var c=y(w.config.minTime.getHours(),w.config.minTime.getMinutes(),w.config.minTime.getSeconds()),s=y(w.config.maxTime.getHours(),w.config.maxTime.getMinutes(),w.config.maxTime.getSeconds()),d=y(t,a,i);if(d>s&&d<c){var u=function(e){var n=Math.floor(e/3600),t=(e-3600*n)/60;return[n,t,e-3600*n-60*t]}(c);t=u[0],a=u[1],i=u[2]}}else{if(l){var f=void 0!==w.config.maxTime?w.config.maxTime:w.config.maxDate;(t=Math.min(t,f.getHours()))===f.getHours()&&(a=Math.min(a,f.getMinutes())),a===f.getMinutes()&&(i=Math.min(i,f.getSeconds()))}if(o){var m=void 0!==w.config.minTime?w.config.minTime:w.config.minDate;(t=Math.max(t,m.getHours()))===m.getHours()&&a<m.getMinutes()&&(a=m.getMinutes()),a===m.getMinutes()&&(i=Math.max(i,m.getSeconds()))}}A(t,a,i)}}function F(e){var n=e||w.latestSelectedDateObj;n&&n instanceof Date&&A(n.getHours(),n.getMinutes(),n.getSeconds())}function A(e,n,t){void 0!==w.latestSelectedDateObj&&w.latestSelectedDateObj.setHours(e%24,n,t||0,0),w.hourElement&&w.minuteElement&&!w.isMobile&&(w.hourElement.value=o(w.config.time_24hr?e:(12+e)%12+12*r(e%12==0)),w.minuteElement.value=o(n),void 0!==w.amPM&&(w.amPM.textContent=w.l10n.amPM[r(e>=12)]),void 0!==w.secondElement&&(w.secondElement.value=o(t)))}function N(e){var n=g(e),t=parseInt(n.value)+(e.delta||0);(t/1e3>1||"Enter"===e.key&&!/[^\d]/.test(t.toString()))&&ee(t)}function P(e,n,t,a){return n instanceof Array?n.forEach((function(n){return P(e,n,t,a)})):e instanceof Array?e.forEach((function(e){return P(e,n,t,a)})):(e.addEventListener(n,t,a),void w._handlers.push({remove:function(){return e.removeEventListener(n,t,a)}}))}function Y(){De("onChange")}function j(e,n){var t=void 0!==e?w.parseDate(e):w.latestSelectedDateObj||(w.config.minDate&&w.config.minDate>w.now?w.config.minDate:w.config.maxDate&&w.config.maxDate<w.now?w.config.maxDate:w.now),a=w.currentYear,i=w.currentMonth;try{void 0!==t&&(w.currentYear=t.getFullYear(),w.currentMonth=t.getMonth())}catch(e){e.message="Invalid date supplied: "+t,w.config.errorHandler(e)}n&&w.currentYear!==a&&(De("onYearChange"),q()),!n||w.currentYear===a&&w.currentMonth===i||De("onMonthChange"),w.redraw()}function H(e){var n=g(e);~n.className.indexOf("arrow")&&L(e,n.classList.contains("arrowUp")?1:-1)}function L(e,n,t){var a=e&&g(e),i=t||a&&a.parentNode&&a.parentNode.firstChild,o=we("increment");o.delta=n,i&&i.dispatchEvent(o)}function R(e,n,t,a){var i=ne(n,!0),o=d("span",e,n.getDate().toString());return o.dateObj=n,o.$i=a,o.setAttribute("aria-label",w.formatDate(n,w.config.ariaDateFormat)),-1===e.indexOf("hidden")&&0===M(n,w.now)&&(w.todayDateElem=o,o.classList.add("today"),o.setAttribute("aria-current","date")),i?(o.tabIndex=-1,be(n)&&(o.classList.add("selected"),w.selectedDateElem=o,"range"===w.config.mode&&(s(o,"startRange",w.selectedDates[0]&&0===M(n,w.selectedDates[0],!0)),s(o,"endRange",w.selectedDates[1]&&0===M(n,w.selectedDates[1],!0)),"nextMonthDay"===e&&o.classList.add("inRange")))):o.classList.add("flatpickr-disabled"),"range"===w.config.mode&&function(e){return!("range"!==w.config.mode||w.selectedDates.length<2)&&(M(e,w.selectedDates[0])>=0&&M(e,w.selectedDates[1])<=0)}(n)&&!be(n)&&o.classList.add("inRange"),w.weekNumbers&&1===w.config.showMonths&&"prevMonthDay"!==e&&a%7==6&&w.weekNumbers.insertAdjacentHTML("beforeend","<span class='flatpickr-day'>"+w.config.getWeek(n)+"</span>"),De("onDayCreate",o),o}function W(e){e.focus(),"range"===w.config.mode&&oe(e)}function B(e){for(var n=e>0?0:w.config.showMonths-1,t=e>0?w.config.showMonths:-1,a=n;a!=t;a+=e)for(var i=w.daysContainer.children[a],o=e>0?0:i.children.length-1,r=e>0?i.children.length:-1,l=o;l!=r;l+=e){var c=i.children[l];if(-1===c.className.indexOf("hidden")&&ne(c.dateObj))return c}}function J(e,n){var t=k(),a=te(t||document.body),i=void 0!==e?e:a?t:void 0!==w.selectedDateElem&&te(w.selectedDateElem)?w.selectedDateElem:void 0!==w.todayDateElem&&te(w.todayDateElem)?w.todayDateElem:B(n>0?1:-1);void 0===i?w._input.focus():a?function(e,n){for(var t=-1===e.className.indexOf("Month")?e.dateObj.getMonth():w.currentMonth,a=n>0?w.config.showMonths:-1,i=n>0?1:-1,o=t-w.currentMonth;o!=a;o+=i)for(var r=w.daysContainer.children[o],l=t-w.currentMonth===o?e.$i+n:n<0?r.children.length-1:0,c=r.children.length,s=l;s>=0&&s<c&&s!=(n>0?c:-1);s+=i){var d=r.children[s];if(-1===d.className.indexOf("hidden")&&ne(d.dateObj)&&Math.abs(e.$i-s)>=Math.abs(n))return W(d)}w.changeMonth(i),J(B(i),0)}(i,n):W(i)}function K(e,n){for(var t=(new Date(e,n,1).getDay()-w.l10n.firstDayOfWeek+7)%7,a=w.utils.getDaysInMonth((n-1+12)%12,e),i=w.utils.getDaysInMonth(n,e),o=window.document.createDocumentFragment(),r=w.config.showMonths>1,l=r?"prevMonthDay hidden":"prevMonthDay",c=r?"nextMonthDay hidden":"nextMonthDay",s=a+1-t,u=0;s<=a;s++,u++)o.appendChild(R("flatpickr-day "+l,new Date(e,n-1,s),0,u));for(s=1;s<=i;s++,u++)o.appendChild(R("flatpickr-day",new Date(e,n,s),0,u));for(var f=i+1;f<=42-t&&(1===w.config.showMonths||u%7!=0);f++,u++)o.appendChild(R("flatpickr-day "+c,new Date(e,n+1,f%i),0,u));var m=d("div","dayContainer");return m.appendChild(o),m}function U(){if(void 0!==w.daysContainer){u(w.daysContainer),w.weekNumbers&&u(w.weekNumbers);for(var e=document.createDocumentFragment(),n=0;n<w.config.showMonths;n++){var t=new Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),e.appendChild(K(t.getFullYear(),t.getMonth()))}w.daysContainer.appendChild(e),w.days=w.daysContainer.firstChild,"range"===w.config.mode&&1===w.selectedDates.length&&oe()}}function q(){if(!(w.config.showMonths>1||"dropdown"!==w.config.monthSelectorType)){var e=function(e){return!(void 0!==w.config.minDate&&w.currentYear===w.config.minDate.getFullYear()&&e<w.config.minDate.getMonth())&&!(void 0!==w.config.maxDate&&w.currentYear===w.config.maxDate.getFullYear()&&e>w.config.maxDate.getMonth())};w.monthsDropdownContainer.tabIndex=-1,w.monthsDropdownContainer.innerHTML="";for(var n=0;n<12;n++)if(e(n)){var t=d("option","flatpickr-monthDropdown-month");t.value=new Date(w.currentYear,n).getMonth().toString(),t.textContent=h(n,w.config.shorthandCurrentMonth,w.l10n),t.tabIndex=-1,w.currentMonth===n&&(t.selected=!0),w.monthsDropdownContainer.appendChild(t)}}}function $(){var e,n=d("div","flatpickr-month"),t=window.document.createDocumentFragment();w.config.showMonths>1||"static"===w.config.monthSelectorType?e=d("span","cur-month"):(w.monthsDropdownContainer=d("select","flatpickr-monthDropdown-months"),w.monthsDropdownContainer.setAttribute("aria-label",w.l10n.monthAriaLabel),P(w.monthsDropdownContainer,"change",(function(e){var n=g(e),t=parseInt(n.value,10);w.changeMonth(t-w.currentMonth),De("onMonthChange")})),q(),e=w.monthsDropdownContainer);var a=m("cur-year",{tabindex:"-1"}),i=a.getElementsByTagName("input")[0];i.setAttribute("aria-label",w.l10n.yearAriaLabel),w.config.minDate&&i.setAttribute("min",w.config.minDate.getFullYear().toString()),w.config.maxDate&&(i.setAttribute("max",w.config.maxDate.getFullYear().toString()),i.disabled=!!w.config.minDate&&w.config.minDate.getFullYear()===w.config.maxDate.getFullYear());var o=d("div","flatpickr-current-month");return o.appendChild(e),o.appendChild(a),t.appendChild(o),n.appendChild(t),{container:n,yearElement:i,monthElement:e}}function V(){u(w.monthNav),w.monthNav.appendChild(w.prevMonthNav),w.config.showMonths&&(w.yearElements=[],w.monthElements=[]);for(var e=w.config.showMonths;e--;){var n=$();w.yearElements.push(n.yearElement),w.monthElements.push(n.monthElement),w.monthNav.appendChild(n.container)}w.monthNav.appendChild(w.nextMonthNav)}function z(){w.weekdayContainer?u(w.weekdayContainer):w.weekdayContainer=d("div","flatpickr-weekdays");for(var e=w.config.showMonths;e--;){var n=d("div","flatpickr-weekdaycontainer");w.weekdayContainer.appendChild(n)}return G(),w.weekdayContainer}function G(){if(w.weekdayContainer){var e=w.l10n.firstDayOfWeek,t=n(w.l10n.weekdays.shorthand);e>0&&e<t.length&&(t=n(t.splice(e,t.length),t.splice(0,e)));for(var a=w.config.showMonths;a--;)w.weekdayContainer.children[a].innerHTML="\n      <span class='flatpickr-weekday'>\n        "+t.join("</span><span class='flatpickr-weekday'>")+"\n      </span>\n      "}}function Z(e,n){void 0===n&&(n=!0);var t=n?e:e-w.currentMonth;t<0&&!0===w._hidePrevMonthArrow||t>0&&!0===w._hideNextMonthArrow||(w.currentMonth+=t,(w.currentMonth<0||w.currentMonth>11)&&(w.currentYear+=w.currentMonth>11?1:-1,w.currentMonth=(w.currentMonth+12)%12,De("onYearChange"),q()),U(),De("onMonthChange"),Ce())}function Q(e){return w.calendarContainer.contains(e)}function X(e){if(w.isOpen&&!w.config.inline){var n=g(e),t=Q(n),a=!(n===w.input||n===w.altInput||w.element.contains(n)||e.path&&e.path.indexOf&&(~e.path.indexOf(w.input)||~e.path.indexOf(w.altInput)))&&!t&&!Q(e.relatedTarget),i=!w.config.ignoredFocusElements.some((function(e){return e.contains(n)}));a&&i&&(w.config.allowInput&&w.setDate(w._input.value,!1,w.config.altInput?w.config.altFormat:w.config.dateFormat),void 0!==w.timeContainer&&void 0!==w.minuteElement&&void 0!==w.hourElement&&""!==w.input.value&&void 0!==w.input.value&&_(),w.close(),w.config&&"range"===w.config.mode&&1===w.selectedDates.length&&w.clear(!1))}}function ee(e){if(!(!e||w.config.minDate&&e<w.config.minDate.getFullYear()||w.config.maxDate&&e>w.config.maxDate.getFullYear())){var n=e,t=w.currentYear!==n;w.currentYear=n||w.currentYear,w.config.maxDate&&w.currentYear===w.config.maxDate.getFullYear()?w.currentMonth=Math.min(w.config.maxDate.getMonth(),w.currentMonth):w.config.minDate&&w.currentYear===w.config.minDate.getFullYear()&&(w.currentMonth=Math.max(w.config.minDate.getMonth(),w.currentMonth)),t&&(w.redraw(),De("onYearChange"),q())}}function ne(e,n){var t;void 0===n&&(n=!0);var a=w.parseDate(e,void 0,n);if(w.config.minDate&&a&&M(a,w.config.minDate,void 0!==n?n:!w.minDateHasTime)<0||w.config.maxDate&&a&&M(a,w.config.maxDate,void 0!==n?n:!w.maxDateHasTime)>0)return!1;if(!w.config.enable&&0===w.config.disable.length)return!0;if(void 0===a)return!1;for(var i=!!w.config.enable,o=null!==(t=w.config.enable)&&void 0!==t?t:w.config.disable,r=0,l=void 0;r<o.length;r++){if("function"==typeof(l=o[r])&&l(a))return i;if(l instanceof Date&&void 0!==a&&l.getTime()===a.getTime())return i;if("string"==typeof l){var c=w.parseDate(l,void 0,!0);return c&&c.getTime()===a.getTime()?i:!i}if("object"==typeof l&&void 0!==a&&l.from&&l.to&&a.getTime()>=l.from.getTime()&&a.getTime()<=l.to.getTime())return i}return!i}function te(e){return void 0!==w.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&w.daysContainer.contains(e))}function ae(e){var n=e.target===w._input,t=w._input.value.trimEnd()!==Me();!n||!t||e.relatedTarget&&Q(e.relatedTarget)||w.setDate(w._input.value,!0,e.target===w.altInput?w.config.altFormat:w.config.dateFormat)}function ie(e){var n=g(e),t=w.config.wrap?p.contains(n):n===w._input,a=w.config.allowInput,i=w.isOpen&&(!a||!t),o=w.config.inline&&t&&!a;if(13===e.keyCode&&t){if(a)return w.setDate(w._input.value,!0,n===w.altInput?w.config.altFormat:w.config.dateFormat),w.close(),n.blur();w.open()}else if(Q(n)||i||o){var r=!!w.timeContainer&&w.timeContainer.contains(n);switch(e.keyCode){case 13:r?(e.preventDefault(),_(),fe()):me(e);break;case 27:e.preventDefault(),fe();break;case 8:case 46:t&&!w.config.allowInput&&(e.preventDefault(),w.clear());break;case 37:case 39:if(r||t)w.hourElement&&w.hourElement.focus();else{e.preventDefault();var l=k();if(void 0!==w.daysContainer&&(!1===a||l&&te(l))){var c=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),Z(c),J(B(1),0)):J(void 0,c)}}break;case 38:case 40:e.preventDefault();var s=40===e.keyCode?1:-1;w.daysContainer&&void 0!==n.$i||n===w.input||n===w.altInput?e.ctrlKey?(e.stopPropagation(),ee(w.currentYear-s),J(B(1),0)):r||J(void 0,7*s):n===w.currentYearElement?ee(w.currentYear-s):w.config.enableTime&&(!r&&w.hourElement&&w.hourElement.focus(),_(e),w._debouncedChange());break;case 9:if(r){var d=[w.hourElement,w.minuteElement,w.secondElement,w.amPM].concat(w.pluginElements).filter((function(e){return e})),u=d.indexOf(n);if(-1!==u){var f=d[u+(e.shiftKey?-1:1)];e.preventDefault(),(f||w._input).focus()}}else!w.config.noCalendar&&w.daysContainer&&w.daysContainer.contains(n)&&e.shiftKey&&(e.preventDefault(),w._input.focus())}}if(void 0!==w.amPM&&n===w.amPM)switch(e.key){case w.l10n.amPM[0].charAt(0):case w.l10n.amPM[0].charAt(0).toLowerCase():w.amPM.textContent=w.l10n.amPM[0],O(),ye();break;case w.l10n.amPM[1].charAt(0):case w.l10n.amPM[1].charAt(0).toLowerCase():w.amPM.textContent=w.l10n.amPM[1],O(),ye()}(t||Q(n))&&De("onKeyDown",e)}function oe(e,n){if(void 0===n&&(n="flatpickr-day"),1===w.selectedDates.length&&(!e||e.classList.contains(n)&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():w.days.firstElementChild.dateObj.getTime(),a=w.parseDate(w.selectedDates[0],void 0,!0).getTime(),i=Math.min(t,w.selectedDates[0].getTime()),o=Math.max(t,w.selectedDates[0].getTime()),r=!1,l=0,c=0,s=i;s<o;s+=x)ne(new Date(s),!0)||(r=r||s>i&&s<o,s<a&&(!l||s>l)?l=s:s>a&&(!c||s<c)&&(c=s));Array.from(w.rContainer.querySelectorAll("*:nth-child(-n+"+w.config.showMonths+") > ."+n)).forEach((function(n){var i,o,s,d=n.dateObj.getTime(),u=l>0&&d<l||c>0&&d>c;if(u)return n.classList.add("notAllowed"),void["inRange","startRange","endRange"].forEach((function(e){n.classList.remove(e)}));r&&!u||(["startRange","inRange","endRange","notAllowed"].forEach((function(e){n.classList.remove(e)})),void 0!==e&&(e.classList.add(t<=w.selectedDates[0].getTime()?"startRange":"endRange"),a<t&&d===a?n.classList.add("startRange"):a>t&&d===a&&n.classList.add("endRange"),d>=l&&(0===c||d<=c)&&(o=a,s=t,(i=d)>Math.min(o,s)&&i<Math.max(o,s))&&n.classList.add("inRange")))}))}}function re(){!w.isOpen||w.config.static||w.config.inline||de()}function le(e){return function(n){var t=w.config["_"+e+"Date"]=w.parseDate(n,w.config.dateFormat),a=w.config["_"+("min"===e?"max":"min")+"Date"];void 0!==t&&(w["min"===e?"minDateHasTime":"maxDateHasTime"]=t.getHours()>0||t.getMinutes()>0||t.getSeconds()>0),w.selectedDates&&(w.selectedDates=w.selectedDates.filter((function(e){return ne(e)})),w.selectedDates.length||"min"!==e||F(t),ye()),w.daysContainer&&(ue(),void 0!==t?w.currentYearElement[e]=t.getFullYear().toString():w.currentYearElement.removeAttribute(e),w.currentYearElement.disabled=!!a&&void 0!==t&&a.getFullYear()===t.getFullYear())}}function ce(){return w.config.wrap?p.querySelector("[data-input]"):p}function se(){"object"!=typeof w.config.locale&&void 0===I.l10ns[w.config.locale]&&w.config.errorHandler(new Error("flatpickr: invalid locale "+w.config.locale)),w.l10n=e(e({},I.l10ns.default),"object"==typeof w.config.locale?w.config.locale:"default"!==w.config.locale?I.l10ns[w.config.locale]:void 0),D.D="("+w.l10n.weekdays.shorthand.join("|")+")",D.l="("+w.l10n.weekdays.longhand.join("|")+")",D.M="("+w.l10n.months.shorthand.join("|")+")",D.F="("+w.l10n.months.longhand.join("|")+")",D.K="("+w.l10n.amPM[0]+"|"+w.l10n.amPM[1]+"|"+w.l10n.amPM[0].toLowerCase()+"|"+w.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},v),JSON.parse(JSON.stringify(p.dataset||{}))).time_24hr&&void 0===I.defaultConfig.time_24hr&&(w.config.time_24hr=w.l10n.time_24hr),w.formatDate=b(w),w.parseDate=C({config:w.config,l10n:w.l10n})}function de(e){if("function"!=typeof w.config.position){if(void 0!==w.calendarContainer){De("onPreCalendarPosition");var n=e||w._positionElement,t=Array.prototype.reduce.call(w.calendarContainer.children,(function(e,n){return e+n.offsetHeight}),0),a=w.calendarContainer.offsetWidth,i=w.config.position.split(" "),o=i[0],r=i.length>1?i[1]:null,l=n.getBoundingClientRect(),c=window.innerHeight-l.bottom,d="above"===o||"below"!==o&&c<t&&l.top>t,u=window.pageYOffset+l.top+(d?-t-2:n.offsetHeight+2);if(s(w.calendarContainer,"arrowTop",!d),s(w.calendarContainer,"arrowBottom",d),!w.config.inline){var f=window.pageXOffset+l.left,m=!1,g=!1;"center"===r?(f-=(a-l.width)/2,m=!0):"right"===r&&(f-=a-l.width,g=!0),s(w.calendarContainer,"arrowLeft",!m&&!g),s(w.calendarContainer,"arrowCenter",m),s(w.calendarContainer,"arrowRight",g);var p=window.document.body.offsetWidth-(window.pageXOffset+l.right),h=f+a>window.document.body.offsetWidth,v=p+a>window.document.body.offsetWidth;if(s(w.calendarContainer,"rightMost",h),!w.config.static)if(w.calendarContainer.style.top=u+"px",h)if(v){var D=function(){for(var e=null,n=0;n<document.styleSheets.length;n++){var t=document.styleSheets[n];if(t.cssRules){try{t.cssRules}catch(e){continue}e=t;break}}return null!=e?e:(a=document.createElement("style"),document.head.appendChild(a),a.sheet);var a}();if(void 0===D)return;var b=window.document.body.offsetWidth,C=Math.max(0,b/2-a/2),M=D.cssRules.length,y="{left:"+l.left+"px;right:auto;}";s(w.calendarContainer,"rightMost",!1),s(w.calendarContainer,"centerMost",!0),D.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+y,M),w.calendarContainer.style.left=C+"px",w.calendarContainer.style.right="auto"}else w.calendarContainer.style.left="auto",w.calendarContainer.style.right=p+"px";else w.calendarContainer.style.left=f+"px",w.calendarContainer.style.right="auto"}}}else w.config.position(w,e)}function ue(){w.config.noCalendar||w.isMobile||(q(),Ce(),U())}function fe(){w._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(w.close,0):w.close()}function me(e){e.preventDefault(),e.stopPropagation();var n=f(g(e),(function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")}));if(void 0!==n){var t=n,a=w.latestSelectedDateObj=new Date(t.dateObj.getTime()),i=(a.getMonth()<w.currentMonth||a.getMonth()>w.currentMonth+w.config.showMonths-1)&&"range"!==w.config.mode;if(w.selectedDateElem=t,"single"===w.config.mode)w.selectedDates=[a];else if("multiple"===w.config.mode){var o=be(a);o?w.selectedDates.splice(parseInt(o),1):w.selectedDates.push(a)}else"range"===w.config.mode&&(2===w.selectedDates.length&&w.clear(!1,!1),w.latestSelectedDateObj=a,w.selectedDates.push(a),0!==M(a,w.selectedDates[0],!0)&&w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()})));if(O(),i){var r=w.currentYear!==a.getFullYear();w.currentYear=a.getFullYear(),w.currentMonth=a.getMonth(),r&&(De("onYearChange"),q()),De("onMonthChange")}if(Ce(),U(),ye(),i||"range"===w.config.mode||1!==w.config.showMonths?void 0!==w.selectedDateElem&&void 0===w.hourElement&&w.selectedDateElem&&w.selectedDateElem.focus():W(t),void 0!==w.hourElement&&void 0!==w.hourElement&&w.hourElement.focus(),w.config.closeOnSelect){var l="single"===w.config.mode&&!w.config.enableTime,c="range"===w.config.mode&&2===w.selectedDates.length&&!w.config.enableTime;(l||c)&&fe()}Y()}}w.parseDate=C({config:w.config,l10n:w.l10n}),w._handlers=[],w.pluginElements=[],w.loadedPlugins=[],w._bind=P,w._setHoursFromDate=F,w._positionCalendar=de,w.changeMonth=Z,w.changeYear=ee,w.clear=function(e,n){void 0===e&&(e=!0);void 0===n&&(n=!0);w.input.value="",void 0!==w.altInput&&(w.altInput.value="");void 0!==w.mobileInput&&(w.mobileInput.value="");w.selectedDates=[],w.latestSelectedDateObj=void 0,!0===n&&(w.currentYear=w._initialDate.getFullYear(),w.currentMonth=w._initialDate.getMonth());if(!0===w.config.enableTime){var t=E(w.config),a=t.hours,i=t.minutes,o=t.seconds;A(a,i,o)}w.redraw(),e&&De("onChange")},w.close=function(){w.isOpen=!1,w.isMobile||(void 0!==w.calendarContainer&&w.calendarContainer.classList.remove("open"),void 0!==w._input&&w._input.classList.remove("active"));De("onClose")},w.onMouseOver=oe,w._createElement=d,w.createDay=R,w.destroy=function(){void 0!==w.config&&De("onDestroy");for(var e=w._handlers.length;e--;)w._handlers[e].remove();if(w._handlers=[],w.mobileInput)w.mobileInput.parentNode&&w.mobileInput.parentNode.removeChild(w.mobileInput),w.mobileInput=void 0;else if(w.calendarContainer&&w.calendarContainer.parentNode)if(w.config.static&&w.calendarContainer.parentNode){var n=w.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else w.calendarContainer.parentNode.removeChild(w.calendarContainer);w.altInput&&(w.input.type="text",w.altInput.parentNode&&w.altInput.parentNode.removeChild(w.altInput),delete w.altInput);w.input&&(w.input.type=w.input._type,w.input.classList.remove("flatpickr-input"),w.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((function(e){try{delete w[e]}catch(e){}}))},w.isEnabled=ne,w.jumpToDate=j,w.updateValue=ye,w.open=function(e,n){void 0===n&&(n=w._positionElement);if(!0===w.isMobile){if(e){e.preventDefault();var t=g(e);t&&t.blur()}return void 0!==w.mobileInput&&(w.mobileInput.focus(),w.mobileInput.click()),void De("onOpen")}if(w._input.disabled||w.config.inline)return;var a=w.isOpen;w.isOpen=!0,a||(w.calendarContainer.classList.add("open"),w._input.classList.add("active"),De("onOpen"),de(n));!0===w.config.enableTime&&!0===w.config.noCalendar&&(!1!==w.config.allowInput||void 0!==e&&w.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return w.hourElement.select()}),50))},w.redraw=ue,w.set=function(e,n){if(null!==e&&"object"==typeof e)for(var a in Object.assign(w.config,e),e)void 0!==ge[a]&&ge[a].forEach((function(e){return e()}));else w.config[e]=n,void 0!==ge[e]?ge[e].forEach((function(e){return e()})):t.indexOf(e)>-1&&(w.config[e]=c(n));w.redraw(),ye(!0)},w.setDate=function(e,n,t){void 0===n&&(n=!1);void 0===t&&(t=w.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return w.clear(n);pe(e,t),w.latestSelectedDateObj=w.selectedDates[w.selectedDates.length-1],w.redraw(),j(void 0,n),F(),0===w.selectedDates.length&&w.clear(!1);ye(n),n&&De("onChange")},w.toggle=function(e){if(!0===w.isOpen)return w.close();w.open(e)};var ge={locale:[se,G],showMonths:[V,S,z],minDate:[j],maxDate:[j],positionElement:[ve],clickOpens:[function(){!0===w.config.clickOpens?(P(w._input,"focus",w.open),P(w._input,"click",w.open)):(w._input.removeEventListener("focus",w.open),w._input.removeEventListener("click",w.open))}]};function pe(e,n){var t=[];if(e instanceof Array)t=e.map((function(e){return w.parseDate(e,n)}));else if(e instanceof Date||"number"==typeof e)t=[w.parseDate(e,n)];else if("string"==typeof e)switch(w.config.mode){case"single":case"time":t=[w.parseDate(e,n)];break;case"multiple":t=e.split(w.config.conjunction).map((function(e){return w.parseDate(e,n)}));break;case"range":t=e.split(w.l10n.rangeSeparator).map((function(e){return w.parseDate(e,n)}))}else w.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));w.selectedDates=w.config.allowInvalidPreload?t:t.filter((function(e){return e instanceof Date&&ne(e,!1)})),"range"===w.config.mode&&w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()}))}function he(e){return e.slice().map((function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?w.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:w.parseDate(e.from,void 0),to:w.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function ve(){w._positionElement=w.config.positionElement||w._input}function De(e,n){if(void 0!==w.config){var t=w.config[e];if(void 0!==t&&t.length>0)for(var a=0;t[a]&&a<t.length;a++)t[a](w.selectedDates,w.input.value,w,n);"onChange"===e&&(w.input.dispatchEvent(we("change")),w.input.dispatchEvent(we("input")))}}function we(e){var n=document.createEvent("Event");return n.initEvent(e,!0,!0),n}function be(e){for(var n=0;n<w.selectedDates.length;n++){var t=w.selectedDates[n];if(t instanceof Date&&0===M(t,e))return""+n}return!1}function Ce(){w.config.noCalendar||w.isMobile||!w.monthNav||(w.yearElements.forEach((function(e,n){var t=new Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),w.config.showMonths>1||"static"===w.config.monthSelectorType?w.monthElements[n].textContent=h(t.getMonth(),w.config.shorthandCurrentMonth,w.l10n)+" ":w.monthsDropdownContainer.value=t.getMonth().toString(),e.value=t.getFullYear().toString()})),w._hidePrevMonthArrow=void 0!==w.config.minDate&&(w.currentYear===w.config.minDate.getFullYear()?w.currentMonth<=w.config.minDate.getMonth():w.currentYear<w.config.minDate.getFullYear()),w._hideNextMonthArrow=void 0!==w.config.maxDate&&(w.currentYear===w.config.maxDate.getFullYear()?w.currentMonth+1>w.config.maxDate.getMonth():w.currentYear>w.config.maxDate.getFullYear()))}function Me(e){var n=e||(w.config.altInput?w.config.altFormat:w.config.dateFormat);return w.selectedDates.map((function(e){return w.formatDate(e,n)})).filter((function(e,n,t){return"range"!==w.config.mode||w.config.enableTime||t.indexOf(e)===n})).join("range"!==w.config.mode?w.config.conjunction:w.l10n.rangeSeparator)}function ye(e){void 0===e&&(e=!0),void 0!==w.mobileInput&&w.mobileFormatStr&&(w.mobileInput.value=void 0!==w.latestSelectedDateObj?w.formatDate(w.latestSelectedDateObj,w.mobileFormatStr):""),w.input.value=Me(w.config.dateFormat),void 0!==w.altInput&&(w.altInput.value=Me(w.config.altFormat)),!1!==e&&De("onValueUpdate")}function xe(e){var n=g(e),t=w.prevMonthNav.contains(n),a=w.nextMonthNav.contains(n);t||a?Z(t?-1:1):w.yearElements.indexOf(n)>=0?n.select():n.classList.contains("arrowUp")?w.changeYear(w.currentYear+1):n.classList.contains("arrowDown")&&w.changeYear(w.currentYear-1)}return function(){w.element=w.input=p,w.isOpen=!1,function(){var n=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],i=e(e({},JSON.parse(JSON.stringify(p.dataset||{}))),v),o={};w.config.parseDate=i.parseDate,w.config.formatDate=i.formatDate,Object.defineProperty(w.config,"enable",{get:function(){return w.config._enable},set:function(e){w.config._enable=he(e)}}),Object.defineProperty(w.config,"disable",{get:function(){return w.config._disable},set:function(e){w.config._disable=he(e)}});var r="time"===i.mode;if(!i.dateFormat&&(i.enableTime||r)){var l=I.defaultConfig.dateFormat||a.dateFormat;o.dateFormat=i.noCalendar||r?"H:i"+(i.enableSeconds?":S":""):l+" H:i"+(i.enableSeconds?":S":"")}if(i.altInput&&(i.enableTime||r)&&!i.altFormat){var s=I.defaultConfig.altFormat||a.altFormat;o.altFormat=i.noCalendar||r?"h:i"+(i.enableSeconds?":S K":" K"):s+" h:i"+(i.enableSeconds?":S":"")+" K"}Object.defineProperty(w.config,"minDate",{get:function(){return w.config._minDate},set:le("min")}),Object.defineProperty(w.config,"maxDate",{get:function(){return w.config._maxDate},set:le("max")});var d=function(e){return function(n){w.config["min"===e?"_minTime":"_maxTime"]=w.parseDate(n,"H:i:S")}};Object.defineProperty(w.config,"minTime",{get:function(){return w.config._minTime},set:d("min")}),Object.defineProperty(w.config,"maxTime",{get:function(){return w.config._maxTime},set:d("max")}),"time"===i.mode&&(w.config.noCalendar=!0,w.config.enableTime=!0);Object.assign(w.config,o,i);for(var u=0;u<n.length;u++)w.config[n[u]]=!0===w.config[n[u]]||"true"===w.config[n[u]];t.filter((function(e){return void 0!==w.config[e]})).forEach((function(e){w.config[e]=c(w.config[e]||[]).map(T)})),w.isMobile=!w.config.disableMobile&&!w.config.inline&&"single"===w.config.mode&&!w.config.disable.length&&!w.config.enable&&!w.config.weekNumbers&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);for(u=0;u<w.config.plugins.length;u++){var f=w.config.plugins[u](w)||{};for(var m in f)t.indexOf(m)>-1?w.config[m]=c(f[m]).map(T).concat(w.config[m]):void 0===i[m]&&(w.config[m]=f[m])}i.altInputClass||(w.config.altInputClass=ce().className+" "+w.config.altInputClass);De("onParseConfig")}(),se(),function(){if(w.input=ce(),!w.input)return void w.config.errorHandler(new Error("Invalid input element specified"));w.input._type=w.input.type,w.input.type="text",w.input.classList.add("flatpickr-input"),w._input=w.input,w.config.altInput&&(w.altInput=d(w.input.nodeName,w.config.altInputClass),w._input=w.altInput,w.altInput.placeholder=w.input.placeholder,w.altInput.disabled=w.input.disabled,w.altInput.required=w.input.required,w.altInput.tabIndex=w.input.tabIndex,w.altInput.type="text",w.input.setAttribute("type","hidden"),!w.config.static&&w.input.parentNode&&w.input.parentNode.insertBefore(w.altInput,w.input.nextSibling));w.config.allowInput||w._input.setAttribute("readonly","readonly");ve()}(),function(){w.selectedDates=[],w.now=w.parseDate(w.config.now)||new Date;var e=w.config.defaultDate||("INPUT"!==w.input.nodeName&&"TEXTAREA"!==w.input.nodeName||!w.input.placeholder||w.input.value!==w.input.placeholder?w.input.value:null);e&&pe(e,w.config.dateFormat);w._initialDate=w.selectedDates.length>0?w.selectedDates[0]:w.config.minDate&&w.config.minDate.getTime()>w.now.getTime()?w.config.minDate:w.config.maxDate&&w.config.maxDate.getTime()<w.now.getTime()?w.config.maxDate:w.now,w.currentYear=w._initialDate.getFullYear(),w.currentMonth=w._initialDate.getMonth(),w.selectedDates.length>0&&(w.latestSelectedDateObj=w.selectedDates[0]);void 0!==w.config.minTime&&(w.config.minTime=w.parseDate(w.config.minTime,"H:i"));void 0!==w.config.maxTime&&(w.config.maxTime=w.parseDate(w.config.maxTime,"H:i"));w.minDateHasTime=!!w.config.minDate&&(w.config.minDate.getHours()>0||w.config.minDate.getMinutes()>0||w.config.minDate.getSeconds()>0),w.maxDateHasTime=!!w.config.maxDate&&(w.config.maxDate.getHours()>0||w.config.maxDate.getMinutes()>0||w.config.maxDate.getSeconds()>0)}(),w.utils={getDaysInMonth:function(e,n){return void 0===e&&(e=w.currentMonth),void 0===n&&(n=w.currentYear),1===e&&(n%4==0&&n%100!=0||n%400==0)?29:w.l10n.daysInMonth[e]}},w.isMobile||function(){var e=window.document.createDocumentFragment();if(w.calendarContainer=d("div","flatpickr-calendar"),w.calendarContainer.tabIndex=-1,!w.config.noCalendar){if(e.appendChild((w.monthNav=d("div","flatpickr-months"),w.yearElements=[],w.monthElements=[],w.prevMonthNav=d("span","flatpickr-prev-month"),w.prevMonthNav.innerHTML=w.config.prevArrow,w.nextMonthNav=d("span","flatpickr-next-month"),w.nextMonthNav.innerHTML=w.config.nextArrow,V(),Object.defineProperty(w,"_hidePrevMonthArrow",{get:function(){return w.__hidePrevMonthArrow},set:function(e){w.__hidePrevMonthArrow!==e&&(s(w.prevMonthNav,"flatpickr-disabled",e),w.__hidePrevMonthArrow=e)}}),Object.defineProperty(w,"_hideNextMonthArrow",{get:function(){return w.__hideNextMonthArrow},set:function(e){w.__hideNextMonthArrow!==e&&(s(w.nextMonthNav,"flatpickr-disabled",e),w.__hideNextMonthArrow=e)}}),w.currentYearElement=w.yearElements[0],Ce(),w.monthNav)),w.innerContainer=d("div","flatpickr-innerContainer"),w.config.weekNumbers){var n=function(){w.calendarContainer.classList.add("hasWeeks");var e=d("div","flatpickr-weekwrapper");e.appendChild(d("span","flatpickr-weekday",w.l10n.weekAbbreviation));var n=d("div","flatpickr-weeks");return e.appendChild(n),{weekWrapper:e,weekNumbers:n}}(),t=n.weekWrapper,a=n.weekNumbers;w.innerContainer.appendChild(t),w.weekNumbers=a,w.weekWrapper=t}w.rContainer=d("div","flatpickr-rContainer"),w.rContainer.appendChild(z()),w.daysContainer||(w.daysContainer=d("div","flatpickr-days"),w.daysContainer.tabIndex=-1),U(),w.rContainer.appendChild(w.daysContainer),w.innerContainer.appendChild(w.rContainer),e.appendChild(w.innerContainer)}w.config.enableTime&&e.appendChild(function(){w.calendarContainer.classList.add("hasTime"),w.config.noCalendar&&w.calendarContainer.classList.add("noCalendar");var e=E(w.config);w.timeContainer=d("div","flatpickr-time"),w.timeContainer.tabIndex=-1;var n=d("span","flatpickr-time-separator",":"),t=m("flatpickr-hour",{"aria-label":w.l10n.hourAriaLabel});w.hourElement=t.getElementsByTagName("input")[0];var a=m("flatpickr-minute",{"aria-label":w.l10n.minuteAriaLabel});w.minuteElement=a.getElementsByTagName("input")[0],w.hourElement.tabIndex=w.minuteElement.tabIndex=-1,w.hourElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getHours():w.config.time_24hr?e.hours:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(e.hours)),w.minuteElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getMinutes():e.minutes),w.hourElement.setAttribute("step",w.config.hourIncrement.toString()),w.minuteElement.setAttribute("step",w.config.minuteIncrement.toString()),w.hourElement.setAttribute("min",w.config.time_24hr?"0":"1"),w.hourElement.setAttribute("max",w.config.time_24hr?"23":"12"),w.hourElement.setAttribute("maxlength","2"),w.minuteElement.setAttribute("min","0"),w.minuteElement.setAttribute("max","59"),w.minuteElement.setAttribute("maxlength","2"),w.timeContainer.appendChild(t),w.timeContainer.appendChild(n),w.timeContainer.appendChild(a),w.config.time_24hr&&w.timeContainer.classList.add("time24hr");if(w.config.enableSeconds){w.timeContainer.classList.add("hasSeconds");var i=m("flatpickr-second");w.secondElement=i.getElementsByTagName("input")[0],w.secondElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getSeconds():e.seconds),w.secondElement.setAttribute("step",w.minuteElement.getAttribute("step")),w.secondElement.setAttribute("min","0"),w.secondElement.setAttribute("max","59"),w.secondElement.setAttribute("maxlength","2"),w.timeContainer.appendChild(d("span","flatpickr-time-separator",":")),w.timeContainer.appendChild(i)}w.config.time_24hr||(w.amPM=d("span","flatpickr-am-pm",w.l10n.amPM[r((w.latestSelectedDateObj?w.hourElement.value:w.config.defaultHour)>11)]),w.amPM.title=w.l10n.toggleTitle,w.amPM.tabIndex=-1,w.timeContainer.appendChild(w.amPM));return w.timeContainer}());s(w.calendarContainer,"rangeMode","range"===w.config.mode),s(w.calendarContainer,"animate",!0===w.config.animate),s(w.calendarContainer,"multiMonth",w.config.showMonths>1),w.calendarContainer.appendChild(e);var i=void 0!==w.config.appendTo&&void 0!==w.config.appendTo.nodeType;if((w.config.inline||w.config.static)&&(w.calendarContainer.classList.add(w.config.inline?"inline":"static"),w.config.inline&&(!i&&w.element.parentNode?w.element.parentNode.insertBefore(w.calendarContainer,w._input.nextSibling):void 0!==w.config.appendTo&&w.config.appendTo.appendChild(w.calendarContainer)),w.config.static)){var l=d("div","flatpickr-wrapper");w.element.parentNode&&w.element.parentNode.insertBefore(l,w.element),l.appendChild(w.element),w.altInput&&l.appendChild(w.altInput),l.appendChild(w.calendarContainer)}w.config.static||w.config.inline||(void 0!==w.config.appendTo?w.config.appendTo:window.document.body).appendChild(w.calendarContainer)}(),function(){w.config.wrap&&["open","close","toggle","clear"].forEach((function(e){Array.prototype.forEach.call(w.element.querySelectorAll("[data-"+e+"]"),(function(n){return P(n,"click",w[e])}))}));if(w.isMobile)return void function(){var e=w.config.enableTime?w.config.noCalendar?"time":"datetime-local":"date";w.mobileInput=d("input",w.input.className+" flatpickr-mobile"),w.mobileInput.tabIndex=1,w.mobileInput.type=e,w.mobileInput.disabled=w.input.disabled,w.mobileInput.required=w.input.required,w.mobileInput.placeholder=w.input.placeholder,w.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",w.selectedDates.length>0&&(w.mobileInput.defaultValue=w.mobileInput.value=w.formatDate(w.selectedDates[0],w.mobileFormatStr));w.config.minDate&&(w.mobileInput.min=w.formatDate(w.config.minDate,"Y-m-d"));w.config.maxDate&&(w.mobileInput.max=w.formatDate(w.config.maxDate,"Y-m-d"));w.input.getAttribute("step")&&(w.mobileInput.step=String(w.input.getAttribute("step")));w.input.type="hidden",void 0!==w.altInput&&(w.altInput.type="hidden");try{w.input.parentNode&&w.input.parentNode.insertBefore(w.mobileInput,w.input.nextSibling)}catch(e){}P(w.mobileInput,"change",(function(e){w.setDate(g(e).value,!1,w.mobileFormatStr),De("onChange"),De("onClose")}))}();var e=l(re,50);w._debouncedChange=l(Y,300),w.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&P(w.daysContainer,"mouseover",(function(e){"range"===w.config.mode&&oe(g(e))}));P(w._input,"keydown",ie),void 0!==w.calendarContainer&&P(w.calendarContainer,"keydown",ie);w.config.inline||w.config.static||P(window,"resize",e);void 0!==window.ontouchstart?P(window.document,"touchstart",X):P(window.document,"mousedown",X);P(window.document,"focus",X,{capture:!0}),!0===w.config.clickOpens&&(P(w._input,"focus",w.open),P(w._input,"click",w.open));void 0!==w.daysContainer&&(P(w.monthNav,"click",xe),P(w.monthNav,["keyup","increment"],N),P(w.daysContainer,"click",me));if(void 0!==w.timeContainer&&void 0!==w.minuteElement&&void 0!==w.hourElement){var n=function(e){return g(e).select()};P(w.timeContainer,["increment"],_),P(w.timeContainer,"blur",_,{capture:!0}),P(w.timeContainer,"click",H),P([w.hourElement,w.minuteElement],["focus","click"],n),void 0!==w.secondElement&&P(w.secondElement,"focus",(function(){return w.secondElement&&w.secondElement.select()})),void 0!==w.amPM&&P(w.amPM,"click",(function(e){_(e)}))}w.config.allowInput&&P(w._input,"blur",ae)}(),(w.selectedDates.length||w.config.noCalendar)&&(w.config.enableTime&&F(w.config.noCalendar?w.latestSelectedDateObj:void 0),ye(!1)),S();var n=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!w.isMobile&&n&&de(),De("onReady")}(),w}function T(e,n){for(var t=Array.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),a=[],i=0;i<t.length;i++){var o=t[i];try{if(null!==o.getAttribute("data-fp-omit"))continue;void 0!==o._flatpickr&&(o._flatpickr.destroy(),o._flatpickr=void 0),o._flatpickr=k(o,n||{}),a.push(o._flatpickr)}catch(e){console.error(e)}}return 1===a.length?a[0]:a}"undefined"!=typeof HTMLElement&&"undefined"!=typeof HTMLCollection&&"undefined"!=typeof NodeList&&(HTMLCollection.prototype.flatpickr=NodeList.prototype.flatpickr=function(e){return T(this,e)},HTMLElement.prototype.flatpickr=function(e){return T([this],e)});var I=function(e,n){return"string"==typeof e?T(window.document.querySelectorAll(e),n):e instanceof Node?T([e],n):T(e,n)};return I.defaultConfig={},I.l10ns={en:e({},i),default:e({},i)},I.localize=function(n){I.l10ns.default=e(e({},I.l10ns.default),n)},I.setDefaults=function(n){I.defaultConfig=e(e({},I.defaultConfig),n)},I.parseDate=C({}),I.formatDate=b({}),I.compareDates=M,"undefined"!=typeof jQuery&&void 0!==jQuery.fn&&(jQuery.fn.flatpickr=function(e){return T(this,e)}),Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+("string"==typeof e?parseInt(e,10):e))},"undefined"!=typeof window&&(window.flatpickr=I),I}));
vendor: 3,345 bytes, lines 4683-4684
4683
4684(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.monthSelectPlugin=factory())})(this,function(){"use strict";var __assign=function(){__assign=Object.assign||function __assign(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))t[p]=s[p]}return t};return __assign.apply(this,arguments)};var monthToStr=function(monthNumber,shorthand,locale){return locale.months[shorthand?"shorthand":"longhand"][monthNumber]};function clearNode(node){while(node.firstChild)node.removeChild(node.firstChild)}function getEventTarget(event){try{if(typeof event.composedPath==="function"){var path=event.composedPath();return path[0]}return event.target}catch(error){return event.target}}var defaultConfig={shorthand:false,dateFormat:"F Y",altFormat:"F Y",theme:"light"};function monthSelectPlugin(pluginConfig){var config=__assign(__assign({},defaultConfig),pluginConfig);return function(fp){fp.config.dateFormat=config.dateFormat;fp.config.altFormat=config.altFormat;var self={monthsContainer:null};function clearUnnecessaryDOMElements(){if(!fp.rContainer)return;clearNode(fp.rContainer);for(var index=0;index<fp.monthElements.length;index++){var element=fp.monthElements[index];if(!element.parentNode)continue;element.parentNode.removeChild(element)}}function build(){if(!fp.rContainer)return;self.monthsContainer=fp._createElement("div","flatpickr-monthSelect-months");self.monthsContainer.tabIndex=-1;buildMonths();fp.rContainer.appendChild(self.monthsContainer);fp.calendarContainer.classList.add("flatpickr-monthSelect-theme-"+config.theme)}function buildMonths(){if(!self.monthsContainer)return;clearNode(self.monthsContainer);var frag=document.createDocumentFragment();for(var i=0;i<12;i++){var month=fp.createDay("flatpickr-monthSelect-month",new Date(fp.currentYear,i),0,i);if(month.dateObj.getMonth()===(new Date).getMonth()&&month.dateObj.getFullYear()===(new Date).getFullYear())month.classList.add("today");month.textContent=monthToStr(i,config.shorthand,fp.l10n);month.addEventListener("click",selectMonth);frag.appendChild(month)}self.monthsContainer.appendChild(frag);if(fp.config.minDate&&fp.currentYear===fp.config.minDate.getFullYear())fp.prevMonthNav.classList.add("flatpickr-disabled");else fp.prevMonthNav.classList.remove("flatpickr-disabled");if(fp.config.maxDate&&fp.currentYear===fp.config.maxDate.getFullYear())fp.nextMonthNav.classList.add("flatpickr-disabled");else fp.nextMonthNav.classList.remove("flatpickr-disabled")}function bindEvents(){fp._bind(fp.prevMonthNav,"click",function(e){e.preventDefault();e.stopPropagation();fp.changeYear(fp.currentYear-1);selectYear();buildMonths()});fp._bind(fp.nextMonthNav,"click",function(e){e.preventDefault();e.stopPropagation();fp.changeYear(fp.currentYear+1);selectYear();buildMonths()});fp._bind(self.monthsContainer,"mouseover",function(e){if(fp.config.mode==="range")fp.onMouseOver(getEventTarget(e),"flatpickr-monthSelect-month")})}function setCurrentlySelected(){if(!fp.rContainer)return;if(!fp.selectedDates.length)return;var currentlySelected=fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month.selected");for(var index=0;
4684index<currentlySelected.length;index++){currentlySelected[index].classList.remove("selected")}var targetMonth=fp.selectedDates[0].getMonth();var month=fp.rContainer.querySelector(".flatpickr-monthSelect-month:nth-child("+(targetMonth+1)+")");if(month){month.classList.add("selected")}}function selectYear(){var selectedDate=fp.selectedDates[0];if(selectedDate){selectedDate=new Date(selectedDate);selectedDate.setFullYear(fp.currentYear);if(fp.config.minDate&&selectedDate<fp.config.minDate){selectedDate=fp.config.minDate}if(fp.config.maxDate&&selectedDate>fp.config.maxDate){selectedDate=fp.config.maxDate}fp.currentYear=selectedDate.getFullYear()}fp.currentYearElement.value=String(fp.currentYear);if(fp.rContainer){var months=fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month");months.forEach(function(month){month.dateObj.setFullYear(fp.currentYear);if(fp.config.minDate&&month.dateObj<fp.config.minDate||fp.config.maxDate&&month.dateObj>fp.config.maxDate){month.classList.add("flatpickr-disabled")}else{month.classList.remove("flatpickr-disabled")}})}setCurrentlySelected()}function selectMonth(e){e.preventDefault();e.stopPropagation();var eventTarget=getEventTarget(e);if(!(eventTarget instanceof Element))return;if(eventTarget.classList.contains("flatpickr-disabled"))return;if(eventTarget.classList.contains("notAllowed"))return;setMonth(eventTarget.dateObj);if(fp.config.closeOnSelect){var single=fp.config.mode==="single";var range=fp.config.mode==="range"&&fp.selectedDates.length===2;if(single||range)fp.close()}}function setMonth(date){var selectedDate=new Date(fp.currentYear,date.getMonth(),date.getDate());var selectedDates=[];switch(fp.config.mode){case"single":selectedDates=[selectedDate];break;case"multiple":selectedDates.push(selectedDate);break;case"range":if(fp.selectedDates.length===2){selectedDates=[selectedDate]}else{selectedDates=fp.selectedDates.concat([selectedDate]);selectedDates.sort(function(a,b){return a.getTime()-b.getTime()})}break}fp.setDate(selectedDates,true);setCurrentlySelected()}var shifts={37:-1,39:1,40:3,38:-3};function onKeyDown(_,__,___,e){var shouldMove=shifts[e.keyCode]!==undefined;if(!shouldMove&&e.keyCode!==13){return}if(!fp.rContainer||!self.monthsContainer)return;var currentlySelected=fp.rContainer.querySelector(".flatpickr-monthSelect-month.selected");var index=Array.prototype.indexOf.call(self.monthsContainer.children,document.activeElement);if(index===-1){var target=currentlySelected||self.monthsContainer.firstElementChild;target.focus();index=target.$i}if(shouldMove){self.monthsContainer.children[(12+index+shifts[e.keyCode])%12].focus()}else if(e.keyCode===13&&self.monthsContainer.contains(document.activeElement)){setMonth(document.activeElement.dateObj)}}function closeHook(){var _a;if(((_a=fp.config)===null||_a===void 0?void 0:_a.mode)==="range"&&fp.selectedDates.length===1)fp.clear(false);if(!fp.selectedDates.length)buildMonths()}function stubCurrentMonth(){config._stubbedCurrentMonth=fp._initialDate.getMonth();fp._initialDate.setMonth(config._stubbedCurrentMonth);fp.currentMonth=config._stubbedCurrentMonth}function unstubCurrentMonth(){if(!config._stubbedCurrentMonth)return;fp._initialDate.setMonth(config._stubbedCurrentMonth);fp.currentMonth=config._stubbedCurrentMonth;delete config._stubbedCurrentMonth}function destroyPluginInstance(){if(self.monthsContainer!==null){var months=self.monthsContainer.querySelectorAll(".flatpickr-monthSelect-month");for(var index=0;index<months.length;index++){months[index].removeEventListener("click",selectMonth)}}}return{onParseConfig:function(){fp.config.enableTime=false},onValueUpdate:setCurrentlySelected,onKeyDown:onKeyDown,onReady:[stubCurrentMonth,clearUnnecessaryDOMElements,build,bindEvents,setCurrentlySelected,function(){fp.config.onClose.push(closeHook);fp.loadedPlugins.push("monthSelect")}],onDestroy:[unstubCurrentMonth,destroyPluginInstance,function(){fp.config.onClose=fp.config.onClose.filter(function(hook){return hook!==closeHook})}]}}}return monthSelectPlugin});
4685
4686/*!
4687 * popperjs v2.11.5 - MIT License - https://github.com/popperjs/popper-core
4688 */
4689!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(e,t){void 0===t&&(t=!1);var n=e.getBoundingClientRect(),o=1,i=1;if(r(e)&&t){var a=e.offsetHeight,f=e.offsetWidth;f>0&&(o=s(n.width)/f||1),a>0&&(i=s(n.height)/a||1)}return{width:n.width/o,height:n.height/i,top:n.top/i,right:n.right/o,bottom:n.bottom/i,left:n.left/o,x:n.left/o,y:n.top/i}}function c(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function p(e){return e?(e.nodeName||"").toLowerCase():null}function u(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function l(e){return f(u(e)).left+c(e).scrollLeft}function d(e){return t(e).getComputedStyle(e)}function h(e){var t=d(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function m(e,n,o){void 0===o&&(o=!1);var i,a,d=r(n),m=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),v=u(n),g=f(e,m),y={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(d||!d&&!o)&&(("body"!==p(n)||h(v))&&(y=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:c(i)),r(n)?((b=f(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):v&&(b.x=l(v))),{x:g.left+y.scrollLeft-b.x,y:g.top+y.scrollTop-b.y,width:g.width,height:g.height}}function v(e){var t=f(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function g(e){return"html"===p(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||u(e)}function y(e){return["html","body","#document"].indexOf(p(e))>=0?e.ownerDocument.body:r(e)&&h(e)?e:y(g(e))}function b(e,n){var r;void 0===n&&(n=[]);var o=y(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualVie
vendor: 17,313 bytes, lines 4689-4693
4689wport||[],h(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(b(g(s)))}function x(e){return["table","td","th"].indexOf(p(e))>=0}function w(e){return r(e)&&"fixed"!==d(e).position?e.offsetParent:null}function O(e){for(var n=t(e),i=w(e);i&&x(i)&&"static"===d(i).position;)i=w(i);return i&&("html"===p(i)||"body"===p(i)&&"static"===d(i).position)?n:i||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&r(e)&&"fixed"===d(e).position)return null;var n=g(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(p(n))<0;){var i=d(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var j="top",E="bottom",D="right",A="left",L="auto",P=[j,E,D,A],M="start",k="end",W="viewport",B="popper",H=P.reduce((function(e,t){return e.concat([t+"-"+M,t+"-"+k])}),[]),T=[].concat(P,[L]).reduce((function(e,t){return e.concat([t,t+"-"+M,t+"-"+k])}),[]),R=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function S(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function q(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function V(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function N(e,r){return r===W?V(function(e){var n=t(e),r=u(e),o=n.visualViewport,i=r.clientWidth,a=r.clientHeight,s=0,f=0;return o&&(i=o.width,a=o.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(s=o.offsetLeft,f=o.offsetTop)),{width:i,height:a,x:s+l(e),y:f}}(e)):n(r)?function(e){var t=f(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(r):V(function(e){var t,n=u(e),r=c(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+l(e),p=-r.scrollTop;return"rtl"===d(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:p}}(u(e)))}function I(e,t,o){var s="clippingParents"===t?function(e){var t=b(g(e)),o=["absolute","fixed"].indexOf(d(e).position)>=0&&r(e)?O(e):e;return n(o)?t.filter((function(e){return n(e)&&q(e,o)&&"body"!==p(e)})):[]}(e):[].concat(t),f=[].concat(s,[o]),c=f[0],u=f.reduce((function(t,n){var r=N(e,n);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),N(e,c));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function _(e){return e.split("-")[1]}function F(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function U(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?_(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case j:t={x:s,y:n.y-r.height};break;case E:t={x:s,y:n.y+n.height};break;case D:t={x:n.x+n.width,y:f};break;case A:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?F(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case M:t[c]=t[c]-(n[p]/2-r[p]/2);break;case k:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function z(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function X(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function Y(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.boundary,s=void 0===a?"clippingParents":a,c=r.rootBoundary,p=void 0===c?W:c,l=r.elementContext,d=void 0===l?B:l,h=r.altBoundary,m=void 0!==h&&h,v=r.padding,g=void 0===v?0:v,y=z("number"!=typeof g?g:X(g,P)),b=d===B?"reference":B,x=e.rects.popper,w=e.elements[m?b:d],O=I(n(w)?w:w.contextElement||u(e.elements.popper),s,p),A=f(e.elements.reference),L=U({reference:A,element:x,strategy:"absolute",placement:i}),M=V(Object.assign({},x,L)),k=d===B?M:A,H={top:O.top-k.top+y.top,bottom:k.bottom-O.bottom+y.bottom,left:O.left-k.left+y.left,right:k.right-O.right+y.right},T=e.modifiersData.offset;if(d===B&&T){var R=T[i];Object.keys(H).forEach((function(e){var t=[D,E].indexOf(e)>=0?1:-1,n=[j,E].indexOf(e)>=0?"y":"x";H[e]+=R[n]*t}))}return H}var G={placement:"bottom",modifiers:[],strategy:"absolute"};function J(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function K(e){void 0===e&&(e={});var t=e,r=t.defaultModifiers,o=void 0===r?[]:r,i=t.defaultOptions,a=void 0===i?G:i;return function(e,t,r){void 0===r&&(r=a);var i,s,f={placement:"bottom",orderedModifiers:[],options:Object.assign({},G,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},c=[],p=!1,u={state:f,setOptions:function(r){var i="function"==typeof r?r(f.options):r;l(),f.options=Object.assign({},a,f.options,i),f.scrollParents={reference:n(e)?b(e):e.contextElement?b(e.contextElement):[],popper:b(t)};var s,p,d=function(e){var t=S(e);return R.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((s=[].concat(o,f.options.modifiers),p=s.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(p).map((function(e){return p[e]}))));return f.orderedModifiers=d.filter((function(e){return e.enabled})),f.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,r=void 0===n?{}:n,o=e.effect;if("function"==typeof o){var i=o({state:f,name:t,instance:u,options:r}),a=function(){};c.push(i||a)}})),u.update()},forceUpdate:function(){if(!p){var e=f.elements,t=e.reference,n=e.popper;if(J(t,n)){f.rects={reference:m(t,O(n),"fixed"===f.options.strategy),popper:v(n)},f.reset=!1,f.placement=f.options.placement,f.orderedModifiers.forEach((function(e){return f.modifiersData[e.name]=Object.assign({},e.data)}));for(var r=0;r<f.orderedModifiers.length;r++)if(!0!==f.reset){var o=f.orderedModifiers[r],i=o.fn,a=o.options,s=void 0===a?{}:a,c=o.name;"function"==typeof i&&(f=i({state:f,options:s,name:c,instance:u})||f)}else f.reset=!1,r=-1}}},update:(i=function(){return new Promise((function(e){u.forceUpdate(),e(f)}))},function(){return s||(s=new Promise((function(e){Promise.resolve().then((function(){s=void 0,e(i())}))}))),s}),destroy:function(){l(),p=!0}};if(!J(e,t))return u;function l(){c.forEach((function(e){return e()})),c=[]}return u.setOptions(r).then((function(e){!p&&r.onFirstUpdate&&r.onFirstUpdate(e)})),u}}var Q={passive:!0};var Z={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var n=e.state,r=e.instance,o=e.options,i=o.scroll,a=void 0===i||i,s=o.resize,f=void 0===s||s,c=t(n.elements.popper),p=[].concat(n.scrollParents.reference,n.scrollParents.popper);return a&&p.forEach((function(e){e.addEventListener("scroll",r.update,Q)})),f&&c.addEventListener("resize",r.update,Q),function(){a&&p.forEach((function(e){e.removeEventListener("scroll",r.update,Q)})),f&&c.removeEventListener("resize",r.update,Q)}},data:{}};var $={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=U({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},ee={top:"auto",right:"auto",bottom:"auto",left:"auto"};function te(e){var n,r=e.popper,o=e.popperRect,i=e.placement,a=e.variation,f=e.offsets,c=e.position,p=e.gpuAcceleration,l=e.adaptive,h=e.roundOffsets,m=e.isFixed,v=f.x,g=void 0===v?0:v,y=f.y,b=void 0===y?0:y,x="function"==typeof h?h({x:g,y:b}):{x:g,y:b};g=x.x,b=x.y;var w=f.hasOwnProperty("x"),L=f.hasOwnProperty("y"),P=A,M=j,W=window;if(l){var B=O(r),H="clientHeight",T="clientWidth";if(B===t(r)&&"static"!==d(B=u(r)).position&&"absolute"===c&&(H="scrollHeight",T="scrollWidth"),B=B,i===j||(i===A||i===D)&&a===k)M=E,b-=(m&&B===W&&W.visualViewport?W.visualViewport.height:B[H])-o.height,b*=p?1:-1;if(i===A||(i===j||i===E)&&a===k)P=D,g-=(m&&B===W&&W.visualViewport?W.visualViewport.width:B[T])-o.width,g*=p?1:-1}var R,S=Object.assign({position:c},l&&ee),C=!0===h?function(e){var t=e.x,n=e.y,r=window.devicePixelRatio||1;return{x:s(t*r)/r||0,y:s(n*r)/r||0}}({x:g,y:b}):{x:g,y:b};return g=C.x,b=C.y,p?Object.assign({},S,((R={})[M]=L?"0":"",R[P]=w?"0":"",R.transform=(W.devicePixelRatio||1)<=1?"translate("+g+"px, "+b+"px)":"translate3d("+g+"px, "+b+"px, 0)",R)):Object.assign({},S,((n={})[M]=L?b+"px":"",n[P]=w?g+"px":"",n.transform="",n))}var ne={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,i=n.adaptive,a=void 0===i||i,s=n.roundOffsets,f=void 0===s||s,c={placement:C(t.placement),variation:_(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,te(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:f})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,te(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:f})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};var re={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];r(i)&&p(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});r(o)&&p(o)&&(Object.assign(o.style,a),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};var oe={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,i=void 0===o?[0,0]:o,a=T.reduce((function(e,n){return e[n]=function(e,t,n){var r=C(e),o=[A,j].indexOf(r)>=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[A,D].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},ie={left:"right",right:"left",bottom:"top",top:"bottom"};function ae(e){return e.replace(/left|right|bottom|top/g,(function(e){return ie[e]}))}var se={start:"end",end:"start"};function fe(e){return e.replace(/start|end/g,(function(e){return se[e]}))}function ce(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?T:f,p=_(r),u=p?s?H:H.filter((function(e){return _(e)===p})):P,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=Y(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var pe={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,g=C(v),y=f||(g===v||!h?[ae(v)]:function(e){if(C(e)===L)return[];var t=ae(e);return[fe(e),t,fe(t)]}(v)),b=[v].concat(y).reduce((function(e,n){return e.concat(C(n)===L?ce(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,P=!0,k=b[0],W=0;W<b.length;W++){var B=b[W],H=C(B),T=_(B)===M,R=[j,E].indexOf(H)>=0,S=R?"width":"height",q=Y(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),V=R?T?D:A:T?E:j;x[S]>w[S]&&(V=ae(V));var N=ae(V),I=[];if(i&&I.push(q[H]<=0),s&&I.push(q[V]<=0,q[N]<=0),I.every((function(e){return e}))){k=B,P=!1;break}O.set(B,I)}if(P)for(var F=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return k=t,"break"},U=h?3:1;U>0;U--){if("break"===F(U))break}t.placement!==k&&(t.modifiersData[r]._skip=!0,t.placement=k,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function ue(e,t,n){return i(e,a(t,n))}var le={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,g=n.tetherOffset,y=void 0===g?0:g,b=Y(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=_(t.placement),L=!w,P=F(x),k="x"===P?"y":"x",W=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,q={x:0,y:0};if(W){if(s){var V,N="y"===P?j:A,I="y"===P?E:D,U="y"===P?"height":"width",z=W[P],X=z+b[N],G=z-b[I],J=m?-H[U]/2:0,K=w===M?B[U]:H[U],Q=w===M?-H[U]:-B[U],Z=t.elements.arrow,$=m&&Z?v(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=ue(0,B[U],$[U]),oe=L?B[U]/2-J-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=L?-B[U]/2+J+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&O(t.elements.arrow),se=ae?"y"===P?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(V=null==S?void 0:S[P])?V:0,ce=z+ie-fe,pe=ue(m?a(X,z+oe-fe-se):X,z,m?i(G,ce):G);W[P]=pe,q[P]=pe-z}if(c){var le,de="x"===P?j:A,he="x"===P?E:D,me=W[k],ve="y"===k?"height":"width",ge=me+b[de],ye=me-b[he],be=-1!==[j,A].indexOf(x),xe=null!=(le=null==S?void 0:S[k])?le:0,we=be?ge:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ye,je=m&&be?function(e,t,n){var r=ue(e,t,n);return r>n?n:r}(we,me,Oe):ue(m?we:ge,me,m?Oe:ye);W[k]=je,q[k]=je-me}t.modifiersData[r]=q}},requiresIfExists:["offset"]};var de={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=F(s),c=[A,D].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return z("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:X(e,P))}(o.padding,n),u=v(i),l="y"===f?j:A,d="y"===f?E:D,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],g=O(i),y=g?"y"===f?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],L=y/2-u[c]/2+b,M=ue(x,L,w),k=f;n.modifiersData[r]=((t={})[k]=M,t.centerOffset=M-L,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&q(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function he(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function me(e){return[j,D,E,A].some((function(t){return e[t]>=0}))}var ve={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=Y(t,{elementContext:"reference"}),s=Y(t,{altBoundary:!0}),f=he(a,r),c=he(s,o,i),p=me(f),u=me(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},ge=K({defaultModifiers:[Z,$,ne,re]}),ye=[Z,$,ne,re,oe,pe,le,de,ve],be=K({defaultModifiers:ye});e.applyStyles=re,e.arrow=de,e.computeStyles=ne,e.createPopper=be,e.createPopperLite=ge,e.defaultModifiers=ye,e.detectOverflow=Y,e.eventListeners=Z,e.flip=pe,e.hide=ve,e.offset=oe,e.popperGenerator=K,e.popperOffsets=$,e.preventOverflow=le,Object.defineProperty(e,"__esModule",{value:!0})}));
4690
4691/*!
4692 * tippy.js v6.3.7 - MIT License - https://github.com/atomiks/tippyjs
4693 */
vendor: 25,668 bytes, line 4694
4694!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t=t||self).tippy=e(t.Popper)}(this,(function(t){"use strict";var e="undefined"!=typeof window&&"undefined"!=typeof document,n=!!e&&!!window.msCrypto,r={passive:!0,capture:!0},o=function(){return document.body};function i(t,e,n){if(Array.isArray(t)){var r=t[e];return null==r?Array.isArray(n)?n[e]:n:r}return t}function a(t,e){var n={}.toString.call(t);return 0===n.indexOf("[object")&&n.indexOf(e+"]")>-1}function s(t,e){return"function"==typeof t?t.apply(void 0,e):t}function u(t,e){return 0===e?t:function(r){clearTimeout(n),n=setTimeout((function(){t(r)}),e)};var n}function p(t,e){var n=Object.assign({},t);return e.forEach((function(t){delete n[t]})),n}function c(t){return[].concat(t)}function f(t,e){-1===t.indexOf(e)&&t.push(e)}function l(t){return t.split("-")[0]}function d(t){return[].slice.call(t)}function v(t){return Object.keys(t).reduce((function(e,n){return void 0!==t[n]&&(e[n]=t[n]),e}),{})}function m(){return document.createElement("div")}function g(t){return["Element","Fragment"].some((function(e){return a(t,e)}))}function h(t){return a(t,"MouseEvent")}function b(t){return!(!t||!t._tippy||t._tippy.reference!==t)}function y(t){return g(t)?[t]:function(t){return a(t,"NodeList")}(t)?d(t):Array.isArray(t)?t:d(document.querySelectorAll(t))}function w(t,e){t.forEach((function(t){t&&(t.style.transitionDuration=e+"ms")}))}function x(t,e){t.forEach((function(t){t&&t.setAttribute("data-state",e)}))}function E(t){var e,n=c(t)[0];return null!=n&&null!=(e=n.ownerDocument)&&e.body?n.ownerDocument:document}function O(t,e,n){var r=e+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(e){t[r](e,n)}))}function C(t,e){for(var n=e;n;){var r;if(t.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var T={isTouch:!1},A=0;function L(){T.isTouch||(T.isTouch=!0,window.performance&&document.addEventListener("mousemove",D))}function D(){var t=performance.now();t-A<20&&(T.isTouch=!1,document.removeEventListener("mousemove",D)),A=t}function k(){var t=document.activeElement;if(b(t)){var e=t._tippy;t.blur&&!e.state.isVisible&&t.blur()}}var R=Object.assign({appendTo:o,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),P=Object.keys(R);function j(t){var e=(t.plugins||[]).reduce((function(e,n){var r,o=n.name,i=n.defaultValue;o&&(e[o]=void 0!==t[o]?t[o]:null!=(r=R[o])?r:i);return e}),{});return Object.assign({},t,e)}function M(t,e){var n=Object.assign({},e,{content:s(e.content,[t])},e.ignoreAttributes?{}:function(t,e){return(e?Object.keys(j(Object.assign({},R,{plugins:e}))):P).reduce((function(e,n){var r=(t.getAttribute("data-tippy-"+n)||"").trim();if(!r)return e;if("content"===n)e[n]=r;else try{e[n]=JSON.parse(r)}catch(t){e[n]=r}return e}),{})}(t,e.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?e.interactive:n.aria.expanded,content:"auto"===n.aria.content?e.interactive?null:"describedby":n.aria.content},n}function V(t,e){t.innerHTML=e}function I(t){var e=m();return!0===t?e.className="tippy-arrow":(e.className="tippy-svg-arrow",g(t)?e.appendChild(t):V(e,t)),e}function S(t,e){g(e.content)?(V(t,""),t.appendChild(e.content)):"function"!=typeof e.content&&(e.allowHTML?V(t,e.content):t.textContent=e.content)}function B(t){var e=t.firstElementChild,n=d(e.children);return{box:e,content:n.find((function(t){return t.classList.contains("tippy-content")})),arrow:n.find((function(t){return t.classList.contains("tippy-arrow")||t.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(t){return t.classList.contains("tippy-backdrop")}))}}function N(t){var e=m(),n=m();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=m();function o(n,r){var o=B(e),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||S(a,t.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(I(r.arrow))):i.appendChild(I(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),S(r,t.props),e.appendChild(n),n.appendChild(r),o(t.props,t.props),{popper:e,onUpdate:o}}N.$$tippy=!0;var H=1,U=[],_=[];function z(e,a){var p,g,b,y,A,L,D,k,P=M(e,Object.assign({},R,j(v(a)))),V=!1,I=!1,S=!1,N=!1,z=[],F=u(wt,P.interactiveDebounce),W=H++,X=(k=P.plugins).filter((function(t,e){return k.indexOf(t)===e})),Y={id:W,reference:e,popper:m(),popperInstance:null,props:P,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:X,clearDelayTimeouts:function(){clearTimeout(p),clearTimeout(g),cancelAnimationFrame(b)},setProps:function(t){if(Y.state.isDestroyed)return;at("onBeforeUpdate",[Y,t]),bt();var n=Y.props,r=M(e,Object.assign({},n,v(t),{ignoreAttributes:!0}));Y.props=r,ht(),n.interactiveDebounce!==r.interactiveDebounce&&(pt(),F=u(wt,r.interactiveDebounce));n.triggerTarget&&!r.triggerTarget?c(n.triggerTarget).forEach((function(t){t.removeAttribute("aria-expanded")})):r.triggerTarget&&e.removeAttribute("aria-expanded");ut(),it(),J&&J(n,r);Y.popperInstance&&(Ct(),At().forEach((function(t){requestAnimationFrame(t._tippy.popperInstance.forceUpdate)})));at("onAfterUpdate",[Y,t])},setContent:function(t){Y.setProps({content:t})},show:function(){var t=Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=T.isTouch&&!Y.props.touch,a=i(Y.props.duration,0,R.duration);if(t||e||n||r)return;if(et().hasAttribute("disabled"))return;if(at("onShow",[Y],!1),!1===Y.props.onShow(Y))return;Y.state.isVisible=!0,tt()&&($.style.visibility="visible");it(),dt(),Y.state.isMounted||($.style.transition="none");if(tt()){var u=rt(),p=u.box,c=u.content;w([p,c],0)}L=function(){var t;if(Y.state.isVisible&&!N){if(N=!0,$.offsetHeight,$.style.transition=Y.props.moveTransition,tt()&&Y.props.animation){var e=rt(),n=e.box,r=e.content;w([n,r],a),x([n,r],"visible")}st(),ut(),f(_,Y),null==(t=Y.popperInstance)||t.forceUpdate(),at("onMount",[Y]),Y.props.animation&&tt()&&function(t,e){mt(t,e)}(a,(function(){Y.state.isShown=!0,at("onShown",[Y])}))}},function(){var t,e=Y.props.appendTo,n=et();t=Y.props.interactive&&e===o||"parent"===e?n.parentNode:s(e,[n]);t.contains($)||t.appendChild($);Y.state.isMounted=!0,Ct()}()},hide:function(){var t=!Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=i(Y.props.duration,1,R.duration);if(t||e||n)return;if(at("onHide",[Y],!1),!1===Y.props.onHide(Y))return;Y.state.isVisible=!1,Y.state.isShown=!1,N=!1,V=!1,tt()&&($.style.visibility="hidden");if(pt(),vt(),it(!0),tt()){var o=rt(),a=o.box,s=o.content;Y.props.animation&&(w([a,s],r),x([a,s],"hidden"))}st(),ut(),Y.props.animation?tt()&&function(t,e){mt(t,(function(){!Y.state.isVisible&&$.parentNode&&$.parentNode.contains($)&&e()}))}(r,Y.unmount):Y.unmount()},hideWithInteractivity:function(t){nt().addEventListener("mousemove",F),f(U,F),F(t)},enable:function(){Y.state.isEnabled=!0},disable:function(){Y.hide(),Y.state.isEnabled=!1},unmount:function(){Y.state.isVisible&&Y.hide();if(!Y.state.isMounted)return;Tt(),At().forEach((function(t){t._tippy.unmount()})),$.parentNode&&$.parentNode.removeChild($);_=_.filter((function(t){return t!==Y})),Y.state.isMounted=!1,at("onHidden",[Y])},destroy:function(){if(Y.state.isDestroyed)return;Y.clearDelayTimeouts(),Y.unmount(),bt(),delete e._tippy,Y.state.isDestroyed=!0,at("onDestroy",[Y])}};if(!P.render)return Y;var q=P.render(Y),$=q.popper,J=q.onUpdate;$.setAttribute("data-tippy-root",""),$.id="tippy-"+Y.id,Y.popper=$,e._tippy=Y,$._tippy=Y;var G=X.map((function(t){return t.fn(Y)})),K=e.hasAttribute("aria-expanded");return ht(),ut(),it(),at("onCreate",[Y]),P.showOnCreate&&Lt(),$.addEventListener("mouseenter",(function(){Y.props.interactive&&Y.state.isVisible&&Y.clearDelayTimeouts()})),$.addEventListener("mouseleave",(function(){Y.props.interactive&&Y.props.trigger.indexOf("mouseenter")>=0&&nt().addEventListener("mousemove",F)})),Y;function Q(){var t=Y.props.touch;return Array.isArray(t)?t:[t,0]}function Z(){return"hold"===Q()[0]}function tt(){var t;return!(null==(t=Y.props.render)||!t.$$tippy)}function et(){return D||e}function nt(){var t=et().parentNode;return t?E(t):document}function rt(){return B($)}function ot(t){return Y.state.isMounted&&!Y.state.isVisible||T.isTouch||y&&"focus"===y.type?0:i(Y.props.delay,t?0:1,R.delay)}function it(t){void 0===t&&(t=!1),$.style.pointerEvents=Y.props.interactive&&!t?"":"none",$.style.zIndex=""+Y.props.zIndex}function at(t,e,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[t]&&n[t].apply(n,e)})),n)&&(r=Y.props)[t].apply(r,e)}function st(){var t=Y.props.aria;if(t.content){var n="aria-"+t.content,r=$.id;c(Y.props.triggerTarget||e).forEach((function(t){var e=t.getAttribute(n);if(Y.state.isVisible)t.setAttribute(n,e?e+" "+r:r);else{var o=e&&e.replace(r,"").trim();o?t.setAttribute(n,o):t.removeAttribute(n)}}))}}function ut(){!K&&Y.props.aria.expanded&&c(Y.props.triggerTarget||e).forEach((function(t){Y.props.interactive?t.setAttribute("aria-expanded",Y.state.isVisible&&t===et()?"true":"false"):t.removeAttribute("aria-expanded")}))}function pt(){nt().removeEventListener("mousemove",F),U=U.filter((function(t){return t!==F}))}function ct(t){if(!T.isTouch||!S&&"mousedown"!==t.type){var n=t.composedPath&&t.composedPath()[0]||t.target;if(!Y.props.interactive||!C($,n)){if(c(Y.props.triggerTarget||e).some((function(t){return C(t,n)}))){if(T.isTouch)return;if(Y.state.isVisible&&Y.props.trigger.indexOf("click")>=0)return}else at("onClickOutside",[Y,t]);!0===Y.props.hideOnClick&&(Y.clearDelayTimeouts(),Y.hide(),I=!0,setTimeout((function(){I=!1})),Y.state.isMounted||vt())}}}function ft(){S=!0}function lt(){S=!1}function dt(){var t=nt();t.addEventListener("mousedown",ct,!0),t.addEventListener("touchend",ct,r),t.addEventListener("touchstart",lt,r),t.addEventListener("touchmove",ft,r)}function vt(){var t=nt();t.removeEventListener("mousedown",ct,!0),t.removeEventListener("touchend",ct,r),t.removeEventListener("touchstart",lt,r),t.removeEventListener("touchmove",ft,r)}function mt(t,e){var n=rt().box;function r(t){t.target===n&&(O(n,"remove",r),e())}if(0===t)return e();O(n,"remove",A),O(n,"add",r),A=r}function gt(t,n,r){void 0===r&&(r=!1),c(Y.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,n,r),z.push({node:e,eventType:t,handler:n,options:r})}))}function ht(){var t;Z()&&(gt("touchstart",yt,{passive:!0}),gt("touchend",xt,{passive:!0})),(t=Y.props.trigger,t.split(/\s+/).filter(Boolean)).forEach((function(t){if("manual"!==t)switch(gt(t,yt),t){case"mouseenter":gt("mouseleave",xt);break;case"focus":gt(n?"focusout":"blur",Et);break;case"focusin":gt("focusout",Et)}}))}function bt(){z.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),z=[]}function yt(t){var e,n=!1;if(Y.state.isEnabled&&!Ot(t)&&!I){var r="focus"===(null==(e=y)?void 0:e.type);y=t,D=t.currentTarget,ut(),!Y.state.isVisible&&h(t)&&U.forEach((function(e){return e(t)})),"click"===t.type&&(Y.props.trigger.indexOf("mouseenter")<0||V)&&!1!==Y.props.hideOnClick&&Y.state.isVisible?n=!0:Lt(t),"click"===t.type&&(V=!n),n&&!r&&Dt(t)}}function wt(t){var e=t.target,n=et().contains(e)||$.contains(e);"mousemove"===t.type&&n||function(t,e){var n=e.clientX,r=e.clientY;return t.every((function(t){var e=t.popperRect,o=t.popperState,i=t.props.interactiveBorder,a=l(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,p="top"===a?s.bottom.y:0,c="right"===a?s.left.x:0,f="left"===a?s.right.x:0,d=e.top-r+u>i,v=r-e.bottom-p>i,m=e.left-n+c>i,g=n-e.right-f>i;return d||v||m||g}))}(At().concat($).map((function(t){var e,n=null==(e=t._tippy.popperInstance)?void 0:e.state;return n?{popperRect:t.getBoundingClientRect(),popperState:n,props:P}:null})).filter(Boolean),t)&&(pt(),Dt(t))}function xt(t){Ot(t)||Y.props.trigger.indexOf("click")>=0&&V||(Y.props.interactive?Y.hideWithInteractivity(t):Dt(t))}function Et(t){Y.props.trigger.indexOf("focusin")<0&&t.target!==et()||Y.props.interactive&&t.relatedTarget&&$.contains(t.relatedTarget)||Dt(t)}function Ot(t){return!!T.isTouch&&Z()!==t.type.indexOf("touch")>=0}function Ct(){Tt();var n=Y.props,r=n.popperOptions,o=n.placement,i=n.offset,a=n.getReferenceClientRect,s=n.moveTransition,u=tt()?B($).arrow:null,p=a?{getBoundingClientRect:a,contextElement:a.contextElement||et()}:e,c=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(t){var e=t.state;if(tt()){var n=rt().box;["placement","reference-hidden","escaped"].forEach((function(t){"placement"===t?n.setAttribute("data-placement",e.placement):e.attributes.popper["data-popper-"+t]?n.setAttribute("data-"+t,""):n.removeAttribute("data-"+t)})),e.attributes.popper={}}}}];tt()&&u&&c.push({name:"arrow",options:{element:u,padding:3}}),c.push.apply(c,(null==r?void 0:r.modifiers)||[]),Y.popperInstance=t.createPopper(p,$,Object.assign({},r,{placement:o,onFirstUpdate:L,modifiers:c}))}function Tt(){Y.popperInstance&&(Y.popperInstance.destroy(),Y.popperInstance=null)}function At(){return d($.querySelectorAll("[data-tippy-root]"))}function Lt(t){Y.clearDelayTimeouts(),t&&at("onTrigger",[Y,t]),dt();var e=ot(!0),n=Q(),r=n[0],o=n[1];T.isTouch&&"hold"===r&&o&&(e=o),e?p=setTimeout((function(){Y.show()}),e):Y.show()}function Dt(t){if(Y.clearDelayTimeouts(),at("onUntrigger",[Y,t]),Y.state.isVisible){if(!(Y.props.trigger.indexOf("mouseenter")>=0&&Y.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(t.type)>=0&&V)){var e=ot(!1);e?g=setTimeout((function(){Y.state.isVisible&&Y.hide()}),e):b=requestAnimationFrame((function(){Y.hide()}))}}else vt()}}function F(t,e){void 0===e&&(e={});var n=R.plugins.concat(e.plugins||[]);document.addEventListener("touchstart",L,r),window.addEventListener("blur",k);var o=Object.assign({},e,{plugins:n}),i=y(t).reduce((function(t,e){var n=e&&z(e,o);return n&&t.push(n),t}),[]);return g(t)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(t){Object.keys(t).forEach((function(e){R[e]=t[e]}))},F.currentInput=T;var W=Object.assign({},t.applyStyles,{effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(t){var e;if(null==(e=t.props.render)||!e.$$tippy)return{};var n=B(t.popper),r=n.box,o=n.content,i=t.props.animateFill?function(){var t=m();return t.className="tippy-backdrop",x([t],"hidden"),t}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",t.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var t=r.style.transitionDuration,e=Number(t.replace("ms",""));o.style.transitionDelay=Math.round(e/10)+"ms",i.style.transitionDuration=t,x([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&x([i],"hidden")}}}};var q={clientX:0,clientY:0},$=[];function J(t){var e=t.clientX,n=t.clientY;q={clientX:e,clientY:n}}var G={name:"followCursor",defaultValue:!1,fn:function(t){var e=t.reference,n=E(t.props.triggerTarget||e),r=!1,o=!1,i=!0,a=t.props;function s(){return"initial"===t.props.followCursor&&t.state.isVisible}function u(){n.addEventListener("mousemove",f)}function p(){n.removeEventListener("mousemove",f)}function c(){r=!0,t.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||e.contains(n.target),o=t.props.followCursor,i=n.clientX,a=n.clientY,s=e.getBoundingClientRect(),u=i-s.left,p=a-s.top;!r&&t.props.interactive||t.setProps({getReferenceClientRect:function(){var t=e.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=t.left+u,r=t.top+p);var s="horizontal"===o?t.top:r,c="vertical"===o?t.right:n,f="horizontal"===o?t.bottom:r,l="vertical"===o?t.left:n;return{width:c-l,height:f-s,top:s,right:c,bottom:f,left:l}}})}function l(){t.props.followCursor&&($.push({instance:t,doc:n}),function(t){t.addEventListener("mousemove",J)}(n))}function d(){0===($=$.filter((function(e){return e.instance!==t}))).filter((function(t){return t.doc===n})).length&&function(t){t.removeEventListener("mousemove",J)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=t.props},onAfterUpdate:function(e,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!t.state.isMounted||o||s()||u()):(p(),c()))},onMount:function(){t.props.followCursor&&!o&&(i&&(f(q),i=!1),s()||u())},onTrigger:function(t,e){h(e)&&(q={clientX:e.clientX,clientY:e.clientY}),o="focus"===e.type},onHidden:function(){t.props.followCursor&&(c(),p(),i=!0)}}}};var K={name:"inlinePositioning",defaultValue:!1,fn:function(t){var e,n=t.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;t.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),e!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),t.setProps({getReferenceClientRect:function(){return function(t){return function(t,e,n,r){if(n.length<2||null===t)return e;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||e;switch(t){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===t,s=o.top,u=i.bottom,p=a?o.left:i.left,c=a?o.right:i.right;return{top:s,bottom:u,left:p,right:c,width:c-p,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(t){return t.left}))),l=Math.max.apply(Math,n.map((function(t){return t.right}))),d=n.filter((function(e){return"left"===t?e.left===f:e.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return e}}(l(t),n.getBoundingClientRect(),d(n.getClientRects()),r)}(a.placement)}})),e=a.placement)}};function s(){var e;o||(e=function(t,e){var n;return{popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat(((null==(n=t.popperOptions)?void 0:n.modifiers)||[]).filter((function(t){return t.name!==e.name})),[e])})}}(t.props,a),o=!0,t.setProps(e),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(e,n){if(h(n)){var o=d(t.reference.getClientRects()),i=o.find((function(t){return t.left-2<=n.clientX&&t.right+2>=n.clientX&&t.top-2<=n.clientY&&t.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var Q={name:"sticky",defaultValue:!1,fn:function(t){var e=t.reference,n=t.popper;function r(e){return!0===t.props.sticky||t.props.sticky===e}var o=null,i=null;function a(){var s=r("reference")?(t.popperInstance?t.popperInstance.state.elements.reference:e).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Z(o,s)||u&&Z(i,u))&&t.popperInstance&&t.popperInstance.update(),o=s,i=u,t.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){t.props.sticky&&a()}}}};function Z(t,e){return!t||!e||(t.top!==e.top||t.right!==e.right||t.bottom!==e.bottom||t.left!==e.left)}return e&&function(t){var e=document.createElement("style");e.textContent=t,e.setAttribute("data-tippy-stylesheet","");var n=document.head,r=document.querySelector("head>style,head>link");r?n.insertBefore(e,r):n.appendChild(e)}('.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}'),F.setDefaultProps({plugins:[Y,G,K,Q],render:N}),F.createSingleton=function(t,e){var n;void 0===e&&(e={});var r,o=t,i=[],a=[],s=e.overrides,u=[],f=!1;function l(){a=o.map((function(t){return c(t.props.triggerTarget||t.reference)})).reduce((function(t,e){return t.concat(e)}),[])}function d(){i=o.map((function(t){return t.reference}))}function v(t){o.forEach((function(e){t?e.enable():e.disable()}))}function g(t){return o.map((function(e){var n=e.setProps;return e.setProps=function(o){n(o),e.reference===r&&t.setProps(o)},function(){e.setProps=n}}))}function h(t,e){var n=a.indexOf(e);if(e!==r){r=e;var u=(s||[]).concat("content").reduce((function(t,e){return t[e]=o[n].props[e],t}),{});t.setProps(Object.assign({},u,{getReferenceClientRect:"function"==typeof u.getReferenceClientRect?u.getReferenceClientRect:function(){var t;return null==(t=i[n])?void 0:t.getBoundingClientRect()}}))}}v(!1),d(),l();var b={fn:function(){return{onDestroy:function(){v(!0)},onHidden:function(){r=null},onClickOutside:function(t){t.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(t){t.props.showOnCreate&&!f&&(f=!0,h(t,i[0]))},onTrigger:function(t,e){h(t,e.currentTarget)}}}},y=F(m(),Object.assign({},p(e,["overrides"]),{plugins:[b].concat(e.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat((null==(n=e.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(t){if(w(),!r&&null==t)return h(y,i[0]);if(!r||null!=t){if("number"==typeof t)return i[t]&&h(y,i[t]);if(o.indexOf(t)>=0){var e=t.reference;return h(y,e)}return i.indexOf(t)>=0?h(y,t):void 0}},y.showNext=function(){var t=i[0];if(!r)return y.show(0);var e=i.indexOf(r);y.show(i[e+1]||t)},y.showPrevious=function(){var t=i[i.length-1];if(!r)return y.show(t);var e=i.indexOf(r),n=i[e-1]||t;y.show(n)};var x=y.setProps;return y.setProps=function(t){s=t.overrides||s,x(t)},y.setInstances=function(t){v(!0),u.forEach((function(t){return t()})),o=t,v(!1),d(),l(),u=g(y),y.setProps({triggerTarget:a})},u=g(y),y},F.delegate=function(t,e){var n=[],o=[],i=!1,a=e.target,s=p(e,["target"]),u=Object.assign({},s,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},s,{showOnCreate:!0}),l=F(t,u);function d(t){if(t.target&&!i){var n=t.target.closest(a);if(n){var r=n.getAttribute("data-tippy-trigger")||e.trigger||R.trigger;if(!n._tippy&&!("touchstart"===t.type&&"boolean"==typeof f.touch||"touchstart"!==t.type&&r.indexOf(X[t.type])<0)){var s=F(n,f);s&&(o=o.concat(s))}}}}function v(t,e,r,o){void 0===o&&(o=!1),t.addEventListener(e,r,o),n.push({node:t,eventType:e,handler:r,options:o})}return c(l).forEach((function(t){var e=t.destroy,a=t.enable,s=t.disable;t.destroy=function(t){void 0===t&&(t=!0),t&&o.forEach((function(t){t.destroy()})),o=[],n.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),n=[],e()},t.enable=function(){a(),o.forEach((function(t){return t.enable()})),i=!1},t.disable=function(){s(),o.forEach((function(t){return t.disable()})),i=!0},function(t){var e=t.reference;v(e,"touchstart",d,r),v(e,"mouseover",d),v(e,"focusin",d),v(e,"click",d)}(t)})),l},F.hideAll=function(t){var e=void 0===t?{}:t,n=e.exclude,r=e.duration;_.forEach((function(t){var e=!1;if(n&&(e=b(n)?t.reference===n:t.popper===n.popper),!e){var o=t.props.duration;t.setProps({duration:r}),t.hide(),t.state.isDestroyed||t.setProps({duration:o})}}))},F.roundArrow='<svg width="16" height="6" xmlns="http://www.w3.org/2000/svg"><path d="M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z"></svg>',F}));
4695
4696/**
4697 * Selectize (v0.15.2)
4698 * https://selectize.dev
4699 */
4700(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&typeof module.exports==="object"){module.exports=factory(require("jquery"))}else{root.EM_Selectize=factory(root.jQuery)}})(this,function($){"use strict";var highlight=function($element,pattern){if(typeof pattern==="string"&&!pattern.length)return;var regex=typeof pattern==="string"?new RegExp(pattern,"i"):pattern;var highlight=function(node){var skip=0;if(node.nodeType===3){var pos=node.data.search(regex);if(pos>=0&&node.data.length>0){var match=node.data.match(regex);var spannode=document.createElement("span");spannode.className="highlight";var middlebit=node.splitText(pos);var endbit=middlebit.splitText(match[0].length);var middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);skip=1}}else if(node.nodeType===1&&node.childNodes&&!/(script|style)/i.test(node.tagName)&&(node.className!=="highlight"||node.tagName!=="SPAN")){for(var i=0;i<node.childNodes.length;++i){i+=highlight(node.childNodes[i])}}return skip};return $element.each(function(){highlight(this)})};$.fn.removeHighlight=function(){return this.find("span.highlight").each(function(){this.parentNode.firstChild.nodeName;var parent=this.parentNode;parent.replaceChild(this.firstChild,this);parent.normalize()}).end()};var MicroEvent=function(){};MicroEvent.prototype={on:function(event,fct){this._events=this._events||{};this._events[event]=this._events[event]||[];this._events[event].push(fct)},off:function(event,fct){var n=arguments.length;if(n===0)return delete this._events;if(n===1)return delete this._events[event];this._events=this._events||{};if(event in this._events===false)return;this._events[event].splice(this._events[event].indexOf(fct),1)},trigger:function(event){const events=this._events=this._events||{};if(event in events===false)return;for(var i=0;i<events[event].length;i++){events[event][i].apply(this,Array.prototype.slice.call(arguments,1))}}};MicroEvent.mixin=function(destObject){var props=["on","off","trigger"];for(var i=0;i<props.length;i++){destObject.prototype[props[i]]=MicroEvent.prototype[props[i]]}};var MicroPlugin={};MicroPlugin.mixin=function(Interface){Interface.plugins={};Interface.prototype.initializePlugins=function(plugins){var i,n,key;var self=this;var queue=[];self.plugins={names:[],settings:{},requested:{},loaded:{}};if(utils.isArray(plugins)){for(i=0,n=plugins.length;i<n;i++){if(typeof plugins[i]==="string"){queue.push(plugins[i])}else{self.plugins.settings[plugins[i].name]=plugins[i].options;queue.push(plugins[i].name)}}}else if(plugins){for(key in plugins){if(plugins.hasOwnProperty(key)){self.plugins.settings[key]=plugins[key];queue.push(key)}}}while(queue.length){self.require(queue.shift())}};Interface.prototype.loadPlugin=function(name){var self=this;var plugins=self.plugins;var plugin=Interface.plugins[name];if(!Interface.plugins.hasOwnProperty(name)){throw new Error('Unable to find "'+name+'" plugin')}plugins.requested[name]=true;plugins.loaded[name]=plugin.fn.apply(self,[self.plugins.settings[name]||{}]);plugins.names.push(name)};Interface.prototype.require=function(name){var self=this;var plugins=self.plugins;if(!self.plugins.loaded.hasOwnProperty(name)){if(plugins.requested[name]){throw new Error('Plugin has circular dependency ("'+name+'")')}self.loadPlugin(name)}return plugins.loaded[name]};Interface.define=function(name,fn){Interface.plugins[name]={name:name,fn:fn}}};var utils={isArray:Array.isArray||function(vArg){return Object.prototype.toString.call(vArg)==="[object Array]"}};var Sifter=function(items,settings){this.items=items;this.settings=settings||{diacritics:true}};Sifter.prototype.tokenize=function(query,respect_word_boundaries){query=trim(String(query||"").toLowerCase());if(!query||!query.length)return[];var i,n,regex,letter;var tokens=[];var words=query.split(/ +/);for(i=0,n=words.length;i<n;i++){regex=escape_regex(words[i]);if(this.settings.diacritics){for(letter in DIACRITICS){if(DIACRITICS.hasOwnProperty(letter)){regex=regex.replace(new RegExp(letter,"g"),DIACRITICS[letter])}}}if(respect_word_boundaries)regex="\\b"+regex;tokens.push({string:words[i],regex:new RegExp(regex,"i")})}return tokens}
4700;Sifter.prototype.iterator=function(object,callback){var iterator;if(is_array(object)){iterator=Array.prototype.forEach||function(callback){for(var i=0,n=this.length;i<n;i++){callback(this[i],i,this)}}}else{iterator=function(callback){for(var key in this){if(this.hasOwnProperty(key)){callback(this[key],key,this)}}}}iterator.apply(object,[callback])};Sifter.prototype.getScoreFunction=function(search,options){var self,fields,tokens,token_count,nesting;self=this;search=self.prepareSearch(search,options);tokens=search.tokens;fields=search.options.fields;token_count=tokens.length;nesting=search.options.nesting;var scoreValue=function(value,token){var score,pos;if(!value)return 0;value=String(value||"");pos=value.search(token.regex);if(pos===-1)return 0;score=token.string.length/value.length;if(pos===0)score+=.5;return score};var scoreObject=function(){var field_count=fields.length;if(!field_count){return function(){return 0}}if(field_count===1){return function(token,data){return scoreValue(getattr(data,fields[0],nesting),token)}}return function(token,data){for(var i=0,sum=0;i<field_count;i++){sum+=scoreValue(getattr(data,fields[i],nesting),token)}return sum/field_count}}();if(!token_count){return function(){return 0}}if(token_count===1){return function(data){return scoreObject(tokens[0],data)}}if(search.options.conjunction==="and"){return function(data){var score;for(var i=0,sum=0;i<token_count;i++){score=scoreObject(tokens[i],data);if(score<=0)return 0;sum+=score}return sum/token_count}}else{return function(data){for(var i=0,sum=0;i<token_count;i++){sum+=scoreObject(tokens[i],data)}return sum/token_count}}};Sifter.prototype.getSortFunction=function(search,options){var i,n,self,field,fields,fields_count,multiplier,multipliers,get_field,implicit_score,sort;self=this;search=self.prepareSearch(search,options);sort=!search.query&&options.sort_empty||options.sort;get_field=function(name,result){if(name==="$score")return result.score;return getattr(self.items[result.id],name,options.nesting)};fields=[];if(sort){for(i=0,n=sort.length;i<n;i++){if(search.query||sort[i].field!=="$score"){fields.push(sort[i])}}}if(search.query){implicit_score=true;for(i=0,n=fields.length;i<n;i++){if(fields[i].field==="$score"){implicit_score=false;break}}if(implicit_score){fields.unshift({field:"$score",direction:"desc"})}}else{for(i=0,n=fields.length;i<n;i++){if(fields[i].field==="$score"){fields.splice(i,1);break}}}multipliers=[];for(i=0,n=fields.length;i<n;i++){multipliers.push(fields[i].direction==="desc"?-1:1)}fields_count=fields.length;if(!fields_count){return null}else if(fields_count===1){field=fields[0].field;multiplier=multipliers[0];return function(a,b){return multiplier*cmp(get_field(field,a),get_field(field,b))}}else{return function(a,b){var i,result,a_value,b_value,field;for(i=0;i<fields_count;i++){field=fields[i].field;result=multipliers[i]*cmp(get_field(field,a),get_field(field,b));if(result)return result}return 0}}};Sifter.prototype.prepareSearch=function(query,options){if(typeof query==="object")return query;options=extend({},options);var option_fields=options.fields;var option_sort=options.sort;var option_sort_empty=options.sort_empty;if(option_fields&&!is_array(option_fields))options.fields=[option_fields];if(option_sort&&!is_array(option_sort))options.sort=[option_sort];if(option_sort_empty&&!is_array(option_sort_empty))options.sort_empty=[option_sort_empty];return{options:options,query:String(query||"").toLowerCase(),tokens:this.tokenize(query,options.respect_word_boundaries),total:0,items:[]}};Sifter.prototype.search=function(query,options){var self=this,value,score,search,calculateScore;var fn_sort;var fn_score;search=this.prepareSearch(query,options);options=search.options;query=search.query;fn_score=options.score||self.getScoreFunction(search);if(query.length){self.iterator(self.items,function(item,id){score=fn_score(item);if(options.filter===false||score>0){search.items.push({score:score,id:id})}})}else{self.iterator(self.items,function(item,id){search.items.push({score:1,id:id})})}fn_sort=self.getSortFunction(search,options);if(fn_sort)search.items.sort(fn_sort);search.total=search.items.length;if(typeof options.limit==="number"){search.items=search.items.slice(0,options.limit)}return search};var cmp=function(a,b){if(typeof a==="number"&&typeof b==="number"){return a>b?1:a<b?-1:0}a=asciifold(String(a||""));b=asciifold(String(b||""));if(a>b)return 1;if(b>a)return-1;return 0};var extend=function(a,b){var i,n,k,object;for(i=1,n=arguments.length;i<n;i++){object=arguments[i];if(!object)continue;for(k in object){if(object.hasOwnProperty(k)){a[k]=object[k]}}}return a};var getattr=function(obj,name,nesting){if(!obj||!name)return;if(!nesting)return obj[name];var names=name.split(".");while(names.length&&(obj=obj[names.shift()]));return obj};var trim=function(str){return(str+"").replace(/^\s+|\s+$|/g,"")};var escape_regex=function(str){return(str+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")};var is_array=Array.isArray||typeof $!=="undefined"&&$.isArray||function(object){return Object.prototype.toString.call(object)==="[object Array]"};var DIACRITICS={a:"[aḀḁĂăÂâǍǎȺⱥȦȧẠạÄäÀàÁáĀāÃãÅåąĄÃąĄ]",b:"[b␢βΒB฿𐌁ᛒ]",c:"[cĆćĈĉČčĊċC̄c̄ÇçḈḉȻȼƇƈɕᴄCc]",d:"[dĎďḊḋḐḑḌḍḒḓḎḏĐđD̦d̦ƉɖƊɗƋƌᵭᶁᶑȡᴅDdð]",e:"[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀềỄễỂểḜḝḖḗḔḕȆȇẸẹỆệⱸᴇEeɘǝƏƐε]",f:"[fƑƒḞḟ]",g:"[gɢ₲ǤǥĜĝĞğĢģƓɠĠġ]",h:"[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]",i:"[iÍíÌìĬĭÎîǏǐÏïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪIi]",j:"[jȷĴĵɈɉʝɟʲ]",k:"[kƘƙꝀꝁḰḱǨǩḲḳḴḵκϰ₭]",l:"[lŁłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟLl]",n:"[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ƝɲȠƞᵰᶇɳȵɴNnŊŋ]",o:"[oØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌō
4700ÕõǪǫȌȍՕօ]",p:"[pṔṕṖṗⱣᵽƤƥᵱ]",q:"[qꝖꝗʠɊɋꝘꝙq̃]",r:"[rŔŕɌɍŘřŖŗṘṙȐȑȒȓṚṛⱤɽ]",s:"[sŚśṠṡṢṣꞨꞩŜŝŠšŞşȘșS̈s̈]",t:"[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]",u:"[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]",v:"[vṼṽṾṿƲʋꝞꝟⱱʋ]",w:"[wẂẃẀẁŴŵẄẅẆẇẈẉ]",x:"[xẌẍẊẋχ]",y:"[yÝýỲỳŶŷŸÿỸỹẎẏỴỵɎɏƳƴ]",z:"[zŹźẐẑŽžŻżẒẓẔẕƵƶ]"};var asciifold=function(){var i,n,k,chunk;var foreignletters="";var lookup={};for(k in DIACRITICS){if(DIACRITICS.hasOwnProperty(k)){chunk=DIACRITICS[k].substring(2,DIACRITICS[k].length-1);foreignletters+=chunk;for(i=0,n=chunk.length;i<n;i++){lookup[chunk.charAt(i)]=k}}}var regexp=new RegExp("["+foreignletters+"]","g");return function(str){return str.replace(regexp,function(foreignletter){return lookup[foreignletter]}).toLowerCase()}}();function uaDetect(platform,re){if(navigator.userAgentData){return platform===navigator.userAgentData.platform}return re.test(navigator.userAgent)}var IS_MAC=uaDetect("macOS",/Mac/);var KEY_A=65;var KEY_COMMA=188;var KEY_RETURN=13;var KEY_ESC=27;var KEY_LEFT=37;var KEY_UP=38;var KEY_P=80;var KEY_RIGHT=39;var KEY_DOWN=40;var KEY_N=78;var KEY_BACKSPACE=8;var KEY_DELETE=46;var KEY_SHIFT=16;var KEY_CMD=IS_MAC?91:17;var KEY_CTRL=IS_MAC?18:17;var KEY_TAB=9;var TAG_SELECT=1;var TAG_INPUT=2;var SUPPORTS_VALIDITY_API=!uaDetect("Android",/android/i)&&!!document.createElement("input").validity;var isset=function(object){return typeof object!=="undefined"};var hash_key=function(value){if(typeof value==="undefined"||value===null)return null;if(typeof value==="boolean")return value?"1":"0";return value+""};var escape_html=function(str){return(str+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")};var escape_replace=function(str){return(str+"").replace(/\$/g,"$$$$")};var hook={};hook.before=function(self,method,fn){var original=self[method];self[method]=function(){fn.apply(self,arguments);return original.apply(self,arguments)}};hook.after=function(self,method,fn){var original=self[method];self[method]=function(){var result=original.apply(self,arguments);fn.apply(self,arguments);return result}};var once=function(fn){var called=false;return function(){if(called)return;called=true;fn.apply(this,arguments)}};var debounce=function(fn,delay){var timeout;return function(){var self=this;var args=arguments;window.clearTimeout(timeout);timeout=window.setTimeout(function(){fn.apply(self,args)},delay)}};var debounce_events=function(self,types,fn){var type;var trigger=self.trigger;var event_args={};self.trigger=function(){var type=arguments[0];if(types.indexOf(type)!==-1){event_args[type]=arguments}else{return trigger.apply(self,arguments)}};fn.apply(self,[]);self.trigger=trigger;for(type in event_args){if(event_args.hasOwnProperty(type)){trigger.apply(self,event_args[type])}}};var watchChildEvent=function($parent,event,selector,fn){$parent.on(event,selector,function(e){var child=e.target;while(child&&child.parentNode!==$parent[0]){child=child.parentNode}e.currentTarget=child;return fn.apply(this,[e])})};var getInputSelection=function(input){var result={};if(input===undefined){console.warn("WARN getInputSelection cannot locate input control");return result}if("selectionStart"in input){result.start=input.selectionStart;result.length=input.selectionEnd-result.start}else if(document.selection){input.focus();var sel=document.selection.createRange();var selLen=document.selection.createRange().text.length;sel.moveStart("character",-input.value.length);result.start=sel.text.length-selLen;result.length=selLen}return result};var transferStyles=function($from,$to,properties){var i,n,styles={};if(properties){for(i=0,n=properties.length;i<n;i++){styles[properties[i]]=$from.css(properties[i])}}else{styles=$from.css()}$to.css(styles)};var measureString=function(str,$parent){if(!str){return 0}if(!Selectize.$testInput){Selectize.$testInput=$("<span />").css({position:"absolute",width:"auto",padding:0,whiteSpace:"pre"});$("<div />").css({position:"absolute",width:0,height:0,overflow:"hidden"}).append(Selectize.$testInput).appendTo("body")}Selectize.$testInput.text(str);transferStyles($parent,Selectize.$testInput,["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"]);return Selectize.$testInput.width()};var autoGrow=function($input){var currentWidth=null;var update=function(e,options){var value,keyCode,printable,width;var placeholder,placeholderWidth;var shift,character,selection;e=e||window.event||{};options=options||{};if(e.metaKey||e.altKey)return;if(!options.force&&$input.data("grow")===false)return;value=$input.val();if(e.type&&e.type.toLowerCase()==="keydown"){keyCode=e.keyCode;printable=keyCode>=48&&keyCode<=57||keyCode>=65&&keyCode<=90||keyCode>=96&&keyCode<=111||keyCode>=186&&keyCode<=222||keyCode===32;if(keyCode===KEY_DELETE||keyCode===KEY_BACKSPACE){selection=getInputSelection($input[0]);if(selection.length){value=value.substring(0,selection.start)+value.substring(selection.start+selection.length)}else if(keyCode===KEY_BACKSPACE&&selection.start){value=value.substring(0,selection.start-1)+value.substring(selection.start+1)}else if(keyCode===KEY_DELETE&&typeof selection.start!=="undefined"){value=value.substring(0,selection.start)+value.substring(selection.start+1)}}else if(printable){shift=e.shiftKey;character=String.fromCharCode(e.keyCode);if(shift)character=character.toUpperCase();else character=character.toLowerCase();value+=character}}placeholder=$input.attr("placeholder");if(placeholder){placeholderWidth=measureString(placeholder,$input)+4}else{placeholderWidth=0}width=Math.max(measureString(value,$input),placeholderWidth)+4;if(width!==currentWidth){currentWidth=width;$input.width(width);$input.triggerHandler("resize")}};
4700$input.on("keydown keyup update blur",update);update()};var domToString=function(d){var tmp=document.createElement("div");tmp.appendChild(d.cloneNode(true));return tmp.innerHTML};var logError=function(message,options){if(!options)options={};var component="Selectize";console.error(component+": "+message);if(options.explanation){if(console.group)console.group();console.error(options.explanation);if(console.group)console.groupEnd()}};var isJSON=function(data){try{JSON.parse(str)}catch(e){return false}return true};var Selectize=function($input,settings){var key,i,n,dir,input,self=this;input=$input[0];input.selectize=self;var computedStyle=window.getComputedStyle&&window.getComputedStyle(input,null);dir=computedStyle?computedStyle.getPropertyValue("direction"):input.currentStyle&&input.currentStyle.direction;dir=dir||$input.parents("[dir]:first").attr("dir")||"";$.extend(self,{order:0,settings:settings,$input:$input,tabIndex:$input.attr("tabindex")||"",tagType:input.tagName.toLowerCase()==="select"?TAG_SELECT:TAG_INPUT,rtl:/rtl/i.test(dir),eventNS:".selectize"+ ++Selectize.count,highlightedValue:null,isBlurring:false,isOpen:false,isDisabled:false,isRequired:$input.is("[required]"),isInvalid:false,isLocked:false,isFocused:false,isInputHidden:false,isSetup:false,isShiftDown:false,isCmdDown:false,isCtrlDown:false,ignoreFocus:false,ignoreBlur:false,ignoreHover:false,hasOptions:false,currentResults:null,lastValue:"",lastValidValue:"",lastOpenTarget:false,caretPos:0,loading:0,loadedSearches:{},isDropdownClosing:false,$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:settings.loadThrottle===null?self.onSearchChange:debounce(self.onSearchChange,settings.loadThrottle)});self.sifter=new Sifter(this.options,{diacritics:settings.diacritics});if(self.settings.options){for(i=0,n=self.settings.options.length;i<n;i++){self.registerOption(self.settings.options[i])}delete self.settings.options}if(self.settings.optgroups){for(i=0,n=self.settings.optgroups.length;i<n;i++){self.registerOptionGroup(self.settings.optgroups[i])}delete self.settings.optgroups}self.settings.mode=self.settings.mode||(self.settings.maxItems===1?"single":"multi");if(typeof self.settings.hideSelected!=="boolean"){self.settings.hideSelected=self.settings.mode==="multi"}self.initializePlugins(self.settings.plugins);self.setupCallbacks();self.setupTemplates();self.setup()};MicroEvent.mixin(Selectize);MicroPlugin.mixin(Selectize);$.extend(Selectize.prototype,{setup:function(){var self=this;var settings=self.settings;var eventNS=self.eventNS;var $window=$(window);var $document=$(document);var $input=self.$input;var $wrapper;var $control;var $control_input;var $dropdown;var $dropdown_content;var $dropdown_parent;var inputMode;var timeout_blur;var timeout_focus;var classes;var classes_plugins;var inputId;inputMode=self.settings.mode;classes=$input.attr("class")||"";$wrapper=$("<div>
4700").addClass(settings.wrapperClass).addClass(classes+" selectize-control").addClass(inputMode);$control=$("<div>").addClass(settings.inputClass+" selectize-input items").appendTo($wrapper);$control_input=$('<input type="select-one" autocomplete="new-password" autofill="no" />').appendTo($control).attr("tabindex",$input.is(":disabled")?"-1":self.tabIndex);$dropdown_parent=$(settings.dropdownParent||$wrapper);$dropdown=$("<div>").addClass(settings.dropdownClass).addClass(inputMode+" selectize-dropdown").hide().appendTo($dropdown_parent);$dropdown_content=$("<div>").addClass(settings.dropdownContentClass+" selectize-dropdown-content").attr("tabindex","-1").appendTo($dropdown);if(inputId=$input.attr("id")){$control_input.attr("id",inputId+"-selectized");$("label[for='"+inputId+"']").attr("for",inputId+"-selectized")}if(self.settings.copyClassesToDropdown){$dropdown.addClass(classes)}$wrapper.css({width:$input[0].style.width});if(self.plugins.names.length){classes_plugins="plugin-"+self.plugins.names.join(" plugin-");
4700$wrapper.addClass(classes_plugins);$dropdown.addClass(classes_plugins)}if((settings.maxItems===null||settings.maxItems>1)&&self.tagType===TAG_SELECT){$input.attr("multiple","multiple")}if(self.settings.placeholder){$control_input.attr("placeholder",settings.placeholder)}if(!self.settings.search){$control_input.attr("readonly",true);$control_input.attr("inputmode","none");$control.css("cursor","pointer")}if(!self.settings.splitOn&&self.settings.delimiter){var delimiterEscaped=self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");self.settings.splitOn=new RegExp("\\s*"+delimiterEscaped+"+\\s*")}if($input.attr("autocorrect")){$control_input.attr("autocorrect",$input.attr("autocorrect"))}if($input.attr("autocapitalize")){$control_input.attr("autocapitalize",$input.attr("autocapitalize"))}if($input.is("input")){$control_input[0].type=$input[0].type}self.$wrapper=$wrapper;self.$control=$control;self.$control_input=$control_input;self.$dropdown=$dropdown;self.$dropdown_content=$dropdown_content;$dropdown.on("mouseenter mousedown mouseup click","[data-disabled]>[data-selectable]",function(e){e.stopImmediatePropagation()});$dropdown.on("mouseenter","[data-selectable]",function(){return self.onOptionHover.apply(self,arguments)});$dropdown.on("mouseup click","[data-selectable]",function(){return self.onOptionSelect.apply(self,arguments)});watchChildEvent($control,"mouseup","*:not(input)",function(){return self.onItemSelect.apply(self,arguments)});autoGrow($control_input);$control.on({mousedown:function(){return self.onMouseDown.apply(self,arguments)},click:function(){return self.onClick.apply(self,arguments)}});$control_input.on({mousedown:function(e){if(self.$control_input.val()!==""||self.settings.openOnFocus){e.stopPropagation()}},keydown:function(){return self.onKeyDown.apply(self,arguments)},keypress:function(){return self.onKeyPress.apply(self,arguments)},input:function(){return self.onInput.apply(self,arguments)},resize:function(){self.positionDropdown.apply(self,[])},focus:function(){self.ignoreBlur=false;return self.onFocus.apply(self,arguments)},paste:function(){return self.onPaste.apply(self,arguments)}});$document.on("keydown"+eventNS,function(e){self.isCmdDown=e[IS_MAC?"metaKey":"ctrlKey"];self.isCtrlDown=e[IS_MAC?"altKey":"ctrlKey"];self.isShiftDown=e.shiftKey});$document.on("keyup"+eventNS,function(e){if(e.keyCode===KEY_CTRL)self.isCtrlDown=false;if(e.keyCode===KEY_SHIFT)self.isShiftDown=false;if(e.keyCode===KEY_CMD)self.isCmdDown=false});$document.on("mousedown"+eventNS,function(e){if(self.isFocused){if(e.target===self.$dropdown[0]||e.target.parentNode===self.$dropdown[0]){return false}if(!self.$dropdown.has(e.target).length&&e.target!==self.$control[0]){self.blur(e.target)}}});$window.on(["scroll"+eventNS,"resize"+eventNS].join(" "),function(){if(self.isOpen){self.positionDropdown.apply(self,arguments)}});$window.on("mousemove"+eventNS,function(){self.ignoreHover=self.settings.ignoreHover});var inputPlaceholder=$("<div></div>");var inputChildren=$input.children().detach();$input.replaceWith(inputPlaceholder);inputPlaceholder.replaceWith($input);this.revertSettings={$children:inputChildren,tabindex:$input.attr("tabindex")};$input.attr("tabindex",-1).hide().after(self.$wrapper);if(Array.isArray(settings.items)){self.lastValidValue=settings.items;self.setValue(settings.items);delete settings.items}if(SUPPORTS_VALIDITY_API){$input.on("invalid"+eventNS,function(e){e.preventDefault();self.isInvalid=true;self.refreshState()})}self.updateOriginalInput();self.refreshItems();self.refreshState();self.updatePlaceholder();self.isSetup=true;if($input.is(":disabled")){self.disable()}self.on("change",this.onChange);$input.data("selectize",self);$input.addClass("selectized");self.trigger("initialize");if(settings.preload===true){self.onSearchChange("")}},setupTemplates:function(){var self=this;var field_label=self.settings.labelField;var field_value=self.settings.valueField;var field_optgroup=self.settings.optgroupLabelField;var templates={optgroup:function(data){return'<div class="optgroup">'+data.html+"</div>"},optgroup_header:function(data,escape){return'<div class="optgroup-header">'+escape(data[field_optgroup])+"</div>"},option:function(data,escape){var classes=data.classes?" "+data.classes:"";classes+=data[field_value]===""?" selectize-dropdown-emptyoptionlabel":"";var styles=data.styles?' style="'+data.styles+'"':"";return"<div"+styles+' class="option'+classes+'">'+escape(data[field_label])+"</div>"},item:function(data,escape){return'<div class="item">'+escape(data[field_label])+"</div>"},option_create:function(data,escape){return'<div class="create">Add <strong>'+escape(data.input)+"</strong>&#x2026;</div>"}};self.settings.render=$.extend({},templates,self.settings.render)},setupCallbacks:function(){var key,fn,callbacks={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur",dropdown_item_activate:"onDropdownItemActivate",dropdown_item_deactivate:"onDropdownItemDeactivate"};for(key in callbacks){if(callbacks.hasOwnProperty(key)){fn=this.settings[callbacks[key]];if(fn)this.on(key,fn)}}},onClick:function(e){var self=this;if(self.isDropdownClosing){return}if(!self.isFocused||!self.isOpen){self.focus();e.preventDefault()}},onMouseDown:function(e){var self=this;var defaultPrevented=e.isDefaultPrevented();var $target=$(e.target);if(!self.isFocused){if(!defaultPrevented){window.setTimeout(function(){self.focus()},0)}}if(e.target!==self.$control_input[0]||self.$control_input.val()===""){if(self.settings.mode==="single"){self.isOpen?self.close():self.open()}else{if(!defaultPrevented){self.setActiveItem(null)}if(!self.settings.openOnFocus){if(self.isOpen&&e.target===self.lastOpenTarget){self.close();self.lastOpenTarget=false}else if(!self.isOpen){self.refreshOptions();self.open();self.lastOpenTarget=e.target}else{self.lastOpenTarget=e.target}}}return false}},onChange:function(){var self=this;if(self.getValue()!==""){self.lastValidValue=self.getValue()}this.$input.trigger("input");this.$input.trigger("change")},onPaste:function(e){var self=this;if(self.isFull()||self.isInputHidden||self.isLocked){e.preventDefault();return}if(self.settings.splitOn){setTimeout(function(){var pastedText=self.$control_input.val();if(!pastedText.match(self.settings.splitOn)){return}var splitInput=pastedText.trim().split(self.settings.splitOn);for(var i=0,n=splitInput.length;i<n;i++){self.createItem(splitInput[i])}},0)}},onKeyPress:function(e){if(this.isLocked)return e&&e.preventDefault();var character=String.fromCharCode(e.keyCode||e.which);if(this.settings.create&&this.settings.mode==="multi"&&character===this.settings.delimiter){this.createItem();e.preventDefault();return false}},onKeyDown:function(e){var isInput=e.target===this.$control_input[0];var self=this;if(self.isLocked){if(e.keyCode!==KEY_TAB){e.preventDefault()}return}switch(e.keyCode){case KEY_A:if(self.isCmdDown){self.selectAll();return}break;case KEY_ESC:if(self.isOpen){e.preventDefault();e.stopPropagation();self.close()}return;case KEY_N:if(!e.ctrlKey||e.altKey)break;case KEY_DOWN:if(!self.isOpen&&self.hasOptions){self.open()}else if(self.$activeOption){self.ignoreHover=true;var $next=self.getAdjacentOption(self.$activeOption,1);if($next.length)self.setActiveOption($next,true,true)}e.preventDefault();return;case KEY_P:if(!e.ctrlKey||e.altKey)break;case KEY_UP:if(self.$activeOption){self.ignoreHover=true;var $prev=self.getAdjacentOption(self.$activeOption,-1);if($prev.length)self.setActiveOption($prev,true,true)}e.preventDefault();return;case KEY_RETURN:if(self.isOpen&&self.$activeOption){self.onOptionSelect({currentTarget:self.$activeOption});e.preventDefault()}return;case KEY_LEFT:self.advanceSelection(-1,e);return;case KEY_RIGHT:self.advanceSelection(1,e);return;case KEY_TAB:if(self.settings.selectOnTab&&self.isOpen&&self.$activeOption){self.onOptionSelect({currentTarget:self.$activeOption});if(!self.isFull()){e.preventDefault()}}if(self.settings.create&&self.createItem()&&self.settings.showAddOptionOnCreate){e.preventDefault()}return;case KEY_BACKSPACE:case KEY_DELETE:self.deleteSelection(e);return}if((self.isFull()||self.isInputHidden)&&!(IS_MAC?e.metaKey:e.ctrlKey)){e.preventDefault();return}},onInput:function(e){var self=this;var value=self.$control_input.val()||"";if(self.lastValue!==value){self.lastValue=value;self.onSearchChange(value);self.refreshOptions();self.trigger("type",value)}},onSearchChange:function(value){var self=this;var fn=self.settings.load;if(!fn)return;if(self.loadedSearches.hasOwnProperty(value))return;self.loadedSearches[value]=true;self.load(function(callback){fn.apply(self,[value,callback])})},onFocus:function(e){var self=this;var wasFocused=self.isFocused;if(self.isDisabled){self.blur();e&&e.preventDefault();return false}if(self.ignoreFocus)return;self.isFocused=true;if(self.settings.preload==="focus")self.onSearchChange("");
4700if(!wasFocused)self.trigger("focus");if(!self.$activeItems.length){self.showInput();self.setActiveItem(null);self.refreshOptions(!!self.settings.openOnFocus)}self.refreshState()},onBlur:function(e,dest){var self=this;if(!self.isFocused)return;self.isFocused=false;if(self.ignoreFocus){return}var deactivate=function(){self.close();self.setTextboxValue("");self.setActiveItem(null);self.setActiveOption(null);self.setCaret(self.items.length);self.refreshState();dest&&dest.focus&&dest.focus();self.isBlurring=false;self.ignoreFocus=false;self.trigger("blur")};self.isBlurring=true;self.ignoreFocus=true;if(self.settings.create&&self.settings.createOnBlur){self.createItem(null,false,deactivate)}else{deactivate()}},onOptionHover:function(e){if(this.ignoreHover)return;this.setActiveOption(e.currentTarget,false)},onOptionSelect:function(e){var value,$target,$option,self=this;if(e.preventDefault){e.preventDefault();e.stopPropagation()}$target=$(e.currentTarget);if($target.hasClass("create")){self.createItem(null,function(){if(self.settings.closeAfterSelect){self.close()}})}else{value=$target.attr("data-value");if(typeof value!=="undefined"){self.lastQuery=null;self.setTextboxValue("");self.addItem(value);if(self.settings.closeAfterSelect){self.close()}else if(!self.settings.hideSelected&&e.type&&/mouse/.test(e.type)){self.setActiveOption(self.getOption(value))}}}},onItemSelect:function(e){var self=this;if(self.isLocked)return;if(self.settings.mode==="multi"){e.preventDefault();self.setActiveItem(e.currentTarget,e)}},load:function(fn){var self=this;var $wrapper=self.$wrapper.addClass(self.settings.loadingClass);self.loading++;fn.apply(self,[function(results){self.loading=Math.max(self.loading-1,0);if(results&&results.length){self.addOption(results);self.refreshOptions(self.isFocused&&!self.isInputHidden)}if(!self.loading){$wrapper.removeClass(self.settings.loadingClass)}self.trigger("load",results)}])},getTextboxValue:function(){var $input=this.$control_input;return $input.val()},setTextboxValue:function(value){var $input=this.$control_input;var changed=$input.val()!==value;if(changed){$input.val(value).triggerHandler("update");this.lastValue=value}},getValue:function(){if(this.tagType===TAG_SELECT&&this.$input.attr("multiple")){return this.items}else{return this.items.join(this.settings.delimiter)}},setValue:function(value,silent){const items=Array.isArray(value)?value:[value];if(items.join("")===this.items.join("")){return}var events=silent?[]:["change"];debounce_events(this,events,function(){this.clear(silent);this.addItems(value,silent)})},setMaxItems:function(value){if(value===0)value=null;this.settings.maxItems=value;this.settings.mode=this.settings.mode||(this.settings.maxItems===1?"single":"multi");this.refreshState()},setActiveItem:function($item,e){var self=this;var eventName;var i,idx,begin,end,item,swap;var $last;if(self.settings.mode==="single")return;$item=$($item);if(!$item.length){$(self.$activeItems).removeClass("active");self.$activeItems=[];if(self.isFocused){self.showInput()}return}eventName=e&&e.type.toLowerCase();if(eventName==="mousedown"&&self.isShiftDown&&self.$activeItems.length){$last=self.$control.children(".active:last");begin=Array.prototype.indexOf.apply(self.$control[0].childNodes,[$last[0]]);end=Array.prototype.indexOf.apply(self.$control[0].childNodes,[$item[0]]);if(begin>end){swap=begin;begin=end;end=swap}for(i=begin;i<=end;i++){item=self.$control[0].childNodes[i];if(self.$activeItems.indexOf(item)===-1){$(item).addClass("active");self.$activeItems.push(item)}}e.preventDefault()}else if(eventName==="mousedown"&&self.isCtrlDown||eventName==="keydown"&&this.isShiftDown){if($item.hasClass("active")){idx=self.$activeItems.indexOf($item[0]);self.$activeItems.splice(idx,1);$item.removeClass("active")}else{self.$activeItems.push($item.addClass("active")[0])}}else{$(self.$activeItems).removeClass("active");self.$activeItems=[$item.addClass("active")[0]]}self.hideInput();if(!this.isFocused){self.focus()}},setActiveOption:function($option,scroll,animate){var height_menu,height_item,y;var scroll_top,scroll_bottom;var self=this;if(self.$activeOption){self.$activeOption.removeClass("active");self.trigger("dropdown_item_deactivate",self.$activeOption.attr("data-value"))}self.$activeOption=null;$option=$($option);if(!$option.length)return;self.$activeOption=$option.addClass("active");if(self.isOpen)self.trigger("dropdown_item_activate",self.$activeOption.attr("data-value"));if(scroll||!isset(scroll)){height_menu=self.$dropdown_content.height();height_item=self.$activeOption.outerHeight(true);scroll=self.$dropdown_content.scrollTop()||0;y=self.$activeOption.offset().top-self.$dropdown_content.offset().top+scroll;scroll_top=y;scroll_bottom=y-height_menu+height_item;if(y+height_item>height_menu+scroll){self.$dropdown_content.stop().animate({scrollTop:scroll_bottom},animate?self.settings.scrollDuration:0)}else if(y<scroll){self.$dropdown_content.stop().animate({scrollTop:scroll_top},animate?self.settings.scrollDuration:0)}}},selectAll:function(){var self=this;if(self.settings.mode==="single")return;self.$activeItems=Array.prototype.slice.apply(self.$control.children(":not(input)").addClass("active"));if(self.$activeItems.length){self.hideInput();self.close()}self.focus()},hideInput:function(){var self=this;self.setTextboxValue("");self.$control_input.css({opacity:0,position:"absolute",left:self.rtl?1e4:0});self.isInputHidden=true},showInput:function(){this.$control_input.css({opacity:1,position:"relative",left:0});this.isInputHidden=false},focus:function(){var self=this;if(self.isDisabled)return self;self.ignoreFocus=true;self.$control_input[0].focus();window.setTimeout(function(){self.ignoreFocus=false;self.onFocus()},0);return self},blur:function(dest){this.$control_input[0].blur();this.onBlur(null,dest);return this},getScoreFunction:function(query){return this.sifter.getScoreFunction(query,this.get
4700SearchOptions())},getSearchOptions:function(){var settings=this.settings;var sort=settings.sortField;if(typeof sort==="string"){sort=[{field:sort}]}return{fields:settings.searchField,conjunction:settings.searchConjunction,sort:sort,nesting:settings.nesting,filter:settings.filter,respect_word_boundaries:settings.respect_word_boundaries}},search:function(query){var i,value,score,result,calculateScore;var self=this;var settings=self.settings;var options=this.getSearchOptions();if(settings.score){calculateScore=self.settings.score.apply(this,[query]);if(typeof calculateScore!=="function"){throw new Error('Selectize "score" setting must be a function that returns a function')}}if(query!==self.lastQuery){if(settings.normalize)query=query.normalize("NFD").replace(/[\u0300-\u036f]/g,"");self.lastQuery=query;result=self.sifter.search(query,$.extend(options,{score:calculateScore}));self.currentResults=result}else{result=$.extend(true,{},self.currentResults)}if(settings.hideSelected){for(i=result.items.length-1;i>=0;i--){if(self.items.indexOf(hash_key(result.items[i].id))!==-1){result.items.splice(i,1)}}}return result},refreshOptions:function(triggerDropdown){var i,j,k,n,groups,groups_order,option,option_html,optgroup,optgroups,html,html_children,has_create_option;var $active,$active_before,$create;if(typeof triggerDropdown==="undefined"){triggerDropdown=true}var self=this;var query=self.$control_input.val().trim();var results=self.search(query);var $dropdown_content=self.$dropdown_content;var active_before=self.$activeOption&&hash_key(self.$activeOption.attr("data-value"));n=results.items.length;if(typeof self.settings.maxOptions==="number"){n=Math.min(n,self.settings.maxOptions)}groups={};groups_order=[];for(i=0;i<n;i++){option=self.options[results.items[i].id];option_html=self.render("option",option);optgroup=option[self.settings.optgroupField]||"";optgroups=Array.isArray(optgroup)?optgroup:[optgroup];for(j=0,k=optgroups&&optgroups.length;j<k;j++){optgroup=optgroups[j];if(!self.optgroups.hasOwnProperty(optgroup)&&typeof self.settings.optionGroupRegister==="function"){var regGroup;if(regGroup=self.settings.optionGroupRegister.apply(self,[optgroup])){self.registerOptionGroup(regGroup)}}if(!self.optgroups.hasOwnProperty(optgroup)){optgroup=""}if(!groups.hasOwnProperty(optgroup)){groups[optgroup]=document.createDocumentFragment();groups_order.push(optgroup)}groups[optgroup].appendChild(option_html)}}if(this.settings.lockOptgroupOrder){groups_order.sort(function(a,b){var a_order=self.optgroups[a]&&self.optgroups[a].$order||0;var b_order=self.optgroups[b]&&self.optgroups[b].$order||0;return a_order-b_order})}html=document.createDocumentFragment();for(i=0,n=groups_order.length;i<n;i++){optgroup=groups_order[i];if(self.optgroups.hasOwnProperty(optgroup)&&groups[optgroup].childNodes.length){html_children=document.createDocumentFragment();html_children.appendChild(self.render("optgroup_header",self.optgroups[optgroup]));html_children.appendChild(groups[optgroup]);html.appendChild(self.render("optgroup",$.extend({},self.optgroups[optgroup],{html:domToString(html_children),dom:html_children})))}else{html.appendChild(groups[optgroup])}}$dropdown_content.html(html);if(self.settings.highlight){$dropdown_content.removeHighlight();if(results.query.length&&results.tokens.length){for(i=0,n=results.tokens.length;i<n;i++){highlight($dropdown_content,results.tokens[i].regex)}}}if(!self.settings.hideSelected){self.$dropdown.find(".selected").removeClass("selected");for(i=0,n=self.items.length;i<n;i++){self.getOption(self.items[i]).addClass("selected")}}if(self.settings.dropdownSize.sizeType!=="auto"&&self.isOpen){self.setupDropdownHeight()}has_create_option=self.canCreate(query);if(has_create_option){if(self.settings.showAddOptionOnCreate){$dropdown_content.prepend(self.render("option_create",{input:query}));$create=$($dropdown_content[0].childNodes[0])}}self.hasOptions=results.items.length>0||has_create_option&&self.settings.showAddOptionOnCreate||self.settings.setFirstOptionActive;if(self.hasOptions){if(results.items.length>0){$active_before=active_before&&self.getOption(active_before);if(results.query!==""&&self.settings.setFirstOptionActive){$active=$dropdown_content.find("[data-selectable]:first")}else if(results.query!==""&&$active_before&&$active_before.length){$active=$active_before}else if(self.settings.mode==="single"&&self.items.length){$active=self.getOption(self.items[0])}if(!$active||!$active.length){if($create&&!self.settings.addPrecedence){$active=self.getAdjacentOption($create,1)}else{$active=$dropdown_content.find("[data-selectable]:first")}}}else{$active=$create}self.setActiveOption($active);if(triggerDropdown&&!self.isOpen){self.open()}}else{self.setActiveOption(null);if(triggerDropdown&&self.isOpen){self.close()}}},addOption:function(data){var i,n,value,self=this;if(Array.isArray(data)){for(i=0,n=data.length;i<n;i++){self.addOption(data[i])}return}if(value=self.registerOption(data)){self.userOptions[value]=true;self.lastQuery=null;self.trigger("option_add",value,data)}},registerOption:function(data){var key=hash_key(data[this.settings.valueField]);if(typeof key==="undefined"||key===null||this.options.hasOwnProperty(key))return false;data.$order=data.$order||++this.order;this.options[key]=data;return key},registerOptionGroup:function(data){var key=hash_key(data[this.settings.optgroupValueField]);if(!key)return false;data.$order=data.$order||++this.order;this.optgroups[key]=data;return key},addOptionGroup:function(id,data){data[this.settings.optgroupValueField]=id;if(id=this.registerOptionGroup(data)){this.trigger("optgroup_add",id,data)}},removeOptionGroup:function(id){if(this.optgroups.hasOwnProperty(id)){delete this.optgroups[id];this.renderCache={};this.trigger("optgroup_remove",id)}},clearOptionGroups:function(){this.optgroups={};this.renderCache={};this.trigger("optgroup_clear")},updateOption:function(value,data){var self=this;var $item,$item_new;var value_new,index_item,cache_items,cache_options,order_old;value=hash_key(value);value_new=hash_key(data[self.settings.valueField]);if(value===null)return;if(!self.options.hasOwnProperty(value))return;if(typeof value_new!=="string")throw new Error("Value must be set in option data");order_old=self.options[value].$order;if(value_new!==value){delete self.options[value];index_item=self.items.indexOf(value);if(index_item!==-1){self.items.splice(index_item,1,value_new)}}data.$order=data.$order||order_old;self.options[value_new]=data;cache_items=self.renderCache["item"];cache_options=self.renderCache["option"];if(cache_items){delete cache_items[value];delete cache_items[value_new]}if(cache_options){delete cache_options[value];delete cache_options[value_new]}if(self.items.indexOf(value_new)!==-1){$item=self.getItem(value);$item_new=$(self.render("item",data));if($item.hasClass("active"))$item_new.addClass("active");$item.replaceWith($item_new)}self.lastQuery=null;if(self.isOpen){self.refreshOptions(false)}},removeOption:function(value,silent){var self=this;value=hash_key(value);var cache_items=self.renderCache["item"];var cache_options=self.renderCache["option"];if(cache_items)delete cache_items[value];if(cache_options)delete cache_options[value];delete self.userOptions[value];delete self.options[value];self.lastQuery=null;self.trigger("option_remove",value);self.removeItem(value,silent)},clearOptions:function(silent){var self=this;self.loadedSearches={};self.userOptions={};self.renderCache={};var options=self.options;$.each(self.options,function(key,value){if(self.items.indexOf(key)==-1){delete options[key]}});self.options=self.sifter.items=options;self.lastQuery=null;self.trigger("option_clear");self.clear(silent)},getOption:function(value){return this.getElementWithValue(value,this.$dropdown_content.find("[data-selectable]"))},getFirstOption:function(){var $options=this.$dropdown.find("[data-selectable]");return $options.length>0?$options.eq(0):$()},getAdjacentOption:function($option,direction){var $options=this.$dropdown.find("[data-selectable]");var index=$options.index($option)+direction;return index>=0&&index<$options.length?$options.eq(index):$()},getElementWithValue:function(value,$els){value=hash_key(value);if(typeof value!=="undefined"&&value!==null){for(var i=0,n=$els.length;i<n;i++){if($els[i].getAttribute("data-value")===value){return $($els[i])}}}return $()},getElementWithTextContent:function(textContent,ignoreCase,$els){textContent=hash_key(textContent);if(typeof textContent!=="undefined"&&textContent!==null){for(var i=0,n=$els.length;i<n;i++){var eleTextContent=$els[i].textContent;if(ignoreCase==true){eleTextContent=eleTextContent!==null?eleTextContent.toLowerCase():null;textContent=textContent.toLowerCase()}if(eleTextContent===textContent){return $($els[i])}}}return $()},getItem:function(value){return this.getElementWithValue(value,this.$control.children())},getFirstItemMatchedByTextContent:function(textContent,ignoreCase){ignoreCase=ignoreCase!==null&&ignoreCase===true?true:false;return this.getElementWithTextContent(textContent,ignoreCase,this.$dropdown_content.find("[data-selectable]"))},addItems:function(values,silent){this.buffer=document.createDocumentFragment();var childNodes=this.$control[0].childNodes;for(var i=0;i<childNodes.length;i++){this.buffer.appendChild(childNodes[i])}var items=Array.isArray(values)?values:[values];for(var i=0,n=items.length;i<n;i++){this.isPending=i<n-1;this.addItem(items[i],silent)}var control=this.$control[0];control.insertBefore(this.buffer,control.firstChild);this.buffer=null},addItem:function(value,silent){var events=silent?[]:["change"];debounce_events(this,events,function(){var $item,$option,$options;var self=this;var inputMode=self.settings.mode;var i,active,value_next,wasFull;value=hash_key(value);if(self.items.indexOf(value)!==-1){if(inputMode==="single")self.close();return}if(!self.options.hasOwnProperty(value))return;if(inputMode==="single")self.clear(silent);if(inputMode==="multi"&&self.isFull())return;$item=$(self.render("item",self.options[value]));wasFull=self.isFull();self.items.splice(self.caretPos,0,value);self.insertAtCaret($item);if(!self.isPending||!wasFull&&self.isFull()){self.refreshState()}if(self.isSetup){$options=self.$dropdown_content.find("[data-selectable]");if(!self.isPending){$option=self.getOption(value);value_next=self.getAdjacentOption($option,1).attr("data-value");self.refreshOptions(self.isFocused&&inputMode!=="single");if(value_next){self.setActiveOption(self.getOption(value_next))}}if(!$options.length||self.isFull()){self.close()}else if(!self.isPending){self.positionDropdown()}self.updatePlaceholder();self.trigger("item_add",value,$item);if(!self.isPending){self.updateOriginalInput({silent:silent})}}})},removeItem:function(value,silent){var self=this;var $item,i,idx;$item=value instanceof $?value:self.getItem(value);value=hash_key($item.attr("data-value"));i=self.items.indexOf(value);if(i!==-1){self.trigger("item_before_remove",value,$item);
4700$item.remove();if($item.hasClass("active")){$item.removeClass("active");idx=self.$activeItems.indexOf($item[0]);self.$activeItems.splice(idx,1);$item.removeClass("active")}self.items.splice(i,1);self.lastQuery=null;if(!self.settings.persist&&self.userOptions.hasOwnProperty(value)){self.removeOption(value,silent)}if(i<self.caretPos){self.setCaret(self.caretPos-1)}self.refreshState();self.updatePlaceholder();self.updateOriginalInput({silent:silent});self.positionDropdown();self.trigger("item_remove",value,$item)}},createItem:function(input,triggerDropdown){var self=this;var caret=self.caretPos;input=input||(self.$control_input.val()||"").trim();var callback=arguments[arguments.length-1];if(typeof callback!=="function")callback=function(){};if(typeof triggerDropdown!=="boolean"){triggerDropdown=true}if(!self.canCreate(input)){callback();return false}self.lock();var setup=typeof self.settings.create==="function"?this.settings.create:function(input){var data={};data[self.settings.labelField]=input;var key=input;if(self.settings.formatValueToKey&&typeof self.settings.formatValueToKey==="function"){key=self.settings.formatValueToKey.apply(this,[key]);if(key===null||typeof key==="undefined"||typeof key==="object"||typeof key==="function"){throw new Error('Selectize "formatValueToKey" setting must be a function that returns a value other than object or function.')}}data[self.settings.valueField]=key;return data};var create=once(function(data){self.unlock();if(!data||typeof data!=="object")return callback();var value=hash_key(data[self.settings.valueField]);if(typeof value!=="string")return callback();self.setTextboxValue("");self.addOption(data);self.setCaret(caret);self.addItem(value);self.refreshOptions(triggerDropdown&&self.settings.mode!=="single");callback(data)});var output=setup.apply(this,[input,create]);if(typeof output!=="undefined"){create(output)}return true},refreshItems:function(silent){this.lastQuery=null;if(this.isSetup){this.addItem(this.items,silent)}this.refreshState();this.updateOriginalInput({silent:silent})},refreshState:function(){this.refreshValidityState();this.refreshClasses()},refreshValidityState:function(){if(!this.isRequired)return false;var invalid=!this.items.length;this.isInvalid=invalid;this.$control_input.prop("required",invalid);this.$input.prop("required",!invalid)},refreshClasses:function(){var self=this;var isFull=self.isFull();var isLocked=self.isLocked;self.$wrapper.toggleClass("rtl",self.rtl);self.$control.toggleClass("focus",self.isFocused).toggleClass("disabled",self.isDisabled).toggleClass("required",self.isRequired).toggleClass("invalid",self.isInvalid).toggleClass("locked",isLocked).toggleClass("full",isFull).toggleClass("not-full",!isFull).toggleClass("input-active",self.isFocused&&!self.isInputHidden).toggleClass("dropdown-active",self.isOpen).toggleClass("has-options",!$.isEmptyObject(self.options)).toggleClass("has-items",self.items.length>0);self.$control_input.data("grow",!isFull&&!isLocked)},isFull:function(){return this.settings.maxItems!==null&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(opts){var i,n,existing,fresh,old,$options,label,value,values,self=this;opts=opts||{};if(self.tagType===TAG_SELECT){$options=self.$input.find("option");existing=[];fresh=[];old=[];values=[];$options.get().forEach(function(option){existing.push(option.value)});self.items.forEach(function(item){label=self.options[item][self.settings.labelField]||"";values.push(item);if(existing.indexOf(item)!=-1){return}fresh.push('<option value="'+escape_html(item)+'" selected="selected">'+escape_html(label)+"</option>")});old=existing.filter(function(value){return values.indexOf(value)<0}).map(function(value){return'option[value="'+value+'"]'});if(existing.length-old.length+fresh.length===0&&!self.$input.attr("multiple")){fresh.push('<option value="" selected="selected"></option>')}self.$input.find(old.join(", ")).remove();self.$input.append(fresh.join(""))}else{self.$input.val(self.getValue());self.$input.attr("value",self.$input.val())}if(self.isSetup){if(!opts.silent){self.trigger("change",self.$input.val())}}},updatePlaceholder:function(){if(!this.settings.placeholder)return;var $input=this.$control_input;if(this.items.length){$input.removeAttr("placeholder")}else{$input.attr("placeholder",this.settings.placeholder)}$input.triggerHandler("update",{force:true})},open:function(){var self=this;if(self.isLocked||self.isOpen||self.settings.mode==="multi"&&self.isFull())return;self.focus();self.isOpen=true;self.refreshState();self.$dropdown.css({visibility:"hidden",display:"block"});self.setupDropdownHeight();self.positionDropdown();self.$dropdown.css({visibility:"visible"});self.trigger("dropdown_open",self.$dropdown)},close:function(){var self=this;var trigger=self.isOpen;if(self.settings.mode==="single"&&self.items.length){self.hideInput();if(self.isBlurring){self.$control_input[0].blur()}}self.isOpen=false;self.$dropdown.hide();self.setActiveOption(null);self.refreshState();if(trigger)self.trigger("dropdown_close",self.$dropdown)},positionDropdown:function(){var $control=this.$control;var offset=this.settings.dropdownParent==="body"?$control.offset():$control.position();offset.top+=$control.outerHeight(true);var w=$control[0].getBoundingClientRect().width;if(this.settings.minWidth&&this.settings.minWidth>w){w=this.settings.minWidth}
4700this.$dropdown.css({width:w,top:offset.top,left:offset.left})},setupDropdownHeight:function(){if(typeof this.settings.dropdownSize==="object"&&this.settings.dropdownSize.sizeType!=="auto"){var height=this.settings.dropdownSize.sizeValue;if(this.settings.dropdownSize.sizeType==="numberItems"){var $items=this.$dropdown_content.find("*").not(".optgroup, .highlight").not(this.settings.ignoreOnDropwdownHeight);var totalHeight=0;var marginTop=0;var marginBottom=0;var separatorHeight=0;for(var i=0;i<height;i++){var $item=$($items[i]);if($item.length===0){break}totalHeight+=$item.outerHeight(true);if(typeof $item.data("selectable")=="undefined"){if($item.hasClass("optgroup-header")){var styles=window.getComputedStyle($item.parent()[0],":before");if(styles){marginTop=styles.marginTop?Number(styles.marginTop.replace(/\W*(\w)\w*/g,"$1")):0;marginBottom=styles.marginBottom?Number(styles.marginBottom.replace(/\W*(\w)\w*/g,"$1")):0;separatorHeight=styles.borderTopWidth?Number(styles.borderTopWidth.replace(/\W*(\w)\w*/g,"$1")):0}}height++}}var paddingTop=this.$dropdown_content.css("padding-top")?Number(this.$dropdown_content.css("padding-top").replace(/\W*(\w)\w*/g,"$1")):0;var paddingBottom=this.$dropdown_content.css("padding-bottom")?Number(this.$dropdown_content.css("padding-bottom").replace(/\W*(\w)\w*/g,"$1")):0;height=totalHeight+paddingTop+paddingBottom+marginTop+marginBottom+separatorHeight+"px"}else if(this.settings.dropdownSize.sizeType!=="fixedHeight"){console.warn('Selectize.js - Value of "sizeType" must be "fixedHeight" or "numberItems');return}this.$dropdown_content.css({height:height,maxHeight:"none"})}},clear:function(silent){var self=this;if(!self.items.length)return;self.$control.children(":not(input)").remove();self.items=[];self.lastQuery=null;self.setCaret(0);self.setActiveItem(null);self.updatePlaceholder();self.updateOriginalInput({silent:silent});self.refreshState();self.showInput();self.trigger("clear")},insertAtCaret:function($el){var caret=Math.min(this.caretPos,this.items.length);var el=$el[0];var target=this.buffer||this.$control[0];if(caret===0){target.insertBefore(el,target.firstChild)}else{target.insertBefore(el,target.childNodes[caret])}this.setCaret(caret+1)},deleteSelection:function(e){var i,n,direction,selection,values,caret,option_select,$option_select,$tail;var self=this;direction=e&&e.keyCode===KEY_BACKSPACE?-1:1;selection=getInputSelection(self.$control_input[0]);if(self.$activeOption&&!self.settings.hideSelected){if(typeof self.settings.deselectBehavior==="string"&&self.settings.deselectBehavior==="top"){option_select=self.getFirstOption().attr("data-value")}else{option_select=self.getAdjacentOption(self.$activeOption,-1).attr("data-value")}}values=[];if(self.$activeItems.length){$tail=self.$control.children(".active:"+(direction>0?"last":"first"));caret=self.$control.children(":not(input)").index($tail);if(direction>0){caret++}for(i=0,n=self.$activeItems.length;i<n;i++){values.push($(self.$activeItems[i]).attr("data-value"))}if(e){e.preventDefault();e.stopPropagation()}}else if((self.isFocused||self.settings.mode==="single")&&self.items.length){if(direction<0&&selection.start===0&&selection.length===0){values.push(self.items[self.caretPos-1])}else if(direction>0&&selection.start===self.$control_input.val().length){values.push(self.items[self.caretPos])}}if(!values.length||typeof self.settings.onDelete==="function"&&self.settings.onDelete.apply(self,[values])===false){return false}if(typeof caret!=="undefined"){self.setCaret(caret)}while(values.length){self.removeItem(values.pop())}self.showInput();self.positionDropdown();self.refreshOptions(true);if(option_select){$option_select=self.getOption(option_select);if($option_select.length){self.setActiveOption($option_select)}}return true},advanceSelection:function(direction,e){var tail,selection,idx,valueLength,cursorAtEdge,$tail;var self=this;if(direction===0)return;if(self.rtl)direction*=-1;tail=direction>0?"last":"first";selection=getInputSelection(self.$control_input[0]);if(self.isFocused&&!self.isInputHidden){valueLength=self.$control_input.val().length;cursorAtEdge=direction<0?selection.start===0&&selection.length===0:selection.start===valueLength;if(cursorAtEdge&&!valueLength){self.advanceCaret(direction,e)}}else{$tail=self.$control.children(".active:"+tail);if($tail.length){idx=self.$control.children(":not(input)").index($tail);self.setActiveItem(null);self.setCaret(direction>0?idx+1:idx)}}},advanceCaret:function(direction,e){var self=this,fn,$adj;if(direction===0)return;fn=direction>0?"next":"prev";if(self.isShiftDown){$adj=self.$control_input[fn]();if($adj.length){self.hideInput();self.setActiveItem($adj);e&&e.preventDefault()}}else{self.setCaret(self.caretPos+direction)}},setCaret:function(i){var self=this;if(self.settings.mode==="single"){i=self.items.length}else{i=Math.max(0,Math.min(self.items.length,i))}if(!self.isPending){var j,n,fn,$children,$child;$children=self.$control.children(":not(input)");for(j=0,n=$children.length;j<n;
4700j++){$child=$($children[j]).detach();if(j<i){self.$control_input.before($child)}else{self.$control.append($child)}}}self.caretPos=i},lock:function(){this.close();this.isLocked=true;this.refreshState()},unlock:function(){this.isLocked=false;this.refreshState()},disable:function(){var self=this;self.$input.prop("disabled",true);self.$control_input.prop("disabled",true).prop("tabindex",-1);self.isDisabled=true;self.lock()},enable:function(){var self=this;self.$input.prop("disabled",false);self.$control_input.prop("disabled",false).prop("tabindex",self.tabIndex);self.isDisabled=false;self.unlock()},destroy:function(){var self=this;var eventNS=self.eventNS;var revertSettings=self.revertSettings;self.trigger("destroy");self.off();self.$wrapper.remove();self.$dropdown.remove();self.$input.html("").append(revertSettings.$children).removeAttr("tabindex").removeClass("selectized").attr({tabindex:revertSettings.tabindex}).show();self.$control_input.removeData("grow");self.$input.removeData("selectize");if(--Selectize.count==0&&Selectize.$testInput){Selectize.$testInput.remove();Selectize.$testInput=undefined}$(window).off(eventNS);$(document).off(eventNS);$(document.body).off(eventNS);delete self.$input[0].selectize},render:function(templateName,data){var value,id,label;var html="";var cache=false;var self=this;var regex_tag=/^[\t \r\n]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i;if(templateName==="option"||templateName==="item"){value=hash_key(data[self.settings.valueField]);cache=!!value}if(cache){if(!isset(self.renderCache[templateName])){self.renderCache[templateName]={}}if(self.renderCache[templateName].hasOwnProperty(value)){return self.renderCache[templateName][value]}}html=$(self.settings.render[templateName].apply(this,[data,escape_html]));if(templateName==="option"||templateName==="option_create"){if(!data[self.settings.disabledField]){html.attr("data-selectable","")}}else if(templateName==="optgroup"){id=data[self.settings.optgroupValueField]||"";html.attr("data-group",id);if(data[self.settings.disabledField]){html.attr("data-disabled","")}}if(templateName==="option"||templateName==="item"){html.attr("data-value",value||"")}if(cache){self.renderCache[templateName][value]=html[0]}return html[0]},clearCache:function(templateName){var self=this;if(typeof templateName==="undefined"){self.renderCache={}}else{delete self.renderCache[templateName]}},canCreate:function(input){var self=this;if(!self.settings.create)return false;var filter=self.settings.createFilter;return input.length&&(typeof filter!=="function"||filter.apply(self,[input]))&&(typeof filter!=="string"||new RegExp(filter).test(input))&&(!(filter instanceof RegExp)||filter.test(input))}});Selectize.count=0;Selectize.defaults={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:true,diacritics:true,create:false,showAddOptionOnCreate:true,createOnBlur:false,createFilter:null,highlight:true,openOnFocus:true,maxOptions:1e3,maxItems:null,hideSelected:null,addPrecedence:false,selectOnTab:true,preload:false,allowEmptyOption:false,showEmptyOptionInDropdown:false,emptyOptionLabel:"--",setFirstOptionActive:false,closeAfterSelect:false,closeDropdownThreshold:250,scrollDuration:60,deselectBehavior:"previous",loadThrottle:300,loadingClass:"loading",dataAttr:"data-data",optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:false,sortField:"$order",searchField:["text"],searchConjunction:"and",respect_word_boundaries:true,mode:null,wrapperClass:"",inputClass:"",dropdownClass:"",dropdownContentClass:"",dropdownParent:null,copyClassesToDropdown:true,dropdownSize:{sizeType:"auto",sizeValue:"auto"},normalize:false,ignoreOnDropwdownHeight:"img, i",search:true,render:{}};$.fn.em_selectize=function(settings_user){var defaults=$.fn.em_selectize.defaults;var settings=$.extend({},defaults,settings_user);var attr_data=settings.dataAttr;var field_label=settings.labelField;var field_value=settings.valueField;var field_disabled=settings.disabledField;var field_optgroup=settings.optgroupField;var field_optgroup_label=settings.optgroupLabelField;var field_optgroup_value=settings.optgroupValueField;var init_textbox=function($input,settings_element){var i,n,values,option;var data_raw=$input.attr(attr_data);if(!data_raw){var value=($input.val()||"").trim();if(!settings.allowEmptyOption&&!value.length)return;values=value.split(settings.delimiter);for(i=0,n=values.length;i<n;i++){option={};option[field_label]=values[i];option[field_value]=values[i];settings_element.options.push(option)}settings_element.items=values}else{settings_element.options=JSON.parse(data_raw);for(i=0,n=settings_element.options.length;i<n;i++){settings_element.items.push(settings_element.options[i][field_value])}}};var init_select=function($input,settings_element){var i,n,tagName,$children,order=0;var options=settings_element.options;var optionsMap={};var readData=function($el){var data=attr_data&&$el.attr(attr_data);var allData=$el.data();var obj={};if(typeof data==="string"&&data.length){if(isJSON(data)){Object.assign(obj,JSON.parse(data))}else{obj[data]=data}
4700}Object.assign(obj,allData);return obj||null};var addOption=function($option,group){$option=$($option);var value=hash_key($option.val());if(!value&&!settings.allowEmptyOption)return;if(optionsMap.hasOwnProperty(value)){if(group){var arr=optionsMap[value][field_optgroup];if(!arr){optionsMap[value][field_optgroup]=group}else if(!Array.isArray(arr)){optionsMap[value][field_optgroup]=[arr,group]}else{arr.push(group)}}return}var option=readData($option)||{};option[field_label]=option[field_label]||$option.text();option[field_value]=option[field_value]||value;option[field_disabled]=option[field_disabled]||$option.prop("disabled");option[field_optgroup]=option[field_optgroup]||group;option.styles=$option.attr("style")||"";option.classes=$option.attr("class")||"";optionsMap[value]=option;options.push(option);if($option.is(":selected")){settings_element.items.push(value)}};var addGroup=function($optgroup){var i,n,id,optgroup,$options;$optgroup=$($optgroup);id=$optgroup.attr("label");if(id){optgroup=readData($optgroup)||{};optgroup[field_optgroup_label]=id;optgroup[field_optgroup_value]=id;optgroup[field_disabled]=$optgroup.prop("disabled");settings_element.optgroups.push(optgroup)}$options=$("option",$optgroup);for(i=0,n=$options.length;i<n;i++){addOption($options[i],id)}};settings_element.maxItems=$input.attr("multiple")?null:1;$children=$input.children();for(i=0,n=$children.length;i<n;i++){tagName=$children[i].tagName.toLowerCase();if(tagName==="optgroup"){addGroup($children[i])}else if(tagName==="option"){addOption($children[i])}}};return this.each(function(){if(this.selectize)return;var instance;var $input=$(this);var tag_name=this.tagName.toLowerCase();var placeholder=$input.attr("placeholder")||$input.attr("data-placeholder");if(!placeholder&&!settings.allowEmptyOption){placeholder=$input.children('option[value=""]').text()}if(settings.allowEmptyOption&&settings.showEmptyOptionInDropdown&&!$input.children('option[value=""]').length){var input_html=$input.html();var label=escape_html(settings.emptyOptionLabel||"--");$input.html('<option value="">'+label+"</option>"+input_html)}var settings_element={placeholder:placeholder,options:[],optgroups:[],items:[]};if(tag_name==="select"){init_select($input,settings_element)}else{init_textbox($input,settings_element)}instance=new Selectize($input,$.extend(true,{},defaults,settings_element,settings_user));instance.settings_user=settings_user})};$.fn.em_selectize.defaults=Selectize.defaults;$.fn.em_selectize.support={validity:SUPPORTS_VALIDITY_API};Selectize.define("auto_position",function(){var self=this;const POSITION={top:"top",bottom:"bottom"};self.positionDropdown=function(){return function(){const $control=this.$control;const offset=this.settings.dropdownParent==="body"?$control.offset():$control.position();offset.top+=$control.outerHeight(true);const dropdownHeight=this.$dropdown.prop("scrollHeight")+5;const controlPosTop=this.$control.get(0).getBoundingClientRect().top;const wrapperHeight=this.$wrapper.height();const position=controlPosTop+dropdownHeight+wrapperHeight>window.innerHeight?POSITION.top:POSITION.bottom;const styles={width:$control.outerWidth(),left:offset.left};if(position===POSITION.top){const styleToAdd={bottom:offset.top,top:"unset"};if(this.settings.dropdownParent==="body"){styleToAdd.top=offset.top-this.$dropdown.outerHeight(true)-$control.outerHeight(true);styleToAdd.bottom="unset"}Object.assign(styles,styleToAdd);this.$dropdown.addClass("selectize-position-top");this.$control.addClass("selectize-position-top")}else{Object.assign(styles,{top:offset.top,bottom:"unset"});this.$dropdown.removeClass("selectize-position-top");this.$control.removeClass("selectize-position-top")}this.$dropdown.css(styles)}}()});Selectize.define("auto_select_on_type",function(options){var self=this;self.onBlur=function(){var originalBlur=self.onBlur;return function(e){var $matchedItem=self.getFirstItemMatchedByTextContent(self.lastValue,true);if(typeof $matchedItem.attr("data-value")!=="undefined"&&self.getValue()!==$matchedItem.attr("data-value")){self.setValue($matchedItem.attr("data-value"))}return originalBlur.apply(this,arguments)}}()});Selectize.define("autofill_disable",function(options){var self=this;self.setup=function(){var original=self.setup;return function(){original.apply(self,arguments);self.$control_input.attr({autocomplete:"new-password",autofill:"no"})}}()});Selectize.define("clear_button",function(options){var self=this;options=$.extend({title:"Clear",className:"clear",label:"×",html:function(data){return'<a class="'+data.className+'" title="'+data.title+'"> '+data.label+"</a>"}},options);self.setup=function(){var original=self.setup;return function(){original.apply(self,arguments);self.$button_clear=$(options.html(options));if(self.settings.mode==="single")self.$wrapper.addClass("single");self.$wrapper.append(self.$button_clear);if(self.getValue()===""||self.getValue().length===0){self.$wrapper.find("."+options.className).css("display","none")}self.on("change",function(){if(self.getValue()===""||self.getValue().length===0){self.$wrapper.find("."+options.className).css("display","none")}else{self.$wrapper.find("."+options.className).css("display","")}});self.$wrapper.on("click","."+options.className,function(e){e.preventDefault();e.stopImmediatePropagation();e.stopPropagation();if(self.isLocked)return;self.clear();self.$wrapper.find("."+options.className).css("display","none")})}}()});Selectize.define("drag_drop",function(options){if(!$.fn.sortable)throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');if(this.settings.mode!=="multi")return;var self=this;self.lock=function(){var original=self.lock;return function(){var sortable=self.$control.data("sortable");if(sortable)sortable.disable();return original.apply(self,arguments)}}();self.unlock=function(){var original=self.unlock;return function(){var sortable=self.$control.data("sortable");if(sortable)sortable.enable();return original.apply(self,arguments)}}();self.setup=function(){var original=self.setup;return function(){original.apply(this,arguments);
4700var $control=self.$control.sortable({items:"[data-value]",forcePlaceholderSize:true,disabled:self.isLocked,start:function(e,ui){ui.placeholder.css("width",ui.helper.css("width"));$control.addClass("dragging")},stop:function(){$control.removeClass("dragging");var active=self.$activeItems?self.$activeItems.slice():null;var values=[];$control.children("[data-value]").each(function(){values.push($(this).attr("data-value"))});self.isFocused=false;self.setValue(values);self.isFocused=true;self.setActiveItem(active);self.positionDropdown()}})}}()});Selectize.define("dropdown_header",function(options){var self=this;options=$.extend({title:"Untitled",headerClass:"selectize-dropdown-header",titleRowClass:"selectize-dropdown-header-title",labelClass:"selectize-dropdown-header-label",closeClass:"selectize-dropdown-header-close",html:function(data){return'<div class="'+data.headerClass+'">'+'<div class="'+data.titleRowClass+'">'+'<span class="'+data.labelClass+'">'+data.title+"</span>"+'<a href="javascript:void(0)" class="'+data.closeClass+'">&#xd7;</a>'+"</div>"+"</div>"}},options);self.setup=function(){var original=self.setup;return function(){original.apply(self,arguments);self.$dropdown_header=$(options.html(options));self.$dropdown.prepend(self.$dropdown_header);self.$dropdown_header.find("."+options.closeClass).on("click",function(){self.close()})}}()});Selectize.define("optgroup_columns",function(options){var self=this;options=$.extend({equalizeWidth:true,equalizeHeight:true},options);this.getAdjacentOption=function($option,direction){var $options=$option.closest("[data-group]").find("[data-selectable]");var index=$options.index($option)+direction;return index>=0&&index<$options.length?$options.eq(index):$()};this.onKeyDown=function(){var original=self.onKeyDown;return function(e){var index,$option,$options,$optgroup;if(this.isOpen&&(e.keyCode===KEY_LEFT||e.keyCode===KEY_RIGHT)){self.ignoreHover=true;$optgroup=this.$activeOption.closest("[data-group]");index=$optgroup.find("[data-selectable]").index(this.$activeOption);if(e.keyCode===KEY_LEFT){$optgroup=$optgroup.prev("[data-group]")}else{$optgroup=$optgroup.next("[data-group]")}$options=$optgroup.find("[data-selectable]");$option=$options.eq(Math.min($options.length-1,index));if($option.length){this.setActiveOption($option)}return}return original.apply(this,arguments)}}();var getScrollbarWidth=function(){var div;var width=getScrollbarWidth.width;var doc=document;if(typeof width==="undefined"){div=doc.createElement("div");div.innerHTML='<div style="width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;"><div style="width:1px;height:100px;"></div></div>';div=div.firstChild;doc.body.appendChild(div);width=getScrollbarWidth.width=div.offsetWidth-div.clientWidth;doc.body.removeChild(div)}return width};var equalizeSizes=function(){var i,n,height_max,width,width_last,width_parent,$optgroups;$optgroups=$("[data-group]",self.$dropdown_content);n=$optgroups.length;if(!n||!self.$dropdown_content.width())return;if(options.equalizeHeight){height_max=0;for(i=0;i<n;i++){height_max=Math.max(height_max,$optgroups.eq(i).height())}$optgroups.css({height:height_max})}if(options.equalizeWidth){width_parent=self.$dropdown_content.innerWidth()-getScrollbarWidth();width=Math.round(width_parent/n);$optgroups.css({width:width});if(n>1){width_last=width_parent-width*(n-1);$optgroups.eq(n-1).css({width:width_last})}}};if(options.equalizeHeight||options.equalizeWidth){hook.after(this,"positionDropdown",equalizeSizes);hook.after(this,"refreshOptions",equalizeSizes)}});Selectize.define("remove_button",function(options){if(this.settings.mode==="single")return;options=$.extend({label:"&#xd7;",title:"Remove",className:"remove",append:true},options);var multiClose=function(thisRef,options){var self=thisRef;var html='<a href="javascript:void(0)" class="'+options.className+'" tabindex="-1" title="'+escape_html(options.title)+'">'+options.label+"</a>";var append=function(html_container,html_element){var pos=html_container.search(/(<\/[^>]+>\s*)$/);return html_container.substring(0,pos)+html_element+html_container.substring(pos)};thisRef.setup=function(){var original=self.setup;return function(){if(options.append){var render_item=self.settings.render.item;self.settings.render.item=function(data){return append(render_item.apply(thisRef,arguments),html)}}original.apply(thisRef,arguments);thisRef.$control.on("click","."+options.className,function(e){e.preventDefault();if(self.isLocked)return;var $item=$(e.currentTarget).parent();self.setActiveItem($item);if(self.deleteSelection()){self.setCaret(self.items.length)}return false})}}()};multiClose(this,options)});Selectize.define("restore_on_backspace",function(options){var self=this;options.text=options.text||function(option){return option[this.settings.labelField]};this.onKeyDown=function(){var original=self.onKeyDown;return function(e){var index,option;if(e.keyCode===KEY_BACKSPACE&&this.$control_input.val()===""&&!this.$activeItems.length){index=this.caretPos-1;if(index>=0&&index<this.items.length){option=this.options[this.items[index]];if(this.deleteSelection(e)){this.setTextboxValue(options.text.apply(this,[option]));this.refreshOptions(true)}e.preventDefault();return}}return original.apply(this,arguments)}}()});Selectize.define("select_on_focus",function(options){var self=this;self.on("focus",function(){var originalFocus=self.onFocus;return function(e){var value=self.getItem(self.getValue()).text();self.clear();self.setTextboxValue(value);self.$control_input.select();setTimeout(function(){if(self.settings.selectOnTab){self.setActiveOption(self.getFirstItemMatchedByTextContent(value))}self.settings.score=null},0);return originalFocus.apply(this,arguments)}}());self.onBlur=function(){var originalBlur=self.onBlur;return function(e){if(self.getValue()===""&&self.lastValidValue!==self.getValue()){self.setValue(self.lastValidValue)}setTimeout(function(){self.settings.score=function(){return function(){return 1}}},0);return originalBlur.apply(this,arguments)}}();self.settings.score=function(){return function(){return 1}}});Selectize.define("tag_limit",function(options){const self=this;options.tagLimit=options.tagLimit;this.onBlur=function(e){const original=self.onBlur;return function(e){original.apply(this,e);if(!e)return;const $control=this.$control;
4700const $items=$control.find(".item");const limit=options.tagLimit;if(limit===undefined||$items.length<=limit)return;$items.toArray().forEach(function(item,index){if(index<limit)return;$(item).hide()});$control.append("<span><b>"+($items.length-limit)+"</b></span>")}}();this.onFocus=function(e){const original=self.onFocus;return function(e){original.apply(this,e);if(!e)return;const $control=this.$control;const $items=$control.find(".item");$items.show();$control.find("span").remove()}}()});return Selectize});
4701/*!
4702 * selectize click2deselect (custom)
4703 */
4704/* Selectize deselect function */
4705EM_Selectize.define("click2deselect",function(options){var self=this;var setup=self.setup;this.setup=function(){setup.apply(self,arguments);let just_added;self.$dropdown.each(function(){this.addEventListener("click",function(e){let target=e.target.matches(".selected[data-selectable]")?e.target:e.target.closest(".selected[data-selectable]");if(target!==null){let value=target.getAttribute("data-value");if(value!==just_added){self.removeItem(value);self.refreshItems();self.refreshOptions()}}just_added=false;return false})});self.on("item_remove",function(value){self.getOption(value).removeClass("selected")});self.on("item_add",function(value){just_added=value})}});
4706
4707/*! Sortable 1.15.2 - MIT | git://github.com/SortableJS/Sortable.git */
4708!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function I(o){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?e(Object(i),!0).forEach(function(t){var e,n;e=o,t=i[n=t],n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(i)):e(Object(i)).forEach(function(t){Object.defineProperty(o,t,Object.getOwnPropertyDescriptor(i,t))})}return o}function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function a(){return(a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n,o=arguments[e];for(n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])}return t}).apply(this,arguments)}function i(t,e){if(null==t)return{};var n,o=function(t,e){if(null==t)return{};for(var n,o={},i=Object.keys(t),r=0;r<i.length;r++)n=i[r],0<=e.indexOf(n)||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols)for(var i=Object.getOwnPropertySymbols(t),r=0;r<i.length;r++)n=i[r],0<=e.indexOf(n)||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n]);return o}function r(t){return function(t){if(Array.isArray(t))return l(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return l(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Map"===(n="Object"===n&&t.constructor?t.constructor.name:n)||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=new Array(e);n<e;n++)o[n]=t[n];return o}function t(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var y=t(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),w=t(/Edge/i),s=t(/firefox/i),u=t(/safari/i)&&!t(/chrome/i)&&!t(/android/i),n=t(/iP(ad|od|hone)/i),c=t(/chrome/i)&&t(/android/i),d={capture:!1,passive:!1};function h(t,e,n){t.addEventListener(e,n,!y&&d)}function f(t,e,n){t.removeEventListener(e,n,!y&&d)}function p(t,e){if(e&&(">"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);
vendor: 41,754 bytes, lines 4708-4712
4708if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}var g,m=/\s+/g;function k(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(m," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(m," ")))}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function b(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i<r;i++)n(o[i],i);return o}return[]}function O(){var t=document.scrollingElement;return t||document.documentElement}function X(t,e,n,o,i){if(t.getBoundingClientRect||t===window){var r,a,l,s,c,u,d=t!==window&&t.parentNode&&t!==O()?(a=(r=t.getBoundingClientRect()).top,l=r.left,s=r.bottom,c=r.right,u=r.height,r.width):(l=a=0,s=window.innerHeight,c=window.innerWidth,u=window.innerHeight,window.innerWidth);if((e||n)&&t!==window&&(i=i||t.parentNode,!y))do{if(i&&i.getBoundingClientRect&&("none"!==R(i,"transform")||n&&"static"!==R(i,"position"))){var h=i.getBoundingClientRect();a-=h.top+parseInt(R(i,"border-top-width")),l-=h.left+parseInt(R(i,"border-left-width")),s=a+r.height,c=l+r.width;break}}while(i=i.parentNode);return o&&t!==window&&(o=(e=v(i||t))&&e.a,t=e&&e.d,e&&(s=(a/=t)+(u/=t),c=(l/=o)+(d/=o))),{top:a,left:l,bottom:s,right:c,width:d,height:u}}}function Y(t,e,n){for(var o=M(t,!0),i=X(t)[e];o;){var r=X(o)[n];if(!("top"===n||"left"===n?r<=i:i<=r))return o;if(o===O())break;o=M(o,!1)}return!1}function B(t,e,n,o){for(var i=0,r=0,a=t.children;r<a.length;){if("none"!==a[r].style.display&&a[r]!==Ft.ghost&&(o||a[r]!==Ft.dragged)&&P(a[r],n.draggable,t,!1)){if(i===e)return a[r];i++}r++}return null}function F(t,e){for(var n=t.lastElementChild;n&&(n===Ft.ghost||"none"===R(n,"display")||e&&!p(n,e));)n=n.previousElementSibling;return n||null}function j(t,e){var n=0;if(!t||!t.parentNode)return-1;for(;t=t.previousElementSibling;)"TEMPLATE"===t.nodeName.toUpperCase()||t===Ft.clone||e&&!p(t,e)||n++;return n}function E(t){var e=0,n=0,o=O();if(t)do{var i=v(t),r=i.a,i=i.d}while(e+=t.scrollLeft*r,n+=t.scrollTop*i,t!==o&&(t=t.parentNode));return[e,n]}function M(t,e){if(!t||!t.getBoundingClientRect)return O();var n=t,o=!1;do{if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var i=R(n);if(n.clientWidth<n.scrollWidth&&("auto"==i.overflowX||"scroll"==i.overflowX)||n.clientHeight<n.scrollHeight&&("auto"==i.overflowY||"scroll"==i.overflowY)){if(!n.getBoundingClientRect||n===document.body)return O();if(o||e)return n;o=!0}}}while(n=n.parentNode);return O()}function D(t,e){return Math.round(t.top)===Math.round(e.top)&&Math.round(t.left)===Math.round(e.left)&&Math.round(t.height)===Math.round(e.height)&&Math.round(t.width)===Math.round(e.width)}function S(e,n){return function(){var t;g||(1===(t=arguments).length?e.call(this,t[0]):e.apply(this,t),g=setTimeout(function(){g=void 0},n))}}function H(t,e,n){t.scrollLeft+=e,t.scrollTop+=n}function _(t){var e=window.Polymer,n=window.jQuery||window.Zepto;return e&&e.dom?e.dom(t).cloneNode(!0):n?n(t).clone(!0)[0]:t.cloneNode(!0)}function C(t,e){R(t,"position","absolute"),R(t,"top",e.top),R(t,"left",e.left),R(t,"width",e.width),R(t,"height",e.height)}function T(t){R(t,"position",""),R(t,"top",""),R(t,"left",""),R(t,"width",""),R(t,"height","")}function L(n,o,i){var r={};return Array.from(n.children).forEach(function(t){var e;P(t,o.draggable,n,!1)&&!t.animated&&t!==i&&(e=X(t),r.left=Math.min(null!==(t=r.left)&&void 0!==t?t:1/0,e.left),r.top=Math.min(null!==(t=r.top)&&void 0!==t?t:1/0,e.top),r.right=Math.max(null!==(t=r.right)&&void 0!==t?t:-1/0,e.right),r.bottom=Math.max(null!==(t=r.bottom)&&void 0!==t?t:-1/0,e.bottom))}),r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}var K="Sortable"+(new Date).getTime();function x(){var e,o=[];return{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(t){var e,n;"none"!==R(t,"display")&&t!==Ft.ghost&&(o.push({target:t,rect:X(t)}),e=I({},o[o.length-1].rect),!t.thisAnimationDuration||(n=v(t,!0))&&(e.top-=n.f,e.left-=n.e),t.fromRect=e)})},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var c=this;if(!this.options.animation)return clearTimeout(e),void("function"==typeof t&&t());var u=!1,d=0;o.forEach(function(t){var e=0,n=t.target,o=n.fromRect,i=X(n),r=n.prevFromRect,a=n.prevToRect,l=t.rect,s=v(n,!0);s&&(i.top-=s.f,i.left-=s.e),n.toRect=i,n.thisAnimationDuration&&D(r,i)&&!D(o,i)&&(l.top-i.top)/(l.left-i.left)==(o.top-i.top)/(o.left-i.left)&&(t=l,s=r,r=a,a=c.options,e=Math.sqrt(Math.pow(s.top-t.top,2)+Math.pow(s.left-t.left,2))/Math.sqrt(Math.pow(s.top-r.top,2)+Math.pow(s.left-r.left,2))*a.animation),D(i,o)||(n.prevFromRect=o,n.prevToRect=i,e=e||c.options.animation,c.animate(n,l,i,e)),e&&(u=!0,d=Math.max(d,e),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},e),n.thisAnimationDuration=e)}),clearTimeout(e),u?e=setTimeout(function(){"function"==typeof t&&t()},d):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){var i,r;o&&(R(t,"transition",""),R(t,"transform",""),i=(r=v(this.el))&&r.a,r=r&&r.d,i=(e.left-n.left)/(i||1),r=(e.top-n.top)/(r||1),t.animatingX=!!i,t.animatingY=!!r,R(t,"transform","translate3d("+i+"px,"+r+"px,0)"),this.forRepaintDummy=t.offsetWidth,R(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),R(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout(function(){R(t,"transition",""),R(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1},o))}}}var A=[],N={initializeByDefault:!0},W={mount:function(e){for(var t in N)!N.hasOwnProperty(t)||t in e||(e[t]=N[t]);A.forEach(function(t){if(t.pluginName===e.pluginName)throw"Sortable: Cannot mount plugin ".concat(e.pluginName," more than once")}),A.push(e)},pluginEvent:function(e,n,o){var t=this;this.eventCanceled=!1,o.cancel=function(){t.eventCanceled=!0};var i=e+"Global";A.forEach(function(t){n[t.pluginName]&&(n[t.pluginName][i]&&n[t.pluginName][i](I({sortable:n},o)),n.options[t.pluginName]&&n[t.pluginName][e]&&n[t.pluginName][e](I({sortable:n},o)))})},initializePlugins:function(n,o,i,t){for(var e in A.forEach(function(t){var e=t.pluginName;(n.options[e]||t.initializeByDefault)&&((t=new t(n,o,n.options)).sortable=n,t.options=n.options,n[e]=t,a(i,t.defaults))}),n.options){var r;n.options.hasOwnProperty(e)&&(void 0!==(r=this.modifyOption(n,e,n.options[e]))&&(n.options[e]=r))}},getEventProperties:function(e,n){var o={};return A.forEach(function(t){"function"==typeof t.eventProperties&&a(o,t.eventProperties.call(n[t.pluginName],e))}),o},modifyOption:function(e,n,o){var i;return A.forEach(function(t){e[t.pluginName]&&t.optionListeners&&"function"==typeof t.optionListeners[n]&&(i=t.optionListeners[n].call(e[t.pluginName],o))}),i}};function z(t){var e=t.sortable,n=t.rootEl,o=t.name,i=t.targetEl,r=t.cloneEl,a=t.toEl,l=t.fromEl,s=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,h=t.originalEvent,f=t.putSortable,p=t.extraEventProperties;if(e=e||n&&n[K]){var g,m=e.options,t="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||y||w?(g=document.createEvent("Event")).initEvent(o,!0,!0):g=new CustomEvent(o,{bubbles:!0,cancelable:!0}),g.to=a||n,g.from=l||n,g.item=i||n,g.clone=r,g.oldIndex=s,g.newIndex=c,g.oldDraggableIndex=u,g.newDraggableIndex=d,g.originalEvent=h,g.pullMode=f?f.lastPutMode:void 0;var v,b=I(I({},p),W.getEventProperties(o,e));for(v in b)g[v]=b[v];n&&n.dispatchEvent(g),m[t]&&m[t].call(e,g)}}function G(t,e){var n=(o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).evt,o=i(o,U);W.pluginEvent.bind(Ft)(t,e,I({dragEl:V,parentEl:Z,ghostEl:$,rootEl:Q,nextEl:J,lastDownEl:tt,cloneEl:et,cloneHidden:nt,dragStarted:gt,putSortable:st,activeSortable:Ft.active,originalEvent:n,oldIndex:ot,oldDraggableIndex:rt,newIndex:it,newDraggableIndex:at,hideGhostForTarget:Rt,unhideGhostForTarget:Xt,cloneNowHidden:function(){nt=!0},cloneNowShown:function(){nt=!1},dispatchSortableEvent:function(t){q({sortable:e,name:t,originalEvent:n})}},o))}var U=["evt"];function q(t){z(I({putSortable:st,cloneEl:et,targetEl:V,rootEl:Q,oldIndex:ot,oldDraggableIndex:rt,newIndex:it,newDraggableIndex:at},t))}var V,Z,$,Q,J,tt,et,nt,ot,it,rt,at,lt,st,ct,ut,dt,ht,ft,pt,gt,mt,vt,bt,yt,wt=!1,Et=!1,Dt=[],St=!1,_t=!1,Ct=[],Tt=!1,xt=[],Ot="undefined"!=typeof document,Mt=n,At=w||y?"cssFloat":"float",Nt=Ot&&!c&&!n&&"draggable"in document.createElement("div"),It=function(){if(Ot){if(y)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),Pt=function(t,e){var n=R(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),i=B(t,0,e),r=B(t,1,e),a=i&&R(i),l=r&&R(r),s=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+X(i).width,t=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+X(r).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&a.float&&"none"!==a.float){e="left"===a.float?"left":"right";return!r||"both"!==l.clear&&l.clear!==e?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||o<=s&&"none"===n[At]||r&&"none"===n[At]&&o<s+t)?"vertical":"horizontal"},kt=function(t){function l(r,a){return function(t,e,n,o){var i=t.options.group.name&&e.options.group.name&&t.options.group.name===e.options.group.name;if(null==r&&(a||i))return!0;if(null==r||!1===r)return!1;if(a&&"clone"===r)return r;if("function"==typeof r)return l(r(t,e,n,o),a)(t,e,n,o);e=(a?t:e).options.group.name;return!0===r||"string"==typeof r&&r===e||r.join&&-1<r.indexOf(e)}}var e={},n=t.group;n&&"object"==o(n)||(n={name:n}),e.name=n.name,e.checkPull=l(n.pull,!0),e.checkPut=l(n.put),e.revertClone=n.revertClone,t.group=e},Rt=function(){!It&&$&&R($,"display","none")},Xt=function(){!It&&$&&R($,"display","")};Ot&&!c&&document.addEventListener("click",function(t){if(Et)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Et=!1},!0);function Yt(t){if(V){t=t.touches?t.touches[0]:t;var e=(i=t.clientX,r=t.clientY,Dt.some(function(t){var e=t[K].options.emptyInsertThreshold;if(e&&!F(t)){var n=X(t),o=i>=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[K]._onDragOver(o)}}var i,r,a}function Bt(t){V&&V.parentNode[K]._isOutsideThisEl(t.target)}function Ft(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[K]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Pt(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Ft.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in W.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in kt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&Nt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),Dt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,x())}function jt(t,e,n,o,i,r,a,l){var s,c,u=t[K],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function Ht(t){t.draggable=!1}function Lt(){Tt=!1}function Kt(t){return setTimeout(t,0)}function Wt(t){return clearTimeout(t)}Ft.prototype={constructor:Ft,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(mt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,V):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){xt.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&xt.push(o)}}(o),!V&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=P(l,t.draggable,o,!1))&&l.animated||tt===l)){if(ot=j(l),rt=j(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return q({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),G("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return q({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),G("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!V&&n.parentNode===r&&(o=X(n),Q=r,Z=(V=n).parentNode,J=V.nextSibling,tt=n,lt=a.group,ct={target:Ft.dragged=V,clientX:(e||t).clientX,clientY:(e||t).clientY},ft=ct.clientX-o.left,pt=ct.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,V.style["will-change"]="all",o=function(){G("delayEnded",i,{evt:t}),Ft.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(V.draggable=!0),i._triggerDragStart(t,e),q({sortable:i,name:"choose",originalEvent:t}),k(V,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){b(V,t.trim(),Ht)}),h(l,"dragover",Yt),h(l,"mousemove",Yt),h(l,"touchmove",Yt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,V.draggable=!0),G("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():Ft.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){V&&Ht(V),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(V,"dragend",this),h(Q,"dragstart",this._onDragStart));try{document.selection?Kt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;wt=!1,Q&&V?(G("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Bt),n=this.options,t||k(V,n.dragClass,!1),k(V,n.ghostClass,!0),Ft.active=this,t&&this._appendGhost(),q({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(ut){this._lastX=ut.clientX,this._lastY=ut.clientY,Rt();for(var t=document.elementFromPoint(ut.clientX,ut.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ut.clientX,ut.clientY))!==e;)e=t;if(V.parentNode[K]._isOutsideThisEl(t),e)do{if(e[K])if(e[K]._onDragOver({clientX:ut.clientX,clientY:ut.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=(t=e).parentNode);Xt()}},_onTouchMove:function(t){if(ct){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=$&&v($,!0),a=$&&r&&r.a,l=$&&r&&r.d,e=Mt&&yt&&E(yt),a=(i.clientX-ct.clientX+o.x)/(a||1)+(e?e[0]-Ct[0]:0)/(a||1),l=(i.clientY-ct.clientY+o.y)/(l||1)+(e?e[1]-Ct[1]:0)/(l||1);if(!Ft.active&&!wt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))<n)return;this._onDragStart(t,!0)}$&&(r?(r.e+=a-(dt||0),r.f+=l-(ht||0)):r={a:1,b:0,c:0,d:1,e:a,f:l},r="matrix(".concat(r.a,",").concat(r.b,",").concat(r.c,",").concat(r.d,",").concat(r.e,",").concat(r.f,")"),R($,"webkitTransform",r),R($,"mozTransform",r),R($,"msTransform",r),R($,"transform",r),dt=a,ht=l,ut=i),t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!$){var t=this.options.fallbackOnBody?document.body:Q,e=X(V,!0,Mt,!0,t),n=this.options;if(Mt){for(yt=t;"static"===R(yt,"position")&&"none"===R(yt,"transform")&&yt!==document;)yt=yt.parentNode;yt!==document.body&&yt!==document.documentElement?(yt===document&&(yt=O()),e.top+=yt.scrollTop,e.left+=yt.scrollLeft):yt=O(),Ct=E(yt)}k($=V.cloneNode(!0),n.ghostClass,!1),k($,n.fallbackClass,!0),k($,n.dragClass,!0),R($,"transition",""),R($,"transform",""),R($,"box-sizing","border-box"),R($,"margin",0),R($,"top",e.top),R($,"left",e.left),R($,"width",e.width),R($,"height",e.height),R($,"opacity","0.8"),R($,"position",Mt?"absolute":"fixed"),R($,"zIndex","100000"),R($,"pointerEvents","none"),Ft.ghost=$,t.appendChild($),R($,"transform-origin",ft/parseInt($.style.width)*100+"% "+pt/parseInt($.style.height)*100+"%")}},_onDragStart:function(t,e){var n=this,o=t.dataTransfer,i=n.options;G("dragStart",this,{evt:t}),Ft.eventCanceled?this._onDrop():(G("setupClone",this),Ft.eventCanceled||((et=_(V)).removeAttribute("id"),et.draggable=!1,et.style["will-change"]="",this._hideClone(),k(et,this.options.chosenClass,!1),Ft.clone=et),n.cloneId=Kt(function(){G("clone",n),Ft.eventCanceled||(n.options.removeCloneOnHide||Q.insertBefore(et,V),n._hideClone(),q({sortable:n,name:"clone"}))}),e||k(V,i.dragClass,!0),e?(Et=!0,n._loopId=setInterval(n._emulateDragOver,50)):(f(document,"mouseup",n._onDrop),f(document,"touchend",n._onDrop),f(document,"touchcancel",n._onDrop),o&&(o.effectAllowed="move",i.setData&&i.setData.call(n,o,V)),h(document,"drop",n),R(V,"transform","translateZ(0)")),wt=!0,n._dragStartId=Kt(n._dragStarted.bind(n,e,t)),h(document,"selectstart",n),gt=!0,u&&R(document.body,"user-select","none"))},_onDragOver:function(n){var o,i,r,t,e,a=this.el,l=n.target,s=this.options,c=s.group,u=Ft.active,d=lt===c,h=s.sort,f=st||u,p=this,g=!1;if(!Tt){if(void 0!==n.preventDefault&&n.cancelable&&n.preventDefault(),l=P(l,s.draggable,a,!0),O("dragOver"),Ft.eventCanceled)return g;if(V.contains(n.target)||l.animated&&l.animatingX&&l.animatingY||p._ignoreWhileAnimating===l)return A(!1);if(Et=!1,u&&!s.disabled&&(d?h||(i=Z!==Q):st===this||(this.lastPutMode=lt.checkPull(this,u,V,n))&&c.checkPut(this,u,V,n))){if(r="vertical"===this._getDirection(n,l),o=X(V),O("dragOverValid"),Ft.eventCanceled)return g;if(i)return Z=Q,M(),this._hideClone(),O("revert"),Ft.eventCanceled||(J?Q.insertBefore(V,J):Q.appendChild(V)),A(!0);var m=F(a,s.draggable);if(m&&(S=n,c=r,x=X(F((D=this).el,D.options.draggable)),D=L(D.el,D.options,$),!(c?S.clientX>D.right+10||S.clientY>x.bottom&&S.clientX>x.left:S.clientY>D.bottom+10||S.clientX>x.right&&S.clientY>x.top)||m.animated)){if(m&&(t=n,e=r,C=X(B((_=this).el,0,_.options,!0)),_=L(_.el,_.options,$),e?t.clientX<_.left-10||t.clientY<C.top&&t.clientX<C.right:t.clientY<_.top-10||t.clientY<C.bottom&&t.clientX<C.left)){var v=B(a,0,s,!0);if(v===V)return A(!1);if(E=X(l=v),!1!==jt(Q,a,V,o,l,E,n,!1))return M(),a.insertBefore(V,v),Z=a,N(),A(!0)}else if(l.parentNode===a){var b,y,w,E=X(l),D=V.parentNode!==a,S=(S=V.animated&&V.toRect||o,x=l.animated&&l.toRect||E,_=(e=r)?S.left:S.top,t=e?S.right:S.bottom,C=e?S.width:S.height,v=e?x.left:x.top,S=e?x.right:x.bottom,x=e?x.width:x.height,!(_===v||t===S||_+C/2===v+x/2)),_=r?"top":"left",C=Y(l,"top","top")||Y(V,"top","top"),v=C?C.scrollTop:void 0;if(mt!==l&&(y=E[_],St=!1,_t=!S&&s.invertSwap||D),0!==(b=function(t,e,n,o,i,r,a,l){var s=o?t.clientY:t.clientX,c=o?n.height:n.width,t=o?n.top:n.left,o=o?n.bottom:n.right,n=!1;if(!a)if(l&&bt<c*i){if(St=!St&&(1===vt?t+c*r/2<s:s<o-c*r/2)?!0:St)n=!0;else if(1===vt?s<t+bt:o-bt<s)return-vt}else if(t+c*(1-i)/2<s&&s<o-c*(1-i)/2)return function(t){return j(V)<j(t)?1:-1}(e);if((n=n||a)&&(s<t+c*r/2||o-c*r/2<s))return t+c/2<s?1:-1;return 0}(n,l,E,r,S?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,_t,mt===l)))for(var T=j(V);(w=Z.children[T-=b])&&("none"===R(w,"display")||w===$););if(0===b||w===l)return A(!1);vt=b;var x=(mt=l).nextElementSibling,D=!1,S=jt(Q,a,V,o,l,E,n,D=1===b);if(!1!==S)return 1!==S&&-1!==S||(D=1===S),Tt=!0,setTimeout(Lt,30),M(),D&&!x?a.appendChild(V):l.parentNode.insertBefore(V,D?x:l),C&&H(C,0,v-C.scrollTop),Z=V.parentNode,void 0===y||_t||(bt=Math.abs(y-X(l)[_])),N(),A(!0)}}else{if(m===V)return A(!1);if((l=m&&a===n.target?m:l)&&(E=X(l)),!1!==jt(Q,a,V,o,l,E,n,!!l))return M(),m&&m.nextSibling?a.insertBefore(V,m.nextSibling):a.appendChild(V),Z=a,N(),A(!0)}if(a.contains(V))return A(!1)}return!1}function O(t,e){G(t,p,I({evt:n,isOwner:d,axis:r?"vertical":"horizontal",revert:i,dragRect:o,targetRect:E,canSort:h,fromSortable:f,target:l,completed:A,onMove:function(t,e){return jt(Q,a,V,o,t,X(t),n,e)},changed:N},e))}function M(){O("dragOverAnimationCapture"),p.captureAnimationState(),p!==f&&f.captureAnimationState()}function A(t){return O("dragOverCompleted",{insertion:t}),t&&(d?u._hideClone():u._showClone(p),p!==f&&(k(V,(st||u).options.ghostClass,!1),k(V,s.ghostClass,!0)),st!==p&&p!==Ft.active?st=p:p===Ft.active&&st&&(st=null),f===p&&(p._ignoreWhileAnimating=l),p.animateAll(function(){O("dragOverAnimationComplete"),p._ignoreWhileAnimating=null}),p!==f&&(f.animateAll(),f._ignoreWhileAnimating=null)),(l===V&&!V.animated||l===a&&!l.animated)&&(mt=null),s.dragoverBubble||n.rootEl||l===document||(V.parentNode[K]._isOutsideThisEl(n.target),t||Yt(n)),!s.dragoverBubble&&n.stopPropagation&&n.stopPropagation(),g=!0}function N(){it=j(V),at=j(V,s.draggable),q({sortable:p,name:"change",toEl:a,newIndex:it,newDraggableIndex:at,originalEvent:n})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){f(document,"mousemove",this._onTouchMove),f(document,"touchmove",this._onTouchMove),f(document,"pointermove",this._onTouchMove),f(document,"dragover",Yt),f(document,"mousemove",Yt),f(document,"touchmove",Yt)},_offUpEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._onDrop),f(t,"touchend",this._onDrop),f(t,"pointerup",this._onDrop),f(t,"touchcancel",this._onDrop),f(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;it=j(V),at=j(V,n.draggable),G("drop",this,{evt:t}),Z=V&&V.parentNode,it=j(V),at=j(V,n.draggable),Ft.eventCanceled||(St=_t=wt=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Wt(this.cloneId),Wt(this._dragStartId),this.nativeDraggable&&(f(document,"drop",this),f(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),u&&R(document.body,"user-select",""),R(V,"transform",""),t&&(gt&&(t.cancelable&&t.preventDefault(),n.dropBubble||t.stopPropagation()),$&&$.parentNode&&$.parentNode.removeChild($),(Q===Z||st&&"clone"!==st.lastPutMode)&&et&&et.parentNode&&et.parentNode.removeChild(et),V&&(this.nativeDraggable&&f(V,"dragend",this),Ht(V),V.style["will-change"]="",gt&&!wt&&k(V,(st||this).options.ghostClass,!1),k(V,this.options.chosenClass,!1),q({sortable:this,name:"unchoose",toEl:Z,newIndex:null,newDraggableIndex:null,originalEvent:t}),Q!==Z?(0<=it&&(q({rootEl:Z,name:"add",toEl:Z,fromEl:Q,originalEvent:t}),q({sortable:this,name:"remove",toEl:Z,originalEvent:t}),q({rootEl:Z,name:"sort",toEl:Z,fromEl:Q,originalEvent:t}),q({sortable:this,name:"sort",toEl:Z,originalEvent:t})),st&&st.save()):it!==ot&&0<=it&&(q({sortable:this,name:"update",toEl:Z,originalEvent:t}),q({sortable:this,name:"sort",toEl:Z,originalEvent:t})),Ft.active&&(null!=it&&-1!==it||(it=ot,at=rt),q({sortable:this,name:"end",toEl:Z,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){G("nulling",this),Q=V=Z=$=J=et=tt=nt=ct=ut=gt=it=at=ot=rt=mt=vt=st=lt=Ft.dragged=Ft.ghost=Ft.clone=Ft.active=null,xt.forEach(function(t){t.checked=!0}),xt.length=dt=ht=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":V&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move");t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,i=n.length,r=this.options;o<i;o++)P(t=n[o],r.draggable,this.el,!1)&&e.push(t.getAttribute(r.dataIdAttr)||function(t){var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;for(;n--;)o+=e.charCodeAt(n);return o.toString(36)}(t));return e},sort:function(t,e){var n={},o=this.el;this.toArray().forEach(function(t,e){e=o.children[e];P(e,this.options.draggable,o,!1)&&(n[t]=e)},this),e&&this.captureAnimationState(),t.forEach(function(t){n[t]&&(o.removeChild(n[t]),o.appendChild(n[t]))}),e&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return P(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var n=this.options;if(void 0===e)return n[t];var o=W.modifyOption(this,t,e);n[t]=void 0!==o?o:e,"group"===t&&kt(n)},destroy:function(){G("destroy",this);var t=this.el;t[K]=null,f(t,"mousedown",this._onTapStart),f(t,"touchstart",this._onTapStart),f(t,"pointerdown",this._onTapStart),this.nativeDraggable&&(f(t,"dragover",this),f(t,"dragenter",this)),Array.prototype.forEach.call(t.querySelectorAll("[draggable]"),function(t){t.removeAttribute("draggable")}),this._onDrop(),this._disableDelayedDragEvents(),Dt.splice(Dt.indexOf(this.el),1),this.el=t=null},_hideClone:function(){nt||(G("hideClone",this),Ft.eventCanceled||(R(et,"display","none"),this.options.removeCloneOnHide&&et.parentNode&&et.parentNode.removeChild(et),nt=!0))},_showClone:function(t){"clone"===t.lastPutMode?nt&&(G("showClone",this),Ft.eventCanceled||(V.parentNode!=Q||this.options.group.revertClone?J?Q.insertBefore(et,J):Q.appendChild(et):Q.insertBefore(et,V),this.options.group.revertClone&&this.animate(V,et),R(et,"display",""),nt=!1)):this._hideClone()}},Ot&&h(document,"touchmove",function(t){(Ft.active||wt)&&t.cancelable&&t.preventDefault()}),Ft.utils={on:h,off:f,css:R,find:b,is:function(t,e){return!!P(t,e,t,!1)},extend:function(t,e){if(t&&e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},throttle:S,closest:P,toggleClass:k,clone:_,index:j,nextTick:Kt,cancelNextTick:Wt,detectDirection:Pt,getChild:B},Ft.get=function(t){return t[K]},Ft.mount=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];(e=e[0].constructor===Array?e[0]:e).forEach(function(t){if(!t.prototype||!t.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(t));t.utils&&(Ft.utils=I(I({},Ft.utils),t.utils)),W.mount(t)})},Ft.create=function(t,e){return new Ft(t,e)};var zt,Gt,Ut,qt,Vt,Zt,$t=[],Qt=!(Ft.version="1.15.2");function Jt(){$t.forEach(function(t){clearInterval(t.pid)}),$t=[]}function te(){clearInterval(Zt)}var ee,ne=S(function(n,t,e,o){if(t.scroll){var i,r=(n.touches?n.touches[0]:n).clientX,a=(n.touches?n.touches[0]:n).clientY,l=t.scrollSensitivity,s=t.scrollSpeed,c=O(),u=!1;Gt!==e&&(Gt=e,Jt(),zt=t.scroll,i=t.scrollFn,!0===zt&&(zt=M(e,!0)));var d=0,h=zt;do{var f=h,p=X(f),g=p.top,m=p.bottom,v=p.left,b=p.right,y=p.width,w=p.height,E=void 0,D=void 0,S=f.scrollWidth,_=f.scrollHeight,C=R(f),T=f.scrollLeft,p=f.scrollTop,D=f===c?(E=y<S&&("auto"===C.overflowX||"scroll"===C.overflowX||"visible"===C.overflowX),w<_&&("auto"===C.overflowY||"scroll"===C.overflowY||"visible"===C.overflowY)):(E=y<S&&("auto"===C.overflowX||"scroll"===C.overflowX),w<_&&("auto"===C.overflowY||"scroll"===C.overflowY)),T=E&&(Math.abs(b-r)<=l&&T+y<S)-(Math.abs(v-r)<=l&&!!T),p=D&&(Math.abs(m-a)<=l&&p+w<_)-(Math.abs(g-a)<=l&&!!p);if(!$t[d])for(var x=0;x<=d;x++)$t[x]||($t[x]={});$t[d].vx==T&&$t[d].vy==p&&$t[d].el===f||($t[d].el=f,$t[d].vx=T,$t[d].vy=p,clearInterval($t[d].pid),0==T&&0==p||(u=!0,$t[d].pid=setInterval(function(){o&&0===this.layer&&Ft.active._onTouchMove(Vt);var t=$t[this.layer].vy?$t[this.layer].vy*s:0,e=$t[this.layer].vx?$t[this.layer].vx*s:0;"function"==typeof i&&"continue"!==i.call(Ft.dragged.parentNode[K],e,t,n,Vt,$t[this.layer].el)||H($t[this.layer].el,e,t)}.bind({layer:d}),24))),d++}while(t.bubbleScroll&&h!==c&&(h=M(h,!1)));Qt=u}},30),c=function(t){var e=t.originalEvent,n=t.putSortable,o=t.dragEl,i=t.activeSortable,r=t.dispatchSortableEvent,a=t.hideGhostForTarget,t=t.unhideGhostForTarget;e&&(i=n||i,a(),e=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e,e=document.elementFromPoint(e.clientX,e.clientY),t(),i&&!i.el.contains(e)&&(r("spill"),this.onSpill({dragEl:o,putSortable:n})))};function oe(){}function ie(){}oe.prototype={startIndex:null,dragStart:function(t){t=t.oldDraggableIndex;this.startIndex=t},onSpill:function(t){var e=t.dragEl,n=t.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();t=B(this.sortable.el,this.startIndex,this.options);t?this.sortable.el.insertBefore(e,t):this.sortable.el.appendChild(e),this.sortable.animateAll(),n&&n.animateAll()},drop:c},a(oe,{pluginName:"revertOnSpill"}),ie.prototype={onSpill:function(t){var e=t.dragEl,t=t.putSortable||this.sortable;t.captureAnimationState(),e.parentNode&&e.parentNode.removeChild(e),t.animateAll()},drop:c},a(ie,{pluginName:"removeOnSpill"});var re,ae,le,se,ce,ue=[],de=[],he=!1,fe=!1,pe=!1;function ge(n,o){de.forEach(function(t,e){e=o.children[t.sortableIndex+(n?Number(e):0)];e?o.insertBefore(t,e):o.appendChild(t)})}function me(){ue.forEach(function(t){t!==le&&t.parentNode&&t.parentNode.removeChild(t)})}return Ft.mount(new function(){function t(){for(var t in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this))}return t.prototype={dragStarted:function(t){t=t.originalEvent;this.sortable.nativeDraggable?h(document,"dragover",this._handleAutoScroll):this.options.supportPointer?h(document,"pointermove",this._handleFallbackAutoScroll):t.touches?h(document,"touchmove",this._handleFallbackAutoScroll):h(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(t){t=t.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?f(document,"dragover",this._handleAutoScroll):(f(document,"pointermove",this._handleFallbackAutoScroll),f(document,"touchmove",this._handleFallbackAutoScroll),f(document,"mousemove",this._handleFallbackAutoScroll)),te(),Jt(),clearTimeout(g),g=void 0},nulling:function(){Vt=Gt=zt=Qt=Zt=Ut=qt=null,$t.length=0},_handleFallbackAutoScroll:function(t){this._handleAutoScroll(t,!0)},_handleAutoScroll:function(e,n){var o,i=this,r=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,t=document.elementFromPoint(r,a);Vt=e,n||this.options.forceAutoScrollFallback||w||y||u?(ne(e,this.options,t,n),o=M(t,!0),!Qt||Zt&&r===Ut&&a===qt||(Zt&&te(),Zt=setInterval(function(){var t=M(document.elementFromPoint(r,a),!0);t!==o&&(o=t,Jt()),ne(e,i.options,t,n)},10),Ut=r,qt=a)):this.options.bubbleScroll&&M(t,!0)!==O()?ne(e,this.options,M(t,!1),!1):Jt()}},a(t,{pluginName:"scroll",initializeByDefault:!0})}),Ft.mount(ie,oe),Ft.mount(new function(){function t(){this.defaults={swapClass:"sortable-swap-highlight"}}return t.prototype={dragStart:function(t){t=t.dragEl;ee=t},dragOverValid:function(t){var e=t.completed,n=t.target,o=t.onMove,i=t.activeSortable,r=t.changed,a=t.cancel;i.options.swap&&(t=this.sortable.el,i=this.options,n&&n!==t&&(t=ee,ee=!1!==o(n)?(k(n,i.swapClass,!0),n):null,t&&t!==ee&&k(t,i.swapClass,!1)),r(),e(!0),a())},drop:function(t){var e,n,o=t.activeSortable,i=t.putSortable,r=t.dragEl,a=i||this.sortable,l=this.options;ee&&k(ee,l.swapClass,!1),ee&&(l.swap||i&&i.options.swap)&&r!==ee&&(a.captureAnimationState(),a!==o&&o.captureAnimationState(),n=ee,t=(e=r).parentNode,l=n.parentNode,t&&l&&!t.isEqualNode(n)&&!l.isEqualNode(e)&&(i=j(e),r=j(n),t.isEqualNode(l)&&i<r&&r++,t.insertBefore(n,t.children[i]),l.insertBefore(e,l.children[r])),a.animateAll(),a!==o&&o.animateAll())},nulling:function(){ee=null}},a(t,{pluginName:"swap",eventProperties:function(){return{swapItem:ee}}})}),Ft.mount(new function(){function t(o){for(var t in this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this));o.options.avoidImplicitDeselect||(o.options.supportPointer?h(document,"pointerup",this._deselectMultiDrag):(h(document,"mouseup",this._deselectMultiDrag),h(document,"touchend",this._deselectMultiDrag))),h(document,"keydown",this._checkKeyDown),h(document,"keyup",this._checkKeyUp),this.defaults={selectedClass:"sortable-selected",multiDragKey:null,avoidImplicitDeselect:!1,setData:function(t,e){var n="";ue.length&&ae===o?ue.forEach(function(t,e){n+=(e?", ":"")+t.textContent}):n=e.textContent,t.setData("Text",n)}}}return t.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal:function(t){t=t.dragEl;le=t},delayEnded:function(){this.isMultiDrag=~ue.indexOf(le)},setupClone:function(t){var e=t.sortable,t=t.cancel;if(this.isMultiDrag){for(var n=0;n<ue.length;n++)de.push(_(ue[n])),de[n].sortableIndex=ue[n].sortableIndex,de[n].draggable=!1,de[n].style["will-change"]="",k(de[n],this.options.selectedClass,!1),ue[n]===le&&k(de[n],this.options.chosenClass,!1);e._hideClone(),t()}},clone:function(t){var e=t.sortable,n=t.rootEl,o=t.dispatchSortableEvent,t=t.cancel;this.isMultiDrag&&(this.options.removeCloneOnHide||ue.length&&ae===e&&(ge(!0,n),o("clone"),t()))},showClone:function(t){var e=t.cloneNowShown,n=t.rootEl,t=t.cancel;this.isMultiDrag&&(ge(!1,n),de.forEach(function(t){R(t,"display","")}),e(),ce=!1,t())},hideClone:function(t){var e=this,n=(t.sortable,t.cloneNowHidden),t=t.cancel;this.isMultiDrag&&(de.forEach(function(t){R(t,"display","none"),e.options.removeCloneOnHide&&t.parentNode&&t.parentNode.removeChild(t)}),n(),ce=!0,t())},dragStartGlobal:function(t){t.sortable;!this.isMultiDrag&&ae&&ae.multiDrag._deselectMultiDrag(),ue.forEach(function(t){t.sortableIndex=j(t)}),ue=ue.sort(function(t,e){return t.sortableIndex-e.sortableIndex}),pe=!0},dragStarted:function(t){var e,n=this,t=t.sortable;this.isMultiDrag&&(this.options.sort&&(t.captureAnimationState(),this.options.animation&&(ue.forEach(function(t){t!==le&&R(t,"position","absolute")}),e=X(le,!1,!0,!0),ue.forEach(function(t){t!==le&&C(t,e)}),he=fe=!0)),t.animateAll(function(){he=fe=!1,n.options.animation&&ue.forEach(function(t){T(t)}),n.options.sort&&me()}))},dragOver:function(t){var e=t.target,n=t.completed,t=t.cancel;fe&&~ue.indexOf(e)&&(n(!1),t())},revert:function(t){var n,o,e=t.fromSortable,i=t.rootEl,r=t.sortable,a=t.dragRect;1<ue.length&&(ue.forEach(function(t){r.addAnimationState({target:t,rect:fe?X(t):a}),T(t),t.fromRect=a,e.removeAnimationState(t)}),fe=!1,n=!this.options.removeCloneOnHide,o=i,ue.forEach(function(t,e){e=o.children[t.sortableIndex+(n?Number(e):0)];e?o.insertBefore(t,e):o.appendChild(t)}))},dragOverCompleted:function(t){var e,n=t.sortable,o=t.isOwner,i=t.insertion,r=t.activeSortable,a=t.parentEl,l=t.putSortable,t=this.options;i&&(o&&r._hideClone(),he=!1,t.animation&&1<ue.length&&(fe||!o&&!r.options.sort&&!l)&&(e=X(le,!1,!0,!0),ue.forEach(function(t){t!==le&&(C(t,e),a.appendChild(t))}),fe=!0),o||(fe||me(),1<ue.length?(o=ce,r._showClone(n),r.options.animation&&!ce&&o&&de.forEach(function(t){r.addAnimationState({target:t,rect:se}),t.fromRect=se,t.thisAnimationDuration=null})):r._showClone(n)))},dragOverAnimationCapture:function(t){var e=t.dragRect,n=t.isOwner,t=t.activeSortable;ue.forEach(function(t){t.thisAnimationDuration=null}),t.options.animation&&!n&&t.multiDrag.isMultiDrag&&(se=a({},e),e=v(le,!0),se.top-=e.f,se.left-=e.e)},dragOverAnimationComplete:function(){fe&&(fe=!1,me())},drop:function(t){var e=t.originalEvent,n=t.rootEl,o=t.parentEl,i=t.sortable,r=t.dispatchSortableEvent,a=t.oldIndex,l=t.putSortable,s=l||this.sortable;if(e){var c,u,d,h=this.options,f=o.children;if(!pe)if(h.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),k(le,h.selectedClass,!~ue.indexOf(le)),~ue.indexOf(le))ue.splice(ue.indexOf(le),1),re=null,z({sortable:i,rootEl:n,name:"deselect",targetEl:le,originalEvent:e});else{if(ue.push(le),z({sortable:i,rootEl:n,name:"select",targetEl:le,originalEvent:e}),e.shiftKey&&re&&i.el.contains(re)){var p=j(re),t=j(le);if(~p&&~t&&p!==t)for(var g,m=p<t?(g=p,t):(g=t,p+1);g<m;g++)~ue.indexOf(f[g])||(k(f[g],h.selectedClass,!0),ue.push(f[g]),z({sortable:i,rootEl:n,name:"select",targetEl:f[g],originalEvent:e}))}else re=le;ae=s}pe&&this.isMultiDrag&&(fe=!1,(o[K].options.sort||o!==n)&&1<ue.length&&(c=X(le),u=j(le,":not(."+this.options.selectedClass+")"),!he&&h.animation&&(le.thisAnimationDuration=null),s.captureAnimationState(),he||(h.animation&&(le.fromRect=c,ue.forEach(function(t){var e;t.thisAnimationDuration=null,t!==le&&(e=fe?X(t):c,t.fromRect=e,s.addAnimationState({target:t,rect:e}))})),me(),ue.forEach(function(t){f[u]?o.insertBefore(t,f[u]):o.appendChild(t),u++}),a===j(le)&&(d=!1,ue.forEach(function(t){t.sortableIndex!==j(t)&&(d=!0)}),d&&(r("update"),r("sort")))),ue.forEach(function(t){T(t)}),s.animateAll()),ae=s),(n===o||l&&"clone"!==l.lastPutMode)&&de.forEach(function(t){t.parentNode&&t.parentNode.removeChild(t)})}},nullingGlobal:function(){this.isMultiDrag=pe=!1,de.length=0},destroyGlobal:function(){this._deselectMultiDrag(),f(document,"pointerup",this._deselectMultiDrag),f(document,"mouseup",this._deselectMultiDrag),f(document,"touchend",this._deselectMultiDrag),f(document,"keydown",this._checkKeyDown),f(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(t){if(!(void 0!==pe&&pe||ae!==this.sortable||t&&P(t.target,this.options.draggable,this.sortable.el,!1)||t&&0!==t.button))for(;ue.length;){var e=ue[0];k(e,this.options.selectedClass,!1),ue.shift(),z({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:e,originalEvent:t})}},_checkKeyDown:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},a(t,{pluginName:"multiDrag",utils:{select:function(t){var e=t.parentNode[K];e&&e.options.multiDrag&&!~ue.indexOf(t)&&(ae&&ae!==e&&(ae.multiDrag._deselectMultiDrag(),ae=e),k(t,e.options.selectedClass,!0),ue.push(t))},deselect:function(t){var e=t.parentNode[K],n=ue.indexOf(t);e&&e.options.multiDrag&&~n&&(k(t,e.options.selectedClass,!1),ue.splice(n,1))}},eventProperties:function(){var n=this,o=[],i=[];return ue.forEach(function(t){var e;o.push({multiDragElement:t,index:t.sortableIndex}),e=fe&&t!==le?-1:fe?j(t,":not(."+n.options.selectedClass+")"):j(t),i.push({multiDragElement:t,index:e})}),{items:r(ue),clones:[].concat(de),oldIndicies:o,newIndicies:i}},optionListeners:{multiDragKey:function(t){return"ctrl"===(t=t.toLowerCase())?t="Control":1<t.length&&(t=t.charAt(0).toUpperCase()+t.substr(1)),t}}})}),Ft});
4709
4710// final JS calls after everything has been loaded
4711document.dispatchEvent( new CustomEvent('events_manager_js_loaded') );
4712//# sourceMappingURL=events-manager.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.