// 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
 
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);
 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);
 
 // 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"+
  "<LINK href=\"styles/intranet.css\" rel=stylesheet type=text/css>"+  
  "</head>\n"+
  "<body bgcolor=\"White\">\n"+
  "<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
  "<tr class=\"supertiny\"><td bgcolor=\"#4682B4\">\n"+
  "<table cellspacing=\"1\" cellpadding=\"1\" border=\"0\" width=\"100%\">\n"+
  "<tr class=\"supertiny\">\n <td bgcolor=\"#4682B4\"><a href=\"javascript:window.opener.show_calendar('"+
  str_target+"', '"+ dt2dtstr(dt_prev_month)+"');\">"+
  "<img src=\"assets/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
  " alt=\"previous month\"></a></td>\n"+
  " <td bgcolor=\"#4682B4\" colspan=\"5\">"+
  "<font color=\"white\">"
  +arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
  " <td bgcolor=\"#4682B4\" align=\"right\"><a href=\"javascript:window.opener.show_calendar('"
  +str_target+"', '"+dt2dtstr(dt_next_month)+"');\">"+
  "<img src=\"assets/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
  " alt=\"next month\"></a></td>\n</tr>\n"
 );
 
 var dt_current_day = new Date(dt_firstday);
 // print weekdays titles
 str_buffer += "<tr class=\"supertiny\">\n";
 for (var n=0; n<7; n++)
  str_buffer += " <td bgcolor=\"#87CEFA\">"+
  "<font color=\"white\">"+
  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 class=\"supertiny\">\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())
     // print current date
     str_buffer += " <td bgcolor=\"#FFB6C1\" align=\"right\">";
    else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
     // weekend days
     str_buffer += " <td bgcolor=\"#DBEAF5\" align=\"right\">";
    else
     // print working days of current month
     str_buffer += " <td bgcolor=\"white\" align=\"right\">";
 
    if (dt_current_day.getMonth() == dt_datetime.getMonth())
     // print days of current month
     str_buffer += "<a href=\"javascript:window.opener."+str_target+
     ".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
     "<font color=\"black\">";
    else 
     // print days of other months
     str_buffer += "<a href=\"javascript:window.opener."+str_target+
     ".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
     "<font color=\"gray\">";
    str_buffer += dt_current_day.getDate()+"</font></a></td>\n";
    dt_current_day.setDate(dt_current_day.getDate()+1);
  }
  // print row footer
  str_buffer += "</tr>\n";
 }
 // print calendar footer
 str_buffer +=
  "</body>\n" +
  "</html>\n"; 
 
 var vWinCal = window.open("", "Calendar", 
  "width=200,height=185,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 =/(0[1-9]|1[0-2])+[\/](0[1-9]|[12][0-9]|3[01])+[\/](20[0-9][0-9])/;
 
 if (!re_date.exec(str_datetime))
  return alert("Invalid Date format: "+ str_datetime + "\nDate should be in the format mm/dd/yyyy");
 
 return (new Date (RegExp.$3, RegExp.$1-1 , RegExp.$2)); //Date(y/m/d) with January=0 
}
function dt2dtstr (dt_datetime) {
 return (new String (formatD(dt_datetime.getMonth()+1)+"/"+formatD(dt_datetime.getDate())+"/"+dt_datetime.getFullYear()));
}
 
function formatD(strtoformat) {
strtoformat = "" + strtoformat;
return (strtoformat.length == 1 ? "0"+strtoformat:strtoformat);
 
}

