var validateAlways = false; $(document).ready(function(){ $('#addresspattern\\.type,#addresspattern\\.name,#addresspattern\\.number').each(function (){ var element = this; if(!element.__defaultOverride){ element.__defaultOverride = true; element.__modified = false; element.__lastValue = null; element.__onfocus = element.onfocus; element.__onblur = element.onblur; element.onfocus = function(event){ if(!this.__modified){ this.__lastValue = this.value; if ("text" == this.type || "TEXTAREA" == this.tagName){ this.__lastValue = this.value; } else if ("checkbox" == this.type || "radio" == this.type){ this.__lastValue = this.checked; } else if ("SELECT" == this.tagName){ if(!(this.id && this.id.indexOf('mce_editor_') >= 0)) { try { this.__lastValue = this.jpdefopt; } catch(err) { this.__lastValue = ''; } } } } if(this.__onfocus) this.__onfocus(event); }; element.onblur = function(event){ if(!this.__modified){ this.__modified = this.isElementDirty(); } if(this.__onblur) this.__onblur(event); }; element.isDefaultOverride = function(){ return this.__defaultOverride; }; element.isModified = function(){ if (this.readOnly){ if (this.value != this.defaultValue) { if ("SELECT" == this.tagName){ if(this.value != this.jpdefopt) this.__modified = true; }else this.__modified = true; } } return this.__modified; }; element.isElementDirty = function(){ if ("text" == this.type || "TEXTAREA" == this.tagName){ if (this.value != this.__lastValue) { return true; } } else if ("checkbox" == this.type || "radio" == this.type){ if (this.checked != this.__lastValue) { return true; } } else if ("SELECT" == this.tagName){ var oOptions = this.options; if(this.id && this.id.indexOf('mce_editor_') >= 0) return false; if(oOptions){ var iNumOpts = oOptions.length; if(this.multiple){ //la combo è una multichoiche var oDefOptionsStr = this.__lastValue; if(oDefOptionsStr){ //Esistono dei valori precaricati nella form come valori di default if(iNumOpts == 0){ //la combo non ha più valori, quindi è modificata return true; } //faccio il merge tra i valori di default e quelli attualmente nella combo var oDefOptions = oDefOptionsStr.split(';'); var iNumDefOpts = oDefOptions.length; if(iNumOpts != iNumDefOpts){ //il numero dei valori attuali è diverso da quelli di default, quindi è modificata return true; } else{ //il numero dei valori attuali è uguale a quelli di default, quindi //devo controllare se i valori contenuti sono identici for (var j=0;j< iNumOpts;j++){ //Per ogni valore attuale nella combo, controllo se è presente tra i valori di default var oOpt = oOptions[j]; var found = false; for (var d=0;d< iNumDefOpts;d++){ if(oOpt.value == oDefOptions[d]){ found = true; break; } } //se non è presente tra quelli di default, la form è modificata if(!found){ return true; } } } } else{ //Non esistono dei valori precaricati nella form come valori di default if(iNumOpts > 0){ //la combo ha dei valori, quindi è modificata return true; } } } else{ var oDefOptionsStr = this.__lastValue; if(!oDefOptionsStr){ oDefOptionsStr = ''; } if(this.selectedIndex >= 0 ){ var selectedOption = oOptions[this.selectedIndex]; if(selectedOption.value != oDefOptionsStr){ return true; } } } } } return false; }; } }); }); function validateAddress(callback){ if(!callback){ callback = new function(){}; } if(validateAlways || ($('#addresspattern\\.type').length > 0 && $('#addresspattern\\.type')[0].isModified()) ||($('#addresspattern\\.name').length > 0 && $('#addresspattern\\.name')[0].isModified()) ||($('#addresspattern\\.number').length > 0 && $('#addresspattern\\.number')[0].isModified())){ $.ajax({ mode: "abort", port: "autocompleteaddresspatternname", dataType: 'json', url: 'AddressValidation.logistic_do', data: { toponimo: $('#addresspattern\\.type').val(), via:$('#addresspattern\\.name').val(), civico:$('#addresspattern\\.number').val(), country: function() { return $("#country").val(); }, city: function() { return $("#city").val(); }, zipCode: function() { return $("#cap").val(); }, province: function() { return $("#province").val(); }, _USE_JSON:true }, success: function(data){checkAddress(data,callback);}, error: function(){checkAddress(null,callback);} }); } else setTimeout(callback,25); } function checkAddress(dataStreet, callback){ if(!dataStreet){ dataStreet = new Array(); } var tmpAddress = $('#addresspattern\\.type').val().trim() + '|' + $('#addresspattern\\.name').val().trim(); var tmpAddressWs = ''; if(dataStreet.length <= 1){ var addConfirmRow = true; var labelErr = 'Confermare l\'indirizzo anche se non verificato'; if(dataStreet.length == 1){ if(dataStreet[0].type == 'ERROR'){ labelErr = dataStreet[0].errorLabel; addConfirmRow = true; } else{ tmpAddressWs = dataStreet[0].streetType.trim() + '|' + dataStreet[0].street.trim(); addConfirmRow = tmpAddress.toUpperCase() != tmpAddressWs.toUpperCase(); } } if(addConfirmRow){ dataStreet[dataStreet.length] = { cityZip: $("#cap").val(), streetType: $("#addresspattern\\.type").val(), useAddressPattern:true, province: $("#province").val(), streetFull:"" + labelErr + "", streetZip:$("#cap").val(), city: $("#city").val(), country: $("#country").val(), street: $("#addresspattern\\.name").val(), streetHouseNo: $("#addresspattern\\.number").val(), autogen:true }; } } if($('#addresspattern\\.name').attr("initialized") != 'true'){ $('#addresspattern\\.name').autocomplete(dataStreet,{ validateOnExit:true, matchContains:true, minChars:1, delay:10, width:400, dataType:'json', parse: function(data) { return $.map(data, function(row) { if(row.type != 'ERROR') return { data: row, value: row.fullAddress, result: row.street } }); }, formatItem: function(row, i, max) { return row.streetFull + (row.autogen ? "" : " " + (row.streetHouseNoRange ? "(" + row.streetHouseNoRange + ") " : "") + row.streetZip + " " + row.city); } }).result(function(event, data, formatted){ fillStreet(data, callback); }).change(function(){ return false; }).populateCache(); } if(dataStreet){ if(dataStreet.length == 1 && dataStreet[0].type !=null && dataStreet[0].type != 'ERROR'){ if(tmpAddress.toUpperCase() == tmpAddressWs.toUpperCase()) fillStreet(dataStreet[0], callback); else $('#addresspattern\\.name').forceResult(dataStreet); } else if (dataStreet.length > 1) $('#addresspattern\\.name').forceResult(dataStreet); else{ //if(confirm('Indirizzo non trovato. Vuoi confermarlo comunque?')){ // setTimeout(callback,25); //} } $([document.documentElement, document.body]).animate({scrollTop: $("#addresspattern\\.name").offset().top - 100}, 1000); } } function fillStreet(data, callback){ $('#addresspattern\\.name').attr('jpValid',"true"); if(data){ if (data.streetZip=='') { $("#cap").val(data.cityZip); } else { $("#cap").val(data.streetZip); } $("#addresspattern\\.type").val(data.streetType); $("#addresspattern\\.name").val(data.street); } setTimeout(callback,25); }