
/*******************************************************************************
	                      ФУНКЦИИ ДЛЯ РАБОТЫ С AJAX
*******************************************************************************/

//Список функций, с помощью которых создаётся
//объект XMLHttpRequest в разных браузерах
ajaxObjectCreateFunctions =
[
	function() { return new XMLHttpRequest(); },
	function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
	function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
];

//Создание объекта XMLHttpRequest
function ajaxObjectCreate()
{

	//Идём по массиву Ajax_object_create_Array с перечнем функций,
	//пока не попадётся работающая
	for ( var i = 0; i < ajaxObjectCreateFunctions.length; i++ )
	{
		try
		{
			//Пытаемся создать объект
			var ajax = ajaxObjectCreateFunctions[i]();
			//если получилось, то возвращаем его
			if ( ajax != null )
			{
				return ajax;
			}
		}
		catch(e)
		{
			continue;
		}
	}

	// Если ничего не получилось, выводим сообщение об ошибке
	if (!ajax)
	{
		alert("Не получилось создать объект XMLHttpRequest.");
	}
}

//Отправка HTTP-запроса
//  url - путь к обработчику формы
//  value - строка, которую отправляем
//  callback - функция, принимающая ответ сервера
function ajaxPOSTRequest(url, value, callback)
{
	Ajax = ajaxObjectCreate();

	//Обработка ответа сервера на HTTP-запрос
	Ajax.onreadystatechange = function()
	{
		if ( Ajax.readyState == 4 )
		{
			if (Ajax.status == 200)
			{
				callback(Ajax.responseText);
			}
			else
			{
				alert("При обращении к серверу возникли проблемы:" + Ajax.statusText);
			}
		}
	}

	//работа возможна только если объект XMLHttpRequest не занят
	if (Ajax.readyState == 4 || Ajax.readyState == 0)
	{
		Ajax.open ("POST", url, true);
		Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		Ajax.send(value);
	}
	else
	{
		setTimeOut("Ajax_object_Post(url, value, callback)", 1000);
	}
}

//Отправка GET-запроса
//  url - путь к обработчику формы
//  value - строка, которую отправляем (например, param1=value1&param2=value2...)
//  callback - функция, принимающая ответ сервера
function ajaxGETRequest(url, value, callback)
{
	Ajax = ajaxObjectCreate();

	//Обработка ответа сервера на HTTP-запрос
	Ajax.onreadystatechange = function()
	{
		if ( Ajax.readyState == 4 )
		{
			if (Ajax.status == 200)
			{
				callback(Ajax.responseText);
			}
			else
			{
				alert("При обращении к серверу возникли проблемы:" + Ajax.statusText);
			}
		}
	}

	//работа возможна только если объект XMLHttpRequest не занят
	if (Ajax.readyState == 4 || Ajax.readyState == 0)
	{
		Ajax.open ("GET", url + "?" + value, true);
		Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		Ajax.send(null);
	}
	else
	{
		setTimeOut("Ajax_object_Post(url, value, callback)", 1000);
	}
}

//Перевод данных формы в строку, пригодную для вставки в POST-заголовок
function formToString(form)
{
	var result = new Array();
	for ( i = 0; i < form.length; i++ )
	{
		if ( ( form.elements[i].type != "submit" ) && ( form.elements[i].type != "reset" ) )
		{
        	//Строка result.push(...) везде одинаковая. Очень плохо, но лабиринт из if'ов ещё хуже.
        	if ( ( form.elements[i].type != "radio" )  )
        	{        		result.push(encodeURIComponent(form.elements[i].name) + "=" + encodeURIComponent(form.elements[i].value));
        	}
        	else if ( ( form.elements[i].type == "radio" ) && ( form.elements[i].checked ) )
        	{        		result.push(encodeURIComponent(form.elements[i].name) + "=" + encodeURIComponent(form.elements[i].value));
        	}
		}
	}
	return result.join("&");
}


// Показывает или скрывает элемент с заданным ID
function ajaxShowHideElementById(element_id)
{
	if ( document.getElementById(element_id).style.display == "none" )
	{
		document.getElementById(element_id).style.display = "block";
	}
	else
	{
		document.getElementById(element_id).style.display = "none";
	}
}