/*
	Written by David Hennings, Laserbase Computers, UK
	date_routines.php
	22/05/2006	v0		Development version.
	01/06/2006	v0.1	"or" changed to "||"
	08/10/2006	v0.3	Cosmetic changes.
	
	10/10/2006	v1		Live version.
	13/10/2006	v1.2	Fix date separator bug.
*/

<!-- Start
function string_is_numeric(string) {
	var digits = "0123456789";
	var ret_val = true;
	for (i = 0; i < string.length; i++) {
		if (digits.indexOf(string.substr(i,1)) < 0) {
			ret_val = false;
			break;
		}
	}
	return ret_val;
}
function pad(string) {
	if ((string + "").length == 1)	{
		string = "0" + string;
	}
	return string;
}
function date_is_valid(date_value) {
	var date = 0;
	var date_parts = new Array(3);
	var days_in_month = "**312831303130313130313031"
	var digits = "0123456789";
	var i = 0;
	var leap_day = 0;
	var month = 0;
	var ret_val = true;
	var separator = "";
	var separators = "/-. ";
	var year = 0;
	
	if (date_value.length == 0) {
		ret_val = true;
	}
	else {
		// Find the first non-numeric character (if any) and check that it is a valid separator.
		for (i = 0; i < date_value.length; i++) {
			character = date_value.substr(i, 1);
			if (digits.indexOf(character) < 0) {
				separator = character;
				break;
			}
			separator = "";
		}
		if (separator == "") {
			if ((date_value.length == 6) || (date_value.length == 8)) {
				date_parts[0] = date_value.substr(0, 2);
				date_parts[1] = date_value.substr(2, 2);
				date_parts[2] = date_value.substr(4, 4);
			}
			else {
				ret_val = false;
			}
		}
		else if (separators.indexOf(separator) < 0) {
			ret_val = false;
		}
		else {
			date_parts = date_value.split(separator);
			if (date_parts.length != 3) {
				ret_val = false;
			}
		}
		if (ret_val) {
			date = date_parts[0];
			month = date_parts[1];
			year = date_parts[2];
			if (!(string_is_numeric(date) && string_is_numeric(month) && string_is_numeric(year)))  {
				ret_val = false;
			}
			else {
				date = date * 1;
				month = month * 1;
				year = year * 1;
				// 1920 is the pivot year.
				if (year < 20) {
					year = 2000 + year;
				}
				else if (year < 100) {
					year = 1900 + year;
				}
				// check leap year.
				leap_day = ((month == 2) && (year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 1 : 0; 
			
				// Validate month
				if ((month < 1) || (month > 12)) {
					ret_val = false;
				}
				else if (date < 1 || date > days_in_month.substr(month*2,2) * 1 + leap_day) {
					ret_val = false;
				}
			}
		}
	}
	return ret_val;
} // end of function date_is_valid

function sql_date(date_value) {
	// converts a standard date in the format dd/mm/yyyy to to yyyy-mm-dd
	separators = "/-. ";
	for (i = 0; i < separators.length; i++) {
		separator = separators.substr(i, 1);
		if (date_value.indexOf(separator) > -1) {
			break;
		}
		separator = "";
	}
	if (separator == "") {
		separator = "/";
		if (date_value.length == 6) {
			date_value = date_value.substr(0, 2) + "/" + date_value.substr(2, 2) + "/" + date_value.substr(4, 2);
		}
		else {
			date_value = date_value.substr(0, 2) + "/" + date_value.substr(2, 2) + "/" + date_value.substr(4, 4);
		}
	}
	date_parts = date_value.split(separator);
	return date_parts[2] + "-" + date_parts[1] + "-" + date_parts[0];
}
//  End -->
