function XMLHttpRequestObject()
{
	var XMLHttpRequestObject=null;

	try
	{
		// Firefox, Opera 8.0+, Safari
		XMLHttpRequestObject=new XMLHttpRequest();
	}

	catch (e)
	{
		// Internet Explorer
		try
		{
			XMLHttpRequestObject=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			XMLHttpRequestObject=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	return XMLHttpRequestObject;
}

function getData (dataSource, divID , callback)
{
	var XMLHttpObject = XMLHttpRequestObject();
	
	if (XMLHttpObject) 
	{
		var obj = document.getElementById (divID);
		XMLHttpObject.open ("GET", dataSource, true);
		XMLHttpObject.onreadystatechange = function()
		{
			if (XMLHttpObject.readyState == 4 && XMLHttpObject.status == 200) 
			{

				obj.innerHTML = XMLHttpObject.responseText;
				
				if (callback)
				{
					eval (callback);
				}

				XMLHttpObject.onreadystatechange = null;
				delete (XMLHttpObject);
				XMLHttpObject = null;

			}
		}

    XMLHttpObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    XMLHttpObject.setRequestHeader("Connection", "close");
		XMLHttpObject.send (null);
	}
	
}

function postData (dataSource, data , divID , callback, origen_capa)
// origen_capa puede valer algo como window.parent
// Por defecto no vale nada
{
	var XMLHttpObject = XMLHttpRequestObject();
	
	if (XMLHttpObject) 
	{
		if (divID)
		{
			if (origen_capa == undefined)
				var obj = document.getElementById (divID);
			else
				var obj = eval (origen_capa + ".document.getElementById(divID)");
		}
		
		XMLHttpObject.open ("POST", dataSource, true);
		XMLHttpObject.onreadystatechange = function()
		{
			if (XMLHttpObject.readyState == 4 && XMLHttpObject.status == 200) 
			{

				if (obj)
				{
					obj.innerHTML = XMLHttpObject.responseText;
				}

				if (callback)
				{
					eval (callback);
				}

				XMLHttpObject.onreadystatechange = null;
				delete (XMLHttpObject);
				XMLHttpObject = null;

			}
		}

    XMLHttpObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    XMLHttpObject.setRequestHeader("Content-length", data.length);
    XMLHttpObject.setRequestHeader("Connection", "close");
		XMLHttpObject.send (data);
	}
	
}


// Función para gestionar formularios.
// dataSource: es el fichero al que se le va a entregar los datos.
// formulario: es el nombre del formulario de donde salen los datos
// accion: es la acción que va a realizar el fichero al que se le entregan los datos (añadir,modificar,borrar)
// callback: es una función javascript que se ejecuta al acabar el proceso de entrega de datos.

function form_postData (dataSource, divID, formulario, accion , callback)
{
	var data;
	var XMLHttpObject = XMLHttpRequestObject();

	if (XMLHttpObject) 
	{
		if (accion!="")
		{
			data = "accion=" + accion + "&" + datos_formulario (formulario);
		}
		else
		{
			data = datos_formulario (formulario);
		}
		
		if (divID)
		{
			var obj = document.getElementById (divID);
		}

		XMLHttpObject.open ("POST", dataSource, true);
		
		XMLHttpObject.onreadystatechange = function()
		{

			if (XMLHttpObject.readyState == 4 && XMLHttpObject.status == 200) 
			{

				if (obj)
				{
					obj.innerHTML = XMLHttpObject.responseText;
				}

				if (callback)
				{
					eval (callback);
				}

				XMLHttpObject.onreadystatechange = null;
				delete (XMLHttpObject);
				XMLHttpObject = null;
				
			}
		}
		
		XMLHttpObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    XMLHttpObject.setRequestHeader("Content-length", data.length);
    XMLHttpObject.setRequestHeader("Connection", "close");
		XMLHttpObject.send (data);
	}
	
}

function datos_formulario (formulario)
{
	var datos,nombre_datos,dato;
	var num_datos;

	num_datos = eval ("document.forms[\""+formulario+"\"].length");
	
	
	datos = "";
	for (var a=0; a<num_datos; a++)
	{

		switch (eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].type"))
		{
		
			case "radio":
			{
				

				if (eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].checked"))
				{
					dato = eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].value");
   				dato = dato.replace (/&/g,"%26")				
					
					nombre_datos = eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].name");
					datos = datos + nombre_datos + "=" + dato + "&";
				}
				
				break;
			}

			case "checkbox":
			{
		
				if (eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].checked"))
				{
					dato = "on";
				}
				else
				{
					dato = "";
				}

				nombre_datos = eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].name");
				datos = datos + nombre_datos + "=" + dato + "&";
				
				break;
			}
			
			case "select-multiple":
			{
		
				var id_selector = eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].id")
				
				selector = document.getElementById (id_selector);
				
				dato = "";
				
				for (var i=0; i<selector.length; i++)
				{
					dato+=selector.options[i].value+",";
				}
				dato=dato.substring (0,(dato.length-1));
				dato = dato.replace (/&/g,"%26")				
				
				nombre_datos = eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].name");
				datos = datos + nombre_datos + "=" + dato + "&";
				
				break;
			}
			
			default:
			{
				dato = eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].value");
				dato = dato.replace (/&/g,"%26")				
				
				nombre_datos = eval ("document.forms[\""+formulario+"\"].elements[\""+a+"\"].name");
				datos = datos + nombre_datos + "=" + dato + "&";
				
				break;
			}

		}

	}
	datos=datos.substring (0,(datos.length-1));
	
	return datos;
	
}

