//VERIFICA LA CORRETTEZZA DEL FORMATO DI UNA DATA//////////////////////////////////////////////////////////////////
//La funzione verifyDate() accetta in ingresso una data (del tipo 1/27/1998)///////////////////////////////////////
//Tale data viene scomposta in 3 valori(gg/mm/aaaa) dalla funzione seperateDateString()////////////////////////////
//La correttezza dei 3 valori (gg/mm/aaaa) viene controllata dalle funzioni isDayOK(), isMonthOK(), isYearOK()/////
//A questo punto la funzione ritorna un valore (retVal) che puņ essere:////////////////////////////////////////////
//      retVal = 0 - DATA VALIDA		///////////////////////////////////////////////////////////////////////////
//      retVal = 1 - MESE NON VALIDO	///////////////////////////////////////////////////////////////////////////
//      retVal = 2 - GIORNO NON VALIDO	///////////////////////////////////////////////////////////////////////////
//      retVal = 3 - ANNO NON VALIDO	///////////////////////////////////////////////////////////////////////////
//		retVal = 4 - DATA ILLEGGIBILE	///////////////////////////////////////////////////////////////////////////

var theDay = 0;
var theMonth = 0;   
var theYear = 0;
		
function verifyDate(enteredDay, enteredMonth, enteredYear) {
	retVal = 0;
		
	theDay = enteredDay;
	theMonth = enteredMonth;
	theYear = enteredYear;
	
	if(enteredMonth == null && enteredYear == null)
		retVal = seperateDateString(enteredDay);
	else if (isMonthOK() == 0)
		retVal = 1;
	else if (isDayOK() == 0)
		retVal = 2;
	else if (isYearOK() == 0)
		retVal = 3;
	
	
	return retVal;
}

//Tale funzione viene chiamata dalla verifyDate() per scomporre la data in 3 valori separati (gg/mm/aaaa).//////////
//Questi valori verranno passati nuovamente alla funzione verifyDate()//////////////////////////////////////////////
function seperateDateString(dateString) {
	var retVal = 0;
	var slash1 = 0;     //character index of 1st slash
	var slash2 = 0;     //character index of 2nd slash
	var numSlashes = 0; //make sure there are two slashes

	for (slash1; slash1 < dateString.length && numSlashes == 0; slash1++) 
	{
		if (dateString.charAt(slash1) == '/' || dateString.charAt(slash1) == '-')
			numSlashes++;
	}
	
	for (slash2 = slash1; slash2 < dateString.length && numSlashes == 1; slash2++) 
	{
		if (dateString.charAt(slash2) == '/' || dateString.charAt(slash2) == '-')
			numSlashes++;
	}
	
	if (numSlashes == 2) 
	{
	
		theDay   = dateString.substring(0, slash1 - 1);
		theMonth = dateString.substring(slash1, slash2 - 1);
		theYear = dateString.substring(slash2, dateString.length);
		
		retVal = verifyDate(theDay, theMonth, theYear);
	}
	else
		retVal = 4;
	
	theDate = theDay + '/' + theMonth + '/' + theYear;
	//theDate = theYear + '/' + theMonth + '/' + theDay;
	
	return retVal;
}

//Questa funzione viene chiamata dalla verifyDate() e ritorna 2 valori:////////////////////////////////////////////
//      retVal = 0 - MESE NON VALIDO	///////////////////////////////////////////////////////////////////////////
//      retVal = 1 - MESE VALIDO		///////////////////////////////////////////////////////////////////////////
function isMonthOK() {
	var retVal = 0;

	if(theMonth <= 12 && theMonth != 0)
		retVal = 1;
	else
		retVal = 0;

	return retVal;
}

//Questa funzione viene chiamata dalla verifyDate() e ritorna 2 valori:////////////////////////////////////////////
//      retVal = 0 - GIORNO NON VALIDO	///////////////////////////////////////////////////////////////////////////
//      retVal = 1 - GIORNO VALIDO		///////////////////////////////////////////////////////////////////////////
function isDayOK() {
	var retVal = 0;
	
	if(theMonth == 1 || theMonth == 3 || theMonth == 5 || theMonth == 7
		|| theMonth == 8 || theMonth == 10 || theMonth == 12) {
	if (theDay >= 1 && theDay <= 31)
		retVal = 1;
	else
		retVal = 0;
	}
	else if (theMonth == 2) {
		if (theDay >= 1 && theDay <=28)
			retVal = 1;
		else if (theDay == 29 && ((theYear % 4) == 0 && (theYear % 100)) != 0 && (theYear % 400) == 0)
			retVal = 1;  // valid leap-year
		else if (theDay == 29 && (theYear % 4) != 0)
			retVal = 0;
		else
			retVal = 0;
	}
	else {
		if (theDay >= 1 && theDay <= 30)
			retVal = 1;
		else
			retVal = 0;
	}
	return retVal;
}

//Questa funzione viene chiamata dalla verifyDate() e ritorna 2 valori:////////////////////////////////////////////
//      retVal = 0 - ANNO NON VALIDO	///////////////////////////////////////////////////////////////////////////
//      retVal = 1 - ANNO VALIDO		///////////////////////////////////////////////////////////////////////////
function isYearOK() {
   var retVal = 0;

   if (theYear >= 1900 && theYear <= 2050)
	  retVal = 1;
   else
	  retVal = 0;

   return retVal;
}

//Questa funzione scompone la data in 3 valori (gg/mm/aaaa)////////////////////////////////////////////////////////
//Aggiunge uno 0 di fronte a mese e giorno formati da una sola cifra///////////////////////////////////////////////
//Converte il tutto in un valore unico (aaaammgg)//////////////////////////////////////////////////////////////////
function composeObjDate(dateString) {
	var objDate;
	
	seperateDateString(dateString);
	
	if (theMonth.length < 2)
		theMonth = "0" + theMonth;
		
	if (theDay.length < 2)
		theDay = "0" + theDay;

	objDate = '' + theYear + '' + theMonth + '' + theDay;

	return objDate; 
}

//Questa funzione confronta due date tra di loro (convertite in un unico valore dalla funzione composeObjDate())///
//Ritorna in uscita un valore che puņ essere://////////////////////////////////////////////////////////////////////
//      retVal = 0 - DATA1 > DATA2		///////////////////////////////////////////////////////////////////////////
//      retVal = 1 - DATA1 < DATA2		///////////////////////////////////////////////////////////////////////////
//      retVal = 2 - DATA1 = DATA2		///////////////////////////////////////////////////////////////////////////
function compareDate(dateString1, dateString2) {
	var objDate1 = "";
	var objDate2 = "";
	var retVal = "";
	
	retVal = 0;
	
	objDate1 = composeObjDate(dateString1);
	objDate2 = composeObjDate(dateString2);
	
	if (objDate1 > objDate2) {
		retVal = 1;
	}
	else if (objDate1 == objDate2) {
		retVal = 2;
	}
	
	return retVal;
}

//RITORNA LA DATA CORRENTE//////////////////////////////////////////////////////////////////////////////////
function dateToday() {
	var dteToday = new Date();
	var theDay = dteToday.getDate();
	var theMonth = dteToday.getMonth() + 1;
	var theYear = dteToday.getFullYear();
	
	if (theDay < 10) {
		theDay = "0" + theDay;
	}
	if (theMonth < 10) {
		theMonth = "0" + theMonth;
	}
	
	var myDate =  theDay + "/" + theMonth  + "/" + theYear;
	return myDate;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
