function comment(msgId, boardId, threadId, startNum, sesc)
{
    var xmlhttp = getXmlHttp();
    var boardStr = '&board='+(boardId > -1 ? boardId : "");
    var quoteStr = (threadId != '' && startNum != '' && sesc != '') ? '&threadid='+threadId+'&start='+startNum+'&sesc='+sesc : '';
    var params = "postid="+msgId+boardStr+"&comment="+document.getElementById('commentBox'+msgId).value+quoteStr;
    xmlhttp.open("POST", "/index.php?action=commentpost", true);
    
    //Send the proper header information along with the request
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", params.length);
    xmlhttp.setRequestHeader("Connection", "close");
    
    xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState != 4) return;
      
      if (xmlhttp.status == 200) {
        clearTimeout(varTimeout);
        if (xmlhttp.responseText == 'EMPTY_COMMENT')
          alert("Введи комментарий сначала!");
        else if (xmlhttp.responseText == 'TOO_MANY_COMMENTS')
          alert("Превышен лимит в 10000 знаков для комментариев");
        else if (xmlhttp.responseText == 'MESSAGE_CLOSED_FOR_COMMENTS')
        {
          alert("Сообщение закрыто для комментариев");
          document.getElementById('lock'+msgId).src = "/YaBBImages/lock_closed.png";
          document.getElementById('commentBox'+msgId).style.display = 'none';
          document.getElementById('commentBtn'+msgId).style.display = 'none';
        } else {
          document.getElementById('commentBox'+msgId).value = "";
          document.getElementById('comments' + msgId).innerHTML = xmlhttp.responseText;
          document.getElementById('commentForm' + msgId).style.display = 'none';
        }
      }
    }
    
    xmlhttp.send(params);
    var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось добавить комментарий. Попробуй ещё раз."); }, 10000);
}

function deletePostComment(msgId, lineNr, boardId, threadId, startNum, sesc)
{
  var xmlhttp = getXmlHttp();
  var boardStr = '&board='+(boardId > -1 ? boardId : "");
  var quoteStr = (threadId != -1 && startNum != -1 && sesc != -1) ? '&threadid='+threadId+'&start='+startNum+'&sesc='+sesc : '';
  
  document.getElementById('loading' + msgId + "-" + lineNr).style.display = 'inline';
  xmlhttp.open("GET", "/index.php?action=deletepostcomment"+boardStr+"&postid="+msgId+"&commentNr="+lineNr+quoteStr, true);
  
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      document.getElementById('comments' + msgId).innerHTML = xmlhttp.responseText;
      document.getElementById('loading' + msgId + "-" + lineNr).style.display = 'none';
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); document.getElementById('loading' + msgId + "-" + lineNr).style.display = 'none'; alert("Не удалось удалить комментарий. Попробуй ещё раз."); }, 10000);
}

function lockUnlock(msgId, boardId)
{
  var xmlhttp = getXmlHttp();
  var lockElement = null;
  var lockAction = false;
  var boardStr = '&board='+(boardId > -1 ? boardId : "");

  if (document.getElementById('lock'+msgId).src == 'http://forum.theprodigy.ru/YaBBImages/lock_closed.png') {
    lockElement = document.getElementById('lock'+msgId);
    lockAction = false; 
  } else if (document.getElementById('lock'+msgId).src == 'http://forum.theprodigy.ru/YaBBImages/lock_open.png') {
    lockElement = document.getElementById('lock'+msgId);
    lockAction = true;
  } else {
    alert("Ошибка при выполнении запроса!");
    return;
  }
    
  document.getElementById('lockloading' + msgId).style.display = 'inline';
  xmlhttp.open("GET", "/index.php?action=lockpostcomments"+boardStr+"&postid="+msgId+"&lock="+(lockAction?1:0), true);
  
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      document.getElementById('lockloading' + msgId).style.display = 'none';
      
      if (lockAction) {
        lockElement.src = "/YaBBImages/lock_closed.png";
        document.getElementById('commentBox'+msgId).style.display = 'none';
        document.getElementById('commentBtn'+msgId).style.display = 'none';
      } else {
        lockElement.src = "/YaBBImages/lock_open.png";
        document.getElementById('commentBox'+msgId).style.display = 'inline';
        document.getElementById('commentBox'+msgId).focus();
        document.getElementById('commentBtn'+msgId).style.display = 'inline';
      }
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); document.getElementById('lockloading' + msgId).style.display = 'none'; alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function recentTopicComments(boardId, threadId, startNum, sesc)
{
  var xmlhttp = getXmlHttp();
  var boardStr = '&board='+(boardId > -1 ? boardId : "");
  var quoteStr = (startNum != -1 && sesc != -1) ? '&start='+startNum+'&sesc='+sesc : '';
  
  var numLastComments = document.getElementById('numLastComments').value;
  numLastComments = numLastComments < 10 ? 10 : numLastComments > 99 ? 10 : numLastComments;
  
  document.getElementById('recentcommentstable').innerHTML = "Идёт загрузка...";
  document.getElementById('recentcommentstable').style.display = 'block';
  document.getElementById('recentcommentstable').style.width = '100%';

  xmlhttp.open("GET", "/index.php?action=recenttopiccomments"+boardStr+quoteStr+"&threadid="+threadId+"&num="+numLastComments, true);
  
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      
      if (xmlhttp.responseText == "NO_RECENT_COMMENTS_FOUND") {
        document.getElementById('recentcommentstable').style.display = 'none';
        alert("Комментариев в теме нет");
      } else {
        document.getElementById('numLastComments').value = numLastComments;
        document.getElementById('recentcommentstable').innerHTML = xmlhttp.responseText;
      }
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); document.getElementById('recentcommentstable').style.display = 'none'; alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000); 
}

