<?php

function tklUrlEncode($str) {
    
$str str_replace('ä','%E4',$str);
    
$str str_replace('ö','%C3%B6',$str);
    
$str str_replace(utf8_decode('ä'),'%E4',$str);
    
$str str_replace(utf8_decode('ö'),'%C3%B6',$str);
    
$str str_replace(' ''+'$str);
    return 
trim($str);
}

function 
aliasGet($str) {
    
$aliases = array('tamk' => 'tays');
    foreach (
$aliases as $old => $new) {
        if (
strtolower($str) == $old) {
            return 
$new;
        }
    }
    return 
$str;
}

function 
hasNumerics($str) {
    for (
$i 0$i strlen($str); $i++) {
        if (
is_numeric($str{$i})) {
            return 
true;
        }
    }
    return 
false;
}

function 
reittihaku($arg$skipCheck false) {
    if (!
$skipCheck) {
        
$arg explode(' - '$arg);
        if (
count($arg) != 2) {
            die(
'Käyttö: !tkl lähtö - kohde');
        }
        
$arg[0] = aliasGet($arg[0]);
        
$arg[1] = aliasGet($arg[1]);
    } else {
        
$search $arg;
        
$arg = array();
        
$arg[0] = aliasGet($search);
        
$arg[1] = 'Keskustori';
    }
    
$arg[0] = tklUrlEncode($arg[0]);
    
$arg[1] = tklUrlEncode($arg[1]);
    
    
$baseurl trim(sprintf(
        
'http://atlas.tripplanner.fi/tkl-pda/fi/?test=1&keya=%s&keyb=%s',
        
$arg[0],
        
$arg[1]
    ));
    
#var_dump($baseurl . "\n");exit;
    
$data = @file($baseurl);
    
#var_dump($data);exit;
    
$tries 0;
    
$aa '&aa=';
    
$bb '&bb=';
    
$an '&an=';
    
$bn '&bn=';
    while (
$tries <= 3) {
        
$tries++;
        if (
$tries 1) {
            if (!
hasNumerics($arg[0])) {
                
$an '&an=2';
            }
            if (!
hasNumerics($arg[1])) {
                
$bn '&bn=2';
            }
        }
        foreach (
$data as $rownum => $row) {
            
$uuttakaipaa false;
            if (
stripos($row"select id='keya'") !== false) {
                
$uuttakaipaa true;
                
$uusia substr($row,strpos($row,"select id='keya'"));
                
$atries 0;
                while (
$atries 5) {
                    
$uusia substr($uusiastrpos($uusia"value='")+7);
                    if (
$uusia{0} != "'") {
                        break;
                    }
                    
$atries++;
                }
                if (
$uusia{0} != "'") {
                    
$aa .= tklUrlEncode(substr($uusia,0,strpos($uusia,"'")));
                } else {
                    die(
'Tarkenna hakua.');
                }
            }
            if (
stripos($row"select id='keyb'") !== false) {
                
$uuttakaipaa true;
                
$uusib substr($row,strpos($row,"select id='keyb'"));
                
$btries 0;
                while (
$btries 5) {
                    
$uusib substr($uusibstrpos($uusib"value='")+7);
                    if (
$uusib{0} != "'") {
                        break;
                    }
                    
$btries++;
                }
                if (
$uusib{0} != "'") {
                    
$bb .= tklUrlEncode(substr($uusib,0,strpos($uusib,"'")));
                } else {
                    die(
'Tarkenna hakua.');
                }
            }
            if (
$uuttakaipaa) {
                
$retryurl $baseurl $aa $bb $an $bn;
                
#echo "DEBUG: $retryurl\n";
                
$data = @file($retryurl);
                break;
            }
            if (
stripos($row"TD colspan='3'") !== false) {
                
$tries 1000;
                break;
            }
        }
    }
    if (
$tries != 1000) {
        die(
'Ei tuloksia. Yritin ihan oikeesti hei jo ' $tries ' kertaa tajuta mitä sä tahdot!');
    }
    
$row substr($rowstrpos($row,"TD colspan='3'>"));
    
$row substr($row,0,strripos($row,'<table'));
    
$reitit explode("TD colspan='3'>"$row);
    
array_shift($reitit); #poistetaan joku pylly
    
foreach ($reitit as $rnum => $reitti) {
        
$reitti explode('</TR>',$reitti);
        
$reitti $reitti[2];
        
$reitti explode('</TD>',$reitti);
        
$tapahtumat = array();
        foreach (
$reitti as $key => $piste) {
            
$piste utf8_encode($piste);
            if (
strlen(trim($piste)) == 0) {
                continue;
            }
            if (
stripos($piste,"10%' nowrap") !== false) {
                
#kulkutapa
                
$tapahtuma = array('tapa' => html_entity_decode(strip_tags($piste),ENT_COMPAT,'utf-8'), 'paikka' => '''aika' => '');
                continue;
            }
            if (
stripos($piste,"25%' nowrap") !== false) {
                
#paikka
                
$tapahtuma['paikka'] = trim(html_entity_decode(strip_tags($piste),ENT_COMPAT,'utf-8'));
                continue;
            }
            if (
stripos($piste,"10%") !== false) {
                
$tapahtuma['aika'] = strip_tags($piste);
                
$tapahtumat[] = $tapahtuma;
                continue;
            }
            if (
stripos($piste,'perill&auml;') !== false) {
                
$perilla = array('tapa' => 'Perillä');
                continue;
            }
            if (isset(
$perilla)) {
                if (isset(
$perilla['paikka'])) {
                    
$perilla['aika'] = str_replace('&nbsp;','',strip_tags($piste));
                    
$tapahtumat[] = $perilla;
                    unset(
$perilla);
                    break;
                } else {
                    
$perilla['paikka'] = trim(html_entity_decode(strip_tags($piste), ENT_COMPAT'utf-8'));
                    continue;
                }
            }
        }
        foreach (
$tapahtumat as $num => $tapahtuma) {
            echo 
$tapahtuma['aika'] . ' ' $tapahtuma['tapa'] . ' (' $tapahtuma['paikka'] . ')';
            if (
$num count($tapahtumat)-1) {
                echo 
' - ';
            }
        }
        echo 
'§';
    }
}

?>