// 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 monthsNames = ["Styczen", "Luty", "Marzec", "Kwiecien", "Maj", "Czerwiec","Lipiec", "Sierpien", "Wrzesien", "Pazdziernik", "Listopad", "Grudzien"];
	var weekDaysNames = ["Nd", "Pn", "Wt", "Sr", "Cz", "Pt", "So"];
	var firstWeekDay = 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()-firstWeekDay)%7);
	var dt_lastday = new Date(dt_next_month);
	dt_lastday.setDate(0);
	var dt_todayDate = new Date();
	
	// html generation (feel free to tune it for your particular application)



	// print calendar header
	var str_buffer = new String();
	str_buffer +=
	"<html>\n"+
	"<head>\n"+
	"	<title>Kalendarz</title>\n"+
	"	<meta HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=utf-8\">\n"+
	"	<script>\n"+
	"		function ymd2dtstr (year,month,day) {\n"+
	"			return ( new String (\n"+
	"				year+\"-\"+((month-(-1)) < 10 ? \"0\"+(month-(-1)) : (month-(-1)))+\"-\"+ (day < 10 ? \"0\"+day : day) ));\n"+
	"		}\n"+
	"	</script>\n"+
	"</head>\n"+
	"<body bgcolor=\"White\">\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>\n	<td bgcolor=\"#4682B4\"><a href=\"javascript:window.opener.show_calendar('"+
	str_target+"', '"+ dt2dtstr(dt_prev_month)+"');\">"+
	"<img src=\"images/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
	" alt=\"poprzeni miesi�c\"></a></td>\n"+
	"	<td bgcolor=\"#4682B4\" colspan=\"5\">"+
	"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">";
	// print year selection
	str_buffer += "<SELECT NAME=\"year\" onchange=\"javascript:window.opener.show_calendar('"+str_target+"', ymd2dtstr(this.value,"+dt_datetime.getMonth()+","+dt_datetime.getDate()+") );\">";
	var minYear = 2001;
	if (minYear>dt_datetime.getFullYear()) minYear = dt_datetime.getFullYear();
	var maxYear = dt_todayDate.getFullYear();
	if (maxYear<dt_datetime.getFullYear()) maxYear = dt_datetime.getFullYear();
	for ( i=minYear ; i <= maxYear ; i++ ) {
		if (i!=dt_datetime.getFullYear()) str_buffer += "<OPTION VALUE=\""+i+"\">"+i+"</OPTION>";
		else str_buffer += "<OPTION selected VALUE=\""+i+"\">"+i+"</OPTION>";
	}
	str_buffer += "</SELECT>\n";
	str_buffer+="&nbsp;";
	// print month selection
	str_buffer+="<SELECT NAME=\"month\" onchange=\"javascript:window.opener.show_calendar('"+str_target+"', ymd2dtstr("+dt_datetime.getFullYear()+",this.value,"+dt_datetime.getDate()+") );\">";
	for ( i=0 ; i < 12 ; i++ )
		if (i!=dt_datetime.getMonth()) str_buffer += "<OPTION VALUE=\""+i+"\">"+monthsNames[i]+"</OPTION>";
		else str_buffer += "<OPTION selected VALUE=\""+i+"\">"+monthsNames[i]+"</OPTION>";
	str_buffer += "</SELECT>\n";
//	str_buffer+="<br/>"+monthsNames[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"<br/>";
	str_buffer+=
	" </font></td>\n"+
	"	<td bgcolor=\"#4682B4\" align=\"right\"><a href=\"javascript:window.opener.show_calendar('"
	+str_target+"', '"+dt2dtstr(dt_next_month)+"');\">"+
	"<img src=\"images/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
	" alt=\"nastepny miesiac\"></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=\"white\" face=\"tahoma, verdana\" size=\"2\">"+
		weekDaysNames[(firstWeekDay+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<7; n_current_wday++) {
				if (    ( dt_current_day.getDate() == dt_todayDate.getDate() ) &&
					( dt_current_day.getMonth() == dt_todayDate.getMonth() ) &&
					( dt_current_day.getFullYear() == dt_todayDate.getFullYear() ) )
					// 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.document.getElementById('"+str_target+
					"').value='"+dt2dtstr(dt_current_day)+"'; window.opener.document.getElementById('"+str_target+
					"').focus(); window.close();\">"+
					"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
				else 
					// print days of other months
					str_buffer += "<a href=\"javascript:window.opener.document.getElementById('"+str_target+
					"').value='"+dt2dtstr(dt_current_day)+"'; window.opener.document.getElementById('"+str_target+
					"').focus(); window.close();\">"+
					"<font color=\"gray\" face=\"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>\n" +
	"</html>\n";

	var vWinCal = window.open("", "Kalendarz", "width=240,height=210,status=no,resizable=yes,top=200,left=200");
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}

function show_calendar2(str_target, str_datetime, znak, str_date) {
	var monthsNames = ["Styczen", "Luty", "Marzec", "Kwiecien", "Maj", "Czerwiec","Lipiec", "Sierpien", "Wrzesien", "Pazdziernik", "Listopad", "Grudzien"];
	var weekDaysNames = ["Nd", "Pn", "Wt", "Sr", "Cz", "Pt", "So"];
	var firstWeekDay = 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()-firstWeekDay)%7);
	var dt_lastday = new Date(dt_next_month);
	dt_lastday.setDate(0);
	var dt_todayDate = new Date();

	dt_limit=str2dt(str_date);
	// html generation (feel free to tune it for your particular application)



	// print calendar header
	var str_buffer = new String();
	str_buffer +=
	"<html>\n"+
	"<head>\n"+
	"	<title>Kalendarz</title>\n"+
	"	<meta HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=utf-8\">\n"+
	"	<script>\n"+
	"		function ymd2dtstr (year,month,day) {\n"+
	"			return ( new String (\n"+
	"				year+\"-\"+((month-(-1)) < 10 ? \"0\"+(month-(-1)) : (month-(-1)))+\"-\"+ (day < 10 ? \"0\"+day : day) ));\n"+
	"		}\n"+
	"	</script>\n"+
	"</head>\n"+
	"<body bgcolor=\"White\">\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>\n	<td bgcolor=\"#4682B4\"><a href=\"javascript:window.opener.show_calendar2('"+
	str_target+"', '"+ dt2dtstr(dt_prev_month)+"','"+znak+"','"+str_date+"');\">"+
	"<img src=\"images/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
	" alt=\"poprzeni miesiąc\"></a></td>\n"+
	"	<td bgcolor=\"#4682B4\" colspan=\"5\">"+
	"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">";
	// print year selection
	str_buffer += "<SELECT NAME=\"year\" onchange=\"javascript:window.opener.show_calendar2('"+str_target+"', ymd2dtstr(this.value,"+dt_datetime.getMonth()+","+dt_datetime.getDate()+"),'"+znak+"','"+str_date+"' );\">";
	var maxYear = dt_todayDate.getFullYear();
	if (maxYear<dt_datetime.getFullYear()) maxYear = dt_datetime.getFullYear();
	for ( i=1920 ; i <= maxYear ; i++ ) {
		if (i!=dt_datetime.getFullYear()) str_buffer += "<OPTION VALUE=\""+i+"\">"+i+"</OPTION>";
		else str_buffer += "<OPTION selected VALUE=\""+i+"\">"+i+"</OPTION>";
	}
	str_buffer += "</SELECT>\n";
	str_buffer+="&nbsp;";
	// print month selection
	str_buffer+="<SELECT NAME=\"month\" onchange=\"javascript:window.opener.show_calendar2('"+str_target+"', ymd2dtstr("+dt_datetime.getFullYear()+",this.value,"+dt_datetime.getDate()+"),'"+znak+"','"+str_date+"' );\">";
	for ( i=0 ; i < 12 ; i++ )
		if (i!=dt_datetime.getMonth()) str_buffer += "<OPTION VALUE=\""+i+"\">"+monthsNames[i]+"</OPTION>";
		else str_buffer += "<OPTION selected VALUE=\""+i+"\">"+monthsNames[i]+"</OPTION>";
	str_buffer += "</SELECT>\n";
