/* The contents of this file are subject to the Mozilla Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 *
 * The Original Code is the Bugzilla Bug Tracking System.
 *
 * Contributor(s):
 *   Guy Pyrzak <guy.pyrzak@gmail.com>
 *   Max Kanat-Alexander <mkanat@bugzilla.org>
 */

var mini_login_constants;

function show_mini_login_form(suffix)
{
    var login_link = document.getElementById('login_link' + suffix);
    var login_form = document.getElementById('mini_login' + suffix);
    var account_container = document.getElementById('new_account_container' + suffix);
    addClass(login_link, 'bz_default_hidden');
    removeClass(login_form, 'bz_default_hidden');
    addClass(account_container, 'bz_default_hidden');
    login_form._shown = true;
    return false;
}

function hide_mini_login_form(suffix)
{
    var login_link = document.getElementById('login_link' + suffix);
    var login_form = document.getElementById('mini_login' + suffix);
    var account_container = document.getElementById('new_account_container' + suffix);
    removeClass(login_link, 'bz_default_hidden');
    addClass(login_form, 'bz_default_hidden');
    removeClass(account_container, 'bz_default_hidden');
    return false;
}

function show_forgot_form(suffix)
{
    var forgot_link = document.getElementById('forgot_link' + suffix);
    var forgot_form = document.getElementById('forgot_form' + suffix);
    var login_container = document.getElementById('mini_login_container' + suffix);
    addClass(forgot_link, 'bz_default_hidden');
    removeClass(forgot_form, 'bz_default_hidden');
    addClass(login_container, 'bz_default_hidden');
    return false;
}

function hide_forgot_form(suffix)
{
    var forgot_link = document.getElementById('forgot_link' + suffix);
    var forgot_form = document.getElementById('forgot_form' + suffix);
    var login_container = document.getElementById('mini_login_container' + suffix);
    removeClass(forgot_link, 'bz_default_hidden');
    addClass(forgot_form, 'bz_default_hidden');
    removeClass(login_container, 'bz_default_hidden');
    return false;
}

function init_mini_login_form(suffix)
{
    var mini_login = document.getElementById('Bugzilla_login' +  suffix );
    var mini_password = document.getElementById('Bugzilla_password' +  suffix );
    var mini_dummy = document.getElementById(
        'Bugzilla_password_dummy' + suffix);
    // If the login and password are blank when the page loads, we display
    // "login" and "password" in the boxes by default.
    if (mini_login.value == "" && mini_password.value == "")
    {
        mini_login.value = mini_login_constants.login;
        addClass(mini_login, "bz_mini_login_help");
        addClass(mini_password, 'bz_default_hidden');
        removeClass(mini_dummy, 'bz_default_hidden');
    }
    else
        show_mini_login_form(suffix);
}

// Clear the words "login" and "password" from the form when you click
// in one of the boxes. We clear them both when you click in either box
// so that the browser's password-autocomplete can work.
function mini_login_on_focus(suffix)
{
    var mini_login = document.getElementById('Bugzilla_login' + suffix);
    var mini_password = document.getElementById('Bugzilla_password' + suffix);
    var mini_dummy = document.getElementById('Bugzilla_password_dummy' + suffix);

    removeClass(mini_login, "bz_mini_login_help");
    if (mini_login.value == mini_login_constants.login)
        mini_login.value = '';
    removeClass(mini_password, 'bz_default_hidden');
    addClass(mini_dummy, 'bz_default_hidden');
}

function check_mini_login_fields(suffix)
{
    var mini_login = document.getElementById('Bugzilla_login' + suffix);
    var mini_password = document.getElementById('Bugzilla_password' + suffix);
    if (mini_login.value != "" && mini_password.value != "" &&
        mini_login.value != mini_login_constants.login)
        return true;
    window.alert(mini_login_constants.warning);
    return false;
}

function set_language(value)
{
    setCookie('LANG', value, {
        expires: new Date('January 1, 2038'),
        path: BUGZILLA.param.cookie_path
    });
    window.location.reload();
}

// Convert user list from API format for SimpleAutocomplete
function convertUserList(u)
{
    var data = [];
    for (var i = 0; i < u.length; i++)
        data.push([
            '<span class="hintRealname">' + htmlspecialchars(u[i].real_name) +
            '</span><br /><span class="hintEmail">' + htmlspecialchars(u[i].email) + '</span>',
            u[i].email
        ]);
    return data;
}

// Data loader for user autocomplete
function userAutocomplete(hint, emptyOptions, loadAllOnEmpty)
{
    if (!hint.input.value && (!loadAllOnEmpty || emptyOptions))
    {
        hint.emptyText = 'Type at least 3 letters';
        if (emptyOptions)
            hint.replaceItems(convertUserList(emptyOptions));
        else
            hint.replaceItems(null);
        return;
    }

    var u = window.location.href.replace(/[^\/]+$/, '');
    u += 'xml.cgi?method=User.get&output=json&excludedisabled=1&include_fields=id&include_fields=real_name&include_fields=email&maxusermatches=';
    if (hint.input.value)
    {
        u += '20';
        var l = hint.input.value.split(/[\s,]*,[\s,]*/);
        for (var i = 0; i < l.length; i++)
            u += '&match='+encodeURIComponent(l[i]);
    }
    else
    {
        u += '500&match=*';
    }

    AjaxLoader(u, function(x)
    {
        var r = {};
        try { eval('r = '+x.responseText+';'); } catch (e) { return; }
        if (r.status == 'ok')
        {
            var data = convertUserList(r.users);
            // FIXME "3" constant, messages: remove hardcode, also in Bugzilla::User::match()
            if (data.length == 0 && hint.input.value.length < 3)
                hint.emptyText = 'Type at least 3 letters';
            else
                hint.emptyText = 'No users found';
            hint.replaceItems(data);
        }
    });
}

// Convert keyword list from API format for SimpleAutocomplete
function convertSimpleList(k)
{
    var data = [];
    for (var i = 0; i < k.length; i++)
        data.push([ '<span class="hintRealname">' + htmlspecialchars(k[i].name) + '</span>', k[i].name ]);
    return data;
}

// Data loader for field in buglist autocomplete
function fieldBuglistAutocomplete(hint, field, emptyOptions)
{
    var u = window.location.href.replace(/[^\/]+$/, '');
    u += 'xml.cgi?method=Field.get_values&output=json&field=' + field;
    AjaxLoader(u, function(x) {
        var r = {};
        try { eval('r = '+x.responseText+';'); } catch (e) { return; }
        if (r.status == 'ok')
        {
            var data = convertSimpleList(r.values);
            hint.replaceItems(data);
        }
    });
}

function showFullComment(oper_id)
{
    if (existElement("removed_" + oper_id))
    {
        document.getElementById("removed_" + oper_id).style.display = 'none';
        document.getElementById("text_removed_" + oper_id).style.display = '';
    }
    if (existElement("added_" + oper_id))
    {
        document.getElementById("added_" + oper_id).style.display = 'none';
        document.getElementById("text_added_" + oper_id).style.display = '';
    }
    document.getElementById("link_" + oper_id).style.display = 'none';
}

function readNewFunctionality()
{
    var u = 'xml.cgi?method=User.read_new_functionality&output=json';
    var el = document.getElementById('new_functionality');
    el.parentElement.removeChild(el);
    AjaxLoader(u, function() {});
    return false;
}
