var reqCurrency;
var reqSections
var reqLastComments;
var reqLastPosts;
var reqMergeComments;
var reqQuotePost;
var reqEditPost;
var reqEditComplain;
var reqShowPreview;
var reqDeletePost;
var reqLoadMessage = new Array;
var reqEditAnswer = new Array;
var reqCheckSenderStatus = new Array;
var reqMessagesCount;
var reqAnswerPreview = new Array;
var reqSendAnswer = new Array;
var reqDeleteMessages;

var currentSection = 0;
var currentAction = "none";
var loadInProgress = false;
var fadeInProgress = false;
var slideInProgress = false;
var isMergeComments = false;
var isShowComments;

var formAddTopic = 0;
var editPostId = 0;
var editComplainId = 0;
var deletePostId = 0;

var fadeRed;
var fadeGreen;
var fadeBlue;

var textRed;
var textGreen;
var textBlue;

var messages_classes = new Array;

unread_online_timeout = setTimeout("showUnread()", 60000);

function showUnread()
{
	if (document.title.search(/\*\*\*/) == -1) {
		makeRequest('/include/forum/show-unread.inc?req=1&rand=' + Math.random(), loadUnread);
		clearTimeout(unread_online_timeout);
		unread_online_timeout = setTimeout("showUnread()", 60000);
	}
}

function loadUnread(req)
{
   	if (req.readyState == 4)
   	{
   		if (req.status == 200)
   		{
   			document.title = req.responseText + document.title;
		}
	}
}

function toggleAddTopicForm()
{
    if (slideInProgress) return;
	
	slideInProgress = 1;
	if (formAddTopic == 1)
	{
		slideUp('expanded');
	}
	else
	{
		slideUp('collapsed');
	}
}

function slideUp(type)
{
	var box = document.getElementById('box_' + type);
	var height = box.clientHeight;
	if ((height == 0) && (formAddTopic == 0)) height = 50;
	height = height - 10;

	if (height <= 0)
	{
		if (type == 'collapsed') slideDown('expanded'); 
		else slideDown('collapsed');
		return;
	}

	box.style.height = height + 'px';
	setTimeout("slideUp('" + type + "')", 1);
}

function slideDown(type)
{
	var box = document.getElementById('box_' + type);
	var height = box.clientHeight;
	var content = document.getElementById('content_' + type);
	height = height + 10;

	if (height > content.offsetHeight)
	{
		slideInProgress = 0;
		height = content.offsetHeight;
		box.style.height = height + 'px';
		if (type == 'collapsed') formAddTopic = 0;
		else formAddTopic = 1;
		return;
	}

	box.style.height = height + 'px';
	setTimeout("slideDown('" + type + "')", 1);
}

function postRequest(url, params, func)
{
	var httpRequest = false;

	if (window.XMLHttpRequest) // Mozilla, Safari, ...
	{ 
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) httpRequest.overrideMimeType('text/html');
	} 
	else if (window.ActiveXObject) // IE
	{ 
		try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) 
		{
			try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } 
			catch (e) {}
		}
	}

	if (!httpRequest) return false;

	httpRequest.onreadystatechange = function() { func(httpRequest); }
	httpRequest.open('POST', url, true);
	httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	httpRequest.setRequestHeader("Content-Length", params.length);
	httpRequest.setRequestHeader("Connection", "close");
	httpRequest.send(params);
}

function getRequest(url, func)
{
	var httpRequest = false;

	if (window.XMLHttpRequest) // Mozilla, Safari, ...
	{ 
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) httpRequest.overrideMimeType('text/html');
	} 
	else if (window.ActiveXObject) // IE
	{ 
		try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) 
		{
			try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } 
			catch (e) {}
		}
	}

	if (!httpRequest) return false;

	httpRequest.onreadystatechange = function() { func(httpRequest); }
	httpRequest.open('GET', url, true);
	httpRequest.send(null);
}

// generic show function
function show(url, load)
{
	if (window.XMLHttpRequest)
	{
		req = new XMLHttpRequest();
		req.onreadystatechange = load;
		req.open("GET", url, true);
		req.send(null);
	}
	else if (window.ActiveXObject)
	{
		req = new ActiveXObject("Microsoft.XMLHTTP");
		if (req)
		{
			req.onreadystatechange = load;
			req.open("POST", url, true);
			req.send();
		}
	}
	return req;
}

/*function showCurrency(type)
{
	var url = "/include/forum/currency.inc?type=" + type + "&rand=" + Math.random();
	reqCurrency = undefined;
	reqCurrency = show(url, function ()
	{
		if (reqCurrency)
		{
			if (reqCurrency.readyState == 4)
			{
				var currency = document.getElementById('currency');
				currency.innerHTML = reqCurrency.responseText;
			}
		}
	});
}*/

function showSections()
{
	var url = "/include/forum/sections.inc?rand=" + Math.random();
	reqSections = undefined;
	reqSections = show(url, function ()
	{
		if (reqSections)
		{
			if (reqSections.readyState == 4)
			{
				var sections = document.getElementById('sections');
				sections.innerHTML = reqSections.responseText;
			}
		}
	});
}

function showLastComments()
{
	if (isMergeComments || !isShowComments)
    {
		var last_comments = document.getElementById('last_comments');
		last_comments.innerHTML = "";
	}
	else
	{
		var url = "/include/forum/last-comments.inc?rand=" + Math.random();
		reqLastComments = undefined;
		reqLastComments = show(url, function ()
		{
			if (reqLastComments)
			{
				if (reqLastComments.readyState == 4)
				{
					var last_comments = document.getElementById('last_comments');
					last_comments.innerHTML = reqLastComments.responseText;
				}
			}
		});
	}
}

