/**
 * Allgemeine javascript Funktionen
 */


///////////////////// Hilfs-Funktionen /////////////////////

/**
 * Führt programmatisch einen Mausklick auf den durch die linkId übergebenen
 * Html-Link oder Control aus.  
 */
function clickLink(linkId)
{
  var fireOnThis = document.getElementById(linkId)
  if (document.createEvent) {
    var evObj = document.createEvent('MouseEvents')
    evObj.initEvent( 'click', true, false )
    fireOnThis.dispatchEvent(evObj)
  }
  else if (document.createEventObject) {
    fireOnThis.fireEvent('onclick')
  }
}

/**
 * Macht das übergebene control sichtbar.
 * Sollte nicht genutzt werden, da meist auch ein anderes Control dafür ausgeblendet werden
 * sollte.
 */
function showControl(controlId, block) {
  if (block) {
    setDisplay(controlId, 'block');
  } 
  else {
    setDisplay(controlId, 'inline');   
  }
  setVisibility(controlId, 'visible');   
}

/**
 * Setzt den übergebenen Wert im style.display-Attribute in dem Control mit der uebergebenen controlId,
 * sofern es existiert.
 */
function setDisplay(controlId, value) {
  if (document.getElementById(controlId) != null) {
    document.getElementById(controlId).style.display = value;
  }
}

/**
 * Setzt den übergebenen Wert im style.visibility-Attribute in dem Control mit der uebergebenen controlId,
 * sofern es existiert.
 */
function setVisibility(controlId, value) {
  if (document.getElementById(controlId) != null) {
    document.getElementById(controlId).style.visibility = value;
  }
}

/**
 * Verbirgt das übergebene control.
 */
function hideControl(controlId) {
   setDisplay(controlId, 'none');
   setVisibility(controlId, 'hidden');   
}

/**
 * Deaktiviert das übergebene control (klicks darauf werden abgefangen).
 */
function deactivateControl(controlId) {
   document.getElementById(controlId).onclick = function () { return false };      
}

/**
 * Macht das übergebene control1 sichtbar und deaktiviert das control2.
 */
function showAndDeactivateControls(formId, controlId1, controlId2, block) {
   // erstes control einblenden
   showControl(formId+':'+controlId1, block);
   // zweites deaktivieren (user kann so nicht mehrfach clicken)
   deactivateControl(formId+':'+controlId2)
}

/**
 * Macht das übergebene showControlId1 sichtbar und das hideControlId1 unsichtbar.
 */
function showAndHideControls(formId, showControlId1, hideControlId1, block) {
  if (showControlId1 != '') {
    if (formId != '') {
      showControl(formId+':'+showControlId1, block);
    } 
    else {
      showControl(showControlId1, block);
    }
  }
  if (hideControlId1 != '') {
    if (formId != '') {  
      hideControl(formId+':'+hideControlId1)
    }
    else {
      hideControl(hideControlId1, block);
    }    
  }
}

/**
 * Macht das übergebene showControlId1 sichtbar und das hideControlId1 unsichtbar.
 */
function showAndHideManyControls(formId, showControlId1, hideControlId1, hideControlId2, hideControlId3, hideControlId4, hideControlId5) {
  if (showControlId1 != '') {
    showControl(formId+':'+showControlId1, 'false');
  }
  if (hideControlId1 != '') {
    hideControl(formId+':'+hideControlId1)
  }
  if (hideControlId2 != '') {
    hideControl(formId+':'+hideControlId2)
  }
  if (hideControlId3 != '') {
    hideControl(formId+':'+hideControlId3)
  }
  if (hideControlId4 != '') {
    hideControl(formId+':'+hideControlId4)
  }
  if (hideControlId5 != '') {
    hideControl(formId+':'+hideControlId5)
  }
}

/**
 * Macht die übergebenen Controls showControlId1 und showControlId2 sichtbar und 
 * die anderen Controls hideControlId1 und hideControlId2 unsichtbar.
 */
