function Localita(provincia, city, cap){ this.provincia = $(provincia); $(provincia).ctrl = this; $(provincia).onchange=this.onChangeProvincia; //alert('provincia setted: ' + this.provincia); this.city = $(city); $(city).ctrl=this; $(city).onchange=this.onChangeCity; //alert('city setted: ' + this.city); this.cap = $(cap); $(cap).ctrl = this; //alert('cap setted: ' + this.cap); } Localita.prototype.onChangeProvincia = function(event){ var target = ((window.event)?window.event.srcElement:event.target); //alert('onChangeProvincia: ' + target); var controller = target.ctrl; //alert('controller: ' + controller); var codProv = target.options[target.selectedIndex].value; //alert('codProv: ' + codProv); controller.city.disabled=true; controller.cap.disabled=true; provinceGeographyController.getCities(codProv, function(data){ //alert('rebuildCitiesList: ' + data); //alert('controller-closure : ' + controller); DWRUtil.removeAllOptions(controller.city); DWRUtil.addOptions(controller.city, data); DWRUtil.addOptions(controller.city,{'':'---'}); controller.city.selectedIndex=0; //this.city.onchange({target: controller.city}); DWRUtil.removeAllOptions(controller.cap); DWRUtil.addOptions(controller.cap,{'':'---'}); controller.cap.selectedIndex=0; controller.city.disabled=false; controller.cap.disabled=false; //controller.city.onmouseover=controller.city.onmouseout=null; //controller.cap.onmouseover=controller.cap.onmouseout=null; }); /* controller.city.onmouseover=controller.cap.onmouseover=function(event){ var target = ((window.event)?window.event.srcElement:event.target); target.style.cursor='wait'; } controller.city.onmouseout=controller.cap.onmouseout=function(event){ var target = ((window.event)?window.event.srcElement:event.target); target.style.cursor='default'; } */ } Localita.prototype.onChangeCity = function(event){ var target = ((window.event)?window.event.srcElement:event.target); //alert('onChangeCity: ' + target); var controller = target.ctrl; //alert('controller: ' + controller); controller.cap.disabled=true; var codProv = controller.provincia.options[controller.provincia.selectedIndex].value; //alert('codProv: ' + codProv); var codCity = target.options[target.selectedIndex].value; //alert('codCity: ' + codCity); provinceGeographyController.getZipCodes(codProv, codCity, function(data){ //alert('rebuildZipCodesList: ' + data); //alert('controller-closure: ' + controller); DWRUtil.removeAllOptions(controller.cap); DWRUtil.addOptions(controller.cap, data); controller.cap.selectedIndex=0; controller.cap.disabled=false; //controller.cap.onmouseover=controller.cap.onmouseout=null; }); /* controller.cap.onmouseover=function(event){ var target = ((window.event)?window.event.srcElement:event.target); target.style.cursor='wait'; } controller.cap.onmouseout=function(event){ var target = ((window.event)?window.event.srcElement:event.target); target.style.cursor='default'; } */ } Localita.prototype.destroy=function(){ //alert('destroy invoked'); this.provincia.onchange = null; this.provincia.ctrl = null; this.provincia = null; this.city.onchange = null; this.city.ctrl = null; this.city = null; this.cap.ctrl = null; this.cap = null; }