var asynch=true;


	function oAJAX(url,Action,extra,postData)
	{//to make sure makeRequest runs in context of calling function, not global (shared)
	this.url=url;
	this.Action=Action;
	this.extra=extra;
	this.postData=(postData)?postData:null;
	this.makeRequest=function(){makeRequest(this.url,this.Action,this.extra,this.postData);}
	return this;
	}

function makeRequest(url,Action,extra,postData)
{
	//extra - information related to caller that may be needed in processing response
	if(!extra)extra=false;

	var Method='GET';
	if(Action=='POST')
		{
		Method='POST';
		if(postData)Action=postData;
		else Action=null;
		}
	else url+=Action;

	var request;
	if(window.XMLHttpRequest)
	{
		request = new XMLHttpRequest();
		if(request.overrideMimeType)request.overrideMimeType('text/xml');
	}
	else if(window.ActiveXObject)
	{
		request = new ActiveXObject("MSXML2.XMLHTTP");
	}
	else{alert("Your browser is too obsolete to use this application.\n Please upgrade and come back.");return;}
	sendRequest(url,request,Action,Method,extra);
}

function sendRequest(url,request,Action,Method,extra)
{
	var arg=null;
	request.onreadystatechange = function(){onResponse(request,extra);};
	if(!asynch && !isIE)
		{request.onload=function(){onResponse(request,extra);};}
	request.open(Method, url, asynch);
	if(Method=='POST')
	{
		request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");

		if(!Action)arg=getFormValues(document.forms[0]);
		else arg=Action;
	}
	request.send(arg);
}

function checkReadyState(obj)
{
	if(obj.readyState == 0){window.status = "Sending Request...";}
	if(obj.readyState == 1){window.status = "Loading Response...";}
	if(obj.readyState == 2){window.status = "Response Loaded...";}
	if(obj.readyState == 3){window.status = "";}
	if(obj.readyState == 4)
	{
		if(obj.status == 200){return true;}
		else if(obj.status == 404){window.status = "File not found";}
		else if(obj.status == 403){window.status = "Forbidden - security violation";}
		else if(obj.status == 500){window.status = "Internal server error";}
		else if(obj.status == 12029){window.status = "A connection with the server could not be established";}
		else
			{
			//alert(obj.status);
			window.status = "Could not retrieve the data :-(";
			}
	}
	return false;
}

function onResponse(request,extra)
{//alert(checkReadyState(request));
	if(checkReadyState(request))
	{
	    afterAJAX(request,extra);
	    
		asynch=true;//restore value
	}
}

function getFormValues(fobj,valFunc)
{
   var str = "";
   var valueArr = null;
   var val = "";
   var cmd = "";
   for(var i = 0;i < fobj.elements.length;i++)
   {
	   switch(fobj.elements[i].type)
	   {
		   case "text":
				if(valFunc)
				{
					//use single quotes for argument so that the value of
					//fobj.elements[i].value is treated as a string not a literal
					cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
					val = eval(cmd)
				}
				str += fobj.elements[i].id +"=" + escape(fobj.elements[i].value) + "&";
				 break;
		   case "select-one":
				str += fobj.elements[i].id +
				"=" + escape(fobj.elements[i].options[fobj.elements[i].selectedIndex].value) + "&";
				break;
		   case "hidden":
		        if(fobj.elements[i].id.indexOf('__')>-1)break;//no need for __viewstate and other .NET-specific fields
				str += fobj.elements[i].name +"=" + escape(fobj.elements[i].value) + "&";
				 break;
           case"textarea":
				str += fobj.elements[i].id +"=" + escape(fobj.elements[i].value) + "&";
				 break;
		}
   }
   str = str.substr(0,(str.length - 1));
   return str;
}