<?php

$alkuosa 
'http://aikataulut.tampere.fi/?page=lineTimetable&line=';
$erotin '§';
$maxprint 5;

array_shift($argv); #skriptinimi pois

if (strpos($argv[0], ' - ') === false ) {
    
$argv explode(' '$argv[0]);
    switch (
count($argv)) {
        default:
            die(
"Käyttö: !tkl linja lähtö kohde tai !tkl lähtö - kohde");
        case 
3:
            
$linja $argv[0];
            
$lahto $argv[1];
            
$kohde $argv[2];
            break;
        case 
2:
            
$linja $argv[0];
            
$lahto $argv[1];
            
$kohde 'Keskustori';
            break;
        case 
&& !is_numeric($argv[0]):
            include_once 
'tklreitti.php';
            
reittihaku($argv[0], true);
            die();
    }
    if (!
is_numeric($linja)) {
        die(
'Syötä linjaNUMERO!');
    }
} else {
    include_once 
'tklreitti.php';
    
reittihaku($argv[0]);
    die();
}

#die('debug: ' . $linja . '+' . $lahto . '+' . $kohde);

$data = @file_get_contents($alkuosa.$linja);
if (
$data === false || stripos($data'getLine error: invalid result count') !== false) {
    die(
"Linjan aikatauluja ei löytynyt.");
}
$doc = new DOMDocument();
@
$doc->loadHTML($data);

$xpath = new DOMXPath($doc);

$reitit = array();
$aikataulut = array();
$reittirivit $xpath->query('//table[@class="title"]/tr'); #reitit

foreach ($reittirivit as $rivi) {
    
$rivi $rivi->textContent;
    
$reitti trim(strip_tags($rivi));
    
$reitti substr($reittistrpos($reitti' ')); #ensimmäinen sana aina turha
    
if (stripos($reitti'suuntaan') !== false) {
        
#molemmat asemat tiedossa
        
$alku trim(substr($reitti0strrpos($reitti'(')));
        
$reitit['yhteinen'] = $alku;
        
$loppu trim(substr($reittistrrpos($reitti,'suuntaan')+8));
        
$reitit[] = array(
            
'lahto' => $alku,
            
'kohde' => $loppu
        
);
    } else {
        
#vain lähtöasema tiedossa
        
$alku trim(substr($reitti0strrpos($reitti'(')));
        
$reitit[] = array(
            
'lahto' => $alku
        
);
    }
}

#fiksataan puuttuvat kohteet
if (count($reitit) == 2) {
    
$reitit[0]['kohde'] = $reitit[1]['lahto'];
    
$reitit[1]['kohde'] = $reitit[0]['lahto'];
} else {
    foreach (
$reitit as $rnum => $reitti) {
        if (
count($reitti) == 1) {
            
$reitit[$rnum]['kohde'] = $reitit['yhteinen'];
        }
    }    
}

#poistetaan selkeyden vuoksi
if (isset($reitit['yhteinen'])) {
    unset(
$reitit['yhteinen']);
}

$aikatauludom $xpath->query('//table[@class="lineTimetable"]');
foreach (
$aikatauludom as $reittinumero => $taulu) {
    
$rivit $taulu->getElementsByTagName('tr');
    foreach (
$rivit as $rivi) {
        
$solut $rivi->getElementsByTagName('td');
        foreach (
$solut as $viikonpaiva => $solu) {
            switch (
$solu->getAttribute('class')) {
            case 
'hour':
                
$tunti false;
                if (
is_numeric($solu->textContent)) {
                    
$tunti $solu->textContent;
                }
                break;
            case 
'mins':
                if (
$tunti !== false) {
                    
$minuuttidivit $solu->getElementsByTagName('div');
                    foreach (
$minuuttidivit as $mindiv) {
                        if (
$mindiv->getAttribute('class') == 'timetableItem') {
                            
$minuuttiItemi trim($mindiv->textContent);
                            if (
is_numeric($minuuttiItemi)) {
                                
$aikataulut[$reittinumero][$viikonpaiva][] = array('tunti' => $tunti'minuutit' => $minuuttiItemi);
                            } else {
                                
$minuutit substr($minuuttiItemi02);
                                
$merkki substr($minuuttiItemi2);
                                
$aikataulut[$reittinumero][$viikonpaiva][] = array('tunti' => $tunti'minuutit' => $minuutit'merkki' => $merkki);
                            }
                        }
                    }
                }
            }        
        }
    }
}

$reittiok false;
foreach (
$reitit as $rnum => $reitti) {
    if (
strtolower(substr($reitti['lahto'],0,strlen($lahto))) == strtolower($lahto)
    && 
strtolower(substr($reitti['kohde'],0,strlen($kohde))) == strtolower($kohde)) {
        
$reittiok $rnum;
        break;
    }
}

if (
$reittiok === false) {
    
#reittitulostus
    
echo 'Valitse matka:' $erotin;
    foreach (
$reitit as $reitti) {
        echo 
$reitti['lahto'] . ' - ' $reitti['kohde'] . $erotin;
    }
    die();
}

$tulostettuja 0;
$tunnit date('H');
$minuutit date('i');
switch (
date('N')) {
    case 
'6'#la
        
$vpaiva 2;
        break;
    case 
'7'#su
        
$vpaiva 3;
        break;
    default: 
#arki
        
$vpaiva 1;
        break;
}

$print = array();
foreach (
$aikataulut[$reittiok][$vpaiva] as $paivantaulut) {
    if (
$paivantaulut['tunti'] > $tunnit || ($paivantaulut['tunti'] == $tunnit && $paivantaulut['minuutit'] > $minuutit)) {
        
$print[] = sprintf('%s:%s%s',
            
$paivantaulut['tunti'],
            
$paivantaulut['minuutit'],
            isset(
$paivantaulut['merkki'])?$paivantaulut['merkki']:''
        
);
        if (
count($print) >= $maxprint) {
            break;
        }
    }
}

if (
count($print) == 0) {
    die(
'Sun bussis on menny jo.');
}

echo 
implode(' '$print);

?>