var nPrechod = 20; 			// po této hodnotě při dvoučíselném zadání roku je uvažováno 20. století
var regPars = /^\-?\d+$/;

var calendars = [];

function kalendar(objCil) {
	
	this.target = objCil;
	
	if (!objCil)
		return error_report("Chyba volání kalendáře: nebyl specifikován ovladací prvek");
	if (objCil.value == null)
		return error_report("Chyba volání kalendáře: tento parametr není platným ovladacím prvkem");
	this.id = calendars.length;
	          calendars[this.id] = this;	
			  
	this.vytvorDatum = fce_vytvor;
	this.parsujDatum = fce_parsuj;
	this.zobraz      = fce_zobraz;
}

function fce_vytvor (dtDatum) {
	return (
		  (dtDatum.getDate() < 10 ? '0' : '') +  dtDatum.getDate() + "."
		+ (dtDatum.getMonth() < 9 ? '0' : '') + (dtDatum.getMonth() + 1) + "."
		+  dtDatum.getFullYear()
	);
}

function fce_parsuj (sDatum) {
	
	if (!sDatum) 
	    return (new Date()) 
	if (regPars.exec(sDatum))
		return new Date(sDatum); 
	var aDatum = sDatum.split('.');
	if (aDatum.length != 3) 
		return error_report ("Nesprávný formát data! - " + sDatum + ".\nSprávný formát: dd-mm-rrrr.");
	if (!aDatum[0]) 
		return error_report ("Nesprávný formát data! - " + sDatum + ".\nNezadán den.");
	if (!regPars.exec(aDatum[0])) 
		return error_report ("Neplatná hodnota dne! - " + aDatum[0] + ".\nHodnoty musejí být celá nezáporná čísla.");
	if (!aDatum[1]) 
		return error_report ("Neplatný formát data! - " + sDatum + ".\nNezadán měsíc.");
	if (!regPars.exec(aDatum[1])) 
		return error_report ("Neplatná hodnota měsíce! - " + aDatum[1] + ".\nHodnoty musejí být celá nezáporná čísla.");
	if (!aDatum[2]) 
	    return error_report ("Neplatný formát data! - " + sDatum + ".\nNezadán rok.");
	if (!regPars.exec(aDatum[2])) 
	    return error_report ("Neplatná hodnotna roku! - " + aDatum[2] + ".\nHodnoty musejí být celá nezáporná čísla.");

	var dtDatum = new Date();
	    dtDatum.setDate(1);

	if (aDatum[1] < 1 || aDatum[1] > 12) 
		return error_report ("Nesprávný rozsah měsíce! - " + aDatum[1] + ".\nPovolené jsou hodnoty v rozmezí 01-12.");
		
	dtDatum.setMonth(aDatum[1]-1);
	 
	if (aDatum[2] < 100) 
	    aDatum[2] = Number(aDatum[2]) + (aDatum[2] < nPrechod ? 2000 : 1900); 
			
	dtDatum.setFullYear(aDatum[2]);

	var dtPocetDnu = new Date(aDatum[2], aDatum[1], 0);
	
	dtDatum.setDate(aDatum[0]);
	
	if (dtDatum.getMonth() != (aDatum[1]-1)) 
		return error_report ("Nesprávný rozsah dnů! - " + aDatum[0]);

	return (dtDatum)
}

function fce_zobraz (sDatum) {

	if (sDatum) {
		this.dtAktualni = this.parsujDatum(sDatum);
	} else {
		this.dtAktualni = this.parsujDatum(this.target.value);
		this.dtZvolene  = this.dtAktualni;
	}
	
	if (!this.dtAktualni) return;

	var objOkno = window.open(
		'kalendar.html?date=' + this.dtAktualni.valueOf()+ '&id=' + this.id,
		'Kalendar', 'width=230,height=230,status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes');
	    objOkno.opener = window;
   	    objOkno.focus();
}

function error_report (sZprava) {
	alert (sZprava);
	return null;
}