function showAndHideControls2(formId, showButtonId, showBlockId, hideButtonId, hideBlockId) {
  if (showButtonId) {
    showControl(formId+':'+showButtonId, false);
  }
  if (showBlockId) {
    showControl(formId+':'+showBlockId, true);
  }
  if (hideButtonId) {
    hideControl(formId+':'+hideButtonId)
  }
  if (hideBlockId) {
    hideControl(formId+':'+hideBlockId)
  }
}

/**
 * Klickt den übergebenen Link wenn in einem Feld <enter> gedrueckt wurde.
 * Benutzung: onkeypress="return clickLinkOnEnter('searchform:searchLink', '');".
 */
function clickLinkOnEnter(linkId, event) {
  // Bei nicht-firefox-browsern wird der Event nicht per
  // Parameter übergeben und muss window.event ausgelesen werden
  if (event == null) {
    event = window.event;
  }  
  // Wenn Enter (Taste 13) gedrückt wurde, wird geklickt
  if (enterPressed(event)) {
  	event.cancelBubble = true;
  	clickLink(linkId);
  	return false;
  }
}

/**
 * Liefert 'true' wenn <enter> gedrueckt wurde.
 */
function enterPressed(event) {
	if (event == null) {
  	event = window.event;
	}
	// IE nimmt "keyCode" Firefox nimmt "which"
	if ( (event.keyCode == 13) || (event.which == 13) ) {
		return true;
	}
	return false;
}

/**
 * Setzt aus den übergebenen Teilen einen 'mailto'-Link zusammen.
 * Dadurch steht im Quelltext der Seite nur der scriptausfruf und nicht
 * die cleartext Email-Adresse. Auf diese Weise kann ein robot nicht so 
 * einfach die Adresse klauen.
 */
function insertMailAddi(mailname, mailserver, maildomain, text)
{
 if(text) {
   document.write('<a href="mailto:'+mailname+'@'+mailserver+'.'+maildomain+'">'+text+'</a>');
 }
 else {
   document.write('<a href="mailto:'+mailname+'@'+mailserver+'.'+maildomain+'">'+mailname+'@'+mailserver+'.'+maildomain+'</a>');
 }
}

/**
 * Hängt den übergebenen Text an den Wert des übergebenen Textcontrols an.
 */
function appendText(text, controlId)
{
  document.getElementById(controlId).value = document.getElementById(controlId).value + text;
}

/**
 * Hängt den übergebenen Text an den Wert des übergebenen Textcontrols an und 
 * setzt den Fokus auf das control. 
 */
function appendTextAndFocus(text, controlId)
{
  appendText(text,controlId);
  focusControl(controlId);
}

/**
 * Fuegt den uebergebenen Text an der aktuellen Cursorposition des Textcontrols ein.
 */
function insertTextAtCursorAndFocus(text, controlId) {
  focusControl(controlId);
  control = document.getElementById(controlId);  
  
	//IE support
	if (document.selection) {
		sel = document.selection.createRange();
		sel.text = text;
	}
	//MOZILLA/NETSCAPE support	
	else if (control.selectionStart || control.selectionStart == '0') {	
		var startPos = control.selectionStart;
		var endPos = control.selectionEnd;
		control.value = control.value.substring(0, startPos) + text
		  + control.value.substring(endPos, control.value.length);
	}
	//fuer alle anderen Browser hinten anhaengen 
	else {
	  appendTextAndFocus(text, controlId);
	}
}


/**
 * Scrollt das Fenster an den Anfang der Seite.
 */
function scrollToTop() {
  window.scrollTo(0,0);
}

/**
 * Scrollt das Fenster an das Ende der Seite.
 */
function scrollToBottom() {
  window.scrollTo(0,200000);
}

/**
 * Setzt den Fokus auf das Control mit der übergebene Id.
 */
function focusControl(controlId) {
  var control = document.getElementById(controlId);
  control.focus();
}

/**
 * Selektiert den Inhalt des Controls (also z.B. den Text eines Textfeldes). 
 */
function selectControl(controlId) {
  var control = document.getElementById(controlId);
  control.select();
}

/**
 * Scrollt das Fenster an das Ende der Seite und setzt den 
 * Fokus auf das Control mit der übergebene Id.  
 */
