// Datumsüberprüfung und Kalenderfenster zur Datumsauswahl
//
// (c) 2000-2001 Bernhard Steffen
//
// Datei erstellt:   2000-05-22 Bernhard Steffen
// Letzte Aenderung: 2004-01-09 tg check_DatumBis(val_bis) eingefügt
//                   2002-03-20 Bernhard Steffen

var grenzJahr	= 70;
var bs_error	= "";

var D = new Date();
var bs_tag		= D.getDate();
var bs_monat	= D.getMonth();
var bs_jahr		= (D.getYear() % 100) + 2000;
var bs_cwd;
var bs_ff;

function bs_setError (Feld, Wert)
{
	bs_error += Feld + ": Ungültiger Wert eingegeben - setze " + Feld + " auf " + Wert + ".\n";
}

function bs_cd_helper(val_ein)
// überprüfe das Datum im übergebenen Formularfeld (dd.mm.[yy]yy)
{
	bs_ff = val_ein;
	if (bs_ff.value != '')
	{
		var val		= bs_ff.value + "...";
			val		= val.replace(/[-\/]/g,".");
			val		= val.replace(/[a-z\s]/gi,"");
		var first	= val.indexOf(".");
		var second	= val.indexOf(".",first+1);
		var third	= val.indexOf(".",second+1);
		var D		= new Date(); 
		bs_error = "";

		// wenn Tag nicht definiert: setze auf heutigen Tag:
		bs_tag		= parseInt(val.substring(0,       first ),10); if (!bs_tag)		{ bs_tag	= D.getDate();		bs_setError ("Tag",   bs_tag);   };
		// wenn Monat nicht definiert: setze auf heutigen Monat:
		bs_monat	= parseInt(val.substring(first +1,second),10); if (!bs_monat)	{ bs_monat	= D.getMonth()+1;	bs_setError ("Monat", bs_monat); };
		// wenn Jahr nicht definiert: setze auf aktuelles Jahr, sofern (Tag,Monat) in Zukunft liegt; sonst: setze auf nächstes Jahr
		bs_jahr		= parseInt(val.substring(second+1,third ),10); if (!bs_jahr)	{ bs_jahr	= D.getYear();  if ( (bs_monat < (1+D.getMonth())) || ( (bs_monat == (1+D.getMonth())) && (bs_tag < D.getDate()) ) ) { bs_jahr++; } };

		if (bs_jahr < grenzJahr)	{ bs_jahr += 2000; };
		if (bs_jahr < 1900)			{ bs_jahr += 1900; };
		if (bs_monat<1)				{ bs_monat = 1;		bs_setError ("Monat", 1); };
		if (bs_monat>12)			{ bs_monat = 12;	bs_setError ("Monat", 12); };
		if (bs_tag < 1)				{ bs_tag = 1;		bs_setError ("Tag", 1); };
		if (bs_tag > get_dom(bs_monat,bs_jahr)) { bs_tag = get_dom(bs_monat,bs_jahr); bs_setError ("Tag", bs_tag); };
		bs_write();
	}
}

function checkDateValue(val_ein)
// überprüfe das Datum und gib ggf. Fehlermeldung aus
{
	bs_cd_helper(val_ein);
	if (bs_error != "") { alert (bs_error); };
}

function check_DatumBis(val_bis)
// überprüfe, ob Datum_Bis ist leer oder kleiner als Datum_Von und ergänze dieses ggf.
{
 if (val_bis.value <= bs_ff.value) { val_bis.value = bs_ff.value; };
}

function bs_write()
// gib das angegebene Datum im Formularfeld aus
{
	if (bs_jahr < grenzJahr)	{ bs_jahr += 2000; };
	if (bs_jahr < 1900)			{ bs_jahr += 1900; };
	bs_ff.value = ((bs_tag<10)?"0":"") + (bs_tag) + ((bs_monat<10)?".0":".") + (bs_monat) + "." + (bs_jahr);
}

function get_dom(monat, jahr)
// days of month
{
	var dom = new Array (31,28,31,30,31,30,31,31,30,31,30,31);
	if (monat == 2) { if ( (jahr % 4 == 0) && ( (jahr % 100 != 0) || (jahr % 400 == 0) ) ) { dom[1] = 29; } }
	if ((monat >= 1) && (monat <= 12)) { return dom[monat-1]; };
}

