#!/usr/bin/perl
# Zobrazí nebo zpracuje hlasovací formulář.
# Copyright © 2011-2016 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ě.
use lib '/s/w/lib/dan';
use lib '/s/w/lib/cgi/mso';
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();
# Každý rok je potřeba nejdříve v databázi na serveru vytvořit novou tabulku,
# ta stará tam zůstane jako archív. Dá se to udělat tak, že u loňské tabulky dám
# export do SQL, v tom, co dostanu, umažu dlouhý příkaz INSERT pro vložení dat,
# zbude nějaká inicializace a příkaz CREATE, v něm změním jméno tabulky na nový rok,
# pak to zase vložím do záložky SQL databáze mso na serveru.
# Potom musíme změnit název tabulky i tady:
$tabulka = 'hlasovani_2022';


# 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 lze hlasovat pouze pro 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, $tabulka, \%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ář.
    $konfig->{hl_kod} =~ s/^\s/0/;
    if($konfig->{hl_kod} =~ m/^(\d\d)(\d\d\d\d\d\d)(\d\d)$/)
    {
        $konfig->{hlasu_celkem}= $1;
        $konfig->{hlasu_celkem} =~ s/^0*(\d+?)$/$1/;
        $konfig->{kod_osoby} = $2;
        if($konfig->{hlasu_celkem} > 10 || $konfig->{hl_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 '$konfig->{hl_kod}'</p><p>Zkontrolujte, zda vložený odkaz končí kod= a za ním deseticiferný hlasovací kod. Pokud tomu tak není, tak se podívejte znovu do e-mailu a pokud tam máte kod= mezera a devíticiferný kod, tak mezeru nahraďte 0 a takto vzniklý deseticiferný kod (včetně 0 na začátku a bez mezery) vložte nakonec odkazu do Vašeho prohlížeče a odentrujte. Pokud i tak nepůjde odhlasovat, tak nám napište na info\@deskohrani.cz Děkujeme za pochopení. </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 .= " <br/>Každé hře můžete přidělit 0 - 3 body tak, aby součet bodů u všech byl nejvýše <b>$konfig->{hlasu_celkem} bodů </b> \n";
    $stranka .= " <br/>Hlasovací body jste dostali přidělené (3 - 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 1.8.2022. </b></p><p> Poté zařadíme do programu 3 - 6 turnajů, které získaly nejvíce hlasů.\n";
    $stranka .= "<p>Máte k dispozici: <br/>\n";
    $stranka .= "<b>$konfig->{hlasu_celkem} hlasovacích bodů</b> k rozdělení.<br/>\n";

	#
	# Staré hry
	# Od roku 2017 už jen jedno hlasování, tedy zrušeno rozdělení na novinky a steřinky.
    #
    $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 .= "<table>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/6nm/6nm.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"s6nm\">\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=6nm\" target=\"pokladnice\">6 bere</a> \n";
    $stranka .= "Karty s různou bodovou hodnotou se odkládají do řad podle velikosti. Maximální počet karet v řadě je pět. Pokud musíte doplnit šestou, řadu si vezmete a dostanete trestné body. Odhadněte soupeřovy záměry, aby šestá karta nevyšla na Vás! (40-60 min, 10+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/7wo/7wo.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"s7wo\">\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\">7 divů světa</a> \n";
    $stranka .= "Hra se odehrává postupně ve třech fázích a hráči se snaží budovat svoji civilizaci, k čemuž potřebují shromažďovat zdroje, stavět budovy, rozvíjet své technologie, i úspěšně bojovat.(30 min, 10+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/agr/agr.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"sagr\">\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=agr\" target=\"pokladnice\">Agricola</a> \n";
    $stranka .= "Hra vás zavede na zemědělskou usedlost 17. století. Budete pečovat o své hospodářství tak, aby nikdo z domácnosti nezemřel hlady a váš statek prosperoval a rozvíjel se. (30 - 120 min, 12+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/alz/alz.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"salz\">\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=alz\" target=\"pokladnice\">Alenčina zahrádka</a> \n";
    $stranka .= "Nebozí královští zahradníci zmatkují a snaží se vyvarovat královnina hněvu. Lze vůbec Jejímu Veličenstvu vyhovět? Královna si přeje, aby stromy rostly co nejdále od sebe a aby celou Říši divů zaplavily ty nejpřepychovější růžové keře na celém širém světě. (30 - 45 min, 8+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/azu/azu.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"sazu\">\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=azu\" target=\"pokladnice\">Azul</a> \n";
    $stranka .= "Portugalský král Manuel I. byl při své návštěvě Alhambry natolik okouzlen jejími interiéry, zejména keramickými dlaždicemi, že okamžitě nařídil, aby jeho vlastní palác v Portugalsku byl vyzdoben podobnými obklady. AZUL je krásná, barevná, rychlá a svižná hra pro celou rodinu, ve které se vžijete do rolí mistrů obkladačů. Vytvořte tu nejkrásnější mozaiku pro královský palác!(40 - 50 min, 8+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/dix/dix.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"sdix\">\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> \n";
    $stranka .= "(Hra Dixit (latinsky \"on řekl\") je hrou vyprávěcí. Hráči se snaží podle karet nastínit příběh - ale musí si počínat obezřetně, aby jejich příběh nebyl ani příliš komplikovaný, ani příliš jednoduchý. (30-40 min, 8+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/dok/dok.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<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>\n";
    $stranka .= "Doba kamenná je doba kamenná. A rozhodně to není doba jednoduchá. Nejdůležitějším úkolem vašeho kmene je obstarat dostatek jídla pro všechny své členy. A proto je potřeba vyrazit na lov, a nebo alespoň vypěstovat obilí na prvních zoraných polích. K úspěchu vašeho kmene je třeba dobré plánování a také kousek štěstí. (50-80 min, 10+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/rfg/rfg.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"srfg\">\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=rfg\" target=\"pokladnice\">Dobyvatelé vesmíru</a> \n";
    $stranka .= "Hráči závodí v průzkumu galaxie - objevují nové planety a vynalézají nové technologie. Vítězí hráč, který získá nejvíce bodů. (45-60 min, 12+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/dmn/dmn.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"sdmn\">\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=dmn\" target=\"pokladnice\">Dominion</a> \n";
    $stranka .= "POZOR! Letos nebude Dominion zařazený automaticky mezi turnaje. Nebude MČR. Tedy turnaj bude, pokud vzejde z hlasování! (40-60 min, 8+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/zug/zug.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"szug\">\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=zug\" target=\"pokladnice\">Jízdenky, prosím (Ticket to Ride)</a> \n";
    $stranka .= "Železniční hra podobná Trans Americe. Na mapě spojujete města železniční sítí, přičemž skryté karty určují, která připojená města vám přinesou body. (40-60 min, 8+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/kaa/kaa.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"skaa\">\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=kaa\" target=\"pokladnice\">Karak</a>  \n";
    $stranka .= "Společenská hra Karak je původní česká rodinná hra. Hra má velmi jednoduchá pravidla. Každý hráč se ve hře Karak zhostí role jednoho hrdiny, který vyráží do labyrintu pod hradem Karak. Budete bojovat s nestvůrami a získávat zbraně a poklady. (45-60 min, 7+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/kas/kas.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"skas\">\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=kas\" target=\"pokladnice\">Kaskádie</a>  \n";
    $stranka .= "Vydejte se na cestu do líbezného regionu Kaskádie a pokuste se vytvořit co nejharmoničtější ekosystém. Vaše tahy budou velmi prosté – vezmete si dvojici destičky prostředí a žetonu zvířete a přiložíte je ke své mapě. (30-45 min, 10+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/kid/kid.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"skid\">\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=kid\" target=\"pokladnice\">Kingdomino</a>  \n";
    $stranka .= "Hráči budují každý své království. Kdo bude úspěšnější? Díky proměnlivému hracímu plánu a jiným podmínkám pro zisk bodů v každé hře, nebudou nikdy dvě hry stejné. (40-60 min, 10+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/mrs/mrs.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"smrs\">\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=mrs\" target=\"pokladnice\">Mars: Teraformace </a> \n";
    $stranka .= "Meziplanetární korporace soutěží v přetváření Marsu na obyvatelnou planetu. Ve hře bude každý hrát za jednu meziplanetární společnost s určitým profilem. Budete hrát karty projektů, řídit svou produkci zdrojů, umísťovat na mapu své destičky měst a zeleně a závodit o čestné tituly a vítězství ve vypsaných soutěžích. (90-120 min, 12+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/mta/mta.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"smta\">\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=mta\" target=\"pokladnice\">Mars Teraformace: Expedice Ares</a> \n";
    $stranka .= "Hra navazuje na principy známe z  hry Mars: Teraformace, ale jde o novou, samostatnou hru. Předchozí zkušenosti přijdou vhod, ale nejsou ani v nejmenším podmínkou! (45-60 min, 12+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/mie/mie.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"smie\">\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=mie\" target=\"pokladnice\">Mini Express </a> \n";
    $stranka .= "V této hře se proměníte v bohaté magnáty, kteří staví tratě po celém kontinentu, získávají vliv v železničních firmách, obchodují s akciemi a snaží se přechytračit své soupeře. (30-45 min, 8+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/nkr/nkr.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"snkr\">\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=nkr\" target=\"pokladnice\">Na křídlech </a> \n";
    $stranka .= "Budete představovat nadšené ornitology, pozorovatele ptactva a sběratele, snažící se přilákat do své voliéry co nejúžasnější ptáky. Voliéra zahrnuje 3 různé biotopy a každý pták pomůže rozvinout vaši ptačí zoo v určité oblasti. Body lze získat za zajímavé ptáky ve sbírce, plněním různých úkolů vyhodnocovaných během hry i na jejím konci, za snůšku vajec, akumulovanou potravu a kořist. (50-70 min, 12+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/nov/nov.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"snov\">\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=nov\" target=\"pokladnice\">Nova Luna</a> \n";
    $stranka .= "Chytrá abstraktní hra od světoznámého autora Uwe Rosenberga (Patchwork, Agricola, Caverna). Hra vznikla podle námětu Corného van Moorsela a byla nominována do užšího výběru 3 lfinalistů prestižní ceny Spiel des Jahres. (15-30 min, 8+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/paw/paw.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"spaw\">\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=paw\" target=\"pokladnice\">Patchwork </a> \n";
    $stranka .= "Se svou přikrývkou dosáhne zaslouženého vítězství ten, kdo chytře zvolí a nejlépe zkombinuje vybrané záplaty. (30-45 min, 8+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/prk/prk.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"sprk\">\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=prk\" target=\"pokladnice\">Parky </a> \n";
    $stranka .= "Hra Parky je oslavou krásy amerických národních parků, doprovázenou fenomenálními ilustracemi Fifty-Nine Parks Print Series. Ve hře se ujmete dvojice turistů, kteří budou v různých ročních obdobích vyrážet na různé treky plné zážitků. Na svých výpravách využijete výbavu, jako je dalekohled, čutory, které vás osvěží, ale i fotoaparát, abyste si mohli odnést něco na památku! (45-60 min, 10+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/plk/plk.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"splk\">\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=plk\" target=\"pokladnice\">Pelíšek (Calico)</a>\n";
    $stranka .= "Pelíšek je hra o vytváření skládaček z pestrobarevných dílků pro celou rodinu. Budete v ní představovat milovníky koček, kteří se snaží pro své mazlíčky utkat z barevných útržků ve tvaru šestiúhelníkových dílků tu nejkrásnější dečku. Komu se podaří na svou desku složit dílky nejšikovněji, aby získal nejvíce bodů za splněné úkoly, vytvořené pelíšky a přišité knoflíky? (30-45 min, 10+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/por/por.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"spor\">\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=por\" target=\"pokladnice\">Port Royal </a>\n";
    $stranka .= "Kupci v Port Royal se snaží získat z Karibského moře co nejvíce, pokud se snaží vydělat příliš, riskují, že pro jeden den spláčou nad výsledkem a přijdou o možnost získat cokoli. Získejte přízeň admirálů a guvernérů, získávejte vliv a podporu pro Vaše expedice, které vám pomohou zvítězit. (30-60 min, 8+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/pjl/pjl.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"spjl\">\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=pjl\" target=\"pokladnice\">Projekt L</a> \n";
    $stranka .= "Hráči začínají hru se dvěma dílky, které použijí k dokončení skládaček, získání vítězných bodů a nových dílků, které jim pomohou splnit komplikovanější skládačky. (20-40 min, 8+)</td></tr>\n";


    $stranka .= "<tr><td> <img src=\"/obr/fotky/pur/pur.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<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> \n";
    $stranka .= "Zlatokop nebo guvernér, osadník nebo stavitel? Ať už v Novém světě hrajete jakoukoliv roli, máte jen jeden cíl: dosáhnout co největšího blahobytu a věhlasu! Kdo bude vlastnit nejvýnosnější plantáže? Kdo postaví nejdůležitější budovy? Kdo dosáhne největšího počtu vítězných bodů…? (90-150 min, 12+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/sgr/sgr.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"ssgr\">\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=sgr\" target=\"pokladnice\">Sagrada</a>  \n";
    $stranka .= "Překrásná barevná hra s kostkami. Staňte se umělci soutěžícími o to, kdo vytvoří nejkrásnější barevnou vitráž kostela Sagrada Família. Okenní sklíčka jsou ve hře představována barevnými kostkami, jejichž hodnoty vyjadřují odstín. Každé kolo si budete vybírat kostky z nabídky a pokládat je do svého okenního rámu. Přitom bude nutné dodržovat podmínky karet vzorů. Zároveň nesmějí mít dvě sousedící kostky stejnou barvu ani hodnotu. (30-45 min, 8+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/stg/stg.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"sstg\">\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=stg\" target=\"pokladnice\">Stroganov</a> \n";
    $stranka .= "Sedmnácté století. Carské Rusko se začíná rozpínat směrem na východ s cílem obsadit území mrazivé Sibiře. Tato kapitola dějin je neoddělitelně spjata s rodem Stroganov. Pokusíte se získat co nejkvalitnější kožešiny, nashromáždit bohatství a vysloužit si slávu během každoročních poutí přes širou Sibiř. Na jaře, v létě a na podzim budete putovat dalekými kraji a domů se vrátíte vždy až v zimě. (60-90 min, 12+)</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/iww/iww.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"siww\">\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=iww\" target=\"pokladnice\">Svět divů (It's a Wonderful World)</a>  \n";
    $stranka .= "Stanete v čele rostoucího Impéria, které povedete k zářné budoucnosti. Musíte se ovšem rozrůstat rychleji a lépe než vaši soupeři, pečlivě naplánovat svůj rozvoj, vytvořit potřebnou výrobní sílu, a nakonec ovládnout tento nový svět. (30-60 min, 14+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/trn/trn.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<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>\n";
    $stranka .= "Stavíte železnice a snažíte se propojit pět vašich měst kolejnicemi. Vaše neúspěchy ženou vaši lokomotivu blíže k závoře. Když do ní někdo narazí, hra končí. Vyhrává ten, kdo je od závory nejdále. (20-40 min, 8+) </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/vih/vih.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"svih\">\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=vih\" target=\"pokladnice\">Vinohrad</a>\n";
    $stranka .= "Zdědili jste malý, zanedbaný vinohrad v Toskánsku a snažíte se ho obnovit, zvelebit a rozšířit. Práce to nebude lehká, práce na vinohradu je nejen náročná, ale vyžaduje i dobré plánování a management. Čím lepší víno budete mít v nabídce, tím více turistů váš vinohrad navštíví a znalci vína budou posílat objednávky jednu za druhou. Zvládnete vyrobit víno, které bude mít světový věhlas? (45-60 min, 14+) </td></tr>\n";
	
    $stranka .= "</table>\n";

	#
	# Nové hry  zrušno od roku 2017
    #
    #	$stranka .= "<h3>Volba z her, které měly na Deskohraní do jednoho turnaje (\"nové\" hry)</h3>\n";
    #    $stranka .= "<p>Některé z nich jsou letošní či loňské novinky! Proto u těchto her naleznete vždy krátký popis, snažící se vám danou hru přiblížit. ";
    #	$stranka .= "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=\"nalh\">\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=alh\" target=\"pokladnice\">Alhambra</a> \n";
    #    $stranka .= "Každý hráč staví \"svou\" Alhambru. Hráči se snaží mít většinu v určitém druhu budovy, které jsou k mání jen v určitou dobu, a také mít nejdelší městské hradby. (45-60 min, 8+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"namu\">\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=amu\" target=\"pokladnice\">Amun-Re</a> \n";
    #    $stranka .= "Hráči se snaží mít nejen co nejvíce pyramid, ale i provincii s nejvíce pyramidami. Potřebné zlato získají výnosem z úrody, a proto je třeba si oběťmi naklonit vládce bohů Amun-Re. (60-120 min, 12+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"ncnc\">\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=cnc\" target=\"pokladnice\">Concordia</a> \n";
    #    $stranka .= "Kolonizujete Římskou říši, budujete města a obchodujete se surovinami. (90-120 min, 12+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"nfar\">\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=far\" target=\"pokladnice\">Farmáři</a> \n";
     #   $stranka .= "Farmáři jsou rodinná hra s jednoduchými pravidly, ve které budete potřebovat i trochu strategie. Obsahuje spoustu dřevěných hracích dílků ve tvaru různých typů ovoce. (40-60 min, 10+) </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> \n";
    #    $stranka .= "Staňte se na chvíli restaurátorem fresky starobylého kostela. Nominace Spiel des Jahres 2010. (60-80 min, 10+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"nglm\">\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=glm\" target=\"pokladnice\">Glen More</a> \n";
     #   $stranka .= "Jako vůdce skotských horalů rozšiřujete svoje území pokládáním destiček pastvin, vesnic, jezer a hradů. Jediná hra, kde můžete vypálit whisky! :) (60-90 min, 10+) </p>\n";

     #   $stranka .= "<p><select type=\"text\" name=\"nlac\">\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=lac\" target=\"pokladnice\">Lancaster</a> \n";
     #   $stranka .= "Boj o moc mezi šlechtickými rody ve středověké Anglii v období Stoleté války s Francií. (60-90 min, 10+) </p>\n";

     #   $stranka .= "<p><select type=\"text\" name=\"nlnd\">\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=lnd\" target=\"pokladnice\">London</a> \n";
     #   $stranka .= "Vybudujte město od katedrály sv. Pavla až po první metro na světě. Hra je založená na mechanismu vykládání karet, z nichž ale polovinu vždy musíte nabídnout soupeřům! (90-120 min, 13+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"nlui\">\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=lui\" target=\"pokladnice\">Ludvík XIV</a> \n";
    #    $stranka .= "Hráči jsou dvořané a mají zhruba 100 minut na dosažení svých cílů u dvora. Pochopitelně, svou roli zde hraje i sám Král Slunce. (90-120 min, 12+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"npra\">\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=pra\" target=\"pokladnice\">Pravěk </a> \n";
    #    $stranka .= "Hráči začínají jako prostí lovci a sběrači a snaží se osvojovat nové technologie jako zemědělství. Hra obsahuje podobné mechanismy jako Vysoké napětí. (60-90 min, 12+)</p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"ntkn\">\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=tkn\" target=\"pokladnice\">Takenoko</a> \n";
     #   $stranka .= "Budete obdělávat a zavlažovat pole a snažit se vypěstovat co nejvíce bambusů. Je to totiž jediná potrava, co jí panda, kterou máte na starosti přímo od císaře. (40-60 min, 8+)</p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"ntac\">\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=tac\" target=\"pokladnice\">Tádž Mahal (Taj Mahal)</a> \n";
    #    $stranka .= "Hra o ovládnutí Indie. Hráči v roli maharádžů a princů ve dvanácti kolech procházejí postupně provincie a soupeří mezi sebou o moc a vliv. (75-120 min, 12+)</p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"ntro\">\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=tro\" target=\"pokladnice\">Troyes</a> \n";
    #    $stranka .= "Hráči se ve hře Troyes ujímají rolí bohatých rodin z kraje Champagne ve Francii a používají svůj vliv na získání a vedení osob ze tří oblastí: armády, duchovních a lidu. Cílem hry je získat co nejvíce slávy, čehož lze dosáhnout vícero způsoby. (90-120 min, 12+)</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 $tabulka = 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, $tabulka, $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, $tabulka, $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 $tabulka = 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)(\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', "$tabulka 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}));
    # Od roku 2017 zrušené novinky a stařinky.
	# 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, sprintf("chyba_moc_starych_%d_%d", $soucet_stare, $n_hlasu));
    }
    # 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, sprintf("chyba_moc_novych_%d_%d", $soucet_nove, $n_hlasu));
    # }
    # 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 $tabulka = 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 $tabulka ($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;
    # Pokud byly v hlasování nalezeny chyby, upozornit uživatele, že hlasování nebylo přijato.
    if(scalar(@{$chyby}))
    {
        $nadpis = jazyky::zjistit("hlasovani_nadpis_chyba");
        $stranka .= "<h3>".jazyky::zjistit("hlasovani_nadpis2_chyba")."</h3>\n";
        $stranka .= "<ul>\n";
        foreach my $chyba0 (@{$chyby})
        {
            my $chyba = $chyba0;
            my ($k, $n);
            if($chyba =~ m/^chyba_moc_(star|nov)ych_(\d+)_(\d+)$/)
            {
                $chyba = "chyba_moc_${1}ych";
                $k = $2;
                $n = $3;
            }
            # Ke všem chybám by nyní mělo existovat vysvětlení v jazyky.pm.
            # Pokud náhodou neexistuje (někdo přidal nový kód chyby a zapomněl na to), vypíšeme alespoň kód chyby.
            my $hlaseni = jazyky::zjistit("hlasovani_$chyba", $k, $n);
            $hlaseni = $chyba0 if(!defined($hlaseni));
            $stranka .= "  <li>$hlaseni</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}
    });
}
