

function testNumeroDigitosExacto(valorTexto, iNumDigitosExacto) {
	eval('var reNumDigitos=/^\\d{' + iNumDigitosExacto + '}$/');
	return reNumDigitos.test(valorTexto);
}

function testEntero(valorTexto, iNumMaxDigitos) {
	eval('var reNumDigitos=/^\\d{1,' + iNumMaxDigitos + '}$/');
	return reNumDigitos.test(valorTexto);
}

function testFlotante(valorTexto, iNumMaxDigitosEntero, iNumMaxDigitosFlotante) {
	eval('var reFlotante=/^\\d{1,' + iNumMaxDigitosEntero + '}' + '\\.' + '\\d{1,' + iNumMaxDigitosFlotante + '}' + '$/');

	return reFlotante.test(valorTexto);
}

function testHora(valorTexto) {
	eval('var reHora=/^\\d{1,2}:\\d{1,2}$/');
	return reHora.test(valorTexto);
}

function testFecha(valorTexto) {
	eval('var reFecha=/^\\d{2}\\/\\d{2}\\/\\d{4}$/');
	return reFecha.test(valorTexto);
}

function esNumeroDigitosExacto(nombreCampo, valorTexto, iNumDigitosExacto, sIdioma) {
	var bFormatoCorrecto = testNumeroDigitosExacto(valorTexto, iNumDigitosExacto);
	
	if(!bFormatoCorrecto) {
		if(sIdioma=="cas")
			alert("El campo " + nombreCampo + " deberia tener un valor entero de " + iNumDigitosExacto + " digitos. Corrijalo por favor."); 
		else
			alert(nombreCampo + " parametroak " + iNumDigitosExacto + " digituetako balio numeriko bat izan beharko luke. Zuzendu parametroaren balioa mesedez."); 
	}
		
	return bFormatoCorrecto;
}

function esEntero(nombreCampo, valorTexto, iNumMaxDigitos, sIdioma) {
	var bFormatoCorrecto = testEntero(valorTexto, iNumMaxDigitos);
	
	if(!bFormatoCorrecto) {
		if(sIdioma=="cas")
			alert("El campo " + nombreCampo + " deberia tener un valor entero de " + iNumMaxDigitos + " digitos como maximo. Corrijalo por favor."); 
		else
			alert(nombreCampo + " parametroak, gehienez " + iNumMaxDigitos + " digituetako balio numeriko bat izan beharko luke. Zuzendu parametroaren balioa mesedez."); 
	}
	
	return bFormatoCorrecto;
}

function esFlotante(nombreCampo, valorTexto, iNumMaxDigitosEntero, iNumMaxDigitosFlotante, sIdioma) {
	var bFormatoCorrecto = testFlotante(valorTexto, iNumMaxDigitosEntero, iNumMaxDigitosFlotante);
	
	if(!bFormatoCorrecto) {
		if(sIdioma=="cas")
			alert("El campo " + nombreCampo + " deberia tener asignado un valor flotante con una parte entera de una longitud maxima de " + iNumMaxDigitosEntero + " digitos y una parte fraccional de un maximo de " + iNumMaxDigitosFlotante + " digitos. Corrijalo por favor."); 
		else
			alert(nombreCampo + " parametroak, koma mugikorreko balio numeriko bat izan behako luke. Pisu handieneko aldean gehienez " + iNumMaxDigitosEntero + " digitu eta pisu txikieneko aldean " + iNumMaxDigitosFlotante + " digitu izanik. Zuzendu parametroaren balioa mesedez."); 
	}
	
	return bFormatoCorrecto;
}

function esCorreoElectronico(nombreCampo, valorTexto, sIdioma) {
	var reEmail = /^.+@.+\..{2,3}$/;
	var bFormatoCorrecto = reEmail.test(valorTexto);
	
	if(!bFormatoCorrecto) {
		if(sIdioma=="cas")
			alert("El campo " + nombreCampo + " deberia tener el formato correcto de una direccion de correo electrónico. Corrijalo por favor."); 
		else
			alert(nombreCampo + " parametroak, helbide elektroniko baten formatua izan beharko luke. Zuzendu parametroaren balioa mesedez"); 
	}

	return bFormatoCorrecto;
}

