var requests = new Array();

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 ajax_stop()
{
	for(var i=0; i<requests.length; i++)
	{
		if(requests[i] != null)
			requests[i].abort();
	}
}

function ajax_create_request(context)
{
	for(var i=0; i<requests.length; i++)
	{
		if(requests[i].readyState == 4)
		{
			requests[i].abort();
			requests[i].context = null;
			return requests[i];
		}
	}

	var pos = requests.length;
	
	requests[pos] = Object();
	requests[pos].obj = new XMLHttpRequest();
	requests[pos].context = context;
	
	return requests[pos];
}
var request_async=null;
var ajax_async=false;
function ajax_request(url, data, callback, context)
{
	//*****************
	//ajax_async=false;
	//*****************
	if(ajax_async==false) //---- sync
	{

		var request = ajax_create_request(context);
		var async = typeof(callback) == 'function';
        
		if(async) request.obj.onreadystatechange = function()
		{
			if(request.obj.readyState == 4)
				callback(new ajax_response(request));
		}
		request.obj.open('POST', url, async);
		request.obj.send(data);
		
		if(!async)
			return new ajax_response(request);
	}
	else //---- async
	{

		request_async = ajax_create_request(context);
		var async = true;
	    request_async.obj.onreadystatechange = ajax_response_sync;
		request_async.obj.open('POST', url, async);
		request_async.obj.send(data);

		ajax_async=false;
		return 	false;
	}
}
var elem_async;
function ajax_response_sync()
{
	if(request_async.obj.readyState == 4)
	{
		var elem = elem_async;
		if(elem!=null)
		{
			if((new ajax_response_async(request_async)).value!=null)
			    elem.innerHTML=(new ajax_response_async(request_async)).value;
			else
			    location=window.location;
			//--------------- client External AsyncResponse function ---------
			_ajaxAsyncRes();
		}
	}
}
function HtmlControlUpdateSync(func, parentId) {
	var f,i,ff,fa='';
	var ele = document.getElementById(parentId);
	if(ele == null) return;
	var args = [];
	for(i=0; i<HtmlControlUpdateSync.arguments.length; i++)
		args[args.length] = HtmlControlUpdateSync.arguments[i];
	if(args.length > 2)
		for(i=2; i<args.length; i++){fa += 'args[' + i + ']';if(i < args.length -1){ fa += ','; }}
	f = '{"invoke":function(args){return ' + func + '(' + fa + ');}}';
	ff = null;eval('ff=' + f + ';');
	if(ff != null && typeof(ff.invoke) == 'function')
	{
		var res = ff.invoke(args);
		if(res.error != null)
		{
			if((res.error+"").indexOf("NullReferenceException")>-1)
				location=window.location;
			else
				alert(res.error);
			return;
		}
		ele.innerHTML = res.value;
	}
}

function HtmlControlUpdateAsync(func, parentId) 
{
	var f,i,ff,fa='';
	var ele = document.getElementById(parentId);
	if(ele == null) return;
	elem_async=ele;
	ajax_async=true;
	
	var args = [];
	for(i=0; i<HtmlControlUpdateAsync.arguments.length; i++)
		args[args.length] = HtmlControlUpdateAsync.arguments[i];
	if(args.length > 2)
		for(i=2; i<args.length; i++){fa += 'args[' + i + ']';if(i < args.length -1){ fa += ','; }}
	f = '{"invoke":function(args){return ' + func + '(' + fa + ');}}';

	ff = null;eval('ff=' + f + ';');
	if(ff != null && typeof(ff.invoke) == 'function')
		var res = ff.invoke(args);
}

function ajax_response_async(request)
{
	this.request = request.obj;
	this.error = null;
	this.value = null;
	this.context = request.context;

	if(request.obj.status == 200)
	{
		try
		{
			this.value = object_from_json(request);
			if(this.value && this.value.error)
			{
				this.error = this.value.error;
				this.value = null;
			}
		}
		catch(e)
		{
			this.error = new ajax_error(e.name, e.description, e.number);
		}
	}
	else
	{
		this.error = new ajax_error('HTTP request failed with status: ' + request.obj.status, request.obj.status);
	}
	
	return this;
}




function ajax_response(request)
{
	this.request = request.obj;
	this.error = null;
	this.value = null;
	this.context = request.context;
	
	
	
	
	if(request.obj.status == 200)
	{
		try
		{
			this.value = object_from_json(request);
			
			if(this.value && this.value.error)
			{
				this.error = this.value.error;
				this.value = null;
			}
		}
		catch(e)
		{
			this.error = new ajax_error(e.name, e.description, e.number);
		}
	}
	else
	{
		this.error = new ajax_error('HTTP request failed with status: ' + request.obj.status, request.obj.status);
	}
	
	return this;
}

function enc(s)
{
	try{
	return s.toString().replace(/\%/g, "%26").replace(/=/g, "%3D");
	}
	catch(ee){return "";}
}

function object_from_json(request)
{
			

	if(request.obj.responseXML != null && request.obj.responseXML.xml != null && request.obj.responseXML.xml != '')
		return request.obj.responseXML;
	
	var r = null;	
	eval('r=' + request.obj.responseText + ';');
	return r;
}

function ajax_error(name, description, number)
{
	this.name = name;
	this.description = description;
	this.number = number;

	return this;
}

ajax_error.prototype.toString = function()
{
	return this.name + " " + this.description;
}

function json_from_object(o)
{
	if(o == null)
		return 'null';

	switch(typeof(o))
	{
		case 'object':
			if(o.constructor == Array)		// checks if it is an array [,,,]
			{
				var s = '';
				for(var i=0; i<o.length; ++i)
				{
					s += json_from_object(o[i]);

					if(i < o.length -1)
						s += ',';
				}

				return '[' + s + ']';
			}
			break;
		case 'string':
			return '"' + o.replace(/(["\\])/g, '\\$1') + '"';
		default:
			return String(o);
	}
}var ajaxVersion = '5.6.3.4'













