#!/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_2025';


# 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} > 15 || $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áčko, vážený hráči,<br> zde máte možnost hlasovat o turnajích podle Vaší preference.\n";
    $stranka .= "<p>Letos jsme hlasování rozdělili na hlasování o hrách v předchozích letech frekventovaných (<b> \"STAŘINKY\" </b>) a na hlasování o hrách novějších či úplných novinek (<b> \"NOVINKY\" </b>).\n";
    $stranka .= " <p>Pro každé hlasování budete mít k dispozici <b>$konfig->{hlasu_celkem} bodů</b>, neboli: \n";
    $stranka .= " <ul><li>Každé hře z části \"STAŘINKY\" můžete přidělit 0 - 3 body tak, aby součet bodů u všech \"STAŘINEK\" byl nejvýše <b>$konfig->{hlasu_celkem} bodů </b> \n";
    $stranka .= " <li>Každé hře z části \"NOVINKY\" můžete přidělit 0 - 3 body tak, aby součet bodů u všech \"NOVINEK\" byl nejvýše <b>$konfig->{hlasu_celkem} bodů </b> </ul>\n";
    $stranka .= " Hlasovací body jste dostali přidělené (3 - 15 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 10.8.2025. </b></p><p> Poté zařadíme do programu turnajů alespoň 3 hry z části \"STAŘINKY\" a cca 3 hry z části \"NOVINKY\", které získaly nejvíce hlasů.\n";
# ---------------------------------------------------------------------------------------------------------------
# Staré hry
# Od roku 2017 už jen jedno hlasování, tedy zrušeno rozdělení na novinky a steřinky.
# Od roku 2025 opět dělení na novinky a stařinky.

    $stranka .= "<h2>STAŘINKY </h2/>\n";
    $stranka .= "<h3>Volba z her, které měly na Deskohraní již alespoň 2 turnaje.</h3>\n";
    $stranka .= "<p>V části \"STAŘINKY\" máte k dispozici celkem: \n";
    $stranka .= "<b>$konfig->{hlasu_celkem} hlasovacích bodů</b> k rozdělení. \n";

    $stranka .= "<table> \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> (30 min, Věk: 10+) <p><p> \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. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/azu/azu-hla.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> (40 - 50 min, Věk: 8+) <p><p> \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!</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/car/car.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"scar\">\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=car\" target=\"pokladnice\">Carcassonne - turnaj 4 hráčů u stolu</a> (30 - 45 min, Věk: 8+) <p><p>\n";
    $stranka .= "POZOR! Letos bude turnaj Carcassone (hráno 4 hráči u stolu), jen pokud PROJDE HLASOVÁNÍM! Naopak Mistrovství ČR (hráno 2 hráči u stolu) bude na programu Deskohraní zařazen. \n";
    $stranka .= "</br>Postupným přikládáním kartiček tvoříte krajinu s hrady, kláštery, loukami a cestami. Svými figurkami se snažíte obsadit co největší část krajiny a získat tak co nejvíce bodů. </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> (30-40 min, Věk: 8+) <p><p>  \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ý. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/dok/dok-hla.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> (50-80 min, Věk: 10+) <p><p> \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í.  </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/dmn/dmn-hla.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> (20-40 min, Věk: 8+) <p><p> \n";
    $stranka .= "Jednoduchý a netradiční herní princip, rychlá herní doba a spousta strategických možností dělá z Dominion jednu z nejlépe hodnocených her světa. Vybudujte si své dominium a získejte rozsáhlé majetky dříve než soupeři. Stojíte na počátku budování své vlastní říše a nemáte nic než trochu peněz a malé pozemky. Avšak brány světa jsou otevřeny dokořán, říše vzkvétá zakládáním nových vesnic, založením tržiště či vztyčením trůnního sálu. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/zug/zug-hla.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>  (40-60 min, Věk: 8+) <p><p> \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.  </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/kas/kas-hla.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> (30-45 min, Věk: 10+) <p><p> \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ě.  </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/kid/kid-hla.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> (40-60 min, Věk: 10+) <p><p> \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é.  </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> (90-120 min, Věk: 12+) <p><p> \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. </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> (50-70 min, Věk: 12+) <p><p> \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. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/nov/nov-hla.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> (15 - 30 min, Věk: 8+) <p><p> \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. Nov – nejtemnější fáze měsíce – je už od pradávna symbolem nového začátku… V každém kole musíte znovu naplánovat své příští kroky a vytvořit si novou strategii, díky které se vypořádáte s proměnlivou nabídkou měsíčního kruhu.</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> (30-60 min, Věk: 8+) <p><p> \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.  </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/psl/psl-hla.jpg\" width=\"200\" class=\"left\">\n";
    $stranka .= "<select type=\"text\" name=\"spsl\">\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=psl\" target=\"pokladnice\">Příští stanice: Londýn</a> (20-30 min, Věk: 8+) <p><p> \n";
    $stranka .= "Právě vás najala londýnská městská rada, abyste vypracovali nové plány pro jejich metro. 1. Otočte kartu stanice. 2. Zakreslete úsek trasy a vytvořte novou stanici. 3. Optimalizujte síť celé podzemní dráhy. Kdo se stane nejlepším architektem metra?  </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> (90-150 min, Věk: 12+) <p><p> \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ů…?  </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/trn/trn-hla.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 Evropa</a> (20 - 40 min, Věk: 8+) <p><p> \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. </td></tr>\n";

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

