// zobrazi tooltip zaznamu
function showToolTip(id)
{
    var tt = document.getElementById('tooltip');
    if (tt) {
        tt.innerHTML = eval('tooltip_' + id);
    }
}

// skryje tooltip zaznamu
function hideToolTip(id)
{
    var tt = document.getElementById('tooltip');
    if (tt) {
        tt.innerHTML = '';
    }
}

function ask(text)
{
    if (confirm(text)) {
        return true;
    } else {
        return false;
    }
}

function askDelete(ref)
{
    return ask('Opravdu chcete vymazat tento záznam?');
}

function definedkeys_only(e, keys)
{
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 37:
        case 38:
        case 39:
        case 40:
        case 46:
            return true;
            break;
    }

    var re = new RegExp(keys);

    return re.test(String.fromCharCode((e.which) ? e.which : e.keyCode));
}

function nums_only(e)
{
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 46:
        case 116:
            return true;
            break;
    }

    var k = (e.which) ? e.which : e.keyCode;
    var minus = (k == 45);

    if (minus) {
        // byl zmacknuty znak '-', pokud je na zacatku, povolim ho
        return true;
    }

    var r = !((k < 48 || k > 57) && (k < 35 || k > 40));

    return r;
}

function date_only(e) {
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 46:
            return true;
            break;
    }

    k = (e.which) ? e.which : e.keyCode;
    dot = (k == 46);

    var r = ((k < 48 || k > 57) && !dot && (k < 35 || k > 40));

    return !r;
}

function fillNowTime(e, time)
{
    if (time) {
        var t = new Date(1970,0,1,0,0,0,0);
        previous = $(e).siblings("input").attr('value');

        if (previous) {
            previous = previous.split(':');
            t.setTime(t.getTime() + (parseInt(previous[0]) * 3600 * 1000) + (parseInt(previous[1]) * 60 * 1000));
        } 

        t.setTime(t.getTime() + (parseInt(time) * 1000));
        
        hours = t.getHours() + (t.getDate() -1) * 24;
    } else {
        var t = new Date();
        hours = t.getHours();
    }
    
    minutes = t.getMinutes();
    minutes = (minutes < 10) ? '0' + minutes : minutes;
    
    $(e).siblings("input").attr('value', hours + ':' + minutes);

    return false;
}

function time_only(e) {
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 58:
            return true;
            break;
    }

    k = (e.which) ? e.which : e.keyCode;
    dot = (k == 58);

    var r = ((k < 48 || k > 57) && !dot && (k < 35 || k > 40));

    return !r;
}

function nums_dot(e, box) {
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 46:
            return true;
            break;
    }

    var k = (e.which) ? e.which : e.keyCode;
    var dot = (k == 46);

    if (dot && box && box.value && (-1 != box.value.indexOf('.'))) {
        dot = false;
    }

    var minus = (k == 45);

    if (minus) {
        // byl zmacknuty znak '-', pokud je na zacatku, povolim ho
        return true;
    }

    var r = ((k < 48 || k > 57) && !dot && (k < 35 || k > 40));

    return !r;
}

function hexanums_only(e) {
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 46:
            return true;
            break;
    }

    var re = new RegExp('[0-9a-fA-F]');

    return re.test(String.fromCharCode((e.which) ? e.which : e.keyCode));
}

function seokeys_only(e) {
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 46:
            return true;
            break;
    }

    var re = new RegExp('[0-9a-zA-Z_\-]');

    return re.test(String.fromCharCode((e.which) ? e.which : e.keyCode));
}

/// fce, ktera zobrazuje a schovava polozky menu
function menu_expand(elem) {

    // uchovam si element A pro pozdejsi pouziti
    var a = elem;

    // najdu rodicovsky DIV
    elem = elem.parentNode.parentNode;

    if (!elem) {
        return false;
    }

    // zmenim styl
    if (elem.className.indexOf("collapsed") >= 0) {
        elem.className= elem.className.replace(new RegExp(" collapsed\\b"), "");
    } else {
        elem.className += " collapsed";
    }

    // odtsranim focus z elementu A, aby to pak nevypadalo skarede :-)
    a.blur();

    return false;
}

