var currentDate = new Date(); // the current date: now
var minDate; 
var newDepartDate = true; 

/* ********** ********** ********* ********** */
/* ********** JAVASCRIPT FUNCTIONS ********** */
/* ********** ********** ********* ********** */

/*
 * when date or time changes (depart or return) 
 * or when page is opened
 * or when return trip is selected
 * - check if everything is okay
 * - no dates in the past
 * - no return date or time before the depart time
 */
function checkDatetime(message)
{
	var warning = '';
	// reset warning messages
	$("div#msgTimeDepart").html(""); 
	$("div#msgTimeReturn").html("");
	
	debugText = '';
	currentDate = new Date(); // the current date: now
	currentUnix = toUnixtime(currentDate);
	currentUnix += 3600;
	currentDate = new Date(currentUnix*1000);
	
	/*
	 * Get the departure time from the calendar
	 * Convert it to Unix time format
	 * And add the selected hours and minutes to it
	 */
	departDate = $('#vertrekkalender').datepicker('getDate'); // uren staan op nul!
	
	if (departDate == null)
	{
		departUnix = currentUnix;
		departDate = new Date(departUnix*1000);
		departDate.setMinutes(0);
		departDate.setSeconds(0);
		departUnix = toUnixtime(departDate);
	}
	else
	{
		departUnix = toUnixtime(departDate); // dit zet uren naar 00:00
		
		/*
		 * Get the selected time and add it to the date value 
		 * Now you have the true selected datetime
		 */
		departHour = $('#offerte-vertrekuur').val();
		departMinute = $('#offerte-vertrekminuut').val();
		departUnix = parseInt(departUnix) + parseInt(departMinute)*60 + parseInt(departHour)*3600;
		departDate = new Date(departUnix*1000);
		departDate.setSeconds(0);
		departUnix = toUnixtime(departDate);
	}
	
	departDate = new Date(departUnix*1000);
	
	/*
	 * test: dateCurrent < dateDepart
	 */
	if (currentUnix > departUnix)
	{
//		$("div#msgTimeDepart").html("<div>" + warningDepart + "</div>"); 

		departDate = currentDate;
		departUnix = toUnixtime(departDate);
		
		departUnix = resetMinute(departUnix);
		departDate = new Date(departUnix*1000);
		
		departHour = departDate.getHours();
		$('#offerte-vertrekuur').val(departHour);
	}
	
	/*
	 * Get the return time from the calendar
	 * Convert it to Unix time format
	 * And add the selected hours and minutes to it
	 */
	returntrip = $("#offerte-retour").val();
	
	returnDate = $('#terugkalender').datepicker('getDate');
	
	if (returnDate != null)
	{
		returnUnix = toUnixtime(returnDate);
		returnHour = $('#offerte-vertrektijdteruguur').val();
		returnMinute = $('#offerte-vertrektijdterugminuut').val();
		returnUnix += parseInt(returnMinute)*60 + parseInt(returnHour)*3600;
		returnDate = new Date(returnUnix*1000);
	}
	
/* ********** ****** ******** ********** 
 * ********** RETURN DATETIME **********
 * ********** ****** ******** ********** */
	
	if (returntrip == 't')
	{
		debug("RETURNTRIP: " + returntrip);
		if (returnDate == null)
		{
			/*
			 * Create return date now
			 * Set the return datetime to the depart datetime
			 */
			returnUnix = departUnix + 3600;
			returnDate = new Date(returnUnix*1000);
			returnHour = departDate.getHours();
			$('#offerte-vertrektijdteruguur').val(returnHour);
		}
		else
		{
			/*
			 * The return time is earlier than the depart time
			 * Reset the return time to the depart time
			 */
			if (departUnix + 3600 > returnUnix)
			{
				departDate = new Date(departUnix*1000);
				returnDate = new Date(returnUnix*1000);
				departHour = departDate.getHours();
				returnHour = returnDate.getHours();
				if (departHour == returnHour)
				{
					returnUnix = departUnix + 3600;
					returnDate = new Date(returnUnix*1000);
					returnDate.setMinutes(0);
					returnUnix = toUnixtime(returnDate);
				}
			}
		}
		returnDate = new Date(returnUnix*1000);
		
		$("#terugkalender").datepicker( "setDate" , returnDate);
		$("#terugkalender").datepicker('option', 'minDate', departDate);
		
	}
	else
	{
		returnUnix = null;
		returnDate = null;
	}

	/*
	 * Display dates
	 */
	setDatetime(departUnix, "#dateDepart", "#offerte-vertrekuur", "#offerte-vertrekminuut");
	setDatetime(returnUnix, "#dateReturn", "#offerte-vertrektijdteruguur", "#offerte-vertrektijdterugminuut");
	
	$("#vertrekkalender").datepicker( "setDate" , departDate);
	
	debug("DEPARTDATE: " + departDate);
	debug("RETURNDATE: " + returnDate);
	
//	$('div#debug').html(debugText); // display debug info

}

