//===========================================================================================
// globale Konstanten
function getTooltipDistanceX () {return 18;}
function getTooltipDistanceY () {return -64;}
function getScreenHeightBorder () {return 64;}
function getScreenWidthBorder () {return 16;}

function getPopupDelay () {return 350;}
function getCloseDelay () {return 500;}

function getStandardJahrBereichStart() {return 1860;}
function getStandardJahrBereichEnd() {return 2099;}

function getMaxFahrzeugwert() {return 119999;}
//===========================================================================================
function isExplorer() {
	return -1 != navigator.appName.indexOf("Explorer");
}
function isNavigator() {
	return -1 != navigator.appName.indexOf("Netscape");
}
//===========================================================================================
// oeffnen / schliessen eines Nebenfensters
function openRemote(remote, url, name, x,y, w,h) {
  closeRemote(remote);
  remote = window.open( url,
                       	name,
                       	"toolbar=no,location=no,directories=no,resizable=yes,status=no,menubar=no,scrollbars=yes,copyhistory=no,fullscreen=no,dependent=yes,channelmode=no"+
                       	",width=" + w + ",height="+ h +
						",screenX=" + x + ",screenY=" + y + //NS
						",left=" + x + ", top=" + y	//IE
                      );
/*
*/
  if (remote)
    remote.focus();
  return remote;
}

function closeRemote (remote) {
  if (remote  && !remote.closed)
  	remote.close();
}

//===========================================================================================
// oeffnen / schliessen eines Tooltip / UnterFensters
var tooltip;
var oldTooltipURL;
function openTooltip (url, x,y,w,h) {
  if ((url == oldTooltipURL) &&
      (tooltip && !tooltip.closed)) {
	tooltip.focus();
  } else {
	tooltip = openRemote(tooltip, url,"Tooltip", x,y,w,h);
  }

  oldTooltipURL = url;
}

function closeTooltip() {
  closeRemote (tooltip);
}

var subWindow;
function openSubWindow (url, w,h) {
  x = getScreenWidth()/2  - w/2;
  y = getScreenHeight()/2 - h/2;
  subWindow = openRemote(subWindow, url,"Nebenfenster", x,y,w,h);
}

function closeSubWindow() {
  closeRemote (subWindow);
}

function closeAllSubWindows() {
	closeSubWindow();
	closeTooltip();
}
//-------------------------------------------------------------------------------------------
var sPopupTimer;
var sCloseTimer;

function stopPopupTimer() {
  clearTimeout(sPopupTimer)
}

function startPopupTimer (event, url, w,h) {
  stopPopupTimer();
  stopCloseTimer();

  x = getEventScreenX (event) + getTooltipDistanceX();
  y = getEventScreenY (event) + getTooltipDistanceY();
  if (x<0) x=0;
  if (y<0) y=0;
  if (x+w > getScreenWidth() - getScreenWidthBorder())
  	x = getEventScreenX (event) - getTooltipDistanceX() - w - getScreenWidthBorder();
  if (x <= 0)
  	x = getScreenWidth()  - getScreenWidthBorder()  - w;
  if (y+h > getScreenHeight() - getScreenHeightBorder())
  	y = getScreenHeight() - getScreenHeightBorder() - h;

  func = "openTooltip ('"+ url + "', " + x + ", " + y + ", " + w + ", " + h + ");";

  sPopupTimer = setTimeout(func, getPopupDelay());
//	openTooltip (url, x,y,w,h);
}


function stopCloseTimer() {
  clearTimeout(sCloseTimer)
}

function startCloseTimer () {
  stopPopupTimer();
  stopCloseTimer();
  func = "closeTooltip ();";

  sCloseTimer = setTimeout(func, getCloseDelay())

//	closeTooltip ();
}
//===========================================================================================
function getScreenWidth() {
	return screen.width;
}

function getScreenHeight() {
	return screen.height;
}

function getEventScreenX (event) {
	ret=0;
	if (isExplorer()) {
		ev = window.event;
	} else {
		ev = event;
	}
	if (ev.screenX)
	 	ret = ev.screenX;

	return ret;
}

function getEventScreenY (event) {
	ret=0;
	if (isExplorer()) {
		ev = window.event;
	} else {
		ev = event;
	}
	if (ev.screenY)
	 	ret = ev.screenY;

	if (isNavigator()) // Fehler in Netscape...
		ret=getScreenHeight()/2-100;

	return ret;
}


//===========================================================================================
function goBack(s) {
	history.back()
}

//===========================================================================================
//Allg. Utilities
//Liefert den OK-Status-Wert
function getOK () {
	return "OK";
}
function isOK (s) {
	return ("OK" == s);
}

