// JavaScript Document
function Kalender()
{
alert("Hier wird eine aktuelle JavaScript-Version ben\xF6tigt!")
}


// Monatsnamen und Tage
var Monate=
[
{name:"Januar",tage:31},
{name:"Februar",tage:28},
{name:"M&auml;rz",tage:31},
{name:"April",tage:30},
{name:"Mai",tage:31},
{name:"Juni",tage:30},
{name:"Juli",tage:31},
{name:"August",tage:31},
{name:"September",tage:30},
{name:"Oktober",tage:31},
{name:"November",tage:30},
{name:"Dezember",tage:31}
]



// 4stellige Jahreszahl

function get4DigitYear(theDate)
{
if(theDate.getFullYear)
return theDate.getFullYear()
var y= theDate.getYear()
return y + ((y < 1900) ? 1900 : 0)
}



// --- Feiertagsberechnung ---

// Ostersonntag nach Gauss'scher Formel

function Ostersonntag(Jahr)
{
// Bem.: intern darf nicht einmal vor dem 1.1.1970 datiert werden
if((Jahr < 1583) || (Jahr > 2299))
return null


var m, n

if(Jahr <= 1699)
{
m = 22
n = 2
}

else if(Jahr <= 1799)

{
m = 23
n = 3
}

else if(Jahr <= 1899)

{
m = 23
n = 4
}

else if(Jahr <= 2099)

{
m = 24
n = 5
}

else if(Jahr <= 2199)

{
m = 24
n = 6
}

else

{
m = 25
n = 0
}

var a= Jahr % 19
var b= Jahr % 4
var c= Jahr % 7
var d= (19 * a + m) % 30
var e= (2 * b + 4 * c + 6 * d + n) % 7
var t= 22 + d + e

if(t > 31)
{
t= t - 31
if(t == 26)
t = 19
else if(t == 25)
{
if((d == 28) && (e == 6) && (a > 10))
t = 18
}

return new Date(Jahr, 3, t, 12, 0, 0)
}



return new Date(Jahr, 2, t, 12, 0, 0)
}



// 4. Advent in Abhaengigkeit des 1. Weihnachtstags berechnen

function VierterAdvent(Jahr)

{
var StartDatum= new Date(Jahr, 11, 25, 12, 0, 0)
var WTag= StartDatum.getDay()
var Temp= StartDatum.getTime()

StartDatum.setTime(Temp - ((WTag == 0) ? 7 : WTag) * 86400000)
return StartDatum
}



// Feiertag anlegen mit Datum und Name

function feiertag(datum, name)
{
this.datum= datum
this.datum.setHours(12)
this.datum.setMinutes(0)
this.datum.setSeconds(0)
this.name= name
this.ms=datum.getTime()
return this
}



// Feiertag anlegen mit Datum (aus Zeit in Millisekunden) und Name

function feiertag_time(time, name, flag)
{
var TempDate= new Date()
TempDate.setTime(time)
this.datum= TempDate
this.datum.setHours(12)
this.datum.setMinutes(0)
this.datum.setSeconds(0)
this.name= name
this.ms=time
return this
}



// Vergleichsfunktion zur Sortierung nach Datum

function compare_date(d1, d2)
{
if(d1.datum.getTime() < d2.datum.getTime())
return -1
if(d1.datum.getTime() > d2.datum.getTime())
return 1
return 0
}



// Anlage eines Felds mit allen Feiertagen zum angegebenen Jahr

