Код:
// --- ST--- ФУНКЦИИ ВСТАВКИ НИКА В ТЕКСТ И ИЖЕ СНИМ ---------------------
function nick_totext(nid, ntx){
setTimeout("top.document.cio.txt.focus();",40); // flag_getfocus=1;
if (ntx && nid != myID){
var temp1=document.cio.txt.value;
var temp2=temp1.substring(0, 20);
var tempm1=temp2.split(" -");
if (tempm1[0].length > 2 && tempm1[0].length < 17 && tempm1.length >1){
temp1=temp1.substring((tempm1[0].length+3));
}else{flag_addtmultinick=0;}
if (flag_addtmultinick){
document.cio.txt.value=ntx+", "+document.cio.txt.value;
}else{
document.cio.txt.value=ntx+" - "+temp1;
}
flag_addtmultinick=1;
// off privat
document.cld.l.value="";
document.cio.pn.value="";
}
return false;
} // function nick_totext()
function privat_on(nid, ntx){
flag_addtmultinick=0;
setTimeout("top.document.cio.txt.focus();",40); // flag_getfocus=1;
if (nid >0 && nid != myID){
document.cld.l.value=nid;
document.cio.pn.value=ntx;
var temp1=document.cio.txt.value;
var temp2=temp1.substring(0, 20);
var tempm1=temp2.split(" -");
if (tempm1[0].length > 2 && tempm1.length >1){
temp1=temp1.substring((tempm1[0].length+3));
document.cio.txt.value=temp1;
}
}
return false;
} // function privat_on()
function privat_off(){
flag_addtmultinick=0;
setTimeout("top.document.cio.txt.focus();",40); // flag_getfocus=1;
document.cld.l.value="";
document.cio.pn.value="";
} // function privat_off()
// --- ST--- ФУНКЦИИ ВСТАВКИ НИКА В ТЕКСТ И ИЖЕ СНИМ ---------------------
// --- ST--- СМАЙЛ-ПАРСЕР ---------------------
// пожалуй лучший смайл-парсер :)
// не жрёт трафик, так как тег img вставляется только у клиента а не передаётся через сеть + быстро парсит хоть 1000 смайлов в сообщении
// (c) Смайл парсер бу - "wRUN" / Chiki-Puki.Ru
var maxsmilesonmsg=20; // и тем не менее можно ограничить кол-во смайлов в сообщении
smiles=new Array(":)", "da.gif", ":(", "be.gif", ";)", "hu.gif", ";(", "di.gif", ":|", "av.gif", ":D", "br.gif", ":O", "bk.gif", ":О", "bk.gif", "8)", "ea.gif", "8(", "fa.gif");
function smileprs(a){
w=0;
b='';
c=a.length;
a=a+" ";
for (d=0; d<c; d++){
e=a.charAt(d);
if (w < maxsmilesonmsg){
g=e;
if (e==':' || e==';' || e=='8'){
if (a.charAt(d+2) ==" "){
d++; e=e+a.charAt(d);
for (f=0; f<smiles.length; f=f+2){if (smiles[f]==e){e="<img src='http://chat.chiki-puki.ru/smiles/"+smiles[f+1]+"' width=15 height=15 border=0 style='position:relative; top:2;' alt='"+e+"'>"; w++; f=999;}}
}else{
if (g==':'){
if (a.charAt(d+3) ==':'){
h=a.charCodeAt(d+1);
if (h >96 && h<123){
i=a.charCodeAt(d+2);
if (i >96 && i<123){
if (!(h >116 && i >111)){
d++;
h=a.charAt(d); d++;
h=h+a.charAt(d); d++;
e="<img src='http://chat.chiki-puki.ru/smiles/"+h+".gif' border=0 style='position:relative; top:2;' ALT=':"+h+":'>"; w++;
}}}}}
}
}
} // if (w < maxsmilesonmsg)
b=b+e;
}
return b;
} // function smileprs()
// --- EN--- СМАЙЛ-ПАРСЕР ---------------------
// --- ST--- ФУНКЦИИ СВЯЗАННЫЕ С ВРЕМЕНЕМ (ТАЙМЕРОМ) ---------------------
var TimeLastReload=0;
var flag_Errorconnect=0;
var ststrokazz=0;
var ststrokatchk=")";
var ststrokatchknum=0;
var MaxTimeCheckConnect=30*2; // 30 сек (2 раза в сек работает таймер)
var MaxTimeLastReload=300*2; // 5 минут (2 раза в сек работает таймер)
var MaxTimeNoconnect=600*2; // 10 минут (2 раза в сек работает таймер)
var triggerbegzagolowka=0;
function begzagolowka(){
zagolowokzz--;
if (zagolowokzz ==9){if (flag_wantwinfocus){window.focus();}}
if (zagolowokzz ==0){top.document.title="Чат - Chiki-Puki.Ru"; return;}
if (triggerbegzagolowka){triggerbegzagolowka=0; top.document.title=".-.@.-.@.-.@";}else{triggerbegzagolowka=1; top.document.title="@.-.@.-.@.-.";}
} // function begzagolowka()
function miganiestatstroki(){
if (ststrokazz ==1){
ststrokazz=0;
document.cct.c.style.background="#FFFFFF";
}else{
ststrokazz=1;
document.cct.c.style.background="#FFF2E2";
}
ststrokatchknum++;
if (ststrokatchknum >3){ststrokatchk=")"; ststrokatchknum=0;}else{ststrokatchk=ststrokatchk+")";}
document.cct.c.value="Связь с чат-сервером потеряна... Пытаюсь восстановить связь. +"+ststrokatchk;
} // function miganiestatstroki()
function GlawTimer(){
if (zagolowokzz > 0){begzagolowka();}
TimeLastReload++;
if (TimeLastReload > MaxTimeLastReload){
if (flag_Errorconnect !=1){
flag_Errorconnect=1;
myAXN++;
top.frames["chl"].location="http://chat.chiki-puki.ru:8080/?ax=10369990q"+myAXN;
document.cct.c.value="Связь с чат-сервером потеряна... Пытаюсь восстановить связь.";
}else{
if (TimeLastReload > MaxTimeNoconnect){okld(); top.document.cer.submit();}
}
}else{
if (TimeLastReload > MaxTimeCheckConnect){
flag_Errorconnect=2;
document.cct.c.style.background="#FFF2E2";
document.cct.c.value=myNICK+"!!! Обнаружены перебои с связью... Ожидаю восстановления ("+Math.floor(MaxTimeLastReload-TimeLastReload)+").";
}else{
var temp1="";
if (myVISIT >0){temp1=" это твой "+myVISIT+" визит,";}
document.cct.c.value="В чате "+allPERSON+" персон, ты под ником «"+myNICK+"»,"+temp1+" проверка связи "+Math.floor(TimeLastReload/2)+" сек. назад.";
}
}
if (flag_Errorconnect ==1){miganiestatstroki();}
setTimeout("GlawTimer()",500);
} // function GlawTimer()
// --- EN--- ФУНКЦИИ СВЯЗАННЫЕ С ВРЕМЕНЕМ (ТАЙМЕРОМ) ---------------------
// --- ST--- ФУНКЦИИ СЛУЖЕБНЫЕ, ВЫЗЫВАЕМЫЕ ЧАТ-СЕРВЕРОМ ---------------------
function okld(){
if (flag_Errorconnect !=0){
flag_Errorconnect=0;
ststrokazz=0;
document.cct.c.style.background="#FFFFFF";
}
ststrokatchknum=0;
ststrokatchk=")";
TimeLastReload=0;
} // function okld()
function oksy(){
document.cld.c.value="";
document.cld.q.value="";
document.cld.w.value="";
document.cct.cn.disabled=false;
} // function oksy()
// --- X функции контроля мозга которые может вызвать чат-сервер ------------
function x_translit(mmod){ // транслит 0=off | 1=on
if (mmod ==1){
myTRANSLITon=1;
top.frames["chn"].document.setti.transl.checked=true;
}else{
myTRANSLITon=0;
top.frames["chn"].document.setti.transl.checked=false;
}} // function x_translit()
function x_reactmy(mmod){ // рекация на сообщения мне 0=никакой | 1=заголовком | 2=звуком
myMREACT=mmod;
top.frames["chn"].document.setti.ream.selectedIndex=mmod;
} // function x_reactmy()
function x_reactpr(mmod){ // рекация на сообщения привата 0=никакой | 1=заголовком | 2=звуком
myPREACT=mmod;
top.frames["chn"].document.setti.reap.selectedIndex=mmod;
} // function x_reactpr()
function x_reactal(mmod){ // рекация на сообщения прочие 0=никакой | 1=заголовком | 2=звуком
myAREACT=mmod;
top.frames["chn"].document.setti.reaa.selectedIndex=mmod;
} // function x_reactal()
function x_txtbgcolor(txt){ // сменить цвет фона окна с текстом чата
top.frames["chp"].document.bgColor=txt;
} // function x_txtbgcolor()
function x_alert(txt){ // выдать окно с текстом и кнопкой OK
window.alert(txt);
} // function x_alert()
function x_callurl(txt, mmod){ // 0=открыть в новом, фоново | 1=открыть в текущем
if (txt){
var temp1="_blank";
if (mmod ==1){temp1="_top";}
myxWin=window.open(txt, temp1);
if (mmod ==0){setTimeout("top.document.cio.txt.focus();",40);}
}} // function x_callurl()
// --- EN--- ФУНКЦИИ СЛУЖЕБНЫЕ, ВЫЗЫВАЕМЫЕ ЧАТ-СЕРВЕРОМ ---------------------
// --- ST--- ФУНКЦИИ ДОБАВЛЕНИЯ И ОБНОВЛЕНИЯ СПИСКА НИКОВ ---------------------
// Массив ников:
// ник, ид_ника, время_входа, пол, канал описание_ника, рег_ид, кол-во_фото, фото_ид, статус
// 0 1 2 3 4 5 6 7 8 9
function clrn(){
Nicks=new Array();
} // function clrn()
// Добавляет ник
function addn(nid, nick, regid, pol, canal, nickdesc, entertime, stat, numfoto, fotoid){
if (nid >0 && nick){
var temp1=Nicks.length;
fn=1;
for (var n=0; (n<Nicks.length && fn==1); n++){
var tempm1=Nicks[n].split("\t");
if (tempm1[1] ==nid){temp1=n; fn=0;}
}
Nicks[temp1]=nick+"\t"+nid+"\t"+entertime+"\t"+pol+"\t"+canal+"\t"+nickdesc+"\t"+regid+"\t"+numfoto+"\t"+fotoid+"\t"+stat;
Nicks.sort();
printnick();
}} // function addn()
function deln(nid){
if (nid >0){
var tempm2=new Array();
var temp1=0;
for (var n=0; n<Nicks.length; n++){
tempm1=Nicks[n].split("\t");
if (tempm1[1] !=nid){tempm2[temp1]=Nicks[n]; temp1++;}
}
Nicks=tempm2;
Nicks.sort();
printnick();
}} // function deln()
// Обновляет статус ника
function nwsn(nid, stat){
if (nid >0){
fn=1;
for (var n=0; (n<Nicks.length && fn==1); n++){
var tempm1=Nicks[n].split("\t");
if (tempm1[1] ==nid){
fn=0; Nicks[n]=tempm1[0]+"\t"+tempm1[1]+"\t"+tempm1[2]+"\t"+tempm1[3]+"\t"+tempm1[4]+"\t"+tempm1[5]+"\t"+tempm1[6]+"\t"+tempm1[7]+"\t"+tempm1[8]+"\t"+stat;
}}
Nicks.sort();
printnick();
}} // function nwsn()
// Обновляет имя (ник)
function nwnn(nid, nick){
if (nid >0){
fn=1;
for (var n=0; (n<Nicks.length && fn==1); n++){
var tempm1=Nicks[n].split("\t");
if (tempm1[1] ==nid){
fn=0;
Nicks[n]=nick+"\t"+tempm1[1]+"\t"+tempm1[2]+"\t"+tempm1[3]+"\t"+tempm1[4]+"\t"+tempm1[5]+"\t"+tempm1[6]+"\t"+tempm1[7]+"\t"+tempm1[8]+"\t"+tempm1[9];
myNICK=nick;
}}
Nicks.sort();
printnick();
}} // function nwnn()
// Обновляет канал ника
function nwchn(nid, canal){
if (nid >0){
if (nid ==myID){myCANAL=canal;}
fn=1;
for (var n=0; (n<Nicks.length && fn==1); n++){
var tempm1=Nicks[n].split("\t");
if (tempm1[1] ==nid){
fn=0; Nicks[n]=tempm1[0]+"\t"+tempm1[1]+"\t"+tempm1[2]+"\t"+tempm1[3]+"\t"+canal+"\t"+tempm1[5]+"\t"+tempm1[6]+"\t"+tempm1[7]+"\t"+tempm1[8]+"\t"+tempm1[9];
}}
Nicks.sort();
printnick();
}} // function nwchn()
// Выводит весь список ников
function printnick(){
docnick='';
docnickN='';
tmpdocnick='';
allPERSON=0;
if (Nicks.length){
for (var n=0; n<Nicks.length; n++){
allPERSON++;
var tempm1=Nicks[n].split("\t");
var temp1="x";
var temp2="";
var temp3="";
var temp4="";
if (tempm1[3] ==1){temp1="m";}
if (tempm1[3] ==2){temp1="f";}
temp2=" ";
temp3="Смотреть анкету...";
if (tempm1[7] >0){temp3="Смотреть анкету ("+tempm1[7]+" фото)...";}
if (tempm1[6] >0){temp2="<a href='' onclick='return top.getanket("+tempm1[6]+")' title='"+temp3+"' class=lz>?</a>";}
temp3="";
if (tempm1[8] >0){temp3=" onMouseOut='top.offmf();' onMouseOver='top.onmf("+tempm1[1]+");'";}
if (tempm1[1] == myID){
temp4="";
if (tempm1[5]){temp4=" title='"+tempm1[5]+"...'";}
tmpdocnick="<tr><td class='n'><b class='ly'>«</b></td>";
tmpdocnick=tmpdocnick+"<td class='n'><b class=l"+temp1+temp4+temp3+">"+tempm1[0]+"</b></td>";
}else{
temp4="";
if (tempm1[5]){temp4=tempm1[5]+"...\n";}
tmpdocnick="<tr><td class='n'><a href='' onclick='return top.nick_totext("+tempm1[1]+",\""+tempm1[0]+"\")' class=lz title='Вставить ник в сообщение'>«</a></td>";
tmpdocnick=tmpdocnick+"<td class='n'><a href='' onclick='return top.privat_on("+tempm1[1]+", \""+tempm1[0]+"\")' class=l"+temp1+" title='"+temp4+"Нажатие на ник = приват.'"+temp3+">"+tempm1[0]+"</a></td>";
}
tmpdocnick=tmpdocnick+"<td class='n'>"+temp2+"</td>";
temp2=tempm1[9];
temp3=temp2.substring(0, 1);
temp4="s";
if (temp3 == "-"){temp4="s0"; temp2=temp2.substring(1, 20);}
if (temp3 == "+"){temp4="s1"; temp2=temp2.substring(1, 20);}
if (temp3 == "*"){temp4="s2"; temp2=temp2.substring(1, 20);}
if (temp3 == "="){temp4="s3"; temp2=temp2.substring(1, 20);}
if (mySTATUS >0){temp2="<a href='' onclick='return top.adbs("+tempm1[1]+")' class='"+temp4+"'>"+temp2+"</a>";}
tmpdocnick=tmpdocnick+"<td class='"+temp4+"' title='"+tempm1[2]+"'><nobr>"+temp2+"<nobr></td></tr>\n";
if (myCANAL ==0){docnick=docnick+tmpdocnick;}else{if (tempm1[4] ==myCANAL){docnick=docnick+tmpdocnick;}else{docnickN=docnickN+tmpdocnick;}}
} // for (var n=0; n<Nicks.length; n++)
if (myCANAL !=0){
temp2=allcanal[myCANAL];
if (docnick){docnick="<table width='100%' border=0 cellspacing=1 cellpadding=3><tr><td width=8><img width=8 height=1></td><td width=135><img width=135 height=1></td><td width=8><img width=8 height=1></td><td width=80><img width=80 height=1></td></tr>\n"+docnick+"\n</table>\n";}else{docnick="<div style='MARGIN: 6px;'>Нет никто :(</div>\n";}
if (docnickN){docnickN="<table width='100%' border=0 cellspacing=1 cellpadding=3><tr><td width=8><img width=8 height=1></td><td width=135><img width=135 height=1></td><td width=8><img width=8 height=1></td><td width=80><img width=80 height=1></td></tr>\n"+docnickN+"\n</table>\n";}else{docnickN="<div style='MARGIN: 6px;'>Нет никто :(</div>\n";}
docnick="<h3>"+temp2+":</h3>\n"+docnick+"<BR><h3>Другие каналы:</h3>\n"+docnickN+"\n";
}else{
docnick="<table width='100%' border=0 cellspacing=1 cellpadding=3><tr><td width=8><img width=8 height=1></td><td width=135><img width=135 height=1></td><td width=8><img width=8 height=1></td><td width=80><img width=80 height=1></td></tr>\n"+docnick+"\n</table>";
}
} // if (Nicks.length)
top.frames["chn"].document.all["con"].innerHTML=docnick;
} // function printnick()
// --- EN--- ФУНКЦИИ ДОБАВЛЕНИЯ И ОБНОВЛЕНИЯ СПИСКА НИКОВ ---------------------