/// funkce, ktera pro danou polozku menu rozbali podstrom
/// Obdoba fce changeState() jen pro jinou JS Tree knihovnu
function changeTreeMenuState(elem) {
    while (elem.tagName != "LI") {
        elem = elem.parentNode;
    }

    var tree = elem;

    while (tree.tagName != "UL") {
        var tree = tree.parentNode;
    }

    var node = $(elem);
    var sign = node.find('span.sign:last');

    if ($.browser.msie) {
        tree = $(tree);

        if ('node' == node.attr('class')) {
            // otevirame
            node.addClass('open');
            tree.find('li.node.open').next('li.separator').css('background','none');
            node.children('ul').show().css({
                'margin-bottom': '1px'
            });
        } else {
            // zavirame
            node.removeClass('open');
            node.children('ul').hide();
        }
    } else {
        $(elem).toggleClass('open');
    }

    sign.toggleClass('plus').toggleClass('minus');

    elem.blur();
    return false;
}

/// funkce, ktera pro danou polozku menu rozbali podstrom
/// ponechanu pro jistotu, jestli se to nekde nepouziva...
function changeState(elem) {

    while (elem.tagName != "LI") {
        elem = elem.parentNode;
    }

    if (elem.state == "collapsed") {
        tree.expand(elem);
    } else {
        tree.collapse(elem);
    }

    elem.blur();
    return false;
}

function initDisplay(element, disp) {
    var tmp = document.getElementById(element);

    if (tmp) {
        tmp.style.display = disp;
    }

    return false;
}

function toggleElement(element) {
    var tmp = document.getElementById(element);

    if (tmp) {
        tmp.style.display = (tmp.style.display == "none" || tmp.style.display == "") ? "block" : "none";
        return tmp.style.display;
    }

    return false;
}

/// fce, ktera zabezpecuje zobrazovani a schovavani detailu u polozek v RS:Intro
function intro_details(elem) {

    // uchovam si rodice radku (tbody)
    var tbody = elem.parentNode;

    // zjistim, zda se detail bude zobrazovat nebo skryvat
    if (elem.className.indexOf("row-source") >= 0) {
        var skryj = true;
    } else {
        var skryj = false;
    }

    // vsem bunkam skryju detail
    var trs = tbody.getElementsByTagName("TR");
    var td;

    for (var i = 0; i < trs.length; i++) {
        if ("row-info" == trs[i].className) {
            tds = trs[i].getElementsByTagName("TD");

            for (var j = 0; j < tds.length; j++) {
                tds[j].style.display = "none";
            }
        } else {
             trs[i].className = trs[i].className.replace(new RegExp("[ ]?row-source\\b"), "");
        }
    }

    // aktualnimu radku zmenim tridu, ktera ma vliv na barvu pozadi
    if (elem) {
        if (!skryj) {
            // pridam tridu elem.className
            elem.className += " row-source";
            skryj = false;
        }
    }

    // najdu nejblizsiho naslednika typu 1 - mel by to byt nasledujici radek
    elem = elem.nextSibling;

    while (elem && (1 != elem.nodeType)) {
        elem = elem.nextSibling;
    }

    // pro bunku nasledujiciho radku zmenim tridu, ktera ma vliv na display
    if (elem) {
        // naleznu prvni bunku
        elem = elem.getElementsByTagName("TD");

        for (var j = 0; j < elem.length; j++) {
            // zmenim styl pro tuto bunku
            if (!skryj) {
                try {
                    elem[j].style.display = "table-cell";
                } catch(e) {
                    elem[j].style.display = "block"; //IE bugfix
                }
            }
        }
    }
}