//	str_buffer+="<br/>"+monthsNames[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"<br/>";
	str_buffer+=
	" </font></td>\n"+
	"	<td bgcolor=\"#4682B4\" align=\"right\"><a href=\"javascript:window.opener.show_calendar2('"
	+str_target+"', '"+dt2dtstr(dt_next_month)+"','"+znak+"','"+str_date+"');\">"+
	"<img src=\"images/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
	" alt=\"nastepny miesiac\"></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=\"white\" face=\"tahoma, verdana\" size=\"2\">"+
		weekDaysNames[(firstWeekDay+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<7; n_current_wday++) {
				if (    ( dt_current_day.getDate() == dt_todayDate.getDate() ) &&
					( dt_current_day.getMonth() == dt_todayDate.getMonth() ) &&
					( dt_current_day.getFullYear() == dt_todayDate.getFullYear() ) )
					// 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
						if(znak=="<=")
						{
							//alert (dt_current_day.getTime()+" "+dt_limit.getTime())
							if(dt_current_day.getTime()<=dt_limit.getTime())
								str_buffer += "<a href=\"javascript:window.opener.document.getElementById('"+str_target+
								"').value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
								"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";	
								else
									str_buffer += "<a style=\"cursor: default; text-decoration: none;\">"+
								"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
						}
						if(znak==">=")
						{
							//alert (dt_current_day.getTime()+" "+dt_limit.getTime())
							if(dt_current_day.getTime()>=dt_limit.getTime())
								str_buffer += "<a href=\"javascript:window.opener.document.getElementById('"+str_target+
								"').value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
								"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";	
								else
									str_buffer += "<a style=\"cursor: default; text-decoration: none;\">"+
								"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
						}
					}
					
				else 
					// print days of other months
					{
				if(znak=="<=")
					{
						if(dt_current_day.getTime()<=dt_limit.getTime())
						str_buffer += "<a href=\"javascript:window.opener.document.getElementById('"+str_target+
						"').value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
						"<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">";
						else
						str_buffer += "<a style=\"cursor: default; text-decoration: none;\">"+
								"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
					}
					
					if(znak==">=")
					{
						if(dt_current_day.getTime()>=dt_limit.getTime())
						str_buffer += "<a href=\"javascript:window.opener.document.getElementById('"+str_target+
						"').value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
						"<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">";
						else
						str_buffer += "<a style=\"cursor: default; text-decoration: none;\">"+
								"<font color=\"black\" face=\"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>\n" +
	"</html>\n";

	var vWinCal = window.open("", "Kalendarz", "width=240,height=210,status=no,resizable=yes,top=200,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+)$/;
	if (!re_date.exec(str_datetime)){
		//alert("Z�y format daty: "+ str_datetime);
		return new Date();
	}
	return (new Date (RegExp.$1, RegExp.$2-1, RegExp.$3));
}
function dt2dtstr (dt_datetime) {
	return (new String (
			dt_datetime.getFullYear()
			+"-"+ (dt_datetime.getMonth()+1 < 10 ? "0"+(dt_datetime.getMonth()+1) : dt_datetime.getMonth()+1)
			+"-"+ (dt_datetime.getDate() < 10 ? "0"+dt_datetime.getDate() : dt_datetime.getDate())));
}

function dt2tmstr (dt_datetime) {
	return (new String (
			dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));

}

