#!/usr/bin/perl
# CGI přístup k databázi her. Generuje jak seznamy, tak stránky o konkrétních hrách.
# (c) 2002 - 2006 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;
use mysql;
# 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");
# Danovo české třídění.
use csort;



# 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(exists($pole{kosik}) && !norobot::proverit())
{
    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";
}
# Parametry, které se nemají propagovat do všech odkazů vedoucích odsud dál,
# je potřeba přestěhovat z hashe %pole někam jinam, kde je najdou pouze funkce,
# které je potřebují pro výrobu této stránky, ale ne pro konstrukci odkazů z ní.
$hledat = $pole{hledat}; # globální proměnná
delete($pole{hledat});
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");
# Nastavit kódování klienta, spojení a výsledků.
$databaze->prepare("SET NAMES 'utf8'")->execute();
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=\"center\" valign=\"top\" width=\"15%\">\n");
    vypsat_odkazy_na_palubu();
    vypsat_seznam_her_na_prodej();
    print("      </td>\n");
    print("      <td align=\"center\" valign=\"top\" width=\"65%\">\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\" bgcolor=lightgreen>\n");
    vypsat_poradnu();
    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.
# Pozor! (léto 2007) Ve skutečnosti i tady musíme vědět, jaký pohled uživatel
# zvolil. Pokud si řekl o konkrétní hru, chceme, aby v názvu stránky bylo
# "koupit hru tu a tu". To kvůli indexování roboty.
# 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");
    # Poslat začátek stránky.
    print <<EOF
<html>
  <head>
EOF
    ;
    # Nedovolit robotům indexovat stránku, na které je něco v košíku.
    if(exists($pole{kosik}))
    {
        # index/noindex ... indexovat tuto stránku?
        # follow/nofollow ... sledovat odkazy z této stránky?
        # noindex,nofollow
        print("    <meta name=\"robots\" content=\"noindex\">\n");
    }
    # Sestavit název stránky. Pokud je stránka cílena na určitou hru, musí být název hry obsažen v názvu.
    my $nazev_stranky;
    if(exists($pole{hra}))
    {
        my $odpoved = mysql::dotaz($databaze, "nazev", "hry WHERE kod='$pole{hra}'");
        if(scalar(@{$odpoved}))
        {
            my $nazev_hry = $odpoved->[0]{nazev};
            $nazev_stranky = "Koupit $nazev_hry";
        }
        else
        {
            # Nebyl nalezen název hry podle kódu. Nejspíš šlo o pseudokód, např. "novinky" nebo "poradna".
            $nazev_stranky = "Deskové hry: obchod: $pole{hra}";
        }
    }
    else
    {
        $nazev_stranky = "Deskové hry: obchod";
    }
    print <<EOF
    <meta http-equiv="Content-Language" content="cs">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>$nazev_stranky</title>
    <meta name="description" content="Obchod s hrami, Portál o deskových hrách. Pravidla, recenze, akce, e-obchod, pozvánky, turnaje, informace o deskových hrách.">
    <meta name="keywords" content="prodej, nákup, obchod, e-obchod, on-line obchod, obchod s hrami, objednávky, košík, košíček, objednat, hračky, deskove hry, hry, deskové hry, stolní hry, společenské hry, Klub deskových her Paluba, Klub Paluba, pravidla, turnaje, games, board games, akce, pozvánky, recenze, Othello, Abalone, Carcassonne, Osadníci, Bang, 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_poradnu
{
    print(odkazpar("<font color=green size=+1><b>Herní poradna:</b></font>", \%pole, "hra=poradna"), "\n");
    print("<br><font color=green>Hry pro:</font>\n");
    print("<table width=\"100%\">\n");
    print("<tr><td>", odkazpar("<font color=green>celou rodinu </font>", \%pole, "hra=rodina"), "\n");
    print("    <td>", odkazpar("<font color=green>děti 2-7 let </font>", \%pole, "hra=deti"), "\n");
    print("<tr><td>", odkazpar("<font color=green>fajnšmekry </font>", \%pole, "hra=experti"), "\n");
    print("    <td>", odkazpar("<font color=green>dva </font>", \%pole, "hra=pro2"), "\n");
    print("<tr><td>", odkazpar("<font color=green>party a mejdany </font>", \%pole, "hra=mejdan"), "\n");
    print("</table>\n");
}


#------------------------------------------------------------------------------
# Vypíše seznam her na prodej.
#------------------------------------------------------------------------------
sub vypsat_seznam_her_na_prodej
{
    print("<h3 align=left>Seznam her na prodej:</h3>\n");
    # Vypsat okénko pro vyhledávání v seznamu (včetně alternativních názvů a názvů zboží).
    print("<form method=get action=\"prodej.pl\"><input name=hledat><input type=submit value=\"Hledat\"></form>\n");
    print("<p align=left>\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();
    # Nejdříve načíst, potom si je sami seřadíme podle české abecedy algoritmem,
    # kterému můžeme důvěřovat.
    my @hry;
    while(my ($kod, $nazev) = map{decode("utf8", $_)}($dtzobj->fetchrow_array()))
    {
        my %zaznam =
        (
            "kod"   => $kod,
            "nazev" => $nazev,
            "trid"  => csort::zjistit_tridici_hodnoty($nazev, "cs")
        );
        push(@hry, \%zaznam);
    }
    # Seřadit seznam her podle názvů her podle české abecedy.
    @hry = sort{$a->{trid} cmp $b->{trid}}(@hry);
    # Projít seřazený seznam a vypsat odkazy na hry.
    foreach my $hra (@hry)
    {
        print(odkazpar($hra->{nazev}, \%pole, "hra=$hra->{kod}"), "<br>\n");
    }
    print("</p>\n");
}



#------------------------------------------------------------------------------
# Vypíše úvodní text obchodu s hrami.
#------------------------------------------------------------------------------
sub vypsat_uvod_obchodu
{
    print("<h3>\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", \%pole, "hra=cenik"), "| \n");
    print(odkazpar("SLOVENSKO", \%pole, "hra=slovensko"), "| \n");
    print(odkazpar("<font color=green>PORADNA</font>", \%pole, "hra=poradna"), " \n");
    print("</h3>\n");
    print("<h1>Obchod s&nbsp;hrami</h1>\n");
#     print("<h3><font color=red><h3>Ve dnech 30.9. - 8.10.2006 se v Praze uskuteční 6. ročník mezinárodního festivalu her <a href=http://www.deskohrani.cz/>Deskohraní</a>.</font></p>\n");

#    print("<h3><font color=red>Objednávky přijaté v době 5. - 20.8.2006 budou vyřízeny až po 21.8., </br> tudíž je obdržíte až koncem srpna či začátkem září. O přesném termínu dodání budete vyrozuměni po 21.8.2006. Děkujeme za pochopení. Osobní nákup na Palubě je možný v době otvíracích hodin. Více na <a href=http://www.paluba.cz/>www.paluba.cz</a>.</font></h3>\n");
}



