battles/js/chat.js
Igor Barkov (iwork) 3502904656 Рефакторинг, очистка, работа над ошибками, связанными с базой, отказ от глобальной переменной $user во многих файлах.
Singleton в некоторых местах вместо решения #42.
Новые шаги для решения #16 и #52.
Closes #42.
Closes #32.
Closes #31.
2022-01-27 01:15:33 +02:00

828 lines
22 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
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="/inf.php?login='+login+'"><img src="//'+top.c.img+'/i/inf_capitalcity.gif" title="Инф. о '+login+'"></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() );
},
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="/inf.php?login='+this.ignoreList.nms[j]+'"><img src="//'+top.c.img+'/i/inf_capitalcity.gif" title="Инф. о '+this.ignoreList.nms[j]+'"></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')=='getInstance cp chatBtn8_1')
{
$('#ttSmiles').css('display','');
$('#chbtn8').attr('class','getInstance cp chatBtn8_2');
}else{
$('#ttSmiles').css('display','none');
$('#chbtn8').attr('class','getInstance cp chatBtn8_1');
}
},
filterMsg:function()
{
if($('#chbtn1').attr('class')=='getInstance cp chatBtn1_1')
{
$('#chbtn1').attr('class','getInstance cp chatBtn1_2'); this.filter = 1;
}else{
$('#chbtn1').attr('class','getInstance cp chatBtn1_1'); this.filter = 0;
}
},
systemMsg:function()
{
if($('#chbtn4').attr('class')=='getInstance cp chatBtn4_1')
{
$('#chbtn4').attr('class','getInstance cp chatBtn4_2'); this.citySys = 1; $.cookie('citySys',1);
}else{
$('#chbtn4').attr('class','getInstance cp chatBtn4_1'); this.citySys = 0; $.cookie('citySys',0);
}
},
soundChat:function()
{
if($('#chbtn7').attr('class')=='getInstance cp chatBtn7_1')
{
$('#chbtn7').attr('class','getInstance cp chatBtn7_2'); this.sound = 1;
}else if($('#chbtn7').attr('class')=='getInstance cp chatBtn7_2'){
$('#chbtn7').attr('class','getInstance cp chatBtn7_3'); this.sound = 2;
}else{
$('#chbtn7').attr('class','getInstance cp chatBtn7_1'); this.sound = 0;
}
},
translitChat:function()
{
if($('#chbtn6').attr('class')=='getInstance cp chatBtn6_1')
{
$('#chbtn6').attr('class','getInstance cp chatBtn6_2'); this.translit = 1;
}else{
$('#chbtn6').attr('class','getInstance cp chatBtn6_1'); this.translit = 0;
}
},subValSend:'',
subSend:function()
{
if($('#textmsg').val()!='')
{
if($('#textmsg').val()!=this.subValSend)
{
if(this.nozpros == 0) {
this.trmb();
$.post('online.php?r'+c.rnd+'&cas'+((new Date().getTime()) + Math.random()),{
msg:$('#textmsg').val(),key:this.key,mid:this.msg_id,rndo:c.rnd},
function(data){ chat.clearText();
chat.fc(); chat.genchatData(data,1);
});
this.subValSend = $('#textmsg').val();
this.nozpros=1;
setTimeout('chat.subValSend="";chat.nozpros=0;',1000);
} else {
console.log('nozpros != 0');
}
} else {
console.log('No text input = ""');
}
} else {
console.log('No text input');
}
},
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') == 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';
}
}
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+' кр.');
},
btl:0
,
testTimer:function(n)
{
clearTimeout(this.t);
/*if(top.c.money < 100)
{
$('#moneyGM').height('50px');
}else if(top.c.money < 1000)
{
$('#moneyGM').height('70px');
}else{
$('#moneyGM').height('100px');
}*/
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;
}
}
if(this.rtime>=10 || this.r==0)
{
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;
}
//alert('chat.reflesh.undefined()');
if(this.nozpros == 0) {
$.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){
if(data.telegram > 0){
$('#mini_sms').show();
}else{
$('#mini_sms').hide();
}
chat.genchatData(data);
if(data.key!=undefined){
chat.saveData=data;
}
this.g++;
c.rnd = data.rnd;
}
});
this.nozpros=1;
setTimeout('chat.nozpros=0;',1000);
}
this.time = this.rtime; this.r++;
}else{
this.time--;
}
this.t = setTimeout('chat.testTimer(false);clearTimeout(this.t);',1000);
}
},mlch:{},
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;
delete d1;
delete h1;
delete min1;
delete 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) {
$('#canal'+top.cb_date[top.cb_select]).html('');
$('#textmsg').focus();
}
}
}else{
$('#textmsg').val('');
}
},
scrollNow:function(id)
{
},
msgcount:0,
sendMsg:function(data)
{
var msg_see = 1;
if(!data) { console.log('No data [0]'); } else { console.log(data); }
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 && document.getElementById('msg_'+data[0]) == undefined)
{
var msg = '';
if(data[0]!=0)
{
if(data[3]!='')
{
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(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() == c.login.toLowerCase())
{
forYou++;
}
if(vl.toLowerCase() == 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()) != 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)
{
//личная системка, внимание
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()) == 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 += ' ';
} else {
console.log('No data');
}
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(data[6]!='Black' && data[6]!='')
{
msg += '<font color="Black">'+data[5]+'</font>';
}else{
msg += data[5];
}
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 = '';
if(forYou>0)
{
cls = 'date2';
}else{
cls = 'date';
}
var msg22 = '<span ';
if(c.admin > 0) {
msg22 += 'oncontextmenu="chat.deleteMessage('+data[0]+');return false;" ';
}else{
msg22 += 'oncontextmenu="chat.deleteMessage('+data[0]+',1);return false;" ';
}
if( data[8] == 2 ) {
//msg22 += 'class="'+cls+'">'+td[4]+'.'+td[5]+'.'+(td[6]+1900)+' '+td[1]+':'+td[2]+'</span> ';
msg22 += 'class="'+cls+'">'+data[14]+'</span> ';
}else{
//msg22 += 'class="'+cls+'">'+td[1]+':'+td[2]+'</span> ';
msg22 += 'class="'+cls+'">'+data[13]+'</span> ';
}
msg = msg22+msg;
}
this.msgcount++;
msg = '<span id="msg_'+data[0]+'">'+msg+'<br /></span>';
if(forYou > 0 && this.sound > 0 && this.trim(data[3].toLowerCase()) != c.login.toLowerCase())
{
this.sendSound(1);
}
if(msg_see == 1)
{
if(this.trim(data[3].toLowerCase()) == c.login.toLowerCase() || forYou == 1 || this.filter == 0)
{
if( data[9] > 0 ) {
this.sendSound(data[9]);
}
$('#chat').find('#mes').html(msg
);
//обычное сообщение
console.log(msg);
} else {
console.log('N errors');
}
} else {
console.log('Msg see = '+msg_see+'');
}
this.scrollNow(this.msgcount);
delete forYou;
delete cls;
delete msg_see;
delete msg;
delete arr;
} else {
console.log('UNNAMED ERROR');
}
},
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)
{
s = !isNaN(s);
return s;
},
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="//'+top.c.img+'/i/smile/'+(imsml[1].toLowerCase())+'.gif" width="'+top.sml_img[imsml[1]][0]+'" height="'+top.sml[imsml[1]][1]+'" title="Именной смайлик">');
txt = txt.replace("\:%usersmile%-"+imsml[1]+"\:",'<img src="//'+top.c.img+'/i/smile/'+(imsml[1].toLowerCase())+'.gif" title="Именной смайлик">');
}else{
txt = txt.replace("\:"+txr[i]+"\:",'<img src="//'+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 = [];
trn = txt.split(' ');
for(var i=0;i<trn.length;i++) {
if(trn[i].indexOf("//") < 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 M$ = navigator.appName.indexOf("Microsoft")!=-1;
if(!M$ && this.getSwf('Sound').SetVariable == undefined) {
document.getElementById('Sound2').SetVariable("Volume",svolm);
document.getElementById('Sound2').SetVariable("Sndplay",s);
}else{
window.document["Sound"].SetVariable("Volume", svolm);
window.document["Sound"].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.key!=undefined){ this.key = data.key; }
}
};