function scrollToBottomAndFocusControl(controlId) {
  scrollToBottom();
  // Achtung! Zuerst scrollen dann Focus, sonst nimmt das Scrollen den gesetzen Fokus wieder weg
  focusControl(controlId);
}






















/// Alter Kram: ///

var isFirstSubmit = true;
var	isDelayedSubmit = false;

/*
 * Wie function submitWait(command, formname, waitLabel), 
 * nur das die Standart-Werte für das Label waitlabel und 
 * die Schaltflächen sendButton und cancelButton automatisch gesetzt werden.
 */
function submitWait(command, formname) {
	submitWait(command, formname, 'waitlabel', 'sendButton', 'cancelButton');	
}

/*
 * Macht das übergebene waitLabel sichtbar und setzt das submitCommand ab.
 * Hinter dem Argument 'waitLabel' können weiter Buttons übergeben werden, welche dann
 * deaktiviert werden und als Mauscursor die Sanduhr zeigen.
 */
function submitWait(command, formname, waitlabel) {

   // submit funktioniert nur wenn es als erstes aufgerufen wird
   submitCommand(command);   
   document.getElementById(waitlabel).style.visibility = "visible";
	 // Links auf disabled	 
	 for ( var i = 3; i < submitWait.arguments.length; i++ ) {
	 	document.getElementById(submitWait.arguments[i]).blur();
	 	document.getElementById(submitWait.arguments[i]).onclick = function () { return false };      
    document.getElementById(submitWait.arguments[i]).disabled = true;     
    document.getElementById(submitWait.arguments[i]).style.cursor="wait";    		
	 }
   // Reihenfolge nicht aendern, sonst erscheint das waitlabel nicht auf Netscape
   
   setWaitPointer(formname);
}


/**
 * Uebertraegt die angebene Form und setzt dabei das angegebenen command.
 */
function submitCommand(command) {
	var form = document.forms[0];
	if (isDelayedSubmit && form != null) {
	  form.command.value=command;
	  isDelayedSubmit = false;
 	  window.isButton = false;
	  return false;
	}

  // Verhindern von doppelsubmits bei doppelklicks vom user
  if (isFirstSubmit) {
    isFirstSubmit = false;
		if (form == null) {
		  return false;
		}
    form.command.value = command;
    form.submit();
    return false;
  } else {
    return false;
  }
}

/**
 * Dieses Submit Command überschreibt eventuelle onChange-Events und führt den submit aus.
 * Eine überprüfung auf FirtSubmit erfolgt nicht, diese Funktion soll für Download-Fenster benutzt werden,
 * Welche auf der selben Seite bleiden, bei submitCommand wäre nach dem Popup das firstSubmit gemacht und 
 * mann kann auf der Seite keine Submits mehr machen.
 */
function submitCommandPure(command) {
	var form = document.forms[0];
	if (isDelayedSubmit && form != null) {
	  form.command.value=command;
	  isDelayedSubmit = false;
 	  window.isButton = false;
	  return false;
	}

  if (form == null) {
	  return false;
	}
  form.command.value = command;
  form.submit();
  return false;
}
/**
 * Uebertraegt die angebene Form und setzt dabei das angegebenen command und dann zurück zur Seite.
 */
function submitCommandandClosePopup(command) {
  // Verhindern von doppelsubmits bei doppelklicks vom user
  if (isFirstSubmit) {
    isFirstSubmit = false;
	var form = document.forms[0];
	if (form == null) {
		alert('form == null');
	  return false;
	}
	
    form.command.value = command;
    form.submit();
    window.opener.location.reload();
    window.close();
    return false;
  } else {
    return false;
  }
}

/**
 * Uebertraegt die angebene Form, setzt dabei das angegebenene command und
 * läd die Response im neuen Fenster. Löst einen zweiten Submit aus und
 * setzt dazu den command2 und läd diese Response im Hauptfenster.
 */