function eliminaCaracterPrefijo(sValor, sCaracterPrefijo) {
	var iNumCars = sValor.length;
	var iContCar = 0;
	var bProcesandoPrefijo = true;
	var sValorResultante = "";

	while (iContCar<iNumCars-1) {

		if(sValor.substr(iContCar, 1)!=sCaracterPrefijo && bProcesandoPrefijo) 
			bProcesandoPrefijo = false;
			
		if((sValor.substr(iContCar, 1)!=sCaracterPrefijo && bProcesandoPrefijo) || !bProcesandoPrefijo) 
			sValorResultante = sValorResultante + sValor.substr(iContCar, 1);
		
		iContCar++;
	}
	sValorResultante = sValorResultante + sValor.substr(iNumCars-1,1);
	
	return sValorResultante;	
}

function esValorHora(nombreCampo, valorTexto, sIdioma) {
	var bFormatoCorrecto = testEntero(valorTexto, 2);
	
	bFormatoCorrecto = bFormatoCorrecto && (parseInt(eliminaCaracterPrefijo(valorTexto, "0"))<25);
	if(!bFormatoCorrecto) {
		if(sIdioma=="cas")
			alert("El campo " + nombreCampo + " deberia ser entero de dos digitos con un valor de 0 a 24. Corrijalo por favor."); 
		else
			alert(nombreCampo + " parametroak, 2 digituetako balio hamartar bat izan beharko luke. Zuzendu parametroaren balioa mesedez."); 
	}

	return bFormatoCorrecto;
}

function esMinutos(nombreCampo, valorTexto, sIdioma) {
	var bFormatoCorrecto = testEntero(valorTexto, 2);

	bFormatoCorrecto = bFormatoCorrecto && (parseInt(eliminaCaracterPrefijo(valorTexto, "0"))<60);
	if(!bFormatoCorrecto) {
		if(sIdioma=="cas")
			alert("El campo " + nombreCampo + " deberia ser entero de dos digitos con un valor de 0 a 59. Corrijalo por favor."); 
		else
			alert(nombreCampo + " parametroak, 2 digituetako balio hamartar bat izan beharko luke. Zuzendu parametroaren balioa mesedez."); 
	}
	
	return bFormatoCorrecto;
}

function esSegundos(nombreCampo, valorTexto, sIdioma) {
	var bFormatoCorrecto = testEntero(valorTexto, 2);
	
	bFormatoCorrecto = bFormatoCorrecto && (parseInt(eliminaCaracterPrefijo(valorTexto, "0"))<60);
	if(!bFormatoCorrecto) {
		if(sIdioma=="cas")
			alert("El campo " + nombreCampo + " deberia tener un valor de 0 a 59. Corrijalo por favor."); 
		else
			alert(nombreCampo + " parametroak, 0 eta 59 tarteko balio bat izan beharko luke. Zuzendu parametroaren balioa mesedez."); 
	}
	
	return bFormatoCorrecto;
}

function esHora(sNombreCampo, sHora, sIdioma) {
	var sHoras = null;
	var iHoras = 0;
	var sMins = null;
	var iMins = null;
	var bEsHoraValida = true;

	if(testHora(sHora)) {

		sHoras = sHora.split(":")[0];
		iHoras = parseInt(eliminaCaracterPrefijo(sHoras, "0"));
		sMins = sHora.split(":")[1];
		iMins = parseInt(eliminaCaracterPrefijo(sMins, "0"));

		if(sHoras==null || sMins==null || isNaN(sHoras) || isNaN(sMins)) {
			bEsHoraValida = false;
		} else {
			if(iHoras>24 || iMins>59 || iHoras<0 || iMins<0) {
				bEsHoraValida = false;
			}
		}
	} else {
		bEsHoraValida = false;
	}
		
	if(!bEsHoraValida) {
		if(sIdioma=="cas")
			alert("El campo " + sNombreCampo + " debe especificar una hora en el formato <horas>:<minutos>. No siendo <horas> superior a 24 ni <minutos> superior a 59. Corrijalo por favor.");
		else
			alert(nombreCampo + " parametroaren balioak, <ordua>:<minutua> formatua jarraitu beharko luke. Zuzendu parametroaren balioa mesedez."); 
	}

	return bEsHoraValida;
}


