#!/usr/bin/perl

require "../cgi-lib.pl";
ReadParse(*in);
*params = *in;
use LWP;
if($ENV{HTTP_USER_AGENT}) { $web = 1;} else { $web = 0; }
print "Content-type: text/html\n\n" if($web);
print "<HTML><BODY BACKGROUND=#FFFFFF>\n";

%rtdesc = (
	   '3Na' => "Rte. 3 North (Rte. 128/I-95 to I-495)",
	   '3Nb' => "Rte. 3 North (I-495 to NH Line)",
	   '3Sa' => "Rte. 3 South (I-495 to Rte. 128/I-95)",
	   '3Sb' => "Rte. 3 South (NH Line to I-495)",
	   '495Na' => "I-495 North (Mass Pike/I-90 to Rte. 3)",
	   '495Nb' => "I-495 North (Rte. 3 to I-93)",
	   '495Nc' => "I-495 North (I-93 to I-95)",
	   '495Sa' => "I-495 South (Rte. 3 to Mass Pike/I-90)",
	   '495Sb' => "I-495 South (I-93 to Rte. 3)",
	   '495Sc' => "I-495 South (I-95 to I-93)",
	   '93Na' => "I-93 North (O'Neill Tunnel to Rte. 128/I-95)",
	   '93Nb' => "I-93 North (Rte. 128/I-95 to I-495)",
	   '93Nc' => "I-93 North (I-495 to NH Line)",
	   '93Sa' => "I-93 South (Rte. 128/I-95 to the O'Neill Tunnel)",
	   '93Sb' => "I-93 South (I-495 to Rte. 128/I-95)",
	   '93Sc' => "I-93 South (NH Line to I-495)",
	   '128Na' => "Rte. 128/I-95 North (Mass Pike/I-90 to Rte. 3)",
	   '128Nb' => "Rte. 128/I-95 North (Rte. 3 to I-93)",
	   '128Nc' => "Rte. 128/I-95 North (I-93 to I-95)",
	   '128Nd' => "Rte. 128 North (I-95 to Gloucester)",
	   '128Sa' => "Rte. 128/I-95 South (Rte. 3 to Mass Pike/I-90)",
	   '128Sb' => "Rte. 128/I-95 South (I-93 to Rte. 3)",
	   '128Sc' => "Rte. 128/I-95 South (I-95 to I-93)",
	   '128Sd' => "Rte. 128 South (Gloucester to I- 95)", #extra space!
	   );

%reg_time = (
	     '3Na' => [10,13],
	     '3Nb' => [11,15],
	     '3Sa' => [10,13],
	     '3Sb' => [11,15],
	     '495Na' => [28,38],
	     '495Nb' => [8,11],
	     '495Nc' => [25,31],
	     '495Sa' => [28,38],
	     '495Sb' => [8,11],
	     '495Sc' => [25,31],
	     '93Na' => [10,13],
	     '93Nb' => [13,16],
	     '93Nc' => [7,9],
	     '93Sa' => [10,13],
	     '93Sb' => [13,16],
	     '93Sc' => [7,9],
	     '128Na' => [12,15],
	     '128Nb' => [7,9],
	     '128Nc' => [10,14],
	     '128Nd' => [22,28],
	     '128Sa' => [12,15],
	     '128Sb' => [7,9],
	     '128Sc' => [10,14],
	     '128Sd' => [22,28],
	     );

%rtlen = (
	     '3Na' => 10,
	     '3Nb' => 11,
	     '3Sa' => 10,
	     '3Sb' => 11,
	     '495Na' => 28,
	     '495Nb' => 8,
	     '495Nc' => 25,
	     '495Sa' => 28,
	     '495Sb' => 8,
	     '495Sc' => 25,
	     '93Na' => 10,
	     '93Nb' => 13,
	     '93Nc' => 7,
	     '93Sa' => 10,
	     '93Sb' => 12,
	     '93Sc' => 7,
	     '128Na' => 12,
	     '128Nb' => 7,
	     '128Nc' => 10,
	     '128Nd' => 22,
	     '128Sa' => 12,
	     '128Sb' => 7,
	     '128Sc' => 10,
	     '128Sd' => 22,
	     );

