function demo(){
   alert("HOLA. La llamada el demo es correcta");
}

/*Oculta un ajaxObj pasandole el nombre*/
function OcultaId(id) {
	var obj = document.getElementById(id);
	obj.style.visibility = 'hidden';
}
/*Oculta el ajaxObj pero lo pone en 0x0 para no ocupar espacio en pantalla*/
function BorraId(id) {
	var obj = document.getElementById(id);
	obj.style.visibility = 'hidden';
	obj.style.height = '0px';
	obj.style.width = '0px';
}

/*Oculta un ajaxObj pasandole el ajaxObj this*/
function OcultaObj(obj) {
	obj.style.visibility = 'hidden';
}

function ApareceId(id) {
	var obj = document.getElementById(id);
	obj.style.visibility = 'visible';
}
function ApareceObj(obj) {
	obj.style.visibility = 'visible';
}

/*Oculta un DIV por el nombre*/
function OcultaDiv(id) {
	var obj = document.getElementById(id);
	obj.style.display = 'none';
}
function ApareceDiv(id) {
	var obj = document.getElementById(id);
	obj.style.display = 'block';
}

/*Marca o Desmarca todos los botones tipo checkbox de la FORM que se pase*/
function MarcarChechBox(idForm){
	var obj = document.getElementById(idForm);
   for (i=0;i<obj.elements.length;i++)
      if(obj.elements[i].type == "checkbox")
         obj.elements[i].checked=1
} 
function DesmarcarChechBox(idForm){
	var obj = document.getElementById(idForm);
   for (i=0;i<obj.elements.length;i++)
      if(obj.elements[i].type == "checkbox")
         obj.elements[i].checked=0
}

function HabilitaObj(obj){
	obj.disabled=true;
}



//------Estas 2 funciones apoya explusivamente a las funciones de PHP abreMenuVentana($titulo)---------
function OcultaMenuVentana(numero, titulo) {
	document.getElementById('mas' + numero).innerHTML = '<a href="javascript:PonMenuVentana('+numero+',\''+titulo+'\')" class="Ventana"><img src="Imagenes/iconos/imas.gif" border="0" align="absmiddle">'+titulo+'</a>';
	document.getElementById('mvent' + numero).style.display = 'none';
}
function PonMenuVentana(numero, titulo) {
	document.getElementById('mas' + numero).innerHTML = '<a href="javascript:OcultaMenuVentana('+numero+',\''+titulo+'\')" class="Ventana"><img src="Imagenes/iconos/imenos.gif" border="0" align="absmiddle">'+titulo+'</a>';
	document.getElementById('mvent' + numero).style.display = 'block';
}



//Abre una ventana nueva sin barras y fija
function AbrirVentana(el_url, titulo, ancho, alto) {
	var especificaciones="top=0, left=0, toolbar=no,location=no, status=no,menubar=no,scrollbars=no, resizable=no, width="+ancho+",height="+alto;
	window.open(el_url,titulo,especificaciones);
}
//Abre una ventana nueva sin barras pero con auto scroll
function AbreVentana(el_url, titulo) {
	var especificaciones="top=0, left=0, toolbar=no,location=no, status=no,menubar=no,scrollbars=yes, resizable=yes, width=800,height=600";
	window.open(el_url,titulo,especificaciones);
}
/*Abre la liga en una ventana sencilla para imprimir*/
function VentanaImprimir(el_url) {
	var especificaciones="top=0, left=0, toolbar=no,location=no, status=no,menubar=no,scrollbars=yes, resizable=0, width=750,height=700";
	var titulo="Imprimir";
	window.open(el_url,titulo,especificaciones);
}
//<a href="javascript:AbreVentanaSimple('archivo.pgp','height=484,width=800,top=10,left=5,resizable=yes,scrollbars=yes');">
//Abre Ventana TOP, sin titulo, se lo comgo en el html del archivo. 
function AbreVentanaSimple(theURL,features) { //v2.0
	if(features == '')
		features = 'height=600,width=800,top=0,left=0,resizable=yes,scrollbars=yes';
  window.open(theURL,'',features);
}

//VALIDAR QUE EL CAMPO SOLO ACEPTE NUMEROS Y EL .
//Se manda llamar asi: <input type="text" onkeyup="validarEntero(this)" />
function validarEntero(obj){
	if (!/^([0-9\.])*$/.test(obj.value)) obj.value='';
}

//Quita los espacios de un texto 
function quitarEspacios(string) {
	var temp = "";
	string = '' + string;
	splitstring = string.split(" ");
	for(i = 0; i < splitstring.length; i++)
		temp += splitstring[i];
	return temp;
}

