function getVal(key)
{
    var elem;
    elem = document.getElementById(key);

    if (elem.value) {
        return elem.value;
    } else {
        return '';
    }
}

function setVal(key, value)
{
    var elem;
    elem = document.getElementById(key);

    if (elem) {
        elem.value = value;
    }
}

function copyAddress()
{
    var value;

    value = getVal('i_title');
    setVal('i_c_name', value);
    setVal('i_company', value);

    value = getVal('i_street');
    setVal('i_c_street', value);

    value = getVal('i_city');
    setVal('i_c_city', value);

    value = getVal('i_zipcode');
    setVal('i_c_zipcode', value);

    value = getVal('i_country');
    setVal('i_c_country', value);
    
    value = getVal('i_house_number');
    setVal('i_c_house_number', value);

    value = getVal('i_phone');
    setVal('i_c_phone', value);

    value = getVal('i_fax');
    setVal('i_c_fax', value);

    value = getVal('i_email');
    setVal('i_c_email', value);

    return false;
}

function updateDic()
{
    var value = getVal('i_ic');
    value = 'CZ' + value;

    if ('CZ' == value) {
        value = '';
    }

    setVal('i_dic', value);
}

function alertMess(mess)
{
    var prompted = false;

    try {
        if ($.prompt) {
            $.prompt(mess.replace(/\n/g, "<br />\n"), { opacity: 0.8 });
            prompted = true;
        }
    } catch(err) {
    }

    if (!prompted) {
        alert(mess);
    }
}

function toggleElement(id)
{
    $('#' + id).toggle();
}

function getCheckboxMainLabelClass(classname)
{
    if (!classname) {
        return false;
    }

    var tmp = classname.split(' ');
    var re = new RegExp("^main\-label\-(.+)$");
    var ret;

    for (var i = 0; i < tmp.length; i++) {
        var tested = re.exec(tmp[i]);

        if (tested) {
            return tested[1];
        }
    }

    return false;
}

function getRegRadioLabel(elemClass)
{
    return (elemClass) ? adaptLabel($('label.radio-main-label.' + elemClass)) : '';
}

function checkReg(form)
{
    var error = checkForm(form, true);

    // pokusim se zkontrolovat, jestli (ne)exituje dotaznik a prip. jestli je vyplneny
    var dotaznik = '#' + form.id + ' #qustionar';

    if ($(dotaznik).length) {
        // zpracuju checkboxy
        var inputs = $(dotaznik + ' input:checkbox');

        if (inputs.length) {
            var checks = new Array();

            for (var i = 0; i < inputs.length; i++) {
                if (!inputs[i].className) {
                    continue;
                }

                var elemId = getCheckboxMainLabelClass(inputs[i].className);

                if (!elemId) {
                    continue;
                }

                checks[elemId] = getLabelFor(elemId);
            }

            for (var i = 0; i < inputs.length; i++) {
                if (inputs[i].checked) {
                    if (!inputs[i].className) {
                        continue;
                    }

                    var elemId = getCheckboxMainLabelClass(inputs[i].className);

                    if (!elemId) {
                        continue;
                    }

                    checks[elemId] = false;
                }
            }

            for (var i in checks) {
                if (checks[i]) {
                    error += getTrans('answer-check').replace('%s', checks[i]) + "\n";
                }
            }
        }

        // zpracuju radionbuttony
        var inputs = $(dotaznik + ' input:radio');

        if (inputs.length) {
            var radios = new Array();

            for (var i = 0; i < inputs.length; i++) {
                radios[inputs[i].name] = getRegRadioLabel(inputs[i].name);
            }

            for (var i = 0; i < inputs.length; i++) {
                if (inputs[i].checked) {
                    radios[inputs[i].name] = false;
                }
            }

            for (var i in radios) {
                if (radios[i]) {
                    error += getTrans('answer').replace('%s', radios[i]) + "\n";
                }
            }
        }

        // zpracuju textarea a textova pole
        var inputs = $(dotaznik + ' input:text, ' + dotaznik + ' textarea');

        if (inputs.length) {
            for (var i = 0; i < inputs.length; i++) {
                if ($(inputs[i]).val()) {
                    continue;
                }

                var label = getLabelFor(inputs[i].name);

                if (label) {
                    error += getTrans('answer').replace('%s', label) + "\n";
                }
            }
        }
    }

    // delky cisel
    var inputs = $('#' + form.id + ' .nums-length-restricted');

    if (inputs.length) {
        for (var i = 0; i < inputs.length; i++) {
            if (!$(inputs[i]).val()) {
                continue;
            }

            var label = getLabelFor(inputs[i].id);

            if (label) {
                var len = inputs[i].value.length;

                if (len < 8) {
                    error += getTrans('num-field-invalid').replace('%s', label) + "\n";
                }
            }
        }
    }

    // delky textovych poli
    var inputs = $('#' + form.id + ' .texts-length-restricted');

    if (inputs.length) {
        var re = new RegExp("[0-9]");

        for (var i = 0; i < inputs.length; i++) {
            if (!$(inputs[i]).val()) {
                continue;
            }

            var label = getLabelFor(inputs[i].name);

            if (label) {
                var len = inputs[i].value.length;

                if ((len < 2) || re.test(inputs[i].value)) {
                    error += getTrans('name-field-invalid').replace('%s', label) + "\n";
                }
            }
        }
    }

    if (error) {
        alertMess(error);

        return false;
    }

    $('#' + form.id + ' :disabled').removeAttr('disabled');

    return true;
}