function showLastPosts(action, section)
{
	if (!action) action = "none";
	if (!section) section = 0;

	var url = "/include/forum/last-posts.inc?action=" + action + "&section=" + section + "&rand=" + Math.random();
	reqLastPosts = undefined;
	reqLastPosts = show(url, function ()
	{
		if (reqLastPosts)
		{
			if (reqLastPosts.readyState == 4)
			{
				printLastPosts();
			}
		}
	});
}

function printLastPosts()
{
	if ((currentAction == "hide") && fadeInProgress)
	{
		setTimeout("printLastPosts()", 1);
		return;
	}

	var last_posts = document.getElementById('last_posts');
	last_posts.innerHTML = reqLastPosts.responseText;
	if (currentSection == 7)
	{
		showLastComments();
	}
	if (currentAction == "hide")
	{
		currentSection = 0;
		currentAction = "none";
	}
	loadInProgress = false;
}

function switchSection(section)
{
	var check = document.getElementById('f'+section);
	if (!check) return;
	if (loadInProgress || fadeInProgress)
	{
		check.checked = !check.checked;
		return;
	}

	var action = (check.checked == true) ? "show" : "hide";

	if (section == 7)
	{
		isShowComments = (action == "show") ? true : false;
	}

	showLastPosts(action, section);

	loadInProgress = true;
	currentAction = action;
	currentSection = section;
	if (action == "hide")
	{
		fadeInProgress = true;
		fadeRed = 255;
		fadeGreen = 170;
		fadeBlue = 170;
		textRed = 0;
		textGreen = 0;
		textBlue = 0;
	}
	else
	{
		fadeInProgress = false;
		fadeRed = 255;
		fadeGreen = 255;
		fadeBlue = 255;
		textRed = 255;
		textGreen = 255;
		textBlue = 255;
	}
	doFade();
}

function doFade()
{
    if ((currentAction == "show") && loadInProgress)
    {
    	setTimeout("doFade()", 1);
    	return;
    }

	for (i = 0; i < 25; i++)
	{
		var line = document.getElementById("post-"+i);

		if (line)
		{
			if (line.getAttribute("section") != currentSection) continue;

			var aaa = line.getElementsByTagName("*");
			for (var j = 0; j < aaa.length; j++)
			{
				aaa[j].style.color = "rgb("+textRed+","+textGreen+","+textBlue+")";
			}

			if (line.className == "color")
			{
				line.className = "nocolor";
			}
			else if (line.className != "nocolor")
			{
				if (line.previousSibling)
				{
					var line0 = line.previousSibling;
					if (line0.style)
					{
						line0.style.backgroundColor = "rgb("+fadeRed+","+fadeGreen+","+fadeBlue+")";
					}
					else
					{
					    line0 = line0.previousSibling;
					    if (line0)
					    {
						    if (line0.style) line0.style.backgroundColor = "rgb("+fadeRed+","+fadeGreen+","+fadeBlue+")";
	                	}
					}
				}

				if (line.nextSibling)
				{
					var line1 = line.nextSibling;
					if (line1.style)
					{
						line1.style.backgroundColor = "rgb("+fadeRed+","+fadeGreen+","+fadeBlue+")";
					}
					else
					{
						line1 = line1.nextSibling;
						if (line1)
						{
							if (line1.style) line1.style.backgroundColor = "rgb("+fadeRed+","+fadeGreen+","+fadeBlue+")";
						}
					}
				}
			}
			line.style.backgroundColor = "rgb("+fadeRed+","+fadeGreen+","+fadeBlue+")";
		}
	}

	if (currentAction == "hide")
	{
		fadeGreen+=5;
		fadeBlue+=5;
		textRed+=15;
		textGreen+=15;
		textBlue+=15;

		if ((fadeGreen >= 255) && (fadeBlue >= 255))
		{
			doHide();
		}
		else
		{
			setTimeout("doFade()", 1);
		}
	}
	else
	{
		fadeRed-=5;
		fadeBlue-=5;
		textRed-=15;
		textGreen-=15;
		textBlue-=15;

		if ((fadeRed <= 170) && (fadeBlue <= 170))
		{
			doShow();
		}
		else
		{
			setTimeout("doFade()", 1);
		}
	}
}

function doHide()
{
	for (i = 0; i < 25; i++)
	{
		var line = document.getElementById("post-"+i);
		if (line)
		{
			if (line.getAttribute("section") != currentSection) continue;
			line.style.display = "none";

			if (line.nextSibling)
			{
				var line1 = line.nextSibling;
				if (line1.style)
				{
					line1.style.display = "none";
				}
				else
				{
					line1 = line1.nextSibling;
					if (line1)
					{
						if (line1.style) line1.style.display = "none";
					}
				}
			}
		}
	}

	fadeInProgress = false;
}

function doShow()
{
	for (i = 0; i < 25; i++)
	{
		var line = document.getElementById("post-"+i);
		if (line)
		{
			if (line.getAttribute("section") != currentSection) continue;

			var aaa = line.getElementsByTagName("*");
			for (var j = 0; j < aaa.length; j++)
			{
			    if (aaa[j].id == "carrot") aaa[j].style.color = "";
			}

			if (line.className == "nocolor")
			{
				line.className = "color";
			}
			else
			{
				if (line.previousSibling)
				{
					var line0 = line.previousSibling;
					if (line0.style)
					{
						line0.style.backgroundColor = "";
					}
					else
					{
					    line0 = line0.previousSibling;
					    if (line0)
					    {
						    if (line0.style) line0.style.backgroundColor = "";
	                	}
					}
				}

				if (line.nextSibling)
				{
					var line1 = line.nextSibling;
					if (line1.style)
					{
						line1.style.backgroundColor = "";
					}
					else
					{
						line1 = line1.nextSibling;
						if (line1)
						{
							if (line1.style) line1.style.backgroundColor = "";
						}
					}
				}

				line.style.backgroundColor = "";
			}
		}
	}

	fadeInProgress = false;
	currentSection = 0;
	currentAction = "none";
}

