/*
 * kalendar.js * version 0.9.3cz
 * original by Henning Eulert, http://www.martin-luther-gemeinde.de/litur2.htm
 * modified and translated by David Vorisek 2002-2010
 * 
 * last modified: 9.8.2010
 */
 
function isLeap(y) // Gregorian leap year
{
return (!(y%100)) ? !(y%400) : !(y%4)
}

function EasterDay(y)
{
// algorithm from Butcher's Ecclesiastical Calendar, published in 1876
// holds for any year in the Gregorian Calendar (year >= 1583)
with (Math) {
var a=y%19
var b=floor(y/100)
var c=y%100
var h=(19*a+b-floor(b/4)-floor((b-floor((b+8)/25)+1)/3)+15)%30
var l=(32+2*(b%4)+2*floor(c/4)-h-(c%4))%7
var m=floor((a+11*h+22*l)/451)
}
return (h+l-7*m+81+isLeap(y))
}

// global variables
var KJ=new Array(373) // KalenderJahr

// add text functions Copyright (c) 2002 David Vorisek
// [2] plne ? ->> [3],[5] : ->> [2],[4]
function aT(d,s,c)
{
  var sh=KJ[d][1] != " "
  KJ[d][1+sh]=s; KJ[d][3+sh]=c
}
// ->> [2],[4]
function aT2(d,s,c)
{
  KJ[d][1]=s; KJ[d][3]=c
}
// ->> [3],[5]
function aT3(d,s,c)
{
  KJ[d][2]=s; KJ[d][4]=c
}
// [2],[4] -> [3],[5]; ->> [2],[4]
function aT2p(d,s,c)
{
  KJ[d][2]=KJ[d][1]; KJ[d][4]=KJ[d][3]
  KJ[d][1]=s; KJ[d][3]=c
}

