#!/usr/bin/perl
# CGI přístup k databázi her. Generuje jak seznamy, tak stránky o konkrétních hrách.
# (c) 2002 - 2005 Daniel Zeman
# Licence: GNU GPL
# prosinec 2002: vytvořeno
# 30.12.2003: přechod na UTF-8
# 11.12.2005: data už se neberou z textových souborů, ale z MySQL serveru

use utf8;
use Encode;
use DBI;
# Přinutit Perl, aby UTF8 vypisoval jako UTF8 a nevymýšlel pro mě "vhodné" osmibitové kódování.
binmode(STDOUT, ":utf8");
# Kvůli sestavení parametrů; čtení parametrů zatím probíhá nějak pravěce.
require("./dancgi.pm");



# Zapamatovat si, kdy jsme s generováním stránky začali, abychom na konci mohli
# zjistit, jak dlouho nám to trvalo.
$starttime = time();



# Přečíst parametry.
dancgi::cist_parametry(\%pole);
dancgi::cist_formular_post(\%pole) if($pole{formular});
# Robotům odmítnout přístup, jestliže si chtějí něco strčit do košíku.
use norobot;
if(!norobot::proverit() && exists($pole{kosik}))
{
    norobot::ohlasit_chybu();
    exit(0);
}



# Zjistit cestu pro odkazování na statické stránky hrejsi.
open(KONFIG, "../cgi.cfg");
while(<KONFIG>)
{
    if(m/(\S+)\s*=\s*([^\r\n]*)/)
    {
        $konfig{$1} = $2;
    }
}
close(KONFIG);
$koren_hrejsi = $konfig{ccesta_html_www};
$koren_system = $konfig{scesta_html_www};
# Pro ladící účely si nachystat výpis parametrů na výstup.
$ladeni = 0;
if($ladeni)
{
    foreach($key, sort(keys(%pole)))
    {
        $dbg_parametry .= "$key = $pole{$key}\n";
    }
    $dbg_parametry = "<pre>$dbg_parametry</pre>\n";
}
# V režimu "objednavka" se o obsahu košíku smí dozvědět jen zasvěcení.
# Ale např. ti, co konstruují odkazy na stránky s hrami, si musí myslet,
# že košík je momentálně prázdný!
if($pole{hra} eq "objednavka")
{
    $objednany_kosik = $pole{kosik}; # globální proměnná
    delete($pole{kosik});
}
# Připojit se k databázi her.
# Pokud je skript spuštěn webovým serverem (uživatel www-data), měl by mít dostatečná práva pro přístup k databázi.
# Pokud je ale spuštěn uživatelem dan@kub.cz, práva nemá a musí se databázi hlásit jako root. V tom případě je potřeba,
# aby příslušné heslo bylo v proměnné prostředí DBI_ROOT_PASS.
if($ENV{USER} eq "dan")
{
    if(!exists($ENV{DBI_ROOT_PASS}))
    {
        die("Pri spusteni jinym uzivatelem nez www-data musi byt v promenne prostredi DBI_ROOT_PASS heslo roota do databaze.\n");
    }
    $dbi_uzivatel = "root";
    $dbi_heslo = $ENV{DBI_ROOT_PASS};
}
$databaze = DBI->connect("DBI:mysql:hry", $dbi_uzivatel, $dbi_heslo)
  or print STDERR ("Nelze se pripojit k databazi: $DBI::errstr\n");
vypsat_stranku();



###############################################################################
# Podprogramy
###############################################################################



#------------------------------------------------------------------------------
# Vypíše kostru stránky. Volá podřízené funkce pro jednotlivé části stránky.
#------------------------------------------------------------------------------
sub vypsat_stranku
{
    vypsat_zahlavi();
    print("  <table border=\"0\" width=\"100%\">\n");
    print("    <tr>\n");
    print("      <td align=\"left\" valign=\"top\" width=\"15%\">\n");
    vypsat_seznam_her_na_prodej();
    print("      </td>\n");
    print("      <td align=\"center\" valign=\"top\">\n");
    # Vnořit tabulku do pravé buňky.
    print("        <table border=\"0\" width=\"100%\">\n");
    print("          <tr>\n");
    print("            <td align=\"center\" valign=\"top\">\n");
    vypsat_uvod_obchodu();
    print("            </td>\n");
    print("            <td align=\"center\" valign=\"top\">\n");
    vypsat_odkazy_na_palubu();
    print("            </td>\n");
    print("          </tr>\n");
    print("          <tr valign=\"top\">\n");
    vypsat_prostredek_stranky();
    vypsat_pravy_okraj();
    print("          </tr>\n");
    print("        </table>\n");
    print("      </td>\n");
    print("    </tr>\n");
    print("  </table>\n");
    # Zjistit, jak dlouho nám to trvalo, a vypsat to na konec stránky.
    my $hlaseni = sestavit_hlaseni_o_trvani_programu($starttime);
    print("  <div align=right><address>$hlaseni</address></div>\n");
    # Vypsat závěr stránky.
    vypsat_zapati();
}



