/* ************************************************************************* *\
    
    Soubor: cookies.js
    
    Popis:
        Funkce pro práci s cookies. Používá též funkce z knihovny jsutils.js.
        
    Implementované funkce:
        jsouKukiny()                                    [detekuje podporu]
        vratKukiny(pary)                                [vrátí všechny cookies]
        smazKukinu(jmeno)                               [odstraní cookie]
        vratKukinu(jmeno)                               [vrátí hodnotu]
        nastavKukinu(jmeno, hod, exp, dom, path, sec)   [nastaví hodnotu]
        casPlusDny(dni)                                 [vrátí posunutý čas]
        
    Závislost:
        basic.js
        
\* ************************************************************************* */


/*  function jsouKukiny()

    Detekuje podporu a povolení cookies prohlížečem.
*/

/*const*/ var kukinyPovoleny;

function jsouKukiny() {
    // abychom nepouštěli funkci pořád znovu, provedeme výpočet jen jednou
    if (typeof(kukinyPovoleny) == 'undefined') {
        // test na podporu cookies
        kukinyPovoleny = jePodpora(navigator.cookieEnabled) && navigator.cookieEnabled;
        
        // pokud test neprošel, zkusíme (kvůli starým prohlížečům) test-and-try
        if (!kukinyPovoleny) {
            // a zkusíme, zda se povede cookie vytvořit
            document.cookie = 'TestovaciKukina';
            kukinyPovoleny = Boolean(document.cookie.indexOf('TestovaciKukina') != -1);
            // a pokud jsou povoleny, tak smažeme tu testovací
            if (kukinyPovoleny) smazKukinu('TestovaciKukina');
        } // if
    } // if
    
    return kukinyPovoleny;
} // function


/*  function vratKukinu(jmeno)

    Vrátí cookie se zadaným jménem.
*/

function vratKukinu(jmeno) {
    // výsledek přednastavíme na neúspěch
    var vysledek = null;
    
    if (jsouKukiny()) {
        // nastavíme si jméno o rovnítko
        jmeno = jmeno + '=';
        // vezmeme si do cache cookies a najdeme, kde se ta naše vyskytuje
        var kukiny = document.cookie;
        var index = kukiny.indexOf(jmeno);
        
        if (index != -1) {
            // nalezena - takže si vykrojíme její hodnotu
            index = index + jmeno.length;
            var end = kukiny.indexOf(';', index);
            if (end == -1) vysledek = kukiny.substring(index);
            else vysledek = kukiny.substring(index, end);
            // a výsledek odescapujeme (my ho escapujeme!)
            vysledek = unescape(vysledek);
        } // if
    } // if
    
    return vysledek;
} // function


/*  function smazKukinu(jmeno)

    Smaže cookie - nastaví jak její hodnotu na prázdny řetězec, tak také její
    expiraci na minulost.
*/

function smazKukinu(jmeno) {
    var hod = vratKukinu(jmeno);
    
    if (hod != null) {
        var expirace = new Date();
        // posuneme datum do minulosti
        expirace.setTime(expirace.getTime() - 1);
        // a nastavíme cookie znovu - zde je trochu potíž s datem
        return nastavKukinu(jmeno, '', expirace.toUTCString());
    } // if

    return false;
} // function


/*  function vratKukiny(pary)

    Vrátí buď pole objektů typu ParRetezcu ("páry" jsou true), které obsahují 
    dvojice jméno-hodnota jednotlivých cookies nebo asociativní pole 
    s hodnotami.
*/

function vratKukiny(pary) {
    var vysledek = null;
    
    if (jsouKukiny()) {
        // vytvorime si výsledne pole
        vysledek = new Array();
        
        // a rozdělíme cookies na jednotlivé páry
        var kukiny = document.cookie.split('; ');
                
        if (Boolean(pary)) {
            // získané řetězce se projdou a rozdělí do ParRetezcu
            for (var i = 0; i < kukiny.length; i++) {
                // vytvoří se příslušný pár
                var par = new ParRetezcu(kukiny[i]);
                // a zruší escapování!
                par.odescapuj();
                
                vysledek.push(par);
            } // for
        } // if
        else {
            for (var i = 0; i < kukiny.length; i++) {
                var kukina = kukiny[i];
                // zjistíme pozici rozdělovače
                var index = kukina.indexOf('=');
                // a vyrobíme asociativní položku v poli
                if (index != -1) vysledek[kukina.substring(0, index)] = kukina.substr(index + 1);
                else vysledek[i] = '';
            } // for
        } // else
    } // if
    
    return vysledek;
} // function


/*  nastavKukinu(jmeno, hod, exp, dom, path, sec)

    Nastaví cookie podle zadaných parametrů.
*/

function nastavKukinu(jmeno, hod, exp, dom, path, sec) {
    if (jsouKukiny()) {
        var argc = nastavKukinu.arguments.length;
        var kukina = jmeno + '=' + escape(hod);

        if (argc > 2) kukina = kukina + '; expires=' + exp.toUTCString();
        if (argc > 3) kukina = kukina + '; domain=' + dom;
        if (argc > 4) kukina = kukina + '; path=' + path;
        if ((argc > 5) && sec) kukina = kukina + '; secure';

        document.cookie = kukina;
        return true;
    } // if
    
    return false;
} // function


/*  function casPlusDny(dni)

    Vrátí aktuální datum posunuté o zadaný počet dní.
*/

function casPlusDny(dni) {
    var vysledek = new Date();
    // posuneme čas o zadaný počet milisekund
    vysledek.setTime(vysledek.getTime() + dni * 24 * 60 * 60 * 1000);
    // a výsledek vrátíme
    return vysledek;
} // function
