/** * 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)) . ");"); } }