
if (typeof(XMLHttpRequest) == 'undefined')
{
	var XMLHttpRequest = function()
	{
		var request = null;
		try
		{
			request = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch(e)
		{
			try
			{
				request = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch(ee)
			{}
		}
		return request;
	}
}

function Response(request, context)
{
    this.request = request;
    this.context = context;
    this.error = null;
    this.value = null;

    if(request.status == 200)
    {
		try
		{
			if (request.responseXML.documentElement.textContent)
				this.value = request.responseXML.documentElement.textContent;
			else
				this.value = request.responseXML.documentElement.text;
		}
		catch(e)
		{
			this.value = request.responseText;
		}			
		try
		{
			var responseObject = null;
			eval('responseObject=' + this.value + ';');
			this.value = responseObject;
		}
		catch(e)
		{
		}
	}
    else
        alert('HTTP request failed with status: ' + request.status);

    return this;
}

function Request(url, data, callback, context)
{
	var request = new XMLHttpRequest();

	var async = typeof(callback) == 'function';

	if (async)
	{
		request.onreadystatechange = function()
		{
			if (request.readyState == 4)
				callback(new Response(request, context));
		}
	}	

	request.open('POST', url, async);
	request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	request.setRequestHeader('Content-Length','0');
	request.send(data);

	if (!async)
		return new Response(request, context);
}

function RequestPostback(eventTarget, eventArgument, callback, context)
{
	var data = '';
	var form = document.forms[0];
	var url = window.location.pathname + window.location.search;
	var name = '';

	data = '__EVENTTARGET=' + escape(eventTarget.replace('$',':')) + '&';
	data += '__EVENTARGUMENT=' + eventArgument + '&';
	data += '__VIEWSTATE=' + escape(form.__VIEWSTATE.value).replace(new RegExp('\\+', 'g'), '%2b') + '&';
	data += '__AJAXCALLBACK=true&';

	for (var i=0; i<form.elements.length; i++)
	{
		name = form.elements[i].name;
		if( name && name != '')
		{
			if ((name != '__EVENTTARGET') && (name != '__EVENTARGUMENT') && (name != '__VIEWSTATE'))
			{
				data = data + escape(name.replace('$',':')) + '=' + form.elements[i].value;
				if (i != form.elements.length - 1)
					data = data + '&';
			}
		}
	}

	return Request(url, data, callback, context);
}
