var dayArray = new Array (13);
	dayArray [0] = -1;
	dayArray [1] = 31;
	dayArray [2] = 28;
	dayArray [3] = 31;
	dayArray [4] = 30;
	dayArray [5] = 31;
	dayArray [6] = 30;
	dayArray [7] = 31;
	dayArray [8] = 31;
	dayArray [9] = 30;
	dayArray [10] = 31;
	dayArray [11] = 30;
	dayArray [12] = 31;

function isInteger (pValue) {
	var lIsInteger = true;
	var lChar;
	for (var i = 0; i < pValue.length; i++) {
			lChar = pValue.toString().substring(i, i+1);
			if (! (lChar >= "0" && lChar <= "9")) {
				lIsInteger = false;
				break;
			}
	}	// Fin for
	return lIsInteger;
}	// Fin isInteger

function isLeapYear (pYear) {
		if (((pYear % 400) == 0) || ((pYear % 4) == 0 && (pYear % 100) != 0))
			return true;
		else
			return false;
}	// Fin isLeapYear


function esFechaCorrecta(pDay, pMonth, pYear, pDescr)
{
	var error_msg= "Fecha no valida en el campo '" + pDescr + "' :\n "
	var lIsValid = true;
	var lYear = parseInt (pYear.value, 10);
	var lMonth = parseInt (pMonth.value, 10);
	var lDay = parseInt (pDay.value, 10);
	var error = null;

	// Si no se ha completado el campo fecha no debemos realizar comprobación alguna
	if (pYear.value == "" && pMonth.value == "" && pDay.value == "")
	{
		return lIsValid;
	}

	//	Todos los componentes deben ser numéricos
	if ((! (isInteger (pDay.value))) || (isNaN(lDay) )) {
			lIsValid = false;
			error_msg=error_msg + "\nDía debe ser numérico."
			if (error == null) error = pDay;
	}
	if ((! (isInteger (pMonth.value))) || (isNaN(lMonth) )) {
			lIsValid = false;
			error_msg=error_msg + "\nMes debe ser numérico."
			if (error == null) error = pMonth;
	}
	if ((! (isInteger (pYear.value))) || (isNaN(lYear) )) {
			lIsValid = false;
			error_msg=error_msg + "\nAño debe ser numérico."
			if (error == null) error = pYear;
	}

	//	Mes = {1..12}
	if (lMonth < 1 || lMonth > 12) {
		lIsValid = false;
		error_msg=error_msg + "\nMes debe estar entre 1 y 12."
		if (error == null) error = pMonth;
	}

	//	Dia = {1..30 || 1..31} dependiendo del mes
	if (lDay < 1 || lDay > (dayArray[lMonth] + ((isLeapYear (lYear) && lMonth == 2) ? 1 : 0))) {
		lIsValid = false;
		error_msg=error_msg + "\nEl día para ese mes no esta en un intervalo válido."
		if (error == null) error = pDay;
	}
	//	Año debería tener 4 dígitos

	if (pYear.value.length < 4) {
		lIsValid = false;
		error_msg=error_msg + "\nAño debe  tener 4 dígitos."
		if (error == null) error = pYear;
	}

	if ( lIsValid == false )
	{
		error.focus();
		error.select();
		alert (error_msg);
	}

	return lIsValid;

}	// Fin esFechaCorrecta

function isDiffLower (diffDays, dayL, monthL, yearL, dayU, monthU, yearU) {
    var dateLower = new Date(yearL, monthL-1, dayL);
    var dateUpper = new Date(yearU, monthU-1, dayU);

    var difference = dateUpper.getTime() - dateLower.getTime();
    var days = Math.floor(difference / (1000 * 60 * 60 * 24));

    if (days <= diffDays)
        return true
    else {
        alert("El rango de fechas es superior a "+diffDays+" días");
        return false
    }
}   // End of function isDiffLower