function feiertage(Jahr)
{
var TagMS= 86400000// Anzahl Millisekunden pro Tag
var Feiertag= new Array()// Feld fuer Feiertage
var cnt= 0// Zaehler fuer Feiertage



// Von Ostern abhaengige Feiertage

var Ostern= Ostersonntag(Jahr)
var OTime= Ostern.getTime()

Feiertag[cnt]= new feiertag(Ostern, "Ostersonntag")
Feiertag[++cnt]= new feiertag_time(OTime + TagMS, "Ostermontag")
// Feiertag[++cnt]= new feiertag_time(OTime + 39 * TagMS, "Christi Himmelfahrt")
Feiertag[++cnt]= new feiertag_time(OTime + 49 * TagMS, "Pfingstsonntag")
Feiertag[++cnt]= new feiertag_time(OTime + 50 * TagMS, "Pfingstmontag")
// Feiertag[++cnt]= new feiertag_time(OTime + 60 * TagMS, "Fronleichnam")
// Feiertag[++cnt]= new feiertag_time(OTime - 48 * TagMS, "Rosenmontag", true)
// Feiertag[++cnt]= new feiertag_time(OTime - 47 * TagMS, "Fastnacht")
// Feiertag[++cnt]= new feiertag_time(OTime - 46 * TagMS, "Aschermittwoch")
Feiertag[++cnt]= new feiertag_time(OTime - 2 * TagMS, "Karfreitag")



// Vom 4. Advent abhaengige Feiertage

var Advent4= VierterAdvent(Jahr)
var A4Time= Advent4.getTime()

// Feiertag[++cnt]= new feiertag(Advent4, "4. Advent")
// Feiertag[++cnt]= new feiertag_time(A4Time - 7 * TagMS, "3. Advent")
// Feiertag[++cnt]= new feiertag_time(A4Time - 14 * TagMS, "2. Advent")
// Feiertag[++cnt]= new feiertag_time(A4Time - 21 * TagMS, "1. Advent")
// Feiertag[++cnt]= new feiertag_time(A4Time - 28 * TagMS, "Totensonntag")
// Feiertag[++cnt]= new feiertag_time(A4Time - 35 * TagMS, "Volkstrauertag")
// Feiertag[++cnt]= new feiertag_time(A4Time - 32 * TagMS, "Bu&szlig;- und Bettag")



// Feste Feiertage

Feiertag[++cnt]= new feiertag(new Date(Jahr, 0, 1), "Neujahr")
// Feiertag[++cnt]= new feiertag(new Date(Jahr, 0, 6), "Heilige 3 K&ouml;nige")
// Feiertag[++cnt]= new feiertag(new Date(Jahr, 1, 14), "Valentinstag")
// Feiertag[++cnt]= new feiertag(new Date(Jahr, 4, 1), "Maifeiertag")
// Feiertag[++cnt]= new feiertag(new Date(Jahr, 7, 15), "Maria Himmelfahrt")
 Feiertag[++cnt]= new feiertag(new Date(Jahr, 9, 3), "Tag der Deutschen Einheit")
// Feiertag[++cnt]= new feiertag(new Date(Jahr, 9, 31), "Reformationstag")
// Feiertag[++cnt]= new feiertag(new Date(Jahr, 10, 1), "Allerheiligen")
// Feiertag[++cnt]= new feiertag(new Date(Jahr, 11, 24), "Heiligabend")
Feiertag[++cnt]= new feiertag(new Date(Jahr, 11, 25), "1. Weihnachtstag")
Feiertag[++cnt]= new feiertag(new Date(Jahr, 11, 26), "2. Weihnachtstag")
// Feiertag[++cnt]= new feiertag(new Date(Jahr, 11, 31), "Silvester")



// Feiertage nach Datum sortieren
Feiertag.sort(compare_date)
// und zurueck!
return Feiertag
}


// --- Kalenderaufbereitung und -ausgabe ---
// Kalender

function Kalender(monat, jahr)