%rtpage = (
	   '3' => 'http://www.smartraveler.com/scripts/bostraffic.asp?index=5&city=bos&cityname=Boston',
	   '495' => 'http://www.smartraveler.com/scripts/bostraffic.asp?index=9&city=bos&cityname=Boston',
	   '93' => 'http://www.smartraveler.com/scripts/bostraffic.asp?index=7&city=bos&cityname=Boston',
	   '128' => 'http://www.smartraveler.com/scripts/bostraffic.asp?index=6&city=bos&cityname=Boston',
	   );

%brt_default = (
		'3' => 21,
		'495' => 61,
		'93' => 30,
		'128'=> 49,
		);

%ftroutes = (
	   Rt_3_to_495 => {
	       'ROAD' => 1.4,
	       '3Na' => 7.5,
	       'RAMP' => 1.3,
	       '495Nb' => 7.3,
	       '495Nc' => 2.4,
	   },
	   Rt_95_to_93 => {
	       'ROAD' => 1.6,
	       '3Sa' => 2.2,
	       'RAMP' => 1.6,
	       '128Nb' => 5.2,
	       '93Nb' => 11.8,
	       '495Nc' => 2.2,
	   },
	   Rt_62_to_93 => {
	       'ROAD' => 10.7,
	       '93Nb' => 6.3,
	       'RAMP' => 0.4,
	       '495Nb' => 2.2,
	       'LIGHTS' => 10,
	   },
	   );

%amroutes = (
	     Rt_95_to_93 => {
		 'ROAD' => 2.0,
		 '128Nb' => 5.2,
		 'RAMP' => 1.0,
		 '93Nb' => 11.8,
		 '495Nb' => 2.2,
	     },
	     Rt_3_to_495 => {
		'ROAD' => 1.8,
		'3Na' => 9.5,
		'RAMP' => 2.0,
		'495Nb' => 7.3,
		'495Nc' => 2.4,
	     },
	     );

%homeftroutes = (
	   Rt_495_to_3 => {
	       'ROAD' => 1.4,
	       '3Sa' => 7.5,
	       'RAMP' => 1.3,
	       '495Sb' => 7.3,
	       '495Sc' => 2.4,
	   },
	   Rt_93_to_95 => {
	       'ROAD' => 1.6,
	       '3Na' => 2.2,
	       'RAMP' => 1.6,
	       '128Sb' => 5.2,
	       '93Sb' => 11.8,
	       '495Sc' => 2.2,
	   },
	   Rt_93_to_62 => {
	       'ROAD' => 10.7,
	       '93Sb' => 6.3,
	       'RAMP' => 0.4,
	       '495Sb' => 2.2,
	       'LIGHTS' => 10,
	   },
	   );

%homeamroutes = (
	     Rt_93_to_95 => {
		 'ROAD' => 2.0,
		 '128Sb' => 5.2,
		 'RAMP' => 1.0,
		 '93Sb' => 11.8,
		 '495Sb' => 2.2,
	     },
	     Rt_495_to_3 => {
		'ROAD' => 1.8,
		'3Sa' => 9.5,
		'RAMP' => 2.0,
		'495Sb' => 7.3,
		'495Sc' => 2.4,
	     },
	     );

%rtspeeds = (
	      'ROAD' => 25,
	      'RAMP' => 35,
	      '3' => 55,
	      '495' => 65,
	      '93' => 65,
	      '128' => 55,
	      'LIGHTS' => 200,
	      );

$ua = new LWP::UserAgent;
$ua->agent("Foo/0.1 ".$ua->agent);
$ua->timeout(60);

