/**
 * @author djon-killer(markiz112004@mail.ru)
 * @copyright 2009
 */
/*

Класс для работы с ajax технологиями.
существует два вида запросов, post и get.
результат выполнения храниться в 3 переменных, в зависимости от нужного вам формата данных
*/
/*
Пример:
var ajax= new ajax_class(); - создаем объект класса. с этой строки необходимо начинать работы 
ajax.post_access("www.php.net","form"); - выполняем post запрос по адресу www.php.net с параметрами login=djon&password=asdfg
ajax.get_access("www.php.net/?par1=news&par2=show"); - выполняем post запрос по адресу www.php.net/?par1=news&par2=show 
--------------------
Доступ к рузультатам:
var text=ajax.respText; - ответ в формате строки

в случае работы с json.
Пример:
ОТВЕТ СЕРВЕРА:
	{"user":
		[
		{"name":"djon"}
		{"last_name":"djon"}
		]
	}
КОД ДЛЯ ОБРАБОТКИ:

var name= ajax.respJSON[0]['name']; - получение имени из json ответа
var last_name= ajax.respJSON[0]['last_name']; - получение фамилии из json ответа

в случае работы с xml, необходимо работать с ответом с помощью dom.
Пример:
ОТВЕТ СЕРВЕРА:
	<xml version="1.0" encoding="utf-8"?>
		<user>
			<name>djon</name>
		</user>
КОД ДЛЯ ОБРАБОТКИ:
var name= ajax.respXML.getElementByTegName("name").value; рузультат- djon
*/
function replacer(key, value) {
    if (typeof value === 'number' && !isFinite(value)) {
        return String(value);
    }
    return value;
}

var request=null;//объект для работы с асинхронными запросами
//===========================================
var ajax_class = function ()//конструктора класса. создает объект для работы с асинхронными запросами
	{
	try
		{
		request= new XMLHttpRequest();
		}
	catch(trymicrosoft)
		{
		try
			{
			request= new ActiveXObject("Msxml2.XMLHTTP");
			}
		catch(othermicrosoft)
			{
			try	
				{
				request= new ActiveXJbject("Microsoft.XMLHTTP");
				}
			catch(failed)
				{
				request= null;
				}
			}
		}
	if (request==null)
	window.alert("Невозможно создать экземпляр класса.\nВозможно ваш браузер не поддерживает работу с ajax.");
	}
//====================================================

var respText;//результат выполения в текстовом формате
var method;//
//====================================================
//var ajax_class.prototype.request;
//функция для проверки выполнения запроса
ajax_class.prototype.readStatus=function ()
{
if (request.readyState==4)
	{
		if (request.status==200)
		{
		respText=request.responseText;
		method();
		return true;
		}
	else
		{
		window.alert(request.status);
		return false;
		}
	}
else
	return false;
}
//==========================
//=================================================================
ajax_class.prototype.getRequestBody = function(oForm) //функция для получения параметров по имени формы
{
var aParams = new Array();
for(var i = 0; i < document.forms[oForm].elements.length; i++) 
	{
	var sParam =(document.forms[oForm].elements[i].name);
	sParam += "=";
	sParam += escape((document.forms[oForm].elements[i].value));
	aParams.push(sParam);
	}
return aParams.join("&");
}
//====================================================//====================================================
//функция для выполнения post запроса
/*
url- адресная строка с параметрами
oForm- форма post запроса
*/
ajax_class.prototype.post_access= function(url, oForm, method_last)
{
if (request!=null)
	{
	var param=this.getRequestBody(oForm)
	request.open("POST",url, true);
	request.onreadystatechange=this.readStatus;
	method=method_last;
	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	request.send(param);
	}
}
//====================================================
//====================================================
//функция для выполнения get запроса
/*
url- адресная строка с параметрами
*/
ajax_class.prototype.get_access= function(url, method_last)
{
if (request!=null)
	{
	request.open("GET",url, true);
	request.onreadystatechange=this.readStatus;
	method=method_last;
	request.send("");
	}
}