//===========================================================================================
var alertSperre = null;
var oldvalue = null;
//entweder sperre-setzen&alert&focus oder sperre freigeben
//falls OK != txt && Sperre frei && alter Wert des Objekt != neuer Wert
//	sperre Methode so dass nur noch dieses Objekt weiterdurchlaueft
//	zeige den Text in einer Alertbox
//  setze Focus auf das Control obj
//  selektiere Inhalt des Controls
//falls OK == txt || alter Wert des Objekt == neuer Wert
//	gib Sperre fuer dieses Objekt frei
function doSperreAlertFocus (txt, obj) {
	if (
		(!isOK(txt)) &&
		(istAlertFreiFuer(obj))
	   )
	{
		alertSperren (obj);
	   	alert(txt);
		obj.focus();
		obj.select();
	} else {
		alertFreigebenFuerObjekt (obj);
	}
}

function alertSperren (obj) {
	alertSperre = obj;
	oldvalue = obj.value;
//	window.status="gesperrt: "+obj.name+" # "+obj.value;
}
function alertFreigebenFuerObjekt (obj) {
	if (obj  == alertSperre)
	{
		alertSperre = null;
		oldvalue = null;
//		window.status="frei "+obj.name;
	}
}
function istAlertFreiFuer (obj) {
	return (
			(null == alertSperre)  ||
		 	(
				(obj  == alertSperre) &&
				(obj.value != oldvalue)
			)
		);
}

//===========================================================================================
//zerteilt einen String in ein Array von Strings
function splitString (s, delim) {
	return s.split (delim);
}
//zerteilt einen String in ein Array von Strings anhand punktaehnlicher Begrenzer
function splitPunktString (s) {
	return splitString (s, /[\x2d.,:;_ \t\\\/]/);
}

//Schneidet fuehrende und folgende Leerzeichen ab
//Patternmatching scheint nicht richtig regulaer zu funktionieren - deswegen so
function trim(s) {
	if ((null == s) || ("" == s))
		return "";

	var start=s.length;
	var end=0;

	for (i=0; i<s.length; i++)
	{
		ch = s.charCodeAt (i);
		if (!isWhiteSpace(ch)) {
			if (start > i)
				start=i;
			end = i;
		}
	}
	return s.substr (start, end-start+1);
}
//
function isWhiteSpace (charCode){
	var ret = false;
	switch (charCode) {
		case 9:
		case 32:
			ret = true;
		default:
	}
	return ret;
}

//===========================================================================================
//===========================================================================================
//prueft ob ungueltige Zeichen in dem Text vorkommen
function checkBuchstabenZeichen (s) {
	var ret = getOK();
	var t = s.match (/[a-zA-Z\xc4\xd6\xdc\xe4\xf6\xfc\xdf ]*/);
	if (t != s)
		ret = "Der Text enth\xe4lt ung\xfcltige Zeichen.";
	return ret;
}

//===========================================================================================
//===========================================================================================
//Zahlkontrolle
//prueft die Gueltigkeit eines Strings der eine positive ganze Zahl enthaelt
function checkZplusString (s) {
	var ret = "Bitte Zahl eingeben.";
	if ("" != s)
		ret = checkZplusoderLeerString(s);
	return ret;
}
//erlaubt positive ganze Zahl und auch Leerstrings
function checkZplusoderLeerString (s) {
	var ret = checkZahlZeichen (s);
	if (isOK(ret)  &&  (s < 0))
		ret = "Die Zahl mu\xdf positiv sein.";
	return ret;
}

//prueft ob ungueltige Zeichen in der Zahl vorkommen
function checkZahlZeichen (s) {
	var ret = getOK();
	var t = s.match (/[\x2d0123456789 ]*/);
	if (t != s)
		ret = "Die Zahl enth\xe4lt ung\xfcltige Zeichen.";
	return ret;
}

//verschoenert einen gueltigen ZahlString
function beautifyZahl (value) {
	return value - 0;
}

//===========================================================================================
//===========================================================================================
//Datumkontrolle
//prueft die Gueltigkeit eines Strings der ein Datum in der Form "31.12.1960" enthaelt
function checkDatumString (s) {
	s = trim (s);
	var ret = "Bitte Datum eingeben.";
	if ("" != s)
	{
		ret = checkDatumZeichen (s);
		if (isOK(ret)) {
			ret = "Datum fehlerhaft.";
			var ia = splitPunktString (s);
			if (ia.length == 3)	{
				ret = checkDatumwerte (ia[0], ia[1], ia[2]);
			}
		}
}
	return ret;
}

