// Archivo:  	wk_funciones.js
// Version :	1.0
// Fecha:	Junio 22 2004
// Autor:	all@wikot.com
// Funcion: 	JavaScript Document
// 		Este archivo reúne un Pool de funciones Javascript útiles a la hora de hacer validaciones de formularios

function IsNumeric(sText, fName, fReq)
// Verifica que una cadena solamente contenga caracteres numéricos
//PARAM1 sText: El texto a validar
//PARAM2 fName: El nombre del campo a validar. Este parámetro se utiliza para mostrar el mensaje de error
//PARAM3 fReq: Se usa para indicar si un campo es requerido o no
//@autor: Nelio

{
	if(fReq&&sText.length==0) {
		alert("El campo " + fName + " es requerido");
		return false;
	} else {
		var ValidChars = "0123456789.,";
		for (i=0;i<sText.length;i++) { 
		  if (ValidChars.indexOf(sText.charAt(i)) == -1) {
			 alert("El campo " + fName + " sólo puede contener caracteres numéricos");
			 return false;
		  }
		}
		return true;
	}
}

function IsAlpha(sText, fName, fReq)
// Verifica que una cadena solamente contenga caracteres alfabeticos
//PARAM1 sText: El texto a validar
//PARAM2 fName: El nombre del campo a validar. Este parámetro se utiliza para mostrar el mensaje de error
//PARAM3 fReq: Se usa para indicar si un campo es requerido o no
//@autor: Nelio
{
	if(fReq&&sText.length==0) {
		alert("El campo " + fName + " es requerido");
		return false;
	} else {
		var ValidChars = " abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZáéíóúÁÉÍÓÚÜü";
		for (i=0;i<sText.length;i++) { 
		  if (ValidChars.indexOf(sText.charAt(i)) == -1) {
			 alert("El campo " + fName + " sólo puede contener caracteres alfabéticos");
			 return false;
		  }
		}
		return true;
	}
}

function IsAlphaNumeric(sText, fName, fReq)
// Verifica que una cadena solamente contenga caracteres alfabeticos
//PARAM1 sText: El texto a validar
//PARAM2 fName: El nombre del campo a validar. Este parámetro se utiliza para mostrar el mensaje de error
//PARAM3 fReq: Se usa para indicar si un campo es requerido o no
//@autor: Nelio
{
	if(fReq&&sText.length==0) {
		alert("El campo " + fName + " es requerido");
		return false;
	} else {
		var ValidChars = " .,0123456789abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZáéíóúÁÉÍÓÚÜü";
		for (i=0;i<sText.length;i++) { 
		  if (ValidChars.indexOf(sText.charAt(i)) == -1) {
			 alert("El campo " + fName + " sólo puede contener caracteres alfanuméricos");
			 return false;
		  }
		}
		return true;
	}
}

function isMailAddress(sText, fName, fReq) 
// Verifica que una cadena sea una dirección de correo electrónico válida
//PARAM1 sText: El texto a validar
//PARAM2 fName: El nombre del campo a validar. Este parámetro se utiliza para mostrar el mensaje de error
//PARAM3 fReq: Se usa para indicar si un campo es requerido o no
//@autor: Nelio
{
	if(fReq&&sText.length==0) {
		alert("El campo " + fName + " es requerido");
	  
		return false;
	} else {
		if(sText.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) == -1) {
			alert("El campo " + fName + " no contiene una dirección de correo electrónico válida");
			return false;
		}
	}
	return true;
}

function isRequired(FieldControl, fName) 
// Verifica que un campo (cualquiera que sea tipo Radio, Text, Select, etc) tenga algún valor distinto de ""
//PARAM1 FieldControl: El nombre del campo HTML
//PARAM2 fName: El nombre del campo a validar. Este parámetro se utiliza para mostrar el mensaje de error
//@autor: Nelio
{
	if(FieldControl!=undefined){
		switch (FieldControl.type) {
			case "radio": 
							for(i=0;i<FieldControl.length;i++) {
								if(FieldControl[i].checked) return true;
							}
							alert("El campo " + fName + " es requerido");
							FieldControl.focus();
							return false;
							break;
						
			case "checkbox":
							mn=false;
							f=FieldControl.form;
							for (i = 0; i < f.elements.length; i++) {   
								if (f.elements[i].type=='checkbox')
									if (f.elements[i].name==FieldControl.name)		
										if (f.elements[i].checked) mn=true;
							}
							if (mn==false){	
								alert(fName);	
								return(mn);
							}else{
								return(true);
							}
							break;
							/*alert("len="+FieldControl);
							for(i=0;i<FieldControl.length;i++) {
								if(FieldControl[i].checked) alert("true");//return true;
							}
							alert(fName);						
							return false;
							break;*/	
			case "hidden":
							if (FieldControl.value.length==0) {
								alert("El campo " + fName + " es requerido");	
								return false;
							}
							break;
			
						
			case "text":
			
			case "password":
			
			case "textarea":
			
			case "file":
							if (FieldControl.value.length==0) {
								alert("El campo " + fName + " es requerido");	
								FieldControl.focus();
								return false;
							}
							break;
			case "select-one":
			case "select-multiple":
							if (FieldControl[FieldControl.selectedIndex].value=="") {
								FieldControl.focus();
								alert("El campo " + fName + " es requerido");	
								return false;
							}
							break;
		}
		return true;
	}else{
		alert("El campo " + fName + " es requerido");
		return false;
	}		
}