/// fce, ktera zabezpecuje zobrazovani a schovavani detailu u polozek v RS:Intro
/// (pri kliknuti na zobrazeny detail)
function intro_details_2(elem) {

    // najdu nejblizsiho predchudce typu 1 - mel by to byt predchazejici radek
    elem = elem.previousSibling;

    while (elem && (1 != elem.nodeType)) {
        elem = elem.previousSibling;
    }

    if (elem) {
        intro_details(elem);
    }
}

/// fce, ktera najde prvni predchazejici input a zmeni disabled
function change_disabled(elem) {

    // uchovam si element A pro pozdejsi pouziti
    var a = elem;

    // najdu nejblizsiho predchudce typu 1 - mel by to byt predchazejici radek
    elem = elem.previousSibling;

    // najdu predchozi label
    while (elem && (1 != elem.nodeType)) {
        elem = elem.previousSibling;
    }

    elem = elem.previousSibling;

    // najdu predchozi input
    while (elem && (1 != elem.nodeType)) {
        elem = elem.previousSibling;
    }

    if ("INPUT" != elem.tagName) {
        alert("Chyba - nenalezen element INPUT!");
        return;
    }

    if (a.checked) {
        elem.className = "disabled";
    } else {
        elem.className = elem.className.replace(new RegExp("disabled\\b"), "");
    }

    elem.disabled = a.checked;

}

function highlightCombo(checkbox_node)
{
    checkbox_node.blur();
    var label_node = checkbox_node.parentNode;

    // do className pridavam, nepremazavam ho
    if (checkbox_node.checked) {
        label_node.className = label_node.className + ' checked';
    } else {
        label_node.className = label_node.className.replace('checked', '');
    }
}

function highlightComboIcon(image_node)
{
    var label_node = image_node.parentNode;

    // do className pridavam, nepremazavam ho
    if (label_node.firstChild.checked ) {
        label_node.className          = label_node.className.replace('checked', '');
    } else {
        label_node.className          = label_node.className + ' checked';
    }

    // iba pre IE zmenim stav checkboxu
    var ie = /MSIE (5\.5|[6789])/.test(navigator.userAgent) && navigator.platform == 'Win32';
    if (ie) {
        label_node.firstChild.checked = !label_node.firstChild.checked;
    }
}

/// fce, ktera pri zmene pole pro upload souboru zjisti, zda predchazejici input (popis) je vyplneny
/// a pokud neni, tak si to vyzada pres promt()
function checkDescription(obj) {

    // zistim nazov suboru a dam ako default do promptu ak treba
    file = obj.value.split((obj.value.indexOf('/') != -1) ? '/' : '\\');
    file = file[file.length -1].split('.');
    file.pop();
    file = file.join('.');
    // najdu predchozi input s popisem
    elem = obj.previousSibling;

    while (elem && ((1 != elem.nodeType) || ('INPUT' != elem.tagName))) {
        elem = elem.previousSibling;
    }

    if (!elem) {
        return;
    }
    
    var f = function() {
        if ('' == elem.value || elem.value == 'null') {
            obj.value = '';
            elem.value = '';
            // popis je stale prazdny - formular neodesilam
            return false;
        }

        // popis je vyplneny - formular odeslu

        // najdu rodicovsky FORM
        elem = elem.parentNode;

        while (elem && ((1 != elem.nodeType) || ('FORM' != elem.tagName))) {
            elem = elem.parentNode;
        }

        // zmenime selectbox, abychom zustali na strance s editaci
        changeAfterSaveAction('stay');

        // odeslani formulare
        elem.submit();
    }

    if ('' == elem.value) {
        // popis je prazdny - vyzadam si ho
        //elem.value = prompt("Vložte popis souboru", file);
        jPrompt("Vložte popis souboru", file, "Dotaz", function(inp) {
            elem.value = inp;
            return f();
        });
        
        return false;
    }
    
    return f();
}