function submitCommandToPopUp(command, target, command2, width, height) {
  // Oeffne zuaechst leeres Fenster und behalte Focus auf aktuellem Fenster,
  // damit dieses im Vordergrund bleibt.
  openWindowWithDimension("about:blank",target,width,height);
  this.focus();
  	
  // Verhindern von doppelsubmits bei doppelklicks vom user
  if (isFirstSubmit) {
    isFirstSubmit = false;
	
  	//Formular des aktuellen Dokumentes ermitteln 
	  //und "target" sichern
	  var form = document.forms[0];
	  var target_old = form.target;
	
	  if (form == null) {
	    return false;
	  }
	
  	//erster Submit mit gesetztem Parameter "command" 
	  //und target neues fenster
    form.command.value = command;
    form.target = target;
    form.submit();
    
    //zweiter Submit mit gesetztem Parameter "command2" 
    //und target altes fenster
    form.command.value = command2;
    form.target = target_old;
    form.submit();
    return false;
  } else {
    return false;
  }
}



/**
 * Uebertraegt die angebene Form und setzt dabei das angegebenen command.
 */
function submitCommandByForm(command, formName) {
  // Verhindern von doppelsubmits bei doppelklicks vom user
  if (isFirstSubmit) {
    isFirstSubmit = false;
		var form = document.forms[formName];
	  if (form == null) {
	    return false;
	  }
    form.command.value = command;
    form.submit();
    return true;
  } else {
    return false;
  }
}


/**
 * Uebertraegt die angebene Form und setzt dabei das angegebenen command,
 * wobei die aktuelle XY-Position gespeichert wird, um sie später wieder 
 * zu setzen. Sollte verwendet werden, wenn auf dem Form geblieben wird
 * nach dem submit.
 */
function submitCommandSaveXY(command) {
	var form = document.forms[0];					
	if (isDelayedSubmit && form != null) {
	  form.command.value=command;
	  isDelayedSubmit = false;
 	  window.isButton = false;
	  return false;
	}
	
  if (isFirstSubmit) {
    isFirstSubmit = false;
		var form = document.forms[0];
	  if (form == null) {
	    return false;
	  }
    saveXY(form);    
    form.command.value = command;
    form.submit();
    return true;
  } else {
    return false;
  }
}

/**
 * Uebertraegt die angebene Form und setzt dabei das angegebenen command,
 * wobei die aktuelle XY-Position gespeichert wird, um sie später wieder 
 * zu setzen. Ausserdem wird die letzte Komponente gespeichert, die den 
 * Fokus hatte, um später die nächste Komponente zu fokussieren.
 * Sollte verwendet werden, wenn auf das Verlassen einer Komponente
 * etwas nachgeladen oder im Form verändert werden muss, man aber will, 
 * dass beim Wiederanzeigen der Form der Fokus dann auf der nächsten 
 * Komponente steht.
 */
function submitCommandSaveXYFocus(command, theFocusElement, switchFocus) {
  if (isFirstSubmit) {
    isFirstSubmit = false;
		var form = document.forms[0];
	  if (form == null) {
	    return false;
	  }
    saveXY(form);
    form.command.value = command;
    form.focusElement.value = theFocusElement;
    form.switchFocus.value = switchFocus;
    
    if (window.isButton) {
    	isDelayedSubmit = true;
    	window.setTimeout("document.forms[0].submit()", 500);									
		} else {
	    form.submit();
	  }
    
    return true;
  } else {
    return false;
  }
}


function saveXY(form) {
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    form.pageYOffset.value = window.pageYOffset;
    form.pageXOffset.value = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    form.pageYOffset.value = document.body.scrollTop;
    form.pageXOffset.value = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    form.pageYOffset.value = document.documentElement.scrollTop;
    form.pageXOffset.value = document.documentElement.scrollLeft;
  }
}


/**
 * Uebertraegt die form nachdem in einem Feld <enter> gedrueckt wurde.
 * Benutzung: onkeypress="return submitOnEnter(...);".
 */
function submitOnEnter(command,event) {
  var form = document.forms[0];
  if (form == null) {
    	return false;
  }

  // Bei nicht-firefox-browsern wird der Event nicht per
  // Parameter übergeben und muss window.event ausgelesen werden
  if (event == null) {
  	event = window.event;
  }
  
  // Wenn Enter (Taste 13) gedrückt wurde, wird Formular weitergeleitet.
  if (enterPressed(event)) {	
  	event.cancelBubble = true;
  	form.command.value = command;
  	form.submit();
  	return false;
  }
}

