
/**
funcion para validar que un valor es numerico
no debe tener ningun carater .
**/
function validatePositiveDecimal(campo) {
	var valor = campo.value;
	tamCadena = valor.length;
    if(tamCadena == 0)
		return true;

	var correcto = isValidPositiveDecimal(valor);
	if (!correcto) {
		alert("Numero decimal incorrecto.\nLa parte entera y la parte decimal tienen que estar \nseparadas por un punto.");
      	campo.focus();
      	return false;
	}
	return true;
}



/**
Comprueba que el valor para el campo numero entero es valido
**/
function validatePositiveInteger(valor) {
	tamCadena = valor.length;
    if(tamCadena == 0)
		return true;
	
	var correcto = isValidPositiveInteger(valor);
	if (!correcto) {
		alert("Numero incorrecto.\nIntroduzca un número entero, sin decimales ni signo negativo.");
      	return false;
	}
	return true;
}

function validateYear(campo) {
	var correcto = true;
	var year = campo.value;
	tamCadena = year.length;
    if(tamCadena == 0)
		return true;
	
	var correcto = isValidYear(year);
	if (!correcto) {
		alert("Año no válido.\n" +
		"El año tiene que estar comprendido entre 1990 y 2030.");
		campo.focus()
		return false;
	}
	return true;
}

/**
Comprueba que el valor para el campo fecha es valido
**/
function validateDate(campo) {
	var correcto = true;
	var data = campo.value;
	tamCadena = data.length;
    if(tamCadena == 0)
		return true;

	// comprobamos que no exista el caracter .
    if(data.length!=10)
		correcto = false;
	if (correcto) { 
		correcto = isValidDate(data);
	}
	if (!correcto) {
		alert("Fecha no válida.\nLa fecha debe tener un formato dd/mm/aaaa.\n" +
		"El año tiene que estar comprendido entre 1990 y 2030 y\n" +
		"el mes y el día tienen que tener valores válidos.");
		return false;
	}
	return true;
}

function validateDateTimeRelaxed(campo) {
	var correcto = true;
	var data = campo.value;	 
	tamCadena = data.length;
    if(tamCadena == 0)
		return true;

	// comprobamos que no exista el caracter .
    if(data.length != 10 && data.length != 19)
		correcto = false;
	
	if (correcto) { 
		correcto = isValidDate(data.substring(0,10));
	}
	
	if (correcto && data.length == 19) {
		correcto = (data.charAt(10) == ' ');
	}
	
	if (correcto && data.length == 19) {
		correcto = isValidTime(data.substring(11,19));
	}

	if (!correcto) {
		alert("Fecha y hora no válida.\nLa fecha debe tener un formato dd/mm/aaaa\n" +
		"o bien aaaa-mm-dd hh:mm:ss\n" +
		"El año tiene que estar comprendido entre 1990 y 2030 y\n" +
		"el mes, día, hora, minutos y segundos tienen que tener valores válidos.");
		campo.focus()
		return false;
	}
	return true;
}

function validateDateTimeStrict(campo) {
	var correcto = true;
	var data = campo.value;	 
	tamCadena = data.length;
    if(tamCadena == 0)
		return true;

	// comprobamos que no exista el caracter .
    if(data.length != 19)
		correcto = false;
	
	if (correcto) { 
		correcto = isValidDate(data.substring(0,10));
	}
	
	if (correcto) {
		correcto = (data.charAt(10) == ' ');
	}
	
	if (correcto) {
		correcto = isValidTime(data.substring(11,19));
	}

	if (!correcto) {
		alert("Fecha y hora no válida.\nLa fecha debe tener un formato dd/mm/aaaa hh:mm:ss\n" +
		"El año tiene que estar comprendido entre 1990 y 2030 y\n" +
		"el mes, día, hora, minutos y segundos tienen que tener valores válidos.");
		campo.focus()
		return false;
	}
	return true;
}