function Jahreskalender(Jahr,Gedenktage)
{
// Copyright © Henning Eulert 1998
// Portions Copyright © 2002 David Vorisek

// Main

var Wochentag=new Array("<b>Neděle</b>","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota","Neděle")
var Monat=new Array("prosince","ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince")
var Farbstr=new Array("c-basic","violett","weiss","rot","gruen","schwarz","rosa")
var fviolett=1,fweiss=2,frot=3,fgruen=4,fschwarz=5,frosa=6
var Taganz=new Array(31,31,28,31,30,31,30,31,31,30,31,30,31)

for (var i=0; i<373; ++i)
  KJ[i]=new Array(5)

var mt=25,mo=0
var Schalt=isLeap(Jahr)
var MaxTage=371+Schalt
Taganz[2]+=Schalt

// Wochentage eintragen

var Ostern=EasterDay(Jahr)+6
var wot=0
for (i=Ostern; i>=0; --i) {
  KJ[i][0]=Wochentag[wot--]
  if (wot<0) wot=6
}
wot=0
for (i=Ostern; i<=MaxTage; ++i) {
  KJ[i][0]=Wochentag[wot++]
  if (wot>6) wot=0
}

// Tagesdaten eintragen

for (i=0; i<=MaxTage; ++i) {
  KJ[i][0]+=", "+mt+". "+Monat[mo]
  KJ[i][1]=" "; KJ[i][2]=" "
  KJ[i][3]=0; KJ[i][4]=0
  mt++
  if (mt>Taganz[mo]) {
    mo++; mt=1
  }
}

// Osterfestkreis I

aT2(Ostern-70,"Poslední neděle po Zjevení Páně",fweiss)
aT2(Ostern-63,"Devítník, Septuagesimae<br><small>3. neděle před dobou postní</small>",fgruen)
aT2(Ostern-56,"Po Devítníku, Sexagesimae<br><small>2. neděle před dobou postní</small>",fgruen)
aT2(Ostern-49,"Neděle masopustní, Estomihi<br><small>1. neděle před dobou postní</small>",fgruen)
aT2(Ostern-46,"Popeleční středa<br><small>začátek doby postní</small>",fviolett)
aT2(Ostern-42,"Invocavit<br><small>1. neděle postní</small>",fviolett)
aT2(Ostern-35,"Reminiscere<br><small>2. neděle postní</small>",fviolett)
aT2(Ostern-28,"Oculi<br><small>3. neděle postní</small>",fviolett)
aT2(Ostern-21,"Laetare<br><small>4. neděle postní</small>",fviolett) // es k&ouml;nnte auch rosa sein!
aT2(Ostern-14,"Judica<br><small>5. neděle postní</small>",fviolett)
aT2(Ostern-7,"<b>Květná neděle - Palmarum</b><br><small>6. neděle postní</small>",fviolett)
aT2(Ostern-3,"<b>Zelený čtvrtek</b><br><small>ustanovení večeře Páně</small>",fweiss)
aT2(Ostern-2,"<b>Velký pátek</b><br><small>den ukřižování Páně</small>",fschwarz)
aT2(Ostern,"<b>Hod Boží velikonoční</b><br><small>den vzkříšení Páně</small>",fweiss)
aT2(Ostern+1,"<b>Velikonoční pondělí</b>",fweiss)
aT2(Ostern+7,"Quasimodogeniti<br><small>1. neděle po Velikonocích</small>",fweiss)
aT2(Ostern+14,"Misericordias Domini<br><small>2. neděle po Velikonocích</small>",fweiss)
aT2(Ostern+21,"Jubilate<br><small>3. neděle po Velikonocích</small>",fweiss)
aT2(Ostern+28,"Cantate<br><small>4. neděle po Velikonocích</small>",fweiss)
aT2(Ostern+35,"Rogate<br><small>5. neděle po Velikonocích</small>",fweiss)
aT2(Ostern+39,"<b>Nanebevstoupení Páně</b>",fweiss)
aT2(Ostern+42,"Exaudi<br><small>6. neděle po Velikonocích</small>",fweiss)
aT2(Ostern+49,"<b>Svatodušní svátky</b><br><small>seslání Ducha svatého</small>",frot)
aT2(Ostern+50,"<b>Svatodušní pondělí</b>",frot)
aT2(Ostern+56,"<b>Neděle svaté Trojice - Trinitatis</b>",fweiss)

// Alter Weihnachtskreis

SoWeih=Ostern % 7 // Sonntag nach Weihnachten
if (SoWeih==0) SoWeih+=7
aT2(0,"<b>1. svátek vánoční</b>",fweiss)
aT2(1,"<b>2. svátek vánoční</b>",fweiss)
if (SoWeih<=4) aT2(SoWeih,"1. neděle po Vánocích",fweiss)
else aT2(SoWeih,"Neděle po Vánocích",fweiss)

if (SoWeih<5) // Nur vor Epiphanias 6. Jan.
  aT2(SoWeih+7,"2. neděle po Vánocích",fweiss)

aT(6,"Konec občanského roku - Silvestr",fweiss)
aT(7,"<b>Svátek jména Ježíš - Nový rok</b>",fweiss)
aT2(12,"<b>Zjevení - Epifanias</b><br><small>Zjevení Páně mudrcům</small>",fweiss)

if (SoWeih>5) SoEpi=SoWeih+7; else SoEpi=SoWeih+14
i=1
while (SoEpi<Ostern-70) {
  aT2(SoEpi,i+". neděle po Zjevení Páně",fweiss)
  SoEpi+=7
  i++
}

// Neuer Weihnachtskreis

SoWeih=(Ostern % 7)+364
if (SoWeih<=MaxTage-6) SoWeih+=7
if (SoWeih<=MaxTage)
  aT2(SoWeih,"Neděle po Vánocích",fweiss)

aT(MaxTage,"<b>Konec občanského roku - Silvestr</b>",fweiss)

aT2(MaxTage-6,"<b>Hod Boží vánoční - Narození Páně</b><br><small><b>1. svátek vánoční</b></small>",fweiss)
aT2(MaxTage-5,"<b>2. svátek vánoční</b>",fweiss)
SoWeih-=7
if (SoWeih==MaxTage-6) SoWeih-=7

// Advent

aT2(SoWeih,"4. neděle adventní",fviolett)
aT2(SoWeih-7,"3. neděle adventní",fviolett) // es k&ouml;nnte auch rosa sein!
aT2(SoWeih-14,"2. neděle adventní",fviolett)
aT2(SoWeih-21,"<b>1. neděle adventní</b><br><small>začátek nového církevního roku</small>",fviolett)
aT(MaxTage-7,"Štědrý den",fweiss)

// Ende des Kirchenjahres

aT2(SoWeih-28,"<b>Poslední neděle v církevním roce</b>",fweiss)
aT2(SoWeih-32,"Den kajících modliteb",fviolett)
aT2(SoWeih-35,"předposlední neděle v církevním roce",fgruen)
aT2(SoWeih-42,"2. neděle před poslední nedělí v církevním roce",fgruen)

// Sonntag nach Trinitatis

var Trini=Ostern+63
i=1
while (Trini<SoWeih-42) {
  aT2(Trini,i+". neděle po Trojici",fgruen)
  Trini+=7
  i++
}

// Sonstige unbewegliche Gedenk- und Feiertage

aT3(1,"Štěpána mučedníka",frot)
aT3(31,"Obrácení apoštola Pavla",frot)
aT3(39,"Uvedení Páně do chrámu",fweiss)
aT2p(181+Schalt,"Narození Jana Křtitele",fweiss)

if (Gedenktage) {
aT3(61,"Apoštola Matouše",frot)
aT3(90+Schalt,"Zvěstování Panně Marii",fweiss)
aT3(121+Schalt,"Evangelisty Marka",frot)
aT3(129+Schalt,"Apoštolů Filipa a Jakuba",frot)
aT3(2,"Apoštola a evangelisty Jana",fweiss)
aT3(3,"Povraždění nemluvňátek v Betlémě",fweiss)
aT3(182+Schalt,"<b>Výročí Augsburské konfese</b>",frot)
aT3(186+Schalt,"Apoštolů Petra a Pavla",frot)
aT3(209+Schalt,"Marie Magdaleny",fweiss)
aT3(212+Schalt,"Apoštola Jakuba",frot)
aT3(228+Schalt,"Mučedníka Laurentia",frot)
aT3(242+Schalt,"Apoštola Bartoloměje",frot)
aT3(247+Schalt,"Stětí Jana Křtitele",frot)
aT3(270+Schalt,"Apoštola a evangelisty Matouše",frot)
aT3(297+Schalt,"Evangelisty Lukáše",frot)
aT3(307+Schalt,"Apoštolů Šimona a Judy",frot)
aT3(340+Schalt,"Apoštola Ondřeje",frot)
aT3(361+Schalt,"Apoštola Tomáše",frot)
aT3(367+Schalt,"Apoštola a evangelisty Jana",fweiss)
aT3(368+Schalt,"Povraždění nemluvňátek v Betlémě<br><small>Mláďátek</small>",fweiss)

aT3(192+Schalt,"Věrozvěstů Cyrila a Metoděje",0)
aT3(193+Schalt,"Upálení mistra Jana Husa",0)
}

aT3(189+Schalt,"Navštívení Panny Marie",fweiss)
aT2p(278+Schalt,"Archanděla Michaela",fweiss)
aT2p(310+Schalt,"<b>Památný den světové reformace</b>",frot)
aT3(311+Schalt,"<b>Svátek všech svatých</b><br><small>památka zesnulých</small>",fweiss)
aT3(366+Schalt,"Štěpána mučedníka",frot)

var ds='<h1>Liturgický kalendář pro rok '+Jahr+'</h1>\n'
if (Gedenktage)
  ds+="<p><big>s památnými dny</big></p>\n"
ds+="<table border=0 cellspacing=0><thead><tr><th>Den, Datum</th><th class=barvy></th><th>Svátek, památný den, jméno neděle</th><th class=barvy></th></tr></thead>\n<tbody>\n"

for (i=7; i<=MaxTage; ++i) {
  if (KJ[i][1] != " " || KJ[i][2] != " ") {
    if (Farbstr[KJ[i][3]] != "c-basic") {
      ds+="<tr><td>"+KJ[i][0]+"</td>\n<td class="+Farbstr[KJ[i][3]]+">&nbsp;</td>\n<td>"
    } else {
      ds+="<tr><td>"+KJ[i][0]+"</td>\n<td>&nbsp;</td>\n<td>"
    }
    if (KJ[i][1] != " ") ds+=KJ[i][1]
    if (KJ[i][2] != " ") {
      if (KJ[i][1] != " ")
        ds+="<br><hr>\n"
      ds+=KJ[i][2]
    }
    if (Farbstr[KJ[i][4]] != "c-basic") {
      ds+="</td>\n<td class="+Farbstr[KJ[i][4]]+">&nbsp;</td></tr>\n"
    } else {
      ds+="</td>\n<td>&nbsp;</td></tr>\n"
    }
  }
}
ds+="</tbody>\n</table>"

var el=document.getElementById("kal-rok")
el.innerHTML=ds
el.style.display=''

}

function CheckInput(form)
{
if (form.Jahreszahl.value == "") {
  alert("Prosím zadejte rok!")
} else {
  var Jahr=parseInt(form.Jahreszahl.value)

  if (!Jahr || Jahr<1583 || Jahr>4099) {
    alert("Prosím zadejte rok mezi 1583 a 4099!")
  } else {

    Jahreskalender(Jahr,!form.Gedenktage.checked)

  }
}
form.Jahreszahl.focus()
return false
}

/* dodatecne funkce */
function smazat(id)
{
  var el=null;
  
  if (document.getElementById && (el=document.getElementById(id)) && el.innerHTML) {
    el.style.display = 'none';
  }
}

/* nastaveni aktualniho roku ve formulari */
function nastav_rok()
{
  var year=(new Date()).getYear();
  var form_rok=document.Formular.Jahreszahl;
  
  if (year<1000) year+=(year<70)?2000:1900;
  if (year>2002&&year<2019)
    form_rok.value=year;

  form_rok.select();
  form_rok.focus();
}

nastav_rok();

/* EOF kalendar.js */

