#!/usr/bin/perl
# Zobrazí propozice turnaje předaného parametrem.
# Copyright © 2004-2013 Dan Zeman <zeman@ufal.mff.cuni.cz>
# Licence: GNU GPL

# 27.9.2009: kvůli Pětimysli teď navíc udáváme, zda je turnaj víceblokový
# 4.7.2013: organizační tým by nebyl šťastný, kdyby si každý rok nevynutil přeprogramování práce se vstupným a startovným

use utf8; # říct Perlu, že konstantní řetězce ve zdrojáku jsou v UTF
use open ":utf8"; # budeme-li otvírat statické propozice, Perl musí vědět, že jsou v UTF-8
use Encode; # knihovna pro překódování ne-ASCII znaků
use DBI; # spolupráce se serverem MySQL
# Říct Perlu, kde najde Danovy sdílené knihovny.
# CGI skripty běží pod uživatelem apache, který nemá tyto knihovny v cestě.
use lib '/s/w/lib/dan';
use dancgi; # čtení parametrů z webu nebo z ARGV
use cas; # práce s daty a časem
use jazyky; # jazykové verze textů
use mso; # funkce pro generování stránek o olympiádě
binmode(STDOUT, ':utf8'); # říct Perlu, že UTF chceme i na výstupu



# Připojit se k databázi.
$databaze = mso::pripojit_se_k_databazi();



# Výchozí nastavení parametrů. Může být přebito parametry z URL/ARGV.
mso::provest_vychozi_nastaveni_parametru(\%konfig, $databaze);
# Načíst parametry z URL.
dancgi::cist_parametry(\%konfig);
# Umožnit volat skript z příkazového řádku a předat parametry tam (např. perl partie.pl zdroj=cas).
dancgi::rozebrat_parametry($ARGV[0], \%konfig);
# Opsat z parametrů jazyk a pak doplnit jazykově závislé hodnoty.
$konfig{jazyk} = "cs" if($konfig{jazyk} eq "");
$jazyky::jazyk = $konfig{jazyk};



# Zjistit z databáze údaje o akci.
$akce = zjistit_udaje_o_akci($konfig{rok}, $konfig{hra}, $konfig{turnaj});



# Vypsat propozice.
mso::vypsat_stranku(
{
    "nazev"  => "MSO: $konfig{rok}: Propozice",
    "nadpis" => $akce->{jazyky::zjistit("klic_nazev")},
    "telo"   => propozice($akce, \%konfig),
    "rok"  => $konfig{rok},
});



###############################################################################
# PODPROGRAMY
###############################################################################