function isValidTime(time) {
	var correcto = true;
	var aData = time.split(":");
    if (time.length != 8 || aData.length != 3)
		correcto = false;

	if (correcto) {
		if (time.charAt(2) != ':' || time.charAt(5) != ':') {
			correcto = false;
		}
	}
	
	if (correcto) {
		// tomamos cada uno de los valores
		if (isNaN(parseInt(aData[0],10)) || isNaN(parseInt(aData[1],10)) || isNaN(parseInt(aData[2],10))) {
			correcto = false;
		}
	
		if (correcto) {
			hh = parseInt(aData[0],10);
			mm = parseInt(aData[1],10);
			ss = parseInt(aData[2],10);
			if (hh < 0 || hh > 23 || mm < 0 || mm > 59 || ss < 0 || ss > 59) {
				correcto = false;
			}
		}
	}

	return correcto;
}

function isValidDate(data) {
	var correcto = true;
	var aData = data.split("/");
    if(aData.length!=3)
		correcto = false;

	if (correcto) {
		if (data.charAt(2) != '/' || data.charAt(5) != '/') {
			correcto = false;
		}
	}

	if(correcto){ 
		
		// tomamos cada uno de los valores      
		if(isNaN(parseInt(aData[0],10)) || isNaN(parseInt(aData[1],10)) || isNaN(parseInt(aData[2],10))) {
			correcto = false;
		}
			
		// ahora comprobamos los valores de los dias, meses y anos
		if (correcto) {
			yr = parseInt(aData[2],10);
			mnth = parseInt(aData[1],10);
			dy = parseInt(aData[0],10);
			
			correcto = isValidYear(yr);
			
			if (correcto) {
				if(mnth<1 || mnth>12) {
					correcto = false;
				}
					
				if (correcto) {
					// ahora hay que validar el numero de dias del mes
					if (dy<1 || dy>31) {
						correcto = false;
					}
					
					if (correcto) {
						switch (mnth) {
							case 4:
							case 6:
							case 9:
							case 11:
								if (dy>30) correcto = false;
								break;
							case 2:
								// hay que determinar si el ano es bisiesto o no
								resto = yr % 4
								if (resto == 0 && dy>29)
									correcto = false;
								else 
									if(resto !=0 && dy >28)
										correcto = false;  
								break;
							default:
								break;
						}
					}
				}
			}
		}
	}
	return correcto;
}

function isValidYear(valor) {
	correcto = isValidPositiveInteger(valor);
	if (correcto) {
		year = parseInt(valor,10);
		if (year < 1990 || year > 2030) {
			correcto = false;
		}
	}
	return correcto;
}

function isValidPositiveDecimal(valor) {
	// comprobar que los caracteres de una cadena son correctos	
	// numeros y .
	var validchars = "0123456789.";
	var correcto = true;
	for (var i=0; i < valor.length; i++) {
		var letter = valor.toLowerCase().charAt(i);
		if (validchars.indexOf(letter) == -1) {
			correcto = false;
			break;
		}
	}

	if (correcto) {
		var point1Pos = valor.indexOf(".");
		var point2Pos = -1;
		if (point1Pos >= 0) {
			point2Pos = valor.indexOf(".", point1Pos + 1);
		}
		if (point2Pos >= 0 || valor.indexOf(",")>0 || isNaN(parseFloat(valor,10))) {
			correcto = false;
		}
	}
	return correcto;
}

function isValidPositiveInteger(valor) {
	// comprobar que los caracteres de una cadena son correctos
	var validchars = "0123456789";
	var correcto = true;

	for (var i=0; i < valor.length; i++) {
		var letter = valor.toLowerCase().charAt(i);
		if (validchars.indexOf(letter) == -1) {
			correcto = false;
			break;
		}
	}

	if (correcto) {
		if (valor.indexOf('.') >= 0 || valor.indexOf(',') >= 0 || isNaN(parseInt(valor,10))) {
			correcto = false;
		}
	}
	return correcto;
}


