1051 lines
32 KiB
JavaScript
1051 lines
32 KiB
JavaScript
var chat = {
|
||
|
||
sml:new Array("smile",18,18, "laugh",15,15, "fingal",22,15, "eek",15,15, "smoke",20,20, "hi",31,28, "bye",15,15,
|
||
"king",21,22, "king2",28,24, "smile",18,18, "boks2",28,21, "boks",62,28, "gent",15,21, "lady",15,19, "tongue",15,15, "smil",16,16, "rotate",15,15,
|
||
"ponder",21,15, "bow",15,21, "angel",42,23, "angel2",26,25, "hello",25,27, "dont",26,26, "idea",26,27, "mol",27,22, "super",26,28,
|
||
"beer",15,15, "drink",19,17, "baby",15,18, "tongue2",15,15, "sword",49,18, "agree",37,15,
|
||
"loveya",27,15, "kiss",15,15, "kiss2",15,15, "kiss3",15,15, "kiss4",37,15, "rose",15,15, "love",27,28,
|
||
"love2", 55,24,
|
||
"confused",15,22, "yes",15,15, "no",15,15, "shuffle",15,20, "nono",22,19, "maniac",70,25, "privet",27,29, "ok",22,16, "ninja",15,15,
|
||
"pif",46,26, "smash",30,26, "alien",13,15, "pirate",23,19, "gun",40,18, "trup",20,20,
|
||
"mdr",56,15, "sneeze",15,20, "mad",15,15, "friday",57,28, "cry",16,16, "grust",15,15, "rupor",38,18,
|
||
"fie",15,15, "nnn",82,16, "row",36,15, "red",15,15, "lick",15,15,
|
||
"help",23,15, "wink",15,15, "jeer",26,16, "tease",33,19, "nunu",43,19,
|
||
"inv",80,20, "duel",100,34, "susel",70,34, "nun",40,28, "kruger",34,27, "flowers",28,29, "horse",60,40, "hug",48,20, "str",35,25,
|
||
"alch",39,26, "pal", 25, 21, "mag", 37, 37, "sniper", 37,37, "vamp", 27,27, "doc", 37,37, "doc2", 37,37, "sharp", 37,37,
|
||
"naem", 37,37, "naem2", 37,37, "naem3", 37,37, "invis", 32,23, "chtoza", 33, 37,
|
||
"beggar", 33,27, "sorry", 25,25, "sorry2", 25,25,
|
||
"creator", 39, 25, "grace", 39, 25, "dustman", 30, 21, "carreat", 40, 21, "lordhaos", 30, 21,
|
||
"ura", 31, 36, "elix", 30, 35, "dedmoroz", 32,32, "snegur", 45,45, "showng", 50, 35, "superng", 45,41,
|
||
"podz", 31,27, "sten", 44, 30, "devil", 29, 20, "cat", 29, 27, "owl", 29,20, "lightfly", 29,20, "snowfight", 51, 24,
|
||
"rocket", 43,35, "dance1", 45,23, "radio1", 36, 24, "victory", 51, 35, "dance2", 41, 31, "radio2", 29, 29,
|
||
"nail", 32, 26, "rev", 40, 25, "obm", 37, 22, "yar", 40, 36, "rom", 38, 33, "sad", 23, 23),
|
||
|
||
timers:[],
|
||
timers0:'noTimer',
|
||
chat_r:30,
|
||
locks:[0,0],
|
||
inObj:false,
|
||
lmid:0,
|
||
cid:[0],
|
||
mxlm:100,
|
||
canal_open:0,
|
||
|
||
|
||
refleshData:{},
|
||
refleshChat:function( auto ) {
|
||
if(this.chat_r < 30) {
|
||
this.chat_r = 30;
|
||
}
|
||
if(this.locks[0] == 0) {
|
||
delete this.refleshData.message;
|
||
this.refleshData.lmid = this.lmid;
|
||
this.refleshData.auto = auto;
|
||
this.refleshData.sys = this.system;
|
||
this.refleshData.ftr = this.filter;
|
||
this.refleshData.pgo = this.onlinePageSelect;
|
||
this.refleshData.r2 = $('#online_r2').attr('checked');
|
||
|
||
if( auto == true ) {
|
||
this.refleshData.r1 = $('#online_r1').attr('checked');
|
||
}else{
|
||
this.refleshData.r1 = 'checked';
|
||
$(window).stopTime('tmchon');
|
||
}
|
||
$.ajax({
|
||
url: 'http://'+cfg.host+'/chat/',
|
||
type: 'POST',
|
||
dataType: 'json',
|
||
data: this.refleshData,
|
||
success: function(data){ chat.readData(data); }
|
||
});
|
||
}
|
||
$(window).oneTime( ( 1000 * this.chat_r ), 'tmchon', function(i) {
|
||
$(window).stopTime('tmchon');
|
||
chat.refleshChat(true);
|
||
});
|
||
},
|
||
|
||
tmrMsg:null,
|
||
formSendMessage:function() {
|
||
if( $('#msg_text').val() == '' ) {
|
||
alert( 'Нельзя отправлять пустое сообщение!' );
|
||
}else if(this.locks[1] == 0) {
|
||
//clearTimeout(this.tmrMsg);
|
||
this.locks[1] = 1;
|
||
|
||
//this.tmrMsg = setTimeout(function(){chat.locks[1] = 0;},850);
|
||
|
||
if( this.translit == true ) {
|
||
$('#msg_text').val( this.convert2( $('#msg_text').val() ) );
|
||
}
|
||
|
||
this.refleshData.message = $('#msg_text').val();
|
||
this.refleshData.lmid = this.lmid;
|
||
this.refleshData.auto = false;
|
||
this.refleshData.sys = this.system;
|
||
//this.refleshData.pgo = this.onlinePageSelect;
|
||
//this.refleshData.r2 = $('#online_r2').attr('checked');
|
||
//this.refleshData.r1 = $('#online_r1').attr('checked');
|
||
|
||
$.ajax({
|
||
url: 'http://'+cfg.host+'/chat/',
|
||
type: 'POST',
|
||
dataType: 'json',
|
||
data: this.refleshData,
|
||
success: function(data){ chat.locks[1]=0; $('#msg_text').val(""); chat.readData(data); }
|
||
});
|
||
}else{
|
||
alert('Внимание! Нельзя отправлять сообщения так часто!');
|
||
}
|
||
},
|
||
|
||
testKeyPress:function(event) {
|
||
if(event.keyCode==10 || event.keyCode==13) {
|
||
chat.formSendMessage();
|
||
}
|
||
},
|
||
|
||
/* Очистить чат */
|
||
clearChatline:function( type ) {
|
||
if( $('#msg_text').val() == '' && type == false) {
|
||
if( confirm('Очистить весь чат?') ) {
|
||
this.clearChat();
|
||
}
|
||
}else{
|
||
$('#msg_text').val('');
|
||
$('#msg_text').focus();
|
||
}
|
||
},
|
||
|
||
/* включить фильтр чата */
|
||
filter:false,
|
||
filterChatLine:function() {
|
||
if( this.filter == false ) {
|
||
$('#btn3c').attr('class','btn3c2');
|
||
$('#btn3c').attr('title','(Включено) Показывать в чате только сообщения адресованные мне');
|
||
this.filter = true;
|
||
}else{
|
||
$('#btn3c').attr('class','btn3c');
|
||
$('#btn3c').attr('title','(Выключено) Показывать в чате только сообщения адресованные мне');
|
||
this.filter = false;
|
||
}
|
||
},
|
||
|
||
/* включить системные сообщения чата */
|
||
system:false,
|
||
systemChatLine:function() {
|
||
if( this.system == false ) {
|
||
$('#btn4c').attr('class','btn4c2');
|
||
$('#btn4c').attr('title','(Включено) Показывать в чате системные сообщения');
|
||
this.system = true;
|
||
}else{
|
||
$('#btn4c').attr('class','btn4c');
|
||
$('#btn4c').attr('title','(Выключено) Показывать в чате системные сообщения');
|
||
this.system = false;
|
||
}
|
||
},
|
||
|
||
/* включить медленное обновление чата */
|
||
speedchat:1,
|
||
speedChatLine:function() {
|
||
if( this.speedchat == 3 ) {
|
||
$('#btn5c').attr('class','btn5c2');
|
||
$('#btn5c').attr('title','Обновление чата выключено!');
|
||
this.chat_r = 31536000;
|
||
clearTimeout(this.timers[0]);
|
||
this.speedchat = 2;
|
||
}else if( this.speedchat == 2 ) {
|
||
$('#btn5c').attr('class','btn5c');
|
||
$('#btn5c').attr('title','(Выключено) Медленное обновление чата (раз в минуту)');
|
||
this.chat_r = 30;
|
||
clearTimeout(this.timers[0]);
|
||
this.timers[0] = setTimeout('chat.refleshChat(true)',1000 * this.chat_r);
|
||
this.speedchat = 1;
|
||
}else{
|
||
$('#btn5c').attr('class','btn5c3');
|
||
$('#btn5c').attr('title','(Включено) Медленное обновление чата (раз в минуту)');
|
||
this.chat_r = 60;
|
||
clearTimeout(this.timers[0]);
|
||
this.timers[0] = setTimeout('chat.refleshChat(true)',1000 * this.chat_r);
|
||
this.speedchat = 3;
|
||
}
|
||
},
|
||
|
||
/* включить транслит чата */
|
||
translit:false,
|
||
translitChatLine:function() {
|
||
if( this.translit == false ) {
|
||
$('#btn6c').attr('class','btn6c2');
|
||
$('#btn6c').attr('title','(Включено) Преобразовать транслит в русский текст (правила перевода см. в энциклопедии)');
|
||
this.translit = true;
|
||
}else{
|
||
$('#btn6c').attr('class','btn6c');
|
||
$('#btn6c').attr('title','(Выключено) Преобразовать транслит в русский текст (правила перевода см. в энциклопедии)');
|
||
this.translit = false;
|
||
}
|
||
},
|
||
|
||
convert2:function(txt)
|
||
{
|
||
var trn = new Array();
|
||
trn = txt.split(' ');
|
||
for(var i=0;i<trn.length;i++) {
|
||
if(trn[i].indexOf("http://") < 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('сх','Сх','СХ','сХ','щ','Щ','Щ','ё','ё','Ё','Ё','Ё','ж','ж','Ж','Ж','Ж','ч','Ч','Ч','ш','Ш','Ш','э','Э','ю','ю','Ю','Ю','Ю','я','я','Я','Я','Я','а','А','б','Б','в','В','г','Г','д','Д','е','Е','з','З','и','И','й','Й','к','К','л','Л','м','М','н','Н','о','О','п','П','р','Р','с','С','т','Т','у','У','ф','Ф','х','Х','ц','Ц','ъ','ы','Ы','ь'),
|
||
|
||
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;
|
||
},
|
||
|
||
/* смайлики */
|
||
smileschat:false,
|
||
smilesChatLine:function() {
|
||
if( this.smileschat == false ) {
|
||
$('#ttSmiles').css('display','');
|
||
$('#btn7c').attr('class','btn7c2');
|
||
$('#btn7c').attr('title','(Включено) Смайлики');
|
||
this.smileschat = true;
|
||
}else{
|
||
$('#ttSmiles').css('display','none');
|
||
$('#btn7c').attr('class','btn7c');
|
||
$('#btn7c').attr('title','Смайлики');
|
||
this.smileschat = false;
|
||
}
|
||
},
|
||
addSmile:function(id)
|
||
{
|
||
if( top.mob_version != undefined ) {
|
||
$('#chat_message').val($('#chat_message').val()+' :'+id+': ');
|
||
//$('#chat_message').focus();
|
||
}else{
|
||
$('#msg_text').val($('#msg_text').val()+' :'+id+': ');
|
||
$('#msg_text').focus();
|
||
}
|
||
},
|
||
refleshSmiles:function() {
|
||
//генерируем смайлики
|
||
var i = 0, j = '';
|
||
while(i!=-1)
|
||
{
|
||
if(this.sml[i]!=undefined)
|
||
{
|
||
j += '<img style="cursor:pointer" onclick="chat.addSmile(\''+this.sml[i]+'\')" src="http://'+cfg['img']+'images/smile/'+this.sml[i]+'.gif" width="'+this.sml[i+1]+'" height="'+this.sml[i+2]+'" title=":'+this.sml[i]+':" /> ';
|
||
}else{
|
||
i = -4;
|
||
}
|
||
i += 3;
|
||
}
|
||
$('#smilesDiv').html(j);
|
||
delete i;
|
||
delete j;
|
||
},
|
||
|
||
testKey:function(m,v)
|
||
{
|
||
var i = 0, r = v;
|
||
v = false;
|
||
while(i!=-1)
|
||
{
|
||
if(m != undefined && m[i]!=undefined)
|
||
{
|
||
if(m[i]==r)
|
||
{
|
||
v = i;
|
||
i = -2;
|
||
}
|
||
}else{
|
||
i = -2;
|
||
}
|
||
i++;
|
||
}
|
||
delete r,m;
|
||
return v;
|
||
},
|
||
isNumber:function(s)
|
||
{
|
||
if(!isNaN(s))
|
||
{
|
||
s = true;
|
||
}else{
|
||
s = false;
|
||
}
|
||
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(this.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(this.sml[smid]) != true && (this.sml[smid] != undefined || imsml[0] == '%usersmile%')) {
|
||
if(imsml[0] == '%usersmile%') {
|
||
txt = txt.replace("\:%usersmile%-"+imsml[1]+"\:",'<img class="cml" src="http://'+top.cfg.img+'images/smile/'+(imsml[1].toLowerCase())+'.gif" title="Именной смайлик">');
|
||
}else{
|
||
txt = txt.replace("\:"+txr[i]+"\:",'<img class="cml" src="http://'+top.cfg.img+'images//smile/'+(txr[i].toLowerCase())+'.gif" style="cursor:pointer" width="'+this.sml[smid+1]+'" height="'+this.sml[smid+2]+'" onclick="chat.addSmile(\''+(txr[i].toLowerCase())+'\')">');
|
||
}
|
||
j++;
|
||
}
|
||
}
|
||
}
|
||
i++;
|
||
}
|
||
return txt;
|
||
},
|
||
|
||
/* звук */
|
||
soundchat:0,
|
||
soundChatLine:function() {
|
||
if(pluginlist.indexOf("Flash") != -1) {
|
||
if( this.soundchat == 0 ) {
|
||
$('#btn8c').attr('class','btn8c2');
|
||
$('#btn8c').attr('title','(Включено \'тихо\') Звуковые уведомления');
|
||
this.soundchat = 1;
|
||
}else if( this.soundchat == 1 ){
|
||
$('#btn8c').attr('class','btn8c3');
|
||
$('#btn8c').attr('title','(Включено \'громко\') Звуковые уведомления');
|
||
this.soundchat = 2;
|
||
}else{
|
||
$('#btn8c').attr('class','btn8c');
|
||
$('#btn8c').attr('title','(Выключено) Звуковые уведомления');
|
||
this.soundchat = 0;
|
||
}
|
||
}else{
|
||
if(!! document.createElement('video').canPlayType ) {
|
||
//html5 уведомления
|
||
alert('Поддержка звуковых уведомлений временно заблокировано на стороне сервера.');
|
||
/*
|
||
$('<audio id="chatAudio"><source src="notify.ogg" type="audio/ogg"><source src="notify.mp3" type="audio/mpeg"><source src="notify.wav" type="audio/wav"></audio>').appendTo('body');
|
||
$('#chatAudio')[0].play();
|
||
*/
|
||
}else{
|
||
alert("Ваш браузер не поддерживает Flash-ролики, а так-же HTML5\nДля звуковых уведомлений установите плагин Adobe Flash Player, либо обновите браузер (Подробнее см. в энциклопедии)");
|
||
}
|
||
//$('#soundTableTd').css({'display':'none'});
|
||
}
|
||
},
|
||
|
||
getSwf:function(val) {
|
||
var M$ = navigator.appName.indexOf("Microsoft")!=-1
|
||
return (M$ ? window : document)[val]
|
||
},
|
||
sendSound:function(s)
|
||
{
|
||
var svolm = 100;
|
||
if(this.soundchat == 0) {
|
||
svolm = 0;
|
||
}else if(this.soundchat == 1) {
|
||
svolm = 25;
|
||
}else if(this.soundchat == 2) {
|
||
svolm = 100;
|
||
}
|
||
|
||
/*if(window.Sound) {
|
||
window.document["Sound"].SetVariable("Volume", svolm);
|
||
window.document["Sound"].SetVariable("Sndplay", s);
|
||
}else if(document.Sound) {
|
||
document.Sound.SetVariable("Volume", svolm);
|
||
document.Sound.SetVariable("Sndplay", s);
|
||
}*/
|
||
|
||
var M$ = navigator.appName.indexOf("Microsoft")!=-1
|
||
if(this.getSwf('Sound').SetVariable == undefined && !M$) {
|
||
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);
|
||
}
|
||
},
|
||
|
||
clearChat:function() {
|
||
if( this.canal_open == 0 ) {
|
||
this.cid[this.canal_open] = 0;
|
||
$('#canal'+this.canal_open).html(' ');
|
||
}
|
||
return true;
|
||
},
|
||
|
||
clearInput:function() {
|
||
$('#msg_text').val('');
|
||
},
|
||
iKeys:{
|
||
'r':null,
|
||
'u':null,
|
||
'm':null,
|
||
't':0
|
||
},
|
||
users_u_city:0,
|
||
readData:function(data) {
|
||
|
||
//Чистим данные передачи
|
||
this.refleshData = {};
|
||
|
||
if( data.online_list != undefined && data.online_list != 0 ) {
|
||
//Выводим список онлайна
|
||
this.readDataOnlineList( data.online_list , data.ura );
|
||
}
|
||
if( data.room_name != undefined && data.room_name != 0 ) {
|
||
//Обновляем название комнаты
|
||
if( $('#online_r2').attr('checked') == 'checked' ) {
|
||
$('#online_room').html( data.room_name + '<br><small>Общий онлайн: ' + data.ura + '</small>' );
|
||
}else{
|
||
$('#online_room').html( data.room_name + ' (' + data.ura + ')' );
|
||
}
|
||
}
|
||
if( data.chat_list != undefined && data.chat_list != 0 ) {
|
||
//Выводим чат
|
||
this.readDataChatList( data.chat_list );
|
||
this.testScrollMessages();
|
||
}
|
||
},
|
||
|
||
testScrollMessages:function() {
|
||
if( $('#chat_list').get(0).scrollHeight > $('#chat_list').height() ) {
|
||
this.messageGenXdel++;
|
||
$('#msg' + this.messageGenXdel ).css('display','none');
|
||
this.testScrollMessages();
|
||
}
|
||
},
|
||
|
||
playSoundMsg:false,
|
||
readDataChatList:function( data ) {
|
||
var i = 0, html = "", j = 0;
|
||
while( i != -1 ) {
|
||
if( data[i] != undefined ) {
|
||
//
|
||
if( parseInt(data[i][0]) > this.lmid ) {
|
||
this.lmid = parseInt(data[i][0]);
|
||
html = html + "" + this.messageGen( data[i] ) + "";
|
||
}
|
||
//
|
||
j++;
|
||
}else{
|
||
if( this.playSoundMsg == true ) {
|
||
this.sendSound(1);
|
||
}
|
||
this.playSoundMsg = false;
|
||
i = -2;
|
||
}
|
||
i++;
|
||
}
|
||
$('#canal0').html( $('#canal0').html() + html );
|
||
},
|
||
|
||
messageGenX:0,
|
||
messageGenXdel:0,
|
||
messageGen:function( msg ) {
|
||
var html = '';
|
||
//
|
||
this.messageGenX++;
|
||
//
|
||
//html += "<b>" + msg[2] + "</b>: " + this.replaceText( this.testSmile( msg[3] ) );
|
||
//
|
||
var foryou = 0;
|
||
if( this.msgForyou( msg ) == true ) {
|
||
foryou = 1;
|
||
this.playSoundMsg = true;
|
||
}
|
||
|
||
html += this.msgTime( msg, foryou );
|
||
html += this.msgFrom( msg );
|
||
html += this.msgTo( msg );
|
||
html += this.msgText( msg );
|
||
//
|
||
html = '<div id="msg' + this.messageGenX + '">' + html + '</div>';
|
||
return html;
|
||
},
|
||
|
||
onlinePageSelect:1,
|
||
|
||
readDataOnlineList:function( data , ura ) {
|
||
var i = 0, html = '', j = 0;
|
||
while( i != -1 ) {
|
||
if( data[i] != undefined ) {
|
||
if( data[i][0] > 0 ) {
|
||
html = html + this.loginLine( data[i][0] , data[i][1] , data[i][2] , data[i][3] , data[i][4] , data[i][5] , data[i][6] ) + '<br>';
|
||
}else{
|
||
html = html + this.loginLine( 0 , 'Невидимка' , '??' , 'capitalcity' , 0 , 0 , data[i][1] ) + '<br>';
|
||
}
|
||
j++;
|
||
}else{
|
||
i = -2;
|
||
}
|
||
i++;
|
||
}
|
||
var pa = Math.ceil(ura/50) , i = 1 , pgh = '';
|
||
|
||
if( this.onlinePageSelect > pa ) {
|
||
this.onlinePageSelect = pa;
|
||
}
|
||
if( j < ura ) {
|
||
//Выводим страницы
|
||
while( i <= pa ) {
|
||
if( this.onlinePageSelect == i ) {
|
||
pgh += '[<b style="text-decoration:underline;color:#8f0000">' + i + '</b>]';
|
||
}else{
|
||
pgh += '[<a onclick="chat.selectOnlinePage(' + i + ')" class="cp">' + i + '</a>]';
|
||
}
|
||
i++;
|
||
}
|
||
pgh = '<div style="padding:10px 0 10px 0;">' + pgh + '</div>';
|
||
html = pgh + '<div>' + html + '</div>';
|
||
|
||
}
|
||
$('#online_users').html( html );
|
||
},
|
||
|
||
selectOnlinePage:function( id ) {
|
||
this.onlinePageSelect = id;
|
||
this.refleshChat( false );
|
||
},
|
||
|
||
loginLine:function( id , login , level , cityreg , align , clan , fight ) {
|
||
var r = '';
|
||
|
||
if( fight > 0 ) {
|
||
r += '<a class="cp" onClick="chat.toUser(\''+login+'\',\'private\')"><img src="/static/images/lock1.gif" width="20" height="15"></a>';
|
||
}else{
|
||
r += '<a class="cp" onClick="chat.toUser(\''+login+'\',\'private\')"><img src="/static/images/lock.gif" width="20" height="15"></a>';
|
||
}
|
||
r += '<img width="12" height="15" src="/static/images/align/align' + align + '.gif">';
|
||
if( clan > 0 ) {
|
||
r += '<img width="24" height="15" src="http://img.combatz.ru/i/clan/' + clan + '.gif">';
|
||
}
|
||
if( id == 0 ) {
|
||
r += '<a class="cp" onClick="chat.toUser(\''+login+'\',\'to\')"><i>' + login + '</i></a>[' + level + ']';
|
||
}else{
|
||
r += '<a class="cp" onClick="chat.toUser(\''+login+'\',\'to\')">' + login + '</a>[' + level + ']';
|
||
}
|
||
r += '<a target="_blank" title="Инф. о ' + login + '" href="/userinfo/' + id + '"><img width="12" height="11" src="/static/images/inf.gif"></a>';
|
||
|
||
return r;
|
||
},
|
||
|
||
readMessagesSound:false,
|
||
readMessages:function(data) {
|
||
var i = 0;
|
||
this.readMessagesSound = false;
|
||
while( i != -1 ) {
|
||
if(data[i] != undefined) {
|
||
var ch = 0; //Канал чата
|
||
if( this.lmid < data[i][0] ) {
|
||
this.lmid = data[i][0];
|
||
}
|
||
this.addMessage( '#canal' + ch , data[i] );
|
||
i++;
|
||
}else{
|
||
if( i > 0 ) {
|
||
this.scrollChatTo(0,0);
|
||
}
|
||
i = -1;
|
||
}
|
||
}
|
||
if( this.readMessagesSound == true ) {
|
||
this.sendSound(1);
|
||
this.readMessagesSound = false;
|
||
}
|
||
},
|
||
|
||
addMessage:function(ch, data) {
|
||
if($('#msg_' + data[0]).attr('id') == undefined) {
|
||
var msg = '', foryou = this.msgForyou( data );
|
||
if( this.filter == false || this.msgTestyou(data) == true || foryou == true) {
|
||
if(foryou) {
|
||
this.readMessagesSound = true;
|
||
}
|
||
msg += this.msgTime( data, foryou );
|
||
msg += this.msgFrom( data );
|
||
msg += this.msgTo( data );
|
||
msg += this.msgText( data );
|
||
msg = '<div id="msg_' + data[0] + '">' + msg + '</div>';
|
||
$(ch).html( $(ch).html() + msg );
|
||
}
|
||
}
|
||
},
|
||
msgTestyou:function(data) {
|
||
if( user.info['login'] == data[1] ) {
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
},
|
||
msgForyou:function(data) {
|
||
var r = false;
|
||
|
||
if( user.info.login != data[2] ) {
|
||
var i = 0, ua = data[4].split( ',' ), to = '';
|
||
while( i < ua.length ) {
|
||
if( ua[i] != undefined ) {
|
||
ua[i] = GameEngine.trim(ua[i]);
|
||
if(user.info.login == ua[i]) {
|
||
r = true;
|
||
}
|
||
}
|
||
i++;
|
||
}
|
||
}
|
||
|
||
return r;
|
||
},
|
||
msgTime:function(data, foryou) {
|
||
var r = '';
|
||
if( data[7] == 1 ) {
|
||
r += GameEngine.data( 'd.m.Y H:i', data[1] );
|
||
r = ' <span class="date">' + r + '</span>';
|
||
}else if( data[7] == 2 ) {
|
||
r += GameEngine.data( 'H:i', data[1] );
|
||
r = ' <span class="sysdate">' + r + '</span>';
|
||
}else if( data[7] == 3 ) {
|
||
r += GameEngine.data( 'd.m.Y H:i', data[1] );
|
||
r = ' <span class="sysdate">' + r + '</span>';
|
||
}else{
|
||
r += GameEngine.data( 'H:i', data[1] );
|
||
if( foryou == true || data[5] == 4 ) {
|
||
r = ' <span class="date2">' + r + '</span>';
|
||
}else{
|
||
r = ' <span class="date">' + r + '</span>';
|
||
}
|
||
}
|
||
return r;
|
||
},
|
||
msgFrom:function(data) {
|
||
var r = '';
|
||
if(data[5] >= 1 && data[5] < 4) {
|
||
if( data[8] != 0 ) {
|
||
r += ' [<b><i>' + data[2] + '</i></b>]';
|
||
}else{
|
||
r += ' [' + this.loginChat(data[2],'to',null) + ']';
|
||
}
|
||
}
|
||
return r;
|
||
},
|
||
msgTo:function(data) {
|
||
var r = '';
|
||
if( data[5] > 1 && data[5] < 4 ) {
|
||
if( data[5] == 2 ) {
|
||
r = ' to [' + data[4] + ']';
|
||
}else if( data[5] == 3 ) {
|
||
|
||
var i = 0, ua = data[4].split( ',' ), to = '';
|
||
while( i < ua.length ) {
|
||
if( ua[i] != undefined ) {
|
||
ua[i] = GameEngine.trim(ua[i]);
|
||
/*if(user.info['login'] == ua[i]) {
|
||
to += this.loginChat( data[1], 3 );
|
||
//foryou
|
||
}else{*/
|
||
to += this.loginChat( ua[i], 3 );
|
||
//}
|
||
if( i+1 < ua.length ) {
|
||
to += ', ';
|
||
}
|
||
}
|
||
i++;
|
||
}
|
||
|
||
r = ' <span class="private cp">private [' + to + ']</span>';
|
||
}
|
||
if( data[5] == 2 ) {
|
||
r = ' <font color="' + data[6] + '">' + r + '</font>';
|
||
}
|
||
}
|
||
return r;
|
||
},
|
||
replaceAll:function(t,v,s)
|
||
{
|
||
return t.split(v).join(s);
|
||
},
|
||
msgText:function(data) {
|
||
var r = '';
|
||
var text = data[3];
|
||
|
||
/* */
|
||
var reg = text.match(/<login>(.*?)<\/login>/g);
|
||
if( reg != null && reg[0] != undefined ) {
|
||
var i = 0;
|
||
while( i != -1 ) {
|
||
if( reg[i] != undefined ) {
|
||
text = this.replaceAll( text , reg[i] , this.loginChat(this.replaceAll( this.replaceAll( reg[i] , '</login>' , '' ) , '<login>' , '' ), 'to', null) );
|
||
i++;
|
||
}else{
|
||
i = -1;
|
||
}
|
||
}
|
||
}
|
||
|
||
if( data[4] == 4 || data[4] == 5 ) {
|
||
text = this.replaceAll( text , '{w}' , '<font color=red>Внимание!</font>');
|
||
}
|
||
|
||
text = this.testSmile(text);
|
||
|
||
r += ' <font color="' + data[6] + '">' + text + '</font>';
|
||
return r;
|
||
},
|
||
|
||
readOnlineList:function(data) {
|
||
var r = '';
|
||
|
||
var i = 0;
|
||
while( i != -1 ) {
|
||
if(data[i] != undefined) {
|
||
r += this.userInfo(data[i][0],data[i][1],data[i][2],data[i][3],data[i][4],data[i][5]) + '<br>';
|
||
i++;
|
||
}else{
|
||
if( top.mob_version != undefined ) {
|
||
mob.chat.html_return['ou'] = i;
|
||
}else{
|
||
$('#online_room_count').html( '(' + i + ')' );
|
||
}
|
||
i = -1;
|
||
}
|
||
}
|
||
|
||
return r;
|
||
},
|
||
|
||
align_name:{
|
||
0:'',
|
||
1:'Светлый',
|
||
2:'Хаосник',
|
||
3:'Тёмный',
|
||
7:'Нейтральный'
|
||
},
|
||
|
||
userInfo:function(id,login,level,align,clan,device) {
|
||
var r = '';
|
||
|
||
if( user.info.level > 0 ) {
|
||
r += '<img onclick="chat.toUser(\'' + login + '\',\'private\')" title="Приват" class="onlpr cp" src="http://' + cfg.img + 'images/lock.gif">';
|
||
}
|
||
|
||
r += '<img title="' + this.align_name[Math.floor(align)] + '" class="onlal" src="http://' + cfg.img + 'images/align/align' + align + '.gif">';
|
||
r += '<a oncontextmenu="chat.contextMenu(\''+login+'\',event); return false;" onclick="chat.toUser(\'' + login + '\',\'to\')" class="cp">' + login + '</a>';
|
||
r += '[' + level + ']';
|
||
r += '<a href="/userinfo/' + id + '" title="Инф. о ' + login + '" target="_blank"><img class="onlinf" src="http://' + cfg.img + 'images/inf.gif" ></a>';
|
||
if( device != 0 ) {
|
||
var name_device = [
|
||
'Компьютер',
|
||
'',
|
||
'Apple iPhone',
|
||
'',
|
||
'',
|
||
'Android Phone'
|
||
];
|
||
r += ' <img title="Персонаж сидит с ' + name_device[device] + '" class="onlal" src="http://' + cfg.img + 'images/m/devico_' + device + '.png" width="12" height="12">';
|
||
}
|
||
return r;
|
||
},
|
||
|
||
replaceText:function(txt) {
|
||
|
||
txt = GameEngine.str_replace("[s2;]","'",txt);
|
||
txt = GameEngine.str_replace("[s1;]",""",txt);
|
||
txt = GameEngine.str_replace("[s3;]","<",txt);
|
||
txt = GameEngine.str_replace("[s4;]",">",txt);
|
||
txt = GameEngine.str_replace("[s6;]","⁄",txt);
|
||
txt = GameEngine.str_replace("[s5;]","\",txt);
|
||
|
||
return txt;
|
||
},
|
||
|
||
loginChat:function(login,typeTo,login2) {
|
||
login = GameEngine.trim(login);
|
||
if(login2 == null) {
|
||
login2 = login;
|
||
}
|
||
if(typeTo == 3) {
|
||
typeTo = 'private'
|
||
}else if(typeTo == 2) {
|
||
typeTo = 'to';
|
||
}
|
||
login = '<a onclick="chat.toUser(\''+login2+'\',\''+typeTo+'\')" class="cp" oncontextmenu="chat.contextMenu(\''+login+'\',event); return false;">'+login+'</a>';
|
||
return login;
|
||
},
|
||
|
||
context_open:false,
|
||
context_global_open:false,
|
||
context_lock:[0,0],
|
||
contextMenuGlobal:function(fm,e) {
|
||
|
||
if( this.context_lock[1] == 0 ) {
|
||
|
||
this.contextmenu_close();
|
||
|
||
if (!e) e = window.event;
|
||
|
||
fm = 0;
|
||
|
||
var menu = null;
|
||
|
||
if(fm == 'main') {
|
||
|
||
}else if(fm == 'chat') {
|
||
|
||
}else if(fm == 'online') {
|
||
|
||
}else{
|
||
menu = [
|
||
[1,'Настройки меню',''],
|
||
[0],
|
||
[1,'Закрыть','chat.contextmenu_global_close();']
|
||
];
|
||
}
|
||
|
||
var i = 0, menu_html = '';
|
||
while( i < menu.length ) {
|
||
|
||
if( menu[i][0] == 0 ) {
|
||
|
||
menu_html += '<hr>';
|
||
|
||
}else if( menu[i][0] == 1 ) {
|
||
|
||
menu_html += '<div onclick="'+menu[i][2]+'">'+menu[i][1]+'</div>';
|
||
|
||
}
|
||
|
||
i++;
|
||
}
|
||
|
||
if( menu_html != '' ) {
|
||
var x = e.clientX-1,y = e.clientY-1;
|
||
/* pageX , pageY */
|
||
$('#context_menu_global').html( '<span class="pr db" oncontextmenu="return false">'+menu_html+'</span>' );
|
||
$('#context_menu_global').css({'display':'block','top':y+'px','left':x+'px'});
|
||
GameEngine.divxyBanned('#context_menu_global');
|
||
clearTimeout( this.timers[3] );
|
||
this.context_lock[0] = 1;
|
||
this.timers[3] = setTimeout( 'chat.context_global_open=true;chat.context_lock[0]=0;', 25 );
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
},
|
||
|
||
contextmenu_global_close:function() {
|
||
$('#context_menu_global').html('');
|
||
$('#context_menu_global').css({'display':'none'});
|
||
clearTimeout( this.timers[3] );
|
||
this.timers[3] = setTimeout( 'chat.context_global_open=false;', 25 );
|
||
},
|
||
|
||
contextMenu:function(login,e) {
|
||
|
||
if( this.context_lock[0] == 0 ) {
|
||
|
||
this.contextmenu_global_close();
|
||
|
||
if (!e) e = window.event;
|
||
|
||
if (pluginlist.indexOf("Flash")!=-1) {
|
||
$('#context_menu').html(
|
||
'<span class="pr db" oncontextmenu="return false">'+
|
||
'<div onclick="chat.toUser(\''+login+'\',\'to\');chat.contextmenu_close();">TO</div>' +
|
||
'<div onclick="chat.toUser(\''+login+'\',\'private\');chat.contextmenu_close();">PRIVATE</div>' +
|
||
'<a class="db" href="/userinfo/'+login+'" onclick="setTimeout(function(){chat.contextmenu_close();},0);" target="_blank"><div>INFO</div></a>' +
|
||
/*'<div onclick="alert(\'Функция временно не работает\');chat.contextmenu_close();">TO FRIENDS</div>' +*/
|
||
'<div id="copyline" name="copyline" data-clipboard-text="'+login+'">COPY</div>'+
|
||
'</span>'
|
||
);
|
||
$('#context_menu').css({'display':'block'});
|
||
this.contextMenubegin();
|
||
}else{
|
||
$('#context_menu').html(
|
||
'<span class="pr db" oncontextmenu="return false">'+
|
||
'<div onclick="chat.toUser(\''+login+'\',\'to\')">TO</div>' +
|
||
'<div onclick="chat.toUser(\''+login+'\',\'private\')">PRIVATE</div>' +
|
||
'<a class="db" href="/userinfo/'+login+'" target="_blank"><div>INFO</div></a>' +
|
||
/*'<div onclick="alert(\'Функция временно не работает\')">TO FRIENDS</div>' +*/
|
||
'</span>'
|
||
);
|
||
}
|
||
var x = e.clientX-1,y = e.clientY-1;
|
||
/* pageX , pageY */
|
||
$('#context_menu').css({'display':'block','top':y+'px','left':x+'px'});
|
||
GameEngine.divxyBanned('#context_menu');
|
||
clearTimeout( this.timers[2] );
|
||
this.context_lock[1] = 1;
|
||
this.timers[2] = setTimeout( 'chat.context_open=true;chat.context_lock[1]=0;', 25 );
|
||
}
|
||
},
|
||
|
||
contextmenu_close:function() {
|
||
$('#context_menu').html('');
|
||
$('#context_menu').css({'display':'none'});
|
||
clearTimeout( this.timers[2] );
|
||
this.timers[2] = setTimeout( 'chat.context_open=false;', 25 );
|
||
},
|
||
|
||
clip:false,
|
||
contextMenubegin:function() {
|
||
this.clip = new ZeroClipboard( document.getElementById("copyline"), {
|
||
moviePath: "http://" + cfg.img + "flash/ZeroClipboard.swf"
|
||
} );
|
||
|
||
this.clip.on( 'load', function(client) {
|
||
// alert( "movie is loaded" );
|
||
} );
|
||
|
||
this.clip.on( 'complete', function(client, args) {
|
||
chat.contextmenu_close();
|
||
} );
|
||
|
||
this.clip.on( 'mouseover', function(client) {
|
||
$('#copyline').attr('class','context_menudivhover');
|
||
} );
|
||
|
||
this.clip.on( 'mouseout', function(client) {
|
||
$('#copyline').attr('class','');
|
||
} );
|
||
|
||
this.clip.on( 'mousedown', function(client) {
|
||
$('#copyline').attr('class','context_menudivhover');
|
||
} );
|
||
|
||
this.clip.on( 'mouseup', function(client) {
|
||
$('#copyline').attr('class','context_menudivhover');
|
||
} );
|
||
},
|
||
|
||
scrlst:0,
|
||
scrollChatTo:function(val,par) {
|
||
$('#chat_list').stop();
|
||
$('#chat_list').animate({ scrollTop: $('#chat_list')[0].scrollHeight }, par);
|
||
},
|
||
|
||
user:function(id,login,level,align,clan) {
|
||
var r = '';
|
||
if(level < 1) {
|
||
level = 0;
|
||
}
|
||
r += '<div><img class="db fl cp" onClick="chat.toUser(\''+login+'\',\'private\')" src="/i/i/lock.gif" title="Написать в приват" width="20" height="15"><img class="db fl" src="/i/i/align/align'+align+'.gif" width="12" height="15"><tp1><a onClick="chat.toUser(\''+login+'\',\'to\')" oncontextmenu="chat.contextMenu(\''+login+'\',event); return false;" class="cp">'+login+'</a> ['+level+']</tp1><a target="_blank" href="/userinfo/'+id+'"><img class="ii" src="/i/i/inf.gif"></a></div>';
|
||
return r;
|
||
},
|
||
|
||
toUserAll:function(users,type) {
|
||
var i = 0, ua = users.split( ',' );
|
||
while( i < ua.length ) {
|
||
if( ua[i] != undefined ) {
|
||
ua[i] = GameEngine.trim(ua[i]);
|
||
this.toUser(ua[i],type);
|
||
}
|
||
i++;
|
||
}
|
||
},
|
||
|
||
toUser:function(login,type2) {
|
||
var loginaddT = login;
|
||
var s = '';
|
||
if( top.mob_version != undefined ) {
|
||
$('#chat_message').focus();
|
||
s = $('#chat_message').val();
|
||
}else{
|
||
if($('#'+$(this.inObj).attr('id')).attr('id') == undefined)
|
||
{
|
||
$('#msg_text').focus();
|
||
s = $('#msg_text').val();
|
||
}else{
|
||
$(this.inObj).focus();
|
||
//s = $(inObj).val();
|
||
}
|
||
}
|
||
|
||
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( top.mob_version != undefined ) {
|
||
$('#chat_message').val(s);
|
||
}else if($('#'+$(this.inObj).attr('id')).attr('id') == undefined) {
|
||
$('#msg_text').val(s);
|
||
}else{
|
||
$(this.inObj).val(s);
|
||
}
|
||
}
|
||
}; |