#------------------------------------------------------------------------------
# Provede počáteční úkony, nezávislé na tom, jaký pohled uživatel zvolil.
# Načte parametry a vypíše začátek HTML stránky.
#------------------------------------------------------------------------------
sub vypsat_zahlavi
{
    # Poslat MIME záhlaví dokumentu.
    print("Content-Type: text/html; charset=utf-8\n\n");
    # Nachystat si proměnné části začátku stránky.
    # Poslat začátek stránky.
    print <<EOF
<html>
  <head>
    <meta http-equiv="Content-Language" content="cs">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Deskové hry</title>
    <meta name="description" content="Portál o deskových hrách. Pravidla, recenze, akce, pozvánky, turnaje, informace o deskových hrách.">
    <meta name="keywords" content="prodej, deskove hry, hry, deskové hry, Klub deskových her Paluba, Klub Paluba, pravidla, turnaje, games, board games, akce, pozvánky, recenze, Othello, Abalone, Vrhcáby, Scrabble, Zatre.">
  </head>
  <body>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vypíše závěr stránky HTML.
#------------------------------------------------------------------------------
sub vypsat_zapati
{
    # Poslat konec stránky.
    print <<EOF
  </body>
</html>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vyrobí odkaz, který vede zpět na tento skript, ale s jinými parametry.
#------------------------------------------------------------------------------
sub odkazpar
{
    my $text = shift;
    my $konfig = shift; # odkaz na hash s dosavadními parametry skriptu
    # Ostatní parametry funkce popisují nové parametry, se kterými se má zavolat tento skript, ve tvaru atr=hodnota
    my $parametry = dancgi::sestavit_parametry_odkaz($konfig, @_);
    return "<a href=\"prodej.pl?$parametry\">$text</a>";
}



#------------------------------------------------------------------------------
# Vypíše seznam her na prodej.
#------------------------------------------------------------------------------
sub vypsat_seznam_her_na_prodej
{
    print("        <h3 align=\"center\">Seznam her na prodej:</h3>\n");
    print("        <p>\n");
    # Získat z databáze seznam názvů her a jejich kódů.
    # Propojit s tabulkou "prodej", aby se seznam her omezil na hry, které se dají koupit.
    my $dotaz = "SELECT kod, hry.nazev FROM hry INNER JOIN prodej ON hry.kod = prodej.kod_hry GROUP BY kod, hry.nazev";
    my $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    while(my ($kod, $nazev) = map{decode("utf8", $_)}($dtzobj->fetchrow_array()))
    {
        print(odkazpar($nazev, \%pole, "hra=$kod"), "<br>\n");
    }
    print("        </p>\n");
}



#------------------------------------------------------------------------------
# Vypíše úvodní text obchodu s hrami.
#------------------------------------------------------------------------------
sub vypsat_uvod_obchodu
{
    print("<h1>Obchod s&nbsp;hrami</h1>\n");
#     print("<p><font color=red>Objednávky pro dodání poštou přijaté po 15.12.2005 budou vyřízeny až začátkem ledna 2006. Osobního odběru na Palubě se to netýká - Paluba je v&nbsp;provozu do 22.12.2005 a hry si můžete zarezervovat zde nebo na telefonu 257&nbsp;324&nbsp;291.</font></p>\n");
    print("<p>Všechny hry si můžete koupit jak v&nbsp;<a href=\"$koren_hrejsi/paluba/index.htm\">Klubu deskových her Paluba</a>, tak také přímo ");
    print(odkazpar("zde na dobírku.", \%pole, "hra=obecne"));
    print(" Pak připočítáváme poštovné 79&nbsp;Kč.</p>\n");
    print("<h3>\n<p>\n");
    print(odkazpar("<font color=red>NOVINKY</font>", \%pole, "hra=novinky"), " | \n");
    print(odkazpar("Dodací podmínky", \%pole, "hra=obecne"), " | \n");
    print(odkazpar("SLEVY", \%pole, "hra=slevy"), " | \n");
    print(odkazpar("Ceník (řazený podle cen)", \%pole, "hra=cenik"), "</p>\n<p>");
    print(odkazpar("<font color=green>PORADNA:</font>", \%pole, "hra=poradna"), " hry pro \n");
    print(odkazpar("celou rodinu", \%pole, "hra=rodina"), " | \n");
    print(odkazpar("děti", \%pole, "hra=deti"), " | \n");
    print(odkazpar("fajnšmekry", \%pole, "hra=experti"), " | \n");
    print(odkazpar("dva", \%pole, "hra=pro2"), " | \n");
    print(odkazpar("party a mejdany", \%pole, "hra=mejdan"), "\n");
    print("</p>\n</h3>\n");
}



#------------------------------------------------------------------------------
# Vypíše odkazy na Palubu.
#------------------------------------------------------------------------------
sub vypsat_odkazy_na_palubu
{
    print <<EOF
          <h3>Klub deskových her Paluba</h3>
          <img src="$koren_hrejsi/obr/logo.gif" height=50 align="center">
          <p><a href="program.pl">Program Paluby</a>, <a href="$koren_hrejsi/paluba/index.htm">Stránka Paluby</a>
          <br>(klepnutím na tyto odkazy ztratíte obsah košíku)</p>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vypíše prostředek stránky
#------------------------------------------------------------------------------
sub vypsat_prostredek_stranky
{
    if($pole{hra} eq "")
    {
        prostredek_novinky();
    }
    elsif($pole{hra} eq "obecne")
    {
        prostredek_obecny();
    }
    elsif($pole{hra} eq "novinky")
    {
        prostredek_novinky();
    }
    elsif($pole{hra} eq "poradna")
    {
        prostredek_poradna();
    }
    elsif($pole{hra} eq "deti")
    {
        prostredek_poradna_deti();
    }
    elsif($pole{hra} eq "rodina")
    {
        prostredek_poradna_rodina();
    }
    elsif($pole{hra} eq "pro2")
    {
        prostredek_poradna_pro2();
    }
    elsif($pole{hra} eq "experti")
    {
        prostredek_poradna_experti();
    }
    elsif($pole{hra} eq "mejdan")
    {
        prostredek_poradna_mejdan();
    }
    elsif($pole{hra} eq "slevy")
    {
        prostredek_slevy();
    }
    elsif($pole{hra} eq "cenik")
    {
        prostredek_cenik();
    }
    elsif($pole{hra} eq "cenikk")
    {
        prostredek_cenik_klubovy();
    }
    elsif($pole{hra} eq "objednavka")
    {
        prostredek_objednavka();
    }
    else
    {
        prostredek_hra($pole{hra});
    }
}



#------------------------------------------------------------------------------
# Vypíše obecný prostředek, když není vybrána konkrétní hra.
#------------------------------------------------------------------------------
sub prostredek_obecny
{
    print <<EOF
        <td align="center" valign="top" WIDTH="70%">
          
          <p>Všechny vlevo uvedené hry i mnohé dalších si můžete zakoupit
             v&nbsp;<a HREF="$koren_hrejsi/paluba/index.htm">Klubu deskových her Paluba</a>
             (Praha, Lidická&nbsp;40 u&nbsp;Anděla, po,&nbsp;st 16 - 22 hod., út,&nbsp;čt 17 - 21 hod.).
             Všechny hry, které jsou na prodej, si v&nbsp;klubu můžete vyzkoušet, takže nebudete
             kupovat zajíce v&nbsp;pytli. Odborná rada také nebude chybět!</p>
          <p>Také můžeme tyto hry  <b>zaslat na dobírku.</b> <br>Pak k&nbsp;ceně připočteme <b>poštovné 79&nbsp;Kč.</b>
          <ul><p>Při objednávce: 
              <li>nad 2&nbsp;000&nbsp;Kč je <b>poštovné ZDARMA.</b></li>
              <li>nad 5&nbsp;000 Kč <b>sleva 3%</b></li>
          </ul>
          </p>
          <p><b>Při předplatbě na účet platíte poštovné jen 49&nbsp;Kč. Chcete-li využít předplatbu, napište to do poznámky při objednávce.</b>
          <p><b>Organizace pracující s dětmi a mládeží také obdrží slevu. </b>
            <br>Pokud jste taková organizace, <b>nezapomeňte to uvést při objednávce!</b></p>
          <p>Dobírku lze zaslat i na Slovensko, ale pouze do 2&nbsp;kg a poštovné je
             bohužel mnohem dražší (kolem 250&nbsp;Kč, dle sazebníku české pošty).</p>
          <p>Objednávky vyřizujeme zhruba <b>do 14&nbsp;dnů,</b> je-li hra skladem.
             <br>Je-li u hry uvedeno, že jde o hru <b>na objdnávku,</b> mohou být <b>dodací lhůty delší.</b></p>
          <p>U některých her je také možné 
          <br><font color=red><b>EXPRESNÍ DODÁNÍ</b>, které obdržíte do 48 hodin.</font> 
          <br>Je třeba si nejlépe telefonicky či mailem ověřit, zda je to u dané hry zrovna možné.
          <br>U expresnich dodávek připočítáváme <b>expresní příplatek 50&nbsp;Kč,</b> 
             tedy celé poštovné a balné vyjde na 129&nbsp;Kč</p>
        </td>
EOF
    ;
}


#------------------------------------------------------------------------------
# Vypíše prostředek novinky, když není vybrána konkrétní hra.
#------------------------------------------------------------------------------
sub prostredek_novinky
{
    print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
          <h1 align=center><font color=red>Novinky</font></h1>
          <p><b> </b></p>
          <ul>

EOF
;
 
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=psi");
          print("<li><a HREF=\"prodej.pl?$parametry\">Psí život</a> Podařilo se nám dovézt pár kusů této oblíbené hry. Tedy momentálně je hra skladem, ale počet kusů je omezen a patrně je to poslední dodávka do ČR!  \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=lui");
          print("<li><a HREF=\"prodej.pl?$parametry\">Ludvík XIV.</a> Velice zajímavá hra pro 2 - 4 hráče od 12 let.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=haf");
          print("<li><a HREF=\"prodej.pl?$parametry\">Haf haf!</a> Vhodné pro děti od 3 let. Hra částečně na paměť, částečně závisí na náhodě. Psí máma uprostřed opravdu štěká a kolikrát štěkne, o tolik políček popojdou štěňátka, která hledají kostičku své barvy. Kosti se pejskům přichytávají k&nbsp;čumáčkům magnetem.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mys");
          print("<li><a HREF=\"prodej.pl?$parametry\">Myšky</a> Vhodné pro děti od 4 let. Hra je částečně na paměť a na postřeh. Zaujme i starší, je u ní spousta legrace.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=zkv");
          print("<li><a HREF=\"prodej.pl?$parametry\">Žabák Kvak</a> Vhodné pro děti od 5 let. Zábavná hra na postřeh.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=car");
          print("<li><a HREF=\"prodej.pl?$parametry\">Carcassonne Město</a> Samotatná hra pro 2 - 4 hráče. Je nejen herně zajímavá, ale také luxusně provedená: v dřevěné krabičce, dřevěné hradby a věže.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=hll");
          print("<li><a HREF=\"prodej.pl?$parametry\">Halali</a> Velice zajímavá hra pro 2 hráče. Hra je neobvyklá tím, že hráči mají odlišné možnosti tahů. \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=spe");
          print("<li><a HREF=\"prodej.pl?$parametry\">Sankt Petersburg</a> Velice zajímavá hra pro 2 - 4 hráče od 10 let. Byla nominována na cenu německé kritiky <a href=\"http://www.spiel-des-jahres.de/front_content.php?idcatart=148&amp;lang=1&amp;client=1\">Spiel des Jahres 2004</a>.\n");

          print("</ul><h3>Podívejte se také na naše tipy pro:</h3> \n");
          print("<ul>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=rodina");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu, která s&nbsp;hraním začíná</a> \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=deti");
          print("<li><a HREF=\"prodej.pl?$parametry\">malé děti (2 - 7 let)</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=pro2");
          print("<li><a HREF=\"prodej.pl?$parametry\">dva</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=experti");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu či skupinu přátel, kteří už hrají nějaký ten pátek</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mejdan");
          print("<li><a HREF=\"prodej.pl?$parametry\">kamaráda - hry, které se hodí na párty a mejdany</a>\n");
          print("</ul>\n");
print <<EOF
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:   
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>.
          </p>
        </td>
EOF
    ;
}

#------------------------------------------------------------------------------
# Vypíše prostředek Herní poradna, když není vybrána konkrétní hra.
#------------------------------------------------------------------------------
sub prostredek_poradna
{
    print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
          <h1 align=center><font color=green>Herní poradna</font></h1>
          <p>Chcete koupit nějakou hru a vůbec nevíte jakou? V&nbsp;obchodech jsou jen zabalené krabice, tak jak zjistit, která stojí za to?</p>
          <p>Nejlepší je zajít do nějakého herního klubu a hru si zahrát. V&nbsp;<a HREF="http://www.paluba.cz/">Klubu deskových her Paluba</a>
          si hry zahrajete a můžete si je rovnou i koupit. Odborná rada zde nikdy nechybí!</p>
          <p>Pokud nemáte tuto možnost, pokusíme se Vám zde dát pár užitečných tipů. Jsou členěny podle toho, pro koho jsou hry určeny.
          Někdy také chcete koupit hru jen do určitého cenového limitu. Pak Vám určitě ve výběru pomůže  
EOF
;
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=cenik");
          print("<a HREF=\"prodej.pl?$parametry\">ceník (řazený dle cen).</a></p>\n");
          print("<p>Vyberte si z&nbsp;následujících odkazů podle toho, komu chcete hru koupit:</p>\n");
          print("<ul>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=rodina");
          print("<li>Chci koupit <a HREF=\"prodej.pl?$parametry\">hru pro celou rodinu, která s&nbsp;hraním začíná.</a> \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=deti");
          print("<li>Chci koupit <a HREF=\"prodej.pl?$parametry\">hru pro malé dítě (2 - 7 let).</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=pro2");
          print("<li>Chci koupit <a HREF=\"prodej.pl?$parametry\">hru pro dva.</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=experti");
          print("<li>Chci koupit <a HREF=\"prodej.pl?$parametry\">hru pro celou rodinu či skupinu přátel, kteří už hrají nějaký ten pátek.</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mejdan");
          print("<li>Chci koupit <a HREF=\"prodej.pl?$parametry\">pro kamaráda hru, která se hodí na párty a mejdany.</a>\n");
          print("</ul>\n");
print <<EOF
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:   
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>.
          </p>
        </td>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vypíše prostředek Herní poradna, když jsou vybrány rodinné hry.
#------------------------------------------------------------------------------
sub prostredek_poradna_rodina
{
    print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
          <h1 align=center><font color=green>Herní poradna</font></h1>
          <h1 align=center>Hry pro celou rodinu</h1>
          <p>Chcete koupit nějakou hru a vůbec nevíte jakou? V&nbsp;obchodech jsou jen zabalené krabice, tak jak zjistit, která stojí za to?</p>
          <p>Nejlepší je zajít do nějakého herního klubu a hru si zahrát. V&nbsp;<a HREF="http://www.paluba.cz/">Klubu deskových her Paluba</a>
             si hry zahrajete a můžete si je rovnou i koupit. Odborná rada zde nikdy nechybí!</p>
          <p>Pokud si nemůžete hry vyzkoušet, nabízíme zde pár konkrétních tipů.</p>
          <p>Jsou zde hry, které nemají složitá pravidla, dají se hrát i bez "zkušeností s&nbsp;hraním" a kromě toho jsou "osvědčené". 
             Tedy většině lidí (od dětí přes teenagery a dospěláky až po babičky) se líbí.</p>
          <ul>
EOF
;
 
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=car");
          print("<li><a HREF=\"prodej.pl?$parametry\">Carcassonne</a> Ideální rodinná hra (pro 2 - 5 hráčů od 6 let). Jednoduchá, zábavná, oceněná mnoha cenami, oblíbená po celém světě. Má řadu rozšíření a variant, takže pokud vás chytne, můžete rozšiřovat a zesložiťovat.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=car");
          print("<li><a HREF=\"prodej.pl?$parametry\">Carcassonne Město</a> NOVINKA! Samostatná hra pro 2 - 4 hráče. Je nejen herně zajímavá, ale také luxusně provedená: v&nbsp;dřevěné krabičce, dřevěné hradby a věže.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=osa");
          print("<li><a HREF=\"prodej.pl?$parametry\">Osadníci z Katanu</a> O malinko složitější rodinná hra (pro 3 - 4 hráče od 8 let), která vás chytne a nepustí. Oceněná mnoha cenami (<a href=\"http://hraroku.cz/\">Hra roku 2004</a>), oblíbená po celém světě. Má řadu rozšíření a variant, takže pokud vás chytne, můžete rozšiřovat a zesložiťovat.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=trn");
          print("<li><a HREF=\"prodej.pl?$parametry\">Trans America</a> Ideální rodinná hra (pro 2 - 6 hráčů od 7 let). Jednoduchá, rychlá a zábavná, nominovaná na cenu německé kritiky <a href=\"http://www.spiel-des-jahres.de/front_content.php?idcatart=124&amp;lang=1&amp;client=1\">Spiel des Jahres 2002</a>, oblíbená po celém světě.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=eme");
          print("<li><a HREF=\"prodej.pl?$parametry\">Emerald</a> Ideální rodinná hra (pro 2 - 5 hráčů). Určitě svým námětem zaujme i mladší hráče. Kradete totiž drakovi zlato a drahokamy.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=crt");
          print("<li><a HREF=\"prodej.pl?$parametry\">Cartagena</a> Dobrodružná rodinná hra (pro 2 - 5 hráčů od 8 let). Hra s&nbsp;netradičním vtipně řešeným herním systémem na motivy útěku z&nbsp;vězení.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=act");
          print("<li><a HREF=\"prodej.pl?$parametry\">Activity</a> Zábavná hra pro vetší skupinu lidí (pro 3 - 16 hráčů). Hra prohlubující komunikační schopnosti. Vylosujete si pojem, který musíte namalovat, popsat či předvést. Má několik variant pro různé věkové skupiny.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=spe");
          print("<li><a HREF=\"prodej.pl?$parametry\">Sankt Petersburg</a> Novinka. Trochu složitější, ale velice zajímavá hra pro 2 - 4 hráče od 10 let. Byla nominována na cenu německé kritiky <a href=\"http://www.spiel-des-jahres.de/front_content.php?idcatart=148&amp;lang=1&amp;client=1\">Spiel des Jahres 2004</a>.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=psi");
          print("<li><a HREF=\"prodej.pl?$parametry\">Psí život</a> Zábavná a vtipná hra hra pro 2 - 6 hráčů od 10 let.\n");

          print("</ul><h3>Kromě rodinných her se můžete podívat na zajímavé hry pro:</h3> \n");
          print("<ul>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=deti");
          print("<li><a HREF=\"prodej.pl?$parametry\">malé děti (2 - 7 let)</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=pro2");
          print("<li><a HREF=\"prodej.pl?$parametry\">dva</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=experti");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu či skupinu přátel, kteří už hrají nějaký ten pátek</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mejdan");
          print("<li><a HREF=\"prodej.pl?$parametry\">kamaráda - hry, které se hodí na párty a mejdany</a>\n");
          print("</ul>\n");
print <<EOF
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:   
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>.
          </p>
        </td>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vypíše prostředek Herní poradna, když jsou vybrány hry pro malé děti.
#------------------------------------------------------------------------------
sub prostredek_poradna_deti
{
    print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
          <h1 align=center><font color=green>Herní poradna</font></h1>
          <h1 align=center>Hry pro děti ve věku 2 - 7 let</h1>
          <p>Deskové hry jsou nejen zábava, ale také rozvíjejí mnohé schopnosti (paměť, logické myšlení, koncentraci, pozorovací schopnosti, komunikační dovednosti, 
            jemnou motoriku, postřeh...). Kromě toho je pro vývoj dítěte velmi důležité, když se sejde celá rodina a něco aktivního dělá pohromadě. 
            Žádný sebedražší dárek nenahradí příjemnou a láskyplnou rodinnou atmosféru! Půl hodinky denně "celorodinného hraní" je pro dítě mnohem cennější, 
            než jakýkoliv dárek.</p>
          <p>Hrajeme s&nbsp;dětmi Pexeso či Člověče, nezlob se! A ani nevíme, že her pro tuto věkovou skupinu jsou desítky a velké množství z&nbsp;nich stojí za to. 
            Her je mnoho a v&nbsp;obchodě podle krabice poznáte málo… 
          <p>Nejlepší je si hry vyzkoušet. Můžete tak učinit například v&nbsp;<a HREF="http://www.paluba.cz">Klubu deskových her Paluba</a>,
             kde si hry zahrajete i si je můžete rovnou koupit. Odborná rada zde nikdy nechybí!</p>
          <p>Pokud si nemůžete hry vyzkoušet, nabízíme zde pár konkrétních tipů:
          <ul>
EOF
;
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mme");
          print("<li><a HREF=\"prodej.pl?$parametry\">Medoví Medvídci</a> Baví všechny děti od 3 let. Moc dobře udělaný strom (55 cm vysoký), skrz který propadávají medové kuličky i sami medvídci.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mte");
          print("<li><a HREF=\"prodej.pl?$parametry\">Mám tě!</a> Zábavná hra na postřeh pro děti od 4 let. Kdo pochytá plácačkou víc much?\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=kuo");
          print("<li><a HREF=\"prodej.pl?$parametry\">Kuřecí olympiáda</a> Kvalitní hra na paměť pro děti od 4 let, určitě bude bavit i 8 leté a rodičům taky protáhne mozkové závity. \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mdn");
          print("<li><a HREF=\"prodej.pl?$parametry\">Měsíčkova hra na dobrou noc</a> Rychlá hra (na cca 10 min.) s&nbsp;fosforeskujícími hvězdičkami, vhodná na večerní zklidnění. V&nbsp;první půlce hry hvězdičky věšíte na oblohu a v druhé půlce je zhasínáte. Pro děti od 3 let.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=vst");
          print("<li><a HREF=\"prodej.pl?$parametry\">Veselý statek</a> Velice hezky vyrobená hra s dřevěnými zvířátky a papírovým domečkem. Trochu složitější hra na paměť i trochu taktiky. Vhodná od 4 či 5 let, dle vyspělosti dítěte. \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=act");
          print("<li><a HREF=\"prodej.pl?$parametry\">Activity děti</a> Zdařilá modifikace hry pro děti od 4 let. Předvádíte, malujete či popisujete, co je na obrázku, aby to ostatní uhodli. Má kromě verze Activity Original i verzi Junior, která je ideální pro  hráče od 8 let.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=duh");
          print("<li><a HREF=\"prodej.pl?$parametry\">Duha</a> Hra na paměť. Pamatované předměty se neustále mění, což dělá problém skoro víc dospělým než dětem. Hra má i jednoduchou variantu na poznávání barev, která je vhodná už od 2 let. Varianta na paměť od cca 3 let.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=pan");
          print("<li><a HREF=\"prodej.pl?$parametry\">Panáčci</a> Zaujme každou holčičku. Jde o oblékání panáčků. Hra s&nbsp;velkým prvkem náhody, která procvičuje jemnou motoriku. Pro děti od 2,5 let.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=kvi");
          print("<li><a HREF=\"prodej.pl?$parametry\">Hádanky dráčka Fráčka</a> Pěkně udělané hádanky v&nbsp;básničkách vhodné od 4 let.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=haf");
          print("<li><a HREF=\"prodej.pl?$parametry\">Haf haf!</a> Novinka, která se dětem velice líbí. Je částečně na paměť a částečně na náhodě. Psí máma uprostřed opravdu štěká, kolikrát štěkne, o tolik políček popojdou štěňátka, která hledají kostičku své barvy. Kosti se pejskům přichytávají k&nbsp;čumáčkům magnetem.\n");

          print("</ul><h3>Kromě dětských her se můžete podívat na zajímavé hry pro:</h3> \n");
          print("<ul>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=rodina");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu, která s&nbsp;hraním začíná</a> \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=pro2");
          print("<li><a HREF=\"prodej.pl?$parametry\">dva</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=experti");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu či skupinu přátel, kteří už hrají nějaký ten pátek</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mejdan");
          print("<li><a HREF=\"prodej.pl?$parametry\">kamaráda - hry, které se hodí na párty a mejdany</a>\n");
          print("</ul>\n");
print <<EOF
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:   
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>.
          </p>
        </td>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vypíše prostředek Herní poradna, když jsou vybrány hry pro dva hráče.
#------------------------------------------------------------------------------
sub prostredek_poradna_pro2
{
    print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
          <h1 align=center><font color=green>Herní poradna</font></h1>
          <h1 align=center>Hry pro dva</h1>
          <p>Chcete koupit nějakou hru a vůbec nevíte jakou? V&nbsp;obchodech jsou jen zabalené krabice, tak jak zjistit, která stojí za to?</p>
          <p>Nejlepší je zajít do nějakého herního klubu a hru si zahrát. V&nbsp;<a HREF="http://www.paluba.cz/">Klubu deskových her Paluba</a>
             si hry zahrajete a můžete si je rovnou i koupit. Odborná rada zde nikdy nechybí!</p>
          <p>Pokud si nemůžete hry vyzkoušet, nabízíme zde pár konkrétních tipů.</p>
          <ul>
EOF
;
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=hll");
          print("<li><a HREF=\"prodej.pl?$parametry\">Halali</a> Novinka. Velice zajímavá hra pro 2 hráče. Hra je neobvyklá tím, že hráči mají odlišné možnosti tahů.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=qor");
          print("<li><a HREF=\"prodej.pl?$parametry\">Quoridor</a> Velice zajímavá a svižná hra pro 2 nebo 4 hráče. Snažíte se dostat na druhou stranu hracího plánu a místo tahu můžete také postavit překážku. Jestli to bude překážka pro protivníka nebo nakonec vaše, záleží na vašich schopnostech.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=kup");
          print("<li><a HREF=\"prodej.pl?$parametry\">Kupferkessel Co. (Čarodějnický kotlík)</a> Hra, kde si procvičíte paměť. Při vaření kouzelných lektvarů si musíte pamatovat, co jste do kotlíku dali.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=aba");
          print("<li><a HREF=\"prodej.pl?$parametry\">Abalone</a> Jednoduchá svižná hra.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=oth");
          print("<li><a HREF=\"prodej.pl?$parametry\">Othello</a> Hra s&nbsp;velice jednoduchými pravidly, ale velkou hloubkou. Její kvality jsou prověřeny časem (pochází z&nbsp;viktoriánské Anglie).\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=qar");
          print("<li><a HREF=\"prodej.pl?$parametry\">Quarto!</a> Rychlá, zajímavě řešená logická hra.\n");

          print("</ul><h3>Kromě her pro 2 se můžete podívat na zajímavé hry pro:</h3> \n");
          print("<ul>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=rodina");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu, která s&nbsp;hraním začíná</a> \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=deti");
          print("<li><a HREF=\"prodej.pl?$parametry\">malé děti (2 - 7 let)</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=experti");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu či skupinu přátel, kteří už hrají nějaký ten pátek</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mejdan");
          print("<li><a HREF=\"prodej.pl?$parametry\">kamaráda - hry, které se hodí na párty a mejdany</a>\n");
          print("</ul>\n");
print <<EOF
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:   
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>.
          </p>
        </td>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vypíše prostředek Herní poradna, když jsou vybrány hry pro fajnšmekry.
#------------------------------------------------------------------------------
sub prostredek_poradna_experti
{
    print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
          <h1 align=center><font color=green>Herní poradna</font></h1>
          <h1 align=center>Hry pro fajnšmekry</h1>
          <p>Chcete koupit nějakou hru a vůbec nevíte jakou? V&nbsp;obchodech jsou jen zabalené krabice, tak jak zjistit, která stojí za to?</p>
          <p>Nejlepší je zajít do nějakého herního klubu a hru si zahrát. V&nbsp;<a HREF="http://www.paluba.cz/">Klubu deskových her Paluba</a>
             si hry zahrajete a můžete si je rovnou i koupit. Odborná rada zde nikdy nechybí!</p>
          <p>Pokud si nemůžete hry vyzkoušet, nabízíme zde pár konkrétních tipů.</p>
          <ul>
EOF
;
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=pur");
          print("<li><a HREF=\"prodej.pl?$parametry\">Puerto Rico</a> Velice kvalitní hra, která právem vyhrála <a href=\"http://hraroku.cz/\">Hru roku 2005</a>. Jde o velice propracovanou hru, která potěší i náročné hráče.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=tik");
          print("<li><a HREF=\"prodej.pl?$parametry\">Tikal</a> Pěkná hra střední obtížnosti pro 2 - 4 hráče od 12 let. Získala cenu německé kritiky <a href=\"http://www.spiel-des-jahres.de/front_content.php?idcatart=127&amp;lang=1&amp;client=1\">Spiel des Jahres 1999</a>.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=amu");
          print("<li><a HREF=\"prodej.pl?$parametry\">Amun-Re</a> Zajímavá hra známého autora kvalitních her Reinera Knizii. Získala několik ocenění.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=spe");
          print("<li><a HREF=\"prodej.pl?$parametry\">Sankt Petersburg</a> Novinka. Velice zajímavá hra pro 2 - 4 hráče od 10 let. Byla nominována na cenu německé kritiky <a href=\"http://www.spiel-des-jahres.de/front_content.php?idcatart=148&amp;lang=1&amp;client=1\">Spiel des Jahres 2004</a>.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=lui");
          print("<li><a HREF=\"prodej.pl?$parametry\">Ludvík XIV.</a> Novinka. Velice zajímavá hra pro 2 - 4 hráče od 12 let.\n");

          print("</ul><h3>Můžete se také podívat na zajímavé hry pro:</h3> \n");
          print("<ul>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=rodina");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu, která s&nbsp;hraním začíná</a> \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=deti");
          print("<li><a HREF=\"prodej.pl?$parametry\">malé děti (2 - 7 let)</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=pro2");
          print("<li><a HREF=\"prodej.pl?$parametry\">dva</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=experti");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu či skupinu přátel, kteří už hrají nějaký ten pátek</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=mejdan");
          print("<li><a HREF=\"prodej.pl?$parametry\">kamaráda - hry, které se hodí na párty a mejdany</a>\n");
          print("</ul>\n");
print <<EOF
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:   
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>.
          </p>
        </td>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vypíše prostředek Herní poradna, když jsou vybrány hry na mejdan.
#------------------------------------------------------------------------------
sub prostredek_poradna_mejdan
{
    print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
          <h1 align=center><font color=green>Herní poradna</font></h1>
          <h1 align=center>Hry na párty a mejdany</h1>
          <p>Chcete koupit nějakou hru a vůbec nevíte jakou? V&nbsp;obchodech jsou jen zabalené krabice, tak jak zjistit, která stojí za to?</p>
          <p>Nejlepší je zajít do nějakého herního klubu a hru si zahrát. V&nbsp;<a HREF="http://www.paluba.cz/">Klubu deskových her Paluba</a>
             si hry zahrajete a můžete si je rovnou i koupit. Odborná rada zde nikdy nechybí!</p>
          <p>Pokud si nemůžete hry vyzkoušet, nabízíme zde pár konkrétních tipů.</p>
          <ul>
EOF
;
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=ban");
          print("<li><a HREF=\"prodej.pl?$parametry\">Bang!</a> Královna mejdanů. Hra, ktará nezkazí žádnou legraci. Vhodná pro větší skupinku hráčů (4 - 7, ideální 6 či 7). Má i rozšíření.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=rpo");
          print("<li><a HREF=\"prodej.pl?$parametry\">Rodinný podnik</a> Bezvadná hra na večírky, mejdany, Silvestra... zkrátka do společnosti pro pobavení.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=fif");
          print("<li><a HREF=\"prodej.pl?$parametry\">Finstere Flure (Dvorana děsu)</a> Hráči se snaží přeběhnout Dvoranu děsu, aby je nechytla zlá obluda zvaná Furunkulus. Ale pozor, ať neuklouznete po krvi. Zábavná hra pro 2 - 7 hráčů.\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=jun");
          print("<li><a HREF=\"prodej.pl?$parametry\">Jungle Speed</a> Zábavná hra na postřeh, která rozehřeje každou společnost.\n");

          print("</ul><h3>Kromě mejdanových her se můžete podívat na zajímavé hry pro:</h3> \n");
          print("<ul>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=rodina");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu, která s&nbsp;hraním začíná</a> \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=deti");
          print("<li><a HREF=\"prodej.pl?$parametry\">malé děti (2 - 7 let)</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=pro2");
          print("<li><a HREF=\"prodej.pl?$parametry\">dva</a>\n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=experti");
          print("<li><a HREF=\"prodej.pl?$parametry\">celou rodinu či skupinu přátel, kteří už hrají nějaký ten pátek</a>\n");
          print("</ul>\n");
print <<EOF
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:   
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>.
          </p>
        </td>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vypíše prostředek slevy, když není vybrána konkrétní hra.
#------------------------------------------------------------------------------
sub prostredek_slevy
{
    print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
          <h1 align=center><font color=red>Slevy</font></h1>
          <h3>Při objednávce 
          <ul><li>nad 2&nbsp;000&nbsp;Kč je <b>poštovné zdarma.</b></li>
              <li>nad 5&nbsp;000 Kč <b>sleva 3%.</b></li>
          </ul>
          </h3>
          <p><b>Při předplatbě na účet platíte poštovné jen 49&nbsp;Kč. </b>
          <p><b>Organizace pracující s dětmi a mládeží také obdrží slevu </b>
EOF
;
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=cenikk");
          print("<a HREF=\"prodej.pl?$parametry\">(Klubový ceník)</a>\n");
print <<EOF
          Pokud jste taková organizace, <b>nezapomeňte to uvést při objednávce!</b></p>
          <p>U některých her je také možné <font color=red><b>EXPRESNÍ DODÁNÍ</b>, které obdržíte do 48 hodin.</font> 
             Je třeba si nejlépe telefonicky či mailem ověřit, zda je to u dané hry zrovna možné. U expresnich dodávek připočítáváme <b>expresní příplatek 50 Kč,</b> 
             tedy celé poštovné a balné vyjde na 129 Kč</p>
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:   
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>.
          </p>
        </td>
EOF
    ;
}



#------------------------------------------------------------------------------
# Zjistí z databáze ceník.
#------------------------------------------------------------------------------
sub zjistit_cenik
{
    # Získat z databáze přehled zboží.
    my @nazvy = qw(kod_hry kod nazev prodejni_cena clenska_cena bezna_cena nelze_koupit);
    my $nazvy = join(", ", @nazvy);
    my $dotaz = "SELECT $nazvy FROM zbozi ORDER BY prodejni_cena, nazev";
    my $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    my @zbozi;
    while(my @zaznam = map{decode("utf8", $_)}($dtzobj->fetchrow_array()))
    {
        my %zaznam; for(my $i = 0; $i<=$#nazvy; $i++) {$zaznam{$nazvy[$i]} = $zaznam[$i];}
        push(@zbozi, \%zaznam);
    }
    return \@zbozi;
}



#------------------------------------------------------------------------------
# Vypíše prostředek, když je vybrán ceník.
#------------------------------------------------------------------------------
sub prostredek_cenik
{
    my $zbozi = zjistit_cenik();
    # Seřadit zboží vzestupně podle cen.
    # (Sice jsme o totéž už požádali SQL server, jenže on to seřadí řetězcově, takže cena 1128 bude před 128.)
    my @cenik = sort{$a->{prodejni_cena} <=> $b->{prodejni_cena}}(@{$zbozi});
    # Vypsat ceník.
    print <<EOF
          <td align="center" valign="top" WIDTH="70%">
            <h1>Ceník her</h1>
            <p>Hry jsou řazeny dle cen od nejlevnějších po nejdražší.
               Všechny hry jsou zároveň odkazy na informace o dané hře se všemi variantami na prodej.
            </p>
            <table align="center" border="1">
              <tr>
                <td align="center"><b>Název zboží</b></td>
                <td align="center"><b>Naše cena</b></td>
                <td align="center"><b>Běžná cena</b></td>
              </tr>
EOF
    ;
    foreach my $radek (@cenik)
    {
        unless($radek->{nelze_koupit})
        {
            print("              <tr>\n");
            print("                <td align=left>", odkazpar($radek->{nazev}, \%pole, "hra=$radek->{kod_hry}"), "</td>\n");
            print("                <td align=right>$radek->{prodejni_cena}&nbsp;Kč</td>\n");
            print("                <td align=right>$radek->{bezna_cena}&nbsp;Kč</td>\n");
            print("              </tr>\n");
        }
    }
    print <<EOF
            </table>
          </td>
EOF
    ;
}



#------------------------------------------------------------------------------
# Vypíše prostředek, když je vybrán ceník pro kluby.
#------------------------------------------------------------------------------
sub prostredek_cenik_klubovy
{
    my $zbozi = zjistit_cenik();
    # Seřadit zboží vzestupně podle cen.
    # (Sice jsme o totéž už požádali SQL server, jenže on to seřadí řetězcově, takže cena 1128 bude před 128.)
    my @cenik = sort{$a->{clenska_cena} <=> $b->{clenska_cena}}(@{$zbozi});
    # Vypsat ceník.
    print <<EOF
          <td align="center" valign="top" WIDTH="70%">
            <h1>Klubový ceník her</h1>
             <p>Tento ceník platí pro organizace pracující s dětmi a mládeží a také pro členy Klubu deskových her Paluba.
            </p>
            <p>Hry jsou řazeny dle cen od nejlevnějších po nejdražší.
               Všechny hry jsou zároveň odkazy na informace o dané hře se všemi variantami na prodej.
            </p>
            <table align="center" border="1">
              <tr>
                <td align="center"><b>Název zboží</b></td>
                <td align="center"><b>"Klubová" cena</b></td>
                <td align="center">Běžná cena</td>
              </tr>
EOF
    ;
    foreach my $radek (@cenik)
    {
        unless($radek->{nelze_koupit})
        {
            print("              <tr>\n");
            print("                <td align=left>", odkazpar($radek->{nazev}, \%pole, "hra=$radek->{kod_hry}"), "</td>\n");
            print("                <td align=right>$radek->{clenska_cena}&nbsp;Kč</td>\n");
            print("                <td align=right>$radek->{bezna_cena}&nbsp;Kč</td>\n");
            print("              </tr>\n");
        }
    }
    print <<EOF
            </table>
          </td>
EOF
    ;
}


#------------------------------------------------------------------------------
# Vypíše prostředek, když je vybrána konkrétní hra.
#------------------------------------------------------------------------------
sub prostredek_hra
{
    my $hra = shift;
    generovat_stranku_hry($hra);
}



#------------------------------------------------------------------------------
# Vypíše prostředek, když došlo k objednávce.
#------------------------------------------------------------------------------
sub prostredek_objednavka
{
    print("<td align=center valign=top width=\"70%\">\n");
    print("<h1>Závazná objednávka</h1>\n");
    print("<p>Děkujeme, že jste si objednali níže uvedené zboží. Objednávku vám do dvou pracovních dnů potvrdíme e-mailem. Současně vám sdělíme, kdy můžete zásilku očekávat.</p>\n");
    my $mail = vypsat_obsah_kosiku($objednany_kosik, 0);
    # Zkontrolovat úplnost vyplněných údajů.
    if
    (
        $objednany_kosik !~ m/x/ or
        $pole{jmeno} eq "" or
        $pole{prijmeni} eq "" or
        $pole{email} !~ m/(\w|[-\._])+\@(\w|[-\._])+\.(\w\w|com|org|edu|mil|gov|biz|info)$/i or
        $pole{prevzeti} eq "dobirka" and
        (
          $pole{ulice} eq "" or
          $pole{obec} eq "" or
          $pole{psc} eq ""
        )
    )
    {
        print("<h1><font color=red>Vaše objednávka NEBYLA ODESLÁNA!!!</font></h1>\n");
        print("<h3><font color=red>Nevybrali jste si hru nebo jste nezadali všechny údaje potřebné k&nbsp;zaslání. Je také možné, že jste zadali neplatnou e-mailovou adresu. Vyplňte prosím údaje znovu a pečlivě, abychom vám mohli dobírku zaslat. Děkujeme.</font></h3>\n");
        my $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=objednat");
        print("<form method=get action=\"prodej.pl?$parametry\">\n");
        print("<h2>Objednat výše uvedené zboží:</h2>\n");
        print("Jméno: <input name=jmeno type=text value=\"$pole{jmeno}\" size=\"20\"><br>\n");
        print("Příjmení: <input name=prijmeni type=text value=\"$pole{prijmeni}\" size=\"20\"><br>\n");
        print("E-mail: <input name=email type=text value=\"$pole{email}\" size=\"20\"><br>\n");
        print("(E-mailem vám zašleme jak potvrzení objednávky, tak upřesnění dodání dobírky.)<br>\n");
        print("Tel: <input name=tel type=text value=\"$pole{tel}\" size=\"20\"><br>\n");
        print("Poznámka: <input name=poznamka type=text value=\"$pole{poznamka}\" size=\"50\"><br>\n");
        print("Poznámka 2: <input name=poznamka2 type=text value=\"$pole{poznamka2}\" size=\"50\"><br>\n");
        my %checked;
        $pole{prevzeti} = "dobirka" if(!exists($pole{prevzeti}));
        $checked{$pole{prevzeti}} = "checked";
        print("<input type=radio name=prevzeti value=\"dobirka\" $checked{dobirka}> chci zaslat na dobírku <br>\n");
        print("<input type=radio name=prevzeti value=\"paluba\" $checked{paluba}> si vyzvednu osobně na Palubě u Anděla<br>\n");
        print("<p align=left> <b>Zaplatím:</b><br>\n");
        $pole{platba} = "hotove" if(!exists($pole{platba}));
        $checked{$pole{platba}} = "checked";
        print("<input type=radio name=platba value=\"hotove\"  $checked{hotove}> hotově (dobírkou či osobně při převzetí) <br>\n");
        print("<input type=radio name=platba value=\"prevodem\" $checked{prevodem}> předplatbou (bezhotovostním převodem)</p>\n");
        if($pole{prevzeti} eq "dobirka")
        {
            print("<p>Zboží chci zaslat dobírkou na adresu:<br>\n");
            print("Ulice a dům: <input name=ulice type=text value=\"$pole{ulice}\" size=\"20\"><br>\n");
            print("Obec: <input name=obec type=text value=\"$pole{obec}\" size=\"20\"><br>\n");
            print("PSČ: <input name=psc type=text value=\"$pole{psc}\" size=\"20\"><br>\n");
        }
        else
        {
            if($pole{prevzeti} eq "paluba")
            {
                print("<p>Zboží si vyzvednu osobně na Palubě.<br>\n");
            }
        }
        if($pole{platba} eq "prevodem")
        {
            print("<p>Zaplatím předem převodem na účet.<br>\n");
        }
        else
        {
            if($pole{prevzeti} eq "dobirka")
            {
                print("<p>Zaplatím dobírkou.<br>\n");
            }
            else
            {
                print("<p>Zaplatím hotově při převzetí.<br>\n");
            }
        }
        if($pole{organizace} eq "ano")
        {   
            print("<p>Organizace pracující s mládeží. IČO: <input name=ico type=text value=\"$pole{ico}\" size=\"20\"><br>\n");
            print("Dáme Vám klubové ceny. Jsou o cca 5% nižší než internetové.</p>\n");
        }
        print("<p>Tímto způsobem lze objednat zboží k&nbsp;dodání na území Česka. Máte-li zájem o dodání do jiných zemí, kontaktujte nás na e-mailu <a href=\"mailto:obchod\@hrejsi.cz\">obchod\@hrejsi.cz</a>.<br>\n");
        print("<input type=hidden name=hra value=objednavka>\n");
        print("<input type=hidden name=kosik value=\"$objednany_kosik\">\n");
        print("<p><input type=submit value=\"Odeslat objednávku\"><br>\n");
        print("</form>\n");
    }
    else
    {
        # Vypsat dodací adresu.
        if($pole{prevzeti} eq "dobirka")
        {
            print("<p>Zboží bude zasláno dobírkou České pošty na následující adresu:</p>\n");
            $mail .= "Zaslání na dobírku na adresu:\n";
            print("Jméno: <b>$pole{jmeno}</b><br>\n");
            $mail .= "Jméno: $pole{jmeno} $pole{prijmeni}\n";
            print("Příjmení: <b> $pole{prijmeni}</b><br>\n");
            print("Ulice a dům: <b> $pole{ulice}</b><br>\n");
            $mail .= "Ulice a dům: $pole{ulice}\n";
            print("Obec: <b>$pole{psc} $pole{obec}</b><br>\n");
            $mail .= "Obec: $pole{psc} $pole{obec}\n";
        }
        else
        {
            if($pole{prevzeti} eq "cm")
            {
                print("<p>Až bude zboží pro Vás připravené na Černém Mostě, dáme Vám vědět, včetně podrobností kdy (otvírací hodiny) a kde (přesná adresa).<br>\n");
                $mail .= "Osobní odběr: Černý Most ($pole{prevzeti}) \n";
            }
            else
            {
                print("<p>Až bude zboží pro Vás připravené na Palubě (www.paluba.cz), dáme Vám vědět, včetně podrobností kdy (otvírací hodiny) a kde (přesná adresa).<br>\n");
                $mail .= "Osobní odběr: Paluba ($pole{prevzeti}) \n";
            }
            print("Jméno: <b>$pole{jmeno}</b><br>\n");
            $mail .= "Jméno: $pole{jmeno} $pole{prijmeni}\n";
            print("Příjmení: <b> $pole{prijmeni}</b><br>\n");
            $mail .= "Ulice a dům: $pole{ulice}\n";
            $mail .= "Obec: $pole{psc} $pole{obec}\n";
        }
        print("<p>Objednávka bude potvrzena e-mailem na následující adresu:<br>\n");
        print("E-mail: <b>$pole{email}</b><br>\n");
        $mail .= "E-mail: $pole{email}\n";
        print("<p>Telefon: <b>$pole{tel}</b><br>\n");
        $mail .= "Telefon: $pole{tel}\n";
        print("<p>Poznámka: <b>$pole{poznamka} </b><br>\n");
        $mail .= "Poznámka: $pole{poznamka} \n";
        print("Poznámka 2: <b>$pole{poznamka2} </b><br>\n");
        $mail .= "Poznámka 2: $pole{poznamka2} \n";
        my $platba = $pole{platba};
        $platba =~ s/prevodem/převodem/;
        $platba =~ s/hotove/hotově/;
        print("<p>Platba: $platba<br>\n");
        $mail .= "Platba: $platba\n";
        if($pole{organizace} eq "ano")
        {
            print("Uvedené ceny zahrnují slevu pro organizace pracující s&nbsp;mládeží. Vaše IČO: $pole{ico}<br>\n");
            $mail .= "Organizace pracující s mládeží: $pole{ico}\n";
        }
        if($pole{jmeno} eq "test")
        {
            $adresat = "klara\@hrejsi.cz";
            $kopie = "zeman\@ufal.mff.cuni.cz";
            $skopie = "dkz\@centrum.cz";
        }
        else
        {
            $adresat = "obchod\@hrejsi.cz";
            $kopie = $pole{email};
            $skopie = "dkz\@centrum.cz";
        }
        if(-e "/usr/lib/sendmail")
        {
            $sendmail = "|/usr/lib/sendmail -oi -t";
        }
        else
        {
            $sendmail = ">>posledni-objednavka.txt";
        }
        open(SENDMAIL, $sendmail) or print "Nemůžu najít sendmail: $!\n";
        print SENDMAIL ("From: Robot Hrejsi <robot\@hrejsi.cz>\n");
        my $jmeno_subject = "$pole{jmeno} $pole{prijmeni}";
        $jmeno_subject =~ tr/ÁÄĂÂĄČĆÇĎĐÉĚËĘÍÎĽĹŁŇŃÓÖŐÔŘŔŠŚŞŤŢÚŮÜŰÝŽŹŻáäăâąčćçďđéěëęíîľĺłňńóöőôřŕšśşťţúůüűýžźż/AAAAACCCDDEEEEIILLLNNOOOORRSSSTTUUUUYZZZaaaaacccddeeeeiilllnnoooorrsssttuuuuyzzz/;
        print SENDMAIL ("Reply-to: \"$jmeno_subject\" <$pole{email}>\n");
        print SENDMAIL ("To: $adresat\n");
        print SENDMAIL ("Cc: $kopie\n") if($kopie);
        print SENDMAIL ("Bcc: $skopie\n") if($skopie);
        print SENDMAIL ("Subject: Objednavka her: $jmeno_subject\n");
        print SENDMAIL ("Content-Type: text/plain; charset=\"utf-8\"\n");
        print SENDMAIL ("Content-Transfer-Encoding: 8bit\n");
        print SENDMAIL ("\n");
        print SENDMAIL ($mail);
        # Úspěšně zadanou a odeslanou objednávku uložit do databáze.
        my $objednavka = zjistit_objednavku($objednany_kosik);
        ulozit_objednavku($objednavka);
    }
    # Ukončit prostřední buňku.
    print("</td>\n");
}



#------------------------------------------------------------------------------
# Vypíše pravý okraj stránky s výjimkou odkazů na Palubu vpravo nahoře.
#------------------------------------------------------------------------------
sub vypsat_pravy_okraj
{
    if($pole{kosik} eq "")
    {
        kraj_obecny();
    }
    else
    {
        kraj_kosik();
    }
}



#------------------------------------------------------------------------------
# Vypíše obecný kraj, když není vybrána konkrétní hra.
#------------------------------------------------------------------------------
sub kraj_obecny
{
    print("            <td align=center valign=top>\n");
    my $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=obecne");
    print <<EOF
          <h1 align=center>Hry na prodej</h1>
          <p>Všechny vlevo uvedené hry i mnohé dalších si můžete zakoupit
             v&nbsp;<a HREF="$koren_hrejsi/paluba/index.htm">Klubu deskových her Paluba</a>
             (Praha, Lidická&nbsp;40 u&nbsp;Anděla, po,&nbsp;st 16 - 22 hod., út,&nbsp;čt 17 - 21 hod.).
             Všechny hry, které jsou na prodej, si v&nbsp;klubu můžete vyzkoušet, takže nebudete
             kupovat zajíce v&nbsp;pytli. Odborná rada také nebude chybět!</p>
          <p>Také můžeme tyto hry  <b>zaslat na dobírku.</b> Pak k&nbsp;ceně připočteme poštovné 79&nbsp;Kč.
             Od 2000&nbsp;Kč můžete využít naše 
             
EOF
;
    $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=slevy");
    print("<a HREF=\"prodej.pl?$parametry\">SLEVY</a>\n");
    print("</p>\n");
print <<EOF
          <p><b>Organizace pracující s dětmi a mládeží obdrží slevu nezávisle na výši odběru! </b>
          Pokud jste taková organizace, <b>nezapomeňte to uvést při objednávce!</b></p>
          <p>Při předplatbě na účet platíte <b>poštovné jen 49&nbsp;Kč. </b>
          <p>Dobírku lze zaslat i na Slovensko, ale pouze do 2&nbsp;kg a poštovné je
             bohužel mnohem dražší (kolem 250&nbsp;Kč, dle sazebníku české pošty).</p>
          <p>U některých her je také možné 
          <br><font color=red><b>EXPRESNÍ DODÁNÍ</b>, které obdržíte do 48 hodin.</font> 
          <br>Je třeba si nejlépe telefonicky či mailem ověřit, zda je to u dané hry zrovna možné. U expresnich dodávek připočítáváme <b>expresní příplatek 50 Kč,</b> 
             tedy celé poštovné a balné vyjde na 129 Kč</p>
          <p>Objednávky vyřizujeme zhruba <b>do 14&nbsp;dnů,</b> je-li hra skladem.
          <br>Je-li u hry uvedeno, že jde o hru <b>na objdnávku,</b> mohou být <b>dodací lhůty delší.</b></p>
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:   
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>.
          </p>
EOF
    ;
    print("            </td>\n");
}



#------------------------------------------------------------------------------
# Vypíše kraj, když je něco v košíku.
#------------------------------------------------------------------------------
sub kraj_kosik
{
    print("            <td valign=top>\n");
    print("<h2>Obsah vašeho košíku</h2>\n");
#-    print("<p><font color=red>Objednávky pro dodání poštou přijaté po 15.12.2005 budou vyřízeny až začátkem ledna 2006. Osobního odběru na Palubě se to netýká - Paluba je v&nbsp;provozu do 22.12.2005 a hry si můžete zarezervovat zde nebo na telefonu 257&nbsp;324&nbsp;291.</font></p>\n");
    vypsat_obsah_kosiku($pole{kosik}, 1);
    print("<h3>Chcete-li do košíku něco přidat, zvolte si hru v&nbsp;levém sloupci. Pokud jste již s&nbsp;obsahem košíku spokojeni, vyplňte prosím následující údaje:</h3>\n");
    # Vytisknout objednávkový formulář.
    my $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=objednat");
    print("<form method=get action=\"prodej.pl?$parametry\">\n");
    print("<p align=left><b>Zboží:</b><br>\n");
    my %checked;
    $pole{prevzeti} = "dobirka" if(!exists($pole{prevzeti}));
    $checked{$pole{prevzeti}} = "checked";
    print("<input type=radio name=prevzeti value=\"dobirka\" $checked{dobirka}> chci zaslat na dobírku <br>\n");
    print("<input type=radio name=prevzeti value=\"paluba\" $checked{paluba}> si vyzvednu osobně na Palubě u Anděla<br>\n");
    print("<p align=left> <b>Zaplatím:</b><br>\n");
    $pole{platba} = "hotove" if(!exists($pole{platba}));
    $checked{$pole{platba}} = "checked";
    print("<input type=radio name=platba value=\"hotove\"  $checked{hotove}> hotově (dobírkou či osobně při převzetí) <br>\n");
    print("<input type=radio name=platba value=\"prevodem\" $checked{prevodem}> předplatbou (bezhotovostním převodem)</p>\n");
    # Vypsat kolonky pro kontaktní údaje.
    print("<h3 align=left>Vyplňte kontaktní údaje:</h3>\n");
#    print("<p><font color=red>Upozornění: Z&nbsp;důvodu dovolených bude objednávka, kterou teď odešlete, zpracována až v&nbsp;týdnu od 22.8.2005.</font></p>\n");
    print("<table border=\"0\">\n");
    print("  <tr><td><p>Jméno: </p></td><td><p><input name=jmeno type=text value=\"$pole{jmeno}\" size=\"20\"></p></td></tr>\n");
    print("  <tr><td><p>Příjmení: </p></td><td><p><input name=prijmeni type=text value=\"$pole{prijmeni}\" size=\"20\"></p></td></tr>\n");
    print("  <tr><td><p>E-mail: </p></td><td><p><input name=email type=text value=\"$pole{email}\" size=\"20\"></p></td></tr>\n");
    print("  <tr><td colspan=\"2\">(E-mailem vám zašleme jak potvrzení objednávky, tak upřesnění dodání.)</td></tr>\n");
    print("  <tr><td><p>Tel.: </p></td><td><p><input name=tel type=text value=\"$pole{tel}\" size=\"20\"></p></td></tr>\n");
    print("  <tr><td><p>Poznámka: </p></td><td><p><input name=poznamka type=text value=\"$pole{poznamka}\" size=\"20\"></p></td></tr>\n");
    print("</table>\n");
    # Vypsat kolonky pro zasílací adresu.
    print("<h3 align=left>Vyplňte adresu při zaslání na dobírku:</h3>\n");
    print("<table border=\"0\">\n");
    print("  <tr><td><p>Ulice a dům: </p></td><td><p><input name=ulice type=text value=\"$pole{ulice}\" size=\"20\"></p></td></tr>\n");
    print("  <tr><td><p>Obec: </p></td><td><p><input name=obec type=text value=\"$pole{obec}\" size=\"20\"></p></td></tr>\n");
    print("  <tr><td><p>PSČ: </p></td><td><p><input name=psc type=text value=\"$pole{psc}\" size=\"20\"></p></td></tr>\n");
    print("</table>\n");
    # Vypsat závěrečné kolonky.
    print("<h3 align=left>Chcete-li jiné fakturační údaje než zasílací, použijte poznámku:</h3>\n");
    print("<p align=left>Poznámka 2: <input name=poznamka2 type=text value=\"$pole{poznamka2}\" size=\"50\">\n");
    print("<p align=left><input type=radio name=organizace value=\"ano\">jsme organizace pracující s&nbsp;mládeží a žádáme o slevu. Naše IČO je: <input name=ico type=text value=\"$pole{ico}\" size=\"10\">\n");
    print("<p>Tímto způsobem lze objednat zboží k&nbsp;dodání na území Česka. Máte-li zájem o dodání do jiných zemí, kontaktujte nás na e-mailu <a href=\"mailto:obchod\@hrejsi.cz\">obchod\@hrejsi.cz</a>.<br>\n");
    print("<input type=hidden name=hra value=objednavka>\n");
    print("<input type=hidden name=kosik value=\"$pole{kosik}\">\n");
#     print("<p><font color=red>Objednávky pro dodání poštou přijaté po 15.12.2005 budou vyřízeny až začátkem ledna 2006. Osobního odběru na Palubě se to netýká - Paluba je v&nbsp;provozu do 22.12.2005 a hry si můžete zarezervovat zde nebo na telefonu 257&nbsp;324&nbsp;291.</font></p>\n");
    print("<input type=submit value=\"Odeslat objednávku\"><br>\n");
    print("</form>\n");
    print("            </td>\n");
}



#------------------------------------------------------------------------------
# Z parametrů skriptu posbírá informace o objednávce a sestaví z nich hash.
#------------------------------------------------------------------------------
sub zjistit_objednavku
{
    my $kosik = shift; # řetězec ve formátu, v jakém je košík uložen v URL
    my %objednavka;
    # Dekódovat košík.
    my @zakodovany_kosik = split(/a/, $kosik);
    my %kosik;
    foreach my $radek (@zakodovany_kosik)
    {
        my ($pocet, $vec) = split(/x/, $radek);
        $kosik{$vec} += $pocet;
    }
    # Získat z databáze přehled zboží.
    my @nazvy = qw(kod nazev prodejni_cena clenska_cena);
    my $nazvy = join(", ", @nazvy);
    my $filtr = join(" OR ", map{"(kod = '$_')"}(sort(keys(%kosik))));
    my $dotaz = "SELECT $nazvy FROM zbozi WHERE $filtr";
    my $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    my %zbozi;
    while(my @zaznam = map{decode("utf8", $_)}($dtzobj->fetchrow_array()))
    {
        my %zaznam; for(my $i = 0; $i<=$#nazvy; $i++) {$zaznam{$nazvy[$i]} = $zaznam[$i];}
        $zaznam{_cena} = exists($pole{organizace}) && $pole{organizace} eq "ano" ? $zaznam{clenska_cena} : $zaznam{prodejni_cena};
        $zbozi{$zaznam{kod}} = \%zaznam;
    }
    # Uložit do objednávky obsah košíku s cenami.
    $objednavka{celkem} = 0;
    foreach my $vec (sort(keys(%kosik)))
    {
        my $pocet = $kosik{$vec};
        my $cena = $zbozi{$vec}{_cena};
        my $rcelkem = $pocet*$cena;
        $objednavka{celkem} += $rcelkem;
        push(@{$objednavka{kosik}}, {"kod_zbozi"=>$vec, "nazev_zbozi"=>$zbozi{$vec}{nazev}, "jednotkova_cena"=>$cena, "pocet"=>$pocet, "cena_celkem"=>$rcelkem});
    }
    $objednavka{mezisoucet} = $objednavka{celkem};
    # Přičíst poštovné.
    # Informaci o poštovném zdarma zobrazovat pouze, pokud je zvolen způsob dodání dobírkou
    # nebo pokud způsob dodání ještě není znám.
    if($objednavka{celkem}>=2000 && (!exists($pole{prevzeti}) || $pole{prevzeti} eq "dobirka"))
    {
        $objednavka{postovne} = 0;
    }
    else
    {
        # Pokud ještě není zvolen způsob dodání a placení, v kalkulaci zatím předpokládat, že půjde o běžnou dobírku.
        if(!exists($pole{prevzeti}))
        {
            $objednavka{postovne} = 79;
            $objednavka{celkem} += 79;
        }
        # Pokud už je zvolen způsob dodání a placení, vypočítat cenu přesně.
        # Pokud si zákazník převezme zboží osobně, poštovné je 0.
        elsif($pole{prevzeti} eq "dobirka")
        {
            $objednavka{postovne} = $pole{platba} eq "prevodem" ? 49 : 79;
            $objednavka{celkem} += $objednavka{postovne};
        }
        else
        {
            $objednavka{postovne} = 0;
        }
    }
    # Započítat množstevní slevu.
    $objednavka{mnozstevni_sleva} = $objednavka{celkem}>=5000 ? int($objednavka{celkem}*0.03) : 0;
    $objednavka{celkem} -= $objednavka{mnozstevni_sleva};
    # Z hashe s parametry skriptu zkopírovat informace o způsobu fakturace, platby a dodání.
    $objednavka{jmeno} = $pole{jmeno};
    $objednavka{prijmeni} = $pole{prijmeni};
    $objednavka{ulice_a_dum} = $pole{ulice};
    $objednavka{obec} = $pole{obec};
    $objednavka{psc} = $pole{psc};
    $objednavka{email} = $pole{email};
    $objednavka{telefon} = $pole{tel};
    $objednavka{poznamka} = $pole{poznamka};
    $objednavka{poznamka2} = $pole{poznamka2};
    $objednavka{odber} = $pole{prevzeti};
    $objednavka{platba} = $pole{platba};
    $objednavka{platba} =~ s/prevodem/převodem/;
    $objednavka{platba} =~ s/hotove/hotově/;
    $objednavka{sleva_org_deti} = $pole{organizace} eq "ano" ? 1 : 0;
    $objednavka{ico} = $pole{ico};
    # Přidat informaci o aktuálním čase jako identifikátor objednávky.
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());
    $objednavka{cas} = sprintf("%04d%02d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
    # Vrátit záznam o objednávce.
    return \%objednavka;
}



#------------------------------------------------------------------------------
# Uloží objednávku do databáze.
#------------------------------------------------------------------------------
sub ulozit_objednavku
{
    my $objednavka = shift; # odkaz na hash
    # Přidat základní informace o objednávce do tabulky objednavky.
    my @nazvy = qw(cas jmeno prijmeni ulice_a_dum obec psc email telefon poznamka poznamka2 odber platba mezisoucet mnozstevni_sleva postovne celkem sleva_org_deti ico);
    my $seznam_poli = join(", ", @nazvy);
    my @hodnoty = map{m/(mezisoucet|mnozstevni_sleva|postovne|celkem|sleva_org_deti)/ ? $objednavka->{$_} : "'$objednavka->{$_}'"}(@nazvy);
    my $seznam_hodnot = join(", ", @hodnoty);
    my $dotaz = "INSERT INTO objednavky ($seznam_poli) VALUES ($seznam_hodnot);";
    $databaze->do($dotaz)
        or print("<p><font color=magenta>Chyba: Nepodařilo se přidat záznam do tabulky objednavky:", $DBI::errstr, "</font></p>\n");
    # Přidat informace o jednotlivých objednaných hrách do tabulky objzbozi.
    @nazvy = qw(kod_zbozi jednotkova_cena pocet cena_celkem);
    $seznam_poli = join(", ", ("cas", @nazvy));
    foreach my $radek (@{$objednavka->{kosik}})
    {
        @hodnoty = map{$_ ne "kod_zbozi" ? $radek->{$_} : "'$radek->{$_}'"}(@nazvy);
        $seznam_hodnot = join(", ", ("'$objednavka->{cas}'", @hodnoty));
        $dotaz = "INSERT INTO objzbozi ($seznam_poli) VALUES ($seznam_hodnot);"
            or print("<p><font color=magenta>Chyba: Nepodařilo se přidat záznam do tabulky objzbozi:", $DBI::errstr, "</font></p>\n");
        $databaze->do($dotaz);
    }
}



#------------------------------------------------------------------------------
# Zobrazí obsah košíku v HTML. Současně vrátí textovou verzi téhož, kdybychom
# ji už chtěli posílat e-mailem.
#------------------------------------------------------------------------------
sub vypsat_obsah_kosiku
{
    my $kosik = shift; # řetězec ve formátu, v jakém je košík uložen v URL
    my $povolit_zmeny = shift; # mají se vygenerovat odkazy na přidávání/ubírání z košíku?
    my $mail;
    # Dekódovat košík. Pokud je prázdný, vypsat o tom zprávu a skončit.
    my @zakodovany_kosik = split(/a/, $kosik);
    unless(scalar(@zakodovany_kosik))
    {
        print("              <p>Váš nákupní košík je zatím prázdný.</p>\n");
        return;
    }
    my %kosik;
    foreach my $radek (@zakodovany_kosik)
    {
        my ($pocet, $vec) = split(/x/, $radek);
        $kosik{$vec} += $pocet;
    }
    # Získat z databáze přehled zboží.
    my @nazvy = qw(kod nazev prodejni_cena clenska_cena);
    my $nazvy = join(", ", @nazvy);
    my $filtr = join(" OR ", map{"(kod = '$_')"}(sort(keys(%kosik))));
    my $dotaz = "SELECT $nazvy FROM zbozi WHERE $filtr";
    my $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    my %zbozi;
    while(my @zaznam = map{decode("utf8", $_)}($dtzobj->fetchrow_array()))
    {
        my %zaznam; for(my $i = 0; $i<=$#nazvy; $i++) {$zaznam{$nazvy[$i]} = $zaznam[$i];}
        $zaznam{_cena} = exists($pole{organizace}) && $pole{organizace} eq "ano" ? $zaznam{clenska_cena} : $zaznam{prodejni_cena};
        $zbozi{$zaznam{kod}} = \%zaznam;
    }
    # Vypsat obsah košíku.
    my $celkem = 0;
    foreach my $vec (sort(keys(%kosik)))
    {
        my $pocet = $kosik{$vec};
        my $cena = $zbozi{$vec}{_cena};
        my $rcelkem = $pocet*$cena;
        $celkem += $rcelkem;
        print("<p><b>$pocet × $zbozi{$vec}{nazev}</b> (po $cena&nbsp;Kč) = <b>$rcelkem&nbsp;Kč</b>\n");
        $mail .= sprintf("%2d × %4d Kč = %4d Kč: %s\n", $pocet, $cena, $rcelkem, $zbozi{$vec}{nazev});
        # Umožnit uživateli změnit v objednávce počet kusů každého zboží.
        if($povolit_zmeny)
        {
            my %novy_kosik = %kosik;
            $novy_kosik{$vec} = $pocet+1;
            my $novy_kosik = join("a", map{$novy_kosik{$_}."x".$_}(sort(keys(%novy_kosik))));
            print("<br>", odkazpar("[o 1 víc]", \%pole, "kosik=$novy_kosik"), "\n");
            $novy_kosik{$vec} = $pocet-1;
            delete($novy_kosik{$vec}) unless($novy_kosik{$vec}>0);
            my $novy_kosik = join("a", map{$novy_kosik{$_}."x".$_}(sort(keys(%novy_kosik))));
            print(odkazpar("[o 1 míň]", \%pole, "kosik=$novy_kosik"), "<br>\n");
        }
    }
    print("<p><b>Celkem $celkem&nbsp;Kč</b>.<br>\n");
    $mail .= sprintf("MEZISOUČET   = %4d Kč\n", $celkem);
    # Přičíst poštovné.
    # Informaci o poštovném zdarma zobrazovat pouze, pokud je zvolen způsob dodání dobírkou
    # nebo pokud způsob dodání ještě není znám.
    if($celkem>=2000 && (!exists($pole{prevzeti}) || $pole{prevzeti} eq "dobirka"))
    {
        print("<p><font color=red>Poštovné a balné ZDARMA.</font><br>\n");
        $mail .= sprintf("Poštovné     = %4d Kč\n", 0);
    }
    else
    {
        # Pokud ještě není zvolen způsob dodání a placení, zobrazit alternativy.
        # A v kalkulaci zatím předpokládat, že půjde o běžnou dobírku.
        if(!exists($pole{prevzeti}))
        {
            print("<p>Poštovné a balné <b>79&nbsp;Kč.<b></p>\n");
            print("<p>Poštovné a balné při předplatbě <b>49&nbsp;Kč.<b><br>\n");
            print("Při nákupu nad 2000&nbsp;Kč poštovné a balné ZDARMA.</p>\n");
            $mail .= sprintf("Poštovné     = %4d Kč\n", 79);
            $celkem += 79;
        }
        # Pokud už je zvolen způsob dodání a placení, vypočítat cenu přesně.
        # Opět se zobrazení poštovného úplně vyhnout, jestliže si zákazník převezme zboží osobně.
        elsif($pole{prevzeti} eq "dobirka")
        {
            my $postovne = $pole{platba} eq "prevodem" ? 49 : 79;
            print("<p>Poštovné a balné <b>$postovne&nbsp;Kč.<b></p>\n");
            $mail .= sprintf("Poštovné     = %4d Kč\n", $postovne);
            $celkem += $postovne;
        }
    }
    # Započítat množstevní slevu.
    if($celkem>=5000)
    {
        my $sleva = int($celkem * 0.03);
        print("<p><font color=red>Množstevní sleva 3&nbsp;%<br>\n");
        print("= $sleva&nbsp;Kč</font></p>\n");
        $mail .= sprintf("Sleva 3 %%    = %4d Kč\n", $sleva);
        $celkem -= $sleva
    }
    # Závěr obsahu košíku.
    print("<p><font color=red><b>Dobírka celkem $celkem&nbsp;Kč</b>.</font></b></p>\n");
    $mail .= sprintf("CELKEM       = %4d Kč\n\n", $celkem);
    return $mail;
}



#------------------------------------------------------------------------------
# Zobrazí kořenovou stránku hry.
#------------------------------------------------------------------------------
sub generovat_stranku_hry
{
    my $hra = shift; # kód hry, jejíž stránka se má generovat
    # Získat z databáze údaje o hře.
    my @nazvy = qw(nazev upoutavka pocet_hracu min_vek min_delka max_delka slozka_hrejsi htmltext htmllink htmlvlink htmlalink);
    my $nazvy = join(", ", @nazvy);
    my $dotaz = "SELECT $nazvy FROM hry WHERE kod = '$hra'";
    my $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    my @zaznam = map{decode("utf8", $_)}($dtzobj->fetchrow_array());
    my %zaznam; for(my $i = 0; $i<=$#nazvy; $i++) {$zaznam{$nazvy[$i]} = $zaznam[$i];}
    my $nazev = $zaznam{nazev};
    my $upoutavka = $zaznam{upoutavka};
    my $pocet_hracu = $zaznam{pocet_hracu};
    my $min_vek = $zaznam{min_vek};
    my $min_delka = $zaznam{min_delka};
    my $max_delka = $zaznam{max_delka};
    my $slozka = $zaznam{slozka_hrejsi};
    my $text = $zaznam{htmltext};
    my $link = $zaznam{htmllink};
    my $vlink = $zaznam{htmlvlink};
    my $alink = $zaznam{htmlalink};
    # Druhým dotazem získat alternativní názvy hry.
    $dotaz = "SELECT kod_hry, nazev FROM nazvy WHERE (kod_hry = '$hra') AND (nazev <> '$nazev')";
    $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    my @dalsi_nazvy;
    while(my ($kod_hry, $nazev) = map{decode("utf8", $_)}($dtzobj->fetchrow_array()))
    {
        push(@dalsi_nazvy, $nazev);
    }
    my $dalsi_nazvy = join(", ", @dalsi_nazvy);
    # Třetím dotazem získat odkazy na stránky o této hře.
    $dotaz = "SELECT hra, text, adresa FROM odkazy WHERE (hra = '$hra')";
    $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    my @odkazy;
    while(my ($hra, $text, $adresa) = map{decode("utf8", $_)}($dtzobj->fetchrow_array()))
    {
        push(@odkazy, {"text" => $text, "adresa" => $adresa});
    }
    # Čtvrtým dotazem získat přehled zboží souvisejícího s touto hrou.
    @nazvy = qw(kod kod_hry nelze_koupit nazev prodejni_cena bezna_cena poznamka popis_zbozi);
    $nazvy = join(", ", @nazvy);
    $dotaz = "SELECT $nazvy FROM zbozi WHERE (kod_hry = '$hra')";
    $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    my @zbozi;
    while(my @zaznam = map{decode("utf8", $_)}($dtzobj->fetchrow_array()))
    {
        my %zaznam; for(my $i = 0; $i<=$#nazvy; $i++) {$zaznam{$nazvy[$i]} = $zaznam[$i];}
        push(@zbozi, \%zaznam);
    }
    # Vypsat informace o hře.
    print("<td align=\"center\" valign=\"top\" WIDTH=\"70%\">\n");
    print("  <table border=0 bgcolor=white>\n");
    print("    <tr>\n");
    print("      <td width=\"30%\" valign=\"bottom\">\n");
    # Zkontrolovat, že máme fotku hry, a pokud ano, vložit ji.
    if($slozka ne "" && -f "$koren_system/$slozka/obr/fotka.jpg")
    {
        print("        <img src=\"$koren_hrejsi/$slozka/obr/fotka.jpg\" width=150 alt=\"fotografie\">\n");
    }
    print("      </td>\n");
    print("      <td width=\"40%\">\n");
    print("        <h1 align=center>$nazev</h1>\n");
    # Pokud známe alternativní názvy, vypsat je.
    my $neboli;
    if($dalsi_nazvy)
    {
        $neboli = $dalsi_nazvy;
        $neboli = "        <center>neboli $neboli</center>";
    }
    print("$neboli\n");
    # Vypsat upoutávku na hru a charakteristiku hry.
    print("        <p>$upoutavka</p>\n");
    print("      </td>\n");
    print("      <td valign=\"bottom\">\n");
    print("        <p><b>Počet hráčů:</b> $pocet_hracu.\n");
    print("        <br><b>Minimální věk:</b> $min_vek let.\n");
    print("        <br><b>Délka hry:</b> $min_delka - $max_delka min.</p>\n");
    # Vypsat odkazy na stránky o této hře.
    print("        <a href=\"hry.pl?hra=$hra\">Základní informace o hře</a><br>\n");
    foreach my $odkaz (@odkazy)
    {
        my $adresa = $odkaz->{adresa};
        unless($adresa =~ m/^(\/|http:)/)
        {
            $adresa = "$koren_hrejsi/$slozka/$adresa";
        }
        print("        <a href=\"$adresa\">$odkaz->{text}</a><br>\n");
    }
    print("      </td>\n");
    print("    </tr>\n");
    # Vypsat informace o jednotlivých druzích zboží souvisejících s touto hrou.
    foreach my $zbozi (@zbozi)
    {
        unless($zbozi->{nelze_koupit})
        {
            print("    <tr>\n");
            print("      <td valign=\"top\">\n");
            print("        <hr><h3 align=left><b>$zbozi->{nazev}</b></h3>\n");
            print("        <p>Naše cena:<b> $zbozi->{prodejni_cena}&nbsp;Kč</b><br>\n");
            print("        Běžná cena: $zbozi->{bezna_cena}&nbsp;Kč\n");
            if($zbozi->{bezna_cena} && $zbozi->{bezna_cena}>$zbozi->{prodejni_cena})
            {
                my $uspora_kc = $zbozi->{bezna_cena}-$zbozi->{prodejni_cena};
                my $uspora_prc = $uspora_kc/$zbozi->{bezna_cena}*100;
                if($uspora_prc>=4)
                {
                    printf("        <br><font color=red>(Tedy ušetříte %d&nbsp;Kč, resp. %d&nbsp;%%.)</font>\n", $uspora_kc, $uspora_prc);
                }
            }
            print("      </td>\n");
            print("      <td valign=\"top\">\n");
            print("        <hr><p><b>$zbozi->{poznamka}</b><br>\n");
            print("        $zbozi->{popis_zbozi}<br>\n");
            print("        $zbozi->{lokalizace}<br>\n");
            # Vytvořit odkaz na košík, v němž je o 1 ks tohoto zboží víc.
            my @kosik = split(/a/, $pole{kosik});
            my $nalezeno = 0;
            foreach my $polozka (@kosik)
            {
                my ($pocet, $vec) = split(/x/, $polozka);
                if($vec==$zbozi->{kod})
                {
                    $nalezeno = 1;
                    $polozka = ($pocet+1)."x$vec";
                    last;
                }
            }
            unless($nalezeno)
            {
                push(@kosik, "1x$zbozi->{kod}");
            }
            my $novy_kosik = join("a", @kosik);
#            print("<a href=\"mailto:klara.zemanova\@atlas.cz\">Objednat e-mailem.</a></p></td>\n");
            print("        ", odkazpar("Přidat do košíku.", \%pole, "kosik=$novy_kosik"), "</p>\n");
            print("      </td>\n");
            # Vložit fotku zboží, pokud je k dispozici.
            my $cesta_disk = "$koren_system/$slozka/obr/zbo$zbozi->{kod_hry}$zbozi->{kod}.jpg";
            my $cesta_url = "$koren_hrejsi/$slozka/obr/zbo$zbozi->{kod_hry}$zbozi->{kod}.jpg";
            if($slozka ne "" && -f $cesta_disk)
            {
                print("      <td valign=\"top\">\n");
                print("        <hr><img src=\"$cesta_url\" width=150 alt=\"fotografie\">\n");
                print("      </td>\n");
            }
            $cesta_disk = "$koren_system/$slozka/obr/zbo$zbozi->{kod_hry}$zbozi->{kod}.gif";
            $cesta_url = "$koren_hrejsi/$slozka/obr/zbo$zbozi->{kod_hry}$zbozi->{kod}.gif";
            if($slozka ne "" && -f $cesta_disk)
            {
                print("      <td valign=\"top\">\n");
                print("        <hr><img src=\"$cesta_url\" width=150 alt=\"fotografie\">\n");
                print("      </td>\n");
            }
            print("    </tr>\n");
        }
    }
    print("  </table>\n");
    print("</td>\n");
}



#------------------------------------------------------------------------------
# Vypíše dobu, po kterou program běžel. K tomu potřebuje dostat časové otisky
# začátku a konce.
#------------------------------------------------------------------------------
sub sestavit_hlaseni_o_trvani_programu
{
    my $starttime = shift;
    my $stoptime = time();
    my $cas = $stoptime-$starttime;
    my $hod = int($cas/3600);
    my $min = int(($cas%3600)/60);
    my $sek = $cas%60;
    my $hlaseni;
    if($hod==0)
    {
        if($min==0)
        {
            $hlaseni = sprintf("Program běžel $sek vteřin%s.\n", $sek==1 ? "u" : $sek>=2 && $sek<=4 ? "y" : "");
        }
        else
        {
            $hlaseni = sprintf("Program běžel %d:%02d minut.\n", $min, $sek);
        }
    }
    else
    {
        $hlaseni = sprintf("Program běžel %2d:%02d:%02d hodin.\n", $hod, $min, $sek);
    }
    return $hlaseni;
}