/**
 * Fokussiert das Element, was auf das zuletzt fokussierte Element folgt. 
 * Wenn kein altes fokussiertes Element gesetzt wurde wird der Fokus auf 
 * das defaultFocusElement gesetzt. 
 * Es wird immer das erste form der Seite genommen. Bei Seiten mit mehreren 
 * forms funktioniert das also nicht so. 
 */
function restoreXYFocus()
{
	var form = document.forms[0];
  if (form == null) {
    return false;
  }

	// XY wiederherstellen 
	if (form["pageXOffset"] != null && form["pageYOffset"] != null) {
  	window.scrollTo(form["pageXOffset"].value, form["pageYOffset"].value);
	}  

	// Fokus wiederherstellen
	if (form["focusElement"] != null) {
		var lastFocusElement = form["focusElement"].value;			
		form["focusElement"].value = "";
	  
		var newFocusElement = null;
		if (form["defaultFocusElement"] != null) {
      newFocusElement = form[form["defaultFocusElement"].value];		
		}		
		if (lastFocusElement != null) {
		  // wenn schon vorher ein Element fokussiert war, dann entweder nächstes fokussieren
		  // oder wieder das gleiche fokussieren (abhängig von 'switchFocus')
		  // sonst default nehmen
			var element = form[lastFocusElement];
			if (element != null) {
			  if (form["switchFocus"] != null && form["switchFocus"].value == "true") {
					newFocusElement = findNextInputField(element);
    		}	else {
			    newFocusElement = element;
			  }
			}
		}
		
		// eigentliches fokussieren
		if (newFocusElement != null) {
			try {
				newFocusElement.focus();
			} catch (e) {}
		}	  
  }  
  
}


/** 
 * Liefert das auf das übergebene Element folgende Fokuselement 
 * entsprechend der Tabreihenfolge.
 */
function findNextInputField(elem) 
{
	var elems = elem.form.elements;
	var i=0;
	var nextInOrder = null;
	var nextBigger = null;
	var first = null;
	var pastElem = false;
	
	for ( i=0; i < elems.length; i++ ) {
		var e = elems[i];
		// dont focus fields that are hidden or disabled
		if ( e.disabled || e.readOnly || (e.type == "hidden") || (e.style.display == "none") 
			|| (e.style.visibility == "hidden") ) {
			continue;
		}
		
		// if we are past the original elem, find the next input with the same tabindex
		if ( pastElem && (e.tabIndex == elem.tabIndex) && (nextInOrder == null) ) {
			nextInOrder = e;
		}
		
		// find the input with the lowest tabindex that is bigger than elem.tabIndex
		if ( (e.tabIndex > elem.tabIndex) 
			 && ((nextBigger == null) || (e.tabIndex < nextBigger.tabIndex)) ) {
			 nextBigger = e;
		}
		
		// find the input with the lowest tabIndex
		if ( (e.tabIndex >= 0) && ((first == null) || (e.tabIndex < first.tabIndex)) ) {
			first = e;
		}
		
		if ( e == elem ) {
			pastElem = true; 
		}
	}

	// choose one of the found input fields 
	     if ( nextInOrder != null ) return nextInOrder;
	else if ( nextBigger != null ) return nextBigger;
	else return elem;
}