function esFecha(sFecha) {
	var bEsFecha = true;
	var bSonEnteros = true;
	var iDia = null;
	var iMes = null;
	var iAnio = null;
	var bEsBisiesto = false;

	if(testFecha(sFecha)) {
		iDia = sFecha.split("/")[0];
		iMes = sFecha.split("/")[1];
		iAnio = sFecha.split("/")[2];
		
		if(sFecha.length==10) {
			if(!testEntero(iAnio, 4)) {
				bSonEnteros = false;
			} else {
				if (((iAnio % 4 == 0) && !(iAnio % 100 == 0)) || (iAnio % 400 == 0)) {
				  bEsBisiesto = true;
				}
			}
			if(!testEntero(iMes, 2)) 
				bSonEnteros = false;
			if(!testEntero(iDia, 2)) 
				bSonEnteros = false;
		
			if(bSonEnteros) {
				// validar mes
				if(iMes<1 || iMes>12)
					bEsFecha = false;
					
				// validar dia
				if(iDia<1 || iDia>31)
					bEsFecha = false;
		
				if(bEsFecha) {
					if ((iMes==2) && (bEsBisiesto) && (iDia>29)) {
						bEsFecha = false;
					}
					if ((iMes==2) && (!bEsBisiesto) && (iDia>28)) {
						bEsFecha = false;
					}
					/* Validation of other months */
					if ((iDia>31) && ((iMes==1) || (iMes==3) || (iMes==5) || (iMes==7) || (iMes==8) || (iMes==10) || (iMes==12))) {
						bEsFecha = false;
					}
					if ((iDia>30) && ((iMes==4) || (iMes==6) || (iMes==9) || (iMes==11))) {
						bEsFecha = false;
					}
				}
			} else {
				bEsFecha = false;
			}			
		} else {
			bEsFecha = false;
		}
	} else {
		bEsFecha = false;
	}
		
	return bEsFecha;
}

// formato fecha dd/mm/yyyy
function esFinDeSemana(sNombreCampo, sFecha, sIdioma) {
	var bEsFinDeSemana = false;
	var oDateFecha = new Date(0);

	if(esFecha(sFecha)) {
		
		oDateFecha.setDate(parseInt(eliminaCaracterPrefijo(sFecha.split("/")[0],"0")));
		oDateFecha.setFullYear(parseInt(eliminaCaracterPrefijo(sFecha.split("/")[2],"0")));
		oDateFecha.setMonth((parseInt(eliminaCaracterPrefijo(sFecha.split("/")[1])-1,"0")));

		if(oDateFecha.getDay()==6 ||	oDateFecha.getDay()==0) {
			if(sIdioma=="cas")
				alert("El campo " + sNombreCampo + " no puede tomar una fecha que corresponda a un sabado o domingo. Corrijalo por favor.");
			else	
				alert(sNombreCampo + " parametroak, ezin du larunbata edo igandea den datarik izan. Zuzendu parametroaren balioa mesedez.");
			bEsFinDeSemana = true;
		}
	}
		
	return bEsFinDeSemana;
}

function tieneNumeros(sValor, sNombre, sIdioma) {
	var filteredValues = "1234567890";     // Characters stripped out
	var i = 0;;
	var bTieneNumeros = false;

	if(sValor!="") {
		for (i = 0; i < sValor.length; i++) {  // Search through string and append to unfiltered values to returnString.
			var c = sValor.charAt(i);
			if (filteredValues.indexOf(c) != -1) {
				if(sIdioma=="cas")
					alert("El campo " + sNombre + " no admite valores numericos. Corrijalo por favor.");
				else
					alert(sNombre + " parametroak, ez du balio numerikorik onartzen. Zuzendu parametroaren balioa mesedez.");
				bTieneNumeros=true;
				break;
			}
		}
	}
	
	return bTieneNumeros;
}

letras = new Array();
  letras[0]  = "T";
  letras[1]  = "R";
  letras[2]  = "W";
  letras[3]  = "A";
  letras[4]  = "G";
  letras[5]  = "M";
  letras[6]  = "Y";
  letras[7]  = "F";
  letras[8]  = "P";
  letras[9]  = "D";
  letras[10] = "X";
  letras[11] = "B";
  letras[12] = "N";
  letras[13] = "J";
  letras[14] = "Z";
  letras[15] = "S";
  letras[16] = "Q";
  letras[17] = "V";
  letras[18] = "H";
  letras[19] = "L";
  letras[20] = "C";
  letras[21] = "K";
  letras[22] = "E";
  
  function letraCorrecta (dni)
  {  	
  	return letraDNI = letras[dni % 23];
  }

  function esDNIValido(sDni) {
	sDNInum=sDni.substr(0,sDni.length-1);
	sDNIword=sDni.substr(sDni.length-1,sDni.length);
	sDNIword = sDNIword.toUpperCase();
	return letraCorrecta(sDNInum)==sDNIword;
  }