my(%pagedata) = ();
#print "About to load pages\n";
foreach $route (keys %rtdesc) {
    my($baseroute) = $route;
    $baseroute =~ s/[A-Za-z]+//g;
    $url = $rtpage{$baseroute};
    #print "I want to load $url\n";
    if(!defined($pagedata{$url}) || !$pagedata{$url}->is_success) {
	#print "Loading $baseroute ...";
	my($request) = new HTTP::Request GET => $url;
	$request->content_type('application/x-www-form-urlencoded');
	$request->content('match=www&errors=0');
	$pagedata{$url} = $ua->request($request);
	#print "Done!<br>\n";
    }
    my($response) = $pagedata{$url};
    if($response->is_success) {
	#TIME DATA WAS UPDATED
	if($response->content() =~ /\((\d+:\d+) [ap]m (\d+\/\d+\/\d+)\)/) {
	    $datetime{$baseroute} = $1." ".$2;
	}
	#OVERALL TIME FOR ROUTE
	if($response->content() =~ /Northbound - (\d+) minutes/) {
	    $totalroutetime{$baseroute}{N} = $1;
	} else {
	    #print "$url had no Northbound time!\n";
	    $totalroutetime{$baseroute}{N} = $brt_default{$baseroute};
	    $errflag++;
	}
	if($response->content() =~ /Southbound - (\d+) minutes/) {
	    $totalroutetime{$baseroute}{S} = $1;
	} else {
	    #print "$url had no Southbound time!\n";
	    $totalroutetime{$baseroute}{S} = $brt_default{$baseroute};
	    $errflag++;
	}
	#CONDITION OF SUBROUTE
	if($response->content() =~ /\/(\w+)\.gif\"? ALIGN=\"?center\"?\>\<\/td\>\s*\<td\>(<font size=\"?\d+\" face=\"?Arial\"?>)?\<b\>\Q$rtdesc{$route}\E\<\/B\>/i) {
	    $img = $1;
	    if($img =~ /ok/i) { $condition{$route} = 0; }
	    elsif($img =~ /slow/i) { $condition{$route} = 1; }
	    elsif($img =~ /delay/i) { $condition{$route} = 2; }
	    elsif($img =~ /alert/i) { $condition{$route} = 3; }
	} else {
	    #print "Ack! $route had no associated gif!<br>\n";
	    $errflag++;
	}
    } else {
	#print "Ack! Could not load $url<br>\n";
	$errflag++;
    }
}

#print "Pages loaded. Continuing with logic...";
foreach $sub (keys %rtdesc) {
    my($baseroute) = $sub;
    $baseroute =~ s/[A-Za-z]+//g;
    if($sub =~ /N/) { $dir = "N"; }
    else { $dir = "S"; }
    if($condition{$sub} <= 1) { $routetime{$sub} = $reg_time{$sub}[$condition{$sub}]; }
    else { $routetime{$sub} = $reg_time{$sub}[0]; }
    $usedtime{$baseroute}{$dir} += $routetime{$sub};
#    print "$sub ".("OK","Slow","Delay","Alert")[$condition{$sub}]." - $routetime{$sub}<br>\n";
}
foreach $baseroute (keys %usedtime) {
    foreach $dir ("N","S") {
	$totleft{$baseroute}{$dir} = $totalroutetime{$baseroute}{$dir} - $usedtime{$baseroute}{$dir};
	$totdivs{$baseroute}{$dir} = 0;
	#print "Total time left for $baseroute $dir: $totleft{$baseroute}{$dir}<br>\n";
    }
}

foreach $route (keys %rtdesc) {
    my($baseroute) = $route;
    $baseroute =~ s/[A-Za-z]+//g;
    if($route =~ /(N|S)/) { $dir = $1; }
    else { $dir = "?"; }
    $numsubs{$baseroute}{$dir}++;
    if($condition{$route} >= 2) { $totdivs{$baseroute}{$dir}++; }
}