///////////////////// Datenpruef-Funktionen /////////////////////
function checkDate( fieldName, formName, allowPast, allowFuture ) 
{
	var currentDate = new Date;
	var currentYear = currentDate.getYear();
	var field       = document[formName][fieldName];
	var fieldValue  = field.value;
	var dayStr      = null;
	var monthStr    = null;
	var yearStr     = null;
	var message     = null;

	if ( (fieldValue == null) || (fieldValue == "") ) {
		// input field can be empty
		return true;
	}
	if ( fieldValue.indexOf('.') >= 0 ) {
		// split the date into its components
		var fieldValues = fieldValue.split(".");
		dayStr   = fieldValues[0];
		monthStr = fieldValues[1];
		yearStr  = fieldValues[2];
	}
	else {
		// date has been entered in numeric format
		dayStr   = fieldValue.substr( 0, 2 );
		monthStr = fieldValue.substr( 2, 2 );
		yearStr  = fieldValue.substr( 4, 4 );
	}
	
	var day   = Number(dayStr);
	var month = Number(monthStr);
	var year  = Number(yearStr);
	
	if ( (yearStr == null) || (yearStr == '') ) {
		year = currentYear;
	}
	else if ( !isNaN(year) ) {
		// allow for 2-digit years for 20xx [real currentyear is 1900+currentyear]
		if (year >= 0 && year <= 99) {
			year += 2000;
		}
	}

	var isInvalid = (dayStr == null) || (dayStr == '') || isNaN(day) || (day <= 0) || (day > 31)
				 || (monthStr == null) || (monthStr == '') || isNaN(month) || (month <= 0) || (month > 12)
				 || isNaN(year) || (year < 1900) || (year > 1900+currentYear + 100);
	
	if ( !isInvalid ) {
		// first check passed, now create a date with the user input. 
		// If the day is too big for a month, a wraparound occurs.
		var date = new Date( year, month-1, day );
		isInvalid = (date.getMonth() != month-1) || (date.getDate() != day);
		
		if ( !isInvalid && !allowFuture && (date.getTime() > currentDate.getTime()) ) {
			message = "Das Datum darf nicht in der Zukunft liegen!"
			        + "\nIhre Eingabe lautete: ''" + fieldValue + "''";
			isInvalid = true;
		}
		if ( !isInvalid && !allowPast && (date.getTime() + 24*60*60*10000 < currentDate.getTime()) ) {
			message = "Das Datum darf nicht in der Vergangenheit liegen!"
			        + "\nIhre Eingabe lautete: ''" + fieldValue + "''";
			isInvalid = true;
		}
	}

	if ( isInvalid ) {
/*		if ( message == null ) {
			message = "Bitte geben Sie ein gültiges Datum ein (Format: TT.MM.JJJJ)"
			 		+ "\nIhre Eingabe lautete: ''" + fieldValue + "''";
		}
		alert( message );
		field.value = "";
		field.focus();*/
		return false;
	} else {
		// date is valid, reformat
		field.value = ((day < 10) ? "0" : "") + day + "."
					  + ((month < 10) ? "0" : "") + month + "." + year;
		return true;
	}
}	

function checkMoney( fieldName, formName, maxLength) {
	var field       = document[formName][fieldName];
	var fieldValue  = field.value;
	var euroStr     = null;
	var centStr     = null;
	var message     = null;

	if (fieldValue == null || fieldValue == "") {
		// input field can be empty
		return true;
	}
	var sepPos = fieldValue.indexOf(',');
	if (sepPos >= 0) {
		// split the money into its components
		if (sepPos > 0) {
			euroStr = fieldValue.substr(0, sepPos);
		} else {
			euroStr = null;
		}
		if (sepPos+1 < fieldValue.length) {
			centStr = fieldValue.substr(sepPos+1);
		} else {
			centStr = null;
		}
	} else {
		euroStr = fieldValue;
		centStr = null;
	}

	var centValue = 0;
	if (centStr != null) {
		//centStr = String(centValue);
		if (centStr.length > 2) {
			centStr = centStr.substr(0, 2);
		} else if (centStr.length == 1) {
			centStr = centStr+"0";
		}
		centValue = Number(centStr);
		if (isNaN(centValue)) {
			return false;
		}
	}
	else {
		centStr = "00";
	}

	var euroValue = 0;
	if (euroStr != null) {
		var isFirstDigit = true;
		var isNegative = false;
		for (i=0; i<euroStr.length; i++) {
			var chr = euroStr.charAt(i);
			if (isFirstDigit && (chr == '+' || chr == '-')) {
				isNegative = (chr == '-');
				isFirstDigit = false;
			} else if (chr >= '0' && chr <= '9') {
				euroValue = euroValue*10 + Number(chr);
				isFirstDigit = false;
			} else if (chr == '.') {
				//Tausendertrenner ignorieren:
				isFirstDigit = false;
			} else if (chr == ' ') {
				//spaces komplett ignorieren:
			} else {
				return false;
			}
		}
		if (isNegative) {
			euroValue = -euroValue;
		}
	}
	euroStr = "";
	var digsTillDot = 3;
	while (euroValue > 0) {
		if (digsTillDot-- <= 0) {
			euroStr = "."+euroStr;
			digsTillDot = 2;
		}
		euroStr = String(euroValue%10) + euroStr;
		euroValue = (euroValue-(euroValue%10)) / 10;
	}

	fieldValue = euroStr+","+centStr;

	if (fieldValue.length > maxLength) {
		return false;
	}

	field.value = fieldValue;
	return true;
}






