var DEBUG = true; var INPUTCOLOR = "#dddddd"; //colore del bordo dell'input di default var INPUTERROR = "1px solid #FF5500"; //var LOCALAREA = ; var LANG = ''; var URLSITO = ''; /* ALERT ********************************/ function alertSwal(ty,ti,mex,fn){ //type = warning, error, success, info, question if(fn==undefined) fn=function(){}; swal({ title: ti, text: mex, type: ty, timer: 6000}, function(confirm){ setTimeout(fn,200); }); }; function confirmSwal(mex,fn,fn2){ swal({ title: "Avviso", html: mex, type: 'warning', showCancelButton: true, confirmButtonText: 'Ok', cancelButtonText: 'Annulla' }, function(confirm){ if(confirm){ setTimeout(fn,200); }else{ setTimeout(fn2,200); } }); } function viewLoader(mex){ var ldr = document.getElementById('nonsolospinner'); var ldrdiv = document.getElementById('nonsolospinnerdiv'); getChildTag(ldr,'DIV')[0].innerHTML = mex; //ldr.firstChild.innerHTML = mex; ldr.style.display = "block"; ldrdiv.style.display = "block"; } function hideLoader(cont,dbg){ if(dbg){ if(typeof(cont)!='string') cont = JSON.stringify(cont); var ldr = document.getElementById('nonsolospinner'); ldr.firstChild.innerHTML = cont; }else{ var ldr = document.getElementById('nonsolospinner'); var ldrdiv = document.getElementById('nonsolospinnerdiv'); ldr.style.display = "none"; ldrdiv.style.display = "none"; ldr.firstChild.innerHTML = ''; } } /* DEBUG ********************************/ function ja(o){ alert(JSON.stringify(o)); console.log(JSON.stringify(o)); } function sja(o){ var str = ''; for(var i in o){ if(str!='') str +=','; str += i +":" + typeof o[i]; } alert(str); } /* FORM ********************************/ function normalizeCampo(obj){ obj.style.borderColor = INPUTCOLOR; } function emphasizeCampo(obj){ obj.style.border = INPUTERROR; }; function ctrlKey(e,o){ if(e.keyCode==13) document.getElementById(o).click(); } function toUri(obj){ var strUri=''; if(obj.name!="" && obj.name!=undefined){ switch(obj.type){ case 'checkbox': case 'radio': if((obj.type === 'radio' || obj.type === 'checkbox') && obj.checked) { var val=(obj.value!=='')? obj.value : '1'; strUri += '&'+obj.name+'='+encodeURIComponent(val); }else{ strUri += '&'+obj.name+'='; } break; default: strUri += '&'+obj.name+'='+encodeURIComponent(obj.value); break; } } return strUri; } function buildUri(obj){ var strUri =''; for(var n=0; n0) fields['dataId'] = []; for(var n=0; n stringify of objects //mode=mix => key= stringify for array and key=value for the rest //mode=php => key[]=val1&...key[]=valn for array and key=value for the rest if(mode==undefined) mode = 'php'; var strUri = ''; var objUri = {}; var mixUri = ''; for(var i in this.nodes){ var v = this.getValue(i); objUri[i.replace('[]','')]=v; if(v.constructor === Array){ v.forEach(function(e){ strUri += '&'+i+'='+encodeURIComponent(e); }); mixUri += '&'+encodeURIComponent(i.replace('[]',''))+'='+encodeURIComponent(JSON.stringify(v)); }else{ strUri += '&'+encodeURIComponent(i)+'='+encodeURIComponent(v); mixUri += '&'+encodeURIComponent(i)+'='+encodeURIComponent(v); } } switch(mode){ case 'json': return JSON.stringify(objUri); break; case 'mix': return mixUri; break; case 'php': return strUri; break; } }, form.normalize = function(){ for(var i in form.nodes){ var a = form.nodes[i]; for(var j=0;j= 0) return true; return false; } } function controlForm(frm,nome,fld1,fld2,tipo){ if(tipo==undefined) tipo = ''; switch(tipo){ case "":// controlla se il campo e vuoto false (quindi ="" o =0...tanti zeri) if(frm.getValue(fld1) == false){ alertSwal('warning',nome, 'campo mancante',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; } return true; break; case "_":// controlla se il campo = vuoto con "" if(frm.getValue(fld1) == ""){ alertSwal('warning',nome, 'campo mancante',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; } return true; break; case "@": // controlla la validita del campo mail if(!indirizzoEmailValido(frm.getValue(fld1))){ alertSwal('warning',nome, 'formato non valido',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; } return true; break; case "hS":// controlla se il campo autoSuggest = vuoto if(frm.getValue(fld2) == ""){ if(frm.getValue(fld1) == false){ alertSwal('warning',nome, 'campo mancante',frm.focus.bind(frm,fld1)); }else{ alertSwal('warning',nome, 'Non presente tra i dati disponibili',frm.focus.bind(frm,fld1)); } frm.getElement(fld1).style.border = INPUTERROR; return false; }else{ return true; } break; case "date": if(frm.getValue(fld1) == "" || frm.getValue(fld1) == "00-00-0000"){ alertSwal('warning',nome, 'campo mancante',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; }else{ return true; } break; case "date<": if(frm.getValue(fld2) != "" && frm.getValue(fld1) != ""){//&& frm.getValue(fld2) != "00-00-0000" && frm.getValue(fld1) != "00-00-0000" var arr1 = frm.getValue(fld1).split("-"); var arr2 = frm.getValue(fld2).split("-"); var d1 = new Date(arr1[2],arr1[1]-1,arr1[0]); var d2 = new Date(arr2[2],arr2[1]-1,arr2[0]); var r1 = d1.getTime(); var r2 = d2.getTime(); if(r1 > r2){ alertSwal('warning',nome, 'Le date sono invertite',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; } return true; }else{ return true; } break; case "ore<": if(frm.getValue(fld2)!="" && frm.getValue(fld1)!=""){//&& frm.getValue(fld2)!="00:00" && frm.getValue(fld1)!="00:00"){ var arr1 = frm.getValue(fld1).split(":"); var arr2 = frm.getValue(fld2).split(":"); arr1[0]= parseInt(arr1[0],10); arr1[1]= parseInt(arr1[1],10); arr2[0]= parseInt(arr2[0],10); arr2[1]= parseInt(arr2[1],10); if(arr1[0] > arr2[0] || (arr1[0] == arr2[0] && arr1[1] > arr2[1])){ alertSwal('warning',nome, 'Gli orari sono invertiti',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; } return true; }else{ return true; } break; case "!-1": // controlla se il valore del campo e' !-1 if(frm.getValue(fld1)=='-1'){ alertSwal('warning',nome, 'campo mancante',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; }else{ return true; } break; case "=": // confronta due campi if(frm.getValue(fld2) != frm.getValue(fld1)){ alertSwal('warning',nome, "non coincidono?>",frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; frm.getElement(fld2).value = ""; return false; }else{ return true; } break; case "c<": // controlla se il campo e' piu' corto di un tot if(frm.getValue(fld1).length < fld2){ alertSwal('warning',nome, 'lunghezza minima: '+fld2,frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; }else{ return true; } break; case "piva": // controlla partita iva var r = new RegExp("^[0-9]{11}$"); if(!r.test(frm.getValue(fld1))){ alertSwal('warning',nome, 'Formato non valido',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; }else{ return true; } break; case "cf": // controlla codice fiscale var r = new RegExp("^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$"); if(!r.test(frm.getValue(fld1))){ alertSwal('warning',nome, 'Formato non valido',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; }else{ return true; } break; case "iban": // controlla IBAN var r = new RegExp("^[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}$"); //var r = new RegExp("/^(?:(?:IT|SM)\d{2}[A-Z]\d{22}|CY\d{2}[A-Z]\d{23}|NL\d{2}[A-Z]{4}\d{10}|LV\d{2}[A-Z]{4}\d{13}|(?:BG|BH|GB|IE)\d{2}[A-Z]{4}\d{14}|GI\d{2}[A-Z]{4}\d{15}|RO\d{2}[A-Z]{4}\d{16}|KW\d{2}[A-Z]{4}\d{22}|MT\d{2}[A-Z]{4}\d{23}|NO\d{13}|(?:DK|FI|GL|FO)\d{16}|MK\d{17}|(?:AT|EE|KZ|LU|XK)\d{18}|(?:BA|HR|LI|CH|CR)\d{19}|(?:GE|DE|LT|ME|RS)\d{20}|IL\d{21}|(?:AD|CZ|ES|MD|SA)\d{22}|PT\d{23}|(?:BE|IS)\d{24}|(?:FR|MR|MC)\d{25}|(?:AL|DO|LB|PL)\d{26}|(?:AZ|HU)\d{27}|(?:GR|MU)\d{28})$/i"); if(!r.test(frm.getValue(fld1))){ alertSwal('warning',nome, 'Formato non valido',frm.focus.bind(frm,fld1)); frm.getElement(fld1).style.border = INPUTERROR; return false; }else{ return true; } break; // TODO case "h": // controlla se il campo hidden = vuoto if(document.getElementById(id2).value == false){ alertWinScroll(id, 400, ""+nome+": campo mancante"); document.getElementById(id).focus(); document.getElementById(id).style.border = "1px solid #FF9900"; return false; }else{ return true; } break; case "c": // controlla se il campo e' piu' lungo di un tot if(document.getElementById(id).value.length > id2){ var c = "caratteri"; if(id2==1) c = "carattere"; alertWinScroll(id, 400, ""+nome+": il campo deve contenere un massimo di "+id2+" "+c); document.getElementById(id).focus(); document.getElementById(id).style.border = "1px solid #FF9900"; return false; }else{ return true; } break; case "n=": // controlla se il campo e' lungo n if(document.getElementById(id).value.length != id2){ var c = "caratteri"; if(id2==1) c = "carattere"; alertWinScroll(id, 400, ""+nome+": il campo deve contenere " +id2+ " "+c); document.getElementById(id).focus(); document.getElementById(id).style.border = "1px solid #FF0000"; return false; }else{ return true; } break; case "n": // controlla se il campo e' un numero if(isNaN(document.getElementById(id).value.replace(',','.'))){ alertWin(nome+": il campo deve contenere solo numeri"); document.getElementById(id).focus(); document.getElementById(id).style.border = "1px solid #FF0000"; return false; }else{ return true; } case "v>": // controlla se il valore del campo e' > di tot if(parseInt(document.getElementById(id).value)=": // controlla se il valore del campo e' >= di tot if(parseInt(document.getElementById(id).value)"+nome+": formato non valido"); document.getElementById(id).focus(); document.getElementById(id).style.border = "1px solid #FF9900"; return false; break; case "img": // controllo se il file = una img obj = document.getElementById(id); var extensions = new Array(); extensions[1] = "jpg"; extensions[0] = "jpeg"; extensions[2] = "gif"; extensions[3] = "png"; /*extensions[4] = "bmp";*/ var image_file = obj.value; var image_length = image_file.length; var pos = image_file.lastIndexOf('.') + 1; var ext = image_file.substring(pos, image_length); var final_ext = ext.toLowerCase(); for (i = 0; i < extensions.length; i++){ if(extensions[i] == final_ext){ return true; } } alertWin("Seleziona un'immagine con una delle seguenti estensioni:\n\n gif, jpeg, jpg"); return false; break; default: alertWin("tipo non riconosciuto"); return false; } } // ********************* Modale ****************** // Eventi nella pagina function addEvent(obj, evType, fn){ if(obj.addEventListener){ obj.addEventListener(evType, fn, true); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } } function once(e,fn) { target = (e.currentTarget) ? e.currentTarget : e.srcElement; if(target.removeEventListener){ target.removeEventListener(e.type, fn); }else{ target.detachEvent('on'+e.type, fn); } target['on'+e.type]=null;//inline event var args = Array.prototype.slice.call(arguments); var dump = args.shift(); dump = args.shift(); fn.apply(this, args); try { var new_e = new e.constructor(e.type, e); target.dispatchEvent(new_e); }catch(err) {} } function isMobile() { try{ document.createEvent("TouchEvent"); return true; } catch(e){ return false; } } /* Matematica ********************************/ /*** Returns a random integer between min (inclusive) and max (inclusive)*/ function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } /* Data tempo ********************************/ function dataIntervalPickerMod(dateFrom, dateTo, days, autoOpen, updateTo, maxAnno, pos, dataMin) { // // nuova versione diverso da ncc if(typeof(dataMin)=="string"){ var dataLim = dataMin.split('-'); var minDate = moment([dataLim[0],dataLim[1]-1,dataLim[2],0,0,0,0]); }else{ // altrimenti mette come min 1970-01-01 var minDate = new Date('1970-01-01'); } var dateF; var dateT; if(typeof dateFrom == 'string'){ dateF = $('#'+dateFrom); }else{ dateF = $(dateFrom); }; if(typeof dateTo == 'string'){ dateT = $('#'+dateTo); }else{ dateT = $(dateTo); }; if(dateF.val()==""){var dpevent = "dp.change";}else{var dpevent = "dp.hide";} dateF.datetimepicker({ locale: LANG, format: 'DD-MM-YYYY', widgetPositioning: { horizontal: 'auto', vertical: pos }, icons: { time: "fa fa-clock-o", date: "fa fa-calendar", up: "fa fa-chevron-up", down: "fa fa-chevron-down", previous: 'fa fa-chevron-left', next: 'fa fa-chevron-right', today: 'fa fa-screenshot', clear: 'fa fa-trash', close: 'fa fa-remove', inline: true }, minDate: minDate, useCurrent: false, ignoreReadonly: true //debug:true //}).on('dp.change', function (ev) { }).on(dpevent, function (ev) { $(dateF[0]).trigger("change"); if(maxAnno){ var anno = moment(ev.date,"DD/MM/YYYY").year(); var mese = moment(ev.date,"DD/MM/YYYY").month(); if(mese<7){ var maxDate = new Date(anno+'-12-31'); }else{ anno++; var maxDate = new Date(anno+'-06-30'); } }else{ var maxDate = new Date('2068-12-31'); } try { dateT.data("DateTimePicker").destroy(); } catch (e) {} dateT.datetimepicker({ locale: LANG, format: 'DD-MM-YYYY', widgetPositioning: { horizontal: 'auto', vertical: pos }, icons: { time: "fa fa-clock-o", date: "fa fa-calendar", up: "fa fa-chevron-up", down: "fa fa-chevron-down", previous: 'fa fa-chevron-left', next: 'fa fa-chevron-right', today: 'fa fa-screenshot', clear: 'fa fa-trash', close: 'fa fa-remove', inline: true }, minDate: ev.date, maxDate: maxDate, useCurrent: false, ignoreReadonly: true //debug:true }).on('dp.change', function (ev) { $(dateT[0]).trigger("change"); }); setTimeout(function (){ //dateT.focus.bind(dateT); if(updateTo){ var newDate = dateF.data("DateTimePicker").date(); newDate.add(days, "days"); dateT.data("DateTimePicker").date(newDate); }else{ if(dateT.val()==""){ var newDate = dateF.data("DateTimePicker").date(); newDate.add(days, "days"); dateT.data("DateTimePicker").date(newDate); } } dateT.focus(); }, 500); }); if(autoOpen){ dateF[0].onfocus=function(){}; dateF.blur(); dateF.focus(); } } function dataPicker(id,open,current){ if(open==undefined) open=0;// istanzia ed apri il picker if(current==undefined) current=true;//On show, use the current date/time var obj; if(typeof id == 'string'){ obj = $('#'+id); }else{ obj = $(id); }; obj.datetimepicker({ locale:'', format: 'DD-MM-YYYY', icons: { time: "fa fa-clock-o", date: "fa fa-calendar", up: "fa fa-chevron-up", down: "fa fa-chevron-down", previous: 'fa fa-chevron-left', next: 'fa fa-chevron-right', today: 'fa fa-screenshot', clear: 'fa fa-trash', close: 'fa fa-remove', inline: true }, ignoreReadonly: true, useCurrent:current //,debug:true }).on('dp.change', function (ev) { $(obj[0]).trigger( "change" ); //obj.trigger( "change" ); }); if(open){ obj[0].onfocus=function(){}; obj.blur(); obj.focus(); }; } function dataPickerMin(id,open,dataF){ if($('#'+dataF).val()=="") return false; dataLim = $('#'+dataF).val().split('-'); if(open==undefined) open=0;// istanzia ed apri il picker var obj; if(typeof id == 'string'){ obj = $('#'+id); }else{ obj = $(id); }; obj.datetimepicker({ locale:'', format: 'DD-MM-YYYY', icons: { time: "fa fa-clock-o", date: "fa fa-calendar", up: "fa fa-chevron-up", down: "fa fa-chevron-down", previous: 'fa fa-chevron-left', next: 'fa fa-chevron-right', today: 'fa fa-screenshot', clear: 'fa fa-trash', close: 'fa fa-remove', inline: true }, minDate: moment([dataLim[2],dataLim[1]-1,dataLim[0],0,0,0,0]), useCurrent: false, ignoreReadonly: true //,debug:true }).on('dp.change', function (ev) { $(obj[0]).trigger( "change" ); //obj.trigger( "change" ); }); //newDate = new Date(dataLim[2]+'-'+dataLim[1]+'-'+dataLim[0]+'T00:00:00'); //obj.data("DateTimePicker").date(newDate); if(open){ obj[0].onfocus=function(){}; obj.blur(); obj.focus(); }; } function timePicker(id,open,current){ if(open==undefined) open=0; if(current==undefined) current=true; var obj; if(typeof id == 'string'){ obj = $('#'+id); }else{ obj = $(id); }; obj.datetimepicker({ locale:'', format: 'H:mm', // use this format if you want the 24hours timepicker //format: 'h:mm A', //use this format if you want the 12hours timpiecker with AM/PM toggle icons: { time: "fa fa-clock-o", date: "fa fa-calendar", up: "fa fa-chevron-up", down: "fa fa-chevron-down", previous: 'fa fa-chevron-left', next: 'fa fa-chevron-right', today: 'fa fa-screenshot', clear: 'fa fa-trash', close: 'fa fa-remove', inline: true }, useCurrent:current, //On show, use the current date/time ignoreReadonly: true //,debug:true }).on('dp.change', function (ev) { $(obj[0]).trigger( "change" ); }); if(open){ // istanzia ed apri il picker obj[0].onfocus=function(){}; obj.blur(); obj.focus(); }; } function yearPicker(id,open,current){ if(open==undefined) open=0;// istanzia ed apri il picker if(current==undefined) current=true;//On show, use the current date/time var obj; if(typeof id == 'string'){ obj = $('#'+id); }else{ obj = $(id); }; obj.datetimepicker({ locale:'', format: 'DD-MM-YYYY', icons: { time: "fa fa-clock-o", date: "fa fa-calendar", up: "fa fa-chevron-up", down: "fa fa-chevron-down", previous: 'fa fa-chevron-left', next: 'fa fa-chevron-right', today: 'fa fa-screenshot', clear: 'fa fa-trash', close: 'fa fa-remove', inline: true }, viewMode: 'years', defaultDate: '2001', ignoreReadonly: true, useCurrent:current //,debug:true }).on('dp.change', function (ev) { $(obj[0]).trigger( "change" ); //obj.trigger( "change" ); }); if(open){ obj[0].onfocus=function(){}; obj.blur(); obj.focus(); }; } // ******************Form prenotazione********************* function initPlaces(obj) { var autocomplete = new google.maps.places.Autocomplete(obj, { types: ['geocode'] }); //,componentRestrictions: {country: 'it'} autocomplete.setComponentRestrictions({ 'country': ['it', 'ch'] }); autocomplete.addListener('place_changed', fillInAddress.bind(obj, autocomplete)); } function fillInAddress(autocomplete) { var place = autocomplete.getPlace(); if (place.geometry) { var inps = getChildTag(this.parentNode, "INPUT"); for (var i = 0; i < inps.length; i++) { if (inps[i].name == this.name + 'lat') { inps[i].value = String(Math.round(place.geometry.location.lat() * 10000000) / 10000000); } if (inps[i].name == this.name + 'lng') { inps[i].value = String(Math.round(place.geometry.location.lng() * 10000000) / 10000000); } } } } //********************Contattaci****************** function contatta(obj){ var frm = formica(obj); flag = true; flag = flag && controlForm(frm, "Categoria",'idCategoria'); //flag = flag && controlForm(frm, "nome",'nome'); //flag = flag && controlForm(frm, "cognome",'cognome'); flag = flag && controlForm(frm, "Email",'blabla','','@'); flag = flag && controlForm(frm, "Messaggio",'messaggio'); flag = flag && controlForm(frm, "privacy policy",'privacy'); var strUri = frm.buildUri('php'); strUri += "&lang="; if(flag){ //viewLoader('invio_in_corso'); $.post('inviaContatti.php',strUri,function(){},'json') .done(function(resp){ var fn = function (){ frm.getElement('nome').value = ""; frm.getElement('cognome').value = ""; frm.getElement('tel').value = ""; frm.getElement('blabla').value = ""; frm.getElement('messaggio').value = ""; } if(resp.s=="ok"){ alertSwal('success',"richiesta_inviata", "sarai rincontattato", fn); }else{ alertSwal('error','',"errore_contatto"); } }) .fail(function(){alertSwal('error','', "errore_connessione");}) .always(function(resp){/*hideLoader(resp,0);*/}); } }