/* ---------- funciones de ajax -------------- */
var debug;

function crearXMLHttpRequest(){
    var salida = false;
    try {
        salida = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            salida = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            salida = false;
        }
    }

    if (!salida && typeof XMLHttpRequest!='undefined') {
        salida = new XMLHttpRequest();
	}
	return salida;
}



/*
 *
 */
function loadXMLDoc(url,metodo,envio,init_debug) {
	var xmlhttp;
	if(loadXMLDoc.arguments.length < 4){
		/* debug es un argumento opcional y por defecto vale false */
		debug = false;
	} else {
		debug = init_debug;
	}
	xmlhttp = crearXMLHttpRequest();
	if(xmlhttp){
		xmlhttp.onreadystatechange = function(){
			var contenedor;
			contenedor = document.getElementById('contenedor');
			//Estado de carga
			if (xmlhttp.readyState == 1) {
				mostrarLoading();
			}
			//Estado listo
            if(xmlhttp.readyState == 4) {
                ocultarLoading();
                //si es correcto "OK" 
                if(xmlhttp.status == 200) {
                    /* debug */
                    if(debug){
                        alert("responseText:\n" + xmlhttp.responseText);
                        //alert("responseXML:\n" + xmlhttp.responseXML);
                    }
                     
                    //procesos para los datos recibidos
                    if(xmlhttp.responseXML != null){
                        /* si es un documento XML se procesan las etiquetas siguiente */
                        var respuesta = xmlhttp.responseXML.documentElement;
                        
                        /* Error del xml en navegadores que no sean Internet Explorer */
                        if(debug && respuesta != null && respuesta.nodeName == 'parsererror'){
                            var sourceText = respuesta.getElementsByTagName('sourcetext')[0];
                            var texto_err = "";
                            if (sourceText != null) {
                                texto_err = sourceText.firstChild.data;
                            }
                            alert(respuesta.firstChild.data + "\n" + texto_err);
                            contenedor.innerHTML = "";
                        }
                        
                        /* Error del xml en Internet Explorer */
                        else if(debug && xmlhttp.responseXML.parseError && xmlhttp.responseXML.parseError != 0){
                            /* Error del xml en Internet Explorer */
                            linea_err = xmlhttp.responseXML.parseError.line;
                            columna_err = xmlhttp.responseXML.parseError.linepos;
                            texto_err = xmlhttp.responseXML.parseError.srcText;
                            razon_err = xmlhttp.responseXML.parseError.reason;
                            
                            alert("Error de lectura XML: " + razon_err
                                + "Numero de linea " + linea_err + ", columna " + columna_err + ":\n" 
                                + texto_err);
                            contenedor.innerHTML = "";
                        } else {
                            procesarXML(respuesta);
                        }
                    } else {
                        /* Si es un documento html */
                        procesarHTML(xmlhttp.responseText);
                    }
                } else { 
                	//alert("No me pares cacho perra " + xmlhttp.status);
                	if(xmlhttp.status == "404"){
                		alert("No se encuentra el fichero XML para la peticion ajax:\n" + url);
                	} else {
                		try {
                	 		alert("Ha habido un problema con el ajax del servidor:\n" + xmlhttp.statusText);
                	 	} catch(e){
                	 		/* no hacer nada, puede ser que haya movido la pagina */
                	 	}
                	}
			        xmlhttp.abort();
                	return false;
                } 
            }
           
	    }
        xmlhttp.open(metodo, url, true);
		xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
		xmlhttp.send(envio);
    }
}

function displayElement(el, disp){
    if(el == null) return; 
    if(!(el.nodeType == 1)) return;
    
    var elemento = el.tagName;
    /* hijos */    
    if(el.hasChildNodes){
        var els = el.childNodes;
        var contenido = "";
        for(var e=0; e < els.length; e++){
            var ch = els[e];
            if(ch.nodeType == 3){
                /* codigo para nodo TEXT */
                contenido += ch.data;
            } else if (ch.nodeType == 4){ 
                /* codigo para nodo CDATA */
                contenido += ch.data;
            } else {
                displayElement(ch, disp);
            }
        }
    }
      
    if(debug){
        disp.innerHTML += "procesar metodo '" + elemento + "' con texto \"" + contenido + "\"<br>";
    }
    ejecutarMetodoConTexto(elemento,contenido);
}

function procesarXML(respuesta){
    var contenedor;
    contenedor = document.getElementById('contenedor');
    displayElement(respuesta, contenedor);
}

