<!-- Begin
function correct_date(dateStr) {
var datePat = /^(\d{1,2})(\/|.)(\d{1,2})\2(\d{4})$/; // requires 4 digit year
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert("Datumseingabe ist ungültig!")
return false;
}
month = matchArray[3]; // parse date into variables
day = matchArray[1];
year = matchArray[4];
if (month < 1 || month > 12) { // check month range
alert("Monat muss zwischen 1 und 12 liegen!");
return false;
}
if (day < 1 || day > 31) {
alert("Tag muss zwischen 1 and 31 liegen!");
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("Der Monat "+month+" hat keine 31 Tage!")
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day>29 || (day==29 && !isleap)) {
alert("Der Februar im Jahr " + year + " hat keine " + day + " Tage!");
return false;
   }
}
return true;
}

function datumsanzeige(dateObj) {
month = dateObj.getMonth()+1;
month = (month < 10) ? "0" + month : month;
day   = dateObj.getDate();
day = (day < 10) ? "0" + day : day;
year  = dateObj.getYear();
if (year < 2000) year += 1900;
return (day + "." + month + "." + year);
}

function termin_rechner(pregform) {
periode = new Date(); // creates new date objects
ovulation = new Date(); // creates new date objects
geburtstermin = new Date(); // creates new date objects
today = new Date(); // creates new date objects
startTime = new Date(); // creates new date objects
erster_us = new Date(); // creates new date objects
erster_us_ende = new Date(); // creates new date objects
chorion_zotten = new Date(); // creates new date objects
chorion_zotten_ende = new Date(); // creates new date objects
fruchtwasser = new Date(); // creates new date objects
fruchtwasser_ende = new Date(); // creates new date objects
nackentransparenz = new Date(); // creates new date objects
nackentransparenz_ende = new Date(); // creates new date objects
zweiter_us = new Date(); // creates new date objects
zweiter_us_ende = new Date(); // creates new date objects
organ_us = new Date(); // creates new date objects
organ_us_ende = new Date(); // creates new date objects
dritter_us = new Date(); // creates new date objects
dritter_us_ende = new Date(); // creates new date objects
mutterschutz = new Date(); // creates new date objects
doppler_us = new Date(); // creates new date objects
doppler_us_ende = new Date(); // creates new date objects

zyklus = 0, eisprung = 0; // sets variables to invalid state ==> 0

if (pregform.periode.value != "") {
if (correct_date(pregform.periode.value)) { // Validates menstual date 
	periodeinput = new Date(pregform.periode.value);
	periode.setTime(periodeinput.getTime())
	zyklus = (pregform.zyklus.value == "" ? 28 : pregform.zyklus.value); // defaults to 28
	// validates zyklus range, from 22 to 45
	if (pregform.zyklus.value != "" && (pregform.zyklus.value < 22 || pregform.zyklus.value > 45)) {
	alert("Ihre Zyklusdauer ist entweder zu kurz oder zu lang \n"
	+ "um die Termine richtig zu berechnen! Die Berechnung \n"
	+ "wird dennoch mit Ihren Daten erfolgen. ");
	}
	eisprung = (pregform.eisprung.value == "" ? 14 : pregform.eisprung.value); // defaults to 14
	// validates eisprung range, from 9 to 16
	if (pregform.eisprung.value != "" && (pregform.eisprung.value < 9 || pregform.eisprung.value > 16)) {
	alert("Ihr Eisprung ist entweder zu früh oder zu spät \n"
	+ "um die Termine richtig zu berechnen! Die Berechnung  \n"
	+ "wird dennoch mit Ihren Daten erfolgen. ");
	}
	// sets ovulation date to periode date + zyklus days - eisprung days
	// the '*86400000' is necessary because date objects track time
	// in milliseconds;  86400000 milliseconds equals one day
	var periodeTime = (month + "/" + day + "/" + year)
	// Beginn der letzten Perione + Zykluslänge + 2 Tage - Eisprung
	// ovulation.setTime((Date.parse(periodeTime)) + (zyklus*86400000) + (2*86400000) - (eisprung*86400000));
	// Beginn der letzten Perione  + Eisprung
	ovulation.setTime(Date.parse(periodeTime) + (eisprung*86400000));
	// startTime ist die Berechnungsbasis und kann hier unterschiedlich gesetzt werden, ohne sämtliche
	// Formeln anpassen zu müssen, wen sich die Basis ändern sollte
	startTime.setTime(Date.parse(periodeTime) - 7*86400000 -2*86400000);
	startTime.setTime(Date.parse(periodeTime) - 0*86400000);
	pregform.mupasstermin.value = "";  // die andere Startzeit löschen
	}
else return false; // otherwise exits
}

if (pregform.mupasstermin.value != "") {
if (correct_date(pregform.mupasstermin.value)) { // Validates menstual date 
	periodeinput = new Date(pregform.mupasstermin.value);
	periode.setTime(periodeinput.getTime())
	var GeburtTime = (month + "/" + day + "/" + year)
	ovulation.setTime((Date.parse(GeburtTime)) - (266*86400000));
	// startTime ist die Berechnungsbasis und kann hier unterschiedlich gesetzt werden, ohne sämtliche
	// Formeln anpassen zu müssen, wen sich die Basis ändern sollte
 	startTime.setTime(ovulation.getTime() - 14*86400000 );	
	pregform.periode.value = "";  // die andere Startzeit löschen
	}
else return false; // otherwise exits
}

pregform.befruchtung.value = datumsanzeige(ovulation);

// sets due date to ovulation date plus 266 days
geburtstermin.setTime(ovulation.getTime() + 266*86400000);
pregform.geburtstermin.value = datumsanzeige(geburtstermin);
// sets fetal age to 14 + 266 (pregnancy time) - time left
var fetalalter = 266 - ((geburtstermin - today) / 86400000);
weeks = parseInt(fetalalter / 7); // sets weeks to whole number of weeks
days = Math.floor(fetalalter % 7); // sets days to the whole number remainder
// fetal age message, automatically includes 's' on week and day if necessary
fetalalter = (weeks > 0 ? (weeks + " Woche" + (weeks > 1 ? "n" : "")) + ", ":"" )+ days + " Tag" + (days != 1 ? "e" : "");
pregform.fetalalter.value = fetalalter;

erster_us.setTime(startTime.getTime() + 8*7*86400000);
pregform.erster_us.value = datumsanzeige(erster_us);
erster_us_ende.setTime(erster_us.getTime() + 4*7*86400000);
pregform.erster_us_ende.value = datumsanzeige(erster_us_ende);

chorion_zotten.setTime(startTime.getTime() + (11*7)*86400000);
pregform.chorion_zotten.value = datumsanzeige(chorion_zotten);
chorion_zotten_ende.setTime(startTime.getTime() + (12*7+6)*86400000);
pregform.chorion_zotten_ende.value = datumsanzeige(chorion_zotten_ende);

nackentransparenz.setTime(startTime.getTime() + (11*7+3)*86500000);
pregform.nackentransparenz.value = datumsanzeige(nackentransparenz);
nackentransparenz_ende.setTime(startTime.getTime() + (13*7+6)*86400000);
pregform.nackentransparenz_ende.value = datumsanzeige(nackentransparenz_ende);

fruchtwasser.setTime(startTime.getTime() + (13*7+5)*86400000);
pregform.fruchtwasser.value = datumsanzeige(fruchtwasser);
fruchtwasser_ende.setTime(startTime.getTime() + (15*7+6)*86400000);
pregform.fruchtwasser_ende.value = datumsanzeige(fruchtwasser_ende);

zweiter_us.setTime(startTime.getTime() + 18*7*86400000);
pregform.zweiter_us.value = datumsanzeige(zweiter_us);
zweiter_us_ende.setTime(zweiter_us.getTime() + (4*7-1)*86400000);
pregform.zweiter_us_ende.value = datumsanzeige(zweiter_us_ende);

organ_us.setTime(startTime.getTime() + (19*7+5)*86400000);
pregform.organ_us.value = datumsanzeige(organ_us);
organ_us_ende.setTime(startTime.getTime() + (22*7)*86400000);
pregform.organ_us_ende.value = datumsanzeige(organ_us_ende);

dritter_us.setTime(startTime.getTime() + 28*7*86400000);
pregform.dritter_us.value = datumsanzeige(dritter_us);
dritter_us_ende.setTime(dritter_us.getTime() + (4*7-1)*86400000);
pregform.dritter_us_ende.value = datumsanzeige(dritter_us_ende);

doppler_us.setTime(startTime.getTime() + (26*7)*86400000);
pregform.doppler_us.value = datumsanzeige(doppler_us);
doppler_us_ende.setTime(startTime.getTime() + (33*7)*86400000);
pregform.doppler_us_ende.value = datumsanzeige(doppler_us_ende);

mutterschutz.setTime(startTime.getTime() + 34*7*86400000);
pregform.mutterschutz.value = datumsanzeige(mutterschutz);

return false; // form should never submit, returns false
}
//  End -->