///////////////////// Window-Funktionen /////////////////////


/** 
 * java-script popup, das die angegebenen message auf den Schirm bringt und 
 * wenn der Benutzer 'Ja' drückt, den angegebenen link laed.
 */
function confirmLink(link,message)
{
	if ( confirm(message) ) {
		location.href = link;
	}
}


/** 
 * oeffnet ein Popup in das die url geladen wird mit den angegebenen Groessen
 */
function openWindowWithDimensionAndPosition(url, target, width, height, left, top) {
  popupw = window.open(url,target,"height="+height+",width="+width+",status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes,left="+left+",top="+top);
  if (popupw) {
    popupw.focus();
  }
  return false;
}


/** 
 * oeffnet ein Popup in das die url geladen wird mit den angegebenen Groessen
 */
function openWindowWithDimension(url, target, width, height) {
  popupw = window.open(url,target,"height="+height+",width="+width+",status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes");
  if (popupw) {
    popupw.focus();
  }
  return false;
}


/** 
 * oeffnet ein Popup in das die url geladen im Hintergrund wird mit den angegebenen groessen
 */
function openWindowInBackgroundWithDimension(url,target,width,height) {
  popupw = window.open(url,target,"height="+height+",width="+width+",status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes");
  this.focus();
  return false;
}

var helpwindow = null;
function showHelpWindow(helpUrl) {
	closeHelpWindow();
	helpwindow = window.open(helpUrl,"Hilfe","width=800,height=600,resizable,scrollBars=1");
	return false;
}

function closeHelpWindow() {
	if (helpwindow && helpwindow.open && !helpwindow.closed) {
		helpwindow.close();
	}
	return true;
} 







///////////////////// Sonstige-Funktionen /////////////////////


// Setzt den Wait Pointer für die uebergebene form
// und setzt die form inaktiv, so dass nichts geaendert 
// werden kann.
function setWaitPointer(formname) {
  var form = eval("document." + formname);
  
  // setzte waitcursor fuer die form und alle formelemente
  if (form) {
    form.style.cursor = "wait";    
    for (i = 0; i < form.elements.length; i++) {
      form.elements[i].style.cursor="wait";
     //form.elements[i].disabled=true; // Gab Probleme, hat den Explorer zu 99% ausgelastet 
     																	 // und alles andere ausgebremst
    }
  }

  var browserName = navigator.appName;
  if (browserName.match(/Netscape/)) {
    window.captureEvents(Event.MOUSEDOWN);
    window.onMouseDown=lockMouseClick;
  } 

  return false;
}



/////////////////// Formular-Funktionen ////////////////////////

/**
 * Setzt das angegebene Formularelement zurück.
 */
function resetFormElement(formElement) {
  formElement.value='';
}
	
/**
 * Fügt dem angegebenen Formularelement den übergebenen Wert an.
 * Ist das Formularelement nicht leer, wird zuvor ein Leerzeichen
 * eingefügt.
 */
function appendToFormElementValue(formElement,formElementValue) {
  var oldValue = formElement.value;
  if (oldValue.length == 0) {
    formElement.value = formElementValue;
  } else {
    formElement.value = oldValue + ' ' + formElementValue;
  }
}

/**
 * Aktualisiert eine namentlich spezifizierte Textbox in einem festgelegten Formular 
 * mit dem Wert eines ebenfalls namentlich spezifizierten zweiten Formularelementes. Darüberhinaus
 * wird ein Command-Submit mit Fokus-Festlegung durchgeführt. 
 */
