//eurodate
//8.7.1999
//Harald Radi
//
//4.11.1999
//schaltjahr-bug behoben
//
//Diese Zeile einfügen
//<input name="input" onBlur="eurodate(this)">
//
//ausserdem solte noch im onsubmit event des formulars ein script eingetragen sein,
//welches für jedes Datumsfeld noch die funktion eurodate(document.[formularname].[Feldname]);
//aufruft.
//
//format: [tt.mm.jj] - als delimiter sind erlaubt: . / -
//______________________________________________________________________


var timer;

function EDErrorMsg(date)
{
	// gibt fehlermeldung aus und setzt den fokus auf das fehlerhafte feld
	
	date.focus();
	alert("Ungültige Datumseingabe !\n\nBitte korrigieren\n\nFormat: [ tt.mm.jjjj ]");
}
//EDErrorMsg()




function eurodate(date)
{
	if(date.value.length)
	{
		// wenn das feld befüllt ist
		// '-',',' und '/' werden durch '.' ersetzt (gültige trennzeichen)
		
		input = date.value;
		input = input.replace(/-/g,".");
		input = input.replace(/,/g,".");
		input = input.replace(/\//g,".");
		date.value = input;

		if(input.indexOf(".") > 2)
		{
			// wenn die zahl vor dem ersten punkt mehr als zwei stellen hat
			EDErrorMsg(date);
			return false;
		}
		else
		{	
			var day = new Number(input.substring(0,input.indexOf(".")));
			if(tmp=input.match(/\b\d+\.\d+\.\d+\D/))
			{
				// wenn der eingegebene wert nicht das format 'zahl.zahl.zahl' hat
				EDErrorMsg(date);
				return false;
			}
			else
			{
				if(!(tmp=input.match(/\D\d\d\D|\D\d\D/))) // monat suchen (ein oder zweistellig)
				{
					EDErrorMsg(date);
					return false;
				}
				else
				{
					var month = new Number(tmp[0].match(/\d\d|\d/)); // zahl zwischen den punkten filtern
					now = new Date();
					if(!(tmp=input.match(/\b\d+\.\d+\.\d+\b/)))
					{
						if(input.match(/\b\d+\.\d+\./))
						{
							// wenn keine jahreszahl angegeben ist, wird das aktuelle jahr angehängt
							year = now.getYear();
							if(year < 100)
								year += 1900;
							input += String(year);
							date.value = input;
						}
					}
					else
					{
						if(tmp=input.match(/\b\d+\.\d+\.\d\d\b/))
						{
							// wenn das jahr zweistellig angegeben wurde, wird es auf vierstellig erweitert
							// (mit den ersten 2 stellen des aktuellen jahres)
							tmp = input.substring( input.lastIndexOf(".") + 1, input.length )
							year = Number(tmp);
							if(now.getYear() < 100)
								year += 1900;
							else
								year += Math.floor(now.getYear() / 100) * 100;
							input = input.match(/\b\d+\.\d+\./) + String(year);
							date.value = input;
						}
					}
					if(!(tmp=input.match(/\b\d+\.\d+\.\d+\b/)))
					{
						// check, ob das datum jetzt gültig ist (sollte immer der fall sein)
						EDErrorMsg(date);
						return false;
					}
					else
					{
						tmp = input.substring( input.lastIndexOf(".") + 1, input.length )
						year = Number(tmp);
						// restliche datumsvalidierung
						if(day < 1)
						{
							EDErrorMsg(date);
							return false;
						}
						else
							if((month < 1) || (month > 12))
							{
								EDErrorMsg(date);
								return false;
							}
							else
								if(month == 2)
								{
									if(day > 29)
									{
										EDErrorMsg(date);
										return false;
									}
									else
										if(day == 29)
											if(year % 4)
											{
												EDErrorMsg(date);
												return false;
											}
											else
											{	
												if(year % 400)
												{
													if(!(year % 100))
													{
														EDErrorMsg(date);
														return false;
													}
												}
											}
								}
								else
									if((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12))
									{
										if(day > 31)
										{
											EDErrorMsg(date);
											return false;
										}
									}
									else
										if(day > 30)
										{
											EDErrorMsg(date);
											return false;
										}
					}
				}
			}
		}
	}
	reset = 0;
	return true;
}
//list