foreach $baseroute (keys %totdivs) {
    foreach $dir ("N","S") {
	if($totdivs{$baseroute}{$dir}) {
	    #print "Must divide $totleft{$baseroute}{$dir} between $totdivs{$baseroute}{$dir} subs<br>\n";
	    foreach $sub (keys %rtdesc) {
		if($condition{$sub} >= 2 && $sub =~ /^$baseroute\Q$dir\E[a-z]$/) {
		    $routetime{$sub} += $totleft{$baseroute}{$dir}/$totdivs{$baseroute}{$dir};
		}
	    }
	}
	else {
	    foreach $sub (keys %rtdesc) {
		if($sub =~ /^$baseroute\Q$dir\E[a-z]$/) {
		    $routetime{$sub} += $totleft{$baseroute}{$dir}/$numsubs{$baseroute}{$dir};
		}
	    }
	}
    }
}
#print "Logic complete\n";

if($errflag) { print "<font color=red size=+1><b>Warning!</b></font> SmartTraveler's website contained unexpected and/or incomplete data. All times are assumed to be normal. Encountered $errflag errors.<br><br>\n"; }

#print data:
if($params{check}) {
    foreach $base (keys %totalroutetime) {
	foreach $dir ("N","S") {
	    print "Route $base $dir: $totalroutetime{$base}{$dir}<br>\n";
	    my($time) = 0;
	    foreach $route (keys %condition) {
		if($route =~ /^\Q$base$dir\E/) {
		    print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		    print "<font color=";
		    print "".(("green","orange","red","blue")[$condition{$route}])."";
		    print ">$routetime{$route}</font>";
		    print "<br>\n";
		    $time += $routetime{$route};
		}
	    }
	    print "Final time: $time<br>\n";
	}
    }
}

#Draw a picture!
foreach(keys %rtlen) {
    if($condition{$_} =~ /\d/) {
	$color{$_} = ("green","orange","red","blue")[$condition{$_}];
    } elsif(/N/) {
	$color{$_} = "#CCCCCC";
    } else {
	$color{$_} = "#AAAAAA";
    }
}

print "<table cellspacing=0 cellpadding=0 border=0>\n";