/// Pokud najde v daném elemetu element 'upravy_class', přesměruje prohlížec
/// na první nalezený odkaz v této sekci.
function dblClickAction(el, classname)
{
    if (el) {
        var odkazy = $(el).find('td.' + classname + ' a');

        for (var i = 0; i < odkazy.length; i++) {
            if (odkazy[i].href) {
                isLocked(odkazy[i].href);
                return;
            }
        }
    }
}

/// Kontrola před odeslaním formuláře se sliderem
/// @param form formulář, ve kterém slider je
/// @param inputName name paramert inputboxu, který se má kontrolovat
/// @param min minimální hodnota inputboxu
/// @param max maximální hodnota inputboxu
/// @param defaultValue nepovinný parametr, udává defaultní hodnotu, která se má nastavit, pokud hodnota inputboxu neleží v intervalu [min, max]
function sliderCheck(form, inputName, min, max, defaultValue)
{
    var inputs = form.getElementsByTagName('input');

    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].name == inputName) {
            if (!inputs[i].value || (inputs[i].value < min) || (inputs[i].value > max)) {
                alert('Číslo stránky neexistuje');

                if (defaultValue) {
                    inputs[i].value = defaultValue;
                }

                return false;
            }
        }
    }

    return true;
}

/// Prime presmerovnai na stranku cislo
function sliderRedirect(id_page, redirect_url)
{
    page_num = $('#'+id_page).val();
    window.location = redirect_url + page_num;
}

function saveState(property, value)
{
    $.get(NWBASE + "/savesetting/" + property + "/" + value,
        function(data)
        {
            return; // TODO: odstranit po oprave chyby
            if (data != '1') {
                alert('Nastavení se neuložilo');
            }
        }
    );
}

function redirectSave(target)
{
    // najdem fomular a vytvorime input
    form = document.forms[0];
    link = document.createElement("input");

    // nastavime parametry
    link.setAttribute("type", "hidden");
    link.setAttribute("name", "after_save_action");

    if (!target.href) {
        link.setAttribute("value", target.title);
    } else {
        link.setAttribute("value", target.href);
    };

    // pripojime
    form.appendChild(link);

    // posleme
    form.submit();

    return false;
}

function clickOutside()
{
    $("#header a, #page-footer a").bind("click", function(){
       return confirm("Opustíte-li tuto stránku, Vámi provedené změny budou ztraceny a editovaný záznam zůstane uzamčen pro ostatní uživatele, dokud jej opět neuvolníte.\nUložení změn provedete kliknutím na tlačítko 'Uložit'.\n\nChcete opravdu opustit stránku?");
    });
}

function changeAfterSaveAction(action)
{
    $("div.control-buttons select option[value='" + action + "']").attr('selected', 'selected');
}

function dualselect(obj)
{
    changeAfterSaveAction($(obj).attr('value'));
}

function isLocked(url, redirect)
{
    time = new Date();
    time = time.getTime();
    $.get(NWBASE + "/lock/" + url + '/' + time,
        function(data)
        {
            if (data != 'ok') {
                alert(data, 'error');
                return true;
            } else {
                if (!redirect) {
                    window.location = url;
                }
            }
        }
    );
}

function checkUpPassword(input)
{
    if (input && input.id) {
        var id = input.id.replace('_retype', '');
        var input2 = document.getElementById(id);

        if (input2) {
            if (!input2.value || (input2.value == '')) {
                alert('Nezadali jste heslo.');
            }

            if (input2.value != input.value) {
                alert('Zadaná hesla se neshodují.. ');
            }
        }
    }
}

function getReply(url, to_force)
{
    $.post(url, { force : to_force},
        function(data)
        {
            if ('ok' == data) {
                alert('Odpověď odeslána.');
            } else if ('sended' == data) {
                var send = confirm('Na tuto otázku již byla zaslána odpověď.\nChcete odpověď zaslat znovu?');

                if (send) {
                    getReply(url, 'true');
                }
            } else {
                alert(data, 'error');
            }
        }
    );

    return false;
}

