function processReq()
{
	if(req.readyState==2)
	{
		// отображать режим ожидания
		if(activeMethod=="diskuss.show")
		{
			stats=document.getElementById("diskuss");
			stats.innerHTML="<i>Идёт загрузка дерева обсуждений...</i>";
		}
		else if(activeMethod=="diskuss.expand")
		{
				stats=document.getElementById("d"+activeId);
				stats.innerHTML="<i>Идёт загрузка комментария...</i>";	
		}
		else if(activeMethod=="diskuss.post")
		{
			if(activeId!=0)
			{
				stats=document.getElementById("r"+activeId);
				stats.innerHTML='<span class="comment_caption"><i>Идёт отправка комментария...</i></span>';	
			}
		}
		else if(activeMethod=="diskuss.delete")
		{
			stats=document.getElementById("d"+activeId);
			stats.innerHTML='<i>Идёт удаление комментария...</i>';	
		}
	}
	
	if((req.readyState==4)&&(req.status==200))
	{
		//alert(req.responseText);
		response=req.responseXML.documentElement;			// responseText
		//alert(req.responseText);
		/*
		if(!response.documentElement)
		{
			var resp=XML.newDocument();
			resp.loadXML(response);
		}
		*/
		
		// разбор XML
		// в наборе <info> информация о типе ответа
		if(response.getElementsByTagName('info').length==1)
		{
			var type=response.getElementsByTagName('info')[0].getElementsByTagName('type')[0].firstChild.nodeValue;
			// модуль может быть по ошибке не задан
			if(response.getElementsByTagName('info')[0].getElementsByTagName('module')[0].firstChild)
			{
				var module=response.getElementsByTagName('info')[0].getElementsByTagName('module')[0].firstChild.nodeValue;
			}
			else
			{
				var module="";
			}
			// параметры опциональны
			if(response.getElementsByTagName('info')[0].getElementsByTagName('params')[0].firstChild)
			{
				var params=response.getElementsByTagName('info')[0].getElementsByTagName('params')[0].firstChild.nodeValue;
			}
			else
			{
				var params="";
			}
		}
		else
		{
			alert("Ошибка в данных");
			// ***
		}
		
		if(type=="error")
		{
			var message=response.getElementsByTagName('info')[0].getElementsByTagName('message')[0].firstChild.nodeValue;
			alert("Ошибка: "+message);
			// а на самом деле - вывести сообщение в специальной строке ***
		}
		else if(type=="data")
		{
			if(module=="diskuss.show")
			{
				var diskuss=document.getElementById('diskuss');
				diskuss.innerHTML='';
				numPages=response.getElementsByTagName('info')[0].getElementsByTagName('pages')[0].firstChild.nodeValue;
				buildPages();
				
				// сформировать дерево обсуждений
				var comments=response.getElementsByTagName('comments')[0].getElementsByTagName('comment');
				if(comments.length>0)
				{
					for(i=0; i<comments.length; i++)
					{
						var d_id=comments[i].getElementsByTagName('id')[0].firstChild.nodeValue;
						var d_reply=comments[i].getElementsByTagName('reply')[0].firstChild.nodeValue;
						var d_username=comments[i].getElementsByTagName('username')[0].firstChild.nodeValue;
						var d_usernick=comments[i].getElementsByTagName('usernick')[0].firstChild.nodeValue;
						var d_text=comments[i].getElementsByTagName('text')[0].firstChild.nodeValue;
						var d_level=comments[i].getElementsByTagName('level')[0].firstChild.nodeValue;
						var d_view=comments[i].getElementsByTagName('view')[0].firstChild.nodeValue;
						var d_date=comments[i].getElementsByTagName('date')[0].firstChild.nodeValue;
						
						// присоединение к id=diskuss
						var commentSpan = document.createElement("span");
						commentSpan.innerHTML=d_text;
						
						// локальная ссылка
						var linkA=document.createElement("a");
						linkA.appendChild(document.createTextNode(''));
						linkA.name='a'+d_id;
						
						// пользователь
						var userText=document.createTextNode(d_username);
						var userLink=document.createElement("a");
						userLink.appendChild(userText);
						userLink.href='/users/'+d_usernick+'/';
						userLink.className='comment_user';
						var userDiv = document.createElement("div");
						userDiv.appendChild(userLink);
						
						// дата комментария
						var dateText = document.createTextNode(d_date);
						var dateDiv = document.createElement("div");
						dateDiv.className='comment_date';
						dateDiv.appendChild(dateText);
						
						var newDiv = document.createElement("div");
						newDiv.appendChild(linkA);
						newDiv.appendChild(userDiv);
						newDiv.appendChild(dateDiv);
						newDiv.className='comment l'+d_level;
						newDiv.appendChild(commentSpan);
						newDiv.id='d'+d_id;
						
						// полно или развернуть
						if(d_view=='brief')
						{
							var expandSpan = document.createElement("span");
							expandSpan.innerHTML=' <i>(...)</i> <span onclick="expand('+d_id+');" class="expand">далее</span>';
							expandSpan.title='Развернуть сообщение';
							
							newDiv.appendChild(expandSpan);
						}
						
						// ссылка на комментарий
						var linkText=document.createTextNode('#');
						var linkLink=document.createElement("a");
						linkLink.appendChild(linkText);
						linkLink.href='#a'+d_id;
						linkLink.title='Ссылка на данный комментарий';
						linkLink.className='comment_link l'+d_level;
						var linkDiv = document.createElement("div");
						linkDiv.appendChild(linkLink);
						
						document.getElementById("diskuss").appendChild(newDiv);
						document.getElementById("diskuss").appendChild(linkDiv);
						
						// форма ответа для зарегистрированного
						if(rights>0)
						{
							var replyDiv = document.createElement("div");
							replyDiv.title='Ответить на комментарий';
							replyDiv.id='r'+d_id;
							replyDiv.innerHTML='<span onclick="replyform('+d_id+');">ответить</span>';
							replyDiv.className='comment_reply';
							document.getElementById("diskuss").appendChild(replyDiv);
						}
						
						// удаление (для админа)
						if(rights>1)
						{
							var deleteDiv = document.createElement("div");
							deleteDiv.title='Удалить комментарий';
							deleteDiv.id='delete'+d_id;
							deleteDiv.innerHTML='<span onclick="deletecomment('+d_id+');">удалить</span>';
							deleteDiv.className='comment_delete';
							document.getElementById("diskuss").appendChild(deleteDiv);
						}
					}
				}
			}
			else if(module=="diskuss.expand")
			{
				var comment=response.getElementsByTagName('comments')[0].getElementsByTagName('comment')[0];
				var d_id=comment.getElementsByTagName('id')[0].firstChild.nodeValue;
				var d_username=comment.getElementsByTagName('username')[0].firstChild.nodeValue;
				var d_usernick=comment.getElementsByTagName('usernick')[0].firstChild.nodeValue;
				var d_text=comment.getElementsByTagName('text')[0].firstChild.nodeValue;
				var d_date=comment.getElementsByTagName('date')[0].firstChild.nodeValue;
				var expand_id=document.getElementById('d'+d_id);
				
				//var dateText = document.createTextNode(d_date);
				var commentDiv=document.createElement("div");
				commentDiv.innerHTML=d_text;
				commentDiv.className='comment_expand';
				
				// пользователь
				var userText=document.createTextNode(d_username);
				var userLink=document.createElement("a");
				userLink.appendChild(userText);
				userLink.href='/users/'+d_usernick+'/';
				userLink.className='comment_user';
				var userDiv = document.createElement("div");
				userDiv.appendChild(userLink);
				
				// дата комментария
				var dateText=document.createTextNode(d_date);
				var dateDiv=document.createElement("div");
				dateDiv.className='comment_date';
				dateDiv.appendChild(dateText);
				expand_id.innerHTML='';
				expand_id.appendChild(userDiv);
				expand_id.appendChild(dateDiv);
				expand_id.appendChild(commentDiv);
				
				// перебросить в место раскрытого комментария
				window.location.href='#a'+d_id;
				
				showBlock(commentDiv);
			}
			else if(module=="diskuss.post")
			{
				var comment=response.getElementsByTagName('comments')[0].getElementsByTagName('comment')[0];
				var d_id=comment.getElementsByTagName('id')[0].firstChild.nodeValue;
				var d_reply=comment.getElementsByTagName('reply')[0].firstChild.nodeValue;
				var d_username=comment.getElementsByTagName('username')[0].firstChild.nodeValue;
				var d_usernick=comment.getElementsByTagName('usernick')[0].firstChild.nodeValue;
				var d_text=comment.getElementsByTagName('text')[0].firstChild.nodeValue.replace("\\",'');
				var d_date=comment.getElementsByTagName('date')[0].firstChild.nodeValue;
				
				if(d_reply!=0)
				{
					var parent_reply_id=document.getElementById('d'+d_reply);
					var commentSpan = document.createElement("span");
					commentSpan.innerHTML=d_text;
					
					// локальная ссылка
					var linkA=document.createElement("a");
					linkA.appendChild(document.createTextNode(''));
					linkA.name='a'+d_id;
					
					// пользователь
					var userText=document.createTextNode(d_username);
					var userLink=document.createElement("a");
					userLink.appendChild(userText);
					userLink.href='/users/'+d_usernick+'/';
					userLink.className='comment_user';
					var userDiv = document.createElement("div");
					userDiv.appendChild(userLink);
					
					// дата комментария
					var dateText = document.createTextNode(d_date);
					var dateDiv = document.createElement("div");
					dateDiv.className='comment_date';
					dateDiv.appendChild(dateText);
					
					d_level=parseInt(parent_reply_id.className.match(/[0-9]+/))+1;
					var newDiv = document.createElement("div");
					newDiv.appendChild(linkA);
					newDiv.appendChild(userDiv);
					newDiv.appendChild(dateDiv);
					newDiv.className='comment l'+d_level;
					newDiv.appendChild(commentSpan);
					newDiv.id='d'+d_id;
					
					// ссылка на комментарий
					var linkText=document.createTextNode('#');
					var linkLink=document.createElement("a");
					linkLink.appendChild(linkText);
					linkLink.href='#a'+d_id;
					linkLink.title='Ссылка на данный комментарий';
					linkLink.className='comment_link l'+d_level;
					var linkDiv = document.createElement("div");
					linkDiv.appendChild(linkLink);
					
					// форма ответа
					var replyDiv = document.createElement("div");
					replyDiv.title='Ответить на комментарий';
					replyDiv.id='r'+d_id;
					replyDiv.innerHTML='<span onclick="replyform('+d_id+');">ответить</span>';
					replyDiv.className='comment_reply l'+d_level;
					
					// восстановить кнопку "ответить"!
					oldReplyDiv=document.getElementById("r"+d_reply);
					oldReplyDiv.innerHTML='<span onclick="replyform('+d_reply+');">ответить</span>';
					
					document.getElementById("diskuss").insertBefore(newDiv, parent_reply_id.nextSibling.nextSibling.nextSibling);
					document.getElementById("diskuss").insertBefore(linkDiv, parent_reply_id.nextSibling.nextSibling.nextSibling.nextSibling);
					document.getElementById("diskuss").insertBefore(replyDiv, parent_reply_id.nextSibling.nextSibling.nextSibling.nextSibling);
					
					numPages=response.getElementsByTagName('info')[0].getElementsByTagName('pages')[0].firstChild.nodeValue;
					buildPages();
				}
				else
				{
					send("diskuss.show","post="+postId);
				}
			}
			else if(module=="diskuss.delete")
			{
				if(response.getElementsByTagName('info')[0].getElementsByTagName('result')[0].firstChild.nodeValue=="ok")
				{
					stats=document.getElementById("d"+activeId);
					stats.innerHTML="<i>Комментарий удалён модератором.</i>";	
				}
			}
		}
	}
}

