#!/usr/bin/perl -w

# $Revision: 1.4 $
# $Author: mmueller $
# $Date: 2003/12/11 09:01:36 $

use strict;
use CGI;

# -------------------------------------------------------------
# config vars
# -------------------------------------------------------------

my $sPage        = "0";
my $p            = 1;
my $pm           = 0;
my $pn           = 0;
my $mode         = "clm";
my $sFile        = "tur.txt";
my $sTitle       = "Mc Mahon Tabelle";
my $sH1          = "Tabelle";


# -------------------------------------------------------------
# global vars
# -------------------------------------------------------------

my %line;
my %line_special;
my @msg;
my $max = 0;   # found max players (on place 1..max)
my $q = new CGI;


# -------------------------------------------------------------
# process CGI params
# -------------------------------------------------------------

$sPage        = $q->param("page") if (defined $q->param("page"));
$sFile        = $q->param("f") if (defined $q->param("f"));
$mode         = $q->param("mode") if (defined $q->param("mode"));
$p            = $q->param("p") if (defined $q->param("p"));
$pm           = $q->param("pm") if (defined $q->param("pm"));
$pn           = $q->param("pn") if (defined $q->param("pn"));

{
    if (open (IF, "<$sFile.msg")) {
        while (<IF>) {
            chomp();
            push (@msg, $_);
        }
        close (IF);
        $sTitle   = $msg[0] if ((defined $msg[0]) && $msg[0] ne "");
        $sH1      = $msg[1] if ((defined $msg[1]) && $msg[1] ne "");
    }
}

my $script    = $q->script_name() . "?f=$sFile";

my $bUseColor    = (index($mode, 'c') >= 0) ? 1 : 0;
my $bUseLinks    = (index($mode, 'L') >= 0) ? 2 : (index($mode, 'l') >= 0) ? 1 : 0;
my $bResultMarks = (index($mode, 'm') >= 0) ? 1 : 0;
my $bTopNavigation = (index($mode, 't') >= 0) ? 1 : 0;
my $bBottomNavigation = (index($mode, 'b') >= 0) ? 1 : 0;
my $bDebug = (index($mode, '@') >= 0) ? 1 : 0;
my $nRounds = 0;
my $nColFirstRound = 0;
my $nColLastRound = 0;

# -------------------------------------------------------------
# main
# -------------------------------------------------------------

header();
debug();
read_file();
 SWITCH: {
     if ($sPage eq "1") { page_1 (); last SWITCH; }
     if ($sPage eq "0") { page_0 (); last SWITCH; }
 }
footer();

sub debug
{
    if ($bDebug) {
        print ("\$sTitle=$sTitle<br>\n");
        print ("\$bUseColor=$bUseColor<br>\n");
        print ("\$bUseLinks=$bUseLinks<br>\n");
        print ("\$bResultMarks=$bResultMarks<br>\n");
        print ("\$sPage=$sPage<br>\n");
        print ("\$sFile=$sFile<br>\n");
        print ("\$mode=$mode<br>\n");
        print ("\$p=$p<br>\n");
        print ("\$pm=$pm<br>\n");
        print ("\$pn=$pn<br>\n");
    }
}


# -------------------------------------------------------------
# helper
# -------------------------------------------------------------

sub read_file
{
    $sFile =~ qr"^\w+\.txt$" or die "invalid filename\n";
    open(IF, "<", $sFile) || print "error opening file\n";
    while (<IF>) {
        my @row = split(/\t/);
        if (not defined $row[0]) {
        }
        elsif ($row[0] =~ /^Pl/) {
            $line_special{0} = [@row[0..scalar(@row)-1]];
            my $nStatus = 1;
            for (my $nCol = 0; $nCol < @row; $nCol++) {
                if ($nStatus == 1) {
                    if ($row[$nCol] eq "1") {
                        $nRounds = 1;
                        $nStatus = 2;
                        $nColFirstRound = $nCol;
                    }
                }
                elsif ($nStatus == 2) {
                    if ($row[$nCol] eq $nRounds+1) {
                        $nRounds = $nRounds+1;
                        $nStatus = 2;
                    }
                    else {
                        $nStatus = 3;
                        $nColLastRound = $nCol-1;
                    }
                }
                elsif ($nStatus == 3) {
                }
            }
        }
        else {
            $line{$max++} = [@row[0..scalar(@row)-1]];
        }
    }
}


