#!/usr/bin/perl
# Zobrazí nebo zpracuje hlasovací formulář.
# Copyright © 2011 Klára a Dan Zemanovi <zeman@ufal.mff.cuni.cz>
# Licence: GNU GPL

use utf8; # říct Perlu, že konstantní řetězce ve zdrojáku jsou v UTF
use Encode; # funkce pro překódování
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ě.
# Podle Ondry Bojara na tohle stačí use lib '/s/w/lib/dan';.
BEGIN {unshift(@INC, '/s/w/lib/dan') unless(grep {$_ eq '/s/w/lib/dan'} @INC)}
use dancgi; # čtení parametrů z webu nebo z ARGV
use cas; # práce s daty a časem
use jazyky; # jazykové verze textů
use csort; # jazykově závislé řazení podle abecedy
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();


# 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);
# Načíst formulář.
if($konfig{co} eq "zpracuj")
{
    dancgi::cist_formular_post(\%konfig);
}
if($konfig{jazyk} eq "")
{
    $konfig{jazyk} = "cs";
}
$jazyky::jazyk = $konfig{jazyk};
# Vždy se lze přihlásit pouze na jeden ročník: ten nejbližší, který bude, případně
# ten, který právě probíhá. Zjistit, který ročník to je, a přepsat parametr rok,
# ať už tam měl uživatel cokoli.
$ted = cas::ted();
$roky = mso::dotazat_se_databaze($databaze, "rok", "konec", "vcasne_prihlasky_do", "rocniky ORDER BY rok");
for(my $i = 0; $i<=$#{$roky}; $i++)
{
    $konfig{rok} = $roky->[$i]{rok};
    $konfig{vcas} = $roky->[$i]{vcasne_prihlasky_do};
    if($ted->{eden} <= cas::datum2eden($roky->[$i]{konec}))
    {
        last;
    }
}



if($konfig{co} ne "zpracuj")
{
    zobrazit_hlasovani($databaze, \%konfig);
}
else
{
    zpracovat_hlasovani($databaze, \%konfig);
}



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



#------------------------------------------------------------------------------
# Zobrazí hlasovací formulář.
#------------------------------------------------------------------------------
sub zobrazit_hlasovani
{
    my $databaze = shift;
    my $konfig = shift;
    mso::vypsat_stranku(
    {
        "nazev"  => "MSO: $konfig->{rok}: ".jazyky::zjistit("Hlasovani"),
        "nadpis" => jazyky::zjistit("hlasovani_nadpis", $konfig->{rok}),
        "telo"   => hlasovani($databaze, $konfig),
        "rok"    => $konfig->{rok}
    });
}



#------------------------------------------------------------------------------
# Vypíše hlasovací formulář.
#------------------------------------------------------------------------------
sub hlasovani
{
    my $databaze = shift;
    my $konfig = shift;
    my $stranka;
    # Přečíst tabulku akcí.
    my $akce = mso::nacist_akce($databaze, $konfig->{rok});
    # Rozebrat hlasovací kód.
    # Kdyby byl z nějakého důvodu vadný, tak to oznámit hned a vůbec jim nenabídnout hlasovací formulář.
    if($konfig->{hl_kod} =~ m/^(\d\d)(\d\d\d\d)(\d\d)$/)
    {
        $konfig->{hlasu_celkem}= $1;
        $konfig->{hlasu_celkem} =~ s/^0*(\d+?)$/$1/;
        $konfig->{kod_osoby} = $2;
        if($n_hlasu > 10 || $kod % 11 != 0)
        {
            return "<p style='color:red'>Chyba: neplatný hlasovací kód</p>\n";
        }
    }
    else
    {
        return "<p style='color:red'>Chyba: neplatný hlasovací kód</p>\n";
    }
    # Vypsat formulář hlasování.
    my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=hlasovani.pl", "co=zpracuj");
    $stranka .= "<form class=\"hlasovani\" method=\"post\" action=\"index.pl?$parametry\">\n";
    $stranka .= "<p align=right><b>".jazyky::zjistit("hlasovaci_kod")."$konfig->{hl_kod}<input type=\"hidden\" name=\"hl_kod\" value=\"$konfig->{hl_kod}\"/></b></p>\n";
    $stranka .= "<p>Vážený hráči, zde máte možnost hlasovat o turnajích podle Vaší preference.\n";
    $stranka .= " Níže můžete hlasovat samostatně o \"starých\" hrách (tedy takových, které už na Deskohraní měly turnaj) a \"nových\" hrách, tedy takových, ve kterýce ještě turnaj na Deskohraní nebyl.\n";
    $stranka .= " <br/>Každé hře můžete přidělit 0 - 3 bodů tak, aby součet bodů u všech \"starých\" her byl nejvýše <b>$konfig->{hlasu_celkem} bodů </b> a rovněž tak u \"nových\" her musí být součet nejvýše <b>$konfig->{hlasu_celkem} bodů. </b>\n";
    $stranka .= " <br/>Hlasovací body jste dostali přidělené (2 - 10 bodů) podle množství a různorodosti turnajů, kterých jste se v předchozích 3 letech zúčastnili.\n";
    $stranka .= " Z tohoto důvodu máte přidělený svůj hlasovací kod. Z každého kodu lze hlasovat pouze jednou.\n";
    $stranka .= " <p><b>Hlasování bude ukončeno 14.8. </b></p><p> Poté zařadíme do programu 3 turnaje ve \"starých\" a 3 v \"nových\", které získaly nejvíce hlasů.\n";
    $stranka .= " Kromě toho zařadíme i pár dalších s přihlédnutím na hlasování i na celkovou koncepci festivalu. \n";
    $stranka .= " <p>V záložce \"Turnaje a soutěže\" se můžete podívat, jaké stálice Vás čekají. Samozřejmě budou přibývat stále další informace, jak se domluvíme s jednotlivými organizátory.</p>\n";
    $stranka .= "<p>Máte k dispozici: <br/>\n";
    $stranka .= "<b>$konfig->{hlasu_celkem} hlasovacích bodů</b> k rozdělení <b>\x{201E}starým\x{201C}</b> turnajům.<br/>\n";
    $stranka .= "a <b>$konfig->{hlasu_celkem} hlasovacích bodů</b> k rozdělení <b>\x{201E}novým\x{201C}</b> turnajům.</p>\n";

    $stranka .= "<h3>Volba z&nbsp;turnajů, co už na Deskohraní byly (\"staré\" turnaje)</h3>\n";
    $stranka .= "<p>Prosíme, přidělte hrám v součtu nejvýše <b>$konfig->{hlasu_celkem} hlasovacích bodů</b>.</p>\n";

    $stranka .= "<p><select type=\"text\" name=\"saba\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=aba\" target=\"pokladnice\">Abalone</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"skon\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=kom\" target=\"pokladnice\">Continuo</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sdok\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=dok\" target=\"pokladnice\">Doba Kamenná</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sdvo\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=dvo\" target=\"pokladnice\">Dvonn</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sfau\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=fau\" target=\"pokladnice\">Fauna</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sfun\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=fun\" target=\"pokladnice\">Funkenschlag (Vysoké napětí)</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sgat\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=gat\" target=\"pokladnice\">Galaxy Trucker</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sgip\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=gip\" target=\"pokladnice\">Gipf</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"smet\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=met\" target=\"pokladnice\">Metro</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"ssae\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=sae\" target=\"pokladnice\">Pilíře země</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"stut\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=tut\" target=\"pokladnice\">Poštovní kurýr</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"spur\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=pur\" target=\"pokladnice\">Puerto Rico</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sijd\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=ijd\" target=\"pokladnice\">Rok draka</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sspe\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=spe\" target=\"pokladnice\">Sankt Petersburg</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"stan\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=tan\" target=\"pokladnice\">Tantrix</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"strn\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=trn\" target=\"pokladnice\">Trans America či Trans Evropa</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"syin\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=yin\" target=\"pokladnice\">Yinsh</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sklk\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=klk\" target=\"pokladnice\">Zeměpisný čtyřboj</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"szer\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=zer\" target=\"pokladnice\">Zertz</a> </p>\n";

  $stranka .= "<h3>Volba nových turnajů - ještě na Deskohraní nebyly! (\"nové\" turnaje)</h3>\n";
    $stranka .= "<p>Některé z nich jsou naprosté novinky! Stejně jako u \"starých\" i <b>zde máte k dispozici $konfig->{hlasu_celkem} bodů k rozdělení </b> podle Vašeho uvážení.</p>\n";

    $stranka .= "<p><select type=\"text\" name=\"n20s\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=20s\" target=\"pokladnice\">20.století</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"n7wo\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=7wo\" target=\"pokladnice\">7wonders</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"nkyk\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=kyk\" target=\"pokladnice\">Cyclades</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"ndix\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=dix\" target=\"pokladnice\">Dixit</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"nfrs\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=frs\" target=\"pokladnice\">Fresco</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"nhro\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=hro\" target=\"pokladnice\">Horoskop</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"nka2\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=ka2\" target=\"pokladnice\">K2</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"ngen\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=gen\" target=\"pokladnice\">Kaleidoskop - nové vydání hry Genial</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"nmaf\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=maf\" target=\"pokladnice\">Mafie</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"nmnd\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=mnd\" target=\"pokladnice\">Mondo</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"npth\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=pth\" target=\"pokladnice\">Pantheon</a> </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"novinka1\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "Místo pro Váš návrh: <input type=\"text\" name=\"novinka1_nazev\" size=\"30\"/></p>\n";

    $stranka .= "<p><select type=\"text\" name=\"novinka2\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "Místo pro Váš 2. návrh: <input type=\"text\" name=\"novinka2_nazev\" size=\"30\"/></p>\n";

    my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=hlasovani.pl", "hra=pet", "turnaj=oly");

    $stranka .= "  <table border=\"0\">\n";
    $stranka .= "  </table>\n";

    # Přidat parametry, které uživatele nezajímají, ale my je potřebujeme.
    $stranka .= "  <input type=\"hidden\" name=\"jazyk\"  value=\"$jazyky::jazyk\"/>\n";
    $stranka .= "  <input type=\"hidden\" name=\"co\"     value=\"zpracuj\"/>\n";
    my $cas = cas::ted()->{rmdhms};
    $stranka .= "  <input type=\"hidden\" name=\"casgen\" value=\"$cas\"/>\n";
    # Přidat tlačítka pro odeslání nebo vymazání formuláře.
    $stranka .= "  <p>\n";
    $stranka .= "    <input type=\"submit\" value=\"".jazyky::zjistit("odeslat")."\"/>\n";
    $stranka .= "    <input type=\"reset\"  value=\"".jazyky::zjistit("vymazat")."\"/>\n";
    $stranka .= "  </p>\n";
    $stranka .= "</form>\n";

    return $stranka;
}



#==============================================================================
# Funkce pro zpracování vyplněného formuláře
#==============================================================================



#------------------------------------------------------------------------------
# Zkontroluje údaje z formuláře, uloží je do databáze, pošle je e-mailem
# organizátorům a uživateli vygeneruje odpověď.
#------------------------------------------------------------------------------
sub zpracovat_hlasovani
{
    my $databaze = shift;
    my $konfig = shift;
    # Údaje z formuláře jsou v hashi %{$konfig} pohromadě s případnými dalšími
    # parametry skriptu. Přidat mezi údaje datum a čas odeslání formuláře.
    $konfig->{casode} = cas::ted()->{rmdhms};
    # Zkontrolovat údaje.
    my $chyby = zkontrolovat_hlasovani($databaze, $konfig);
    # Pokud byla kontrola úspěšná, uložit údaje do databáze a odeslat je e-mailem organizátorům.
    unless(scalar(@{$chyby}))
    {
        ulozit_hlasovani_do_databaze($databaze, $konfig);
        odeslat_hlasovani_e_mailem($databaze, $konfig);
    }
    # Vygenerovat odpověď pro uživatele.
    zobrazit_potvrzovaci_stranku($databaze, $konfig, $chyby);
}



#------------------------------------------------------------------------------
# Zkontroluje údaje z formuláře a vrátí seznam chyb, které najde.
#------------------------------------------------------------------------------
sub zkontrolovat_hlasovani
{
    my $databaze = shift;
    my $konfig = shift;
    my @chyby;
    # Zkontrolovat platnost hlasovacího kódu.
    my $kod = $konfig->{kod_hlas} = $konfig->{hl_kod};
    # Kód se skládá z osmi číslic a je dělitelný jedenácti. První dvě číslice znamenají počet hlasů, který není vyšší než 10.
    my $kod_osoby;
    my $n_hlasu;
    my $kontrola;
    if($kod =~ m/^(\d\d)(\d\d\d\d)(\d\d)$/)
    {
        $konfig->{hlasu_celkem} = $n_hlasu = $1;
        $konfig->{kod_osoby} = $kod_osoby = $2;
        $kontrola = $3;
        if($n_hlasu > 10 || $kod % 11 != 0)
        {
            push(@chyby, 'chyba_neplatny_kod');
        }
        else
        {
            # Zjistit, zda už s tímto kódem někdo nehlasoval.
            my $drivejsi = mso::dotazat_se_databaze($databaze, 'kod_hlas', "hlasovani_2011 WHERE kod_osoby = '$kod_osoby'");
            if(scalar(@{$drivejsi}))
            {
                push(@chyby, 'chyba_pouzity_kod');
            }
        }
    }
    else
    {
        push(@chyby, 'chyba_neplatny_kod');
    }
    # Projít všechny parametry.
    # Jestliže jejich název jsou 4 písmena nebo číslice, první je 's' nebo 'n',
    # a jestliže hodnotou parametru je 0, 1, 2 nebo 3, považovat je za kód hry.
    my @stare_hry = grep {m/^s[a-z0-9]{3}$/ && $konfig->{$_} =~ m/^[0-3]$/} (keys(%{$konfig}));
    my @nove_hry = grep {m/^(n[a-z0-9]{3}|novinka[12])$/ && $konfig->{$_} =~ m/^[0-3]$/} (keys(%{$konfig}));
    $konfig->{stare} = \@stare_hry;
    $konfig->{nove} = \@nove_hry;
    # Zkontrolovat, že počet hlasů udělených starým hrám nepřekročil maximální počet hlasů, které má dotyčný uživatel k dispozici.
    my $soucet_stare = 0;
    foreach my $hra (@stare_hry)
    {
        $soucet_stare += $konfig->{$hra};
    }
    if($soucet_stare>$n_hlasu)
    {
        push(@chyby, 'chyba_moc_starych');
    }
    # Zkontrolovat, že počet hlasů udělených novým hrám nepřekročil maximální počet hlasů, které má dotyčný uživatel k dispozici.
    my $soucet_nove = 0;
    foreach my $hra (@nove_hry)
    {
        $soucet_nove += $konfig->{$hra};
    }
    if($soucet_nove>$n_hlasu)
    {
        push(@chyby, 'chyba_moc_novych');
    }
    # Jestliže novinka1 nebo novinka2 dostala hlas, nesmí zůstat prázdné pole s názvem hry.
    if($konfig->{novinka1}>0 && $konfig->{novinka1_nazev} =~ m/^\s*$/ ||
       $konfig->{novinka2}>0 && $konfig->{novinka2_nazev} =~ m/^\s*$/)
    {
        push(@chyby, 'chyba_prazdna_novinka');
    }
    # Zkontrolovat, že se dal hlas alespoň jedné hře.
    if($soucet_stare==0 && $soucet_nove==0)
    {
        push(@chyby, 'chyba_zadne_hlasy');
    }
    return \@chyby;
}



#------------------------------------------------------------------------------
# Uloží údaje z formuláře do databáze MySQL na serveru.
#------------------------------------------------------------------------------
sub ulozit_hlasovani_do_databaze
{
    my $databaze = shift;
    my $konfig = shift;
    my @nazvy = qw(kod_hlas kod_osoby hlasu_celkem kod_hry hlasu nazev_hry);
    my $seznam_poli = join(', ', @nazvy);
    foreach my $hra (@{$konfig->{stare}}, @{$konfig->{nove}})
    {
        next unless($konfig->{$hra}>0);
        my $kod_hry = $hra;
        $kod_hry =~ s/^[sn]// unless($kod_hry =~ m/^novinka/);
        # Řetězcové hodnoty musí být v apostrofech, číselné bez apostrofů.
        my @hodnoty =
        (
            "'$konfig->{kod_hlas}'",
            $konfig->{kod_osoby},
            $konfig->{hlasu_celkem},
            "'$kod_hry'",
            $konfig->{$hra}
        );
        if($hra =~ m/^novinka\d$/)
        {
            my $nazev = $konfig->{$hra.'_nazev'};
            push(@hodnoty, "'$nazev'");
        }
        else
        {
            push(@hodnoty, "''");
        }
        # The MySQL driver must get the data as a sequence of bytes, not of varying-width characters.
        my $seznam_hodnot = encode('utf8', join(', ', @hodnoty));
        my $dotaz = "INSERT INTO hlasovani_2011 ($seznam_poli) VALUES ($seznam_hodnot);";
        $databaze->do($dotaz);
    }
}



#------------------------------------------------------------------------------
# Odešle údaje z formuláře e-mailem organizátorům.
#------------------------------------------------------------------------------
sub odeslat_hlasovani_e_mailem
{
    my $databaze = shift;
    my $konfig = shift;
    my $sendmail;
    if(-e "/usr/lib/sendmail")
    {
        $sendmail = "|/usr/lib/sendmail -oi -t";
    }
    else
    {
        $sendmail = ">posledni-prihlaska.txt";
    }
    my $adresat = "klara\@hrejsi.cz, zeman\@ufal.mff.cuni.cz";
    my $mail;
    $mail .= "From: Robot Hrejsi <robot\@hrejsi.cz>\n";
    $mail .= "To: $adresat\n";
    $mail .= "Subject: MSO hlasovani\n";
    $mail .= "Content-Type: text/plain; charset=\"utf-8\"\n";
    $mail .= "Content-Transfer-Encoding: 8bit\n\n";
    # Sestavit tělo zprávy.
    $mail .= "kod = $konfig->{kod_hlas}\n";
    my @hry = grep {$konfig->{$_}>0} (@{$konfig->{stare}}, @{$konfig->{nove}});
    $mail .= join(', ', map {"$_=$konfig->{$_}"} (sort(@hry)))."\n\n";
    $mail .= "novinka1_nazev=$konfig->{novinka1_nazev}\n";
    $mail .= "novinka2_nazev=$konfig->{novinka2_nazev}\n";
    # Odeslat zprávu organizátorům.
    open(SENDMAIL, $sendmail) or print "Nemůžu najít sendmail: $!\n";
    print SENDMAIL ($mail);
    close(SENDMAIL);
    open(KOPIE, ">posledni_hlasovani.txt");
    print KOPIE ($mail);
    close(KOPIE);
    open(KOPIE, ">>archiv_hlasovani.txt");
    print KOPIE ("----------------------------------------------------------------------\n");
    print KOPIE ($mail);
    close(KOPIE);
}



#------------------------------------------------------------------------------
# Vygeneruje pro uživatele stránku se zprávou o úspěchu či neúspěchu jím
# odeslaného formuláře.
#------------------------------------------------------------------------------
sub zobrazit_potvrzovaci_stranku
{
    my $databaze = shift;
    my $konfig = shift;
    my $chyby = shift;
    my $nadpis;
    my $stranka;
    ###!!! Texty na potvrzovací stránce jsou zavádějící, protože se vztahují k přihlášce a ne k hlasování.
    ###!!! Teď se mi nechce ještě zadávat nové texty do jazyky.pm.
    # Pokud byly v přihlášce nalezeny chyby, upozornit uživatele, že přihláška nebyla přijata.
    if(scalar(@{$chyby}))
    {
        $nadpis = jazyky::zjistit("hlasovani_nadpis_chyba");
        $stranka .= "<h3>".jazyky::zjistit("hlasovani_nadpis2_chyba")."</h3>\n";
        $stranka .= "<ul>\n";
        foreach my $chyba (@{$chyby})
        {
            # Zatím rychlé řešení: vypíšeme jen kód chyby místo jejího podrobnějšího vysvětlení.
            $stranka .= "  <li>$chyba</li>\n";
            #$stranka .= "  <li>".jazyky::zjistit($chyba)."</li>\n";
        }
        $stranka .= "</ul>\n";
    }
    # Pokud byla přihláška bez chyb, ukázat uživateli přehled údajů a oznámit mu, že přihláška byla přijata.
    else
    {
        $nadpis = jazyky::zjistit("hlasovani_potvrzeni");
        $stranka .= jazyky::zjistit("hlasovani_potvrzeni_nadpis");
    }
    # Obalit stránku jednotným záhlavím a zápatím a poslat ji na výstup.
    mso::vypsat_stranku(
    {
        "nazev"  => "MSO: $konfig->{rok}: ".jazyky::zjistit("Hlasovani"),
        "nadpis" => $nadpis,
        "telo"   => $stranka,
        "rok"    => $konfig->{rok}
    });
}