//---------------------------------------------------------
//verschoenert einen gueltigen DatumString
function beautifyDate (s) {
	s = trim (s);
	var ret = s;
	if (checkDatumString (s)) {
		var ia = splitPunktString (s);
		ia[0] = ia[0] - 0;
		ia[1] = ia[1] - 0;
		ia[2] = ia[2] - 0;
		ret="";
		if (ia[0] < 10)
			ret= "0";
		ret += ia[0] + ".";
		if (ia[1] < 10)
			ret+="0";
		ret += ia[1] + "." + ia[2];
	}
	return ret;
}

//---------------------------------------------------------
// Die Bestimmung des heutigen Datums muß auf dem Server erfolgen!!!
// daher wird die heute-Funktion in den JSP-Seiten realisiert.

// heute als schoen formatierter String
/*function getHeuteDatumString () {
	var ret ="";
	var date = new Date ();
	ret = date.getDate() + "." + (1 + date.getMonth()) + "." + date.getFullYear();
	return beautifyDate (ret);
}*/

// heute aber um 0:00h
/*function getHeute () {
	var date = new Date ();
	return new Date (date.getFullYear(), date.getMonth(), date.getDate() );
}*/

// gibt an ob date1 > date2 ist
function istSpaeter (date1, date2) {
	return (date1.getTime() > date2.getTime());
}
// gibt an ob date1 < date2 ist
function istFrueher (date1, date2) {
	return (date1.getTime() < date2.getTime());
}

//
function getDateFromDatumString (s) {
	s = trim (s);
	var ret = new Date ();
	var ia = splitPunktString (s);
	if (ia.length == 3)	{
		ret = new Date (ia[2] - 0, ia[1] - 1, ia[0] - 0);
	}

	return ret;
}

//
function getJahrFromDatumString (s) {
	return getIntFromDatumString(s,2);
}
//
function getMonatFromDatumString (s) {
	return getIntFromDatumString(s,1);
}
//
function getTagFromDatumString (s) {
	return getIntFromDatumString(s,0);
}
// private Hilfsfunktion
function getIntFromDatumString (s,i) {
	ret = 0;
	var ia = splitPunktString (s);
	if (ia.length == 3)	{
		ret = ia[i]-0;
	}
	return ret;
}
//---------------------------------------------------
// Zugriff auf den Bereich der gueltigen Jahreszahlen
var startJahr = getStandardJahrBereichStart();
var endJahr = getStandardJahrBereichEnd();
// setzt den Bereich der gueltigen Jahreszahlen
function setJahrBereich (start, end) {
	startJahr = start;
	endJahr = end;
}
// setzt den Standardbereich der gueltigen Jahreszahlen
function setStandardJahrBereich () {
	startJahr = getStandardJahrBereichStart();
	endJahr = getStandardJahrBereichEnd();
}
function getJahrBereichStart() {return startJahr;}
function getJahrBereichEnd() {return endJahr;}
//--------------------------------------------------------------------------------------------
// interne Hilfsfunktionen fuer die Datumskontrolle

// prueft die Gueltigkeit einer Tag/ Monat/Jahr-Kombination
function checkDatumwerte (tag, monat, jahr) {
	var ret = getOK();
	if ((tag < 1))
		ret = "Ung\xfcltiger Tag";
	else if (tag > (anzahlTageImMonat (monat, jahr)))
		ret = "Ung\xfcltiger Tag im Monat.";

	else if ((monat < 1) || (monat > 12))
		ret = "Ung\xfcltiger Monat.";

	else if ((jahr < getJahrBereichStart()) || (jahr > getJahrBereichEnd()))
		ret = "Die Jahreszahl mu\xdf im Bereich " + getJahrBereichStart() + " - " + getJahrBereichEnd() + " liegen.";

	return ret;
}


//prueft ob ungueltige Zeichen im Datum vorkommen
function checkDatumZeichen (s) {
	var ret = getOK();
	var t = s.match (/[\x2d0123456789.,:;_ \t\\\/]*/);
	if (t != s)
		ret = "Datum enth\xe4lt ung\xfcltige Zeichen.";
	return ret;
}

//
function istMonatMit30Tagen (monat) {
	return (
		( 4 == monat) ||
		( 6 == monat) ||
		( 9 == monat) ||
		(11 == monat)
	);
}

//Schaltjahr nach Regeln des gregorianischen Kalenders
function istSchaltjahr (jahr) {
	return (
		(0 == jahr % 4) &&
		(
			(0 != jahr % 100) ||
			(0 == jahr % 400)
		)
	);
}

//
function anzahlTageImMonat (monat, jahr) {
	var ret = 31;
	if (istMonatMit30Tagen (monat))
		ret = 30;
	else if (2 == monat)
	{
		ret = 28;
		if (istSchaltjahr (jahr))
			ret = 29;
	}
	return ret;
}

//===========================================================================================
//===========================================================================================
// zum testen
//===========================================================================================
//===========================================================================================


