$(function () { var pickups = null; var timeKey = null; var timeSelected = null; var calendar_rgba = Helpers.convertHex(getComputedStyle(document.documentElement).getPropertyValue('--primary-color-st'), 0.35); document.documentElement.style.setProperty('--box-shadow-color', '0 15px 20px -3px ' + calendar_rgba); $('.calendar__date--avaiable').click(function () { selectDay($(this)); }); function selectDay(element, reset = true) { if (reset) { $(".calendar__date--selected-only").removeClass("calendar__date--selected-only"); $('.ticket-container').remove(); $('.request-quote').remove(); } $(element).addClass('calendar__date--selected-only'); var dateSelected = $(element).attr('date'); timeKey = $(element).attr('timeKey') === undefined ? null : $(element).attr('timeKey'); timeSelected = $(element).attr('timeSelected') === undefined ? null : $(element).attr('timeSelected'); $('.calendar-search-result h4').html(''); $('.calendar-search-result .subtitle').html(''); $('.calendar__dates').append('
Caricamento\u0020calendario\u0020in\u0020corso
'); $.get('/it/calendar/day-detail', { productId: productID, date: dateSelected, timeKey: timeKey }, function (res) { $('.calendar-times-area').remove(); $('.calendar__on-loading').remove(); for (var i = 0; i < res.length; i++) { var price = ""; var explanation = ""; if (res[i].price != null) price = ''; if (res[i].explanation != null) explanation = '

' + res[i].explanation + '

'; var ticketCalendarElement = '
' + '
' + '

' + res[i].descr + '

' + explanation + '
' + '
' + price + '
' + '' + '' + '' + '
' + '
' + '
'; $('.calendar-search-result').append(ticketCalendarElement); } $(".calendar-search-result").find('h4').text('Data\u0020selezionata: ' + Helpers.convertDateToIta(dateSelected)); if (timeSelected != null) { $(".calendar-search-result").find('h4').append('
Orario\u0020selezionato: ' + timeSelected); } if (res.times !== undefined && (res.times.morning.length > 0 || res.times.afternoon.length > 0 || res.times.evening.length > 0 || res.times.night.length > 0)) { $('.calendar-search-result').append('
'); $('.calendar-search-result').find('.subtitle').text('Seleziona\u0020un\u0020orario'); for (var a = 0; a < res.times.morning.length; a++) { if (a === 0) $('.calendar-times-area').append(""); var timeCalendarElement = ''; $('.calendar-times-area').append(timeCalendarElement); } for (var b = 0; b < res.times.afternoon.length; b++) { if (b === 0) $('.calendar-times-area').append(""); var timeCalendarElement = ''; $('.calendar-times-area').append(timeCalendarElement); } for (var c = 0; c < res.times.evening.length; c++) { if (c === 0) $('.calendar-times-area').append(""); var timeCalendarElement = ''; $('.calendar-times-area').append(timeCalendarElement); } for (var d = 0; d < res.times.night.length; d++) { if (d === 0) $('.calendar-times-area').append(""); var timeCalendarElement = ''; $('.calendar-times-area').append(timeCalendarElement); } $('.calendar-times-button').click(function () { selectDay($(this), false); }); } else { if (res.length > 0) { $('.calendar-search-result').find('.subtitle').text('Seleziona\u0020il\u0020numero\u0020di\u0020biglietti\u0020e\u0020clicca\u0020\u0022calcola\u0020quotazione\u0022\u0020per\u0020procedere'); if (typeof res[0].is_seated != 'undefined' && res[0].is_seated) { $('.calendar-search-result').find('.subtitle').append('
Selezionando\u0020i\u0020biglietti\u0020qui\u0020sotto\u0020ti\u0020verr\u00E0\u0020assegnato\u0020il\u0020miglior\u0020posto\u0020disponibile'); $('.calendar-search-result').find('.subtitle').append('
Premi\u0020qui\u0020se\u0020preferisci\u0020selezionare\u0020i\u0020posti\u0020dalla\u0020mappa'); } $('.calendar-search-result').append(''); $('.request-quote').click(requestQuote); } else { $(".calendar-search-result").find('h4').html("

Non\u0020ci\u0020sono\u0020prodotti\u0020per\u0020la\u0020data\u0020selezionata

"); } } $('html,body').animate({ scrollTop: $('.calendar-search-result').offset().top - 30 }, 'slow'); }); } var months = [ "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" ]; var today = new Date(); var currentYear = today.getFullYear(); var currentMonth = today.getMonth(); $.each(months, function (i, item) { var selected = currentMonth === i ? 'selected' : ''; $('#calendar__month').append(''); }); for (var a = 0; a < 3; a++) { var selected = a == 0 ? 'selected' : ''; $('#calendar__year').append(''); currentYear++; } currentYear = today.getFullYear(); if (typeof avaiableDays != "undefined") { var firstAvaiableDay = new Date(avaiableDays[0].date); currentYear = firstAvaiableDay.getFullYear(); currentMonth = firstAvaiableDay.getMonth(); var avDayLength = avaiableDays.length; if (new Date(avaiableDays[0].date).getMonth() === new Date(avaiableDays[avDayLength - 1].date).getMonth()) $('.calendar__opts').hide(); $('#calendar__month').val(currentMonth); $('#calendar__year').val(currentYear); renderCalendar(currentMonth, currentYear); } else { renderCalendar(currentMonth, currentYear); } function daysInMonth(month, year) { month++; return new Date(year, month, 0).getDate(); } function renderCalendar(month, year) { month = parseInt(month); year = parseInt(year); $('.calendar__dates').html(''); var startWeek = dayOfWeek(1, month, year); var differece = 7 - startWeek; //Mese precedente if (startWeek != 0) { var lastMonthStartDay = daysInMonth(month - 1, year) - startWeek; for (var a = lastMonthStartDay; a < daysInMonth(month - 1, year); a++) { $('.calendar__dates').append('
' + (lastMonthStartDay + 1) + '
'); lastMonthStartDay++; } } //Mese corrente var closeOnSunday = false; var daysInCurrentMonth = daysInMonth(month, year); for (var b = 0; b < daysInCurrentMonth; b++) { $('.calendar__dates').append('
' + (b + 1) + '
'); } var closingMontDay = dayOfWeek(daysInCurrentMonth, month, year); //Mese successivo if (closingMontDay !== 6) { var succMonthStartDay = 1; for (var c = closingMontDay; c < 6; c++) { $('.calendar__dates').append('
' + succMonthStartDay + '
'); succMonthStartDay++; } } $('.calendar__dates').append('
Caricamento\u0020calendario\u0020in\u0020corso
'); if (typeof avaiableDays != "undefined") { for (var i = 0; i < avaiableDays.length; i++) { if (new Date(avaiableDays[i].date).getMonth() == month) { var elements = $(".calendar__date--close > span:contains(" + (new Date(avaiableDays[i].date).getDate()) + ")"); if (elements.length > 1) { for (var a = 0; a < elements.length; a++) { var text = $(elements[a]).text(); var day = new Date(avaiableDays[i].date).getDate(); if (text == day) { $(elements[a]).parent().removeClass('calendar__date--close'); $(elements[a]).parent().addClass('calendar__date--avaiable'); $(elements[a]).parent().attr('date', Helpers.formatDate(new Date(year, month, (new Date(avaiableDays[i].date).getDate())))); } } } else { $(elements).parent().removeClass('calendar__date--close'); $(elements).parent().addClass('calendar__date--avaiable'); $(elements).parent().attr('date', Helpers.formatDate(new Date(year, month, (new Date(avaiableDays[i].date).getDate())))); } } } $('.calendar__date--avaiable').click(function () { selectDay($(this)); }); $('.calendar__on-loading').remove(); } else { //Carico disponibilità $.get('/it/calendar/available-days', { productId: productID, startDate: Helpers.formatDate(new Date(year, month, 1)), endDate: Helpers.formatDate(new Date(year, month + 1, 0)) }, function (res) { $('.calendar__on-loading').remove(); for (var i = 0; i < res.length; i++) { var elements = $(".calendar__date--close > span:contains(" + (new Date(res[i].date).getDate()) + ")"); if (elements.length > 1) { for (var a = 0; a < elements.length; a++) { var text = $(elements[a]).text(); var day = new Date(res[i].date).getDate(); if (text == day) { $(elements[a]).parent().removeClass('calendar__date--close'); $(elements[a]).parent().addClass('calendar__date--avaiable'); $(elements[a]).parent().attr('date', Helpers.formatDate(new Date(year, month, (new Date(res[i].date).getDate())))); } } } else { $(elements).parent().removeClass('calendar__date--close'); $(elements).parent().addClass('calendar__date--avaiable'); $(elements).parent().attr('date', Helpers.formatDate(new Date(year, month, (new Date(res[i].date).getDate())))); } } $('.calendar__date--avaiable').click(function () { selectDay($(this)); }); }).fail(function () { $('.calendar__on-loading').remove(); $('.calendar__dates').append('
Impossibile\u0020verificare\u0020disponibilit\u00E0
'); }); } } function dayOfWeek(day, month, year) { return new Date(year, month, day).getDay() === 0 ? 6 : new Date(year, month, day).getDay() - 1; } function requestQuote() { $('.request-quote').prop('disabled', true); var products = []; $('input[name^=qty]').each( function () { if ($(this).val() > 0) { products.push({ 'id': $(this).attr('data-product-id'), 'qty': $(this).val() }) } } ); $('.calendar-quotation').empty(); $.ajax({ url: '/it/calendar/quote', contentType: "application/json; charset=utf-8", dataType: "json", method: "POST", data: JSON.stringify({ date: $('.calendar__date--selected-only').attr('date').toString(), productId: productID, products: products, lang: "it", timeKey: timeKey }) }).done(function (res) { $('.calendar-quotation').empty(); $('.calendar-quotation').append('

'); $('.calendar-quotation').append(''); var quoteElements = '
'; $(res).each( function (index) { /*var bookingCode = "";*/ var checked = ""; if (index == 0) checked = "checked"; var subDescr = ""; if (typeof this.subDescr != 'undefined' && this.subDescr != null) subDescr = "

" + this.subDescr + "

"; if (this.times.length > 0) { var that = this; $(this.times).each( function (index) { quoteElements += '
' + '' + '' + '
'; } ); } else { quoteElements += '
' + '' + '' + '
'; } } ); quoteElements += '
'; $('.calendar-quotation').find('h4').text('Effettua\u0020una\u0020selezione'); $('.calendar-quotation').find('.subtitle').text('Il\u0020prezzo\u0020mostrato\u0020\u00E8\u0020complessivo\u0020per\u0020i\u0020biglietti\u0020richiesti'); $('.calendar-quotation').append(quoteElements); $('.request-quote').text('Modifica\u0020quotazione'); if (typeof avaiableDays != "undefined") { if (pickupType == "M") $('.calendar-quotation').append(''); else if (pickupType == "O") $('.calendar-quotation').append('

- Oppure -

'); else $('.calendar-quotation').append(''); } else { if (pickupType == "M") $('.calendar-quotation').append(''); else if (pickupType == "O") $('.calendar-quotation').append('

- Oppure -

'); else $('.calendar-quotation').append(''); } $('.get-pickup').click(function () { requestPickups() }); $('.store-cart').click(function () { storeCart() }); $('.store-package').click(function () { storePackage() }); $('html,body').animate({ scrollTop: $('.calendar-quotation').offset().top - 30 }, 'slow'); }).fail(function (res) { nascondiLoader(); var errorMessage = "Unexpected error"; if (res.status == 400) errorMessage = res.responseJSON.error; $.notify({ message: " " + errorMessage, }, { type: 'danger', allow_dismiss: true, delay: 5000 }); }).always(function () { $('.request-quote').prop('disabled', false); }); } function requestPickups() { $('.pickup-quotation').empty(); $.ajax({ url: '/it/calendar/pickups?rateKey=' + $('input[name="quotation"]:checked').val(), contentType: "application/json; charset=utf-8", dataType: "json", method: "GET" }).done(function (res) { $('.pickup-quotation').empty(); $('.pickup-quotation').append('

'); $('.pickup-quotation').append(''); pickups = res; var pickupsElement = ''; $('.pickup-quotation').find('h4').text('Seleziona\u0020un\u0020pickup'); $('.pickup-quotation').find('.subtitle').text('Seleziona\u0020un\u0020pickup\u0020e\u0020un\u0020orario'); $('.pickup-quotation').append(pickupsElement); var pickup = res[0]; var pickupinfo = "
"; if (pickup.name != null) pickupinfo += "

Nome\u0020pickup: " + pickup.name + ""; if (pickup.description != null) pickupinfo += "

Descrizione: " + pickup.description + ""; if (pickup.address != null) pickupinfo += "

Indirizzo: " + pickup.address + ""; if (pickup.city != null) pickupinfo += "

Citt\u00E0: " + pickup.city + ""; if (pickup.postcode != null) pickupinfo += "

CAP: " + pickup.postcode + ""; if (pickup.time != null) pickupinfo += "

Orario: " + pickup.time + ""; if (pickup.total != null) pickupinfo += "

Importo\u0020totale\u0020pickup: " + pickup.total + " €"; pickupinfo += "

"; $('.pickup-select').after(pickupinfo); if (typeof avaiableDays != "undefined") { $('.pickup-quotation').append(''); } else { $('.pickup-quotation').append(''); } $('.pickup-store-cart').click(function () { storeCart(); }); $('.pickup-select').change(function () { showPickInfo($(this).val()); }); $('.pickup-store-package').click(function () { storePackage(); }); $('html,body').animate({ scrollTop: $('.pickup-quotation').offset().top - 30 }, 'slow'); }).fail(function (res) { nascondiLoader(); var errorMessage = "Unexpected error"; if (res.status == 400) errorMessage = res.responseJSON.error; $.notify({ message: " " + errorMessage, }, { type: 'danger', allow_dismiss: true, delay: 5000 }); }).always(function () { //$('.request-quote').prop('disabled', false); }); } function showPickInfo(pickupKey) { $(".pick-up-info").remove(); var pickup = null; $(pickups).each( function (index) { if (pickups[index].pickupKey == pickupKey) pickup = pickups[index]; } ); var pickupinfo = "
"; if (pickup.name != null) pickupinfo += "

Nome\u0020pickup: " + pickup.name + ""; if (pickup.description != null) pickupinfo += "

Descrizione: " + pickup.description + ""; if (pickup.address != null) pickupinfo += "

Indirizzo: " + pickup.address + ""; if (pickup.city != null) pickupinfo += "

Citt\u00E0: " + pickup.city + ""; if (pickup.postcode != null) pickupinfo += "

CAP: " + pickup.postcode + ""; if (pickup.time != null) pickupinfo += "

Orario: " + pickup.time + ""; if (pickup.total != null) pickupinfo += "

Importo\u0020totale\u0020pickup: " + pickup.total + " €"; pickupinfo += "

"; $('.pickup-select').after(pickupinfo); } $('#calendar__month').on('change', function () { var month = $(this).find(":selected").val(); var year = $('#calendar__year').find(":selected").val(); renderCalendar(month, year); }); $('#calendar__year').on('change', function () { var month = $('#calendar__month').find(":selected").val(); var year = $(this).find(":selected").val(); renderCalendar(month, year); }); });