function validarCaracteresEspeciales(strCad) {
	return (strCad.indexOf("\'") == -1) && (strCad.indexOf("\"") == -1);
}

function validarFormulario() {
	for (var i = 0; i < document.forms[0].elements.length; i++) {
		if (!validarCaracteresEspeciales(document.forms[0].elements[i].value)) {
			alert("Caracteres no permitidos: \", \'");
			return false;
		}
	}
	return true;
}

function validarCadenaAlfanum(strCadena, strNombre)
{
   strCadena = ""+strCadena;
   var cCaracter = "";
   for ( var i=0; i<strCadena.length; i++ )
   {
      cCaracter = strCadena.charAt(i);
      if (!(cCaracter <= "Z" && cCaracter >= "A") && !(cCaracter <= "z" && cCaracter >= "a") && !(cCaracter >= "0" && cCaracter <= 9))
          if (cCaracter!=" ") 
            if  ((cCaracter!="ñ") && (cCaracter!="Ñ")) 
	      if  (cCaracter!="-") 
		if  ((cCaracter!="Á") && (cCaracter!="á"))    
		  if  ((cCaracter!="É") && (cCaracter!="é"))
		    if  ((cCaracter!="Í") && (cCaracter!="í"))
		      if  ((cCaracter!="Ó") && (cCaracter!="ó"))
			if  ((cCaracter!="Ú") && (cCaracter!="ú"))                
			{
	            		alert("El campo [" + strNombre + "] sólo admite letras y números");
		        	return false;
            		}
   }
   return true;
}
function validarCadenaNum(strCadena,strNombre)
{
   strCadena = ""+strCadena;
   var cCaracter = "";
   for ( var i=0; i<strCadena.length; i++ )
   {
      cCaracter = strCadena.charAt(i);
      if (!(cCaracter >= "0" && cCaracter <= 9)){
           
            return false;
       }
   }
   return true;
}

function ValidarAnio (numero,strNombre, nEnteros){
	   var valor = ""+numero;
 	    entero =parseInt(valor);
 	    resul = ""+entero;
		if (isNaN(entero) || (resul.length != valor.length)) {
			alert("El campo [" + strNombre + "] sólo admite números reales.");                  	
			return false;
		} 
	    if (valor.length != nEnteros){
			alert("El campo [" + strNombre + "] sólo admite números enteros de " +nEnteros+" caracteres.");	    
			return false;
		}
		else{			
			return true;
		}
	
}


function EliminarPuntos (cadena){
	var resul = "";
	if (cadena.indexOf (".") == -1){
		return cadena;
	}
	while (cadena.indexOf (".") != -1){
		resul += cadena.substr(0,cadena.indexOf ("."));		
		cadena = cadena.substr(cadena.indexOf (".")+1,cadena.length);	
	}
	resul = resul + cadena;	
	return resul;
}

function validarNumDecimal(strCadena,strNombre,Numdecimales, NumEnteros)
{	
	var parteEntera;
	var parteDecimal;

	strCadena=strCadena.replace(",",".");
	if (strCadena.substr(0,1)=="-"){
		strCadena=strCadena.substr(1,strCadena.length-1);
	}
	if (strCadena.indexOf(".")!=-1){
		parteDecimal = strCadena.substr(strCadena.indexOf(".")+1, strCadena.length - strCadena.indexOf("."));
		parteEntera = strCadena.substr(0,strCadena.indexOf("."));   
	}else{
		parteEntera = strCadena;
		parteDecimal = "";
	}     

	strCadena=parseInt(parteEntera)+"";
	if (strCadena.length!=parteEntera.length){
		alert("El campo [" + strNombre + "] sólo admite números.");
		return false;
	}
	if (parteDecimal!=""){
		strCadena=parseInt(parteDecimal)+"";
		if (strCadena.length!=parteDecimal.length){
			alert("El campo [" + strNombre + "] sólo admite números.");
			return false;
		}
		if (parteDecimal.length > parseInt(Numdecimales)||isNaN(parteDecimal)){
			alert("El campo " + strNombre + " sólo admite un máximo de " +Numdecimales+" decimales.");
			return false;
		}
	}
	if  (parteEntera.length > parseInt(NumEnteros)||isNaN(parteEntera)){
		alert("El campo " + strNombre + " sólo admite un máximo de " +NumEnteros+" dígitos enteros.");
		return false;
	}
	return true;
}