function setDatetime(unixtime, display, hour, minutes)
{
	var d = new Date(unixtime*1000); // create a date object
	var h = d.getHours(); 
	
	$(display).html(d.toLocaleString()); // display this date as text
	$(display+"Check").val(d.toLocaleString()); // save the date in a hidden fiel for server check
	$(hour).val(h); // set the hour dropdown to the proper hour
	
//	var m = d.getMinutes();
//	var mdiff = m % 15;
//	m -= mdiff;
//	$(minutes).val(m);
//	alert(minutes + ' = ' + m);
}

function resetMinute(dateUnix)
{
	d = new Date(dateUnix*1000);
	dMinutes = d.getMinutes();
	if (dMinutes > 0)
	{
		d.setMinutes(0);
		dateUnix = toUnixtime(d);
		dateUnix += 3600; // add one hour
	}
	
	return dateUnix;
}

var debugText = '';
var nl = ' <br /> ';

function debug(text)
{
	debugText += text + nl;
}

function toUnixtime(timestamp)
{
	return parseInt(timestamp.getTime() / 1000);
}

/**
 * Show the selected date above the calendar 
 */
function showDate(xpath, date)
{
	$(xpath).text('Selected date: ' + $(date).val());
}

/* ********** ****** ***** ********** */
/* ********** JQUERY STUFF ********** */
/* ********** ****** ***** ********** */

/*
 * JQuery document-ready at the end of this file
 * So all other scripts and functions work
 */
$(document).ready(function() 
{
	$("select.check").change(function(){ 
		checkDatetime("select.check");
	});

	$("#vertrekkalender")
		.datepicker({
						altField: '#offerte-vertrekdatum', 
						minDate: '0',
						onSelect: function(dateText, inst)
						{
							var minDate = new Date(dateText);
							$("#terugkalender").datepicker('option', 'minDate', minDate);
							checkDatetime("#vertrekkalender");
						}
					})
		.datepicker( "setDate" , taxi_depart);
	
	minRetourDate = $('#vertrekkalender').datepicker('getDate');
    
	$("#terugkalender")
		.datepicker({
						altField: '#offerte-retourdatum', 
						minDate: minRetourDate,
						onSelect: function()
						{
							checkDatetime("#terugkalender");
						}
					})
		.datepicker( "setDate" , taxi_return);
	
	/*
	 * Check if the selected datetime is in the past
	 * Update the current time when the form is submitted
	 * If the user has completed the form a while ago without submitting
	 * this still allows for a server side check of the time
	 */
	var currentTime = new Date();
	var currentMSecs = currentTime.getTime(); 
	$("#offerte_formulier").submit(function() {
		$("#dateCurrentCheck").val(currentTime.toLocaleString());
	});
	
	/* QUOTE: expand/collapse return trip */
    $("#offerte-retour").change(function(){ 
		checkDatetime("#offerte-retour");
		$(".retour").toggle();
	});
    
	$("#offerte-vertrekdatum").hide();
	
	/*
	 * Check datetime when opening the page
	 * After an incomplete request, do not reset the time
	 */
	if ($("#dateDepartCheck").length < 2)
	{
		checkDatetime("#offerte-vertrekdatum");
	}
	
});

