function G(id)
{
    return document.getElementById(id);
}

function toggle_advanced_fields(){
    var advanced_edit_doc = document.getElementById("advanced_edit_doc");

    if (document.getElementById("advanced_fields_link").innerHTML == "Article fields") {
	document.getElementById("advanced_fields_link").innerHTML = "Hide fields";
	advanced_edit_doc.style.display = "block";
    }
    else {
	document.getElementById("advanced_fields_link").innerHTML = "Article fields";
	advanced_edit_doc.style.display = "none";
    }

    return;
}

function toggle_item(item_id, display_save, display_edit)
{
    var save_elements = document.getElementsByName('save_' + item_id);
    var edit_elements = document.getElementsByName('edit_' + item_id);
    for(var i = 0; i < save_elements.length; i++)
        save_elements[i].style.display = display_save;
    for(var i = 0; i < edit_elements.length; i++)
        edit_elements[i].style.display = display_edit;
    var containers = document.getElementsByName('item_container_' + item_id);
    for(var i = 0; i < containers.length; i++)
    {
        var p = containers[i].parentNode
        while(p && p.className.indexOf('notsaved') == -1)
            p = p.parentNode
        if(p)
            p.className = p.className.replace('notsaved', 'saved');
    }
}

function save_item(save_url, item_id)
{
    loadJSONDoc(save_url);
    toggle_item(item_id, 'none', 'inline')
}

function get_width(text)
{
    var span = document.createElement('span');
    span.style.whiteSpace = 'nowrap';
    span.innerHTML = text;
    document.body.appendChild(span);
    var width = span.offsetWidth;
    document.body.removeChild(span);
    return width;
}

function chop(text, width)
{
    if(get_width(text) <= width)
        return text;
    tokens = text.split(' ');
    var L = 0, R = tokens.length, M, s, s_width;
    while(true)
    {
        M = Math.floor((R - L) / 2);
        s = tokens.slice(0, L + M).join(' ') + '\u2026';
        s_width = get_width(s);
        if(s_width == width)
            return s;
        if(s_width < width)
        {
            L = L + M;
            if(M == 0)
                if(R > 1)
                    return s;
                else
                    break;
        }
        else
        {
            R = L + M;
            if(M == 0)
                if(R > 1)
                    return tokens.slice(0, L - 1).join(' ') + '\u2026';
                else
                    break;
        }
    }
    L = 0;
    R = text.length;
    s = ''
    while(R - L > 1)
    {
        M = Math.floor((R - L) / 2);
        s = text.slice(0, L + M) + '\u2026';
        s_width = get_width(s);
        if(s_width == width)
            return s;
        if(s_width < width)
            L = L + M;
        else
            R = L + M;
    }
    return s;
}