//Convierte los espacios de un texto por el caracter inicado 
function convertirEspacios(str, caracter) {
	var out = "", flag = 0;
	for (i = 0; i < str.length; i++) {
		if (str.charAt(i) != " ") {
			out += str.charAt(i);
			flag = 0;
		} else {
			if(flag == 0) {
				out += caracter;
				flag = 1;
			}
		}
	}
	return out;
}

//VALIDAR QUE EL CAMPO SEA TIPO CORREO CON SU SINTEXIS
function validaCorreo(emailStr) {
	if (emailStr > '') {
		//Verificar si el email tiene el formato user@dominio.
		var emailPat=/^(.+)@(.+)$/;
		// Verificar la existencia de caracteres. ( ) < > @ , ; : \ " . [ ] 
		var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
		// Verifica los caracteres que son vlidos en una direccin de email 
		var validChars="\[^\\s" + specialChars + "\]";
		var quotedUser="(\"[^\"]*\")";
		// Verifica si la direccin de email est representada con una direccin IP Vlida 
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		// Verificar caracteres invlidos 
		var atom=validChars + '+';
		var word="(" + atom + "|" + quotedUser + ")";
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
		// domain, as opposed to ipDomainPat, shown above. 
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
		var matchArray=emailStr.match(emailPat);
		if (matchArray==null) {
			alert("E-mail: Cuenta incorrecta.");
			return false;
		}
	
		var user=matchArray[1];
		var domain=matchArray[2];
		// Si el user "user" es valido 
		if (user.match(userPat)==null) {
			alert("E-mail: El nombre de usuario no es valido.");
			return false;
		}
	
		// Si la direccin IP es vlida 
		var IPArray=domain.match(ipDomainPat);
		if (IPArray!=null) {
			for (var i=1;i<=4;i++) {
				if (IPArray[i]>255) {
					alert("E-mail: IP de destino invalida");
					return false;
				}
			}
			return true;
		}
	
		var domainArray=domain.match(domainPat);
		if (domainArray==null) {
			alert("E-mail: El dominio parece no ser valido.");
			return false;
		}
	
		var atomPat=new RegExp(atom,"g");
		var domArr=domain.match(atomPat);
		var len=domArr.length;
		if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
			alert("E-mail: La dicreccion debe tener 3 letras si es .com o 2 si en de algun pais.");
			return false;
		}
		
		if (len<2) {
			var errStr="E-mail: La direccion es erronea";
			alert(errStr);
			return false;
		}
	}
	// La direccin de email ingresada es Vlida
	return true;
}
// Fin validamail


// Esta funcin permitir validar la fecha En el objeto text hacemos lo Siguiente
/* USO: <input type=\'text\' name=cajaFecha onChange=\'fechas(this); this.value=borrar\'> */
function validaFecha(obj)
{ 
   caja = obj.value;
   if (caja)
   {  
      borrar = caja;
      if ((caja.substr(2,1) == "/") && (caja.substr(5,1) == "/"))
	  {      
         for (i=0; i<10; i++)
	     {	
            if (((caja.substr(i,1)<"0") || (caja.substr(i,1)>"9")) && (i != 2) && (i != 5))
			{
               borrar = '';
               break;  
			}  
         }
	     if (borrar)
	     { 
	        a = caja.substr(6,4);
		    m = caja.substr(3,2);
		    d = caja.substr(0,2);
		    if((a < 1900) || (a > 2050) || (m < 1) || (m > 12) || (d < 1) || (d > 31))
		       borrar = '';
		    else
		    {
		       if((a%4 != 0) && (m == 2) && (d > 28))	   
		          borrar = ''; // Ao no viciesto y es febrero y el dia es mayor a 28
			   else	
			   {
		          if ((((m == 4) || (m == 6) || (m == 9) || (m==11)) && (d>30)) || ((m==2) && (d>29)))
			         borrar = '';	      				  	 
			   }  // else
		    } // fin else
         } // if (error)
      } // if ((caja.substr(2,1) == \"/\") && (caja.substr(5,1) == \"/\"))			    			
	  else
	     borrar = '';
	  if (borrar == ''){
	     alert('Fecha erronea. Escriba de nuevo.');
		 obj.value = '';
		 //obj.focus();
	  }
   } // if (caja)   
   return borrar
} 


