/**
  * @param Array - $googleMapAddressArray: an array of geographic data provided by google maps
  * @param Int - $maxRadius: maximum number of kilometers (as the bird flies) between search point defined in $googleMapAddressArray and city found.
  * @return Object | false : returns a BrowseCitiesPage or false if nothing was found
  **/
 public static function get_clostest_city_page($googleMapAddressArray, $maxRadius = 500)
 {
     $cityPage = null;
     $suburbPage = null;
     $bt = defined('DB::USE_ANSI_SQL') ? "\"" : "`";
     $existingDistance = $maxRadius + 1;
     $newDistance = $maxRadius + 1;
     $existingPage = null;
     $newPage = null;
     $radiusSelectionSQL = self::radiusDefinitionOtherTable($googleMapAddressArray[0], $googleMapAddressArray[1], "BrowseCitiesPage", "Latitude", "Longitude");
     $sqlQuery = new SQLQuery();
     $sqlQuery->select = array("{$bt}BrowseCitiesPage{$bt}.{$bt}ID{$bt}, " . $radiusSelectionSQL . " as distance");
     $sqlQuery->from[] = "{$bt}BrowseCitiesPage{$bt}";
     $sqlQuery->where[] = $radiusSelectionSQL . " < " . $maxRadius;
     $sqlQuery->orderby = " distance ";
     $sqlQuery->limit = "1";
     $result = $sqlQuery->execute();
     $page = null;
     foreach ($result as $row) {
         $existingDistance = $row["distance"];
         $existingPage = DataObject::get_by_id("BrowseCitiesPage", $row["ID"]);
     }
     $radiusSelectionSQL = self::radiusDefinitionOtherTable($googleMapAddressArray[0], $googleMapAddressArray[1], "cities", "Latitude", "Longitude");
     $sqlQuery = new SQLQuery();
     $sqlQuery->select = array("cities.CityID", $radiusSelectionSQL . " as distance");
     $sqlQuery->from[] = "{$bt}cities{$bt}";
     $sqlQuery->where[] = $radiusSelectionSQL . " < " . $maxRadius;
     $sqlQuery->orderby = " distance ";
     $sqlQuery->limit = "1";
     $result = $sqlQuery->execute();
     foreach ($result as $row) {
         $sameOne = false;
         if ($existingPage) {
             if ($row["CityID"] == $existingPage->HiddenDataID) {
                 $sameOne = true;
             }
         }
         if (!$sameOne) {
             $newPage = self::create_city_and_parents($row["CityID"]);
             $newDistance = $row["distance"];
         }
     }
     if ($newPage && $newDistance < $existingDistance && $newDistance < $maxRadius) {
         $cityPage = $newPage;
     } elseif ($existingPage && $existingDistance < $maxRadius) {
         $cityPage = $existingPage;
     }
     if ($cityPage) {
         if ($cityPage->allowBrowseChildren()) {
             $suburbPage = BrowseSuburbPage::create_suburb($googleMapAddressArray, $cityPage);
         }
     }
     if ($suburbPage) {
         return $suburbPage;
     }
     return $cityPage;
 }
 /**
  * Creates a region... called from BrowseCountriesPage
  * 
  *@param Array $googleMapAddressArray - array of google Map Address Data
  *@param Object $parent - a BrowseCountriesPage object 
  *@return Object | false - returns the BrowseSuburbPage if there is one.
  *
  **/
 public static function create_suburb($googleMapAddressArray, BrowseCitiesPage $parent)
 {
     if ($parent && isset($googleMapAddressArray["LocalityName"]) && isset($googleMapAddressArray[0]) && isset($googleMapAddressArray[1])) {
         $name = htmlentities($googleMapAddressArray["LocalityName"]);
         if ($name) {
             $page = DataObject::get("BrowseSuburbPage", "\"Title\" = '" . $name . "' AND \"ParentID\" = " . $parent->ID);
             if (!$page) {
                 $page = new BrowseSuburbPage();
                 $page->ParentID = $parent->ID;
                 $page->Title = $name;
                 $page->MetaTitle = $name;
                 $page->MenuTitle = $name;
                 $page->Longitude = $googleMapAddressArray[0];
                 $page->Latitude = $googleMapAddressArray[1];
                 $page->writeToStage('Stage');
                 $page->publish('Stage', 'Live');
                 $page->flushCache();
             }
             $page = DataObject::get("BrowseSuburbPage", "\"Title\" = '" . $name . "' AND \"ParentID\" = " . $parent->ID);
         }
     }
 }