#!/usr/bin/perl
$| = 1;

my $okToGoOn = 0;
my $remoteHost = $ENV{'REMOTE_HOST'};

if ($remoteHost =~ m|donobi|i) {
	$okToGoOn = 1;
} else {
	$okToGoOn = 0;
}

if (! $okToGoOn) {
	print "Location: http://hfradio.org/swbc/\nURI: http://hfradio.org/swbc\n\n";
} else {

	use Pg;

	$downloadOK = 1;

	$solarReport = "";
	$mail_prog = '/usr/lib/sendmail' ;
	$theRootDir = "/home/hfradio/database/swl";
	$theLogFile = $theRootDir . "/lookup.log";

	$templateDir = "/home/hfradio/html/hffreq";

	$html_header = "Content-type: text/html\n\n";

	$gmtTime = `date -u +%H:%M:%S`;
	chop $gmtTime;
	$showTime = `date -u +%H%M`;
	chop $showTime;
	$gmtDay = `date -u +%Y-%m-%d`;
	chop $gmtDay;
		
	$styleSheet = "/home/hfradio/html/cgi-bin/styles.format";
	$theMenu = "/home/hfradio/html/cgi-bin/menu.format";

	$theLinks = "<a href=\"http://hfradio.org/cgi-bin/swllinks\" target=\"swlWin\">shortwave links</a>";

	&GetFormInput;

	doSolarData();

	my ($result, $conn);
	my ($message) = "";

	if (! $okToGoOn) {

		open (STYLE, "$styleSheet") || die "Could not read $styleSheet: $!\n";
		$_style = "";
		while (<STYLE>) {
			$_style .= $_;
		}
		close (STYLE);

		open (MENU, "$theMenu") || die "Could not read $theMenu: $!\n";
		$_menu = "";
		while (<MENU>) {
			$_menu .= $_;
		}
		close (MENU);

		print $html_header;
		print <<YE1;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Shortwave Transmissions at $showTime</title>
$_style
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

</head>
<body background="http://hfradio.org/graphics/backmap.gif" bgcolor="#FFFFFF">
<div align="center">
<table width="100%"><tr>
<td valign=top>
<img src="http://hfradio.org/graphics/hfr-l.gif" width=171 height=82 border=0 alt="hfradio.org" vspace="0"><br>
<img src="http://hfradio.org/graphics/swl.gif" width=168 height=30 border=0 alt="SWL Search from NW7US" vspace="0">
</td>
<td>
<br><br>
$_menu
<br>
<div class="menu" align="center">
Do you need programming help or database engineering?<br>
<a href="http://custom.accessnow.com" target="wrkWin">See Tomas' Services</a>
<br><br>
$solarReport
</div>

</td>
</tr>
</table>
</div>
<hr noshade>
<div align=center>
Hello.
<br><br>
<b>Please use the following link for now:</b> 
<a href="http://hfradio.org/swbc/">http://hfradio.org/swbc/</a>
<br><br>
<hr noshade width="400">
</div>

<div>
<blockquote>
This page is currently down as I re-do the database with different data sources.
<br><br>
I am trying to work out with <a href="http://www.ilgradio.com/ilgradio.htm" target="ilgWin">Bernd 
Friedewald, of ILG</a> some kind of arrangement to obtain current data from him.
<br>
<br>
I am giving my apologies to Bernd for my misunderstanding. And, I have taken his database from 
public access at this page.
<br>
<br>
I await his reply to me.  I hope for a discussion with him. In the meantime, I am working on 
alternative sources and will recreate the database.  So hang in there.  I will attempt to 
provide a good look-up service for those who cannot handle huge amounts of data, or are at a 
place where they cannot store data on their local machine. 
<br>
<br>
In the meanwhile, please use this:
<br><br>
<a href="http://hfradio.org/swbc/">http://hfradio.org/swbc/</a><br><br>
</blockquote>
</div>
</body>
</html>
YE1

	} else {

		$conn = Pg::connectdb("dbname=swl user=tomas");

		if (! PGRES_CONNECTION_OK eq $conn->status) {

			$okToGoOn = 0;
			$message = "Error hooking up to the database.  Message is<br>";
			$message .= $conn->errorMessage . "<br>\n";
			print STDERR "No postgresql connection...\n";
					print $html_header;
					print <<YE2;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Database Down for a while...</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="FFFFFF">
<div align=center>
<font face="verdana" size="-1">
Hello.
<br><br>
The database is down right now.  Please try later.
</font>
</body>
</html>
YE2
		} else {

			#print STDERR "postgresql connection ok ... \n";
			@foundItems = ();

			@downloadList = ();

			if (exists ($field{'private'})) {
				$private = $field{'private'};
			}

			if (! exists ($field{'search'})) {
				&showForm(1);
			} else {

				if (0) {
				} else {

					$theSearch = $field{'freq'};
				
					$theSearch =~ tr/\.\,\-\=\+\;\://d;
					$theSearch =~ tr/ //d;
					$theSearch =~ tr/a-zA-Z//d;
					$theSearch .= ".00";
					
					$result = $conn->exec("
						SELECT *
						FROM schedule_flat
						WHERE
							freq = '$theSearch'
					");
		#	koid char (20) UNIQUE NOT NULL,
		#	freq char (8) NOT NULL,
		#	station varchar (60) NOT NULL,
		#	utc_time_start time NOT NULL,
		#	utc_time_end time NOT NULL,
		#	days char (7),
		#	lang varchar (50),
		#	country varchar (30),
		#	target varchar (30),
		#	location varchar (40),
		#	power varchar (20),
		#	azimuth varchar (3),
		#	remarks varchar (30),
		#	modulation varchar (6),
		#	longitude varchar (6),
		#	latitude varchar (6),
		#	region varchar (20),
		#	program varchar (40),

					if (!PGRES_TUPLES_OK eq $result->resultStatus) {
						$okToGoOn = 0;
						$message = "Error getting the data out of the database.  Message is<br>";
						$message .= $conn->errorMessage . "<br>\n";
						print STDERR "No good: $message\n";
					} else {

						while (@swl_field = $result->fetchrow) {
							my ($oid,$freq,$station,$utcTimeStart,$utcTimeEnd,$days,$lang,$country,$target,$location,$power,$azimuth,$remarks,$modulation,$long,$lat,$region,$program) = @swl_field;

							if ($power =~ m|^(\d+)\.000$|) {
								$power = $1;
							} elsif ($power =~ m|^[0]+\.(.*)|) {
								$power = $1;
							}
							$freq =~ tr/ //d;

							$utcTimeStart =~ tr/\://d;
							$utcTimeStart =~ m|(\d\d\d\d)\d\d|;
							$utcTimeStart = $1;
							$utcTimeEnd =~ tr/\://d;
							$utcTimeEnd =~ m|(\d\d\d\d)\d\d|;
							$utcTimeEnd = $1;

							$count++;
							my $utcTime = $utcTimeStart . "-" . $utcTimeEnd;
							my $newRec = "$freq\t$utcTime\t$station\t$days\t$lang\t$country\t$target\t$power";
							push (@foundItems, $newRec);
						}
						my $count = @foundItems;
			
						if ($count) {

							$tt = "<tr><td>_freq_</td><td>_time_</td><td>_station_</td><td>_country_</td><td>_days_</td><td>_lang_</td><td>_target_</td><td>_power_</td></tr>\n";

							$theTable = "<div>\n";
							$theTable .= "<blockquote>Yellow highlights current transmissions</blockquote>\n";
							$theTable .= "</div><div align=\"center\">\n";
							$theTable .= "<table width=\"95\%\" border=1 bgcolor=\"\#FFFFFF\"><tr><td><table border=0 cellpadding=3 cellspacing=0 width=\"100\%\">\n";
							$trh = $tt;
							$trh =~ s|<td>|<td align=center>|ig;
							$trh =~ s|_freq_|<b>FREQ</b>|ig;
							$trh =~ s|_time_|<b>Time</b>|ig;
							$trh =~ s|_station_|<b>Station</b>|ig;
							$trh =~ s|_country_|<b>Country</b>|ig;
							$trh =~ s|_lang_|<b>Language</b>|ig;
							$trh =~ s|_days_|<b>Days</b>|ig;
							$trh =~ s|_target_|<b>Target</b>|ig;
							$trh =~ s|_power_|<b>Power (kW)</b>|ig;
							$theTable .= $trh;

							$tnum = 0;
							$color = 0;
							foreach $stationRec (sort (@foundItems)) {
								my ($tRow) = $tt;
								my ($freq,$utcTime,$station,$days,$lang,$country,$target,$power) = split(/\t/, $stationRec);
								$tnum++;
								if ($color == 0) {
									$tRow =~ s|<tr>|<tr bgcolor\=\"\#E8E8E8\">|ig;
									$tRow =~ s|<td>|<td bgcolor\=\"\#E8E8E8\">|ig;
									$color = 1;
								} else {
									$color = 0;
								}
								$utcTime =~ m|^(\d{4})[^\d]*(\d{4})$|imsg;
								my ($startTime_) = $1;
								my ($endTime_)   = $2;
								#print STDERR "st_ = [$startTime_], et_ = [$endTime_]\n";

								if (
									(($showTime >= $startTime_) && ($showTime <= $endTime_)) 
									|| (($showTime >= $startTime_) && (($endTime_ < $startTime_) && ($endTime_ < $showTime))) 
									|| (($startTime_ > $endTime_) && ($endTime_ > $showTime))
									) {
									$freq    = "<b>$freq</b>";
									$utcTime = "<b>$utcTime</b>";
									$station = "<b>$station</b>";
									$country = "<b>$country</b>";
									$lang    = "<b>$lang</b>";
									$days    = "<b>$days</b>";
									$tRow    =~ s|<tr.*?>|<tr bgcolor\=\"\#F0F4A6\">|ig;
									$tRow    =~ s|<td.*?>|<td bgcolor\=\"\#F0F4A6\">|ig;
								}
								$tRow =~ s|_freq_|$freq|ig;
								$tRow =~ s|_time_|$utcTime|ig;
								$tRow =~ s|_station_|$station|ig;
								$tRow =~ s|_country_|$country|ig;
								$tRow =~ s|_lang_|$lang|ig;
								$tRow =~ s|_days_|$days|ig;
								$tRow =~ s|_target_|$target|ig;
								$tRow =~ s|_power_|$power|ig;
								$theTable .= $tRow;
								if ($downloadOK) {
									my ($newFreqL) = $freq;
									my ($newStation) = $station;
									$newFreqL =~ s|\.||g;
									$newFreqL =~ s|\<b\>||g;
									$newFreqL =~ s|\</b\>||g;
									$newFreqL =~ s|^(\d+?)(\d\d\d)(\d\d)$|$1\.$2|;
									$newStation =~ s|\<b\>||g;
									$newStation =~ s|\</b\>||g;
									push(@downloadList, "$newStation\t$newFreqL\tAM\t\t");
								}
							}
							if ($downloadOK) {
								my ($rte_time) = `date -u +\"%Y-%d-%m_%H%M\"`;
								chop ($rte_time);
								my ($pid) = $$;
								my ($dlFileName) = "search_results" . "." . $pid . ".frq";
								$theTable .= "<tr><td colspan=6><br><a href=\"http://hfradio.org/hffreq/$dlFileName\">Shift-Click here to Download ";
								$theTable .= "Results for YPLog</a></td></tr>\n";
								open (OUTSF, "> /hfradio/html/hffreq/$dlFileName");
								foreach $sfreq (@downloadList) {
									print OUTSF "$sfreq\n";
								}
								close (OUTSF);
							}
							$theTable .= "</table></td></tr></table></div>\n";
						} else {
							$theTable = "<b>Nothing found for $theSearch</b><br><br>\n";
						}
						&showForm(2);
					}
				}
			}
		}
	}
}

sub showForm {
	my ($option) = @_;
	my $what = "";
	my $lastSearch = "<b>Last Five Searched:</b><br>\n";
	
	print $html_header;

	`tail -n 5 $theLogFile > $theLogFile.last`;
	open (RLOG, "$theLogFile.last");
	while (<RLOG>) {
		my $rLine = $_;
		if (m|Search\:\s+(\d+)|i) {
			$rLine =~ m|Search\:\s+(\d+)|i;
			$what = $1;
			$lastSearch .= "$what<br>\n";
		}
	}
	close (RLOG);

	open (STYLE, "$styleSheet") || die "Could not read $styleSheet: $!\n";
	$_style = "";
	while (<STYLE>) {
		$_style .= $_;
	}
	close (STYLE);

	open (MENU, "$theMenu") || die "Could not read $theMenu: $!\n";
	$_menu = "";
	while (<MENU>) {
		$_menu .= $_;
	}
	close (MENU);

	if ($option == 1) {

		$templateFile = $templateDir . "/_hffreq1.tpl";
		$htmlTemplate = &getTemplateHTML($templateFile);
		$_title = "Search for SWL Broadcasters by Frequency at HFRadio.org";
		$htmlTemplate =~ s|_TITLE_|$_title|imsg;
		$htmlTemplate =~ s|_STYLE_|$_style|imsg;
		$htmlTemplate =~ s|_NAVMENU_|$_menu|imsg;
		$htmlTemplate =~ s|_PROPAGATION_|$solarReport|imsg;
		$htmlTemplate =~ s|_LASTSEARCH_|$lastSearch|imsg;
		$htmlTemplate =~ s|_LINKS_|$theLinks|imsg;
		
		print $htmlTemplate;
	} else {
		if (length($theSearch)) {
			open (LOG, ">>$theLogFile");
			print LOG "[$gmtDay $gmtTime] Search: $theSearch\n";
			close (LOG);
		}
		$templateFile = $templateDir . "/_hffreq2.tpl";
		$htmlTemplate = &getTemplateHTML($templateFile);

		$_title = "Search Results for SWL Broadcasters by Frequency at HFRadio.org";
		$htmlTemplate =~ s|_TITLE_|$_title|imsg;
		$htmlTemplate =~ s|_STYLE_|$_style|imsg;
		$htmlTemplate =~ s|_NAVMENU_|$_menu|imsg;
		$htmlTemplate =~ s|_PROPAGATION_|$solarReport|imsg;
		$htmlTemplate =~ s|_LASTSEARCH_|$lastSearch|imsg;
		$htmlTemplate =~ s|_LINKS_|$theLinks|imsg;
		$htmlTemplate =~ s|_GMTTIME_|$showTime|imsg;
		$htmlTemplate =~ s|_SEARCHFOR_|$theSearch|imsg;
		$htmlTemplate =~ s|_THETABLE_|$theTable|imsg;
		
		print $htmlTemplate;

	}
}

sub GetFormInput {

	(*fval) = @_ if @_ ;

	local ($buf);
	if ($ENV{'REQUEST_METHOD'} eq 'POST') {
		read(STDIN,$buf,$ENV{'CONTENT_LENGTH'});
	}
	else {
		$buf=$ENV{'QUERY_STRING'};
	}
	if ($buf eq "") {
			return 0 ;
		}
	else {
 		@fval=split(/&/,$buf);
		foreach $i (0 .. $#fval){
			($name,$val)=split (/=/,$fval[$i],2);
			$val=~tr/+/ /;
			$val=~ s/%(..)/pack("c",hex($1))/ge;
			$name=~tr/+/ /;
			$name=~ s/%(..)/pack("c",hex($1))/ge;

			if (!defined($field{$name})) {
				$field{$name}=$val;
			}
			else {
				$field{$name} .= ",$val";
			}


		   }
		}
return 1;
}

sub doSolarData {

	$solarReport = "";

	$solarReport = "<small>| Current Solar Flux: <b>";
	open (PIN, "/hfradio/html/prop/.flux.txt")
 || die "Could not read /hfradio/html/prop/.flux.txt : $! \n";

	my ($line) = "";
	while (<PIN>) {
		$line = $_;
		$line =~ tr/\n\r\t//d;
		$solarReport .= $line;
	};
	close(PIN);
	$solarReport .= "</b> |<br>\n| A-index: <b>";
	open (PIN, "/hfradio/html/prop/.aindex.txt")
 || die "Could not read /hfradio/html/prop/.aindex.txt : $! \n";

	while (<PIN>) {
		$line = $_;
		$line =~ tr/\n\r\t//d;
		$solarReport .= $line;
	};
	close(PIN);
	$solarReport .= "</b> | K-index: <b>";
	open (PIN, "/hfradio/html/prop/.kindex.txt")
 || die "Could not read /hfradio/html/prop/.kindex.txt : $! \n";

	while (<PIN>) {
		$line = $_;
		$line =~ tr/\n\r\t//d;
		$solarReport .= $line;
	};
	close(PIN);
	$solarReport .= "</b> |<br>\n| Aurora: <b>";
	open (PIN, "/hfradio/html/prop/.aurora_level.txt")
 || die "Could not read /hfradio/html/prop/.aurora_level.txt : $! \n";

	while (<PIN>) {
		$line = $_;
		$line =~ tr/\n\r\t//d;
		$solarReport .= $line;
	};
	close(PIN);
	$solarReport .= "</b> |<br>\n | <a href=\"http://hfradio.org/propagation.html\">more...</a> |</small>\n";

}

sub getTemplateHTML {
	my ($tFile) = @_;
	my $tLines = "";
	open (TIN, "$tFile") || die "Could not read $tFile : $!\n";
	while (<TIN>) {
		$tLines .= $_;
	}
	close (TIN);
	$tLines;
}

1;
