var gbCalWinOpen = false;
var goCalendarWindow = null;
var displayYear;

/*************************************************************************************************/
function clickVon(asCaption, abDateDiff)
{
	if (convert_date(document.Form.eZeitraumVon, '1') == true) 
	{
		fPopUpCalendarLoog('eZeitraumVon', 'Form', 2012, 2011, abDateDiff, asCaption);
	}
}

/*************************************************************************************************/
function clickBis(asCaption, abDateDiff)
{
	if (convert_date(document.Form.eZeitraumBis, '1') == true) 
	{
		fPopUpCalendarLoog('eZeitraumBis', 'Form', 2012, 2011, abDateDiff, asCaption);
	}
}

/*************************************************************************************************/
function fPopUpCalendarLoog(asFieldName, asFormName, anYearMax, anYearMin, abDateDiff, asTitel)
{
	// Übergabeparameter
	sFieldName = asFieldName;
	sFormName = asFormName;
	nYearMax = anYearMax;
	nYearMin = anYearMin;
	bDateDiff = abDateDiff;
	sTitel = asTitel;

   	oForm = "document.forms['" + sFormName + "']";
	oField = eval(oForm + "." + sFieldName);
	
	// Vorbelegungen
	aMonthInYear = new Array("","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	aWeekDays = new Array("","So","Mo","Di","Mi","Do","Fr","Sa");

	// Datum des Feldes
	if (oField.value != "")
	{
		var dateparts = oField.value.split(".");
		currDate = new Date(dateparts[2], dateparts[1] - 1, dateparts[0]);
	} 
	else 
	{
	    currDate = new Date();
	}
    currDay	  = currDate.getDate();
    currMonth = currDate.getMonth();
    currYear  = currDate.getYear();
	if (currYear < 999) currYear += 1900;

	// Kalenderanzeige: Monat, Jahr
    displayMonth = currMonth;
    displayYear = currYear;
    if (displayYear < anYearMin) displayYear = anYearMin;
    if (displayYear > anYearMax) displayYear = anYearMax;

    // Kalender öffnen
    var windowOptions = "toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,copyhistory=yes,width=252,height=298,left=505,top=345";
	goCalendarWindow = this.open("Datumseingabe", "goCalendarWindow", windowOptions);    
	goCalendarWindow.callingForm = this;
    gbCalWinOpen = true;

    fRedrawCalendar();
}

/*************************************************************************************************/
function dateToString(aDate)
{
	var formatDate = new String(null);
	var formatYear;

	if (aDate.getDate() < 10)
		{formatDate = '0' + (aDate.getDate());}
	else
		{formatDate = (aDate.getDate());}

	if ((aDate.getMonth()+1) < 10)
		{formatDate = formatDate + '.0' + (aDate.getMonth()+1);}
	else
		{formatDate = formatDate + '.' + (aDate.getMonth()+1);}

	formatYear = aDate.getYear();
	if (formatYear < 1000) formatYear += 1900;
	formatDate = formatDate + "." + (formatYear);

	return formatDate;
}

/*************************************************************************************************/
function fCloseCalWindow() 
{
    if (gbCalWinOpen) 
    {
		gbCalWinOpen = false;
		goCalendarWindow.close();
		if (bDateDiff == true)
		{
			fCompareDates("eZeitraumVon", "eZeitraumBis");
		}
    }
}

/*************************************************************************************************/
function fCloseCalWindow2() 
{
    if (gbCalWinOpen) 
    {
		gbCalWinOpen = false;
		goCalendarWindow.close();
    }
}

/*************************************************************************************************/
function fCompareDates(vonDate, bisDate)
{
	var AnreiseDate;
	var AnreiseTime;
	var AbreiseDate;
	var AbreiseTime;
	
	var frm = "document.forms['" + sFormName + "']";
	var fldVon = eval(frm + "." + vonDate)
	var fldBis = eval(frm + "." + bisDate)
	
	convert_date(fldBis, '0')
	convert_date(fldVon, '0')

	var aVon = (fldVon.value).split(".");
	var aBis = (fldBis.value).split(".");

	for (i=0; i<3; i++)
	{
		aVon[i] = parseInt(aVon[i],10);
		aBis[i] = parseInt(aBis[i],10);
	}

	if (sFieldName == 'eZeitraumVon')
	{
		AnreiseDate = new Date(aVon[2],aVon[1]-1,aVon[0]);
		AnreiseTime = AnreiseDate.getTime();
		fldVon.value = dateToString(AnreiseDate);
	
		if (convert_date(fldBis, '0') == true)
		{
			// Wenn bis kleiner von
			if ((aBis[2] < aVon[2]) || (aBis[2] == aVon[2] && aBis[1] < aVon[1]) || (aBis[2] == aVon[2] && aBis[1] == aVon[1] && aBis[0] <= aVon[0]))
			{
				AbreiseDate = new Date();
				AbreiseTime = AnreiseTime + (1000*60*60*24);
				AbreiseDate.setTime(AbreiseTime);
			} 
			else 
			{
				AbreiseDate = new Date(aBis[2],aBis[1]-1,aBis[0]);
			}
			
	 		fldBis.value = dateToString(AbreiseDate);
	 		fldBis.focus();
	 		fldVon.focus();
	 	}	
	}

	if (sFieldName == 'eZeitraumBis')
	{
		AbreiseDate = new Date(aBis[2],aBis[1]-1,aBis[0]);
		AbreiseTime = AbreiseDate.getTime();
		fldBis.value = dateToString(AbreiseDate);

		if (convert_date(fldVon, '0') == true)
		{
			// Wenn von größer bis
			if ((aBis[2] < aVon[2]) || (aBis[2] == aVon[2] && aBis[1] < aVon[1]) || (aBis[2] == aVon[2] && aBis[1] == aVon[1] && aBis[0] <= aVon[0]))
			{
				AnreiseDate = new Date();
				AnreiseTime = AbreiseTime - (1000*60*60*24);
				AnreiseDate.setTime(AnreiseTime);
			} 
			else 
			{
				AnreiseDate = new Date(aVon[2],aVon[1]-1,aVon[0]);
			}
			
			fldVon.value = dateToString(AnreiseDate);
			fldVon.focus();
			fldBis.focus();
		}
	}
}

/*************************************************************************************************/
// repaint the calendar
function fRedrawCalendar() 
{
    var firstOfMonth = new Date(displayYear, displayMonth, 1);
    fDrawCalendar(firstOfMonth);
    goCalendarWindow.callingForm = this;
    goCalendarWindow.document.open();
    goCalendarWindow.document.write(lsHtmlBody);
    goCalendarWindow.document.close();
    goCalendarWindow.callingForm = this;
    goCalendarWindow.focus();
}

/*************************************************************************************************/
// fill the calling forms date and month
function fUpdDateFields(returnDay, returnMonth, returnYear) 
{
	var frm = "document.forms['" + sFormName + "']";
	var frmField;
	
	frmField = eval (frm + "." + sFieldName)
	frmField.value = returnDay + "." + returnMonth + "." + returnYear;

    fCloseCalWindow();
}

/*************************************************************************************************/
// set the month
function changeMonth (increment) 
{ 
    var nextMonth = displayMonth;
    if (increment == 1) nextMonth++ ;
		else nextMonth-- ;
		
	if (nextMonth > 11) 
	{
		nextMonth = 0;
		displayYear++;
		if (displayYear > nYearMax) 
		{
			nextMonth = 11;
			displayYear = nYearMax;
		}
	}
	else if (nextMonth < 0) 
	{
		nextMonth = 11;
		displayYear--;
		if (displayYear < nYearMin) 
		{
			nextMonth = 0;
			displayYear = nYearMin;
		}
	}		
	
    displayMonth = nextMonth;
    fRedrawCalendar();
}

/*************************************************************************************************/
// set the Year
function changeYear(increment) 
{
    if (increment == 1) 
    {
		displayYear++;
		if (displayYear > nYearMax) 
		{
			nextMonth = 11;
			displayYear = nYearMax;
		}
    }
	else 
	{
		displayYear--;
		if (displayYear < nYearMin) 
		{
			nextMonth = 0;
			displayYear = nYearMin;
		}
	}
    fRedrawCalendar();
}

/*************************************************************************************************/
function fRedrawCal(vnVal, vsOpt) 
{
	switch(vsOpt) 
	{
		case "m":
			displayMonth = vnVal - 1;
			break;
		case "y":
			displayYear = vnVal;
			if (displayYear < 1000) displayYear += 1900;
			break;
	}	
    fRedrawCalendar();
}

/*************************************************************************************************/
// generate the calendar document
function fDrawCalendar(theDate) 
{
    var y = theDate.getYear();
    if (y < 1000) y += 1900;

    var monthNum = theDate.getMonth();
    var nextDate = new Date(y, monthNum + 1, 1);

    lsHtmlBody = "<!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN\">\n";
    lsHtmlBody += "<html>\n";
    lsHtmlBody += "<head>\n";
    lsHtmlBody += "<title>Kalender<\/title>\n";
    lsHtmlBody += "<meta http-equiv=\"Content-Type\" content=\"text\/html; charset=ISO-8859-1\">\n";
    lsHtmlBody += "<meta http-equiv=\"Content-Style-Type\" content=\"text\/css\">\n";
    lsHtmlBody += "<meta name=\"language\" content=\"de\">\n";
    lsHtmlBody += "<style type=\"text/css\">\n";
    lsHtmlBody += "body	         {font-family:Arial,sans-serif; font-size:100.01%; background-color:#F6FAFE; margin:0; padding:0;}\n";
    lsHtmlBody += "table         {border:solid 1px #666666; border-collapse:collapse; font-size:1em;}\n";
    lsHtmlBody += "td            {text-align:center; border:solid 1px #666666; font-family:Arial,sans-serif; font-size:0.8em; width:30px; height:28px; background-color:#FFFFFF;}\n";
    lsHtmlBody += "td.topSunday  {background-color:#eeeeee; color:#C64926; font-weight:bold;}\n";
    lsHtmlBody += "td.topWeekday {background-color:#eeeeee; color:#1F6CBA; font-weight:bold;}\n";

    lsHtmlBody += "a             {color:#000000; font-family:Arial,sans-serif; font-size:1em; display:block; width:100%; padding:5px 0 4px 0; text-decoration:none;}\n";
    lsHtmlBody += "a:link, a:visited {background-color:#ffffff; color:#000000;}\n";
    lsHtmlBody += "a:hover, a:active {background-color:#972D1B; color:#ffffff;}\n";

    lsHtmlBody += "a.tagSo       {}\n";
    lsHtmlBody += "a.tagSo:link, a.tagSo:visited {background-color:#ffffff; color:#cc1111;}\n";
    lsHtmlBody += "a.tagSo:hover, a.tagSo:active {background-color:#972D1B; color:#ffffff;}\n";

    lsHtmlBody += "<\/style>\n";
    lsHtmlBody += "<\/head>\n";
    lsHtmlBody += "<body>\n";

	lsHtmlBody += "<form name=\"cal\" action=\"\">";
    lsHtmlBody += "<div style=\"background-color:#1C6AB2; color:#FFFFFF; font-size:1.3em; font-weight:bold; padding:3px 3px 3px 12px; margin-bottom:7px; border-bottom:solid 1px #666666; \">" + sTitel + "<\/div>";
    lsHtmlBody += "<div style=\"display:block; height:100%; margin:6px 10px 0 10px;\">";
    fDrawOneMonth(theDate);
    lsHtmlBody += "<\/div>";
    lsHtmlBody += "<\/form>";
    lsHtmlBody += "<\/body>";
    lsHtmlBody += "<\/html>";
}

/*************************************************************************************************/
function fDrawOneMonth(theDate) 
{
    var d;
    var monthNum = theDate.getMonth();
    var dispYear = theDate.getYear();
    
    if (dispYear < 1000) dispYear += 1900;

    lsHtmlBody += "<select name=\"newMonth\" style=\"font-size:0.9em; margin:4px 10px 0 0; width:7em;\" onchange=\"javascript:callingForm.fRedrawCal(this.options[this.selectedIndex].value, 'm');\">\n";
	for (i = 1; i < aMonthInYear.length; i++) 
	{
		lsHtmlBody += "<option value=\"" + i + "\""
		if ((monthNum+1) == i) 
		{
			lsHtmlBody += " selected";
		}
		lsHtmlBody += ">" + aMonthInYear[i] + "<\/option>\n";
	}
	lsHtmlBody += "<\/select>\n";
    
    lsHtmlBody += "<select name=\"newYear\" style=\"font-size:0.9em; margin:4px 0 0 0; width:5em;\" onChange=\"javascript:callingForm.fRedrawCal(this.options[this.selectedIndex].value, 'y');\">\n";
	for (i = nYearMin; i <= nYearMax; i++) 
	{
		lsHtmlBody += "<option value=\"" + i + "\""
		if (i == dispYear) 
		{
			lsHtmlBody += " selected";
		}
		lsHtmlBody += ">" + i + "<\/option>\n";
	}
	lsHtmlBody += "<\/select>";

	lsHtmlBody += "<table style=\"width:100%; margin-top:12px;\">\n";
    lsHtmlBody += "<tr>";
    for (d = 2; d <= 8; d++) 
    {
		if (d == 8) 
		{
			lsHtmlBody += "<td class=\"topSunday\">" + aWeekDays[1] + "<\/td>";
		}
		else 
		{
			lsHtmlBody += "<td class=\"topWeekday\">" + aWeekDays[d] + "<\/td>";
		}
    }
    lsHtmlBody += "<\/tr>\n";

    fDrawCalBody(theDate);
    lsHtmlBody += "<\/table>\n";
}
 
 /*************************************************************************************************/
// generate the calendar body
function fDrawCalBody(theDate)
{
	var nRow;
	var nCol;
	var today = new Date();

	var nShowYear = theDate.getFullYear();
    if (nShowYear < 20) 
    {
		nShowYear += 1900;
	}

    var myDate = new Date(nShowYear, theDate.getMonth(), 1);
    var monthNum = myDate.getMonth();

    fGetFirstMonday(myDate);

    for (nRow = 0; nRow < 6; nRow++) 
    {
		lsHtmlBody += "<tr>\n";
		for (nCol = 0; nCol < 7; nCol++) 
		{
			if (myDate.getMonth() != monthNum) 
			{
				// Tage die nicht zum Ausgabemonat gehören
				lsHtmlBody += "<td>&nbsp;&nbsp;<\/td>\n";
			}	
			else 
			{
				var date = myDate.getDate();
				var m = myDate.getMonth() + 1;
				var ahref = "";

				if (nCol==6)
				{
					ahref = "<a class=\"tagSo\"";
				} 
				else 
				{
					ahref = "<a class=\"tagNormal\"";
				}
				
				lsHtmlBody += "<td>";

				// Der eingestellte Tag wird makiert
				if (myDate.getDate() == currDay && monthNum == currMonth && nShowYear == currYear) 
				{
					ahref += " style=\"background-color:#f33b1d; color:#ffffff;\"";
				}


				// Tage vor aktuellem Datum
				if (myDate.getTime() <= (today.getTime() - (1000*60*60*24) + 1))
				{
					ahref += " style=\"background-color:#ffffff; color:#777777;\"";
				}

				
				ahref += " href=\"#\" onclick=\"javascript:callingForm.fUpdDateFields(";
				ahref += date + "," + m + ", " + nShowYear + ")\"";
				ahref += ">";

				lsHtmlBody += ahref + date + "<\/a>";
				lsHtmlBody += "<\/td>\n";
			}
	    myDate.setDate(myDate.getDate() + 1); 	    // increment the date
	}
	lsHtmlBody += "<\/tr>\n";
    }
}

/*************************************************************************************************/
function fGetFirstMonday(fromDate) 
{
	var wdt = 0;
	
    while (fromDate.getDay() != 1 && wdt < 10)
    {
		fromDate.setDate(fromDate.getDate() - 1);
		wdt++;
    }
}

/*************************************************************************************************/
// einbau in bodytag, schliesst das window automatisch
function fThisWindowOnFocus() 
{
    fCloseCalWindow();
}

/*************************************************************************************************/
function convert_date(field1, errmsg)
{
	var fLength = field1.value.length;
	var day1 = new String(null);
	var month1 = new String(null);
	var year1 = new String(null);
	var outdate1 = null;
	var counter1 = 0;
	var divider_holder = new Array('0','0','0');
	var s = String(field1.value);

	// Leerdatum in aktuelles Datum umsetzen
	if (fLength == 0 || field1.value.toUpperCase() == 'HEUTE')
	{
		var newDate1 = new Date();
	
 		if (navigator.appName == "Netscape")
			var myYear1 = newDate1.getYear() + 1900;
  		else 
  			var myYear1 = newDate1.getYear();
  
		var myMonth1 = newDate1.getMonth()+1;
		var myDay1 = newDate1.getDate();
		field1.value = myDay1 + "." + myMonth1 + "." + myYear1;
		fLength = field1.value.length;
		s = String(field1.value)
	}

	// Zeichenanzahl prüfen
	if (fLength < 6 || fLength > 10)
	{
		if (errmsg == 1) invalid_date(field1);
		return false;   
	}

	// Trenner ermitteln / prüfen
	for (var i=0; i<3; i++)
	{
		if (s.indexOf('.', counter1) != -1)
		{
			divider_holder[i] = s.indexOf('.', counter1);
			counter1 = divider_holder[i] + 1;
		}
	}
	if (divider_holder[0] == 0 || divider_holder[1] == 0 || divider_holder[2] != 0)
	{
		if (errmsg == 1) invalid_date(field1);
		return false;
	}

	day1 = field1.value.substring(0, divider_holder[0]);
	month1 = field1.value.substring(divider_holder[0] + 1, divider_holder[1]);
	year1 = field1.value.substring(divider_holder[1] + 1, field1.value.length);

	// Numerisch prüfen
	if (isNaN(day1) && isNaN(month1) && isNaN(year1))
	{ 
		if (errmsg == 1) invalid_date(field1);
		return false;  
	}

	// Jahreszahl vierstellig
	if (year1.length == 2)
	{
		if ((year1 = validate_year(year1)) == false)
		{
			if (errmsg == 1) invalid_date(field1);
			return false;
		}
	}

	// Datum prüfen
	if ((outdate1 = validate_date(day1, month1, year1)) == false)
	{
		if (errmsg == 1) invalid_date(field1);
		return false;
	}

	// Datum ausgeben
	field1.value = outdate1;
	return true;
}


/*************************************************************************************************/
function validate_date(day2, month2, year2)
{
	var DayArray = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var MonthArray1 = new Array("1","2","3","4","5","6","7","8","9","10","11","12");
	var MonthArray2 = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
	var inpDate = day2 + month2 + year2;

	/* Tag */
	filter1 = /1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31/;
	filter2 = /01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31/;
	if (!filter1.test(day2) && !filter2.test(day2))
	{
		return false;
	}

	/* Monat */
	filter1=/1|2|3|4|5|6|7|8|9|10|11|12/;
	filter2=/01|02|03|04|05|06|07|08|09|10|11|12/;
	if (!filter1.test(month2) && !filter2.test(month2))
	{
		return false;
	}
	  
	/* Schaltjahr */
	var N = Number(year2);
	if ((N%4==0 && N%100 !=0 ) || ( N%400==0))
	{
		DayArray[1]=29;
	}

	/* Check for valid days for month */
	for (var ctr=0; ctr<=11; ctr++)
	{
		if (MonthArray1[ctr] == month2 || MonthArray2[ctr] == month2)
	   	{
			if (day2 <= DayArray[ctr] && day2 > 0)
	        {
				inpDate = day2 + '.' + month2 + '.' + year2;
				return inpDate;
	        }
			else
	        {
				return false;
	        }
	   	}
	}
	return false;
}

/*************************************************************************************************/
// validate_year()
function validate_year(inYear)
{
	if (inYear < 10)
	{
		inYear = "20" + inYear;
		return inYear;
	}
	else if (inYear >= 10)
	{
		inYear = "19" + inYear;
		return inYear;
	}
	else 
	{
		return false;
	}   
}

/*************************************************************************************************/
// invalid_date()
function invalid_date(inField) 
{
	alert("'" + inField.value + "' ist kein gültiges Datum.\n\r" +  
	"Bitte geben sie ein Datum im Format TT.MM.JJJJ ein");
	
	inField.focus();
	inField.select();
	return true;
}

/*************************************************************************************************/
// ergänzt Datumspunkte und Jahreszahl (Eingabe von 4 oder 6 Zahlen für Datum möglich)
function setPunkte(feld)
{
	var fld;
	var wert;
			
	
	// bei Eingabe von ddmm wird das aktuelle jj mit dran gehangen
	if (feld.value.indexOf(".") == -1)
	{
		if (feld.value.length == 4)
		{
			var jetzt = new Date();
			var Jahr = jetzt.getFullYear() + "";
			feld.value = feld.value + Jahr.substr(2,2);
		}
				
		if (feld.value.length == 6)
		{
			wert = feld.value.substr(0,2) + ".";
			wert+= feld.value.substr(2,2) + ".";
			wert+= "20" + feld.value.substr(4,2);
			feld.value = wert;
		}
		if (feld.value.length == 8)
		{
			wert = feld.value.substr(0,2) + ".";
			wert+= feld.value.substr(2,2) + ".";
			wert+= feld.value.substr(4,4);
			feld.value = wert;
		}
	}
}

/*************************************************************************************************/
function getNaechte(aFld)
{
	var frm = document.Form;

	if ((frm.eZeitraumVon.value != "") && (frm.eZeitraumBis.value != ""))
	{
		var aVon = frm.eZeitraumVon.value.split(".");
		var aBis = frm.eZeitraumBis.value.split(".");

		// auf Datum prüfen
		if (validate_date(aVon[0], aVon[1], aVon[2]) == false)
		{
			aFld.value = '?';
			return true;
		}
		if (validate_date(aBis[0], aBis[1], aBis[2]) == false)
		{
			aFld.value = '?';
			return true;
		}

		// Jahreszahl 4-stellig setzen
		if (aVon[2].length < 4)	aVon[2] = '20' + aVon[2];
		if (aBis[2].length < 4)	aBis[2] = '20' + aBis[2];

		// Jahr, Monat, Tag
		var von = new Date(aVon[2],(aVon[1]-1),aVon[0]);
		var bis = new Date(aBis[2],(aBis[1]-1),aBis[0]);

		var naechte = Math.round((bis - von) / (1000 * 60 * 60 * 24));
		if (isNaN(naechte))
		{
			aFld.value = '';
		}
		else
		{
			if (naechte <= 0)
				{
					aFld.value = '';
				}
			else
				{
				if (naechte == 1)
					aFld.value = '= ' + naechte + ' Nacht';
				else
					aFld.value = '= ' + naechte + ' Nächte';
				}
		}
	}
}