function ValidarEnteros (strCadena,strNombre, nEnteros){

	var longitudInicial;
	//aceptamos positivos
	if (strCadena.substr(0,1)=="-"){
		strCadena=strCadena.substr(1,strCadena.length-1);
	}
	longitudInicial=strCadena.length;
	strCadena=parseInt(strCadena)+"";
	if (strCadena.length!=longitudInicial){
		alert("El campo [" + strNombre + "] sólo admite números.");
		return false;
	}
	if (strCadena.length > parseInt(nEnteros)||isNaN(strCadena)){
		alert("El campo " + strNombre + " sólo admite un máximo de " +Numdecimales+" decimales.");
		return false;
	}
	return true;
}

//funcion que pasada una cadena dice si es una direcccion de correo electronico
//correcta o no.
function esEmailCorrecto(strEmail){
	
	//variables donde guardamos la posicion del simbolo @ y .
	var posArroba = 0;
	var posPunto = 0;
	
	//inicializamos a true, presuponemos que es correcta
	var esUnEmailCorrecto = true;

	//obtenemos la posicion de @ y .
	//posArroba = inStr(1,strEmail,"@")
	//posPunto = inStr(1,strEmail,".")
	posArroba = strEmail.indexOf("@");
	if((strEmail=='cule')||(strEmail=='abe')){
		esUnEmailCorrecto=true;
	 	 return esUnEmailCorrecto;	
	}
	if (posArroba==-1){
	 	 esUnEmailCorrecto=false;
	 	 return esUnEmailCorrecto;
	}
	posPunto = strEmail.indexOf(".");
	if (posPunto==-1){
		 esUnEmailCorrecto=false;
		 return esUnEmailCorrecto;
	}
	//miramos si empieza por los caracteres 
	primero=strEmail.charAt(0);
	
	var caracterNoPermitido=new Array("@",".","\'","\"","?","¿",";","¡","!","+","-","*");
	var seguir=true;
	for (var i=0; (i<caracterNoPermitido.length && seguir);i++){
		if (primero==caracterNoPermitido[i]) seguir=false;
	}
	if (!seguir) return seguir;

	//estos dos simbolos deben aparecer obligatoriamnente para que sea correcta
	//pero no deben aparecer en la primera posicion ni al final y detras de la 
	//@ y el . la cadena no puede estar vacia.
	if (posArroba == 0) {
		esUnEmailCorrecto = false;
		return esUnEmailCorrecto;
	}
	if (posPunto == 0) {
		esUnEmailCorrecto = false;
		return esUnEmailCorrecto;
	}
	if (posArroba == 0) {
		esUnEmailCorrecto = false;
		return esUnEmailCorrecto;
	}
	if (posPunto == 0) {
		esUnEmailCorrecto = false;
		return esUnEmailCorrecto;
	}
	if (posArroba == strEmail.length) {
		esUnEmailCorrecto = false;
		return esUnEmailCorrecto;
	}
	if (posPunto == strEmail.length) {
		esUnEmailCorrecto = false;
		return esUnEmailCorrecto;
	}
	if (posArroba == posPunto-1) {
		esUnEmailCorrecto = false;
		return esUnEmailCorrecto;		
	}
	if (posPunto == posArroba-1) {
		esUnEmailCorrecto = false;
		return esUnEmailCorrecto;
	}
	
	//si hay cadena antes del @ miramos que entre @ y . haya algo
	
	if (posArroba != 0) {
		//aux = inStr(posArroba+1,strEmail,"@")
		aux=strEmail.substring(posArroba+1,strEmail.length).indexOf("@");
		if (aux > posArroba) {
			esUnEmailCorrecto = false;
			return esUnEmailCorrecto;
		}
	}	
	
	return esUnEmailCorrecto = true;
}

