$(function() {
	// auto fillers
	$(".stationFinder").stationfinder({
		dataFile: "/scripts/station-finder/",
		useMatch: false
	});
	
	$(".datepicker").datepicker({ 
		dateFormat: 'dd/mm/yy',
		minDate: new Date(),
		onSelect: function(dateText, inst) {
			var elemId = $(this).attr("id");
			var dateArr = dateText.split("/");
			var month = dateArr[1]-1;
			if (month < 10) {
				month = "0" + month;
			}

			if (elemId == "out") {
				$("#return").datepicker("option", "minDate", new Date(dateArr[2], month, dateArr[0]));
			} else if (elemId == "return") {
				$("#out").datepicker("option", "maxDate", new Date(dateArr[2], month, dateArr[0]));
			}
		}
	});
	
	// return / one way
	$("#oneWay").click(function() { oneWay(this.checked); });
	oneWay($("#oneWay")[0].checked); // Run it onload so if it is checked it hides
	
	// fixed / flexidate
	/*$("input.fixedFlexiDate").click(function() { flexiDate(this.value); });
	$("input.fixedFlexiDate").each( function() { if (this.checked) { flexiDate(this.value); return false; } } );*/
	$("input#openReturn").click(openReturn);
	$("input#openReturn").load(openReturn);
	
	// date changers
	$(".datechanger").datechanger();
});

$(document).ready(function() {
	setReturnDate();
	$('.outboundJourney').change(function() {
		var outdate = $("#out").val();
		var regex = /^\d{1,2}\/\d{1,2}\/\d{4}$/; 
		if (!outdate.match(regex)) {
			var currentDate = new Date();
			var currentDay = currentDate.getDate();
			var currentMonth = (currentDate.getMonth() + 1);
			var currentYear = currentDate.getFullYear();
			if (currentMonth < 10) {
				currentMonth = '0' + currentMonth;
			}
			if (currentDay < 10) {
				currentDay= '0' + currentDay;
			}
			outdate = currentDay + '/' + currentMonth + '/' + currentYear;
			$("#out").val(outdate);
		} else {
			var dateArr = outdate.split("/");
			alterReturnDate(dateArr[0], dateArr[1], dateArr[2]);
		}
	});
	
	$('#return').click(function() {
		insertReturnDateSet();	
	});
	setOutboundDate();
});

function setOutboundDate() {
	var currentDate = new Date();
	var currentDay = currentDate.getDate();
	var currentMonth = (currentDate.getMonth() + 1);
	var currentYear = currentDate.getFullYear();
	var currentHour = currentDate.getHours();
	var currentMinutes = currentDate.getMinutes();
	var dateArray = new Array();

	var outboundHour = currentHour + 2;
	
	if (outboundHour > 24) {
		outboundHour = outboundHour - 24;
		currentDay = currentDay + 1;
	}
	if (outboundHour < 10) {
		outboundHour = '0' + outboundHour;
	}
	
	$('#outwardHour').val(outboundHour);
	
	dateArray = checkDayAdvance(currentDay, currentMonth, currentYear);
	currentDay = dateArray[0];
	currentMonth = dateArray[1];
	currentYear = dateArray[2];
	
	if (currentMonth < 10) {
		currentMonth = '0' + currentMonth;
	}
	if (currentDay < 10) {
		currentDay= '0' + currentDay;
	}
	var outboundDate = currentDay + '/' + currentMonth + '/' + currentYear;

	$('#out').val(outboundDate);
	
}

function insertReturnDateSet() {
	$('#returnDateSet').val('true');
}

function checkDayAdvance(day, month, year) {
	// check if currentDay is now a new month and possibly new year
	if (month == 2) {
		
		if (year % 4 == 0) { // this is a leap year
			
			if (day > 29) { 
				day = '1';
				month = (month - 0) + 1;
			}
		} else { // not a leap year
			if (day > 28) {
				day = '1';
				month = (month - 0) + 1;
			}
		}

	} else if (month == 4 || month == 6 || month == 9 || month == 11) { // this is either April, June, September or November

		if (day > 30) {
			day = '1';
			month = (month - 0) + 1;
		}
	} else {
		if (day > 31) {
			day = '1';
			month = (month - 0) + 1;
		}
	}
	
	if (month > 12) {
		month = '1';
		year = (year - 0) + 1;
	}

	
	
	var returnArray = new Array(day, month, year);
	return returnArray;
}

