#! /usr/local/bin/perl

require "support.pl";

%form = getFormData();

$type = $form{type};
$dir = "$root/$type";
ReportError("No page <B>TYPE</B> was specified.") unless defined($type);
ReportError("Type <B>$type</B> is not defined.") unless (-e $dir);

$key = $form{key};

if ($key) {ReadOne($key)} else {ListAll()}
exit;

###########################################################################

sub ReadOne {
  my $key = shift;
  my ($name,$email,$nomail,$title,$date,$format,$user,$message) =
        getData($dir,$key);
  my ($prev,$next) = getPrevNext($key);
  my ($tfb,$tfb_name,$tfb_date,$tfb_title,$tfb_message) = getResponse($dir,$key);
  ShowFile("read$tfb",
    "%type%"        => $type,
    "%Type%"        => ucfirst($type),
    "%key%"         => $key,
    "%next%"        => $next,
    "%prev%"        => $prev,
    "%name%"        => $name,
    "%title%"       => $title,
    "%date%"        => $date,
    "%message%"     => $message,
    "%email%"       => $nomail? '': $email,
    "%disabled%"    => $nomail? ' DISABLED': '',
    "%tfb_name%"    => $tfb_name,
    "%tfb_date%"    => $tfb_date,
    "%tfb_title%"   => $tfb_title,
    "%tfb_message%" => $tfb_message,
  );
}

###########################################################################

sub ListAll {
  my @Table = (); my @keys = getKeys($dir);
  foreach my $key (@keys) {push(@Table,getRow($key))}
  @Table = ('<TR><TD COLSPAN="3"></TD><TD ALIGN="CENTER"><I>No Messages Available</TD></TR>')
    if (scalar(@Table) == 0);
  ShowFile("list",
    "%type%"  => $type,
    "%Type%"  => ucfirst($type),
    "%table%" => join('<TR><TD HEIGHT="3"></TD></TR>'."\n",@Table),
    "%first%" => (scalar(@keys) > 0)? "read.cgi?type=$type&key=$keys[0]": "../../messages.html",
  );
}

###########################################################################
###########################################################################

sub getData {
  my $dir = shift; my $key = shift;
  ReportError("Unrecognized key <B>$key</B>")
    unless ($key =~ m/[-\d]+\.[-\d]+\.\d+\.([-_a-zA-Z0-9]+)/);
  my ($name,$email,$nomail,$userid) = getUserData($key);
  my ($last,$first,$rest) = split(",",$name,3);
  $rest = ", $rest" if $rest; $name = "$first $last$rest";
  my @data = getMessageData($dir,$key); shift @data;
  return ($name,$email,$nomail,@data);
}

###########################################################################

sub getKeys {
  my $dir = shift;
  opendir(NAMES,$dir) || ReportError("Can't read directory for <B>$type</B>:<BR>$!");
  my @files = readdir(NAMES);
  closedir(NAMES);
  my @keys = ();
  foreach my $key (reverse(sort(grep(/^[-\d]+\.[-\d]+\.\d+.[-_a-zA-Z0-9]+$/,@files)))) {
    push(@keys,$key) if (-e "$dir/$key/.data");
  }
  return @keys;
}

###########################################################################

sub getPrevNext {
  my $key = shift;
  my @keys = getKeys($dir);
  my ($prev,$next) = ("","");
  foreach my $i (0..$#keys) {
    if ($key eq $keys[$i]) {
      $prev = "&key=$keys[$i-1]" if $i > 0;
      $next = "&key=$keys[$i+1]" if $i < $#keys;
      break;
    }
  }
  return ($prev,$next);
}

###########################################################################

sub getRow {
  my $key = shift;
  my ($name,$email,$nomail,$title,$date) = getData($dir,$key);
  $name .= ' <I><SMALL>&amp;</SMALL> TFB</I>' if (-e "$dir/$key/.data-tfb");
  return '<TR VALIGN="TOP"><TD></TD><TD NOWRAP><SMALL>'.$date.'</SMALL></TD><TD></TD>'."\n".
         '<TD><A HREF="read.cgi?type='.$type.'&key='.$key.'">'.$title.'</A></TD>'."\n".
         '<TD></TD><TD NOWRAP>'.$name.'</TD></TR>';
}

###########################################################################

sub getResponse {
  my $dir = shift; my $key = shift;
  return('','','','','') unless (-e "$dir/$key/.data-tfb");
  my ($name,$email,$nomail,$userid) = getUserData($TFB);
  my ($last,$first) = split(",",$name); $name = "$first $last";
  my ($otitle,$title,$date,$format,$user,$message) = getMessageData($dir,$key,"-tfb");
  $title = "<CENTER><H2>$title</H2></CENTER>" if $title;
  return("-tfb",$name,$date,$title,$message);
}

###########################################################################

1;
