
	function msgbox(nombre,titulo,texto,alto,ancho,bdef,b1,b2,b3){
		/*
		Si se pretende recibir los valores, retorna la información en los campos:

		nombre_cuadro_dialogo = Nombre del cuadro de diálogo llamado
		boton_cuadro_dialogo = Número del botón (1, 2 ó 3) presionado

		Se verifica siempre el botón. Si solo hay uno, es el único a verificar.

		<input type=hidden id=nombre_cuadro_dialogo name=nombre_cuadro_dialogo value="">
		<input type=hidden id=boton_cuadro_dialogo name=boton_cuadro_dialogo value="">
		*/

		var s = new String()
		
		s = '/adminusr/inc/dialogbox.htm?nombre='+nombre+'&titulo='+titulo+'&texto='+texto+'&b1='+b1
		
		if (bdef)
			s = s + '&bdef='+bdef;
			
		if (b2)
			s = s + '&b2='+b2;

		if (b3)
			s = s + '&b3='+b3;
			
		ver_ses(s,alto,ancho,nombre)
		}

	function objDoc(nombre){
		return window.document.getElementById(nombre)
		}
	
	function URLDecode(str){
	     return unescape(str.replace(/\+/g, " "));
		}

	function trim(cadena){
	cadena_final = new String(cadena);
	// Quita los espacios iniciales y finales
	while (cadena_final.charAt(0) == ' ')
		cadena_final = cadena_final.substr(1,cadena_final.length-1)
	
	while (cadena_final.charAt(cadena_final.length-1) == ' ')
		cadena_final = cadena_final.substr(0,cadena_final.length-1)
	
	return cadena_final;	
	}

	function ver_ses(url,alto,ancho,nombre){

	//Abre una ventana de cualquier cosa
	var wi,he
	wi = screen.width 
	he = screen.height
	if (!nombre)
		nombre = "_blank"

	window.open(url,nombre,"toolbar=no,location=no,directories=no,status=0,menubar=no,scrollbars=no,resizable=no,width="+ancho.toString()+"px,height="+alto.toString()+"px,top=" + trim(Math.round((he-alto-60)/2).toString()) + ",left=" +  trim(Math.round((wi-ancho)/2).toString()))
	}

	function ver_ses2(url,alto,ancho,nombre){

	//Abre una ventana de cualquier cosa, con scrollbars
	var wi,he
	wi = screen.width 
	he = screen.height

	if (!nombre)
		nombre = "_blank"

	window.open(url,nombre,"toolbar=false,location=false,directories=false,status=false,menubar=false,scrollbars=yes,resizable=false,width="+ancho.toString()+",height="+alto.toString()+",top=" + trim(Math.round((he-alto-60)/2).toString()) + ",left=" +  trim(Math.round((wi-ancho)/2).toString()))
	}

	function ver_ses3(url,alto,ancho,nombre){

	//Abre una ventana de cualquier cosa
	var wi,he
	wi = screen.width 
	he = screen.height
	if (!nombre)
		nombre = "_blank"

	window.open(url,nombre,"toolbar=no,location=no,directories=no,status=0,menubar=no,scrollbars=no,resizable=no,width="+ancho.toString()+"px,height="+alto.toString()+"px,top=0,left=" +  trim(Math.round((wi-ancho)/2).toString()))
	}

	function ver_ses4(url,alto,ancho,nombre){

	//Abre una ventana de cualquier cosa, con scrollbars
	var wi,he
	wi = screen.width 
	he = screen.height

	if (!nombre)
		nombre = "_blank"

	window.open(url,nombre,"toolbar=false,location=false,directories=false,status=false,menubar=false,scrollbars=yes,resizable=false,width="+ancho.toString()+",height="+alto.toString()+",top=0,left=" +  trim(Math.round((wi-ancho)/2).toString()))
	}
function toHex(dec) {
	var i
	hexChars = new String("0123456789ABCDEF")
	var result = new String()
	
	while(dec>15){
		i = dec % 16
		result = hexChars.charAt(i) + result
		
		dec = Math.floor((dec - i) / 16)
	
		}
	
	result = hexChars.charAt(dec) + result
	return result
	}

function toHex2(dec,tam) {
	//Convierte a Hexadecimal, pero rellena con Ceros, hasta el tamaño -tam-
	
	var result = new String(toHex(dec))
	while (result.length<tam)
		result = "0"+result
	
	return result
	}

