MPCHAT - CMS хостинг чатов для профессионалов
79   •   Посмотреть все темы

Готовые решения для чатов (новая версия без фреймов)


458
ridz @ridz
В разработке ...
458
ridz @ridz
[b]Просмотр веб-камеры с подтверждением[/b] по теме [url=https://forum.vmeste.eu/viewtopic.php?pid=270867#p270867]Вебкамеры в чат (только для платников с внесенным взносом)[/url]
Для статуса 98 [color=blue]синее[/color]
/* Включаем вебкамеры, прописываем статус 99 и загружаем модуль */
var webcam=1;
stn2[99] ="<img src=http://mpchat.com/blank/img/status/webcam.gif title='нажмите для просмотра вещания' style='border:0;'>";
icqtxt[99]='меняю статус на -> вещаю <img src=http://mpchat.com/blank/img/status/webcam.gif>';
[color=blue]stn2[98] ="<img src=http://mpchat.com/blank/img/status/webcam.gif title='нажмите для просмотра вещания' style='border:0;'>";
icqtxt[98]='меняю статус на -> вещаю для всех<img src=http://mpchat.com/blank/img/status/webcam.gif>';
[/color]

document.write("<"+"script src=http://mpchat.com/blank/webcam.js></"+"script>");




В селектор статусов

[quote][color=blue]<script>if(webcam) document.write("<option value=98>вещаю для всех");</script>[/color][/quote]
Админка -=Модерация=- Скрипты в чате - /* [Функции - формирования никлиста] */ /* Добавление ника в таблицу участников */
[quote]if(webcam) {
if(stat2==99[color=blue]||stat2==98[/color]) {
[color=green]
if( admin=='1'[color=blue]||stat2==98[/color]) icqst="<a href=# onclick='loadvideo(\"webcam"+nick+"\",\""+webcamhost+"\",\""+nick+"\",0);return false;'>"+icqst+"</a>";

else [/color] [color=red]icqst="<a href=# onclick='parent.hidden.location.href = \"index.php?inc=write&"+ parent.yourkey+"&text=/privat "+ nick +" webcam_access\";return false;'>"+icqst+"</a>"; [/color]
if(nick==mynick && loaded) loadvideo("mywebcam",webcamhost,nick,1);
}
else if(nick==mynick && loaded) loadvideo("mywebcam","");
}[/quote]
Добавлено [color=green]зелёным[/color] просмотр вещания без подтверждения для админов -- ставить по желанию
Р.S. Нарушением тайны связи признаётся ознакомление с сообщением какого-либо лица кроме отправителя и получателя )))
[color=blue]Синим[/color] добавлено вещаю без подтверждения

Далее /* [Функция - вывода сообщений и команд] */


[quote][color=red]if(tonick==mynick) {
text = text.replace("webcam_ok","<a href=# onclick='parent.loadvideo(\"webcam"+nick+"\",\""+webcamhost+"\",\""+nick+"\",0);return false;'>Нажмите для просмотра</a>");
text = text.replace("webcam_access","Разрешить просмотр <a href=# onclick='parent.hidden.location.href = \"index.php?inc=write&"+ parent.yourkey+"&text=/privat "+ nick +" webcam_ok\";return false;'>да</a>/<a href=# onclick='parent.hidden.location.href = \"index.php?inc=write&"+ parent.yourkey+"&text=/privat "+ nick +" webcam_no\";return false;'>нет</a>?")}
else {text = text.replace("webcam_access","Разрешите просмотр?");
text = text.replace("webcam_ok","Просмотр разрешаю");
};
text = text.replace("webcam_no","Просмотр отклонён");[/color]


/* Добавление граф ников, градиента и формат времени */[/quote]
Поставить/заменить отмеченное [color=red]красным[/color]!


Отредактировано ridz - 29.05.2011
458
ridz @ridz
[b]Автоматическое Создание/Скрытие приватного фрейма[/b]
Админка -=Шаблоны=- Чат внутри
Заменить
[quote]<script><!--
/* Показываем фрейм привата если включен */
if(privatok==1) {
var obj1=document.getElementById("leftdiv");
var obj2=document.getElementById("privatdiv");
obj1.style.bottom=(parseInt(obj1.style.bottom)+parseInt(obj2.style.height))+5+"px";
obj2.style.display="block";
}
// --></script>[/quote]
на

