/*** Код для чата **
 *
 * @require prototype.js
 * @require ajax_packet.js
 */
window.speed = 1;

var LoadupJSChat = {

    flash_ready: false,
    js_ready: false,
    connect_error: false,
    error_message: false,

    jsReady: function ()
    {
        this.js_ready = true;
        this.allReady();
    },

    sendChatReady: function ()
    {
        this.flash_ready = true;
        this.allReady();
    },

    allReady: function()
    {
        if (this.js_ready && this.flash_ready)
        {
            $('chat_msg_form_onstatus').hide();
            if(!chat_short)
                $('chat_msg_form_place').show();
            else
            {
                $('chat_messages').show();
                $('chat_messages_inside').show();

            }
            bindChatCtrlEnter();
        }
    },

    sendChatConnect: function ()
    {
        $('chat_msg_form_onstatus').update('Connect ...');
        $('chat_msg_form_onstatus').show();
        $('chat_msg_form_place').hide();
    },

    sendChatConnectError: function ()
    {
        this.connect_error = true;
        $('chat_msg_form_onstatus').update('Disconnect ...');
        $('chat_msg_form_onstatus').show();
        $('chat_msg_form_place').hide();
    },

    drawChatErrorMessage: function (error)
    {
        this.error_message = error;
        var warn = $('SpammerWarning');

        if (error.code == 203)
        {
            $('chat_msg_form_onstatus').update(error.message);
            $('chat_msg_form_onstatus').show();
            $('chat_msg_form_place').hide();
        }
        else if (error.code == 202 || error.code == 204 || error.code == 205)
        {
            warn.update(error.message);
            warn.show();
            spammer_warning_shown = true;
        }
        else if (error.code == 201)
            alert(str_chat_message_empty);
    },

    drawChatMessage: function (mess)
    {
        for (id in mess)
            update_messages({'lines' : {id : mess[id]}});
    },

    checkStatus: function()
    {
        if (this.error_message)
            this.drawChatErrorMessage(this.error_message);
        else if (this.connect_error)
            this.sendChatConnectError();
        else if (this.js_ready && this.flash_ready)
            this.sendChatReady();
    }
}

function onChatLeave(){
        new Ajax.Request('/chat/logout', {
            method: 'get'
            });
}

function logout(){

}

function chatFocus()
{
    if ($('chat_text') && $('chat_text').visible())
    {
        var ex;
        try {
            $('chat_text').focus();
        }
        catch (ex)
        {
            ;
        }
    }
}

function update_messages(data)
{
    var need_scroll = false;

    var scroll_pos = $('chat_messages').scrollTop + $('chat_messages').getStyle('height').substring(0, $('chat_messages').getStyle('height').length - 2)*1;
    if (document.all && !window.opera)
    {
        scroll_pos -= $('chat_messages').getStyle('padding-top') ? $('chat_messages').getStyle('padding-top').substring(0, $('chat_messages').getStyle('padding-top').length - 2)*1 : 0;
        scroll_pos -= $('chat_messages').getStyle('padding-bottom') ? $('chat_messages').getStyle('padding-bottom').substring(0, $('chat_messages').getStyle('padding-bottom').length - 2)*1 : 0;
        scroll_pos -= $('chat_messages').getStyle('border-top-width') ? $('chat_messages').getStyle('border-top-width').substring(0, $('chat_messages').getStyle('border-top-width').length - 2)*1 : 0;
        scroll_pos -= $('chat_messages').getStyle('border-bottom-width') ? $('chat_messages').getStyle('border-bottom-width').substring(0, $('chat_messages').getStyle('border-bottom-width').length - 2)*1 : 0;
    }
    if (scroll_pos >= $('chat_messages_inside').offsetHeight ) need_scroll = true;
    for (i in data.lines)
    {
        var text = '<div class="ChatLine"><span class="ChatLineNick">';
        // крестик для бана
        if ((window.broadcast_owner || window.broadcast_moderator) && data.lines[i].login && login && data.lines[i].login != login && !data.lines[i].guest)
            text += '<a href="#" onclick="ignoreUser(\'' + data.lines[i].login + '\', ' + (window.broadcast_moderator ? '1' : '0') +', this); return false;"><img src="' + image_path + '/ignore.gif" alt="X" title=""></a> ';

        if (data.lines[i].guest)
            text += htmlspecialchars(data.lines[i].nick) + '</span>: ' + data.lines[i].text + '</div>';
        else
        {
            text += '<a target="_blank" class="Nick" href="/user/' + data.lines[i].login + '/"';
            if (data.lines[i].owner)
                text += ' style="font-weight: bold;"';
            text += '>' + htmlspecialchars(data.lines[i].nick) + '</a></span>: <span class="TextRow">' + data.lines[i].text + '</span></div>';
        }

        new Insertion.Bottom('chat_messages_inside', text);
    }

    if (data.update_onliners)
        update_onliners(data.update_onliners);

    if (need_scroll)
        scroll_bottom();
}