function checkPassword(pass, repass, fName) {
	if(pass.length==0) {
		alert("El campo " + fName + " es requerido");
		return false;
	} else if (repass.length==0) {
		alert("Debe introducir la confirmación del password"); 
		return false;
	} else if (pass!=repass) {
		alert("La contraseña y la confirmación no coinciden");
		return false;
	}
	return true;
}

/*function validar_usuario(f) {
//ejemplo de cómo usar las funciones para validar un usuario
	return (IsAlpha(f.str_name.value, "Nombre", true)&&IsAlpha(f.str_last_name.value, "Apellido", true));
}*/

function validar_elearning(f){
	if (f.nombre.value==""){
		alert("Debe especificar un nombre de Curso");
		return false;
	}
}

// Fecha:	Junio de 2004
// Funcion Desplegar. Menús
function desplegar(id,titulo,iconOff, iconOn) {
// Parametros: 	id:	 	id del element en el documento html
//				titulo:	titulo del item
//				iconOff: icono a utilizar cuando no esta desplegada la informacion pueden ser rutas de imagenes
//				iconOn:	 icono a utilizar cuando este desplegada la informacion
					
   // Busqueda del elemento
   obj=document.getElementById(id);
   // Chequea el despliegue
   visible=(obj.style.display!="none");
   text = "";
   if (visible) { 	
   	obj.style.display="none"; 	text = iconOff +" "+ titulo;      
   } else {  
   	obj.style.display="block";    text = iconOn +" "+ titulo;
   }
  // Reescribe el context del <a></a>
  document.getElementById("x" + id).innerHTML = text;
  
// Ejemplo de uso
// <tr>
//	<td><a id="x3" href="#" onClick="desplegar('3','Título','<img src=\'images\\pic_ico_flech_entrar.gif\' border=\'0\'>','<img src=\'images\\pic_ico_flech_up.gif\' border=\'0\'>')"><img src="images\pic_ico_flech_entrar.gif" border="0"> T&iacute;tulo</a></td>
//	</tr>
// <tr id="3" style="display:none"> -- Importante esta sentencia --
//		<td>
//				<table>
//					<tr><td>Link 1</td></tr>
//					<tr><td>Link 2</td></tr>
//					<tr><td>Link 3</td></tr>
//				</table>
//		</td>
//	</tr>
}// function desplegar

// Fecha:	Junio de 2004
// Funcion Element. Registro

function Element(codPadre,codHijo,nombreHijo){
	this.codPadre = codPadre;
	this.codHijo = codHijo;
	this.nombreHijo = nombreHijo;
}//function Element

// Fecha:	Junio de 2004
// Funcion onLoadCombo. Selects

function onLoadCombo(cmbOrigen, cmbDestino, aInfo){
// Precondicion: 	cmbOrigen guarda alguna relacion con cmbDestino esta se tienen en el 
//					arreglo aInfo con la informacion de carga para el cmbDestino
//Parametros:		cmbOrigen - Select con la informacion de Origen al cambiar cambia la informacion del
//					cmbDestino - Select
//					aInfo:	arreglo de registrod de la forma Element definida anteriormente					

var i = 0;
var j = 0;

	cmbDestino.length = aInfo.length;
	cmbDestino.options[j] = new Option ('Seleccione.', '-1');
	cmbDestino.options[j].selected=true;
	
	//cmbDestino.options[j].selected=true;
	idToFind = cmbOrigen.options[cmbOrigen.selectedIndex].value;
	while(i<aInfo.length){
		if(idToFind==aInfo[i].codPadre){
			j++; cmbDestino.options[j] = new Option (aInfo[i].nombreHijo, aInfo[i].codHijo);
		}
	i++;
	}	
	cmbDestino.length = j+1;
	

}//function onLoadCombo

// Fecha:	Junio de 2004
// Funcion redimensionarCombo. Selects
function redimensionarCombo(cmb){
//Redimensiona los selects que se cargan de modo dinamico
//Parametros: cmb:	Select a redimensionar
	cmb.length = 1;
	cmb.options[0] = new Option ('Seleccione.', -1);
	
}//function redimensionarCombo


function confirmar_eliminar(texto){
// Envia un alert al usuario indicandole que se va a eliminar una información
// PARAM1 text indica en el mensaje que es lo que se va a eliminar ejemplo: Usuario(s)
// Version :	1.0
// Fecha: 19/08/2004		
	return(confirm(texto));
}

