(function ($){
'use strict';
function normalize(value){
return String(value||'')
.toLowerCase()
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, '')
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-|-$/g, '');
}
function buildRedirectUrl(baseUrl, form){
var url=new URL(baseUrl, window.location.origin);
var data=new FormData(form);
['luogo', 'coord', 'dtfrom', 'nearby'].forEach(function (key){
var value=data.get(key);
if(value){
url.searchParams.set(key, value);
}});
return url.toString();
}
function redirectToArtist(url, form){
if(!url){
return false;
}
window.location.href=buildRedirectUrl(url, form);
return true;
}
function submitArtistForm(form){
if(window.emNormalizeSearchDates){
window.emNormalizeSearchDates(form);
}
if(form.requestSubmit){
form.requestSubmit();
return;
}
form.submit();
}
function initArtistSearch($form){
var form=$form.get(0);
var $input=$form.find('[data-role="artist-name"]');
var $slug=$form.find('[data-role="artist-slug"]');
var $artistUrl=$form.find('[data-role="artist-url"]');
var pendingSubmit=false;
if(!$input.length||typeof emArtistSearchConfig==='undefined'){
return;
}
$input.on('input', function (){
$slug.val('');
$artistUrl.val('');
});
if($.fn.autocomplete){
$input.autocomplete({
minLength: 2,
delay: 180,
source: function (request, response){
$.ajax({
url: emArtistSearchConfig.restUrl,
dataType: 'json',
data: {
q: request.term
}}).done(function (data){
var artists=data&&data.artists ? data.artists:[];
response(artists.map(function (artist){
return {
label: artist.name,
value: artist.name,
slug: artist.slug,
url: artist.url
};}));
}).fail(function (){
response([]);
});
},
select: function (event, ui){
if(ui.item&&ui.item.slug){
$slug.val(ui.item.slug);
$artistUrl.val(ui.item.url||'');
}},
open: function (){
$input.autocomplete('widget').addClass('em-search-artist-menu');
}});
$input.autocomplete('instance')._renderItem=function (ul, item){
return $('<li>')
.append($('<div>', { class: 'em-search-suggestion' })
.append($('<span>', { class: 'em-search-suggestion__type' }).text('Artista'))
.append($('<span>', { class: 'em-search-suggestion__label' }).text(item.label||item.value||''))
)
.appendTo(ul);
};}
$form.on('submit', function (event){
var typed=$.trim($input.val());
var selectedUrl=$artistUrl.val();
if(pendingSubmit){
return true;
}
if(selectedUrl&&redirectToArtist(selectedUrl, form)){
event.preventDefault();
return false;
}
if(typed.length < 2){
$slug.val('');
return true;
}
event.preventDefault();
$.ajax({
url: emArtistSearchConfig.restUrl,
dataType: 'json',
data: {
q: typed
}}).done(function (data){
var artists=data&&data.artists ? data.artists:[];
var typedSlug=normalize(typed);
var exact=artists.find(function (artist){
return normalize(artist.name)===typedSlug||normalize(artist.slug)===typedSlug;
});
if(exact&&exact.url){
$slug.val(exact.slug||'');
$artistUrl.val(exact.url);
redirectToArtist(exact.url, form);
return;
}
$slug.val('');
$artistUrl.val('');
pendingSubmit=true;
submitArtistForm(form);
}).fail(function (){
$slug.val('');
$artistUrl.val('');
pendingSubmit=true;
submitArtistForm(form);
});
return false;
});
}
function syncDateClearButton($input){
$input.closest('.em-search-date-control').toggleClass('is-empty', !$.trim($input.val()));
}
$(function (){
$(document).on('click', '[data-role="clear-search-date"]', function (){
var $input=$(this).closest('.em-search-date-control').find('input').first();
$input.val('').trigger('change').trigger('input').focus();
});
$(document).on('change input', '.em-search-date-control input', function (){
syncDateClearButton($(this));
});
$('.em-search-date-control input').each(function (){
syncDateClearButton($(this));
});
$('.em-artist-search-form').each(function (){
initArtistSearch($(this));
});
});
})(jQuery);