// Title: Timestamp picker
// Description: See the demo at url
// URL: http://www.softcomplex.com/products/tigra_calendar/
// Version: 1.0.a (Date selector only) reworked by Richard Perry
// Date: 12-12-2001 (mm-dd-yyyy)
// Version 1.0.b reworked by Eddie May. Added time display and made compliant with Netscape 6.2.
// Date 22/01/2002 (dd-mm-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_calendar4x(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() : str2dt4x(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_prev_year = new Date(dt_datetime);
dt_prev_year.setYear(dt_datetime.getFullYear()-1);

var dt_next_year = new Date(dt_datetime);
dt_next_year.setYear(dt_datetime.getFullYear()+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);

// 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_calendar4x('&quot;+" str_target+??, ??+dt2dtstr4x(dt_prev_year)+??+document.cal.time.value);\? javascript:window.opener.show_calendar4x(??+?>"+ "<IMG height='\"16\"' alt='\"previous' src='\"prev_year.gif\"' width='\"16\"' border='\"0\""+' prev_year.gif\??? ? year\?></A></TD>\n"+ " 
          <TD bgColor=#006840 DESIGNTIMEURL="\" prev_year.gif\??><A href="\&quot;javascript:window.opener.show_calendar4x('&quot;+" str_target+??, javascript:window.opener.show_calendar4x(??+? ??+ dt2dtstr4x(dt_prev_month)+??+document.cal.time.value);\?>"+ "<IMG height='\"16\"' alt='\"previous' src='\"prev.gif\"' width='\"16\"' border='\"0\""+' ? prev.gif\??? month\?></A></TD>\n"+ " 
          <TD bgColor=#006840 colSpan='\"3\"' DESIGNTIMEURL="\" prev.gif\??>"+ 
            "<FONT face='\"tahoma,' color=#0000e0 size='\"1\"' verdana\?>" 
            +arr_months[dt_datetime.getMonth()]+" 
            "+dt_datetime.getFullYear()+"</FONT></TD>\n"+ " 
          <TD align='\"right\"' bgColor=#006840><A href="\&quot;javascript:window.opener.show_calendar4x('&quot;" +str_target+??, ??+dt2dtstr4x(dt_next_month)+??+document.cal.time.value);\? javascript:window.opener.show_calendar4x(???>"+ "<IMG height='\"16\"' alt='\"next' src='\"next.gif\"' width='\"16\"' border='\"0\""+' ? month\? next.gif\???></A></TD>\n"+ " 
          <TD align='\"right\"' bgColor=#006840 DESIGNTIMEURL="\" 
            next.gif\??><A href="\&quot;javascript:window.opener.show_calendar4x('&quot;" +str_target+??, javascript:window.opener.show_calendar4x(??? ??+dt2dtstr4x(dt_next_year)+??+document.cal.time.value);\?>"+ "<IMG height='\"16\"' alt='\"next' src='\"next_year.gif\"' width='\"16\"' border='\"0\""+' ? year\? next_year.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_year.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='"+dt2dtstr4x(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='"+dt2dtstr4x(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='\""+dt2tmstr4x(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 str2dt4x(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 dt2dtstr4x(dt_datetime) {
return (new String (
dt_datetime.getDate()+"/"+(dt_datetime.getMonth()+1)+"/"+dt_datetime.getFullYear()));
<!--dt_datetime.getDate()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getFullYear()+" "));-->
}
function dt2tmstr4x(dt_datetime) {
return (new String (
" "+dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));
}

