jQuery(function() {
const bsid = "";
const devApis = {
originHost: ["booking-testing.24orebs.com","duqhll113pks5.cloudfront.net\n"],
domainName: 'iav6sav5o4.execute-api.eu-central-1.amazonaws.com',
availabilityPath: '/dev/callmeback',
bookingPath: '/dev/callmeback'
};
const prodApis = {
originHost: ["booking.24orebs.com","d2h5xki9x8tkc5.cloudfront.net"],
domainName: 'o3krxviw4l.execute-api.eu-central-1.amazonaws.com',
availabilityPath: '/prod/callmeback',
bookingPath: '/prod/callmeback'
};
const currentApis = prodApis.originHost.includes(document.location.host)?prodApis:devApis;
let dateFormat = new Intl.DateTimeFormat("it-IT" , {
day: '2-digit',
month: '2-digit',
year: 'numeric'
});
let selectToggle = false;
let unavailable = [];
let daysData = [];
const hideSelectDropdown = () => {
if(selectToggle!==false) {
jQuery(selectToggle).parents(".acf-input").removeClass("dropdown-active-field");
jQuery(selectToggle).parents(".acf-input").children(".select2-dropdown-options-panel").addClass("acf-hidden").removeClass("select2-container--open")
selectToggle = false;
}
};
const showSelectDropdown = (target) => {
if(selectToggle !== false && selectToggle!==target) {
hideSelectDropdown(selectToggle);
}
selectToggle = target;
jQuery(selectToggle).parents(".acf-input").addClass("dropdown-active-field");
jQuery(selectToggle).parents(".acf-input").children(".select2-dropdown-options-panel").removeClass("acf-hidden").addClass("select2-container--open")
};
const enableField = (field) => {
jQuery(field).find('.select2-container[disabled="disabled"]').removeAttr("disabled");
}
const disableField = (field) => {
jQuery(field).find(".select2-container").attr("disabled","disabled");
}
const displayFieldError = (field) => {
jQuery(field).parents(".acf-input").addClass("acf-error");
jQuery(field).parents(".acf-input").find(".acf-error-message").removeClass("hidden");
}
const clearFieldError = (field) => {
jQuery(field).parents(".acf-input").removeClass("acf-error");
jQuery(field).parents(".acf-input").find(".acf-error-message").addClass("hidden");
}
const setupAvailableDays = (days) => {
/*
if(today.getHours()<20 || (today.getHours()==20 && today.getMinutes()<=30)){
firstDay.setHours(0,0,0);
}
else{
firstDay.setTime(today.getTime() + oneDay);
firstDay.setHours(0,0,0);
}
jQuery("#select2-acf-bs24_callmeback_day-container").attr("title",dateFullMonthFormat(firstDay));
jQuery("#select2-acf-bs24_callmeback_day-container").text(dateFullMonthFormat(firstDay));
jQuery(".acf-field-bs24-callmeback-day .select2-selection__rendered").text(dateFullMonthFormat(firstDay));
*/
const prevDayValue = jQuery("#acf-bs24_callmeback_day").val();
if(!days || !days.length){
//TODO: enable unavailable days
}
let first = false;
for(let dayObject of days) {
const dayDate = new Date();
dayDate.setTime(dayObject.day);
if(!first){
jQuery("#select2-acf-bs24_callmeback_day-container").attr("title",dateFullMonthFormat(dayDate));
jQuery("#select2-acf-bs24_callmeback_day-container").text(dateFullMonthFormat(dayDate));
jQuery(".acf-field-bs24-callmeback-day .select2-selection__rendered").text(dateFullMonthFormat(dayDate));
first = true;
}
jQuery("#acf-bs24_callmeback_day").append('');
jQuery(".acf-field-bs24-callmeback-day .select2-results__options").append('
' + dateFullMonthFormat(dayDate) + '');
}
if ( prevDayValue!=null && jQuery("#acf-bs24_callmeback_day option[value='" + prevDayValue + "']").val()) {
jQuery("#acf-bs24_callmeback_day").val(prevDayValue);
jQuery(".acf-field-bs24-callmeback-day .select2-selection__rendered").text(jQuery("#acf-bs24_callmeback_day option[value='" + prevDayValue + "']").text());
}
}
const setupAvailableHours = () => {
const selectedDay = parseInt(jQuery("#acf-bs24_callmeback_day").val());
let prevHourValue = jQuery("#acf-bs24_callmeback_time").val();
let dayData = {};
let found = false;
for(let dayObject of daysData) {
if(dayObject.day == selectedDay){
found = true;
dayData = dayObject;
}
}
if(!found){
jQuery("#acf-bs24_callmeback_time").html("");
jQuery(".acf-field-bs24-callmeback-time .select2-results__options").html("");
jQuery("#acf-bs24_callmeback_time").append('');
jQuery(".acf-field-bs24-callmeback-time .select2-results__options").append('Nessun orario disponibile');
jQuery("#acf-bs24_callmeback_time").val(-1);
jQuery(".acf-field-bs24-callmeback-time .select2-selection__rendered").text("Nessun orario disponibile");
disableField(".acf-field-bs24-callmeback-time" );
return;
}
const hourFrom = dayData.hourFrom;
const hourTo = dayData.hourTo;
const hourSteps = 4;
const minutesSteps = Math.floor(60 / hourSteps);
//SETUP AVAILABLE HOURS
jQuery("#acf-bs24_callmeback_time").html("");
jQuery(".acf-field-bs24-callmeback-time .select2-results__options").html("");
jQuery("#acf-bs24_callmeback_time").append('');
jQuery(".acf-field-bs24-callmeback-time .select2-results__options").append('Seleziona orario');
jQuery("#acf-bs24_callmeback_time").val(-1);
jQuery(".acf-field-bs24-callmeback-time .select2-selection__rendered").text("Seleziona orario");
let anyHourAvaliable = false;
for(let i=hourFrom; i0 && unavailable[selectedDay].includes(i)) {
disabled = 'disabled="disabled"';
if(prevHourValue == i){
prevHourValue = -1;
}
continue;
}
else{
anyHourAvaliable = true;
}
jQuery("#acf-bs24_callmeback_time").append('');
jQuery(".acf-field-bs24-callmeback-time .select2-results__options").append(''+formatDayMinutesFromMidnight(i)+'');
}
if(!anyHourAvaliable){
jQuery("#acf-bs24_callmeback_time").html("");
jQuery(".acf-field-bs24-callmeback-time .select2-results__options").html("");
jQuery("#acf-bs24_callmeback_time").append('');
jQuery(".acf-field-bs24-callmeback-time .select2-results__options").append('Nessun orario disponibile');
jQuery("#acf-bs24_callmeback_time").val(-1);
jQuery(".acf-field-bs24-callmeback-time .select2-selection__rendered").text("Nessun orario disponibile");
disableField(".acf-field-bs24-callmeback-time" );
}
else{
enableField(".acf-field-bs24-callmeback-time" );
}
jQuery(".select2-results ul li").unbind("click");
if ( prevHourValue!=null && jQuery("#acf-bs24_callmeback_time option[value='" + prevHourValue + "']").val()) {
jQuery("#acf-bs24_callmeback_time").val(prevHourValue);
jQuery(".acf-field-bs24-callmeback-time .select2-selection__rendered").text(jQuery("#acf-bs24_callmeback_time option[value='" + prevHourValue + "']").text());
}
jQuery(".select2-results ul li").click(function(e) {
e.stopPropagation();
if(jQuery(this).attr("disabled") && jQuery(this).attr("disabled")=="disabled"){
return;
}
const valueRef = jQuery(this).attr("ref");
if(valueRef && valueRef!=""){
jQuery(this).parents(".acf-input").find(".select2-results ul li").removeClass("select2-results__option--highlighted");
jQuery(this).addClass("select2-results__option--highlighted");
jQuery(this).parents(".acf-input").find(".select2-selection__rendered").text(jQuery(this).text());
jQuery(this).parents(".acf-input").find("select").val(valueRef);
hideSelectDropdown();
if(valueRef!=-1){
clearFieldError(jQuery(this).parents(".acf-input").find("select"));
}
}
if(jQuery(this).hasClass("select2-results__option_day")){
setupAvailableHours();
}
});
}
const checkAvailableHours = async () => {
const callmebackStatus = await fetch("https://"+currentApis.domainName+currentApis.availabilityPath)
.then(res =>
res.text()
)
.then(str => {
return JSON.parse(str);
}
)
.catch(e => {
console.log("Error",e);
//TODO: enable error
return false;
});
if(callmebackStatus===false){
//TODO: enable error
return;
}
setupAvailableDays(callmebackStatus.nextDays);
daysData = callmebackStatus.nextDays;
unavailable = callmebackStatus.unavailable;
setupAvailableHours();
}
jQuery(".select2").click(function(e){
e.stopPropagation();
if(jQuery(this).length >0) {
if(jQuery(this).attr("disabled") && jQuery(this).attr("disabled") == "disabled"){
return;
}
if (selectToggle && selectToggle === this) {
hideSelectDropdown(this);
} else {
showSelectDropdown(this);
}
}
});
jQuery(".select2").blur(hideSelectDropdown);
jQuery('html').click(function(e) {
if(selectToggle) {
hideSelectDropdown(this);
}
});
checkAvailableHours();
//Enable hours
disableField(".acf-field-bs24-callmeback-time" );
jQuery("#acf-bs24_callmeback_privacy_reg1-1,#acf-bs24_callmeback_privacy_reg2-1,#acf-bs24_callmeback_privacy_reg3-1").click(function (e) {
clearFieldError(this);
});
jQuery(".acf-form-submit input").click(function(e) {
e.preventDefault();
e.stopPropagation();
let scrollTo = -1;
const telCheck = new RegExp(/([0-9\s\-]{7,})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/);
if(!jQuery("#acf-bs24_callmeback_phone").val() || jQuery("#acf-bs24_callmeback_phone").val()=="" ||
(jQuery("#acf-bs24_callmeback_phone").val() && jQuery("#acf-bs24_callmeback_phone").val().match(telCheck))==null) {
displayFieldError("#acf-bs24_callmeback_phone");
scrollTo = jQuery("#acf-bs24_callmeback_phone").offset().top - 200;
}
else{
clearFieldError("#acf-bs24_callmeback_phone");
}
if(jQuery("#acf-bs24_callmeback_time").val()==-1) {
displayFieldError("#acf-bs24_callmeback_time");
if(scrollTo==-1) {
scrollTo = jQuery("#acf-bs24_callmeback_time").offset().top - 200;
}
}
else{
clearFieldError("#acf-bs24_callmeback_time");
}
if(!jQuery("#acf-bs24_callmeback_privacy_reg2-1").is(":checked")){
displayFieldError("#acf-bs24_callmeback_privacy_reg2-1");
if(scrollTo==-1){
scrollTo = jQuery("#acf-bs24_callmeback_privacy_reg2-1").offset().top - 200;
}
}
else{
clearFieldError("#acf-bs24_callmeback_privacy_reg2-1");
}
if(scrollTo!=-1){
jQuery('html, body').animate({scrollTop: scrollTo}, 600);
}
else {
disableField(".acf-form-submit");
jQuery(".acf-form-submit input").unbind("click");
jQuery(".acf-form-submit input").click(e=>e.preventDefault());
jQuery(".acf-form-submit input").attr('disabled="disabled"');
const selectedDay = new Date(parseInt(jQuery("#acf-bs24_callmeback_day").val()));
const collectedData = {
name: jQuery("#acf-bs24_callmeback_name").val(),
surname: jQuery("#acf-bs24_callmeback_surname").val(),
email: jQuery("#acf-bs24_callmeback_email").val(),
phone: jQuery("#acf-bs24_callmeback_phone").val(),
day: selectedDay,
hour: jQuery("#acf-bs24_callmeback_time").val()
};
let jqxhr = jQuery.ajax({
cache: false,
crossDomain: true,
method: "POST",
url: "https://"+currentApis.domainName+currentApis.bookingPath,
data: JSON.stringify( collectedData ),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function( data ) {
if(data.overbooking){
jQuery(".full-overbooking").removeClass("hidden");
jQuery('html, body').animate({scrollTop: 0}, 0);
setTimeout(function(){
window.location.reload();
},5000)
}
else{
jQuery(".full-ok").removeClass("hidden");
jQuery('html, body').animate({scrollTop: 0}, 0);
}
},
error: function() {
jQuery(".full-error").removeClass("hidden");
jQuery('html, body').animate({scrollTop: 0}, 0);
setTimeout(function(){
window.location.reload();
},5000)
}
});
}
});
});
const dayHourToMills = (hour,minutes) => {
return ((hour*60)+(minutes));
}
const formatDayHour = (hour,minutes) => {
return (hour<10?"0"+hour:""+hour)+":"+(minutes<10?"0"+minutes:""+minutes);
}
const formatDayMinutesFromMidnight = (minutesFromMidnight) => {
const hour = Math.floor(minutesFromMidnight/60);
const minutes = minutesFromMidnight % 60;
return (hour<10?"0"+hour:""+hour)+":"+(minutes<10?"0"+minutes:""+minutes);
}
const dateFullMonthFormat = (date) => {
let format = new Intl.DateTimeFormat("it-IT" , {
day: '2-digit',
month: 'long'
});
return format.format(date);
}