sub page_0
{
    my $bg = "";
    if ($bUseColor) {
        $bg = " bgcolor=\"#eeeeee\"";
    }
    print "<TABLE$bg>\n";
    my $l = ($bUseLinks) ? "l" : "";
    print_line_special (0, "Rr$l");
    for (my $i = 0; $i < $max; $i++) {
        if (($i >= ($p-1)-($pm-1) || ($pm == 0 && $i >= $p-1))  &&  ($i <= ($p-1)+($pn-1) || $pn == 0)) {
            print_line ($i, "Rrc$l");
        }
    }
    print "</TABLE>\n";
}


sub page_1
{
    my $bg = "";
    if ($bUseColor) {
        $bg = " bgcolor=\"#eeeeee\"";
    }
    my $l = ($bUseLinks) ? "l" : "";

    print "<TABLE$bg>\n";
    print_line_special (0, "R+r");
    print "<TR><TD>Player</TD>";
    print_line ($p-1, "rc$l");
    print_line_dummy (0, "Rw+r");
    print_line_special (0, "R+ro");
    my @row = @{$line{$p-1}};
    for (my $nCol = $nColFirstRound; $nCol <= $nColLastRound; $nCol++) {
        my $nOpp = $row[$nCol];
        $nOpp =~ s/[^0-9]*//g;
        my $nRound = $nCol-4;
        print "<TR><TD>Round $nRound</TD>";
        if ($nOpp =~ /^[0-9]+$/) {
            print_line ($nOpp-1, "rc$l");
        }
        else {
            print_line_dummy (0, "r");
        }
    }
    print "</TABLE>\n";
}


# -------------------------------------------------------------
# header, footer
# -------------------------------------------------------------

sub print_line ( $$ )
{
    my $i = shift;
    my $o = shift;
    my @row = @{$line{$i}};
    if (index($o,'R') >= 0)  {
        print "<TR>" ;
        if (index($o,'g') >= 0)  { print "<font color=white>" ; }
    }
    if (index($o,'+') >= 0)  { print "<TD>&nbsp;</TD>"; }
    {
        print "<TD>";
        p_html($row[0]);
        print "</TD>";
    }
    {
        my $t = $i+1;
        print "<TD>";
        print "<a href=$script&p=$t&pm=$pm&pn=pn&mode=$mode&page=1>" if (index($o,'l') >= 0);
        p_html($row[1]);
        print "</a>" if (index($o,'l') >= 0);
        print "</TD>";
    }
    for (my $nCol = 2; $nCol < $nColFirstRound; $nCol++) {
        print "<TD>";
        p_html($row[$nCol]);
        print "</TD>";
    }
    for (my $nCol = $nColFirstRound; $nCol <= $nColLastRound; $nCol++) {
        print "\<TD";
        print get_result_bg_color($row[$nCol]) if (index($o,'c') >= 0);
        print "\>";
        p_html($row[$nCol]);
        print "</TD>";
    }
    for (my $nCol = $nColLastRound+1; $nCol < @row; $nCol++) {
        print "<TD>";
        p_html($row[$nCol]);
        print "</TD>";
    }
    if (index($o,'r') >= 0)  { print "</TR>" ; }
}


sub print_line_special ( $$ )
{
    my $i = shift;
    my $o = shift;
    my @row = @{$line_special{$i}};
    if (index($o,'R') >= 0)  { print "<TR>" ; }
    if (index($o,'+') >= 0)  { print "<TD>&nbsp;</TD>"; }
    if (index($o,'u') >= 0)  {
        print "<TD><a href=$script&p=1&mode=$mode&page=0>up</a></TD>";
    }
    {
        print "<TD>";
        p_html($row[0]);
        print "</TD>";
    }
    {
        print "<TD>";
        if   (index($o,'o') >= 0) { p_html("Opponent"); }
        else                      { p_html("Name"); };
        print "</TD>";
    }
    for (my $nCol = 2; $nCol < @row; $nCol++) {
        print "<TD>";
        p_html($row[$nCol]);
        print "</TD>";
    }
    if (index($o,'r') >= 0)  { print "</TR>" ; }
}


