/*
 * Archivo: JavaScript/ajax.js v(1.5)
 * Descripcion: Script para uso de AJAX
 * Autor: Ing. Carlos Yerena <cyerena@aztecomp.com>
 * Fecha: 01/07/2010
 * 
 */


// Automáticamente se crea un iFrame para cargar archivos JScritp
function creaFrame(){
		var miFrame=document.createElement("iframe");
		miFrame.style.display="none";
		miFrame.id="frameJS";
		miFrame.name="frameJS";
		document.body.appendChild(miFrame);	
}

// Validando navegador para insertar el objeto XMLHttpRequest
function obtenXMLHttp(){
	var xmlhttp = false;

	try{
		// Si la versión de Explorer es superior a la 5
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		// Si no, se usa el ActiveX antiguo
		try{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}

	// Se se está usando un navegador distinto a IE
	if(!xmlhttp && typeof XMLHttpRequest != 'undefined'){
		xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}

// Función para mostrar un respuesta XMLHttpRequest de una página dada en un contenedor
function Ajax(pagina,objeto,GetPost,formulario,cadena,comandos,archivoJS,nocarga){
	// Parte constante de avisos de carga
	var cargandoImg = '<img src="./imagenes/cargando.gif" align="center" /><br>';
	
	// Establece el DOM del objeto en que se incrutstará el resultado
	var Obj = document.getElementById(objeto);
	
	// Generar el objeto XMLHttpRequest
	var xmlhttp = obtenXMLHttp();
	
	// Valida que el método GET o POST se escribieron correctamente y existen
	if(GetPost != "GET" && GetPost != "POST"){
		Obj.innerHTML = "<div class=\"carga\">No se estableci&oacute; el m&eacute;todo de env&iacute;o</div>";
	}
	
	// En caso de que sea GET el método
	if(GetPost == "GET"){
		if(nocarga != 1)
			Obj.innerHTML = "<div class=\"carga\">" + cargandoImg + " Cargando ..</div>";
		xmlhttp.open("GET", pagina,true);
	}

	// En caso de que sea POST el método
	if(GetPost == "POST"){
		/* Deterina si el formulario existe, en caso de que si exista se invalida la cadena de caracteres de petición
		 * formando una nueva cadena en base a los elementos de formulario */
	
		if(Formul = document.getElementById(formulario)){
			if(Formul.elements.length > 0)
				valores = "";
	
			for(var i = 0; i < Formul.elements.length; i++){
				if(Formul.elements[i].name != ""){
					valores += Formul.elements[i].name + "=" + escape(Formul.elements[i].value);
				}
				if(Formul.elements[i + 1]){
					valores += "&";
				}
			}	
			
		} else {
			valores = cadena;
		}
		valores = unescape(valores);
		if(nocarga != 1)
			Obj.innerHTML = "<div class=\"carga\">" + cargandoImg + " Cargando ..</div>";
		xmlhttp.open("POST", pagina,true);
		xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	}
	
	// Realiza la consulta esperando que se complete la petición
	xmlhttp.onreadystatechange=function() {
		if(xmlhttp.readyState == 1){
			if(nocarga != 1)
				Obj.innerHTML = "<div class=\"carga\">" + cargandoImg + " Abriendo ...</div>";
		}
		if(xmlhttp.readyState == 2){
			if(nocarga != 1)
				Obj.innerHTML = "<div class=\"carga\">" + cargandoImg + " Enviando ...</div>";
		}
		if(xmlhttp.readyState == 3){
			if(nocarga != 1)
				Obj.innerHTML = "<div class=\"carga\">" + cargandoImg + " Cargando ...</div>";
		}
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			Obj.innerHTML = xmlhttp.responseText;
		
			// Establece si existe el frame de carga de archivo JS
			try {
				document.getElementById('frameJS').src;
			} catch (E) {
				creaFrame();
			}
			if(archivoJS != null && archivoJS != "") {
				document.getElementById('frameJS').src=archivoJS;
			} else {
				//document.getElementById('frameJS').src='';
			}
			
			if(comandos != null && comandos != "")
				eval(comandos);
		}
		
		if (xmlhttp.readyState == 4 && xmlhttp.status == 403) {
			Obj.innerHTML = '<center><img src="/imagenes/errorAjax.jpg" align="center" /><br /><big><strong>ERROR 403</strong></big><br /><br />No hay permiso para acceder al recurso en el servidor.</center>';
		}
		
		if (xmlhttp.readyState == 4 && xmlhttp.status == 404) {
			Obj.innerHTML = '<center><img src="/imagenes/errorAjax.jpg" align="center" /><br /><big><strong>ERROR 404</strong></big><br /><br />La URL o archivo solicitado no existe.</center>';
		}
		
		if (xmlhttp.readyState == 4 && xmlhttp.status == 500) {
			Obj.innerHTML = '<center><img src="/imagenes/errorAjax.jpg" align="center" /><br /><big><strong>ERROR 500</strong></big><br /><br />Error interno del servidor que puede estar saturado o el script a ejecutar contiene errores.</center>';
		}
		
		if (xmlhttp.readyState == 4 && xmlhttp.status == 503) {
			Obj.innerHTML = '<center><img src="/imagenes/errorAjax.jpg" align="center" /><br /><big><strong>ERROR 503</strong></big><br /><br />El servidor temporalmente no disponible.</center>';
		}
		
	}
	
	// Envía los valores necesario según el tiempo de petición, GET = null POST = cadena
	if(GetPost == "GET")
		xmlhttp.send(null);
	if(GetPost == "POST")
		xmlhttp.send(valores);
}

