LocationGeocoderWidget=new Class({Implements:[Options,Events],options:{onInitialize:$empty,onChoose:$empty,useLinks:false,searchPath:"",radius:150},initialize:function(B,D,A,C){this.setOptions(C);
this.input=B;this._last_input_text=null;this.address_fields=D;this.input.setAttribute("autocomplete","off");this.input.addEvents({blur:this.handleLookup.bind(this),keydown:this.scheduleLookup.bind(this)});
this.list_container=A;this.geocoder=new google.maps.Geocoder();if(this.input.value){this.input.addEvents({focus:this.handleLookup.bind(this)})
}this.fireEvent("initialize")},scheduleLookup:function(){clearTimeout(this._timeout);this._timeout=setTimeout(this.handleLookup.bind(this),250)
},handleLookup:function(){if(this.input.value){if(this.input.value!=this._last_input_value){this.toggleIndicator(true);this.geocoder.geocode({address:this.input.value,language:"en"},function(B,A){if(A==google.maps.GeocoderStatus.OK){this.populatePicklist(B);
this.setPicklistStatus("success")}else{if(A==google.maps.GeocoderStatus.ZERO_RESULTS){this.clearPicklist();this.setPicklistStatus("nomatch")
}else{this.clearPicklist();this.setPicklistStatus("error")}}}.bind(this))}}else{this.setPicklistStatus("empty")}this._last_input_value=this.input.value
},populatePicklist:function(C){this.results=C;var F=this.getList();F.empty();if(C){for(index=0;index<C.length;index++){var E=new Element("li");
if(this.options.useLinks){var D=new Element("a",{href:this.options.searchPath+"?longitude="+encodeURIComponent(C[index].geometry.location.lng())+"&latitude="+encodeURIComponent(C[index].geometry.location.lat())+"&address="+encodeURIComponent(C[index].formatted_address)+"&radius="+encodeURIComponent(this.options.radius)+"#results",text:C[index].formatted_address});
E.adopt(D)}else{var B=new Element("label");var A=new Element("input",{type:"radio",name:"picklist_index",value:index});A.addEvent("click",function(G){G=new Event(G);
this.chooseLocation(G.target.value)}.bind(this));B.appendChild(A);B.appendChild(document.createTextNode(C[index].formatted_address));
E.appendChild(B)}F.appendChild(E)}}this.chooseLocation(null)},clearPicklist:function(){this.populatePicklist(null)},chooseLocation:function(B){var A=null;
if(B!=null){A=this.results[B];var E=this.getList();E.getElements("input").each(function(H){if(H.type=="radio"&&H.value==B&&!H.checked){H.checked=true
}})}var G={country:"",country_code:"",administrative_area_level_1:"",administrative_area_level_2:"",administrative_area_level_3:"",locality:"",sublocality:"",route:"",longitude:"",latitude:"",full_address:""};
if(A){for(var B=0;B<A.address_components.length;B++){var D=A.address_components[B];var C=D.types[0];G[C]=D.long_name;if(C=="country"){G.country_code=D.short_name
}}G.full_address=A.formatted_address;if(A.geometry){G.longitude=A.geometry.location.lng();G.latitude=A.geometry.location.lat()
}}for(fieldname in G){var F=this.address_fields[fieldname];if(F){F.value=G[fieldname]}}this.fireEvent("choose",A)},getList:function(){var A=this.list_container.getElement("ol");
if(!$defined(A)){A=new Element("ol");this.list_container.appendChild(A)}return A},toggleIndicator:function(A){if(A){this.list_container.set("class","searching")
}else{this.list_container.removeClass("searching")}},setPicklistStatus:function(A){this.list_container.set("class",A)}});
BackText=new Class({initialize:function(A,B){if(!$(A)||!B){return }A.addEvents({focus:function(){if($(this).hasClass("back_text")){$(this).removeClass("back_text");
this.value=""}},blur:function(){if(this.value==""||this.value==B){this.value=B;$(this).addClass("back_text")}}});var C=$(A);
while(C&&C.get("tag")!="form"){C=C.getParent()}if(C){C.addEvent("submit",function(){if(A.value==B){A.value=""}})}A.fireEvent("blur")
}});