function showHideOrder(select, order)
{
    order = document.getElementById(order);

    if (!order) {
        return;
    }

    order.disabled = (!select.value || ('' == select.value) || ('main' == select.value));
}

function makeInformation(obj, value)
{
    link = document.createElement("input");
    link.setAttribute("type",  "hidden");
    link.setAttribute("id",    obj.name);
    link.setAttribute("name",  obj.name);
    link.setAttribute("value", value);

    form = document.forms[0];
    form.appendChild(link);
    form.submit();

    return false;
}

function previewItem(obj)
{
    // zmenime target formu aby nam to poslalo do noveho okna
    form = document.forms[0];
    form.target = '_blank';

    if ($.browser['opera']) {
        // IF Opera
        window.location = NWBASE + '/back/no-skip';
        return makeInformation(obj, 'preview');
    } else {
        // ELSE
        makeInformation(obj, 'preview');
        window.location = NWBASE + '/back/no-skip';
    }

}

function increment(url, obj)
{
    $.blockUI('<h2>Prosím čekejte...</h2>');
    $.get(url, function(data) {
        $.unblockUI();
        if (data != '1') {
            alert('Operace selhala', 'error');
        } else {
            $(obj).siblings("span.pocet").text((parseInt($(obj).siblings("span.pocet").text()) + 1));
        }
    });
}

function multiedit()
{
    $("#box-multieditor, input.mass-edit").toggleClass('show');
    return false;
}

function optional(obj)
{
    $(obj).siblings().toggleClass('disabled').attr('disabled', obj.checked ? false : 'disabled');
}

function checkOptional()
{
    $("input:checkbox.optional").each(function(){optional(this)});
}

function colorPreview(color_id, preview_id)
{
    var preview = document.getElementById(preview_id);
    var color = document.getElementById(color_id);

    if (!preview || !color) {
        return;
    }

    preview.style.backgroundColor = color.value;
    
}

function catchEnter(DOMdestination, enterCallback)
{
    return $(DOMdestination).keypress(function (e) {
        if (e.keyCode == 13) {
            if (typeof enterCallback == "function") {
            enterCallback();
            return false;
        } else {
                alert("Invalid callback", 'error');
            }
        }
    });
}

function disableEnterKey(e)
{
    var key;

    if(window.event) {
        key = window.event.keyCode;     //IE
    } else {
        key = e.which;     //other
    }

    if(key == 13) {
        return false;
    } else {
        return true;
    }
}

function setFocus(DOMdestination)
{
    setTimeout(DOMdestination, 400);
}


function setGalleryName(link)
{
    var val = null;
    val = window.prompt('Zadejte jméno galerie.');
    link.href = link.href + '?newGalleryName=' + val;
    document.location(link.href);
    return true;
}

function htmlspecialchars(p_string) {
    p_string = p_string.replace(/&/g, '&amp;');
    p_string = p_string.replace(/</g, '&lt;');
    p_string = p_string.replace(/>/g, '&gt;');
    p_string = p_string.replace(/"/g, '&quot;');
    p_string = p_string.replace(/'/g, '&#039;');
    return p_string;
};


function nw_multitag_remove(id)
{
    var elem = $('#' + id).remove();
    return false;
}

function nw_multitag_add(n_id, tbl_main, counter)
{
    var value = $('#' + n_id + '-field-id').val();
    
    if (value == '') {
        return;
    }

    var html = "<div>" + value + "</div>";

    id = 'tag-' + tbl_main + '-n-' + counter;
    
    html = "" +
        "<div class='tag-item tag-item-ins' id='" + id +"'>"+
            "<span class='tag'>" + htmlspecialchars(value) + "</span>"+
            "<input type='hidden' name='i_" + id +"-field' value='" + htmlspecialchars(value) + "' />"+
            " <a href='#' class='fakebutton' onclick='return nw_multitag_remove(\"" + id +"\");'>x</a>"+
        "</div> ";

    $('#' + n_id).before(html);
    
    $('#' + n_id + '-field-id').val('');
    return false;
}