[quote]<script><!--
/* Показываем фрейм привата если включен */
var leftdiv_bottom;
function do_privat() {
var obj1 = document.getElementById("leftdiv");
var obj2 = document.getElementById("privatdiv");
if (!leftdiv_bottom) leftdiv_bottom = parseInt(obj1.style.bottom);
if (privatok == 1) {
obj1.style.bottom = (parseInt(obj1.style.bottom) + parseInt(obj2.style.height)) + 5 + "px";
obj2.style.display = "block";
} else {
obj1.style.bottom = leftdiv_bottom + "px";
obj2.style.display = "none";
}
}
do_privat()
// --></script>[/quote]
Кнопка в любое место
[quote]<input type="button" class="ok" name="" value="privat" onclick="parent.privatok^=1;parent.do_privat();parent.loadframes();"/>[/quote]
или ссылка
[quote]<a href=# onclick="parent.privatok^=1;parent.do_privat();parent.loadframes();return false;" title='Создание/Скрытие приватного фрейма'>Приват</a>[/quote]
458
ridz @ridz
[b]Запрет на вещание для незарегистрированных или по статусу[/b]
заменить/дополнить скрипт в селекторе выбора статуса
запрет на статусы прописать через && и !=
[quote]<script>if(webcam[color=red]&&mystatus != '0' &&mystatus != '1' [/color]) document.write("<option value=99>вещаю");</script>[/quote]
или запрет для незарегистрированных
[quote]<script>if(webcam&&regist== '1' ) document.write("<option value=99>вещаю");</script>[/quote]
тоже самое и для фреймовой системы но дополняя parent -- parent.webcam parent.regist parent.mystatus
458
ridz @ridz
[b]Использование одного field для установки и запоминания состояний множеста чекбоксов и радиобутонов[/b] (идея [url=https://forum.vmeste.eu/profile.php?id=4909]BETEPAH[/url])
Для всех версий чата.
Добавить в таблицу шаблона настроек код
[quote]<tr id="stat"><td colspan="2">
<input name="field15" type="hidden" value="%field15%"/>
<input type="radio" name="name_r" value="0" />1 год<br />
<input type="radio" name="name_r" value="1" />2 года<br />
<input type="radio" name="name_r" value="2" />3 года<br />
<input type="checkbox" name="" />Русский<br />
<input type="checkbox" name="" />Украинский<br />
<input type="checkbox" name="" />Немецкий<br />
<input type="radio" name="name_r1" value="0" />да<br />
<input type="radio" name="name_r1" value="1" />нет<br />
<input type="radio" name="name_r1" value="2" />незнаю<br />

</td></tr>

<script type="text/javascript">
var stat = document.getElementById('stat'),
input = stat.getElementsByTagName('input'),
check = input[0].value;
for (var i = 0; i < check.length; i++) {
input[i + 1].checked = (check.charAt(i) == '1') ? !0 : !1;
}
[color=red]stat.onclick = function () {
check = "";
for (var i = 1; i < input.length; i++) {
check += input[i].checked ? '1' : '0'
}
input[0].value = check
}[/color]</script>[/quote]
Тоже самое добавить в шаблон анкеты в таблицу в удобное для вас место, [color=red]красное[/color] желательно убрать .
Номер фиелда можно менять если 15 уже занят.
В радиобутонах незабывайте указывать разные имена для соотвествующей группы, но одинаковые внутри группы.
Пример возможного оформления
[img]http://imgs.su/users/49702/1306913392.jpg[/img]
458
ridz @ridz
[b]Запрет вещания во всех комнатах кроме одной, двух и тд [/b]

Админка -=Модерация=- Скрипты в чате - /* [Функции - нижнего фрейма] */ добавить [color=red]красное[/color]
[quote]/* Функция ручного изменения статуса */
function setstatus(status) {
[color=red]if (myroom!=0&&(status==99||status==98)) status = 0;// добавлено запрет вещания кроме комнаты 0[/color]
laststatus=status;
parent.hidden.location.href='index.php?inc=write&'+parent.yourkey+'&text=/status '+status+'&r='+Math.random();
document.getElementsByName("setstatus")[0].value=status;
document.fmsg.text0.focus();
}

/* Функция ручного изменения комнаты */
function setmyroom(room) {
if(myroom==room) return false;
if(!parent.rooms[room][3]) {alert('У Вас нет доступа в эту комнату!'); return false;}
[color=red]setstatus(0);// добавлено сброс статуса при переходе по комнатам[/color]
parent.hidden.location.href='index.php?inc=write&'+parent.yourkey+'&text=/room '+room+'&r='+Math.random();
gettime=new Date().getTime();
document.fmsg.text0.focus();
}[/quote]
Пример строки для запрета вещания кроме комнаты 0 и комнаты 3
[quote]if (myroom!=0&&[color=red]myroom!=3&&[/color](status==99||status==98)) status = 0;// добавлено запрет вещания кроме комнаты 0 комнаты 3[/quote]
Точно также можно добавить [color=red]эти[/color] строки для фреймовой системы.
2970
удалён @Foggy
[color=gray]Продолжим тему...[/color]

[b]Только сам невидимка видит свой ник в никлисте, больше никто.[/b]
Для всех версий чатов.
Будет не только виден ник, будут видны все действия, разумеется, только самому инвизеру.

находишь в скриптах /* скрыть ник невидимки */, там заменяешь строку
[code]if(invisible[nick]) return;[/code]
на следующую
[code]if (invisible[nick] && nick!=mynick) return;[/code]
Далее добавляем иконку себе, чтоб знать, что инвиз работает. ПОСЛЕ
[code]set_nick=set_nick+set_love+set_clan;[/code]
добавляем
[code]if(invisible[nick]) set_nick+="<img src='https://cdn0.iconfinder.com/data/icons/fatcow/16/qip_invisible.png' width='16' height='16' alt='invisible'>"[/code]
Вставить, разумеется, можно любую другую картинку. Можно сделать иной класс для всей строки (это уже иначе реализуется) или как угодно иначе выделить свой ник.

[b]Админ видит всех невидимок не заходя в любую из админок[/b]
по сути это может быть кто угодно кроме админа.
[code]if (invisible[nick] && nick!=mynick && mynick!='Foggy') return;[/code]
заменяете Foggy на свой ник. Если надо, чтоб модеры видели инвизеров, заменяем mynick!='Foggy' на admin==0
2609
Сергей @Pegass
[b]Звук на сообщения[/b]

[b][i]-=Чат внутри=-[/i][/b]
сразу после <body>
добавляем [code]<audio id="Sound"></audio>[/code]
и в нужное место добавить чекбокс
Если по умолчанию звук включен то такой
[code]<input type=checkbox checked="checked" onclick="zvukmsgno=this.checked?1:0;" title="вкл/откл звуки входящих сообщений" >[/code]
если выключен такой
[code]<input type=checkbox onclick="zvukmsgno=this.checked?1:0;" title="вкл/откл звуки входящих сообщений" >[/code]
с запоминанием через куки - такой
[code]<script language="JavaScript" type="text/javascript">
var checked='';
if (getcookie("zvukmsg")) {checked=getcookie("zvukmsg")==1?"checked":"";}
else checked='checked';
document.write('<input type=checkbox name="zvukmsg" onclick="if(this.checked) {setcookie(this.name,1);zvukmsgno=1;} else {setcookie(this.name,0);zvukmsgno=0;}" title="вкл/откл звуки входящих сообщений" '+checked+'>')
</script>[/code]
[b][i]-=Скрипты в чате=-[/i][/b]

[i]/* [Функции - общие] */[/i]

[code]var zvukmsgno=1; //для кнопки вкл/откл по умол 1- вкл 0 -выкл
if (getcookie("zvukmsg")) zvukmsgno=getcookie("zvukmsg");

function sound_msg_play(cmd)
{

if(zvukmsgno!=1 || !loaded) return;
var sound='';
switch(cmd)
{
case 0: sound='link_to_mp3'; break;
case 1: sound='link_to_mp3'; break;
case 2: sound='link_to_mp3'; break;
case 3: sound='link_to_mp3'; break;
case 4: sound='link_to_mp3'; break;
case 5: sound='link_to_mp3'; break;
case 6: sound='link_to_mp3'; break;
case 7: sound='link_to_mp3'; break;
case 8: sound='link_to_mp3'; break;
case 9: sound='link_to_mp3'; break;
case 10: sound='link_to_mp3'; break;
case 11: sound='link_to_mp3'; break;
default: return;
}

var t=document.getElementById("Sound");
if(t){
t.src=sound+"?"+(new Date).getTime();
t.play();
}


}[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Вывод простого сообщения */
if(cmd==0) {
symbol=symbols[0];if(nick==mynick) symbol=symbols[1];if(tonick==mynick || text.split(" "+mynick+":").length>1) symbol=symbols[2];[/code]
[color=red]меняем на[/color][code]/* Вывод простого сообщения */
if(cmd==0) {
symbol=symbols[0];if(nick==mynick) symbol=symbols[1];if(tonick==mynick || text.split(" "+mynick+":").length>1) {symbol=symbols[2];if(nick!=nick_r)sound_msg_play(cmd);}[/code]
[b] [/b]
[color=blue]ищем[/color]
[code] if(nick==nick_r && loaded==1) {window.setTimeout("wr('"+towr.split("'").join("\\'")+"');",delay_r*1000);}[/code]
[color=red]меняем на[/color][code]if(nick==nick_r && loaded==1) {window.setTimeout("wr('"+towr.split("'").join("\\'")+"');if('"+tonick+"'=='"+mynick+"')sound_msg_play(0);",delay_r*1000);}[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]if(cmd==1 && privatok==1) {var obj=document.getElementById("privatdiv"); obj.innerHTML+="<div>"+towr+"</div>";obj.scrollTop=1000000;}[/code]
[color=red]меняем на[/color]
[code]if(cmd==1 && privatok==1) {var obj=document.getElementById("privatdiv"); var newDiv = document.createElement('div'); newDiv.innerHTML = towr; obj.appendChild(newDiv); obj.scrollTop=1000000;}[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Вывод приватных сообщений */
if(cmd==1 || cmd==2) {
symbol=symbols[0];if(nick==mynick) symbol=symbols[3];if(tonick==mynick) symbol=symbols[4];[/code]
[color=red]меняем на[/color][code]/* Вывод приватных сообщений */
if(cmd==1 || cmd==2) {
symbol=symbols[0];if(nick==mynick) symbol=symbols[3];if(tonick==mynick) {symbol=symbols[4];sound_msg_play(cmd);}[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Вывод выделенного сообщения '/me' или '/msg' */
if(cmd==3) {[/code]
[color=red]меняем на[/color][code]/* Вывод выделенного сообщения '/me' или '/msg' */
if(cmd==3) {sound_msg_play(cmd);[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Вывод сообщения о вызове и сам вызов окном с музыкой '/call nick' */
if(cmd==4) {
if(tonick==mynick && loaded==1) alert("Вас вызывает в чат "+nick+"!");[/code]
[color=red]меняем на[/color][code]/* Вывод сообщения о вызове и сам вызов окном с музыкой '/call nick' */
if(cmd==4) {
if(tonick==mynick && loaded==1){sound_msg_play(cmd); setTimeout("alert('Вас вызывает в чат "+nick+"!')",1000);}[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Вывод сообщения об удалении '/kill nick' и сам процесс */
if(cmd==5) {[/code]
[color=red]меняем на[/color][code]/* Вывод сообщения об удалении '/kill nick' и сам процесс */
if(cmd==5) {sound_msg_play(cmd);[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Вывод входа юзера в чат и добавление в нклист через add() */
if(cmd==6) {
if(inchat=='0' && room==myroom) {[/code]
[color=red]меняем на[/color][code]/* Вывод входа юзера в чат и добавление в нклист через add() */
if(cmd==6) {
if(inchat=='0' && room==myroom) {sound_msg_play(cmd);[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Вывод выхода юзера из чата и удаление из никлиста через del() */
if(cmd==7) {
if(inchat=='1' && room==myroom) {[/code]
[color=red]меняем на[/color][code]/* Вывод выхода юзера из чата и удаление из никлиста через del() */
if(cmd==7) {
if(inchat=='1' && room==myroom) {sound_msg_play(cmd);[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Сообщение о смене статуса участника и его изменение */
if(cmd==8) {
status=text;
for(var i=0;i<us.length;i++) if(us[i]!= null && us[i][0]==nick) {
us[i][5]=status;
if(icqtxt[status]) wr(set_time+"<font size=2 color="+colornick+"><b>"+set_nick+":</b></font> <i>"+icqtxt[status]+"</i><br>");[/code]
[color=red]меняем на[/color][code]/* Сообщение о смене статуса участника и его изменение */
if(cmd==8) {
status=text;
for(var i=0;i<us.length;i++) if(us[i]!= null && us[i][0]==nick) {
us[i][5]=status;
if(icqtxt[status]) {sound_msg_play(cmd);wr(set_time+"<font size=2 color="+colornick+"><b>"+set_nick+":</b></font> <i>"+icqtxt[status]+"</i><br>");}[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Функция обработки сообщений викторины */
if(cmd==9) {
if(text=="end") text1="это слово уже угаданно или время вышло";
else if(text=="") text1="вы не угадали это слово";
else {[/code]
[color=red]меняем на[/color][code]/* Функция обработки сообщений викторины */
if(cmd==9) {
if(text=="end") text1="это слово уже угаданно или время вышло";
else if(text=="") text1="вы не угадали это слово";
else {sound_msg_play(cmd);[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]/* Функция перехода в комнаты */
if(cmd==10) {[/code]
[color=red]меняем на[/color][code]/* Функция перехода в комнаты */
if(cmd==10) {sound_msg_play(cmd);[/code]
[b] [/b]
[color=blue]ищем[/color]
[code]if(cmd==11) {[/code]
[color=red]меняем на[/color][code]if(cmd==11) {sound_msg_play(cmd);[/code]
2609
Сергей @Pegass
[b]Автоматическое уменьшение размера загружаемых изображений в чат через кнопку обзор[/b] (если размер превышает заданный вами)
[color=red][b]не актуально для современных браузеров[/b][/color]
[color=black][b]1часть[/b][/color] В скрипты чата
в /* [Функции - общие] */
добавить
[quote]/* Функция изменения загружаемой картинки */
[color=red]var id_img = 0; [/color]
function imgminimum(obj){
var imgmax = 300; // максимальный размер картинки
var h = obj.height;
var w = obj.width;
if (h>imgmax||w>imgmax){if (h>w) {obj.height=imgmax}else {obj.width=imgmax}}; 
[color=red]if (!obj.id){var scr=document.getElementById("leftdiv");
scr.scrollTop=scr.scrollHeight;
obj.id=id_img++;}[/color]}[/quote]
[color=red]Красным[/color] добавлен скролинг(прокрутка лога сообщений вниз) после загрузки картинки

[color=black][b]2 часть[/b][/color] И после
/* [Функция - вывода сообщений и команд] */

var pu = new Array;
var pt = new Array;
function f(room,cmd,nick,tonick,text,time,colornick,color,var9,var10,var11,var12,var13,var14,userid) {
if(ign_ok(nick) && cmd!=6 && cmd!=7) return;
if(nick==nick_r && room!=room_r) return;

добавить строку

[quote]text=text.replace("<img src=tmp","<img onload=imgminimum(this) src=tmp");[/quote]
Картинка будет в логе пропорциональна и размер по ширине и высоте не превысит указанный вами.

или добавить так

[quote]text=text.replace(/.br..img.src.(tmp.(.+\.(gif|jpg|jpeg|bmp|png|tif|tiff))).border.0..br./igm, "<img onload=imgminimum(this) src=$1 border=0>");[/quote]
тогда картинка будет в одной строке с ником.



ЗЫ ответы на вопросы
1- max-hight, max-width не особо кросбраузерно)))
2 - использование up - надо подумать, это ж древний скрипт
2609
Сергей @Pegass
[b]Универсальный тег [media] для загрузки картинок музыки и видео с различных сервисов (от ВЕТЕРАН [url=https://forum.vmeste.eu/viewtopic.php?pid=296634#p296634]оригинальный пост[/url])[/b]
[color=red]Внимание, данный скрипт может быть использован против вас[/color]
В Администрация - Скрипты в чате.
[b] /* [НАСТРОЙКИ] */[/b]
[code] /* 1 - картинки не отображаются, 0 - отображаются */
var img_no = 0;[/code]
[b] /* [Функции - общие] */[/b] - если не ставили предыдущее решение
[code] /* Функция изменения загружаемой картинки */
var id_img = 0;
function imgminimum(obj){
var imgmax = 300; // максимальный размер картинки
var h = obj.height;
var w = obj.width;
if (h>imgmax||w>imgmax){if (h>w) {obj.height=imgmax}else {obj.width=imgmax}};
if (!obj.id){var scr=document.getElementById("leftdiv");
scr.scrollTop=scr.scrollHeight;
obj.id=id_img++;}}[/code]
[b]/* [Функция - вывода сообщений и команд] */[/b]
после
var pu = new Array;
var pt = new Array;
function f(room,cmd,nick,tonick,text,time,colornick,color,var9,var10,var11,var12,var13,var14,userid) {
if(ign_ok(nick) && cmd!=6 && cmd!=7) return;
if(nick==nick_r && room!=room_r) return;

[code] // начало обработки тега media
if (img_no == 0) {
text = text.replace(/\[media\]((?:http|https):\/\/(.*?)\.(gif|jpg|jpeg|bmp|png|tif|tiff))\[\/media\]/mig, '<br><a href="$1" target="_blank" ><img onload=parent.imgminimum(this) src=$1 title="открыть в новом окне" alt="" border=0></a> ')
} else {
text = text.replace(/\[media\]((?:http|https):\/\/(.*?)\.(gif|jpg|jpeg|bmp|png|tif|tiff))\[\/media\]/mig, '<a href="$1" target=_blank><img src=http://mpchat.com/blank/img/ftp/img.gif border=0 alt=""> $2.$3</a>')
};

if (img_no == 1) {
text = text.replace(/\[media\](http:\/\/(.*?))\[\/media\]/mig, '<a href="$1" target=_blank>$1</a>')
};

text = text.replace(/\[media\](http:\/\/zoom\.it\/(.*?))\[\/media\]/mig, '<script src="$1.js?width=auto&height=400px"></script><a href="$1" target="_blank" title="ссылка откроется в новом окне">link</a>');

text = text.replace(/\[media\](http:\/\/www\.divshare\.com\/download\/(.*?))\[\/media\]/mig, '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="335" height="28" id="divplaylist">' + '<param name="movie" value="http://www.divshare.com/flash/playlist?myId=$2" />' + '<param name="allowScriptAccess" value="always" />' + '<embed src="http://www.divshare.com/flash/playlist?myId=$2" width="335" height="28" allowScriptAccess="always" name="divplaylist" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>' + '</object>');

text = text.replace(/\[media\](http:\/\/prostopleer\.com\/tracks\/(.*?))\[\/media\]/mig, '<object width="411" height="28"><param name="movie" value="http://embed.prostopleer.com/track?id=$2"></param><embed src="http://embed.prostopleer.com/track?id=$2" type="application/x-shockwave-flash" width="411" height="28"></embed></object>');

text = text.replace(/\[media\](http:\/\/pleer\.com\/tracks\/(.*?))\[\/media\]/mig, '<object width="411" height="28"><param name="wmode" value="transparent"><param name="movie" value="http://embed.prostopleer.com/track?id=$2"></param><embed src="http://embed.prostopleer.com/track?id=$2" wmode="transparent" type="application/x-shockwave-flash" width="411" height="28"></embed></object>');

text = text.replace(/\[media\](http:\/\/muzebra\.com\/l\/(.*?)\/)\[\/media\]/mig, '<object width="395" height="42"><param name="movie" value="http://embed.muzebra.com/player?id=$2"></param><embed src="http://embed.muzebra.com/player?id=$2" type="application/x-shockwave-flash" width="395" height="42"></embed><param name="wmode" value="transparent"/><param name="scale" value="noscale" /></object>');

text = text.replace(/\[media\]http:\/\/music\.yandex\.ru\/#!\/track\/(.*?)\/album\/(.*?)\[\/media\]/mig, '<object width="350" height="28"><param name="muz" value="http://music.yandex.ru/embed/$1/track.swf"/><param value="noscale" name="scale"/><param value="bg-color=%23D8D8D8&amp;text-color=%23555555&amp;hover-text-color=%23000000" name="flashvars"/><embed type="application/x-shockwave-flash" width="350" height="28" scale="noscale" flashvars="bg-color=%23D8D8D8&amp;text-color=%23555555&amp;hover-text-color=%23000000" src="http://music.yandex.ru/embed/$1/track.swf"/></object>');

text = text.replace(/\[media\](http:\/\/.*mp3)\[\/media\]/mig, '<embed type="application/x-shockwave-flash" src="http://mpchat.com/blank/player.swf" allowfullscreen="false" flashvars="file=$1&autostart=false" width="250" height="20">');

var vidregxp = []; //через запятую - название, регэксп, реплэйс, метод внедрения (1 - embed, 2 - iframe, 3 - embed через x-mplayer2)
vidregxp[0] = ["videofile", "(http:\/\/(.*\\.)(rmi|wmv|midi|mid|mpg|wav|snd|wma|mpeg|avi|mpe|m1v|mpa|aifc|aiff|au|aif|swf))", "$1", 3];
vidregxp[1] = ["flv", "(http:\/\/.*\\.flv)", '"http://mpchat.com/blank/player.swf" flashvars="file=$1&autostart=false"', 1];
vidregxp[2] = ["rutube.ru", "(http:\/\/)(rutube\.ru\/)\\S+\\?v=(\\S+)", "$1video.$2$3", 1];
vidregxp[3] = ["youtube.com", "(https?:\/\/www\.youtube\.com\/)\\S+(\\?v|&amp;v)=(\\S+)", "$1v/$3&hl=ru_RU&fs=1", 1];
vidregxp[4] = ["youtu.be", "(https?:\/\/youtu\.be\/)(\\S+)", "http://www.youtube.com/embed/$2", 2];
vidregxp[5] = ["lovi.tv", "(http:\/\/lovi\.tv\/video\/)\\S+?Code=(\\S+)", "$1sharer.php?Code=$2&Width=280&Height=224", 2];
vidregxp[6] = ["lovi.tv2", "(http:\/\/loovi\.tv\/)video\/(\\S+)\/", "$1flash/player5.swf?config=/video/config.php?Code=$2", 1];
vidregxp[7] = ["vimeo.com", "(http:\/\/vimeo\.com\/)(\\S+)", "$1moogaloop.swf?clip_id=$2&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1", 1];
vidregxp[8] = ["metacafe.com", "(http:\/\/www\.metacafe\.com\/)watch(\\S+)\/?", "$1fplayer$2.swf", 1];
vidregxp[9] = ["vids.myspace.com", "http:\/\/vids\.(myspace\.com\/)\\S+videoid=(\\S+)", "http://mediaservices.$1services/media/embed.aspx/m=$2,t=1,mt=video", 1];
vidregxp[10] = ["video.google.com", "(http:\/\/video\.google\.com\/)\\S+docid=(\\S+)&\\S+", "$1googleplayer.swf?docid=$2&hl=ru&fs=true", 1];
vidregxp[11] = ["dailymotion.com", "(http:\/\/www\.dailymotion\.com\/)video\/([^_+]+)\\S+", "$1swf/$2", 1];
vidregxp[12] = ["5min.com", "http:\/\/www\.(5min\.com\/)\\S+-(\\d+)", "http://embed.$1$2/", 1];
vidregxp[13] = ["video.mail.ru", "http:\/\/(video\.mail\.ru)\/(\\S+)\/(\\S+)\/(\\S+)\/(\\S+)\.html", "http://img.mail.ru/r/video2/player_v2.swf?par=http://content.$1/$2/$3/$4/$$$5$$0$39&imaginehost=$1&perlhost=$1&alias=$2&username=$3&albumid=$4&id=$5&catalogurl=http://video.mail.ru/themes/clips", 1];
vidregxp[14] = ["gametrailers.com", "(http:\/\/www\.gametrailers\.com)\/\\S+\/(\\d+)", "$1/remote_wrap.php?umid=$2", 1];
vidregxp[15] = ["video.yahoo.com", "(http:\/\/video\.yahoo\.com)\/watch\/(\\d+)\/(\\d+)", '"http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" flashVars="id=$3&vid=$2&lang=en-us&intl=us"', 1];
vidregxp[16] = ["video.libero.it", "(http:\/\/video\.libero\.it)\/app\/\\S+id=(\\S+)", '"$1/static/swf/eltvplayer.swf?id=$2.flv&ap=0"', 1];
vidregxp[17] = ["play.ukr.net", "(http:\/\/play\.ukr\.net)\/videos\/show\/(\\S+)\/", '"$1/player.swf?key=$2&StopAsking=0&self=0"', 1];
vidregxp[18] = ["video.online.ua", "(http:\/\/video\.online\.ua)\/(\\S+)\/", '"http://i.online.ua/mplayer/player_logo.swf?file=$1/playlist/$2.xml&autostart=false&javascriptid=media_player&enablejs=true"', 1];
vidregxp[19] = ["vision.rambler.ru", "(http:\/\/vision\.rambler\.ru)\/users\/(\\S+)\/", '"$1/i/e.swf?id=$2&logo=1&where=home"', 1];
vidregxp[20] = ["video.bigmir.net", "(http:\/\/video\.bigmir\.net)\/show\/(\\S+)\/", '"$1/extplayer/$2/"', 1];
vidregxp[21] = ["sibnet.ru", "http:\/\/(video\.sibnet\.ru)\/\\S*?video(\\d+)\/", '"http://$1/mediaplayer.swf" flashvars="file=http%3A%2F%2F$1%2Fupload%2Fvideo%2F$2.flv&amp;image=http%3A%2F%2F$1%2Fupload%2Fcover%2Fvideo_$2_0.jpg"', 1];
vidregxp[22] = ["irc.lv", "(http:\/\/irc\.lv)\/video\\?(id=.*)", "$1/player.swf?$2", 1];
vidregxp[23] = ["veoh.com", "(http:\/\/www\.veoh\.com\/)\\S+watch\/?%?3?D?(v\\S+)", "$1static/swf/webplayer/WebPlayer.swf?version=AFrontend.5.4.9.1006&permalinkId=$2&player=videodetailsembedded&videoAutoPlay=0&id=anonymous", 1];
vidregxp[24] = ["gamestar.de", "(http:\/\/www\.gamestar\.de\/)\\S+=(\\d+)", "$1emb/player.swf?config=$1emb/getVideoData.cfm?vid=$2", 1];
vidregxp[25] = ["spike.com", "(http:\/\/www\.spike\.com\/)video\/\\S+\/(\\S+)", '"$1efp" flashvars="flvbaseclip=$2"', 1];
vidregxp[26] = ["sostav.ru", "(http:\/\/(?:www\.)?videosostav\.ru\/)video\/(\\S+)\/", "$1swf/hplayer.swf?fname=$2", 1];
vidregxp[27] = ["vkontakte.ru", "(https?:\/\/vkontakte\.ru\/video\\S+hash=\\w+)", "$1", 2];
vidregxp[28] = ["vk.com", "(https?:\/\/vk\.com\/video\\S+hash=\\w+)", "$1", 2];
vidregxp[29] = ["smotri.com", "http:\/\/smotri\.com\/video\/\\S+id=(\\S+)", "http://pics.smotri.com/player.swf?file=$1&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color.xml&xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml", 1];

t = text.split('[media]');
if (t[1]) {
var viwidth = 280, //ширина видеоокна
viheight = 224, //высота видеоокна
viwindow = document.getElementById('mediains');

t2 = t[1].split('[/media]');
if (t2[0]) {
var src = t2[0];
var expr;
for (var i = 0; i < vidregxp.length; i++) {
expr = new RegExp(vidregxp[i][1]);
if (src.match(expr)) {
src = src.replace(expr, vidregxp[i][2]);
viwindow.style.display = 'block';
if (vidregxp[i][3] == 1) { //грузим в embed через x-shockwave-flash
text = text.replace('[media]' + t2[0] + '[/media]', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">Видеоролик загружен!</a>');
viwindow.innerHTML = '<embed width=' + viwidth + ' height=' + viheight + ' src=' + src + ' type="application/x-shockwave-flash" allowscriptaccess=always allowfullscreen=true></embed>';
}
if (vidregxp[i][3] == 2) { //грузим в iframe
text = text.replace('[media]' + t2[0] + '[/media]', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">Видеоролик загружен!</a>');
viwindow.innerHTML = '<iframe width=' + viwidth + ' height=' + viheight + ' src=' + src + ' frameborder=0 allowfullscreen></iframe>';
}
if (vidregxp[i][3] == 3) { //грузим в embed через x-mplayer2
text = text.replace('[media]' + t2[0] + '[/media]', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">Видеоролик загружен!</a>');
viwindow.innerHTML = '<embed width=' + viwidth + ' height=' + viheight + ' src=' + src + ' type="application/x-mplayer2" allowscriptaccess=always allowfullscreen=true></embed>';
}
}
}
text = text.replace('[media]' + t2[0] + '[/media]', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">' + t2[0] + '</a>');
} else {
text = 'Просмотр выключен';
viwindow.innerHTML = '';
viwindow.style.display = 'none';
}
}
// конец обработки тега media
t = text.split('&lt;iframe src=&quot;');
if (t[1]) {
t2 = t[1].split('&quot; width=&quot;607&quot; height=&quot;360&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;');
if (t2[0].substr(0, 19) == 'http://vk.com/video' || t2[0].substr(0, 20) == 'https://vk.com/video') {
text = text.replace('&lt;iframe src=&quot;' + t2[0] + '&quot; width=&quot;607&quot; height=&quot;360&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">Видеоролик загружен!</a> ');
document.getElementById('mediains').innerHTML = '<iframe src="' + t2[0] + '" width="280" height="224" frameborder="0"></iframe>';
}
}[/code]
Окно видео-вывода ставится обычно под ник-листом <div id=users></div>[b]сюда[/b]
[quote]<div id="mediains"></div>[/quote]
Кнопку тега удобнее всего ставить рядом со строкой сообщения (спасибо, ridz):
[quote]<script>
function htags(t1,t2){
var mess=document.fmsg.text0.value;
if(mess.search("http")!=-1){mess = mess.replace(/(http\S+)/mig, " "+t1+"$1"+t2+" ")} else {mess+=" "+t1+t2+" "};
document.fmsg.text0.value=mess;
document.fmsg.text0.focus();
}
</script>[/quote]
Оформление - зависит от вашей фантазии, основное - это код онклик. У меня так
[quote]<div class="abcabc_in" style="cursor:pointer" [color=blue]onclick="htags('[media]','[/media]')"[/color] title="Показать в чате картинку, видео или музыку"></div>[/quote]
2609
Сергей @Pegass
[b]как сделать подсчет сообщений написанных в чате с выводом картинкой на титульнике[/b]
[code]<script>
var x=i_msg;
var i = "";
do
{
x=x/10;
i="<img src='http://radiofull.ru/Style_god/img/numb/"+(x*10-Math.floor(x)*10)+".png'>"+i;
x=Math.floor(x);
}
while (x > 0);
document.write(i);
</script>[/code]
В папке 'http://radiofull.ru/Style_god/img/numb лежат картинки 1.png 2.png .... 0.png
2609
Сергей @Pegass
[b]спойлер для форума[/b]

в head
[code]<script>
function spoiler(o)
{
var obj=o.childNodes[1].style; var obj2=o.childNodes[0].childNodes[0];
if(obj.display=='block')
{
obj.display='none';
obj2.innerHTML='<img src=http://radiofull.ru/Style_god/img/forum/plus.png width=10 height=10>';
}
else
{
obj.display='block';
obj2.innerHTML='<img src=http://radiofull.ru/Style_god/img/forum/minus.png width=10 height=10>';
}
}
</script>[/code]
в соответствующие места кода

[code]etags[i]=new Array(/\[spoiler=([^\] ]{2,30})\](.*?)\[\/spoiler\]/g,'<blockquote style="margin-bottom:0px;padding:5px;"><div class="incqbox" style="cursor:pointer;" onclick="spoiler(this.parentNode); return false;"><span><img src="http://radiofull.ru/Style_god/img/forum/plus.png" width="10" height="10"></span><b> $1</b></div><div style="margin-top: 10px; display: none; ">$2</div></blockquote>',1);i++;

tags+="<input type='button' class='button2' accesskey='c' value='[+]' style='width: 40px' onclick=ftags('[spoiler]','[/spoiler]') title='Код: [spoiler=заголовок]текст под спойлер[/spoiler]'> ";[/code]
2609
Сергей @Pegass
[b]Функция вызова в чат админов и модеров[/b]


Скрипты в чате

[quote][color=green]/* [НАСТРОЙКИ] */[/color]
[color=blue]var alert_mod_replay=0;[/color][/quote]
[quote][color=green]/* Проверка пользовательских команд для простого сообщения */[/color]
if(cmd==0) {

if(text.substr(0,5)=="/ping" && nick == mynick && loaded==1) {
var ping=(new Date().getTime()-gettime)/1000; text="<font color=red><i>ping: "+ping+" sec</i></font> "; }

if(text.substr(0,6)=="/clear" && clearer[nick]) {
if(loaded==1) document.getElementById("leftdiv").innerHTML="";text="очищаю фрейм сообщений";}

if(text.substr(0,7)=="/reload" && reloader[nick]) {
if(loaded==1) parent.location.reload(); text="перезагружаю чат";}

if(text.substr(0,6)=="/alert" && alerter[nick]) {
text=text.substr(text.indexOf(": ")+2);
if(loaded==1 && mynick==tonick) alert(text); if(nick!=mynick) return;
text=tonick+": отправленна команда алерт";}

if(text.substr(0,7)=="/ignore" && ignorer[nick]){
if(tonick && mynick!=tonick && loaded==1) ign_sel(tonick); if(nick!=mynick || !tonick) return;
if(ign_ok(tonick)) text="Вы поставили полный игнор на ник "+tonick; else text="Вы сняли полный игнор с ника "+tonick;
}

[color=blue]if(text.replace(tonick+": ","").substr(0,9)=="/modalert"){
text="Вызываю модераторов"
tonick='';
if(admin==1&& loaded==1 && alert_mod_replay==0) [color=green]//вместо admin==1 можно указать любой статус или несколько статусов mystatus=='3'[/color]
{
alert_mod_replay=1;
window.setTimeout('alert(nick+" вызвал(а) в чат модераторов");',1000);
alert_mod_replay=0;
}
}[/color]

}[/quote]
Чат внутри

[quote]<script>
document.write("<input type=hidden name=nick value="+parent.mynick+">");
document.write("<input type=hidden name=id value="+parent.myid+">");
document.write("<select name=cmd class=text>");
document.write("<option value=''>-=в общем=-");
document.write("<option value='/privat '>приватно");
document.write("<option value='/privat2 '>приват окно");
[color=blue]document.write("<option value='/modalert '>Вызвать модератора");[/color]
if(parent.alerter[parent.mynick]) document.write("<option value='/alert '>алерт-вызов");
if(parent.clearer[parent.mynick]) document.write("<option value='/clear '>очистить");
if(parent.reloader[parent.mynick]) document.write("<option value='/reload '>перезагрузить");
if(parent.ignorer[parent.mynick]) document.write("<option value='/ignore '>полный игнор");
if(parent.admin==1) {
document.write("<option value=''>-=модерация=-");
document.write("<option value='/kick '>кикнуть");
document.write("<option value='/warn '>предупредить");
}
document.write("</select>");
</script>[/quote]
2609
Сергей @Pegass
[b]Викторина в строго отведённой комнате[/b]

[b]-=Скрипты в чате=-[/b]


[i]/* [Функции - нижнего фрейма] */[/i]

добавляем ([color=green]зелёным[/color] - номера комнат с викториной)
[quote]/* комнаты с викториной */
var gameroom= new Array();//для бесполых
gameroom[[color=green]1[/color]]=true;
gameroom[[color=green]5[/color]]=true;
gameroom[[color=green]10[/color]]=true;[/quote]
[i]/* [Функции - нижнего фрейма] */[/i]

[color=red]ищем[/color]
[quote]/* Загружает викторину в верхушку чата */
var gameon=0;
function startgame(){
if(gameon==0){
gameframe.location.href='http://'+engine_host+':'+engine_port+'/?chat='+chatlogin;
gameon=1; document.getElementById('gamediv').style.display="block";
}
else {
gameframe.location.href='start.html';
gameon=0; document.getElementById('gamediv').style.display="none";
}
}[/quote]
[color=blue]меняем на[/color]
[quote]/* Загружает викторину в верхушку чата */
function startgame(dd){
if(dd==1 && gameroom[myroom]){
gameframe.location.href='http://'+engine_host+':'+engine_port+'/?chat='+chatlogin; document.getElementById('gamediv').style.display="block";
}
else {
gameframe.location.href='start.html'; document.getElementById('gamediv').style.display="none";
}
}[/quote]
[i]/* [Подготовка фреймов и загрузка сообщений] */[/i]

[color=blue]добавляем синее[/color]
[quote]function loadframes() {
/* Последняя стадия загрузки */
if(interval) window.clearTimeout(interval);
/* Подготовка фрейма привата */
if(parent.privatok==1) {document.getElementById("privatdiv").innerHTML='';}
/* Обнуление переменных */
loaded=0;
scrolled=0;
/* myhistory=myhistory1;*/
for(var i=0;i<rooms.length;i++) rooms[i][1]=0;
/* Подготовка таблицы никлиста */
uc = 0;
us = new Array();
ucc= new Array();
document.getElementById('users').innerHTML=userlist;
/* Проверка непрерывного соединения */
interval=window.setTimeout(
'if(engine_on!="ajax" && !ajaxon) {wr("<font color=red>Проблема подключения к потоковому движку на порту "+engine_port+". Пробуем подключиться через <b>ajax</b> движок ...</font>"); window.setTimeout("engine_on=\\"ajax\\"; loadframes();",10000);} ' +
'else wr("<font color=red>Не удалось подключиться к движку чата, вероятно Ваш браузер просто не поддерживает новые технологии.<br>Попробуйте использовать новый современный браузер <a href=http://google.com/chrome target=_blank>Google Chrome</a>.</font>");'
,1000*20); /* Время для проверки потокового движка 10 сек */
/* Загрузка движка сообщений */
document.getElementById("leftdiv").innerHTML='Загрузка ...';
[color=blue] /* Загрузка викторины */
if(gameroom[myroom]) startgame(1); else startgame(0);[/color]
loadengine();
}[/quote]
2609
Сергей @Pegass
[b]Ограничение на повторный вызов одного и того же человека[/b]

Особенности реализации: инфа о всех вызовах запишется в лог, зато её нельзя обойти и заперт работает для всех, т.е. если Петя вызвал Васю то в течении N минуть Васю не смогут вызвать ни Петя, ни Коля, хотя попытки вызовов будут отображаться в логе чата(который админский)

[b]-=Скрипты в чате=-[/b]

[i][color=green]/* [Функции - общие] */[/color][/i]

Добавляем

[code]/* Задержка вызова одного и того же ника */
var time_call = new Array();
time_call['adm']=0;
var time_call_who = new Array();
time_call_who['adm']='';
var time_call_delay=1000*60*5;//5 минут

function timeCall(){
var m = new Date();
var tmp=m.getTime();
return tmp;
}

function timetxt(mmin){
var textmin='у';
var dmmin=Math.round((mmin/10-Math.floor(mmin/10))*10)
if((mmin>4 && mmin<21) || (dmmin==0) || ((dmmin>4) && (dmmin<10)))
textmin='';
else if ((dmmin>1) && (dmmin<5))
textmin='ы';
else textmin='у';

return textmin;
}
var nton="";
var ndelay=0;
function countdown(mms,ttonick){
var ssec=Math.floor(mms/1000);
var mmin=Math.floor(ssec/60);
ssec=ssec-mmin*60;
if(!document.forms.count) return;

if(mmin==0&&ssec==1){
document.forms.count.count2.value='можно';
var p_fans=document.getElementById('p_fans');
if(p_fans) p_fans.parentNode.removeChild(p_fans);
return;
}
else
document.forms.count.count2.value=""+mmin+" минут"+timetxt(mmin)+" "+ssec+" секунд"+timetxt(ssec)+". "
nton=ttonick;
ndelay=time_call_delay-timeCall()+time_call[ttonick];
setTimeout("countdown(ndelay,nton)",1000)
}


function ChatAlert(html,w,h) {
var s=(w?'width:'+w+';':'')+(h?'height:'+h+';':'');
var p_fans=document.getElementById('p_fans');
if(!p_fans)
{
p_fans=document.createElement('div');
p_fans.id='p_fans';
}
p_fans.innerHTML='';
var p_fans_bg=document.createElement('div');
p_fans_bg.className='p_fans_bg';
p_fans_bg.onclick=function()
{
p_fans.parentNode.removeChild(p_fans);
}
var p_fans_helper=document.createElement('div');
p_fans_helper.className='p_fans_helper';
var p_fans_img=document.createElement('div');
p_fans_img.setAttribute('style',s);
p_fans_img.innerHTML=html;
p_fans_img.className='p_fans_img';
p_fans.appendChild(p_fans_bg);
p_fans.appendChild(p_fans_helper);
p_fans.appendChild(p_fans_img);
document.body.appendChild(p_fans);
};[/code]
[i][color=green]/* Вывод сообщения о вызове и сам вызов окном с музыкой '/call nick' */[/color][/i]
[color=red]Заменяем весь раздел[/color]
[code]if(cmd==4) {
if(loaded==1){
if(!time_call[tonick]) time_call[tonick]=0;
if(timeCall()-time_call[tonick]>time_call_delay)
{
time_call[tonick]=timeCall();
time_call_who[tonick]=set_nick;
if(tonick==parent.mynick && loaded==1) ChatAlert("Вас вызывает в чат "+nick+"!");
if(!invisible[nick]) wr(set_time+"<i>"+set_nick+" вызывает "+tonick+".</i><br>");
}
else
if(set_nick==parent.mynick && tonick!=parent.mynick && loaded==1)
{
var call_alert_txt="<font>Пользователь с ником \""+tonick+"\" уже был вызван</font>";
if(time_call_who[tonick]==parent.mynick) call_alert_txt+="<font> вами!</font>";
else call_alert_txt+="<font>.</font><br><font>Вызывал пользователь с ником \""+time_call_who[tonick]+"\".</font>";
call_alert_txt+="<br><div style='margin-top:20px;'><font>Повторный вызов возможен через: </font>";
ChatAlert(call_alert_txt+"<form name='count' style='display: inline-block;'><input type='text' size='20' name='count2' class='count2' readonly></form></div>");
countdown(parent.time_call_delay-parent.timeCall()+parent.time_call[tonick],tonick);
}
}

}[/code]
[b]-=Стили=-[/b]
добавляем (требуют наведения красоты, ибо реализованы в минимальном варианте, для управления шириной и высотой всплывающего окна используйте параметры функции ChatAlert())
[code]#p_fans
{
position:fixed;
top:0px;
bottom:0px;
left:0px;
right:0px;
z-index:2147483647;
text-align: center;
/*overflow:auto;*/
}
#p_fans .p_fans_bg
{
position:absolute;
top:0px;
bottom:0px;
left:0px;
right:0px;
background:rgba(0, 0, 0, 0.7);
}
#p_fans .p_fans_helper
{
display:inline-block;
vertical-align:middle;
height:100%;
width:0px;
}
#p_fans .p_fans_img
{
max-height:90%;
max-width:90%;
vertical-align:middle;
position: relative;
display: inline;
}[/code]

Это закрытая тема - нельзя отправлять сообщения.