#------------------------------------------------------------------------------
# Vypíše odkazy na Palubu.
#------------------------------------------------------------------------------
sub vypsat_odkazy_na_palubu
{
    print("<p>Hry si můžete koupit jak ");
    print("<a href=\"http://www.paluba.cz\">na&nbsp;Palubě,</a>");
#     print("</br><img src=\"$koren_hrejsi/obr/logo.gif\" height=50 align=center>");
    print(" tak ");
    print(odkazpar("zde na dobírku.", \%pole, "hra=obecne"));
}



#------------------------------------------------------------------------------
# Vypíše prostředek stránky
#------------------------------------------------------------------------------
sub vypsat_prostredek_stranky
{
    if($pole{hra} eq "" && $hledat 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();
    }
    elsif($pole{hra} eq "slovensko")
    {
        prostredek_slovensko();
    }
    elsif($hledat ne "")
    {
        prostredek_hledani($hledat);
    }
    else
    {
        prostredek_hra($pole{hra});
    }
}



#------------------------------------------------------------------------------
# Vypíše obecný prostředek, když není vybrána konkrétní hra (dodací podmínky).
#------------------------------------------------------------------------------
sub prostredek_obecny
{
    print <<EOF
        <td align="center" valign="top" WIDTH="70%">
          
          <p>Všechny vlevo uvedené hry i mnohé další 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 - st 17 - 22 hod., ne 14 - 20 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é 89&nbsp;Kč.</b>
          <ul><p>Při objednávce: 
              <li>nad 2&nbsp;500&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 66&nbsp;Kč.</b>
          <p><b>Organizace pracující s dětmi a mládeží 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

          
            <br>Pokud jste taková organizace, <b>nezapomeňte to uvést při objednávce!</b></p>
          <p>Dobírky zasíláme i na Slovensko, ale poštovné je bohužel mnohem dražší. Poštovné a balné připočítáváme na Slovensko takto:
           <br>280&nbsp;Kč do 2&nbsp;Kg a 2000&nbsp;Kč
           <br>300&nbsp;Kč do 5&nbsp;Kg a 10&nbsp;000&nbsp;Kč.
           <br>Nad 10&nbsp;000&nbsp;Kč je poštovné zdarma.
           <br>Dobírky na Slovensko platíte ve slevenských korunách a přepočet je podle kurzu ČSOB valuty střed ke dni odeslání.
           </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 139&nbsp;Kč</p>
          <p>Máte-li zájem o hru, která momentálně není, můžete si jí i tak dát do košíčku a do poznámky uvést, že máte zájem být informován(a) až hra opět bude.
          <p>Máte-li zájem o hru, která v nabídce vůbec není, napište nám e-mail:
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>. Čas od času přivezeme nějaké hry z Německa, takže Vám třeba budeme moct vyhovět!
          </p>
          <p>Hry jsou prodávány jménem Kláry Zemanové, IČO 68873841, sídlo Vybíralova 15, Praha.</p>
          
          <p>Máte-li jakékoliv dotazy, obraťte se na nás:
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </p>

          
        </td>
EOF
    ;
}


#------------------------------------------------------------------------------
# Vypíše prostředek novinky, když není vybrána konkrétní hra.
#------------------------------------------------------------------------------
sub prostredek_novinky
{
    # Získat z databáze údaje o hrách.
    my @nazvy = qw(kod_hry zbozi.kod hry.kod zbozi.nazev prodejni_cena bezna_cena nelze_koupit slozka_hrejsi novinka omezeny_pocet sleva popis_zbozi lokalizace);
    my $nazvy = join(", ", @nazvy);
    my $dotaz = "SELECT $nazvy FROM zbozi INNER JOIN hry ON hry.kod=zbozi.kod_hry ORDER BY zbozi.nazev";
    my $dtzobj = $databaze->prepare($dotaz);
    $dtzobj->execute();
    my @zbozi;
       # Vysvětlení následujícího while: dokud (while) nejsme na konci výstupu dotazu (tedy v podstatě tabulky), načti další řádek (to je to fetchrow_array), převeď ho do utf8 a ulož do pole @zaznam (i-tý prvek pole bude obsahovat hodnotu v i-tém sloupci právě načteného řádku). Abychom to mohli použít, musíme vědět, která položka je v i-tém sloupci, což nám naštěstí řekne pole @nazvy. Takže uvnitř těch { } se pole @zaznam a @nazvy zkombinují do hashe %zaznam, s jehož pomocí pak budeme moct přistupovat k hodnotám pomocí názvu sloupce a ne jeho čísla: např. $zaznam{bezna_cena}. Protože ale záznam odpovídá jen jedinému řádku (jedinému druhu zboží) a my chceme tabulku všech řádků (všech druhů zboží), uložíme potom odkaz na tento %zaznam do pole @zbozi. Tohle je pole řádků, tedy tabulka. 
       # Pak můžeš udělat např. $zbozi[$i]->{bezna_cena} nebo $zbozi[$i]{bezna_cena} (v tomhle konkrétním případě je ta šipka mezi ] a { nepovinná). 
    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);
    }

