!function(e){var t;if("function"==typeof define&&define.amd)define(["leaflet"],e);else if("undefined"!=typeof module)t=require("leaflet"),module.exports=e(t);else{if("undefined"==typeof window.L)throw new Error("Leaflet must be loaded first");e(window.L)}}(function(e){"use strict";function t(e,t,s){var i,o,a,l=null,n=0;s||(s={});var r=function(){n=s.leading===!1?0:(new Date).getTime(),l=null,a=e.apply(i,o),l||(i=o=null)};return function(){var h=(new Date).getTime();n||s.leading!==!1||(n=h);var c=t-(h-n);return i=this,o=arguments,0>=c||c>t?(l&&(clearTimeout(l),l=null),n=h,a=e.apply(i,o),l||(i=o=null)):l||s.trailing===!1||(l=setTimeout(r,c)),a}}function s(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var i=1,o=20,a=4,l=20,n=250;e.Control.Geocoder=e.Control.extend({includes:e.Mixin.Events,options:{position:"topleft",attribution:'Geocoding by Mapzen',url:"https://search.mapzen.com/v1",placeholder:"Search",title:"Search",bounds:!1,latlng:null,layers:null,panToPoint:!0,pointIcon:!0,polygonIcon:!0,fullWidth:650,markers:!0,expanded:!1,autocomplete:!0,place:!1},initialize:function(t,s){window.XDomainRequest&&(this.options.url="//search.mapzen.com/v1"),"object"==typeof t&&t?s=t:this.apiKey=t,e.Util.setOptions(this,s),this.marker,this.markers=[]},getLayers:function(e){var t=this.options.layers;return t?(e.layers=t,e):e},getBoundingBoxParam:function(t){function s(e,t){return e["boundary.rect.min_lon"]=t.getWest(),e["boundary.rect.min_lat"]=t.getSouth(),e["boundary.rect.max_lon"]=t.getEast(),e["boundary.rect.max_lat"]=t.getNorth(),e}var i=this.options.bounds;if(!i)return t;if(i===!0)i=this._map.getBounds(),t=s(t,i);else if("object"==typeof i&&i.isValid&&i.isValid())t=s(t,i);else if(e.Util.isArray(i)){var o=e.latLngBounds(i);o.isValid&&o.isValid()&&(t=s(t,o))}return t},getLatlngParam:function(e){var t=this.options.latlng;return t?(t.constructor===Array?(e["focus.point.lat"]=t[0],e["focus.point.lon"]=t[1]):"object"!=typeof t?(t=this._map.getCenter(),e["focus.point.lat"]=t.lat,e["focus.point.lon"]=t.lng):(e["focus.point.lat"]=t.lat,e["focus.point.lon"]=t.lng?t.lng:t.lon),e):e},search:function(e){if(e){var t=this.options.url+"/search",s={text:e};this.callPelias(t,s,"search")}},autocomplete:t(function(e){if(e){var t=this.options.url+"/autocomplete",s={text:e};this.callPelias(t,s,"autocomplete")}},n),place:function(e){if(e){var t=this.options.url+"/place",s={ids:e};this.callPelias(t,s,"place")}},handlePlaceResponse:function(e){},maxReqTimestampRendered:(new Date).getTime(),callPelias:function(t,s,i){s=this.getBoundingBoxParam(s),s=this.getLatlngParam(s),s=this.getLayers(s),this.apiKey&&(s.api_key=this.apiKey),e.DomUtil.addClass(this._search,"leaflet-pelias-loading");var o=(new Date).getTime();r.request(t,s,function(a,l){if(e.DomUtil.removeClass(this._search,"leaflet-pelias-loading"),a){var n;switch(a.code){case 403:n="A valid API key is needed for this search feature.";break;case 404:n="The search service cannot be found. :-(";break;case 408:n="The search service took too long to respond. Try again in a second.";break;case 429:n="There were too many requests. Try again in a second.";break;case 500:n="The search service is not working right now. Please try again later.";break;case 502:n="Connection lost. Please try again later.";break;default:n="The search service is having problems :-("}this.showMessage(n),this.fire("error",{results:l,endpoint:t,requestType:i,params:s,errorCode:a.code,errorMessage:n})}if(l&&l.geocoding&&l.geocoding.errors)return n=l.geocoding.errors[0],this.showMessage(n),void this.fire("error",{results:l,endpoint:t,requestType:i,params:s,errorCode:a.code,errorMessage:n});if(l&&l.features){if("autocomplete"===i||"search"===i){if(""===this._input.value||this.maxReqTimestampRendered>=o)return;this.maxReqTimestampRendered=o}"place"===i&&this.handlePlaceResponse(l),"autocomplete"!==i&&"search"!==i||this.showResults(l.features,s.text),this.fire("results",{results:l,endpoint:t,requestType:i,params:s})}},this)},highlight:function(e,t){var i=RegExp("("+s(t)+")","gi");return e.replace(i,"$1")},getIconType:function(e){var t=this.options.pointIcon,s=this.options.polygonIcon,i="leaflet-pelias-layer-icon-";return e.match("venue")||e.match("address")?t===!0?{type:"class",value:i+"point"}:t===!1?!1:{type:"image",value:t}:s===!0?{type:"class",value:i+"polygon"}:s===!1?!1:{type:"image",value:s}},showResults:function(t,s){if(0===t.length)return void this.showMessage("No results were found.");var i=this._results;i.innerHTML="",i.style.display="block",i.style.maxHeight=this._map.getSize().y-i.offsetTop-this._container.offsetTop-l+"px";for(var o=e.DomUtil.create("ul","leaflet-pelias-list",i),a=0,n=t.length;n>a;a++){var r=t[a],h=e.DomUtil.create("li","leaflet-pelias-result",o);h.feature=r,h.layer=r.properties.layer,h.coords=r.geometry.coordinates;var c=this.getIconType(r.properties.layer);if(c){var u,p=e.DomUtil.create("span","leaflet-pelias-layer-icon-container",h);"class"===c.type?u=e.DomUtil.create("div","leaflet-pelias-layer-icon "+c.value,p):(u=e.DomUtil.create("img","leaflet-pelias-layer-icon",p),u.src=c.value),u.title="layer: "+r.properties.layer}h.innerHTML+=this.highlight(r.properties.label,s)}},showMessage:function(t){var s=this._results;s.innerHTML="",s.style.display="block";var i=e.DomUtil.create("div","leaflet-pelias-message",s);i.appendChild(document.createTextNode(t))},removeMarkers:function(){if(this.options.markers){for(var e=0;e=window.parseInt(this.options.fullWidth,10))return void this.clearFullWidth();this._container.style.width=i.toString()+"px"}},clearFullWidth:function(){this.options.fullWidth&&(this._container.style.width="")},onAdd:function(t){var s=e.DomUtil.create("div","leaflet-pelias-control leaflet-bar leaflet-control");return this._body=document.body||document.getElementsByTagName("body")[0],this._container=s,this._input=e.DomUtil.create("input","leaflet-pelias-input",this._container),this._input.spellcheck=!1,this.options.title&&(this._input.title=this.options.title),this.options.placeholder&&(this._input.placeholder=this.options.placeholder),this._search=e.DomUtil.create("a","leaflet-pelias-search-icon",this._container),this._reset=e.DomUtil.create("div","leaflet-pelias-close leaflet-pelias-hidden",this._container),this._reset.innerHTML="×",this._reset.title="Reset",this._results=e.DomUtil.create("div","leaflet-pelias-results leaflet-bar",this._container),this.options.expanded&&this.expand(),e.DomEvent.on(this._container,"click",function(e){this._input.focus()},this).on(this._input,"focus",function(e){this._input.value&&this._results.children.length&&(this._results.style.display="block")},this).on(this._map,"click",function(e){this.blur()},this).on(this._search,"click",function(t){if(e.DomEvent.stopPropagation(t),e.DomUtil.hasClass(this._container,"leaflet-pelias-expanded")){if(this.options.expanded===!0)return void this._input.focus();e.DomUtil.addClass(this._reset,"leaflet-pelias-hidden"),this.collapse()}else this._input.value.length>0&&e.DomUtil.removeClass(this._reset,"leaflet-pelias-hidden"),this.expand(),this._input.focus()},this).on(this._reset,"click",function(t){this.resetInput(),this.clearResults(),e.DomEvent.stopPropagation(t)},this).on(this._input,"keydown",function(t){for(var s,i=this._results.querySelectorAll(".leaflet-pelias-result"),o=this._results.querySelectorAll(".leaflet-pelias-selected")[0],a=this,l=function(t){var s=a._results.querySelectorAll(".leaflet-pelias-selected")[0];s&&t&&a.showMarker(s.innerHTML,e.GeoJSON.coordsToLatLng(s.feature.geometry.coordinates))},n=function(){var e=a._results.querySelectorAll(".leaflet-pelias-selected")[0],t=e.getBoundingClientRect(),s=a._results.getBoundingClientRect();t.bottom>s.bottom?a._results.scrollTop=e.offsetTop+e.offsetHeight-a._results.offsetHeight:t.top0?e.DomUtil.removeClass(this._reset,"leaflet-pelias-hidden"):e.DomUtil.addClass(this._reset,"leaflet-pelias-hidden"),13!==s&&38!==s&&40!==s?27===s?(0!==o.length&&"none"!==this._results.style.display||(this._input.blur(),!this.options.expanded&&e.DomUtil.hasClass(this._container,"leaflet-pelias-expanded")&&this.collapse()),this.clearResults(!0),void e.DomUtil.removeClass(this._search,"leaflet-pelias-loading")):void(o!==this._lastValue&&(this._lastValue=o,o.length>=i&&this.options.autocomplete===!0?this.autocomplete(o):this.clearResults(!0))):void 0},this).on(this._results,"click",function(t){e.DomEvent.preventDefault(t),e.DomEvent.stopPropagation(t);var s=this._results.querySelectorAll(".leaflet-pelias-selected")[0];s&&e.DomUtil.removeClass(s,"leaflet-pelias-selected");var i=t.target||t.srcElement,o=function(){return e.DomUtil.hasClass(i,"leaflet-pelias-result")||(i=i.parentElement,i&&o()),i};o(),i&&(e.DomUtil.addClass(i,"leaflet-pelias-selected"),this.setSelectedResult(i,t))},this).on(this._results,"mouseover",function(e){this._scrollWheelZoomEnabled=t.scrollWheelZoom.enabled(),this._scrollWheelZoomEnabled&&t.scrollWheelZoom.disable()},this).on(this._results,"mouseout",function(e){this._scrollWheelZoomEnabled&&t.scrollWheelZoom.enable()},this),this.options.fullWidth&&e.DomEvent.on(window,"resize",function(t){e.DomUtil.hasClass(this._container,"leaflet-pelias-expanded")&&this.setFullWidth()},this),e.DomEvent.on(this._map,"mousedown",this._onMapInteraction,this),e.DomEvent.on(this._map,"touchstart",this._onMapInteraction,this),e.DomEvent.disableClickPropagation(this._container),t.attributionControl&&t.attributionControl.addAttribution(this.options.attribution),s},_onMapInteraction:function(t){this.blur(),this.options.expanded||!this._input.value&&e.DomUtil.hasClass(this._container,"leaflet-pelias-expanded")&&this.collapse()},onRemove:function(e){e.attributionControl.removeAttribution(this.options.attribution)}}),e.control.geocoder=function(t,s){return new e.Control.Geocoder(t,s)};var r={serialize:function(e){var t="";for(var s in e)if(e.hasOwnProperty(s)){var i,o=e[s],a=o.toString();switch(t.length&&(t+="&"),a){case"[object Array]":i="[object Object]"===o[0].toString()?JSON.stringify(o):o.join(",");break;case"[object Object]":i=JSON.stringify(o);break;case"[object Date]":i=o.valueOf();break;default:i=o}t+=encodeURIComponent(s)+"="+encodeURIComponent(i)}return t},http_request:function(e,t){return window.XDomainRequest?this.xdr(e,t):this.xhr(e,t)},xhr:function(t,s){var i=new XMLHttpRequest;return i.onerror=function(o){i.onreadystatechange=e.Util.falseFn;var a={code:i.status,message:i.statusText};t.call(s,a,null)},i.onreadystatechange=function(){var o,a;try{o=JSON.parse(i.responseText)}catch(l){o=null,a={code:500,message:"Parse Error"}}4===i.readyState&&(200!==i.status?(a={code:i.status,message:i.statusText},t.call(s,a,o)):(!a&&o.error&&(a=o.error),i.onerror=e.Util.falseFn,t.call(s,a,o)))},i},xdr:function(t,s){var i=new window.XDomainRequest;return i.onerror=function(o){i.onload=e.Util.falseFn;var a={code:500,message:"XMLHttpRequest Error"};t.call(s,a,null)},i.onload=function(){var o,a;try{o=JSON.parse(i.responseText)}catch(l){o=null,a={code:500,message:"Parse Error"}}!a&&o.error&&(a=o.error,o=null),i.onerror=e.Util.falseFn,t.call(s,a,o)},i},request:function(e,t,s,i){var o=this.serialize(t),a=this.http_request(s,i);a.open("GET",e+"?"+o),"XMLHttpRequest"===a.constructor.name&&a.setRequestHeader("Accept","application/json"),setTimeout(function(){a.send(null)},0)}}});
//# sourceMappingURL=./leaflet-geocoder-mapzen.min.js.map