/* Функции для обработки удаленного HTTP-запроса
	input - Запрос серверу в виде http://путь-к-скрипту.php?параметры-запроса
	response - ответ удаленного сервера - возвращается XML-объект
	fName	- имя функции, которой передается ответ от сервера */

var handlerFunc;
var req;

var postHandlerFunc;
var postReq;

var myNoClose									= 0;
var closeWindow;

function XMLProcessor(input, response, fName, noClose)
	{
	myNoClose									= Boolean(noClose);

	if (input == '')
		{
		var myFunc								= handlerFunc + '(response)';

		eval (myFunc);
		}
	else if (input != '')
		{
		handlerFunc								= fName;
		XMLRequest(input);
		}
	}

function XMLRequest(url)
	{
	if (BROWSER.isIE)
		{
		// MSIE
		req										= new ActiveXObject("Microsoft.XMLHTTP");
		if (req)
			{
			req.onreadystatechange				= processReqChange;
			req.open("GET", url, true);
			req.send();
			}
		}
	else
		{	
		// FF
		req										= new XMLHttpRequest();
		req.onreadystatechange					= processReqChange;
		req.open("GET", url, true);
		req.send(null);
		}
	}

function processReqChange()
	{
	// Проверяем обработал ли удаленный сервер запрос и сформировал ли ответ
	if (req.readyState == 4)
		{
		try {
			if (req.status)
				{
				// Проверяем безошибочность обработки ответа
				if (req.status == 200)
					{
					if (closeWindow)
						{
						closeWindow._closeWindow();
						closeWindow						= '';
						}

					if (req.responseXML.documentElement)
						{
						response					= req.responseXML.documentElement;
						XMLProcessor('',response,handlerFunc);
						}
					else
						{
						alert('Возникла непредвиденная ошибка при обработке данных');
						}
					}
				if (req.status == 404)
					{
					alert('Ошибка 404. Документ не найден');
					}
				if (req.status == 500)
					{
					alert('Ошибка 500. Сбой сервера');
					}
				}
			else
				{
				alert('Внутренняя ошибка сервера');
				}
			}

		catch(e) {}
		}
	else
		{
		// Вывести форму, что данные ещё обрабатываются...	
		
		if (myNoClose)
			{
			if (!closeWindow)
				{
				closeWindow						= new oWindow(myNoClose);
				closeWindow._buildWindow('','','',0,'closeWindow._closeWindow()');
				}
			}
		}
	}


function XMLPOSTProcessor(input, response, fName)
	{
	if (input == '')
		{
		var myFunc								= postHandlerFunc + '(response)';
		eval (myFunc);
		}
	else if (input != '')
		{
		postHandlerFunc							= fName;
		XMLPOSTRequest(input);
		}
	}

function XMLPOSTRequest(url)
	{
	myUrl										= url.replace(/^(.*)\?(.*)$/,'$1');
	myVar										= url.replace(/^(.*)\?(.*)$/,'$2');

	if (BROWSER.isIE)
		{
		// MSIE
		postReq									= new ActiveXObject("Microsoft.XMLHTTP");
		if (postReq)
			{
			postReq.onreadystatechange			= postProcessReqChange;
			postReq.open("POST", myUrl, true);
			postReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			postReq.send(myVar);
			}
		}
	else
		{	
		// FF
		postReq									= new XMLHttpRequest();
		postReq.onreadystatechange				= postProcessReqChange;
		postReq.open("POST", myUrl, true);
		postReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		postReq.send(myVar);
		}
	}

function postProcessReqChange()
	{
	// Проверяем обработал ли удаленный сервер запрос и сформировал ли ответ
	if (postReq.readyState == 4)
		{
		// Проверяем безошибочность обработки ответа
		if (postReq.status == 200)
			{
			response							= postReq.responseXML.documentElement;

			XMLPOSTProcessor('',response,postHandlerFunc);
			}
		if (postReq.status == 404)
			{
			alert('Ошибка 404. Документ не найден');
			}
		if (postReq.status == 500)
			{
			alert('Ошибка 500. Сбой сервера');
			}
		}
	else
		{
		// Вывести форму, что данные ещё обрабатываются...	
		}
	}













/*
						Объектный XML-процессор GET
*/

var oXMLHandler									= '';

function oXML(input, response, fName, noClose)
	{
	this.noClose								= noClose;

	oXMLHandler									= '';

	if (input != '')
		{
		this.handlerFunc						= fName;
		this.oXMLRequest(input);
		}
	}

oXML.prototype.oXMLRequest						= function(url)
	{
	this.noClose = 1;

	if (BROWSER.isIE)
		{
		// MSIE
		this.req								= new ActiveXObject("Microsoft.XMLHTTP");

		if (this.req)
			{
			var myObj							= this.req;
		
			oXMLHandler							= this;

			myObj.onreadystatechange			= function localReqChange() 
				{
				oReqChange(oXMLHandler);
				};
			this.req.open("GET", url, true);
			this.req.send();
			}
		}
	else
		{	
		// FF
		this.req								= new XMLHttpRequest();
		this.req.noClose						= this.noClose;
		this.req.handlerFunc					= this.handlerFunc;

		var myObj								= this.req;
		
		myObj.onreadystatechange				= function localReqChange() 
			{
			oReqChange(myObj);
			};
		this.req.open("GET", url, true);
		this.req.send(null);
		}
	}

oReqChange										= function(myObj)
	{
	if (BROWSER.isIE)
		{
		var myObj								= myObj;
		var myReq								= myObj.req;
		}
	else
		{
		var myObj								= myObj;
		var myReq								= myObj;
		}
	
	// Проверяем обработал ли удаленный сервер запрос и сформировал ли ответ
	if (myReq.readyState == 4)
		{
		if (myReq.status)
			{
			// Проверяем безошибочность обработки ответа
			if (myReq.status == 200)
				{
				if (!myObj.noClose)
					{
					var closeWindow				= new oWindow();
					closeWindow._buildWindow();
					closeWindow._closeWindow();
					}
				if (myReq.responseXML.documentElement)
					{
					response					= myReq.responseXML.documentElement;

					var myFunc					= myObj.handlerFunc + '(response)';

					eval (myFunc);

					myObj.handlerFunc			= '';
					}
				else
					{
					alert('Возникла непредвиденная ошибка при обработке данных');
					}
				}
			if (myReq.status == 404)
				{
				alert('Ошибка 404. Документ не найден');
				}
			if (myReq.status == 500)
				{
				alert('Ошибка 500. Сбой сервера');
				}
			}
		else
			{
			alert('Внутренняя ошибка сервера');
			}
		}
	else
		{
		// Вывести форму, что данные ещё обрабатываются...	
		if (!myObj.noClose)
			{
			var closeWindow						= new oWindow(myObj.noClose);
			closeWindow._buildWindow();
			}
		}
	}
