﻿/* dynamicky generovany kalendar */
function calendar() {
	//// public properties
	this.width = 300;			// sirka noveho okna
	this.height = 300;			// vyska noveho okna
	this.css = "calendar.css";	// cesta k souboru se styly

	//// private properties
	this.src_day = null;
	this.src_month = null;
	this.cal_window = null;
	this.date = null;
	this.today = new Date();
	this.month_days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	this.month_names = new Array('Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec');
	
	//// public methods
	this.show = calendar_show;		// inicializace a zobrazeni okna s kalendarem
	
	//// private methods
	this.generate = calendar_generate;	// vyrenderovani okna kalendare
	this.month_prev = calendar_month_prev;
	this.month_next = calendar_month_next;
	this.year_sel = calendar_year_sel;
	this.day_sel = calendar_day_sel;
}


/*
   zobrazi kalendar
   param src_day - pointer na select se dny, src_month pointer na select s mesici a roky
   nastavi jako aktualni datum udaj z src, pokud neni, tak dnesni den 
*/
function calendar_show(src_day, src_month) {
	this.src_day = src_day;
	this.src_month = src_month;
	var date_defined = false;
	
	var day = src_day.value;
	var month_year = src_month.options[src_month.selectedIndex].text.split('/');
	var month = month_year[0];
	var year = month_year[1];

	if (day > 0 && day < 32 && month > 0 && month < 13 && year >= 1900 && year <= 9999) {
		this.date = new Date(year, month - 1, day);
		date_defined = true;
	}
	if (!date_defined) {
		this.date = new Date();
	}
	this.generate();
}


function calendar_generate() {
	var i, j;
	
	var month = this.date.getMonth();
	var year = this.date.getFullYear();
	var tmp_date = new Date(year, month, 1);
	
	var week_day = tmp_date.getDay();
	if (week_day == 0)
		week_day = 7;
	var dayN = this.date.getDate();
	var days = this.month_days[month];
	if (month == 1 && year%4 == 0) days = 29;

	
	
	var cw = window.open("", "calendar", "width=" + this.width + ",height=" + this.height + ", top=" + this.top + ", left=" + this.left);
	this.cal_window = cw;
	cw.document.open();
	cw.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 iTransitional//EN">'
		+ '<LINK REL=StyleSheet HREF="' + this.css + '" TYPE="text/css">'
		+ '<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1250">'
		+ '<title>kalendář</title><scr' + 'ipt>var cal;</scr' + 'ipt></head><body><div id="calendar"><div id="topline">'
		+ '<div id="month-prev"><a href="javascript:cal.month_prev()" title="Předchozí měsíc">'
		+ '<img src="img/cal-left.gif" alt="" border="0"></a></div>'
		+ '<div id="month-name">' + this.month_names[month] + '</div>'
		+ '<select id="year" onChange="cal.year_sel(this)">');
	for (i = year; i < year + 2; i++) {
		cw.document.write('<option value="' + i + '"' + (i == year ? ' selected' : '') + '>' + i + '</option>');
	}
	cw.document.write('</select><div id="month-next">'
		+ '<a href="javascript:cal.month_next()" title="Následující měsíc"><img src="img/cal-right.gif" alt="" border="0"></a></div>'
		+ '<div id="close"><a href="javascript:window.close()" title="Zavřít" style="color: white;">x</a></div></div>'
		+ '<table border=0 cellspacing=0 cellpadding=0>'
		+ '<tr><td class="day-name">Po</td><td class="day-name">Út</td><td class="day-name">St</td><td class="day-name">Čt</td>'
		+ '<td class="day-name">Pá</td><td class="day-name">So</td><td class="day-name">Ne</td></tr>');
	
	i = 2 - week_day;
	while (i <= days) {
		cw.document.write('<tr>');
		for (j = 0; j < 7; j++) {
			if (i > 0 && i <= days) {
				cw.document.write('<td class="day"><a href="javascript:cal.day_sel(' + i + ');">' + i + '</a></td>');
			} else {
				cw.document.write('<td class="day-empty"></td>');
			}
			i++;
		}
		cw.document.write('</tr>');
	}
	cw.document.write('</table><body></html>');
	cw.document.close();
	cw.cal = this;
	cw.focus();
}


/*
   prechod na predchozi mesic
*/
function calendar_month_prev() {
	var month = this.date.getMonth();
	if (month == 0) {
		this.date.setMonth(11);
		var year = this.date.getFullYear();
		this.date.setFullYear(year - 1);
	} else {
		this.date.setMonth(month - 1);
	}
	this.generate();
}


/*
   prechod na nasledujici mesic
*/
function calendar_month_next() {
	var month = this.date.getMonth();
	if (month == 11) {
		this.date.setMonth(0);
		var year = this.date.getFullYear ();
		this.date.setFullYear(year + 1);
	} else {
		this.date.setMonth(month + 1);
	}
	this.generate();
}

/*
   vyber roku
*/
function calendar_year_sel(sel_item) {
	var year = sel_item.options[sel_item.selectedIndex].value;
	this.date.setFullYear(year);
	this.generate();
}

/*
   vyber dne, vlozeni datumu do rodic. okna, zavreni kalendare
*/
function calendar_day_sel(day) {
	var month = this.date.getMonth();
	var year = this.date.getFullYear();
	
	month++;
	var month_str = month + ' / ' + year;
	this.src_day.selectedIndex = day - 1;
	for (var i = 0; i < this.src_month.options.length; i++) {
		if (this.src_month.options[i].text == month_str) {
			this.src_month.selectedIndex = i;
			break;
		}
	}
	this.cal_window.close();
}