function confirmar_eliminar_alert(texto,check,f){
// Envia un alert al usuario indicandole que se va a eliminar una información, 
// en caso que no halla seleccionado ningun item tambien emite un alert
// indicandole que debe seleccionar al menos un item.
// PARAM1 text indica en el mensaje que es lo que se va a eliminar ejemplo: Usuario(s)
// Version :	1.0
// Fecha: 19/08/2004
	var checkboxes = f.elements[check];
	var chequeados=0;
	if (checkboxes.checked!=null){ 
		if (checkboxes.checked)	return(confirm(texto));
		else{
			alert('Debe seleccionar al menos un ítem para realizar esta acción.');
			return false;
		}
	}else{
		for(i=0;i<checkboxes.length;i++) if (checkboxes[i].checked==true) chequeados=1;
		if (chequeados==0){
			alert('Debe seleccionar al menos un ítem para realizar esta acción.');
			return false;
		}else{ 	
			return(confirm(texto));
		}
	}
}

function validar_password(fPassword1,fPassword2,Nombre1,Nombre2,Caracteres){
// Verifica que una cadena solamente contenga una cantidad de caracteres especifica
// PARAM1 fPassword1: El texto a validar (STRING)
// PARAM2 fPassword2: El texto a validar (STRING)
// PARAM3 Nombre1: El nombre del campo a validar. Este parámetro se utiliza para mostrar el mensaje de error (STRING)
// PARAM4 Nombre2: El nombre del campo a validar. Este parámetro se utiliza para mostrar el mensaje de error (STRING)
// PARAM5 Caracteres: Cantidad de Caracteres (STRING)
// Version :	1.0
// Fecha: 19/08/2004
// @autor: Tonny Goncalves
	if (fPassword1.length < Caracteres){
		alert("El campo "+Nombre1+" debe ser mayor o igual a "+Caracteres);
		return false;
	}
	if (fPassword1!=fPassword2){
		alert("El campo "+Nombre1+" y "+Nombre2+" deben ser iguales");
		return false;
	}
	return true;
}

function validar_fechas(date_one,date_two,mensaje){
// Verifica Entre dos Timestamps, uno inicial sea menor a uno final
// PARAM1 $date_one (TIMESTAMP)
// PARAM2 $date_two (TIMESTAMP)
// PARAM3 $mensaje  (STRING)
// Version :	1.0
// Fecha: 19/08/2004
// @autor: Tonny Goncalves       
    anoi=parseInt(date_one.substr(0,4),10);
	anof=parseInt(date_two.substr(0,4),10);
	
	mesi=parseInt(date_one.substr(4,2),10);
	mesf=parseInt(date_two.substr(4,2),10);
	
	diai=parseInt(date_one.substr(6,2),10);
	diaf=parseInt(date_two.substr(6,2),10);

	if (mesi<10){ mesi="0"+mesi; }
	if (mesf<10){ mesf="0"+mesf; }
	if (diai<10){ diai="0"+diai; }
	if (diaf<10){ diaf="0"+diaf; }
	vari=String(anoi)+String(mesi)+String(diai);
	varf=String(anof)+String(mesf)+String(diaf);
   	if (parseInt(vari)>parseInt(varf)){	 
		alert(mensaje);       
		return false;
	}else{
		return true;//true
	}	
}

function FechaValida(date,mensaje) {
// Verifica un Timestamps que sea una fecha valida ejem: 31-02-2004
// PARAM1 $date (TIMESTAMP)
// PARAM3 $mensaje  (STRING)
// Version :	1.0
// Fecha: 26/08/2004
// @autor: Tonny Goncalves - Amora
	
  var fecha=parseInt(date,10)
	
	if ((isNaN(fecha))||(date.length<6)){  
	
		alert(mensaje);
	 	return false;
	} else { 

  
	aaaa = parseInt(date.substr(0,4),10);
	mm   = parseInt(date.substr(4,2),10);
	dd   = parseInt(date.substr(6,2),10);	
	var feb = 29;
	if((parseInt(aaaa)%4)!=0) feb=28; 
		
	var meses = new Array(31,feb,31,30,31,30,31,31,30,31,30,31); 

	if(parseInt(dd) > meses[parseInt(mm)-1]){
	  
		alert(mensaje);
	 	return false;
	}else{
		return true;			
	}
	}
}//function FechaValida


function changeDate(parte,valor, destino){
// Construye el valor de la fecha en formato yyyymmddhhmmss
// Param: parte = parte de la fecha a tratar
// Param: valor = valor asignado a esa parte de la fecha
// Param destino = campo ocultop donde se almacena la fecha con el formato
// Autor : Amora 

switch(parte.toUpperCase()){
	
	case "YYYY" :    
				destino.value = valor.value + destino.value.substring(4);	
		  	break;    
		  
	case "MM" :    
		  		destino.value = destino.value.substring(0,4) + valor.value + destino.value.substring(5);		
				//alert(destino.value);
		  	break;    

	case "DD" :    
		  		destino.value = destino.value.substring(0,6) + valor.value + destino.value.substring(8);
				//alert(destino.value);		
			break;    
	
	case "HH" :    
				destino.value = destino.value.substring(0,8) + valor.value + destino.value.substring(10);
		  	break;    
		  
	case "MIN" :  
				destino.value = destino.value.substring(0,10) + valor.value + destino.value.substring(12);  
		  break;    

	case "SS" :    
				destino.value = destino.value.substring(0,12) + valor.value ;
		  break;    

	
}//fswitch

}//function changeDate
