// Checks the validity of a date utilising 3 integers.
function isValidDate(year, month, day) {

	if (day < 1 || day > 31) {
		alert('The day must be between 1 and 31 inclusive.');
		return false;
	}

	if (month < 0 || month > 11) {
		alert('The month must be between 1 and 12 inclusive.');
		return false;
	}

	switch (month) {

		// February has 28 days except during a leap year
		case 1 :
			if ((day>28) && (year%4>0)) {
				alert('Year ' + year + ' is not a leap year so February only has 28 days.\nPlease choose another day in February or change the month.');
				return false;
			}
			break;

		// April has 30 days
		case 3 :
			if (day>30) {
				alert('April only has 30 days. Please choose another day.');
				return false;
			}
			break;

		// June has 30 days
		case 5 :
			if (day>30) {
				alert('June only has 30 days. Please choose another day.');
				return false;
			}
			break;

		// September has 30 days
		case 8 :
			if (day>30) {
				alert('September only has 30 days. Please choose another day.');
				return false;
			}
			break;

		// November has 30 days
		case 10 :
			if (day>30) {
				alert('November only has 30 days. Please choose another day.');
				return false;
			}
			break;

	}
	return true;
}

function stringToDate(dateString) {
	errorMsg = 'Please enter the departure date in the Australian date format:\n\n\tdd/mm/yyyy';

	if (!isDateFormat(dateString)) {
	
		alert(errorMsg);
		return null;
	}

	var firstSlash = dateString.indexOf('/');
	var secondSlash = dateString.indexOf('/', firstSlash+1)

	// Day
	dayString = dateString.substring(0, firstSlash);
	day = new Number(dayString);

	// Month
	monthString = dateString.substring(firstSlash+1, secondSlash);
	month = new Number(monthString)-1;

	// Year
	yearString = dateString.substring(secondSlash+1, dateString.length);
	year = new Number(yearString);
	if ( year < 100 )
		year += 2000;

	return new Date(year, month, day);
}

function stringToTime(timeString) {
	errorMsg = 'Please enter or select a correctly formatted time:\n\n\thh:mm';

	// Check formatting.
	colonIndex = timeString.indexOf(':');
	if (colonIndex == -1) {
		alert(errorMsg + "\n\nNo colon (:) separator" );
		return null;
	}

	// Hour
	hourString = timeString.substring(0, colonIndex);
	if (hourString.length < 1 || hourString.length > 2) {
		alert(errorMsg + "\n\nNo hour specified" );
		return null;
	}
	hour = new Number(hourString);

	// Minute
	minuteString = timeString.substring(colonIndex+1, timeString.length);
	minute = new Number(minuteString);
	if ( (minute < 0) || (minute > 59) ) {
		alert(errorMsg + "\n\nMinute must be between 0 and 59" );
		return null;
	}

	return new Date(2000, 1, 1, hour, minute, 0);
}

function dateToYYYYMMDD(dateObject) {

	// Day
	var day = dateObject.getDate();
	var dayString = day.toString();
	if (dayString.length == 1) {
		dayString = '0' + dayString;
	}

	// Month
	var month = dateObject.getMonth()+1;
	var monthString = month.toString();
	if (monthString.length == 1) {
		monthString = '0' + monthString;
	}

	// Year
	var year = dateObject.getYear();
	if ( year < 1000 )
		year += 1900;
	var yearString = year.toString();

	return yearString + monthString + dayString;
}

function isDateFormat(dateString) {

	var firstSlash = dateString.indexOf('/');
	if (firstSlash == -1) {
		return false;
	}

	var secondSlash = dateString.indexOf('/', firstSlash+1)
	if (secondSlash == -1) {
		return false;
	}

	// Day
	var dayString = dateString.substring(0, firstSlash);
	if (dayString.length < 1 || dayString.length > 2) {
		return false;
	}
	var day = new Number(dayString);
	
	if (isNaN(day)) {
		return false;
	}

	// Month
	var monthString = dateString.substring(firstSlash+1, secondSlash);
	if (monthString.length < 1 || monthString.length > 2) {
		return false;
	}
	var month = new Number(monthString)-1;
	
	if (isNaN(month)) {
		return false;
	}

	// Year
	var yearString = dateString.substring(secondSlash+1, dateString.length);
	var year = new Number(yearString);
	
	if (isNaN(year)) {
		return false;
	}
	
	if ( year < 100 )
		year += 2000;

	if (!isValidDate(year, month, day)) {
		return false;
	}
	
	return true;
}