// JavaScript Document

function XHRObject( options )
{
	this.ShowError = ( options.ShowError ) ? options.ShowError : false;
	this.cache = new Array();
	this._preloader = ( options._preloader ) ? document.getElementById(options._preloader) : false;
	this.method = ( options.method ) ? options.method : "GET";
	
    var xmlHttp;
    try 
    {
        xmlHttp = new XMLHttpRequest();
    } 
    catch(e)
    {
        var xmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                        							"MSXML2.XMLHTTP.5.0",
							                                        "MSXML2.XMLHTTP.4.0",
                            							            "MSXML2.XMLHTTP.3.0",
                            							            "MSXML2.XMLHTTP",
                            							            "Microsoft.XMLHTTP");
        for( var i = 0; i < xmlHttpVersions.length && !xmlHttp; i++ )
        {
            try
            {
                xmlHttp = new ActiveXObject(xmlHttpVersions[i]);
            } 
            catch(e){}
        }
    }
    if( !xmlHttp )
    {
        if( this.ShowError ) alert("Ошибка создания объекта XMLHttpRequest");
        return false;
    } 
    else 
    {
        this.xmlHttp = xmlHttp;
    }
}

XHRObject.prototype.DisplayError = function( mes )
{
    if( this.showErrors )
    {
       this.showErrors = false;
        alert("Произошла ошибка: \n" + mes);
    }
}

XHRObject.prototype.Process = function( targetURL, urlParams )
{
	if( typeof urlParams != "string" )
	{
		this.DisplayError("Неверный тип данных в методе XHRObject.Process()");
	}
    if( this.xmlHttp )
    {
        var arParams = new Array;
        var arUrlParams = urlParams.split("&");
        if( arUrlParams.length > 0 )
        {
        	for( var i = 0; i < arUrlParams.length; i ++)
        	{
        		var p = arUrlParams[i].split("=");
        		arParams.push(p[0] + "=" + encodeURIComponent(p[1]));
        	}
        	
        }
        var params = arParams.join("&");
        if( params.length > 1 )
        {
             this.cache.push(params);  
        }
        try
        {
              if( (this.xmlHttp.readyState == 4 || this.xmlHttp.readyState == 0) && this.cache.length > 0 )
              {
                    var cacheEntry = this.cache.shift();

                    this.xmlHttp.open("GET", targetURL + "?" + cacheEntry, true);
                   // this.xmlHttp.setRequestHeader("Content-Type",
                    //                         "application/x-www-form-urlencoded");

					var _obj = this;                                            
                    this.xmlHttp.onreadystatechange = function( )
					{
						   
						   if( typeof _obj._preloader == "object" )
						   {
						   		if( _obj.xmlHttp.readyState >= 1 && _obj.xmlHttp.readyState <= 3 )
						   		{
						        	 _obj._preloader.style.display = "block";
						    	}
						    } 
						    if( _obj.xmlHttp.readyState == 4 )
						    {
						    	
						    	  if( typeof _obj._preloader == "object" )
						          {
						          		_obj._preloader.style.display = "none";
						          }
						          if( _obj.xmlHttp.status == 200 )
						          {
						                try
						                {
						                      _obj.GetResults();
						                } 
						                catch(e)
						                {
						                      _obj.DisplayError(e.toString());
						                }
						          } 
						          else 
						          {
						                _obj.DisplayError(_obj.xmlHttp.statusText);
						          }
						    }

					}
					
                    this.xmlHttp.send(null);

              } 
              else 
              {
                    setTimeout("this.Process();", 1000);
              }

        } 
        catch(e)
        {
              this.DisplayError(e.toString());
        }
    }
}

XHRObject.prototype.GetResults = function()
{
      var response = this.xmlHttp.responseText; 
      if( response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0 )
      {
            this.DisplayError(response.toString());
      }
      
      //this.Result.push(response);
}