//devuelve true si la cadena esta vacia
function esVacio(cadena){
	vaux=cadena;
	vaux = vaux.replace(/ /gi,"");
	if (vaux=="") return true;
	else return false;
}


	//Función que formatea una fecha a formato dd/mm/aaaa
	//Agrega el separador a la caja de texto.
	//	elemento:caja de texto a formatear.
function FormatearFecha(elemento)
{
	var re = /(\-+)/g;
	var cadenaaux = elemento.value.replace(re,'/');
	var cad = cadenaaux.split('/');
	if (cad[0].length==1)
		var dia = '0' + cad[0];
	else
		var dia = cad[0];
	if (cad[1].length==1)
		var mes = '0' + cad[1];
	else
		var mes = cad[1];
	/*if (cad[2].length==2)
		var anno = '20' + cad[2];
	else*/
		var anno = cad[2];

	elemento.value = dia + '/' + mes + '/' + anno;
}

	
	
	
//Función que valida una fecha con el formato(dd/mm/yyyy). 
//	Elemento:Es el objecto a validar(la caja de texto).
function EsFecha(Elemento){
	var patron = /^\d\d\/\d\d\/\d\d\d\d$/;
	FormatearFecha(Elemento);
	var cadenaEncontrada = Elemento.value.match(patron);
	if(cadenaEncontrada != null){
		var tm = Array();
		tm[1] = 31;
		tm[3] = 31;
		tm[4] = 30;
		tm[5] = 31;
		tm[6] = 30;
		tm[7] = 31;
		tm[8] = 31;
		tm[9] = 30;
		tm[10] = 31;
		tm[11] = 30;
		tm[12] = 31;
		var dia = parseInt(Elemento.value.substring(0,2),10);
		var mes = parseInt(Elemento.value.substring(3,5),10);
		var anno = parseInt(Elemento.value.substring(6,10),10);
		
		if(dia==0 || mes==0 || anno==0){return false;}
		
		if(mes>12){return false;}
		if(mes==2){
			if (((anno % 4==0) && (anno % 100!=0)) || (anno % 400==0)){	
				if (dia>29){
					return false;
				}
			}else{
				if (dia>28){
					return false;
				}				
			}
		}
		if(dia>tm[mes]){return false;}
		
		return true
	}
	return false;
}


//Función valida el rango de dos fechas:
//Valida que el parametro FDesde sea menor o igual que el parametro FHasta
//	FDesde:Fecha inicial.
//	FHasta:Fecha final.
function EsRangoFechas(FDesde,FHasta){
	patron = /^\d\d\/\d\d\/\d\d\d\d-\d\d\/\d\d\/\d\d\d\d$/;
	var cadena;
	var AuxFDesde,AuxFHasta;
	if (FDesde.value!=null){
		AuxFDesde = FDesde.value;
	}
	else{
		AuxFDesde = FDesde;
	}
	
	if (FHasta.value!=null){
		AuxFHasta = FHasta.value;
	}
	else{
		AuxFHasta = FHasta;
	}
	cadena = AuxFDesde + '-' + AuxFHasta;
		cadenaEncontrada = cadena.match(patron);
	if(cadenaEncontrada != null){
		var dia1 = AuxFDesde.substring(0, 2);
		var mes1 = AuxFDesde.substring(3, 5);
		var anio1 = AuxFDesde.substring(6, 10);
		var dia2 = AuxFHasta.substring(0, 2);
		var mes2 = AuxFHasta.substring(3, 5);
		var anio2 = AuxFHasta.substring(6, 10);
		if (anio1>anio2){
			return false
		}
		if (anio1==anio2){
			if (mes1>mes2){
				return false;
			}else{
				if (mes1==mes2){
					if (dia1>dia2){
						return false;
					}
				}
			}
		}
		return true;
	}
	return false;
}

//funciona com el parseFloat pero sustituye la coma por un punto
	function convertirFloat(cadena){
		var pos;

		cadena=cadena+"";
		pos = cadena.indexOf(",")
		if (pos!=-1){
			return parseFloat(cadena.substring(0,pos) + "." + cadena.substring(pos+1,cadena.length) + "");
		} else {
			return parseFloat(cadena);
		}
	}

