//
// Создадим переменную XmlHttp которая будет основным интерфейсом AJAX технологии http://ru.wikipedia.org/wiki/AJAX
//


var XmlHttp = new Object();

//Создадим три события -  для загрузки, для ошибки и блокировки страницы на время ожидания ответа
XmlHttp.onload  = null;
XmlHttp.onerror = null;
XmlHttp.onlock = null;

//Создадим две переменные, которые будут хранить результат
XmlHttp.text = null;
XmlHttp.xml  = null;

//Id элемента для вывода результата document.getElementById();
XmlHttp.OutputElementId = 'content_right';

//Эта переменная при ошибке будет хранить описание ошибки
XmlHttp.errtext = null;

//Переменная для хранения таймера соеденения
XmlHttp.timeout_id = null;
XmlHttp.timeout_msek = 25000; // 25 сек.
XmlHttp.timeout_text = "Timeout";
XmlHttp.wait_text = null; // Текст сообщения на время ожтдания ответа на запрос к серверу

//Инициализируем технологию AJAX, XmlHttp.ActiveXObjectName
XmlHttp.ActiveXObjectName = null;
if(typeof XMLHttpRequest=="undefined") {
	if(typeof ActiveXObject!="undefined"){
         	   var a=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
                        for(var c=0;c<4;c++){
                        var d=a[c];
                            try{
                                XmlHttp.HTTP = new ActiveXObject(d);
                                XmlHttp.ActiveXObjectName = d;
                                break;
                            }
                            catch(e){}
                        }
         }
         if(XmlHttp.ActiveXObjectName == null) alert("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed.");
}
// else XmlHttp.HTTP = new XMLHttpRequest;

//Функция для отправки запроса серверу, в параметре передается путь и имя файла
XmlHttp.request = function(file) {

	if(typeof XmlHttp.HTTP != "undefined") XmlHttp.HTTP.abort(); //Закрываем предыдущие соеденение
         //Инициализируем технологию AJAX
	if(typeof XMLHttpRequest=="undefined") {
		if(typeof ActiveXObject!="undefined"){
         		if(XmlHttp.ActiveXObjectName == null) alert("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed.");
         		else XmlHttp.HTTP = new ActiveXObject(XmlHttp.ActiveXObjectName);
         	}
	}
	else XmlHttp.HTTP = new XMLHttpRequest;

         //Создадим функцию для обработки состояния соеденения
         XmlHttp.HTTP.onreadystatechange = function() {
		if(XmlHttp.HTTP.readyState == 4) {
    			clearTimeout(XmlHttp.timeout_id);
    			XmlHttp.timeout_id = null;
    			if(XmlHttp.HTTP.status == 200) {
      				XmlHttp.text = XmlHttp.HTTP.responseText;
      				XmlHttp.xml = XmlHttp.HTTP.responseXML;
      				//Если событие onload отслеживается, то сгенерируем его
      				if(XmlHttp.onload !== null) XmlHttp.onload();
    			} else {
      		       		//Ошибка!!! Если событие onerror отслеживается, то сгенерируем его
      		       		XmlHttp.errtext = XmlHttp.HTTP.statusText;
      		       		if(XmlHttp.onerror !== null) XmlHttp.onerror();
    			}
  		}
	};
	XmlHttp.HTTP.open("GET", file, true);
         XmlHttp.HTTP.send(null);

  	XmlHttp.timeout_id = setTimeout("XmlHttp.timeout();", XmlHttp.timeout_msek); // 30 seconds
         if(XmlHttp.onlock !== null) XmlHttp.onlock();
}

//Создадим функцию для обработки таймаута
XmlHttp.timeout = function() {
	XmlHttp.HTTP.abort();
  	XmlHttp.errtext = XmlHttp.timeout_text;
  	if(XmlHttp.onerror !== null) XmlHttp.onerror();
}