function updateTextBoxAndSubmitCommandXYFocus(formname,formElementName,formElementName2,command,formElementFocus,switchFocus) {
	document.forms[formname].elements[formElementName].value = document.forms[formname].elements[formElementName2].value;
	return submitCommandSaveXYFocus(command,formElementFocus,switchFocus);
}

/**
 * Aktualisiert eine namentlich spezifizierte Auswahlbox in einem festgelegten Formular 
 * mit dem Wert eines ebenfalls namentlich spezifizierten zweiten Formularelementes. Darüberhinaus
 * wird ein Command-Submit mit Fokus-Festlegung durchgeführt. 
 */
function updateSelectBoxAndSubmitCommandSaveXYFocus(formname,formElementName,formElementName2,command,formElementFocus,switchFocus) {
	var cBoxOptions = document.forms[formname].elements[formElementName].options;
	var textValue = document.forms[formname].elements[formElementName2].value;
	var found = false;
	for (var i=0; i<cBoxOptions.length; i++) {
		if (cBoxOptions[i].value == textValue) {
			document.forms[formname].elements[formElementName].value = cBoxOptions[i].value;
			found = true;
			break;
		}
	}
	return submitCommandSaveXYFocus(command,formElementFocus,switchFocus);
}

function makeNewWindow(url, target,width,height) {
	LeftPosition = (screen.width) ? (screen.width-width)/2 : 0;
	TopPosition = (screen.height) ? (screen.height-height)/2 : 0;
	settings = "width="+width+",height="+height+",top="+TopPosition+",left="+LeftPosition+",status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=no,screenX=150,screenY=80";
  	popupw = window.open(url,target, settings);
  	if (popupw) {
    	popupw.focus();
  	}
  	return false;
}


/**
 * Starttag fuer den Socialbookmark-Button
 */
function writeLinkStartSocialBookmark() { 
  var addthis_pub="toonsUp";var addthis_options = 'delicious, google, misterwong, live, stumbleupon, twitter, digg, reddit, myspace, more';
  document.write( '<a href="http://www.addthis.com/bookmark.php?v=20" onmouseover="return addthis_open(this, \'\', \'' + document.URL + '\',\'' + document.title + '\')" onmouseout="addthis_close()" onclick="return addthis_sendto()">' );
}   


/**
 * Endtag fuer den Socialbookmark-Button
 */
function writeLinkEndSocialBookmark() {
  document.write('</a>');
}

/**
 * User Agent (Browserkennung) auf einen bestimmten Browsertyp prüfen
 * MSIE
 * opera  
 * safari  
 * firefox 
 */  
function checkBrowserName(name){  
  var agent = navigator.userAgent.toLowerCase();  
  if (agent.indexOf(name.toLowerCase())>-1) {  
    return true;  
  }  
  return false;  
}  



function imgOndemand(){
    var $w = $(window);
    // offset of bottom to load images, on px    
    var offset = 100;    
    
    //calc current scroll position
    var scrollPos = $w.height() + $w.scrollTop();
       
     // get imgs not loaded
     $('img.img-ondemand').each(function(){
	         var $img = $(this);
           // filter imgs over scroll limit	         
           if($img.offset().top < scrollPos+offset){     	                    
		         $img.attr('src',$img.attr('longdesc')).removeClass('img-ondemand');
		       }
	   });
}

/**
 * Wird beim ersten Anzeigen einer Seite aufgerufen und läd alle von der Scrollhöhe 
 * sichtbaren Bilder. Außerdem wird an das Scrollen und Resizen des Fenster ebenfalls 
 * der Methodenaufruf geknüpft, der jedesmal prüft, welche Bilder noch nachzuladen sind.
 */
function loadOnDemand() {
    // load on start all imgs over scroll limit
    imgOndemand();

    // bind scroll event 
    var $w = $(window);    
    $w.scroll(function(){
      imgOndemand();
    });     
    
    // bind resize event
    $w.resize(function(){
      imgOndemand();
    });         
}


