/**
 * Opens calendar window.
 * Otevře nové okno s kalendářem 
 *
 * @param   string      form name - jméno formuláře
 * @param   string      field name - jméno políčka
 */
function openCalendar(form, field) {
    // otevře nové okno
    window.open("calendar/calendar.html", "calendar", "width=300,height=200,status=yes");
    // návratová adresa políčka ve formuláři
    dateField = eval("document." + form + "." + field);
}

/**
 * Formats number to two digits.
 * Formátování čísla na 2 místa
 * (před 1-9 přidá 0 a nedovolí zadat větší měsíc jak 12, větší den jak 31, hodinu jak 23 a minuty a sekundy větší jak 59) 
 *
 * @param   int number to format.
 */
function formatNum2(i, valtype) {
    // před 1-9 přidá nulu
    f = (i < 10 ? '0' : '') + i;
    // testuje se jestli existuje a není prázdný 
    if (valtype && (valtype != '')) {
        switch(valtype) {
            // měsíc max 12
            case 'month': 
                f = (f > 12 ? 12 : f);
                break;
            // den max 31
            case 'day':
                f = (f > 31 ? 31 : f);
                break;
            // hodina max 23
            case 'hour':
                f = (f > 23 ? 23 : f);
                break;
            // jinak sekundy a minuty max 59
            default:
            case 'second':
            case 'minute':
                f = (f > 59 ? 59 : f);
                break;
        }
    }
    return f;
}


// aktuální datum
var cDate=new Date();
// rok z datumu
var cYear=cDate.getFullYear();
// měsíc z datumu
var cMonth=cDate.getMonth();
// den z datumu
var cDay=cDate.getDate();

/**
 * Nastavení kalendáře
 *
 * @param   string     date text
 */
function setCalendar(dt) {
  // rok z datumu
	cYear=dt.getFullYear();
	// měsíc z datumu
	cMonth=dt.getMonth();
	// den z datumu
  cDay=dt.getDate();
  // na který den připadá první den v mesíci
	firstDay = dt.getDay();
	// vymazání a skrytí všech buttonů
	for(i = 0; i < 41; i++){
		eval("document.calform.B"+i+".value=''");
		eval("document.calform.B"+i+".style.visibility='hidden'");
	}
  // neděle je 0tý den v týdnu proto v případě že vychází první den na neděli je nutno přičíst 7
  if (firstDay < 1){
		firstDay +=7;
  }
  // počet dnů v konkrétním měsíci
	dayspermonth = getDaysPerMonth(cMonth);
	// generování dní v měsíci
	for(i = 1; i < dayspermonth+1; i++){
		// přidání nuly pro čísla 1-9
    i1=(i<10)? "0"+i : i;
		eval("document.calform.B"+(i+firstDay -2)+".value='"+i1+"'");
		eval("document.calform.B"+(i+firstDay -2)+".style.visibility='visible'");
	}
	// výběr měsíce ze selectu
	document.calform.Mesice.selectedIndex=cMonth;
	// výběr roku ze selectu
	document.calform.Rok.value=cYear;
}

/**
 * Po zvolení jiného roku update kalendáře
 *
 * @param   string     year text
 */
function setNYear(y){
	cYear=y;
	// volání kalendáře s novými parametry
	setCalendar(new Date(cYear,cMonth,1));
}

/**
 * Po zvolení jiného měsíce update kalendáře
 *
 * @param   string     month text
 */
function setNMonth(m){
	cMonth=m;
	// volání kalendáře s novými parametry
	setCalendar(new Date(cYear,cMonth,1));
}

/**
 * Funkce pro získání počtu dní v jednotlivých mesících
 *
 * @param   string     month text
 */
function getDaysPerMonth(m){
  // pole jednotlivých měsíců
	daysArray=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	// počet dnů zvoleného měsíce
  days=daysArray[m];
  // pro únor otestovat zdali se nejedná o přestupný rok
	if (m==1){
		if((cYear% 4) == 0) {
			if(((cYear% 100) == 0) && (cYear% 400) != 0) 
				days = 28;
			else
				days = 29;
		}
	}
	return days;
}

/**
 * Returns date from calendar.
 * Vrací kompletní datetime z kalendáře 
 *
 * @param   string     date text
 */
function returnDate(d) {
    // den
    cDay=d;
    // rok-mesíc-den
    txt = cYear + "-" + (cMonth+1) + "-" + cDay;
    // hodiny 
    //h = parseInt(document.getElementById('hour').value,10);
    // minuty
    //m = parseInt(document.getElementById('minute').value,10);
    // sekundy
    //s = parseInt(document.getElementById('second').value,10);
    // k datu se přidají zformátované hodiny:minuty:sekundy
    //txt += ' ' + formatNum2(h, 'hour') + ':' + formatNum2(m, 'minute') + ':' + formatNum2(s, 'second');
    // do políčka dané adresou ve funkci openCalendar se vloží kompletní datum a čas
    window.opener.dateField.value = txt;
    // zavře se okno s kalendářem
    window.close();
}