//sustituye el punto por una coma
	function convertirCadena(cadena){
		var pos;

		cadena=cadena+"";
		pos = cadena.indexOf(".")
		if (pos!=-1){
			return (cadena.substring(0,pos) + "," + cadena.substring(pos+1,cadena.length) + "");
		} else {
			return cadena;
		}
	}

//FUNCIÓN validarHora: Comprueba que una hora sea introducida con el formato hh:mm
	
function validarHora(elemento)
{
	
	var cadenaaux = elemento;
	var cad = cadenaaux.split(':');
	
	if ((cadenaaux==cad[0]) || (cad[0].length>2) || (cad[0].length==0) || (cad[0]>23) || (cad[0]<0))
		return false;
	else
		{
		if ((cad[1].length!=2) || (cad[1].length==0) || (cad[1]>59) || (cad[1]<0))
			return false;		
		else
		{
			return true
		}
	}
}

//FUNCIÓN validarRangoHora: Comprueba que una hora sea anterior a otra.

function validarRangoHora(elemento1,elemento2)
{
	
	var cadenaaux1 = elemento1;
	var cadenaaux2 = elemento2;
	
	var cad1 = cadenaaux1.split(':');
	var cad2 = cadenaaux2.split(':');
	
	if (cad1[0].length==1)
			cad1[0]= "0" + cad1[0];
			
	if (cad2[0].length==1)
			cad2[0]= "0" + cad2[0];		
			
	
	if (cad1[0]>cad2[0])
			return false;
	else
		{
		if ((cad1[1]>=cad2[1]) && (cad1[0]>=cad2[0]))
			return false;
		else
			return true;
		}
		
}

//Esta función valida un número decimal:
//	Elemento:Es el objecto a validar(la caja de texto).
//	Enteros:La longitud máxima de la parte entera.
//  Decimales:La longitud máxima de la parte decimal.
//  NOTA:Si a la función se le especifican un 0 en el parámetro de decimales, 
//       solo validaria números enteros sin decimales.
function EsDecimal(elemento,enteros,decimales){
	if (decimales>0){
		var cadena='^\\d{1,' + enteros + '}((\\,)\\d{1,' + decimales + '})?$';
	}else{
		var cadena='^\\d{1,' + enteros + '}$';
	}
	var patron = new RegExp(cadena);
	//comprobamos si el elemento es realmente un objeto
	if(typeof(elemento)=='object')
	{
		var cadena = elemento.value;
	}
	else //si el elemento no es un objeto no necesitamos preguntar por el value
	{
		var cadena = elemento;
	}	
	var cadenaEncontrada=cadena.match(patron);
	if (cadenaEncontrada==null){
		return false;
	}
	return true;
}

function comprobarCadena(tipo,campo){

	var result;
	var caracter;
	var pos=0;
	
	caracter = campo.value.substr(pos,1);
	
	while (caracter.match(tipo) && pos <= campo.value.length){
		pos++;
		caracter = campo.value.substr(pos,1);
	}
	
	if (campo.value.length != pos){
		//Vaciamos el campo por no ser correcto
		campo.value="";
	}
}

//Esta función valida que el caracter introducido en una caja de texto
//  corresponde con el formato de datos que se desea.
//Se invoca en el evento onkeypress de la caja de texto
//	tipo:tipo de dato que se quiere. Sus nombres y plantillas se encuentran despues de esta funcion
//  campo:se le pasa un this desde la llamada
function comprobarTecla(tipo,campo){

	var codigo = window.event.keyCode;
	var caracter = String.fromCharCode (codigo);
	var result;

	switch (tipo){
		case DECIMALP:	caracter=comprobarDecimalPos(caracter,campo);
						break;
		case DECIMAL:	caracter=comprobarDecimal(caracter,campo);
						break;
		case FECHA:		caracter=comprobarFecha(caracter,campo);
						break;
		case HORA:		caracter=comprobarHora(caracter,campo);
						break;
		case CORREO:	caracter=comprobarCorreo(caracter,campo);
	}

	if (caracter==null){
		window.event.returnValue=false;
		return;
	}

	result = caracter.match(tipo);

	if (result == "" || result == null){
		//Hay caracteres no válidos, lo anulamos
		window.event.returnValue=false;
	}
}

