
function AjaxReq()
{
	var XMLHttpRequestObject = 0;
	var Method = "POST";
	var Url    = "";
	var Param  = "";
    var lol = "11";
    var error = null;
    var ParamArr = new Array();
    var CallBackFunct;

    var EmptyFunct = function (){ return;}
    CallBackFunct = EmptyFunct;
    var vTimer = null;
    this.GetResponseText = function ()
    {
    	//alert(XMLHttpRequestObject.responseText);
    	if(  error != null )
    	{
    		 return "<content> <div style='text-align:center; vertical-align:middle; height:100%;'>Призошла ошибка подключения к серверу. Код шибки " + error + " </div> </content>";

    	}

    	else return XMLHttpRequestObject.responseText;
    }
    this.GetResponseXML = function ()
    {
    	if(  error != null ) return null;
    	return XMLHttpRequestObject.responseXML;

    }
    this.ParseJSON = function()
    {
        var text = XMLHttpRequestObject.responseText;
        //alert(text);
        return eval("(" + text + ")" );
    }

	this.CreateReqObj = function()
	{

 				if(window.XMLHttpRequest != undefined)
                {
                		XMLHttpRequestObject = new XMLHttpRequest();
                		if( XMLHttpRequestObject.overrideMimeType != undefined)XMLHttpRequestObject.overrideMimeType('text/xml');

                }
                else
                {
				    try
				    {
				    	 XMLHttpRequestObject = new ActiveXObject("Msxml2.XMLHTTP.6.0");

				    	 return;
				    }
				    catch(e)
				    {
					    try
					    {
					    	 XMLHttpRequestObject = new ActiveXObject("Msxml2.XMLHTTP.3.0");

					    	 return;
					    }
				    	catch(e)
				    	{

					   	 	try
					    	{
					    	 	XMLHttpRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
					    	 	return;
					    	}
					    	catch(e)
					    	{
							    try
							    {
							    	XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
							    	return;
							    }
							    catch(e)
							    {
							    	XMLHttpRequestObject = 0;
							    }
							    throw new Error("This browser does not support XMLHttpRequest.");
							}
						}
					}
				}


	}

	this.CreateReqObj();
	///////////////////////////////////////////
	/////////////

	this.processReqChange = function()
	{

		  try
		  {
            clearTimeout( vTimer );
		    if (XMLHttpRequestObject.readyState == 4)
		    {


		        if (XMLHttpRequestObject.status == 200)
		        {

                     // alert('CBC');
                     error= null;
		            CallBackFunct( );
		           // CallBackFunct = EmptyFunct;
		        }
		        else
		        {
		            error = "1 Ответ сервера != 200";
		            //new Error("Ошибка ответа сервера");
		            //alert( XMLHttpRequestObject.status );
		            CallBackFunct();
		        }
		    }
		    else
		    {
             	//if (XMLHttpRequestObject.readyState == 3)clearTimeout( vTimer );
             	//this.error = 3;
             	//document.title = XMLHttpRequestObject.readyState + "  " + XMLHttpRequestObject.status;
		    }

		  }
		  catch( e )
		  {

               error = "2 - Ошибка при получении ответа";
              // alert('111');
              // CallBackFunct( );
              // new Error("Ошибка при получении ответа");
		      // alert('Caught Exception: ' + e.description);
		      // В связи с багом XMLHttpRequest в Firefox приходится отлавливать ошибку
		      // Bugzilla Bug 238559 XMLHttpRequest needs a way to report networking errors
		      // https://bugzilla.mozilla.org/show_bug.cgi?id=238559
		  }
	}

	/////////////////////////////
	/////////////////////////////
	this.SetMethod = function(m)
	{
		this.Method = m;
	}
    ///////////////////////////////
	this.SetUrl = function(u)
	{
		this.Url = u;
	}
   ///////////////////////////////////
	this.Request = function()
	{


			XMLHttpRequestObject.open( Method  , this.Url, 1 );

			XMLHttpRequestObject.onreadystatechange = this.processReqChange;

            Param = "";
            for(var key in ParamArr)
            {
            	if( ParamArr[ key ]!= undefined) Param    = Param + encodeURI( key ) + "=" + encodeURIComponent( ParamArr[ key ] ) + "&";
            }


			if(this. Method == "GET")
			{
				 XMLHttpRequestObject.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
				 http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				 XMLHttpRequestObject.send(null);
			}
			if(this. Method == "POST")
			{
				 XMLHttpRequestObject.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
				 XMLHttpRequestObject.send(Param);
			}
			vTimer = setTimeout(this.timeOut , 5000);
			this.error = null;


	}
	this.timeOut = function()
	{

		error = "5 - timeout";
        XMLHttpRequestObject.abort();
		CallBackFunct( );

	}
     ////////////////////////////////
	this. ClearParam = function()
	{
		Param    = "";
		ParamArr = [];
	}
	//////////////////////////////////
	this. SetParam = function ( name, value)
	{
		ParamArr[name] = value;
	}
	this. RemoveParam = function ( name)
	{
		ParamArr[name] = undefined;
	}
	////////////////////////////////
	this.SetCallBackFunction = function(nf)
	{
	    CallBackFunct = nf;
	}

}



//var MainAjax = new AjaxReq();






function XML_listNodes(startNode)
{
    var list = new Array();
    var node = startNode;
    while(node)
    {
        list.push(node);
        node = nextNode(node);
    }
    return list;
}
function getAttributes(node)
{
  var ret = new Object();
  if(node.attributes)
  for(var i=0; i<node.attributes.length; i++)
  {
    var attr = node.attributes[i];
    ret[attr.name] = attr.value;
  }
  return ret;
}




