public function data($id, $data = '', $options = array())
 {
     if (is_string($data)) {
         $data = json_decode($data);
         $data = new GoogleMaps_MapDataModel((array) $value);
     }
     craft()->templates->includeJs('new GoogleMaps.MapData(' . $id . ',' . $data->toJson() . ',' . $this->jsonEncode($options) . ');');
 }
 public function init()
 {
     $settings = $this->getSettings();
     /*
             craft()->on('postmaster.init', function(Event $event) {
                 require_once 'GoogleMapsParcelType.php';
     
                 craft()->postmaster->registerParcelType('Craft\GoogleMapsParcelType');
             });
     */
     if ($settings->enableGeocoder) {
         craft()->on('entries.saveEntry', function (Event $event) use($settings) {
             $entry = $event->params['entry'];
             $content = $entry->getContent();
             // If section being saved matches a section set in the geocode settings
             if (in_array($entry->sectionId, $settings->geocodeSections)) {
                 $address = array();
                 foreach (explode("\r\n", $settings->geocodeFields) as $field) {
                     if ($value = trim($content->getAttribute(trim($field)))) {
                         if (!empty($value)) {
                             $address[] = trim($value);
                         }
                     }
                 }
                 // If no address was entered, return script with no changes to db.
                 if (!count($address)) {
                     return;
                 }
                 $response = craft()->googleMaps_geocoder->geocode($address);
                 if ($response->status == 'OK') {
                     $geocodeResponse = $response->results[0];
                     foreach ($settings->mapFields as $mapFieldId) {
                         $mapField = craft()->fields->getFieldById($mapFieldId);
                         $mapData = json_decode($content->{$mapField->handle});
                         $mapDataModel = new GoogleMaps_MapDataModel((array) $mapData);
                         // Update marker if exists, otherwise add a new marker
                         if ($marker = $mapDataModel->getMarker(0)) {
                             $marker->lat = $geocodeResponse->geometry->location->lat;
                             $marker->lng = $geocodeResponse->geometry->location->lng;
                             $marker->address = $geocodeResponse->formatted_address;
                             $marker->addressComponents = $geocodeResponse->address_components;
                             if (!$marker->customContent) {
                                 $marker->customContent = GoogleMaps_MarkerModel::defaultContent($geocodeResponse->formatted_address);
                             }
                         } else {
                             $marker = GoogleMaps_MarkerModel::populateModel(array('lat' => $geocodeResponse->geometry->location->lat, 'lng' => $geocodeResponse->geometry->location->lng, 'address' => $geocodeResponse->formatted_address, 'addressComponents' => $geocodeResponse->address_components, 'content' => GoogleMaps_MarkerModel::defaultContent($geocodeResponse->formatted_address)));
                             $mapDataModel->addMarker($marker);
                         }
                         $content->{$mapField->handle} = $mapDataModel->toJson();
                         craft()->content->saveContent($entry);
                     }
                 }
             }
         });
     }
 }