{
var pct= 0
var Monat= new Date(jahr, monat - 1, 1)
var Heute= new Date()
var DieserTag= null

function pcta(p)
{
status= "Aufbereitung Kalender " + String(p) + "% fertig."
}



pcta(pct)



// Vorbereitung/Schaltjahr

if((Heute.getMonth() == Monat.getMonth()) &&
(get4DigitYear(Heute) == get4DigitYear(Monat)))
DieserTag= Heute.getDate()

var Jahr= get4DigitYear(Monat)

if((!(Jahr % 4) && (Jahr % 100)) || !(Jahr % 400))
Monate[1].tage = 29
AnzahlTage= Monate[Monat.getMonth()].tage
var StartTag = Monat.getDay() - 1

if(StartTag < 0)
StartTag= 6



// Feiertage

var Feiertage= feiertage(Jahr)
var RelevanteFeiertage= new Array()
pct+= 5
pcta(pct)

// Feiertage dieses Monats

var j
var cnt= 0
for(j = 0; j < Feiertage.length; j++)
if(Feiertage[j].datum.getMonth() == Monat.getMonth())
RelevanteFeiertage[cnt++]= Feiertage[j]



// Ausgabe Kalenderblatt

var kalenderHTML ="";
kalenderHTML=kalenderHTML+String("<TABLE BORDER=0 CELLPADDING=3 CELLSPACING=0 BORDERCOLOR=\"#000000\">")
kalenderHTML=kalenderHTML+String("<CAPTION>" + Monate[Monat.getMonth()].name + " " + Jahr + "</STRONG>")
// farbe zeile wochentag
kalenderHTML=kalenderHTML+String("<TR ALIGN=CENTER VALIGN=MIDDLE BGCOLOR=\"#85D487\"><TD WIDTH=\"14%\">Mo</TD>")
kalenderHTML=kalenderHTML+String("<TD WIDTH=\"14%\">Di</TD>")
kalenderHTML=kalenderHTML+String("<TD WIDTH=\"14%\">Mi</TD>")
kalenderHTML=kalenderHTML+String("<TD WIDTH=\"14%\">Do</TD>")
kalenderHTML=kalenderHTML+String("<TD WIDTH=\"14%\">Fr</TD>")
kalenderHTML=kalenderHTML+String("<TD WIDTH=\"15%\">Sa</TD>")
kalenderHTML=kalenderHTML+String("<TD WIDTH=\"15%\">So</TD></TR>")

var column= StartTag

kalenderHTML=kalenderHTML+String("<TR ALIGN=CENTER>")
var i
for(i = 0; i < StartTag; i++)
// farbe kalendertag leer
kalenderHTML=kalenderHTML+String("<TD BGCOLOR=\"#A3DFA5\">&nbsp;</TD>")

for(i = 1; i <= AnzahlTage; i++)
{
pct+= Math.floor(90 / AnzahlTage)
pcta(pct)

var clr= ""

for(j = 0; j < RelevanteFeiertage.length; j++)
{
if(i == RelevanteFeiertage[j].datum.getDate())
{
clr= " BGCOLOR=\"#85D487\""
break
}
}



kalenderHTML=kalenderHTML+String("<TD "+ clr + "BGCOLOR=\"#CFF0CE\""  + ">")
if(i == DieserTag)
// farbe aktueller tag
kalenderHTML=kalenderHTML+String("<FONT COLOR=\"#FF0000\"><STRONG>")
if(column >= 5)
kalenderHTML=kalenderHTML+String("<STRONG>")
kalenderHTML=kalenderHTML+String(i)

if(i == DieserTag)
kalenderHTML=kalenderHTML+String("</STRONG></FONT>")
if(column >= 5)
kalenderHTML=kalenderHTML+String("</STRONG>")
kalenderHTML=kalenderHTML+String("</TD>")
column++

if((column == 7) && (i != AnzahlTage))
{
kalenderHTML=kalenderHTML+String("</TR>\n<TR ALIGN=CENTER>")
column = 0
}
}



if(column != 0)
for(i = column; i < 7; i++)
kalenderHTML=kalenderHTML+String("<TD BGCOLOR=\"#A3DFA5\">&nbsp;</TD>")
kalenderHTML=kalenderHTML+String("</TR></TABLE>")

// Ausgabe Feiertage
var ausg= false

if (false) {
	for(j = 0; j < RelevanteFeiertage.length; j++)
	{
	if(!ausg)
	{
	kalenderHTML=kalenderHTML+String("<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=1>")
	ausg= true
	}
	
	kalenderHTML=kalenderHTML+String("<TR ALIGN=LEFT VALIGN=MIDDLE><TD><SMALL>" +
	String(RelevanteFeiertage[j].datum.getDate()) +
	".</SMALL></TD><TD><SMALL>&nbsp;</SMALL></TD><TD><SMALL>" +
	RelevanteFeiertage[j].name +
	"</SMALL></TD></TR>")
	}
	
	if(ausg)
	kalenderHTML=kalenderHTML+String("</TABLE>")
}

pct= 100
pcta(pct)

return kalenderHTML;
}


