/*
	PubliAJAX v1.0
	==============
	
	Copyright (c) 2008 Rolando Caldas Sanchez (www.publinter.es | www.truzone.org)
	Official Site: publiajax.truzone.org
	License: TruOpenSource/LGP (www.truopensource.org/lgp)                  
		
	------------------------------------------------------
	
	Forma de Uso:

	Para realizar una peticion AJAX se debe llamar a la function ajax desde el codigo HTML.

	Valores que requieren ser enviados a la function ajax:

		- url: La direccion que debe ejecutarse.
		- get: La cadena GET que se envia. Este metodo es ideal para el envio de valores fijos predeterminados.
			   El formato es nombre=valor|nombre2=valor2|nombre3=valor
		- post: La cadena POST que se envia. Este metodo esta pensado para enviar valores que se obtienen del HTML, por ejemplo enviar valores de un formulario. El formato es:

				id del elemento1 a enviar|id del elemento2 a enviar|id del elemento3 a enviar

		Ejemplo de carga AJAX basico:

		<a href="#" onclick="ajax('./ajax.php','','')">clic</a>

		Ejemplo de carga AJAX + GET:
		
		<a href="#" onclick="ajax('./ajax.php','var=1','')">clic</a>

		o
		
		<a href="#" onclick="ajax('./ajax.php','var=1|var2=2','')">clic</a>		

		Ejemplo de carga AJAX + POST:

		<a href="#" onclick="ajax('./ajax.php','','id1')">clic</a>

		o

		<a href="#" onclick="ajax('./ajax.php','','id1|id2')">clic</a>

		Ejemplo de carga AJAX + GET + POST
		
		<a href="#" onclick="ajax('./ajax.php','var=1|var2=2','id1|id2')">clic</a>
*/

var preload = false;
var ruta = "./global/images/";

function ajax_carga(url,get,post,pre)
{
	var el = pre.split('|');
	for(i = 0; i < el.length; i++)
	{
		document.getElementById(el[i]).innerHTML = '<IMG src="' + ruta + 'loading.gif" alt="" title="" />';
	}
	ajax(url,get,post,false);
}

function lanzar_pre()
{
	var existe = document.getElementById('ajax_fondo');
	if(existe == null)
	{
		abod = document.getElementsByTagName('body')[0];
		
		aob = document.createElement('div');
		aob.id = 'ajax_fondo';
		aob.className = 'emerge_fondo';
	
		if(window.innerHeight)
		{
			aob.style.width = window.innerWidth + 'px';
    		aob.style.height = window.innerHeight + 'px';
		}else if(document.documentElement.clientWidth > '0')
		{
			aob.style.width = document.documentElement.clientWidth + 'px';
    		aob.style.height = document.documentElement.clientHeight + 'px';
		}else{
			aob.style.width = document.body.clientWidth + 'px';
    		aob.style.height = document.body.clientHeight + 'px';
		}
	
		aob.style.top = document.body.scrollTop + 'px';
		aob.style.display = 'block';
		aob.style.zIndex = 9000;
		aob.innerHTML = '<IMG src="' + ruta + 'loading.gif" alt="cargando" title="cargando" style="margin-top:' + alto + 'px;" />';

		abod.appendChild(aob);
	}
	else
	{
		existe.style.display = 'block';
	}
	preload = true;
}

//funcion encargada de crear el ajax_objeto
function ajax_obj() {
        try {
                _ajax_objeto = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
                try {
                       _ajax_objeto= new ActiveXObject("Microsoft.XMLHTTP");
                } catch (E) {
                        _ajax_objeto= false;
                }
        }
        if (!_ajax_objeto && typeof XMLHttpRequest!='undefined') {
                _ajax_objeto = new XMLHttpRequest();
        }
        return _ajax_objeto;
}

// url a cargar get cadena de valores a enviar sin el ? inicial
function ajax(url,get,post,pre)
{

	if(pre == true)
	{
		lanzar_pre();
	}

	var tipo = "GET";
	
	if(get != '') {
		var get_array = get.split('|');
		var get = '';
		
		for(i = 0; i < get_array.length; i++)
		{
			if(get != '')
			{
				get += '&';
			}
			get += get_array[i];
		}

		var _URL_ = url + "?" + get;

	} else {
		
		var _URL_ = url;

	}

	if(post != '') {
		var post_array = post.split('|');
		var _cadena_post = '';
		
		for(i = 0; i < post_array.length; i++)
		{
			var t = document.getElementById(post_array[i]);
			if(t != null)
			{
				if(_cadena_post == '')
				{
					_cadena_post = post_array[i] + "=" + t.value;
				} else {
					_cadena_post += "&" + post_array[i] + "=" + t.value;
				}
			}
		}

		if(_cadena_post != '')
		{
			tipo = "POST";
		}
	}	

	//creamos el ajax_objeto
    ajax_objeto = ajax_obj();
    ajax_objeto.open(tipo,_URL_,true);
    
    ajax_objeto.onreadystatechange=function() {
        if (ajax_objeto.readyState==4)
        {
        	if(ajax_objeto.status == 200)
        	{
        		ajax_actualizar(ajax_objeto.responseXML.documentElement);
            }
        }
    }
    if(tipo == 'POST') {
		ajax_objeto.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	    ajax_objeto.send(_cadena_post)
    } else {
	    ajax_objeto.send(null);
	}
}

function ajax_actualizar(xml)
{
	var item = xml.getElementsByTagName('item');
	var size = item.length;

	for(i = 0; i < size; i++)
	{
		var obj = new Object();
		var hijos = item[i].childNodes.length;
		
		for(j = 0; j < hijos; j++)
		{
			if(item[i].childNodes[j].tagName !== undefined)
			{
				obj[item[i].childNodes[j].tagName] = (item[i].childNodes[j].textContent == undefined) ? item[i].childNodes[j].text : item[i].childNodes[j].textContent;
			}
		}

		var etq = document.getElementById(obj.id);
		if(etq !== null && etq.tagName == obj.tagName)
		{
			for(a in obj)
			{
				if(a == 'tagName' || a == 'id') continue;
				etq[a] = obj[a];
			}
		}
		
	}
	if(preload == true)
	{
		var fondo = document.getElementById('ajax_fondo');
		fondo.style.display = 'none';
		preload = false;
	}
}