//Direcciones de correo
var CORREO = /[^',"¨´]/;
//Cadenas para texto
var TEXTO = /[^']/;
//Cadenas alfanumericas
var ALFANUMERICO = /[\wÑñ]/;
//Cadenas alfabéticos
var ALFABETICO = /[A-Za-zÑñ]/;
//Numeros enteros
var ENTERO = /[\d-]/;
//Numeros enteros positivos
var ENTEROP = /[\d]/;
//Numeros decimales
var DECIMAL = /[\d.-]/;
//Numeros decimales positivos
var DECIMALP = /[\d.]/;
//Fecha
var FECHA = /[\d/]/;
//Hora
var HORA = /[\d:]/;

//Comprueba q a un decimal positivo no se le pasen 2 "." y sustituye "," por "."
function comprobarDecimalPos(caracter,campo){

	//Cambiamos las comas por puntos
	if (caracter == ","){
		caracter=".";
		window.event.keyCode = caracter.charCodeAt(0) ;
	}

	//Si es un punto comprobamos si hay más
	if (caracter == "."){
		if (campo.value.indexOf(caracter) > -1){
			//Hay caracteres no válidos, lo anulamos
			return null;
		}
		if (campo.value.length == 0){
			//No podemos poner un punto como primer carácter
			return null;
		}
	}
	return caracter;
}

//Comprueba q a un decimal no positivo no se le pasen 2 "."
//y sustituye "," por "." y el "-" esté al principio
function comprobarDecimal(caracter,campo){

	//nos aseguramos de que el signo está al principio de la cadena (si lo hay)
	if (caracter == "-" && campo.value.length > 0){
		return null;
	}

	//Cambiamos las comas por puntos
	if (caracter == ","){
		caracter=".";
		window.event.keyCode = caracter.charCodeAt(0) ;
	}

	//Si es un punto comprobamos si hay más
	if (caracter == "."){
		if (campo.value.indexOf(caracter) > -1){
			//Hay caracteres no válidos, lo anulamos
			return null;
		}
		if (campo.value.length == 0){
			//No podemos poner un punto como primer carácter
			return null;
		}
	}
	return caracter;
}

//Comprueba q a una fecha se le pasen numeros y barras en el formato correcto
function comprobarFecha(caracter,campo){

	if (caracter == "/"){
		switch(campo.value.length){
			case 1:	campo.value="0"+campo.value;
					return caracter;
			case 4:	campo.value=campo.value.substr(0,3)+"0"+campo.value.substr(3,1);
			case 2:
			case 5:	return caracter;
			default:return null;
		}
	} else {
		switch(campo.value.length){
			case 10:return null;
			case 2:
			case 5:	campo.value=campo.value+"/";
			default:return caracter;
		}
	}
	return caracter;
}

//Comprueba q a una hora se le pasen numeros ":" en el formato correcto
function comprobarHora(caracter,campo){

	if (caracter == ":"){
		switch(campo.value.length){
			case 1:	campo.value="0"+campo.value;
					return caracter;
			case 2: return caracter;
			default:return null;
		}
	} else {
		switch(campo.value.length){
			case 5:	return null;
			case 2:	campo.value=campo.value+":";
			default:return caracter;
		}
	}
	return caracter;
}

//Comprueba q a un correo posee una sola "@" y no tiene 2 "." consecutivos
function comprobarCorreo(caracter,campo){

	if (caracter == "@"){
		if (campo.value.indexOf(caracter) > -1){
			//Se repite la "@"
			return null;
		}
	}
	if (caracter == "."){
		if (campo.value.substr(campo.value.length-1,1) == "."){
			//No podemos poner dos puntos consecutivos
			return null;
		}
	}
	return caracter;
}