function setPage(num)
{
	send('diskuss.show', 'page='+num+'&post='+postId);
	page=num;
}

function buildPages()
{
	var pagesCode='Страницы: ';
	var pages=document.getElementById('pages');
	// страницы
	for(var i=1; i<=numPages; i++)
	{
		if(page!=i)
		{
			pagesCode+='<span class="page" onclick="setPage('+i+')" title="Перейти на страницу '+i+'">'+i+'</span>';
		}
		else
		{
			pagesCode+='<span class="page" id="current_page" onclick="setPage('+i+')" title="Текущая страница">'+i+'</span>';
		}
	}
	pages.innerHTML=pagesCode;
}

function expand(id)
{
	activeId=id;
	send('diskuss.expand', 'id='+id);
}

function replyform(id)
{
	// проверить, есть ли логин
	
	if(rights>0)
	{
		// создание формы
		var formDiv=document.createElement("div");
		formDiv.className='comment_form';
		formDiv.id='cf'+id;
		formDiv.innerHTML='<div class="comment_caption">Ваш ответ:</div><form method="post" name="f'+id+'" onsubmit="reply('+id+'); return false;"><textarea class="comment_textarea" name="t'+id+'"></textarea><input type="submit" value="Отправить ответ"/></form>';
		
		commentId=document.getElementById('d'+id);
		commentId.appendChild(formDiv);
		
		showBlock(formDiv);
	}
	else
	{
		alert("Для участия в дискуссиях Вы должны быть зарегистрированным пользователем УлейГрада.");
	}
}