function setReturnDate() {	
	var currentDate = new Date();
	var currentDay = currentDate.getDate();
	var currentMonth = (currentDate.getMonth() + 1);
	var currentYear = currentDate.getFullYear();
	var hour = currentDate.getHours();
	var setHour = 0;
	var dateArray = new Array();
	
	if (hour > 0 && hour < 12) {
		setHour = 11;
		$("#returnHour").val('14'); // select the hour drop down as 14
	} else {
		setHour = 14;
		// advance the date by 1 day
		currentDay = currentDay + 1;
	 
		dateArray = checkDayAdvance(currentDay, currentMonth, currentYear);
		currentDay = dateArray[0];
		currentMonth = dateArray[1];
		currentYear = dateArray[2];
		
		$("#returnHour").val('11'); // select the return hour drop down as 11
	}
	


	if (currentMonth < 10) {
		currentMonth = '0' + currentMonth;
	}
	if (currentDay < 10) {
		currentDay= '0' + currentDay;
	}
	var returnDate = currentDay + '/' + currentMonth + '/' + currentYear;

	$('#return').val(returnDate);
	$('#outwardHour').val(setHour);

}



function openReturn() {
	var returnSetElements = $("#returnSet :input[type!='checkbox']");
	if (this.checked) {
		returnSetElements.attr({disabled:"disabled"});
	} else {
		returnSetElements.attr({disabled:""});
	}
}

function alterReturnDate(day, month, year) {

	if ($('#returnDateSet').val() == 'true') {
		return false;
	}; 
	var returnHour;
	var nextDay = false;
	var returnDate = new Array();
	
	// get outbound hour
	var outboundHour = $('#outwardHour').val();
	
	if (outboundHour < 12) {
		returnHour = 14;
		nextDay = false;
	} else {
		returnHour = 11;
		nextDay = true;
	}
	
	if (nextDay == true) {
		day = (day - 0) + 1;
		var dateArray = checkDayAdvance(day, month, year);
		day = dateArray[0];
		month = dateArray[1];
		year = dateArray[2];
	}
	if (month < 10 && month.length != 2) {
		month = '0' + month;
	}
	if (day < 10) {
		day = '0' + day;
	}
	var returnDate = day + '/' + month + '/' + year;

	$("#return").val(returnDate);
	$("#return_date").val(returnDate);
	$("#returnHour").val(returnHour);
}

function oneWay(checked) {
	checked = typeof(checked) == "boolean" ? checked : false;
	
	var returnSet = $("#returnSet");
	if (checked) {
		returnSet.slideUp("fast");
		// disable to fix problem with validation when one-way
                $('#return').attr('disabled', true);
	} else {
		returnSet.slideDown("fast");
	/*	var dateArr = $("#out").val().split("/");
		var outDay = dateArr[0];
		var newDay = parseFloat(outDay) + 1 +"";
		if (newDay.length < 2) { newDay = "0"+ newDay; }
		$("#return").val(newDay +"/"+ dateArr[1] +"/"+ dateArr[2]);
		$("#returnHour").val("11"); */
		$('#return').removeAttr('disabled');

	}

	
	
	/*else {
		returnSet.slideDown("fast");
		// re-enable so blank values can be caught by validation when not one-way
                $('#return').removeAttr('disabled');
	} */
}

function flexiDate(dateType) {
	var returnSetElements = $("#returnSet :input[type!=radio]");
	
	if (dateType == "Open Return") {
		returnSetElements.attr({disabled:"disabled"});
	} else {
		returnSetElements.attr({disabled:""});
	}
}

