// JavaScript 1.2 Document
/*
	Libreria funzioni che operano su valori data:
		Versione 1.1
		Ultima modifica/revisione: 20/02/2004.
		Autore: Baket
	Vedi fnc_date_inc.doc per una descrizione delle funzioni esportate.
*/


// Modificare il valore del seguente intero per stabilire il formato della data.
// Come separatore tra i numero possono essere usati i caratteri '-', '/' o '.'.
var dateSimpleFormat = 0;

// Restituisce un array con giorno,mese,anno (nell'ordine) in formato numerico.
function matchDateStr(dateStr) { 
	var datePat, dp, mp, yp;
	switch (dateSimpleFormat) {
		case 0: // Formato europeo: d-m-Y;
			datePat = /^(\d{1,2})(\/|-|\.)(\d{1,2})(\/|-|\.)(\d{4})$/; 
			dp=1; mp=3; yp=5;
			break;
		case 1: // Formato anglosassone: m-d-Y;
			datePat = /^(\d{1,2})(\/|-|\.)(\d{1,2})(\/|-|\.)(\d{4})$/;
			dp=3; mp=1; yp=5;
			break;
		case 2: // Formato internazionale (ISO 8601): Y-m-d;
			datePat = /^(\d{4})(\/|-|\.)(\d{1,2})(\/|-|\.)(\d{1,2})$/;
			dp=5; mp=3; yp=1;
			break;
	}
	var matchArray = dateStr.match(datePat); 
	if (matchArray==null) return null;
	if (matchArray[2]!=matchArray[4]) return null;
	var retArray = new Array(3);
	retArray[0] = parseInt(matchArray[dp], 10); 
	retArray[1] = parseInt(matchArray[mp], 10);
	retArray[2] = parseInt(matchArray[yp], 10);
	return retArray;
}

function isDate(dateStr) {
	if (dateStr.length == 0) return true; // Stringa nulla.
	
	var matchArray = matchDateStr(dateStr); // is the format ok?
	if (matchArray == null) return false;
	day = matchArray[0];
	month = matchArray[1]; 
	year = matchArray[2];

	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) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) 
			return false;
	}
	return true; // date is valid
}

var msgIsDate = 'Valore data indicato in modo errato';

function fldIsDate(fld, fldName) {
	if (!isDate(fld.value)) {
		alert(fldName + ': ' + msgIsDate );
		fld.focus();
		return false;	
	}
	return true;
}

function compareDates(dt1, dt2) {   // -1 se d1 < d2, 0 se d1 = d2, +1 se d1 > d2. null se date non valide.
	var aD1 = matchDateStr(dt1); 
	var aD2 = matchDateStr(dt2);
	if ((aD1==null)||(aD2==null)) return;
	for(var i=2; i>=0; i--) {
		if (aD1[i] < aD2[i]) return -1;
		else if(aD1[i] > aD2[i]) return 1;
	}	
	return 0;
}
