/**
  * @param string $address
  * @param int    $limit
  *
  * @return $this
  */
 public function geocode($address, $limit = 1)
 {
     try {
         $this->addresses = $this->geocoder->limit($limit)->geocode($address);
     } catch (\Geocoder\Exception\NoResult $ex) {
         $this->errorKey = 'no_results';
         $this->error = RootLocator_Errors::noResults();
         PerchUtil::debug(sprintf('Locator: %s', $ex->getMessage()), 'error');
     } catch (\Geocoder\Exception\HttpError $ex) {
         $this->errorKey = 'http_error';
         $this->error = RootLocator_Errors::httpError();
         PerchUtil::debug(sprintf('Locator: %s', $ex->getMessage()), 'error');
     } catch (\Geocoder\Exception\InvalidCredentials $ex) {
         $this->errorKey = 'invalid_credentials';
         $this->error = RootLocator_Errors::invalidCredentials();
         PerchUtil::debug(sprintf('Locator: %s', $ex->getMessage()), 'error');
     } catch (\Geocoder\Exception\QuotaExceeded $ex) {
         $this->errorKey = 'quota_exceeded';
         $this->error = RootLocator_Errors::quotaExceeded();
         PerchUtil::debug(sprintf('Locator: %s', $ex->getMessage()), 'error');
     } catch (Exception $ex) {
         $this->errorKey = 'unknown';
         $this->error = RootLocator_Errors::unknown();
         PerchUtil::debug(sprintf('Locator: %s', $ex->getMessage()), 'error');
     }
     return $this;
 }
include __DIR__ . '/_subnav.php';
echo $HTML->heading1($heading1);
// Output alerts
$Alert->output();
// Begin form
echo $HTML->heading2('Address');
echo $Form->form_start();
echo $Form->text_field('addressTitle', 'Title', isset($details['addressTitle']) ? $details['addressTitle'] : false, 'xl');
echo $Form->text_field('addressBuilding', 'Building', isset($details['addressBuilding']) ? $details['addressBuilding'] : false, 'm');
echo $Form->textarea_field('addressStreet', 'Street', isset($details['addressStreet']) ? $details['addressStreet'] : false, 'xs');
echo $Form->text_field('addressTown', 'Town / City', isset($details['addressTown']) ? $details['addressTown'] : false, 'l');
echo $Form->text_field('addressRegion', 'Region', isset($details['addressRegion']) ? $details['addressRegion'] : false, 'l');
echo $Form->text_field('addressPostcode', 'Postcode', isset($details['addressPostcode']) ? $details['addressPostcode'] : false, 'm');
echo $Form->text_field('addressCountry', 'Country', isset($details['addressCountry']) ? $details['addressCountry'] : false, 'm');
echo $HTML->heading2('Map');
if (is_object($Address) && !$Address->hasCoordinates()) {
    echo $HTML->warning_message('The address is in the queue to be plotted on the map.');
}
if (is_object($Address) && $Address->hasError()) {
    echo $HTML->failure_message(RootLocator_Errors::get($Address->addressError()));
}
if (is_object($Address) && $Address->preview()) {
    echo $Address->preview();
}
echo $Form->hint('Tick this to force the map to update immediately.');
echo $Form->checkbox_field('force', 'Force update map', '1');
echo $Form->fields_from_template($Template, $details, $Addresses->static_fields);
echo $Form->submit_field('btnSubmit', 'Save', $API->app_path());
echo $Form->form_end();
// Main Panel UI
echo $HTML->main_panel_end();