/**
 * Uzas la serĉ-opciojn por serĉi kaj
 * montras la rezulton.
 *
 * TODO: Plibeligu la aspekton.
 * @uses Sercxilo
 */
function montruRezulton($valoroj)
{
    $sercxilo = new Sercxilo();
    $teksto = eotransform("<h3>Serc^rezulto</h3>\n");
    list($kampoj, $inversa, $sql) = kreuSercxSQL($valoroj);
    if (empty($kampoj)) {
        eoecho("<p>Vi elektu <em>almenau^ unu serc^indaj^o</em>" . " &ndash; alikaze mi nenion povas serc^i.</p>");
        return;
    }
    $sercxilo->metu_sql($sql);
    $teksto .= "<p><code>{$sql}</code></p>";
    $kolumnoj = array();
    foreach ($kampoj as $alias) {
        $kol = array('kampo' => $alias, 'titolo' => $inversa[$alias]['titolo']);
        if ($inversa[$alias]['ligo']) {
            $kol['ligilsxablono'] = $inversa[$alias]['ligo'];
        }
        $kolumnoj[] = $kol;
        // 	  $kolumnoj []= array($alias, $inversa[$alias]['titolo'], 'XXXXX', 'l',
        //						  $inversa[$alias]['ligo'], '');
    }
    $sercxilo->metu_kolumnojn($kolumnoj);
    if (in_array('nomo', $kampoj) and in_array('personanomo', $kampoj) and in_array('ID', $kampoj)) {
        if ($valoroj['sercxo_titolo']) {
            $sercxilo->metu_menutitolon("g^en. serc^o: " . $valoroj['sercxo_titolo']);
        } else {
            $sercxilo->metu_menutitolon("rezulto de sennoma " . "g^enerala serc^o");
        }
    } else {
    }
    reset($kampoj);
    $sercxilo->metu_ordigon(current($kampoj), 'asc');
    $sercxilo->metu_sumregulojn(array(array(array('entute:', '', 'r'), array('XX', 'A', 'l'))));
    $sercxilo->metu_memligomontradon(true);
    $sercxilo->metu_identigilon('gxenerala_sercxo_rezulto');
    if (strtoupper(substr($_REQUEST['tipo'], 0, 4)) == 'HTML') {
        echo $teksto;
    }
    echo "<!-- " . var_export($sercxilo, true) . "-->";
    $sercxilo->montru_rezulton_en_tipo($_REQUEST['tipo']);
}
/**
 * Kreas kaj redonas HTML-ligilon.
 *
 * @param urlstring $kien la URI de la paĝo (povas esti relativa).
 * @param eostring $teksto la teksto de la ligilo (en eo-kodigo)
 * @param   string $celo (nenecesa) se en alia ol la defaŭlta
 *          kadro, donu ties nomon.
 * @param string|array  $aldona_skripto aldonaj atributoj por
 *                    la '&lt;a>'-Elemento.
 *                     aŭ en unu ĉeno (inkluzive atributnomoj,
 *                   '=' kaj citiloj), aŭ kiel nomo-valoro-array.
 *
 * @return u8string la HTML-kodo, preta por eldoni ĝin.
 */
function donu_ligon($kien, $teksto, $celo = "", $aldona_skripto = "")
{
    $rez = '<a href="' . str_replace('&', '&amp;', $kien) . '" ';
    if ($celo) {
        $rez .= "target='{$celo}'";
    }
    if (is_string($aldona_skripto)) {
        $rez .= " " . htmlspecialchars($aldona_skripto, ENT_NOQUOTES);
    } else {
        if (is_array($aldona_skripto)) {
            foreach ($aldona_skripto as $nomo => $valoro) {
                $rez .= " " . $nomo . '="' . htmlspecialchars($valoro, ENT_COMPAT) . '"';
            }
        }
    }
    $rez .= ">";
    $rez .= eotransform($teksto);
    $rez .= "</a>";
    return $rez;
}
/**
 * Montras serĉo-kampon kun elekteblaj kondiĉoj en tabellinio.
 *
 * La kondiĉo-parto enhavas la eblecon elekti unu aŭ plurajn
 * el listo de valoroj - iu datumbazero estos trovita, se la valoro
 *  de la kampo estas unu el la markitaj.
 * ...
 *
 * @param eostring $priskribo la nomo de kampo (por serĉantoj),
 *           t.e. titolo en la serĉ-tabelo.
 * @param string   $tabelo   nomo de datumbaztabelo.
 * @param string   $nomo    la (datumbaza) nomo de la kampo.
 * @param array    $valoroj la ĝenerala serĉ-detaloj-strukturo.
 *
 * @param array    $elekteblecoj:  array() kun eroj de la formo
 *     interna_valoro => priskribo (eostring).
 *
 * @param string   $alias   kiel ni renomu la kampon dum la serĉo?
 *                            (necesa se samnoma kampo aperas en
 *                             diversaj tabeloj.)
 * @param eostring $titolo se donita, ni uzas tion kiel nomo de la 
 *                         rezulto-tabelo. Se ne, ni uzas $priskribo.
 */
