//
var calendars = [];

// Constructor
function calendar (str_date, obj_control, obj_control_month, obj_control_day, obj_control_year, str_min_date, str_max_date) {

	this.popup = cal_popup;

	this.id = calendars.length;
	calendars[this.id] = this;

	if (!obj_control)
		return alert("Form element specified can't be found in the document.");
	this.control_obj = obj_control;
		if (!obj_control_month)
		return alert("Month element specified can't be found in the document.");
	this.control_month_obj = obj_control_month		if (!obj_control_day)
		return alert("Day element specified can't be found in the document.");
	this.control_day_obj = obj_control_day		if (!obj_control_year)
		return alert("Year element specified can't be found in the document.");
	this.control_year_obj = obj_control_year	
	var dt_params = (str_date ? cal_parse_date(str_date) : cal_date_only());
	
	var re_num = /^\-?\d+$/;
	if (str_min_date != null)
		this.min_date = (re_num.exec(str_min_date)
			? new Date (dt_params.valueOf() - new Number(str_min_date * 864e5))
			: cal_parse_date(str_min_date)
		).valueOf();
	if (str_max_date != null)
		this.max_date = (re_num.exec(str_max_date)
			? new Date (dt_params.valueOf() + new Number(str_max_date * 864e5))
			: cal_parse_date(str_max_date)
		).valueOf();

	this.dt_current = dt_params;}

function cal_popup (num_datetime, b_end) {
	if (num_datetime)
		this.dt_current = new Date(num_datetime);
	else if (this.control_obj.value)
		this.dt_current = cal_parse_date(this.control_obj.value);	
	this.control_obj.value = cal_generate_date(this.dt_current);
	this.control_month_obj.selectedIndex = this.dt_current.getMonth()	this.control_day_obj.selectedIndex	= this.dt_current.getDate()-1	this.control_year_obj.selectedIndex = this.dt_current.getFullYear() - this.control_year_obj.options[0].text
		if (b_end) return;
		
	var obj_calwindow = window.open(
		'/calendar.asp?datetime='
		+ this.dt_current.valueOf()
		+ '&id=' + this.id, 'Calendar',
		'width=225,height=172,status=no,resizable=no,top=200,'
		+'left=200,dependent=yes,alwaysRaised=yes'
	);
	obj_calwindow.opener = window;
	obj_calwindow.focus();
}

function cal_date_only (dt_datetime) {
	if (!dt_datetime)
		dt_datetime = new Date();
	dt_datetime.setHours(0);
	dt_datetime.setMinutes(0);
	dt_datetime.setSeconds(0);
	dt_datetime.setMilliseconds(0);
	return dt_datetime;
}function validate (dt_datetime, b_silent) {

	var max_date = new Date (obj_caller.max_date);
	var min_date = new Date (obj_caller.min_date);
	
	if (obj_caller.max_date && dt_datetime > max_date) {
		if (b_silent) return false;
		if (LOG_SHOWERROR) alert ('Sorry, dates after ' + window.opener.cal_generate_date(max_date) + ' are not allowed.');
		return (LOG_SETLIMIT ? max_date : dt_current); 
	}
	if (obj_caller.min_date && dt_datetime < min_date) {
		if (b_silent) return false;
		if (LOG_SHOWERROR) alert ('Sorry, dates before ' + window.opener.cal_generate_date(min_date) + ' are not allowed.');
		//return (LOG_SETLIMIT ? new min_date : dt_current); 		return (LOG_SETLIMIT ? min_date : dt_current); 
	}
	// more validation can be added here
	return dt_datetime;
}
