	// dice si cadena es un email (alfanum@alfanum.alfanum[.alfanum]) o no,  
	// donde alfanum son caracteres alfanumericos u otros  
	function email(cadena,otros){                                     
		var i, j;                          
		var es_email = 0 < cadena.length;  // cadena es email o no  
		i = salta_alfanumerico(cadena, 0, otros); // INICIO  
		if(es_email = 0 < i)               // lee "alfanum*"  
		if(es_email = (i < cadena.length)) 
		while(es_email && (i < cadena.length))  
		if(es_email = cadena.charAt(i) == '\.'){  
	        i++;  
	        j = salta_alfanumerico(cadena, i, otros);  
	        if(es_email = i < j) // lee "alfanum[.alfanum]*"  
	        i = j;  
	    }  
		if(es_email = cadena.charAt(i) == '@'){ // lee "alfanum[.alfanum]@*"  
			i++;  
			j = salta_alfanumerico(cadena, i, otros);  
			if(es_email = i < j)       //lee "alfanum[.alfanum]@alfanum*"  
			if(es_email = j < cadena.length)  
			if(es_email = cadena.charAt(j) == '\.'){// lee "alfanum[.alfanum]@alfanum.*"  
			    j++;  
			    i = salta_alfanumerico(cadena, j, otros);  
			    if(es_email = j < i) // lee "alfanum[.alfanum]@alfanum.alfanum*"  
			    while(es_email && (i < cadena.length))  
			    if(es_email = cadena.charAt(i) == '\.'){  
			        i++;  
			        j = salta_alfanumerico(cadena, i, otros);  
			        if(es_email = i < j) // lee "alfanum[.alfanum]@alfanum.alfanum[.alfanum]*"  
			        i = j;  
			    }  
			}  
		}  
		return(es_email);  
	} 
	// salta caracteres alfanumericos y otros a partir de  cadena[i] y da   
	//siguiente posicion                                                           
	function salta_alfanumerico(cadena, i, otros){                                    
		var j;     // indice en cadena  
		var car;   // caracter de cadena  
		var alfanum;   // cadena[j] es alfanumerico u otros  
		for(j = i, alfanum = true; (j < cadena.length) && alfanum; j++){  
			car = cadena.charAt(j);  
			alfanum = alfanumerico(car) || (otros.indexOf(car) != -1);  
		}  
		if(!alfanum)  // lee "alfanumX"  
		j--;  
		return(j);  
	}  
	// dice si car es alfanumerico                                                 
	function alfanumerico(car){  
		return(alfabetico(car) || numerico(car));  
	}  
	// dice si car es alfabetico                                                   
	function alfabetico(car){   // caracteres alfabeticos  
		var alfa = "ABCDEFGHIJKLMNOPQRSTUWXYZabcdefghijklmnopqrstuvxyz";  
		return(alfa.indexOf(car) != - 1);  
	}  
	// dice si car es numerico                                                    
	function numerico(car){                                      
		var num = "0123456789";    // caracteres numericos  
		return(num.indexOf(car) != - 1);     
	}  
	function esDigito(sChr){
		var sCod = sChr.charCodeAt(0);
		return ((sCod > 47) && (sCod < 58));
	}
	function valSep(oTxt){
		var bOk = false;
		bOk = bOk || ((oTxt.value.charAt(2) == "-") && (oTxt.value.charAt(5) == "-"));
		bOk = bOk || ((oTxt.value.charAt(2) == "/") && (oTxt.value.charAt(5) == "/"));
		return bOk;
	}
	function finMes(oTxt){
		var nMes = parseInt(oTxt.value.substr(3, 2), 10);
		var nAno = parseInt(oTxt.value.substr(6), 10);
		var nRes = 0;
		switch (nMes){
		     case 1: nRes = 31; break;
		     case 2: nRes = 28; break;
		     case 3: nRes = 31; break;
		     case 4: nRes = 30; break;
		     case 5: nRes = 31; break;
		     case 6: nRes = 30; break;
		     case 7: nRes = 31; break;
		     case 8: nRes = 31; break;
		     case 9: nRes = 30; break;
		     case 10: nRes = 31; break;
		     case 11: nRes = 30; break;
		     case 12: nRes = 31; break;
		}
		return nRes + (((nMes == 2) && (nAno % 4) == 0)? 1: 0);
	}
	function valDia(oTxt){
		var bOk = false;
		var nDia = parseInt(oTxt.value.substr(0, 2), 10);
		bOk = bOk || ((nDia >= 1) && (nDia <= finMes(oTxt)));
		return bOk;
	}
	function valMes(oTxt){
		var bOk = false;
		var nMes = parseInt(oTxt.value.substr(3, 2), 10);
		bOk = bOk || ((nMes >= 1) && (nMes <= 12));
		return bOk;
	}
	function valAno(oTxt){
		var bOk = true;
		var nAno = oTxt.value.substr(6);
		bOk = bOk && ((nAno.length == 2) || (nAno.length == 4));
		if (bOk){
			for (var i = 0; i < nAno.length; i++){
				bOk = bOk && esDigito(nAno.charAt(i));
			}
		}
		return bOk;
	}
	function valFecha(oTxt){
		var bOk = true;
		if (oTxt.value != ""){
			bOk = bOk && (valAno(oTxt));
			bOk = bOk && (valMes(oTxt));
			bOk = bOk && (valDia(oTxt));
			bOk = bOk && (valSep(oTxt));
			return bOk;
		}
	}
	/* function fechaMayorOIgualQue(fec0, fec1){
		var bRes = false;
		var sDia0 = fec0.value.substr(0, 2);
		var sMes0 = fec0.value.substr(3, 2);
		var sAno0 = fec0.value.substr(6, 4);
		var sDia1 = fec1.value.substr(0, 2);
		var sMes1 = fec1.value.substr(3, 2);
		var sAno1 = fec1.value.substr(6, 4);
		if (sAno0 > sAno1) bRes = true;
		else {
			if (sAno0 == sAno1){
				if (sMes0 > sMes1) bRes = true;
				else {
					if (sMes0 == sMes1)
					if (sDia0 >= sDia1) bRes = true;
				}
			}
		}
		return bRes;
	} */
	function valFechas(){
		var bOk = false;
		if (valFecha(document.f1.fec0)){
			if (valFecha(document.f1.fec1)){
				if (fechaMayorOIgualQue(document.f1.fec1, document.f1.fec0)){
					bOk = true;
					alert("Ok");
				} else {
					alert("Rango inválido");
					document.f1.fec1.focus();
				}
			} else {
				alert("Fecha inválida");
				document.f1.fec1.focus();
			}
		} else {
			alert("Fecha inválida");
			document.f1.fec0.focus();
		}
	}
		

	
	function fechaFormato(fecha,formato){
		var x= formato.length;
		var pos=0;
		var position =formato.indexOf("Y");
		
		
		if(position !=0 && position !=3 && position !=6)return "false";
		lengthfecha=yearLength(position,fecha);
		lengthformato=formatLength(position,formato);
		if(lengthformato!=2 && lengthformato != 4)return "false";
		if(lengthfecha!=lengthformato)return "false";
		//if(lengthfecha != 4)return "false";
		while(pos<x){
			if(formato.charAt(pos)=="/"){
				if(fecha.charAt(pos)!="/")return "false";
			}
			pos+=1;
		}
		return "true";
	}
	
	function yearLength(position,fecha){
		var pos=position;
		var x= fecha.length;
		var anio="";
		while(pos<x){
			anio = anio + fecha.charAt(pos);
			if(pos==x-1)return anio.length;
			if(isNaN(fecha.charAt(pos+1))){
				return anio.length;
			}
			pos+=1;
		}
		return 0;
	}
	
	function formatLength(position,fecha){
		var pos=position;
		var x= fecha.length;
		res=x-pos;
		return (res);
	}
	
	function fechaVal(fecha,formato){
		if(fechaFormato(fecha,formato) == "true"){
			var pos=0;
			var x= formato.length;
			var dia="";
			var mes="";
			var anio="";
			while(pos<x){
				if(formato.charAt(pos)=="D"){
					dia=dia+fecha.charAt(pos);
				}
				if(formato.charAt(pos)=="M"){
					mes=mes+fecha.charAt(pos);
				}
				if(formato.charAt(pos)=="Y"){
					anio=anio+fecha.charAt(pos);
				}
				pos+=1;
			}
			if(anio.length != 4 && anio.length != 2) return "false"; 
			if(dia!="") if(isDia(dia,mes,anio)=="false")return "false";	
			if(isMes(mes)=="false")return "false";
			if(isAnio(anio,anio.length)=="false")return "false";
			return "true";
		}
		else{
			return "false";
		}
	}
	
	function isDia(dia,mes,anio){
		if((mes ==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) && (dia>=1 && dia<=31))return "true";
		if((mes ==4 || mes==6 || mes==9 || mes==11) && (dia>=1 && dia<=30))return "true";
		if((mes ==2 && dia>=1 && dia<=29) && (anio == 2000 ||  anio == 2004 || anio == 2008 ||  anio == 2012  || anio == 2016  || anio == 2020 || anio == 2024 || anio == 2028 || anio == 2032 || anio == 2036 || anio == 2040 || anio == 2048 || anio == 2052))return "true";
		if((mes ==2 && dia>=1 && dia<=29) && (anio == 00 ||  anio == 04  || anio == 08 ||  anio == 12  || anio == 16  || anio == 20 || anio == 24 || anio == 28 || anio == 32 || anio == 36 || anio == 40 || anio == 44 || anio == 48 || anio == 52))return "true";
		if(mes ==2 && dia>=1 && dia<=28)return "true";
		
		return "false";
	}
	
	function isMes(mes){
		if(mes>=1 && mes<=12)return "true";
		
		return "false";
	}
	
	function isAnio(anio,length){
		if(length==4)if(anio>=1889 && anio<=2200)return "true";
		if(length==2)if(anio>=01 && anio<=99)return "true";
		
		return "false";
	}
	
	
	function isNumber(num){
		if(isNaN(num))return "false";
		
		return "true";
	}
	
	function valHora(time){ 			
	 	var hora= parseInt(time.charAt(0)+time.charAt(1));
	 	var minutos =parseInt(time.charAt(3)+time.charAt(4));
	 	if(isNaN(time.charAt(3)))return 'false';
	 	if(isNaN(time.charAt(4)))return 'false';
	 	if(isNaN(time.charAt(0)))return 'false';
	 	if(isNaN(time.charAt(1)))return 'false';
	 	if(isNaN(hora))return 'false';
	 	if(isNaN(minutos))return 'false';
		if(hora>24)return 'false';
		if(minutos>59)return 'false';
		return 'true';		
	}

			

