<?php

class ModuleRide extends AppModule
{
  function __construct($System)
  {
    parent::__construct($System);
    $this->Name = 'Ride';
    $this->Version = '1.0';
    $this->Creator = 'Chronos';
    $this->License = 'GNU/GPL';
    $this->Description = 'Ride management';
    $this->Dependencies = array('User', 'Map');
  }

  function DoStart()
  {
    $this->System->RegisterPage('', 'PageMain');
    $this->System->RegisterPage('nova-jizda', 'PageNewRide');
    $this->System->RegisterPage('jizda', 'PageRideDetail');
    $this->System->RegisterPage('jizdy', 'PageRideList');
    $this->System->RegisterPageBarItem('TopLeft', 'Logo', array($this, 'ShowLogo'));
  }

  function DoInstall()
  {
    $this->Database->query('CREATE TABLE `CarManufacturer` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;');
    $this->Database->query('CREATE TABLE `CarModel` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) NOT NULL,
  `Manufacturer` int(11) NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `Manufacturer` (`Manufacturer`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;');
    $this->Database->query('ALTER TABLE `CarModel`
    ADD CONSTRAINT `CarModel_ibfk_1` FOREIGN KEY (`Manufacturer`) REFERENCES `CarManufacturer` (`Id`);');
    $this->Database->query('CREATE TABLE `Car` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Owner` int(11) NOT NULL,
  `Photo` int(11) DEFAULT NULL,
  `Model` int(11) NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `Owner` (`Owner`),
  KEY `Model` (`Model`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;');
   $this->Database->query('ALTER TABLE `Car`
  ADD CONSTRAINT `Car_ibfk_1` FOREIGN KEY (`Owner`) REFERENCES `User` (`Id`),
  ADD CONSTRAINT `Car_ibfk_2` FOREIGN KEY (`Model`) REFERENCES `CarModel` (`Id`);');
     $this->Database->query('CREATE TABLE `Ride` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Driver` int(11) NOT NULL,
  `SeatCount` int(11) NOT NULL,
  `Car` int(11) NOT NULL,
  `Details` text NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `Driver` (`Driver`),
  KEY `Car` (`Car`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;');
    $this->Database->query('ALTER TABLE `Ride`
  ADD CONSTRAINT `Ride_ibfk_1` FOREIGN KEY (`Driver`) REFERENCES `User` (`Id`),
  ADD CONSTRAINT `Ride_ibfk_2` FOREIGN KEY (`Car`) REFERENCES `Car` (`Id`);');
    $this->Database->query('CREATE TABLE `RideStop` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Ride` int(11) NOT NULL,
  `Time` datetime NOT NULL,
  `Place` varchar(255) NOT NULL,
  `Sequence` int(11) NOT NULL,
  `Price` int(11) NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `Ride` (`Ride`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;');
    $this->Database->query('ALTER TABLE `RideStop`
  ADD CONSTRAINT `RideStop_ibfk_1` FOREIGN KEY (`Ride`) REFERENCES `Ride` (`Id`);');
   $this->Database->query('CREATE TABLE `Passenger` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Ride` int(11) NOT NULL,
  `User` int(11) NOT NULL,
  `SeatCount` int(11) NOT NULL,
  `RideStopFrom` int(11) NOT NULL,
  `RideStopTo` int(11) NOT NULL,
  `PassengerCount` int(11) NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `User` (`User`),
  KEY `Ride` (`Ride`),
  KEY `RideStopFrom` (`RideStopFrom`),
  KEY `RideStopTo` (`RideStopTo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;');
   $this->Database->query('ALTER TABLE `Passenger`
  ADD CONSTRAINT `Passenger_ibfk_1` FOREIGN KEY (`Ride`) REFERENCES `Ride` (`Id`),
  ADD CONSTRAINT `Passenger_ibfk_2` FOREIGN KEY (`User`) REFERENCES `User` (`Id`),
  ADD CONSTRAINT `Passenger_ibfk_3` FOREIGN KEY (`RideStopFrom`) REFERENCES `RideStop` (`Id`),
  ADD CONSTRAINT `Passenger_ibfk_4` FOREIGN KEY (`RideStopTo`) REFERENCES `RideStop` (`Id`);');
    $this->InsertData();
  }

  function InsertData()
  {
    $this->Database->query('INSERT INTO `CarManufacturer` (`Id`, `Name`) VALUES '.
      '(NULL, "Škoda"), (NULL, "Nissan"), (NULL, "Mitsubishi"), (NULL, "Fiat"), '.
      '(NULL, "Dacia"), (NULL, "KIA"), (NULL, "Hyundai"), (NULL, "Ford"), '.
      '(NULL, "Opel"), (NULL, "Volkswagen"), (NULL, "Citroen"), (NULL, "Peugeot"), '.
      '(NULL, "Tesla"), (NULL, "Audi"), (NULL, "BMW"), (NULL, "Chevrolet"), '.
      '(NULL, "Suzuki"), (NULL, "Toyota"), (NULL, "Mercedes-benz"), (NULL, "Seat"),'.
      '(NULL, "Volvo"), (NULL, "Renault"), (NULL, "Mazda");');
    $this->Database->query('INSERT INTO `CarModel` (`Id`, `Name`, `Manufacturer`) VALUES '.
      '(NULL, "Rapid", 1), (NULL, "Octavia", 1), (NULL, "Fabia", 1), (NULL, "Felicia", 1), '.
      '(NULL, "Superb", 1);');
  }

  function DoUninstall()
  {
    $this->Database->query('DROP TABLE IF EXISTS `Passenger`');
    $this->Database->query('DROP TABLE IF EXISTS `RideStop`');
    $this->Database->query('DROP TABLE IF EXISTS `Ride`');
    $this->Database->query('DROP TABLE IF EXISTS `Car`');
    $this->Database->query('DROP TABLE IF EXISTS `CarModel`');
    $this->Database->query('DROP TABLE IF EXISTS `CarManufacturer`');
  }

  function DoUpgrade()
  {

  }

  function ShowLogo()
  {
    $Output = '<img src="" width="200" height="50" alt="Logo"/> '.
      '<a href="'.$this->System->Link('/jizdy/').'">Hledat jízdu</a> nebo '.
      '<a href="'.$this->System->Link('/nova-jizda/').'">Nabídnout jízdu</a>';
    return($Output);
  }

  function UpdatePassengerCount($RideId)
  {
    $DbResult = $this->System->Database->select('RideStop', 'COUNT(*) AS RideStopCount', 'Ride='.$RideId);
    $DbRow = $DbResult->fetch_assoc();

    $Stops = array_fill(0, $DbRow['RideStopCount'], 0);
    $this->System->Database->update('RideStop', 'Ride='.$RideId, array('PassengerCount' => 0));
    $DbResult = $this->System->Database->query('SELECT PassengerRideStopFrom.Sequence AS SequenceFrom, '.
        'PassengerRideStopTo.Sequence AS SequenceTo, Passenger.SeatCount FROM Passenger '.
        'LEFT JOIN RideStop AS PassengerRideStopFrom ON PassengerRideStopFrom.Id=Passenger.RideStopFrom '.
        'LEFT JOIN RideStop AS PassengerRideStopTo ON PassengerRideStopTo.Id=Passenger.RideStopTo '.
        'WHERE Passenger.Ride='.$RideId);
    while($DbRow = $DbResult->fetch_assoc())
    {
      for($I = $DbRow['SequenceFrom'] + 1; $I <= $DbRow['SequenceTo']; $I++)
      {
        $Stops[$I] = $Stops[$I] + $DbRow['SeatCount'];
      }
    }
    foreach($Stops as $Index => $Stop)
    {
      $this->System->Database->update('RideStop', 'Ride='.$RideId.' AND Sequence='.$Index, array('PassengerCount' => $Stop));
    }
  }
}

class PageRideDetail extends Page
{
  function ShowDetail()
  {
    $RideId = $_GET['id'];
    $DbResult = $this->Database->query('SELECT Ride.Details, Ride.Id, Ride.SeatCount, '.
      'RideStopFrom.Id AS RideStopFromId, RideStopTo.Id AS RideStopToId, '.
      '(SELECT Name FROM User WHERE User.Id=Ride.Driver) AS DriverName, '.
      'CONCAT(CarManufacturer.Name, " ", CarModel.Name) AS CarName FROM Ride '.
      'JOIN RideStop AS RideStopFrom ON (RideStopFrom.Ride = Ride.Id) AND (RideStopFrom.Place LIKE "%'.$_GET['from'].'%") '.
      'JOIN RideStop AS RideStopTo ON (RideStopTo.Ride = Ride.Id) AND (RideStopTo.Place LIKE "%'.$_GET['to'].'%") '.
        'LEFT JOIN Car ON Car.Id = Ride.Car '.
      'LEFT JOIN CarModel ON CarModel.Id = Car.Model '.
      'LEFT JOIN CarManufacturer ON CarManufacturer.Id = CarModel.Manufacturer '.
      'WHERE Ride.Id='.$RideId);
    $DbRow = $DbResult->fetch_assoc();
    $Track = array();
    $Stops = array();
    $DbResult2 = $this->Database->query('SELECT * FROM RideStop WHERE Ride='.$DbRow['Id'].' ORDER BY Sequence');
    while($DbRow2 = $DbResult2->fetch_assoc())
    {
      $Track[] = $DbRow2;
      $Stops[] = $DbRow2['Place'];
    }

    $Output = '<h3>Detail jízdy</h3><table>'.
      '<tr><td>Trasa:</td><td>'.implode(' → ', $Stops).'</td></tr>'.
      '<tr><td>Odjezd z:</td><td>'.$Track[0]['Place'].'</td></tr>'.
      '<tr><td>Příjezd do:</td><td>'.$Track[count($Track) - 1]['Place'].'</td></tr>'.
      '<tr><td>Čas odjezdu:</td><td>'.$Track[0]['Time'].'</td></tr>'.
      '<tr><td>Podrobnosti:</td><td>'.$DbRow['Details'].'</td></tr>';
    $Output .= '</table>';
    $Output .= '<form action="?step=2" method="post">'.
      'Počet míst: <input type="text" name="seats" value="1"/>'.
      '<input type="hidden" name="id" value="'.$RideId.'"/>'.
      '<input type="hidden" name="fromid" value="'.$DbRow['RideStopFromId'].'"/>'.
      '<input type="hidden" name="toid" value="'.$DbRow['RideStopToId'].'"/>'.
      '<input type="submit" value="Rezervovat"/>'.
      '</form>';

    $Output .= '<h3>Cestující</h3>'.
      '<table class="WideTable">';

    // Load passengers table
    $Table = array_fill(0, count($Track), array_fill(0, $DbRow['SeatCount'], NULL));
    $Passengers = array();
    $DbResult = $this->System->Database->query('SELECT User.Name AS UserName, PassengerRideStopFrom.Sequence AS SequenceFrom, '.
      'PassengerRideStopTo.Sequence AS SequenceTo FROM Passenger '.
      'LEFT JOIN RideStop AS PassengerRideStopFrom ON PassengerRideStopFrom.Id=Passenger.RideStopFrom '.
      'LEFT JOIN RideStop AS PassengerRideStopTo ON PassengerRideStopTo.Id=Passenger.RideStopTo '.
      'LEFT JOIN User ON User.Id=Passenger.User '.
      'WHERE Passenger.Ride='.$RideId);
    while($Passenger = $DbResult->fetch_assoc())
    {
      $Passengers[] = $Passenger;
      $Seat = 0;
      do {
        $Check = true;
        for($I = $Passenger['SequenceFrom']; $I < $Passenger['SequenceTo']; $I++)
        {
          if($Table[$I][$Seat] != 0) $Check = false;
        }
        if (!$Check) $Seat++;
      } while(!$Check);
      for($I = $Passenger['SequenceFrom']; $I < $Passenger['SequenceTo']; $I++)
        $Table[$I][$Seat] = count($Passengers) - 1;
    }

    $Output .= '<tr><th>Zastávka / Čas</th><th style="width: 80px">Řidič</th>';
    for ($I = 0; $I < $DbRow['SeatCount']; $I++)
      $Output .= '<th style="width: 80px">Cestující</th>';
    $Output .= '</tr>';
    foreach($Track as $Index => $TrackItem)
    {
      $Output .= '<tr><td style="height: 100px">'.$TrackItem['Place'].'<br/>'.$TrackItem['Time'].'</td>';
      if($Index == 0) $Output .= '<td rowspan="'.count($Track).'">Řidič</td>';
      for ($I = 0; $I < $DbRow['SeatCount']; $I++)
      {
        if (!is_null($Table[$Index][$I])) {
          $Passenger = $Passengers[$Table[$Index][$I]];
          if ($Index == $Passenger['SequenceFrom'])
          $Output .= '<td rowspan="'.($Passenger['SequenceTo'] - $Passenger['SequenceFrom']).'">'.$Passenger['UserName'].'</td>';
        } else {
          // Show unused space
          if(($Index == 0) or ((($Index - 1) >= 0) and (!is_null($Table[$Index - 1][$I]))))
          {
            $J = 1;
            while((($Index + $J) < count($Table)) and is_null($Table[$Index + $J][$I])) $J++;
            $Output .= '<td rowspan="'.$J.'">&nbsp;</td>';
          }
        }
      }
      $Output .= '</tr>';
    }
    $Output .= '</table>';


    return($Output);
  }

  function Show()
  {
    if (!array_key_exists('step', $_GET)) $Output = $this->ShowDetail();
    else {
      if ($_GET['step'] == 2) {
        $this->System->Database->insert('Passenger', array(
          'Ride' => $_POST['id'],
          'User' => $this->System->User->User['Id'],
          'SeatCount' => $_POST['seats'],
          'RideStopFrom' => $_POST['fromid'],
          'RideStopTo' => $_POST['toid'],
        ));
        $this->System->ModuleManager->Modules['Ride']->UpdatePassengerCount($_POST['id']);
        $Output = 'Rezervace dokončena';
      }
    }
    return($Output);
  }
}

class PageMain extends Page
{
  function Show()
  {
    if(array_key_exists('from', $_GET)) $PlaceFrom = $_GET['from'];
      else $PlaceFrom = '';
    if(array_key_exists('to', $_GET)) $PlaceTo = $_GET['to'];
      else $PlaceTo = '';
    if(array_key_exists('time', $_GET)) $Time = $_GET['time'];
      else $Time = '';
    $Output = '<table style="width: 100%; margin-top: 100px; margin-bottom: 100px;"><tr><td style="text-align: center">'.
      '<div><h3>Vyhledat jízdu</h3>'.
      '<form style="display: inline;" method="get" action="'.$this->System->Link('/jizdy/').'">'.
      'Odkud: <input type="text" name="from" value="'.$PlaceFrom.'"/> '.
      'Kam: <input type="text" name="to" value="'.$PlaceTo.'"/> '.
      'Čas: <input type="text" name="time" value="'.$Time.'"/> '.
      '<input type="submit" value="Hledat"/>'.
      '</form></div></td></tr></table>';
    return($Output);
  }
}

class PageRideList extends Page
{
  function Show()
  {
    if(array_key_exists('from', $_GET)) $PlaceFrom = $_GET['from'];
      else $PlaceFrom = '';
    if(array_key_exists('to', $_GET)) $PlaceTo = $_GET['to'];
      else $PlaceTo = '';
    if(array_key_exists('time', $_GET)) $Time = $_GET['time'];
      else $Time = '';
    $Output = '<table style="width: 100%"><tr><td style="text-align: center;">'.
      '<form style="display: inline;" method="get" action="'.$this->System->Link('/').'">'.
      'Odkud: <input type="text" name="from" value="'.$PlaceFrom.'"/> '.
      'Kam: <input type="text" name="to" value="'.$PlaceTo.'"/> '.
      'Čas: <input type="text" name="time" value="'.$Time.'"/> '.
      '<input type="submit" value="Hledat"/>'.
      '</form></td></tr></table>';
    if (array_key_exists('from', $_GET) and array_key_exists('to', $_GET)) {
      $Output .= $this->ShowRides($_GET['from'], $_GET['to']);
    } else $Output .= $this->ShowRides('', '');
    return($Output);
  }

  function ShowRides($PlaceFrom, $PlaceTo)
  {
    $Output = '<h3>Jízdy:</h3>';
    $Output .= '<table>';
    $Query = 'SELECT Ride.Id, Ride.SeatCount, User.Name AS DriverName, User.BirthDate, '.
      'CONCAT(CarManufacturer.Name, " ", CarModel.Name) AS CarName ';
    if((trim($PlaceFrom) != '') and (trim($PlaceTo != '')))
      $Query .= ', (SELECT COALESCE(MAX(RideStop.PassengerCount), 0) FROM RideStop '.
      'WHERE (RideStop.Ride=Ride.Id) AND (RideStop.Sequence > RideStopFrom.Sequence) AND '.
      '(RideStop.Sequence <= RideStopTo.Sequence)) AS PassengerCount ';
    else
      $Query .= ', (SELECT COALESCE(MAX(RideStop.PassengerCount), 0) FROM RideStop '.
       'WHERE (RideStop.Ride=Ride.Id)) AS PassengerCount ';

    $Query .= 'FROM Ride '.
      'LEFT JOIN Car ON Car.Id = Ride.Car '.
      'LEFT JOIN CarModel ON CarModel.Id = Car.Model '.
      'LEFT JOIN CarManufacturer ON CarManufacturer.Id = CarModel.Manufacturer '.
      'LEFT JOIN User ON User.Id=Ride.Driver ';
    if((trim($PlaceFrom) != '') and (trim($PlaceTo != '')))
      $Query .= 'JOIN RideStop AS RideStopFrom ON (RideStopFrom.Ride = Ride.Id) AND (RideStopFrom.Place LIKE "%'.$PlaceFrom.'%") '.
        'JOIN RideStop AS RideStopTo ON (RideStopTo.Ride = Ride.Id) AND (RideStopTo.Place LIKE "%'.$PlaceTo.'%") '.
        'WHERE (RideStopFrom.Sequence < RideStopTo.Sequence)';
    $Query .= 'LIMIT 10';
    $DbResult = $this->Database->query($Query);
    while($DbRow = $DbResult->fetch_assoc())
    {
      $Stops = array();
      $Price = 0;
      $DbResult2 = $this->Database->query('SELECT * FROM RideStop WHERE Ride='.$DbRow['Id'].' ORDER BY Sequence');
      while($DbRow2 = $DbResult2->fetch_assoc())
      {
        $Stops[] = $DbRow2['Place'];
        $Price += $DbRow2['Price'];
      }

      if ($DbRow['BirthDate'] != '') $Age = ' ('.round((time() - MysqlDateToTime($DbRow['BirthDate'])) / (3600*24*364.25)).' let)';
        else $Age = '';
      $Output .= '<tr><td>Řidič:</td><td>'.$DbRow['DriverName'].$Age.'</td>'.
        '<td colspan="4"><a href="'.$this->System->Link('/jizda/?id='.$DbRow['Id'].'&from='.$PlaceFrom.'&to='.$PlaceTo).'">Ukázat</a></td></tr>'.
        '<tr><td>Trasa:</td><td>'.implode(' → ', $Stops).'</td></tr>'.
        '<tr><td>Cena:</td><td>'.$Price.' Kč</td></tr>'.
        '<tr><td>Volných míst:</td><td>'.($DbRow['SeatCount'] - $DbRow['PassengerCount']).'</td></tr>'.
        '<tr><td>Auto:</td><td>'.$DbRow['CarName'].'</td></tr>'.
        '<tr><td>&nbsp;</td></tr>';
    }
    $Output .= '</table>';

    return($Output);
  }
}

function time_elapsed($secs)
{
  $bit = array(
    'y' => $secs / 31556926 % 12,
    'w' => $secs / 604800 % 52,
    'd' => $secs / 86400 % 7,
    'h' => $secs / 3600 % 24,
    'm' => $secs / 60 % 60,
    's' => $secs % 60
  );

  foreach($bit as $k => $v)
    if($v > 0)$ret[] = $v . $k;

  return join(' ', $ret);
}

class PageNewRide extends Page
{
  function Show()
  {
    if (!array_key_exists('step', $_GET))
    {
      $Output = '<form method="get" action="'.$this->System->Link('/nova-jizda/').'">'.
        '<table>'.
        '<tr><td>Počátek:</td><td><input type="text" name="from"/></td></tr>'.
        '<tr><td>Konec:</td><td><input type="text" name="to"/></td></tr>'.
        '<tr><td>Čas odjezdu:</td><td><input type="text" name="time-from"/></td></tr>'.
        '<tr><td>Počet míst pro cestující:</td><td><input type="text" name="seats"/></td></tr>'.
        '</table>'.
        '<input type="hidden" name="step" value="2"/><br/>'.
        '<input type="submit" value="Pokračovat"/>'.
        '</form>';
    } else {
      if ($_GET['step'] == '2') {
        $TimeFrom = strtotime($_GET['time-from']);
        $Output = '<table style="width: 100%"><tr><td>';
        $Output .= '<form method="post" action="'.$this->System->Link('/nova-jizda/?step=3').'">'.
        '<input type="hidden" name="from" value="'.$_GET['from'].'"/><br/>'.
        '<input type="hidden" name="to" value="'.$_GET['to'].'"/><br/>'.
        '<input type="hidden" name="time-from" value="'.$_GET['time-from'].'"/><br/>'.
        '<input type="hidden" name="seats" value="'.$_GET['seats'].'"/><br/>'.
        '<input type="hidden" name="step" value="3"/><br/>'.
        'Popis:<br/><textarea name="desc"></textarea><br/>'.
        'Auto: <select name="car">';
        $DbResult = $this->Database->query('SELECT Car.Id, CONCAT(CarManufacturer.Name, " ", CarModel.Name) AS ModelName FROM Car '.
          'LEFT JOIN CarModel ON CarModel.Id=Car.Model '.
          'LEFT JOIN CarManufacturer ON CarManufacturer.Id = CarModel.Manufacturer '.
          'WHERE Car.Owner='.$this->System->User->User['Id']);
        while($DbRow = $DbResult->fetch_assoc())
        {
          $Output .= '<option value="'.$DbRow['Id'].'"/>'.$DbRow['ModelName'].'</option>';
        }
        $Output .= '</select>'.
          '<input type="submit" value="Vytvořit"/>'.
          '</form>';
        $Map = new MapGoogle($this->System);
        $Map->Key = 'AIzaSyDQ-tOjP9mO8ZpSEuBc5_oCRg30rpQZiBI';
        $Map->Width = 400;
        $Map->Height = 300;
        $Map->Path = array($_GET['from'], $_GET['to']);
        //$Map->Path = array('Praha', 'Brno', 'Zlín', 'Vsetín');
        $Track = $Map->Route();
        $Output .= '<h3>Trasa</h3>';
        $PricePerKm = 0.8;
        $Output .= '<table class="WideTable"><tr><th>Úsek</th><th>Odjezd</th><th>Trvání</th><th>Vzdálenost [km]</th><th>Cena [Kč]</th></tr>';
        foreach($Track as $Index => $TrackItem)
        {
          if($Index > 0)
          {
            $Track[$Index]['Time'] = $TimeFrom + $Track[$Index - 1]['Duration'];
            $RelDistance = $TrackItem['Distance'] - $Track[$Index - 1]['Distance'];
            $RelDuration = $TrackItem['Duration'] - $Track[$Index - 1]['Duration'];
            $Track[$Index]['Price'] = round($PricePerKm * $RelDistance / 1000);
            $Output .= '<tr><td>'.$Map->Path[$Index - 1].' → '.$TrackItem['Destination'].'</td>'.
              '<td>'.TimeToMysqlDateTime($Track[$Index]['Time']).'</td>'.
              '<td>'.time_elapsed($RelDuration).'</td>'.
              '<td>'.round($RelDistance / 1000).'</td>'.
              '<td>'.$Track[$Index]['Price'].'</td></tr>';

          } else {
            $Track[$Index]['Time'] = $TimeFrom;
            $Track[$Index]['Price'] = 0;
          }
        }
        $Output .= '<tr><td>'.$Map->Path[0].' → '.$Map->Path[count($Map->Path) - 1].'</td>'.
          '<td>'.TimeToMysqlDateTime($Track[0]['Time']).'</td>'.
          '<td>'.time_elapsed($Track[count($Track) - 1]['Duration']).'</td>'.
          '<td>'.round($Track[count($Track) - 1]['Distance'] / 1000).'</td>'.
          '<td>'.round($PricePerKm * $Track[count($Track) - 1]['Distance'] / 1000).'</td></tr>';
        $Output .= '</table><br/>';
        $Output .= 'Vzdálenost: '.round($Track[count($Track) - 1]['Distance'] / 1000, 1).' km<br/>';
        $Output .= 'Délka jízdy: '.time_elapsed($Track[count($Track) - 1]['Duration']).'<br/>';
        $Output .= '</td><td>';
        $Map->Key = 'AIzaSyDwKYuEdkXAl9Y2RyDLf5m03n-ItHaqdKs';
        $Output .= $Map->Show();
        $Output .= '</td></tr></table>';
        $_SESSION['Track'] = $Track;
        $_SESSION['SeatCount'] = $_GET['seats'];
      } else
      if ($_GET['step'] == '3') {
        $this->Database->insert('Ride', array(
          'Driver' => $this->System->User->User['Id'],
          'SeatCount' => $_POST['seats'],
          'Car' => $_POST['car'],
          'Details' => $_POST['desc'],
        ));
        $RideId = $this->Database->insert_id;
        foreach($_SESSION['Track'] as $Index => $TrackItem)
        {
          $this->Database->insert('RideStop', array(
            'Ride' => $RideId,
            'Place' => $TrackItem['Destination'],
            'Time' => TimeToMysqlDateTime($TrackItem['Time']),
            'Price' => $TrackItem['Price'],
            'Sequence' => $Index,
            'PassengerCount' => 0,
          ));
        }
        $Output = 'Nová jízda přidána.';
      }
    }
    return($Output);
  }
}

