let roomCreating; let nameRoom = 'LABELS_STANZA'; let nameRoomIndex = 0; function checkVar(variable){ if(variable && typeof variable != "undefined" && variable != '' && variable != ' ' && variable != null){ return true; } else { return false; } } function calcScrollTop(){ const mobileBreakpoint = 768; if (window.innerWidth <= mobileBreakpoint) { return 600; } else { return 200; } } function createKeyLocalStorage(el, nameRoomIndex){ let inputs = el.elements; if(checkVar(inputs)){ for (let i = 0; i < inputs.length; i++) { let keyLocalStorage = inputs[i].dataset.keyLocalstorage; if(checkVar(keyLocalStorage)){ let newLocalStorage = keyLocalStorage.slice(0, -1) + nameRoomIndex; if(checkVar(newLocalStorage)){ inputs[i].dataset.keyLocalstorage = newLocalStorage; } } } } } function createKeyRequiredFields(el, nameRoomIndex){ let inputs = el.elements; if(checkVar(inputs)){ for (let i = 0; i < inputs.length; i++) { if( inputs[i].className.split(' ').indexOf('js-required') > -1 ) { let keyLocalStorage = inputs[i].dataset.keyLocalstorage; if (checkVar(keyLocalStorage)) { let newKeyRequiredField = keyLocalStorage.slice(0, -1) + nameRoomIndex + '_required_label'; if (checkVar(newKeyRequiredField)) { let elLabelRequired = inputs[i].closest('.form-input-custom').querySelector('div'); if(elLabelRequired){ elLabelRequired.id = newKeyRequiredField; elLabelRequired.classList.add('d-none'); } } } } } } } function getDynamicFields(){ let namesFieldsDynamic = []; $('#base-form-to-copy .js-field-dynamic').each(function (){ let nameFieldDynamic = this.dataset.nameFieldDynamic; namesFieldsDynamic.push(nameFieldDynamic); }); return namesFieldsDynamic; } function requiredFields(parent = '', valueScrollTop = 0){ let ok = true; let fieldsRequired = $(parent + ' .js-required'); if(checkVar(fieldsRequired)){ fieldsRequired.each(function (){ if ($(this).closest('#base-form-to-copy').length === 0) { let valueField = this.value; let campo = this.dataset.keyLocalstorage; let idLabelRequired = '#' + campo + '_required_label'; if (!checkVar(valueField)) { ok = false; $(idLabelRequired).removeClass('d-none'); } } }); } if(!ok && checkVar(valueScrollTop) && valueScrollTop > 0){ $('html, body').animate({ scrollTop: valueScrollTop }, 'slow'); } return ok; } function updatingRoomName(el){ el.querySelector('.js-name-room').innerHTML = nameRoom + ' ' + nameRoomIndex; } function sendDataSteps(idCurrentStep, idNextStep){ if( requiredFields() ){ if( validationEmail() ) { let jsonDataSteps = getDataLocalStorage(); $.ajax({ url: "https://www.erasroom.com/assets/ajax/calcola-affitto/invia-dati.php", type: "POST", beforeSend: function (){ $('.js-loading-calcola-affitto').css('opacity', '0.4'); $('.js-loader').removeClass('d-none'); }, data: {jsonDataSteps: jsonDataSteps, fieldsDynamicRooms: getDynamicFields(), dropzoneFiles: JSON.parse( localStorage.getItem('uploadedFiles') )}, success: function (response) { const data = JSON.parse(response); if (data.status == "success") { if (checkVar(idCurrentStep)) { let currentStep = $('#calcola-affitto-step-' + idCurrentStep); if (checkVar(currentStep)) { currentStep.css('display', 'none'); } } if (checkVar(idNextStep)) { let nextStep = $('#calcola-affitto-step-' + idNextStep); if (checkVar(nextStep)) { nextStep.css('display', 'block'); } } updateProgressiveBar(idCurrentStep, idNextStep); localStorage.removeItem('step'); localStorage.clear(); $('.js-loader').addClass('d-none'); $('.js-loading-calcola-affitto').css('opacity', '1'); } else if (data.status == "error") { $('.js-loader').addClass('d-none'); $('.js-loading-calcola-affitto').css('opacity', '1'); if(data.show_custom_message){ swal({ text: data.message, type: "error", showConfirmButton: true }); } else { swal({ text: 'LABELS_CONTATTARE_IL_SUPPORTO_TECNICO', type: "error", showConfirmButton: true }); } } }, }); } } else { swal({ text: 'LABELS_CAMPI_OBBLIGATORI', type: "error", showConfirmButton: true }); } } function validateEmail(email) { const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; return emailRegex.test(email); } function getDataLocalStorage(){ let jsonDataSteps = {}; $('.js-localstorage-data').each(function (){ if ($(this).closest('#base-form-to-copy').length === 0) { let keyLocalstorage = this.dataset.keyLocalstorage; let valueLocalstorage = localStorage.getItem(keyLocalstorage); Object.assign(jsonDataSteps, {[keyLocalstorage]: valueLocalstorage}); } }); return jsonDataSteps; } function selectOptionByValue($select, valueToSelect) { $select.val(''); $select.val(valueToSelect); $select.find('option').each(function() { $(this).removeClass('selected'); if ($(this).val() === valueToSelect) { $(this).addClass('selected'); } }); } function restoreDataLocalstorare(){ $('.js-localstorage-data').each(function (){ if ($(this).closest('#base-form-to-copy').length === 0) { let keyLocalstorage = this.dataset.keyLocalstorage; switch (this.type.trim()) { case 'textarea': case 'text': this.value = localStorage.getItem(keyLocalstorage); break; case 'checkbox': let isChecked = localStorage.getItem(keyLocalstorage); if (isChecked == "on" || isChecked == "true") { this.checked = true; } else { this.checked = false; } break; case 'select-one': var $select = $(this); selectOptionByValue($select, localStorage.getItem(keyLocalstorage)); break; } } }); } function restoreRoomCreating(){ let nRoomCreating = localStorage.getItem('roomCreating'); if(checkVar(nRoomCreating)){ for (let i = 0; i < parseInt(nRoomCreating); i++){ createForm(false); } } } function updatingRoomCreating(action = 1){ let nRoomCreating = parseInt( localStorage.getItem('roomCreating') ); if(!checkVar(nRoomCreating) || nRoomCreating < 0){ nRoomCreating = 0; } switch (action){ case 1: localStorage.setItem('roomCreating', (nRoomCreating + 1)); break; case -1: localStorage.setItem('roomCreating', (nRoomCreating - 1)); break; } return parseInt(localStorage.getItem('roomCreating')); } function toggleLabelRequired(){ $('.js-required').on('keyup', function (){ let campo = this.dataset.keyLocalstorage; let idLabelRequired = '#' + campo + '_required_label'; if(checkVar(this.value)) { $(idLabelRequired).addClass('d-none'); } else { $(idLabelRequired).removeClass('d-none'); } }); $('select.js-required').on('change', function (){ let campo = this.dataset.keyLocalstorage; let idLabelRequired = '#' + campo + '_required_label'; if(checkVar(this.value)) { $(idLabelRequired).addClass('d-none'); } else { $(idLabelRequired).removeClass('d-none'); } }); } function savingLocalStorageDataText(el){ let keyLocalstorage = el.dataset.keyLocalstorage; let valueLocalstorage = el.value; try { localStorage.setItem(keyLocalstorage, valueLocalstorage); } catch (e) { if (e.code === DOMException.QUOTA_EXCEEDED_ERR) { console.error('Quota di memoria superata!'); } } } function savingLocalStorageDataCheckbox(el){ let keyLocalstorage = el.dataset.keyLocalstorage; let valueLocalstorage = el.checked; try { localStorage.setItem(keyLocalstorage, valueLocalstorage); } catch (e) { if (e.code === DOMException.QUOTA_EXCEEDED_ERR) { console.error('Quota di memoria superata!'); } } } function saveLocalStorageData(){ $('.js-localstorage-data').on('keyup', function (){ savingLocalStorageDataText(this); }); $('.js-localstorage-data.js-checkbox').on('click', function (){ savingLocalStorageDataCheckbox(this); }); $('.js-localstorage-data.js-select-custom').on('change', function (){ savingLocalStorageDataText(this); }); } function autoSaveLocalStorageData(){ $('.js-localstorage-data:not(.js-checkbox)').each(function() { savingLocalStorageDataText(this); }); $('.js-localstorage-data.js-checkbox').each(function() { savingLocalStorageDataCheckbox(this); }); $('.js-localstorage-data.js-select-custom').each(function() { savingLocalStorageDataText(this); }); } function clearLocalStorage(exclude = []){ for (let i = 0; i < localStorage.length; i++) { let clear = true; let key = localStorage.key(i); if (!exclude.includes(key)) { $('.js-localstorage-data').each(function () { let keyLocalStorage = this.dataset.keyLocalstorage; if (keyLocalStorage == key) { clear = false; } }); if (clear) { localStorage.removeItem(key); } } } } function destroyRooms(){ nameRoomIndex = 0; localStorage.setItem('roomCreating', 0); $('.js-container-create-rooms').html(''); } function triggerSelects(){ $('select.js-select-custom').val('').trigger('change'); } function createNrooms(){ $('.js-create-n-rooms').focusout(function() { const maxRooms = 20; let nRooms = this.value; if(checkVar(nRooms) && nRooms > 0 && nRooms <= maxRooms){ destroyRooms(); for (let i=0; i