function mergeComments(action)
{
	var url = "/include/forum/merge-comments.inc?action=" + action + "&rand=" + Math.random();
	currentAction = (action == "merge") ? "show" : "hide";
	currentSection = 7;
	isShowComments = true;
	reqMergeComments = undefined;
	reqMergeComments = show(url, function()
	{
		if (reqMergeComments)
		{
			if (reqMergeComments.readyState == 4)
			{
				showLastPosts(action, 7);
				loadInProgress = true;
				if (currentAction == "hide")
				{
					isMergeComments = false;
					fadeInProgress = true;
					fadeRed = 255;
					fadeGreen = 170;
					fadeBlue = 170;
					textRed = 0;
					textGreen = 0;
					textBlue = 0;
				}
				else
				{
					isMergeComments = true;
					fadeInProgress = false;
					fadeRed = 255;
					fadeGreen = 255;
					fadeBlue = 255;
					textRed = 255;
					textGreen = 255;
					textBlue = 255;
				}
				doFade();

				showLastComments();
				showSections();
			}
		}
	});
}

function insertText(open, close)
{
	msgfield = (document.all) ? document.all.req_message : document.forms['post']['req_message'];
	// IE support
	if (document.selection && document.selection.createRange)
	{
		msgfield.focus();
		sel = document.selection.createRange();
		sel.text = open + sel.text + close;
		msgfield.focus();
	}
	// Moz support
	else if (msgfield.selectionStart || msgfield.selectionStart == '0')
	{
		var startPos = msgfield.selectionStart;
		var endPos = msgfield.selectionEnd;

		msgfield.value = msgfield.value.substring(0, startPos) + open + msgfield.value.substring(startPos, endPos) + close + msgfield.value.substring(endPos, msgfield.value.length);
		msgfield.selectionStart = msgfield.selectionEnd = endPos + open.length + close.length;
		msgfield.focus();
	}
	// Fallback support for other browsers
	else
	{
		msgfield.value += open + close;
		msgfield.focus();
	}

	return;
}

function insertTextEx(open, close, input)
{
    element = document.getElementById(input);
	// IE support
	if (document.selection && document.selection.createRange)
	{
		element.focus();
		sel = document.selection.createRange();
		sel.text = open + sel.text + close;
		element.focus();
	}
	// Moz support
	else if (element.selectionStart || element.selectionStart == '0')
	{
		var startPos = element.selectionStart;
		var endPos = element.selectionEnd;

		element.value = element.value.substring(0, startPos) + open + element.value.substring(startPos, endPos) + close + element.value.substring(endPos, element.value.length);
		element.selectionStart = element.selectionEnd = endPos + open.length + close.length;
		element.focus();
	}
	// Fallback support for other browsers
	else
	{
		element.value += open + close;
		element.focus();
	}

	return;
}

function goTopicPage(topic, page)
{
    page = parseInt(page);
    if (isNaN(page) || page < 1) return;
    window.location.assign("/viewtopic.html?id=" + topic + "&p=" + page);
}

function goLastPostsPage(page)
{
	page = parseInt(page);
	if (isNaN(page) || page < 1) return;
	window.location.assign("/index.html?p=" + page);
}

function goForumPage(topic, page)
{
    page = parseInt(page);
    if (isNaN(page) || page < 1) return;
    window.location.assign("/viewforum.html?id=" + topic + "&p=" + page);
}

function goBlogsPage(page)
{
    page = parseInt(page);
    if (isNaN(page) || page < 1) return;
    window.location.assign("/viewblogs.html?p=" + page);
}

function quotePost(post)
{
	if ((editPostId > 0) || (editComplainId > 0) || (deletePostId > 0)) return;
	
	var url = "/include/forum/quote-post.inc?post=" + post + "&rand=" + Math.random();
	reqQuotePost = undefined;
	reqQuotePost = show(url, function ()
	{
		if (reqQuotePost)
		{
			if (reqQuotePost.readyState == 4)
			{
				var req_message = document.getElementById('req_message');
				req_message.value = reqQuotePost.responseText;
				req_message.focus();
			}
		}
	});
}

function editPost(post)
{
	if ((editPostId > 0) || (editComplainId > 0) || (deletePostId > 0)) return;
    
	editPostId = post;
	var url = "/include/forum/edit-post.inc?post=" + editPostId + "&rand=" + Math.random();
	reqEditPost = undefined;
	reqEditPost = show(url, function ()
	{
		if (reqEditPost)
		{
			if (reqEditPost.readyState == 4)
			{
			    if (editPostId > 0)
			    {
					var post = document.getElementById('post-' + editPostId);
					post.innerHTML = reqEditPost.responseText;
					post.focus();
	        	}
			}
		}
	});
}

