﻿var chapter=1;
var chHeight=0;
var topics=new Array();
var docs=new Array();
var curdoc=null;
var max_topics=200; // лимит тем в разделе
var edoc;   // объект "документ фрейма" текущего редактора
var quotes=new Array(); // цитаты текущего редактора
var docchanged=false;
var createInChapter=1;
var searchdoc=-1000;
var tmenumsg=0;
var tmenutopic=0;
var msgToShow=new Array();
var lastread=new Array();
var tomark=new Array();
var lrtimer=0;
var HintsEnabled;
var langnames=new Object();
var moveFrom=0;
langnames.E='English';
langnames.R='Русский';
langnames.F='Française';
langnames.G='Deutsch';
langnames.I='Italiano';
langnames.S='Español';
langnames.P='Português';

function showCallStack(){
        var f=showCallStack,result="Call stack:\n\n";

        while((f=f.caller)!==null){
                result += "F:" + f.toString().match(/^function (\w+)\(/)[1] + "\n";
                result += "A:" + parseArguments(f.arguments) + "\n";
                result += "\n";

        }
        alert(result);
}

function parseArguments(a){
        var result=[];

        for(var i=0; i<a.length; i++){
                if ('string' == typeof a[i])
                        result.push("\"" + a[i] + "\"");
                else
                        result.push(a[i]);
        }

        return "(" + result.join(", ") + ")";
}

function ParseDate(date)
{
 try {
  date.match(/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/);
  return new Date(Date.parse(RegExp.$2+'/'+RegExp.$3+'/'+RegExp.$1+' '+RegExp.$4+':'+RegExp.$5+':'+RegExp.$6+' UTC'));
 } catch(e) {
   showCallStack();
//  alert('Date parsing error ['+date+']');
  return '';
 }
}

function Topic(ID,Chapter,Title,Language,Flags,MsgCount,Updated)
{
 this.id=ID;
 this.chapter=Chapter;
 this.title=Title;
 this.lang=Language;
 this.flags=Flags;
 this.msgcount=MsgCount;
 this.updated=ParseDate(Updated);
 this.status=0;
 this.messages=new Array();
 this.itemHTML=GetTopicItemHTML;
 this.contentHTML=GetTopicContentHTML;
 this.editmsg=0;
}

function Doc(ID,Title)
{
 this.id=ID;
 this.title=Title;
 this.editor=false;
 this.editortext='';
 this.scrollpos=0;
 this.edoc=null;
 this.quotes=null;
}

function DocFromId(id)
{
 for (var i=0;i<docs.length;i++)
   if (docs[i].id==id) return docs[i];
}

function TopicFromId(id)
{
 for (var i=0;i<topics.length;i++)
   if (topics[i].id==id) return topics[i];
}

function FormatDate(date)
{
 var m=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
 var hrs=date.getHours().toString();
 if (hrs.length<2) hrs='0'+hrs;
 var min=date.getMinutes().toString();
 if (min.length<2) min='0'+min;
 var mon=(date.getMonth()+1).toString();
 if (mon.length<2) mon='0'+mon;
 if (lang=='ru') return date.getDate()+'.'+mon+'.'+date.getFullYear()+' '+hrs+':'+min;
 return m[date.getMonth()]+'-'+date.getDate()+'-'+date.getFullYear()+' '+hrs+':'+min;
}

function ItemOver(item,state)
{
 item.style.backgroundImage='url("img/topic_item'+((state)?'2':'')+'.gif")';
}
// генерация кода панельки темы
function GetTopicItemHTML()
{
 var led=(this.status==0)? 'tr' : ('led'+this.status);
 var sticked=(this.flags & 4)? '<img src="img/sticked.gif" title="'+str.Sticked+'" align=left height=23 style="margin:0px 2px 0px 0px">':'';
 return '<div onMouseOver="ItemOver(this,1)" onMouseOut="ItemOver(this,0)" onClick="ClickTopic('+this.id+')" style=\'cursor:pointer; padding:0px; height:40px; background-image:url("img/topic_item.gif")\' title="'+((this.flags & 16)? ((this.flags>>12)? (this.flags>>12):this.msgcount)+str.Unread:str.noUnread)+'">'+
  '<img id="LED'+this.id+'" src="img/'+led+'.gif" align=left width=13 height=40; style="margin-left:1px; margin-right:3px;" onClick="return Moderate('+this.id+')">'+
  '<div class="topic1'+((this.flags & 16)? '':' nonew')+((this.flags & 8)? ' strike':'')+'">'+sticked+this.title+'</div>'+
  '<div class="topic3'+((this.flags & 16)? '':' nonew')+'">'+this.msgcount+str.Msg+((this.flags>>12)? ' (<span class=newmsg>'+(this.flags>>12)+'</span>)':'')+
  str.Last+FormatDate(this.updated)+'</div>'+
  '</div>';
}

function tmenuOver(obj,state)
{
 obj.style.backgroundColor=(state)? '#B98F6F':'';
}

function tmenuClick(obj,cmd)
{
 Options(tmenumsg,tmenutopic);
 if (obj.style.color != '') return;
 if (cmd==1) EditPost();
 if (cmd==2) DeletePost();
 if (cmd==3) AbusePost();
 if (cmd==4) LinkToPost();
}
// генерация кода содержимого темы
function GetTopicContentHTML()
{
 var item='<tr><td class=tmenuitem onMouseOver="tmenuOver(this,1)" onMouseOut="tmenuOver(this,0)" onClick="tmenuClick(this,';
 var res='<div align=right><div align=left id="TMENU'+this.id+'" class=tmenu><table class=tmenu2 cellpadding=1 cellspacing=0 width=100 height=76>'+
 item+((moderator)? '1)"':'1)" style="color:#876"')+' id=TMEdit'+this.id+'>'+str.Edit+
 item+((moderator)? '2)"':'0)" style="color:#876"')+'>'+str.Delete+
 item+((false)? '3)"':'0)" style="color:#876"')+'>'+str.Abuse+
 item+'4)">'+str.Link+
 '</table></div></div>';
 var lastshort=0;
 var list;
 var shortcount;
 for (var i=0;i<this.messages.length;i++) {
  if ((this.messages[i].flags & 1) && (lastshort==0)) {
   shortcount=0;
   for (var j=i;(j<this.messages.length) && (this.messages[j].flags & 1);j++) shortcount++;
   if (shortcount>30) shortcount=20;
   list='';
   var j;
   for (j=i;(j<this.messages.length) && (j<i+shortcount);j++) list=list+'_'+this.messages[j].id;
   list=list.substr(1);
   lastshort=this.messages[j-1].id;
   res=res+'<div id="EXPANDHDR'+lastshort+'" class=bar2 align=center><img src="img/split2.gif" width=100% height=4><div style="padding:4px"><a href=# onClick="Expand(\''+list+'\','+this.id+'); return false;">'+str.Expand+shortcount+str.msgsBelow+'</a></div></div>';
  }
  res=res+'<div id="MSG'+this.messages[i].id+'">'+this.messages[i].getHTML(this)+'</div>';
  if (this.messages[i].id==lastshort) {
   res=res+'<div id="EXPANDFOOTER'+lastshort+'" class=bar2 align=center style="padding:3px;"><a href=# onClick="Expand(\''+list+'\','+this.id+'); return false;">'+str.Expand+shortcount+str.msgsAbove+'</a></div>';
   lastshort=0;
  }
 }

 var state='<div id="ADDBTN'+this.id+'" align=center style="margin-top:12px;margin-bottom:5px;"><input type=button class=btn4 value="'+str.AddMsg+'" onClick="Reply(0,'+this.id+')">';
 if ((this.flags & 1) > 0) state='<h3 align=center>'+str.Closed+'</h3>';
 if ((this.flags & 8) > 0) state='<h3 align=center>'+str.Deleted+'</h3>';
 if (moderator) state=state+'&nbsp; <input type=button class=btn4 value="Move selected" onClick="moveFrom='+this.id+'; alert(str.SelectTopic)">';
 res=res+'<img id="TSPLIT'+this.id+'" src="img/split2.gif" width=100% height=4>'+state+'</div>';
 res=res+'<div id="EDITOR'+this.id+'"></div>';
 return res;
}

function GetMessageHTML(topic)
{
 var txt=this.text;
 var re=/<blockquote title="(.*?),(.*?)">(.*?)<\/blockquote>/i;
 while (txt.match(re)) {
  var qname=RegExp.$1;
  var qdate=RegExp.$2;
  var qtext=RegExp.$3;
  qdate.match(/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/);
  var qdateobj=new Date(Date.parse(RegExp.$2+'/'+RegExp.$3+'/'+RegExp.$1+' '+RegExp.$4+':'+RegExp.$5+':'+RegExp.$6+' UTC'));
  qtext=qtext.replace('$','&#x24;');
  txt=txt.replace(re,'<div class=qauthor> <span class=qtext>'+qname+str.Wrote+
  //FormatDate(qdateobj)+
  '</span></div><blockquote>'+qtext+'</blockquote>');
 }
 var me=authorized? ('&B='+((userid*15) ^ 1930)) : '';
 var checkbox=(moderator)? '<input type=checkbox class=cbox id="SEL'+this.topic+'_'+this.id+'">':'';
 
 if (this.flags & 1) {
   return '<table width=100% height=21 class=msghdr2 cellpadding=0 cellspacing=0>'+
    '<tr><td style="padding-left:3px;">'+((this.level>0)? '<a href=# onclick="PopUpWnd(\'profile.cgi?id='+this.author+'&standalone=1\',\'P'+this.author+'\',400,465);return false;">'+this.authorname+', level '+
    this.level+'</a>' : this.authorname+' <span class=small>(unreg.)</span>')+checkbox+
    '<td align=right>'+((this.flags & 4)? '<span class=mark1>NEW</span> &nbsp;':'')+FormatDate(this.date)+
    '</table>'+
    '<table class=small width=100% cellpadding=2 cellspacing=0><tr>'+
    '<td valign=top>'+txt+'<br>&nbsp;<td width=80 valign=bottom align=right id="EXPANDLINK'+this.id+'"><a href=# onClick="Expand(\''+this.id+'\','+topic.id+'); return false;">'+str.Expand+'</a><br>&nbsp;</table>';
 }
 if (HintsEnabled) txt=InsertHints(txt);
 return '<table width=100% height=21 class=msghdr cellpadding=1 cellspacing=0>'+
    '<tr><td style="padding-left:72px">'+((this.level>0)? '<a href=# onclick="PopUpWnd(\'profile.cgi?id='+this.author+'&standalone=1\',\'P'+this.author+'\',400,465);return false;">'+this.authorname+', level '+this.level+'</a>' : this.authorname+' <span class=small>(unreg.)</span>')+'<td align=right>'+((this.flags & 4)? '<span class=mark1>NEW</span> &nbsp;':'')+FormatDate(this.date)+checkbox+
    '</table>'+
    '<table align=left class=avatartab cellpadding=3 cellspacing=0>'+
    '<tr><td><img class=avatarimg src="img/faces/'+this.avatar+'"></table>'+
    '<div class=msg>'+txt+'<br clear=all><div align=right>'+
        (((topic.flags & 9)==0)? '<input type=button class=btn3 value="'+str.Quote+'" onClick="Reply('+this.id+','+topic.id+')">' : '')+
        '&nbsp; <input id="MenuBtn'+this.id+'" type=button class=btn3 value="'+str.Menu+'" onClick="Options('+this.id+','+topic.id+')">'+
    '</div></div>';
}

function Message(ID,Topic,Prev,MDate,Author,AuthorName,Avatar,Level,Flags,Text)
{
 this.id=ID;
 this.topic=Topic;
 this.prev=Prev;
 this.date=ParseDate(MDate);
 this.author=Author;
 this.authorname=AuthorName;
 this.avatar=Avatar;
 this.level=Level;
 this.flags=Flags;
 this.text=Text;
 this.getHTML=GetMessageHTML;
}

function Expand(list,topicid)
{
 var arr=new Array();
 arr=list.split('_');
 var obj;
 if (arr.length>1) {
  obj=d.getElementById('EXPANDHDR'+arr[arr.length-1]);
  if (obj) obj.innerHTML=str.Loading;
  obj=d.getElementById('EXPANDFOOTER'+arr[arr.length-1]);
  if (obj) obj.innerHTML=str.Loading;
 }
 for (var i=0;i<arr.length;i++) {
  obj=d.getElementById('EXPANDLINK'+arr[i]);
  if (obj) obj.innerHTML=str.Loading+'<br>&nbsp;';
 }
 PutRequest('topic.cgi?t=0&msgs='+list,'','DoExpand('+topicid+')','');
}

function DoExpand(topicid)
{
  var topic=TopicFromId(topicid);
  var lines=response.split("\n");
  var obj;
  var j=0;
  var lastid=0;
  for (var i=1;i<lines.length;i++) {
   var fields=lines[i].split('\t');
   for (;j<topic.messages.length;j++)
    if (fields[0]==topic.messages[j].id) {
      topic.messages[j].text=fields[8];
      topic.messages[j].flags-=1;
      obj=d.getElementById('MSG'+fields[0]);
      if (obj) obj.innerHTML=topic.messages[j].getHTML(topic);
      lastid=fields[0];
      break;
    }
  }
  if (lines.length>2) {
   obj=d.getElementById('EXPANDHDR'+lastid);
   if (obj) obj.style.display='none';
   obj=d.getElementById('EXPANDFOOTER'+lastid);
   if (obj) obj.style.display='none';
  }
}

function CompareTopics(a,b)
{
 if (a.chapter<b.chapter) return -1;
 if (a.chapter>b.chapter) return 1;
 if ((a.flags & 4)<(b.flags & 4)) return 1;
 if ((a.flags & 4)>(b.flags & 4)) return -1;
 if (a.updated<b.updated) return 1;
 if (a.updated>b.updated) return -1;
 return 0;
}

// обновить список тем
function UpdateTopicList()
{
 topics.sort(CompareTopics);
 var p=new Array(0,0,0,0,0,0);
 for (var i=0;i<topics.length;i++) {
  var ch=topics[i].chapter;
  p[ch]++;
  var item=d.getElementById('ITEM'+ch+'_'+p[ch]);
  if (item) {
   item.innerHTML=topics[i].itemHTML();
   item.style.display='block';
  }
 }
 for (var n=1;n<3;n++)
  for (var i=p[n]+1;i<=max_topics;i++)
   d.getElementById('ITEM'+n+'_'+i).style.display='none';
}

function UpdateTopic(fields)
{
 if (fields[2]==1) {
  for (var i=0;i<topics.length;i++)
    if (topics[i].id==fields[1]) return;
  topics.push(new Topic(fields[1],fields[3],fields[4],fields[5],fields[6],fields[7],fields[8]));
  return;
 }
 for (var i=0;i<topics.length;i++)
  if (topics[i].id==fields[1]) {
   if (fields[2]==2) {
    if (topics[i].status==2) {
         topics[i].flags |= 9;
         var doc=DocFromId(fields[1]);
     var cell=d.getElementById('DOCCELL'+doc.id);
     if (cell) {
      doc.editor=false;
          doc.edoc=null;
      if (doc==curdoc) edoc=null;
      cell.innerHTML=topics[i].contentHTML();
     }
        }
    topics.splice(i,1);
   }
   if (fields[2]==3) {
    with (topics[i]) {
     chapter=fields[3];
     title=fields[4];
         lang=fields[5];
//       if (!(flags&16) || (flags>>12)) {
//        flags=parseInt(flags)+4096;
//        flags|=16;
//       }
     if (messages.length>0) {
      if (messages[messages.length-1].author==userid) flags&=(4095-16);
     }
         msgcount=fields[7];
         updated=ParseDate(fields[8]);
        }
   }
   return;
  }
}

function DeleteMsg(id,topicid)
{
 var topic=null;
 var i;
 for (i=0;i<topics.length;i++) {
  if (topicid>0) {
   if (topics[i].id==topicid) topic=topics[i];
  } else
   for (var j=0;j<topics[i].messages.length;j++)
    if (topics[i].messages[j].id==id) { topic=topics[i]; break; }
  if (topic) break;
 }
 if (!topic) return;
 var obj=d.getElementById('MSG'+id);
 if (obj) obj.parentNode.removeChild(obj);
 for (i=0;i<topic.messages.length;i++)
  if (topic.messages[i].id==id) {
   topic.messages.splice(i,1);
   topic.msgcount--;
   topic.updated=topic.messages[topic.messages.length-1].date;
   break;
  }
}

function UpdateMessage(fields)
{
 var topic=null;
 var id=fields[1];
 if (fields[2]==2) {
  DeleteMsg(id,0);
  return;
 }
 for (var i=0;i<topics.length;i++)
  if (topics[i].id==fields[3]) topic=topics[i];
 if ((!topic) || (topic.status!=2)) return;

 if (fields[2]==1) {
  for (i=0;i<topic.messages.length;i++)
   if (topic.messages[i].id==id) return;
  var msg=new Message(id,topic.id,0,fields[4],fields[5],fields[6],fields[7],fields[8],fields[9],fields[10]);
  msg.flags|=4;
  topic.messages.push(msg);
  var split=d.getElementById('TSPLIT'+topic.id);
  var cell=d.getElementById('DOCCELL'+topic.id);
  if (split && cell) {
   var node=d.createElement('div');
   node.setAttribute('id','MSG'+id);
   node.innerHTML=msg.getHTML(topic);
   cell.insertBefore(node,split);
  }
 }
 if (fields[2]==3) {
  var obj=d.getElementById('MSG'+id);
  if (obj) {
   var msg=null;
   for (i=0;i<topic.messages.length;i++)
    if (topic.messages[i].id==id) { msg=topic.messages[i]; break; }
   if (msg) {
    msg.flags|=8;
    msg.text=fields[10];
        obj.innerHTML=msg.getHTML(topic);
   }
  }
 }
}

function HandleUpdates()
{
 var items=response.split('\r');
 if (items[0].match(/^\d+$/)) {
  for (var i=1;i<items.length;i++) {
   var fields=items[i].split('\f');
   if (fields.length<2) continue;
    if (fields[0]=='T') UpdateTopic(fields);
    if (fields[0]=='M') UpdateMessage(fields);
  }
  lastchange=items[0];
 }
 UpdateTopicList();
}

function CheckUpdates()
{
 PutRequest('updates.cgi?last='+lastchange,'','HandleUpdates()','');
 setTimeout('CheckUpdates()',50000);
}

function MarkTopicRead(topicid,msgid)
{
 if (curdoc.id!=topicid) return;
 if (!lastread[topicid] || (lastread[topicid]<msgid)) {
  lastread[topicid]=msgid;
  tomark[topicid]=1;
  if (lrtimer==0) lrtimer=6;
 }
}

function HandleMark()
{
 response=response.replace(/[^,\d=]/,'');
 var arr=response.split(',');
  for (var i=0;i<arr.length;i++) {
   var f=arr[i].split('=');
   if (lastread[f[0]]==f[1]) tomark[f[0]]=null;
 }
}

function MarkRead()
{
 if (lrtimer>0) lrtimer--;
 if (curdoc && (curdoc.id>0)) {
   var ypos=curdoc.scrollpos+d.body.clientHeight;
   var topic=TopicFromId(curdoc.id);
   if (topic) {
    for (var i=0;i<topic.messages.length;i++) {
     if (topic.messages[i].flags & 1) continue;
     if ((topic.messages[i].flags & 4)==0) continue;
         var obj=d.getElementById('MSG'+topic.messages[i].id);
         if (!obj) continue;
         if (obj.offsetTop+obj.offsetHeight+80<ypos) setTimeout('MarkTopicRead('+topic.id+','+topic.messages[i].id+')',2000);
        }
   }
 }
 if (lrtimer==0) {
  var arr=new Array();
  for (var t in tomark)
   if (tomark[t] && lastread[t]) arr.push('T'+t+'='+lastread[t]);
  if (arr.length>0) {
   PutRequest('markread.cgi?'+arr.join('&'),'','HandleMark()','');
   lrtimer=20;
  }
 }
 setTimeout('MarkRead()',1000);
}

function InitForum(docid,docTitle)
{
 docs.push(new Doc(docid,docTitle));
 curdoc=docs[0];
 if (topiclist != '') {
  var tlist=topiclist.split('\f');
  for (t in tlist) {
   var tdef=tlist[t].split('\t');
   topics.push(new Topic(tdef[0],tdef[4],tdef[1],tdef[2],tdef[3],tdef[5],tdef[6]));
  }
  topics.sort(CompareTopics);
 }

 // for (var i=0;i<topics.length;i++)
//  alert('['+topics[i].chapter+'] '+topics[i].title);
 if (location.hash != '') {
  var hash=location.hash.slice(1);
  var items=hash.split('&');
  var topic=0;
  for (i in items) {
   var a=items[i].split('=');
   if (a[0]=='pageid') { setTimeout('ClickTopic('+a[1]+')',0); topic=a[1]; }
   if (a[0]=='msg') msgToShow[topic]=a[1];
  }
 }
 setTimeout('CheckUpdates()',50000);
 setTimeout('MarkRead()',1000);

 if (HintsEnabled) InitHints();
}

// Вывод списка тем в разделе
function PrintChapter(n)
{
 d.write('<div onClick="ShowChapter('+n+')" style="cursor:pointer"><img src="img/'+lang+'/chapter'+n+'.jpg" width=240 height=51 alt="'+str.ClickChapter+'"></div>');
 var disp = (n==chapter)? 'block':'none';
 d.write('<div id="CH'+n+'" style="display:'+disp+'">');
 d.write('<div onClick="NewTopic('+n+')" style="cursor:pointer"><img src="img/'+lang+'/newtopic.gif" width=240 height=20 alt="'+str.CreateTopic+'"></div>');
 d.write('<div id="CHLIST'+n+'" style=\'overflow:auto; width:240px; height:'+chHeight+'px; background-image:url("img/scroll_bgnd.gif")\'>');
 var p=0;
 while (p<topics.length && topics[p].chapter<n) p++;
 for (var i=1;i<=max_topics;i++) {
  d.write('<div id="ITEM'+n+'_'+i+'">');
  if ((p<topics.length) && (topics[p].chapter==n)) d.write(topics[p++].itemHTML());
  d.write('</div>');
 }
 d.write('</div></div>');
}

function PrintLeftPanel()
{
 var c=d.cookie;
 var cs=c.split(';');
 for (i=0; i<cs.length; i++) {
  var pair=cs[i].split('=');
  if (pair[0].indexOf('CH')>=0) chapter=pair[1];
 }
 chHeight=d.body.clientHeight-1-51*3-20-25;
 PrintChapter(1);
 PrintChapter(2);
 PrintChapter(3);
 d.write('<div class=botpanel align=center><div style="padding-top:7px"><a href=# title="English" onClick="SetLang(\'en\'); window.location.reload(); return false;"><img src="img/flag_en.gif" align=absmiddle class=flag> EN</a> &nbsp; <a href=# title="Russian" onClick="SetLang(\'ru\');  window.location.reload(); return false;"><img src="img/flag_ru.gif" align=absmiddle class=flag> RU</a> &nbsp; <a href=# title="Italian" onClick="SetLang(\'it\');  window.location.reload(); return false;"><img src="img/flag_it.gif" align=absmiddle class=flag> IT</a></div></div>');
}

// переключиться на раздел
function ShowChapter(c)
{
 if (chapter==c) return;
 d.cookie='CH='+c+'; path=/; expires=Mon, 4-Oct-15 00:00:00 GMT';
 var ch=d.getElementById('CH'+chapter);
 if (ch) ch.style.display='none';
 chapter=c;
 ch=d.getElementById('CH'+chapter);
 if (ch) ch.style.display='block';
}

// изменение размеров окна браузера
function fResize()
{
 var p=d.getElementById('TOPPANEL');
 var w=d.body.clientWidth;
 if (w<900) w=900;
 var l=(w-140)/2-150;
 p.style.left=l;
 p=d.getElementById('TOPPANEL2');
 p.style.left=l+10;
 p=d.getElementById('TOPICLIST');
 p.style.left=l+164;
 p=d.getElementById('VIEW');
 p.style.width=w-290;
 p.style.height=d.body.clientHeight;
 chHeight=d.body.clientHeight-1-51*3-20-25;
 for (var i=1;i<=3;i++) {
  d.getElementById('CHLIST'+i).style.height=chHeight;
 }
}

// создать новый документ с заданным содержимым, вставить его в структуру, вернуть объект документа
function NewDoc(id,title,content)
{
 var doc=d.createElement('div');
 doc.setAttribute('id','DOC'+id);
 doc.style.display='none';
 doc.setAttribute('align','left');
 var view=d.getElementById('VIEW');
 doc.innerHTML='<table cellpadding=0 cellspacing=0 width=96% style="margin-top:75px;">'+
  '<tr height=16><td><img src="img/paper_topleft.gif" width=16 height=16></td>'+
      '<td style=\'background-image:url("img/paper_top.gif");background-position:center center\'>'+
      '<td><img src="img/paper_topright.gif" width=16 height=16></td>'+
  '<tr><td width=16 style=\'background-image:url("img/paper_left.gif");\'><img src="img/tr.gif" width=16></td>'+
      '<td id="DOCCELL'+id+'" style=\'background-image:url("img/paper2.jpg"); padding:12px;\'>'+
  content+
      '<td width=16 style=\'background-image:url("img/paper_right.gif");\'><img src="img/tr.gif" width=16></td>'+
  '<tr height=16><td><img src="img/paper_bottomleft.gif" width=16 height=16></td>'+
      '<td style=\'background-image:url("img/paper_bottom.gif");background-position:center center\'>'+
      '<td><img src="img/paper_bottomright.gif" width=16 height=16></td>'+
 '</table>&nbsp;';
 view.appendChild(doc);
 var newdoc=new Doc(id,title)
 docs.push(newdoc);
 return newdoc;
}

// загружены данные темы
function TopicLoaded(id)
{
 var topic;
 for (var i=0;i<topics.length;i++)
   if (topics[i].id==id) topic=topics[i];
 var led=d.getElementById('LED'+id);
 var lines=response.split("\n");
 var tFields=lines[0].split("\t");
 if (tFields[0]==id) {
  if (tFields.length>1) topic.title=tFields[1];
  if (tFields.length>2) topic.lang=tFields[2];
  if (tFields.length>3) topic.chapter=tFields[3];
  if (tFields.length>4) topic.flags=tFields[4];
  if (tFields.length>5) topic.updated=ParseDate(tFields[5]);
  if (tFields.length>6) topic.msgcount=tFields[6];
  topic.messages=new Array();
  for (i=1;i<lines.length;i++) {
   if (lines[i]=='') break;
   var m=lines[i].split('\t');
   topic.messages.push(new Message(m[0],id,m[1],m[2],m[3],m[4],m[5],m[6],m[7],m[8]));
  }
  if (!msgToShow[id]) {
   for (i=0;i<topic.messages.length;i++)
     if (topic.messages[i].flags & 4) {
           msgToShow[id]=topic.messages[i].id;
           break;
         }
  }
  var doc=NewDoc(topic.id,topic.title,topic.contentHTML());
  SwitchToDoc(doc);
  topic.status=2;
  if (led) led.src='img/led2.gif';
 } else {
  if (led) led.src='img/led3.gif';
  if (topic) topic.status=3;
 }
}

// Начать загрузку темы
function LoadTopic(topic)
{
 var led=d.getElementById('LED'+topic.id);
 if (led) led.src='img/led1.gif';
 topic.status=1;
 PutRequest('topic.cgi?t='+topic.id,topic.title,'TopicLoaded('+topic.id+')','');
}

// переключиться на документ (передается обьект)
function SwitchToDoc(newdoc)
{
 curdoc.edoc=edoc;
 curdoc.quotes=quotes;
 var doc=d.getElementById('DOC'+curdoc.id);
 if (doc) doc.style.display='none';
 curdoc=newdoc;
 edoc=curdoc.edoc;
 quotes=curdoc.quotes;
 var doc=d.getElementById('DOC'+curdoc.id);
 if (doc) doc.style.display='block';
 d.getElementById('VIEW').scrollTop=curdoc.scrollpos;
 d.getElementById('CURDOC').innerHTML=newdoc.title;
 location.hash='pageid='+curdoc.id;
 if (msgToShow[curdoc.id]) {
  var msgid=msgToShow[curdoc.id];
  var msgobj=d.getElementById('MSG'+msgid);
  if (msgobj) msgobj.scrollIntoView();
  d.getElementById('VIEW').scrollTop -= 100;
  msgToShow[curdoc.id]=null;
  var topic=TopicFromId(curdoc.id);
  if (topic) {
   for (var i=0;i<topic.messages.length;i++)
     if (topic.messages[i].id==msgid) {
       if (topic.messages[i].flags & 1) Expand(msgid.toString(),topic.id);
       break;
     }
  }
 }
}

function CloseDoc(id)
{
 var doc=DocFromId(id);
// var l=d.getElementById('TOPICLIST');
// if (l.style.display=='block') l.style.display='none';

 var i=0;
 while (docs[i]!=doc) i++;
 if (curdoc==doc) {
  var j=(i>0)? i-1:i+1;
  SwitchToDoc(docs[j]);
 }
 if (id>0) {
  var t=TopicFromId(id);
  if (t) {
   t.status=0;
   d.getElementById('LED'+id).src='img/tr.gif';
  }
 }
 var node=d.getElementById('DOC'+id);
 if (node) node.parentNode.removeChild(node);
 docs.splice(i,1);
}

// клик по теме: переключиться на неё или начать загрузку
function ClickTopic(id)
{
 var l=d.getElementById('TOPICLIST');
 if (l && (l.style.display=='block')) l.style.display='none';

 for (var i=0;i<topics.length;i++)
   if (topics[i].id==id) {
     if (topics[i].status==0 || topics[i].status==3) {
       LoadTopic(topics[i]);
       return;
     }
     if (topics[i].status==2) { SwitchToDoc(DocFromId(id)); return; }
   }
  var t=new Topic(id,0,'','',0,0,'');
  topics.push(t);
  LoadTopic(t);
}

function DropTopicList(autoclose)
{
 var l=d.getElementById('TOPICLIST');
 if (autoclose && (l.style.display=='block')) {
  l.style.display='none'; return;
 }
 l.style.left=(d.body.clientWidth-140)/2+14;
 l.style.height=(docs.length>10)? 232 : (docs.length * 23+2);
 l.style.display='block';
 var list='';
 for (var i=0;i<docs.length;i++) list=list+'<div clear=right style="cursor:pointer; padding:3px;" onMouseOver="this.style.backgroundColor=\'#B98\'" onMouseOut="this.style.backgroundColor=\'\'" onClick="ChooseDoc('+i+')">'+((docs[i].id!=0)? '<img src="img/xbtn1.gif" width=17 height=17 align=right title="Close" onClick="CloseDoc('+docs[i].id+');DropTopicList(false);event.cancelBubble=true;">' : '')+
 ((curdoc==docs[i])? '►':'')+docs[i].title+'</div>';
 l.innerHTML=list;
}

// выбор документа из списка
function ChooseDoc(n)
{
 var l=d.getElementById('TOPICLIST');
 l.style.display='none';
 SwitchToDoc(docs[n]);
}

// обработчик прокрутки окна - сохранение позиции
function ViewScroll()
{
 curdoc.scrollpos=d.getElementById('VIEW').scrollTop;
}

function GenButton(action,width,title)
{
 return '<td width='+width+' class="transp trborder" bgcolor=#FFFFFF onMouseOver="HL2(this,12)" onMouseOut="HL2(this,1)" onClick="'+action+'"><img src="img/tr.gif" width='+width+' height=23 title="'+title+'">';
}

function EditableText(text)
{
 var re=/<span class=hint.*?<\/span>/i;
 while (text.match(re)) {
  text=text.replace(re,'');
 }
 re=/<div class=.*?small gray.*?<\/div>/i;
 while (text.match(re)) {
  text=text.replace(re,'');
 }
 return text;
}

function Reply(msgid,topicid)
{
 var doc=DocFromId(topicid);
 if (topicid>0) {
  var topic=TopicFromId(topicid);
  topic.editmsg=0;
 }
 var msg;
 if (msgid!=0)
   for (var i=0;i<topic.messages.length;i++)
     if (topic.messages[i].id==msgid)
       msg=topic.messages[i];

 var quoted=(msg)? msg.text : '';
 // убрать вложенные цитаты
 var re=/<blockquote.*?>.*?<\/blockquote>/i;
 while (quoted.match(re)) {
  quoted=quoted.replace(re,'<div>...</div>');
 }
 quoted=EditableText(quoted);

 var ed=d.getElementById('EDITOR'+topicid);
 if (!edoc) {
  // инициализация редактора
  var title='';
  var addbtn=d.getElementById('ADDBTN'+topicid);
  if (addbtn) addbtn.style.display='none';
  var buttons='<td><table cellpadding=0 cellspacing=0 style="height:25px; background-image:url(\'img/tb1.gif\')"><tr>'+
   GenButton('edoc.execCommand(\'bold\',false,\'\');',23,'Bold')+
   GenButton('edoc.execCommand(\'italic\',false,\'\');',23,'Italic')+
   GenButton('edoc.execCommand(\'underline\',false,\'\');',23,'Underline')+
   '<td><img src="img/vsplit1.gif">'+
   GenButton('ToggleSmiles('+topicid+')',23,str.Smiles)+
   GenButton('InsertImage('+topicid+')',23,str.insImage)+
   '</table>';
  if (!authorized) buttons='<td>&nbsp;'+str.Name+':&nbsp;<td><input id="uname'+topicid+'" type=text class=inp2><td><img src="img/vsplit1.gif">'+buttons;
  if (topicid==-1) {
   buttons='<td>&nbsp;'+str.topic+':&nbsp;<td><input id="topic_title" type=text class=inp2 style="width:180px"><td><img src="img/vsplit1.gif">'+
   '<td><select class=inp2 id=topic_lang style="width:84px;" title="Language">'+
   '<option value="E" '+((lang=='en')? 'selected':'')+'>English'+
   '<option value="R" '+((lang=='ru')? 'selected':'')+'>Русский'+
   '<option value="F">Française'+
   '<option value="G">Deutsch'+
   '<option value="I">Italiano'+
   '<option value="S">Español'+
   '<option value="P">Português'+
   '</select><td><img src="img/vsplit1.gif">'+buttons+'<td width=50%>';
   title='<div align=center style="font-family:times; font-size:20px; font-weight:bold; padding:12px;">'+str.newTopic+'</div>';
  } else {
   buttons=buttons+'<td width=70% align=right title="'+str.tlangDesc+'">'+str.tLang+'<span style="color:#A00">'+langnames[topic.lang]+'</span>&nbsp;';
  }
  var smlist='';
  var smfiles=new Array('smile','sad','cry','bigeyes','thup','thumbdn','confused','laugh','deal','dont','fear','thanx','win','beer','furious','alc','idea','val');
  var smcaptions=new Array(':-)','Sad :-(','Cry :&rsquo;-(','Big Eyes 8-O','Thumbs Up','Thumbs Down','Confused :-/','Laugh :-D','Rule','Don&rsquo;t','Fear','Thanks','Win','Beer','Furious','Drunk','Idea','Writer');
  for (i in smfiles) {
   smlist=smlist+'<td width=33 bgcolor=#FFFFFF class="transp trborder" onMouseOver="HL2(this,12)" onMouseOut="HL2(this,1)" onClick="InsertSmile(\''+smfiles[i]+'\',\''+smcaptions[i]+'\')">'+
    '<img src="img/tr.gif" width=33 height=33 title="'+smcaptions[i]+'"></td>';
  }
  ed.innerHTML=title+
  '<div class=bar><table class=bar2 width=100% cellpadding=1 cellspacing=0><tr>'+buttons+'</table></div>'+
  '<div class=bar4 id="SMILESBAR'+topicid+'" style="display:none"><table cellpadding=0 cellspacing=0 width=100%><tr>'+smlist+'<td>&nbsp;</table></div>'+

  '<div class=bar id="imgbar'+topicid+'" style="display:none"><form method=post enctype="multipart/form-data" action="uploadimg.cgi" target="imgframe'+topicid+'" style="padding:0px; margin:0px">'+
  '<table cellpadding=0 cellspacing=0 class=bar2 width=600 height=26><tr><td class=small style="padding: 2px 2px 0px 6px;">File (JPG or GIF, max 500K): <input type=file class=inp2 style="width:200px;">&nbsp;'+
  'Thumbnail: <select class=inp1 name=ts><option value=1>80x60<option value=2 selected>120x90<option value=3>160x120<option value=4>240x160</select>&nbsp;'+
  '<input type=submit class=inp1 value="Upload"><iframe name="imgframe'+topicid+'"></iframe></table></form></div>'+

   '<iframe class=docframe frameborder=NO id="EFRAME'+topicid+'"></iframe>'+
   '<div id="status'+topicid+'" class=bar3 style="display:none"><table width=100% height=26 cellpadding=0 cellspacing=0><tr><td id="statuscell'+topicid+'" valign=center align=center class=bar2>Sending message, pelase wait...</table></div>'+
   '<div align=center style="padding-top:8px;"><input type=button class=btn4 onClick="PostMsg()" value="'+str.Submit+'">'+
   ((topicid>0)? '&nbsp; &nbsp;<input type=button class=btn4 onClick="CloseEditor()" value="'+str.Close+'">':'')+'</div>';
  doc.editor=true;

  var eframe=d.getElementById('EFRAME'+topicid);
  edoc=eframe.contentWindow.document;
  var edstyles='BODY { cursor: auto; padding:0px; margin:4px; background-color: #DFD1BC; background-image:none; font-family: Arial; font-size: 13px; color: #421; text-align: left; }'+
   'BLOCKQUOTE { font-style: italic; background-color:#E8D9C2; background-image:none; padding:0px; margin:0px; color: #444; border: 1px dashed #777 }'+
   'p { text-align: left; }';

  edoc.open('text/html');
  if (msg) quoted='<blockquote title="'+msgid+'">'+quoted+'</blockquote><br><p>';
  edoc.write('<HTML><head><link rel="Stylesheet" href="styles2.css" media="all"><style type="text/css">'+edstyles+'</style></head>\n'+
    '<body>'+quoted+'</body></html>');
  edoc.close();
  edoc.designMode='On';
  eframe.contentWindow.focus();
  quotes=new Array;
  setTimeout('SaveQuotes()',20);
//  setTimeout('EdTimer()',50);
 } else {
  // добавление цитаты
  if (quoted != '') {
   var qnode=edoc.createElement('blockquote');
   edoc.body.appendChild(qnode);
   qnode.title=msgid;
   qnode.innerHTML=quoted;
   var brnode=edoc.createElement('br');
   edoc.body.appendChild(brnode); // Firefox buggy editor workaround
   docchanged=true;
  }
 }

 d.getElementById('VIEW').scrollTop=100000;

/* var range=eframe.contentWindow.getSelection().getRangeAt(0);
 if (range) {
  range.setStart(edoc.body,0);
  range.setEnd(edoc.body,2);
  range.collapse(false);
 } */
}

function SaveQuotes()
{
 var item=edoc.body.firstChild;
 var n=0;
 while (item) {
  if (item.tagName && item.tagName.match(/blockquote/i))
   quotes[n++]=item.innerHTML;
  item=item.nextSibling;
 }
}

function EdTimer()
{
 if (!edoc) return;
 if (docchanged) {
  SaveQuotes();
 } else {
  var newquotes=new Array();
  var item=edoc.body.firstChild;
  var n=0;
  while (item) {
   if (item.tagName && item.tagName.match(/blockquote/i)) {
    if (item.innerHTML != quotes[n]) {
     try
     {
      var oldtext=quotes[n];
      var newtext=item.innerHTML;
      var p1=0;
      while (newtext.charAt(p1)==oldtext.charAt(p1)) p1++;
      var p2=newtext.length-1;
      var p3=oldtext.length-1;
      while (newtext.charAt(p2)==oldtext.charAt(p3)) { p2--; p3-- }
      if (p2<p1) {
       newquotes.push(newtext);
      } else
      if (p1>0 && p2>=p1 && p2<newtext.length) { // split
       var part1=newtext.slice(0,p1);
       var part2=newtext.slice(p1,p2+1);
       var part3=newtext.slice(p2+1,-1);
       item.innerHTML=part3;
       var q1=edoc.createElement('blockquote');
       edoc.body.insertBefore(q1,item);
       var txt=edoc.createElement('p');
       edoc.body.insertBefore(txt,item);
       q1.innerHTML=part1;
       txt.innerHTML=part2;
       newquotes.push(part1);
       newquotes.push(part3);
       var range=edoc.body.createTextRange();
       if (range) {
        range.moveToElementText(txt);
        range.collapse(false);
        range.move('character',-1);
        range.select();
       } else {
        txt.setSelectionRange(0,0);
       }
      }
     }
     catch(e) {}
    } else {
     newquotes.push(quotes[n]);
    }
    n++;
   }
   item=item.nextSibling;
  }
  quotes=newquotes;
 }
 setTimeout('EdTimer()',50);
}

function setCaretPosition(ctrl, pos)
{
 if (ctrl.setSelectionRange) {
  ctrl.focus();
  ctrl.setSelectionRange(pos,pos);
 } else
 if (ctrl.createTextRange) {
  var range = ctrl.createTextRange();
  range.collapse(true);
  range.moveEnd('character', pos);
  range.moveStart('character', pos);
  range.select();
 }
}

// послать сообщение на сервер
function PostMsg()
{
 var msgtext=edoc.body.innerHTML;
 var topicid=curdoc.id;
 var data='topic='+topicid+'&msg='+encodeURIComponent(msgtext);
 var re=/<blockquote.*?>(.*?)<\/blockquote>/i;
 var tmp=msgtext;
 var quoted='';
 while (tmp.match(re)) {
  quoted=quoted+RegExp.$1;
  tmp=tmp.replace(re,'');
 }
 tmp=tmp.replace(/<.*?>/gi,'');
 quoted=quoted.replace(/<.*?>/gi,'');
 if (quoted.length>tmp.length*1.5+300)
   if (!confirm(str.Overquoted)) return;

 if (!authorized) {
  var name=d.getElementById('uname'+topicid).value;
  if (name.length<3) {
   alert(str.shortName);
   return;
  }
  data=data+'&name='+encodeURIComponent(name);
 }
 if (topicid==-1) {
  var obj=d.getElementById('topic_lang');
  var tlang=(obj)? obj.value :'E';
  data=data+'&title='+encodeURIComponent(d.getElementById('topic_title').value)+'&ch='+createInChapter+'&lang='+tlang;
 } else {
  var topic=TopicFromId(topicid);
  if (topic.editmsg>0) data=data+'&msgid='+topic.editmsg;
 }
 d.getElementById('status'+topicid).style.display='block';
 d.getElementById('statuscell'+topicid).innerHTML='Please wait...';
 PutRequest('postmsg.cgi','Sending message text...','PostedMsg('+curdoc.id+')',data);
}

function PostedMsg(topicid)
{
 var idx=response.indexOf('\n');
 var r1=response.slice(0,idx);
 response=response.slice(idx+1);
 var r=r1.split('\t');
 var docobj=(curdoc.id==topicid)? edoc : DocFromId(topicid).edoc;
 if (r[0]>0) {
  if (topicid<0) {
   var fl=true;
   for (var i=0;i<topics.length;i++)
    if (topics[i].id==r[7]) fl=false;
   if (fl) topics.push(new Topic(r[7],r[8],r[9],r[10],r[11],0,r[1]));
  } else {
   var topic=TopicFromId(topicid);
   for (i=0;i<topic.messages.length;i++)
    if (topic.messages[i].id==r[0]) {
         topic.messages[i].text=response;
     var msgobj=d.getElementById('MSG'+r[0]);
     if (msgobj) {
          msgobj.innerHTML=topic.messages[i].getHTML(topic);
          if (curdoc.id==topicid) {
           msgobj.scrollIntoView();
       d.getElementById('VIEW').scrollTop -= 100;
          }
         }
         if (curdoc.id==topicid) edoc=null;
         var eddoc=DocFromId(topicid);
     var ed=d.getElementById('EDITOR'+topicid);
     if (ed) ed.innerHTML='';
     var addbtn=d.getElementById('ADDBTN'+topicid);
     if (addbtn) addbtn.style.display='block';
         if (eddoc) {
          eddoc.editor=false;
          eddoc.edoc=null;
         }
         return;
        }
  }
  InsertMessage(new Message(r[0],r[7],0,r[1],r[2],r[3],r[4],r[5],r[6],response),topicid);
  UpdateTopicList();
 } else {
  d.getElementById('statuscell'+topicid).innerHTML='<font color=#C00000>'+r[1]+'</font>';
 }
}

function InsertMessage(msg,doc_id)
{
  var t=TopicFromId(msg.topic);
  var fl=true;
  for (var i=0;i<t.messages.length;i++)
   if (t.messages[i].id==msg.id) fl=false;
  if (fl) {
   t.messages.push(msg);
   t.msgcount++;
  }
  t.updated=msg.date;
  var doc=DocFromId(doc_id);
  if (doc) {
   var cell=d.getElementById('DOCCELL'+doc.id);
   if (cell) {
    doc.editor=false;
        doc.edoc=null;
    edoc=null;
    cell.innerHTML=t.contentHTML();
   }
   if (doc_id==-1) {
    CloseDoc(doc.id);
        ClickTopic(msg.topic);
   }
  }
}

function NewTopic(c)
{
 if (authorized) {
  var doc=DocFromId(-1);
  var st=str.topicIn+'"'+chapTitles[c]+'"';
  if (!doc) doc=NewDoc(-1,st,'<div id="EDITOR-1"></div>');
  SwitchToDoc(doc);
  Reply(0,-1);
  createInChapter=c;
  d.getElementById('CURDOC').innerHTML=st;
  doc.title=st;
 } else alert(str.needAuth);
}

function CloseEditor()
{
 if (edoc) {
  curdoc.editor=false;
  curdoc.edoc=null;
  edoc=null;
  var ed=d.getElementById('EDITOR'+curdoc.id);
  if (ed) ed.innerHTML='';
  var addbtn=d.getElementById('ADDBTN'+curdoc.id);
  if (addbtn) addbtn.style.display='block';
 }
}

function DoSearch()
{
  var q=d.getElementById('SearchBox').value;
  if (q.length<3) { alert('Please enter some words to find.'); return; }
  q=q.replace(/[<>&;]/gi,'');
  searchdoc++;
  PutRequest('search.cgi?q='+encodeURIComponent(q),'Loading data...','SearchDone('+searchdoc+')','');
  doc=NewDoc(searchdoc,'Search results: '+q,'<div align=center style="padding:80px"><b>Searching... please wait...</b></div>');
  SwitchToDoc(doc);
}

function SearchDone(id)
{
  var cell=d.getElementById('DOCCELL'+id);
  if (cell) cell.innerHTML=response;
}

// избежать прокрутки фона поля ввода
function FixIEBug1(obj)
{
 if (navigator.appName.indexOf('Internet Explorer')>=0)
  obj.style.backgroundAttachment='fixed';
}

function HL(item,value)
{
 item.style.filter='alpha(opacity='+value+')';
 item.style.opacity=value/100;
}

function HL2(item,value)
{
 item.style.filter='alpha(opacity='+value+')';
 item.style.opacity=value/100;
 item.style.border=(value>1)? '1px solid #432' : '1px solid transparent';
}

function Login(rem)
{
 var str=d.getElementById('LFi1').value+'\0'+d.getElementById('LFi2').value+'\0'+((rem)?'Y':'N');
 var data='';
 for (var i=0;i<str.length;i++)
  data=data.concat(String.fromCharCode(65+i%26),str.charCodeAt(i));
 PopUpWnd('login2.cgi?data='+data,'login',300,120);
}

function Logout()
{
 location.href='logout.cgi?loc='+encodeURIComponent(location.href);
}

function SignUp()
{
 window.open('index.cgi?q=newacc');
}

function MyProfile()
{
 window.open('index.cgi?q=editacc');
}

function Options(msgid,topicid)
{
 var menu=d.getElementById('TMENU'+topicid);
 if (menu.style.display=='block') {
  menu.style.display='none';
  return;
 }
 var msgauthor=0;
 var topic=TopicFromId(topicid);
 for (var i=0;i<topic.messages.length;i++)
  if (topic.messages[i].id==msgid) msgauthor=topic.messages[i].author;
 var EditItem=d.getElementById('TMEdit'+topicid);
 if (EditItem) EditItem.style.color=(moderator || ((userid>0) && (userid==msgauthor)))? '' : '#876';
 var btn=d.getElementById('MenuBtn'+msgid);
 menu.style.top=btn.offsetTop+10;
 menu.style.display='block';
 tmenumsg=msgid;
 tmenutopic=topicid;
}

var edittext;

function EditPost()
{
 var topic=TopicFromId(tmenutopic);
 edittext='';
 for (var i=0;i<topic.messages.length;i++)
  if (topic.messages[i].id==tmenumsg) edittext=topic.messages[i].text;
 edittext=EditableText(edittext);
 Reply(0,tmenutopic);
 topic.editmsg=tmenumsg;
 setTimeout("edoc.body.innerHTML=edittext; docchanged=true",0);
}

function DeletePost()
{
  if (confirm(str.askDelete)) {
   DeleteMsg(tmenumsg,tmenutopic);
//   var msgobj=d.getElementById('MSG'+tmenumsg);
//   if (msgobj) msgobj.style.display='none';
   PutRequest('delmsg.cgi?msg='+tmenumsg,str.deleting,'status=response;','');
   UpdateTopicList();
  }
}

function LinkToPost()
{
 var url=location.href.split('#')[0];
 url=url+'#pageid='+tmenutopic+'&msg='+tmenumsg;
 clipboardData.setData('Text',url);
 alert(str.linkMade+"\n\n"+url);
}

function AbusePost()
{
}

function Moderate(topicid)
{
  if (moderator) {
    if (moveFrom>0) {
     if (confirm("Move selected messages to this topic?")) {
      d.getElementByTagName('');
     }
     moveFrom=0;
    } else
     PopUpWnd('modtopic.cgi?t='+topicid,'',400,250);
    window.event.cancelBubble = true;
  }
  return false;
}

function ToggleSmiles(topicid)
{
 var bar=d.getElementById('SMILESBAR'+topicid);
 if (bar) bar.style.display=(bar.style.display=='block')? 'none':'block';
}

function InsertImage(topicid)
{
 alert('Sorry, this option is temporary disabled');
}

function InsertHTML(code)
{
 var wnd=edoc.parentWindow;
 if (!wnd) wnd=edoc.defaultView;
 wnd.focus();
 var range;
 if (edoc.selection) {
  range=edoc.selection.createRange();
  range.pasteHTML(code);
 } else {
  range=wnd.getSelection().getRangeAt(0);
  range.deleteContents();
  var node=d.createElement('span');
  node.innerHTML=code;
  range.insertNode(node);
 }
}

function InsertSmile(name,title)
{
 InsertHTML('<img class=smile src="img/smiles/'+name+'.gif" contentEditable=false title="'+title+'">');
 //edoc.execCommand('InsertImage',false,'img/smiles/'+name+'.gif');
}