/*
   dynamicky generovany kalendar
   $Id: calendar.js,v 1.2 2004/12/07 14:59:04 tomas Exp $
 */
function calendar() {
	//// public properties
	this.width = 300;			// sirka noveho okna
	this.height = 300;			// vyska noveho okna
	this.css = "/i/core/css/calendar.css";	// cesta k souboru se styly

	//// private properties
	this.src = null;
	this.srcY = null;
	this.srcM = null;
	this.srcD = 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');

	this.aday = this.today.getDate();
	this.amonth = this.today.getMonth();
	this.ayear = this.today.getFullYear();

	//// 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 - ukazatel na formularovou polozku
   nastavi jako aktualni datum udaj z src, pokud neni, tak dnesni den
*/
function calendar_show(srcY, srcM, srcD, src) {

	this.src = src;

	this.srcY = srcY;
	this.srcM = (srcM - 1);
	this.srcD = srcD;

	var date_defined = false;

	if (srcD > 0 && srcD < 32 && srcM > 0 && srcM < 13 && srcY >= 1900 && srcY <= 9999) {
		this.date = new Date(this.srcY, this.srcM, this.srcD);
		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);

	this.cal_window = cw;

	cw.document.open();
	cw.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 iTransitional//EN">'
		+ '<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1250">'
		+ '<link rel=StyleSheet href="' + this.css + '" type="text/css">'
		+ '<title>kalendář</title><scr' + 'ipt>var cal;</scr' + 'ipt></head><body><div id="calendar">'
		+ '<div id="month-prev"><a href="javascript:cal.month_prev()" title="Předchozí měsíc">&lt;</a></div>'
		+ '<div id="month-name">' + this.month_names[month] + '</div>'
		+ '<select id="year" onChange="cal.year_sel(this)">');
	for (i = year - 5; i < year + 5; 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">&gt;</a></div>'
		+ '<div id="close"><a href="javascript:window.close()" title="Zavřít">x</a></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++) {

			dayStyle = 'day';

			// dnesek
			if (i == this.aday && month == this.amonth && year == this.ayear)
				dayStyle = 'day-s';

			// predvoleny datum
			if (i == this.srcD && month == this.srcM && year == this.srcY)
				dayStyle = 'day-a';

			if (i > 0 && i <= days) {
				cw.document.write('<td class="' + dayStyle + '"><a href="javascript:cal.day_sel(' + i + ');">' + i + '</a></td>');
			} else {
				cw.document.write('<td class="day-empty">&nbsp;</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 date_str = day + '.'  +  month + '.' + year;

	setDate(day, month, year, this.src);

	this.cal_window.close();
}

function setDate(DAY, MONTH, YEAR, DATE) {

	var dateFormD = document.all[DATE + '[d]'];
	var dateFormM = document.all[DATE + '[M]'];
	var dateFormY = document.all[DATE + '[Y]'];

	for (i = 0; i < dateFormD.options.length; i++) {
		if (dateFormD.options[i].value == DAY)
			dateFormD.options[i].selected = true;
		else
			dateFormD.options[i].selected = false;
	}

	for (i = 0; i < dateFormM.options.length; i++) {
		if (dateFormM.options[i].value == MONTH)
			dateFormM.options[i].selected = true;
		else
			dateFormM.options[i].selected = false;
	}

	for (i = 0; i < dateFormY.options.length; i++) {
		if (dateFormY.options[i].value == YEAR)
			dateFormY.options[i].selected = true;
		else
			dateFormY.options[i].selected = false;
	}
}
