function isValidDate(day,month,year,checktoday)
{
	var day = parseInt(day,10);
	var month = parseInt(month,10);
	var year = parseInt(year,10);
	
	// check sui valori passati
	if (!day || !month || !year)
		return false;
	if (month < 1 || month > 12)
		return false;
	if (day < 1 || day > 31)
		return false;
	if ((month==4 || month==6 || month==9 || month==11) && day==31)
		return false;
	if (month == 2)
	{
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap))
			return false;
	}
	
	// check esistenza data
	var dateToCheck = new Date(year, month-1, day);
	var dateToCheckTime = dateToCheck.getTime();
	if (!dateToCheckTime)
		return false;
	
	// check sulla prima data valida
	var firstDatePossible = new Date(1900, 0, 1);
	var firstDatePossibleTime = firstDatePossible.getTime();
	if (firstDatePossibleTime > dateToCheckTime)
		return false;
	
	// check sulla data futura
	if (checktoday)
	{
		var now = new Date();
		nowTime = now.getTime(); //NN3
		if (nowTime < dateToCheckTime)
			return false;
	}
	
	return true;
}

function isValidDateTime(day,month,year,hour,minute)
{
	
	if (!isValidDate(day,month,year,false))
		return false;
	
	var hour = parseInt(hour,10);
	var minute = parseInt(minute,10);
	
	if (hour < 0 || hour > 23)
		return false;
	
	if (minute < 0 || minute > 59)
		return false;
	
	return true;
}

function isValidFutureDate(day,month,year)
{
	if (!isValidDate(day,month,year,false))
		return false;
	var day = parseInt(day,10);
	var month = parseInt(month,10);
	var year = parseInt(year,10);
	// check esistenza data
	var dateToCheck = new Date(year, month-1, day);
	var dateToCheckTime = dateToCheck.getTime();
	if (!dateToCheckTime)
		return false;
	var now = new Date();
	nowTime = now.getTime(); //NN3
	if (nowTime > dateToCheckTime)
		return false;
	return true;
}

function isPastFutureDate(pastFuture,dateDay,dateMonth,dateYear,checkdateDay,checkdateMonth,checkdateYear)
{
	if (!isValidDate(dateDay,dateMonth,dateYear,false) || !isValidDate(checkdateDay,checkdateMonth,checkdateYear,false))
		return false;
	
	var day = parseInt(dateDay,10);
	var month = parseInt(dateMonth,10);
	var year = parseInt(dateYear,10);
	// check esistenza data
	var dateToCheck = new Date(year, month-1, day);
	var dateToCheckTime = dateToCheck.getTime();
	if (!dateToCheckTime)
		return false;
	
	var checkday = parseInt(checkdateDay,10);
	var checkmonth = parseInt(checkdateMonth,10);
	var checkyear = parseInt(checkdateYear,10);
	// check esistenza data
	var dateToEval = new Date(checkyear, checkmonth-1, checkday);
	var dateToEvalTime = dateToEval.getTime();
	if (!dateToEvalTime)
		return false;
	
	if (pastFuture == 'future' && dateToEvalTime >= dateToCheckTime)
		return false;
	
	if (pastFuture == 'past' && dateToEvalTime <= dateToCheckTime)
		return false;
	
	return true;
	
}

function isDateBetween(dateDay,dateMonth,dateYear,firstDay,firstMonth,firstYear,lastDay,lastMonth,lastYear)
{
	if (
			isPastFutureDate('future',dateDay,dateMonth,dateYear,firstDay,firstMonth,firstYear) && 
			isPastFutureDate('past',dateDay,dateMonth,dateYear,lastDay,lastMonth,lastYear)
			)
		return true;
	return false;
}