// Folgendes nicht besonders elegant aber wirkungsvoll, Feedback an -> dirk (at) jac - systeme (dot) de ... 8) 

function JAC_displayLayers() { //v9.0
  var i,p,v,obj,args=JAC_displayLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) 
  with (document) if (getElementById && ((obj=getElementById(args[i]))!=null)) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'':(v=='hide')?'none':v; }
    obj.display=v; }
}


function JAC_createKalendar() {


// Tagesdatum
var aktuell= new Date()

// Anzeigemonat
var my_monat= aktuell.getMonth() + 1
var my_jahr= get4DigitYear(aktuell)


if (JAC_createKalendar.arguments[0]) my_monat=JAC_createKalendar.arguments[0];
if (JAC_createKalendar.arguments[1]) my_jahr=JAC_createKalendar.arguments[1];


var kalenderHTML="";

if(location.search != "")
{
var werte= unescape(location.search.substring(1))
werte= werte.split("&")

if(werte.length == 2)
{
werte[0]= werte[0].split("=")
if(werte[0][0] == "monat")
my_monat= parseInt(werte[0][1])
if(werte[0][0] == "jahr")
my_jahr= parseInt(werte[0][1])
werte[1]= werte[1].split("=")
if(werte[1][0] == "monat")
my_monat= parseInt(werte[1][1])
if(werte[1][0] == "jahr")
my_jahr= parseInt(werte[1][1])
}
}


kalenderHTML=kalenderHTML+"<table><tr><td>";
// Kalenderausgabe
kalenderHTML=kalenderHTML+Kalender(my_monat, my_jahr)

// Steuerung
var l= location.href

if(l.indexOf("?") != -1)
{
l= location.href.split("?")
l= l[0]
}

var vor= new Date(my_jahr, my_monat - 2, 1)
var nach= new Date(my_jahr, my_monat, 1)

kalenderHTML=kalenderHTML+"<table align=\"center\"><tr><td >";

kalenderHTML=kalenderHTML+String("<SMALL>[&nbsp;<span class=\"taxLink\" onclick=\"JAC_createKalendar(" + (aktuell.getMonth() + 1) + "," + get4DigitYear(aktuell) + ");\">Heute</span>&nbsp;] " +
"[&nbsp;<span class=\"taxLink\" onclick=\"JAC_createKalendar(" + (vor.getMonth() + 1) + "," + get4DigitYear(vor) + ");\">Zur&uuml;ck</span>&nbsp;] " +
"[&nbsp;<span class=\"taxLink\" onclick=\"JAC_createKalendar(" + (nach.getMonth() + 1) + "," + get4DigitYear(nach) + ");\">Vor</span>&nbsp;]" +
"</SMALL>")

kalenderHTML=kalenderHTML+"</td></tr><table>";

document.getElementById("KalenderTabelle").innerHTML=kalenderHTML;


}