function procesarHTML(respuesta){
    var contenedor = document.getElementById('contenedor');
    contenedor.innerHTML = respuesta;
}
    
function envioAjax(x){
	var variables = envioAjax.arguments;
	var num_op = envioAjax.arguments.length - 1;
	var resultado = "";
	for (var i=0; i < num_op; i=i+2){
	    if(i != 0) resultado += "&";
		resultado += variables[i]+ "=" + encodeURIComponent(variables[i+1]);
	}
	return resultado;
}

var form_temp = "";
var input_name = "";
var input_value = "";
var select_text = "";
var indice_opcion = 0;
var opciones_text = [];
var opciones_value = [];
var default_value = "";
var default_value_definido = false;
/* el siguiente metodo procesa el XML */
function ejecutarMetodoConTexto(metodo,texto){
    switch(metodo){
        case "javascript":
            /* metodo 'javascript' ejecuta el codigo */
            eval(texto);
        break;
        case "include_javascript":
            /* incluye el codigo javascript en la pagina (las funciones nuevas seran accesibles) */
            include_texto(texto);
        break;
        case "contenedorHTML":
            /* escribe el codigo html en el contenedor (id = 'contenedor')*/
            var contenedor = document.getElementById('contenedor');
            contenedor.innerHTML = texto;
        break;
        case "contenedor":
            if(input_name != null && select_text != null){
                var contenedor = document.getElementById(input_name);
                if(document.getElementById(input_name) == null){
                    alert("AJAX: Se esta usando el contenedor '" + input_name + "' y no existe.");
                }
                contenedor.innerHTML = select_text;
            }
            input_name = select_text = null;
        break;
        case "form":
            form_temp = trim(texto);
            var dform = "document." + form_temp;
            if(eval(dform) == null){
                alert("Se esta usando el formulario " + form_temp + " y no existe.");
                form_temp = "";
            }
        break;
        case "name":
            input_name = trim(texto);
        break;
        case "value":
            input_value = trim(texto);
        break;
        case "defaultvalue":
            default_value = trim(texto);
            default_value_definido = true;
        break;
        case "datosinput":
            if(form_temp != "" && input_name != ""){
                var text_ejecutar = "document." + form_temp + "." + input_name + ".value = \'" + input_value + "\'";
                eval(text_ejecutar);
            }
            form_temp = input_name = input_value = "";
        break;
        case "text":
            if(texto == null)
                select_text = "";
            else 
                select_text = trim(texto);
        break;
        case "option":
            /**
             * 'option' agrega una opcion a un select (lista desplegable de formulario)
             * contiene las etiquetas 'text' y 'value'
             * Se ejecuta en la etiqueta 'select'
             */
            opciones_text[indice_opcion] = select_text;
            opciones_value[indice_opcion] = input_value;
            select_text = input_value = "";
            indice_opcion++;
        break;
        case "select":
            if(form_temp != "" && input_name != ""){
                codigo = "var ob = document."+ form_temp +"."+ input_name +";";
                eval(codigo);
                if(ob == null){
                    alert("AJAX: Se esta usando el select '" + input_name + "' del formulario '" + form_temp + "' y no existe.");
                } else if(ob.options == null){
                 	alert("AJAX: Se esta usando el objeto con id '" + input_name + "' del formulario '" + form_temp + "' y no es un select.");
                } else {
	 				ob.options.length = 0;               
	                var i=0;
	                while(i < indice_opcion){
	                    ob.options[i] = new Option(opciones_text[i],opciones_value[i]); 
	                    if(default_value_definido && opciones_value[i] == default_value)
	                        ob.options[i].selected = true;
	                    
	                    opciones_text[i] = opciones_value[i] = null;
	                    i++;
	                }
                }
                
                form_temp = input_name = default_value = "";
                default_value_definido = false;
                indice_opcion = 0;
            }
        break;
        default:
            otrasEtiquetasXML(metodo,texto);
    }
}

function otrasEtiquetasXML(metodo,texto){
    /* sobreescribr esta funcion en la pagina si es necesario */
}



var mensaje_loading_ajax = null;
var numero_llamadas_ajax = 0;

/*
 *
 */
function mostrarLoading(){
	document.getElementById("cargando").innerHTML = "<img src='../../../../../comunes/estilos/cuerpo/cargando.png'>";
}


/**
 * Nombre:      ocultarLoading
 * Descripción: Oculta la capa de Loading.
 */
function ocultarLoading(){
	document.getElementById("cargando").innerHTML = ""
} /* fin function */


/**/