function checkPromo(link, prom, fair_id)
{
    if (!prom || !link || !fair_id) {
        alertMess(getTrans('promo-crashed'));
        return false;
    }

    prom = $('#' + prom);

    if (!prom || !prom.length || !prom.val()) {
        alertMess(getTrans('promo-failed'));
        return false;
    }

    $.post(link, { fair: fair_id, code: prom.val() },
        function(data)
        {
            if (!data) {
                alertMess(getTrans('promo-crashed'));
                return;
            }

            switch (data) {
                case 'ok':
                    alertMess(getTrans('promo-ok'));
                    break;

                case 'other-fair':
                    alertMess(getTrans('promo-other-fair'));
                    break;

                case 'code-used':
                    alertMess(getTrans('promo-used'));
                    break;

                case 'failed':
                default:
                    alertMess(getTrans('promo-failed'));
                    break;
            }
        }
    );
}

function resetField(reset_field)
{
    if (!reset_field) {
        return false;
    }

    reset_field = reset_field.split('::');

    for (var i = 0; i < reset_field.length; i++) {
        var item = $('#' + reset_field[i]);

        if (!item || !item.length) {
            continue;
        }

        if ('SELECT' == item[0].tagName) {
            resetSelect(item.attr('id'), '- vyberte -');
        } else {
            item.val('');
        }
    }
}

function simple_eval(code)
{
    if (!code) {
        /// TODO: ...
        //alertMess(getTrans('promo-crashed'));
        return false;
    }

    eval(code);

    return true
}

function sendUirReq(item, sel_id, url, req, reset, callback)
{
    if (!item /*|| !item.value*/ || !sel_id || !url || !req) {
        return false;
    }


    var link = url + '/' + req;
    var sel = $('#' + sel_id);

    if (!sel || !sel.length) {
        return false;
    }

    resetField(reset);

    if (!callback) {
        callback = simple_eval;
    }

    $.get(link, { select_id: sel_id, superior_id: item.value }, callback);

    return true;
}

function resetSelect(id, item)
{
    if (!id) {
        return;
    }

    var el = document.getElementById(id);

    if (!el) {
        return;
    }

    el.options.length = 0;

    if (item) {
        el.options[0] = new Option(item, '');
    }

    $(el).attr('disabled', 'disabled');
}

function showUirAdr(item, kraj_param, title, baseuri, uir_adr, param)
{
    if (!item.value) {
        //resetField(reset);
        return;
    }

    var uri = baseuri + '&' + param + '=' + $('#' + uir_adr).val()
    uri += '&' + kraj_param + '=' + item.value;
    uri += '&height=470&width=620'; // vyska thickboxu
    tb_show(title, uri);
}

// v zavislosti na zvolenem statu zakazu nebo povolim volbu UIR-ADR
function toggleUirAdr(country, onfocus, locality, street, h_num, zipcode, city)
{
    if (country.value && (228 == country.value)) {
        allowUirAdr(onfocus, locality, street, h_num, zipcode, city);
    } else {
        disallowUirAdr(locality, street, h_num, zipcode, city);
    }
}

//skryje kraj
function hideLocality(locality) 
{
    // skryti kraje
    $("#"+locality).parent().parent().hide();
    // odebrani nutnosti vyplnit kraj
    $("#" + locality).removeClass('required');
}

function showLocality(locality)
{
    // zobrazeni kraje
    $("#"+locality).parent().parent().show();
    // zapnuti nutnosti vyplnit kraj
    $("#" + locality).addClass('required');
}

// povoleni UIR-ADR
function allowUirAdr(onfocus, locality, street, h_num, zipcode, city)
{
    // zobrazeni kraje
    showLocality(locality);

    // nastaveni readonly
    $("#" + street + ', #' + h_num + ', #' + zipcode + ', #' + city).attr('readonly', 'readonly');

    // nastaveni onfocus
    // TODO: onfocus pro IE
    $("#" + street + ', #' + h_num + ', #' + zipcode + ', #' + city).attr('onfocus', onfocus);
}

// zakazani UIR-ADR
function disallowUirAdr(locality, street, h_num, zipcode, city)
{
    // skryti kraje
    hideLocality(locality);

    // odebrani readonly
    $("#" + street + ', #' + h_num + ', #' + zipcode + ', #' + city).attr('readonly', '');

    // odebrani onfocus
    $("#" + street + ', #' + h_num + ', #' + zipcode + ', #' + city).attr('onfocus', '');
}

