// Title: Timestamp picker
// Description: See the demo at url
// URL: http://www.geocities.com/tspicker/
// Version: 1.0.a (Date selector only)
// Date: 12-12-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 get_calendar(str_target, str_datetime) {
	var arr_months = ["Leden", "Unor", "Brezen", "Duben", "Kveten", "Cerven",
		"Cervenec", "Srpen", "Zari", "Rijen", "Listopad", "Prosinec"];
	var week_days = ["Ne", "Po", "Ut", "St", "Ct", "Pa", "So"];
	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));

	//previous month
	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);
	}
	
	//next month
	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);
	
	//previous year
	var dt_prev_year = new Date(dt_datetime);
	dt_prev_year.setYear(dt_datetime.getFullYear()-1);

	//next year
	var dt_next_year = new Date(dt_datetime);
	dt_next_year.setYear(dt_datetime.getFullYear()+1);

	//first day of month
	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);
	
	//initialize the current day to the first day of the month
	var dt_current_day = new Date(dt_firstday);

	// 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"+
		"<style>body {background: #ffffff; margin: 0px}" +
		"* {font-family: geneva, verdana, arial, sans-serif; font-size: 11px}" +
		"td.wkday {background-color: #C9BA97; color: #000000; text-align: center; font-weight: bold}" +
		"td.moyr {background-color: #0033CC; text-align: center; color: #ffffff}" +
		"td.currentdate {background-color: #99CCFF; text-align: right;}" +
		"td.wkendday {background-color: #F3ECD9; text-align: right;}" +
		"td.workday {background-color: #ffffff; text-align: right;}" +
		"td.jumpto {color: white; background-color: #0033CC; text-align: center}</style>" +
		"<body style=\"margin: 0px\">\n"+
		"<table cellspacing=1 cellpadding=3 border=0 width=100% bgcolor=#000000>\n"+
		"<tr><td class=wkendday colspan=7  style=\"text-align:left\"><b>Vyberte datum, prosím...</b></td></tr>" +
		"<!-- begin month/year header row -->\n"+
		"<tr><td colspan=7 class=jumpto>"+getMonthDropdown(dt_datetime,arr_months,str_target)+" "
		+getYearDropdown(dt_datetime,str_target)+"</td></tr>\n"+
		"<!-- end month/year header row -->\n"
	);

	// print weekdays titles
	str_buffer += "<!-- begin weekdays header row -->\n<tr>\n";
	for (var n=0; n<7; n++)
		str_buffer += "<td class=wkday>"+
		week_days[(n_weekstart+n)%7]+"</td>\n";
	str_buffer += "</tr>\n<!-- end weekdays header row -->\n";
	
	// print calendar table
	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())
					// this is the current date
					str_buffer += "<td class=currentdate>";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// this is a weekend day
					str_buffer += "<td class=wkendday>";
				else
					// this is a working day
					str_buffer += "<td class=workday>";

				if (dt_current_day.getMonth() == dt_datetime.getMonth()){
					// still current month so print current date with link
					str_buffer += "<a href=\"javascript:window.opener."+str_target+
					".value='"+dt2dtstr(dt_current_day)+"';window.opener."+str_target+".focus(); window.close();\">"+
					"";
					str_buffer += dt_current_day.getDate()+"</a>";
				}else
					//date is before or after current month -- print nothing
					str_buffer += "&nbsp;";
					
				str_buffer += "</td>\n";
				dt_current_day.setDate(dt_current_day.getDate()+1);
		}
		// print row footer
		str_buffer += "</tr>\n";
	}
	// print calendar footer
	str_buffer +=
		"<tr><td colspan=7 class=moyr>&nbsp;</td></tr>" +
		"</table>\n" +
		"</body>\n" +
		"</html>\n";
	return str_buffer;
}

function show_calendar(str_target, str_datetime,vWinCal) {
	var str_buffer = get_calendar(str_target, str_datetime);
	if (vWinCal==null){
		var intWidth=250;
		var intHeight=200;  
		var intXpos = (screen.availWidth-intWidth)/2;	 
		var intYpos = (screen.availHeight-intHeight)/2;	
		var vWinCal = window.open("", "Calendar", 
			"width="+intWidth+",height="+intHeight+",status=no,top="+intYpos+",left="+intXpos);
		vWinCal.moveTo(intXpos,intYpos);
		vWinCal.opener = self;
	}else{
		vWinCal.document.open();
	}
	vWinCal.document.write (str_buffer);
	vWinCal.document.close();
	vWinCal.focus();
}

// 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))
		return alert("Invalid Datetime format: "+ str_datetime);
	return (new Date (RegExp.$3, RegExp.$1-1, RegExp.$2));
}
function dt2dtstr (dt_datetime) {
	var lstrMonth = String(dt_datetime.getMonth()+1);
	var lstrDay = String(dt_datetime.getDate());
	var lstrYear = String(dt_datetime.getFullYear());
	//force double-digit months
	if (lstrMonth.length < 2) lstrMonth = "0"+lstrMonth;
	//force double-digit days
	if (lstrDay.length < 2) lstrDay = "0"+lstrDay;
	return (lstrMonth+"/"+lstrDay+"/"+lstrYear);
}
function getMonthDropdown(dtCurrentDate,larrMonths,strTarget){
	var lintCurrentMonth = dtCurrentDate.getMonth();
	var strReturn = "";
	strReturn = "\n<select name=\"monthdropdown\""+
		" onchange=\"javascript:window.opener.show_calendar('"+strTarget+"',"+
		"(this.options[this.selectedIndex].value)+'/"+
		String(dtCurrentDate.getDate())+"/"+String(dtCurrentDate.getFullYear())+"',self);\">\n";
	for (var i=0;i<larrMonths.length;i++){
		strReturn += "<option value=\""+(i+1)+"\"";
		if (i==lintCurrentMonth){
			strReturn += " selected";
		}
		strReturn += ">"+larrMonths[i]+"</option>\n";
	}	
	return strReturn += "</select>\n";
}
function getYearDropdown(dtCurrentDate,strTarget){
	var lintCurrentYear = dtCurrentDate.getFullYear();
	var strReturn = "";
	var lintBuffer = 30;
	strReturn = "\n<select name=\"yeardropdown\""+
		" onchange=\"javascript:window.opener.show_calendar('"+strTarget+"',"+
		"'"+String(dtCurrentDate.getMonth()+1)+"/"+String(dtCurrentDate.getDate())+
		"/'+this.options[this.selectedIndex].value,self);\">\n";
	for (var i=lintCurrentYear-lintBuffer;i<lintCurrentYear;i++){
		strReturn += "<option value=\""+i+"\">"+i+"\n";
	}
	strReturn += "<option value=\""+lintCurrentYear+"\" selected>"+lintCurrentYear+"\n";
	for (var i=lintCurrentYear+1;i<=lintCurrentYear+lintBuffer;i++){
		strReturn += "<option value=\""+i+"\">"+i+"\n";
	}
	return strReturn += "</select>\n";
}
