public GooglePlaceDetails Search(string placeId, out GooglePlaceRequest.GoogleResponseStatus status)
        {
            var uri         = String.Format(MapUri, placeId, ApiKey);
            var httpRequest = (HttpWebRequest)HttpWebRequest.Create(uri);

            httpRequest.ContentType = "application/json; charset=utf-8";
            httpRequest.Method      = WebRequestMethods.Http.Get;
            httpRequest.Accept      = "application/json";

            using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse())
            {
                using (var sr = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var json = sr.ReadToEnd();
                    return(GooglePlaceDetailsResult.ProcessResult(json, out status));
                }
            }
        }
            //public enum GooglePlaceStatus
            //{
            //    OK = 1,
            //    REQUEST_DENIED
            //}

            public static GooglePlaceDetails ProcessResult(string googlePlaceResultJson, out GooglePlaceRequest.GoogleResponseStatus status)
            {
                var model   = googlePlaceResultJson.FromJson <GooglePlaceDetailsResult>();
                var details = model.result;

                status = model;
                if (details != null)
                {
                    var result = new GooglePlaceDetails
                    {
                        Name         = details.Name,
                        Location     = new GeoCoordinate(details.Geometry.Location.Lat, details.Geometry.Location.Lng),
                        Website      = details.Website,
                        Phone        = details.Formatted_Phone_Number,
                        Url          = details.Url,
                        Photos       = details.Photos == null ? new List <string>() : details.Photos.Where(p => p.Width > 1000).Select(p => p.Photo_Reference).Take(5).ToList(),
                        OpeningHours = details.Opening_Hours == null ? new List <GooglePlaceDetails.OpenHours>() : details.Opening_Hours.Periods.Select(x => x.GetOpeningHours()).Union(GooglePlaceDetails.OpenHours.DefaultOpenHours(false), new GooglePlaceDetails.OpenHoursCompare()).ToList()
                    };
                    var address = new GoogleAddress(details.ToJson());
                    result.Address  = address.Address;
                    result.Street   = address.Street;
                    result.Suburb   = address.Suburb;
                    result.State    = address.State;
                    result.Postcode = address.PostCode;
                    result.Country  = address.Region;
                    return(result);
                }

                return(null);
            }