function reply(id)
{
	activeId=id;
	
	var htmlDiv=document.createElement("div");
	var htmlText=document.createTextNode(document.forms["f"+id].elements["t"+id].value);
	htmlDiv.appendChild(htmlText);
	postComment=htmlDiv.innerHTML;
	//document.body.removeChild(htmlDiv);
	
	
	// удалить форму добавления комментария
	var cfDivParent=document.getElementById('d'+id);
	var cfDiv=document.getElementById('cf'+id);
	//cfDiv.removeNode(true);
	cfDivParent.removeChild(cfDiv);
	
	
	send('diskuss.post', 'id='+id+'&post='+postId+'&text='+encodeURIComponent(postComment));
}

function deletecomment(id)
{
	if(window.confirm('Действительно удалить комментарий №'+id+'?'))
	{
		activeId=id;
		send('diskuss.delete', 'id='+id+'&post='+postId);
	}
}

function showBlock(id)
{
	var op=0;
	var intervalId, elementId;
	
	intervalId=setInterval(
	function()
	{
		if(op<=1)
		{
			//elementId=document.getElementById(id);
			elementId=id;
			elementId.style.opacity=op;
			elementId.style['filter']='Alpha(opacity='+op*100+')';
			elementId.style['-moz-opacity']=op;
			op+=0.15;
		}
		else
		{
			clearInterval(intervalId);
		}
	},
	50
	);
}

function send(module, params)
{
	req = null;
	
	if (window.XMLHttpRequest)
	{
		try
		{
			req = new XMLHttpRequest();
		}
        catch (e){}
	}
	else if (window.ActiveXObject)
	{
		try
		{
			req = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch (e)
		{
			try
			{
				req = new ActiveXObject('Microsoft.XMLHTTP');
			} catch (e){}
		}
	}
	
	if(req)
	{
		req.onreadystatechange = processReq;
		req.open("POST", "/blog_ajax.php", true);
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=windows-1251');
		params=params.replace(/&/g,'%26');
		req.send("module="+module+"&params="+params+"%26session="+session);
	}
	else
	{
		alert("Ошибка при отправке данных. Попробуйте повторить запрос ещё раз.");
	}
    
    activeMethod=module;
    
	return false;
}