function SearchAddress(callback){this.callback=callback;this.parse=function(data){return eval(data);}
this.updateCity=function(options){var city=this.city.val();if(options.extraParams['city_name']!=city){options.extraParams['city_name']=$("#city_search").val();}}
this.citySelect=function(ev,data,formatted){this.street.focus();}
this.streetSelect=function(ev,data,formatted){}
this.handleError=function(result){$("#search_indicator").hide();}
this.handleResult=function(result){var jsonReply=eval("("+result+")");if(!jsonReply.reply.found){$("#search_indicator").hide();alert(jsonReply.reply.message);return;}
var extent=jsonReply.reply.extent.split(' ');var point=jsonReply.reply.point.split(' ');var olExtent=new OpenLayers.Bounds(parseFloat(extent[0]),parseFloat(extent[1]),parseFloat(extent[2]),parseFloat(extent[3]));var olPoint=new OpenLayers.LonLat(parseFloat(point[0]),parseFloat(point[1]));this.callback(jsonReply.reply.message,olExtent,olPoint);$("#search_indicator").hide();}
this.doSearch=function(){$("#search_indicator").show();var form=jQuery("#addr_search_form");var q=form.formSerialize();var objRef=this;$.ajax({type:"POST",url:"/libs/lookup.php",data:q+"&stam="+(new Date()).getTime(),success:function(msg){objRef.handleResult.apply(objRef,[msg]);},error:function(){objRef.handleError.apply(objRef,arguments);}});return false;}
var objRef=this;this.city=$("#city_search").autocomplete("/libs/jcomplete.php?name=city_name",{parse:this.parse});this.city.result(function(){objRef.citySelect.apply(objRef,arguments);});this.street=$("#street_search").autocomplete("/libs/jcomplete.php?name=street_name",{parse:this.parse}).bind('request',function(ev,options){objRef.updateCity.apply(objRef,[options]);});this.street.result(function(){objRef.streetSelect.apply(objRef,arguments);});this.button=$("#do_search").click(function(){objRef.doSearch.apply(objRef,arguments);});this.city.bind('enterKey',function(){objRef.doSearch.apply(objRef);});this.street.bind('enterKey',function(){objRef.doSearch.apply(objRef);});this.setFocus=function(){this.city.focus();}}