function JAC_Reisezeiten(Jahr)
{
var TagMS= 86400000// Anzahl Millisekunden pro Tag
var Feiertag= new Array()// Feld fuer Feiertage
var cnt= 0// Zaehler fuer Feiertage



// Von Ostern abhaengige Feiertage

var Ostern= Ostersonntag(Jahr);
var OTime= JAC_getTag(Ostern)

var Reisezeit = new Array();
var ReisezeitStatus = new Array();
var ReisezeitStatusBereich = new Array();
var JTage=JAC_getTag(new Date(Jahr, 11, 31))+1;


ReisezeitStatusBereich[JAC_getTag(new Date(Jahr, 5, 15))]= 1
ReisezeitStatusBereich[JAC_getTag(new Date(Jahr, 8, 15))]= 2
ReisezeitStatusBereich[JAC_getTag(new Date(Jahr, 10, 1))]= 3
ReisezeitStatusBereich[JAC_getTag(new Date(Jahr, 0, 1))]= 3
ReisezeitStatusBereich[JAC_getTag(new Date(Jahr, 3, 1))]= 2

ReisezeitStatus[(OTime - 2 )]= 1
ReisezeitStatus[(OTime -1)]= 1
ReisezeitStatus[(OTime)]= 1
ReisezeitStatus[(OTime + 1)]= 1
ReisezeitStatus[(OTime + 48)]= 1
ReisezeitStatus[(OTime + 49)]= 1
ReisezeitStatus[(OTime + 50)]= 1

ReisezeitStatus[JAC_getTag(new Date(Jahr, 0, 1))]= 1
ReisezeitStatus[JAC_getTag(new Date(Jahr, 0, 2))]= 1
ReisezeitStatus[JAC_getTag(new Date(Jahr, 11, 25))]= 1
ReisezeitStatus[JAC_getTag(new Date(Jahr, 11, 26))]= 1
ReisezeitStatus[JAC_getTag(new Date(Jahr, 11, 27))]= 1
ReisezeitStatus[JAC_getTag(new Date(Jahr, 11, 28))]= 1
ReisezeitStatus[JAC_getTag(new Date(Jahr, 11 ,29))]= 1
ReisezeitStatus[JAC_getTag(new Date(Jahr, 11, 30))]= 1
ReisezeitStatus[JAC_getTag(new Date(Jahr, 11, 31))]= 1

var i;
var ReisezeitStatusAktuell=2

for (i=0;i<JTage;i++) {
	Reisezeit[i]=3
	if (ReisezeitStatusBereich[i] >0 ) { 
		ReisezeitStatusAktuell=ReisezeitStatusBereich[i];
		 
	}
	Reisezeit[i]=ReisezeitStatusAktuell
	if (ReisezeitStatus[i] > 0 && ReisezeitStatusAktuell > ReisezeitStatus[i]  ) {
		Reisezeit[i]=ReisezeitStatus[i] 
	}
};


return Reisezeit



// Feiertage nach Datum sortieren
// Feiertag.sort(compare_date)
// und zurueck!
// return Feiertag
}


