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: \", \'");
			document.forms[0].elements[i].focus();
			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)){
            alert("El campo [" + strNombre + "] sólo admite números");
            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)+"";
		strCadena=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 (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('/');
	var dia;
	var anno;
	var mes;

	if (elemento.value.indexOf("/")>-1){
		if (cad[0].length > 2){
			cad[2] = cad[1];
			cad[1] = cad[0].substr(2,2);
			cad[0] = cad[0].substr(0,2);
		}
		dia = (cad[0].length == 2) ? cad[0] : "0" + cad[0];
		if (cad[1].length>2){
			cad[1] += "000";
			mes = cad[1].substr(0,2);
			anno = cad[1].substr(2,4);
		}else{
			cad[1] = (cad[1].length > 2) ? cad[1].substr(0,2) : cad[1];
			mes = (cad[1].length == 2) ? cad[1] : "0" + cad[1];
		}
		if (cad.length>2){
			cad[2] = (cad[2].length > 4) ? cad[2].substr(0,4) : cad[2];
			anno = (cad[2].length == 4) ? cad[2] : "20" + cad[2];
		}
		elemento.value = dia + '/' + mes + '/' + anno;
	}else{
		elemento.value += "00000000";
		elemento.value = elemento.value.substr(0,2) + '/' + elemento.value.substr(2,2) + '/' + elemento.value.substr(4,4);
		FormatearFecha(elemento);
	}
}

	
	
	
//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="";
	}
}



function comprobarIP(caracter, campo) {
   var num = campo.value.split(".").length;
   if (caracter == ".") {
      if (num > 3) {
         return null;
      }
      if (campo.value.length == 0){
         return null;
      }
   }
   else {
      if (num > 4) {
         return null;
      }
      else {
         if ((campo.value.substr(campo.value.lastIndexOf("."), campo.value.length).length > ((campo.value.lastIndexOf(".") == -1) ? 2 : 3)) && (num < 4)) {
            campo.value = campo.value + ".";
         }
         if ((campo.value.substr(campo.value.lastIndexOf("."), campo.value.length).length > ((campo.value.lastIndexOf(".") == -1) ? 2 : 3)) && (num > 3)) {
            return null;
         }
      }
   }
   return caracter;
}




//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

	if (navigator.appName == 'Netscape') {
		codigo = window.captureEvents(Event.KEYPRESS);
		//window.onKeyPress = netscapeKeyPress;
	}else {
		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);
						break;
		case IP:	    caracter=comprobarIP(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:]/;
var IP = /[\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){
			//debia aceptar solo 10 pero aceptamos 11 por si queremos borrar
			case 11: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;
}

//función que elimina los espacion en blanco de una cadena 
function Trim(str) {
 	var resultStr = '';
 	resultStr = TrimLeft(str);
 	resultStr = TrimRight(resultStr);	
 	return resultStr;
 }
 
 //Función que quita los espacios por la izquierda.
	function TrimLeft(str) {
		var resultStr = '';
		var i =  0;
		var len = 0 ;
		if (str+'' == 'undefined' || str == null){return null;}
		str += '';
		if (str.length == 0){
			resultStr = '';
		}else{	
			len = str.length;					
	  		while ((i <= len) && (str.charAt(i) == " ")){i++;}
	  		resultStr = str.substring(i, len);
	  	}		
	  	return resultStr;
	}

	//Función que quita los espacios por la derecha.
	function TrimRight(str) {
		var resultStr='';
		var i=0;
		if (str+'' == 'undefined' || str == null){return null;}
		str += '';
		if (str.length == 0){
			resultStr = '';
		}else{
	  		i = str.length - 1;
	  		while ((i >= 0) && (str.charAt(i) == ' ')){i--;}
		  	resultStr = str.substring(0, i + 1);
		}
		return resultStr;
	}