function redondeo(num,cifras){
	// Redondea un número decimal con un número máximo de cifras significativas.  Si tiene menos, las recorta
	// Retorna una cadena con el número redondeado
	var neg=false,men1=false

    if (num == 0 || isNaN(num))
        return "0"
       
	if (num < 0){
		num=num*(-1)
		neg=true
		}
	if (num < 1){
		num++
		men1 = true
		}

	var i = parseInt(Math.round(num * Math.pow(10,cifras))) //Genera el número redondeado, entero.
	var numtxt = i.toString() //Genera la cadena
	var aux,j
	
	//Si el número era menor a 1, se reemplaza el 1 por un 0
	if (men1)
		numtxt = "0" + numtxt.substr(1);
	
	if (neg)
		numtxt = "-" + numtxt;

	if (cifras > 0){
		// Ubica el punto decimal.
		aux = numtxt.substr(numtxt.length-cifras)
		
		// Recorta los "0's" decimales a la derecha
		while (aux.substr(aux.length-1)== '0' && aux.length > 0)
			aux = aux.substr(0,aux.length-1)
		
		if (aux.length >0)
			numtxt = numtxt.substr(0,numtxt.length-cifras) + "." + aux
		   else	
			numtxt = numtxt.substr(0,numtxt.length-cifras)
		}
	
	if (numtxt.charAt(0) ==".")
		numtxt = "0" + numtxt
	
	if (numtxt == "")
		numtxt = "0"

	return numtxt
	}

function formato_numero(num,numdecmin, numdecmax){
    //Convierte un número en una cadena de texto, con las cifras numéricas agrupadas cada 3 cifras
    //Además, retorna la cadena con un mínimo y maximo de cifras decimales.
    
    var numtxt,pdec,i,result
    
    numtxt = new String(redondeo(num,numdecmax))
    
    if (numtxt.indexOf(".") < 0)
        pdec = ""
       else{
        pdec = numtxt.substr(numtxt.indexOf(".")+1,999)
        
        numtxt = numtxt.substr(0,numtxt.indexOf("."))
        } // fin else
    
    while (pdec.length < numdecmin)
        pdec = pdec + "0";

    if (numtxt.length<=3)
        result = numtxt
       else{ 
        result = numtxt.substr(numtxt.length-3,3)
        numtxt = numtxt.substr(0,numtxt.length-3)
        
        while (numtxt.length > 3){
            result = numtxt.substr(numtxt.length-3,3) + "," + result
            
            numtxt = numtxt.substr(0,numtxt.length-3)
            }

        result = numtxt + "," + result
        }

    if (pdec != "")
        result = result + "." + pdec

    return result
    }

function verificar_txtnum(obj,valor_pred,texto_error,dec_min,dec_max,admite_vacio){
	var i,p,j
	//obj es un input tipo text.
	//Reemplaza todas las comas con puntos, asume el último punto como
	//separador decimal (si dec_min > 0) y los demás puntos los suprime.  Luego, ejecuta el procedimiento
	//parseInt de Javascript y confirma si el valor resultante es numérico. De no serlo, retorna el texto_error
	//y coloca en el campo el valor predeterminado.
	
	
	//El resultado de ésto, interpretado como número redondeado a la máxima cantidad de decimales. Si no tiene
	//suficientes decimales, rellena con el mínimo número de decimales

	if (obj){
		var s = new String(obj.value)
		
		if (s == "" && admite_vacio){
			obj.value = valor_pred
			return
			}	
		
		s = s.replace(",",".")
		p = s.lastIndexOf(".")

		if (p >= 0){
			i = s.indexOf(".")
		
			//Suprime otros puntos. Solo el último se asume como punto decimal
			while (i!=p){
				s = s.substr(0,i) + s.substr(i+1)
					p = s.lastIndexOf(".")
					i = s.indexOf(".")
				} // fin while
			} // fin p >= 0
		// Ahora, interpreta el resultado como número.
		if (isNaN(s)){
			//El resultado no puede ser interpretado como numérico.  Genera un error
			obj.value = valor_pred
			alert(texto_error)
			obj.focus()
			}
		   else{
		    // Número válido. Se redondea
			s = redondeo(parseFloat(s),dec_max)
			
		    i = s.indexOf(".")
			p = 0

			if (dec_min > 0){
				if (i<0){
					p = dec_min
					s = s + "."
					} // fin i < 0
				   else{
					j = s.length - i - 1; // cantidad actual de decimales
					
					p = dec_min-j // cantidad de decimales a insertar
					} // fin else if i<0
				} // if dec_min > 0
			
			for(i=0;i<p;i++)
				s = s + "0"			

		    obj.value = s // Valor final
			} // fin isNaN(s)
		} // fin if obj
	} // fin verificar_txtnum