function update_onliners(data)
{
    $('broadcast_onliners').update(data.html);
    filterOnliners('broadcast_onliners', $('onliners_filter').value);
}

function scroll_bottom()
{
    $('chat_messages').scrollTop = ($('chat_messages').scrollHeight-$('chat_messages').clientHeight);
}

/* грязный хак */

var spammer_warning_shown = false

/**
 * Отправка сообщения
 */
function send_message()
{
    var warn = $('SpammerWarning');
    if (warn.visible() && spammer_warning_shown)
    {
        spammer_warning_shown = false;
        warn.hide();
    }
    var mess = $('chat_text').value.trim();
    if (mess == "")
    {
        alert(str_chat_message_empty);
        return false;
    }
    broadcast_control.sendChatMess(mess);
    $('chat_text').value = '';
    return false;
}

/**
 * Посылаем сообщение по Ctrl+Enter
 */
function sendCtrlEnter(e) {
    if (e)
    {
        var ctrl=e.ctrlKey;
        var k=e.which;
    }
    else
    {
        var k=event.keyCode;
        var ctrl=event.ctrlKey;
    }

    if ((k == 13 && ctrl) || k == 10)
        send_message();
}

function registerChatRequest()
{
    bindChatCtrlEnter();

    initChat();
}

function bindChatCtrlEnter()
{
    if ($('chat_text'))
        $('chat_text').onkeypress = sendCtrlEnter;
}

function loadChat(id, pwd)
{
    if (window.chat_hidden)
    {
        new Ajax.Request('/chat/ajax/check/pass/', {parameters: {id: id, password: pwd}, evalScripts: true});
        return;
    }
    new Ajax.Updater('chat_block', "/chat/ajax/main/", {parameters: {id: id, password: pwd}, evalScripts: true});
}

function initChat()
{
    scroll_bottom();
}

function hideChat()
{
    $('chat_block').hide();
    ajax_packet.unregisterAjaxRequest('chat_mess');
    if (window.chat_hidden === false)
        window.chat_hidden = true;
}

function showChat()
{
    $('chat_block').show();
    LoadupJSChat.checkStatus();
    registerChatRequest();
    window.chat_hidden = false;
}

function setChatWritePossible(comments_msg, id)
{
    if (comments_msg === true && !$('chat_text'))
        new Ajax.Request("/chat/ajax/msgform/", {parameters: {id: id}, evalScripts: true, onSuccess: function(t){$('chat_msg_form_place').update(t.responseText); bindChatCtrlEnter();}});
    else if (comments_msg !== true && comments_msg)
        $('chat_msg_form_place').update(comments_msg);
}

function clear_chat()
{
    $('chat_messages_inside').innerHTML = '';
}

window.onload = chatFocus;

if ($('chat_messages'))
    registerChatRequest();
