//crea un objeto para manejo de las peticiones asíncronas.
function objeto_ajax ()
{
	var xmlhttp=false;
	//para ie
	try
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e)
	{
		try
		{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (E)
		{
			xmlhttp = false;
		}
	}
	//para mozilla, zafari, etc.
	if (!xmlhttp && typeof XMLHttpRequest!='undefined')
		xmlhttp = new XMLHttpRequest();
	return xmlhttp;
}

//archivo: es el archivo que va a llamar
//div_origen: es el div que se va a ocultar
//div_destino: es el div donde se van a mostrar los resultados
//formulario: es el formulario que utiliza para enviar las variables
//usada para enviar datos completos de un formulario
function enviar_formulario (archivo, div_destino, div_origen, formulario)
{
	var variables = "";
	//concatenamos nombres y valores para enviar
	for(i=0;i<formulario.length;i++)
		if(!formulario.elements[i].disabled)
			if(formulario.elements[i].type == 'radio' || formulario.elements[i].type == 'checkbox')
			{
				if(formulario.elements[i].checked)
					variables += formulario.elements[i].name + '=' + escape(formulario.elements[i].value).replace(/\+/g,"%2B") + '&';
			}
			else
				if(formulario.elements[i].type == 'select-multiple')
				{
					for(j=0;j<formulario.elements[i].length;j++)
						if(formulario.elements[i].options[j].selected == true)
							variables += formulario.elements[i].name + '=' + escape(formulario.elements[i].options[j].value).replace(/\+/g,"%2B") + '&';
				}
				else
					variables += formulario.elements[i].name + '=' + escape(formulario.elements[i].value).replace(/\+/g,"%2B") + '&';
	variables = variables.substring(0,variables.length-1); // Quito el último ampersand.
	div_resultado = document.getElementById(div_destino);
	if(div_origen != null)
		div_formulario = document.getElementById(div_origen);
	//instanciamos el objeto Ajax
	ajax = objeto_ajax();
	//usando del medoto POST
	ajax.open("POST", archivo, true);
	preloader = document.getElementById('loader');
	ajax.onreadystatechange = function()
	{
		if(ajax.readyState == 1)
		{
			div_resultado.innerHTML = "";
			preloader.innerHTML = "<img src=\"images/loader.gif\" alt=\"\" align=\"right\" />";
			preloader.style.display = "block";
		}
		else
		{
			if(ajax.readyState == 4)
			{
				if(ajax.status == 200)
				{
					//mostramos los datos dentro del div
					div_resultado.innerHTML = remove_parse_tags(ajax.responseText);
					parse_tags(ajax.responseText);
					div_resultado.style.display = "block";
					preloader.style.display = "none";
					if(div_origen != null)
					{
						div_formulario.innerHTML = "";
						div_formulario.style.display = "none";
					}
				}
				else
				{
					if(ajax.status == 404)
					{
						preloader.innerHTML = "La p&aacute;gina no existe.";
						return false;
					}
					else
					{
						//mostramos el posible error.
						preloader.innerHTML = "Error: ".ajax.status;
						return false;
					}
				}
			}
		}
	}
	//encabezado para hacer uso de un formulario.
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	//enviando los valores.
	ajax.send(variables);
	//return true;
}

//archivo: es el archivo que va a llamar
//div_destino: es el div donde se van a mostrar los resultados
//div_origen: es el div que se va a ocultar
//variables: cadena con los parámetros que se le deben pasar al archivo, se concatenan como si fueran a pasar por el URL
//usada para enviar datos que no estan en un formulario
function enviar_datos (archivo, div_destino, div_origen, variables)
{
	div_resultado = document.getElementById(div_destino);
	if(div_origen != null)
		div_formulario = document.getElementById(div_origen);
	//instanciamos el objeto_ajax.
	ajax = objeto_ajax();
	ajax.open("POST", archivo, true);
	preloader = document.getElementById('loader');
	ajax.onreadystatechange = function()
	{
		if(ajax.readyState == 1)
		{
			div_resultado.innerHTML = "";
			preloader.innerHTML = "<img src=\"images/loader.gif\" alt=\"\" align=\"right\" />";
			preloader.style.display = "block";
			//modificamos el estilo del div, mostrando una imagen de fondo
			//preloader.style.background = "url('loading.gif') no-repeat";
		}
		else
		{
			if(ajax.readyState == 4)
			{
				if(ajax.status == 200)
				{
					//mostramos los datos dentro del div.
					div_resultado.innerHTML = remove_parse_tags(ajax.responseText);
					parse_tags(ajax.responseText);
					div_resultado.style.display = "block";
					preloader.style.display = "none";
					if(div_origen != null)
					{
						div_formulario.innerHTML = "";
						div_formulario.style.display = "none";
					}
					preloader.innerHTML = "Cargado.";
				}
				else
				{
					if(ajax.status == 404)
					{
						preloader.innerHTML = "La p&aacute;gina no existe.";
						return false;
					}
					else
					{
						//mostramos el posible error.
						preloader.innerHTML = "Error: ".ajax.status;
						return false;
					}
				}
			}
		}
	}
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	//enviando los valores.
	ajax.send(variables);
}

function parse_tags (parse_text)
{
	var parse_ini = parse_text.indexOf('[parse]');
	var parse_fin = parse_text.indexOf('[/parse]');
	while(parse_ini != -1)
	{
		muestra = parse_text.substring(parse_ini+7,parse_fin);
		str_temp = parse_text.substring(0,parse_ini);
		parse_text = str_temp + parse_text.substring(parse_fin+8,parse_text.length);
		eval(muestra);
		parse_ini = parse_text.indexOf('[parse]');
		parse_fin = parse_text.indexOf('[/parse]');
	}
	return parse_text;
}

function remove_parse_tags (parse_text)
{
	var parse_ini = parse_text.indexOf('[parse]');
	var parse_fin = parse_text.indexOf('[/parse]');
	while(parse_ini != -1)
	{
		str_temp = parse_text.substring(0,parse_ini);
		parse_text = str_temp + parse_text.substring(parse_fin+8,parse_text.length);
		parse_ini = parse_text.indexOf('[parse]');
		parse_fin = parse_text.indexOf('[/parse]');
	}
	return parse_text;
}