function processMissingCharacters(text)
{
	text = text.replace(/\+/g, "&plus;");
	//text = text.replace(/\#/g, "&#35;");
	//text = text.replace(/\$/g, "&#36;");
	text = text.replace(/\%/g, "&#37;");
	//text = text.replace(/\&/g, "&#38;");

	/*text = text.replace(//g, "&#128;");
	text = text.replace(//g, "&#129;");
	text = text.replace(//g, "&#130;");
	text = text.replace(//g, "&#131;");
	text = text.replace(//g, "&#132;");
	text = text.replace(//g, "&#133;");
	text = text.replace(//g, "&#134;");
	text = text.replace(//g, "&#135;");
	text = text.replace(//g, "&#136;");
	text = text.replace(//g, "&#137;");
	text = text.replace(//g, "&#138;");
	text = text.replace(//g, "&#139;");
	text = text.replace(//g, "&#140;");
	text = text.replace(//g, "&#141;");
	text = text.replace(//g, "&#142;");
	text = text.replace(//g, "&#143;");
	text = text.replace(//g, "&#144;");
	text = text.replace(//g, "&#145;");
	text = text.replace(//g, "&#146;");
	text = text.replace(//g, "&#147;");
	text = text.replace(//g, "&#148;");
	text = text.replace(//g, "&#149;");
	text = text.replace(//g, "&#150;");
	text = text.replace(//g, "&#151;");
	text = text.replace(//g, "&#152;");
	text = text.replace(//g, "&#153;");
	text = text.replace(//g, "&#154;");
	text = text.replace(//g, "&#155;");
	text = text.replace(//g, "&#156;");
	text = text.replace(//g, "&#157;");
	text = text.replace(//g, "&#158;");
	text = text.replace(//g, "&#159;");
	text = text.replace(//g, "&#160;");
	text = text.replace(//g, "&#161;");
	text = text.replace(//g, "&#162;");
	text = text.replace(//g, "&#163;");
	text = text.replace(//g, "&#164;");
	text = text.replace(//g, "&#165;");
	text = text.replace(//g, "&#166;");
	text = text.replace(//g, "&#167;");
	text = text.replace(//g, "&#168;");
	text = text.replace(//g, "&#169;");
	text = text.replace(//g, "&#170;");
	text = text.replace(//g, "&#171;");
	text = text.replace(//g, "&#172;");
	text = text.replace(//g, "&#173;");
	text = text.replace(//g, "&#174;");
	text = text.replace(//g, "&#175;");
	text = text.replace(//g, "&#176;");
	text = text.replace(//g, "&#177;");
	text = text.replace(//g, "&#178;");
	text = text.replace(//g, "&#179;");
	text = text.replace(//g, "&#180;");
	text = text.replace(//g, "&#181;");
	text = text.replace(//g, "&#182;");
	text = text.replace(//g, "&#183;");
	//text = text.replace(//g, "&#184;");
	//text = text.replace(//g, "&#185;");
	text = text.replace(//g, "&#186;");
	text = text.replace(//g, "&#187;");
	text = text.replace(//g, "&#188;");
	text = text.replace(//g, "&#189;");
	text = text.replace(//g, "&#190;");
	text = text.replace(//g, "&#191;");*/

	return text;
}

function updatePost()
{
	if (editPostId == 0) return;

	var message = document.getElementById('message-' + editPostId);
	if (message.value == '') return;

	message.value = processMissingCharacters(message.value);

	//message.value = message.value.replace(/\+/g, "&plus;");
	//message.value = message.value.replace(//g, "&#150;");
	//message.value = message.value.replace(//g, "&#151;");
	//message.value = message.value.replace(//g, "&#160;");
	//message.value = message.value.replace(//g, "&#171;");
	//message.value = message.value.replace(//g, "&#187;");
	//message.value = message.value.replace(//g, "&#133;");
	//message.value = message.value.replace(//g, "&#176;");
	//message.value = message.value.replace(//g, "&#169;");

	var url = "/include/forum/update-post.inc";
	var params = "post=" + editPostId + "&message=" + escape(encodeURI(message.value));
	//var params = "post=" + editPostId + "&message=" + escape(message.value);
	//var params = "post=" + editPostId + "&message=" + encodeURI(message.value);

	postRequest(url, params, doUpdatePost);
}	

function doUpdatePost(req)
{
	if (req.readyState == 4)
	{
		if (req.status == 200)
		{
			if (editPostId > 0)
			{
				var box = document.getElementById('box-' + editPostId);
				box.innerHTML = req.responseText;
				editPostId = 0;
			}
		}
	}
}

function cancelEditPost()
{
	if (editPostId == 0) return;

	var url = "/include/forum/update-post.inc?post=" + editPostId + "&message=&rand=" + Math.random();
	reqEditPost = undefined;
	reqEditPost = show(url, function ()
	{
		if (reqEditPost)
		{
			if (reqEditPost.readyState == 4)
			{
				if (editPostId > 0)
				{
					var box = document.getElementById('box-' + editPostId);
					box.innerHTML = reqEditPost.responseText;
					editPostId = 0;
				}
			}
		}
	});
}

function editComplain(post)
{
	if ((editPostId > 0) || (editComplainId > 0) || (deletePostId > 0)) return;
	
	editComplainId = post;
	var url = '/include/forum/edit-complain.inc?post=' + editComplainId + '&rand=' + Math.random();
	getRequest(url, loadEditComplain);
}

function loadEditComplain(req)
{
	if (req.readyState == 4)
	{
		if (req.status == 200)
		{
			if (editComplainId > 0)
			{
				var complain = document.getElementById('complain-' + editComplainId);
				if (!complain) return false;

				complain.innerHTML = req.responseText;
				complain.focus();
			}
		}
	}
}