# ------------------------------------------------------------------------------------------------------------------
# Nové hry  zrušno od roku 2017
# Od 2025 opět zavedeno

    $stranka .= "<h2>NOVINKY </h2/>\n";
    $stranka .= "<h3>Volba z her, které měly na Deskohraní do jednoho turnaje nebo jsou to úplné novinky.</h3>\n";
    $stranka .= "<p>V části \"NOVINKY\" máte k dispozici: \n";
    $stranka .= "<b>$konfig->{hlasu_celkem} hlasovacích bodů</b> k rozdělení. \n";

    $stranka .= "<table> \n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/ash/ash-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nash\">\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=ash\" target=\"pokladnice\">Architekti Skalistého hřbetu</a> (45 - 60 min, Věk: 10+) <p><p> \n";
    $stranka .= "Ve hře se stanete staviteli labyrintů ve světě známé hry Hrdina v kostce. Vaším cílem je vybudovat labyrint, který vám přinese co nejvíce vítězných bodů. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/bhr/bhr.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nbhr\">\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=bhr\" target=\"pokladnice\">Bílý hrad</a> (60 - 90 min, Věk: 12+) <p><p> \n";
    $stranka .= "Strategická euro hra s mechanikami správy surovin, umisťovaní dělníků a kostek pomocí kterých provádíte své akce. Během tří kol hráči vysílají členy svých klanů, aby udržovali zahrady, bránili hrad či stoupali po společenském žebříčku na místním dvoře. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/sco/sco.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nsco\">\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=sco\" target=\"pokladnice\">Cirkus (Scout)</a> (15 - 30 min, Věk: 9+) <p><p> \n";
    $stranka .= "V maličké kapesní hře bojujete všichni proti sobě coby principálové cirkusů, kteří se předhání v tom, kdo divákům předvede nejúchvatnější cirkusovou show (vyloží nejlepší karty). Jenže vám chybí lidi, a tak je musíte zlanařit od konkurence (získávat karty soupeře). Nabrat lidi, připravit show a ohromit diváky – to je, oč tu běží. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/obk/obk-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nobk\">\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=obk\" target=\"pokladnice\">Do oblak</a> (30 - 45 min, Věk: 8+) <p><p> \n";
    $stranka .= "Přestavba centra je v plném proudu a vy jste získali zakázku na všechny nové mrakodrapy: to znamená nové stavby, lákavé bonusy, a pokud všechno dobře dopadne, taky balík peněz! </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/hea/hea-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nhea\">\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=hea\" target=\"pokladnice\">Heat</a> (45 - 60 min, Věk: 8+) <p><p> \n";
    $stranka .= "(Hráči si vyzkouší roli závodníků v historických formulích a jejich cíl je zvítězit v závodech, které se jedou na určitý počet kol. Dle pokročilých pravidel se pak hráči snaží zvítězit v celém šampionátu, který se skládá z více samostatných závodů. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/hrd/hrd.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nhrd\">\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=hrd\" target=\"pokladnice\">Hradní devatero (Castle Combo)</a> (10 - 25 min, Věk: 10+) <p><p> \n";
    $stranka .= "Hráči se snaží osídlit svůj hrad a podhradí devíti obyvateli, kteří se budou co nejlépe navzájem doplňovat. Výsledná sestava hráčům přinese na konci hry body a hráč, který jich získá nejvíce, se stane vítězem hry. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/hzp/hzp-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nhzp\">\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=hzp\" target=\"pokladnice\">Hutan život v pralese</a> (30 - 45 min, Věk: 8+) <p><p> \n";
    $stranka .= "Vybudujte si svůj vlastní deštný les, sázejte květiny, pěstujte stromy a přilákejte exotická zvířata. Naplánujte si každý tah a vytvořte ten nejkrásnější prales! </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/kzv/kzv-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nkzv\">\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=kzv\" target=\"pokladnice\">Krajina zvířat</a> (30-45 min, Věk: 10+) <p><p> \n";
    $stranka .= "Krajina zvířat je hra s grafickým stylem, který slibuje spojit představivost, poezii a strategii. Hráči vytvářejí své vlastní krajiny, zvedají pohoří, sledují tok řek, rozpínají pláně a města, a přitom se snaží přilákat zvířata, aby tam žila…  </td></tr>\n";
 
    $stranka .= "<tr><td> <img src=\"/obr/fotky/kth/kth-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nkth\">\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=kth\" target=\"pokladnice\">Kutná Hora</a> (60-120 min, Věk: 13+) <p><p> \n";
    $stranka .= "Stříbro – tento vzácný kov již brzy promění původně klidné údolí ve středních Čechách v jedno z nejvýznamnějších měst středověké Evropy. Jako hlava jedné z tehdejších vlivných rodin budete u toho. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/l3o/l3o-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nl3o\">\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=l3o\" target=\"pokladnice\">Loooď</a> (25 - 35 min, Věk: 10+) <p><p> \n";
    $stranka .= "Když na obzoru spatřili vlajky vašich dlouhých lodí, obyvatelé této překrásné země se otočili a dali se na útěk! Nyní je na vás, abyste vedli své vikingy, vyplenili budovy a zmocnili se co nejbohatší kořisti. Kdo bude korunován vikinským jarlem? </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/msa/msa-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nmsa\">\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=msa\" target=\"pokladnice\">Města</a> (45 - 60 min, Věk: 10+) <p><p> \n";
    $stranka .= "Strategická hra, ve které se stáváte architekty moderních čtvrtí. Vaším úkolem je chytře vybírat pozemky, budovy a zajímavosti, abyste vytvořili harmonické a prosperující prostředí. Staňte se uznávanými architekty a vybudujte město snů ve hře Města!</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/mov/mov-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nmov\">\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=mov\" target=\"pokladnice\">Monumenty věků</a> (60-90 min, Věk: 14+) <p><p> \n";
    $stranka .= "Vžijte se do role velkých vůdců minulosti a vybudujte si vlastní starověké město. Budete utrácet své mince na stavbu objektů, které rozvinou ekonomiku vašeho města. Produkujte potraviny, vytvářejte keramiku a rozvíjejte technologie, ať vaše město roste! </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/mod/mod-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nmod\">\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=mod\" target=\"pokladnice\">Moře draků</a> (30 - 45 min, Věk: 8+) <p><p> \n";
    $stranka .= "Budete se svým klanem draků sbírat poklady a chránit mořská království před troufalými piráty. Nejúspěšnějším dračím klanem bude ten, kdo nejlépe splní úkoly, nasbírá nejvíce pokladů a bude nejvíce zastoupen v jednotlivých mořských královstvích. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/npt/npt.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nnpt\">\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=npt\" target=\"pokladnice\">Na ploutvích</a> (60 - 90 min, Věk: 10+) <p><p> \n";
    $stranka .= "Strategická hra Na ploutvích tě zavede do hlubin oceánů, kde se staneš mořským biologem. Tvým úkolem bude objevovat a zkoumat rozmanité druhy ryb, sbírat vajíčka, líhnout potěr a vytvářet hejna. Ponoř se do hry a objev fascinující svět podmořského života! </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/neb/neb-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nneb\">\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=neb\" target=\"pokladnice\">Nebula</a> (30 - 45 min, Věk: 8+) <p><p> \n";
    $stranka .= "Budete originálně získávat hvězdy z centrálních tří nabídek správným časováním svých akcí. Následně je budete strategicky rozmísťovat do souhvězdí a orbit, abyste splnili vlastní i společné úkoly. Najdete i černé díry, které mají speciální roli. Hra nabízí rodinný i pokročilý režim, aby přinesla výzvu jak příležitostným hráčům, tak nadšeným astronomům.</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/osr/osr-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nosr\">\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=osr\" target=\"pokladnice\">Osmero</a> (25 - 30 min, Věk: 10+) <p><p> \n";
    $stranka .= "Vydejte se na tajemný ostrov Aluda a zmapujte jej! Rychlá zábavná karetní hra pro až 6 hráčů, ve které budete muset chytře skládat karty, abyste je obodovali v opačném pořadí.</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/sml/sml-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nsml\">\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=sml\" target=\"pokladnice\">Smíšený les</a> (40 - 60 min, Věk: 10+) <p><p> \n";
    $stranka .= "V této hře sestavujete les vykládáním karet stromů a k nim karty dalších obyvatel lesa. Snažíte se přitom co nejlépe vyhovět jejich potřebám, za což na konci hry získáte vítězné body.  </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/snf/snf.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nsnf\">\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=snf\" target=\"pokladnice\">Sneferu</a> (45 - 60 min, Věk: 10+) <p><p> \n";
    $stranka .= "V původní české hře Adama Španěla se zhostíte rolí egyptských architektů, které Sneferu po dvou neúspěšných pokusech, a s vědomím blížící se smrti, povolal do svých služeb. Vaším úkolem je konečně postavit pyramidu, která bude hodna jeho jména. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/sty/sty.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nsty\">\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=sty\" target=\"pokladnice\">Štycholov</a> (40 - 60 min, Věk: 8+) <p><p> \n";
    $stranka .= "Ve hře se během osmi kol pokusíte ulovit co nejvíc štychů. Ale pozor! Karty, které v jednom kole nachytáte, budou tvořit vaši ruku karet do dalších kol! Hru vyhrává ten, kdo nasbírá nejvíc bodů, ale kolik nových karet z oceánu k tomu budete potřebovat?</td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/ter/ter-hla.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nter\">\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=ter\" target=\"pokladnice\">Terárko</a> (15 - 30 min, Věk: 8+) <p><p> \n";
    $stranka .= "Sestavte si terárium plné úžasných živočichů a rostlin. Vytvořte prostředí, ve kterém budou mít plazi a obojživelníci dostatek prostoru a úkrytů, a pochlubte se nejlepší možnou kombinací! </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/tve/tve.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"ntve\">\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=tve\" target=\"pokladnice\">Toulavé věže</a> (30-45 min, Věk: 7+) <p><p>  \n";
    $stranka .= "Rok co rok měří studenti posledního ročníku čarodějné školy Havraního království své čerstvě nabyté znalosti a dovednosti. Každá třída zkouší ve velkém absolventském závodě dosáhnout nepolapitelného Havraního hradu nejrychleji. </td></tr>\n";

    $stranka .= "<tr><td> <img src=\"/obr/fotky/zbm/zbm.jpg\" width=\"200\" class=\"right\">\n";
    $stranka .= "<select type=\"text\" name=\"nzbm\">\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=zbm\" target=\"pokladnice\">Zboduj město</a> (15-30 min, Věk: 10+) <p><p>\n";
    $stranka .= "Zboduj město navazuje na Zbodni salát, ale ke svižnému rozebírání karet přidává i správu zdrojů a budování provázaného městského systému. Snadno pochopitelná pravidla zůstávají, najít vítěznou strategii však bude o stupínek náročnější!  </td></tr>\n";




 





    $stranka .= "<tr><td><input type=\"hidden\" name=\"novinka1\" value=0>\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 .= "<strong>Místo pro Váš návrh: </strong> (můžete napsat i více her)<br><input type=\"text\" name=\"novinka1_nazev\" size=\"40\"/></td></tr>\n";

#    $stranka .= "<tr><td><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\"/></td></tr>\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 > 15 || $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.
    # Od roku 2025 znovu obnovené 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 || $hra =~ m/^novinka\d$/);
        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'") if($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}
    });
}
