/**
  * Add IDX Builder Javascript to Page Instance (This has to be ran to get required functionality)
  * @param Page $page
  * @param bool $map
  * @return void
  */
 public function addJavascript(Page &$page)
 {
     // Required Javascript
     $page->addJavascript(Settings::getInstance()->URLS['URL'] . 'inc/js/idx/search.js', 'external');
     $page->addJavascript(Settings::getInstance()->URLS['URL_BACKEND'] . 'inc/js/rew.builder.js', 'external');
     // Map Javascript
     if (!empty($this->map)) {
         // Require Map API
         $page->getSkin()->loadMapApi();
         // Search Radiuses
         $radiuses = false;
         if (!empty($_REQUEST['map']['radius']) && is_string($_REQUEST['map']['radius'])) {
             $radiuses = json_decode($_REQUEST['map']['radius'], true);
             // Parse as JSON Array
         }
         // Search Polygons
         $polygons = false;
         if (!empty($_REQUEST['map']['polygon']) && is_string($_REQUEST['map']['polygon'])) {
             $polygons = json_decode($_REQUEST['map']['polygon'], true);
             // Parse as JSON Array
             if (json_last_error() != JSON_ERROR_NONE) {
                 $polygons = array($_REQUEST['map']['polygon']);
             }
             // Backwards Compatibility: Not JSON Array, Single Polygon Only
         }
         // Create Google Map
         $page->writeJS("var \$map = \$('#idx-builder-map').Map(" . json_encode(array('zoom' => !empty($_REQUEST['map']['zoom']) ? intval($_REQUEST['map']['zoom']) : intval(Settings::getInstance()->SETTINGS['map_zoom']), 'center' => array('lat' => !empty($_REQUEST['map']['latitude']) ? floatval($_REQUEST['map']['latitude']) : floatval(Settings::getInstance()->SETTINGS['map_latitude']), 'lng' => !empty($_REQUEST['map']['longitude']) ? floatval($_REQUEST['map']['longitude']) : floatval(Settings::getInstance()->SETTINGS['map_longitude'])), 'polygons' => !empty($polygons) ? array_map(function ($polygon) {
             return array_map(function ($point) {
                 list($lat, $lng) = explode(' ', $point);
                 return array('lat' => floatval($lat), 'lng' => floatval($lng));
             }, explode(',', $polygon));
         }, $polygons) : null, 'radiuses' => !empty($radiuses) ? array_map(function ($radius) {
             list($lat, $lng, $radius) = explode(',', $radius);
             return array('radius' => $radius, 'lat' => floatval($lat), 'lng' => floatval($lng));
         }, $radiuses) : null)) . ");");
     }
 }