function isProperDate(argDate) {
	var tmpDay = getDay(argDate)
	var tmpMon = getMonth(argDate)
	var tmpYear = getYear(argDate)

	return isProperDay(tmpDay, tmpMon, tmpYear) && isProperMonth(tmpMon) && isProperYear(tmpYear)
}

function isWhiteSpace(argWhiteSpace) {
	argWs = argWhiteSpace.toString()

	for (var intI=0; intI < argWs.length; intI++)
		if (argWs.charAt(intI) != ' ' && argWs.charAt(intI) != '\t')
			return false

	return true
}

function isLeapYear(argYear) {
	return ((argYear % 4 == 0) && (argYear % 100 != 0)) || (argYear % 400 == 0)
}

function daysInMonth(argMonth, argYear) {
	switch (Number(argMonth)) {
		case 1:		// Jan
		case 3:		// Mar
		case 5:		// May
		case 7:		// Jul
		case 8:		// Aug
		case 10:		// Oct
		case 12:		// Dec
			return 31;
			break;

		case 4:		// Apr
		case 6:		// Jun
		case 9:		// Sep
		case 11:		// Nov
			return 30;
			break;

		case 2:		// Feb
			if (isLeapYear(argYear))
				return 29
			else
				return 28
			break;

		default:
			return 0;
	}
}

function getDateSeparator(argDate) {
	// Are there invalid separators?
	if ((argDate.indexOf('-') > 0) && (argDate.indexOf('/') > 0))
		return ' '

	if (argDate.indexOf('-') > 0)
		return '-'
	else
		if (argDate.indexOf('/') > 0)
			return '/'
		else
			return ' '
}

function getYear(argDate) {
	var dateSep = getDateSeparator(argDate)

	if (dateSep == ' ')
		return 0

	if(argDate.split(dateSep).length == 3)
		return argDate.split(dateSep)[2]
	else
		return 0
}

function getDay(argDate) {
	var dateSep = getDateSeparator(argDate)

	if (dateSep == ' ')
		return 0

	if(argDate.split(dateSep).length == 3)
		return argDate.split(dateSep)[0]
	else
		return 0
}

function getMonth(argDate) {
	var dateSep = getDateSeparator(argDate)

	if (dateSep == ' ')
		return 0

	if(argDate.split(dateSep).length == 3)
		return argDate.split(dateSep)[1]
	else
		return 0
}

function isProperDay(argDay, argMonth, argYear) {
	if ((isWhiteSpace(argDay)) || (argDay == 0))
		return false

	if ((argDay > 0) && (argDay < daysInMonth(argMonth, argYear) + 1))
		return true
	else
		return false
}

function isProperMonth(argMonth) {
	if ((isWhiteSpace(argMonth)) || (argMonth == 0))
		return false

	if ((argMonth > 0) && (argMonth < 13))
		return true
	else
		return false
}

//------------------------------------------------------------------------------------
//           Function to tell whether the given Year is a valid one
//           Remove comments to accept yy and yyyy formats.
//------------------------------------------------------------------------------------
function isProperYear(argYear) {
	if ((isWhiteSpace(argYear)) || (argYear.toString().length > 4) || (argYear.toString().length == 3))
		return false

	switch (argYear.toString().length) {
		/*
		case 1:
			if (argYear >=0 && argYear < 10)
				return true
			else
				return false

		case 2:
			if (argYear >=0 && argYear < 100)
				return true
			else
				return false
	    */
		case 4:
			if ((argYear >= 1900) && (argYear < 3000))
				return true
			else
				return false

		default:
			return false
	}
}

// Deze functie geeft een datumobject terug van de meegegeven parameter
function setDutchDate(date)
{
	var dateArray = date.split("-");
	
	return new Date(Date.UTC(parseInt(dateArray[2]), parseInt(parseInt(dateArray[1].replace(/[0](\d)/, "$1"))-1), parseInt(dateArray[0].replace(/[0](\d)/, "$1")), 0, 0, 0));
}

function setOnlyTime(time) // in seconds
{
	var timeArray = time.split(":");
	var hour = timeArray[0].replace(/[0](\d)/, "$1");
	var min = timeArray[1].replace(/[0](\d)/, "$1");
	var sec = timeArray[2].replace(/[0](\d)/, "$1");
		
	return (parseInt(hour) * 60 * 60) + (parseInt(min) * 60) + (parseInt(sec));
}

// functie om te kijken of een bepaalde datum voor of na een andere datum ligt. De parameters zijn de
// strings met de datums er in. Er wordt gecheckt of de eerste parameter ouder is dan de tweede.
function isBefore(date1, date2)
{
	var date1 = setDutchDate(date1);
	var date2 = setDutchDate(date2);

	var date1Millis = date1.getTime();
	var date2Millis = date2.getTime();

	return date1Millis < date2Millis;
}

function isAfter(date1, date2)
{
	var date1 = setDutchDate(date1);
	var date2 = setDutchDate(date2);

	var date1Millis = date1.getTime();
	var date2Millis = date2.getTime();

	return date1Millis > date2Millis;
}

// Functie om te kijken of een datum op of tussen een begin en een eventuele einddatum valt.
function dateIsInRange(date1, date2, date3)
{
	// date1 valt op of tussen date2 en date3? date2<=date1<=date3
	var date1 = setDutchDate(date1);
	var date2 = setDutchDate(date2);

	var date1Millis = date1.getTime();
	var date2Millis = date2.getTime();

	if (date3 != null) 
	{
		var date3 = setDutchDate(date3);
		var date3Millis = date3.getTime();
		
		return (date2Millis <= date1Millis && date1Millis <= date3Millis);
	}
	else return date2Millis <= date1Millis;
}

//functie om het verschil in dagen tussen twee datumvelden te berekenen
//Parameters zijn de id's van de velden
function getDateDifference(ingdat, enddat)
{
	var date1 = setDutchDate(document.getElementById(ingdat).value);
	var date2 = setDutchDate(document.getElementById(enddat).value);

	return (Date.parse(date2) - Date.parse(date1))/86400000; // 86400000 is het aantal milliseconden in een dag
}

function now()
{
	return new Date();
}

function yesterday()
{
	return new Date(now().getTime() - (1000 * 60 * 60 * 24));
}

function tomorrow()
{
	return new Date(now().getTime() + (1000 * 60 * 60 * 24));
}

function addDays(date, nDays)
{
	var date1 = setDutchDate(date);
	date1.setDate(date1.getDate() + nDays);
	return toDutchDate(date1);
}

function toDutchDate(d)
{
	var y	= d.getYear();
	var m	= d.getMonth() + 1;
	var d 	= d.getDate();
	
	if (m < 10) m = "0" + m;
	if (d < 10) d = "0" + d;
	
	return d + "-" + m + "-" + y;
}