function updateComplain()
{
	if (editComplainId == 0) return;

	var message = document.getElementById('message-' + editComplainId);
	if (message.value == '') return;

	/*var url = "/include/forum/update-complain.inc?complain=" + editComplainId + "&message=" + escape(message.value) + "&rand=" + Math.random();
	reqEditComplain = undefined;
	reqEditComplain = show(url, function ()
	{
		if (reqEditComplain)
		{
			if (reqEditComplain.readyState == 4)
			{
				if (editComplainId > 0)
				{
					var box = document.getElementById('box-' + editComplainId);
					box.innerHTML = reqEditComplain.responseText;
					editComplainId = 0;
				}
			}
		}
	});*/

	var url = "/include/forum/update-complain.inc";
	var params = "complain=" + editComplainId + "&message=" + escape(message.value) + "&rand=" + Math.random();
	postRequest(url, params, function (req)
	{
		if (req.readyState == 4)
		{
			if (editComplainId > 0)
			{
				var box = document.getElementById('box-' + editComplainId);
				box.innerHTML = req.responseText;
				editComplainId = 0;
			}
		}
	});
}

function cancelEditComplain()
{
	if (editComplainId == 0) return;

	var complain = document.getElementById('complain-' + editComplainId);
	complain.innerHTML = "";
	editComplainId = 0;
}

function showPreview()
{
	var url = "/include/forum/show-preview.inc";
	var message = document.getElementById('req_message');
	if (!message) return false;
	var params = "message=" + escape(encodeURI(message.value));

	postRequest(url, params, loadPreview);
}

function loadPreview(req)
{
	if (req.readyState == 4)
	{
		if (req.status == 200)
		{
			var preview = document.getElementById('preview');
			preview.innerHTML = req.responseText;
		}
	}
}

function confirmDeletePost(post)
{
	if ((editPostId > 0) || (editComplainId > 0) || (deletePostId > 0)) return;

	deletePostId = post;
	var url = '/include/forum/confirm-delete-post.inc?post=' + deletePostId + "&rand=" + Math.random();
	getRequest(url, loadConfirmDeletePost);
}

function loadConfirmDeletePost(req)
{
	if (req.readyState == 4)
	{
		if (req.status == 200)
		{
			var complain = document.getElementById('complain-' + deletePostId);
			if (!complain) return false;

			complain.innerHTML = req.responseText;
		}
	}	
}

function deletePost()
{
	if (deletePostId == 0) return;

	var url = "/include/forum/delete-post.inc?post=" + deletePostId + "&rand=" + Math.random();
	deletePostId = 0;
	window.location.href = url;
}

function cancelDeletePost()
{
	if (deletePostId == 0) return;

	var complain = document.getElementById('complain-' + deletePostId);
	complain.innerHTML = "";
	deletePostId = 0;
}

function showMessage(id)
{
	var message = document.getElementById('message-' + id);
	if (!message) return;

	if (message.className != 'read')
	{
		messages_classes[id] = message.className;
		message.className = 'read';

		var anchors = message.getElementsByTagName('A');
		for (i = 0; i < anchors.length; i++)
		{
		    anchors[i].style.fontWeight = 'bold';
			anchors[i].id = 'carrot';
		}

		var table = message.parentNode;
		var tr1 = table.insertRow(message.rowIndex + 1);
		tr1.id = 'message-' + id + '-1';
		var td11 = tr1.insertCell(0);
		td11.colSpan = 3;
		var td12 = tr1.insertCell(1);
		var span = document.createElement('span');
		span.className = 'text11';
		span.id = 'gray';
		var span_text = document.createTextNode(' ...');
		span.appendChild(span_text);
		td12.appendChild(span);
		var tr2 = table.insertRow(tr1.rowIndex + 1);
		var td21 = tr2.insertCell(0);
		td21.height = 20;
		var tr3 = table.insertRow(tr1.rowIndex + 2);
		var td31 = tr3.insertCell(0);
		var td32 = tr3.insertCell(1);
		td32.colSpan = 7;
		td32.id = 'message-' + id + '-content';
		var td32_text = document.createTextNode(' ...');
		td32.appendChild(td32_text);
//		var td33 = tr3.insertCell(2);
		var tr4 = table.insertRow(tr1.rowIndex + 3);
		tr4.className = 'read2';
		var td41 = tr4.insertCell(0);
		td41.colSpan = 9;
		var td41_text = document.createTextNode(".");
		td41.appendChild(td41_text);
		td41.innerHTML = "&nbsp;"; // !!!

		var box = document.getElementById('box');
		/*var url = "/include/forum/load-message.inc?box=" + box.value + "&message=" + id + "&rand=" + Math.random();
		reqLoadMessage[id] = undefined;
		reqLoadMessage[id] = show(url, function ()
		{
			if (reqLoadMessage[id])
			{
				if (reqLoadMessage[id].readyState == 4)
				{
					td32.innerHTML = reqLoadMessage[id].responseText;
				}
			}
		});*/

		var url = "/include/forum/load-message.inc";
		var params = "box=" + box.value + "&message=" + id + "&rand=" + Math.random();
		postRequest(url, params, function (req)
		{
			if (req.readyState == 4)
			{
				td32.innerHTML = req.responseText;
			}
		});

		/*var url = "/include/forum/check-sender-status.inc?message=" + id + "&rand=" + Math.random();
		reqCheckSenderStatus[id] = undefined;
		reqCheckSenderStatus[id] = show(url, function ()
		{
			if (reqCheckSenderStatus[id])
			{
				if (reqCheckSenderStatus[id].readyState == 4)
				{
					span.innerHTML = reqCheckSenderStatus[id].responseText;
				}
			}
		});*/

		var url = "/include/forum/check-sender-status.inc";
		var params = "message=" + id + "&rand=" + Math.random();
		postRequest(url, params, function (req)
		{
			if (req.readyState == 4)
			{
				span.innerHTML = req.responseText;
			}
		});

		showMessagesCount();
	}
	else
	{
		message.className = messages_classes[id];

		var tr1 = document.getElementById('message-' + id + '-1');
		var table = tr1.parentNode;
		table.deleteRow(tr1.rowIndex + 3);
		table.deleteRow(tr1.rowIndex + 2);
		table.deleteRow(tr1.rowIndex + 1);
		table.deleteRow(tr1.rowIndex);

		var anchors = message.getElementsByTagName('A');
		for (i = 0; i < anchors.length; i++)
		{
		    anchors[i].style.fontWeight = '';
			anchors[i].id = '';
		}
	}
}