#------------------------------------------------------------------------------
# Zjistí údaje o akci.
#------------------------------------------------------------------------------
sub zjistit_udaje_o_akci
{
    my $rok = shift;
    my $hra = shift;
    my $turnaj = shift;
    my %akce;
    # Propozice Pětimysli se mají zobrazit bez ohledu na to, zda a jak je Pětimysl pro tento rok uvedena v databázi.
    # Proto pro Pětimysl pouze zkopírovat kódy a databáze se na nic neptat.
    if($hra eq 'pet')
    {
        %akce =
        (
            'rok'         => $rok,
            'kod_hry'     => $hra,
            'kod_turnaje' => $turnaj
        );
        return \%akce;
    }
    # Načíst z databáze údaje o akci.
    my $nazev_jazyk = jazyky::zjistit("klic_nazev");
    my $nazev_hry_jazyk = jazyky::zjistit("klic_nazev_hry");
    my $kdo_se_muze_zucastnit_jazyk = jazyky::zjistit("klic_kdo_muze");
    my $hraci_system_jazyk = jazyky::zjistit("klic_hraci_system");
    my $kriteria_jazyk = jazyky::zjistit("klic_kriteria");
    my $pocet_kol_jazyk = jazyky::zjistit("klic_pocet_kol");
    my $tempo_jazyk = jazyky::zjistit("klic_tempo");
    my $cena1_jazyk = jazyky::zjistit("klic_1_cena");
    my $cena2_jazyk = jazyky::zjistit("klic_2_cena");
    my $cena3_jazyk = jazyky::zjistit("klic_3_cena");
    my $dalsi_ceny_jazyk = jazyky::zjistit("klic_dalsi_ceny");
    my $poznamka_jazyk = jazyky::zjistit("klic_poznamka");
    my @nazvy =
    (
        "rok", "kod_hry", "kod_turnaje",
        "pentamind", "pocet_casobloku", "pentaskup", $nazev_jazyk, $nazev_hry_jazyk,
        "propozice", "zacatek", "zacatek_1_kola", "konec", "mistnost", "kapacita",
        $kdo_se_muze_zucastnit_jazyk, "prihlasky", $hraci_system_jazyk, $kriteria_jazyk, $pocet_kol_jazyk, $tempo_jazyk,
        'plus_vstup', 'startovne', 'startovne_2', 'startovne_3', 'startovne_4', 'startovne_sleva', 'organizator', 'organizator2',
        $cena1_jazyk, $cena2_jazyk, $cena3_jazyk, $dalsi_ceny_jazyk, "porizovaci_cena", "celkova_hodnota", "foto_ceny", "sponzor",
        $poznamka_jazyk, "tiskova_zprava", "pocet_ucastniku", "pocet_prihlasenych"
    );
    my $nazvy = join(", ", @nazvy);
    my $dotaz = "SELECT $nazvy FROM akce WHERE (rok = '$rok') AND (kod_hry = '$hra') AND (kod_turnaje = '$turnaj')";
    my $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    my @radek = map{decode("utf8", $_)}($dtzobj->fetchrow_array());
    for(my $i = 0; $i<=$#nazvy; $i++)
    {
        $akce{$nazvy[$i]} = $radek[$i];
    }
    # Oddělit data od časů.
    if($akce{zacatek} =~ m/^(\d+)\.(\d+)\.(\d+) (\d+):(\d+):\d+$/)
    {
        $akce{_zacatek_datum_rok} = "$1.$2.$3";
        $akce{_zacatek_datum} = "$1.$2.";
        $akce{_zacatek_den} = sprintf("%02d", $1);
        $akce{_zacatek_cas} = "$4:$5";
    }
    if($akce{konec} =~ m/^(\d+)\.(\d+)\.(\d+) (\d+):(\d+):\d+$/)
    {
        $akce{_konec_datum_rok} = "$1.$2.$3";
        $akce{_konec_datum} = "$1.$2.";
        $akce{_konec_den} = sprintf("%02d", $1);
        $akce{_konec_cas} = "$4:$5";
    }
    if($akce{zacatek_1_kola} =~ m/^(\d+)\.(\d+)\.(\d+) (\d+):(\d+):\d+$/)
    {
        $akce{_zacatek1_datum} = "$1.$2.";
        $akce{_zacatek1_cas} = "$4:$5";
    }
    # Zjistit z databáze rezervační bloky a místnosti.
    my $zdroj = "rezervace LEFT JOIN mistnosti ON rezervace.mistnost = mistnosti.mistnost WHERE (rok = '$rok') AND (kod_hry = '$hra') AND (kod_turnaje = '$turnaj')";
    my $bloky = mso::dotazat_se_databaze($databaze, 'rok', 'kod_hry', 'kod_turnaje', 'den', 'rezervace.mistnost AS mistnost', 'budova', 'blok', $zdroj);
    $akce{bloky} = $bloky;
    # Zapamatovat si seznam místností v chronologickém pořadí, ale každou místnost jen jednou.
    my @mistnosti;
    my %mistnosti;
    foreach my $blok (@{$bloky})
    {
        my $mistnost = "$blok->{mistnost}, $blok->{budova}";
        unless(exists($mistnosti{$mistnost}))
        {
            push(@mistnosti, $mistnost);
            $mistnosti{$mistnost}++;
        }
    }
    $akce{mistnosti} = \@mistnosti;
    return \%akce;
}



#------------------------------------------------------------------------------
# Vypíše tělo propozic k dané hře.
#------------------------------------------------------------------------------
sub propozice
{
    my $akce = shift;
    my $konfig = shift;
    my $stranka;
    # Propozice Pětimysli mají svou vlastní funkci.
    if($akce->{kod_hry} eq 'pet')
    {
        return petimysl($akce, $konfig);
    }
    my $nazev_jazyk = jazyky::zjistit("klic_nazev");
    my $nazev_hry_jazyk = jazyky::zjistit("klic_nazev_hry");
    my $kdo_se_muze_zucastnit_jazyk = jazyky::zjistit("klic_kdo_muze");
    my $hraci_system_jazyk = jazyky::zjistit("klic_hraci_system");
    my $kriteria_jazyk = jazyky::zjistit("klic_kriteria");
    my $pocet_kol_jazyk = jazyky::zjistit("klic_pocet_kol");
    my $tempo_jazyk = jazyky::zjistit("klic_tempo");
    my $cena1_jazyk = jazyky::zjistit("klic_1_cena");
    my $cena2_jazyk = jazyky::zjistit("klic_2_cena");
    my $cena3_jazyk = jazyky::zjistit("klic_3_cena");
    my $dalsi_ceny_jazyk = jazyky::zjistit("klic_dalsi_ceny");
    my $poznamka_jazyk = jazyky::zjistit("klic_poznamka");
    # Zjistit letošní datum pro včasnou přihlášku.
    my $vcasne_prihlasky_do = mso::zjistit_datum_vcasneho_prihlaseni($databaze, $akce->{rok});
    # Zobrazit fotku, pokud je k dispozici.
    if(-f "$konfig->{_cesta_html_system}/obr/fotky/$akce->{kod_hry}/$akce->{rok}$akce->{kod_hry}$akce->{kod_turnaje}01.jpg")
    {
       $stranka .= "<img src=\"$konfig->{_cesta_html_prohlizec}/obr/fotky/$akce->{kod_hry}/$akce->{rok}$akce->{kod_hry}$akce->{kod_turnaje}01.jpg\" align=right width=350>";
    }
    elsif(-f "$konfig->{_cesta_html_system}/obr/fotky/$akce->{kod_hry}/$akce->{kod_hry}$akce->{kod_turnaje}.jpg")
    {
       $stranka .= "<img src=\"$konfig->{_cesta_html_prohlizec}/obr/fotky/$akce->{kod_hry}/$akce->{kod_hry}$akce->{kod_turnaje}.jpg\" align=right width=350>";
    }
    elsif(-f "$konfig->{_cesta_html_system}/obr/fotky/$akce->{kod_hry}/$akce->{kod_hry}.jpg")
    {
       $stranka .= "<img src=\"$konfig->{_cesta_html_prohlizec}/obr/fotky/$akce->{kod_hry}/$akce->{kod_hry}.jpg\" align=right width=350>";
    }
#    $stranka .= "<h2>".jazyky::zjistit("propozice_turnaje")."</h2>";
    # Zjistit, ve kterých letech se tento turnaj konal.
    my $roky = mso::dotazat_se_databaze($databaze, "rok", "akce WHERE (kod_hry = '$akce->{kod_hry}') AND (kod_turnaje = '$akce->{kod_turnaje}')");
    my @odkazy_na_jine_roky;
    foreach my $rok (sort {$a <=> $b} (map{$_->{rok}}(@{$roky})))
    {
        if($rok==$akce->{rok})
        {
            push(@odkazy_na_jine_roky, $rok);
        }
        else
        {
            my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=propozice.pl", "rok=$rok");
            push(@odkazy_na_jine_roky, "<a href=\"index.pl?$parametry\" target=\"_top\">$rok</a>");
        }
    }
    if(scalar(@odkazy_na_jine_roky)>1)
    {
        $stranka .= "<p>".jazyky::zjistit("turnaj_se_konal_v_letech")." ".join(", ", @odkazy_na_jine_roky).".\n";
    }
    elsif(cas::ted()->{eden}>cas::datum2eden($akce->{_zacatek_datum_rok}))
    {
        $stranka .= "<p>".jazyky::zjistit("turnaj_se_konal_v_roce")." $odkazy_na_jine_roky[0].\n";
    }
    else
    {
        $stranka .= "<p>".jazyky::zjistit("turnaj_se_bude_konat_v_roce")." $odkazy_na_jine_roky[0].\n";
    }
    # Přidat odkaz na seznam přihlášených nebo na výsledky.
    if($akce->{kod_hry} eq "pet")
    {
        my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=pentamind.pl");
        $stranka .= jazyky::zjistit("vysledky_najdete_zde", $akce->{rok}, $parametry)."</p>\n";
    }
    else
    {
        # Nejdřív zjistit, jestli k této akci existují výsledky.
        my $dotaz = "SELECT COUNT(kod_osoby) AS pocet FROM vysledky WHERE (rok = '$akce->{rok}') AND (kod_hry = '$akce->{kod_hry}') AND (kod_akce = '$akce->{kod_turnaje}')";
        my $dtzobj = $databaze->prepare($dotaz);
        $dtzobj->execute();
        my @radek = map{decode("utf8", $_)}($dtzobj->fetchrow_array());
        my $n_vysledku = $radek[0];
        if($n_vysledku)
        {
            my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=vysledky.pl");
            $stranka .= "<p>".jazyky::zjistit("vysledky_najdete_zde", $akce->{rok}, $parametry)."</p>\n";
        }
    }
    # Přidat odkaz na seznam akcí v dané hře.
    my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=hra.pl");
    $stranka .= "<p>".jazyky::zjistit("seznam_akci_ve_hre_najdete_zde", $akce->{nazev_hry}, $parametry)."</p>\n";
    # Parametry přihlášky musíme uchystat už zde, protože je můžeme potřebovat jak uvnitř bloku s dynamickými propozicemi, tak na konci dyn. i stat. propozic.
    # Při volání přihlášky nepředávat kód hry a turnaje, je to zbytečné a omezíme
    # kombinatorickou explozi při převádění stránek na statické.
    my %parametry_prihlaska = %main::konfig;
    delete($parametry_prihlaska{text});
    delete($parametry_prihlaska{hra});
    delete($parametry_prihlaska{turnaj});
    my $odkaz_prihlaska = dancgi::sestavit_parametry_odkaz(\%parametry_prihlaska, "telo=prihlaska.pl");
    # Sestavit stránku s propozicemi akce.
    # Některé turnaje mají propozice uložené v samostatném souboru. U takových
    # turnajů ignorovat databázi a místo ní sem zkopírovat obsah dotyčného souboru.
    # Nespokojit se s tvrzením databáze, že statické propozice existují, zkontrolovat
    # skutečnou existenci souboru na disku.
    if($akce->{propozice} && -f "propozice/$jazyky::jazyk/$akce->{propozice}")
    {
        open(STATICKE, "propozice/$jazyky::jazyk/$akce->{propozice}");
        while(<STATICKE>)
        {
            $stranka .= $_;
        }
        close(STATICKE);
    }
    # Normální dynamické propozice z databáze.
    else
    {
        if($akce->{_konec_datum} eq $akce->{_zacatek_datum})
        {
            $stranka .= "<p><b>".jazyky::zjistit("turnaj_se_uskutecni")." ".jazyky::zjistit("den".cas::den_v_tydnu(cas::datum2eden($akce->{_zacatek_datum_rok}))."g")." $akce->{_zacatek_datum_rok} $akce->{_zacatek1_cas} - $akce->{_konec_cas}.</b></p>\n";
        }
        else
        {
            $stranka .= "<p><b>".jazyky::zjistit("turnaj_se_uskutecni")." $akce->{_zacatek_datum_rok} $akce->{_zacatek1_cas} - $akce->{_konec_datum_rok} $akce->{_konec_cas}.</b></p>\n";
        }
        if($akce->{prihlasky} =~ m/^volitelny\d+$/)
        {
            $stranka .= "<p>".jazyky::zjistit("propozice_volitelny_turnaj")."</p>\n";
        }
        $stranka .= "<p>".jazyky::zjistit("kdo_muze").": <b>".$akce->{$kdo_se_muze_zucastnit_jazyk}."</b></p>";
        # Uvést, zda se výsledky započítávají do Pětimysli, a pokud ano, tak za kterou hru.
        my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=propozice.pl", "hra=pet", "turnaj=oly");
        if($akce->{pentamind})
        {
            if($akce->{rok}<2009)
            {
                $stranka .= "<p>".jazyky::zjistit("propozice_pentamind_ano", $akce->{$nazev_hry_jazyk}, $parametry, 8*$akce->{pentaskup}, $akce->{pocet_casobloku})."</p>\n";
            }
            elsif($akce->{pentamind}==2)
            {
                $stranka .= "<p>".jazyky::zjistit("propozice_pentamind_velky", $akce->{$nazev_hry_jazyk}, $parametry, 8*$akce->{pentaskup}, 16*$akce->{pentaskup})."</p>\n";
            }
            else
            {
                $stranka .= "<p>".jazyky::zjistit("propozice_pentamind_maly", $akce->{$nazev_hry_jazyk}, $parametry, 8*$akce->{pentaskup})."</p>\n";
            }
        }
        else
        {
            $stranka .= "<p>".jazyky::zjistit("propozice_pentamind_ne", "", $parametry)."</p>\n";
        }
        # Zjistit, zda tuto hru máme v pokladnici a můžeme na ni udělat odkaz.
        my $db_hry = DBI->connect("DBI:mysql:hry") or print STDERR ("Nelze se pripojit k databazi: $DBI::errstr\n");
        my $kody_z_pokladnice = mso::dotazat_se_databaze($db_hry, "kod", "hry WHERE (kod = '$akce->{kod_hry}')");
        my $odkaz_do_pokladnice;
        if($kody_z_pokladnice->[0]{kod} eq $akce->{kod_hry})
        {
            $odkaz_do_pokladnice = "http://hrejsi.cz/cgi/hry/hry.pl?hra=$akce->{kod_hry}";
        }
        else
        {
            $odkaz_do_pokladnice = "http://hrejsi.cz/cgi/hry/hry.pl";
        }
        my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=text.pl", "text=ludoteka.htm");
        $stranka .= "<p>".jazyky::zjistit("trenovat_v_ludotece", $odkaz_do_pokladnice, $parametry)."</p>";
        my $odkaz_prihlaseni = dancgi::sestavit_parametry_odkaz(\%main::konfig, "telo=prihlaseni.pl");
        $stranka .= "<a href=\"index.pl?$odkaz_prihlaseni\" target=\"_top\"><img border=0 src=\"$main::konfig{_cesta_html_prohlizec}/obr/prihlaseni.gif\" class=\"nogallery\"></a>\n";
        # Jestliže akce ještě nezačala, upozornit hráče, aby se přihlásili včas.
        my $jeste_nezacalo = cas::ted()->{eden} < cas::datum2eden($akce->{_zacatek_datum_rok});
        if($jeste_nezacalo && $akce->{prihlasky} eq "předem")
        {
            $stranka .= jazyky::zjistit("jak_se_prihlasit", $vcasne_prihlasky_do, $odkaz_prihlaska, $odkaz_prihlaseni);
        }
        elsif($jeste_nezacalo && $akce->{prihlasky} eq "kvalifikovaní registrace")
        {
            $stranka .= jazyky::zjistit("registrace_kvalifikovanych", $odkaz_prihlaska);
        }
        elsif($akce->{prihlasky} eq "netřeba")
        {
            $stranka .= jazyky::zjistit("netreba_se_prihlasit");
        }
        # Výjimka 2011 pro Go: je třeba se přihlásit, ale mimo náš formulář: Janě Hricové; platit taky jí.
        elsif($akce->{prihlasky} eq 'jinde')
        {
            # Zde nevypisovat nic.
            # V přihláškovém formuláři se tato akce taky neobjeví.
        }
        elsif($akce->{prihlasky} eq "kapacita vyčerpána")
        {
            $stranka .= jazyky::zjistit("kapacita_plna");
        }
        $stranka .= "<table>\n";
        if($akce->{mistnost} ne "")
        {
            $stranka .= "<tr>\n";
            $stranka .= "  <td valign=top><b>".jazyky::zjistit('misto_konani').": </b></td>\n";
            my $mistnosti = join('<br/>', @{$akce->{mistnosti}});
            $stranka .= "  <td colspan=\"2\" valign=top> <a ".mso::odkaz($konfig, 'telo=text.pl', 'text=kde.htm').">$mistnosti</a></td>\n";
            $stranka .= "</tr>\n";
        }
        if($akce->{zacatek} ne "")
        {
            # Zobrazit datum pouze u vícedenních turnajů. U ostatních je zdatum a kdatum prázdný řetězec.
            my $zdatum;
            my $kdatum;
            if($akce->{_konec_datum} ne $akce->{_zacatek_datum})
            {
                $zdatum = $akce->{_zacatek_datum_rok}." ";
                $kdatum = $akce->{_konec_datum_rok}." ";
            }
            # Když je začátek prezentace a začátek 1.kola ve stejnou chvíli, není to turnaj, ale nějaká akce.
            if($akce->{zacatek_1_kola} eq $akce->{zacatek})
            {
                   $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("zacatek_akce").": </b></td><td colspan=\"2\"> $zdatum$akce->{_zacatek_cas}</td></tr>\n";
                   $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("konec_akce").": </b></td><td colspan=\"2\"> $kdatum$akce->{_konec_cas}</td></tr>\n";
            }
            else
            {
                   $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("harmonogram").": </b></td>\n";
                   $stranka .= "  <td valign=top>\n";
                   $stranka .= "    <table cellpadding=\"0\" cellspacing=\"0\">\n";
                   $stranka .= "      <tr><td>$zdatum$akce->{_zacatek_cas}</td><td>&nbsp;&nbsp;</td><td>".jazyky::zjistit("zacatek_prezence")."</td></tr>\n";
                   $stranka .= "      <tr><td>$zdatum$akce->{_zacatek1_cas}</td><td>&nbsp;&nbsp;</td><td>".jazyky::zjistit("zacatek_1_kola")."</td></tr>\n";
                   $stranka .= "      <tr><td>$kdatum$akce->{_konec_cas}</td><td>&nbsp;&nbsp;</td><td>".jazyky::zjistit("predpokladany_konec")."</td></tr>\n";
                   $stranka .= "    </table>\n";
                   $stranka .= "  </td>\n";
                   $stranka .= "</tr>\n";
            }

        }
        if($akce->{$hraci_system_jazyk} ne "")
        {
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("hraci_system").": </b></td><td colspan=\"2\"> $akce->{$hraci_system_jazyk}</td></tr>\n";
        }
        if($akce->{$kriteria_jazyk} ne "")
        {
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("kriteria").": </b></td><td colspan=\"2\"> $akce->{$kriteria_jazyk}</td></tr>\n";
        }
        if($akce->{$pocet_kol_jazyk} ne "")
        {
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("pocet_kol").": </b></td><td colspan=\"2\"> $akce->{$pocet_kol_jazyk}</td></tr>\n";
        }
        if($akce->{$tempo_jazyk} ne "")
        {
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("tempo").": </b></td><td colspan=\"2\"> $akce->{$tempo_jazyk}</td></tr>\n";
        }
        if($akce->{$poznamka_jazyk} ne "")
        {
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("poznamka").": </b></td><td colspan=\"2\"> $akce->{$poznamka_jazyk}</td></tr>\n";
        }
        if($akce->{organizator} eq "Klub deskových her Paluba")
        {
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("organizator").": </b></td><td colspan=\"2\"> \n";
            $stranka .= "<a href=\"http://hrejsi.cz/paluba/\" target=\"_top\">Klub deskových her Paluba </a>\n";
            $stranka .= "&nbsp;&nbsp;<a href=\"http://hrejsi.cz/paluba/\" target=\"_top\">";
            $stranka .= "<img align=\"center\" SRC=\"$konfig->{_cesta_html_prohlizec}/obr/loga/paluba.png\" BORDER=\"0\" height=\"50\"></a></td></tr>\n";
        }
        else
        {
            if($akce->{organizator} ne "")
            {
                $stranka .= "<tr valign=top><td><b>".jazyky::zjistit("organizator").": </b></td colspan=\"2\"><td> $akce->{organizator}</td></tr>\n";
            }
        }
        if($akce->{organizator2} ne "")
        {
            my $org2 = $akce->{organizator2};
            if($org2 eq "Česká asociace Scrabble")
            {
                $org2 = "<a href=\"http://scrabble.hrejsi.cz/\" target=\"_top\">$org2</a>";
            }
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("organizator")." 2: </b></td colspan=\"2\"><td> $org2</td></tr>\n";
        }
        if($akce->{sponzor} ne "")
        {
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("sponzor").": </b></td><td colspan=\"2\"> $akce->{sponzor}</td></tr>\n";
        }
        # Vypsat výši startovného.
        $stranka .= startovne($akce, $vcasne_prihlasky_do);
        # Naslibovat ceny pro vítěze.
        if($akce->{"1_cena"} =~ m/^Drobné ceny/)
        {
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("ceny").":</b></td><td colspan=\"2\"><b>$akce->{$cena1_jazyk}</b></td></tr>\n";
        }
        elsif($akce->{$cena1_jazyk} ne "")
        {
            $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("ceny").": </b></td><td colspan=\"2\"><b>".jazyky::zjistit("1_cena").": $akce->{$cena1_jazyk}</b></td></tr>\n";
            if($akce->{$cena2_jazyk} ne "")
            {
                $stranka .= "<tr><td></td><td colspan=\"2\"><b>".jazyky::zjistit("2_cena").": $akce->{$cena2_jazyk}</b></td></tr>\n";
            }
            if($akce->{$cena3_jazyk} ne "")
            {
                $stranka .= "<tr><td></td><td colspan=\"2\"><b>".jazyky::zjistit("3_cena").": $akce->{$cena3_jazyk}</b></td></tr>\n";
            }
            if($akce->{$dalsi_ceny_jazyk} ne "")
            {
                $stranka .= "<tr><td></td><td colspan=\"2\">$akce->{$dalsi_ceny_jazyk}</td></tr>\n";
            }
            $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit("ceny_garantujeme")."</td></tr>\n";
        }
        $stranka .= "</table>\n";
    }
    # Jestliže akce ještě nezačala, zobrazit odkaz na přihlášku.
    if(cas::ted()->{eden}<cas::datum2eden($akce->{_zacatek_datum_rok}) && $akce->{prihlasky} ne 'jinde')
    {
        $stranka .= "<p><a href=\"index.pl?$odkaz_prihlaska\" target=\"_top\">".jazyky::zjistit("PRIHLASKA")."</a></p>\n";
    }
    return $stranka;
}



#------------------------------------------------------------------------------
# Vypíše informaci o startovném.
#------------------------------------------------------------------------------
sub startovne
{
    my $akce = shift;
    my $vcasne_prihlasky_do = shift;
    my $stranka;
    my $verze;
    if($akce->{rok}<2011)
    {
        $verze = 1;
    }
    elsif($akce->{rok}==2011 || ($akce->{rok}==2012 && $akce->{plus_vstup}))
    {
        $verze = 2;
    }
    elsif($akce->{rok}==2012 && !$akce->{plus_vstup})
    {
        $verze = 3;
    }
    else # rok >= 2013
    {
        $verze = 4;
    }
    # Verze 1 (používala se do roku 2010 včetně):
    # Z databáze získáme čtyři částky, které vyplníme do tabulky o šesti buňkách (normální / zlevněné / dětské a včasné / pozdní).
    # Pokud jsou si všechny čtyři částky rovny, vypíšeme místo tabulky jednoduchou informaci o startovném.
    # Pokud v databázi není startovné vyplněno nebo je nulové, nevypíšeme nic.
    # Pokud už uplynul termín pro včasné přihlášení, vypisujeme jen tu část tabulky, která platí pro pozdě přihlášené.
    if($verze==1)
    {
        if($akce->{startovne} != 0)
        {
            if($akce->{startovne} == $akce->{startovne_2} &&
               $akce->{startovne} == $akce->{startovne_3} &&
               $akce->{startovne} == $akce->{startovne_4})
            {
                $stranka .= "<tr valign=top><td><b>".jazyky::zjistit("startovne").": </b></td><td>$akce->{startovne} Kč</td></tr>\n";
            }
            else
            {
                # Jestliže ještě nevypršel termín pro včasné přihlášky, upozornit na něj v souvislosti s výší startovného.
                if(cas::ted()->{eden}<=cas::datum2eden($vcasne_prihlasky_do))
                {
                    $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("startovne").": </b></td>";
                    $stranka .=     "<td><table><tr><td>".jazyky::zjistit("normalni_startovne", $akce->{startovne_2})."</td>";
                    $stranka .=     "<td>(".jazyky::zjistit("pozde_prihlaseni", $vcasne_prihlasky_do, $akce->{startovne}).")</td></tr>\n";
                    $stranka .= "<tr><td>".jazyky::zjistit("zlevnene_startovne", $akce->{startovne_3})."</td>";
                    $stranka .=     "<td>(".jazyky::zjistit("pozde_prihlaseni", $vcasne_prihlasky_do, $akce->{startovne_2}).")</td></tr>\n";
                    $stranka .= "<tr><td>".jazyky::zjistit("detske_startovne", $akce->{startovne_4})."</td>";
                    $stranka .=     "<td>(".jazyky::zjistit("pozde_prihlaseni", $vcasne_prihlasky_do, $akce->{startovne_3}).")</td></tr>\n";
                    $stranka .= "<tr><td colspan=\"2\">".jazyky::zjistit("zlevnene_vysvetlivky")."</td></tr></table></td>\n";
                }
                # Jestliže termín pro včasné přihlášky vypršel, vypsat pouze vyšší hodnoty startovného.
                else
                {
                    $stranka .= "<tr><td><b>".jazyky::zjistit("startovne").": </b></td>";
                    $stranka .=     "<td colspan=\"2\">".jazyky::zjistit("bohuzel_termin_vyprsel")."</td></tr>\n";
                    $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit("normalni_startovne", $akce->{startovne})."</td></tr>\n";
                    $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit("zlevnene_startovne", $akce->{startovne_2})."</td></tr>\n";
                    $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit("detske_startovne", $akce->{startovne_3})."</td></tr>\n";
                    $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit("zlevnene_vysvetlivky")."</td></tr>\n";
                }
            }
        }
    }
    # Verze 2 (používala se v roce 2011 pro vše kromě go; od roku 2012 se používá pro turnaje, o kterých databáze řekne, že se k nim připočítává vstupné na festival):
    # Z databáze sice nadále čteme 4 částky, ale předpokládáme a požadujeme, aby byly všechny stejné.
    # K tomu ale ke všem turnajům s výjimkou go povinně připočítáváme vstupné na festival.
    # Včas přihlášení (a zaplacení) budou mít slevu 20 % z celkové částky startovného a vstupného.
    elsif($verze==2)
    {
        if($akce->{startovne} == $akce->{startovne_2} &&
           $akce->{startovne} == $akce->{startovne_3} &&
           $akce->{startovne} == $akce->{startovne_4})
        {
            my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=text.pl", "text=ludoteka.htm");
            $stranka .= "<tr valign=top><td><b>".jazyky::zjistit("startovne").": </b></td><td><b>$akce->{startovne} Kč </b>".jazyky::zjistit("startovne2011", $parametry)."</td></tr>\n";
        }
    }
    # Verze 3 (používá se od roku 2012 pro turnaje, o kterých databáze řekne, že se k nim nepřipočítává vstupné na festival):
    # Z databáze načteme 3 potenciálně různé výše startovného (normální / zlevněné / dětské) a zobrazíme jeden sloupec tabulky, včas přihlášení mají slevu 20 %.
    elsif($verze==3)
    {
        $stranka .= "<tr><td><b>".jazyky::zjistit('startovne').": </b></td>";
        $stranka .=              "<td colspan=\"2\">".jazyky::zjistit('normalni_startovne', $akce->{startovne})."</td></tr>\n";
        $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit('zlevnene_startovne', $akce->{startovne_2})."</td></tr>\n";
        $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit('detske_startovne', $akce->{startovne_3})."</td></tr>\n";
        $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit('zlevnene_vysvetlivky')."</td></tr>\n";
    }
    # Verze 4 (používá se od roku 2013 pro všechny turnaje):
    # Z databáze načteme 3 částky, které často budou, ale nemusejí být stejné. Čtvrtou částku ignorujeme.
    # Pokud databáze o daném turnaji řekne, že se k němu má připočítat vstupné, připočteme odpovídající částku na daný den z Ludotéky (ve všední dny může být nulová).
    # Hlavní rozdíl oproti loňsku spočívá v tom, že čísla sečteme skrytě, abychom nerozčilovali hráče, kteří nechtějí platit vstupné do Ludotéky.
    # Včas přihlášení (a zaplacení) budou mít slevu 20 % z celkové částky startovného a vstupného.
    elsif($verze==4)
    {
        my @startovne;
        if($akce->{plus_vstup})
        {
            # Zjistit, kolikátý den v měsíci se turnaj koná (dvouciferné číslo doplněné nulami).
            # U vícedenních turnajů přičteme pouze vstupné za první den, i když hráči budou mít volný vstup do Ludotéky po všechny dny.
            my $den = $akce->{_zacatek_den};
            # Zjistit, kolik činí v daný den vstupné do Ludotéky.
            my $ludakce = zjistit_udaje_o_akci($akce->{rok}, 'lud', 'l'.$den);
            # Součtem zjistit až tři různé částky startovného+vstupného (normální, zvýhodněné a dětské).
            @startovne =
            (
                $akce->{startovne}   + $ludakce->{startovne},
                $akce->{startovne_2} + $ludakce->{startovne_2},
                $akce->{startovne_3} + $ludakce->{startovne_3}
            );
        }
        else
        {
            @startovne =
            (
                $akce->{startovne},
                $akce->{startovne_2},
                $akce->{startovne_3}
            );
        }
        $stranka .= "<tr><td><b>".jazyky::zjistit('startovne').": </b></td>";
        # Jestliže jsou všechny tři částky shodné, nerozepisovat jednotlivé druhy startovného.
        if($startovne[0] == $startovne[1] && $startovne[1] == $startovne[2])
        {
            $stranka .= "<td colspan=\"2\"><b>".jazyky::zjistit('kc_castka', $startovne[0])."</b><br/>".jazyky::zjistit('sleva_20_procent', $vcasne_prihlasky_do)."</td></tr>\n";
        }
        else
        {
            $stranka .= "<td colspan=\"2\"><b>".jazyky::zjistit('kc_castka', "$startovne[0] / $startovne[1] / $startovne[2]")."</b> (".jazyky::zjistit('normalni_zlevnene_detske').")</td></tr>\n";
            $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit('zlevnene_vysvetlivky')."<br/>".jazyky::zjistit('sleva_20_procent', $vcasne_prihlasky_do)."</td></tr>\n";
        }
    }
    # Vnitřní kontrola.
    else
    {
        $stranka .= "<p style='color:magenta'>Vnitřní chyba: verze startovného = '$verze'</p>\n";
    }
    return $stranka;
}



#------------------------------------------------------------------------------
# Vypíše tělo propozic Pětimysli.
#------------------------------------------------------------------------------
sub petimysl
{
    my $akce = shift;
    my $konfig = shift;
    my $nazev_jazyk = jazyky::zjistit("klic_nazev");
    my $nazev_hry_jazyk = jazyky::zjistit("klic_nazev_hry");
    my $kdo_se_muze_zucastnit_jazyk = jazyky::zjistit("klic_kdo_muze");
    my $cena1_jazyk = jazyky::zjistit("klic_1_cena");
    my $cena2_jazyk = jazyky::zjistit("klic_2_cena");
    my $cena3_jazyk = jazyky::zjistit("klic_3_cena");
    my $dalsi_ceny_jazyk = jazyky::zjistit("klic_dalsi_ceny");
    my $poznamka_jazyk = jazyky::zjistit("klic_poznamka");
    # Zjistit letošní datum začátku a konce festivalu.
    my $rocniky = mso::dotazat_se_databaze($databaze, 'zacatek', 'konec', "rocniky WHERE rok = '$akce->{rok}'");
    my $stranka;
    # Zobrazit fotku, pokud je k dispozici.
    if(-f "$konfig->{_cesta_html_system}/obr/fotky/$akce->{kod_hry}/$akce->{rok}$akce->{kod_hry}$akce->{kod_turnaje}01.jpg")
    {
       $stranka .= "<a href=\"#\"><img src=\"$konfig->{_cesta_html_prohlizec}/obr/fotky/$akce->{kod_hry}/$akce->{rok}$akce->{kod_hry}$akce->{kod_turnaje}01.jpg\" align=right width=350 class=\"gallery\"></a>";
    }
    elsif(-f "$konfig->{_cesta_html_system}/obr/fotky/$akce->{kod_hry}/$akce->{kod_hry}$akce->{kod_turnaje}.jpg")
    {
       $stranka .= "<a href=\"#\"><img src=\"$konfig->{_cesta_html_prohlizec}/obr/fotky/$akce->{kod_hry}/$akce->{kod_hry}$akce->{kod_turnaje}.jpg\" align=right width=350 class=\"gallery\"></a>";
    }
    elsif(-f "$konfig->{_cesta_html_system}/obr/fotky/$akce->{kod_hry}/$akce->{kod_hry}.jpg")
    {
       $stranka .= "<a href=\"#\"><img src=\"$konfig->{_cesta_html_prohlizec}/obr/fotky/$akce->{kod_hry}/$akce->{kod_hry}.jpg\" align=right width=350 class=\"gallery\"></a>";
    }
    # Zjistit, ve kterých letech se tento turnaj konal.
    my $roky = mso::dotazat_se_databaze($databaze, "rok", "akce WHERE (kod_hry = 'pet') ORDER BY rok");
    my @odkazy_na_jine_roky;
    foreach my $rok (map{$_->{rok}}(@{$roky}))
    {
        if($rok==$akce->{rok})
        {
            push(@odkazy_na_jine_roky, $rok);
        }
        else
        {
            push(@odkazy_na_jine_roky, "<a ".mso::odkaz($konfig, "telo=propozice.pl", "rok=$rok").">$rok</a>");
        }
    }
    if(scalar(@odkazy_na_jine_roky)>1)
    {
        $stranka .= "<p>".jazyky::zjistit("turnaj_se_konal_v_letech")." ".join(", ", @odkazy_na_jine_roky).".\n";
    }
    elsif(cas::ted()->{eden}>cas::datum2eden($akce->{_zacatek_datum_rok}))
    {
        $stranka .= "<p>".jazyky::zjistit("turnaj_se_konal_v_roce")." $odkazy_na_jine_roky[0].\n";
    }
    else
    {
        $stranka .= "<p>".jazyky::zjistit("turnaj_se_bude_konat_v_roce")." $odkazy_na_jine_roky[0].\n";
    }
    # Přidat odkaz na výsledky.
    my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=pentamind.pl");
    $stranka .= jazyky::zjistit("vysledky_najdete_zde", $akce->{rok}, $parametry)."</p>\n";
    # Sestavit stránku s propozicemi akce.
    if($akce->{_konec_datum} eq $akce->{_zacatek_datum})
    {
        $stranka .= "<p><b>".jazyky::zjistit("turnaj_se_uskutecni")." ".jazyky::zjistit("den".cas::den_v_tydnu(cas::datum2eden($akce->{_zacatek_datum_rok}))."g")." $akce->{_zacatek_datum_rok} $akce->{_zacatek1_cas} - $akce->{_konec_cas}.</b></p>\n";
    }
    else
    {
        $stranka .= "<p><b>".jazyky::zjistit("turnaj_se_uskutecni")." $akce->{_zacatek_datum_rok} $akce->{_zacatek1_cas} - $akce->{_konec_datum_rok} $akce->{_konec_cas}.</b></p>\n";
    }
    $stranka .= "<p>".jazyky::zjistit('pentamind_pravidla_uvod')."</p>\n";
    $stranka .= "<ul>\n";
    my @pravidla;
    if($konfig->{rok}<2004)
    {
        @pravidla = (1, 2, 3, 5, 6, 7, 8, 9);
    }
    elsif($konfig->{rok}<2009)
    {
        @pravidla = (1, 2, 3, '4_2004', 5, 6, 7, 8, 9);
    }
    else
    {
        @pravidla = (1, 2, 3, '4_2009', 5, 6, 7, 8, 9);
    }
    foreach my $i (@pravidla)
    {
        $stranka .= "  <li>".jazyky::zjistit("pentamind_pravidla_$i")."</li>\n";
    }
    $stranka .= "</ul>\n";
    $stranka .= "<table>\n";
    if($akce->{organizator} eq "Klub deskových her Paluba")
    {
        $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("organizator").": </b></td><td colspan=\"2\"> \n";
        $stranka .= "<a href=\"http://hrejsi.cz/paluba/\" target=\"_top\">Klub deskových her Paluba </a>\n";
        $stranka .= "&nbsp;&nbsp;<a href=\"http://hrejsi.cz/paluba/\" target=\"_top\">";
        $stranka .= "<img align=\"center\" SRC=\"$konfig->{_cesta_html_prohlizec}/obr/loga/paluba.png\" BORDER=\"0\" height=\"50\"></a></td></tr>\n";
    }
    if($akce->{sponzor} ne "")
    {
        $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("sponzor").": </b></td><td colspan=\"2\"> $akce->{sponzor}</td></tr>\n";
    }
    if($akce->{"1_cena"} =~ m/^Drobné ceny/)
    {
        $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("ceny").":</b></td><td colspan=\"2\"><b>$akce->{$cena1_jazyk}</b></td></tr>\n";
    }
    elsif($akce->{$cena1_jazyk} ne "")
    {
        $stranka .= "<tr><td valign=top><b>".jazyky::zjistit("ceny").": </b></td><td colspan=\"2\"><b>".jazyky::zjistit("1_cena").": $akce->{$cena1_jazyk}</b></td></tr>\n";
        if($akce->{$cena2_jazyk} ne "")
        {
            $stranka .= "<tr><td></td><td colspan=\"2\"><b>".jazyky::zjistit("2_cena").": $akce->{$cena2_jazyk}</b></td></tr>\n";
        }
        if($akce->{$cena3_jazyk} ne "")
        {
            $stranka .= "<tr><td></td><td colspan=\"2\"><b>".jazyky::zjistit("3_cena").": $akce->{$cena3_jazyk}</b></td></tr>\n";
        }
        if($akce->{$dalsi_ceny_jazyk} ne "")
        {
            $stranka .= "<tr><td></td><td colspan=\"2\">$akce->{$dalsi_ceny_jazyk}</td></tr>\n";
        }
        $stranka .= "<tr><td></td><td colspan=\"2\">".jazyky::zjistit("ceny_garantujeme")."</td></tr>\n";
    }
    $stranka .= "</table>\n";
    # Vypsat seznam turnajů, které se počítají do Pětimysli. U každého uvést, za jakou hru se počítá,
    # a zda se počítá jako velký, nebo jako malý turnaj.
    my @nazvy = ('kod_hry', 'kod_turnaje', $nazev_hry_jazyk, $nazev_jazyk, 'pentamind', 'pocet_casobloku');
    my $zdroj = 'akce';
    my $filtr = "(rok = '$akce->{rok}') AND NOT (pentamind = '0')";
    my $turnaje = mso::dotazat_se_databaze($databaze, @nazvy, "$zdroj WHERE $filtr");
    # Seřadit turnaje abecedně s ohledem na jazykovou mutaci, která je právě aktivní.
    # Nejdříve získat třídící řetězce pro všechny položky.
    map
    {
        $_->{_trid_hra} = csort::zjistit_tridici_hodnoty($_->{$nazev_hry_jazyk}, $jazyky::jazyk);
        $_->{_trid_akce} = csort::zjistit_tridici_hodnoty($_->{$nazev_jazyk}, $jazyky::jazyk);
        $_->{_odkaz} = "<a ".mso::odkaz($konfig, "telo=propozice.pl", "hra=$_->{kod_hry}", "turnaj=$_->{kod_turnaje}").">$_->{$nazev_jazyk}</a>";
        if($konfig->{rok}>=2004 && $konfig->{rok}<=2008)
        {
            $_->{_velikost} = $_->{pocet_casobloku}>1 ? 2 : 1;
        }
        elsif($konfig->{rok}>2008)
        {
            $_->{_velikost} = $_->{pentamind};
        }
    }
    (@{$turnaje});
    @{$turnaje} = sort
    {
        my $vysledek = $b->{_velikost} <=> $a->{_velikost};
        unless($vysledek)
        {
            $vysledek = $a->{_trid_hra} cmp $b->{_trid_hra};
            unless($vysledek)
            {
                $vysledek = $a->{_trid_akce} cmp $b->{_trid_akce};
            }
        }
        return $vysledek;
    }
    (@{$turnaje});
    # Vypsat přehled turnajů, které se počítají do Pětimysli.
    my $n_turnaju = scalar(@{$turnaje});
    if($konfig->{rok}<2004)
    {
        $stranka .= "<p>".jazyky::zjistit('pentamind_turnaje_uvod', $n_turnaju)."</p>\n";
    }
    else
    {
        $stranka .= "<p>".jazyky::zjistit('pentamind_turnaje_uvod_2004', $n_turnaju)."</p>\n";
    }
    $stranka .= "<table>\n";
    foreach my $turnaj (@{$turnaje})
    {
        $stranka .= "  <tr><td>$turnaj->{$nazev_hry_jazyk}</td><td>$turnaj->{_odkaz}</td>";
        if($konfig->{rok}>=2004)
        {
            my $velky = $turnaj->{_velikost}>1 ? jazyky::zjistit('pentamind_turnaj_velky') : jazyky::zjistit('pentamind_turnaj_maly');
            $stranka .= "<td>$velky</td>";
        }
        $stranka .= "</tr>\n";
    }
    $stranka .= "</table>\n";
    return $stranka;
}
