/**
	Título: TinyAJAX 0.22, Wrapper JavaScript simple a funciones XMLHTTP para AJAX
	Autor.: Pablo Rodríguez Rey (mr.xkr -en- inertinc -punto- org)
	        http://mr.xkr.inertinc.org/

	Agradecimientos a Cucaracha, por darme interés en el desarrollo de webs usando
	AJAX y proveerme del ejemplo básico con el que está desarrollada esta librería.
*/


// declarar el objeto XML-HTTP global
var http;

// constantes para httpRequest
var hGET=0;
var hPOST=1;

// funciones auxiliares generales
function gid(id) { return(document.getElementById(id)); }
function gescape(t) {
	var e=/\+/gi; var d=t.replace(e,"%2B");
	var e=/ /gi; var d=d.replace(e,"+");
	return(d);
}

// información de versión
function httpVersion() { return("TinyAJAX/0.2a"); }

// crea el objeto XML-HTTP
function httpObject() {
	var xmlhttp;
	// comprobar que el navegador soporta XMLHttpRequest
	try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
	catch (e) { try { xmlhttp = new XMLHttpRequest(); }
	catch (e) { xmlhttp = false; } } }
	return(xmlhttp);
}

// estado de la petición
function httpState() {
	try { return(http.readyState); }
	catch (e) { return(5); }
}

// cadena de estado de la petición
function httpStateString() {
	try { var rs=http.readyState; }
	catch (e) { var rs=5; }
	switch (rs) {
	case 0: return("Uninitialized")
	case 1: return("Loading");
	case 2: return("Loaded");
	case 3: return("Interactive");
	case 4: return("Complete");
	case 5: return("Server Crashed");
	}
}

// Indicar si se ha completado la operación
function httpComplete() {
	if (http.readyState==4) return(true);
	else return(false);
}

// Devolver los datos recibidos
function httpData() {
	return(http.responseText);
}

// Devolver los datos recibidos en formato documento XML
function httpXML() {
	return(http.responseXML);
}

// Devolver el estado del servidor
// Si se detecta error, el servidor no estará disponible
function httpStatus() {
	try { return(http.status); }
	catch(e) { return(0); }
}

// Comprobar que la respuesta del servidor es la 200 (HTTP OK)
function httpError() {
	if (http.readyState==4) {
		try { var ok=(http.status!=200); }
		catch(e) { return(true); }
		return(ok);
	}
}

// Realizar un envío de datos http
function httpSend(method, url, data, eventfunction) {
	var sdata=(data?data:"");
	var async=(eventfunction?true:false);
	http=httpObject();
	switch (method) {
	case 0: http.open("GET",url+"?"+sdata,async); sdata=null; break;
	case 1: http.open("POST",url,async); break;
	default: return(false);
	}
	if (async) http.onreadystatechange=eventfunction;
	http.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=ISO-8859-1"');
	http.send(sdata);
	return(true);
}

// Devuelve todos los campos y datos
// de un formulario tipo campo1=dato1&campo2=dato2&...
function httpFormFields(formObject) {
	var fields="";
	for (x=0;x<formObject.length;x++) {
		var val="";
		if (formObject[x].name) {
			switch (formObject[x].type) {
			case "checkbox": val=(formObject[x].checked?"1":"0"); break;
			case "button": case "select-one": case "text": case "textarea":
			default: val=formObject[x].value;
			}
			fields=fields+(x>0?"&":"")+formObject[x].name+"="+escape(val);
		}
	}
	return(fields);
}

// Habilitar o deshabilitar la posibilidad de introducción
// o modificación de datos de un formulario completo.
function httpFormFieldsEnabled(formObject,isEnabled) {
	for (x=0;x<formObject.length;x++) {
		try { formObject[x].disabled=isEnabled; }
		catch(e) {}
	}
}

// Devuelve un objeto con el número de variables
// creadas con la función aset(nombre,valor);
function aget(fullData) {
	var d=fullData;
	var o=new Object();
	while (true) {
		p0=d.indexOf("="); if (!p0) break;
		p1=d.indexOf("("); if (!p1) break;
		p2=d.indexOf(")"); if (!p2) break;
		name=d.substring(0,p1); if (!name) break;
		plength=parseInt(d.substring(p1+1,p2));
		data=d.substring(p0+1,p0+plength+1);
		eval("o."+name+"=data;");
		d=d.substring(p0+plength+2);
	}
	return(o);
}