function showMessagesCount()
{
	/*var url = "/include/forum/show-messages-count.inc?rand=" + Math.random();
	reqMessagesCount = undefined;
	reqMessagesCount = show(url, function ()
	{
		if (reqMessagesCount)
		{
			if (reqMessagesCount.readyState == 4)
			{
				var messages_count = document.getElementById('messages_count');
				messages_count.innerHTML = reqMessagesCount.responseText;
			}
		}
	});*/
	
	var url = "/include/forum/show-messages-count.inc";
	var params = "rand=" + Math.random();
	postRequest(url, params, function (req)
	{
		if (req.readyState == 4)
		{
			var messages_count = document.getElementById('messages_count');
			messages_count.innerHTML = req.responseText;
		}
	});
}

function editAnswer(message)
{
	//var url = "/include/forum/edit-answer.inc?message=" + message + "&rand=" + Math.random();

	var url = "/include/forum/edit-answer.inc";
	var params = "message=" + message + "&rand=" + Math.random();
	postRequest(url, params, function (req)
	{
		if (req.readyState == 4)
		{
			var answer = document.getElementById('answer-' + message);
			answer.innerHTML = req.responseText;
		}
	});

	/*reqEditAnswer[message] = undefined;
	reqEditAnswer[message] = show(url, function ()
	{
		if (reqEditAnswer[message])
		{
			if (reqEditAnswer[message].readyState == 4)
			{
				var answer = document.getElementById('answer-' + message);
				answer.innerHTML = reqEditAnswer[message].responseText;
			}
		}
	});*/
}

function cancelEditAnswer(message)
{
	var answer = document.getElementById('answer-' + message);
	answer.innerHTML = "<a href='#' onclick='editAnswer(" + message + "); return false' class='onbg' style='font-size:12px' id='gray'><b></b></a>";
}

function showAnswerPreview(id)
{
	var answer = document.getElementById('answer-' + id + '-content');
	//var url = "/include/forum/show-preview.inc?message=" + escape(answer.value) + "&rand=" + Math.random();

	var url = "/include/forum/show-preview.inc";
	var params = "message=" + escape(answer.value) + "&rand=" + Math.random();
	postRequest(url, params, function (req)
	{
		if (req.readyState == 4)
		{
			var preview = document.getElementById('answer-' + id + '-preview');
			preview.innerHTML = req.responseText;
		}
	});
	
	/*reqAnswerPreview[id] = undefined;
	reqAnswerPreview[id] = show(url, function ()
	{
		if (reqAnswerPreview[id])
		{
			if (reqAnswerPreview[id].readyState == 4)
			{
				var preview = document.getElementById('answer-' + id + '-preview');
				preview.innerHTML = reqAnswerPreview[id].responseText;
			}
		}
	});*/
}

function sendAnswer(id)
{
	var answer = document.getElementById('answer-' + id + '-content');

	//answer.value = answer.value.replace(/\+/g, "&#43;");
	//answer.value = answer.value.replace(//g, "&#150;");
	//answer.value = answer.value.replace(/%/g, "&#37;");
	//answer.value = answer.value.replace(//g, "&#151;");
	//answer.value = answer.value.replace(//g, "&#160;");
	//answer.value = answer.value.replace(//g, "&#171;");
	//answer.value = answer.value.replace(//g, "&#187;");
	//answer.value = answer.value.replace(//g, "&#133;");
	//answer.value = answer.value.replace(//g, "&#176;");

	answer.value = processMissingCharacters(answer.value);
	
	//var url = "/include/forum/send-answer.inc?message=" + id + "&answer=" + escape(answer.value) + "&rand=" + Math.random();

	var url = "/include/forum/send-answer.inc";
	var params = "message=" + id + "&answer=" + escape(encodeURI(answer.value));
	postRequest(url, params, function (req)
	{
		if (req.readyState == 4)
		{
			var preview = document.getElementById('answer-' + id + '-preview');
			preview.innerHTML = "";
			cancelEditAnswer(id);
			showMessagesCount();
		}
	});

	/*reqSendAnswer[id] = undefined;
	reqSendAnswer[id] = show(url, function ()
	{
		if (reqSendAnswer[id])
		{
			if (reqSendAnswer[id].readyState == 4)
			{
				var preview = document.getElementById('answer-' + id + '-preview');
				preview.innerHTML = "";
				cancelEditAnswer(id);
				showMessagesCount();
			}
		}
	});
	form.submit;*/
}

/*function sendAnswer(id)
{
	var answer = document.getElementById('answer-' + id + '-content');
	answer.value = answer.value.replace(/\+/g, "&#43;");
	answer.value = answer.value.replace(/-/g, "&#150;");
	answer.value = answer.value.replace(/%/g, "&#37;");
	answer.value = answer.value.replace(/-/g, "&#151;");
	answer.value = answer.value.replace(//g, "&#160;");
	answer.value = answer.value.replace(/</g, "&#171;");
	answer.value = answer.value.replace(/>/g, "&#187;");
	answer.value = answer.value.replace(/:/g, "&#133;");
	answer.value = answer.value.replace(//g, "&#176;");

	var url = "/include/forum/send-answer.inc?message=" + id + "&answer=" + escape(answer.value) + "&rand=" + Math.random();
	reqSendAnswer[id] = undefined;
	reqSendAnswer[id] = show(url, function ()
	{
		if (reqSendAnswer[id])
		{
			if (reqSendAnswer[id].readyState == 4)
			{
				var preview = document.getElementById('answer-' + id + '-preview');
				preview.innerHTML = "";
				cancelEditAnswer(id);
				showMessagesCount();
			}
		}
	});
	form.submit;
}*/

