/**
  * Output CSS into header
  *
  * @since    3.0.0
  */
 public function map($atts)
 {
     $sgm_options = get_option('SGMoptions');
     // get options defined in admin page
     $sgm_options = wp_parse_args($sgm_options, Simple_Google_Map::$default_options);
     $lat = isset($atts['lat']) ? $atts['lat'] : '0';
     $lng = isset($atts['lng']) ? $atts['lng'] : '0';
     $zoom = isset($atts['zoom']) ? $atts['zoom'] : $sgm_options['zoom'];
     $type = isset($atts['type']) ? strtoupper($atts['type']) : $sgm_options['type'];
     $content = isset($atts['content']) ? $atts['content'] : $sgm_options['content'];
     $directions_to = isset($atts['directionsto']) ? $atts['directionsto'] : '';
     $icon = isset($atts['icon']) ? esc_url($atts['icon'], array('http', 'https')) : $sgm_options['icon'];
     $content = Simple_Google_Map::strip_last_chars(htmlspecialchars_decode($content), array('<br>', '<br/>', '<br />'));
     $directions_form = '';
     if ($directions_to) {
         $directions_form = '<form method="get" action="//maps.google.com/maps"><input type="hidden" name="daddr" value="' . $directions_to . '" /><input type="text" class="text" name="saddr" /><input type="submit" class="submit" value="Directions" /></form>';
     }
     $marker = "var marker = new google.maps.Marker({\n\t\t\tposition: latlng,\n\t\t\tmap: map,\n\t\t\ttitle: '',";
     if ($icon) {
         $icon = "var image = {\n\t\t\t\turl: '{$icon}',\n\t\t\t};";
         $marker .= "\n" . 'icon: image,' . "\n";
     }
     $marker .= '});';
     $infowindow_arr = array($content, $directions_form);
     $infowindow_content = implode('<br>', array_filter($infowindow_arr));
     $map = '<script type="text/javascript">';
     $map .= "function makeMap() {\n\t\t\t\tvar latlng = new google.maps.LatLng({$lat}, {$lng});\n\t\t\t\tvar myOptions = {\n\t\t\t\t\tzoom: {$zoom},\n\t\t\t\t\tcenter: latlng,\n\t\t\t\t\tmapTypeControl: true,\n\t\t\t\t\tmapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},\n\t\t\t\t\tnavigationControl: true,\n\t\t\t\t\tnavigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},\n\t\t\t\t\tmapTypeId: google.maps.MapTypeId.{$type}\n\t\t\t\t};\n\t\t\t\tvar map = new google.maps.Map(document.getElementById('SGM'), myOptions);\n\t\t\t\tvar contentstring = '<div class=\"infoWindow\">{$infowindow_content}</div>';\n\t\t\t\tvar infowindow = new google.maps.InfoWindow({\n\t\t\t\t\tcontent: contentstring\n\t\t\t\t});\n\t\t\t\t{$icon}\n\t\t\t\t{$marker}\n\t\t\t\tgoogle.maps.event.addListener(marker, 'click', function() {\n\t\t\t\t  infowindow.open(map,marker);\n\t\t\t\t});\n\t\t\t};\n\t\t\twindow.onload = makeMap;";
     $map .= '</script>';
     $map .= '<div id="SGM"></div>';
     return $map;
 }
 /**
  * Outputs the widget with the selected settings
  *
  * @since    3.0.0
  */
 public function widget($args, $instance)
 {
     extract($instance);
     $sgm_options = get_option('SGMoptions');
     // get options defined in admin page
     $sgm_options = wp_parse_args($sgm_options, Simple_Google_Map::$default_options);
     if (!$lat) {
         $lat = '0';
     }
     if (!$lng) {
         $lng = '0';
     }
     if (!$zoom) {
         $zoom = $sgm_options['zoom'];
     }
     // 1-19
     if (!$type) {
         $type = $sgm_options['type'];
     }
     // ROADMAP, SATELLITE, HYBRID, TERRAIN
     if (!$icon) {
         $icon = $sgm_options['icon'];
     }
     if (!$content) {
         $content = $sgm_options['content'];
     }
     if (!$directionsto) {
         $directions_to = '';
     } else {
         $directions_to = $directionsto;
     }
     $content = Simple_Google_Map::strip_last_chars(htmlspecialchars_decode($content), array('<br>', '<br/>', '<br />'));
     $directions_form = '';
     if ($directions_to) {
         $directions_form = '<form method="get" action="//maps.google.com/maps"><input type="hidden" name="daddr" value="' . $directions_to . '" /><input type="text" class="text" name="saddr" /><input type="submit" class="submit" value="Directions" /></form>';
     }
     $marker = "var marker = new google.maps.Marker({\n\t\t\tposition: latlng,\n\t\t\tmap: map,\n\t\t\ttitle: '',";
     if ($icon) {
         $icon = "var image = {\n\t\t\t\turl: '{$icon}',\n\t\t\t};";
         $marker .= "\n" . 'icon: image,' . "\n";
     }
     $marker .= '});';
     $infowindow_arr = array($content, $directions_form);
     $infowindow_content = implode('<br>', array_filter($infowindow_arr));
     extract($args);
     echo $before_widget;
     if ($instance['title']) {
         echo $before_title . $instance['title'] . $after_title;
     }
     $map = '<script type="text/javascript">';
     $map .= "function makeMap() {\n\t\t\t\tvar latlng = new google.maps.LatLng({$lat}, {$lng});\n\t\t\t\tvar myOptions = {\n\t\t\t\t\tzoom: {$zoom},\n\t\t\t\t\tcenter: latlng,\n\t\t\t\t\tmapTypeControl: true,\n\t\t\t\t\tmapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},\n\t\t\t\t\tnavigationControl: true,\n\t\t\t\t\tnavigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},\n\t\t\t\t\tmapTypeId: google.maps.MapTypeId.{$type}\n\t\t\t\t};\n\t\t\t\tvar map = new google.maps.Map(document.getElementById('SGM'), myOptions);\n\t\t\t\tvar contentstring = '<div class=\"infoWindow\">{$infowindow_content}</div>';\n\t\t\t\tvar infowindow = new google.maps.InfoWindow({\n\t\t\t\t\tcontent: contentstring\n\t\t\t\t});\n\t\t\t\t{$icon}\n\t\t\t\t{$marker}\n\t\t\t\tgoogle.maps.event.addListener(marker, 'click', function() {\n\t\t\t\t  infowindow.open(map,marker);\n\t\t\t\t});\n\t\t\t}\n\t\t\twindow.onload = makeMap;";
     $map .= '</script>';
     $map .= '<div id="SGM"></div>';
     echo $map;
     echo $after_widget;
 }
/**
 * Begins execution of the plugin.
 *
 * Since everything within the plugin is registered via hooks,
 * then kicking off the plugin from this point in the file does
 * not affect the page life cycle.
 *
 * @since    3.0.0
 */
function run_simple_google_map()
{
    $plugin = new Simple_Google_Map();
    $plugin->run();
}