// 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

/*******************************/
//Reportar Eventos
function eventos(evento){	
	document.getElementById('alert').style.display='block';
	document.getElementById('alert').innerHTML=evento;
}

//retorna el valor del radio seleccionado de un grupo
function getValue(radioGroupName) {
        radios = document.getElementsByName(radioGroupName);
        for (i = 0; i < radios.length; i++) {
            if (radios[i].checked) return radios[i].value;
        }
    }

//Retorna elementos seleccionados en un grupo (checkbox)
function selectedGrupo (grupo_name){
	//gruponame = eval('document.'+form.name+'.'+grupo_name)
	gruponame = document.getElementsByName(grupo_name);
	grupoids = '';
	for (i=0; i<gruponame.length; i++ ){
		if (gruponame[i].checked == true){
			grupoids += gruponame[i].value+',';
			}
		}
	if (grupoids.length>0){
		return grupoids.substr(0,grupoids.length-1);
	}else{
		return false;
		}
	}


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 p_IsNumeric(FieldControl, 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&&FieldControl.value.length==0) {
		FieldControl.focus();
		eventos("El campo " + fName + " es requerido");
		return false;
	} else {
		var ValidChars = "0123456789.,";
		for (i=0;i<FieldControl.value.length;i++) { 
		  if (ValidChars.indexOf(FieldControl.value.charAt(i)) == -1) {
			 FieldControl.focus();
			 eventos("El campo " + fName + " sólo puede contener caracteres numéricos");			
			 return false;
		  }
		}
		return true;
	}
}


function isRequired_rte(FieldControl,fName){
//Verifica que un campo de tipo Rich Text Box tenga un valor distinto de ""
//FieldControl: El nombre del campo HTML
//fName: El nombre del campo a validar. Este parámetro se utiliza para mostrar el mensaje de error
//@autor: Andrea y Tonny
	if ((document.frames[FieldControl].getValue()=='') ||  (document.frames[FieldControl].getValue()=='<P>&nbsp;</P>')){
		alert("El campo "+fName+" es requerido");
		return false;
	}else{
		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 p_isMailAddress(FieldControl, 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&&FieldControl.value.length==0) {
		FieldControl.focus();
		eventos("El campo " + fName + " es requerido");
	  
		return false;
	} else {
		if(FieldControl.value.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) == -1) {
			FieldControl.focus();
			eventos("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
{
	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 "text":
		
		case "password":
		
		case "textarea":
		
		case "file":
						if (FieldControl.value.length==0) {
							alert("El campo " + fName + " es requerido");	
							FieldControl.focus();
							return false;
						}
						break;
		case "hidden":
						if (FieldControl.value.length==0) {
							alert("El campo " + fName + " es requerido");	
							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;
}

function p_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
{
	switch (FieldControl.type) {
		
		case "radio": 
						for(i=0;i<FieldControl.length;i++) {
							if(FieldControl[i].checked) return true;
						}
						eventos("El campo " + fName + " es requerido");
						FieldControl.focus();
						return false;
						break;
		case "text":
		
		case "password":
		
		case "textarea":
		
		case "file":
						if (FieldControl.value.length==0) {
							eventos("El campo " + fName + " es requerido");	
							FieldControl.focus();
							return false;
						}
						break;
		case "hidden":
						if (FieldControl.value.length==0) {
							eventos("El campo " + fName + " es requerido");	
							return false;
						}
						break;
		case "select-one":
		case "select-multiple":
						if (FieldControl[FieldControl.selectedIndex].value=="") {
							FieldControl.focus();
							eventos("El campo " + fName + " es requerido");	
							return false;
						}
						break;
	}
	return true;
}

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 cinciden");
		return false;
	}
	return true;
}

function p_checkPassword(pass, repass, fName) {
	if(pass.length==0) {
		eventos("El campo " + fName + " es requerido");
		return false;
	} else if (repass.length==0) {
		eventos("Debe introducir la confirmación del password"); 
		return false;
	} else if (pass!=repass) {
		eventos("La contraseña y la confirmación no cinciden");
		return false;
	}
	return true;
}


// 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 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(6);		
		  	break;    

	case "DD" :    
		  		destino.value = destino.value.substring(0,6) + valor.value + destino.value.substring(8);		
			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


// ajax functions
function createRequest(){
	var http_request=false;
	if(window.XMLHttpRequest){ // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	}else if(window.ActiveXObject){ // IE
		try{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){}
		}
	}
	return http_request;
}

function makeRequest(url,function_handler,type,xx) {
	var http_request = createRequest();
	
	if (!http_request) {
		alert('Falla :( No es posible crear una instancia XMLHTTP');
		return false;
	}
	http_request.onreadystatechange = function (){
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				var doc = null;
				
				if(type == 'xml')doc = http_request.responseXML;
				else doc = http_request.responseText;
				
				function_handler(doc,xx);
			}else{
				alert('Hubo problemas con la petici??Error: '+http_request.status);
			}
		}
	}
	http_request.open('GET', url, true);
	http_request.send(null);
}

function makeRequestPost(url,function_handler,type,xx,valores) {
	var http_request = createRequest();
	
	if (!http_request) {
		alert('Falla :( No es posible crear una instancia XMLHTTP');
		return false;
	}
	http_request.onreadystatechange = function (){
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				var doc = null;
				
				if(type == 'xml')doc = http_request.responseXML;
				else doc = http_request.responseText;
				
				function_handler(doc,xx);
			}else{
				alert('Hubo problemas con la petici??Error: '+http_request.status);
			}
		}
	}
	http_request.open('POST', url, true);
	http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	http_request.send(valores);
}

function makeRequestImagen(url,function_handler,type,xx) {
	var http_request = createRequest();
	
	if (!http_request) {
		//alert('Falla :( No es posible crear una instancia XMLHTTP');
		return false;
	}
	http_request.onreadystatechange = function (){
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				var doc = null;		
				if(type == 'xml') doc = http_request.responseXML;
				else doc = http_request.responseText;
				function_handler(doc,xx);
			}else{
				//alert('Hubo problemas con la petici??Error: '+http_request.status);
			}
		}
	}
	http_request.open('GET', url, true);
	http_request.send(null);
}

function loadcaptcha(){
	document.getElementById('captchacontenedor').style.display="block";
	document.getElementById('intCodigo').value='';
	document.getElementById('captchacontenedor').innerHTML='<img src="images/ajax.gif" name="carg">';
	var url = "./captcha/captcha.php";
	makeRequestImagen(url,cargarresultcaptcha,'','');
}

function cargarresultcaptcha (doc, para){
	document.getElementById('securitycodevalue').value = doc; 
	contenedorc = document.getElementById('captchacontenedor'); 
	contenedorc.innerHTML='<img src="./captcha/'+doc+'.jpg" />';	
}

function doNothing (doc, para){
	//alert("Borrando imagen");
}

function deleteImageCaptcha(image){
	if (image!=''){
		var url = "./captcha/deletecaptcha.php?image="+image;
		makeRequestImagen(url,doNothing,'','');
	}
}


