/* Ok mes 8,9 y 11 */
/* Ok día 8 y 9 */

   var semaforo=false;
   var NS4 = false;
   var IE4 = false;
   if (document.layers) { NS4 = true; } 
   else if (document.all) { IE4 = true; }

   var ver4 = (NS4 || IE4) !== null;
   var isMac = false;
   isMac = (navigator.appVersion.indexOf("Mac") != -1);


    /**
     * Rellena un String con espacios, introduce tantos espacios
     * como se indiquen en el parametro numero.
     *
     * @param numero Numero de espacios a introducir.
     * @return El String de espacios.
     */
    function Espacios(numero)    {
        var sTmp = "";
        var i = 0;
        for(i=0; i < numero ; i++)
            sTmp += " ";
        return sTmp;
    }

    /**
     * Rellena un String con otro, un determinado numero de veces.
     *
     * @param numero Numero de repeticiones.
     * @param cadena String con el que se rellena.
     * @return El String relleno.
     */

    function RellenaString(numero, cadena)
    {
        var sTmp = "";
        var i = 0;

        for(i=0; i < numero ; i++)
            sTmp += cadena;

        return sTmp;
    }

    /**
     * Añade a un String espacios a la derecha hasta que
     * tenga el tamaño indicado como parámetro
     *
     * @param numero Numero de caracteres del String.
     * @param cadena String a utilizar.
     * @return El String relleno.
     */
    function AddEspacios(numero, cadena)
    {
        var sTmp = cadena;
        var longi = sTmp.length;
        if (longi < numero)
            sTmp += Espacios(numero - longi);

        return sTmp;
    }

    /**
     * Devuelve un String con la longitud indicada rellenando con el caracter
     * indicado si la cadena original es menor que dicha longitud.
     *
     * @param Cadena Cadena original a ser tratada
     * @param longitud Longitud de la cadena a retornar.
     * @param Caracter_relleno Caracter de relleno en caso de que la cadena original tenga menor
     * longitud que la indicada.
     */
    function AddCadena(Cadena, longitud, Caracter_relleno)
    {
        var Longitud_Original = Cadena.length;
        var Longitud_Actual = Longitud_Original;

        if (Longitud_Original <= longitud)
        {
            while (Longitud_Actual < longitud)
            {
                Cadena = Cadena + Caracter_relleno;
                Longitud_Actual++;
            }
            return Cadena;
        }
        else
        {
            return Cadena.substring(0,longitud);
        }
    }

    /**
     * Devuelve un String con la longitud indicada rellenando con el caracter
     * indicado por la Izquierda si la cadena original es menor que dicha longitud.
     *
     * @param Cadena Cadena original a ser tratada
     * @param longitud Longitud de la cadena a retornar.
     * @param Caracter_relleno Caracter de relleno por la izquierda en caso de que
     * la cadena original tenga menor longitud de la indicada.
     */
    function AddLeftCadena(Cadena, longitud, Caracter_relleno)
    {
        var Longitud_Original = Cadena.length;
        var Longitud_Actual = Longitud_Original;

        if (Longitud_Original <= longitud)
        {
            while (Longitud_Actual < longitud)
            {
                Cadena = Caracter_relleno + Cadena;
                Longitud_Actual++;
            }
            return Cadena;
        }
        else
        {
            return Cadena.substring(0,longitud);
        }
    }

    /**
     * Comprueba si una fecha pasada por parametro es valida.
     *
     * @param fecha String con la fecha en formato dd/mm/aaaa
     * @return true - La fecha es correcta.
     * false - No es correcta
     */
    function CompruebaFecha(fecha) {
       var dia = 0;
        var mes = 0;
        var ano = 0;
        var i = 0;
        var FechaCorrecta = true;
        //Compruebar que existen los slash en las posiciones 2 y 5
        var pos1=fecha.indexOf('/');
        if ((pos1==-1) || (pos1==fecha.length)) { FechaCorrecta = false; }
        var pos2=fecha.indexOf('/', pos1+1);
        if ((pos2==-1) || (pos2==fecha.length)) { FechaCorrecta = false; }

        for(i=0;i<fecha.length;i++)
        	if(fecha.charAt(i) != '/' && fecha.charAt(i) != '-' && (fecha.charAt(i) >= '0' && fecha.charAt(i) <= '9') == false)
        		return false;

        // La fecha puede venir con guiones en lugar de slash.
        if(FechaCorrecta == false) {
            FechaCorrecta = true;
			pos1=fecha.indexOf('-');
			if ((pos1==-1) || (pos1==fecha.length)) { FechaCorrecta = false; }
			pos2=fecha.indexOf('-', pos1+1);
			if ((pos2==-1) || (pos2==fecha.length)) { FechaCorrecta = false; }
        }

        if(FechaCorrecta == false) { return false; }
        //Regogemos los valores de dia, mes y año.
        dia = parseInt(fecha.substring(0,pos1),10);
        mes = parseInt(fecha.substring(pos1+1,pos2),10);
        ano = parseInt(fecha.substring(pos2+1),10);
        if (ano < 1800) {
            FechaCorrecta = false;
        } else if (mes < 1 || mes > 12) {
            FechaCorrecta = false;
        } else if (dia < 1 || dia > getDiasMes(mes - 1,ano)) {
            FechaCorrecta = false;
		}

        return FechaCorrecta;
    }

    /**
     * Devuelve el numero de dias en un mes de una año en concreto.
     *
     * @param m Mes del que se quiere saber el numero de dias.
     * @param a Año para el mes solicitado.
     * @return int Numero de dias.
     */
    function getDiasMes( m, a) {
        switch (m) {
			case 0:
			case 2:
			case 4:
			case 6:
			case 7:
			case 9:
			case 10:
			case 11: return 31;
			case 3:
			case 5:
			case 8:
			case 11: return 30;
			//Si mes es febrero comprobar años bisiestos.
			case 1:
				if (a%4 == 0)
					if (a%100 == 0)
						if (a%400 == 0)
							return 29;
						else
							return 28;
					else
						return 29;
				else
					return 28;

			//Si no es mes valido retornamos 0
			default: return 0;
		}
		return 0;
	}

    /**
     * Comprueba la valided de una hora.
     *
     * @param hora String con la hora en formato hh:mm:ss (de 00:00:00 a 23:59:59)
     * @return true si la hora es correcta o false si no lo es.
     */
    function CompruebaHora(hora)
    {
        var hh = 0;
        var mm = 0;
        var ss = 0;
        var HoraCorrecta = true;

        // Compruebar que existe el caracter ':' en las posiciones 2 y 5
        var pos1=hora.indexOf(':');
        if ((pos1==-1) || (pos1==hora.length))
            return false;
        var pos2=hora.indexOf(':', pos1+1);
        if ((pos2==-1) || (pos2==hora.length))
            return false;

        //Regogemos los valores de hora, minuto y segundo.
        hh = parseInt(hora.substring(0,pos1), 10);
        mm = parseInt(hora.substring(pos1+1,pos2), 10);
        ss = parseInt(hora.substring(pos2+1), 10);

        if (hh > 23)
            HoraCorrecta = false;
        else if (mm > 59)
            HoraCorrecta = false;
        else if (ss > 59)
            HoraCorrecta = false;

        return HoraCorrecta;
    }

    /**
     * Quita los espacios en blanco que hay en la izquierda y en la derecha
     */
    function trim(cadena)
    {
		var posini = 0;
		var tamanio = 0;

		if ( cadena.length == 0)
			return "";

		while(cadena.charAt(posini) == ' ')
			++posini;

		tamanio = cadena.length - 1;
		while(tamanio >= posini && cadena.charAt(tamanio) == " ")
			--tamanio;

		++tamanio;

		if ( tamanio == posini)
			return "";
		else return cadena.substring(posini,tamanio);
    }

    /**
     * Metodo para comprobar si una cadena contiene una fecha y hora.
     *
     * @param FechaHora Cadena con la fecha y hora
     * en formato "dd/mm/yyyy hh:ii:ss" o "dd-mm-yyyy hh:ii:ss"
     * @return true si la cadena contiene una fecha y hora valida y
     * false en caso contrario.
     */
    function isDate(FechaHora)
    {
        var sTemp  = "";
        var sFecha = "";
        var sHora  = "";
        var pos    = -1;

        if (FechaHora != null)
            sTemp = trim(FechaHora);
	    else
	        return false;

        if(sTemp.length == 0)
            return false;

        pos = sTemp.indexOf(" ");
        if(pos != -1)
        {
            sFecha = sTemp.substring(0,pos);
            if(trim(sFecha).length == 0)
                return false;
        }
        else
            return false;

        if (pos < sTemp.length)
        {
            sHora = sTemp.substring(pos+1,sTemp.length);
            if(trim(sHora).length==0)
                return false;
        }else
            return false;

        if (CompruebaFecha(trim(sFecha)) && CompruebaHora(trim(sHora)))
            return true;

        return false;
    }

	/**
	 * Comprueba que una fecha y hora (inicial) sea menor que la otra (final).
	 *
	 * @param Fx_Ini Cadena con la fecha y/o hora inicial en formato dd/mm/yyyy hh:mm:ss
	 * @param FX_Fin Cadena con la fecha y/o hora inicial en formato dd/mm/yyyy hh:mm:ss
	 * @return -1 si la fecha Fx_ini es menor que la fecha Fx_fin, 1 si es mayor, 0 igual
	 * -2 si las fechas no son buenas.
	 */
	function ComprobarFxIniFin(Fx_Ini, Fx_Fin)
	{
		// primero comprueba la validez de las fechas introducidas
		if (Fx_Ini.length >= 19)
		{
			if(isDate(Fx_Ini) == false)
				return -2;
		}
		else if(CompruebaFecha(Fx_Ini) == false)
				return -2;

		if (Fx_Fin.length >= 19)
		{
			if(isDate(Fx_Fin) == false)
				return -2;
		}
		else if(CompruebaFecha(Fx_Fin) == false)
				return -2;

		// hay que crear el date para compararlos
		var dia = parseInt(Fx_Ini.substring(0,2), 10);
		var mes = parseInt(Fx_Ini.substring(3,5), 10);
		var anio = parseInt(Fx_Ini.substring(6,10), 10);
		var fini;

		if (Fx_Ini.length >= 19)
		{
			var hora = parseInt(Fx_Ini.substring(11,13), 10);
			var minuto = parseInt(Fx_Ini.substring(14,16), 10);
			var segundo = parseInt(Fx_Ini.substring(17), 10);
			fini = new Date(anio,mes - 1, dia, hora, minuto, segundo);
		}
		else
			fini = new Date(anio,mes - 1, dia);

		dia = parseInt(Fx_Fin.substring(0,2), 10);
		mes = parseInt(Fx_Fin.substring(3,5), 10);
		anio = parseInt(Fx_Fin.substring(6,10), 10);
		var ffin;

		if (Fx_Ini.length >= 19)
		{
			hora = parseInt(Fx_Fin.substring(11,13), 10);
			minuto = parseInt(Fx_Fin.substring(14,16), 10);
			segundo = parseInt(Fx_Fin.substring(17), 10);
			ffin = new Date(anio,mes - 1, dia, hora, minuto, segundo);
		}
		else
			ffin = new Date(anio,mes - 1, dia);

		// Ya se puede comparar
		if ( fini < ffin ) return -1;
		if ( fini > ffin ) return 1;
		return 0;
	}

	/**
	 * Devuelve la fecha y hora actual del sistema.
	 *
	 * @param Formato 0 para indicar que devolverá una fecha formateada (dd/mm/yyyy hh:ii:ss)
	 * 1 indicamos que se devolverá sin formato (dd-mm-yyyy hh:ii:ss).
	 * 2 indicamos que se devolverá sin formato (dd-mm-yyyy-hh.ii.ss).
	 * 3 indicamos que se devolverá sin formato (yyyy/mm/dd hh:ii:ss).
	 * 4 indicamos que se devolverá sin formato (yyyy-mm-dd hh:ii:ss).
	 * 5 indicamos que se devolverá sin formato (yyyy-mm-dd-hh.ii.ss).
	 * 6 indicamos que se devolverá sin formato (ddmmyyyyhhiiss).
	 * @return Fecha y Hora actual con formato.
	 */
	function GenFechaHora(Formato)
    {

        var fxTmp = "";
        var dTmp = new Date();
		var MinStr = "";
		var SegStr = "";
        var DiaStr = "";
        var MesStr = "";
        var HoraStr = "";
        var AnioStr = "";

		if (dTmp.getMinutes() <= 9)
			MinStr = "0" + dTmp.getMinutes();
		else
			MinStr = "" + dTmp.getMinutes();

		if (dTmp.getSeconds() <= 9)
			SegStr = "0" + dTmp.getSeconds();
		else
			SegStr = "" + dTmp.getSeconds();

        if (dTmp.getDate() <= 9)
           DiaStr = "0" + dTmp.getDate();
        else
           DiaStr = "" + dTmp.getDate();

        if ((dTmp.getMonth() + 1) <= 9)
            MesStr = "0" + (dTmp.getMonth() + 1);
        else
            MesStr = "" + (dTmp.getMonth() + 1);

        if (dTmp.getHours() <= 9)
            HoraStr = "0" + dTmp.getHours();
        else
            HoraStr = "" + dTmp.getHours();

        if(dTmp.getYear() < 100)
	        AnioStr = "19" + dTmp.getYear();
	    else
	        AnioStr = dTmp.getYear();

        fxTmp = DiaStr + MesStr + AnioStr +
                HoraStr + MinStr + SegStr;

        if (Formato < 6)
		    return FormateaFechaHora(fxTmp, Formato);
		else
		    return fxTmp;
    }

	/**
	 * Metodo para dar formato a una fecha/hora.
	 *
	 * @param FH Cadena con fecha y hora a formatear. ("ddmmyyyyhhiiss")
	 * @param Formato 0 para indicar que devolverá una fecha formateada (dd/mm/yyyy hh:ii:ss)
	 * 1 indicamos que se devolverá sin formato (dd-mm-yyyy hh:ii:ss).
	 * 2 indicamos que se devolverá sin formato (dd-mm-yyyy-hh.ii.ss).
	 * 3 indicamos que se devolverá sin formato (yyyy/mm/dd hh:ii:ss).
	 * 4 indicamos que se devolverá sin formato (yyyy-mm-dd hh:ii:ss).
	 * 5 indicamos que se devolverá sin formato (yyyy-mm-dd-hh.ii.ss).
	 * @return Una cadena que contiene la fecha y hora con formato
	 */
	function FormateaFechaHora(FH,formato)
	{
		var sepFecha = ""
		var sepHora = ""
		var sepFechaHora = ""

        switch (formato) {
			case 0: sepFecha = "/"; sepHora = ":"; sepFechaHora = " ";break;
			case 1: sepFecha = "-"; sepHora = ":"; sepFechaHora = " ";break;
			case 2: sepFecha = "-"; sepHora = "."; sepFechaHora = "-";break;
			case 3: sepFecha = "/"; sepHora = ":"; sepFechaHora = " ";break;
			case 4: sepFecha = "-"; sepHora = ":"; sepFechaHora = " ";break;
			case 5: sepFecha = "-"; sepHora = "."; sepFechaHora = "-";break;
		}

		if (FH.length >= 14)
		{
			if (formato < 3)
				return FH.substring(0, 2) + sepFecha +
			        FH.substring(2, 4) + sepFecha +
			        FH.substring(4, 8) + sepFechaHora +
			        FH.substring(8, 10) + sepHora +
			        FH.substring(10, 12) + sepHora +
			        FH.substring(12);
			else return FH.substring(4, 8) + sepFecha +
			        FH.substring(2, 4) + sepFecha +
			        FH.substring(0, 2) + sepFechaHora +
			        FH.substring(8, 10) + sepHora +
			        FH.substring(10, 12) + sepHora +
			        FH.substring(12);
		}
		else
		{
			if (formato < 3)
				return FH.substring(0, 2) + sepFecha +
			        FH.substring(2, 4) + sepFecha +
			        FH.substring(4, 8);
			else return FH.substring(4, 8) + sepFecha +
			        FH.substring(2, 4) + sepFecha +
			        FH.substring(0, 2);
		}
	}

	/**
	 * Metodo para dar formato a una fecha/hora para QuickScript.
	 *
	 * @param Bd Base de datos utilizada. "IN" informix, "AD" adabas, "OR" oracle.
	 * @param fecha Cadena con fecha y hora a formatear. "dd/mm/yyyy hh:ii:ss"
	 * @param tipo 0 para indicar que la fecha que se pasa es dia/mes/año.
	 *			   1 para indicar que la fecha que se pasa es año/mes/dia.
	 *
	 * Informix es (yyyy/mm/dd hh:ii:ss).
	 * Oracle es   (yyyy/mm/dd hh:ii:ss).
	 * Adabas es   (yyyy-mm-dd-hh.ii.ss).
	 * DB2 es   (yyyy-mm-dd hh:ii:ss).
	 * @return Una cadena que contiene la fecha y hora con formato QuickScript o
	 *         cadena vacia si hay error.
	 */
	function GetFH(Bd,fecha,tipo)
	{
		var formato = 0;
		var fechatmp = fecha;

		if(Bd == "IN")
			formato = 3;
		else if(Bd == "AD")
			formato = 5;
		else if(Bd == "OR")
			formato = 3;
		else if(Bd == 'DB')
			formato = 4;

	if(tipo == 1) //  invierte la fecha
	{
		fecha = fecha.substring(8,10) + "/" + fecha.substring(5,7) +
				"/" + fecha.substring(0,4) + " " + fecha.substring(11,13) +
				":" + fecha.substring(14,16) + ":" + fecha.substring(17);
	}
		// primero comprueba la validez de las fecha introducida
		if (fecha.length >= 19) {
		if(isDate(fecha) == false) { return ""; }
	} else if(CompruebaFecha(fecha) == false) {
		return "";
	}

		// hay que crear quitar los caracteres no validos
		if (fecha.length >= 19) {
			fechatmp = fecha.substring(0,2) + fecha.substring(3,5) +
			fecha.substring(6,10) + fecha.substring(11,13) +
			fecha.substring(14,16) + fecha.substring(17);
		} else {
			fechatmp = fecha.substring(0,2) + fecha.substring(3,5) +
			fecha.substring(6,10);
		}

		return FormateaFechaHora(fechatmp,formato);

	}



	/**
	* Metodo para dar formato a una fecha/hora que viene de QuickScript para que
	* este en español.
	* @param fecha Cadena con fecha y hora a formatear.
	*
	* Informix es (yyyy/mm/dd hh:ii:ss).
	* Oracle es   (yyyy/mm/dd hh:ii:ss).
	* Adabas es   (yyyy-mm-dd-hh.ii.ss).
	* @return Una cadena que contiene la fecha y hora con formato (dd/mm/yyyy hh:ii:ss).
	*/
	function GetFHES(fecha) {
		if (fecha.length >= 19) {
			return fecha.substring(8,10) + "/" + fecha.substring(5,7) + "/" + fecha.substring(0,4) + " " + fecha.substring(11,13) + ":" + fecha.substring(14,16) + ":" + fecha.substring(17);
		} else {
			return fecha.substring(8,10) + "/" + fecha.substring(5,7) + "/" + fecha.substring(0,4);
		}
	}

    /** ************************* Inserta_Campo *********************
    * Inserta una cadena dentro de otra cadena
    * @param origen String de cadena origen
    * @param calve String con la clave que se buscara en la cadena para localizar la posición de inserción
    * @param valor String con lo que se desea insertar
    */

    function Inserta_Campo (origen, clave, valor) {
        var pos = origen.indexOf(clave);
        if (pos == -1)  // no encontró la clave
            return origen;
        else
            return origen.substring(0,pos) + valor + origen.substring(pos + clave.length);
    } // fin Inserta_Campo


    function BorraComentariosHTML(cadena) {
        var cad = cadena;
        while(cad.indexOf("<!--") != -1)
            cad = cad.substring(0, cad.indexOf("<!--")) + cad.substring(cad.indexOf("-->")+3);
        return cad;
    }

    /** ************    GetFechaJS     **************
    * Devuelve la fecha que se le pasa como parámetro con un mes menos
    * pq para JavaScript el mes 12 no existe. Empieza a contar desde 0.
    *
    *************************************************/
    
    function GetFechaJS(fechaorigen) {
    	if (fechaorigen.length == 19 || fechaorigen.length == 0) {return fechaorigen;}
    	longi 	= fechaorigen.length;
    	parte01 = fechaorigen.substring(0,2);    	
    	parte02 = fechaorigen.substring(3,5);
    	parte03 = fechaorigen.substring(6,10);    	
    	resultado = new Date(parte03,parte02,parte01);    	
    	return resultado;
    }
    
    /** ************    GetFechaCompletaConCeros   ********************
    *  Devuelve una fecha completa (con sus horas minutos y segundos) 
    *  completado con ceros
    * ** **************************************************************/
    function GetFechaCompletaConCeros(fechacompleta) {
    	corte 	= fechacompleta.indexOf(" ");
    	fecha 	= GetFechaConCeros(fechacompleta.substring(0,corte));
    	hora 	= GetHoraConCeros(fechacompleta.substring(corte+1, fechacompleta.length));
    	fechacompleta = fecha + " " + hora;
    	return fechacompleta;
    }
    
    /** ************    GetFechaConCeros     *********
    * Devuelve la fecha que se le pasa como parámetro con ceros para los 
    * meses de 0 a 9, así no da problemas a la hora de pasarlo a base de 
    * datos.
    *
    *************************************************/
    function GetFechaConCeros(fecha) {
    	if (fecha.length == 10 || fecha.length == 0) {return fecha;}
    	if(fecha.indexOf("/") != -1) {
    		separador = "/";
    	} else {
    		separador = "-";
    	}
    	
    	corteA = fecha.indexOf(separador);
    	fecharecortada = fecha.substring(corteA+1,fecha.length);
    	corteB = fecharecortada.indexOf(separador);
    	corteB = corteA + corteB + 1;
    	parteDia = parseInt(fecha.substring(0,corteA),10);
    	parteMes = parseInt(fecha.substring(corteA+1, corteB),10);
    	parteAnno = fecha.substring(corteB+1,fecha.length);
    	if(parteDia<=9) { parteDia = "0" + parteDia; }
    	if(parteMes<=9) { parteMes = "0" + parteMes; }
    	fecha = parteDia + separador + parteMes + separador + parteAnno;
    	return fecha;
    }

    /** ************    GetHoraConCeros     *********
    * Devuelve la hora que se le pasa como parámetro con ceros 
    * Hay que pasar horas, minutos y segundos
    * 
    *************************************************/
    function GetHoraConCeros(hora) {
    	if (hora.length == 8 || hora.length == 0) {return hora;}
    	
    	separador = ":";    	
    	corteA = hora.indexOf(separador);
    	horarecortada = hora.substring(corteA+1,hora.length);
    	corteB = horarecortada.indexOf(separador);
    	corteB = corteA + corteB + 1;
    	parteHora 		= parseInt(hora.substring(0,corteA),10);
    	parteMinutos 	= parseInt(hora.substring(corteA+1, corteB),10);
    	parteSegundos 	= parseInt(hora.substring(corteB+1,hora.length),10);    	
    	if(parteHora<=9) 	{ parteHora = "0" + parteHora; }
    	if(parteMinutos<=9) { parteMinutos = "0" + parteMinutos; }
    	if(parteSegundos<=9){ parteSegundos = "0" + parteSegundos; }
    	hora = parteHora + separador + parteMinutos + separador + parteSegundos;
    	return hora;
    }   
    
    
     /** ************    EsNumero     *********
    * Comprueba si has introducido números o letras 
    *************************************************/
	function EsNumero(cadena){
		//alert(cadena);
		if (cadena.length != 0){
			for (var i=0;i<=cadena.length-1;i++){
				var caracter = cadena.substring(i,i+1);
				if ((caracter < "0") || (caracter > "9")){
					return false;
				}
			}
			//alert("Es un numero");
			return true;
		}
		//alert("voy vacio");
		return false;
	}
	
	function FinMakeRequest(){
		semaforo=false;
	}	
	
	/* ***************************** AJAX *********************************************
	 codigo que nos permite hace consultas de ajax, es compatible con IE y Firefox 
	******************************************************************************** */
	var http_request = false;

	function makeRequest(url, SelAccion, mimetype) {

		if(semaforo)
			return;

		semaforo=true;	

		http_request = false;
		
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {
				if(mimetype != undefined && mimetype != null)
					http_request.overrideMimeType(mimetype);
				else
					http_request.overrideMimeType('text/xml');
			}
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
				if(http_request == undefined || http_request == null || http_request == "")
				{
					try {
						http_request = new ActiveXObject("Microsoft.XMLHTTP");
					} catch (e) {}
				}
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					return false;
				}
			}
		}

		if (!http_request) {
			return false;
		}
			
		http_request.onreadystatechange = SelAccion;

		http_request.open('GET', url, true);
		http_request.send(null);

	}


	function makeRequestSincrono(url, SelAccion, mimetype) {

		if(semaforo)
			return;

		semaforo=true;	

		http_request = false;
		
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {
				if(mimetype != undefined && mimetype != null)
					http_request.overrideMimeType(mimetype);
				else
					http_request.overrideMimeType('text/xml');
			}
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
				if(http_request == undefined || http_request == null || http_request == "")
				{
					try {
						http_request = new ActiveXObject("Microsoft.XMLHTTP");
					} catch (e) {}
				}
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					return false;
				}
			}
		}

		if (!http_request) {
			return false;
		}
			
		http_request.onreadystatechange = SelAccion;

		http_request.open('GET', url, false);
		http_request.send(null);

	}


	function makeRequestPost(url, MetodoRespuesta, parametrosNombre, parametrosValor) 
	{
	    makeRequestPost2(url, MetodoRespuesta, parametrosNombre, parametrosValor,'text/txt');
	}

	function makeRequestPostXML(url, MetodoRespuesta, parametrosNombre, parametrosValor) 
	{
	    makeRequestPost2(url, MetodoRespuesta, parametrosNombre, parametrosValor,'text/xml');
	}

	function makeRequestPost2(url, MetodoRespuesta, parametrosNombre, parametrosValor, mime) {
		var cadena = "";
	
		if(semaforo)
			return;
			
		semaforo=true;	

		http_request = false;
		
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {

				http_request.overrideMimeType(mime);
			}
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}

		if (!http_request) {
			return false;
		}
		
		
		http_request.onreadystatechange = MetodoRespuesta;

		http_request.open('POST', url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
		

		if(parametrosNombre != undefined && parametrosNombre != null)
		{
			for(var i=0; i < parametrosNombre.length ; i++)
			{
				cadena += "&" + parametrosNombre[i] + "=" + escape(parametrosValor[i]);
			}
		}

		http_request.send(cadena);

	}	

	// quita el div de la traza de página de axon que recibe en la respuesta xml y retorna un objeto xml
	function reparaRespuesta(http_request)
	{
	    return reparaRespuesta2(http_request.responseText);
	}

	function reparaRespuesta2(http_text)
	{
	    var respuestatxt = http_text;
	    var xml_arbol;

	    var pos = respuestatxt.indexOf("<div")
	    if(pos != -1){
		respuestatxt = respuestatxt.substring(0,pos);
	    }else{
		respuestatxt = respuestatxt.substring(0,respuestatxt.length);
	    }

	    if (window.ActiveXObject) // IE
	    {
		xml_arbol = new ActiveXObject("Microsoft.XMLDOM");
		xml_arbol.async="false";
		xml_arbol.loadXML(respuestatxt);
	    }
	    else // otros
	    {
		parser = new DOMParser();
		xml_arbol = parser.parseFromString(respuestatxt,"text/xml");
	    }

	    return xml_arbol;
	}
	/* ***************************** FIN AJAX ********************************************* */

