// Title: Timestamp picker
// Description: See the demo at url
// URL: http://us.geocities.com/tspicker/
// Script featured on: http://javascriptkit.com/script/script2/timestamp.shtml
// Version: 1.0
// Date: 12-05-2001 (mm-dd-yyyy)
// Author: Denis Gritcyuk <denis@softcomplex.com>; <tspicker@yahoo.com>
// Notes: Permission given to use this script in any kind of applications if
//    header lines are left unchanged. Feel free to contact the author
//    for feature requests and/or donations

// Substantially hacked up to support select lists 4/20/2002.

function cal_get_selected(select) {
	return select.options[select.selectedIndex].value;
}

function cal_set_selected(select, value) {
	for (var i = 0; i < select.options.length; i++) {
		if (select.options[i].value == value) {
			select.options[i].selected = true;
			break;
		}
	}
}

function cal_set_date(name, key, s) {
	var d = cal_s2d(s);

	var mm = d.getMonth();
	var dd = d.getDate();
	var yy = d.getYear();

	cal_set_selected(document.forms[name].elements[key+'mm'], mm);
	cal_set_selected(document.forms[name].elements[key+'dd'], dd);
	cal_set_selected(document.forms[name].elements[key+'yy'], yy);
}

function cal_get_date(name, key) {
	var mm = cal_get_selected(document.forms[name].elements[key+'mm']);
	var dd = cal_get_selected(document.forms[name].elements[key+'dd']);
	var yy = cal_get_selected(document.forms[name].elements[key+'yy']);

	return (parseInt(mm) + 1)+'-'+dd+'-'+yy;
}

function calendar(name, key) {
	show_calendar(name, key, cal_get_date(name, key));
}

function show_calendar(name, key, s) {
	var arr_months = ["January", "February", "March", "April", "May", "June",
		"July", "August", "September", "October", "November", "December"];
	var week_days = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
	var n_weekstart = 0; // day week starts from (normally 0 or 1)

	var d = (s == null || s == "" ? new Date() : cal_s2d(s));

	var prevMonth = new Date(d);
	prevMonth.setMonth(d.getMonth()-1);

	var nextMonth = new Date(d);
	nextMonth.setMonth(d.getMonth()+1);

	var firstDay = new Date(d);
	firstDay.setDate(1);
	firstDay.setDate(1-(7+firstDay.getDay()-n_weekstart)%7);

	var lastDay = new Date(nextMonth);
	lastDay.setDate(0);
	
	// calendar header
	var str = new String ("<html><head><title>Calendar</title>"+
		"</head><body bgcolor=White>"+
		"<table class=clsOTable cellspacing=0 border=0 width=100%>"+
		"<tr><td bgcolor=#4682B4>"+
		"<table cellspacing=1 cellpadding=3 border=0 width=100%>"+
		"<tr><td bgcolor=#4682B4>"+
		"<a href=\"javascript:window.opener.show_calendar('"+
		name+"', '"+key+"', '"+cal_d2s(prevMonth)+"');\">"+
		"<img src=/images/prev.gif width=16 height=16 border=0"+
		" alt=\"previous month\"></a></td>"+
		"<td bgcolor=#4682B4 colspan=5>"+
		"<font color=white face=\"tahoma, verdana\" size=2>"+
		arr_months[d.getMonth()]+" "+d.getFullYear()+
		"</font></td>"+
		"<td bgcolor=#4682B4 align=right>"+
		"<a href=\"javascript:window.opener.show_calendar('"+
		name+"', '"+key+"', '"+cal_d2s(nextMonth)+"');\">"+
		"<img src=/images/next.gif width=16 height=16 border=0"+
		" alt=\"next month\"></a></td></tr>"
	);

	var dt_current_day = new Date(firstDay);

	// weekdays titles
	str += "<tr>";
	for (var n=0; n<7; n++)
		str += "<td bgcolor=#87CEFA>"+
			"<font color=white face=\"tahoma, verdana\" size=2>"+
			week_days[(n_weekstart+n)%7]+"</font></td>";

	// calendar table
	str += "</tr>";
	while (dt_current_day.getMonth() == d.getMonth() ||
		dt_current_day.getMonth() == firstDay.getMonth()) {

		// row heder
		str += "<tr>";
		for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
			if (dt_current_day.getDate() == d.getDate() &&
				dt_current_day.getMonth() == d.getMonth())
				// current date
				str += "<td bgcolor=#FFB6C1 align=right>";
			else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
				// weekend days
				str += "<td bgcolor=#DBEAF5 align=right>";
			else
				// working days of current month
				str += "<td bgcolor=white align=right>";

			if (dt_current_day.getMonth() == d.getMonth())
				// days of current month
				str += "<a href=\"javascript:window.opener.cal_set_date('"+
					name+"', '"+key+"', '"+cal_d2s(dt_current_day)+
					"'); window.close();\">"+
					"<font color=black face=\"tahoma, verdana\" size=2>";
			else 
				// days of other months
				str += "<a href=\"javascript:window.opener.cal_set_date('"+
					name+"', '"+key+"', '"+cal_d2s(dt_current_day)+
					"'); window.close();\">"+
					"<font color=gray face=\"tahoma, verdana\" size=2>";
			str += dt_current_day.getDate()+"</font></a></td>";
			dt_current_day.setDate(dt_current_day.getDate()+1);
		}

		// row footer
		str += "</tr>";
	}

	// calendar footer
	str += "</body></html>";

	var win = window.open("", "Calendar", 
		"width=200,height=200,status=no,resizable=yes,top=200,left=200");
	win.opener = self;

	var doc = win.document;
	doc.write(str);
	doc.close();
}

function cal_s2d(s) {
	var re = /^(\d+)\-(\d+)\-(\d+)$/;
	if (!re.exec(s))
		return alert("Invalid Datetime format: "+s);
	return new Date (RegExp.$3, RegExp.$1-1, RegExp.$2);
}

function cal_d2s(d) {
	return new String((d.getMonth()+1)+"-"+d.getDate()+"-"+d.getFullYear());
}
