function is_error_field(fld)
{
    var id;
    if (typeof fld == 'string') {
        id = fld
    } else {
        id = fld.id
    }
    return id && id.indexOf('f_') == 0;
}

/* Очищает ошибки формы */
function clear_error(obj_form)
{
    var i, tr, fld;
    for (i = 0; i < obj_form.elements.length; i++) {
        fld = obj_form.elements[i];
        if (is_error_field(fld)) {
            tr = search_parent_node(obj_form.elements[i], 'TR');
            remove_all_child(tr.cells[2]);
            tr.cells[0].className = '';
            tr.cells[2].className = '';
        }
    }
    var div = document.getElementById('message_container');
    if (div) {
        div.style.display = 'none';
    }
    clear_top_error(obj_form);
}

/* Добавляет ошибки в форму */
function append_error(id, msg)
{
    var td, text, tr = search_parent_node(id, 'TR');
    tr.cells[0].className = 'error';
    tr.cells[2].className = 'error label';
    td = tr.cells[2];
    text = td.innerText != undefined ? td.innerText : td.textContent;
    if (text.match(/^\s+$/)) {
        td.innerHTML = '';
    }
    td.innerHTML += '<i></i>' + msg + '<br>';
}


function append_top_error(msg)
{
    var div = document.getElementById('error_container');
    if (!div) {
        return;
    }
    var table = div.getElementsByTagName('table')[0];
    var td = table.getElementsByTagName('td')[0];
    div.style.display = '';
    td.innerHTML += msg + "<br>\n";
}

function clear_top_error(obj_form)
{
    var div = document.getElementById('error_container');
    if (!div) {
        return;
    }
    div.style.display = 'none';
    var td = div.getElementsByTagName('td')[0];
    td.innerHTML = '';
}

function clear_error_field_top(obj_form)
{
    var i, tr, topTr, fld, table;
    for (i = 0; i < obj_form.elements.length; i++) {
        fld = obj_form.elements[i];
        if (is_error_field(fld)) {
            tr = search_parent_node(obj_form.elements[i], 'TR');
            table = search_parent_node(tr, 'table');
            topTr = table.rows[tr.rowIndex -1];
            if (topTr.cells[1].className.indexOf('error') != -1) {
                tr.cells[0].className = '';
                remove_all_child(topTr.cells[1]);
                topTr.style.display = 'none';
                if (isOpera) { // opera redraw fix
                    table.style.display = 'none';
                    table.style.display = '';
                }
            }
        }
    }
    var div = document.getElementById('message_container');
    if (div) {
        div.style.display = 'none';
    }
    clear_top_error(obj_form);
}

function append_error_field_top(id, msg)
{
    var td, text, tr = search_parent_node(id, 'TR');
    var table = search_parent_node(tr, 'table');
    td = tr.cells[0].className = 'error';
    tr = table.rows[tr.rowIndex -1];
    tr.style.display = '';

    td = tr.cells[1];
    text = td.innerText != undefined ? td.innerText : td.textContent;
    if (text.match(/^\s+$/)) {
        td.innerHTML = '';
    }
    td.innerHTML += '<i></i>' + msg + '<br>';
}

function handle_empty_form_fields(items, append)
{
    var i, isError = false, focusItem = null, item;
    for (i = 0; i < items.length; i++) {
        item = document.getElementById(items[i]);
        if (item.value == '') {
            append(items[i], 'Необходимо заполнить');
            if (!isError && focusItem == null) {
                focusItem = item;
            }
            isError = true;
        }
    }
    if (isError) {
        if (focusItem) {
            focusItem.focus();
        }
        return false;
    }
    return true;
}