function ReceiveData (req, btn) {
	if (req.readyState == 4) {
		var busy = document.getElementById('busy');
		busy.style.display = 'none';
		if (req.responseJS.debug) {
/*			if (document.getElementById('debug'))
				document.getElementById('debug').innerHTML = '<pre>' + htmlspecialchars(req.responseText, 'ENT_QUOTES') + '</pre>';
			else*/
				alert(req.responseText);
		}
		if (req.responseJS.error != '')
			alert('Ошибка:\n' + req.responseJS.error);
		else {
			if (req.responseJS.alert) {
				alert(req.responseJS.alert);
			}
			if (req.responseJS.dialog) {
				if (req.responseJS.dialog == 'close')
					dialogClose();
				else {
					dialog = document.getElementById('dialog');
					dialog.innerHTML = req.responseJS.dialog;
					var hg = document.body.scrollTop + window.innerHeight;
					var wg = document.body.scrollLeft + window.innerWidth;
					if (hg - dialog.offsetHeight > 0)
						dialog.style.top = (hg - dialog.offsetHeight) / 2;
					else
						dialog.style.top = 0;
					if (wg - dialog.offsetWidth > 0)
						dialog.style.left = (wg - dialog.offsetWidth) / 2;
					else
						dialog.style.left = 0;
				}
			}
			if (req.responseJS.filter) {
				filter = document.getElementById('filter');
				filter.innerHTML = req.responseJS.filter;
				filter.style.left = btn.x;
				filter.style.top = btn.y - 3;
			}
			if (req.responseJS.view) {
				for (i = 0; i < req.responseJS.view.length; i ++) {
					if (req.responseJS.view[i] && req.responseJS.view[i].container && document.getElementById(req.responseJS.view[i].container)) {
						var container = document.getElementById(req.responseJS.view[i].container);
						if (req.responseJS.view[i].inner || req.responseJS.view[i].inner == '' || req.responseJS.view[i].inner == 0) {
							container.innerHTML = req.responseJS.view[i].inner;
							document.getElementById(req.responseJS.view[i].container).parentNode.appendChild(document.getElementById(req.responseJS.view[i].container));
							if (req.responseJS.view[i].focusid && document.getElementById(req.responseJS.view[i].focusid))
								document.getElementById(req.responseJS.view[i].focusid).focus();
						}
						else if (req.responseJS.view[i].value || req.responseJS.view[i].value == '' || req.responseJS.view[i].value == 0)
							container.value = req.responseJS.view[i].value;
					}
				}
			}
			if (req.responseJS.referer) {
				if (req.responseJS.referer != '.')
					window.location.replace(req.responseJS.referer);
				else {
					var ref = window.location.href.replace(/#.*?$/, "");
					window.location.replace(ref);
				}
			}
		}
		if (btn)
			btn.style.visibility = 'visible';
	}
}
function SendData(op, btn, conf, formid) {
	if (conf)
		answerconf = confirm(conf);
	if (!conf || answerconf) {
		var req = new JsHttpRequest();
		if (btn)
			btn.style.visibility = 'hidden';
		var busy = document.getElementById('busy');
		var hg = window.innerHeight;
		var wg = window.innerWidth;
		busy.style.top = document.body.scrollTop + ((window.innerHeight) ? window.innerHeight : ((document.all) ? document.body.offsetHeight : 0)) / 2 - 15;
		busy.style.left = document.body.scrollLeft + ((window.innerWidth) ? window.innerWidth : ((document.all) ? document.body.offsetWidth : 0)) / 2 - 15;
		busy.style.display = 'inline';
		req.onreadystatechange = function () { ReceiveData(req, btn); }
		req.open(null, p_http + 'opbg.php?op=' + op, true);
		if (document.getElementById('formtosend') && !formid)
			req.send(document.getElementById('formtosend'));
		else if (formid && document.getElementById(formid))
			req.send( document.getElementById(formid) );
		else
			req.send(null);
	}
}
function filterClose() {
	filter = document.getElementById('filter');
	filter.innerHTML = '';
}
function filterAdd(level) {
	var newfilter = prompt('Добавление нового значения', '');
	if (newfilter) {
		SendData('filter&action=add&level=' + level+ '&item=' + escape(newfilter), '', '', '.');
	}
}
function filterEdit(level) {
	if (!document.getElementById('filterlist').value)
		alert('Не выбрано значение.');
	else {
		var newfilter = prompt('Изменение значения', document.getElementById('filterlist').options[document.getElementById('filterlist').selectedIndex].text);
		if (newfilter && newfilter != document.getElementById('filterlist').options[document.getElementById('filterlist').selectedIndex].text) {
			SendData('filter&action=edit&level=' + level+ '&id=' + document.getElementById('filterlist').value + '&item=' + base64_encode(newfilter), '', '', '.');
		}
	}
}
function filterDel(level) {
	if (!document.getElementById('filterlist').value)
		alert('Не выбрано значение.');
	else {
		SendData('filter&action=del&level=' + level+ '&id=' + document.getElementById('filterlist').value, '', 'Удалить выбранное значение?', '.');
	}
}
function dialogClose() {
	dialog = document.getElementById('dialog');
	dialog.innerHTML = '';
}
function ShowFormPost(id, is_edit) {
	if (document.getElementById('formpost[' + id + ']')) {
		document.getElementById('formpost[' + id + ']').appendChild(document.getElementById('form'));
		formid = id;
		if (!is_edit)
			document.getElementById('parentid').value = id;
		else
			document.getElementById('parentid').value = 0;
		if (id) {
			if (is_edit) {
				document.getElementById('msg').value = document.getElementById('text[' + id + ']').innerHTML.replace(/<br>/ig, '\r');
				document.getElementById('id').value = id;
				document.getElementById('warning').innerHTML = 'Редактирование сообщения #' + id;
				document.getElementById('topic').value = (document.getElementById('topictext[' + id + ']')) ? document.getElementById('topictext[' + id + ']').innerHTML : "";
				if (!document.getElementById('topictext[' + id + ']') && id > 0)
					document.getElementById('topic').style.visibility = 'hidden';
				else
					document.getElementById('topic').style.visibility = 'visible';
			}
			else {
				document.getElementById('msg').value = "";
				document.getElementById('topic').value = "";
				if (id > 0)
					document.getElementById('topic').style.visibility = 'hidden';
				else
					document.getElementById('topic').style.visibility = 'visible';
			}
			document.getElementById('msg').focus();
		}
		else {
			document.getElementById('msg').value = "";
			document.getElementById('topic').value = "";
			document.getElementById('topic').style.visibility = 'visible';
			document.getElementById('topic').focus();
		}
	}
}
function ShowTools(obj) {
	obj.className = 'tools'
}
function HideTools(obj) {
	obj.className = 'tools_hidden'
}
function ChangeCart(id, flg, add) {
	SendData('cartchange&id=' + id + '&flg=' + flg + '&add=' + add);
}
function ClearCart() {
	SendData('cartclear&id=calc');
}
function configAdd() {
	var newconfig = prompt('Сохранение новой конфигурации', '');
	if (newconfig) {
		SendData('configsave&name=' + escape(newconfig), '', '', '.');
	}
}
