// borrowed from: http://www.movable-type.co.uk/scripts/latlong.html
// extend Number object with methods for converting degrees/radians
function l(){return typeof window.console!="undefined"&&console.log&&(arguments.length>1?console.log(arguments):console.log(arguments[0])),arguments[0]}Number.prototype.toRad=function(){return this*Math.PI/180},function(){function a(){Event.fire(document.body,"hash:changed",{hash:location.hash})}function z(){if(google.loader.ClientLocation==null)return;u=google.loader.ClientLocation,v=t.rough,j&&j.setZoom(v),d.geo_ip_lookup={lat:u.latitude,lng:u.longitude},P(u.latitude,u.longitude)}function A(){return $F("user_location_lat").empty()||$F("user_location_lat").empty()?!1:(P(Number($F("user_location_lat")),Number($F("user_location_lng")),$F("user_location_range")),v=t.specific,j&&j.setZoom(v),!0)}function B(){A()||z()}function C(){if(search.map!=undefined)return;j=new google.maps.Map($("map"),{zoom:v,center:new google.maps.LatLng(u.latitude,u.longitude),mapTypeId:google.maps.MapTypeId.ROADMAP,mapTypeControl:!1,streetViewControl:!1}),search.map=j,j.setZoom(v),E(),google.maps.event.addListener(j,"dragend",M),google.maps.event.addListener(j,"center_changed",L),google.maps.event.addListener(j,"dragstart",O)}function D(){o&&(search.requestingGeolocation=!0,$(document.body).fire("geolocation:requesting"),o.getCurrentPosition(function(a){search.requestingGeolocation=!1,P(a.coords.latitude,a.coords.longitude,a.coords.accuracy),d.geo_location_api={lat:a.coords.latitude,lng:a.coords.longitude},S(),v=t.specific,j.setZoom(v),I(),G(F),$(document.body).fire("geolocation:retrieved")},function(){$(document.body).fire("geolocation:retrieved")},{enableHighAccuracy:!0}))}function E(){o?D():(B(),S(),I(),G(F))}function F(a){a[0]&&($("geocode").value=a[0].formatted_address)}function G(a){p.geocode({latLng:new google.maps.LatLng(u.latitude,u.longitude)},function(b,c){c==google.maps.GeocoderStatus.OK&&a(b)})}function H(){w=!search.results.first().address.country.match(/United States|United Kingdom/)}function I(){l=new google.maps.LatLng(u.latitude,u.longitude),j.setCenter(l)}function P(a,b,c){u={latitude:a,longitude:b},$("user_location_lat").value=a,$("user_location_lng").value=b,$("user_location_range").value=c||""}function Q(a){$(document.body).insert(new Element("script",{"class":"results",src:a}))}function R(){var a=$F("search_field");return a==""||a==q?"*":a}function S(){u&&y.add(function(){U(),Q(h.evaluate({query:R(),category:search.selectedCategory=="nearby"?"":"+"+f.get(search.selectedCategory),latitude:u.latitude,longitude:u.longitude}))})}function T(){var a=R()=="*"?"":R(),b="/api/v1_2/locations.js?lat="+u.latitude+"&lng="+u.longitude+"&num=16&range=16000&callback=processDCResults&locale="+i18n.locale+"&name="+a;Q(b)}function U(){$$("script.results").invoke("remove")}function V(a,b){return b in a?a[b]:""}function W(a){var b,c,d,e,f,g;return"titleNoFormatting"in a?(b=a.titleNoFormatting,d={street:a.streetAddress,city:a.city,country:a.country,region:a.region},e="new",g={lat:a.lat,lng:a.lng},phoneNumbers=a.phoneNumbers&&a.phoneNumbers.length>0?$A(a.phoneNumbers).pluck("number").join(","):""):(b=a.name,d=a.address,g=a.geo_location,e=a.status,phoneNumbers=a.gls_phone_numbers),{name:b,distance:Haversine(g,u,w),address:d,gcid:V(a,"gcid"),geo_location:g,status:e,id:V(a,"_id"),url:V(a,"url"),gls_phone_numbers:phoneNumbers,custom_id:V(a,"custom_id")}}function X(){$("results").update(""),search.results=search.results.sortBy(_).map(function(a,b){return a.n=b,a}),H(),search.results.each(function(a,b){b<8&&Z(a,b)}),search.results.length==0&&$("results").update("<div class='no_results_message' id='no_results_message'>"+r+"</div>"),document.fire("choices:updated")}function Y(a){return w?Math.round(a)+" m":a>1e3?Math.round(a*.000189393939393939*100)/100+" mi":Math.round(a)+" ft"}function Z(a,b){a.el=i(a),$("results").insert(a.el)}function _(a){return a.distance}function ba(a){function c(a){return!a.phoneNumbers&&!a.addressLines&&a.streetAddress==""||a.title==a.region||a.title==a.streetAddress}function d(a){return a.gcid=bc(a.url),$w("region city country").each(function(c){a[c]||(a[c]=b.find(function(a){return!!a[c]})[c])}),a}if(a.responseData==null){S();return}var b=$A(a.responseData.results),e=b.sortBy(_),f=e.reject(c),g=f.map(d),h=g.map(W);search.results=h,X(),T()}function bb(a){if(a.length!=0){var a=a.filter(function(a){return a.status=="verified"}).map(W);a.each(function(a,b){search.results=search.results||[];var c=search.results.find(function(b){return a.gcid==b.gcid});if(c){Object.extend(c,a);var d=c.el;d.down(".name").update(a.name),d.down(".address").update(" - "+a.address.street),a.status=="verified"&&d.addClassName("verified")}else search.results.push(a);X()})}$(document.body).fire("requests:finished")}function bc(a){return a.match(/cid=([a-f0-9]+)/i)[1]}function bd(a){if(a.memo.element==undefined)return;Store.set("category",search.selectedCategory);var b=search.results[$$(".result_item").indexOf(a.memo.element)],c;if(c=$("search_field"))c.value=b.titleNoFormatting||b.name;$("location_name").value=b.name,$("location_url").value=b.url,$("location_gcid").value=b.gcid,$("location_geo_location_lat").value=b.geo_location.lat,$("location_geo_location_lng").value=b.geo_location.lng,$("location_address_street").value=b.address.street,$("location_address_city").value=b.address.city,$("location_address_country").value=b.address.country,$("location_address_region").value=b.address.region,$("location_gls_phone_numbers").value=b.gls_phone_numbers,b.id?(!!b.geo_location.lat&&!!b.geo_location.lng&&e.set("user_location[lat]",$F("user_location_lat")).set("user_location[lng]",$F("user_location_lng")),location.href="/locations/"+b.id+"/"+e.search()):$$(".new_location").first().submit()}function be(){$("search_field").value="",S()}function bf(a){var b=new google.maps.Geocoder;b.geocode({address:$F("geocode"),bounds:j.getBounds()},function(a){if(!a[0])return;var b=a[0].geometry.location;P(b.lat(),b.lng()),S(),v=t.specific,j.setZoom(v),I()}),a&&a.stop()}if("onhashchange"in window)Event.observe(window,"hashchange",a);else{var b=location.hash;setInterval(function(){b!=location.hash&&(b=location.hash,a())},50)}var c,d={},e=new Params,f=$H({nearby:"*",restaurants:$F("business_category_queries_restaurants"),cafes:$F("business_category_queries_cafes"),shopping:$F("business_category_queries_shopping"),entertainment:$F("business_category_queries_entertainment"),health:$F("business_category_queries_health")}),g="nearby",h=new Template("http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q=#{query}#{category}&mrt=yp&sll=#{latitude},#{longitude}&rsz=large&callback=processGoogleResults"),i=function(a){var b=new Element("a",{"class":"result_item",href:"#result"});"status"in a&&a.status==="verified"&&b.addClassName("verified");var c=new Element("div",{"class":"result_item_crop"});return b.insert(c),c.insert((new Element("div",{"class":"number"})).update(a.n+1+". ")),c.insert((new Element("div",{"class":"name"})).update(a.name+" "+a.custom_id)),a.address!=""&&c.insert((new Element("div",{"class":"address"})).update(" - "+a.address.street)),c.insert((new Element("div",{"class":"distance"})).update(" - "+DiC(a.distance,w?"m":"ft"))),b.insert(new Element("img",{src:"/assets/desktop/small-blue-arrow.png"})),b},j,k,l,m={},n=!1,o=navigator.geolocation||google.gears&&google.gears.factory.create("beta.geolocation"),p,q=$F("default_search_field_text"),r=$F("no_results_message"),s={latitude:42.186319,longitude:-87.800052},t={_default:4,rough:13,specific:16},u=s,v=t._default,w=!0,x=function(){this.functions=[],this.waiting=!1,$(document.body).observe("requests:finished",function(){this.waiting=!1,this.run()}.bind(this))};x.prototype.run=function(){this.functions.length>0&&(this.waiting=!0,this.functions.shift()())},x.prototype.add=function(a){this.functions.push(a),this.waiting||this.run()};var y=new x;document.observe("dom:loaded",function(){function b(){$("intro").show(),$("leaving_feedback").hide(),$("business_location").hide(),$("geolocation").hide()}function g(a){$("intro").hide(),$("leaving_feedback").show(),$("business_location").hide(),$("geolocation").show(),j(),k(0),C.defer();if(!a)return;location.hash=a.findElement("a").readAttribute("href"),a.findElement().blur()}function h(){p=p||new google.maps.Geocoder,g()}function i(a){$("intro").hide(),$("geolocation").hide(),$("leaving_feedback").show(),$("business_location").show(),j(),k(1);if(!a)return;location.hash=a.findElement("a").readAttribute("href"),a.findElement().blur()}function j(){$$("#leaving_feedback .active","#screenshots .active").invoke("removeClassName","active").invoke("removeClassName","active")}function k(a){[$$(".feedback_status li")[a],$$(".feedback_status .button_small")[a],$$("#screenshots .screenshot")[a]].invoke("addClassName","active")}function l(a){if(d){var b=d;for(var c in b){var f={};f["rating["+c+"][lat]"]=b[c].lat,f["rating["+c+"][lng]"]=b[c].lng,e.set(f)}a.stop(),location=e.href()+a.element().up("a").getAttribute("href")}}function o(a){var b=a.findElement(".toolbar_button");!b.hasClassName("selected")&&b!=$(search.selectCategory)&&r(b.id),b.blur()}function r(a){if(!f.keys().include(a))return;$(search.selectedCategory)&&search.selectedCategory!=a&&$(search.selectedCategory).removeClassName("selected"),search.selectedCategory=a,$(search.selectedCategory).addClassName("selected"),$("view_business_location_chooser").href="#_business_location/"+a,S(),Store.set("category",search.selectedCategory)}var a;if(a=$("search_field"))a.observe("keydown",function(a){a.keyCode==Event.KEY_RETURN&&a.stop()}),a.observe("keyup",function(a){c&&clearTimeout(c),c=setTimeout(function(){document.fire("input:changed")},250),a.stop()}),a.observe("focus",function(b){$F(a)==q&&be()}),a.observe("blur",function(a){document.fire("input:blurred")}),document.observe("input:changed",S),document.observe("input:blurred",S);$("results").on("click",".result_item",function(a){document.fire("result_item:selected",{element:a.findElement(".result_item")}),a.stop()}),document.observe("result_item:selected",bd),$("leave_feedback_now","view_business_location_chooser").invoke("observe","mousedown",l),$(document.body).observe("hash:changed",function(a){var c=String(a.memo.hash);c.match(/geo/)?google.load("maps","3",{callback:h,other_params:"sensor=false"}):c.match(/business/)?i():c==""&&b()}),location.hash.indexOf("#_business_location")!=-1&&($("new_location").action+=location.search,i());var m;if(m=$("business_categories")){var n=Store.get("category");f.get(n)&&r(n),m.on("click",".toolbar_button",o)}google.setOnLoadCallback(function(){B(),location.hash=="#_geolocation"&&google.load("maps","3",{callback:h,other_params:"sensor=false"}),S()})});var J,K=function(){var a=j.getCenter();d.geo_map_center={lat:a.lat(),lng:a.lng()},P(a.lat(),a.lng(),10)},L=function(){K(),N()},M=function(){K(),n=!1,N()},N=function(){clearTimeout(J),J=setTimeout(function(){n||S()},350)},O=function(){n=!0};$("geolocation").on("keyup","#geocode",function(a){a.keyCode==Event.KEY_RETURN&&bf(),a.stop()}),$("geocode_update").on("click",function(a){bf(),a.findElement().blur(),a.stop()}),window.search={processGoogleResults:ba,processDCResults:bb,coordinates:u,t:c,geocodeAddress:bf,map:j,selectedCategory:g},window.processGoogleResults=search.processGoogleResults,window.processDCResults=search.processDCResults;if(Modernizr.geolocation){var bg=function(){var a,b,c,d;b=["transform","WebkitTransform","MozTransform"];for(c=0,d=b.length;c<d;c++){a=b[c];if(document.body.style[a]!=null)return a}}(),bh=$("geolocation_icon"),bi=bh.down("img"),bj,bk=0,bl=50,bm=function(a){bi.style[bg]="rotate("+a+"deg)"};bh.observe("click",function(a){if(search.requestingGeolocation)return;E(),bh.blur(),a.stop()}),$(document.body).observe("geolocation:requesting",function(){bh.addClassName("requesting"),bj=setInterval(function(){bm(bk+=15)},bl)}),$(document.body).observe("geolocation:retrieved",function(){clearTimeout(bj),bm(0),bh.removeClassName("requesting")})}}()