if(1) {
    my($w) = 3;
    my($l) = 50;
    $color{oN} = "#CCCCCC";
    $color{oS} = "#AAAAAA";

    #ROW 1
    print "<tr><td colspan=7 align=right><font size=-1>3</font></td>\n";
    print "<td bgcolor=$color{'3Sb'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'3Nb'}>".image($w,$l)."</td>\n";
    print "<td align=right><font size=-1>93</font></td>\n";
    print "<td bgcolor=$color{'93Sc'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'93Nc'}>".image($w,$l)."</td>\n";
    print "<td valign=bottom align=left><font size=-1><b>H</b></font></td>\n";
    print "<td bgcolor=$color{'495Sc'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'495Nc'}>".image($w,$l)."</td>\n";
    print "<td align=left><font size=-1>495</font></td>\n";
    print "<td bgcolor=$color{'oS'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'oN'}>".image($w,$l)."</td>\n";
    print "<td align=left><font size=-1>95</font></td>\n";
    print "</tr>\n";
    
    #ROW 2
    print "<tr>\n";
    print "<td></td>\n";
    print "<td colspan=6 bgcolor=$color{'495Sa'}>".image((4*$w+2*$l),$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'495Sb'}>".image($l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td colspan=2 bgcolor=$color{'495Sc'}>".image(($l+$w),$w)."</td>\n";
    print "<td bgcolor=$color{'495Nc'}>".image($w,$w)."</td>\n";
    print "<td></td>\n";
    print "<td bgcolor=$color{'oS'}>".image($w,$w)."</td>\n";
    print "<td bgcolor=$color{'oN'}>".image($w,$w)."</td>\n";
    print "<td></td>\n";
    print "</tr>\n";

    #ROW 3
    print "<tr>\n";
    print "<td></td>\n";
    print "<td bgcolor=$color{'495Sa'}>".image($w,$w)."</td>\n";
    print "<td colspan=5 bgcolor=$color{'495Na'}>".image((3*$w+2*$l),$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'495Nb'}>".image($l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td colspan=3 bgcolor=$color{'495Nc'}>".image(($l+2*$w),$w)."</td>\n";
    print "<td></td>\n";
    print "<td bgcolor=$color{'oS'}>".image($w,$w)."</td>\n";
    print "<td bgcolor=$color{'oN'}>".image($w,$w)."</td>\n";
    print "<td></td>\n";
    print "</tr>\n";

    #ROW 4
    print "<tr>\n";
    print "<td align=right><font size=-1>495</font></td>\n";
    print "<td bgcolor=$color{'495Sa'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'495Na'}>".image($w,$l)."</td>\n";
    print "<td colspan=4></td>\n";
    print "<td bgcolor=$color{'3Sa'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'3Na'}>".image($w,$l)."</td>\n";
    print "<td valign=bottom align=left><font size=-1><b>W</b></font></td>\n";
    print "<td bgcolor=$color{'93Sb'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'93Nb'}>".image($w,$l)."</td>\n";
    print "<td colspan=4 valign=bottom align=center><font size=-1>128/95</font></td>\n";
    print "<td bgcolor=$color{'oS'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'oN'}>".image($w,$l)."</td>\n";
    print "<td valign=bottom align=center><font size=-1>128</font></td>\n";
    print "</tr>\n";

    #ROW 5
    print "<tr>\n";
    print "<td></td>\n";
    print "<td bgcolor=$color{'495Sa'}>".image($w,$w)."</td>\n";
    print "<td bgcolor=$color{'495Na'}>".image($w,$w)."</td>\n";
    print "<td></td>\n";
    print "<td colspan=3 bgcolor=$color{'128Sa'}>".image($w*2+$l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'128Sb'}>".image($l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'128Sc'}>".image($l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'128Sd'}>".image($l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'128Sd'}>".image($l,$w)."</td>\n";
    print "</tr>\n";

    #ROW 6
    print "<tr>\n";
    print "<td></td>\n";
    print "<td bgcolor=$color{'495Sa'}>".image($w,$w)."</td>\n";
    print "<td bgcolor=$color{'495Na'}>".image($w,$w)."</td>\n";
    print "<td></td>\n";
    print "<td bgcolor=$color{'128Sa'}>".image($w,$w)."</td>\n";
    print "<td colspan=2 bgcolor=$color{'128Na'}>".image($w+$l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'128Nb'}>".image($l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'128Nc'}>".image($l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'128Nd'}>".image($l,$w)."</td>\n";
    print "<td colspan=2></td>\n";
    print "<td bgcolor=$color{'128Nd'}>".image($l,$w)."</td>\n";
    print "</tr>\n";

    #ROW 7
    print "<tr>\n";
    print "<td valign=bottom align=center><font size=-1>90</font></td>\n";
    print "<td bgcolor=$color{'495Sa'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'495Na'}>".image($w,$l)."</td>\n";
    print "<td></td>\n";
    print "<td bgcolor=$color{'128Sa'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'128Na'}>".image($w,$l)."</td>\n";
    print "<td colspan=4></td>\n";
    print "<td bgcolor=$color{'93Sa'}>".image($w,$l)."</td>\n";
    print "<td bgcolor=$color{'93Na'}>".image($w,$l)."</td>\n";
    print "<td colspan=7 align=left valign=center><font size=-1>93</font></td>\n";
    print "</tr>\n";

    #ROW 8
    print "<tr>\n";
    print "<td bgcolor=$color{'oS'}>".image($l,$w)."</td>\n";
    print "<td colspan=2>\n";
    print "<td bgcolor=$color{'oS'}>".image($l,$w)."</td>\n";
    print "<td colspan=2>\n";
    print "<td bgcolor=$color{'oS'}>".image($l,$w)."</td>\n";
    print "<td colspan=2>\n";
    print "<td bgcolor=$color{'oS'}>".image($l,$w)."</td>\n";
    print "<td colspan=9>\n";
    print "</tr>\n";

    #ROW 9
    print "<tr>\n";
    print "<td bgcolor=$color{'oN'}>".image($l,$w)."</td>\n";
    print "<td colspan=2>\n";
    print "<td bgcolor=$color{'oN'}>".image($l,$w)."</td>\n";
    print "<td colspan=2>\n";
    print "<td bgcolor=$color{'oN'}>".image($l,$w)."</td>\n";
    print "<td colspan=2>\n";
    print "<td bgcolor=$color{'oN'}>".image($l,$w)."</td>\n";
    print "<td colspan=9>\n";
    print "</tr>\n";

} else {
    print "<tr><td colspan=5 align=center>495</td></tr>\n";
    print "<tr><td colspan=5 bgcolor=$color{'495Sb'}><img width=100 height=3 src=\"/~dave/images/spacer.gif\"></td></tr>\n";
    print "<tr><td colspan=5 bgcolor=$color{'495Nb'}><img width=100 height=3 src=\"/~dave/images/spacer.gif\"></td></tr>\n";
    
    print "<tr>\n";
    print "<td rowspan=2 bgcolor=$color{'3Sa'}><img width=3 height=100 src=\"/~dave/images/spacer.gif\"></td>\n";
    print "<td rowspan=2 bgcolor=$color{'3Na'}><img width=3 height=100 src=\"/~dave/images/spacer.gif\"></td>\n";
    print "<td width=84 valign=bottom align=left>3</td>\n";
    print "<td rowspan=2 bgcolor=$color{'93Sb'}><img width=3 height=100 src=\"/~dave/images/spacer.gif\"></td>\n";
    print "<td rowspan=2 bgcolor=$color{'93Nb'}><img width=3 height=100 src=\"/~dave/images/spacer.gif\"></td>\n";
    print "</tr>\n";
    
    print "<tr><td valign=top align=right>93</td></tr>\n";
    
    print "<tr><td colspan=5 bgcolor=$color{'128Sb'}><img width=100 height=3 src=\"/~dave/images/spacer.gif\"></td></tr>\n";
    print "<tr><td colspan=5 bgcolor=$color{'128Nb'}><img width=100 height=3 src=\"/~dave/images/spacer.gif\"></td></tr>\n";
    print "<tr><td colspan=5 align=center>95</td></tr>\n";
}
print "</table>\n";
print "<br>\n";

