var sml_img = { };

Element.prototype.remove = function() {
    this.parentElement.removeChild(this);
}
NodeList.prototype.remove = HTMLCollection.prototype.remove = function() {
    for(var i = 0, len = this.length; i < len; i++) {
        if(this[i] && this[i].parentElement) {
            this[i].parentElement.removeChild(this[i]);
        }
    }
}

var chat = {
    key:'',
    room:'',
    count:0,
    time:0,
    t:null, //timer
    t2:null, //timer 2
    t_all:{}, //time molch
    r:0,
    g:0,
    rtime:37,
    ct:{ '-1':0, '1':15, '2':30, '3':60, '4':300},
    saveData:null,
    msg_id:0,
    nrg:0,
    nozpros:0,
    newmsg:0,
    sound:0,
    translit:0,
    filter:0,
    globalMsg:0,
    ignoreList:{x:0,nms:[]},
    citySys:0,
    inObj:null,
    efftxt:function(id,txt) {
        var r = txt;
        /*if( id == 'fire' ) {
            r = '<svg viewBox="0 0 600 300"><pattern id="p-fire" viewBox="10 100 186 200" patternUnits="userSpaceOnUse" width="216" height="200" x="-70" y="35"><image xlink:href="img/fire.gif" width="256" height="300"/></pattern><text text-anchor="middle" x="50%" y="50%" dy=".35em" class="text">';
            r += txt;
            r += '</text></svg>';
        }*/
        return r;
    },
    ignore:function(login)
    {
        if(this.ignoreList[login]!=undefined)
        {
            if($('#ignr_alu').attr('id')!=undefined)
            {
                $('#ignr_u_'+this.ignoreList[login]).remove();
            }
            delete this.ignoreList.nms[this.ignoreList[login]];
            delete this.ignoreList[login];
            //msg

        }else{
            this.ignoreList.x++;
            this.ignoreList[login] = this.ignoreList.x;
            this.ignoreList.nms[this.ignoreList.x] = login;
            if($('#ignr_alu').attr('id')!=undefined)
            {
                $('#ignr_alu').html($('#ignr_alu').html()+'<div id="ignr_u_'+this.ignoreList.x+'">    <b>'+login+'</b> <a target="_blank" href="https://new-combats.com/info/'+login+'"><img src="https://'+top.c.img+'/i/inf_capitalcity.gif" onMouseOver="top.hi(this,\'<b>Инф. о '+login+'</b>\',event,5,-2,2,2,\'\');" onMouseOut="top.hic();" onMouseDown="top.hic();"></a>   <small><a href="javascript:void(0)" onclick="chat.ignorUn('+this.ignoreList.x+')">Clear</a></small>  </div>');
            }
            //msg

        }
    },
    getRandom:function(a, b){

        return a + ( (b-a) * Math.random() );

    },
    feerverk_id:0,
    feerverk:function(name) {
        if( name == 'fw04' ) {
            var frc = {
                'name':'fw04',
                'x':19,
                'top':this.getRandom(1,35),
                'left':this.getRandom(0,365),
                'width':135,
                'sound':this.getRandom(8,10),
                'height':99,
                'zad':3
            };
            frc.left -= 35;
        }

        if( frc.name != undefined ) {
            this.sendSound( frc.sound );
            var obj = top.frames.main.document.getElementById('frvrks');
            if( obj != undefined ) {
                var newhtml = '';
                var i = 1;
                while( i <= frc.x ) {
                    newhtml += `<img style="display:none" id="frvanim_${this.feerverk_id}_img${i}" width="${frc.width}" height="${frc.height}" src="https://img.new-combats.com/fw/${frc.name}/${i}.gif">`;
                    i++;
                }
                newhtml = `<div id="frvanim_${this.feerverk_id}" style="z-index:5000;position:absolute;width:${frc.width}px;height:${frc.height}px;left:${frc.left}px;top:${frc.top}px;">${newhtml}</div>`;
                $(obj).append(newhtml);
                this.feerverk_go( this.feerverk_id , frc.x-1 , frc.name , frc.x , frc.zad );
                this.feerverk_id++;
            }
        }else{
            //alert('Эффект не опознан!');
        }
    },
    feerverk_go:function(id,time_back,img,x,zad) {
        if( zad > 0 ) {
            setTimeout(`chat.feerverk_go(${id},${time_back},"${img}",${x},0);`,500*zad);
        }else{
            time_back--;
            var obj = top.frames.main.document.getElementById(`frvanim_${id}`);
            if( time_back > 0 ) {
                var img1 = top.frames.main.document.getElementById(`frvanim_${id}_img${(x-time_back+1)}`); //текущая
                if( img1 != undefined ) img1.style.display = 'none';
                var img1 = top.frames.main.document.getElementById(`frvanim_${id}_img${(x-time_back+2)}`); //текущая
                if( img2 != undefined ) img2.style.display = '';
                setTimeout(`chat.feerverk_go(${id},${time_back},"${img}",${x},0);`,50);
            } else top.frames.main.document.getElementById(`frvanim_${id}`).remove();
        }
    },
    ignorUn:function(x)
    {
        $('#ignr_u_'+x).remove();
        this.ignore(this.ignoreList.nms[x]);
    },
    ignorListOpen:function()
    {
        var date = '',i = 0;
        var j = 1;
        while(j<=this.ignoreList.x)
        {
            if(this.ignoreList[this.ignoreList.nms[j]]!=undefined)
            {
                date += `<div id="ignr_u_${j}">    <b>${this.ignoreList.nms[j]}</b> <a target="_blank" href="https://new-combats.com/info/${this.ignoreList.nms[j]}"><img src="https://${top.c.img}/i/inf_capitalcity.gif" onMouseOver="top.hi(this,\'<b>Инф. о ${this.ignoreList.nms[j]}</b>\',event,5,-2,2,2,\'\');" onMouseOut="top.hic();" onMouseDown="top.hic();"></a>   <small><a href="javascript:void(0)" onclick="chat.ignorUn(${j})">Clear</a></small>  </div>`;
            }
            j++;
        }
        win.add('ignorListWin','Список игнорируемых',`<div id="ignr_alu">${date}</div>`,{},0,1,'min-width:200px;');
        delete date;
    },
    addSmile:function(id)
    {
        $('#textmsg').val($('#textmsg').val()+' :'+id+': ');
        $('#textmsg').focus();
    },
    lookSmiles:function()
    {
        if($('#chbtn8').attr('class')=='db cp chatBtn8_1')
        {
            $('#ttSmiles').css('display','');
            $('#chbtn8').attr('class','db cp chatBtn8_2');
        }else{
            $('#ttSmiles').css('display','none');
            $('#chbtn8').attr('class','db cp chatBtn8_1');
        }
    },
    filterMsg:function()
    {
        if($('#chbtn1').attr('class')=='db cp chatBtn1_1')
        {
            $('#chbtn1').attr('class','db cp chatBtn1_2'); this.filter = 1;
        }else{
            $('#chbtn1').attr('class','db cp chatBtn1_1'); this.filter = 0;
        }
    },
    systemMsg:function()
    {
        if($('#chbtn4').attr('class')=='db cp chatBtn4_1')
        {
            $('#chbtn4').attr('class','db cp chatBtn4_2'); this.citySys = 1; $.cookie('citySys',1);
        }else{
            $('#chbtn4').attr('class','db cp chatBtn4_1'); this.citySys = 0; $.cookie('citySys',0);
        }
    },
    soundChat:function()
    {
        if($('#chbtn7').attr('class')=='db cp chatBtn7_1')
        {
            $('#chbtn7').attr('class','db cp chatBtn7_2'); this.sound = 1;
        }else if($('#chbtn7').attr('class')=='db cp chatBtn7_2'){
            $('#chbtn7').attr('class','db cp chatBtn7_3'); this.sound = 2;
        }else{
            $('#chbtn7').attr('class','db cp chatBtn7_1'); this.sound = 0;
        }
    },
    translitChat:function()
    {
        if($('#chbtn6').attr('class')=='db cp chatBtn6_1')
        {
            $('#chbtn6').attr('class','db cp chatBtn6_2'); this.translit = 1;
        }else{
            $('#chbtn6').attr('class','db cp chatBtn6_1'); this.translit = 0;
        }
    },subValSend:'',
    subSend: function () {
        if ($('#textmsg').val() != '') {
            if ($('#textmsg').val() != this.subValSend) {
                if (this.nozpros == 0) {
                    this.trmb();
                    var textmsg = $('#textmsg').val();

                    if (cb_date[cb_select] == 7 && (textmsg.match(/to *\[(.*?)\].*/i) || textmsg.match(/private *\[(.*?)\].*/i))) {
                        for (var cb in cb_date) {
                            if (cb_date[cb] == 5) {
                                open_cb(cb, null);
                            }
                        }
                    }
                    if (typeof window.online_send_jqxhr == "undefined" || window.online_jqxhr.readyState === 4) {
                        window.online_send_jqxhr = $.post('online.php?r' + c.rnd + '&cas' + ((new Date().getTime()) + Math.random()), {msg: textmsg, key: this.key, mid: this.msg_id, rndo: c.rnd, tgfs: tgf_status, cb: cb_date[cb_select]},
                            function (data) {
                                chat.clearText();
                                chat.fc();
                                chat.genchatData(data, 1);
                            });
                    }else{
                        console.log('window.online_send_jqxhr in process!');
                    }
                }
            }
        }
    },
    addto:function(login, type2) {
        var loginaddT = login;
        var s = '';
        if($('#'+$(this.inObj).attr('id')).attr('id') == undefined) {
            $('#textmsg').focus();
            s = $('#textmsg').val();
        } else $(this.inObj).focus();
        var reg555 = new RegExp("private\\s*\\[(.*?)\\]","");
        var reg551 = new RegExp("to\\s*\\[(.*?)\\]","");
        var test1 = s.match(reg555);
        if(s.match(reg555) == null) type = "to";
        else if(s.match(reg551) == null) type = "private";


        var type3 = 'to';
        var reg2 = new RegExp(`${type}(\\s*)\\[(.*?)\\]`,"");
        var cs = s.replace(reg2,`${type}$1[,$2,]`);
        var slogin = login.replace(/([\^.*{}$%?\[\]+|\/\(\)])/g,"\\$1");
        var reg = new RegExp(`${type}\\s*\\[.*,\\s*${slogin}\\s*,.*\\]`,"");
        var result = '';
        var reg3 = new RegExp(`${type}\\s*\\[(.*?)\\]`,"");
        while(res = s.match(reg3)) {
            result += `${res[1]},`;
            s = s.replace(reg3,'');
        }
        result = result.replace(/,$/,'');
        var prar = result.split(',');
        for(i = 0; i < prar.length; i++) {
            prar[i] = prar[i].replace(/^\s+/,'');
            prar[i] = prar[i].replace(/\s+$/,'');
        }
        var str = prar.join(', ');
        if(str) login += ', ';
        space = '';
        if (!s.match(/^\s+/)) space = ' ';
        var prob = '';
        if(!$('#'+$(this.inObj).attr('id')).attr('id') && (!this.inObj || !$('#main').contents().find('#'+this.inObj.id).attr('id')))
        {
            if (!cs.match(reg))
            {
                if (type2 == 'to') {
                    if (test1 != null) type2 = 'private'
                }

                if(loginaddT == 'klan' && type2=='private')
                {
                    if (login == 'klan, ')
                    {
                        s = `${type2} [klan] to [${prob}${str}${prob}]${space}${s}`;
                    }
                    else {s = `${type2} [klan]${space}${s}`;}

                }
                else {s = `${type2} [${prob}${login}${str}${prob}]${space}${s}`}
            } else {

                if (type3 == 'to') type3 = "private";

                s = `${type3} [${prob} ${str} ${prob}]${space}${s}`;

            }
        } else s = login+str;

        if(this.inObj != null && $('#main').contents().find('#'+this.inObj.id).attr('id') != undefined) {
            $('#main').contents().find('#'+this.inObj.id).val(s);
        } else if($('#'+$(this.inObj).attr('id')).attr('id') == undefined) {
            $('#textmsg').val(s);
        } else $(this.inObj).val(s);
    },
    clearText:function()
    {
        $('#textmsg').val('');
    },
    reflesh:function()
    {
        this.time = 0;
        this.testTimer(true);
    },
    reMoney:function()
    {
        $('#moneyGM').html(top.c.money+' кр.');
    },
    testTimer: function (n) {
        clearTimeout(this.t);


        if ($.cookie('btl') != this.btl) {
            if ($.cookie('btl') > 0) {
                this.sendSound(2);
                if (top.frames['main'].smnpty != undefined) {

                }
                else top.frames['main'].location.href = "main.php";
            }
            this.btl = $.cookie('btl');
        }
        if (this.rtime != this.ct[$.cookie('chatCfg0')] && this.ct[$.cookie('chatCfg0')] != undefined) {
            this.rtime = this.ct[$.cookie('chatCfg0')];
            if (this.time > this.rtime) this.time = this.rtime;
        }
        //console.log(this.rtime+" "+this.r);
        if (this.rtime >= 5 || this.r == 0) //was >- 30 lakris fix
        {
            if (this.time < 1) {
                var aot = {
                    0: 0,
                    1: 1,
                    2: 0
                };
                if ($('#chcf10').attr('checked') == true) aot[2] = 1;
                if ($('#autoRefOnline').attr('checked') == true || this.r == 0 || n != false) {
                    aot[0] = 1;
                }
                if (this.nozpros == 0) {

                    if (typeof window.online_jqxhr == "undefined" || window.online_jqxhr.readyState === 4) {
                        window.online_jqxhr = $.getJSON('online.php?r' + c.rnd + '&cas' + ((new Date().getTime()) + Math.random()), {key: this.key, mid: this.msg_id, r1: aot[0], r2: aot[1], r3: aot[2], rndo: c.rnd}, function (data) {
                            if (data.rnd != null) {
                                chat.genchatData(data);
                                if (data.key != undefined) chat.saveData = data;
                                this.g++;
                                c.rnd = data.rnd;
                            }
                        });
                    }else{
                        console.log('window.online_jqxhr in process!');
                    }
                }
                this.time = 5;
                this.r++;
            } else this.time--;
            this.t = setTimeout('chat.testTimer(false);clearTimeout(this.t);', 1000);
        }
    },

    gUser:function(data,ol)
    {
        var rt = '';
        if(data[1]!=undefined)
        {
            rt = data[1];
            if( rt == 'Администратор' ) {
                rt = this.efftxt('fire',rt);
            }
            if(ol==true)
            {
                rt = `<a href="javascript:void(0)" onClick="chat.addto(\'${data[1]}\',\'to\')">${rt}</a>`;
            }
            else rt = `<b>${rt}</b>`;
            if(data[13]!=0) rt = `<span class="uCss${data[13]}">${rt}</span>`;

            if(data[10]>0)
            {
                rt = `<s onmouseout="top.hic()" onmousedown="top.hic()" onmouseover="top.hi(this,\'Персонаж был заблокирован\',event,3,1,1,2,\'\')">${rt}</s>`;
            }

            if(data[8]!=0)
            {
                data[8] = this.replaceAll(data[8],"\\",'\\\\');
                data[8] = this.replaceAll(data[8],"[s1;]",'"');
                data[8] = this.replaceAll(data[8],"[s2;]",'`');
                data[8] = this.replaceAll(data[8],"[s3;]",'');
                data[8] = this.replaceAll(data[8],"[s4;]",'');
                data[8] = this.replaceAll(data[8],"<",'');
                data[8] = this.replaceAll(data[8],">",'');
                //rt = ' <small onmouseout="top.hic()" onmousedown="top.hic()" onmouseover="top.hi(this,\' '+data[8]+' \',event,3,1,1,2,\'\')"><b>afk</b></small> '+rt;
            }else if(data[9]!=0)
            {
                data[9] = this.replaceAll(data[9],"\\",'\\\\');
                data[9] = this.replaceAll(data[9],"[s1;]",'"');
                data[9] = this.replaceAll(data[9],"[s2;]",'`');
                data[9] = this.replaceAll(data[9],"[s3;]",'');
                data[9] = this.replaceAll(data[9],"[s4;]",'');
                data[9] = this.replaceAll(data[9],"<",'');
                data[9] = this.replaceAll(data[9],">",'');
                //rt = ' <small onmouseout="top.hic()" onmousedown="top.hic()" onmouseover="top.hi(this,\' '+data[9]+' \',event,3,1,1,2,\'\')"><b>dnd</b></small> '+rt;
            }

            // тут
            function rtData (count) {
                return rt = `<img height="15" src="https://${top.c.img}/i/align/align${data[count]}.gif">${rt}`;
            }

            if(data[4]!=0)
            {
                rt = `<a href="/clan/${data[4]}" title="${data[4]}" target="_blank"><img width="24" height="15" src="https://${c.img}/i/clan/${data[4]}.gif"></a>${rt}`;
            }

            if( data[16] > 0 ) rtData(16)

            rtData(3)

            if(c.lvl>-1)
            {
                if(c.city==data[6])
                {
                    if(data[12]>0)
                    {
                        rt = `<a href="javascript:void(0)" onClick="chat.addto(\'${data[1]}\',\'private\')"><img title="Персонаж сражается" src="https://${c.img}/i/lock1.gif" width="20" height="15"></a>${rt}`;
                    }else{
                        rt = `<a href="javascript:void(0)" onClick="chat.addto(\'${data[1]}\',\'private\')"><img src="https://${c.img}/i/lock.gif" width="20" height="15"></a>${rt}`;
                    }
                }else{
                    rt = `<img style="padding-right:3px;" onmouseout="top.hic()" onmousedown="top.hic()" onmouseover="top.hi(this,\'Персонаж сейчас в ${data[6]}\',event,3,1,1,2,\'\')" src="https://${c.img}/i/city_ico/${data[6]}'.gif" width="17" height="15">${rt}`;
                }
            }
            rt += `[${data[2]}]<a href="https://${c.url}/info/${data[0]}" target="_blank"><img style="vertical-align:baseline" width="12" height="11" src="https://${top.c.img}/i/inf_${data[5]}.gif" title="Инф. о ${data[1]}" /></a>`;
            if(data[11]>top.c.time)
            {
                rt +=  ` <img id="img_molch${data[1]}" width="24" height="15" style="cursor:help" src="https://${c.img}/i/sleep2.gif" onmouseout="top.hic()" onmousedown="top.hic()" onmouseover="top.hi(this,\'На персонажа наложено заклятие молчания.<br>Будет молчать еще <span id=\\\'molch${data[0]}\\\'>${this.timeOut(data[11])}</span>\',event,3,1,1,2,\'\');chat.justRefMolch(${data[0]})">`;
                this.addRefMolch(data[0],data[11]);
            }
            if(data[14]!="")
            {
                rt +=  ` <img width="24" height="15" style="cursor:help" src="https://${c.img}/i/travma2.gif" onmouseout="top.hic()" onmousedown="top.hic()" onmouseover="top.hi(this,\'У персонажа ${data[14]}\',event,3,1,1,2,\'\');">`;
            }
            if(data[13] > 0)
            {
                if( data[13] == 2 ) {
                    rt += ` <a target="main" href="/main.php?atak_user=${data[0]}" title="Кровавое нападение на ${data[1]}"><img width="13" height="13" src="https://${c.img}/i/clear.gif"></a>`;
                }else{
                    rt += ` <a target="main" href="/main.php?atak_user=${data[0]}" title="Напасть на ${data[1]}"><img width="13" height="13" src="https://${c.img}/i/curse_attack.gif"></a>`;
                }
            }
            if( data[15] == 1 ) rt = `<span class=woman >${rt}</span>`
            else{
                //rt = ' M';
            }
        } else rt = '<i>невидимка</i>[??]'
        return rt;
    },mlch:{},
    justRefMolch: function (id) {
        $('#molch' + id).html(this.timeOut(this.mlch[id]));
    },
    addRefMolch:function(id,tm)
    {
        this.t_all[id] = setTimeout(`chat.refMolch(${id})`, 1000);
        this.mlch[id] = tm;
    },
    refMolch:function(id)
    {
        clearTimeout(this.t_all[id]);
        if (this.mlch[id] > 0) {
            $('#molch' + id).html(this.timeOut(this.mlch[id]));
            this.t_all[id] = setTimeout(`chat.refMolch(${id})`, 1000);
        } else {
            $('#img_molch' + id).remove();
            delete this.mlch[id], this.t_all;
        }
    },
    fc:function()
    {
        $('#textmsg').focus();
    },
    timeOut:function(v)
    {

        msPerDay = '';

        dt = new Date();
        dt.setTime((v-c.time)*1000);

        m1   = dt.getUTCMonth();
        d1   = dt.getUTCDay();
        h1   = dt.getUTCHours();
        min1 = dt.getUTCMinutes();
        sec  = dt.getUTCSeconds();

        if (m1>0) msPerDay = `${m1} мес. `;
        if (d1>0 && Math.floor((v-c.time)/(60*60*24)) == d1) msPerDay = `${d1} д. `;
        if (h1>0) msPerDay += `${h1} ч. `;
        if (min1>0) msPerDay += `${min1} мин. `;
        if (sec>0 && msPerDay != '') msPerDay += `${sec} сек. `;
        if (msPerDay == '') msPerDay = 'меньше минуты.';

        delete m1, d1, h1, min1, sec;
        return msPerDay;
    },
    deleteMessage:function(id,fc)
    {
        //$('#msg_'+id).hide('slow'); setTimeout("$('#msg_'+id).remove();",1000);
        if(fc == 1) top.msgdeleted(id)
        else{
            $('#msg_'+id).remove();
            $('#msg_'+id+'_sys').remove();
            if(top.c.admin>0)
            {
                $.post('online.php?jack='+c.rnd+'&cas'+((new Date().getTime()) + Math.random()),{delMsg:id});
            }
        }
    },
    clear:function()
    {
        if($('#textmsg').val()=='')
        {
            if(confirm('Очистить окно чата?'))
            {
                //if(top.cb_date[top.cb_select] == 4 || top.cb_date[top.cb_select] == 5) {
                if( top.des == 1 ) {
                    $('#canal'+top.cb_date[top.cb_select]).html('');
                    $('#textmsg').focus();
                }
                $('#canal5').html('');
                $('#textmsg').focus();
                return
            }
        }else $('#textmsg').val('');
    },
    scrollNow:function(id)
    {
        if(top.des == 0 || top.cb_date[top.cb_select] == 5 || top.cb_date[top.cb_select] == 4) {
            //alert(id);
            $('#chat_list').stop();
            $('#chat_list').animate({ scrollTop: $('#chat_list')[0].scrollHeight }, 1000);
            //console.log(`${document.getElementById("chat_list").scrollTop}px`)
            //console.log(`${document.getElementById("chat_list").clientHeight}px`)
            var $chat_list = document.getElementById("chat_list")
            console.log(($chat_list.scrollHeight - $chat_list.scrollTop))

            if (($chat_list.scrollHeight - $chat_list.scrollTop) < 358) {
                console.log((`Крутим в начало ${$chat_list.scrollHeight - $chat_list.scrollTop}`))
                return $chat_list.scrollBy(0, $chat_list.scrollHeight)
            } else console.log("не крутим")
            //$('#chat_list').scrollTop();
        }
    },
    msgcount:0,
    sendMsg:function(data)
    {
        var msg_see = 1;
        var global_type = 0;

        if( data[5] != undefined ) {
            if( data[5].substring(0,7) == 'global:' ) {
                global_type = 1;
                data[5] = data[5].substring(7);
            }
        }
        if (data[0] == 'new') {
            data[0] = `new_msg_ ${this.newmsg}`;
            this.newmsg++;
        }
        if (data[2] == 'delete') this.deleteMessage(data[0]);
        else if (data['d'] > 0) this.deleteMessage(data['d']);
        else if (data['s'] > 0) this.deleteMessage(data['s']);
        else if(data[0]!=undefined && top.document.getElementById(`msg_${data[0]}`) == undefined)
        {
            var msg  = '';
            if(data[0]!=0)
            {
                if(top.c.admin > 0) {
                    if(data[12] == 1) {
                        msg += '<small style="color:red;text-decoration:blink"> <b>un</b>active </small>';
                    }
                }
                if(data[3]!='')
                {
                    if(data[16] > 0) {
                        msg += `[<a href="javascript:void(0)" oncontextmenu="top.infoMenu(\'Невидимка\',event,\'chat\'); return false;" onClick="chat.addto(\'Невидимка\',\'to\')">${data[3]}</a>]`;
                    }else{
                        msg += `[<a href="javascript:void(0)" oncontextmenu="top.infoMenu(\'${data[3]}\',event,\'chat\'); return false;" onClick="chat.addto(\'${data[3]}\',\'to\')">${data[3]}</a>]`;
                    }
                    if(chat.ignoreList[data[3]]!=undefined) msg_see = 0;
                }
                if(data[4]!='')
                {
                    var forYou = 0;
                    //тот кто писал

                    //кому написали, разбор массива
                    if(data[4]!='')
                    {
                        var to = '',to2 = '',arr = data[4].split(','),i = 0,vl = '';
                        //тем кому писали
                        while(i!=-1)
                        {
                            if(arr[i]!=undefined)
                            {
                                vl = this.trim(arr[i]);
                                if(vl.toLowerCase() == top.c.login.toLowerCase())
                                {
                                    forYou++;
                                }
                                if(vl.toLowerCase() == top.c.login.toLowerCase())
                                {
                                    vl = this.trim(data[3]);
                                }
                                if(i>0)
                                {
                                    to += ', ';
                                    to2 += ', ';
                                }
                                if(data[3]!='')
                                {
                                    to += `<span style="cursor:pointer" onclick="chat.addto(\'${vl}\',\'private\');" oncontextmenu="top.infoMenu(\'${this.trim(arr[i])}\',event,\'chat\'); return false;">${this.trim(arr[i])}</span>`;

                                    if(this.trim(arr[i].toLowerCase()) != top.c.login.toLowerCase())
                                    {
                                        to2 += this.trim(arr[i]);
                                    } else {
                                        if (data[2] == 2) to2 += this.trim(arr[i]);
                                        else to2 += this.trim(vl);
                                    }
                                }
                            } else i = -2;
                            i++;
                        }
                    }

                    if(data[2] == 6 || data[2] == 8) {
                        var zmlogin = new RegExp("\\[login:(.*?)\\]","");
                        var reflcd = new RegExp("\\[reflesh_main_zv_priem:(.*?)\\]","");
                        if(data[5].match(zmlogin)!=null)
                        {
                            zmlogin = data[5].match(zmlogin)[1];
                            data[5] = data[5].replace(`[login:${zmlogin}]`,`<a onMouseDown="top.loginGo(\'${zmlogin}\',event);" oncontextmenu="top.infoMenu(\'${zmlogin}\',event,\'chat\'); return false;" title="${zmlogin}" style="cursor:pointer;" onClick="chat.multiAddto(\'${zmlogin}\',\'to\');">${zmlogin}</a>`);
                        }
                        if(data[5].match(reflcd)!=null)
                        {
                            reflcd = data[5].match(reflcd)[1];
                            data[5] = data[5].replace(`[reflesh_main_zv_priem:${reflcd}]`,'');
                        }
                    }

                    //Собираем массив кому адресовано сообщение
                    if(data[2]==6)
                    {
                        //личная системка, внимание
                        msg += ' <span style="color:red">Внимание!</span> ';
                    }else if(data[2]==2)
                    {
                        if(forYou>0)
                        {
                            msg += ` <span style="color:${data[6]}"><b>to [${to2}]</b></span>`;
                        }else{
                            msg += ` <span style="color:${data[6]}">to [${to2}]</span>`;
                        }
                    }else if(data[2]==3)
                    {
                        if(this.trim(data[3].toLowerCase()) == top.c.login.toLowerCase())
                        {
                            forYou++;
                        }
                        if(data[3]!='')
                        {
                            if(data[4]=='klan' && data[2]==3)
                            {
                                msg += ' <span class="klan"><span style="cursor:pointer" onclick="chat.multiaddto(\'klan\',\'private\');">private [klan]</span></span>';
                            }else{
                                msg += ` <span class="private"><span style="cursor:pointer" onclick="chat.multiaddto(\'${to2}\',\'private\');">private [ </span>${to}<span style="cursor:pointer" onclick="chat.multiAddto(\'${to2}\',\'private\');"> ]</span></span>`;
                            }
                        }
                    }
                }
                msg += ' ';
            }

            data[5] = this.replaceAll(data[5],"[s1;]",'"');
            data[5] = this.replaceAll(data[5],"[s2;]",'\'');
            data[5] = this.replaceAll(data[5],"[s3;]",'<');
            data[5] = this.replaceAll(data[5],"[s4;]",'>');

            //data[5] = this.replaceAll(data[5],"[s4;]",'>');

            //var matches = data[5].match(/\[img\[(.*?)\]\]/);
            //var a = matches[1];
            //var b = matches[2];

            //console.log(matches);


            if($.cookie('chatCfg2')!=0)
            {
                data[5] = chat.testSmile(data[5]);
            }

            if(data[6]!='Black' && data[6]!='')
            {
                msg += `<font color="${data[6]}">${data[5]}</font>`;
            } else msg += data[5];

            if(data[2] == 21) {
                //e text
                var text = `[loginfrom] ${data[5]}`;
                var ftps = `<i><a href="javascript:void(0)" oncontextmenu="top.infoMenu(\'${data[3]}\',event,\'chat\'); return false;" onClick="chat.addto(\'${data[3]}\',\'to\')">${data[3]}</a></i>`;
                var mblogin = new RegExp("\\[login:(.*?)\\]","");
                text = text.replace('[loginfrom]',ftps);
                if(text.match(mblogin)!=null)
                {
                    mblogin = text.match(mblogin)[1];
                    text = text.replace(`[login:${mblogin}]`,`<i><a href="javascript:void(0)" oncontextmenu="top.infoMenu(\'${mblogin}\',event,\'chat\'); return false;" onClick="chat.addto(\'${mblogin}\',\'to\')">${mblogin}</a></i>`);
                }
                msg = `<i>${text}</i>`;
            }
            if(data[1]>0)
            {
                var td = new Date((parseInt(data[1]))*1000);
                td = [td,null,null,null];
                td[1] = td[0].getHours();
                td[2] = td[0].getMinutes();
                td[3] = td[0].getSeconds();
                td[4] = td[0].getDay();
                td[5] = td[0].getMonth();
                td[6] = td[0].getYear();
                var j = 1;
                while (j < 6) {
                    if (td[j] < 10) {
                        td[j] = `0${td[j]}`;
                    }
                    j++;
                }

                var cls = forYou > 0 ? 'date2' : 'date'
                if(data[11]>0)
                {
                    msg = `<font style="cursor:help" color="red" onmouseout="top.hic()" onmousedown="top.hic()" onmouseover="top.hi(this,\'Отправитель наказан за нарушение правил общения<br>Отключить отображение подобных сообщений можно в настройках чата.\',event,3,1,1,3,\'\')"> <b>!</b> </font>${msg}`;
                }
                if(data[10]>0)
                {
                    msg = `<font style="cursor:help" color="green" onmouseout="top.hic()" onmousedown="top.hic()" onmouseover="top.hi(this,\'Это глобальное сообщение, оно может быть отправлено из любой локации<br>Отключить отображение подобных сообщений можно в настройках чата.\',event,3,1,1,3,\'\')"> <b>G</b> </font>${msg}`;
                }
                var msg22  = '<span ';
                if(top.c.admin > 0) {
                    msg22 += `oncontextmenu="chat.deleteMessage(${data[0]});
						return false;" `;
                }
                if( data[8] == 2 ) {
                    //msg22 += 'class="'+cls+'">'+td[4]+'.'+td[5]+'.'+(td[6]+1900)+' '+td[1]+':'+td[2]+'</span> ';
                    if( data[14] == undefined ) {
                        data[14] = '--:--';
                    }
                    if( data[14] == '--:--' && data[1] > 0 ) {
                        data[14] = data[1];
                        var date14 = new Date(data[14]*1000);
                        data[14] = `${date14.getHours()}:${date14.getMinutes()}`;
                    }
                    msg22 += `class="${cls}">${data[14]}</span> `;
                }else{
                    if( data[13] == undefined ) {
                        data[13] = '--:--';
                    }
                    if( data[13] == '--:--' && data[1] > 0 ) {
                        data[13] = data[1];
                        var date13 = new Date(data[13]*1000);
                        data[13] = `${date13.getHours()}:${date13.getMinutes()}`;
                    }
                    msg22 += `class="${cls}">${data[13]}</span> `;
                }
                msg = msg22+msg;
            }
            this.msgcount++;

            msg = `<span class="m0c1" id="msg_${data[0]}">${msg}<br></span>`;

            if(forYou > 0 && this.sound > 0 && this.trim(data[3].toLowerCase()) != top.c.login.toLowerCase())
            {
                this.sendSound(1);
            }

            if(msg_see == 1)
            {
                if(this.trim(data[3].toLowerCase()) == top.c.login.toLowerCase() || forYou == 1 || this.filter == 0)
                {
                    if( data[9] > 0 ) {
                        this.sendSound(data[9]);
                    }
                    if( data[15] != undefined && data[15] != 0 ) {
                        this.feerverk( data[15] );
                        this.feerverk( data[15] );
                    }

                    if( top.des == 1 ) {
                        if( data[2] < 4 || global_type == 1 ) {
                            //Обычный чат
                            $('#canal5').html($('#canal5').html()+''+msg);
                            top.blueTextSee(5);
                            if( global_type == 1 ) {
                                //Системный чат
                                $('#canal4').html($('#canal4').html()+''+msg);
                                top.blueTextSee(4);
                            }
                        }else{
                            //Системный чат
                            $('#canal4').html($('#canal4').html()+''+msg);
                            top.blueTextSee(4);
                            $('#canal5').html($('#canal5').html()+''+msg);
                            top.blueTextSee(5);
                        }
                    }else{
                        $('#canal5').html($('#canal5').html()+''+msg);
                    }

                    /*
                    if(data[2] == 6 || data[2] == 5) {
                        //системное сообщение
                        $('#canal5').html($('#canal5').html()+''+msg);
                        //$('#canal4').html($('#canal4').html()+'<span id="msg_'+data[0]+'_sys">'+msg+'</span>');
                        //if(top.cb_rdate[top.cb_select] != 4) {
                            //top.blueTextSee(5);
                        //}
                    }else if(data[2] == 7){
                        //системное сообщение (только)
                        //$('#canal'+top.cb_select).html($('#canal'+top.cb_select).html()+''+msg);
                        //$('#canal4').html($('#canal4').html()+'<span id="msg_'+data[0]+'_sys">'+msg+'</span>');
                        //top.blueTextSee(4);
                    }else if(data[2] == 8){
                        //системное сообщение (только ТАП)
                        //$('#canal'+top.cb_select).html($('#canal'+top.cb_select).html()+''+msg);
                        //$('#canal6').html($('#canal6').html()+'<span id="msg_'+data[0]+'_tap">'+msg+'</span>');
                        //top.blueTextSee(6);
                    }else{
                        //обычное сообщение
                        if( data[2] == 1 && data[4] == 'trade' ) {
                            $('#canal6').html($('#canal6').html()+''+msg);
                        }else{
                            $('#canal5').html($('#canal5').html()+''+msg);
                        }
                        //top.blueTextSee(5);
                    }*/
                }
            }



            // document.getElementById("chat_list").addEventListener("scroll", function (event) {
            // 	console.log(`${pageYOffset}px`)
            // });

            this.scrollNow(this.msgcount);
            delete forYou, cls, msg_see, msg, arr;
        }
    },
    testKey: function (m, v) {
        var i = 0,
            r = v;
        v = false;
        while (i != -1) {
            if (m[i] != undefined) {
                if (m[i] == r) {
                    v = i;
                    i = -2;
                }
            } else {
                i = -2;
            }
            i++;
        }
        delete r, m;
        return v;
    },
    isNumber:function(s)
    {
        return s = !isNaN(s) ? true : false
    },
    testSmile:function(txt)
    {
        /*if(top.c.admin < 1) {
            txr = txt.split(':');
            var i = 1, j = 0, smid = 0;
            while(i!=-1)
            {
                if(txr[i]!=undefined && j < 3)
                {
                    smid = this.testKey(top.sml,txr[i].toLowerCase());
                    if(smid!=false && this.isNumber(txr[i]) != true)
                    {
                        if(smid!=false)
                        {
                            txt = txt.replace("\:"+txr[i]+"\:",'<img src="https://'+top.c.img+'/i/smile/'+(txr[i].toLowerCase())+'.gif" style="cursor:pointer" width="'+top.sml[smid+1]+'" height="'+top.sml[smid+2]+'" onclick="chat.addSmile(\''+(txr[i].toLowerCase())+'\')">');
                        }
                        j++;
                    }
                }else{
                    i = -3;
                }
                i += 2;
            }
            delete smid;
            delete j;
            delete txr;
        }else{*/
        txr = txt.split(':');
        var i = 1, j = 0, smid = 0;
        while(i <= txr.length) {
            if( txr[i] != undefined) {
                smid = this.testKey(top.sml,txr[i]);
                imsml = txr[i].split('-');
                if(((smid != false || smid == 0) && this.isNumber(txr[i]) != true) || (imsml != undefined && imsml[0] == '%usersmile%')) {
                    if(j < 3 && this.isNumber(top.sml[smid]) != true && (top.sml[smid] != undefined || imsml[0] == '%usersmile%')) {
                        // тут
                        if(imsml[0] == '%usersmile%') {
                            txt = txt.replace(`\:%usersmile%-${imsml[1]}\:`,`<img src="https://${top.c.img}/i/smile/${(imsml[1].toLowerCase())}.gif" title="Именной смайлик">`);
                        }else{
                            txt = txt.replace(`\:${txr[i]}\:`,`<img src="https://${top.c.img}/i/smile/${(txr[i].toLowerCase())}.gif" style="cursor:pointer" width="${top.sml[smid+1]}" height="${top.sml[smid+2]}" onclick="chat.addSmile(\'${(txr[i].toLowerCase())}\')">`);
                        }
                        j++;
                    }
                }
            }
            i++;
        }
        //}
        return txt;
    },
    trmb: function () {
        if (this.translit == 1) {
            $('#textmsg').val(this.convert2($('#textmsg').val()));
        }
    },
    replaceAll:function(t,v,s)
    {
        return t.split(v).join(s);
    },
    convert2:function(txt)
    {
        var trn = new Array();
        trn = txt.split(' ');
        for(var i=0;i<trn.length;i++) {
            if(trn[i].indexOf("https://") < 0 && trn[i].indexOf('@') < 0 && trn[i].indexOf("www.") < 0 && !(trn[i].charAt(0)==":" && trn[i].charAt(trn[i].length-1)==":")) {
                if ((i<trn.length-1)&&(trn[i]=="to" || trn[i]=="private")&&(trn[i+1].charAt(0)=="[")) {
                    while ( (i<trn.length-1) && (trn[i].charAt(trn[i].length-1)!="]") ) i++;
                } else { trn[i] = this.convert(trn[i]); }
            }
        }
        return trn.join(' ');
    },
    map_en:Array('s`h','S`h','S`H','s`Х','sh`','Sh`','SH`',"'o",'yo',"'O",'Yo','YO','zh','w','Zh','ZH','W','ch','Ch','CH','sh','Sh','SH','e`','E`',"'u",'yu',"'U",'Yu',"YU","'a",'ya',"'A",'Ya','YA','a','A','b','B','v','V','g','G','d','D','e','E','z','Z','i','I','j','J','k','K','l','L','m','M','n','N','o','O','p','P','r','R','s','S','t','T','u','U','f','F','h','H','c','C','`','y','Y',"'"),
    map_ru:Array('сх','Сх','СХ','сХ','щ','Щ','Щ','ё','ё','Ё','Ё','Ё','ж','ж','Ж','Ж','Ж','ч','Ч','Ч','ш','Ш','Ш','э','Э','ю','ю','Ю','Ю','Ю','я','я','Я','Я','Я','а','А','б','Б','в','В','г','Г','д','Д','е','Е','з','З','и','И','й','Й','к','К','л','Л','м','М','н','Н','о','О','п','П','р','Р','с','С','т','Т','у','У','ф','Ф','х','Х','ц','Ц','ъ','ы','Ы','ь'),
    addSm:function(i)
    {
        $('#textmsg').focus();
        top.document.textmsg.value += ` :${i}: `;
    },
    convert:function(str)
    {
        var p1 = new RegExp("private\\s*\\[(.*?)\\]","");
        var t1 = new RegExp("to\\s*\\[(.*?)\\]","");
        var newstr = '';
        if(str.match(p1)!=null)
        {
            newstr = str.match(p1)[0];
            str = str.replace(str.match(p1)[0],'');
        }else if(str.match(t1)!=null)
        {
            newstr = str.match(t1)[0];
            str = str.replace(str.match(t1)[0],'');
        }

        for(var i=0;i<this.map_en.length;++i) while(str.indexOf(this.map_en[i])>=0) str = str.replace(this.map_en[i],this.map_ru[i]);
        newstr += str;
        return newstr;
    },
    sendSound: function (s) {
        var svolm = 100;
        if (this.sound == 0) svolm = 0
        else if (this.sound == 1) svolm = 25;
        else if (this.sound == 2) svolm = 100;

        var isInternetExplorer = navigator.appName.indexOf("Microsoft") != -1;

        if (isInternetExplorer && window.document["Sound"] && typeof window.document["Sound"].SetVariable !== "undefined") {
            window.document["Sound"].SetVariable("Volume", svolm);
            window.document["Sound"].SetVariable("Sndplay", s);
        } else if(document.getElementById('Sound2') && typeof document.getElementById('Sound2').SetVariable !== "undefined") {
            document.getElementById('Sound2').SetVariable("Volume", svolm);
            document.getElementById('Sound2').SetVariable("Sndplay", s);
        }

    },
    getSwf:function(val) {
        var M$ =  navigator.appName.indexOf("Microsoft")!=-1
        return (M$ ? window : document)[val]
    },
    trim:function(s)
    {
        return this.rtrim(this.ltrim(s));
    },
    ltrim:function(s)
    {
        return s.replace(/^\s+/, '');
    },
    rtrim:function(s)
    {
        return s.replace(/\s+$/, '');
    },
    multiaddto: function (users, tp) {
        var arr = users.split(',');
        var i = arr.length;
        while (i >= 0) {
            if (arr[i] != undefined) {
                this.addto(arr[i], tp);
            }
            i--;
        }
    },
    osize:function(obj) {
        var size = 0, key;
        for (key in obj) {
            if (obj.hasOwnProperty(key)) size++;
        }
        return size;
    },
    //Генерируем данные
    genchatData:function(data,prs)
    {
        if(prs == 1) {
            data = $.parseJSON(data);
        }
        if(data == null && this.saveData!=null)
        {
            data = this.saveData;
            data.js = '';
            data.rn = undefined;
            data.key = undefined;
        }
        //Получаем сообщение
        if(data.msg!=undefined)
        {
            var ms = $.parseJSON(data.msg);
            if(ms['ld']>this.msg_id) this.msg_id = ms['ld'];
            var i = 0;
            //while(i <= this.osize(ms.length)+10)
            while(i <= ms['id'])
            {

                if(ms[`m${i}`]!=undefined) this.sendMsg(ms[`m${i}`]);
                i++;
            }
        }
        //Если есть JS
        if(data.js!='')
        {
            eval(data.js);
        }
        if(data.rnd!=undefined){ c.rnd = data.rnd; }
        if(data.rn!=undefined){	if($('#chcf10').attr('checked')==true){ $('#roomName').html(data.rn+'<br><small>Общий онлайн: '+data.xu+'</small>'); }else{ $('#roomName').html(data.rn+' ('+data.xu+')'); } }
        if(data.key!=undefined){	this.key = data.key;	}
        if(data.list!=undefined)
        {
            var i = 0, ji = $.parseJSON(data.list), onll = '', fSort = {}, flSort = {},flSortSee = '"Служба Поддержки"';
            //сортируем данные
            while(i<=data.xu)
            {
                if(ji[i]!=undefined)
                {
                    /*if($.cookie('chatCfg8')==1)
                    {
                        jj = '['+(ji[i][2]*0.01)+']'+i; //по уровню
                    }else if($.cookie('chatCfg8')==2)
                    {
                        jj = '['+ji[i][3]+']'+i; //по склонности
                    }else if($.cookie('chatCfg8')==3)
                    {
                        jj = '['+ji[i][4]+']'+i; //по клану
                    }else{
                        jj = ji[i][1]; //по логину
                    }*/
                    jj = ji[i][1].toLowerCase(); //по логину
                    fSort[jj] = i;
                    flSort[i] = jj;
                    flSortSee += `,"${flSort[i]}"`;
                }
                i++;
            }
            flSortSee = eval(`[${flSortSee}]`);
            if($.cookie('chatCfg9')==1){flSortSee.sort(game.sort2);}else{flSortSee.sort(game.sort1);}
            //Выводим данные
            i = 0;
            var onll_alh = '';
            while (i <= data.xu) {
                if (fSort[flSortSee[i]] != undefined) {
                    if (ji[fSort[flSortSee[i]]][3] == 50) {
                        onll_alh += `<span class="m0c1">${this.gUser(ji[fSort[flSortSee[i]]],true)}</span>`;
                    } else {
                        onll += `<span class="m0c2">${this.gUser(ji[fSort[flSortSee[i]]],true)}</span>`;
                    }
                }
                i++;
            }
            $('#onlist').html(onll_alh + '' + onll);
        }
    }
}