/*
* Librer&iacute;a de filtros y validaciones. 
*/

this.onload=pegaHandlers;
//this.form[0].onsubmit=validaEnvio;

function validaExtensiones(f){
	var reg=/1/;
	try{
		var soportados=f.getAttribute('extensiones');
		var exts=soportados.split(',');
		var partes=f.value.split('.');
		var extAr=partes[partes.length-1];
		var ban="";
		for(var a=0; a < exts.length; a++){
			if(exts[a] != extAr){
				ban += true;
			}
		}
		if(!reg.test(ban)){
			alert('El archivo no es del ninguno de los siguientes tipos: ' + soportados);
			return false;
		}
	}catch(e){
		//alert(e);
	}
}

function validaFecha(){
	var fecha1=this.value;
	if(!isDate(fecha1,'dd-MM-yyyy') && fecha1 != ''){
		alert('No es una fecha válida');
		this.focus;
		this.select;
//		this.setAttribute('class','error');				
		return false;
	}
/*	if(document.forms[0].fecha1.value!='' && document.forms[0].fecha2.value!=''){
		switch (compareDates(document.forms[0].fecha1.value, 'dd/MM/yyyy', document.forms[0].fecha2.value, 'dd/MM/yyyy')){
		case 0: 
		return true;
		break;
		case -1: alert("El formato de la fecha no es válido");
		return false;
		break;
		case 1: alert("La primer fecha no debe ser superior a la segunda");
		return false;
		break;
		}
	}else{
			if((document.forms[0].fecha1.value!='' && document.forms[0].fecha2.value=='') || (document.forms[0].fecha1.value=='' && document.forms[0].fecha2.value!='')){
				alert("Debe ingresar tanto la fecha inicial como la final o bien no seleccionar ninguna");
				return false;
				}
	}
*/}



function requeridos(){
	elems=document.getElementsByTagName('input');
	elemsS=document.getElementsByTagName('select');
	elemsT=document.getElementsByTagName('textarea');

	cont=document.getElementById('codigos');

	for(i=0;i<elems.length;i++){
		//checa para inputs de texto
		if(elems[i].type=='text' && elems[i].getAttribute('requerido') && elems[i].style.display!='none'){
			if(elems[i].value==''){
				elems[i].focus();
				elems[i].select;
				//elems[i].setAttribute('class','error');
				//alert('Este campo es requerido');
				alert(elems[i].getAttribute('nombre_campo') + ' es requerido');
				return false;
			}
		}
		
		//cecha para inputs de password
		if(elems[i].type=='password' && elems[i].getAttribute('requerido') && elems[i].style.display!='none'){
			if(elems[i].value==''){
				elems[i].focus();
				elems[i].select;
				//elems[i].setAttribute('class','error');
				alert(elems[i].getAttribute('nombre_campo') + ' es requerido');
				//alert('Este campo es requerido');
				return false;
			}
		}
		//checa para inputs de archivo
		if(elems[i].type=='file' && elems[i].getAttribute('requerido')){
			validaExtensiones(elems[i]);
			if(elems[i].value==''){
				elems[i].focus();
//				elems[i].setAttribute('class','error');
				alert(elems[i].getAttribute('nombre_campo') + ' es requerido');
				//alert('Este campo es requerido');
				return false;
			}
			
			
		}
		
		//Checa para radios y checks
		var visto=new Object();

		if((elems[i].type=='radio' && elems[i].getAttribute('requerido')) || (elems[i].type=='checkbox' && elems[i].getAttribute('requerido') && visto[elems[i].id] != 1)){
			visto[elems[i].id]=1;
			rer=/true/;
			var radios=document.getElementsByName(elems[i].name);
			var r="";
			for(j=0;j<radios.length;j++){
				r += radios[j].checked;
			}
			if(!rer.test(r)){
				elems[i].focus();
				elems[i].select;
				alert('Se requiere que conteste almenos una opcion en: '+ elems[i].getAttribute('nombre_campo'));
				//alert('Se requiere que conteste almenos una opción.');
				return false;
			}
		}
		
	}
	//Para elementos select
	for(i=0;i<elemsS.length;i++){
		if(elemsS[i].getAttribute('requerido')){
			if(elemsS[i].value==''){
				elemsS[i].focus();
				elemsS[i].select;
				alert(elemsS[i].getAttribute('nombre_campo') + ' es requerido');
				//alert('Este campo es requerido');
				return false;
			}
		}
	}
	//Para textarea
	for(i=0;i<elemsT.length;i++){
		if(elemsT[i].getAttribute('requerido')){
			if(elemsT[i].value==''){
				elemsT[i].focus();
//				elemsT[i].setAttribute('class','error');				
				alert(elemsT[i].getAttribute('nombre_campo') + ' es requerido');
				//alert('Este campo es requerido');
				return false;
			}
		}
	}
	
	return true;
}

//Función que desv&iacute;a todos los eventos de keypress dentro de un campo a una función.
function pegaHandlers(){
	//colección de campos text y textarea
	var	elems=document.getElementsByTagName('input');
	var elemsT=document.getElementsByTagName('textarea');
	for(i=0;i<elems.length;i++){
		if((elems[i].type == 'text' || elems[i].type == 'textarea' || elems[i].type == 'file' || elems[i].type == 'password') && elems[i].getAttribute('filtro')){
			elems[i].onkeypress=manEvento;
			if(elems[i].getAttribute('filtro')=='fecha'){
				//carga librerias de validacion fecha
				elems[i].onblur=validaFecha;								
			}
		}
	}
	
	for(i=0;i<elemsT.length;i++){
		elemsT[i].onkeypress=manEvento;
	}

}