function JAC_calculateTax () {
	
	var jetzt = new Date();
	var Jahr = jetzt.getFullYear();
	
	
	var Reisezeiten=JAC_Reisezeiten(Jahr);
	Reisezeiten=Reisezeiten.concat(JAC_Reisezeiten(Jahr+1))
	var Preise=new Array();
	Preise[1]=new Object();
	Preise[2]=new Object();
	Preise[3]=new Object();

	var Eingabefelder= new Object();
	
	Preise[1]["P18"]=2.30;
	Preise[1]["ERM"]=1.80;
	Preise[1]["HUND"]=1.00;
	Preise[2]["P18"]=1.50;
	Preise[2]["ERM"]=1.00;
	Preise[2]["HUND"]=1.00;
	Preise[3]["P18"]=1.00;
	Preise[3]["ERM"]=0.50;
	Preise[3]["HUND"]=1.00;
			
	
	with (document) {
		Eingabefelder["AnreiseTag"]=getElementsByName("AnreiseTag")[0].value;
		Eingabefelder["AnreiseMonat"]=getElementsByName("AnreiseMonat")[0].value;
		Eingabefelder["AnreiseJahr"]=Number(getElementsByName("AnreiseJahr")[0].value);
		if (Eingabefelder["AnreiseJahr"]<2000) Eingabefelder["AnreiseJahr"]+=2000;
		Eingabefelder["AbreiseTag"]=getElementsByName("AbreiseTag")[0].value;
		Eingabefelder["AbreiseMonat"]=getElementsByName("AbreiseMonat")[0].value;
		Eingabefelder["AbreiseJahr"]=Number(getElementsByName("AbreiseJahr")[0].value);
		if (Eingabefelder["AbreiseJahr"]<2000) Eingabefelder["AbreiseJahr"]+=2000;
		Eingabefelder["AnzahlKinder"]=getElementsByName("AnzahlKinder")[0].value;
		Eingabefelder["ERM"]=Number(getElementsByName("AnzahlErmaessigt")[0].value);
		Eingabefelder["P18"]=Number(getElementsByName("AnzahlNormal")[0].value);
		Eingabefelder["HUND"]=Number(getElementsByName("AnzahlHunde")[0].value);
		
	
	
	var Anreisetag=JAC_getTag(new Date(Eingabefelder.AnreiseJahr, Eingabefelder.AnreiseMonat-1,Eingabefelder.AnreiseTag), true);
	var Abreisetag=JAC_getTag(new Date(Eingabefelder.AbreiseJahr, Eingabefelder.AbreiseMonat-1,Eingabefelder.AbreiseTag), true);
	var Text = "";
	var i;
	var Tax=0;
	for (i=0;i<Reisezeiten.length;i++) {
		
		if (Eingabefelder.AnreiseJahr <= Eingabefelder.AbreiseJahr) {
			if ((i < Abreisetag && i >= Anreisetag) || (i == Anreisetag && ((Abreisetag-Anreisetag) == 0))) {
				Tax+=Preise[Reisezeiten[i]].P18*Eingabefelder.P18
				Tax+=Preise[Reisezeiten[i]].ERM*Eingabefelder.ERM
				Tax+=Preise[Reisezeiten[i]].HUND*Eingabefelder.HUND
			} 
		} else {
			if ((i < Abreisetag && i < Anreisetag) || (i > Abreisetag && i >= Anreisetag)) {
				Tax+=Preise[Reisezeiten[i]].P18*Eingabefelder.P18
				Tax+=Preise[Reisezeiten[i]].ERM*Eingabefelder.ERM
				Tax+=Preise[Reisezeiten[i]].HUND*Eingabefelder.HUND
			}
		}
		
	}
	
	if (Eingabefelder.AnreiseJahr && Eingabefelder.AnreiseMonat && Eingabefelder.AnreiseTag && Eingabefelder.AbreiseJahr && Eingabefelder.AbreiseMonat && Eingabefelder.AbreiseTag) { 
		Tax=Tax.toFixed(2) 
	} else { 
		Tax="" 
	}
	
	if (( Eingabefelder.AbreiseJahr - Eingabefelder.AnreiseJahr)>1 || ( Eingabefelder.AbreiseJahr - Eingabefelder.AnreiseJahr)<0) {
		Tax=""
	}
	
	if (Eingabefelder.AnreiseJahr == Eingabefelder.AbreiseJahr && Abreisetag-Anreisetag < 0) {
		Tax=""
	}
	
	if (( Eingabefelder.AbreiseJahr - Eingabefelder.AnreiseJahr)==1 && Anreisetag - Abreisetag< 0) {
		// Tax=""
	}

	
	getElementsByName("Gesamtbetrag")[0].value=Tax

	}
		
}

function JAC_getTag(datum,toCurrentYear){
	
	if (!toCurrentYear) toCurrentYear=false; 
	var jetzt = new Date();
	var Jahr = jetzt.getFullYear();
	
	var TagMS= 86400000
	this.datum= datum
	this.datum.setHours(12)
	this.datum.setMinutes(0)
	this.datum.setSeconds(0)
	var Tag= this.datum.getTime()
	this.datum.setDate(1)
	this.datum.setMonth(0)
	if (toCurrentYear) this.datum.setFullYear(jetzt.getFullYear());
	var STag=this.datum.getTime()

	return Math.ceil((Tag-STag)/TagMS)
}





