function validateRoutes() {
	
	log.debug('validating flight selected');
	
	var isValid = validateAirports() && validateDates() && validatePassengerNumbers();
	
	log.info('route validation is ' + isValid);
	
	return isValid;
	
}

function validateAirports(){
	var departure = $F('departureSelect');
	var destination = $F('destinationSelect');
	if(departure == ""){
		alert(flightStrings.requiredFieldStr + flightStrings.departureAirportStr);
		return false;
	}
	if(destination == ""){
		alert(flightStrings.requiredFieldStr + flightStrings.destinationAirportStr);
		return false;
	}
	return true;
	
}

function validatePassengerNumbers() {
	
	log.debug('checking passenger numbers');
	
	var adultElement = $('numberOfAdults');
	var childElement = $('numberOfChildren');
	var infantElement = $('numberOfInfants');
	
	// Reset index previously chosen
	adultIndex = adultElement.selectedIndex ? adultElement.options[adultElement.selectedIndex].value : adultElement.value;
	childIndex = childElement.selectedIndex ? childElement.options[childElement.selectedIndex].value : childElement.value;
	infantIndex = infantElement.selectedIndex ? infantElement.options[infantElement.selectedIndex].value : infantElement.value;
	log.debug('adultIndex ' + adultIndex);
	log.debug('childIndex ' + childIndex);
	// if there are children but no adults
	if (adultIndex < 1) {
		if(childIndex > 0){
			log.debug('unaccompanied minor detected');
			// show a message
			alert(flightStrings.unmin);
		}else{
			log.debug('No passengers selected');
			alert(flightStrings.invalidNumAdults);	
		}
		return false;
	}
	
	return true;
	
}

function validateDates() {
	
	var departureDateSting = $F('departureDate');
	var returnDateString = $F('returnDate');
	
	if (departureDateSting == 'dd/mm/yyyy') {
		if($('departureDateDay')){
			if($('departureDateDay').selectedIndex == 0){
				alert(flightStrings.requiredFieldStr + flightStrings.departureDayStr);
				return false;
			}
		}
		alert(flightStrings.requiredFieldStr + flightStrings.departureMonthStr);
		return false;
    }

	var selectedMonth = departureDateSting.substring(3,5);
	var leapYear = (departureDateSting.substring(6,10) % 4 == 0);
	var febDays = leapYear ? 29 : 28;
	var depDay = departureDateSting.substring(0,2); 
	if (selectedMonth == '02') {
		if (depDay > febDays) {
			alert(flightStrings.thereAreOnly + febDays
					+ flightStrings.daysInMonthStr + flightStrings.months[1]
					+ flightStrings.amendDepDate);
			return false;
		}
	} else if ((selectedMonth == '04') || (selectedMonth == '06')
			|| (selectedMonth == '09') || (selectedMonth == '11')) {
		if (depDay > 30) {
			alert(flightStrings.thereAreOnly + '30'
					+ flightStrings.daysInMonthStr
					+ flightStrings.months[selectedMonth - 1]
					+ flightStrings.amendDepDate);
			return false;
		}
	}		
	
	departureDate = getDate(departureDateSting);
	if(!departureDate){
		if($('departureDateDay')){
			if($('departureDateDay').selectedIndex == 0){
				alert(flightStrings.requiredFieldStr + flightStrings.departureDayStr);
				return false;
			}
		}
		alert(flightStrings.requiredFieldStr + flightStrings.departureMonthStr);
		return false;
	}
	
	if(departureDate<truncateDate(new Date())){
		alert(flightStrings.earliest + flightStrings.reservations);
		return false;
	}
	
	if(departureDate<truncateDate(calendarStartDate)){
		alert(flightStrings.invalidDepartureDate + formatDate(calendarStartDate));
		return false;
	}
	
	if(departureDate>truncateDate(calendarEndDate)){
		alert(flightStrings.flyingAfterSchedule + formatDate(calendarEndDate));
		return false;
	}
	
	if (returnDateString != 'dd/mm/yyyy') {
		returnDate = getDate(returnDateString);
		if(returnDate && returnDate<departureDate){
			alert(flightStrings.returnDateInvalid);
			return false;
		}
		if(returnDate && returnDate>truncateDate(calendarEndDate)){
			alert(flightStrings.flyingAfterSchedule + formatDate(calendarEndDate));
			return false;
		}
		if(returnDate && formatDate(returnDate) == formatDate(departureDate)){
			alert(flightStrings.dayReturn);
		}
		
		var selectedMonth = returnDateString.substring(3,5);
		var leapYear = (returnDateString.substring(6,10) % 4 == 0);
		var febDays = leapYear ? 29 : 28;
		var depDay = returnDateString.substring(0,2); 
		if (selectedMonth == '02') {
			if (depDay > febDays) {
				alert(flightStrings.thereAreOnly + febDays
						+ flightStrings.daysInMonthStr + flightStrings.months[1]
						+ flightStrings.amendRetDate);
				return false;
			}
		} else if ((selectedMonth == '04') || (selectedMonth == '06')
				|| (selectedMonth == '09') || (selectedMonth == '11')) {
			if (depDay > 30) {
				alert(flightStrings.thereAreOnly + '30'
						+ flightStrings.daysInMonthStr
						+ flightStrings.months[selectedMonth - 1]
						+ flightStrings.amendRetDate);
				return false;
			}
		}	
    }else{
    	$('returnDate').value = '';
    }
	
	return true;
}

function getDate(string){
	var dateParts = string.split("\/");
	if(dateParts && dateParts.length == 3){
		var day = dateParts[0];
		var month = dateParts[1] - 1;
		var year = dateParts[2];
		return new Date(year,month,day);
	}
	return null;
}

function formatDate(date){
	return date.getDate() + '/' + (date.getMonth()+1) + '/' + date.getFullYear();
}