//---------------------------------------------------------------------------------------
// FICHERO : ajax.js
//---------------------------------------------------------------------------------------
// AUTOR : Alvaro Verdión Malagamba.
//---------------------------------------------------------------------------------------
// DESCRIPCION : Este fichero es la parte cliente JAVASCRIPT del modulo ajax.
//				Consta de varias funciones:
//
//				nuevoAjax: Crea un objeto ajax diferenciando entre IE y el resto
//
//				EnviarFormularioAjax: Recorre un formulario indicado por su id y envia por
//				POST todas las variables al servidor, esperando la respuesta XML.
//
//				LiveSearch: función ideada para relizar "Busqueda Vivas" en las que mientras
//				se va tecleando la busqueda, se va buscando.
//
//				getParamenters: Extrae los valores del todos los campos del formulario
//
//				AppendToSelect,AppendTo y LimpiaSelect: Son funciones comunes para añadir
//				nodos a un elemento de la pagina, como <select> o <p>.
//
//---------------------------------------------------------------------------------------

var Ajax_Correcto="",Ajax_Error="",Ajax_Resultado="",Ajax_Extra="";
var options;

/* Desactivar boton tras hacer click */

function nuevoAjax(){
	var xmlhttp=false;
	try {
	  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	  try {
	   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (E) {
	   xmlhttp = false;
	  }
	}
	
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	  xmlhttp = new XMLHttpRequest();
	}
	
	return xmlhttp;
}


function EnviarFormularioAjax(id,callback){
	var formulario=document.getElementById(id);
	var pagina=formulario.action;
	var parameters=getParamenters(id);
	var ajax = nuevoAjax();
	var reloj;

	ajax.open("POST", pagina, true);

	var carga = new Image();
	carga.src = "images/wait.gif";
	if(!document.getElementById('reloj')){
		reloj=document.createElement("span");
		reloj.id="reloj";
		d=reloj;
	}else{
		d = document.getElementById('reloj')
	}
	d.innerHTML="";
	d.appendChild(carga);


	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			d.innerHTML="";

			var elementos = ajax.responseXML.getElementsByTagName("elemento");
			Ajax_Extra = ajax.responseXML.getElementsByTagName("extra")[0];
			if(elementos.length==0){
				Ajax_Error="El array llego vacio";
				eval(callback+'();');
				Ajax_Correcto="";
			}else if(elementos.length==1){
				if(elementos[0].getAttribute("name")=="CORRECTO"){
					Ajax_Correcto=elementos[0].getAttribute("value");
					eval(callback+'();');
					Ajax_Correcto="";
				}else if(elementos[0].getAttribute("name")=="ERROR"){
					Ajax_Error=elementos[0].getAttribute("value");
					eval(callback+'();');
					Ajax_Error="";
				}else{
					Ajax_Resultado=elementos;
					eval(callback+'();');
					Ajax_Resultado="";
				}
			}else{
				Ajax_Resultado=elementos;
				eval(callback+'();');
				Ajax_Resultado="";
			}
		}
	}
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", parameters.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(parameters);
}

function getParamenters(id) {
	var valores=Array(),nombres=Array(),contador=0,strpost="";
	var formulario=document.getElementById(id);
	var now=new Date();

	// CAMPOS DE TIPO INPUT
	var elementos=formulario.getElementsByTagName('input');
	for(var i=0;i<elementos.length;i++){
		if(elementos[i].type=="checkbox"){
			if(elementos[i].checked==true){
				valores[contador]=elementos[i].value;
				nombres[contador]=elementos[i].name;
				contador++;
			}
		}else if(elementos[i].type=="radio"){
			if(elementos[i].checked==true){
				valores[contador]=elementos[i].value;
				nombres[contador]=elementos[i].name;
				contador++;
			}
		}else{
			valores[contador]=elementos[i].value;
			nombres[contador]=elementos[i].name;
			contador++;
		}
	}

	// CAMPOS DE TIPO textarea
	var elementos=formulario.getElementsByTagName('textarea');
	for(var i=0;i<elementos.length;i++){
		valores[contador]=elementos[i].value;
		nombres[contador]=elementos[i].name;
		contador++;
	}

	// CAMPOS DE TIPO select
	var elementos=formulario.getElementsByTagName('select');
	for(var i=0;i<elementos.length;i++){
		valores[contador]=elementos[i].options[elementos[i].selectedIndex].value;
		nombres[contador]=elementos[i].name;
		contador++;
	}

	// FALTAN LOS DE TIPO RADIOBUTON PERO ESA ES OTRA HISTORIA Y OTRA PARANOIA

	for(var i=0;i<nombres.length;i++){
		if(i>0){
			strpost+="&";
		}
		strpost+=URLencode(nombres[i])+"="+URLencode(valores[i]);
	}
	if(strpost!=""){
		strpost+="&";
	}
	strpost+="IsAjax=true&time=" + URLencode(now.getTime());
	return strpost;
}

/* Funciones para añadir a select y p */
function appendToSelect(select, value, content) {
    var opt;
	var a;
	var f;
    opt = document.createElement("option");
    opt.value = value;
	a = document.createTextNode(content);
    opt.appendChild(a);
	f = document.getElementById(select);
    f.appendChild(opt);
}

function appendToP(p, content){
	var a;
	a = document.createTextNode(content);
	f = document.getElementById(p);
	f.appendChild(a);
}

function limpiaselect(select) {
	var o = document.getElementById(select);
	while (o.length > 0){
		o.remove(0);
	}
}

function LiveSearch(idcampo,idform,callback,NumKey){
	var campo=document.getElementById(idcampo);
	var cadena=campo.value;
	if(cadena.length>=NumKey){
		EnviarFormularioAjax(idform,callback);
	}else if(cadena.length==0){
		EnviarFormularioAjax(idform,callback);
	}
}

function URLencode(sStr) {
    return escape(sStr).
             replace(/\+/g, '%2B').
                replace(/\"/g,'%22').
                   replace(/\'/g, '%27').
                     replace(/\//g,'%2F');
}
