function CHttpRequest()
{
	var pSelf        = this;
	pSelf.pDiv       = null;
	pSelf.arHandlers = {};
	pSelf.Setup = function()
	{
		while ( true )
		{
			var sId = 'ID_' + Math.floor(Math.random() * 1000000);
			if ( !pSelf.arHandlers[sId] )
			{
				break;
			}
		}
		return sId;
	},
	pSelf.__Show = function()
	{
		pSelf.__Close();
		oDiv = document.createElement('DIV');
		document.body.appendChild(oDiv);
		pSelf.pDiv = oDiv;
		oDiv.id = 'pageloadbar';
	},
	pSelf.__Close = function()
	{
		if ( pSelf.pDiv )
		{
			try {
				pSelf.pDiv.parentNode.removeChild(pSelf.pDiv);
			} catch ( e ) {}
		}
	}
	pSelf.SetHandler = function(sId, f)
	{
		pSelf.arHandlers[sId] = f;
	}
	pSelf.Close = function(sId, oRequest, bScrollTop)
	{
		pSelf.__Close();
		if ( bScrollTop != false )
		{
			window.scrollTo(0, 0);
		}
		for ( var t in pSelf.arHandlers )
		{
			if ( !(t != sId) )
			{
				pSelf.arHandlers[t] = null;
			}
		}
		oRequest = null;
	}
	pSelf.OnDataReady = function(sId, r)
	{
		if ( pSelf.arHandlers[sId] )
		{
			pSelf.arHandlers[sId](r);
		}
	}
	pSelf.CreateHttpObject = function()
	{
		var oXmlHttpRequest = null;
		if ( window.XMLHttpRequest )
		{
			try {
				oXmlHttpRequest = new XMLHttpRequest();
			} catch ( e ) {}
		}
		else if ( window.ActiveXObject )
		{
			try {
				oXmlHttpRequest = new ActiveXObject('Microsoft.XMLHTTP');
			} catch ( e ) {}
			if ( !oXmlHttpRequest )
			{
				try {
					oXmlHttpRequest = new ActiveXObject('Msxml2.XMLHTTP');
				} catch ( e ) {}
			}
		}
		return oXmlHttpRequest;
	}
	pSelf.AddHandler = function(sId, oRequest, bScrollTop)
	{
		var pSelf = this;
		function ReadyStateChangehandler()
		{
			if ( !(oRequest.readyState != 4) )
			{
				try {
					var str1 = oRequest.responseText;
					var arScripts = [];
					var q, q1 = 0;
					while ( (q = str1.indexOf('<script', q1)) != -1 )
					{
						var q1 = str1.indexOf('>', q);
						if ( q1 != -1 )
						{
							q1 += 1;
						}
						var j = str1.indexOf('</script>', q);
						if ( j != -1 )
						{
							arScripts[arScripts.length] = str1.substr(q1, j - q1);
							str1 = str1.substr(0, q) + str1.substr(j + 9);
						}
					}
					pSelf.OnDataReady(sId, str1);
					for ( var i in arScripts )
					{
						if ( arScripts[i] != '' )
						{
							eval(arScripts[i]);
						}
					}
				}
				catch ( e )
				{
					var pWindow = window.open('about:blank');
					pWindow.document.write(oRequest.responseText);
				}
				pSelf.Close(sId, oRequest, bScrollTop);
			}
		}
		oRequest.onreadystatechange = ReadyStateChangehandler;
	}
	pSelf.EscapeString = function(str)
	{
		if ( encodeURI )
		{
			return encodeURI(str);
		}
		else
		{
			return escape(str);
		}
	}
	pSelf.Data2String = function(arData)
	{
		var sData = '';
		if ( arData != null )
		{
			for ( var i in arData )
			{
				if ( sData.length > 0 )
				{
					sData += '&';
				}
				sData += pSelf.EscapeString(i) + '=' + pSelf.EscapeString(arData[i])
			}
		}
		return sData;
	}
	pSelf.Send = function(sId, sUrl, arData, bScrollTop)
	{
		pSelf.__Show();
		var sData = '';
		if ( arData != null )
		{
			sData = pSelf.Data2String(arData);
		}
		if ( sData.length > 0 )
		{
			sUrl += '?' + sData;
		}
		var oRequest = pSelf.CreateHttpObject();
		if ( oRequest )
		{
			pSelf.AddHandler(sId, oRequest, bScrollTop);
			oRequest.open('GET', sUrl, true);
			return oRequest.send('');
		}
	}
	pSelf.Post = function(sId, sUrl, arData, bScrollTop)
	{
		pSelf.__Show();
		var sData = '';
		if ( arData != null )
		{
			sData = pSelf.Data2String(arData);
		}
		var oRequest = pSelf.CreateHttpObject();
		if ( oRequest )
		{
			pSelf.AddHandler(sId, oRequest, bScrollTop);
			oRequest.open('POST', sUrl, true);
			oRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			return oRequest.send(sData);
		}
	}
}
oHttpRequest = new CHttpRequest();
