// -------------------------------------------------------------------------------
// version	who	date		description
// 0.1		nacho	10.11.2006	creating ajax api
// -------------------------------------------------------------------------------

// -------------------------------------------------------------------------------
// create the HTTP request object for ajax calls
function createRequest()
{
        try
        {
                request=new XMLHttpRequest();
        }
        catch(try_one_microsoft)
        {
                try
                {
                        request=new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(try_other_microsot)
                {
                        try
                        {
                                request=new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch(failed)
                        {
                                request=false;
                        }
                }
        }

        if (!request)   
	{	
		alert("Error! Browser doesn't suppor AJAX application");
		return flase;
	}
        else
	{
		//alert("Browser supports AJAX application");
		return request;
	}
}

// -------------------------------------------------------------------------------
// check the ajax support of the browser
function checkAJAXSupport()
{
	var request=createRequest();
	if (!request)	
	{	
		alert("Error! Browser doesn't suppor AJAX application");
		return false;
	}
	else
	{
		//alert("Browser supports AJAX application");
		return true;
	}
}

// -------------------------------------------------------------------------------
// process a standard request
function handleResponse(request,handleFunction)
{
	        // si la petición se completo
        	switch(request.readyState)
	        {
        	        // readyState 1
	                case 1:
        	        case 2:
                	case 3:
	                        // la hacemos visible
        	                //document.getElementById("loading").style.visibility="visible";
                	        break;
	                case 4:
        	                // ocultamos la capa de loading
                	        //document.getElementById("loading").style.visibility="hidden";

                        	// si la petición fue correcta
	                        if (request.status==200)
        	                {

                	                // obtemos el valor para actualizar el interface
                        	        var responseText=request.responseText;
					var responseXML=request.responseXML;

					// dirigimos a otras funciones para hacer el tratamiento
					alert(request+handleFunction);
                        	}
	                        else if (request.status==404)
        	                        alert("Error! Url doesn't exists. Please contact with "+supportEmail);
                	        else if (request.status==403)
                        	        alert("Error! Access denied!. Please contact with "+supportEmail);
	                        else
        	                        alert("Error! Status: "+request.status+". Please contact with "+supportEmail);
                	        break;
	        }//switch
}

// -------------------------------------------------------------------------------
// call the http request
function callRequest(request,urlRequest,parametersRequest,typeRequest,handleFunctionRequest)
{
	// comprobamos que los parametros sean correctos
	if (request!=undefined && urlRequest!=undefined && parametersRequest!=undefined && handleFunctionRequest!=undefined)
	{
		switch (typeRequest)
		{
			case "POST":
			case "post":
				// ponemos la URL
				var url=urlRequest;
						
				// abrimos la petición
			        request.open("POST",url,true);
		
				// ponemos los headers necesarios para una petición post
			        request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			        request.setRequestHeader("Content-length", parametersRequest.length);
			        request.setRequestHeader("Connection", "close");
			
				// ponemos la función que tratará la respuesta
			        request.onreadystatechange=eval(handleFunctionRequest);

				// hacemos la petición
			        request.send(parametersRequest);
		
				break;
			case "GET":
			case "get":
			default:
				// preparamos la url para hacer la petición
				var url=urlRequest+"?"+parametersRequest;
				
				// abrimos la petición
				request.open("GET",url,true);
				
				// ponemos la función que tratará la respuesta
				request.onreadystatechange=eval(handleFunctionRequest);

				// hacemos la petición
				request.send(null);

				break;
		}//switch
	}
	// en caso de haber algun error en los parametros no hacemos nada y devolvemos error
	else	return false;
}