sub print_line_dummy ( $$ )
{
    my $i = shift;
    my $o = shift;
    my @row = @{$line_special{0}};
    if (index($o,'R') >= 0)  {
        print "<TR" ;
        if (index($o,'w') >= 0)  { print " bgcolor=\"#ffffff\"" ; }
        print ">";
    }
    if (index($o,'+') >= 0) {
        if    ($i == -1  ||  $i == +1)  {
            my $t = $p+$i;
            my $text = ($i == 1) ? "next" : "prev";
            print "<TD><a href=$script&p=$t&pm=$pm&pn=pn&mode=$mode&page=1>$text</a></TD>";
        }
        else {
            print "<TD>&nbsp;</TD>";
        };
    }
    for (my $nCol = 0; $nCol < @row; $nCol++) {
        print "<TD>&nbsp;</TD>";
    }
    if (index($o,'r') >= 0)  { print "</TR>" ; }
}


# -------------------------------------------------------------
# header, footer
# -------------------------------------------------------------

sub header
{
    print "Content-type: text/html\n\n";
    print "<HTML><HEAD>";
    print "<TITLE>" . $sTitle . "</TITLE>";
    print "</HEAD><BODY bgcolor=\"#FFFFFF\">\n ";

    if ($sH1) {
        print "<h1>$sH1</h1>";
    }

    print "<a href='/info-und-service/nachrichtenarchiv-2001-2019/'><button>Zur&uuml;ck zum Archiv</button></a><br /><br />";


    if ($bTopNavigation) {
        print "<a href=$script&p=1&pn=$pn>Top</a>";
        print "<a href=$script&p=1&pn=$pn>Bottom</a>";
        print "<hr>";
    }
}

sub footer
{


    if ($sPage eq "1") {
        print "<br>";
        print "<a href=$script&p=1&mode=$mode&page=0>up</a>";
        print ", ";
        if ($p > 1) {
            my $t = $p-1;
            print "<TD><a href=$script&p=$t&pm=$pm&pn=pn&mode=$mode&page=1>prev</a></TD>";
        }
        else {
            print "<TD>prev</TD>";
        }
        print ", ";
        if ($p < $max) {
            my $t = $p+1;
            print "<TD><a href=$script&p=$t&pm=$pm&pn=pn&mode=$mode&page=1>next</a></TD>";
        }
        else {
            print "<TD>next</TD>";
        }

        if ($bBottomNavigation) {
            print "<hr>";
            print "<a href=$script&p=1&pn=$pn>Top</a>";
            print "<a href=$script&p=1&pn=$pn>Bottom</a>";
        }
    }
    print "<br /><br /><a href='/info-und-service/nachrichtenarchiv-2001-2019/'><button>Zur&uuml;ck zum Archiv</button></a>";

    print "</BODY></HTML>\n";
}


# -------------------------------------------------------------
# helper
# -------------------------------------------------------------

sub get_result_bg_color ( $ )
{
    my $cell = shift;
    my $bg = "";
    if ($bUseColor) {
        $bg = " bgcolor=\"#ddddee\"" if ($cell =~ /^free$/);
        $bg = " bgcolor=\"#ddddee\"" if ($cell =~ /^--$/);
        $bg = " bgcolor=\"#ddeedd\"" if ($cell =~ /\+[!]?$/);
        $bg = " bgcolor=\"#eedddd\"" if ($cell =~ /[^-]-[!]?$/);
        $bg = " bgcolor=\"#f8f8dd\"" if ($cell =~ /=[!]?$/);
    }
    return $bg
}

sub wash_result_marks ( $ )
{
    my $s = shift;
    if (!$bResultMarks) {
        $s =~ s/\+$//;
        $s =~ s/\+!$/!/;
        $s =~ s/\-$//;
        $s =~ s/\-!$/!/;
        $s =~ s/\=$//;
        $s =~ s/\=!$/!/;
        $s =~ s/-/--/;
    }
    return $s;
}




sub s2html ( $ )
{
    my $s = shift;
    return "&nbsp;" if (not defined $s);
    $s =~ s/&/&amp;/g;
    $s =~ s/</&lt;/g;
    $s =~ s/>/&gt;/g;
    $s =~ s/¼/&frac14;/g;
    $s =~ s/½/&frac12;/g;
    $s =~ s/¾/&frac34;/g;
    $s =~ s/\n/<br>/g;
    $s =~ s/  /&nbsp;/g;
    $s="&nbsp;" if ($s eq " ");
    $s="&nbsp;" if ($s eq "");
    return $s;
}

sub p_html ( $ )
{
    my $s = shift;
    print s2html($s);
}
