public function appendFormattedElement(XMLElement &$wrapper, $data, $encode = false, $mode = null, $entry_id = null)
 {
     $datetime = new XMLElement($this->get('element_name'));
     // Prepare data
     if (!is_array($data['start'])) {
         $data['start'] = array($data['start']);
     }
     if (!is_array($data['end'])) {
         $data['end'] = array($data['end']);
     }
     // Get timeline
     $timeline = $data['start'];
     sort($timeline);
     // Generate XML
     foreach ($data['start'] as $id => $date) {
         $date = new XMLElement('date');
         $date->setAttribute('timeline', array_search($data['start'][$id], $timeline) + 1);
         // Start date
         $start = new DateTime($data['start'][$id]);
         $date->appendChild($start = new XMLElement('start', $start->format('Y-m-d'), array('iso' => $start->format('c'), 'timestamp' => $start->getTimestamp(), 'time' => $start->format('H:i'), 'weekday' => $start->format('N'), 'offset' => $start->format('O'))));
         // Date range
         if ($data['end'][$id] != $data['start'][$id]) {
             $end = new DateTime($data['end'][$id]);
             $date->appendChild($end = new XMLElement('end', $end->format('Y-m-d'), array('iso' => $end->format('c'), 'timestamp' => $end->getTimestamp(), 'time' => $end->format('H:i'), 'weekday' => $end->format('N'), 'offset' => $end->format('O'))));
             $date->setAttribute('type', 'range');
         } else {
             $date->setAttribute('type', 'exact');
         }
         $datetime->appendChild($date);
     }
     // append date and time to data source
     if (!empty($data['start'][0])) {
         $wrapper->appendChild($datetime);
     }
 }