PageSourceSearch

https://wp.bearessentialnews.com/wp-content/plugins/events-manager/includes/js/events-manager.js?ver=7.2.1

js bearessentialnews.com collected 2026-10-03 19:58:59 UTC 429,681 bytes, 4,615 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	// trigger selectize loader
340	em_setup_ui_elements(document);
341
342	/* Done! */
343	$(document).triggerHandler('em_javascript_loaded');
344});
345
346/**
347 * 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..
348 * @param jQuery|DOMElement container
349 */
350function em_setup_ui_elements ( $container ) {
351	let container = ( $container instanceof jQuery ) ? $container[0] : $container;
352	// Selectize
353	em_setup_selectize( $container );
354	// Tippy
355	em_setup_tippy( $container );
356	// Moment JS
357	em_setup_moment_times( $container );
358	// Date & Time Pickers
359	if( container.querySelector('.em-datepicker') ){
360		em_setup_datepicker( container );
361	}
362	if( container.querySelector(".em-time-input") ){
363		em_setup_timepicker( container );
364	}
365	// Phone numbers
366	em_setup_phone_inputs( container );
367	// let other things hook in
368	document.dispatchEvent( new CustomEvent( 'em_setup_ui_elements', { detail: { container : container } } ) );
369}
370
371/**
372 * Unsetup containers with UI elements, primarily useful if intending on duplicating an element which would require re-setup.
373 * @param $container
374 */
375function em_unsetup_ui_elements( $container ) {
376	let container = $container instanceof jQuery ? $container[0] : $container;
377	em_unsetup_selectize( container );
378	em_unsetup_tippy( container );
379	em_unsetup_datepicker( container );
380	em_unsetup_timepicker( container );
381	em_unsetup_phone_inputs( container );
382	// let other things hook in
383	document.dispatchEvent( new CustomEvent( 'em_unsetup_ui_elements', { detail: { container : container } } ) );
384}
385
386/* Local JS Timezone related placeholders */
387/* Moment JS Timzeone PH */
388function em_setup_moment_times( container_element ) {
389	container = jQuery(container_element);
390	if( window.moment ){
391		var replace_specials = function( day, string ){
392			// replace things not supported by moment
393			string = string.replace(/##T/g, Intl.DateTimeFormat().resolvedOptions().timeZone);
394			string = string.replace(/#T/g, "GMT"+day.format('Z'));
395			string = string.replace(/###t/g, day.utcOffset()*-60);
396			string = string.replace(/##t/g, day.isDST());
397			string = string.replace(/#t/g, day.daysInMonth());
398			return string;
399		};
400		container.find('.em-date-momentjs').each( function(){
401			// Start Date
402			var el = jQuery(this);
403			var day_start = moment.unix(el.data('date-start'));
404			var date_start_string = replace_specials(day_start, day_start.format(el.data('date-format')));
405			if( el.data('date-start') !== el.data('date-end') ){
406				// End Date
407				var day_end = moment.unix(el.data('date-end'));
408				var day_end_string = replace_specials(day_start, day_end.format(el.data('date-format')));
409				// Output
410				var date_string = date_start_string + el.data('date-separator') + day_end_string;
411			}else{
412				var date_string = date_start_string;
413			}
414			el.text(date_string);
415		});
416		var get_date_string = function(ts, format){
417			let date = new Date(ts * 1000);
418			let minutes = date.getMinutes();
419			if( format == 24 ){
420				let hours = date.getHours();
421				hours = hours < 10 ? '0' + hours : hours;
422				minutes = minutes < 10 ? '0' + minutes : minutes;
423				return hours + ':' + minutes;
424			}else{
425				let hours = date.getHours() % 12;
426				let ampm = hours >= 12 ? 'PM' : 'AM';
427				if( hours === 0 ) hours = 12; // the hour '0' should be '12'
428				minutes = minutes < 10 ? '0'+minutes : minutes;
429				return hours + ':' + minutes + ' ' + ampm;
430			}
431		}
432		container.find('.em-time-localjs').each( function(){
433			var el = jQuery(this);
434			var strTime = get_date_string( el.data('time'), el.data('time-format') );
435			if( el.data('time-end') ){
436				var separator = el.data('time-separator') ? el.data('time-separator') : ' - ';
437				strTime = strTime + separator + get_date_string( el.data('time-end'), el.data('time-format') );
438			}
439			el.text(strTime);
440		});
441	}
442};
443
444function em_load_jquery_css( wrapper = false ){
445	if( EM.ui_css && jQuery('link#jquery-ui-em-css').length == 0 ){
446		var script = document.createElement("link");
447		script.id = 'jquery-ui-em-css';
448		script.rel = "stylesheet";
449		script.href = EM.ui_css;
450		document.body.appendChild(script);
451		if( wrapper ){
452			em_setup_jquery_ui_wrapper();
453		}
454	}
455}
456
457function em_setup_jquery_ui_wrapper(){
458	if( jQuery('#em-jquery-ui').length === 0 ){
459		jQuery('body').append('<div id="em-jquery-ui" class="em">');
460	}
461}
462
463/* Useful function for adding the em_ajax flag to a url, regardless of querystring format */
464var em_ajaxify = function(url){
465	if ( url.search('em_ajax=0') != -1){
466		url = url.replace('em_ajax=0','em_ajax=1');
467	}else if( url.search(/\?/) != -1 ){
468		url = url + "&em_ajax=1";
469	}else{
470		url = url + "?em_ajax=1";
471	}
472	return url;
473};
474
475// load externals after DOM load, supplied by EM.assets, only if selector matches
476var em_setup_scripts = function( $container = false ) {
477	let container = $container || document;
478	if( EM && 'assets' in EM ) {
479		let baseURL = EM.url + '/includes/external/';
480		for ( const [selector, assets] of Object.entries(EM.assets) ) {
481			// load scripts if one element exists for selector
482			if ( container.querySelector(selector) ) {
483				if ('css' in assets) {
484					// Iterate through assets.css object and add stylesheet to head
485					for (const [id, value] of Object.entries(assets.css)) {
486						// Check if the stylesheet with the given ID already exists
487						if (!document.getElementById( id + '-css' )) {
488							// Create a new link element for the stylesheet
489							const link = document.createElement('link');
490							link.id = id + '-css';
491							link.rel = 'stylesheet';
492							link.href = value.match(/^http/) ? value : baseURL + value;
493
494							// Append the stylesheet to the document head
495							document.head.appendChild(link);
496						}
497					}
498				}
499				if ('js' in assets) {
500					// add a tracking of all assets to load, and execute loaded hooks after all assets are loaded and in order of dependence
501					let loaded = {};
502					let loadedListener = function( id ) {
503						loaded[id] = false;
504						if ( Object.entries( loaded ).length === Object.entries( assets.js ).length ) {
505							// all items for this asset loaded, so we go through all the entries and fire their events
506							for ( id of Object.keys( loaded ) ) {
507								loadAsset( id )
508							}
509						}
510					};
511					let loadAsset = function( id ) {
512						if ( !loaded[id] ) {
513							let asset = assets.js[id];
514							if ( typeof asset === 'object' && 'event' in asset ) {
515								if ( asset?.requires) {
516									loadAsset( asset.requires );
517								}
518								document.dispatchEvent( new CustomEvent( asset.event, {
519									detail: {
520										container: container,
521									}
522								} ) );
523							}
524							loaded[id] = true;
525						}
526					};
527					// Iterate through assets.js object and add script to head
528					for ( const [ id, value ] of Object.entries(assets.js)) {
529						// Check if the script with the given ID already exists
530						if ( !document.getElementById( id + '-js' ) ) {
531							// Create a new script element for the JavaScript file
532							const script = document.createElement('script');
533							script.id = id + '-js';
534							script.async = true;
535							if ( typeof value === 'object' ) {
536								// add locale data
537								if ( 'locale' in value && value.locale ) {
538									script.dataset.locale = value.locale;
539								}
540								script.src = value.url.match(/^http/g) ? value.url : baseURL + value.url;
541							} else {
542								script.src = value.match(/^http/g) ? value : baseURL + value;
543							}
544							// listen for loads so we execute the real onload hooks once all files are loaded (or errorred out)
545							script.onload = () => loadedListener(id);
546							script.onerror = () => loadedListener(id);
547							// Append the script to the document head
548							document.head.appendChild(script);
549						}
550					}
551				}
552			}
553		}
554	}
555}
556document.addEventListener('DOMContentLoaded', () => em_setup_scripts( document ));
557
558// WP List Tables front-end stuff
559const setupListTable = function( listTable ) {
560	// handle checks of multiple items using shift
561	const checkboxes = listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]' );
562	const listTableForm = listTable.querySelector('form.em-list-table-form');
563	let lastChecked;
564
565	//Pagination link clicks
566	listTable.querySelectorAll('.tablenav-pages a').forEach( el => {
567		el.addEventListener('click', function ( e ) {
568			e.preventDefault();
569			//get page no from url, change page, submit form
570			let match = el.href.match(/#[0-9]+/);
571			if ( match != null && match.length > 0 ) {
572				let pno = match[0].replace('#', '');
573				listTableForm.querySelector('input[name=pno]').val(pno);
574			} else {
575				// new way
576				let url = new URL(el.href);
577				if ( url.searchParams.has('paged') ) {
578					listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = url.searchParams.get('paged') );
579				} else {
580					listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = 1 );
581				}
582			}
583			listTableForm.requestSubmit();
584			return false;
585		});
586	});
587	// Pagination - Input page number
588	listTable.querySelectorAll('.tablenav-pages input[name=paged]').forEach( function ( input ){
589		input.addEventListener('change', function (e) {
590			e.preventDefault();
591			let last = listTableForm.querySelector('.tablenav-pages a.last-page');
592			if ( last ) {
593				// check val isn't more than last page
594				let url = new URL(last.href);
595				if ( url.searchParams.has('paged') ) {
596					let lastPage = parseInt(url.searchParams.get('paged'));
597					if ( parseInt(input.value) > lastPage ) {
598						input.value = lastPage;
599					}
600				}
601			} else {
602				// make sure it's less than current page, we're on last page already
603				let lastPage = listTableForm.querySelector('input[name=pno]');
604				if (lastPage && lastPage.value && parseInt(input.value) > parseInt(lastPage.value)) {
605					input.value = lastPage.value;
606					e.preventDefault();
607					return false;
608				}
609			}
610			listTableForm.querySelectorAll('input[name=pno]').forEach( el => el.value = input.value );
611			listTableForm.requestSubmit();
612			return false;
613		});
614	});
615
616	// handle checkboxes
617	listTable.addEventListener('click', function(e){
618		// handle selecting all checkboxes
619		if( e.target.matches('.manage-column.column-cb input') ){
620			listTable.querySelectorAll('.check-column input').forEach( function( checkbox ){
621				checkbox.checked = e.target.checked;
622				checkbox.closest('tr').classList.toggle('selected', e.target.checked);
623				// enable/disable bulk actions filter
624				listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){
625					e.target.checked ? el.removeAttribute('disabled') : el.setAttribute('disabled', true);
626					e.target.checked ? el.classList.remove('disabled') : el.classList.add('disabled', true);
627				});
628			});
629		} else if ( e.target.matches('tbody .check-column input[type="checkbox"]') ) {
630			// handle multiple checks
631			let inBetween = false;
632			if ( e.shiftKey ) {
633				checkboxes.forEach(checkbox => {
634					if ( checkbox === e.target || checkbox === lastChecked ) {
635						inBetween = !inBetween;
636					}
637					if ( inBetween || checkbox === lastChecked ) {
638						checkbox.checked = lastChecked.checked;
639					}
640					checkbox.closest('tr').classList.toggle('selected', checkbox.checked);
641				});
642			} else {
643				e.target.closest('tr').classList.toggle('selected', e.target.checked);
644			}
645			// enable/disable bulk actions filter
646			let somethingSelected = e.target.checked || listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]:checked' ).length > 0;
647			listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){
648				somethingSelected ? el.removeAttribute('disabled') : el.setAttribute('disabled', true);
649				somethingSelected ? el.classList.remove('disabled') : el.classList.add('disabled', true);
650			});
651			lastChecked = e.target;
652		} else if ( e.target.closest('tbody td.column-primary') ) {
653			// handle row expand/collapse
654			if ( e.target.matches('a[href],button:not(.toggle-row)') ) return true; // allow links to pass
655			e.preventDefault();
656			let rowExpandTrigger = e.target.closest('td.column-primary');
657			let row = rowExpandTrigger.closest('tr');
658			if( row.classList.contains('expanded') ) {
659				row.classList.remove('expanded');
660				row.classList.add('collapsed');
661				rowExpandTrigger.querySelector('button.toggle-row').classList.remove('expanded');
662			} else {
663				row.classList.add('expanded');
664				row.classList.remove('collapsed');
665				rowExpandTrigger.querySelector('button.toggle-row').classList.add('expanded');
666			}
667		}
668	});
669	// disable filter since no checkboxes initially selected
670	listTable.querySelectorAll('.tablenav .bulkactions-input').forEach( (el) => {
671		el.querySelectorAll('input,select,button').forEach(function (el) {
672			el.setAttribute('disabled', true);
673			el.classList.add('disabled', true);
674		})
675	});
676
677	// Sorting by headers
678	listTable.querySelector('thead').addEventListener('click', function( e ) {
679		// get th element
680		let th = e.target.tagName.toLowerCase() === 'th' ? e.target : e.target.closest('th');
681		if( th && (th.classList.contains('sorted') || th.classList.contains('sortable')) ) {
682			e.preventDefault();
683			// add args to form and submit it
684			let params = ( new URL( th.querySelector('a').href) ).searchParams;
685			if ( params.get('orderby') ) {
686				listTableForm.querySelector('input[name="orderby"]').value = params.get('orderby');
687				let order = params.get('order') ? params.get('order') : 'asc';
688				listTableForm.querySelector('input[name="order"]').value = order;
689				listTableForm.requestSubmit();
690			}
691		}
692	});
693
694	// show/hide filters trigger
695	let filterTrigger = listTable.querySelector('button.filters-trigger');
696	if( filterTrigger ) {
697		filterTrigger.addEventListener('click', function(e){
698			e.preventDefault();
699			if( filterTrigger.classList.contains('hidden') ) {
700				listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.remove('hidden') );
701				filterTrigger.classList.remove('hidden');
702				filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelHide);
703				if( '_tippy' in filterTrigger ){
704					filterTrigger._tippy.setContent( filterTrigger.dataset.labelHide );
705				}
706			} else {
707				listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.add('hidden') );
708				filterTrigger.classList.add('hidden');
709				filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelShow);
710				if( '_tippy' in filterTrigger ){
711					filterTrigger._tippy.setContent( filterTrigger.dataset.labelShow );
712				}
713			}
714		});
715		listTable.addEventListener('em_resize', function(){
716			if( listTable.classList.contains('size-small') ) {
717				filterTrigger.classList.remove('hidden'); // force hide click
718				filterTrigger.click();
719			}
720		});
721	}
722
723	// EXPAND/COLLAPSE - RESPONSIVE
724	// handle expand/collapse in responsive mode when clicking the expand/collapse (all)
725	let expandTrigger = listTable.querySelector('button.small-expand-trigger');
726	if( expandTrigger ) {
727		// detect click and add expand class to table, expanded class to trigger
728		expandTrigger.addEventListener('click', function(e){
729			e.preventDefault();
730			if( expandTrigger.classList.contains('expanded') ) {
731				listTable.querySelectorAll('tbody tr.expanded, tbody button.toggle-row.expanded').forEach( el => el.classList.remove('expanded') );
732				listTable.classList.remove('expanded');
733				expandTrigger.classList.remove('expanded');
734			} else {
735				listTable.querySelectorAll('tbody tr, tbody button.toggle-row').forEach( el => {
736					el.classList.add('expanded');
737					el.classList.remove('collapsed');
738				});
739				listTable.classList.add('expanded');
740				expandTrigger.classList.add('expanded');
741			}
742		});
743	}
744
745	// handle filters when pressing enter, submitting a search
746	listTable.querySelectorAll('.tablenav .actions input[type="text"]').forEach( function (input) {
747		input.addEventListener('keypress', function (e) {
748			let keycode = (e.keyCode ? e.keyCode : e.which);
749			if (keycode === 13) {
750				e.preventDefault();
751				listTableForm.requestSubmit();
752			}
753		});
754	});
755
756	// handle size breakpoints
757	let breakpoints = {
758		'xsmall' : 465,
759		'small' : 640,
760		'medium' : 930,
761		'large' : false,
762	}
763	// submissions
764	EM_ResizeObserver( breakpoints, [ listTable ] );
765
766	//Widgets and filter submissions
767	listTableForm.addEventListener('submit', function (e) {
768		e.preventDefault();
769		//append loading spinner
770		listTable.classList.add('em-working');
771		let loadingDiv = document.createElement('div');
772		loadingDiv.id = 'em-loading';
773		listTable.append(loadingDiv);
774		listTable.querySelectorAll('.em-list-table-error-notice').forEach( el => el.remove() );
775		//ajax call
776		fetch( EM.ajaxurl, { method: 'POST', body: new FormData(listTableForm) } ).then( function( response ) {
777			if ( response.ok ) {
778				return response.text();
779			} else {
780				throw new Error('Network Response ' + response.status);
781			}
782		}).then( function( data ) {
783			if ( !data ) {
784				throw new Error('Empty string received');
785			}
786			if (!listTable.classList.contains('frontend')) {
787				// remove modals as they are supplied again on the backend
788				listTableForm.querySelectorAll('.em-list-table-trigger').forEach(function ( trigger ) {
789					let modal = document.querySelector(trigger.rel);
790					if( modal ) {
791						modal.remove();
792					}
793				});
794			}
795			// get new data as DOM object
796			let wrapper = document.createElement('div');
797			wrapper.innerHTML = data;
798			let newListTable = wrapper.firstElementChild;
799			// replace old table with new table
800			listTable.replaceWith( newListTable );
801			// 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!
802			document.dispatchEvent( new CustomEvent('em_list_table_filtered', { detail: { prevListTable: listTable, listTable: newListTable, form: newListTable.firstElementChild, data: data } }) );
803		}).catch( function( error ) {
804			let div = document.createElement('div');
805			div.innerHTML = '<p>There was an unexpected error retrieving table data with error <code>' + error.message + '</code>
805, please try again or contact an administrator.</p>';
806			div.setAttribute('class', 'em-warning error em-list-table-error-notice');
807			listTable.querySelector('.table-wrap').before(div);
808			loadingDiv.remove();
809			listTable.classList.remove('em-working');
810		});
811		return false;
812	});
813
814	//Settings & Export Modal
815
816	/**
817	 * Handle trigger of settings and export modals.
818	 */
819	listTable.querySelectorAll('.em-list-table-trigger').forEach( trigger => {
820		trigger.addEventListener('click', function (e) {
821			e.preventDefault();
822			let modal = document.querySelector( trigger.getAttribute('rel') );
823			openModal(modal);
824		});
825	});
826
827	/**
828	 * Handle submission of settings forms, by copying over hidden input values such as cols and limit to main form.
829	 */
830	listTable.querySelectorAll('.em-list-table-settings form').forEach( form => {
831		form.addEventListener('submit', function (e) {
832			e.preventDefault();
833			//we know we'll deal with cols, so wipe hidden value from main
834			let modal = form.closest('.em-modal');
835			let match = listTableForm.querySelector("[name=cols]");
836			match.value = '';
837			let tableCols = form.querySelectorAll('.em-list-table-cols-selected .item');
838			tableCols.forEach( function (item_match) {
839				if (!item_match.classList.contains('hidden')) {
840					if (match.value !== '') {
841						match.value = match.value + ',' + item_match.getAttribute('data-value');
842					} else {
843						match.value = item_match.getAttribute('data-value');
844					}
845				}
846			});
847			// sync row count
848			let limit = form.querySelector('select[name="limit"]');
849			if( limit ) {
850				listTableForm.querySelector('[name="limit"]').value = limit.value;
851			}
852			// sync custom inputs
853			form.querySelectorAll('[data-setting]').forEach( function( input ) {
854				listTableForm.querySelectorAll('[name="'+input.name+'"]').forEach( el => el.remove() );
855				let persisted = input.cloneNode(true);
856				persisted.classList.add('hidden')
857				listTableForm.appendChild( persisted );
858			});
859			closeModal(modal);
860			// send events out
861			modal.dispatchEvent( new CustomEvent('submitted') );
862			listTable.dispatchEvent( new CustomEvent( 'em_list_table_settings_submitted', {
863				detail: {
864					listTableForm: listTableForm,
865					form: form,
866					modal: modal
867				},
868				bubbles: true
869			}) );
870			// submit main form
871			listTableForm.requestSubmit();
872		});
873	});
874
875	/**
876	 * Handle submission of export forms, by copying over filters and hidden inputs with the data-persist attribute from main list table form.
877	 */
878	listTable.querySelectorAll('.em-list-table-export > form').forEach( function( exportForm ) {
879		exportForm.addEventListener('submit', function(e) {
880			var formFilters = this.querySelector('.em-list-table-filters');
881			if ( formFilters ) {
882				// get all filter inputs in main list table form and copy over so export inherits all filters to output right results
883				let filters = listTableForm.querySelectorAll('.em-list-table-filters [name]');
884				formFilters.innerHTML = ''; // Empty the filters, none to copy over
885				if( filters ) {
886					filters.forEach( function( filter ) {
887						formFilters.appendChild( filter.cloneNode(true) );
888					});
889				}
890				let peristentData = listTableForm.querySelectorAll('[data-persist]');
891				if( peristentData ) {
892					peristentData.forEach( function( filter ) {
893						formFilters.appendChild( filter.cloneNode(true) );
894					});
895				}
896			}
897		});
898	});
899
900	// sortables
901	listTable.querySelectorAll(".em-list-table-cols-sortable").forEach( function(sortable) {
902		Sortable.create( sortable );
903	});
904
905	// add trigger
906	document.dispatchEvent( new CustomEvent('em_list_table_setup', { detail: { listTable: listTable, listTableForm: listTableForm } }) );
907
908	// add extra listeners that we might want to block such as in bulk actions and row actions
909
910	/* ----------------- Row/Bulk Action Handlers ----------------- */
911
912	const actionMessages = JSON.parse( listTableForm.dataset.actionMessages );
913	let isBulkAction = false;
914
915	listTable.addEventListener('click', function( e ) {
916		if( e.target.matches('a[data-row_action]') ) {
917			e.preventDefault();
918			let el = e.target;
919			let tr = el.closest('tr');
920
921			if( !isBulkAction ) {
922				let confirmation = []
923				// check if we need to confirm something specific
924				if ( el.dataset.confirmation && el.dataset.confirmation in actionMessages ) {
925					confirmation.push( actionMessages[el.dataset.confirmation] );
926				}
927				// check context of action and warn then propagate if upstream
928				if ( el.dataset.row_action in actionMessages ) {
929					confirmation.push( actionMessages[el.dataset.row_action] );
930				}
931
932				if ( confirmation.length > 0 ) {
933					if ( !confirm( confirmation.join("\n\n") ) ) {
934						return false;
935					}
936				}
937			}
938
939			// close dropdown if applicable
940			let dropdown = el.closest('[data-tippy-root], .em-tooltip-ddm-content');
941			if ( dropdown ) {
942				if ( '_tippy' in dropdown ) {
943					dropdown._tippy.hide();
944				}
945			}
946
947			// 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
948			if( el.dataset.upstream ) {
949				// block any same upstream_id row so it's loading already pending refresh
950				listTable.querySelectorAll('tr[data-id="' + tr.dataset.id + '"]').forEach( tr => tr.classList.add('loading') );
951			}
952
953			// prep and fetch/refresh
954			let formData = new FormData( listTableForm );
955			for( const [key, value] of Object.entries(el.dataset) ) {
956				formData.set(key, value);
957			}
958			formData.set('view', listTable.dataset.view);
959			formData.set('action', listTable.dataset.basename + '_row');
960			listTableRowAction( tr, formData );
961
962			return false; // stop propagation
963		}
964	});
965
966	// Action links (approve/reject etc.) - circumvent if a warning is required
967	listTable.addEventListener( 'click', function( e ) {
968		if( e.target.matches('a[data-row_action]') ) {
969			e.preventDefault();
970		}
971	});
972
973	listTable.querySelectorAll('button.em-list-table-bulk-action').forEach( function( button ) {
974		button.addEventListener('click', function (e) {
975			e.preventDefault(); // override default
976			let actionSelector = listTableForm.querySelector('select.bulk-action-selector');
977			let action = actionSelector.options[actionSelector.selectedIndex];
978			
979			// check if we need to confirm
980			if ( action.dataset.confirm ) {
981				if ( !confirm( action.dataset.confirm ) ) {
982					isBulkAction = false; // just in case
983					return false;
984				}
985			}
986
987			isBulkAction = true;
988			// 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)
989			let rows = listTableForm.querySelectorAll('tbody .check-column input:checked');
990			rows.forEach( function ( checkbox ) {
991				let actionTrigger = checkbox.parentElement.querySelector('[data-row_action="' + action.value + '"]');
992				// check if sibling has the relevant action
993				if( actionTrigger ) {
994					let tr = checkbox.closest('tr');
995					if ( actionTrigger.dataset.upstream ) {
996						// check if not already in an upstream process, proceed if not
997						if ( !tr.classList.contains('loading') ) { // if loading, already in upstream from another row
998							// trigger the first booking id row in this table, it'll handle upstream stuff
999							actionTrigger.click();
1000						}
1001					} else {
1002						// regular action, just click it
1003						actionTrigger.click();
1004					}
1005				}
1006			});
1007			isBulkAction = false;
1008		});
1009	});
1010
1011
1012	// add a listener to refresh related booking rows if upstream
1013	listTable.addEventListener('em_list_table_row_action_complete', function(e){
1014		if ( e.detail.upstream ) {
1015			// find any rows other than the current one and trigger a refresh
1016			let currentRow = e.detail.currentRow;
1017			let formData = e.detail.formData;
1018			if( formData.get('row_action') === 'delete' ) {
1019				let feedback = currentRow.querySelector('.column-primary span.em-icon-trash.em-tooltip');
1020				if ( feedback ) {
1021					listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) {
1022						// apply to all rows of same booking_id except the one we just updated
1023						if ( tr !== currentRow ) {
1024							let td = tr.querySelector('.column-primary');
1025							td.prepend(feedback.cloneNode(true));
1026							em_setup_tippy(td);
1027						}
1028						tr.classList.remove('faded-out');
1029						tr.classList.remove('loading');
1030					});
1031				}
1032			} else if( formData.get('row_action') !== 'refresh' ) {
1033				let feedback = currentRow.querySelector('.column-primary span.em-icon.em-tooltip').getAttribute('aria-label');
1034				formData.set('row_action', 'refresh'); // this is a special action that just refreshes the row
1035				formData.set('feedback', feedback);
1036				listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) {
1037					// apply to all rows of same booking_id except the one we just updated
1038					if( tr !== currentRow ) {
1039						listTableRowAction(tr, formData);
1040						// delete current booking_id and reset isUpstreamAction if we're done
1041						delete isUpstreamAction[e.detail.booking_id];
1042						if (Object.keys(isUpstreamAction).length) {
1043							isUpstreamAction = false;
1044						}
1045					}
1046				});
1047			}
1048		}
1049	});
1050
1051	// setup rows with actions if there are any
1052	listTable.querySelectorAll('td.column-actions a').forEach( (action) => {
1053		action.classList.add('em-tooltip');
1054		action.setAttribute('aria-label', action.innerText);
1055	});
1056}
1057
1058let listTableRowAction = function( tr, formData, upstream = false ){
1059	let listTable = tr.closest('.em-list-table');
1060	tr.classList.add('loading');
1061	formData.set('row_id', tr.dataset.id );
1062	fetch( EM.ajaxurl, { method: 'post', body : formData } ).then( function( response ) {
1063		return response.text();
1064	}).then( function( html ) {
1065		tr.classList.add('faded-out');
1066		if ( formData.get('row_action') === 'delete' ) {
1067			// the text provided is the icon, nothing else
1068			tr.querySelectorAll('th.check-column input[type="checkbox"], .em-list-table-actions').forEach( el => el.remove() );
1069			let td = tr.querySelector('.column-primary');
1070			let wrapper = document.createElement('div');
1071			wrapper.innerHTML = html;
1072			let icon = wrapper.firstElementChild;
1073			em_setup_tippy(wrapper); // no actions to set up
1074			td.prepend(icon);
1075		} else {
1076			tr.innerHTML = html
1077			setupListTableExtras(tr);
1078		}
1079		tr.classList.remove('faded-out');
1080		tr.classList.remove('loading');
1081		listTable.dispatchEvent( new CustomEvent('em_list_table_row_action_complete', { detail: { currentRow: tr, formData: formData, upstream: upstream } } ) );
1082	});
1083}
1084
1085const setupListTableExtras = function( listTable ) {
1086	// setup rows with actions if there are any
1087	listTable.querySelectorAll('td.column-actions a').forEach( (action) => {
1088		action.classList.add('em-tooltip');
1089		action.setAttribute('aria-label', action.innerText);
1090	});
1091	// remove tooltips within tooltips in cell tooltips
1092	listTable.querySelectorAll('td .em-list-table-col-tooltip .em-list-table-col-tooltip').forEach( (subtip) => {
1093		subtip.querySelectorAll('.em-tooltip').forEach( el => el.remove() );
1094		subtip.querySelectorAll('.em-tooltip-content').forEach( el => el.classList.remove('hidden') );
1095	});
1096	// set up tippy, selectize etc.
1097	em_setup_tippy( listTable );
1098	em_setup_selectize( listTable );
1099}
1100
1101document.addEventListener('em_list_table_filtered', function(e){
1102	setupListTable( e.detail.listTable );
1103	// re-setup tippy, selectize etc.
1104	setupListTableExtras( e.detail.listTable );
1105});
1106
1107// init
1108document.addEventListener('DOMContentLoaded', function() {
1109	// add back-compat stuff
1110	document.querySelectorAll('.em_obj div.tablenav').forEach( function( tablenav ){
1111		let em_obj = tablenav.closest('.em_obj');
1112		em_obj.classList.add('em-list-table','legacy', 'frontend');
1113		em_obj.querySelector('& > form').classList.add('em-list-table-form');
1114	});
1115	// find tables
1116	document.querySelectorAll('.em-list-table').forEach( listTable => setupListTable(listTable) );
1117});
1118
1119// add extra setup to bookings list table
1120document.addEventListener('em_list_table_setup'  , function(e){
1121	let listTable = e.detail.listTable;
1122	let listTableForm = e.detail.listTableForm;
1123	if( listTable.classList.contains('em-bookings-table') ) {
1124
1125		// handle submitting the settings modal form with booking-speficic extras
1126		listTable.addEventListener('em_list_table_settings_submitted', function(e){
1127			let form = e.detail.form;
1128			let listTableForm = e.detail.listTableForm;
1129			// get the views ddm and sync it to the table filter
1130			let views_select = form.querySelector('select[name="view"]');
1131			if ( views_select ) {
1132				let view_radio = listTableForm.querySelector('[name="view"][value="' + views_select.value + '"]');
1133				if( view_radio ) {
1134					view_radio.checked = true; // this doesn't trigger an event as we don't want that
1135				}
1136				let view_option = listTableForm.querySelector('button.em-bookings-table-view-option[data-view]');
1137				if ( view_option ) {
1138					view_option.setAttribute('data-view', views_select.value);
1139					view_option.innerText = views_select.options[views_select.selectedIndex].innerText;
1140				}
1141			}
1142		});
1143
1144		// setup views dropdown to switch between different booking table views
1145		let views_ddm_options = {
1146			theme : 'light-border',
1147			allowHTML : true,
1148			interactive : true,
1149			trigger : 'manual',
1150			placement : 'bottom',
1151			zIndex : 1000000,
1152			touch: true,
1153		};
1154		let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, };
1155
1156		// TODO unify this with the search view dropdown JS to remove redundant code
1157		listTable.querySelectorAll('.em-bookings-table-views-trigger').forEach( function( trigger ){
1158			tooltip_vars.content = trigger.parentElement.getAttribute('aria-label');
1159			let views_tooltip = tippy(trigger.parentElement, tooltip_vars);
1160			let views_content = trigger.parentElement.querySelector('.em-bookings-table-views-options');
1161			let views_content_parent = views_content.parentElement;
1162			let tippy_content = document.createElement('div');
1163			views_ddm_options.content = tippy_content;
1164			let views_ddm = tippy(trigger, views_ddm_options);
1165			views_ddm.setProps({
1166				onShow(instance){
1167					views_tooltip.disable();
1168					tippy_content.append(views_content);
1169				},
1170				onShown(instance){ // keyboard support
1171					views_content.querySelector('input:checked').focus();
1172				},
1173				onHidden(instance){
1174					views_tooltip.enable();
1175					if( views_content.parentElement !== views_content_parent ) {
1176						views_content_parent.append(views_content);
1177					}
1178				}
1179			});
1180			let tippy_listener = function(e){
1181				if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
1182				e.preventDefault();
1183				e.stopPropagation();
1184				trigger._tippy.show();
1185				views_tooltip.hide();
1186			}
1187			trigger.addEventListener('click', tippy_listener);
1188			trigger.addEventListener('keydown', tippy_listener);
1189			trigger.firstElementChild.addEventListener('focus', function(e){
1190				views_ddm.hide();
1191				views_tooltip.enable();
1192				views_tooltip.show();
1193			});
1194			trigger.firstElementChild.addEventListener('blur', function(){
1195				views_tooltip.hide();
1196			});
1197
1198			// 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.
1199			let $ = jQuery;
1200			$views = $(listTable).find('.em-bookings-table-views');
1201			$views.on('focus blur', '.em-bookings-table-views-options input', function(){
1202				if( document.activeElement === this ){
1203					this.parentElement.classList.add('focused');
1204				}else{
1205					this.parentElement.classList.remove('focused');
1206				}
1207			});
1208
1209			$views.on('keydown click', '.em-bookings-table-views-options input', function( e ){
1210				// get relevant vars
1211				if( e.type === 'keydown' && e.which !== 13 ){
1212					if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) {
1213						if (e.which === 38) {
1214							if (this.parentElement.previousElementSibling) {
1215								this.parentElement.previousElementSibling.focus();
1216							}
1217						} else if (e.which === 40) {
1218							if (this.parentElement.nextElementSibling) {
1219								this.parentElement.nextElementSibling.focus();
1220							}
1221						}
1222						return false;
1223					} else if ( e.which === 9 ) {
1224						// focus out
1225						views_ddm.hide();
1226					}
1227					return true;
1228				}
1229				this.checked = true;
1230				let input = $(this);
1231				// mark label selected
1232				input.closest('fieldset').find('label').removeClass('checked');
1233				input.parent().addClass('checked');
1234				// get other reference elements we need
1235				let views_wrapper = $(this).closest('.em-bookings-table-views');
1236				let view_type = this.value;
1237				let trigger = views_wrapper.children('.em-bookings-table-views-trigger');
1238				let trigger_option = trigger.children('.em-search-view-option');
1239				// change view, if different
1240				if( view_type !== trigger_option.attr('data-view') ){
1241					trigger_option.attr('data-view', this.value).text(this.parentElement.innerText);
1242					// remove cols value if it's just a switch in view, so we get default cols (if there is one)
1243					listTableForm.querySelector('input[name="cols"][type="hidden"]').value = '';
1244					// set the view type and trigger a form submit
1245					listTableForm.requestSubmit();
1246				}
1247				views_ddm.hide();
1248			});
1249		});
1250	}
1251});
1252
1253// backcompat for em_bookings_filtered jQuery trigger
1254document.addEventListener('em_list_table_filtered', function( e ){
1255	if( e.detail.listTable.classList.contains('em-bookings-table') && window.jQuery ) {
1256		jQuery(document).triggerHandler('em_bookings_filtered', [jQuery(e.detail.data), e.detail.listTable, jQuery(e.detail.form)]); // backwards compatibility
1257	}
1258})
1259
1260function em_setup_datepicker( container ){
1261	wrap = jQuery(container);
1262
1263	//apply datepickers - jQuery UI (backcompat)
1264	let dateDivs = wrap.find('.em-date-single, .em-date-range');
1265	if( dateDivs.length > 0 ){
1266		//default picker vals
1267		var datepicker_vals = {
1268			dateFormat: "yy-mm-dd",
1269			changeMonth: true,
1270			changeYear: true,
1271			firstDay : EM.firstDay,
1272			yearRange:'c-100:c+15',
1273			beforeShow : function( el, inst ){
1274				em_setup_jquery_ui_wrapper();
1275				inst.dpDiv.appendTo('#em-jquery-ui');
1276			}
1277		};
1278		if( EM.dateFormat ) datepicker_vals.dateFormat = EM.dateFormat;
1279		if( EM.yearRange ) datepicker_vals.yearRange = EM.yearRange;
1280		jQuery(document).triggerHandler('em_datepicker', datepicker_vals);
1281		//apply datepickers to elements
1282		dateDivs.find('input.em-date-input-loc').each(function(i,dateInput){
1283			//init the datepicker
1284			var dateInput = jQuery(dateInput);
1285			var dateValue = dateInput.nextAll('input.em-date-input').first();
1286			var dateValue_value = dateValue.val();
1287			dateInput.datepicker(datepicker_vals);
1288			dateInput.datepicker('option', 'altField', dateValue);
1289			//now set the value
1290			if( dateValue_value ){
1291				var this_date_formatted = jQuery.datepicker.formatDate( EM.dateFormat, jQuery.datepicker.parseDate('yy-mm-dd', dateValue_value) );
1292				dateInput.val(this_date_formatted);
1293				dateValue.val(dateValue_value);
1294			}
1295			//add logic for texts
1296			dateInput.on('change', function(){
1297				if( jQuery(this).val() == '' ){
1298					jQuery(this).nextAll('.em-date-input').first().val('');
1299				}
1300			});
1301		});
1302		//deal with date ranges
1303		dateDivs.filter('.em-date-range').find('input.em-date-input-loc[type="text"]').each(function(i,dateInput){
1304			//finally, apply start/end logic to this field
1305			dateInput = jQuery(dateInput);
1306			if( dateInput.hasClass('em-date-start') ){
1307				dateInput.datepicker('option','onSelect', function( selectedDate ) {
1308					//get corresponding end date input, we expect ranges to be contained in .em-date-range with a start/end input element
1309					var startDate = jQuery(this);
1310					var endDate = startDate.parents('.em-date-range').find('.em-date-end').first();
1311					var startValue = startDate.nextAll('input.em-date-input').first().val();
1312					var endValue = endDate.nextAll('input.em-date-input').first().val();
1313					startDate.trigger('em_datepicker_change');
1314					if( startValue > endValue && endValue != '' ){
1315						endDate.datepicker( "setDate" , selectedDate );
1316						endDate.trigger('change').trigger('em_datepicker_change');
1317					}
1318					endDate.datepicker( "option", 'minDate', selectedDate );
1319				});
1320			}else if( dateInput.hasClass('em-date-end') ){
1321				var startInput = dateInput.parents('.em-date-range').find('.em-date-start').first();
1322				if( startInput.val() != '' ){
1323					dateInput.datepicker('option', 'minDate', startInput.val());
1324				}
1325			}
1326		});
1327	}
1328
1329	// datpicker - new format
1330	let datePickerDivs = wrap.find('.em-datepicker, .em-datepicker-range');
1331	if( datePickerDivs.length > 0 ){
1332		// wrappers and locale
1333		let datepicker_wrapper = jQuery('#em-flatpickr');
1334		if( datepicker_wrapper.length === 0 ){
1335			datepicker_wrapper = jQuery('<div class="em pixelbones em-flatpickr" id="em-flatpickr"></div>').appendTo('body');
1336		}
1337		// locale
1338		if( 'locale' in EM.datepicker ){
1339			flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]);
1340			flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay;
1341		}
1342		//default picker vals
1343		let datepicker_onChanging;
1344		let datepicker_options = {
1345			appendTo : datepicker_wrapper[0],
1346			dateFormat: "Y-m-d",
1347			disableMoble : "true",
1348			allowInput : true,
1349			onChange : [function( selectedDates, dateStr, instance ){
1350				if ( datepicker_onChanging !== selectedDates) {
1351					let wrapper = jQuery(instance.input).closest('.em-datepicker');
1352					let data_wrapper = wrapper.find('.em-datepicker-data');
1353					let inputs = data_wrapper.find('input');
1354					let dateFormat = function(d) {
1355						let month = '' + (d.getMonth() + 1),
1356							day = '' + d.getDate(),
1357							year = d.getFullYear();
1358						if (month.length < 2) month = '0' + month;
1359						if (day.length < 2) day = '0' + day;
1360						return [year, month, day].join('-');
1361					}
1362					if ( selectedDates.length === 0 ){
1363						if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ) {
1364							let input = instance.input.classList.contains('em-date-input-start') ? inputs[0] : input
1364s[1];
1365							input.setAttribute('value', '');
1366							if ( inputs.filter(input => input.value !== '').length === 0 ) {
1367								wrapper.removeClass('has-value');
1368							}
1369						} else {
1370							wrapper.removeClass('has-value');
1371							inputs.attr('value', '');
1372							if( instance.config.mode === 'multiple' ) {
1373								// empty pill selection
1374								let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates');
1375								if (datesEl) {
1376									datesEl.querySelectorAll('.item:not(.clear-all)').forEach( el => el.remove() );
1377									datesEl.classList.remove('has-value');
1378								}
1379							}
1380						}
1381					} else {
1382						wrapper.addClass('has-value');
1383						if ( instance.config.mode === 'range' && selectedDates[1] !== undefined ) {
1384							// deal with end date
1385							inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1386							inputs[1].setAttribute('value', dateFormat(selectedDates[1]));
1387						} else if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ){
1388							if( instance.input.classList.contains('em-date-input-start') ){
1389								inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1390								// set min-date of other datepicker
1391								let fp;
1392								if( wrapper.attr('data-until-id') ){
1393									let fp_inputData = jQuery('#' + wrapper.attr('data-until-id') + ' .em-date-input-end');
1394									fp = fp_inputData[0]._flatpickr;
1395								}else {
1396									fp = wrapper.find('.em-date-input-end')[0]._flatpickr;
1397								}
1398								if( fp.selectedDates[0] !== undefined && fp.selectedDates[0] < selectedDates[0] ){
1399									fp.setDate(selectedDates[0], false);
1400									inputs[1].setAttribute('value', dateFormat(fp.selectedDates[0]));
1401								}
1402								fp.set('minDate', selectedDates[0]);
1403							}else{
1404								inputs[1].setAttribute('value', dateFormat(selectedDates[0]));
1405							}
1406						} else if ( instance.config.mode === 'multiple' ){
1407							inputs[0].setAttribute('value', dateStr);
1408							// Sort the selected dates chronologically
1409							selectedDates.sort(function(a, b) { return a - b; });
1410							// Build pill selection for multiple dates
1411							let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates');
1412							datesEl.classList.add('has-value');
1413							if ( datesEl ) {
1414								// Remove existing date pills but preserve the clear-all button
1415								datesEl.querySelectorAll('.item:not(.clear-all)').forEach(el => el.remove());
1416	
1417								// Sort dates chronologically
1418								selectedDates.sort((a, b) => a - b);
1419	
1420								// Group sequential dates into ranges
1421								let groups = [], currentGroup = [];
1422								selectedDates.forEach((date, i) => {
1423									if (currentGroup.length === 0) {
1424										currentGroup.push(date);
1425									} else {
1426										let lastDate = currentGroup[currentGroup.length - 1];
1427										let diffDays = (date - lastDate) / (1000 * 3600 * 24);
1428										if (diffDays === 1) {
1429											currentGroup.push(date);
1430										} else {
1431											groups.push(currentGroup);
1432											currentGroup = [date];
1433										}
1434									}
1435									if (i === selectedDates.length - 1) groups.push(currentGroup);
1436								});
1437	
1438								// Insert pills and maintain date values
1439								groups.forEach(group => {
1440									let div = document.createElement('div');
1441									div.className = 'item';
1442									let formattedDates = group.map(date => instance.formatDate(date, 'Y-m-d'));
1443									div.dataset.date = formattedDates.join(',');
1444									let startText = instance.formatDate(group[0], instance.config.altFormat);
1445									let endText = instance.formatDate(group[group.length - 1], instance.config.altFormat);
1446									div.innerHTML = `<span>${group.length > 1 ? startText + ' - ' + endText : startText}</span><a href="#" class="remove" tabindex="-1" title="Remove">×</a>`;
1447									datesEl.insertBefore(div, datesEl.querySelector('.clear-all'));
1448								});
1449							}
1450						} else {
1451							inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1452						}
1453					}
1454					inputs.trigger('change');
1455					let current_date = data_wrapper.attr('date-value');
1456					data_wrapper.attr('data-value', inputs.toArray().map(input => input.value).filter(value => value !== '').join(','));
1457					if( current_date === dateStr ) data_wrapper.trigger('change');
1458					wrapper[0].dispatchEvent( new CustomEvent('datepicker-onChange', { detail: { selectedDates : selectedDates, dateStr: dateStr, instance: instance } }) );
1459				}
1460				datepicker_onChanging = null; // reset regardless, since it's to prevent onClose firing this twice
1461			}],
1462			onClose : function( selectedDates, dateStr, instance ){
1463				// deal with single date choice and clicking out
1464				if( instance.config.mode === 'range' && selectedDates[1] !== undefined ){
1465					if(selectedDates.length === 1){
1466						instance.setDate([selectedDates[0],selectedDates[0]], true); // wouldn't have been triggered with a single date selection
1467					}
1468				} else {
1469					// trigger an onChange
1470					datepicker_options.onChange[0](selectedDates, dateStr, instance);
1471					datepicker_onChanging = selectedDates; // set flag to prevent onChange firing twice
1472				}
1473			},
1474			locale : {},
1475		};
1476		if( EM.datepicker.format !== datepicker_options.dateFormat ){
1477			datepicker_options.altFormat = EM.datepicker.format;
1478			datepicker_options.altInput = true;
1479		}
1480		jQuery(document).triggerHandler('em_datepicker_options', datepicker_options);
1481		//apply datepickers to elements
1482		datePickerDivs.each( function(i,datePickerDiv) {
1483			// hide fallback fields, show range or single
1484			datePickerDiv = jQuery(datePickerDiv);
1485			datePickerDiv.find('.em-datepicker-data').addClass('hidden');
1486			let isRange = datePickerDiv.hasClass('em-datepicker-range');
1487			let altOptions = {};
1488			if( datePickerDiv.attr('data-datepicker') ){
1489				altOptions = JSON.parse(datePickerDiv.attr('data-datepicker'));
1490				if( typeof altOptions !== 'object' ){
1491					altOptions = {};
1492				}
1493			}
1494			let otherOptions = {};
1495			if( datePickerDiv.find('script.datepicker-options').length > 0 ){
1496				otherOptions = JSON.parse( datePickerDiv.find('script.datepicker-options').text() );
1497				if( typeof altOptions !== 'object' ){
1498					otherOptions = {};
1499				}
1500			}
1501			let options = Object.assign({}, datepicker_options, altOptions, otherOptions); // clone, mainly shallow concern for 'mode'
1502			options.mode = isRange ? 'range' : 'single';
1503			if ( datePickerDiv.hasClass('em-datepicker-multiple') ) {
1504				options.mode = 'multiple';
1505			}
1506			if( isRange && 'onClose' in options ){
1507				options.onClose = [function( selectedDates, dateStr, instance ){
1508					if(selectedDates.length === 1){ // deal with single date choice and clicking out
1509						instance.setDate([selectedDates[0],selectedDates[0]], true);
1510					}
1511				}];
1512			}
1513			if( datePickerDiv.attr('data-separator') ) options.locale.rangeSeparator = datePickerDiv.attr('data-separator');
1514			if( datePickerDiv.attr('data-format') ) options.altFormat = datePickerDiv.attr('data-format');
1515			let FPs = datePickerDiv.find('.em-date-input');
1516			//if ( FPs.hasClass(flatpickr-input) ) return; // already initialized
1517			if ( FPs[0].tagName.toLowerCase() === 'input' ) {
1518				FPs.attr('type', 'text');
1519			} else {
1520				options.wrap = true;
1521				FPs.find('input[type="hidden"]').attr('type', 'text');
1522			}
1523			FPs.flatpickr(options);
1524		});
1525		em_setup_datepicker_dates( datePickerDivs );
1526		// fire trigger
1527		jQuery(document).triggerHandler('em_flatpickr_loaded', [wrap]);
1528		container.dispatchEvent( new CustomEvent('em_datepicker_loaded', { bubbles: true, detail: { container: wrap, datepickers: datePickerDivs } } ) );
1529	}
1530}
1531
1532function em_setup_datepicker_dates( container ) {
1533	let datePickerContainer = jQuery(container);
1534	let datePickerDivs = datePickerContainer.first().hasClass('em-datepicker') ? datePickerContainer : datePickerContainer.find('.em-datepicker, .em-datepicker-range') ;
1535	// add values to elements, done once all datepickers instantiated so we don't get errors with date range els in separate divs
1536	datePickerDivs.each( function(i,datePickerDiv) {
1537		datePickerDiv = jQuery(datePickerDiv);
1538		let FPs = datePickerDiv.find('.em-date-input');
1539		//if ( FPs.hasClass(flatpickr-input) ) return;
1540		let inputs = datePickerDiv.find('.em-datepicker-data input');
1541		inputs.attr('type', 'hidden'); // hide so not tabbable
1542		if( datePickerDiv.hasClass('em-datepicker-until') ){
1543			let start_fp = FPs.filter('.em-date-input-start')[0]._flatpickr;
1544			let end_fp;
1545			if( datePickerDiv.attr('data-until-id') ){
1546				end_fp = jQuery('#' + datePickerDiv.attr('data-until-id') + ' .em-date-input-end')[0]._flatpickr;
1547			}else{
1548				end_fp = FPs.filter('.em-date-input-end')[0]._flatpickr;
1549				if( inputs[1] && inputs[1].value ) {
1550					end_fp.setDate(inputs[1].value, false, 'Y-m-d');
1551				}
1552			}
1553			if( inputs[0] && inputs[0].value ){
1554				start_fp.setDate(inputs[0].value, false, 'Y-m-d');
1555				end_fp.set('minDate', inputs[0].value);
1556			}
1557			start_fp._inputData = inputs[0] ? [inputs[0]] : [];
1558			end_fp._inputData = inputs[1] ? [inputs[1]] : [];
1559		}else if( datePickerDiv.hasClass('em-datepicker-multiple') ){
1560			// handle multiple pre-loaded dates
1561			if( inputs[0] && inputs[0].value ){
1562				let datesArray = inputs[0].value.split(',');
1563				FPs[0]._flatpickr.setDate(datesArray, true, 'Y-m-d');
1564			}
1565			FPs[0]._flatpickr._inputData = [ inputs[0] ];
1566		}else{
1567			let dates = [];
1568			FPs[0]._flatpickr._inputData = [];
1569			inputs.each( function( i, input ){
1570				if( input.value ){
1571					dates.push(input.value);
1572					FPs[0]._flatpickr._inputData.push(input);
1573				}
1574			});
1575			FPs[0]._flatpickr.setDate(dates, false, 'Y-m-d');
1576		}
1577	});
1578}
1579
1580/**
1581 * Deregister the datepicker
1582 * @param wrap
1583 */
1584function em_unsetup_datepicker( wrap ) {
1585	wrap.querySelectorAll(".em-datepicker .em-date-input.flatpickr-input").forEach( function( el ){
1586		if( '_flatpickr' in el ){
1587			el._flatpickr.destroy();
1588		}
1589	});
1590}
1591
1592/**
1593 * Handle the remove button for each date selection pill
1594 */
1595document.addEventListener('click', function(e) {
1596	if ( !e.target.closest('.em-datepicker-dates .item:not(.clear-all) .remove') ) return;
1597
1598	e.preventDefault();
1599	const pill = e.target.closest('.item');
1600	const datesContainer = pill.closest('.em-datepicker-dates');
1601	const datepickerContainer = datesContainer.closest('.em-datepicker');
1602	const dateInput = datepickerContainer.querySelector('.em-date-input');
1603
1604	// Remove pill
1605	pill.remove();
1606
1607	// Rebuild dates array from remaining pills
1608	const newDates = [];
1609	datesContainer.querySelectorAll('.item:not(.clear-all)').forEach(item => {
1610		const dates = item.dataset.date.split(',');
1611		dates.forEach(date => newDates.push(date));
1612	});
1613
1614	// Update Flatpickr instance
1615	const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr;
1616	if (fp) fp.setDate(newDates, true, 'Y-m-d');
1617
1618	// Update hidden input
1619	const altInput = datepickerContainer.querySelector('.em-datepicker-data input');
1620	if (altInput) {
1621		altInput.value = newDates.join(',');
1622		altInput.dispatchEvent(new Event('change'));
1623	}
1624});
1625
1626/**
1627 * Handle the Clear All button
1628 */
1629document.addEventListener('click', function(e) {
1630	if ( !e.target.closest('.em-datepicker-dates .clear-all') ) return;
1631
1632	e.preventDefault();
1633	const datesContainer = e.target.closest('.em-datepicker-dates');
1634	const datepickerContainer = datesContainer.closest('.em-datepicker');
1635	const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr;
1636
1637	// Remove all pills
1638	datesContainer.querySelectorAll('.item:not(.clear-all)').forEach( item => item.remove() );
1639
1640	// Clear Flatpickr instance
1641	if (fp) fp.clear();
1642
1643	// Update hidden input
1644	const altInput = datepickerContainer.querySelector('.em-datepicker-data input');
1645	if (altInput) {
1646		altInput.value = '';
1647		altInput.dispatchEvent(new Event('change'));
1648	}
1649});
1650
1651
1652
1653function em_setup_timepicker( container ){
1654	wrap = jQuery(container);
1655	var timepicker_options = {
1656		step:15
1657	}
1658	timepicker_options.timeFormat = EM.show24hours == 1 ? 'G:i':'g:i A';
1659	jQuery(document).triggerHandler('em_timepicker_options', timepicker_options);
1660	wrap.find(".em-time-input").em_timepicker(timepicker_options).each( function(i, el){
1661		this.dataset.seconds = this.value ? jQuery(this).em_timepicker('getSecondsFromMidnight') : '';
1662	});
1663
1664	/**
1665	 * A function that retargets an the change event to the .em-time-range enclosing div whilst maintinaing the originally triggered target.
1666	 * This is done because the em_timepicker short-circuits the bubbling.
1667	 *
1668	 * @param {Event} e - The original event to be retargeted.
1669	 */
1670	let retargetEvent = function(e) {
1671		e.stopPropagation();
1672		const customEvent = new CustomEvent('change', {
1673			bubbles: true,
1674			cancelable: true,
1675			detail: { target: e.target }
1676		});
1677
1678		// Override the target getter to return the original element
1679		Object.defineProperty(customEvent, 'target', {
1680			configurable: true,
1681			get: () => e.target,
1682		});
1683		e.target.closest('.em-time-range').dispatchEvent( customEvent );
1684	};
1685
1686	// Keep the duration between the two inputs.
1687	wrap.find(".em-time-range input.em-time-start").each( function(i, el){
1688		var time = jQuery(el);
1689		time.data('oldTime', time.em_timepicker('getSecondsFromMidnight'));
1690	}).on('change', function( e ) {
1691		var start = jQuery(this);
1692		var wrapper = start.closest('.em-time-range');
1693		var end = wrapper.find('.em-time-end').first();
1694		if ( end.val() ) { // Only update when second input has a value.
1695			// Calculate duration.
1696			var oldTime = start.data('oldTime');
1697			var duration = (end.em_timepicker('getSecondsFromMidnight') - oldTime) * 1000;
1698			var time = start.em_timepicker('getSecondsFromMidnight');
1699			if(  this.value && end.em_timepicker('getSecondsFromMidnight') >= oldTime ){
1700				// Calculate and update the time in the second input.
1701				end.em_timepicker('setTime', new Date(start.em_timepicker('getTime').getTime() + duration));
1702			}
1703			start.data('oldTime', time);
1704		}
1705		if ( start.val() || end.val() ) {
1706			wrapper.find('.em-time-all-day').prop('checked', false).prop('indeterminate', false);
1707		}
1708		this.dataset.seconds = start.val() ? start.em_timepicker('getSecondsFromMidnight') : '';
1709		retargetEvent(e);
1710	});
1711	// Validate.
1712	container.querySelectorAll('.em-time-range').forEach( el => el.addEventListener('change', function (e) {
1713		if ( e.target.matches('input.em-time-end') ) {
1714			let end = jQuery(e.target);
1715			e.target.dataset.seconds = end.val() ? end.em_timepicker('getSecondsFromMidnight') : '';
1716			let start = end.prevAll('.em-time-start');
1717			let wrapper = e.target.closest('.event-form-when, .em-time-range');
1718			let start_date_element = wrapper.querySelector('.em-date-end');
1719			let end_date_element = wrapper.querySelector('.em-date-start');
1720			let start_date = start_date_element ? start_date_element.value : '';
1721			let end_date = end_date_element ? end_date_element.value : '';
1722			if ( start.val() ) {
1723				let hasError = start.em_timepicker('getTime') > end.em_timepicker('getTime') && (!end_date || start_date === end_date);
1724				e.target.classList.toggle('error', hasError);
1725			}
1726			if (end_date_element) {
1727				wrapper.querySelectorAll('.em-time-all-day').forEach(function (checkbox) {
1728					checkbox.checked = false;
1729					checkbox.indeterminate = false;
1730				});
1731			}
1732		} else if ( e.target.matches('.em-date-end') ) {
1733			jQuery(e.target.closest('.event-form-when')).find('.em-time-end').trigger('change');
1734		} else if ( e.target.matches('input.em-time-all-day') ) {
1735			e.currentTarget.querySelectorAll('.em-time-input').forEach(function (input) {
1736				input.readOnly = e.target.checked;
1737			});
1738			if ( e.target.checked ) {
1739				// set 12am and 11:59pm for start/end times
1740				e.currentTarget.querySelectorAll('.em-time-start').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 00:00:00') ) );
1741				e.currentTarget.querySelectorAll('.em-time-end').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 23:59:59') ) );
1742			}
1743		}
1744	}) );
1745	// listen to and dispatch the event
1746	wrap.find(".em-time-range input.em-time-end").on('change', retargetEvent );
1747}
1748
1749function em_unsetup_timepicker( container ) {
1750	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
1751}
1752
1753let em_close_other_selectized = function(){
1754	// find all other selectized items and close them
1755	let control = this.classList.contains('selectize-control') ? this.closest('.em-selectize.selectize-control') : this;
1756	document.querySelectorAll('.em-selectize.dropdown-active').forEach( function( el ){
1757		if( el !== control && 'selectize' in el.previousElementSibling) {
1758			el.previousElementSibling.selectize.close();
1759		}
1760	});
1761}
1762
1763document.addEventListener('events_manager_js_loaded', function(){
1764	EM_Selectize.define('multidropdown', function( options ) {
1765		if( !this.$input.hasClass('multidropdown') ) return;
1766		let s = this;
1767		let s_setup = s.setup;
1768		let s_refreshOptions = s.refreshOptions;
1769		let s_open = s.open;
1770		let s_close = s.close;
1771		let placeholder;
1772		let placeholder_text
1773		let placeholder_default;
1774		let placeholder_label;
1775		let counter;
1776		let isClosing = false;
1777		this.changeFunction = function() {
1778			let items = s.getValue();
1779			let selected_text = this.$input.attr('data-selected-text') ? this.$input.attr('data-selected-text') : '%d Selected';
1780			counter.children('span.selected-text').text(selected_text.replace('%d', items.length));
1781			if( items.length > 0 ) {
1782				counter.removeClass('hidden');
1783				placeholder_text.text( placeholder_label );
1784				s.$control_input.attr('placeholder', s.$input.attr('placeholder'));
1785			} else {
1786				counter.addClass('hidden');
1787				placeholder_text.text( placeholder_default );
1788			}
1789		}
1790		this.setup = function() {
1791			s_setup.apply(s);
1792			s.isDropdownClosingPlaceholder = false;
1793			// add section to top of selection to show the dropdown text
1794			placeholder = jQuery('<div class="em-selectize-placeholder"></div>').prependTo(s.$wrapper);
1795			let clear_text = this.$input.attr('data-clear-text') ? this.$input.attr('data-clear-text') : 'Clear Selection';
1796			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);
1797			placeholder_text = jQuery('<span class="placeholder-text"></span>').appendTo(placeholder);
1798			placeholder_default = s.$input.attr('data-default') ? s.$input.attr('data-default') : s.$input.attr('placeholder');
1799			placeholder_label = s.$input.attr('data-label') ? s.$input.attr('data-label') : s.$input.attr('placeholder');
1800			placeholder_text.text( placeholder_default );
1801			s.$dropdown.prepend(s.$control_input.parent());
1802			s.on('dropdown_close', function() {
1803				s.$wrapper.removeClass('dropdown-active');
1804			});
1805			s.on('dropdown_open', function() {
1806				s.$wrapper.addClass('dropdown-active');
1807				s.$control_input.val('');
1808			});
1809			s.on('change', this.changeFunction);
1810			placeholder.on('focus blur click', function (e) {
1811				// only if we're clicking on the placeholder
1812				if( this.matches('.em-selectize-placeholder') ) {
1813					if ( !s.isOpen && e.type !== 'blur' ){
1814						s.open();
1815					} else if ( s.isOpen && e.type !== 'focus' ) {
1816						s.close();
1817					}
1818				}
1819			}).on('focus blur click mousedown mouseup', function( e ){
1820				if( this.matches('.em-selectize-placeholder') ) {
1821					// stope selectize doing anything to our own open/close actions
1822					e.stopPropagation();
1823					e.preventDefault();
1824					if( e.type === 'click' ) {
1825						em_close_other_selectized.call( this.closest('.selectize-control') );
1826						if ( s.isOpen && s.$control_input.val() && !this.matches('.placeholder-count') && !this.closest('.placeholder-count') ) {
1827							isClosing = true;
1828							s.close();
1829						}
1830					} else {
1831						isClosing = false;
1832					}
1833					return false;
1834				}
1835			});
1836			counter.on( 'click' , function( e ){
1837				e.preventDefault();
1838				e.stopPropagation();
1839				s.clear();
1840				if( s.isOpen ) s.refreshOptions();
1841			});
1842			this.changeFunction();
1843		}
1844
1845		// prevent dropdown from closing when no options are found, because the search input shows within the dropdown in multidropdown
1846		this.refreshOptions = function ( ...args ) {
1847			s_refreshOptions.apply(s, args);
1848			if ( !this.hasOptions && this.lastQuery ) {
1849				// intervene on closing only if not in a closing process caused by our own listeners
1850				if( isClosing === false ) {
1851					this.$wrapper.addClass("dropdown-active");
1852					s.isOpen = true;
1853				}
1854				this.$wrapper.addClass("no-options");
1855				isClosing = false;
1856			} else {
1857				this.$wrapper.removeClass("no-options");
1858			}
1859		};
1860	});
1861});
1862
1863function em_setup_selectize( container_element ){
1864	container = jQuery(container_element); // in case we were given a dom object
1865
1866	container.find('.em-selectize.selectize-control').on( 'click', em_close_other_selectized );
1867
1868	let optionRender = function (item, escape) {
1869		let html = '<div class="option"';
1870		if( 'data' in item ){
1871			// 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
1872			Object.entries(item.data).forEach( function( item_data ){
1873				html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"';
1874			});
1875		}
1876		html +=	'>';
1877		if( this.$input.hasClass('checkboxes') ){
1878			html += item.text.replace(/^(\s+)?/i, '$1<span></span> ');
1879		}else{
1880			html += item.text;
1881		}
1882		html += '</div>';
1883		return html;
1884	};
1885
1886	// Selectize General
1887	container.find('select:not([multiple]).em-selectize, .em-selectize select:not([multiple])').em_selectize({
1888		selectOnTab : false,
1889		render: {
1890			option: optionRender,
1891		},
1892	}).on('change', ( e ) => {
1893		e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) )
1894	});
1895	container.find('select[multiple].em-selectize, .em-selectize select[multiple]').em_selectize({
1896		selectOnTab : false,
1897		hideSelected : false,
1898		plugins: ["remove_button", 'click2deselect','multidropdown'],
1899		diacritics : true,
1900		render: {
1901			item: function (item, escape) {
1902				return '<div class="item"><span>' + item.text.replace(/^\s+/i, '') + '</span></div>';
1903			},
1904			option : optionRender,
1905			optgroup : function (item, escape) {
1906				let html = '<div class="optgroup" data-group="' + escape(item.label) + '"';
1907				if( 'data' in item ){
1908					// 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
1909					Object.entries(item.data).forEach( function( item_data ){
1910						html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"';
1911					});
1912				}
1913				html +=	'>';
1914				return html + item.html + '</div>';
1915			}
1916
1917		},
1918	}).on('change', ( e ) => {
1919		e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) )
1920	});
1921	container.find('.em-selectize:not(.always-open)').each( function(){
1922		if( 'selectize' in this ){
1923			let s = this.selectize;
1924			this.selectize.$wrapper.on('keydown', function(e) {
1925				if( e.keyCode === 9 ) {
1926					s.blur();
1927				}
1928			});
1929		}
1930	});
1931	container.find('.em-selectize.always-open').each( function(){
1932		//extra behaviour for selectize "always open mode"
1933		if( 'selectize' in this ){
1934			let s = this.selectize;
1935			s.open();
1936			s.advanceSelection = function(){}; // remove odd item shuffling
1937			s.setActiveItem = function(){}; // remove odd item shuffling
1938			// add event listener to fix remove button issues due to above hacks
1939			this.selectize.$control.on('click', '.remove', function(e) {
1940				if ( s.isLocked  ) return;
1941				var $item = jQuery(e.currentTarget).parent();
1942				s.removeItem($item.attr('data-value'));
1943				s.refreshOptions();
1944				return false;
1945			});
1946		}
1947	});
1948
1949	// Sortables - selectize and sorting columns, usually in list tables
1950	container.find('.em-list-table-modal .em-list-table-cols').each( function(){
1951		let parent = jQuery(this);
1952		let sortables = jQuery(this).find('.em-list-table-cols-sortable');
1953		parent.find('.em-selectize.always-open').each( function() {
1954			//extra behaviour for selectize column picker
1955			if ('selectize' in this) {
1956				let selectize = this.selectize;
1957				// add event listener to fix remove button issues due to above hacks
1958				selectize.on('item_add', function (value, item) {
1959					let col = item.clone();
1960					let option  = selectize.getOption(value);
1961					let type = option.attr('data-type');
1962					col.appendTo(sortables);
1963					col.attr('data-type', type);
1964					if( option.attr('data-header') ) {
1965						col.children('span:first-child').text( option.attr('data-header') );
1966					}
1967					jQuery('<input type="hidden" name="cols[' + value + ']" value="1">').appendTo(col);
1968				});
1969				selectize.on('item_remove', function (value) {
1970					parent.find('.item[data-value="'+ value +'"]').remove();
1971				});
1972				parent.on('click', '.em-list-table-cols-selected .item .remove', function(){
1973					let value = this.parentElement.getAttribute('data-value');
1974					selectize.removeItem(value, true);
1975				});
1976			}
1977		});
1978	});
1979}
1980
1981function em_unsetup_selectize( container ) {
1982	container.querySelectorAll('.em-selectize').forEach( function( el ) {
1983		//extra behaviour for selectize "always open mode"
1984		if ( 'selectize' in el ) {
1985			el.selectize.destroy();
1986		}
1987	});
1988}
1989
1990function em_setup_tippy( container_element ){
1991	let container = jQuery(container_element);
1992	var tooltip_vars = {
1993		theme : 'light-border',
1994		appendTo : 'parent',
1995		content(reference) {
1996			if( reference.dataset.content ){
1997				try {
1998					let content = container[0].querySelector(reference.dataset.content);
1999					if (content) {
2000						content.classList.remove('hidden');
2001						return content;
2002					}
2003				} catch ( error ) {
2004					console.log('Invlid tooltip selector in %o : %o', reference, error);
2005				}
2006			};
2007			return reference.getAttribute('aria-label') ?? reference.title ?? '';
2008		},
2009		'touch' : ['hold', 300],
2010		allowHTML : true,
2011	};
2012	jQuery(document).trigger('em-tippy-vars',[tooltip_vars, container]);
2013	container.find('.em-tooltip').each( ( i, tooltip ) => tippy( tooltip, tooltip_vars ) );
2014	// Set up Tippy DDMs
2015	let tippy_ddm_options = {
2016		theme : 'light-border',
2017		arrow : false,
2018		allowHTML : true,
2019		interactive : true,
2020		trigger : 'manual',
2021		placement : 'bottom',
2022		zIndex : 1000000,
2023		touch : true,
2024	};
2025	jQuery(document).trigger('em-tippy-ddm-vars',[tippy_ddm_options, container]);
2026	container.find('.em-tooltip-ddm').each( function(){
2027		let ddm_content, ddm_content_sibling;
2028		if( this.getAttribute('data-content') ){
2029			ddm_content = document.getElementById(this.getAttribute('data-content'))
2030			ddm_content_sibling = ddm_content.previousElementSibling;
2031		}else{
2032			ddm_content = this.nextElementSibling;
2033			ddm_content_sibling = ddm_content.previousElementSibling;
2034		}
2035		let tippy_content = document.createElement('div');
2036		// allow for custom width
2037		let button_width = this.getAttribute('data-button-width');
2038		if( button_width ){
2039			if( button_width == 'match' ){
2040				tippy_ddm_options.maxWidth = this.clientWidth;
2041				ddm_content.style.width = this.clientWidth + 'px';
2042			}else{
2043				tippy_ddm_options.maxWidth = this.getAttribute('data-button-width');
2044			}
2045		}
2046		tippy_ddm_options.content = tippy_content;
2047		let tippy_ddm = tippy(this, tippy_ddm_options);
2048		tippy_ddm.props.distance = 50;
2049		tippy_ddm.setProps({
2050			onShow(instance){
2051				if( instance.reference.getAttribute('data-tooltip-class') ) {
2052					instance.popper.classList.add( instance.reference.getAttribute('data-tooltip-class') );
2053				}
2054				instance.popper.classList.add( 'em-tooltip-ddm-display' );
2055				tippy_content.append(ddm_content);
2056				ddm_content.classList.remove('em-tooltip-ddm-content');
2057			},
2058			onShown(instance){ // keyboard support
2059				ddm_content.firstElementChild.focus();
2060			},
2061			onHidden(instance){
2062				if( ddm_content.previousElementSibling !== ddm_content_sibling ) {
2063					ddm_content_sibling.after(ddm_content);
2064					ddm_content.classList.add('em-tooltip-ddm-content');
2065				}
2066			},
2067		});
2068		let tippy_listener = function(e){
2069			if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
2070			e.preventDefault();
2071			e.stopPropagation();
2072			this._tippy.show();
2073		}
2074		this.addEventListener('click', tippy_listener);
2075		this.addEventListener('keydown', tippy_listener);
2076		tippy_content.addEventListener('blur', function(){
2077			tippy_content.hide();
2078		});
2079		tippy_content.addEventListener('mouseover', function(){
2080			ddm_content.firstElementChild.blur();
2081		});
2082	});
2083}
2084
2085function em_unsetup_tippy( container ) {
2086	container.querySelectorAll('.em-tooltip-ddm').forEach( function( el ){
2087		if ( '_tippy' in el ) {
2088			el._tippy.destroy();
2089		}
2090	});
2091}
2092
2093/*
2094 * MAP FUNCTIONS
2095 */
2096var em_maps_loaded = false;
2097var maps = {};
2098var maps_markers = {};
2099var infoWindow;
2100//loads maps script if not already loaded and executes EM maps script
2101function em_maps_load(){
2102	if( !em_maps_loaded ){
2103		if ( jQuery('script#google-maps').length == 0 && ( typeof google !== 'object' || typeof google.maps !== 'object' ) ){
2104			var script = document.createElement("script");
2105			script.type = "text/javascript";
2106			script.id = "google-maps";
2107			var proto = (EM.is_ssl) ? 'https:' : 'http:';
2108			if( typeof EM.google_maps_api !== 'undefined' ){
2109				script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps&key='+EM.google_maps_api;
2110			}else{
2111				script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps';
2112			}
2113			document.body.appendChild(script);
2114		}else if( typeof google === 'object' && typeof google.maps === 'object' && !em_maps_loaded ){
2115			em_maps();
2116		}else if( jQuery('script#google-maps').length > 0 ){
2117			jQuery(window).load(function(){ if( !em_maps_loaded ) em_maps(); }); //google isn't loaded so wait for page to load resources
2118		}
2119	}
2120}
2121jQuery(document).on('em_view_loaded_map', function( e, view, form ){
2122	if( !em_maps_loaded ){
2123		em_maps_load();
2124	}else{
2125		let map = view.find('div.em-locations-map');
2126		em_maps_load_locations( map[0] );
2127	}
2128});
2129//re-usable function to load global location maps
2130function em_maps_load_locations( element ){
2131	let el = element;
2132	let map_id = el.getAttribute('id').replace('em-locations-map-','');
2133	let em_data;
2134	if ( document.getElementById('em-locations-map-coords-'+map_id) ) {
2135		em_data = JSON.parse( document.getElementById('em-locations-map-coords-'+map_id).text );
2136	} else {
2137		let coords_data = el.parentElement.querySelector('.em-locations-map-coords');
2138		if ( coords_data ) {
2139			em_data = JSON.parse( coords_data.text );
2140		} else {
2141			em_data = {};
2142		}
2143	}
2144	jQuery.getJSON(document.URL, em_data , function( data ) {
2145		if( data.length > 0 ){
2146			//define default options and allow option for extension via event triggers
2147			var map_options = { mapTypeId: google.maps.MapTypeId.ROADMAP };
2148			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]; }
2149			else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
2150			jQuery(document).triggerHandler('em_maps_locations_map_options', map_options);
2151			var marker_options = {};
2152			jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
2153
2154			maps[map_id] = new google.maps.Map(el, map_options);
2155			maps_markers[map_id] = [];
2156
2157			var bounds = new google.maps.LatLngBounds();
2158
2159			jQuery.map( data, function( location, i ){
2160				if( !(location.location_latitude == 0 && location.location_longitude == 0) ){
2161					var latitude = parseFloat( location.location_latitude );
2162					var longitude = parseFloat( location.location_longitude );
2163					var location_position = new google.maps.LatLng( latitude, longitude );
2164					//extend the default marker options
2165					jQuery.extend(marker_options, {
2166						position: location_position,
2167						map: maps[map_id]
2168					})
2169					var marker = new google.maps.Marker(marker_options);
2170					maps_markers[map_id].push(marker);
2171					marker.setTitle(location.location_name);
2172					var myContent = '<div class="em-map-balloon"><div id="em-map-balloon-'+map_id+'" class="em-map-balloon-content">'+ location.location_balloon +'</div></div>';
2173					em_map_infobox(marker, myContent, maps[map_id]);
2174					//extend bounds
2175					bounds.extend(new google.maps.LatLng(latitude,longitude))
2176				}
2177			});
2178			// Zoom in to the bounds
2179			maps[map_id].fitBounds(bounds);
2180
2181			//Call a hook if exists
2182			if( jQuery ) {
2183				jQuery(document).triggerHandler('em_maps_locations_hook', [maps[map_id], data, map_id, maps_markers[map_id]]);
2184			}
2185			document.dispatchEvent( new CustomEvent('em_maps_locations_hook', {
2186				detail: {
2187					map : maps[map_id],
2188					data : data,
2189					id : map_id,
2190					markers : maps_markers[map_id],
2191					el : el,
2192				},
2193				cancellable : true,
2194			}));
2195		} else {
2196			el.firstElementChild.innerHTML = 'No locations found';
2197			if( jQuery ) {
2198				jQuery(document).triggerHandler('em_maps_locations_hook_not_found', [ jQuery(el) ]);
2199			}
2200			document.dispatchEvent( new CustomEvent('em_maps_locations_hook_not_found', {
2201				detail: {
2202					id : map_id,
2203					el : el
2204				},
2205				cancellable : true,
2206			}));
2207		}
2208	});
2209}
2210function em_maps_load_location(el){
2211	el = jQuery(el);
2212	var map_id = el.attr('id').replace('em-location-map-','');
2213	em_LatLng = new google.maps.LatLng( jQuery('#em-location-map-coords-'+map_id+' .lat').text(), jQuery('#em-location-map-coords-'+map_id+' .lng').text());
2214	//extend map and markers via event triggers
2215	var map_options = {
2216		zoom: 14,
2217		center: em_LatLng,
2218		mapTypeId: google.maps.MapTypeId.ROADMAP,
2219		mapTypeControl: false,
2220		gestureHandling: 'cooperative'
2221	};
2222	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]; }
2223	else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
2224	jQuery(document).triggerHandler('em_maps_location_map_options', map_options);
2225	maps[map_id] = new google.maps.Map( document.getElementById('em-location-map-'+map_id), map_options);
2226	var marker_options = {
2227		position: em_LatLng,
2228		map: maps[map_id]
2229	};
2230	jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
2231	maps_markers[map_id] = new google.maps.Marker(marker_options);
2232	infoWindow = new google.maps.InfoWindow({ content: jQuery('#em-location-map-info-'+map_id+' .em-map-balloon').get(0) });
2233	infoWindow.open(maps[map_id],maps_markers[map_id]);
2234	maps[map_id].panBy(40,-70);
2235
2236	//JS Hook for handling map after instantiation
2237	//Example hook, which you can add elsewhere in your theme's JS - jQuery(document).on('em_maps_location_hook', function(){ alert('hi');} );
2238	jQuery(document).triggerHandler('em_maps_location_hook', [maps[map_id], infoWindow, maps_markers[map_id], map_id]);
2239	//map resize listener
2240	jQuery(window).on('resize', function(e) {
2241		google.maps.event.trigger(maps[map_id], "resize");
2242		maps[map_id].setCenter(maps_markers[map_id].getPosition());
2243		maps[map_id].panBy(40,-70);
2244	});
2245}
2246jQuery(document).on('em_search_ajax', function(e, vars, wrapper){
2247	if( em_maps_loaded ){
2248		wrapper.find('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } );
2249		wrapper.find('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); });
2250	}
2251});
2252//Load single maps (each map is treated as a seperate map).
2253function em_maps() {
2254	//Find all the maps on this page and load them
2255	jQuery('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } );
2256	jQuery('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); } );
2257
2258	//Location stuff - only needed if inputs for location exist
2259	if( jQuery('select#location-select-id, input#location-address').length > 0 ){
2260		var map, marker;
2261		//load map info
2262		var refresh_map_location = function(){
2263			var location_latitude = jQuery('#location-latitude').val();
2264			var location_longitude = jQuery('#location-longitude').val();
2265			let hasCoords = location_latitude != 0 || location_longitude != 0;
2266			if( hasCoords ){
2267				var position = new google.maps.LatLng(location_latitude, location_longitude); //the location coords
2268				marker.setPosition(position);
2269				var mapTitle = (jQuery('input#location-name').length > 0) ? jQuery('input#location-name').val():jQuery('input#title').val();
2270				mapTitle = em_esc_attr(mapTitle);
2271				marker.setTitle( mapTitle );
2272				jQuery('#em-map').show();
2273				jQuery('#em-map-404').hide();
2274				google.maps.event.trigger(map, 'resize');
2275				map.setCenter(position);
2276				map.panBy(40,-55);
2277				infoWindow.setContent(
2278					'<div id="location-balloon-content"><strong>' + mapTitle + '</strong><br>' +
2279					em_esc_attr(jQuery('#location-address').val()) +
2280					'<br>' + em_esc_attr(jQuery('#location-town').val()) +
2281					'</div>'
2282				);
2283				infoWindow.open(map, marker);
2284				jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]);
2285			} else {
2286				jQuery('#em-map').hide();
2287				jQuery('#em-map-404').show();
2288			}
2289		};
2290
2291		//Add listeners for changes to address
2292		var get_map_by_id = function(id){
2293			if(jQuery('#em-map').length > 0){
2294				jQuery('#em-map-404 .em-loading-maps').show();
2295				jQuery.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){
2296					let hasCoords = data.location_latitude != 0 && data.location_longitude != 0;
2297					if( hasCoords ){
2298						loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude);
2299						marker.setPosition(loc_latlng);
2300						marker.setTitle( data.location_name );
2301						marker.setDraggable(false);
2302						jQuery('#em-map').show();
2303						jQuery('#em-map-404').hide();
2304						jQuery('#em-map-404 .em-loading-maps').hide();
2305						map.setCenter(loc_latlng);
2306						map.panBy(40,-55);
2307						infoWindow.setContent( '<div id="location-balloon-content">'+ data.location_balloon +'</div>');
2308						infoWindow.open(map, marker);
2309						google.maps.event.trigger(map, 'resize');
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						jQuery('#em-map-404 .em-loading-maps').hide();
2315					}
2316				});
2317			}
2318		};
2319		jQuery('#location-select-id, input#location-id').on('change', function() { get_map_by_id( 
2319jQuery(this).val() ); } );
2320		jQuery('#location-name, #location-town, #location-address, #location-state, #location-postcode, #location-country').on('change', function(){
2321			//build address
2322			if( jQuery(this).prop('readonly') === true ) return;
2323			var addresses = [ jQuery('#location-address').val(), jQuery('#location-town').val(), jQuery('#location-state').val(), jQuery('#location-postcode').val() ];
2324			var address = '';
2325			jQuery.each( addresses, function(i, val){
2326				if( val != '' ){
2327					address = ( address == '' ) ? address+val:address+', '+val;
2328				}
2329			});
2330			if( address == '' ){ //in case only name is entered, no address
2331				jQuery('#em-map').hide();
2332				jQuery('#em-map-404').show();
2333				return false;
2334			}
2335			//do country last, as it's using the text version
2336			if( jQuery('#location-country option:selected').val() != 0 ){
2337				address = ( address == '' ) ? address+jQuery('#location-country option:selected').text():address+', '+jQuery('#location-country option:selected').text();
2338			}
2339			//add working indcator whilst we search
2340			jQuery('#em-map-404 .em-loading-maps').show();
2341			//search!
2342			if( address != '' && jQuery('#em-map').length > 0 ){
2343				let geocoder = new google.maps.Geocoder();
2344				geocoder.geocode( { 'address': address }, function(results, status) {
2345					if (status == google.maps.GeocoderStatus.OK) {
2346						jQuery('#location-latitude').val(results[0].geometry.location.lat());
2347						jQuery('#location-longitude').val(results[0].geometry.location.lng());
2348					}
2349					refresh_map_location();
2350				});
2351			}
2352		});
2353		// Check if we are on a location editing page, and if address was previously entered, if so we check location coords
2354		let location_latitude = jQuery('#location-latitude').val();
2355		let location_longitude = jQuery('#location-longitude').val();
2356		let hasCoords = location_latitude != 0 || location_longitude != 0;
2357		if ( !hasCoords  ) {
2358			// check if there's any address items that were added previously
2359			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 != '' ) ) {
2360				// trigger a change so we reload the address and coords
2361				jQuery('#location-address').trigger('change');
2362				if ( 'google_maps_resave_location' in EM ) {
2363					alert(EM.google_maps_resave_location);
2364				}
2365			}
2366		}
2367
2368		//Load map
2369		if(jQuery('#em-map').length > 0){
2370			var em_LatLng = new google.maps.LatLng(0, 0);
2371			var map_options = {
2372				zoom: 14,
2373				center: em_LatLng,
2374				mapTypeId: google.maps.MapTypeId.ROADMAP,
2375				mapTypeControl: false,
2376				gestureHandling: 'cooperative'
2377			};
2378			if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
2379			map = new google.maps.Map( document.getElementById('em-map'), map_options);
2380			var marker = new google.maps.Marker({
2381				position: em_LatLng,
2382				map: map,
2383				draggable: true
2384			});
2385			infoWindow = new google.maps.InfoWindow({
2386				content: ''
2387			});
2388			var geocoder = new google.maps.Geocoder();
2389			google.maps.event.addListener(infoWindow, 'domready', function() {
2390				document.getElementById('location-balloon-content').parentNode.style.overflow='';
2391				document.getElementById('location-balloon-content').parentNode.parentNode.style.overflow='';
2392			});
2393			google.maps.event.addListener(marker, 'dragend', function() {
2394				var position = marker.getPosition();
2395				jQuery('#location-latitude').val(position.lat());
2396				jQuery('#location-longitude').val(position.lng());
2397				map.setCenter(position);
2398				map.panBy(40,-55);
2399			});
2400			if( jQuery('#location-select-id').length > 0 ){
2401				jQuery('#location-select-id').trigger('change');
2402			}else{
2403				refresh_map_location();
2404			}
2405			jQuery(document).triggerHandler('em_map_loaded', [map, infoWindow, marker]);
2406		}
2407		//map resize listener
2408		jQuery(window).on('resize', function(e) {
2409			google.maps.event.trigger(map, "resize");
2410			map.setCenter(marker.getPosition());
2411			map.panBy(40,-55);
2412		});
2413	}
2414	em_maps_loaded = true; //maps have been loaded
2415	jQuery(document).triggerHandler('em_maps_loaded');
2416}
2417
2418function em_map_infobox(marker, message, map) {
2419	var iw = new google.maps.InfoWindow({ content: message });
2420	google.maps.event.addListener(marker, 'click', function() {
2421		if( infoWindow ) infoWindow.close();
2422		infoWindow = iw;
2423		iw.open(map,marker);
2424	});
2425}
2426
2427function em_esc_attr( str ){
2428	if( typeof str !== 'string' ) return '';
2429	return str.replace(/</gi,'&lt;').replace(/>/gi,'&gt;');
2430}
2431
2432// Modal Open/Close
2433let openModal = function( modal, onOpen = null ){
2434	modal = jQuery(modal);
2435	modal.appendTo(document.body);
2436	setTimeout( function(){
2437		modal.addClass('active').find('.em-modal-popup').addClass('active');
2438		jQuery(document).triggerHandler('em_modal_open', [modal]);
2439		document.dispatchEvent( new CustomEvent('em_modal_open', { detail: { modal: modal } }) );
2440		if( typeof onOpen === 'function' ){
2441			setTimeout( onOpen, 200); // timeout allows css transition
2442		}
2443	}, 100); // timeout allows css transition
2444};
2445let closeModal = function( modal, onClose = null ){
2446	modal = jQuery(modal);
2447	modal.removeClass('active').find('.em-modal-popup').removeClass('active');
2448	setTimeout( function(){
2449		if( modal.attr('data-parent') ){
2450			let wrapper = jQuery('#' + modal.attr('data-parent') );
2451			if( wrapper.length ) {
2452				modal.appendTo(wrapper);
2453			}
2454		}
2455		modal.triggerHandler('em_modal_close');
2456		modal[0].dispatchEvent( new CustomEvent('em_modal_close', { bubbles: true, detail: { modal: modal } } ) );
2457		if( typeof onClose === 'function' ){
2458			onClose();
2459		}
2460	}, 500); // timeout allows css transition
2461}
2462jQuery(document).on('click', '.em-modal .em-close-modal', function(e){
2463	let modal = jQuery(this).closest('.em-modal');
2464	if( !modal.attr('data-prevent-close') ) {
2465		closeModal(modal);
2466	}
2467});
2468jQuery(document).on('click', '.em-modal', function(e){
2469	var target = jQuery(e.target);
2470	if( target.hasClass('em-modal') ) {
2471		let modal = jQuery(this);
2472		if( !modal.attr('data-prevent-close') ){
2473			closeModal(modal);
2474		}
2475	}
2476});
2477
2478function EM_Alert( content ){
2479	// find the alert modal, create if not
2480	let modal = document.getElementById('em-alert-modal');
2481	if( modal === null ){
2482		modal = document.createElement('div');
2483		modal.setAttribute('class', "em pixelbones em-modal");
2484		modal.id = 'em-alert-modal';
2485		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>';
2486		document.body.append(modal);
2487	}
2488	document.getElementById('em-alert-modal-content').innerHTML = content;
2489	openModal(modal);
2490};
2491
2492//Events Search
2493jQuery(document).ready( function($){
2494	// handle the views tip/ddm
2495	let views_ddm_options = {
2496		theme : 'light-border',
2497		allowHTML : true,
2498		interactive : true,
2499		trigger : 'manual',
2500		placement : 'bottom',
2501		zIndex : 1000000,
2502		touch: true,
2503	};
2504	$(document).trigger('em-search-views-trigger-vars',[views_ddm_options]);
2505	let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, };
2506	$(document).trigger('em-tippy-vars',[tooltip_vars]);
2507
2508	// sync main search texts to advanced search
2509	let search_forms = $('.em-search:not(.em-search-advanced)');
2510	search_forms.each( function(){
2511		/*
2512		 * Important references we'll reuse in scope
2513		 */
2514		let search = $(this);
2515		let search_id = search.attr('id').replace('em-search-', '');
2516		let search_form = search.find('.em-search-form').first();
2517		let search_advanced = search.find('.em-search-advanced'); // there should only be one anyway
2518
2519		/*
2520		 * Counter functions
2521		 */
2522		const update_input_count = function( input, qty = 1 ){
2523			let el = jQuery(input);
2524			let total = qty > 0 ? qty : null;
2525			el.attr('data-advanced-total-input', total);
2526			update_search_totals();
2527		};
2528
2529		const update_search_totals = function( applied = false ){
2530			// set everything to 0, recount
2531			search.find('span.total-count').remove();
2532			// find all fields with total attributes and sum them up
2533			let total = 0;
2534			search_advanced.find('[data-advanced-total-input]').each( function(){
2535				let total_input = this.getAttribute('data-advanced-total-input');
2536				total += Math.abs( total_input );
2537			});
2538			search.attr('data-advanced-total', total);
2539			update_trigger_count( applied );
2540			// find all sections with totals and display them (added above)
2541			search_advanced.find('.em-search-advanced-section').each( function(){
2542				let section = $(this);
2543				let section_total = 0;
2544				section.attr('data-advanced-total', 0);
2545				// go through all set qtys and calculate
2546				section.find('[data-advanced-total-input]').each( function(){
2547					let total_input = this.getAttribute('data-advanced-total-input');
2548					section_total += Math.abs( total_input );
2549				});
2550				section.attr('data-advanced-total', section_total);
2551				update_section_count(section);
2552			});
2553			// update triggers, search, clear button etc.
2554			if( total > 0 || !search.attr('data-advanced-previous-total') || total != search.attr('data-advanced-previous-total') ){
2555				update_submit_buttons( true );
2556			}
2557			update_clear_button_count();
2558		}
2559
2560		const update_trigger_count = function( applied = false ){
2561			let triggers = jQuery('.em-search-advanced-trigger[data-search-advanced-id="em-search-advanced-'+ search_id +'"]'); // search like this ato apply to external triggers
2562			triggers.find('span.total-count').remove();
2563			let total = search.attr('data-advanced-total');
2564			if( total > 0 ){
2565				let trigger_count = jQuery('<span class="total-count">'+ total + '</span>').appendTo(triggers);
2566				if( !applied ){
2567					trigger_count.addClass('tentative');
2568				}
2569			}
2570		};
2571
2572		const update_submit_buttons = function( enabled = false ){
2573			// update the clear link
2574			let submit_button = search_advanced.find('button[type="submit"]');
2575			let main_submit_button = search.find('.em-search-main-bar button[type="submit"]');
2576			let submit_buttons = submit_button.add( main_submit_button ); // merge together to apply chanegs
2577			if( enabled ){
2578				submit_buttons.removeClass('disabled').attr('aria-disabled', 'false');
2579			}else{
2580				submit_buttons.addClass('disabled').attr('aria-disabled', 'true');
2581			}
2582		};
2583
2584		const update_section_count = function( section ){
2585			let section_total = section.attr('data-advanced-total');
2586			section.find('header span.total-count').remove();
2587			if( section_total > 0 ){
2588				$('<span class="total-count">'+ section_total +'</span>').appendTo( section.find('header') );
2589			}
2590		};
2591
2592		const update_clear_button_count = function(){
2593			// update the clear link
2594			let clear_link = search_advanced.find('button[type="reset"]');
2595			if( !clear_link.attr('data-placeholder') ){
2596				clear_link.attr('data-placeholder', clear_link.text());
2597			}
2598			let total = search.attr('data-advanced-total');
2599			if( total > 0 ){
2600				clear_link.text( clear_link.attr('data-placeholder') + ' (' + total + ')' ).prop('disabled', false);
2601				clear_link.removeClass('disabled').attr('aria-disabled', 'false');
2602			}else{
2603				clear_link.text( clear_link.attr('data-placeholder') );
2604				clear_link.addClass('disabled').attr('aria-disabled', 'true');
2605			}
2606		};
2607
2608		/*
2609		 * Triggers
2610		 */
2611		search.find('.em-search-views-trigger').each( function(){
2612			tooltip_vars.content = this.parentElement.getAttribute('aria-label');
2613			let views_tooltip = tippy(this.parentElement, tooltip_vars);
2614			let views_content = this.parentElement.querySelector('.em-search-views-options');
2615			let views_content_parent = views_content.parentElement;
2616			let tippy_content = document.createElement('div');
2617			views_ddm_options.content = tippy_content;
2618			let views_ddm = tippy(this, views_ddm_options);
2619			views_ddm.setProps({
2620				onShow(instance){
2621					views_tooltip.disable();
2622					tippy_content.append(views_content);
2623				},
2624				onShown(instance){ // keyboard support
2625					views_content.querySelector('input:checked').focus();
2626				},
2627				onHidden(instance){
2628					views_tooltip.enable();
2629					if( views_content.parentElement !== views_content_parent ) {
2630						views_content_parent.append(views_content);
2631					}
2632				}
2633			});
2634			let tippy_listener = function(e){
2635				if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
2636				e.preventDefault();
2637				e.stopPropagation();
2638				this._tippy.show();
2639				views_tooltip.hide();
2640			}
2641			this.addEventListener('click', tippy_listener);
2642			this.addEventListener('keydown', tippy_listener);
2643			this.firstElementChild.addEventListener('focus', function(e){
2644				views_ddm.hide();
2645				views_tooltip.enable();
2646				views_tooltip.show();
2647			});
2648			this.firstElementChild.addEventListener('blur', function(){
2649				views_tooltip.hide();
2650			});
2651
2652			search.on('focus blur', '.em-search-views-options input', function(){
2653				if( document.activeElement === this ){
2654					this.parentElement.classList.add('focused');
2655				}else{
2656					this.parentElement.classList.remove('focused');
2657				}
2658			});
2659
2660			search[0].addEventListener('change', function(){
2661				update_submit_buttons(true);
2662			});
2663
2664			search.on('keydown click', '.em-search-views-options input', function( e ){
2665				// get relevant vars
2666				if( e.type === 'keydown' && e.which !== 13 ){
2667					if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) {
2668						if (e.which === 38) {
2669							if (this.parentElement.previousElementSibling) {
2670								this.parentElement.previousElementSibling.focus();
2671							}
2672						} else if (e.which === 40) {
2673							if (this.parentElement.nextElementSibling) {
2674								this.parentElement.nextElementSibling.focus();
2675							}
2676						}
2677						return false;
2678					} else if ( e.which === 9 ) {
2679						// focus out
2680						views_ddm.hide();
2681					}
2682					return true;
2683				}
2684				this.checked = true;
2685				let input = $(this);
2686				// mark label selected
2687				input.closest('fieldset').find('label').removeClass('checked');
2688				input.parent().addClass('checked');
2689				// get other reference elements we need
2690				let views_wrapper = $(this).closest('.em-search-views');
2691				let view_type = this.value;
2692				let trigger = views_wrapper.children('.em-search-views-trigger');
2693				let trigger_option = trigger.children('.em-search-view-option');
2694				// change view, if different
2695				if( view_type !== trigger_option.attr('data-view') ){
2696					trigger_option.attr('data-view', this.value).text(this.parentElement.innerText);
2697					// remove custom search vals from current view so it's not used into another view
2698					$('#em-view-'+search_id).find('#em-view-custom-data-search-'+search_id).remove();
2699					// trigger custom event in case form disabled due to no search vals
2700					search_form.find('button[type="submit"]').focus();
2701					search_form.trigger('forcesubmit');
2702				}
2703				views_ddm.hide();
2704			});
2705		});
2706
2707		search.find('.em-search-sort-trigger').each( function(){
2708			tooltip_vars.content = this.parentElement.getAttribute('aria-label');
2709			let views_tooltip = tippy(this.parentElement, tooltip_vars);
2710			search.on('keydown click', '.em-search-sort-option', function( e ){
2711				// get other reference elements we need
2712				let order = this.dataset.sort === 'ASC' ? 'DESC' : 'ASC';
2713				this.setAttribute('data-sort', order);
2714				this.parentElement.querySelector('input[name="order"]').value = order;
2715				// trigger custom event in case form disabled due to no search vals
2716				search_form.find('button[type="submit"]').focus();
2717				search_form.trigger('forcesubmit');
2718			});
2719		});
2720
2721		// add trigger logic for advanced popup modal
2722		let search_advanced_trigger_click = function( e ){
2723			if( search.hasClass('advanced-mode-inline') ){
2724				// inline
2725				if( !search_advanced.hasClass('visible') ){
2726					search_advanced.slideDown().addClass('visible');
2727					if( '_tippy' in this ){
2728						this._tippy.setContent(this.getAttribute('data-label-hide'));
2729					}
2730				}else{
2731					search_advanced.slideUp().removeClass('visible');
2732					if( '_tippy' in this ){
2733						this._tippy.setContent(this.getAttribute('data-label-show'));
2734					}
2735				}
2736			}else{
2737				// wrap modal popup element in a form, so taht it's 'accessible' with keyboard
2738				if( !search_advanced.hasClass('active') ) {
2739					let form_wrapper = $('<form action="" method="post" class="em-search-advanced-form" id="em-search-form-advanced-' + search_id + '"></form>');
2740					form_wrapper.appendTo(search_advanced);
2741					search_advanced.find('.em-modal-popup').appendTo(form_wrapper);
2742					// open modal
2743					let button = this;
2744					openModal(search_advanced, function () {
2745						// Do this instead
2746						button.blur();
2747						search_advanced.find('input.em-search-text').focus();
2748					});
2749				}
2750			}
2751		};
2752		search.on('click', 'button.em-search-advanced-trigger:not([data-search-advanced-id],[data-parent-trigger])', search_advanced_trigger_click);
2753		search_form.on('search_advanced_trigger', search_advanced_trigger_click);
2754
2755		search_advanced.on('em_modal_close', function(){
2756			search_advanced.find('.em-modal-popup').appendTo(search_advanced);
2757			search_advanced.children('form').remove();
2758			let trigger = search.find('button.em-search-advanced-trigger').focus();
2759			if( trigger.length > 0 && '_tippy' in trigger[0] ){
2760				trigger[0]._tippy.hide();
2761			}
2762		});
2763
2764		// add header toggle logic to expand/collapse sections - add directly to elements since they move around the DOM due to modal
2765		search_advanced.find('.em-search-advanced-section > header').on('click', function(){
2766			let header = $(this);
2767			let section = header.closest('section');
2768			let content = header.siblings('.em-search-section-content');
2769			if( section.hasClass('active') ){
2770				content.slideUp();
2771				section.removeClass('active');
2772			}else{
2773				content.slideDown();
2774				section.addClass('active');
2775			}
2776		});
2777
2778		/*
2779		 *  Advanced Search Field Listeners - Main Search Form
2780		 */
2781
2782		let search_form_advanced_calculate_totals_inputs = function( input ){
2783			// for textboxes we only need to add or remove 1 advanced
2784			let el = $(input);
2785			let qty = el.val() !== '' ? 1:0;
2786			update_input_count( el, qty );
2787		};
2788
2789		// These are for the main search bar, syncing information back into the advanced form
2790		search.on('change input', '.em-search-main-bar input.em-search-text', function( e ){
2791			// sync advanced input field with same text
2792			let advanced_search_input = search_advanced.find('input.em-search-text');
2793			if ( advanced_search_input.length === 0 ) {
2794				search_form_advanced_calculate_totals_inputs(this);
2795			} else {
2796				advanced_search_input.val( this.value );
2797				// recalculate totals from here
2798				search_form_advanced_calculate_totals_inputs(advanced_search_input[0]);
2799			}
2800			// any change without advanced form should show the search form still
2801			update_submit_buttons( true);
2802		});
2803		search.on('change', '.em-search-main-bar input.em-search-geo-coords', function(){
2804			let el = $(this);
2805			let advanced_geo = search_advanced.find('div.em-search-geo');
2806			// copy over value and class names
2807			let advanced_geo_coords = advanced_geo.find('input.em-search-geo-coords');
2808			if( advanced_geo_coords.length > 0 ) {
2809				advanced_geo_coords.val(el.val()).attr('class', el.attr('class'));
2810				let geo_text = el.siblings('input.em-search-geo').first();
2811				advanced_geo.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class'));
2812				// calculate totals from here
2813				search_form_advanced_calculate_totals_inputs(advanced_geo_coords);
2814			} else {
2815				// calculate totals from here
2816				search_form_advanced_calculate_totals_inputs(this);
2817			}
2818		});
2819		search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2820			if( !('_flatpickr' in this) ) return;
2821			this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) {
2822				// any change without advanced form should show the search form
2823				let advanced_datepicker = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input');
2824				if( advanced_datepicker.length === 0 ) {
2825					// update counter
2826					let qty = dateStr ? 1:0;
2827					update_input_count(instance.input, qty);
2828				} else {
2829					// update advanced search form datepicker values, trigger a close for it to handle the rest
2830					advanced_datepicker[0]._flatpickr.setDate( selectedDates, true );
2831					advanced_datepicker[0]._flatpickr.close();
2832				}
2833			});
2834		});
2835
2836		search.find('select.em-selectize').each(function () {
2837			if( 'selectize' in this ) {
2838				this.selectize.on('change', function () {
2839					search_advanced_selectize_change(this);
2840				});
2841			}
2842		});
2843
2844		/*
2845		 *  Advanced Search Field Listeners - Advanced Search Form
2846		 */
2847
2848		// regular text advanced or hidden inputs that represent another ui
2849		search_advanced.on('change input', 'input.em-search-text', function( e ){
2850			if( e.type === 'change' ){
2851				// copy over place info on change only, not on each keystroke
2852				search.find('.em-search-main input.em-search-text').val( this.value );
2853			}
2854			search_form_advanced_calculate_totals_inputs(this);
2855		});
2856		search_advanced.on('change', 'input.em-search-geo-coords', function( e ){
2857			search_form_advanced_calculate_totals_inputs(this);
2858			//update values in main search
2859			let el = $(this);
2860			let main = search.find('.em-search-main div.em-search-geo');
2861			if( main.length > 0 ){
2862				// copy over value and class names
2863				main.find('input.em-search-geo-coords').val( el.val() ).attr('class', el.attr('class'));
2864				let geo_text = el.siblings('input.em-search-geo');
2865				main.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class'));
2866			}
2867		});
2868		search_advanced.on('clear_search', function(){
2869			let text = $(this).find('input.em-search-text');
2870			if( text.length === 0 ) {
2871				// select geo from main if it exists, so we keep counts synced
2872				text = search.find('input.em-search-text');
2873			}
2874			text.val('').attr('value', null).trigger('change'); // value attr removed as well due to compat issues in Chrome (possibly more)
2875		});
2876		/* Not sure we should be calculating this... since it's always set to something.
2877		search_advanced.on('change', 'select.em-search-geo-unit, select.em-search-geo-distance', function( e ){
2878			// combine both values into parent, if value set then it's a toggle
2879			let el = jQuery(this);
2880			let qty = el.val() ? 1 : null;
2881			el.closest('.em-search-geo-units').attr('data-advanced-total-input', qty);
2882			update_search_totals();
2883		});
2884		 */
2885		search_advanced.on('change', 'input[type="checkbox"]', function( e ){
2886			let el = $(this);
2887			let qty = el.prop('checked') ? 1:0;
2888			update_input_count( el, qty );
2889		});
2890		search_advanced.on('calculate_totals', function(){
2891			search_advanced.find('input.em-search-text, input.em-search-geo-coords').each( function(){
2892				search_form_advanced_calculate_totals_inputs(this);
2893			});
2894			search_advanced.find('input[type="checkbox"]').trigger('change');
2895		});
2896		search_advanced.on('clear_search', function(){
2897			let geo = $(this).find('input.em-search-geo');
2898			if( geo.length === 0 ) {
2899				// select geo from main if it exists, so we keep counts synced
2900				geo = search.find('input.em-search-geo');
2901			}
2902			geo.removeClass('off').removeClass('on').val('');
2903			geo.siblings('input.em-search-geo-coords').val('').trigger('change');
2904			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
2905		});
2906
2907		// datepicker advanced logic
2908		search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2909			if( !('_flatpickr' in this) ) return;
2910			this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) {
2911				// check previous value against current value, no change, no go
2912				let previous_value = instance.input.getAttribute('data-previous-value');
2913				if( previous_value !== dateStr ){
2914					// update counter
2915					let qty = dateStr ? 1:0;
2916					update_input_count(instance.input, qty);
2917					// update main search form datepicker values
2918					let main_datepicker = search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input');
2919					if( main_datepicker.length > 0 ) {
2920						main_datepicker[0]._flatpickr.setDate(selectedDates, true);
2921					}
2922					// set for next time
2923					instance.input.setAttribute('data-previous-value', dateStr);
2924				}
2925			});
2926		});
2927		search_advanced.on('calculate_totals', function(){
2928			search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').first().each( function(){
2929				let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0;
2930				update_input_count(this, qty);
2931			});
2932		});
2933		search_advanced.on('clear_search', function(){
2934			let datepickers = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input');
2935			if( datepickers.length === 0 ) {
2936				// find datepickers on main form so syncing is sent up
2937				datepickers = search.find('.em-datepicker input.em-search-scope.flatpickr-input');
2938			}
2939			datepickers.each(function () {
2940				this._flatpickr.clear();
2941				update_input_count(this, 0);
2942			});
2943		});
2944		// clear the date total for calendars, before anything is done
2945		let scope_calendar_check = function(){
2946			search.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2947				if( search.attr('data-view') == 'calendar' ){
2948					this.setAttribute('data-advanced-total-input', 0);
2949					this._flatpickr.input.disabled = true;
2950				}else{
2951					this._flatpickr.input.disabled = false;
2952					let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0;
2953					this.setAttribute('data-advanced-total-input', qty);
2954				}
2955			});
2956		};
2957		$(document).on('em_search_loaded', scope_calendar_check);
2958		scope_calendar_check();
2959
2960		// selectize advanced
2961		let search_advanced_selectize_change = function( selectize ){
2962			let qty = selectize.items.length;
2963			// handle 'all' default values
2964			if( qty == 1 && !selectize.items[0] ){
2965				qty = 0;
2966			}
2967			if ( selectize.$input.closest('.em-search-advanced').length === 0 ) {
2968				// sync advanced input field with same text
2969				let classSearch = '.' + selectize.$input.attr('class').replaceAll(' ', '.').trim();
2970				let advanced_search_input = search_advanced.find( classSearch );
2971				if ( advanced_search_input.length > 0 ) {
2972					// copy over values
2973					advanced_search_input[0].selectize.setValue( selectize.items );
2974					// recalculate totals from here
2975					search_advanced_selectize_change(advanced_search_input[0].selectize);
2976				}
2977			}
2978			update_input_count( selectize.$input, qty );
2979		};
2980
2981		search_advanced.find('select.em-selectize').each(function () {
2982			if( 'selectize' in this ) {
2983				this.selectize.on('change', function () {
2984					search_advanced_selectize_change(this);
2985				});
2986			}
2987		});
2988		search_advanced.on('calculate_totals', function(){
2989			$(this).find('select.em-selectize').each( function(){
2990				search_advanced_selectize_change(this.selectize);
2991			});
2992		});
2993		search_advanced.on('clear_search', function(){
2994			let clearSearch = function(){
2995				this.selectize.clear();
2996				this.selectize.refreshItems();
2997				this.selectize.refreshOptions(false);
2998				this.selectize.blur();
2999			};
3000			search_advanced.find('select.em-selectize').each( clearSearch );
3001			search.find('.em-search-main-bar select.em-selectize').each( clearSearch );
3002		});
3003
3004		// location-specific stuff for dropdowns (powered by selectize)
3005		let locations_selectize_load_complete = function(){
3006			if( 'selectize' in this ) {
3007				this.selectize.settings.placeholder = this.selectize.settings.original_placeholder;
3008				this.selectize.updatePlaceholder();
3009				// get options from select again
3010				let options = [];
3011				this.selectize.$input.find('option').each( function(){
3012					let value = this.value !== null ? this.value : this.innerHTML;
3013					options.push({ value : value, text: this.innerHTML});
3014				});
3015				this.selectize.addOption(options);
3016				this.selectize.refreshOptions(false);
3017			}
3018		};
3019		let locations_selectize_load_start = function(){
3020			if( 'selectize' in this ){
3021				this.selectize.clearOptions();
3022				if( !('original_placeholder' in this.selectize.settings) ) this.selectize.settings.original_placeholder = this.selectize.settings.placeholder;
3023				this.selectize.settings.placeholder = EM.txt_loading;
3024				this.selectize.updatePlaceholder();
3025			}
3026		};
3027		$('.em-search-advanced select[name=country], .em-search select[name=country]').on('change', function(){
3028			var el = $(this);
3029			let wrapper = el.closest('.em-search-location');
3030			wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>');
3031			wrapper.find('select[name=region]').html('<option value="">'+EM.txt_loading+'</option>');
3032			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>');
3033			wrapper.find('select[name=state], select[name=region], select[name=town]').each( locations_selectize_load_start );
3034			if( el.val() != '' ){
3035				wrapper.find('.em-search-location-meta').slideDown();
3036				var data = {
3037					action : 'search_states',
3038					country : el.val(),
3039					return_html : true,
3040				};
3041				wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3042				data.action = 'search_regions';
3043				wrapper.find('select[name=region]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3044				data.action = 'search_towns';
3045				wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3046			}else{
3047				wrapper.find('.em-search-location-meta').slideUp();
3048			}
3049		});
3050		$('.em-search-advanced select[name=region], .em-search select[name=region]').on('change', function(){
3051			var el = $(this);
3052			let wrapper = el.closest('.em-search-location');
3053			wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>');
3054			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>');
3055			wrapper.find('select[name=state], select[name=town]').each( locations_selectize_load_start );
3056			var data = {
3057				action : 'search_states',
3058				region : el.val(),
3059				country : wrapper.find('select[name=country]').val(),
3060				return_html : true
3061			};
3062			wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3063			data.action = 'search_towns';
3064			wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3065		});
3066		$('.em-search-advanced select[name=state], .em-search select[name=state]').on('change', function(){
3067			var el = $(this);
3068			let wrapper = el.closest('.em-search-location');
3069			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>').each( locations_selectize_load_start );
3070			var data = {
3071				action : 'search_towns',
3072				state : el.val(),
3073				region : wrapper.find('select[name=region]').val(),
3074				country : wrapper.find('select[name=country]').val(),
3075				return_html : true
3076			};
3077			wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3078		});
3079
3080		/*
3081		 *  Clear & Search Actions
3082		 */
3083		// handle clear link for advanced
3084		search_advanced.on( 'click', 'button[type="reset"]', function(){
3085			// clear text search advanced, run clear hook for other parts to hook into
3086			if( search.attr('data-advanced-total') == 0 ) return;
3087			// search text and geo search
3088			search_advanced.find('input.em-search-text, input.em-search-geo').val('').attr('data-advanced-total-input', null).trigger('change');
3089			// other implementations hook here and do what you need
3090			search.trigger('clear_search');
3091			search_advanced.trigger('clear_search');
3092			// remove counters, set data counters to 0, hide section and submit form without search settings
3093			update_search_totals(true); // in theory, this is 0 and removes everything
3094			if( search_advanced.hasClass('em-modal') ) {
3095				search_advanced_trigger_click();
3096			}
3097			search_advanced.append('<input name="clear_search" type="hidden" value="1">');
3098			search_advanced.find('button[type="submit"]').trigger('forceclick');
3099			update_clear_button_count();
3100		}).each( function(){
3101			search_advanced.trigger('calculate_totals');
3102			update_search_totals(true);
3103		});
3104		const on_update_trigger_count = function(e, applied = true){
3105			update_trigger_count( applied );
3106		};
3107		search.on('update_trigger_count', on_update_trigger_count);
3108		search_advanced.on('update_trigger_count', on_update_trigger_count);
3109
3110		// handle submission for advanced
3111		search_advanced.on( 'click forceclick', 'button[type="submit"]', function(e){
3112			e.preventDefault();
3113			if( this.classList.contains('disabled') && e.type !== 'forceclick' ) return false;
3114			// close attach back to search form
3115			if( search_advanced.hasClass('em-modal') ) {
3116				closeModal(search_advanced, function () {
3117					// submit for search
3118					search_form.submit();
3119				});
3120			}else{
3121				search_form.submit();
3122			}
3123			return false; // we handled it
3124		});
3125
3126		search.on('submit forcesubmit', '.em-search-form', function(e){
3127			if ( search.hasClass('no-ajax') ) {
3128				return true;
3129			}
3130			e.preventDefault();
3131			let form = $(this);
3132			let submit_buttons = form.find('button[type="submit"]');
3133			if( e.type !== 'forcesubmit' && submit_buttons.hasClass('disabled') ) return false;
3134			let wrapper = form.closest('.em-search');
3135			if( wrapper.hasClass('em-search-legacy') ){
3136				em_submit_legacy_search_form(form);
3137			}else{
3138				let view = $('#em-view-'+search_id);
3139				let view_type = form.find('[name="view"]:checked, [name="view"][type="hidden"], .em-search-view-option-hidden').val();
3140				if( Array.isArray(view_type) ) view_type = view_type.shift();
3141				// copy over custom view information, remove it further down
3142				let custom_view_data = view.find('#em-view-custom-data-search-'+search_id).clone();
3143				let custom_view_data_container = $('<div class="em-view-custom-data"></div>');
3144				custom_view_data.children().appendTo(custom_view_data_container);
3145				custom_view_data.remove();
3146				custom_view_data_container.appendTo(form);
3147				// add loading stuff
3148				view.append('<div class="em-loading"></div>');
3149				submit_buttons.each( function(){
3150					if( EM.txt_searching !== this.innerHTML ) {
3151						this.setAttribute('data-button-text', this.innerHTML);
3152						this.innerHTML = EM.txt_searching;
3153					}
3154				});
3155				var vars = form.serialize();
3156				$.ajax( EM.ajaxurl, {
3157					type : 'POST',
3158					dataType : 'html',
3159					data : vars,
3160					success : function(responseText){
3161						submit_buttons.each( function(){
3162							this.innerHTML = this.getAttribute('data-button-text');
3163						});
3164						view = EM_View_Updater( view, responseText );
3165						// update view definitions
3166						view.attr('data-view', view_type);
3167						search.attr('data-view', view_type);
3168						search_advanced.attr('data-view', view_type);
3169						jQuery(document).triggerHandler('em_view_loaded_'+view_type, [view, form, e]);
3170						jQuery(document).triggerHandler('em_search_loaded', [view, form, e]); // ajax has loaded new results
3171						jQuery(document).triggerHandler('em_search_result', [vars, view, e]); // legacy for backcompat, use the above
3172						wrapper.find('.count.tentative').removeClass('tentative');
3173						// deactivate submit button until changes are made again
3174						submit_buttons.addClass('disabled').attr('aria-disabled', 'true');
3175						// update search totals
3176						update_search_totals(true);
3177						search.attr('data-advanced-previous-total', search.attr('data-advanced-total')); // so we know if filters were used in previous search
3178						update_submit_buttons(false);
3179						custom_view_data_container.remove(); // remove data so it's reloaded again later
3180						search.find('input[name="clear_search"]').remove();
3181					}
3182				});
3183			}
3184			return false;
3185		});
3186
3187		// observe resizing
3188		EM_ResizeObserver( EM.search.breakpoints, [search[0]]);
3189	});
3190
3191	// handle external triggers, e.g. a calendar shortcut for a hidden search form
3192	$(document).on('click', '.em-search-advanced-trigger[data-search-advanced-id], .em-search-advanced-trigger[data-parent-trigger]', function(){
3193		if( this.getAttribute('data-search-advanced-id') ){
3194			// trigger the search form by parent
3195			let search_advanced_form = document.getElementById( this.getAttribute('data-search-advanced-id') );
3196			if( search_advanced_form ){
3197				let search_form = search_advanced_form.closest('form.em-search-form');
3198				if( search_form ){
3199					search_form.dispatchEvent( new CustomEvent('search_advanced_trigger') );
3200					return;
3201				}
3202			}
3203		} else if( this.getAttribute('data-parent-trigger') ) {
3204			let trigger = document.getElementById(this.getAttribute('data-parent-trigger'));
3205			if ( trigger ) {
3206				trigger.click();
3207				return;
3208			}
3209		}
3210		console.log('Cannot locate a valid advanced search form trigger for %o', this);
3211	});
3212
3213	$(document).on('click', '.em-view-container .em-ajax.em-pagination a.page-numbers', function(e){
3214		let a = $(this);
3215		let view = a.closest('.em-view-container');
3216		let href = a.attr('href');
3217		//add data-em-ajax att if it exists
3218		let data = a.closest('.em-pagination').attr('data-em-ajax');
3219		if( data ){
3220			href += href.includes('?') ? '&' : '?';
3221			href += data;
3222		}
3223		// build querystring from url
3224		let url_params = new URL(href, window.location.origin).searchParams;
3225		if( view.attr('data-view') ) {
3226			url_params.set('view', view.attr('data-view'));
3227		}
3228		// start ajax
3229		view.append('<div class="loading" id="em-loading"></div>');
3230		$.ajax( EM.ajaxurl, {
3231			type : 'POST',
3232			dataType : 'html',
3233			data : url_params.toString(),
3234			success : function(responseText) {
3235				view = EM_View_Updater( view, responseText );
3236				view.find('.em-pagination').each( function(){
3237					paginationObserver.observe(this);
3238				});
3239				jQuery(document).triggerHandler('em_page_loaded', [view]);
3240				view[0].scrollIntoView({ behavior: "smooth" });
3241			}
3242		});
3243		e.preventDefault();
3244		return false;
3245	});
3246
3247	const paginationObserver = new ResizeObserver( function( entries ){
3248		for (let entry of entries) {
3249			let el = entry.target;
3250			if( !el.classList.contains('observing') ) {
3251				el.classList.add('observing'); // prevent endless loop on resizing within this check
3252				// check if any pagination parts are overflowing
3253				let overflowing = false;
3254				el.classList.remove('overflowing');
3255				for ( const item of el.querySelectorAll('.not-current')) {
3256					if( item.scrollHeight > item.clientHeight || item.scrollWidth > item.clientWidth ){
3257						overflowing = true;
3258						break; // break if one has overflown
3259					}
3260				};
3261				// add or remove overflow classes
3262				if( overflowing ){
3263					el.classList.add('overflowing')
3264				}
3265				el.classList.remove('observing');
3266			}
3267		}
3268	});
3269	$('.em-pagination').each( function(){
3270		paginationObserver.observe(this);
3271	});
3272
3273	/* START Legacy */
3274	// deprecated - hide/show the advanced search advanced link - relevant for old template overrides
3275	$(document).on('click change', '.em-search-legacy .em-toggle', function(e){
3276		e.preventDefault();
3277		//show or hide advanced search, hidden by default
3278		var el = $(this);
3279		var rel = el.attr('rel').split(':');
3280		if( el.hasClass('show-search') ){
3281			if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideUp(); }
3282			else{ $(rel[0]).slideUp(); }
3283			el.find('.show, .show-advanced').show();
3284			el.find('.hide, .hide-advanced').hide();
3285			el.removeClass('show-search');
3286		}else{
3287			if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideDown(); }
3288			else{ $(rel[0]).slideDown(); }
3289			el.find('.show, .show-advanced').hide();
3290			el.find('.hide, .hide-advanced').show();
3291			el.addClass('show-search');
3292		}
3293	});
3294	// handle search form submission
3295	let em_submit_legacy_search_form = function( form ){
3296		if( this.em_search && this.em_search.value == EM.txt_search){ this.em_search.value = ''; }
3297		var results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
3298		if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
3299		if( results_wrapper.length > 0 ){
3300			results_wrapper.append('<div class="loading" id="em-loading"></div>');
3301			var submitButton = form.find('.em-search-submit button');
3302			submitButton.attr('data-button-text', submitButton.val()).val(EM.txt_searching);
3303			var img = submitButton.children('img');
3304			if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-mag.png', 'search-loading.gif'));
3305			var vars = form.serialize();
3306			$.ajax( EM.ajaxurl, {
3307				type : 'POST',
3308				dataType : 'html',
3309				data : vars,
3310				success : function(responseText){
3311					submitButton.val(submitButton.attr('data-button-text'));
3312					if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-loading.gif', 'search-mag.png'));
3313					results_wrapper.replaceWith(responseText);
3314					if( form.find('input[name=em_search]').val() == '' ){ form.find('input[name=em_search]').val(EM.txt_search); }
3315					//reload results_wrapper
3316					results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
3317					if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
3318					jQuery(document).triggerHandler('em_search_ajax', [vars, results_wrapper, e]); //ajax has loaded new results
3319				}
3320			});
3321			e.preventDefault();
3322			return false;
3323		}
3324	};
3325	if( $('.em-search-ajax').length > 0 ){
3326		$(document).on('click', '.em-search-ajax a.page-numbers', function(e){
3327			var a = $(this);
3328			var data = a.closest('.em-pagination').attr('data-em-ajax');
3329			var wrapper = a.closest('.em-search-ajax');
3330			var wrapper_parent = wrapper.parent();
3331			var qvars = a.attr('href').split('?');
3332			var vars = qvars[1];
3333			//add data-em-ajax att if it exists
3334			if( data != '' ){
3335				vars = vars != '' ? vars+'&'+data : data;
3336			}
3337			vars += '&legacy=1';
3338			wrapper.append('<div class="loading" id="em-loading"></div>');
3339			$.ajax( EM.ajaxurl, {
3340				type : 'POST',
3341				dataType : 'html',
3342				data : vars,
3343				success : function(responseText) {
3344					wrapper.replaceWith(responseText);
3345					wrapper = wrapper_parent.find('.em-search-ajax');
3346					jQuery(document).triggerHandler('em_search_ajax', [vars, wrapper, e]); //ajax has loaded new results
3347				}
3348			});
3349			e.preventDefault();
3350			return false;
3351		});
3352	}
3353	/* END Legacy */
3354});
3355
3356/*
3357* CALENDAR
3358*/
3359jQuery(document).ready( function($){
3360
3361	const em_calendar_init = function( calendar ){
3362		calendar = $(calendar);
3363		if( !calendar.attr('id') || !calendar.attr('id').match(/^em-calendar-[0-9]+$/) ){
3364			calendar.attr('id', 'em-calendar-' + Math.floor(Math.random() * 10000)); // retroactively add id to old templates
3365		}
3366		calendar.find('a').off("click");
3367		calendar.on('click', 'a.em-calnav, a.em-calnav-today', function(e){
3368			e.preventDefault();
3369			const el = $(this);
3370			if( el.attr('href') === '') return; // do nothing if disabled or no link provided
3371			el.closest('.em-calendar').prepend('<div class="loading" id="em-loading"></div>');
3372			let url = el.attr('href');
3373			const view_id = el.closest('[data-view-id]').data('view-id');
3374			const custom_data = $('form#em-view-custom-data-calendar-'+ view_id);
3375			let form_data = new FormData();
3376			if( custom_data.length > 0 ){
3377				form_data = new FormData(custom_data[0]);
3378				let $URL = new URL(url, window.location.origin);
3379				let url_params = $URL.searchParams;
3380				for (const [key, value] of url_params.entries()) {
3381					if( key === 'mo' ) {
3382						form_data.set('month', value);
3383					} else if ( key === 'yr' ) {
3384						form_data.set('year', value);
3385					} else {
3386						form_data.set(key, value);
3387					}
3388				}
3389				// remove mo and yr from URL
3390				$URL.searchParams.delete('mo');
3391				$URL.searchParams.delete('yr');
3392				url = $URL.toString();
3393			}
3394			if ( calendar.attr('data-timezone') ) {
3395				form_data.set('calendar_timezone', calendar.attr('data-timezone') );
3396			}
3397			form_data.set('id', view_id);
3398			form_data.set('ajaxCalendar', 1); // AJAX trigger
3399			form_data.set('em_ajax', 1); // AJAX trigger
3400			// check advanced trigger
3401			if( calendar.hasClass('with-advanced') ){
3402				form_data.set('has_advanced_trigger', 1);
3403			}
3404			$.ajax({
3405				url: url,
3406				data: form_data,
3407				processData: false,
3408				contentType: false,
3409				method: 'POST',
3410				success: function( data ){
3411					let view = EM_View_Updater( calendar, data );
3412					if( view.hasClass('em-view-container') ){
3413						calendar = view.find('.em-calendar');
3414					}else{
3415						calendar = view;
3416					}
3417					calendar[0].dispatchEvent( new CustomEvent( 'em_calendar_load', { bubbles: true } ) );
3418				},
3419				dataType: 'html'
3420			});
3421		} );
3422		calendar[0].addEventListener('reload', () => {
3423			calendar_trigger_ajax( calendar, calendar.attr('data-year'), calendar.attr('data-month') );
3424		});
3425		let calendar_trigger_ajax = function( calendar, year, month ){
3426			let link = calendar.find('.em-calnav-next');
3427			let url = new URL(link.attr('href'), window.location.origin);
3428			url.searchParams.set('mo', month);
3429			url.searchParams.set('yr', year);
3430			link.attr('href', url.toString()).trigger('click');
3431		};
3432		let calendar_resize_monthpicker = function( instance, text ){
3433			let span = $('<span class="marker">'+ text +'</span>');
3434			span.insertAfter(instance);
3435			let width = span.width() + 40;
3436			span.remove();
3437			instance.style.setProperty('width', width+'px', 'important');
3438		}
3439		let calendar_month_init = function(){
3440			let month_form = calendar.find('.month form');
3441			calendar.find('.event-style-pill .em-cal-event').on('click', function( e ){
3442				e.preventDefault();
3443				if( !(calendar.hasClass('preview-tooltips') && calendar.data('preview-tooltips-trigger')) && !(calendar.hasClass('preview-modal')) ) {
3444					let link = this.getAttribute('data-event-url');
3445					if (link !== null) {
3446						window.location.href = link;
3447					}
3448				}
3449				// select this date, all others no
3450				e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') );
3451				e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected');
3452			});
3453			if( month_form.length > 0 ){
3454				month_form.find('input[type="submit"]').hide();
3455				let select = $('<select style="display:none;visibility:hidden;"></select>').appendTo(month_form);
3456				let option = $('<option></option>').appendTo(select);
3457				let current_datetime = calendar.find('select[name="month"]').val() + calendar.find('select[name="year"]').val();
3458				let month = calendar.find('select[name="month"]');
3459				let year = calendar.find('select[name="year"]');
3460				let monthpicker = calendar.find('.em-month-picker');
3461				let month_value = monthpicker.data('month-value');
3462				monthpicker.prop('type', 'text').prop('value', month_value);
3463				calendar_resize_monthpicker( monthpicker[0], month_value );
3464				let monthpicker_wrapper = $('#em-flatpickr');
3465				if( monthpicker_wrapper.length === 0 ) {
3466					monthpicker_wrapper = $('<div class="em pixelbones" id="em-flatpickr"></div>').appendTo('body');
3467				}
3468				let minDate = null;
3469				if( calendar.data('scope') === 'future' ){
3470					minDate = new Date();
3471					minDate.setMonth(minDate.getMonth()-1);
3472				}
3473				// locale
3474				if( 'locale' in EM.datepicker ){
3475					flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]);
3476					flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay;
3477				}
3478				monthpicker.flatpickr({
3479					appendTo : monthpicker_wrapper[0],
3480					dateFormat : 'F Y',
3481					minDate : minDate,
3482					disableMobile: "true",
3483					plugins: [
3484						new monthSelectPlugin({
3485							shorthand: true, //defaults to false
3486							dateFormat: "F Y", //defaults to "F Y"
3487							altFormat: "F Y", //defaults to "F Y"
3488						})
3489					],
3490					onChange: function(selectedDates, dateStr, instance) {
3491						calendar_resize_monthpicker( instance.input, dateStr );
3492						calendar_trigger_ajax( calendar, selectedDates[0].getFullYear(), selectedDates[0].getMonth()+1);
3493					},
3494				});
3495				monthpicker.addClass('select-toggle')
3496				/* Disabling native picker at the moment, too quriky cross-browser
3497			}
3498			*/
3499			}
3500			if( calendar.hasClass('preview-tooltips') ){
3501				var tooltip_vars = {
3502					theme : 'light-border',
3503					allowHTML : true,
3504					interactive : true,
3505					trigger : 'mouseenter focus click',
3506					content(reference) {
3507						return document.createElement('div');
3508					},
3509					onShow( instance ){
3510						const id = instance.reference.getAttribute('data-event-id');
3511						const template = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]');
3512						instance.props.content.append(template.first().clone()[0]);
3513					},
3514					onHide( instance ){
3515						instance.props.content.innerHTML = '';
3516					}
3517				};
3518				if( calendar.data('preview-tooltips-trigger') ) {
3519					tooltip_vars.trigger = calendar.data('preview-tooltips-trigger');
3520				}
3521				$(document).trigger('em-tippy-cal-event-vars',[tooltip_vars]);
3522				tippy(calendar.find('.em-cal-event').toArray(), tooltip_vars);
3523			}else if( calendar.hasClass('preview-modal') ){
3524				// Modal
3525				calendar.find('.em-cal-event').on('click', function( e ){
3526					const id = this.getAttribute('data-event-id');
3527					const modal = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]');
3528					modal.attr('data-calendar-id', calendar.attr('id'));
3529					openModal(modal);
3530					// select this date, all others no
3531					e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') );
3532					e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected');
3533				});
3534			}
3535			// responsive mobile view for date clicks
3536			if( calendar.hasClass('responsive-dateclick-modal') ){
3537				calendar.find('.eventful .em-cal-day-date, .eventful-post .em-cal-day-date, .eventful-pre .em-cal-day-date').on('click', function( e ){
3538					//if( calendar.hasClass('size-small') || calendar.hasClass('size-medium') ){
3539					e.preventDefault();
3540					const id = this.getAttribute('data-timestamp');
3541					const modal = calendar.find('.em-cal-date-content[data-calendar-date="'+id+'"], .em-cal-date-content[data-timestamp="'+id+'"]');
3542					modal.attr('data-calendar-id', calendar.attr('id'));
3543					openModal(modal);
3544					// select this date, all others no
3545					e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') );
3546					e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected');
3547				});
3548			}
3549			// observe resizing if not fixed
3550			if( !calendar.hasClass('size-fixed') ){
3551				EM_ResizeObserver( EM.calendar.breakpoints, [calendar[0], calendar[0]]);
3552			}
3553			// even aspect, because aspect ratio can screw up widths vs row template heights
3554			let calendar_body = calendar.find('.em-cal-body');
3555			if( calendar_body.hasClass('even-aspect') ) {
3556				let ro_function = function (el) {
3557					let width = el.firstElementChild.getBoundingClientRect().width;
3558					if (width > 0) {
3559						el.style.setProperty('--grid-auto-rows', 'minmax(' + width + 'px, auto)');
3560					}
3561				}
3562				let ro = new ResizeObserver(function (entries) {
3563					for (let entry of entries) {
3564						ro_function(entry.target);
3565					}
3566				});
3567				ro.observe(calendar_body[0]);
3568				ro_function(calendar_body[0]);
3569			}
3570
3571			// figure out colors
3572			calendar.find('.date-day-colors').each( function(){
3573				let colors = JSON.parse(this.getAttribute('data-colors'));
3574				let day = $(this).siblings('.em-cal-day-date.colored');
3575				let sides = {
3576					1 : { 1 : '--date-border-color', 'class' : 'one' },
3577					2 : { 1 : '--date-border-color-top', 2 : '--date-border-color-bottom', 'class' : 'two' },
3578					3 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 'class' : 'three' },
3579					4 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 4 : '--date-border-color-left', 'class' : 'four' },
3580				};
3581				for (let i = 0; i < colors.length; i += 4) {
3582					const ring_colors = colors.slice(i, i + 4);
3583					// add a ring
3584					let outer_ring = day.children().first();
3585					let new_ring = $('<div class="ring"></div>').prependTo(day);
3586					outer_ring.appendTo(new_ring);
3587					new_ring.addClass( sides[ring_colors.length].class );
3588					for ( let it = 0; it < ring_colors.length; it++ ){
3589						new_ring.css(sides[ring_colors.length][it+1], ring_colors[it]);
3590					}
3591				}
3592			});
3593
3594			if( calendar.hasClass('with-advanced') ){
3595				const trigger = calendar.find('.em-search-advanced-trigger');
3596				const search_advanced = $('#'+trigger.attr('data-search-advanced-id'));
3597				search_advanced.triggerHandler('update_trigger_count');
3598			}
3599		}
3600		calendar_month_init();
3601		$(document).triggerHandler('em_calendar_loaded', [calendar]);
3602	};
3603	$('.em-calendar').each( function(){
3604		let calendar = $(this);
3605		em_calendar_init( calendar );
3606	});
3607	$(document).on('em_calendar_load', '.em-calendar', function(){
3608		em_calendar_init( this );
3609	});
3610	$(document).on('em_view_loaded_calendar', function( e, view, form ){
3611		let calendar;
3612		if( view.hasClass('em-calendar') ){
3613			calendar = view;
3614		}else {
3615			calendar = view.find('.em-calendar').first();
3616		}
3617		em_calendar_init( calendar );
3618	});
3619});
3620
3621let EM_View_Updater = function( element, html ){
3622	let content = jQuery(html);
3623	let view = element.hasClass('em-view-container') ? element : element.parent('.em-view-container');
3624	if( view.length > 0 ){
3625		if( content.hasClass('em-view-container') ){
3626			view.replaceWith(content);
3627			view = content;
3628		}else{
3629			view.empty().append(content);
3630		}
3631	}else{
3632		// create a view if possible
3633		if( content.hasClass('em-view-container') ){
3634			element.replaceWith(content);
3635			view = content;
3636		}else if( content.attr('data-view-id') ){
3637			let view = jQuery('<div class="em em-view-container"></div>');
3638			let view_id = content.attr('data-view-id');
3639			view.attr('data-view-id', view_id);
3640			view.attr('id', 'em-view-'+ view_id);
3641			view.attr('data-view-type', content.attr('data-view-type'));
3642			view.append(content);
3643			element.replaceWith(view);
3644		}
3645	}
3646	em_setup_ui_elements( view[0] );
3647	return view;
3648}
3649
3650/**
3651 * 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.
3652 * An object item with value false will represent any screensize, i.e. it should be the last value when all breakpoints aren't met.
3653 * @param breakpoints
3654 * @param elements
3655 * @constructor
3656 */
3657let EM_ResizeObserver = function( breakpoints, elements ){
3658	const ro = new ResizeObserver( function( entries ){
3659		for (let entry of entries) {
3660			let el = entry.target;
3661			if( !el.classList.contains('size-fixed') ) {
3662				for (const [name, breakpoint] of Object.entries(breakpoints)) {
3663					if (el.offsetWidth <= breakpoint || breakpoint === false) {
3664						for (let breakpoint_name of Object.keys(breakpoints)) {
3665							if (breakpoint_name !== name) el.classList.remove('size-' + breakpoint_name);
3666						}
3667						// add class and trigger event only once
3668						if(	!el.classList.contains('size-' + name) ) {
3669							el.classList.add('size-' + name);
3670							el.dispatchEvent( new CustomEvent('em_resize') );
3671						}
3672						break;
3673					}
3674				}
3675			}
3676		}
3677	});
3678	elements.forEach( function( el ){
3679		if( typeof el !== 'undefined' ){
3680			ro.observe(el);
3681		}
3682	});
3683	return ro;
3684};
3685
3686// event list and event page (inc. some extra booking form logic) - todo/cleanup
3687jQuery(document).ready( function($){
3688	// Events List
3689	let breakpoints = {
3690		'small' : 600,
3691		'large' : false,
3692	}
3693	const events_ro = EM_ResizeObserver( breakpoints, $('.em-list').toArray() );
3694	$(document).on('em_page_loaded em_view_loaded_list em_view_loaded_list-grouped em_view_loaded_grid', function( e, view ){
3695		let new_elements = view.find('.em-list').each( function(){
3696			if( !this.classList.contains('size-fixed') ){
3697				events_ro.observe( this );
3698			}
3699		});
3700	});
3701
3702	$(document).on('click', '.em-grid .em-item[data-href]', function(e){
3703		if( e.target.type !== 'a' ){
3704			window.location.href = this.getAttribute('data-href');
3705		}
3706	});
3707
3708	// Single event area
3709	breakpoints = {
3710		'small' : 600,
3711		'medium' : 900,
3712		'large' : false,
3713	}
3714	const event_ro = EM_ResizeObserver( breakpoints, $('.em-item-single').toArray() );
3715	$(document).on('em_view_loaded', function( e, view ){
3716		let new_elements = view.find('.em-event-single').each( function(){
3717			if( !this.classList.contains('size-fixed') ){
3718				event_ro.observe( this );
3719			}
3720		});
3721	});
3722	// booking form area (WIP)
3723	$(document).on("click", ".em-event-booking-form .em-login-trigger a", function( e ){
3724		e.preventDefault();
3725		var parent = $(this).closest('.em-event-booking-form');
3726		parent.find('.em-login-trigger').hide();
3727		parent.find('.em-login-content').fadeIn();
3728		let login_form = parent.find('.em-login');
3729		login_form[0].scrollIntoView({
3730			behavior: 'smooth'
3731		});
3732		login_form.first().find('input[name="log"]').focus();
3733
3734	});
3735	$(document).on("click", ".em-event-booking-form .em-login-cancel", function( e ){
3736		e.preventDefault();
3737		let parent = $(this).closest('.em-event-booking-form');
3738		parent.find('.em-login-content').hide();
3739		parent.find('.em-login-trigger').show();
3740	});
3741	EM_ResizeObserver( {'small': 500, 'large' : false}, $('.em-login').toArray());
3742
3743});
3744
3745// handle generic ajax submission forms vanilla style
3746document.addEventListener('DOMContentLoaded', function () {
3747	document.querySelectorAll('form.em-ajax-form').forEach( function(el){
3748		el.addEventListener('submit', function(e){
3749			e.preventDefault();
3750			let form = e.currentTarget;
3751			let formData =  new FormData(form);
3752			let button = form.querySelector('button[type="submit"]');
3753			let loader;
3754
3755			if( form.classList.contains('no-overlay-spinner') ){
3756				form.classList.add('loading');
3757			}else{
3758				let loader = document.createElement('div');
3759				loader.id = 'em-loading';
3760				form.append(loader);
3761			}
3762
3763			var request = new XMLHttpRequest();
3764			if( form.getAttribute('data-api-url') ){
3765				request.open('POST', form.getAttribute('data-api-url'), true);
3766				request.setRequestHeader('X-WP-Nonce', EM.api_nonce);
3767			}else{
3768				request.open('POST', EM.ajaxurl, true);
3769			}
3770
3771			request.onload = function() {
3772				if( loader ) loader.remove();
3773				if (this.status >= 200 && this.status < 400) {
3774					// Success!
3775					try {
3776						let data = JSON.parse(this.response);
3777						let notice;
3778						if( !form.classList.contains('no-inline-notice') ){
3779							notice = form.querySelector('.em-notice');
3780							if( !notice ){
3781								notice = document.createElement('div');
3782								form.prepend(notice);
3783								if( formData.get('action') ){
3784									form.dispatchEvent( new CustomEvent( 'em_ajax_form_success_' + formData.get('action'), {
3785										detail : {
3786											form : form,
3787											notice : notice,
3788											response : data,
3789										}
3790									}) );
3791								}
3792							}
3793							notice.innerHTML = '';
3794							notice.setAttribute('class', 'em-notice');
3795						}
3796						if( data.result ){
3797							if( !form.classList.contains('no-inline-notice') ){
3798								notice.classList.add('em-notice-success');
3799								notice.innerHTML = data.message;
3800								form.replaceWith(notice);
3801							}else{
3802								form.classList.add('load-successful');
3803								form.classList.remove('loading');
3804								if( data.message ){
3805									EM_Alert(data.message);
3806								}
3807							}
3808						}else{
3809							if( !form.classList.contains('no-inline-notice') ){
3810								notice.classList.add('em-notice-error');
3811								notice.innerHTML = data.errors;
3812							}else{
3813								EM_Alert(data.errors);
3814							}
3815						}
3816					} catch(e) {
3817						alert( 'Error Encountered : ' + e);
3818					}
3819				} else {
3820					alert('Error encountered... please see debug logs or contact support.');
3821				}
3822				form.classList.remove('loading');
3823			};
3824
3825			request.onerror = function() {
3826				alert('Connection error encountered... please see debug logs or contact support.');
3827			};
3828
3829			request.send( formData );
3830			return false;
3831		});
3832	});
3833});
3834
3835// phone numbers
3836let em_setup_phone_inputs = function( container ){};
3837let em_unsetup_phone_inputs = function( container ){};
3838if ( EM.phone ) {
3839
3840	let getCountry = function() {
3841		var timezones = {
3842			"Africa/Abidjan": { c : ["CI", "BF", "GH", "GM", "GN", "ML", "MR", "SH", "SL", "SN", "TG"] },
3843			"Africa/Accra": { c : ["GH"] },
3844			"Africa/Addis_Ababa": { c : ["ET"] },
3845			"Africa/Algiers": { c : ["DZ"] },
3846			"Africa/Asmara": { c : ["ER"] },
3847			"Africa/Asmera": { c : ["ER"] },
3848			"Africa/Bamako": { c : ["ML"] },
3849			"Africa/Bangui": { c : ["CF"] },
3850			"Africa/Banjul": { c : ["GM"] },
3851			"Africa/Bissau": { c : ["GW"] },
3852			"Africa/Blantyre": { c : ["MW"] },
3853			"Africa/Brazzaville": { c : ["CG"] },
3854			"Africa/Bujumbura": { c : ["BI"] },
3855			"Africa/Cairo": { c : ["EG"] },
3856			"Africa/Casablanca": { c : ["MA"] },
3857			"Africa/Ceuta": { c : ["ES"] },
3858			"Africa/Conakry": { c : ["GN"] },
3859			"Africa/Dakar": { c : ["SN"] },
3860			"Africa/Dar_es_Salaam": { c : ["TZ"] },
3861			"Africa/Djibouti": { c : ["DJ"] },
3862			"Africa/Douala": { c : ["CM"] },
3863			"Africa/El_Aaiun": { c : ["EH"] },
3864			"Africa/Freetown": { c : ["SL"] },
3865			"Africa/Gaborone": { c : ["BW"] },
3866			"Africa/Harare": { c : ["ZW"] },
3867			"Africa/Johannesburg": { c : ["ZA", "LS", "SZ"] },
3868			"Africa/Juba": { c : ["SS"] },
3869			"Africa/Kampala": { c : ["UG"] },
3870			"Africa/Khartoum": { c : ["SD"] },
3871			"Africa/Kigali": { c : ["RW"] },
3872			"Africa/Kinshasa": { c : ["CD"] },
3873			"Africa/Lagos": { c : ["NG", "AO", "BJ", "CD", "CF", "CG", "CM", "GA", "GQ", "NE"] },
3874			"Africa/Libreville": { c : ["GA"] },
3875			"Africa/Lome": { c : ["TG"] },
3876			"Africa/Luanda": { c : ["AO"] },
3877			"Africa/Lubumbashi": { c : ["CD"] },
3878			"Africa/Lusaka": { c : ["ZM"] },
3879			"Africa/Malabo": { c : ["GQ"] },
3880			"Africa/Maputo": { c : ["MZ", "BI", "BW", "CD", "MW", "RW", "ZM", "ZW"] },
3881			"Africa/Maseru": { c : ["LS"] },
3882			"Africa/Mbabane": { c : ["SZ"] },
3883			"Africa/Mogadishu": { c : ["SO"] },
3884			"Africa/Monrovia": { c : ["LR"] },
3885			"Africa/Nairobi": { c : ["KE", "DJ", "ER", "ET", "KM", "MG", "SO", "TZ", "UG", "YT"] },
3886			"Africa/Ndjamena": { c : ["TD"] },
3887			"Africa/Niamey": { c : ["NE"] },
3888			"Africa/Nouakchott": { c : ["MR"] },
3889			"Africa/Ouagadougou": { c : ["BF"] },
3890			"Africa/Porto-Novo": { c : ["BJ"] },
3891			"Africa/Sao_Tome": { c : ["ST"] },
3892			"Africa/Timbuktu": { c : ["ML"] },
3893			"Africa/Tripoli": { c : ["LY"] },
3894			"Africa/Tunis": { c : ["TN"] },
3895			"Africa/Windhoek": { c : ["NA"] },
3896			"America/Adak": { c : ["US"] },
3897			"America/Anchorage": { c : ["US"] },
3898			"America/Anguilla": { c : ["AI"] },
3899			"America/Antigua": { c : ["AG"] },
3900			"America/Araguaina": { c : ["BR"] },
3901			"America/Argentina/Buenos_Aires": { c : ["AR"] },
3902			"America/Argentina/Catamarca": { c : ["AR"] },
3903			"America/Argentina/ComodRivadavia": { c : ["AR"] },
3904			"America/Argentina/Cordoba": { c : ["AR"] },
3905			"America/Argentina/Jujuy": { c : ["AR"] },
3906			"America/Argentina/La_Rioja": { c : ["AR"] },
3907			"America/Argentina/Mendoza": { c : ["AR"] },
3908			"America/Argentina/Rio_Gallegos": { c : ["AR"] },
3909			"America/Argentina/Salta": { c : ["AR"] },
3910			"America/Argentina/San_Juan": { c : ["AR"] },
3911			"America/Argentina/San_Luis": { c : ["AR"] },
3912			"America/Argentina/Tucuman": { c : ["AR"] },
3913			"America/Argentina/Ushuaia": { c : ["AR"] },
3914			"America/Aruba": { c : ["AW"] },
3915			"America/Asuncion": { c : ["PY"] },
3916			"America/Atikokan": { c : ["CA"] },
3917			"America/Atka": {},
3918			"America/Bahia": { c : ["BR"] },
3919			"America/Bahia_Banderas": { c : ["MX"] },
3920			"America/Barbados": { c : ["BB"] },
3921			"America/Belem": { c : ["BR"] },
3922			"America/Belize": { c : ["BZ"] },
3923			"America/Blanc-Sablon": { c : ["CA"] },
3924			"America/Boa_Vista": { c : ["BR"] },
3925			"America/Bogota": { c : ["CO"] },
3926			"America/Boise": { c : ["US"] },
3927			"America/Buenos_Aires": { c : ["AR"] },
3928			"America/Cambridge_Bay": { c : ["CA"] },
3929			"America/Campo_Grande": { c : ["BR"] },
3930			"America/Cancun": { c : ["MX"] },
3931			"America/Caracas": { c : ["VE"] },
3932			"America/Catamarca": {},
3933			"America/Cayenne": { c : ["GF"] },
3934			"America/Cayman": { c : ["KY"] },
3935			"America/Chicago": { c : ["US"] },
3936			"America/Chihuahua": { c : ["MX"] },
3937			"America/Coral_Harbour": { c : ["CA"] },
3938			"America/Cordoba": { c: ['AR'] },
3939			"America/Costa_Rica": { c : ["CR"] },
3940			"America/Creston": { c : ["CA"] },
3941			"America/Cuiaba": { c : ["BR"] },
3942			"America/Curacao": { c : ["CW"] },
3943			"America/Danmarkshavn": { c : ["GL"] },
3944			"America/Dawson": { c : ["CA"] },
3945			"America/Dawson_Creek": { c : ["CA"] },
3946			"America/Denver": { c : ["US"] },
3947			"America/Detroit": { c : ["US"] },
3948			"America/Dominica": { c : ["DM"] },
3949			"America/Edmonton": { c : ["CA"] },
3950			"America/Eirunepe": { c : ["BR"] },
3951			"America/El_Salvador": { c : ["SV"] },
3952			"America/Ensenada": {},
3953			"America/Fort_Nelson": { c : ["CA"] },
3954			"America/Fort_Wayne": {},
3955			"America/Fortaleza": { c : ["BR"] },
3956			"America/Glace_Bay": { c : ["CA"] },
3957			"America/Godthab": {},
3958			"America/Goose_Bay": { c : ["CA"] },
3959			"America/Grand_Turk": { c : ["TC"] },
3960			"America/Grenada": { c : ["GD"] },
3961			"America/Guadeloupe": { c : ["GP"] },
3962			"America/Guatemala": { c : ["GT"] },
3963			"America/Guayaquil": { c : ["EC"] },
3964			"America/Guyana": { c : ["GY"] },
3965			"America/Halifax": { c : ["CA"] },
3966			"America/Havana": { c : ["CU"] },
3967			"America/Hermosillo": { c : ["MX"] },
3968			"America/Indiana/Indianapolis": { c : ["US"] },
3969			"America/Indiana/Knox": { c : ["US"] },
3970			"America/Indiana/Marengo": { c : ["US"] },
3971			"America/Indiana/Petersburg": { c : ["US"] },
3972			"America/Indiana/Tell_City": { c : ["US"] },
3973			"America/Indiana/Vevay": { c : ["US"] },
3974			"America/Indiana/Vincennes": { c : ["US"] },
3975			"America/Indiana/Winamac": { c : ["US"] },
3976			"America/Indianapolis": {},
3977			"America/Inuvik": { c : ["CA"] },
3978			"America/Iqaluit": { c : ["CA"] },
3979			"America/Jamaica": { c : ["JM"] },
3980			"America/Jujuy": {},
3981			"America/Juneau": { c : ["US"] },
3982			"America/Kentucky/Louisville": { c : ["US"] },
3983			"America/Kentucky/Monticello": { c : ["US"] },
3984			"America/Knox_IN": {},
3985			"America/Kralendijk": { c : ["BQ"] },
3986			"America/La_Paz": { c : ["BO"] },
3987			"America/Lima": { c : ["PE"] },
3988			"America/Los_Angeles": { c : ["US"] },
3989			"America/Louisville": {},
3990			"America/Lower_Princes": { c : ["SX"] },
3991			"America/Maceio": { c : ["BR"] },
3992			"America/Managua": { c : ["NI"] },
3993			"America/Manaus": { c : ["BR"] },
3994			"America/Marigot": { c : ["MF"] },
3995			"America/Martinique": { c : ["MQ"] },
3996			"America/Matamoros": { c : ["MX"] },
3997			"America/Mazatlan": { c : ["MX"] },
3998			"America/Mendoza": {},
3999			"America/Menominee": { c : ["US"] },
4000			"America/Merida": { c : ["MX"] },
4001			"America/Metlakatla": { c : ["US"] },
4002			"America/Mexico_City": { c : ["MX"] },
4003			"America/Miquelon": { c : ["PM"] },
4004			"America/Moncton": { c : ["CA"] },
4005			"America/Monterrey": { c : ["MX"] },
4006			"America/Montevideo": { c : ["UY"] },
4007			"America/Montreal": { c : ["CA"] },
4008			"America/Montserrat": { c : ["MS"] },
4009			"America/Nassau": { c : ["BS"] },
4010			"America/New_York": { c : ["US"] },
4011			"America/Nipigon": { c : ["CA"] },
4012			"America/Nome": { c : ["US"] },
4013			"America/Noronha": { c : ["BR"] },
4014			"America/North_Dakota/Beulah": { c : ["US"] },
4015			"America/North_Dakota/Center": { c : ["US"] },
4016			"America/North_Dakota/New_Salem": { c : ["US"] },
4017			"America/Nuuk": { c : ["GL"] },
4018			"America/Ojinaga": { c : ["MX"] },
4019			"America/Panama": { c : ["PA", "CA", "KY"] },
4020			"America/Pangnirtung": { c : ["CA"] },
4021			"America/Paramaribo": { c : ["SR"] },
4022			"America/Phoenix": { c : ["US", "CA"] },
4023			"America/Port-au-Prince": { c : ["HT"] },
4024			"America/Port_of_Spain": { c : ["TT"] },
4025			"America/Porto_Acre": {},
4026			"America/Porto_Velho": { c : ["BR"] },
4027			"America/Puerto_Rico": { c : ["PR", "AG", "CA", "AI","AW","BL","BQ","CW","DM","GD","GP","KN","LC","MF","MS","SX","TT","VC","VG","VI"] },
4028			"America/Punta_Arenas": { c : ["CL"] },
4029			"America/Rainy_River": { c : ["CA"] },
4030			"America/Rankin_Inlet": { c : ["CA"] },
4031			"America/Recife": { c : ["BR"] },
4032			"America/Regina": { c : ["CA"] },
4033			"America/Resolute": { c : ["CA"] },
4034			"America/Rio_Branco": { c : ["BR"] },
4035			"America/Rosario": {},
4036			"America/Santa_Isabel": {},
4037			"America/Santarem": { c : ["BR"] },
4038			"America/Santiago": { c : ["CL"] },
4039			"America/Santo_Domingo": { c : ["DO"] },
4040			"America/Sao_Paulo": { c : ["BR"] },
4041			"America/Scoresbysund": { c : ["GL"] },
4042			"America/Shiprock": {},
4043			"America/Sitka": { c : ["US"] },
4044			"America/St_Barthelemy": { c : ["BL"] },
4045			"America/St_Johns": { c : ["CA"] },
4046			"America/St_Kitts": { c : ["KN"] },
4047			"America/St_Lucia": { c : ["LC"] },
4048			"America/St_Thomas": { c : ["VI"] },
4049			"America/St_Vincent": { c : ["VC"] },
4050			"America/Swift_Current": { c : ["CA"] },
4051			"America/Tegucigalpa": { c : ["HN"] },
4052			"America/Thule": { c : ["GL"] },
4053			"America/Thunder_Bay": { c : ["CA"] },
4054			"America/Tijuana": { c : ["MX"] },
4055			"America/Toronto": { c : ["CA", "BS"] },
4056			"America/Tortola": { c : ["VG"] },
4057			"America/Vancouver": { c : ["CA"] },
4058			"America/Virgin": { c : ["VI"] },
4059			"America/Whitehorse": { c : ["CA"] },
4060			"America/Winnipeg": { c : ["CA"] },
4061			"America/Yakutat": { c : ["US"] },
4062			"America/Yellowknife": { c : ["CA"] },
4063			"Antarctica/Casey": { c : ["AQ"] },
4064			"Antarctica/Davis": { c : ["AQ"] },
4065			"Antarctica/DumontDUrville": { c : ["AQ"] },
4066			"Antarctica/Macquarie": { c : ["AU"] },
4067			"Antarctica/Mawson": { c : ["AQ"] },
4068			"Antarctica/McMurdo": { c : ["AQ"] },
4069			"Antarctica/Palmer": { c : ["AQ"] },
4070			"Antarctica/Rothera": { c : ["AQ"] },
4071			"Antarctica/South_Pole": { c : ["AQ"] },
4072			"Antarctica/Syowa": { c : ["AQ"] },
4073			"Antarctica/Troll": { c : ["AQ"] },
4074			"Antarctica/Vostok": { c : ["AQ"] },
4075			"Arctic/Longyearbyen": { c : ["SJ"] },
4076			"Asia/Aden": { c : ["YE"] },
4077			"Asia/Almaty": { c : ["KZ"] },
4078			"Asia/Amman": { c : ["JO"] },
4079			"Asia/Anadyr": { c : ["RU"] },
4080			"Asia/Aqtau": { c : ["KZ"] },
4081			"Asia/Aqtobe": { c : ["KZ"] },
4082			"Asia/Ashgabat": { c : ["TM"] },
4083			"Asia/Ashkhabad": {},
4084			"Asia/Atyrau": { c : ["KZ"] },
4085			"Asia/Baghdad": { c : ["IQ"] },
4086			"Asia/Bahrain": { c : ["BH"] },
4087			"Asia/Baku": { c : ["AZ"] },
4088			"Asia/Bangkok": { c : ["TH", "KH", "LA", "VN"] },
4089			"Asia/Barnaul": { c : ["RU"] },
4090			"Asia/Beirut": { c : ["LB"] },
4091			"Asia/Bishkek": { c : ["KG"] },
4092			"Asia/Brunei": { c : ["BN"] },
4093			"Asia/Calcutta": {},
4094			"Asia/Chita": { c : ["RU"] },
4095			"Asia/Choibalsan": { c : ["MN"] },
4096			"Asia/Chongqing": {},
4097			"Asia/Chungking": {},
4098			"Asia/Colombo": { c : ["LK"] },
4099			"Asia/Dacca": {},
4100			"Asia/Damascus": { c : ["SY"] },
4101			"Asia/Dhaka": { c : ["BD"] },
4102			"Asia/Dili": { c : ["TL"] },
4103			"Asia/Dubai": { c : ["AE", "OM"] },
4104			"Asia/Dushanbe": { c : ["TJ"] },
4105			"Asia/Famagusta": { c : ["CY"] },
4106			"Asia/Gaza": { c : ["PS"] },
4107			"Asia/Harbin": {},
4108			"Asia/Hebron": { c : ["PS"] },
4109			"Asia/Ho_Chi_Minh": { c : ["VN"] },
4110			"Asia/Hong_Kong": { c : ["HK"] },
4111			"Asia/Hovd": { c : ["MN"] },
4112			"Asia/Irkutsk": { c : ["RU"] },
4113			"Asia/Istanbul": {},
4114			"Asia/Jakarta": { c : ["ID"] },
4115			"Asia/Jayapura": { c : ["ID"] },
4116			"Asia/Jerusalem": { c : ["IL"] },
4117			"Asia/Kabul": { c : ["AF"] },
4118			"Asia/Kamchatka": { c : ["RU"] },
4119			"Asia/Karachi": { c : ["PK"] },
4120			"Asia/Kashgar": {},
4121			"Asia/Kathmandu": { c : ["NP"] },
4122			"Asia/Katmandu": {},
4123			"Asia/Khandyga": { c : ["RU"] },
4124			"Asia/Kolkata": { c : ["IN"] },
4125			"Asia/Krasnoyarsk": { c : ["RU"] },
4126			"Asia/Kuala_Lumpur": { c : ["MY"] },
4127			"Asia/Kuching": { c : ["MY"] },
4128			"Asia/Kuwait": { c : ["KW"] },
4129			"Asia/Macao": {},
4130			"Asia/Macau": { c : ["MO"] },
4131			"Asia/Magadan": { c : ["RU"] },
4132			"Asia/Makassar": { c : ["ID"] },
4133			"Asia/Manila": { c : ["PH"] },
4134			"Asia/Muscat": { c : ["OM"] },
4135			"Asia/Nicosia": { c : ["CY"] },
4136			"Asia/Novokuznetsk": { c : ["RU"] },
4137			"Asia/Novosibirsk": { c : ["RU"] },
4138			"Asia/Omsk": { c : ["RU"] },
4139			"Asia/Oral": { c : ["KZ"] },
4140			"Asia/Phnom_Penh": { c : ["KH"] },
4141			"Asia/Pontianak": { c : ["ID"] },
4142			"Asia/Pyongyang": { c : ["KP"] },
4143			"Asia/Qatar": { c : ["QA", "BH"] },
4144			"Asia/Qostanay": { c : ["KZ"] },
4145			"Asia/Qyzylorda": { c : ["KZ"] },
4146			"Asia/Rangoon": {},
4147			"Asia/Riyadh": { c : ["SA", "AQ", "KW", "YE"] },
4148			"Asia/Saigon": {},
4149			"Asia/Sakhalin": { c : ["RU"] },
4150			"Asia/Samarkand": { c : ["UZ"] },
4151			"Asia/Seoul": { c : ["KR"] },
4152			"Asia/Shanghai": { c : ["CN"] },
4153			"Asia/Singapore": { c : ["SG", "MY"] },
4154			"Asia/Srednekolymsk": { c : ["RU"] },
4155			"Asia/Taipei": { c : ["TW"] },
4156			"Asia/Tashkent": { c : ["UZ"] },
4157			"Asia/Tbilisi": { c : ["GE"] },
4158			"Asia/Tehran": { c : ["IR"] },
4159			"Asia/Tel_Aviv": {},
4160			"Asia/Thimbu": {},
4161			"Asia/Thimphu": { c : ["BT"] },
4162			"Asia/Tokyo": { c : ["JP"] },
4163			"Asia/Tomsk": { c : ["RU"] },
4164			"Asia/Ujung_Pandang": {},
4165			"Asia/Ulaanbaatar": { c : ["MN"] },
4166			"Asia/Ulan_Bator": {},
4167			"Asia/Urumqi": { c : ["CN"] },
4168			"Asia/Ust-Nera": { c : ["RU"] },
4169			"Asia/Vientiane": { c : ["LA"] },
4170			"Asia/Vladivostok": { c : ["RU"] },
4171			"Asia/Yakutsk": { c : ["RU"] },
4172			"Asia/Yangon": { c : ["MM"] },
4173			"Asia/Yekaterinburg": { c : ["RU"] },
4174			"Asia/Yerevan": { c : ["AM"] },
4175			"Atlantic/Azores": { c : ["PT"] },
4176			"Atlantic/Bermuda": { c : ["BM"] },
4177			"Atlantic/Canary": { c : ["ES"] },
4178			"Atlantic/Cape_Verde": { c : ["CV"] },
4179			"Atlantic/Faeroe": {},
4180			"Atlantic/Faroe": { c : ["FO"] },
4181			"Atlantic/Jan_Mayen": { c : ["SJ"] },
4182			"Atlantic/Madeira": { c : ["PT"] },
4183			"Atlantic/Reykjavik": { c : ["IS"] },
4184			"Atlantic/South_Georgia": { c : ["GS"] },
4185			"Atlantic/St_Helena": { c : ["SH"] },
4186			"Atlantic/Stanley": { c : ["FK"] },
4187			"Australia/ACT": {},
4188			"Australia/Adelaide": { c : ["AU"] },
4189			"Australia/Brisbane": { c : ["AU"] },
4190			"Australia/Broken_Hill": { c : ["AU"] },
4191			"Australia/Canberra": {},
4192			"Australia/Currie": {},
4193			"Australia/Darwin": { c : ["AU"] },
4194			"Australia/Eucla": { c : ["AU"] },
4195			"Australia/Hobart": { c : ["AU"] },
4196			"Australia/LHI": {},
4197			"Australia/Lindeman": { c : ["AU"] },
4198			"Australia/Lord_Howe": { c : ["AU"] },
4199			"Australia/Melbourne": { c : ["AU"] },
4200			"Australia/NSW": {},
4201			"Australia/North": {},
4202			"Australia/Perth": { c : ["AU"] },
4203			"Australia/Queensland": {},
4204			"Australia/South": {},
4205			"Australia/Sydney": { c : ["AU"] },
4206			"Australia/Tasmania": {},
4207			"Australia/Victoria": {},
4208			"Australia/West": {},
4209			"Australia/Yancowinna": {},
4210			"Brazil/Acre": {},
4211			"Brazil/DeNoronha": {},
4212			"Brazil/East": {},
4213			"Brazil/West": {},
4214			CET: { c : ["XK"] },
4215			CST6CDT: {},
4216			"Canada/Atlantic": {},
4217			"Canada/Central": {},
4218			"Canada/Eastern": { c : ["CA"] },
4219			"Canada/Mountain": {},
4220			"Canada/Newfoundland": {},
4221			"Canada/Pacific": {},
4222			"Canada/Saskatchewan": {},
4223			"Canada/Yukon": {},
4224			"Chile/Continental": {},
4225			"Chile/EasterIsland": {},
4226			Cuba: {},
4227			EET: {},
4228			EST: {},
4229			EST5EDT: {},
4230			Egypt: {},
4231			Eire: {},
4232			"Etc/GMT": { c : ["AC"] },
4233			"Etc/GMT+0": {},
4234			"Etc/GMT+1": {},
4235			"Etc/GMT+10": {},
4236			"Etc/GMT+11": {},
4237			"Etc/GMT+12": {},
4238			"Etc/GMT+2": {},
4239			"Etc/GMT+3": {},
4240			"Etc/GMT+4": {},
4241			"Etc/GMT+5": {},
4242			"Etc/GMT+6": {},
4243			"Etc/GMT+7": {},
4244			"Etc/GMT+8": {},
4245			"Etc/GMT+9": {},
4246			"Etc/GMT-0": {},
4247			"Etc/GMT-1": {},
4248			"Etc/GMT-10": {},
4249			"Etc/GMT-11": {},
4250			"Etc/GMT-12": {},
4251			"Etc/GMT-13": {},
4252			"Etc/GMT-14": {},
4253			"Etc/GMT-2": {},
4254			"Etc/GMT-3": {},
4255			"Etc/GMT-4": {},
4256			"Etc/GMT-5": {},
4257			"Etc/GMT-6": {},
4258			"Etc/GMT-7": {},
4259			"Etc/GMT-8": {},
4260			"Etc/GMT-9": {},
4261			"Etc/GMT0": {},
4262			"Etc/Greenwich": {},
4263			"Etc/UCT": {},
4264			"Etc/UTC": {},
4265			"Etc/Universal": {},
4266			"Etc/Zulu": {},
4267			"Europe/Amsterdam": { c : ["NL"] },
4268			"Europe/Andorra": { c : ["AD"] },
4269			"Europe/Astrakhan": { c : ["RU"] },
4270			"Europe/Athens": { c : ["GR"] },
4271			"Europe/Belfast": { c : ["GB"] },
4272			"Europe/Belgrade": { c : ["RS", "BA", "HR", "ME", "MK", "SI"] },
4273			"Europe/Berlin": { c : ["DE"] },
4274			"Europe/Bratislava": { c : ["SK"] },
4275			"Europe/Brussels": { c : ["BE"] },
4276			"Europe/Bucharest": { c : ["RO"] },
4277			"Europe/Budapest": { c : ["HU"] },
4278			"Europe/Busingen": { c : ["DE"] },
4279			"Europe/Chisinau": { c : ["MD"] },
4280			"Europe/Copenhagen": { c : ["DK"] },
4281			"Europe/Dublin": { c : ["IE"] },
4282			"Europe/Gibraltar": { c : ["GI"] },
4283			"Europe/Guernsey": { c : ["GG"] },
4284			"Europe/Helsinki": { c : ["FI", "AX"] },
4285			"Europe/Isle_of_Man": { c : ["IM"] },
4286			"Europe/Istanbul": { c : ["TR"] },
4287			"Europe/Jersey": { c : ["JE"] },
4288			"Europe/Kaliningrad": { c : ["RU"] },
4289			"Europe/Kiev": { c : ["UA"] },
4290			"Europe/Kirov": { c : ["RU"] },
4291			"Europe/Lisbon": { c : ["PT"] },
4292			"Europe/Ljubljana": { c : ["SI"] },
4293			"Europe/London": { c : ["GB", "GG", "IM", "JE"] },
4294			"Europe/Luxembourg": { c : ["LU"] },
4295			"Europe/Madrid": { c : ["ES"] },
4296			"Europe/Malta": { c : ["MT"] },
4297			"Europe/Mariehamn": { c : ["AX"] },
4298			"Europe/Minsk": { c : ["BY"] },
4299			"Europe/Monaco": { c : ["MC"] },
4300			"Europe/Moscow": { c : ["RU"] },
4301			"Europe/Nicosia": {},
4302			"Europe/Oslo": { c : ["NO", "SJ", "BV"] },
4303			"Europe/Paris": { c : ["FR"] },
4304			"Europe/Podgorica": { c : ["ME"] },
4305			"Europe/Prague": { c : ["CZ", "SK"] },
4306			"Europe/Riga": { c : ["LV"] },
4307			"Europe/Rome": { c : ["IT", "SM", "VA"] },
4308			"Europe/Samara": { c : ["RU"] },
4309			"Europe/San_Marino": { c : ["SM"] },
4310			"Europe/Sarajevo": { c : ["BA"] },
4311			"Europe/Saratov": { c : ["RU"] },
4312			"Europe/Simferopol": { c : ["RU", "UA"] },
4313			"Europe/Skopje": { c : ["MK"] },
4314			"Europe/Sofia": { c : ["BG"] },
4315			"Europe/Stockholm": { c : ["SE"] },
4316			"Europe/Tallinn": { c : ["EE"] },
4317			"Europe/Tirane": { c : ["AL"] },
4318			"Europe/Tiraspol": {},
4319			"Europe/Ulyanovsk": { c : ["RU"] },
4320			"Europe/Uzhgorod": { c : ["UA"] },
4321			"Europe/Vaduz": { c : ["LI"] },
4322			"Europe/Vatican": { c : ["VA"] },
4323			"Europe/Vienna": { c : ["AT"] },
4324			"Europe/Vilnius": { c : ["LT"] },
4325			"Europe/Volgograd": { c : ["RU"] },
4326			"Europe/Warsaw": { c : ["PL"] },
4327			"Europe/Zagreb": { c : ["HR"] },
4328			"Europe/Zaporozhye": { c : ["UA"] },
4329			"Europe/Zurich": { c : ["CH", "DE", "LI"] },
4330			Factory: {},
4331			GB: { c : ["GB"] },
4332			"GB-Eire": { c : ["GB"] },
4333			GMT: { c : ["AC"] },
4334			"GMT+0": {},
4335			"GMT-0": {},
4336			GMT0: {},
4337			Greenwich: {},
4338			HST: {},
4339			Hongkong: {},
4340			Iceland: {},
4341			"Indian/Antananarivo": { c : ["MG"] },
4342			"Indian/Chagos": { c : ["IO"] },
4343			"Indian/Christmas": { c : ["CX"] },
4344			"Indian/Cocos": { c : ["CC"] },
4345			"Indian/Comoro": { c : ["KM"] },
4346			"Indian/Kerguelen": { c : ["TF", "HM"] },
4347			"Indian/Mahe": { c : ["SC"] },
4348			"Indian/Maldives": { c : ["MV"] },
4349			"Indian/Mauritius": { c : ["MU"] },
4350			"Indian/Mayotte": { c : ["YT"] },
4351			"Indian/Reunion": { c : ["RE", "TF"] },
4352			Iran: {},
4353			Israel: {},
4354			Jamaica: {},
4355			Japan: {},
4356			Kwajalein: {},
4357			Libya: {},
4358			MET: {},
4359			MST: {},
4360			MST7MDT: {},
4361			"Mexico/BajaNorte": {},
4362			"Mexico/BajaSur": {},
4363			"Mexico/General": {},
4364			NZ: { c : ["NZ"] },
4365			"NZ-CHAT": {},
4366			Navajo: {},
4367			PRC: {},
4368			PST8PDT: {},
4369			"Pacific/Apia": { c : ["WS"] },
4370			"Pacific/Auckland": { c : ["NZ", "AQ"] },
4371			"Pacific/Bougainville": { c : ["PG"] },
4372			"Pacific/Chatham": { c : ["NZ"] },
4373			"Pacific/Chuuk": { c : ["FM"] },
4374			"Pacific/Easter": { c : ["CL"] },
4375			"Pacific/Efate": { c : ["VU"] },
4376			"Pacific/Enderbury": {},
4377			"Pacific/Fakaofo": { c : ["TK"] },
4378			"Pacific/Fiji": { c : ["FJ"] },
4379			"Pacific/Funafuti": { c : ["TV"] },
4380			"Pacific/Galapagos": { c : ["EC"] },
4381			"Pacific/Gambier": { c : ["PF"] },
4382			"Pacific/Guadalcanal": { c : ["SB"] },
4383			"Pacific/Guam": { c : ["GU", "MP"] },
4384			"Pacific/Honolulu": { c : ["US", "UM"] },
4385			"Pacific/Johnston": { c : ["UM"] },
4386			"Pacific/Kanton": { c : ["KI"] },
4387			"Pacific/Kiritimati": { c : ["KI"] },
4388			"Pacific/Kosrae": { c : ["FM"] },
4389			"Pacific/Kwajalein": { c : ["MH"] },
4390			"Pacific/Majuro": { c : ["MH"] },
4391			"Pacific/Marquesas": { c : ["PF"] },
4392			"Pacific/Midway": { c : ["UM"] },
4393			"Pacific/Nauru": { c : ["NR"] },
4394			"Pacific/Niue": { c : ["NU"] },
4395			"Pacific/Norfolk": { c : ["NF"] },
4396			"Pacific/Noumea": { c : ["NC"] },
4397			"Pacific/Pago_Pago": { c : ["AS", "UM"] },
4398			"Pacific/Palau": { c : ["PW"] },
4399			"Pacific/Pitcairn": { c : ["PN"] },
4400			"Pacific/Pohnpei": { c : ["FM"] },
4401			"Pacific/Ponape": {},
4402			"Pacific/Port_Moresby": { c : ["PG", "AQ"] },
4403			"Pacific/Rarotonga": { c : ["CK"] },
4404			"Pacific/Saipan": { c : ["MP"] },
4405			"Pacific/Samoa": { c : ["WS"] },
4406			"Pacific/Tahiti": { c : ["PF"] },
4407			"Pacific/Tarawa": { c : ["KI"] },
4408			"Pacific/Tongatapu": { c : ["TO"] },
4409			"Pacific/Truk": {},
4410			"Pacific/Wake": { c : ["UM"] },
4411			"Pacific/Wallis": { c : ["WF"] },
4412			"Pacific/Yap": {},
4413			Poland: {},
4414			Portugal: {},
4415			ROC: {},
4416			ROK: {},
4417			Singapore: { c : ["SG"] },
4418			Turkey: {},
4419			UCT: {},
4420			"US/Alaska": {},
4421			"US/Aleutian": {},
4422			"US/Arizona": { c : ["US"] },
4423			"US/Central": {},
4424			"US/East-Indiana": {},
4425			"US/Eastern": {},
4426			"US/Hawaii": { c : ["US"] },
4427			"US/Indiana-Starke": {},
4428			"US/Michigan": {},
4429			"US/Mountain": {},
4430			"US/Pacific": {},
4431			"US/Samoa": { c : ["WS"] },
4432			UTC: {},
4433			Universal: {},
4434			"W-SU": {},
4435			WET: {},
4436			Zulu: {
4437			}
4438		};
4439
4440		const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
4441
4442		if (timezone === "" || !timezone) {
4443			return null;
4444		}
4445
4446		return timezones[timezone].c[0];
4447	}
4448
4449	let utilsScriptLoaded;
4450
4451	em_setup_phone_inputs = async function ( container, overriding_options = {} ) {
4452		if ( !EM.phone ) return false;
4453		if( !utilsScriptLoaded ) {
4454			import( EM.url + '/includes/external/intl-tel-input/js/intlTelInputWithUtils.js' ).then( () => {
4455				utilsScriptLoaded = true;
4456				em_setup_phone_inputs( container );
4457			});
4458			return false;
4459		} // on initial load, we wait for scripts to load
4460		container.querySelectorAll('input.em-phone-intl[type="tel"]').forEach( function(input){
4461			// change name and allow a hidden field for submission
4462			let alt = document.createElement('input');
4463			let name = input.name;
4464			if( name ) {
4465				input.name = name + '_intl';
4466				alt.name = name;
4467			}
4468			input.classList.add('em-intl-tel');
4469			// copy all classes and remove ones we know we don't want
4470			alt.setAttribute('class', input.getAttribute('class') + ' em-intl-tel-full');
4471			alt.classList.remove('em-intl-tel');
4472			alt.type = 'hidden';
4473			if( input.id ) {
4474				alt.id = input.id + '-full'
4475			}
4476			alt.value = input.value;
4477			// add data-name to the full input if it exists, for use in dynamic input forms for JS submission within forms
4478			if( input.getAttribute('data-name') ) {
4479				alt.setAttribute('data-name', input.getAttribute('data-name'));
4480				input.removeAttribute('data-name');
4481			}
4482			input.after(alt);
4483
4484			let default_options = Object.assign({
4485				autoPlaceholder: 'aggressive',
4486				separateDialCode : true,
4487			}, EM.phone.options);
4488			let options = Object.assign( default_options, overriding_options );
4489
4490			if( EM.phone.detectJS || options.detectJS ) {
4491				let country = getCountry();
4492				if( country ) {
4493					options.initialCountry = country;
4494				} else if ( EM.phone.initialCountry ) {
4495					options.initialCountry = EM.phone.initialCountry;
4496				}
4497			}
4498			if( options.onlyCountries ) {
4499				if( Array.isArray(options.onlyCountries) && options.onlyCountries.length > 0 ) {
4500					// make sure initial country is not excluded
4501					if (!options.onlyCountries.includes(options.initialCountry && options.initialCountry)) {
4502						options.onlyCountries.push(options.initialCountry);
4503					}
4504				} else {
4505					options.onlyCountries = [];
4506				}
4507			}
4508
4509			let iti = EM.intlTelInput( input, options);
4510			//iti.countryContainer.querySelector('button')?.setAttribute('data-nostyle', '');
4511			let pixels = parseInt( input.style.paddingLeft.replace('px', '') ); // pad this an extra px
4512			input.style.setProperty('padding-left', pixels + 'px', 'important' );
4513
4514			// do some basic inline validation
4515			input.addEventListener('change', function( e ){
4516				alt.value = iti.getNumber();
4517				if ( input.value.trim() ) {
4518					let wrapper = input.closest('.iti')
4519					if ( iti.isValidNumber() ) {
4520						wrapper.classList.remove("invalid-number");
4521						if ( wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error') ) {
4522							wrapper.nextElementSibling.remove();
4523						}
4524					} else {
4525						wrapper.classList.add("invalid-number");
4526						const errorCode = iti.getValidationError();
4527						let errorMsg;
4528						if( !(wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error')) ) {
4529							// create a div em-form-error class name and append after input
4530							errorMsg = document.createElement('div');
4531							errorMsg.classList.add('em-inline-error');
4532							wrapper.after(errorMsg);
4533						} else {
4534							errorMsg = wrapper.nextElementSibling;
4535						}
4536						errorMsg.innerHTML = '<span class="em-icon"></span> ' + EM.phone.error;
4537						errorMsg.classList.remove("hide");
4538					}
4539				}
4540			});
4541			
4542			// trigger changes
4543			input.addEventListener('countrychange', function( e ){
4544				alt.value = iti.getNumber();
4545				// check input padding inline style and set it to important
4546				if( input.getAttribute('style') ) {
4547					let pixels = parseInt(input.style.paddingLeft.replace('px', '')); // pad this an extra px
4548					input.style.setProperty('padding-left', pixels + 'px', 'important' );
4549				}
4550			});
4551
4552		});
4553	};
4554
4555	em_unsetup_phone_inputs = function( container ) {
4556		container.querySelectorAll( 'input.em-phone-intl[type="tel"]' ).forEach( function(el){
4557			let iti = EM.intlTelInput?.getInstance(el);
4558			if ( iti ) {
4559				iti.destroy();
4560			}
4561		});
4562	};
4563}
4564
4565/*!
4566 * jquery-timepicker v1.13.16 - Copyright (c) 2020 Jon Thornton - https://www.jonthornton.com/jquery-timepicker/
4567 * Did a search/replace of timepicker to em_timepicker to prevent conflicts.
4568 */
4569(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);
4569if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable});keys.push.apply(keys,symbols)}return keys}function _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)))}}
4569var 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
4569ings.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>
4569settings.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;
4569if(_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
4569))}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})})();
4570
4571/*!
4572 * flatpickr v4.6.13,, @license MIT
vendor: 50,644 bytes, lines 4573-4574
4573 */
4574!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 4574-4575
4574
4575(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;
4575index<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});
4576
4577/*!
4578 * popperjs v2.11.5 - MIT License - https://github.com/popperjs/popper-core
4579 */
4580!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: 4,539 bytes, line 4580
4580wport||[],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];
vendor: 12,774 bytes, lines 4580-4584
4580Object.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})}));
4581
4582/*!
4583 * tippy.js v6.3.7 - MIT License - https://github.com/atomiks/tippyjs
4584 */
vendor: 25,668 bytes, line 4585
4585!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}));
4586
4587/**
4588 * Selectize (v0.15.2)
4589 * https://selectize.dev
4590 */
4591(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}
4591;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ØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌō
4591ÕõǪǫȌȍՕօ]",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")}};
4591$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>
4591").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-");
4591$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("");
4591if(!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
4591SearchOptions())},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);
4591$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}
4591this.$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;
4591j++){$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}
4591}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);
4591var $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;
4591const $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});
4592/*!
4593 * selectize click2deselect (custom)
4594 */
4595/* Selectize deselect function */
4596EM_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})}});
4597
4598/*!
4599 * jQuery UI Touch Punch 0.2.3
4600 *
4601 * Copyright 2011–2014, Dave Furfero
4602 * Dual licensed under the MIT or GPL Version 2 licenses.
4603 *
4604 * Depends:
4605 *  jquery.ui.widget.js
4606 *  jquery.ui.mouse.js
4607 */
4608!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);
4609
4610/*! Sortable 1.15.2 - MIT | git://github.com/SortableJS/Sortable.git */
4611!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(
vendor: 4,328 bytes, line 4611
4611/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);if(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={};
vendor: 5,625 bytes, line 4611
4611return 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}}
vendor: 11,250 bytes, line 4611
4611(),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;
vendor: 5,131 bytes, line 4611
4611if(!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}
vendor: 13,984 bytes, line 4611
4611),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}
vendor: 1,750 bytes, lines 4611-4615
4611,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});
4612
4613// final JS calls after everything has been loaded
4614document.dispatchEvent( new CustomEvent('events_manager_js_loaded') );
4615//# 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.