print "<font size=+1><B>From FTID to Home</B></font><br>\n";
compare(\%ftroutes);
print "<font size=+1><B>From Amasia to Home</b></font><br>\n";
compare(\%amroutes);
print "<font size=+1><B>From Home to FTID</B></font><br>\n";
compare(\%homeftroutes);
print "<font size=+1><B>From Home to Amasia</b></font><br>\n";
compare(\%homeamroutes);

rmap();

print "</BODY></HTML>\n";

sub compare {
    my($paths) = @_;
    my($time,$mintime,$base);
    foreach $path (keys %{$paths}) {
	$time = 0;
	print "=====$path=====<br>\n";
	foreach $route (keys %{$paths->{$path}}) {
	    if($routetime{$route}) {
		$base = $route; $base =~ s/\D//g;
		print "<a href=\"$rtpage{$base}\">";
	    }
	    if($condition{$route} == 3) {
		print "<font color=blue><b>";
	    } elsif($condition{$route} == 2) {
		print "<font color=red><b>";
	    } elsif($condition{$route} == 1) {
		print "<font color=orange><b>";
	    } elsif($routetime{$route}) {
		print "<font color=green><b>";
	    } else {
		print "<font color=black>";
	    }
	    print "$route";
	    if($routetime{$route}) { print "</b>"; }
	    print "</font>";
	    if($routetime{$route}) { print "</a>"; }
	    print " - ";
	    if($routetime{$route}) {
		$subtime = $routetime{$route} * ($paths->{$path}{$route}/$rtlen{$route});
		#print "($routetime{$route}) ";
	    } else {
		$subtime = ($paths->{$path}{$route}/$rtspeeds{$route})*60;
	    }
	    $time += $subtime;
	    print "$subtime minutes<br>";
	}
	print "Total time = $time minutes<br><br>\n";
	if(!$mintime || $time < $mintime) { $sroute = $path; $mintime = $time; }
    }
    print "Suggested route: <font color=blue><b>$sroute ($mintime minutes)</b></font><br><br>\n";
}