//Función filtro para los eventos de keypress
function manEvento(ev){
//	this.setAttribute('class','campo');
	var tipoFiltro = this.getAttribute('filtro'); //Obtenemos el tipo de filtro para el campo

	ev=ev||event||null;  //Obtenemos el evento (cada q se presiona una tecla)
   	if (ev) {
		//alert(ev.modifiers);
		var cc=ev.charCode||ev.keyCode||ev.which; // ¿Cuál tecla se presiono?
		cc=Number(cc);
		
		switch(tipoFiltro){ 
			case 'alfabetico': //a-z A-Z 
				if(esLetra(cc) || esEspacio(cc) || esPuntuacion(cc)){
					return true;
				}
			break;
			case 'numerico': // 0-9
				if(esNumero(cc)){
					return true;
				}
			break;
			case 'alfanumerico': //a-z A-Z : , . - ' # @ 
				if(esNumero(cc) || esLetra(cc) || esPuntuacion(cc) || esCalificativo(cc) || esGuion(cc) || esEspacio(cc)){	return true;
				}
			break;
			case 'fecha': //0-9 - / 
				if(esNumero(cc) && filtraFecha(this,cc)){
					return true;
				}
			break;
			case 'correo': //0-9 - / 
				if(esNumero(cc) || esLetra(cc) || esPuntuacion(cc)|| esGuion(cc) || esEspacio(cc)|| esArroba(cc)){
					return true;
				}
			break;
			case 'libre': //0-9 - / 
				if(esNumero(cc) || esLetra(cc) || esPuntuacion(cc)|| esGuion(cc) || esEspacio(cc)|| esArroba(cc)){
					return true;
				}
			break;
		}
		//Caracteres necesarios para mover el cursos izq/der y captar el enter
		if(cc==9 || cc==8 || cc==46 || cc==32 || cc==12 || cc==13){return true;}
		//if(cc==35 || cc==36){return true;}		
		if(cc==37 || cc==38 || cc==39 || cc==40){return true;}
		return false;
	}
}

function filtraFecha(f,cc){
	var x=String.fromCharCode(cc);
	var tam=f.value.length;
	var rd1=/[0-3]/;				
	var rd2=/[0-9]/;
	var rm1=/[0-1]/;
	var rm2=/[0-9]/;
	var ra1=/[1-2]/;
	var ra2=/[0-9]/;
	var ra3=/[0-9]/;
	var ra4=/[0-9]/;
				
	if(tam == 0){
		if(rd1.test(x)){
			return true;
		}else{return false;}
	}else if(tam==1){
		if(rd2.test(x)){
			return true;
		}else{return false;}
	}else if(tam == 2){
		if(rm1.test(x)){
			f.value=f.value + '-';
			return true;
		}else{return false;}
	}else if(tam == 4){
		if(rm2.test(x)){
			return true;
		}else{return false;}
	}else if(tam == 5){
		if(ra1.test(x)){
			f.value=f.value + '-';		
			return true;
		}else{return false;}
	}else if(tam==7){
		if(ra2.test(x)){
			return true;
		}else{return false;}
	}else if(tam == 8){
		if(ra3.test(x)){
			return true;
		}else{return false;}
	}else if(tam == 9){
		if(ra4.test(x)){
			return true;
		}else{return false;}
	}
}

function esLetra(cc){
	if(cc >= 65 && cc <=90){ // mayusculas
		return(1);
	}
	if(cc >= 97 && cc <=122){ //minusculas
		return(1);
	}
	if(cc == 225 || cc == 233 || cc == 237 || cc == 243 || cc == 250){ // min acento
		return(1);
	}
	if(cc == 193 || cc == 201 || cc == 205 || cc == 211 || cc == 218){ // may acento
		return(1);
	}
	if(cc == 252 || cc == 220){ // u dieresis
		return(1);
	}
	if(cc == 209 || cc == 241){ // Ññ
		return(1);
	}
	return(0);
}

function esNumero(cc){
	if(cc >=48 && cc <= 57){
		return(1);
	}else{
		return(0);
	}
}

function esPuntuacion(cc){
	if(cc == 44 || cc == 46 || cc == 58 || cc == 59){ // ,;:.
		return(1);
	}else{
		return(0);
	}
}

function esCalificativo(cc){ // !¡ ¿?
	if(cc == 63 || cc == 191 || cc == 33 || cc == 161){
		return(1);
	}else{
		return(0);
	}
}

function esGuion(cc){ // -_
	if(cc == 45 || cc == 95){
		return(1);
	}else{
		return(0);
	}
}

function esEspacio(cc){ // -_
	if(cc == 32){
		return(1);
	}else{
		return(0);
	}
}

function esSuprimir(cc){ // -_
	if(cc == 32 || cc == 46){
		return(1);
	}else{
		return(0);
	}
}

function esArroba(cc){
	if(cc == 64){
		return(1);
	}else{
		return(0);
	}
}

function manDown(ev){
	ev=ev||event||null;  //Obtenemos el evento (cada q se presiona una tecla)
   	if (ev) {
		var cc=ev.charCode||ev.keyCode||ev.which; // ¿Cuál tecla se presiono?
		cc=Number(cc);
		imprime(cc);
	}
}

function manUp(ev){
	var cad=this.value;
	cad.replace(/./gi, ""); 
	this.value=cad;
}

function imprime(cc){
	t=document.getElementById('codigos');
	t.innerHTML += cc + ' -> ' + String.fromCharCode(cc) + '<br>';
	ch.value="";
	s="";
}