print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
EOF
;
    print("<table><tr><td valign=top ><table><h2><font color=red>NOVINKY</font></h2> \n");
    for(my $i = 0; $i<=$#zbozi; $i++)
    {
        if(($zbozi[$i]->{novinka})&&!($zbozi[$i]->{nelze_koupit}))
        {
            print("<tr><td> \n");
            # Vložit fotku zboží, pokud je k dispozici.
            print(foto($zbozi[$i]{slozka_hrejsi}, $zbozi[$i]{"hry.kod"}, $zbozi[$i]{"zbozi.kod"}));
            print("\n");
            print("</td>\n");
            print("<td> ", odkazpar($zbozi[$i]->{"zbozi.nazev"}, \%pole, "hra=$zbozi[$i]->{kod_hry}"), "</br>\n");
            print("<b>Naše cena: ", $zbozi[$i]->{prodejni_cena}, "</b></br>\n ");
            if($zbozi[$i]->{bezna_cena}>0)
            {
                print(" Běžná cena: $zbozi[$i]->{bezna_cena}&nbsp;Kč\n");
                if($zbozi[$i]->{bezna_cena}>$zbozi[$i]->{prodejni_cena})
                {
                    my $uspora_kc = $zbozi[$i]->{bezna_cena}-$zbozi[$i]->{prodejni_cena};
                    my $uspora_prc = $uspora_kc/$zbozi[$i]->{bezna_cena}*100;
                    if($uspora_prc>=4)
                    {
                        printf("        <br>(ušetříte %d&nbsp;%%.)\n", $uspora_prc);
                    }
                }
            }
            else
            {
                print("        Běžně se v&nbsp;ČR neprodává.\n");
            }            
            print("</td></tr>\n");
        }
 
    }
    print("</table></td><td valign=top align=center><table><h2><font color=red>AKCE</font></h2> \n");
    for(my $i = 0; $i<=$#zbozi; $i++)
    {
        if(($zbozi[$i]->{sleva})&&!($zbozi[$i]->{nelze_koupit}))
        {
            print("<tr><td align=center> \n");
          
            print("<h2 align=center>", odkazpar($zbozi[$i]->{"zbozi.nazev"}, \%pole, "hra=$zbozi[$i]->{kod_hry}"), "</h2> \n");

            # Vložit fotku zboží, pokud je k dispozici.
              print(foto($zbozi[$i]{slozka_hrejsi}, $zbozi[$i]{"hry.kod"}, $zbozi[$i]{"zbozi.kod"}, 250));
              print("\n");

            if($zbozi[$i]->{bezna_cena}>0)
            {
                print("<h3> běžně: $zbozi[$i]->{bezna_cena}&nbsp;Kč\n");
                if($zbozi[$i]->{bezna_cena}>$zbozi[$i]->{prodejni_cena})
                {
                    my $uspora_kc = $zbozi[$i]->{bezna_cena}-$zbozi[$i]->{prodejni_cena};
                    my $uspora_prc = $uspora_kc/$zbozi[$i]->{bezna_cena}*100;
                    if($uspora_prc>=4)
                    {
#                        printf("        <br><font color=red>(ušetříte %d&nbsp;Kč, resp. %d&nbsp;%%.)</font>\n", $uspora_kc, $uspora_prc);
                        printf("        <br><font color=red>sleva %d&nbsp;%% </font>\n", $uspora_prc);
                    }
                }
            }
            else
            {
                print("        Běžně se v&nbsp;ČR neprodává.\n");
            }

            print("<br><font color=red><b>nyní: ", $zbozi[$i]->{prodejni_cena}, "&nbsp;Kč </b></font>\n ");


              print("        $zbozi[$i]->{poznamka}</h3>\n");
              print("        <p>$zbozi[$i]->{popis_zbozi}</p>\n");
              print("        <p>$zbozi[$i]->{lokalizace}</p>\n");


            print("</td>\n");
            print("<td>\n");

                        
        }
    }
    
    print("</table>\n");
    
    for(my $i = 0; $i<=$#zbozi; $i++)
    {
 #        if(!($zbozi[$i]->{novinka})&&!($zbozi[$i]->{nelze_koupit})&&($zbozi[$i]->{omezeny_pocet}))
 #        {
 #           print("<tr><td>\n");
 #           print("</td>\n");
 #           print("<td> \n");
 #           print(odkazpar($zbozi[$i]->{"zbozi.nazev"}, \%pole, "hra=$zbozi[$i]->{kod_hry}"), "</br> \n");
 #           print("<b>Cena: ", $zbozi[$i]->{prodejni_cena}, "</b></br>\n ");
 #           print("</td></tr>\n");
 #       }
    }
    print("</td></tr></table>\n");


          print("<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>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </p>
        </td>
EOF
    ;
}

#------------------------------------------------------------------------------
# Vypíše prostředek Herní poradna, když není vybrána konkrétní hra.
#------------------------------------------------------------------------------
sub prostredek_slovensko
{
    print <<EOF
      <tr valign="top">
        <td valign="top" WIDTH="70%">
          <h1 align=center><font color=red>Zasílání na Slovensko</font></h1>
          <p>Dobírky zasíláme i na Slovensko, ale poštovné je bohužel mnohem dražší. 
          <p>Poštovné a balné připočítáváme na Slovensko takto:
           <ul><li>280&nbsp;Kč do 2&nbsp;Kg a 2000&nbsp;Kč
           <li>300&nbsp;Kč do 5&nbsp;Kg a 10&nbsp;000&nbsp;Kč.
           <li>Nad 10&nbsp;000&nbsp;Kč je poštovné zdarma.
           </ul>
           <p>Dobírky na Slovensko platíte ve slovenských korunách a přepočet je podle kurzu ČSOB valuty střed ke dni odeslání. Dobírky dodáváme zhruba do 14 dnů. O přesné ceně i termínu dodání budete vyrozuměni e-mailem.
           </p>
           <p>Klidně můžete objednat přes "košíky". Prosím, do poznámky uvďte Slovensko. Automaticky vypočtená cena vám bude upravena o poštovné a balné, jak je uvedeno výše.</p>
           <p>Máte-li jakékoliv dotazy, obraťte se na nás:
             <a HREF="mailto:obchod\@hrejsi.cz">obchod\@hrejsi.cz</a>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
           </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>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </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>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </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>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </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>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </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=eti");
          print("<li><a HREF=\"prodej.pl?$parametry\">Eufrat a Tigris</a> Velmi pěkná hra, která je na českém trhu teprvo krátkou dobu, ale i tak už je oblíbená!\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=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");
          $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");
          $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=lcr");
          print("<li><a HREF=\"prodej.pl?$parametry\">Lara Croft Tomb Raider The Angel of Darkness</a> Máme omezený počet kusů této deskové hry na motivy oblíbené počítačové hry The Angel of Darkness. \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=bud");
          print("<li><a HREF=\"prodej.pl?$parametry\">Blitz und Donner</a> Dovezli jsme pouze omezený počet kusů této kvalitní hry! \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=oma");
          print("<li><a HREF=\"prodej.pl?$parametry\">Oltre Mare</a> Dovezli jsme pouze omezený počet kusů této kvalitní hry! \n");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=raz");
          print("<li><a HREF=\"prodej.pl?$parametry\">Razzia</a> Dovezli jsme pouze omezený počet kusů této zábavné karetní hry! \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>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </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á poziční 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");
          $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=sbt");
          print("<li><a HREF=\"prodej.pl?$parametry\">Saboteur</a> Nebudete se nudit a lze hrát i s mladšími hráči zhruba od 6 let! trochu blafování, trochu náhody, trochu škodolibosti, ... \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>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </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>
          <h2>Akční slevy</h2>
          <p>Akční slevy najdete vždy aktuálně na stránce "NOVINKY". O prázdninách to jsou převážně oddechovější hry.</p>


          <h3>Při objednávce 
          <ul><li>nad 2&nbsp;500&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 66&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>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </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();
    # Pro název každého zboží získat jeho třídící hodnoty.
    foreach my $z (@{$zbozi})
    {
        $z->{_trid} = csort::zjistit_tridici_hodnoty($z->{nazev}, "cs");
    }
    # Seřadit zboží vzestupně podle abecedy.
    my @cenik = sort{$a->{_trid} cmp $b->{_trid}}(@{$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. U většiny jde zhruba o 10% nižší ceny, než jsou naše ceny. Oproti běžným cenám na trhu je to ještě levnější.
            </p>
            <p>Hry jsou řazeny podle abecedy.
               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 s výsledky hledání.
#------------------------------------------------------------------------------
sub prostredek_hledani
{
    my $retezec = shift;
    print("<tr><td>\n");
    print("<h2>Výsledky hledání řetězce '$retezec' v&nbsp;katalogu</h2>\n");
    print(hledat($retezec));
    print("</td></tr>\n");
}



#------------------------------------------------------------------------------
# Vypíše prostředek, když došlo k objednávce.
#------------------------------------------------------------------------------
sub prostredek_objednavka
{
    print("<td align=center valign=top width=\"70%\">\n");
    my $objednavka = zjistit_objednavku($objednany_kosik);
    my $uspech = zkontrolovat_objednavku($objednavka);
    if(!$uspech)
    {
        print("<h1><font color=red>Vaše objednávka NEBYLA ODESLÁNA!!!</font></h1>\n");
        print("<p>V&nbsp;objednávce byly zjištěny následující nedostatky:</p>\n");
        print("<ul>\n");
        foreach my $chyba (@{$objednavka->{chyby}})
        {
            print("<li>$chyba</li>\n");
        }
        print("</ul>\n");
        # Vypsat případná varování (např. o zboží, které jsme z košíku odstranili, protože ho neprodáváme).
        if(@{$objednavka->{varovani}})
        {
            print("<h2>Varování</h2>\n");
            print("<ul>\n");
            foreach my $varovani (@{$objednavka->{varovani}})
            {
                print("<li>$varovani</li>\n");
            }
            print("</ul>\n");
        }
        vypsat_obsah_kosiku($objednany_kosik, 0);
        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=\"$objednavka->{jmeno}\" size=\"20\"><br>\n");
        print("Příjmení: <input name=prijmeni type=text value=\"$objednavka->{prijmeni}\" size=\"20\"><br>\n");
        print("E-mail: <input name=email type=text value=\"$objednavka->{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=\"$objednavka->{telefon}\" size=\"20\"><br>\n");
        print("Poznámka: <input name=poznamka type=text value=\"$objednavka->{poznamka}\" size=\"50\"><br>\n");
        print("Poznámka 2: <input name=poznamka2 type=text value=\"$objednavka->{poznamka2}\" size=\"50\"><br>\n");
        my %checked;
        $objednavka->{odber} = "dobirka" if(!exists($objednavka->{odber}));
        $checked{$objednavka->{odber}} = "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");
        $objednavka->{platba} = "hotove" if(!exists($objednavka->{platba}));
        $checked{$objednavka->{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($objednavka->{odber} eq "dobirka")
        {
            print("<p>Zboží chci zaslat dobírkou na adresu:<br>\n");
            print("Ulice a dům: <input name=ulice type=text value=\"$objednavka->{ulice_a_dum}\" size=\"20\"><br>\n");
            print("Obec: <input name=obec type=text value=\"$objednavka->{obec}\" size=\"20\"><br>\n");
            print("PSČ: <input name=psc type=text value=\"$objednavka->{psc}\" size=\"20\"><br>\n");
        }
        else
        {
            if($objednavka->{odber} eq "paluba")
            {
                print("<p>Zboží si vyzvednu osobně na Palubě.<br>\n");
            }
        }
        if($objednavka->{platba} eq "prevodem")
        {
            print("<p>Zaplatím předem převodem na účet.<br>\n");
        }
        else
        {
            if($objednavka->{odber} eq "dobirka")
            {
                print("<p>Zaplatím dobírkou.<br>\n");
            }
            else
            {
                print("<p>Zaplatím hotově při převzetí.<br>\n");
            }
        }
        if($objednavka->{sleva_org_deti} eq "ano")
        {   
            print("<p>Organizace pracující s mládeží. IČO: <input name=ico type=text value=\"$objednavka->{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");
    }
    # Kontrola objednávky skončila úspěchem.
    else
    {
        print("<h1>Závazná objednávka</h1>\n");
        # Vypsat případná varování (např. o zboží, které jsme z košíku odstranili, protože ho neprodáváme).
        if(@{$objednavka->{varovani}})
        {
            print("<h2>Varování</h2>\n");
            print("<ul>\n");
            foreach my $varovani (@{$objednavka->{varovani}})
            {
                print("<li>$varovani</li>\n");
            }
            print("</ul>\n");
            print("<p>Zbytek vaší objednávky byl v&nbsp;pořádku odeslán.</p>\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);
        # Vypsat dodací adresu.
        if($objednavka->{odber} 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>$objednavka->{jmeno}</b><br>\n");
            $mail .= "Jméno: $objednavka->{jmeno} $objednavka->{prijmeni}\n";
            print("Příjmení: <b> $objednavka->{prijmeni}</b><br>\n");
            print("Ulice a dům: <b> $objednavka->{ulice_a_dum}</b><br>\n");
            $mail .= "Ulice a dům: $objednavka->{ulice_a_dum}\n";
            print("Obec: <b>$objednavka->{psc} $objednavka->{obec}</b><br>\n");
            $mail .= "Obec: $objednavka->{psc} $objednavka->{obec}\n";
        }
        else
        {
            if($objednavka->{odber} 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 ($objednavka->{odber}) \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 ($objednavka->{odber}) \n";
            }
            print("Jméno: <b>$objednavka->{jmeno}</b><br>\n");
            $mail .= "Jméno: $objednavka->{jmeno} $objednavka->{prijmeni}\n";
            print("Příjmení: <b> $objednavka->{prijmeni}</b><br>\n");
            $mail .= "Ulice a dům: $objednavka->{ulice_a_dum}\n";
            $mail .= "Obec: $objednavka->{psc} $objednavka->{obec}\n";
        }
        print("<p>Objednávka bude automaticky potvrzena e-mailem na následující adresu:<br>\n");
        print("E-mail: <b>$objednavka->{email}</b><br>\n");
        print("Pokud Vám tedy v nejbližších minutách nepřijde automatické potvrzení, patrně jste se v adrese spletli a my Vám nebudeme moct doručit upřesnění k Vaší objednávce. Prosíme v takovém případě nám pošlete e-mail na adresu obchod\@hrejsi.cz Děkujeme. <br>\n");
        $mail .= "E-mail: $objednavka->{email}\n";
        print("<p>Telefon: <b>$objednavka->{telefon}</b><br>\n");
        $mail .= "Telefon: $objednavka->{telefon}\n";
        print("<p>Poznámka: <b>$objednavka->{poznamka} </b><br>\n");
        $mail .= "Poznámka: $objednavka->{poznamka} \n";
        print("Poznámka 2: <b>$objednavka->{poznamka2} </b><br>\n");
        $mail .= "Poznámka 2: $objednavka->{poznamka2} \n";
        my $platba = $objednavka->{platba};
        $platba =~ s/prevodem/převodem/;
        $platba =~ s/hotove/hotově/;
        print("<p>Platba: $platba</p>\n");
        $mail .= "Platba: $platba\n";
        if($objednavka->{sleva_org_deti} = 1)
        {
            print("<p><font color=red>Uvedené ceny zahrnují slevu pro organizace pracující s&nbsp;mládeží. Vaše IČO: $objednavka->{ico}</font></p>\n");
            $mail .= "Organizace pracující s mládeží. IČO: $objednavka->{ico}\n";
        }
        else
        {
            $mail .= "Není organizace pracující s mládeží. IČO: $objednavka->{ico} \n";
        }
        
        if($objednavka->{jmeno} eq "test")
        {
            $adresat = "klara\@hrejsi.cz";
            $kopie = "zeman\@ufal.mff.cuni.cz";
            $skopie = "dkz\@centrum.cz";
        }
        else
        {
            $adresat = "obchod\@hrejsi.cz";
            $kopie = $objednavka->{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 = "$objednavka->{jmeno} $objednavka->{prijmeni}";
        $jmeno_subject =~ tr/ÁÄĂÂĄČĆÇĎĐÉĚËĘÍÎĽĹŁŇŃÓÖŐÔŘŔŠŚŞŤŢÚŮÜŰÝŽŹŻáäăâąčćçďđéěëęíîľĺłňńóöőôřŕšśşťţúůüűýžźż/AAAAACCCDDEEEEIILLLNNOOOORRSSSTTUUUUYZZZaaaaacccddeeeeiilllnnoooorrsssttuuuuyzzz/;
        print SENDMAIL ("Reply-to: \"$jmeno_subject\" <$objednavka->{email}> , obchod\@hrejsi.cz \n");
        print SENDMAIL ("To: $adresat\n");
        print SENDMAIL ("Cc: $kopie\n") if($kopie);
        print SENDMAIL ("Bcc: $skopie\n") if($skopie);
        if($objednavka->{odber} eq "paluba")
            {
                print SENDMAIL ("Subject: Objednavka odber Paluba: $jmeno_subject\n");
            }
            else
            {
                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.
        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ší 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 - st 17 - 22 hod., ne 14 - 20 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é 89&nbsp;Kč.
             Od 2500&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");
    $parametry = dancgi::sestavit_parametry_odkaz(\%pole, "hra=slovensko");
    print("Dobírky <a HREF=\"prodej.pl?$parametry\">zasíláme i na Slovensko.</a> ale poštovné je bohužel mnohem dražší.</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 66&nbsp;Kč. </b>
          <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 expresních dodávek připočítáváme <b>expresní příplatek 50 Kč,</b> 
             tedy celé poštovné a balné vyjde na 139 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>,
             +420&nbsp;777&nbsp;552&nbsp;729 (dobírky, sklad), +420&nbsp;777&nbsp;692&nbsp;337 (odběr Paluba).
          </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 přijaté v době 5. - 20.8.2006 budou vyřízeny až po 21.8., tudíž je obdržíte až koncem srpna či začátkem září. O přesném termínu dodání budete vyrozuměni po 21.8.2006. Děkujeme za pochopení. Osobní nákup na Palubě je možný v době otvíracích hodin. Více na <a href=http://www.paluba.cz/>www.paluba.cz</a>.</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 21.8.2006.</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 přijaté v době 5. - 20.8.2006 budou vyřízeny až po 21.8., tudíž je obdržíte až koncem srpna či začátkem září. O přesném termínu dodání budete vyrozuměni po 21.8.2006. Děkujeme za pochopení. Osobní nákup na Palubě je možný v době otvíracích hodin. Více na <a href=http://www.paluba.cz/>www.paluba.cz</a>.</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;
    $objednavka{kosik_text} = $kosik;
    # 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 nelze_koupit);
    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)))
    {
        # Ignorovat pokusy objednat zboží, které nelze koupit.
        # (Nikde by neměl být odkaz na přidání takového zboží do košíku, ale někdo může mít v cachi starou verzi stránky.)
        if($zbozi{$vec}{nelze_koupit})
        {
            my $varovani =
                "Ve vašem košíku byla hra <em>\"$zbozi{$vec}{nazev}\"</em>, kterou ale momentálně nevedeme. ".
                "Tuto hru jsme vám z&nbsp;košíku zase vyndali. ".
                "Vlastně je záhada, jak se vám ji tam vůbec podařilo vložit. ".
                "Protože jde nejspíš o chybu na našem serveru, budeme rádi, ".
                "pokud ze svého prohlížeče vydolujete přesnou adresu stránky, ".
                "na které jste našli příslušný odkaz <em>\"přidat do košíku\"</em>, ".
                "a <a href=\"mailto:obchod\@hrejsi.cz\">pošlete nám ji</a>. ";
            push(@{$objednavka{varovani}}, $varovani);
            next;
        }
        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}>=2500 && (!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} = 89;
            $objednavka{celkem} += 89;
        }
        # 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" ? 66 : 89;
            $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{jmeno} =~ s/^\s+//;
    $objednavka{jmeno} =~ s/\s+$//;
    $objednavka{jmeno} =~ s/\s+/ /g;
    $objednavka{prijmeni} = $pole{prijmeni};
    $objednavka{prijmeni} =~ s/^\s+//;
    $objednavka{prijmeni} =~ s/\s+$//;
    $objednavka{prijmeni} =~ s/\s+/ /g;
    $objednavka{ulice_a_dum} = $pole{ulice};
    $objednavka{ulice_a_dum} =~ s/^\s+//;
    $objednavka{ulice_a_dum} =~ s/\s+$//;
    $objednavka{ulice_a_dum} =~ s/\s+/ /g;
    $objednavka{obec} = $pole{obec};
    $objednavka{obec} =~ s/^\s+//;
    $objednavka{obec} =~ s/\s+$//;
    $objednavka{obec} =~ s/\s+/ /g;
    $objednavka{psc} = $pole{psc};
    $objednavka{psc} =~ s/^\s+//;
    $objednavka{psc} =~ s/\s+$//;
    $objednavka{psc} =~ s/\s+//g;
    $objednavka{email} = $pole{email};
    $objednavka{email} =~ s/^\s+//;
    $objednavka{email} =~ s/\s+$//;
    $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};
    $objednavka{ico} =~ s/^\s+//;
    $objednavka{ico} =~ s/\s+$//;
    # 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;
}



#------------------------------------------------------------------------------
# Zkontroluje úplnost a správnost údajů v objednávce. Případné nedostatky
# popíše do objednávky do položky "chyby". Musí zkontrolovat i obsah košíku,
# protože se stává, že uživatelé mají v cachi starší verzi stránky, která jim
# poskytne odkazy na zboží, jež ve skutečnosti nemáme na skladě. Díky tomu jako
# vedlejší produkt uloží do objednávky výpis obsahu košíku do e-mailu.
#------------------------------------------------------------------------------
sub zkontrolovat_objednavku
{
    my $objednavka = shift;
    my $chyba = 0;
    # Košík nesmí být prázdný.
    if(!@{$objednavka->{kosik}})
    {
        push(@{$objednavka->{chyby}}, "Váš košík je prázdný, neobjednali jste si žádné zboží.");
        $chyba = 1;
    }
    # Jméno i příjmení musí být neprázdné.
    $objednavka->{jmeno} =~ s/^\s+//;
    $objednavka->{jmeno} =~ s/\s+$//;
    $objednavka->{prijmeni} =~ s/^\s+//;
    $objednavka->{prijmeni} =~ s/\s+$//;
    if($objednavka->{jmeno} eq "" || $objednavka->{prijmeni} eq "")
    {
        push(@{$objednavka->{chyby}}, "Neuvedli jste jméno nebo příjmení.");
        $chyba = 1;
    }
    else
    {
        # Jestliže jméno nebo příjmení neobsahuje ani jedno velké písmeno, převést první znak na velké písmeno.
        # Test na velké písmeno uvnitř řetězce má pomoci rozlišit, kdy jde o ignoranci objednatele a kdy
        # o příjmení typu "van de Graaf".
        if(lc($objednavka->{jmeno}) eq $objednavka->{jmeno})
        {
            $objednavka->{jmeno} =~ s/^(.)/\u$1/;
        }
        if(lc($objednavka->{prijmeni}) eq $objednavka->{prijmeni})
        {
            $objednavka->{prijmeni} =~ s/^(.)/\u$1/;
        }
    }
    # E-mail musí vypadat jako běžný e-mail, tj. např. musí obsahovat zavináč a na konci musí být dva znaky nebo vyjmenované domény.
    $objednavka->{email} =~ s/^\s+//;
    $objednavka->{email} =~ s/\s+$//;
    if($objednavka->{email} !~ m/(\w|[-\._])+\@(\w|[-\._])+\.(\w\w|net|com|org|edu|mil|gov|biz|info)$/i)
    {
        push(@{$objednavka->{chyby}}, "E-mailová adresa je asi chybná.");
        $chyba = 1;
    }
    # Má-li se zboží zasílat na dobírku, musí být vyplněna adresa.
    if($objednavka->{odber} eq "dobirka")
    {
        $objednavka->{ulice_a_dum} =~ s/^\s+//;
        $objednavka->{ulice_a_dum} =~ s/\s+$//;
        $objednavka->{obec} =~ s/^\s+//;
        $objednavka->{obec} =~ s/\s+$//;
        $objednavka->{psc} =~ s/^\s+//;
        $objednavka->{psc} =~ s/\s+$//;
        my @chybadr = grep{$objednavka->{$_} =~ m/^\s*$/}("ulice_a_dum", "obec", "psc");
        if(@chybadr)
        {
            my $chybadr = join(", ", @chybadr);
            # Nahradit poslední čárku spojkou "a".
            $chybadr =~ s/, ([^,]*)$/ a $1/;
            # Doplnit diakritiku a velká písmena do názvů polí, než budou prezentována uživateli.
            $chybadr =~ s/ulice_a_dum/ulice/;
            $chybadr =~ s/psc/PSČ/;
            push(@{$objednavka->{chyby}}, "U dodávek na dobírku musí být správně uvedena dodací adresa. Ve vaší adrese však chybí $chybadr.");
            $chyba = 1;
        }
        if($objednavka->{psc} !~ m/^[1234567]\d\d\d\d$/)
        {
            push(@{$objednavka->{chyby}}, "To, co jste vyplnili do kolonky PSČ, není platné české poštovní směrovací číslo. Pokud chcete zaslat zboží do zahraničí, je to možné, ale musíte nás <a href=\"mailto:obchod\@hrejsi.cz\">kontaktovat e-mailem</a> a počítat s&nbsp;podstatně vyššími náklady.");
            $chyba = 1;
        }
    }
    return !$chyba;
}



#------------------------------------------------------------------------------
# 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 nelze_koupit);
    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)))
    {
        # Ignorovat pokusy objednat zboží, které nelze koupit.
        # (Nikde by neměl být odkaz na přidání takového zboží do košíku, ale někdo může mít v cachi starou verzi stránky.)
        ###!!! Pozor, pak se může stát, že košík bude prázdný. To zatím není nikde ošetřeno.
        ###!!! Uživatel také momentálně není nijak varován, že měl v košíku něco, co jsme mu z něj vyhodili.
        next if($zbozi{$vec}{nelze_koupit});
        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>=2500 && (!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>89&nbsp;Kč.</b></p>\n");
            print("<p>Poštovné a balné při předplatbě <b>66&nbsp;Kč.</b><br>\n");
            print("Při nákupu nad 2500&nbsp;Kč poštovné a balné ZDARMA.</p>\n");
            $mail .= sprintf("Poštovné     = %4d Kč\n", 89);
            $celkem += 89;
        }
        # 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" ? 66 : 89;
            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.
    print("        ", foto($slozka, "", "", 150), "\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");
    if($min_delka!=0)
    {
        if($min_delka>=60*24)
        {
             $dnymin = sprintf("%d", ($min_delka/60/24)+0.5);
             $dnymax = sprintf("%d", ($max_delka/60/24)+0.5);
             printf("<br><b>Délka hry:</b> %s %s.\n", $dnymax==$dnymin ? $dnymax : "$dnymin až $dnymax", $dnymax==1 ? "den" : $dnymax>=2 && $dnymax<=4 ? "dny" : "dnů");
        }
        elsif($min_delka>=100)
        {
             $hodmin = sprintf("%.1f", ($min_delka/60)+0.05);
             $hodmax = sprintf("%.1f", ($max_delka/60)+0.05);
             print("<br><b>Délka hry:</b> $hodmin až $hodmax hod.\n");
        }
        else
        {
            print("<br><b>Délka hry:</b> $min_delka - $max_delka min.\n");
        }
    }
    # Vypsat odkazy na stránky o této hře.
    print("        <p><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.
    my $n_zbozi = 0;
    foreach my $zbozi (@zbozi)
    {
        unless($zbozi->{nelze_koupit})
        {
            $n_zbozi++;
            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");
            if($zbozi->{bezna_cena}>0)
            {
                print("        Běžná cena: $zbozi->{bezna_cena}&nbsp;Kč\n");
                if($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);
                    }
                }
            }
            else
            {
                print("        Běžně se v&nbsp;Česku neprodává.\n");
            }
            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 $foto = foto($slozka, $zbozi->{kod_hry}, $zbozi->{kod}, 150);
            if($foto ne "")
            {
                print("      <td valign=\"top\">\n");
                print("        <hr>$foto\n");
                print("      </td>\n");
            }
            print("    </tr>\n");
        }
    }
    print("  </table>\n");
    # Pokud k této hře nemáme žádné zboží, napsat to (na stránku hry se můžeme dostat z vyhledávačů).
    if($n_zbozi<=0)
    {
        print("  <p><b><font color=red>Litujeme, ale tuto hru momentálně nemáme v&nbsp;nabídce.</font></b></p>\n");
    }
    print("</td>\n");
}



#------------------------------------------------------------------------------
# Hledá řetězec v kódu hry, názvu hry, alternativních názvech hry a názvech
# zboží. Hledá i ve hrách, které neprodáváme, aby mohl informovat, že je
# neprodáváme. Vrátí přehled výsledků hledání v HTML.
#------------------------------------------------------------------------------
sub hledat
{
    my $retezec = shift;
    my $html;
    $html .= "<table>\n";
    # Hledat podle hlavního názvu hry.
    my $hry = mysql::dotaz($databaze, "kod", "nazev", "slozka_hrejsi", "hry WHERE nazev LIKE '%$retezec%'");
    # Hledat podle alternativních názvů hry.
    my $althry = mysql::dotaz($databaze, "kod", "hry.nazev AS nazev", "slozka_hrejsi", "hry INNER JOIN nazvy ON hry.kod = nazvy.kod_hry WHERE nazvy.nazev LIKE '%$retezec%'");
    # Přidat do her alternativní hry, které už v hrách nejsou.
    foreach my $althra (@{$althry})
    {
        unless(grep{$_->{kod} eq $althra->{kod}}(@{$hry}))
        {
            push(@{$hry}, $althra);
        }
    }
    # Nastavit způsob zvýrazňování nalezeného řetězce (musí být tady, využijeme nejen uvnitř následujícího cyklu).
    my $zvyr1 = "<span style='background:yellow'>";
    my $zvyr0 = "</span>";
    foreach my $hra (@{$hry})
    {
        # Zjistit alternativní názvy hry.
        my $nazvy = mysql::dotaz($databaze, "nazev", "nazvy WHERE (kod_hry = '$hra->{kod}') AND (nazev <> '$hra->{nazev}')");
        my $dalsi_nazvy = join(", ", map{$_->{nazev}}(@{$nazvy}));
        # Zvýraznit hledaný řetězec v názvech hry.
        my $nazev = $hra->{nazev};
        $nazev =~ s/($retezec)/$zvyr1$1$zvyr0/ig;
        $dalsi_nazvy =~ s/($retezec)/$zvyr1$1$zvyr0/ig;
        # Získat seznam zboží patřícího k této hře, abychom věděli, zda ji máme v nabídce.
        my $zbozii = mysql::dotaz($databaze, "kod", "kod_hry", "nelze_koupit", "nazev", "prodejni_cena", "zbozi WHERE (kod_hry = '$hra->{kod}')");
        my $n_zbozi = 0;
        foreach my $zbozi (@{$zbozii})
        {
            $n_zbozi++;
            $html .= "<tr>\n";
            $html .= "<td>\n";
            # Zobrazit fotografii zboží.
            my $slozka = $hra->{slozka_hrejsi};
            my $foto = foto($slozka, $zbozi->{kod_hry}, $zbozi->{kod}, 100);
            if($foto eq "")
            {
                $foto = foto($slozka, "", "", 100);
            }
            $html .= "$foto\n";
            $html .= "</td>\n";
            $html .= "<td>\n";
            $html .= "<br>\n" if($foto eq "");
            $html .= odkazpar($nazev, \%pole, "hra=$hra->{kod}")."<br>\n";
            if($dalsi_nazvy ne "")
            {
                $html .= "<b>Alternativní názvy:</b> $dalsi_nazvy<br>\n";
            }
            # Zvýraznit hledaný řetězec v názvu zboží, podobně jako jsme to už dříve udělali s názvem hry.
            my $nazev_zbozi = $zbozi->{nazev};
            $nazev_zbozi =~ s/($retezec)/$zvyr1$1$zvyr0/ig;
            $html .= "<b>Zboží:</b> <font color=blue>$nazev_zbozi</font>";
            if($zbozi->{nelze_koupit})
            {
                $html .= "<br>\nToto zboží momentálně nemáme v&nbsp;nabídce.";
            }
            else
            {
                $html .= "<br>\n<b>Naše cena:</b> $zbozi->{prodejni_cena}&nbsp;Kč";
            }
            $html .= "\n";
            $html .= "<br>\n<br>\n" if($foto eq "");
            $html .= "</td>\n";
            $html .= "</tr>\n";
        }
        my $nabidka;
        if($n_zbozi<=0)
        {
            # K této hře nemáme žádné zboží. Přidat obecný řádek o hře.
            $html .= "<tr>\n";
            $html .= "<td>\n";
            my $slozka = $hra->{slozka_hrejsi};
            my $foto = foto($slozka, "", "", 100);
            $html .= "$foto\n";
            $html .= "</td>\n";
            $html .= "<td>\n";
            $html .= "<br>\n" if($foto eq "");
            $html .= odkazpar($nazev, \%pole, "hra=$hra->{kod}")."<br>\n";
            if($dalsi_nazvy ne "")
            {
                $html .= "<b>Alternativní názvy:</b> $dalsi_nazvy<br>\n";
            }
            $html .= "Toto zboží momentálně nemáme v&nbsp;nabídce.";
            $html .= "<br>\n<br>\n" if($foto eq "");
            $html .= "</td>\n";
            $html .= "</tr>\n";
        }
    }
    # Hledat podle názvů zboží. Děláme zvlášť, protože od těchto her nechceme zobrazit druhy zboží, které řetězec neobsahují.
    my $zbohry = mysql::dotaz($databaze, "hry.kod", "hry.nazev", "slozka_hrejsi", "zbozi.kod", "nelze_koupit", "zbozi.nazev", "prodejni_cena", "hry INNER JOIN zbozi ON hry.kod = zbozi.kod_hry WHERE zbozi.nazev LIKE '%$retezec%'");
    # Vynechat hry, které už jsme zobrazili.
    my @nove;
    foreach my $zbohra (@{$zbohry})
    {
        unless(grep{$_->{kod} eq $zbohra->{"hry.kod"}}(@{$hry}))
        {
            push(@nove, $zbohra);
        }
    }
    foreach my $zbozi (@nove)
    {
        $html .= "<tr>\n";
        $html .= "<td>\n";
        # Zobrazit fotografii zboží.
        my $foto = foto($zbozi->{slozka_hrejsi}, $zbozi->{"hry.kod"}, $zbozi->{"zbozi.kod"}, 100);
        if($foto eq "")
        {
            $foto = foto($zbozi->{slozka_hrejsi}, "", "", 100);
        }
        $html .= "$foto\n";
        $html .= "</td>\n";
        $html .= "<td>\n";
        $html .= "<br>\n" if($foto eq "");
        $html .= odkazpar($zbozi->{"hry.nazev"}, \%pole, "hra=$zbozi->{\"hry.kod\"}")."<br>\n";
        # Zvýraznit hledaný řetězec v názvu zboží, podobně jako jsme to už dříve udělali s názvem hry.
        my $nazev_zbozi = $zbozi->{"zbozi.nazev"};
        $nazev_zbozi =~ s/($retezec)/$zvyr1$1$zvyr0/ig;
        $html .= "<b>Zboží:</b> <font color=blue>$nazev_zbozi</font>";
        if($zbozi->{nelze_koupit})
        {
            $html .= "<br>\nToto zboží momentálně nemáme v&nbsp;nabídce.";
        }
        else
        {
            $html .= "<br>\n<b>Naše cena:</b> $zbozi->{prodejni_cena}&nbsp;Kč";
        }
        $html .= "\n";
        $html .= "<br>\n<br>\n" if($foto eq "");
        $html .= "</td>\n";
        $html .= "</tr>\n";
    }
    $html .= "</table>\n";
    # Pokud nebylo nalezeno nic, nahradit prázdný prostor krátkou zprávou.
    if(scalar(@{$hry})<=0 && scalar(@nove)<=0)
    {
        $html .= "<p>Nebyly nalezeny žádné hry, jejichž název by obsahoval daný řetězec znaků.</p>\n";
    }
    return $html;
}



#------------------------------------------------------------------------------
# Vrátí HTML odkaz (<img>) na fotku zboží. Pokud fotka není k dispozici, vrátí
# prázdný řetězec.
#------------------------------------------------------------------------------
sub foto
{
    my $slozka = shift; # položka slozka_hrejsi k dané hře v databázi
    my $kod_hry = shift;
    my $kod_zbozi = shift;
    my $sirka = shift; # šířka fotky do parametru width; výchozí = 100
    $sirka = 100 if($sirka eq "");
    my $odkaz;
    if($slozka eq "")
    {
        return "";
    }
    my $soubor;
    if($kod_hry ne "" && $kod_zbozi ne "")
    {
        $soubor = "zbo".$kod_hry.$kod_zbozi;
    }
    else
    {
        $soubor = "fotka";
    }
    my $cesta_disk = "$koren_system/$slozka/obr/$soubor";
    my $cesta_url = "$koren_hrejsi/$slozka/obr/$soubor";
    if(-f "$cesta_disk.jpg")
    {
        $odkaz = "<img src=\"$cesta_url.jpg\" width=\"$sirka\" alt=\"fotografie\">";
    }
    elsif(-f "$cesta_disk.gif")
    {
        $odkaz = "<img src=\"$cesta_url.gif\" width=\"$sirka\" alt=\"fotografie\">";
    }
    return $odkaz;
}



#------------------------------------------------------------------------------
# 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;
}