function bs_calendar(val_ein)
{
	bs_cd_helper(val_ein);
	bs_cwd = window.open("about:blank", "bs_calendar", "width=190,height=190,resizable=yes,scrollbars=no");
	bs_cwd.focus();
	bs_cPaint(bs_jahr,bs_monat);
}

function bs_cSet(j,m,t)
{
	bs_jahr		= j;
	bs_monat	= m;
	bs_tag		= t;
	bs_write();
	window.focus();
	bs_cwd.close();
}

function bs_cPaintHelper(j,m)
{
	return "\"javascript:opener.bs_cPaint(" + j + "," + m + ");\"";
}
function bs_cPaint(j,m)
{
	var mn = new Array ("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	if(m<1)		{ m=12; j--; }
	if(m>12)	{ m=1;  j++; }

	// Kalender-Vorspann:
	tmp = "<html><head><title>Kalender</title>\r\n";
	tmp += "<meta name=\"Author\" tmp=\"Bernhard Steffen\">\r\n";
	tmp += "<style>";
	tmp += "body,p,td { font-family:Verdana,Arial,sans-serif; font-size:8pt; font-color:#000000; }";
	tmp += "a { text-decoration:none; }";
	tmp += "</style>";
	tmp += "</head><body bgcolor=white><font face=Verdana,Arial,Helv size=2>";
	tmp += "<table border=0 cellspacing=0 cellpadding=0 align=center valign=center width=100% height=100%><tr valign=middle><td>";
	tmp += "<table border=0 cellspacing=0 cellpadding=3 align=center>";
	tmp += "<tr align=center bgcolor=lightgrey><td><a href=" + bs_cPaintHelper(j,(m-1)) + ">&lt;</a></td><td colspan=5><strong>" + mn[m-1] + " " + j + "</strong></td><td><a href=" + bs_cPaintHelper(j,(m+1)) + ">&gt;</a></td></tr>";
	tmp += "<tr align=center><td>So</td><td>Mo</td><td>Di</td><td>Mi</td><td>Do</td><td>Fr</td><td>Sa</td></tr>";

	// eigentlicher Kalender
	leer = (new Date(j,m-1,1)).getDay(); // 0=So, 1=Mo, ...
	maxt = get_dom(m,j);
	if (leer > 0) { tmp += "<tr align=right><td colspan=" + leer + "><br></td>"; }
	for(t=1;t<=maxt;t++)
	{
		if ( ((t+leer)%7) == 1 )
		{
			if(t>1) { tmp+= "</tr>"; };
			tmp+= "<tr align=right>";
		}
		tmp += "<td";
		if ( (j==bs_jahr) && (m==bs_monat) && (t==bs_tag) ) { tmp += " bgcolor=lightgrey"; };
		tmp += "><a href=\"javascript:opener.bs_cSet(" + j + "," + m + "," + t + ");\">" + t + "</a></td>";
	}
	if ( ((maxt+leer)%7) != 0) { tmp += "<td colspan=" + (7-(maxt+leer)%7) + "><br></td></tr>"; }

	// Kalender-Nachspann:
	tmp += "<tr align=center bgcolor=lightgrey><td><a href=" + bs_cPaintHelper((j-1),m) + ">&lt;&lt;</a></td><td><a href=" + bs_cPaintHelper(j,(m-1)) + ">&lt;</a></td><td colspan=3><a href=\"javascript:opener.bs_cSet(" + bs_jahr + "," + bs_monat + "," + bs_tag + ");\">schlie&szlig;en</a></td><td><a href=" + bs_cPaintHelper(j,(m+1)) + ">&gt;</a></td><td><a href=" + bs_cPaintHelper((j+1),m) + ">&gt;&gt;</a></td></tr>";
	tmp += "</table>";
	tmp += "</td></tr></table>";
	tmp += "</font></body></html>";
	bs_cwd.document.open();
	bs_cwd.document.write(tmp);
	bs_cwd.document.close();
	bs_cwd.focus();
}
