function encodeURIComponentNew(s)
	{
	var enc = "";
	if (typeof encodeURIComponent == "function")
		{
		enc = encodeURIComponent(s);
		}
	else 
		{
		var s = utf8(s);
		var c;
		for (var i= 0; i<s.length; i++)
			{
			if (okURIchars.indexOf(s.charAt(i))==-1)
			enc += "%"+toHex(s.charCodeAt(i));
			else
			enc += s.charAt(i);
			}
		}
	return enc;
	}

function XHRConnection()
	{
	var xhr = false;
	var datas = new String();
	var areaId = new String();
	var xmlObj;
	var xmlLoad;
	try
		{
		xhr = new XMLHttpRequest();		
		}
	catch (error)
		{
		try
			{
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		catch (error)
			{
			try
				{
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
				}
			catch (error)
				{
				xhr = false;
				}
			}
		}
	this.resetData = function()
		{
		datas = new String();
		datas = '';
		};
	
	this.appendData = function(pfield, pvalue)
		{
		datas += (datas.length == 0) ? pfield + "=" + encodeURIComponentNew(pvalue) : "&" + pfield + "=" + encodeURIComponentNew(pvalue);
		};
	this.appendWEData = function(pfield, pvalue)
		{
		datas += (datas.length == 0) ? pfield + "/" + encodeURIComponentNew(pvalue) : "/" + pfield + "/" + encodeURIComponentNew(pvalue);
		};
	this.createXMLObject = function()
		{
		try
			{
			xmlDoc = document.implementation.createDocument("", "", null);
			xmlLoad = 'onload';
			}
		catch (error)
			{
			try
				{
				xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
				xmlLoad = 'onreadystatechange';
				}
			catch (error)
				{
				return false;
				}
			}
		return xmlDoc;
		}
	this.setXMLObject = function(obj)
		{
		if (obj == undefined)
			{
			return false;
			}
		try
			{
			//xmlObj = this.createXMLObject();
			xmlObj = obj;
			}
		catch (error)
			{
			}
		}
	this.loadXML = function(xml, callBack)
		{
		if (!xhr)
			{
			return false;
			}
		if (xmlObj && xml)
			{
			if (typeof callBack == "function")
				{
				if (xmlLoad == 'onload')
					{
					xmlObj.onload = function()
						{
						callBack(xmlObj);
						}
					}
				else
					{
					xmlObj.onreadystatechange = function()
						{
						if (xmlObj.readyState == 4)
							{
							callBack(xmlObj);
							}
						}
					}
				}
			xmlObj.load(xml);
			return;
			}		
		}
	this.sendAndLoad = function(Url, httpMode, callBack)
		{
		httpMode = httpMode.toUpperCase();
		xhr.onreadystatechange = function()
			{
			if (xhr.readyState == 4 && xhr.status == 200)
				{
				if (typeof callBack == "function")
					{
					callBack(xhr);
					return;
					}
				else if (areaId.length > 0)
					{
					try
						{
						document.getElementById(areaId).innerHTML = xhr.responseText;
						}
					catch(error)
						{
						}
					return;
					}
				}
			};
		switch(httpMode)
			{
			case "GET":
			try
				{
				this.appendWEData('~nocache', Math.floor(Math.random() * 10000000));
				Url = (datas.length > 0) ? Url + "/" + datas : Url;
				xhr.open("GET", Url);
				xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
				xhr.send(null);
				}
			catch(error)
				{
				return false;
				}
			break;
			case "POST":
			try
				{
				this.appendData('~nocache', Math.floor(Math.random() * 10000000));
				xhr.open("POST", Url); 
				xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
				xhr.setRequestHeader("Accept-Charset","UTF-8");
				xhr.send(datas);
				}
			catch(error)
				{
				return false;
				}
			break;
			default :
			return false;
			break;
			}
		return true;
		};
	return this;
	}