var RequestState = 
{
	None : 0,
	Loading : 1,
	Loaded : 2,
	Interactive : 3,
	Completed : 4
}

var RequestStatus =
{
	OK : 200,
	NotFound : 404,
	ServerError : 500,
	Unknown : 0
}


function GetXMLDocument(text)
{
	
	if(typeof(DOMParser) != "undefined") 
	{
		var parseX = new DOMParser();
		return parseX.parseFromString(text, "text/xml");
	} 
	else if(typeof(ActiveXObject) != "undefined")
	{
		var XMLobj = new ActiveXObject("Microsoft.XMLDOM");
		if(XMLobj) 
		{
			XMLobj.async = false;
			XMLobj.loadXML(text);
			if (XMLobj.parsed)
			{
				return XMLobj;
			}
			else
			{
				return null;
			}
		}
	}
}
			
function GetHTTPRequest()
{
	var httpRequest = null;
	try
	{
		
		httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		
	}
	catch (e)
	{
		try
		{
			httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			
		}
		catch (e)
		{
			httpRequest = null;
		}
	}
	
	if (!httpRequest && typeof XMLHttpRequest != "undefined")
	{
		httpRequest = new XMLHttpRequest();
		
		
	}
	return httpRequest;
}



function MakeSyncGetRequest(url)
{	
	var httpRequest = GetHTTPRequest();
	//httpRequest.onreadystatechange = function(){RequestStateChanged(httpRequest, callback, isXML, extraParam)};
	httpRequest.open("GET", url, false);
	httpRequest.setRequestHeader("Accept", "*/*");
	httpRequest.send(null);
	return httpRequest.responseText;
}

function MakeGetRequest(url, callback, isXML, extraParam)
{	
	var httpRequest = GetHTTPRequest();
	
	httpRequest.onreadystatechange = function(){RequestStateChanged(httpRequest, callback, isXML, extraParam)};
	httpRequest.open("GET", url, true);
	httpRequest.setRequestHeader("Accept", "*/*");
	httpRequest.send(null);
}


function MakePostRequest(url, table, callback, isXML, extraParam)
{	
	var httpRequest = GetHTTPRequest();
	httpRequest.onreadystatechange = function(){RequestStateChanged(httpRequest, callback, isXML, extraParam)};
	httpRequest.open("POST", url, true);
	httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	httpRequest.setRequestHeader("Internal", "Internal");
	httpRequest.send(EncodeTable(table));
}

function EncodeTable(table)
{
	var resultado = "";
	for (var key in table)
	{
		resultado += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(table[key]);
	}
	return resultado;
}

function RequestStateChanged(req, callback, isXML, extraParam)
{	
	if (req.readyState == RequestState.Completed)
	{
		if (req.status == RequestStatus.OK)
		{
			if (!isXML)
			{
				callback(req, extraParam);
			}
			else
			{
				var doc = GetXMLDocument(req.responseText);
				callback(doc, req.responseText, extraParam);
			}
		}
		else if (req.status == RequestStatus.Unknown)
		{
			throw("AJAX Response: status=0 (unknown).\nERROR in the request... are you executing it locally??");
		}
		else if (req.status == RequestStatus.NotFound)
		{
			alert("AJAX Response: Page not found");		
		}
	}
}

function AdaptFormParams(form)
{
	var datos = new Array();
	for (var i=0;i<form.elements.length;i++)
	{
		var control = form.elements[i];
		if (control.tagName.toUpperCase() == "INPUT" && control.type.toUpperCase() == "RADIO")
		{
			if (control.checked)
			{
				datos[control.name] = control.value;
			}
		}
		else
		{
			datos[control.name] = control.value;
		}
	}
	return datos;
}