(function(n){"use strict";function t(n){return{restrict:"E",replace:!1,templateUrl:n.googlePlacesCity.toString(),bindToController:{required:"<",title:"<",model:"<",propertyKey:"<",propertyNames:"<",states:"<",tabIndex:"<"},controllerAs:"vm",controller:["$scope",i],scope:{}}}function i(n){function f(){return t.required===!0}function e(){i=new google.maps.places.AutocompleteSessionToken;r=new google.maps.places.AutocompleteService;u=function(i,r){r===google.maps.places.PlacesServiceStatus.OK&&(t.cities=[],i.forEach(function(n){t.cities.push({description:n.description,map:n.place_id})}),n.$apply())}}function o(n){var t={componentRestrictions:{country:"us"},input:n,sessionToken:i,types:["(cities)"]};r.getPlacePredictions(t,u)}function s(){t.model[t.propertyKey][t.propertyNames[0]]=null;t.model[t.propertyKey][t.propertyNames[1]]=null;t.addressMap="https://www.google.com/maps/place/?q=place_id:"+t.model.map;var r={placeId:t.selectedCity.map,sessionToken:i,fields:["address_components"]},u=new google.maps.places.PlacesService(document.createElement("div"));u.getDetails(r,function(i){function r(n){var t={};return _.forEach(i.address_components,function(i){_.find(i.types,function(r){r===n&&(t=i.short_name)})}),t}t.model[t.propertyKey][t.propertyNames[0]]=r("locality");t.model[t.propertyKey][t.propertyNames[1]]=_.find(t.states,{displayName:r("administrative_area_level_1")});n.$apply()})}var t=this,i,r,u;t.search=o;t.initAutoComplete=e;t.selected=s;t.cities=[];t.showRequired=f;t.selectedCity={description:t.model.city}}n.module("app").directive("googlePlacesCity",["templateUrls",t])})(angular),function(n,t){"use strict";function i(n){return{restrict:"E",replace:!1,transclude:!0,templateUrl:n.googlePlacesAddress.toString(),bindToController:{model:"=",errors:"="},controllerAs:"vm",controller:["$q","$http","$scope","hrefs",r]}}function r(i,r,u,f){function p(n){n&&n.$error&&(n.$error=null)}function v(){e.errors&&(e.errors.address1&&e.errors.address1.$error&&(e.errors.address1.$error=null),e.errors.city&&e.errors.city.$error&&(e.errors.city.$error=null),e.errors.state&&e.errors.state.$error&&(e.errors.state.$error=null),e.errors.zipCode&&e.errors.zipCode.$error&&(e.errors.zipCode.$error=null),e.errors.county&&e.errors.county.$error&&(e.errors.county.$error=null))}function w(){s=new google.maps.places.AutocompleteSessionToken;c=new google.maps.places.AutocompleteService;r.get(f.states).then(function(n){e.states=n.data;e.model&&e.model.state&&h(e.model.state,e.states)});l=function(n,t){t===google.maps.places.PlacesServiceStatus.OK&&(e.addresses=[],n.forEach(function(n){e.addresses.push({description:n.description,map:n.place_id})}),u.$apply())};a=function(n,t){if(t===google.maps.places.PlacesServiceStatus.OK||t==="ZERO_RESULTS"){e.cities=[];n&&n.forEach(function(n){e.cities.push({description:n.description,map:n.place_id})});var i=e.cities.slice();e.searchTerm&&i.indexOf(e.searchTerm)===-1&&e.cities.push({description:e.searchTerm});u.$apply()}}}function b(n){var t={componentRestrictions:{country:"us"},input:n,sessionToken:s,types:["address"]};c.getPlacePredictions(t,l)}function k(n){e.searchTerm=n;var t={componentRestrictions:{country:"us"},input:n,sessionToken:s,types:["(cities)"]};c.getPlacePredictions(t,a)}function d(){y();e.selectedAddress&&e.selectedAddress.map&&(e.addressMap="https://www.google.com/maps/place/?q=place_id:"+e.selectedAddress.map);var t={placeId:e.selectedAddress.map,sessionToken:s,fields:["address_components"]},r=new google.maps.places.PlacesService(document.createElement("div"));r.getDetails(t,function(n){e.selected({address:n.address_components});s=new google.maps.places.AutocompleteSessionToken});e.selected=function(t){if(n.isDefined(t)){var r=nt(t),u=[h(r.state)];i.all(u).then(function(n){e.model||(e.model={});r.address&&e.selectedAddress.description&&r.address.substring(0,9)==="undefined"&&(r.address=e.selectedAddress.description.substring(0,e.selectedAddress.description.indexOf(",")));e.model.address1=r.address;e.model.city=r.city;e.model.state=r.state;e.model.zipCode=r.zipCode;e.model.county=_.find(n[0],{name:r.county});e.selectedCity||(e.selectedCity={});e.selectedCity.description=e.model.city})}}}function g(){y(!1);e.selectedCity.map&&(e.addressMap="https://www.google.com/maps/place/?q=place_id:"+e.selectedCity.map);e.model.city=e.selectedCity.description.split(",")[0];e.selectedCity.description.split(",")[1]?e.model.state=_.find(e.states,{displayName:e.selectedCity.description.split(",")[1].trim()}):e.addressMap=t;h(e.model.state)}function y(n){e.model?(n&&(e.model.address1=null),e.model.address2=null,e.model.city=null,e.model.state=null,e.model.county=null,e.model.zipCode=null):e.model={address1:null,address2:null,city:null,state:null,county:null,zipCode:null}}function nt(t){var s=o(t,["street_number"]),h=o(t,["route"]),i=o(t,["locality","neighborhood","sublocality"]),r=o(t,["administrative_area_level_1"]),u=o(t,["administrative_area_level_2"]),f=o(t,["postal_code"]);return v(),{address:s.long_name+" "+h.long_name,city:n.isDefined(i)?i.long_name:null,state:n.isDefined(r)?_.find(e.states,{displayName:r.short_name}):null,county:n.isDefined(u)?u.short_name:null,zipCode:n.isDefined(f)?f.short_name:null}}function o(n,t){var i=null;return _.forEach(t,function(t){i||_.forEach(n.address,function(n){_.find(n.types,function(r){r===t&&(i=n)})})}),i||{}}function h(n){if(n&&n.name){var t=tt(n.name,e.states);if(t&&t.hrefGetCounties)return r.get(t.hrefGetCounties).then(function(n){if(n.status===200)return e.stateCounties=n.data,n.data})}}function tt(n,t){return t.find(function(t){return t.name===n})}function it(n){h(n,e.states)}var e=this,s,c,l,a;e.initAutoComplete=w;e.searchAddress=b;e.searchCity=k;e.addresses=[];e.states=[];e.addressSelected=d;e.stateChanged=it;e.citySelected=g;e.selectedAddress=n.isDefined(e.model)?{description:e.model.address1}:null;e.selectedCity=n.isDefined(e.model)?{description:e.model.city}:null;e.clearError=p;e.clearAllErrors=v}n.module("app").directive("googlePlacesAddress",["templateUrls",i])}(angular)