function sercxelektolinio($priskribo, $tabelo, $nomo, $valoroj, $elekteblecoj, $alias = "", $titolo = "")
{
    $tipnomo = "sercxo_{$tabelo}__{$nomo}_tipo";
    $montrunomo = "sercxo_{$tabelo}__{$nomo}_montru";
    $uzunomo = "sercxo_{$tabelo}__{$nomo}_estasKriterio";
    //  $skripto = "kolorSxangxoDekstre('$tabelo', '$nomo')";
    eoecho("<tr id='{$tabelo}-{$nomo}-tabellinio'><th >{$priskribo}</th><td>");
    if ($alias) {
        tenukasxe("sercxo_{$tabelo}__{$nomo}_alias", $alias);
    }
    if ($titolo) {
        tenukasxe("sercxo_{$tabelo}__{$nomo}_titolo", $titolo);
    } else {
        tenukasxe("sercxo_{$tabelo}__{$nomo}_titolo", $priskribo);
    }
    jes_ne_bokso($montrunomo, $valoroj[$montrunomo], "kolorSxangxoMaldekstre('{$tabelo}', '{$nomo}')");
    echo "</td><td>";
    jes_ne_bokso($uzunomo, $valoroj[$uzunomo], "kolorSxangxoDekstre('{$tabelo}', '{$nomo}')");
    echo "</td><td><span id='{$tabelo}-{$nomo}-kriterioj'>";
    //   simpla_entajpbutono($tipnomo, $valoroj[$tipnomo], "malatentu", "kutima", $skripto);
    //   eoecho (" <em>ne uzu</em> |\n");
    tenukasxe($tipnomo, "unu_el");
    eoecho(" nur unu el la sekve krucitaj: <br/>\n");
    $valornomo = "sercxo_{$tabelo}__{$nomo}_elekto";
    $elektoj = $valoroj[$valornomo];
    if (!is_array($elektoj)) {
        $elektoj = array($elektoj);
    }
    $elekttekstoj = array();
    foreach ($elekteblecoj as $frazo => $alias) {
        $teksto = "<input type='checkbox' name='{$valornomo}[]' value='{$frazo}' ";
        if (in_array($frazo, $elektoj)) {
            $teksto .= "checked='checked' ";
        }
        $teksto .= "/> ";
        $teksto .= eotransform($alias);
        $elekttekstoj[] = $teksto;
    }
    echo join(" |\n", $elekttekstoj);
    echo "\n</span></td></tr>\n";
}
function eoecho($io)
{
    echo eotransform($io);
}
/**
 * kreas listeron (<li>) pri tiu paŝo por la paŝo-navigilo.
 *
 * @param array $pasxo_dato  array() kun informoj pri unu paŝo, kiel kreita
 *  de necesaj_kaj_eblaj_pasxoj.
 *    'id' => identifigilo
 *    'nomo' => nomo
 *    'ebla' => ĉu eblas atingi tiun paŝon nun
 *    'necesa' => ĉu necesas trairi tiun paŝon
 *    'aktuala' => ĉu tiu estas la aktuala paŝo
 *    'sekva'   => ĉu tiu estas la sekva paŝo
 *    'onta'    => ĉu tiu estas unu el la ontaj paŝoj
 */
function formatu_pasxon($pasxo_datoj)
{
    if (DEBUG) {
        echo "<!-- pasxo-datoj: " . var_export($pasxo_datoj, true) . "-->";
    }
    extract($pasxo_datoj);
    if ($ebla) {
        $ligoteksto = donu_ligon("akceptado-" . $id . ".php", $nomo);
    } else {
        $ligoteksto = eotransform($nomo);
    }
    if ($aktuala) {
        $stilo = 'aktuala';
    } else {
        if ($onta) {
            $stilo = 'onta';
        } else {
            $stilo = 'inta';
        }
    }
    if (!$necesa) {
        $ligoteksto = "(" . $ligoteksto . ")";
    }
    return "<li class='akceptado-pasxo-" . $stilo . "'>" . $ligoteksto . "</li>";
}