function checkRegForm()
{
	var form = document.getElementById('reg_form');
	if (!form) return false;

    var err = document.getElementById('errors');
    err.innerHTML = "";

	var errors = new Array;
	form.req_username.style.backgroundColor = "#ffffff";
	form.req_day.style.backgroundColor = "#ffffff";
	form.req_month.style.backgroundColor = "#ffffff";
	form.req_email.style.backgroundColor = "#ffffff";
	form.req_pass1.style.backgroundColor = "#ffffff";
	form.req_pass2.style.backgroundColor = "#ffffff";
	if (form.captcha_response != null) form.captcha_response.style.backgroundColor = "#ffffff";

	if (form.req_username.value == '')
	{
		form.req_username.style.backgroundColor = "#ffff99";
		errors.push("   ");
	}

	/*if (form.req_day.value == 0 || form.req_month.value == 0)
	{
		errors.push("   ");
	}
	if (form.req_day.value == 0)
	{
		form.req_day.style.backgroundColor = "#ffff99";
	}
	if (form.req_month.value == 0)
	{
		form.req_month.style.backgroundColor = "#ffff99";
	}*/

	if (form.req_username.value.length > 20)
	{
		form.req_username.style.backgroundColor = "#ffff99";
		errors.push("   ");
	}

	if (form.req_email.value == '')
	{
		form.req_email.style.backgroundColor = "#ffff99";
		errors.push("    ");
	}
	else if (form.req_email.value.indexOf('@') < 1)
	{
		form.req_email.style.backgroundColor = "#ffff99";
		errors.push("    ");
	}

	if (form.req_pass1.value == '' || form.req_pass1.value == '')
	{
		form.req_pass1.style.backgroundColor = "#ffff99";
		errors.push("   (1)");
	}
	else if (form.req_pass1.value != form.req_pass2.value)
	{
		form.req_pass1.style.backgroundColor = "#ffff99";
		form.req_pass2.style.backgroundColor = "#ffff99";
		errors.push("   ");
	}

	if (form.captcha_response != null) if (hex_md5(form.captcha_response.value) != form.captcha_info.value)
	{
		form.captcha_response.style.backgroundColor = "#ffff99";
		errors.push("    ");
	}

	if (errors.length > 0)
	{
		var err_inner = "";
		for (i = 0; i < errors.length; i++)
		{
			err_inner = err_inner + "<b>(!)</b>&nbsp;" + errors[i] + "<br>\n";
		}
		err.innerHTML = err_inner;
		return false;
	}

	/*var url = "/include/forum/check-user-exist.inc?username=" + escape(form.req_username.value) + "&rand=" + Math.random();
	reqCheckUserExist = undefined;
	reqCheckUserExist = show(url, function ()
	{
		if (reqCheckUserExist)
		{
			if (reqCheckUserExist.readyState == 4)
			{
			    if (reqCheckUserExist.responseText != "not exist")
			    {
					var form = document.getElementById('reg_form');
					form.req_username.style.backgroundColor = "#ffff99";
				    var err = document.getElementById('errors');
				    err.innerHTML = "<b>(!)</b>&nbsp;     ";
					return false;
				}
				else
				{
					var form = document.getElementById('reg_form');
					form.submit();
				}
			}
		}
	});*/

	var url = "/include/forum/check-user-exist.inc";
	var params = "username=" + escape(form.req_username.value) + "&rand=" + Math.random();
	postRequest(url, params, function (req)
	{
		if (req.readyState == 4)
		{
			if (req.responseText != "not exist")
			{
				var form = document.getElementById('reg_form');
				form.req_username.style.backgroundColor = "#ffff99";
				var err = document.getElementById('errors');
				err.innerHTML = "<b>(!)</b>&nbsp;     ";
				return false;
			}
			else
			{
				var form = document.getElementById('reg_form');
				if (!form) return false;

			    var err = document.getElementById('errors');
			    err.innerHTML = "";

			    var url = "/include/forum/check-email-exist.inc";
			    var params = "email=" + escape(form.req_email.value) + "&rand=" + Math.random();
			    postRequest(url, params, function (req)
			    {
					if (req.readyState == 4)
					{
						if (req.responseText == "exist")
						{
							var form = document.getElementById('reg_form');
							form.req_email.style.backgroundColor = "#ffff99";
							var err = document.getElementById('errors');
							err.innerHTML = "<b>(!)</b>&nbsp; .   ";
							return false;
						}
						else if (req.responseText == "invalid")
						{
							var form = document.getElementById('reg_form');
							form.req_email.style.backgroundColor = "#ffff99";
							var err = document.getElementById('errors');
							err.innerHTML = "<b>(!)</b>&nbsp;   . ";
							return false;
						}
						else
						{
							var form = document.getElementById('reg_form');
							form.submit();
						}
					}
			    });
			}
		}
	});
}

function checkAddTopicForm()
{
	var form = document.getElementById('post');
	if (!form) return false;

	var err = document.getElementById('errors');
	if (!err) return false;
	err.innerHTML = "<br><br>";

	var errors = new Array;
	form.req_subject.style.backgroundColor = "#ffffff";
	form.req_message.style.backgroundColor = "#ffffff";

	if (form.req_subject.value == '' || form.req_subject.value == ' ')
	{
		form.req_subject.style.backgroundColor = "#ffff99";
		errors.push("   ");
	}

	if (form.req_message.value == '')
	{
		form.req_message.style.backgroundColor = "#ffff99";
		errors.push("   ");
	}

	if (errors.length > 0)
	{
		var err_inner = "";
		for (i = 0; i < errors.length; i++)
		{
			err_inner = err_inner + "<b>(!)</b>&nbsp;" + errors[i] + "<br>\n";
		}
		err.innerHTML = err_inner;
		return false;
	}

	form.submit();
}

