/*
 * Wandelt <select>-Elemente mit Multiselect und dem Psuedoattribut 'data-ui-autocomplete' in eine Autocomplete Komponente um
 */
(function($) {

	var DATA_ATTRIBUTE = 'data-ui-autocomplete';
	var SELECT_SELECTOR = 'select[' + DATA_ATTRIBUTE + ']';

	function initSelect($select) {
		// only initialize if data-ui-autocomplete is set and not already initialized
		if ($select.is(SELECT_SELECTOR) && !$select.data('initSelect')) {
			$select.data('initSelect', true);

			// Durchsucht die Klassennamen nach einem Eintrag mit choices (wird fuer eindeutige Zuordnung benoetigt)
			var choicesName = '.' + $select.get(0).classList.value.split(" ").find(findChoicesClass);
			// Erstellt Autocomplete Komponente mit Entfernen-Button und Ergebnislimit von 10
			new Choices(choicesName, {
				removeItemButton: true,
				searchResultLimit: 10
			});
		}
	}

	$(document).ready(function() {

		// initialize all select elements
		$(SELECT_SELECTOR).each(function() {
			initSelect($(this));
		});

		// observe DOM changes to all select elements width the data-... attribute
		Theme.observeChanges('select', DATA_ATTRIBUTE, initSelect);
	});

})(jQuery);

/*
 * Prueft, ob ein String mit "choices" anfaengt und gibt den Namen zurueck, falls ja
 */
function findChoicesClass(item) {
	return item.startsWith('choices');
}

/*
 * Fuegt <div>-Elementen mit dem Psuedoattribut 'data-snackbar-autohide="true"' einen Timer hinzu,
 * der das Element nach einer bestimmten Zeit ausblendet
 */
(function($) {

	var DATA_ATTRIBUTE = 'data-snackbar-autohide="true"';
	var SNACKBAR_SELECTOR = 'div[' + DATA_ATTRIBUTE + ']';

	function initSnackbar($snackbar) {
		// only initialize if data-snackbar-autohide="true" is set and not already initialized
		if ($snackbar.is(SNACKBAR_SELECTOR) && !$snackbar.data('initSnackbar')) {
			$snackbar.data('initSnackbar', true);

			setTimeout(function() {
				$snackbar.fadeOut();
			}, 5000);
		}
	}

	$(document).ready(function() {

		// initialize all select elements
		$(SNACKBAR_SELECTOR).each(function() {
			initSnackbar($(this));
		});

		// observe DOM changes to all select elements width the data-... attribute
		Theme.observeChanges('div', DATA_ATTRIBUTE, initSnackbar);
	});

})(jQuery);