sub image {
    my($width,$height) = @_;
    $width ||= 100;
    $height ||= 100;
    if($width == 100) { $height = 3; }
    if($height == 100) { $width = 3; }
    return "<img src=\"/~dave/images/spacer.gif\" width=\"$width\" height=\"$height\">";
}

sub rmap {
    my(@rmap) = (
		 "-------AB-CD-EF-GH-",
		 "-IIIIII--J--EEF-GH-",
		 "-IKKKKK--L--FFF-GH-",
		 "-IK----MN-OP----GH-",
		 "-IK-QQQ--R--SSSS--w",
		 "-IK-QTT--U--VVVV--x",
		 "-IK-QT----WX-------",
		 "Y--Z--a--b---------",
		 "c--d--e--f---------",
		 "-gh-ij----kl-------",
		 "-gh---mmmm---------",
		 "-gh---nnnn---------",
		 "-gh-op----qr-------",
		 "-ghh--sss-qr-------",
		 "-ggg--tts-qr-------",
		 "----uv-ts-qr-------",
		 );
    my(%key) = (
		A => '3Sb',
		B => '3Nb',
		C => '93Sc',
		D => '93Nc',
		E => '495Sc',
		F => '495Nc',
		G => '95Sa',
		H => '95Na',
		I => '495Sa',
		J => '495Sb',
		K => '495Na',
		L => '495Nb',
		M => '3Sa',
		N => '3Na',
		O => '93Sb',
		P => '93Nb',
		Q => '128Sa',
		R => '128Sb',
		S => '128Sc',
		T => '128Na',
		U => '128Nb',
		V => '128Nc',
		W => '93Sa',
		X => '93Na',
		Y => '90Wa',
		Z => '90Wb',
		a => '90Wc',
		b => '90Wd',
		c => '90Ea',
		d => '90Eb',
		e => '90Ec',
		f => '90Ed',
		g => '495Sd',
		h => '495Nd',
		i => '128Se',
		j => '128Ne',
		k => '93Sd',
		l => '93Nd',
		m => '128Nf',
		n => '128Sf',
		o => '95Sb',
		p => '95Nb',
		q => '3Sc',
		r => '3Nc',
		s => '495Ne',
		t => '495Se',
		u => '95Sc',
		v => '95Nc',
		w => '128Sd',
		x => '128Nd',
		);
    $w = 3;
    $l = 50;
    $tall = 0;
    my(%color);
    foreach $k (keys %key) {
	$rt = $key{$k};
	if(defined $condition{$rt}) {
	    $color{$rt} = ("green","orange","red","blue")[$condition{$rt}];
	} else {
	    $color{$rt} = ($rt =~ /S|W/) ? "#AAAAAA" : "#CCCCCC";
	}
    }
    print "<table cellpadding=0 cellspacing=0 border=0>\n";
    foreach $line (@rmap) {
	print "<tr>\n";
	$wide = 0;
	if($tall % 3) { $x = $w; }
	else { $x = $l; }
	foreach $td (split //,$line) {
	    print "<td";
	    if($key{$td}) {
		print " bgcolor=$color{$key{$td}}";
	    }
	    print ">";
	    if($wide % 3) { $y = $w; }
	    else { $y = $l; }
	    limg($key{$td},$x,$y);
	    print "</td>\n";
	    $wide++;
	}
	print "</tr>\n";
	$tall++;
    }
    print "</td>\n";
}

sub limg {
    my($route,$height,$width) = @_;
    my($base) = $route;
    $base =~ s/\D//g;
    if($rtpage{$base}) { print "<a href=\"$rtpage{$base}\">"; }
    print "<img src=\"/~dave/images/spacer.gif\" border=0 width=$width height=$height>";
    if($rtpage{$base}) { print "</a>"; }
}