function myRecentTopicComments(boardId, threadId, startNum, sesc)
{
  var xmlhttp = getXmlHttp();
  var boardStr = '&board='+(boardId > -1 ? boardId : "");
  var quoteStr = (startNum != -1 && sesc != -1) ? '&start='+startNum+'&sesc='+sesc : '';
  
  var numMsgsMyComments = document.getElementById('numMsgsMyComments').value;
  numMsgsMyComments = numMsgsMyComments < 1 ? 3 : numMsgsMyComments > 99 ? 3 : numMsgsMyComments;
  
  document.getElementById('recentcommentstable').innerHTML = "Идёт загрузка...";
  document.getElementById('recentcommentstable').style.display = 'block';
  document.getElementById('recentcommentstable').style.width = '100%';

  xmlhttp.open("GET", "/index.php?action=myrecenttopiccomments"+boardStr+quoteStr+"&threadid="+threadId+"&numMsgs="+numMsgsMyComments, true);
  
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      
      if (xmlhttp.responseText == "NO_MY_RECENT_COMMENTS_FOUND") {
        document.getElementById('recentcommentstable').style.display = 'none';
        alert("Твоих комментариев в теме нет");
      } else {
        document.getElementById('numMsgsMyComments').value = numMsgsMyComments;
        document.getElementById('recentcommentstable').innerHTML = xmlhttp.responseText;
      }
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); document.getElementById('recentcommentstable').style.display = 'none'; alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000); 
}

