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,
	userSendMessage: false,
	efftxt:function(id,txt) {
		var r = txt;
		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];
			return
			//msg
		} 
		
		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>`);
		}
		return
	},
	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++;
			}
		}
	},
	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') {
			return this.lookSmilesWork('', 'chatBtn8_2')
		}  
		return this.lookSmilesWork('none', 'chatBtn8_1')
	},
	lookSmilesWork: function (display, className) {
		$('#ttSmiles').css('display', display);
		$('#chbtn8').attr('class', `db cp ${className}`);
	},

	// оптимизация всех кнопок
	greyButton_work: function (elemId, className, method, count ) {
		$(elemId).attr('class', `db cp ${className}`);
		this[method] = count;
	},
	
	// кнопка лейки
	// 1
	filterMsg: function () {
		if ($('#chbtn1').attr('class') == 'db cp chatBtn1_1') {
			return this.greyButton_work('#chbtn1', 'chatBtn1_2', "filter", 1)
		} 
		return this.greyButton_work('#chbtn1', 'chatBtn1_1', "filter", 0)
	},

	// кнопка системных сообщений
	// 2
	systemMsg: function () {
		if ($('#chbtn4').attr('class') == 'db cp chatBtn4_1') {
			this.greyButton_work('#chbtn4', 'chatBtn4_2', "citySys", 1)
			$.cookie('citySys', 1);
			return
		}
		this.greyButton_work('#chbtn4', 'chatBtn4_1', "citySys", 0)
		$.cookie('citySys', 0);
		return
	},
	
	// кнопка аудиосообщений
	// 3
	soundChat: function () {
		if ($('#chbtn7').attr('class') == 'db cp chatBtn7_1') {
			return this.greyButton_work('#chbtn7', 'chatBtn7_2', "sound", 1)
		} else if ($('#chbtn7').attr('class') == 'db cp chatBtn7_2') {
			return this.greyButton_work('#chbtn7', 'chatBtn7_3', "sound", 2)
		} 
		return this.greyButton_work('#chbtn7', 'chatBtn7_1', "sound", 0)
	},

	// кнопка транслита
	// 4
	translitChat: function () {
		if ($('#chbtn6').attr('class') == 'db cp chatBtn6_1') {
			return this.greyButton_work('#chbtn6', 'chatBtn6_2', "translit", 1)
		} 
		return this.greyButton_work('#chbtn6', 'chatBtn6_1', "translit", 0)
	}, 

	subValSend: '',
    subSend: async 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,
                        	cb: cb_date[cb_select]
                        }, function (data) {
                        	chat.clearText();
                        	chat.fc();
							chat.genchatData(data, 1);
							chat.scrollNow(true)
                        });
                    }
                }
            }
        }
    },
	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]+',';
			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') == undefined && (this.inObj == null || $('#main').contents().find('#'+this.inObj.id).attr('id') == undefined))
		{
			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) {
					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;
        }
        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;
                            }
                        });
                    }
                }
                this.time = 5;
                this.r++;
            } else this.time--;
            this.t = setTimeout('chat.testTimer(false);clearTimeout(this.t);', 1000);
        }
    },
	
	gUser:function(data,ol) {
		var rt = '';


		function data_work (count) {
			data[count] = this.replaceAll(data[count], "\\", '\\\\');
			data[count] = this.replaceAll(data[count], "[s1;]", '"');
			data[count] = this.replaceAll(data[count], "[s2;]", '`');
			data[count] = this.replaceAll(data[count], "[s3;]", '');
			data[count] = this.replaceAll(data[count], "[s4;]", '');
			data[count] = this.replaceAll(data[count], "<", '');
			data[count] = this.replaceAll(data[count], ">", '');
		}

		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_work(8)
			else if (data[9] != 0) data_work(9)

			// тут
			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 = '<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);
			return
		} 
		$(`#img_molch${id}`).remove();
		return 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: async function (id, fc) {
		if (fc == 1) top.msgdeleted(id)
		else {
			$(`#msg_${id}`).remove();
			$(`#msg_${id}_sys`).remove();
			if (top.c.admin > 0) {
				await fetch(`online.php?jack=${c.rnd}&cas${((new Date().getTime()) + Math.random())}`, {
					method: "POST",
					delMsg: id
				})
			}
		}
	},
	clear: function () {
		if ($('#textmsg').val() == '') {
			if (confirm('Очистить окно чата?')) {
				if (top.des == 1) {
					$(`#canal${top.cb_date[top.cb_select]}`).html('');
					$('#textmsg').focus();
					return
				}
				$('#canal5').html('');
				$('#textmsg').focus();
				return
			}
		} 
		return $('#textmsg').val('');
	},
	scrollNow: function (userTrue) {

		var $chat_list = document.getElementById("chat_list")
		
		var $countChatList = $chat_list.scrollHeight - $chat_list.scrollTop
		if ($countChatList < $chat_list.offsetHeight + 60) {
			return $chat_list.scrollBy(0, $chat_list.scrollHeight)
		}
		if (userTrue) return $chat_list.scrollBy(0, $chat_list.scrollHeight)
	},
	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++}`;
		}
        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 if (data[4] == 'paladins' && data[2] == 3) {
									msg += ' <span class="klan"><span style="cursor:pointer" onclick="chat.multiaddto(\'paladins\',\'private\');">private [paladins]</span></span>';
								} else if (data[4] == 'tarmans' && data[2] == 3) {
									msg += ' <span class="klan"><span style="cursor:pointer" onclick="chat.multiaddto(\'tarmans\',\'private\');">private [tarmans]</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;]",'>');
				
				
				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 ) {
						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 ) {
							//Обычный чат
							chat.textColor_Work('#canal5', msg, 5)
							if( global_type == 1 ) {
								//Системный чат
								chat.textColor_Work('#canal4', msg, 4)
							}
						}else{
							//Системный чат
							chat.textColor_Work('#canal4', msg, 4)
							chat.textColor_Work('#canal5', msg, 5)
						}
					}
					else $('#canal5').html(`${$('#canal5').html()}${msg}`);
				}
			}
			this.scrollNow(false);
			return delete forYou, cls, msg_see, msg, arr;
		}
	},
	textColor_Work: function (canal ,messg, count) {
		$(canal).html(`${$(canal).html()}${messg}`);
		top.blueTextSee(count);
	},
	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) {
		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_work: function (id) {
		newstr = str.match(id)[0];
		str = str.replace(str.match(id)[0], '');
	},
	convert: function (str) {
		var p1 = new RegExp("private\\s*\\[(.*?)\\]", "");
		var t1 = new RegExp("to\\s*\\[(.*?)\\]", "");
		var newstr = '';
		
		if (str.match(p1) != null) this.convert_work(p1)
		else if (str.match(t1) != null) this.convert_work(t1)

		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 <= 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) {
					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}`);
		}
	}
}