function checkAddPostForm()
{
	var form = document.getElementById('post');
	if (!form) return false;

	var err = document.getElementById('errors');
	if (!err) return false;
	err.innerHTML = "";

	var errors = new Array;
	var login = false;

	form.req_message.style.backgroundColor = "#ffffff";
	if (!form.form_user.style)
	{
	}
	else
	{
		form.form_user.style.backgroundColor = "#ffffff";
	
		if (form.form_user.value == '' || form.form_user.value == '')
		{
			form.form_user.style.backgroundColor = "#ffff99";
			errors.push("   ");
		}
	
		if (form.form_password.value == '' || form.form_password.value == '')
		{
			form.form_password.style.backgroundColor = "#ffff99";
			errors.push("  ");
		}

		if (form.form_user.value != '' && form.form_user.value != '' && form.form_password.value != '' && form.form_password.value != '')
		{
			//errors.push('    ...');
			//errors.push('...');
			login = true;

			var url = "/include/forum/login.inc";
			var params = "form_username=" + escape(encodeURI(form.form_user.value)) + "&form_password=" + escape(encodeURI(form.form_password.value));
			postRequest(url, params, function (req)
			{
			   	if (req.readyState == 4)
			   	{
			   		if (req.status == 200)
			   		{
						var form1 = document.getElementById('post');
						if (!form1) return false;

						var err1 = document.getElementById('errors');
						if (!err1) return false;

				   		if (req.responseText != '') {
					   	        form.form_user.value = req.responseText;
					   		if (err1.innerHTML == '') {
								form1.submit();
							}
						} else {
							form1.form_user.style.backgroundColor = "#ffff99";
							form1.form_password.style.backgroundColor = "#ffff99";
							err1.innerHTML = err1.innerHTML + "<b>(!)</b>&nbsp;" + "    " + "<br>\n";
						}
					}
				}
			});
		}

		/*if (form.email.value != 'e-mail' && form.email.value != '' && form.email.value.indexOf('@') < 1)
		{
			form.email.style.backgroundColor = "#ffff99";
			errors.push("    ");
		}*/
	}

	if (form.req_message.value == '')
	{
		form.req_message.style.backgroundColor = "#ffff99";
		errors.push("   ");
	}

	if (errors.length > 0 || login)
	{
		var err_inner = "";
		for (i = 0; i < errors.length; i++)
		{
			err_inner = err_inner + "<b>(!)</b>&nbsp;" + errors[i] + "<br>\n";
		}
		err.innerHTML = err_inner;
		return false;
	}
	
	/*if (form.email && form.email.value == 'e-mail') form.email.value = '';*/
	form.submit();
}

function deleteMessages()
{
    var checks = new Array;
    var inputs = document.getElementsByTagName('INPUT');
	for (i = 0; i < inputs.length; i++)
	{
		if (inputs[i].type == 'checkbox' && inputs[i].id.indexOf('delete-') != -1 && inputs[i].checked == true)
		{
			checks.push(inputs[i].value);
		}
	}

	if (checks.length > 0)
	{
		var list = "";
		for (i = 0; i < checks.length; i++)
		{
			if (i > 0) list = list + ",";
			list = list + checks[i];
		}

		var box = document.getElementById('box');
		if (!box) return false;

		/*var url = "/include/forum/delete-messages.inc?box=" + box.value + "&list=" + list + "&rand=" + Math.random();
		reqDeleteMessages = undefined;
		reqDeleteMessages = show(url, function ()
		{
			if (reqDeleteMessages)
			{
				if (reqDeleteMessages.readyState == 4)
				{
					window.location.href = '/messages.html?box=' + box.value;
					exit;
				}
			}
		});*/

		var url = "/include/forum/delete-messages.inc";
		var params = "box=" + box.value + "&list=" + list + "&rand=" + Math.random();
		postRequest(url, params, function (req)
		{
			if (req.readyState == 4)
			{
				window.location.href = '/messages.html?box=' + box.value;
				exit;
			}
		});
	}
}

function hideAnnouncement()
{
	/*var url = "/include/hide-announcement.inc?rand=" + Math.random();
	reqHideAnnouncement = undefined;
	reqHideAnnouncement = show(url, function ()
	{
		if (reqHideAnnouncement)
		{
			if (reqHideAnnouncement.readyState == 4)
			{
				var announcement = document.getElementById('announcement');
				if (!announcement) return false;

				var table = announcement.parentNode;
				if (!table) return false;

				table.deleteRow(announcement.rowIndex + 1);
				table.deleteRow(announcement.rowIndex);
			}
		}
	});*/

	var url = "/include/hide-announcement.inc";
	var params = "rand=" + Math.random();
	postRequest(url, params, function (req)
	{
		if (req.readyState == 4)
		{
			var announcement = document.getElementById('announcement');
			if (!announcement) return false;

			var table = announcement.parentNode;
			if (!table) return false;

			table.deleteRow(announcement.rowIndex + 1);
			table.deleteRow(announcement.rowIndex);
		}
	});
}

function checkUncheckAll(theElement) {
     var theForm = theElement.form, z = 0;
	 for(z=0; z<theForm.length;z++){
      if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall'){
	  theForm[z].checked = theElement.checked;
	  }
     }
}
