function $(elid)
{
	return document.getElementById(elid);
}


function CreateRequest()
{
	var Request = false;

	if (window.XMLHttpRequest)
	{
		//Gecko-совместимые браузеры, Safari, Konqueror
		Request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		//Internet explorer
		Request = new ActiveXObject("Microsoft.XMLHTTP");

		if (!Request)
		{
			HRequest = new ActiveXObject("Msxml2.XMLHTTP");
		}
	}

	if (!Request)
	{
		alert("Невозможно создать XMLHttpRequest");
	}

	return Request;
}

/*
Функция посылки запроса к файлу на сервере
r_method  - тип запроса: GET или POST
r_path    - путь к файлу
r_args    - аргументы вида a=1&b=2&c=3...
r_handler - функция-обработчик ответа от сервера
*/
function SendRequest(r_method, r_path, r_args, r_handler)
{
	//Создаём запрос
	var Request = CreateRequest();

	//Проверяем существование запроса еще раз
	if (!Request)
	{
		return;
	}

	//Назначаем пользовательский обработчик
	Request.onreadystatechange = function()
	{
		//Если обмен данными завершен
		if (Request.readyState == 4)
		{
			//Передаем управление обработчику пользователя
			r_handler(Request);
		}
	}

	//Проверяем, если требуется сделать GET-запрос
	if (r_method.toLowerCase() == "get" && r_args.length > 0)
	r_path += "?" + r_args;

	//Инициализируем соединение
	Request.open(r_method, r_path, true);

	if (r_method.toLowerCase() == "post")
	{
		//Если это POST-запрос

		//Устанавливаем заголовок
		Request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
		//Посылаем запрос
		Request.send(r_args);
	}
	else
	{
		//Если это GET-запрос

		//Посылаем нуль-запрос
		Request.send(null);
	}
}

function CallServer(functionid, arguments, handler)
{
	SendRequest("post", "/service/api", "function=" + functionid + "&" + arguments, handler);
}

function SetupValues()
{
	/* Stored settings */

	if (GetCookie("comment_emailme") == "true")
	{
		$("emailswitch").onclick();
	}

	/* Setting up sumbitting */

}



function ShowPreview(fieldid, previewid)
{
	var field   = $(fieldid);
	var preview = $(previewid);

	try
	{
		var sfart  = $("submitformarticle").value;
	}
	catch (exc)
	{
		sfart = 0;
	}

	CallServer("showpreview", "id=" + escape(sfart) + "&value=" + escape(field.value.replace("+", "&#43;")) + "&preview=" + escape(previewid), function(Request)
	{
		preview.innerHTML = unescape(Request.responseText);

	});

	return false;
}

/* Pleasant comments and comments view */

function SwitchStyleText(element, swbh, swbh2)
{
	if (element.getAttribute("switch_attr") == null)
		element.setAttribute("switch_attr", "false");

	if (element.getAttribute("switch_attr") == "false")
	{
		element.setAttribute("switch_attr", "true");
		swbh(element);
	}
	else
	{
		element.setAttribute("switch_attr", "false");
		swbh2(element);
	}
}

function EnableEMail(sender)
{
	sender.innerHTML = "Отписаться от оповещений";
	sender.className = "blink active";

	SetCookie("comment_emailme", "true");
}

function DisableEMail(sender)
{
	sender.innerHTML = "Подписаться на оповещения";
	sender.className = "blink";

	SetCookie("comment_emailme", "false");
}


function SetupAppendComment()
{
	var smbutton = $("sendmessage"), commentslist = $("comments-list"), smform = $("subform");
	var smauthor = $("username"), smemail = $("email"), smmessage = $("commentfield");
	var smcounter = $("comments_counter");
	var smfirst  = $("opinions").getElementsByTagName("p");

	smform.onsubmit = function()
	{
		return false;
	}

	smbutton.onclick = function()
	{
		if (smauthor.value.length < 1)
		{
			smauthor.focus();
			return;
		}

		if (smemail.value.length < 1)
		{
			smemail.focus();
			return;
		}

		if (smmessage.value.length < 1)
		{
			smmessage.focus();
			return;
		}

		this.enabled = false;

		CallServer("sendmessage", "id=" + escape($("submitformarticle").value)
					+ "&email=" + escape(smemail.value.replace("+", "&#43;"))
					+ "&message=" + escape(smmessage.value.replace("+", "&#43;"))
					+ "&username=" + escape(smauthor.value.replace("+", "&#43;"))
					+ "&subscribe=" + escape($("emailswitch").getAttribute("switch_attr"))
					+ "&personal=false" , function(Request)
		{

			if (Request.responseText != "FALSE")
			{

				var doc = Request.responseXML.documentElement;

				var d_elm = document.createElement("li");
				d_elm.className = "comment-entry new";

				var d_new = "";
				d_new += "<p class=\"meta\"><span class=\"author nickname\">" + smauthor.value + "</span>";
				d_new += "<a href=\"#_blank\" class=\"published\">" + doc.getElementsByTagName("date").item(0).firstChild.nodeValue + "</a></p>";
				d_new += "<div class=\"entry-content\">" + doc.getElementsByTagName("message").item(0).firstChild.nodeValue + "</div>";

				d_elm.innerHTML = d_new;

				if (commentslist.getAttribute("is_reverted") == "true")
				{
					RevertElementsOrder("comments-list", "li");
					commentslist.appendChild(d_elm);
					RevertElementsOrder("comments-list", "li");
				}
				else
				{
					commentslist.appendChild(d_elm);
				}

				smmessage.value = "";

				smcounter.innerHTML = (parseInt(smcounter.innerHTML) + 1).toString();

				if (smfirst.item(0).className == "first_comment")
				{
					smfirst.item(0).innerHTML = "";
				}

				this.enabled = true;
			}


		});



		return false;
	}
}



function SetCookie(name, value, expires, path, domain, secure)
{
	var today = new Date();
	today.setTime( today.getTime() );

	//if ( expires )
	//{
	expires = 1000 * 1000 * 60 * 60 * 24;
	//}

	var expires_date = new Date( today.getTime() + (expires) );

    document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires_date.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function GetCookie(name)
{
	var cookie = " " + document.cookie;
	var search = " " + name + "=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if (cookie.length > 0) {
		offset = cookie.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = cookie.indexOf(";", offset)
			if (end == -1) {
				end = cookie.length;
			}
			setStr = unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}