//----------------calcular la edad de una persona--------------------solo funciona con IE------------
//recibe la fecha como un string en formato español
//devuelve un entero con la edad. Devuelve false en caso de que la fecha sea incorrecta o mayor que el dia actual
function calcular_edad(fecha){

    //calculo la fecha de hoy
    hoy=new Date();
//    alert(hoy);

    //calculo la fecha que recibo
    //La descompongo en un array
    var array_fecha = fecha.split("/");
    //si el array no tiene tres partes, la fecha es incorrecta
    if (array_fecha.length!=3)
       return false;

    //compruebo que los ano, mes, dia son correctos
    var ano;
    ano = parseInt(array_fecha[2]);
    if (isNaN(ano))
       return false;

    var mes;
    mes = parseInt(array_fecha[1]);
    if (isNaN(mes))
       return false;

    var dia;
    dia = parseInt(array_fecha[0]);
    if (isNaN(dia))
       return false;

    //si el año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo a 4
    if (ano<=99) {
	ano += 1900;
    }    

    //resto los años de las dos fechas
    if( (navigator.appName == "Netscape") ) {
	edad=(hoy.getYear()+1900) - ano - 1; //-1 porque no se si ha cumplido años ya este año
    }else{
	edad=hoy.getYear()- ano - 1; //-1 porque no se si ha cumplido años ya este año
    }

    //si resto los meses y me da menor que 0 entonces no ha cumplido años. Si da mayor si ha cumplido
    if (hoy.getMonth() + 1 - mes < 0) //+ 1 porque los meses empiezan en 0
       return edad;
    if (hoy.getMonth() + 1 - mes > 0)
       return edad+1;

    //entonces es que eran iguales. miro los dias
    //si resto los dias y me da menor que 0 entonces no ha cumplido años. Si da mayor o igual si ha cumplido
    if (hoy.getUTCDate() - dia >= 0)
       return edad + 1;

    return edad;
} 



/*Calcula el promedio de calificaciones del grupo tomando como base los elementos de captura de una forma*/
function VerPromedioGrupo_Form(idForm){
	var obj = document.getElementById(idForm);
	var suma = 0;
	var nElems = 0;
	var nInactivos = 0;
	for (i=0;i<obj.elements.length;i++){
		var Tipo = obj.elements[i].type;	
		if( (Tipo=="text") ) { 		//Tipos Value  
			var valor = parseFloat(obj.elements[i].value);
			if(valor >= 0) {
				suma += valor;
				nElems++;
			}else{
				nInactivos++;
			}

		}

	}
	var prom= 0;
	if(nElems > 0){
		alert('El promedio del grupo(omitiendo a los NP e inactivos) es: ' + (suma/nElems) + '\n\nY el promedio considerando a los NP pero no a los inactivos es: ' + (suma/(nElems+nInactivos)) );

	}else{
		alert('El promedio es: 0');
	}
	return true;
} 



//----ESTA FUNCION SE INCLUYE EN LOS FORMS PARA QUE CON EL ENTER SE TABULE AL SIGUIENTE ELEMENTO-----------
//<form name="HolaMundo" action="" onkeypress="TabulaElEnter(this, event, true);">
function TabulaElEnter(forma, evento, soloesteform) {
   	//Si la tecla es el Enter o el Tab
	tecla=(document.all) ? evento.keyCode : evento.which;
	if( (tecla!=13) && (tecla!=9) ) return true;  //contunua con la tecla

	//localizo quien tiene el focus:
	if(!evento) { // Para IE
        evento = window.event;
        activoE = evento.srcElement; /* Cuando un elemento se activa (focus) lo indicamos */
    } else { // Para otros navegadores
        activoE = evento.target;
    }
    	
	//Lo busco para cambiar al siguiente elemento: Recorro todos los elementos de todas las forms
	var sies = false; var siform = true;
    for (var i = 0; i < document.forms.length; i++) {	//Hago el recorrido por todos los forms
		if(soloesteform)	//Si solo voy a tomar en cuenta el form actual o todos
			siform = (document.forms[i].name == forma.name) ? true : false; //Si es el form en cuestion
		if(siform)		//Si es el form en cuestion o todos por default
			for(var j = 0; j < document.forms[i].elements.length; j++) {	//Recorro todos los elementos
				var obj = document.forms[i].elements[j];
				if(sies)	//Si viene activo el elemento encontrado
					if( (obj.disabled==false) && (obj.type!="hidden") ){	//Estos tipos no cuentan
						PonFocoAlObjeto( obj );							
						return false;
					}
				if( obj.name == activoE.name){		//Si es el activo actual
					if( (obj.type!="textarea") )	//Los tipos que no entran al cambio
						sies = true;
				}		       
			}//for
    }//for

	if(sies){ 	//Si el activo fue el ultimo lo paso al primero
		formaA = (soloesteform) ? forma : document.forms[0]; //pongo la forma donde estaraactivo el elem
		for(var a = 0; a < formaA.elements.length; a++)	//Busco el primer elem adecuado
			if( (formaA.elements[a].disabled==false) && (formaA.elements[a].type!="hidden") ) {
				PonFocoAlObjeto( formaA.elements[a] );	//pone el foco
				return false;
			}		
	}
	return true;
	
	//NOTA: Hay un pendiente, NO cambia en los tipo "radio" con arreglos con mismos nombres
}