function editChatWall(boardId)
{
  var xmlhttp = getXmlHttp();
  xmlhttp.open("GET", "/index.php?action=editchatwall;board="+boardId+";ubbc=0", true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      var array = xmlhttp.responseText.split("#;#");
      document.getElementById("chatWall").innerHTML = '<font size="1"><center><textarea id="chatWallArea" rows="5" cols="100" name="chatWallArea" style="width: 90%; height: 80px; font-size: xx-small;" onkeypress="return (this.value.length < 10000);">'+array[0]+'</textarea><br /><i>(максимальная длина 10 000 знаков)</i></center><div style="margin: 10px 0px 0px 0px"><a href="javascript: saveChatWall('+boardId+', \'\'); void(0);"><img src="/YaBBImages/save.png" alt="сохранить" width="14" height="14" border="0" /></a> <a href="javascript: updateChatWall('+boardId+'); void(0);"><img src="/YaBBImages/cancel.png" alt="отменить" width="14" height="14" border="0" /></a>'+(array[1] != ""?'<div style="float: right; font-style: italic;">Последний автор: '+array[1]+'</div>':'')+'</div></font>';
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function saveChatWall(boardId, guestname)
{
  var xmlhttp = getXmlHttp();
  var guestnamestr = (guestname != '') ? ";guestname="+guestname : "";
  var params = document.getElementById('chatWallArea') != null ?'chatwalltext='+document.getElementById('chatWallArea').value : null;
  xmlhttp.open("POST", "/index.php?action=savechatwall;board="+boardId+guestnamestr, true);
  
  //Send the proper header information along with the request
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlhttp.setRequestHeader("Content-length", params!=null?params.length:0);
  xmlhttp.setRequestHeader("Connection", "close");
  
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      
      if (xmlhttp.responseText == "NO_NAME") {
        var eguestname = prompt("Укажи своё имя", "");
        saveChatWall(boardId, eguestname);
      } else if (xmlhttp.responseText == "DUPLICATE_NAME") {
        var dguestname = prompt("Такое имя уже зарегистрировано на форуме. Введи другое.", "");
        saveChatWall(boardId, dguestname);
      } else
        updateChatWall(boardId);
    }
  }
  
  xmlhttp.send(params);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function updateChatWall(boardId)
{
  var xmlhttp = getXmlHttp();
  if (document.getElementById('loading') != null)
    document.getElementById('loading').style.display = 'inline';
  xmlhttp.open("GET", "/index.php?action=updatechatwall;board="+boardId+";ubbc=1", true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      if (document.getElementById('loading') != null)
        document.getElementById('loading').style.display = 'none';
      var array = xmlhttp.responseText.split("#;#");
      document.getElementById('chatWall').innerHTML = '<font size="1"><div id="chatWallText" style="margin: 0px 0px 10px 0px;">'+array[0]+'</div><div><a href="javascript: editChatWall('+boardId+'); void(0);"><img src="/YaBBImages/edit.png" alt="редактировать" width="14" height="14" border="0" /></a> <a href="javascript: updateChatWall('+boardId+'); void(0);"><img src="/YaBBImages/reload.png" alt="перезагрузить" width="14" height="14" border="0" /></a><img src="/YaBBImages/loading.gif" id="loading" alt="loading" style="display: none;" />'+(array[1] != ""?'<div style="float: right; font-style: italic;">Последний автор: '+array[1]+'</div>':'')+'</div></font>'; 
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function backupChatWall(boardId)
{
  var xmlhttp = getXmlHttp();
  xmlhttp.open("GET", "/index.php?action=backupchatwall;board="+boardId, true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      if (xmlhttp.responseText == "NOT_PERMITTED")
        alert("Тебе не разрешено пользоваться этой функцией");
      else if (xmlhttp.responseText == "TRUE")
        alert("Резервная копия создана.");
      else
        alert("Произошла ошибка. Попробуй ещё раз.");
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function restoreChatWall(boardId)
{
  var xmlhttp = getXmlHttp();
  xmlhttp.open("GET", "/index.php?action=restorechatwall;board="+boardId, true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      if (xmlhttp.responseText == "NOT_PERMITTED")
        alert("Тебе не разрешено пользоваться этой функцией");
      else if (xmlhttp.responseText == "FALSE")
        alert("Произошла ошибка. Попробуй ещё раз.");
      else
        updateChatWall(boardId);
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function quickReplyQuote(e, cgi, threadId, mid, title, start, sesc)
{
  var seltext = '';
  if (window.getSelection) seltext = window.getSelection();
  else if (document.getSelection) seltext = document.getSelection();
  else if (document.selection) seltext = document.selection.createRange().text;

  if (document.getElementById("QUICKREPLYAREA") == null || document.getElementById("QUICKREPLYAREA").value == null || !(e.ctrlKey || (seltext && seltext != '')))
    return true;
    
  var quickReplyArea = document.getElementById('QUICKREPLYAREA');

  if (seltext && seltext != '') {
    quickReplyArea.value += (quickReplyArea.value.length > 0)?'\n\n[quote]'+seltext+'[/quote]':'[quote]'+seltext+'[/quote]';
    quickReplyArea.focus();
    return false;
  }

  var xmlhttp = getXmlHttp();
  xmlhttp.open("GET", cgi+';action=post;threadid='+threadId+';quickreplyquote='+mid+';title='+title+';start='+start+';sesc='+sesc, true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return true;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);

      quickReplyArea.value += (quickReplyArea.value.length > 0)?'\n\n'+xmlhttp.responseText:xmlhttp.responseText;
      quickReplyArea.focus();
      return false;
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert('Не удалось выполнить операцию. Попробуй ещё раз.'); }, 10000);
  return false;
}

function showCatMenu(cat)
{
  for (var i in cat.childNodes)
    if (cat.childNodes[i].className == "catMenu")
      cat.childNodes[i].style.display="block";
}

function hideCatMenu(cat)
{
      cat.style.display="none";
}

function editBillboard(catId)
{
  var xmlhttp = getXmlHttp();
  xmlhttp.open("GET", "/index.php?action=editbillboard;cat="+catId+";ubbc=0", true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      var array = xmlhttp.responseText.split("#;#");
      var browser=navigator.appName;
      if (browser=="Microsoft Internet Explorer") {
        document.getElementById('billboard'+catId).parentNode.style.display = 'block';
        document.getElementById('billboard'+catId).style.display = 'block';
      } else {
        document.getElementById('billboard'+catId).parentNode.style.display = 'table-row';
        document.getElementById('billboard'+catId).style.display = 'table-cell';
      }
      document.getElementById('billboard'+catId).innerHTML = '<font size="1"><center><textarea id="billboard'+catId+'Area" rows="5" cols="100" name="billboardArea" style="width: 90%; height: 80px; font-size: xx-small;" onkeypress="return (this.value.length < 10000);">'+array[0]+'</textarea></center><div style="margin: 10px 0px 0px 0px"><a href="#" onclick="saveBillboard('+catId+'); return false;"><img src="/YaBBImages/save.png" alt="сохранить" width="14" height="14" border="0" /></a> <a href="#" onclick="updateBillboard('+catId+'); return false;"><img src="/YaBBImages/cancel.png" alt="отменить" width="14" height="14" border="0" /></a>'+(array[1] != ""?'<div style="float: right; font-style: italic;">Последний автор: '+array[1]+'</div>':'')+'</div></font>';
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function saveBillboard(catId)
{
  var xmlhttp = getXmlHttp();
  var params = document.getElementById('billboard'+catId+'Area') != null ?'billboardtext='+document.getElementById('billboard'+catId+'Area').value : null;
  xmlhttp.open("POST", "/index.php?action=savebillboard;cat="+catId, true);
  
  //Send the proper header information along with the request
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlhttp.setRequestHeader("Content-length", params!=null?params.length:0);
  xmlhttp.setRequestHeader("Connection", "close");
  
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      
      if (xmlhttp.responseText == "ACCESS_RESTRICTED")
        alert("Тебе запрещён доступ к этой функции");
      else
        updateBillboard(catId);
    }
  }
  
  xmlhttp.send(params);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function updateBillboard(catId)
{
  var xmlhttp = getXmlHttp();
  xmlhttp.open("GET", "/index.php?action=updatebillboard;cat="+catId+";ubbc=1", true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
 
      var array = xmlhttp.responseText.split("#;#");
      if (array[0]=="") {
        document.getElementById('billboard'+catId).parentNode.style.display = 'none';
        document.getElementById('billboard'+catId).style.display = 'none';
      }
      document.getElementById('billboard'+catId).innerHTML = '<font size="1"><div id="billboard'+catId+'Text">'+array[0]+'</div></font>'; 
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function backupBillboard(catId)
{
  var xmlhttp = getXmlHttp();
  xmlhttp.open("GET", "/index.php?action=backupbillboard;cat="+catId, true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      if (xmlhttp.responseText == "NOT_PERMITTED")
        alert("Тебе не разрешено пользоваться этой функцией");
      else if (xmlhttp.responseText == "TRUE")
        alert("Резервная копия создана.");
      else
        alert("Произошла ошибка. Попробуй ещё раз.");
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}

function restoreBillboard(catId)
{
  var xmlhttp = getXmlHttp();
  xmlhttp.open("GET", "/index.php?action=restorebillboard;cat="+catId, true);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState != 4) return;
    
    if (xmlhttp.status == 200) {
      clearTimeout(varTimeout);
      if (xmlhttp.responseText == "NOT_PERMITTED")
        alert("Тебе не разрешено пользоваться этой функцией");
      else if (xmlhttp.responseText == "FALSE")
        alert("Произошла ошибка. Попробуй ещё раз.");
      else
        updateBillboard(catId);
    }
  }
  
  xmlhttp.send(null);
  var varTimeout = setTimeout( function(){ xmlhttp.abort(); alert("Не удалось выполнить операцию. Попробуй ещё раз."); }, 10000);
}
