// Title: Timestamp picker
// Description: See the demo at url
// URL: http://www.softcomplex.com/products/tigra_calendar/
// Version: 1.0
// Date: 12-05-2001 (mm-dd-yyyy)
// Author: Denis Gritcyuk <denis@softcomplex.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

function show_calendar(str_target, str_datetime) {
	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 = 1; // day week starts from (normally 0 or 1)

	var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt(str_datetime));
	var dt_prev_month = new Date(dt_datetime);
	dt_prev_month.setMonth(dt_datetime.getMonth()-1);
	if (dt_datetime.getMonth()%12 != (dt_prev_month.getMonth()+1)%12) {
		dt_prev_month.setMonth(dt_datetime.getMonth());
		dt_prev_month.setDate(0);
	}
	var dt_next_month = new Date(dt_datetime);
	dt_next_month.setMonth(dt_datetime.getMonth()+1);
	if ((dt_datetime.getMonth() + 1)%12 != dt_next_month.getMonth()%12)
		dt_next_month.setDate(0);
	
	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);
	
	// html generation (feel free to tune it for your particular application)
	// print calendar header
	var str_buffer = new String (
		"<html>\n"+
		"<head>\n"+
		"	<title>Calendar</title>\n"+
		"</head>\n"+
		"<BODY bgColor=#0000e0>\n"+ " 
<TABLE class='\"clsOTable\"' cellSpacing='\"0\"' width='\"100%\"' 
  border='\"0\"'>\n"+ " 
  <TBODY>
  <TR>
    <TD bgColor=#006840>\n"+ " 
      <TABLE cellSpacing='\"1\"' cellPadding='\"3\"' width='\"100%\"' 
      border='\"0\"'>\n"+ " 
        <TBODY>
        <TR>\n 
          <TD bgColor=#006840><A href="\&quot;javascript:window.opener.show_calendar('&quot;+" str_target+??, ??+ dt2dtstr(dt_prev_month)+??+document.cal.time.value);\? javascript:window.opener.show_calendar(??+?>"+ "<IMG height='\"16\"' alt='\"previous' src='\"prev.gif\"' width='\"16\"' border='\"0\""+' prev.gif\??? ? month\?></A></TD>\n"+ " 
          <TD bgColor=#006840 colSpan='\"5\"' DESIGNTIMEURL="\" prev.gif\??>"+ 
            "<FONT face='\"tahoma,' color=#0000e0 size='\"2\"' verdana\?>" 
            +arr_months[dt_datetime.getMonth()]+" 
            "+dt_datetime.getFullYear()+"</FONT></TD>\n"+ " 
          <TD align='\"right\"' bgColor=#006840><A href="\&quot;javascript:window.opener.show_calendar('&quot;" +str_target+??, ??+dt2dtstr(dt_next_month)+??+document.cal.time.value);\? javascript:window.opener.show_calendar(???>"+ "<IMG height='\"16\"' alt='\"next' src='\"next.gif\"' width='\"16\"' border='\"0\""+' ? month\? next.gif\???></A></TD>\n</TR>\n" ); var 
        dt_current_day = new Date(dt_firstday); // print weekdays titles 
        str_buffer += " 
        <TR>\n"; for (var n=0; n&lt;7; n++) str_buffer += " 
          <TD bgColor=#007ca0 DESIGNTIMEURL="\" next.gif\??>"+ "<FONT 
            face='\"tahoma,' color=#0000e0 size='\"2\"' verdana\?>"+ 
            week_days[(n_weekstart+n)%7]+"</FONT></TD>\n"; // print calendar table 
          str_buffer += "</TR>\n"; while (dt_current_day.getMonth() == 
        dt_datetime.getMonth() || dt_current_day.getMonth() == 
        dt_firstday.getMonth()) { // print row heder str_buffer += " 
        <TR>\n"; for (var n_current_wday=0; n_current_wday&lt;7; 
          n_current_wday++) { if (dt_current_day.getDate() == 
          dt_datetime.getDate() &amp;&amp; dt_current_day.getMonth() == 
          dt_datetime.getMonth()) // print current date str_buffer += " 
          <TD align='\"right\"' bgColor=#00fb10>"; else if 
            (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6) // 
            weekend days str_buffer += " 
          <TD align='\"right\"' bgColor=#00be50>"; else // print working days 
            of current month str_buffer += " 
          <TD align='\"right\"' bgColor=#0000e0>"; if 
            (dt_current_day.getMonth() == dt_datetime.getMonth()) // print days 
            of current month str_buffer += "<A href='\"javascript:window.opener."+str_target+' javascript:window.opener.?+str_target+?? ?.value='"+dt2dtstr(dt_current_day)+"' +document.cal.time.value; window.close();\? javascript:window.opener.?+str_target+?>"+ "<FONT 
            face='\"tahoma,' color=#0bac00 size='\"2\"' verdana\?>"; else // 
            print days of other months str_buffer += "<A href='\"javascript:window.opener."+str_target+' javascript:window.opener.?+str_target+?? ?.value='"+dt2dtstr(dt_current_day)+"' +document.cal.time.value; window.close();\? javascript:window.opener.?+str_target+?>"+ "<FONT 
            face='\"tahoma,' color=#00a000 size='\"2\"' verdana\?>"; str_buffer 
            += dt_current_day.getDate()+"</FONT></A></FONT></TD>\n"; 
          dt_current_day.setDate(dt_current_day.getDate()+1); } // print row 
          footer str_buffer += "</TR>\n"; } // print calendar footer str_buffer += 
        " 
        <FORM name='\"cal\"'>\n 
        <TR>
          <TD bgColor=#007ca0 colSpan='\"7\"'>"+ "<FONT face='\"tahoma,' 
            color=#0000e0 size='\"2\"' verdana\?>"+ "Time: <INPUT 
            type='\"text\"' maxLength='\"8\"' size='\"8\"' 
            value='\""+dt2tmstr(dt_datetime)+' name='\"time\"' 
        ?\?></FONT></TD></TR>\n</FORM>\n" + "</TBODY></TABLE>\n" + 
  "</TD>\n</TD>\n</TR></TBODY></TABLE>\n" + "</BODY>\n" +
		"</html>\n";

	var vWinCal = window.open("", "Calendar", 
		"width=200,height=250,status=no,resizable=yes,top=200,left=200");
	vWinCal.opener = self;
	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 str2dt (str_datetime) {
	var re_date = /^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/;
	if (!re_date.exec(str_datetime))
		return alert("Invalid Datetime format: "+ str_datetime);
	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6));
}
function dt2dtstr (dt_datetime) {
	return (new String (
			dt_datetime.getDate()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getFullYear()+" "));
}
function dt2tmstr (dt_datetime) {
	return (new String (
			dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));
}