//Esta funcion le pone el focus al objeto pasado por parametro. Tambien la ultizo en la funcion TabulaElEnter()
function PonFocoAlObjeto( obj ) {
	obj.focus();
	if(obj.type=="text") //En los text selecciono el contenido
		obj.select();
   return true;
}


if (document.captureEvents)				//netscape es especial: requiere activar la captura del evento
	document.captureEvents(Event.KEYDOWN)

//Verifica si la tecla presionada fue la que le pases
//Ej: onkeypress="if(Teclazo(event,13)) alert("X");"
function Teclazo(e,CodTecla) {
  tecla=(document.all) ? e.keyCode : e.which;
  if(tecla==CodTecla) 
  	return true;
  else
  	return false;
}


// ----Crea un cuadro informativo en la posicion del raton.-----
function CuadroInfo(htmlCodigo, e){
	if(htmlCodigo != '') {
		//Recupero el obj "body" del html para ponerlo como padre para crear sobre el.
		var base = content.document.getElementsByTagName("body"); 
		var padre = base[0]; //Asigo el primer body que encuentre.
		//Creo el obj de mi ventana	
		var ventana = document.createElement('div');
		ventana.className = 'ci_CuadroInfo';
		ventana.id = "ci_CuadroInfo";
		//Lo pongo dende esta el raton
		var ci_moz = document.getElementById && !document.all;
		posLeft = ci_moz ? e.pageX : event.clientX + document.body.scrollLeft;
		posTop = ci_moz ? e.pageY : event.clientY + document.body.scrollTop;
		ventana.style.top = (posTop-5) + 'px';
		ventana.style.left = (posLeft-5) + 'px';
		ventana.innerHTML = '<div onmouseout="CerrarCuadroInfo()">' + htmlCodigo + '</div>'; //Agrego el codigo
		//Lo agrego al padre
		padre.appendChild(ventana);
	}
	return false;
}
function CerrarCuadroInfo(){
	var borrar = document.getElementById('ci_CuadroInfo');
	var padre = borrar.parentNode;  // Obtenemos el padre del elemento
	padre.removeChild(borrar);  // Eliminamos el hijo del elemento padre
}


//Escribe codigo en la principal
function ponHTML(t){document.writeln(t);}

/*PASA UN FORMULARIO Y REGRESA EN UNA CADENA TODOS SUS COTENIDOS SEPARADOS POR UN | PARA USARLOS EN AJAX*/
function regresaDatosForm(idForm){
	var obj = document.getElementById(idForm);
	var cadena = "";
	for (i=0;i<obj.elements.length;i++){
		var Tipo = obj.elements[i].type;
			
		//Tipos Value  
		if( (Tipo=="text") || (Tipo=="textarea") || (Tipo=="hidden") || (Tipo=="select-one") || (Tipo=="password") ) {
			cadena = cadena + '|' + obj.elements[i].value;
		//Tipos Radio. Solo envia el activo
		}else if( Tipo=="radio" ){
			if(obj.elements[i].checked)
				cadena = cadena + '|' + obj.elements[i].value;
		//Tipos check. Envia el valor del activo y nulo del no
		}else if( (Tipo=="checkbox") ){
			if(obj.elements[i].checked)
				cadena = cadena + '|' + obj.elements[i].value;
			else
				cadena = cadena + '|';
		}
		//if( (Tipo=="file") || (Tipo=="submit") || (Tipo=="reset") )
   }
//	alert(cadena);
	return cadena;
} 


//----Agregado: 2012-----
//Pone los NP o los quita. Usado en captura de calificaciones.
function PonNoPresento(idObj){
    var calif = document.getElementById('calif'+idObj);
    var np = document.getElementById('np'+idObj);
    if(calif.value == 'NP'){
        calif.value=0;
        np.innerHTML=' NP ';
    }else{
        calif.value='NP';
        np.innerHTML=' SP ';
    }
    return true;
}
