function show_calendar(str_target, str_datetime) {
var arr_months = ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"];
var week_days = ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "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><head><title>DatePick</title></head>\n"+
		"<body bgcolor='#FFFFFF' style='margin:0px; padding:2px;'>\n"+
		"<table class='clsOTable' cellspacing='0' border='0' width='100%'>\n"+
		"<tr><td bgcolor='#4682b4'>\n"+
		"<table cellspacing='1' cellpadding='3' border='0' width='100%'>\n"+
		"<tr><td bgcolor='#4682b4'><a href=\"javascript:window.opener.show_calendar('"+str_target+"', '"+ dt2dtstr(dt_prev_month)+"')\">"+
		"<img src='/js_lib/prev.gif' width=\"16\" height=\"16\" border='0' alt='previous month'></a></td>\n"+
		"	<td bgcolor='#4682b4' colspan='5'>"+
		"<font color='#ffffff' face='Arial, Tahoma, Verdana' size='2'><b>"+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</b></font></td>\n"+
		"	<TD BGCOLOR=#4682B4 ALIGN=RIGHT><A HREF=\"javascript:window.opener.show_calendar('"+str_target+"', '"+dt2dtstr(dt_next_month)+"')\">"+
		"<img src='/js_lib/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>\n";
for (var n=0; n<7; n++)
   str_buffer += "	<td bgcolor='#87cefa'><font color='#ffffff' face='Arial, Tahoma, Verdana' size='2'><b>"+
		week_days[(n_weekstart+n)%7]+"</b></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<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='#ffffff' 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='#000000' face='Arial, Tahoma, verdana' size='2'>";
      else 
         // print days of other months
         str_buffer += "<a href='javascript:window.opener."+str_target+".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
					"<font color='#e0e0e0' face='Arial, tahoma, verdana' size='2'>";
         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 += "</table>\n</tr>\n</td>\n</table>\n</body></html>\n";

var vWinCal = window.open("", "DatePick", "width=200,height=200,status=no,resizable=no,top=120,left=200");
vWinCal.opener = self;
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+)$/;
var re_date = /^(\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) {
var c_day;
var c_month

if (dt_datetime.getDate() < 10)
   c_day = "0"+dt_datetime.getDate();
else
   c_day = dt_datetime.getDate();

if (dt_datetime.getMonth()+1 < 10)
   c_month="0"+(dt_datetime.getMonth()+1);
else
   c_month=dt_datetime.getMonth()+1;

return (new String (c_day+"."+c_month+"."+dt_datetime.getFullYear()+" "));
}

function dt2tmstr (dt_datetime) {
	return (new String (
			dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));
}

