// Title: Timestamp picker
// Description: See the demo at url
// URL: http://www.geocities.com/tspicker/
// Version: 1.0.a (Date selector only)
// Date: 12-12-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


/********************************************************************
 * Show Calendar
 * 07/03/2007 dfd		This function has been massively reworked
 *						to allow for the clsDatePicker to use it
 *						properly.
 *						Also the emitted HTML has been organized
 *						and each cell calls a function on the
 *						calendar page, rather than having a very
 *						long series of JavaScript functions inline
 *						in the anchor element.
 *
 *						In the emitted JavaScript, I am using
 *						'getElementsByName'. After rereading the
 *						documentation, I found that it returns
 *						elements that have the specified name OR
 *						the specified ID. Therefore, separate code
 *						to check for ID then name is unnecessary.
 ********************************************************************/
function show_calendar4(str_target, str_datetime, objWindow)
{
	var ts_cellColor		= '';
	var ts_color			= '';

	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;

	var ts_strFont			= " style=\'font-family: tahoma, verdana; font-size: 10pt;\'";
	var ts_strFontSm		= " style=\'font-family: tahoma, verdana; font-size: 9pt;\'";

	var dt_datetime 		= (str_datetime == null || str_datetime == "" ?  new Date() : str2dt4(str_datetime));

	var dt_prev_month 		= new Date(dt_datetime);
	dt_prev_month.setMonth(dt_datetime.getMonth()-1);

	var dt_next_month 		= new Date(dt_datetime);
	dt_next_month.setMonth(dt_datetime.getMonth()+1);

	var dt_firstday 		= new Date(dt_datetime);
	dt_firstday.setDate(1);
	dt_firstday.setDate(1- (7 + dt_firstday.getDay() - n_weekstart) % 7);

	var dt_lastday 			= new Date(dt_next_month);
	dt_lastday.setDate(0);

	var str_buffer		= '';
	str_buffer		   += '<html>\r\n';
	str_buffer		   += '	<head>\r\n';
	str_buffer		   += '		<title>Calendar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</title>\r\n';
	str_buffer		   += '		<style>\r\n';
	str_buffer		   += '			a\r\n';
	str_buffer		   += '			{\r\n';
	str_buffer		   += '				text-decoration: none;\r\n';
	str_buffer		   += '			}\r\n';
	str_buffer		   += '			a:active\r\n';
	str_buffer		   += '			{\r\n';
	str_buffer		   += '				text-decoration: none;\r\n';
	str_buffer		   += '			}\r\n';
	str_buffer		   += '			a:hover\r\n';
	str_buffer		   += '			{\r\n';
	str_buffer		   += '				text-decoration: none;\r\n';
	str_buffer		   += '			}\r\n';
	str_buffer		   += '			a:visited\r\n';
	str_buffer		   += '			{\r\n';
	str_buffer		   += '				text-decoration: none;\r\n';
	str_buffer		   += '			}\r\n';
	str_buffer		   += '		</style>\r\n';
	str_buffer		   += '		<script langauge="JavaScript">\r\n';
	str_buffer		   += '			function putDate(strDate)\r\n';
	str_buffer		   += '			{\r\n';
	str_buffer		   += '				var objParent				= null;\r\n';
	str_buffer		   += '				var objElements				= null;\r\n';
	str_buffer		   += '				var objDate					= null;\r\n';
	str_buffer		   += '\r\n';
	str_buffer		   += '				if (window)\r\n';
	str_buffer		   += '				{\r\n';
	str_buffer		   += '					if (window.opener)\r\n';
	str_buffer		   += '					{\r\n';
	str_buffer		   += '						objDate				= window.opener.' + str_target + ';\r\n';
	str_buffer		   += '						if (!objDate)\r\n';
	str_buffer		   += '						{\r\n';
	str_buffer		   += '							objParent		= window.opener;\r\n';
	str_buffer		   += '							objElements		= objParent.document.getElementsByName("' + str_target + '");\r\n';
	str_buffer		   += '							if (objElements.length > 0)\r\n';
	str_buffer		   += '								objDate		= objElements[0];\r\n';
	str_buffer		   += '						}\r\n';
	str_buffer		   += '						if (objDate)\r\n';
	str_buffer		   += '						{\r\n';
	str_buffer		   += '							objDate.value	= strDate;\r\n';
	str_buffer		   += '							objDate.focus();\r\n';
	str_buffer		   += '							if (typeof(window.opener.fireDataChange) != "undefined")\r\n';
	str_buffer		   += '							{\r\n';
//	str_buffer		   += '								if (objDate.value != strDate)\r\n';
	str_buffer		   += '									window.opener.fireDataChange("' + str_target +  '");\r\n';
	str_buffer		   += '							}\r\n';
	str_buffer		   += '						}\r\n';
	str_buffer		   += '						window.close();\r\n';
	str_buffer		   += '					}\r\n';
	str_buffer		   += '				}\r\n';
	str_buffer		   += '			}\r\n';
	str_buffer		   += '		</script>\r\n';
	str_buffer		   += '	</head>\r\n';
	str_buffer		   += '	<body style="background-color:white; margin:6px;">\r\n';
	str_buffer		   += '		<table class="clsOTable" cellspacing="0" border="0" width="100%">\r\n';
	str_buffer		   += '			<tr>\r\n';
	str_buffer		   += '				<td bgcolor="#4682B4">\r\n';
	str_buffer		   += '					<table cellspacing="1" cellpadding="2" border="0" width="100%">\r\n';
	str_buffer		   += '						<tr>\r\n';
	str_buffer		   += '							<td bgcolor="#4682B4" style="padding-left:3px;">\r\n';
	str_buffer		   += '								<a href="javascript:window.opener.show_calendar4(\'' + str_target + '\', \'' + dt2dtstr4(dt_prev_month) + '\');">';
	str_buffer		   += '<img src="/scripts/tspicker/prev.gif" width="16" height="16" border="0" alt="previous month">';
	str_buffer		   += '</a>\r\n';
	str_buffer		   += '							</td>\r\n';
	str_buffer		   += '							<td bgcolor="#4682B4" colspan="5"><font color="white"' + ts_strFont + '><b>' + arr_months[dt_datetime.getMonth()] + ' ' + dt_datetime.getFullYear() + '</b></font></td>\r\n';
	str_buffer		   += '							<td bgcolor="#4682B4" align="right" style="padding-right:3px;">\r\n';
	str_buffer		   += '								<a href="javascript:window.opener.show_calendar4(\'' + str_target + '\', \'' + dt2dtstr4(dt_next_month) + '\');">';
	str_buffer		   += '<img src="/scripts/tspicker/next.gif" width="16" height="16" border="0" alt="next month">';
	str_buffer		   += '</a>\r\n';
	str_buffer		   += '							</td>\r\n';
	str_buffer		   += '						</tr>\r\n';

	var dt_current_day	= new Date(dt_firstday);

	// print weekdays titles
	str_buffer		   += '						<tr>\r\n';
	for (var n = 0; n < 7; n++)
	{
		str_buffer	   += '							<td bgcolor="#87CEFA" style="padding-left:3px;">';
		str_buffer	   += '<font color="white"' + ts_strFontSm + '>';
		str_buffer	   += week_days[(n_weekstart + n) %7];
		str_buffer	   += '</font>';
		str_buffer	   += '</td>\r\n';
	}
	str_buffer		   += '						</tr>\r\n';

	// print calendar
	while (dt_current_day.getMonth() == dt_datetime.getMonth() || dt_current_day.getMonth() == dt_firstday.getMonth())
	{
		str_buffer	   += '						<tr>\r\n';
		for (var n_current_wday = 0; n_current_wday < 7; n_current_wday++)
		{
			if (dt_current_day.getDate() == dt_datetime.getDate() && dt_current_day.getMonth() == dt_datetime.getMonth())
				ts_cellColor	= '#FFB6C1';			// today or selected day

			else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
				ts_cellColor	= '#DBEAF5';			// weekend

			else
				ts_cellColor	= 'white';				// weekday

			if (dt_current_day.getMonth() == dt_datetime.getMonth())
				ts_color		= "black";				// current month
			else
				ts_color		= "gray";				// prior / next month

			str_buffer += '							<td width="14%" bgcolor="' + ts_cellColor + '" align="right" style="padding-right:3px;">';
			str_buffer += '								<a href="javascript:putDate(\'' + dt2dtstr4(dt_current_day) + '\');">';
			str_buffer += '<font color="' + ts_color + '"' + ts_strFont + '>';
			str_buffer += dt_current_day.getDate()
			str_buffer += '</font>';
			str_buffer += '</a>';
			str_buffer += '</td>\r\n';

			dt_current_day.setDate(dt_current_day.getDate() + 1);
		}
		str_buffer	   += '						</tr>\r\n';
	}

	// print calendar footer
	str_buffer		   += '					</table>\r\n';
	str_buffer		   += '				</td>\r\n';
	str_buffer		   += '			</tr>\r\n';
	str_buffer		   += '		</table>\r\n';
	str_buffer		   += '	</body>\r\n';
	str_buffer		   += '</html>\r\n';


	// show calendar
	var ts_Width	= 270;
	var ts_Height	= 210;
	var ts_Left		= 200;
	var ts_Top		= 200;
	var ts_Chrome	= 24;

	if (typeof(objWindow) != 'undefined')
	{
		ts_Left		= Math.min(objWindow.event.screenX + 12, (objWindow.screen.availWidth - ts_Width - ts_Chrome));
		ts_Top		= Math.min(objWindow.event.screenY + 12, (objWindow.screen.availHeight - ts_Height - ts_Chrome));
	}

	var vWinCal 	= window.open("", "Calendar", "width=" + ts_Width + ",height=" + ts_Height + ",status=no,resizable=no,left=" + ts_Left + ",top=" + ts_Top);

	vWinCal.focus();
	var calc_doc 	= vWinCal.document;
	calc_doc.write(str_buffer);
	calc_doc.close();
}

// datetime parsing and formatting routimes. modify them if you wish other datetime format
function str2dt4 (str_datetime)
{
	var re_date = /^(\d+)\/(\d+)\/(\d+)$/;
	if (!re_date.exec(str_datetime))
		return new Date();
	return (new Date (RegExp.$3, RegExp.$1-1, RegExp.$2));
}

function dt2dtstr4 (dt_datetime)
{
	var dtmDate;
	dtmDate		= dt_datetime;
	return (new String ((dtmDate.getMonth()+1) + "/" + dtmDate.getDate() + "/" + dtmDate.getFullYear()));
}
