/*
    Модуль для работы с HTTRequest-ом
*/

var $server = 
{
    HttpFactories:[
        function () {return new XMLHttpRequest()},
	    function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	    function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	    function () {return new ActiveXObject("Microsoft.XMLHTTP")}
    ],
    Preloader:{
        Type:{
            ShowHide:"0",
            SetText:"1"
        },
        CurrentType:"0",
        Text:{
            BeginRequest:"Загрузка...",
            Success:"Успешно!",
            Error:"Ошибка!"
        },
        DefaultPanelClassName:"PreloaderPanel",
        Panel:null,
        Begin:function()
        {
            if(this.Panel == null)
            {
                this.Panel = document.createElement("div");
                this.Panel.className = this.DefaultPanelClassName;
                $global.SetText(this.Panel, this.Text.BeginRequest);
                document.body.appendChild(this.Panel);
            }
            if(this.CurrentType == this.Type.SetText)
            {
                $global.SetText(this.Panel, this.Text.BeginRequest);
            }
            this.Panel.style.display = "block";
        },
        End:function(error)
        {
            if(this.CurrentType == this.Type.ShowHide)
            {
                this.Panel.style.display = "none";
            }
            else
            {
                if(error)
                    $global.SetText(this.Panel, this.Text.Error);
                else
                    $global.SetText(this.Panel, this.Text.Success);
                
            }
        }
    },
    CreateRequest:function() 
    {
	    var xmlhttp = false;
	    for (var i=0;i<$server.HttpFactories.length;i++) 
	    {
		    try 
		    {
			    xmlhttp = $server.HttpFactories[i]();
		    }
		    catch (e) 
		    {
			    continue;
		    }
		    break;
	    }
	    return xmlhttp;
    },
    Send:function(url,callback,postData, error) 
    {
        this.Preloader.Begin();
	    var req = $server.CreateRequest();
	    if (!req) return;
	    var method = (postData) ? "POST" : "GET";
	    req.open(method,url,true);
	    req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	    if (postData)
		    req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	    req.onreadystatechange = function () 
	    {
		    if (req.readyState != 4){ if(error){ error(req); }; return; }
		    if (req.status != 200 && req.status != 304) 
		    {
		        $server.Preloader.End(true);
		        if(error){ error(req); };
			    return;
		    }
		    $server.Preloader.End(false);
		    callback(req);
	    }
	    if (req.readyState == 4) return;
	    req.send(postData);
    }
}