var INPUTCOLOR = ""; //colore del bordo dell'input di default var INPUTERROR = "1px solid #FF9900"; var GIORNI = Array("lun","mar","mer","gio","ven","sab","dom"); var timeOutId; //Timeout di alertWin var URLSITO = 'https://www.pa40.it/'; var SCMD = 'home'; var LOGGEDIN = false; /* 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: 60000}, function(confirm){ setTimeout(fn,200); }); }; function confirmSwal(mex,fn,fn2){ swal({ title: "Avviso", text: 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'); 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 = ''; } } function notificaTopRight(tot,img,nome,qta){ var tmpl = '
'+ '
TOTALE: € '+tot+'
'+ '
'+ '
'+ '' + '
'+ '
'+ nome+'
'+qta+ '
'+ '
'+ '
'; $.notify({ message: tmpl, },{ z_index: 1051, delay: 4000, animate: { enter: 'animated fadeInDown', exit: 'animated fadeOutUp' } }); } /* 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.borderBottom = INPUTCOLOR; } 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; } } return form; } /* validazione campi */ function indirizzoEmailValido(indirizzo) { if (window.RegExp) { var nonvalido = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)"; var valido = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"; var regnv = new RegExp(nonvalido); var regv = new RegExp(valido); if (!regnv.test(indirizzo) && regv.test(indirizzo)) return true; return false; }else { if(indirizzo.indexOf("@") >= 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)); INPUTCOLOR = frm.getElement(fld1).style.borderBottom; frm.getElement(fld1).style.borderBottom = 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)); INPUTCOLOR = frm.getElement(fld1).style.borderBottom; frm.getElement(fld1).style.borderBottom = 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)); INPUTCOLOR = frm.getElement(fld1).style.borderBottom; frm.getElement(fld1).style.borderBottom = 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)); } INPUTCOLOR = frm.getElement(fld1).style.borderBottom; frm.getElement(fld1).style.borderBottom = INPUTERROR; return false; }else{ return true; } break; case "date<": if(frm.getValue(fld2) != "" && frm.getValue(fld1) != ""){ 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)); INPUTCOLOR = frm.getElement(fld1).style.borderBottom; frm.getElement(fld1).style.borderBottom = 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)); INPUTCOLOR = frm.getElement(fld1).style.borderBottom; frm.getElement(fld1).style.borderBottom = INPUTERROR; return false; } return true; }else{ return true; } break; case "n": // controlla se il campo e' un numero if(isNaN(frm.getValue(fld1).replace(',','.'))){ alertSwal('warning',nome, 'Il campo deve contenere solo numeri',frm.focus.bind(frm,fld1)); INPUTCOLOR = frm.getElement(fld1).style.borderBottom; frm.getElement(fld1).style.borderBottom = INPUTERROR; return false; }else{ return true; } break; case "=": // confronta due campi if(frm.getValue(fld1) != frm.getValue(fld2)){ alertSwal('warning',nome, 'non coincidono',frm.focus.bind(frm,fld1)); INPUTCOLOR = frm.getElement(fld1).style.borderBottom; frm.getElement(fld1).style.borderBottom = 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 "pi": // 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_pi": // controlla codice fiscale or Partita iva var r1 = new RegExp("^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$"); var r2 = new RegExp("^[0-9]{11}$"); if(!r1.test(frm.getValue(fld1)) && !r2.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 "sdi": // controlla codice sdi var r = new RegExp("^[a-zA-Z0-9]{7}$"); 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 "c<": // controlla se il campo e' piu' corto di un tot if(frm.getValue(fld1).length < fld2){ alertSwal('warning',nome, "lunghezza minima " +fld2+ " caratteri",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 "v<": // controlla se il valore del campo e' < di tot if(parseInt(document.getElementById(id).value)>id2){ alertWin(nome+": il valore del campo deve essere inferiore a "+id2); 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)= del I if(convDate(document.getElementById(id).value)>convDate(document.getElementById(id2).value)){ alertWin(nome+": il campo deve essere superiore o uguale al precedente"); document.getElementById(id2).focus(); document.getElementById(id2).style.border = "1px solid #FF0000"; return false; }else{ return true; } break; case "doc": // controllo se il file = un doc obj = document.getElementById(id); var extensions = new Array(); extensions[1] = "doc"; extensions[0] = "docx"; extensions[2] = "pdf"; extensions[3] = "rtf"; /*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; } } alertWinScroll(id, 400, ""+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; } function genPass(n){ // Generazione password casuale if(n<4) return ""; var lets = "abcdefghiljkmnopqrstuvwxyz"; var nums = "0123456789"; var spes = "!$%&()=?*[]<>"; var elaborazione = ''; var nLet = n-4; var nNum = 2; var nLetM = 1; var nSpe = 1; for (var contatore=0; contatore').val(z).html(z)); if(ex==z) obj[0].lastChild.selected = true; } } function daysInMonth(month, year) { return new Date(year, month, 0).getDate(); } function getAge(dob){ var year = Number(dob.substr(0, 4)); var month = Number(dob.substr(5, 2)) - 1; var day = Number(dob.substr(8, 2)); var today = new Date(); var age = today.getFullYear() - year; if (today.getMonth() < month || (today.getMonth() == month && today.getDate() < day)) { age--; } return age; } function convDate(data){ dummy2 = data.split("-").reverse().join("-"); return dummy2; } 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:'it', 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 }, 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 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:'it', 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 //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(); }; } //****************************************** //********** GOOGLE MAP ********** //****************************************** var map; var cellX = 0; var cellY = 0; var marker = null; function initMap(x,y) { cellX = document.getElementById(x); cellY = document.getElementById(y); var zoom = 14; if(cellX.value == "" || cellX.value == "0") cellX.value = "37.5319673"; if(cellY.value == "" || cellY.value == "0") { cellY.value = "14.0360382"; zoom=7; }; var latLng = new google.maps.LatLng(Number(cellX.value),Number(cellY.value)); var iconColor = new google.maps.MarkerImage("http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png"); var geocoder = new google.maps.Geocoder(); var infowindow = new google.maps.InfoWindow({content: ""}); var myOptions = { zoom: zoom, center: latLng, mapTypeControl: true, mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU }, zoomControl: true, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("map"), myOptions); var marker = new google.maps.Marker({ position: latLng, title: 'Sposta', map: map, icon: iconColor, draggable: true }); function updateMarkerPosition(latLng) { cellX.value = String(Math.round(latLng.lat() * 1000000) / 1000000); cellY.value = String(Math.round(latLng.lng() * 1000000) / 1000000); } // Update current position info. updateMarkerPosition(latLng); google.maps.event.addListener(marker, 'dragend', function() { updateMarkerPosition(marker.getPosition()); }); google.maps.event.addListener(marker, 'drag', function() { updateMarkerPosition(marker.getPosition()); }); var googleSeachControlDiv = document.createElement('DIV'); var googleSeachControl = new GoogleSeachControl(googleSeachControlDiv, map); googleSeachControlDiv.index = 1; map.controls[google.maps.ControlPosition.LEFT_BOTTOM].push(googleSeachControlDiv); function GoogleSeachControl(controlDiv, map) { controlDiv.style.margin = '5px'; var controlUI = document.createElement('DIV'); controlUI.style.backgroundColor = 'white'; controlUI.style.cursor = 'pointer'; controlUI.style.textAlign = 'center'; controlUI.title = "Cerca"; controlDiv.appendChild(controlUI); var controltxtbox = document.createElement('input'); controltxtbox.setAttribute("id", "txt_googleseach"); controltxtbox.setAttribute("type", "text"); controltxtbox.setAttribute("value", ""); controlUI.appendChild(controltxtbox); var controlbtn = document.createElement('input'); controlbtn.setAttribute("id", "btn_googleseach"); controlbtn.setAttribute("type", "button"); controlbtn.setAttribute("value", "Cerca"); controlUI.appendChild(controlbtn); controltxtbox.onkeyup = function(){ctrlKey(event,'btn_googleseach');}; google.maps.event.addDomListener(controlbtn, 'click', function() { GoogleSeachAddress(); }); } function GoogleSeachAddress() { var address = document.getElementById("txt_googleseach").value; if (geocoder) { geocoder.geocode({ 'address': address }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); newLatLng = new google.maps.LatLng(results[0].geometry.location.lat(),results[0].geometry.location.lng()); marker.setPosition(newLatLng); cellY.value = String(Math.round(results[0].geometry.location.lng() * 1000000) / 1000000); cellX.value = String(Math.round(results[0].geometry.location.lat() * 1000000) / 1000000); infowindow.setContent("
lat " + results[0].geometry.location.lat() + "
lng " + results[0].geometry.location.lng() + "
hai cercato:" + address + "
"); infowindow.open(map, marker); /*google.maps.event.addListener(marker, 'click', function() { infowindow.open(map, marker); });*/ } else { alert("Indirizzo non trovato, risposta del geocoder: " + status); } }); } } } //****************************************** //********** FINE GOOGLE MAP ********** //****************************************** /******************FILES******************/ function engageSingleFoto(id,tbl,btn){ $("#"+btn+id).uploadFile({ url:"https://www.pa40.it/addFoto", fileName:"myfile", multiple:false, dragDrop:false, showFileCounter:false, //maxFileCount:1, //sequential:true, //sequentialCount:2, acceptFiles:"image/*", maxFileSize: 262144000, sizeErrorStr: "troppo grande. Max: " + "250MB", abortStr:"interrompi", cancelStr:"annulla", doneStr:"fatto", multiDragErrorStr: "Drag & Drop multiplo di file non autorizzato.", extErrorStr:"estenzione non autorizzata.", uploadErrorStr:"Upload non autorizzato.", maxFileCountErrorStr:"non autorizzato. Numero massimo di files: ", uploadStr:"Carica...", deletelStr: "Elimina", formData: {"id": id,"tbl":tbl}, showPreview:true, statusBarWidth:'auto', previewWidth: "auto", //previewHeight: "335px", onLoad:function(obj){ $.post('https://www.pa40.it/loadFoto',"id="+id+"&tbl="+tbl,function(){},'json') .done(function(data){ for(var i=0;i