/*
In utils.js enthaltene Funktionen, genauere Kommentare vor der jeweiligen Funktion:
-----------------------------------------------------------------------------------
- function extractFavorites()
- function doPrint(dest)
- function drucken()
- function resetForm(myformular)
- function strtrim_complete(myString)
- function strtrim(myString)
- function strltrim(myString)
- function strrtrim(myString)
- function isStringEmpty(myString)
- function isElementEmpty(element)
- function isLetterValid(mystring,alert_flag)
- function isTimeValid(mytime,alert_flag)
- function isTimeValid_correction(element,alert_flag)
- function isDateValid(mydate,alert_flag)
- function isDateValid_correction(element,alert_flag)
- function check_date_tendency(mydate)
- function isleapyear(this_year)
- function isEmailValid(myemail,alert_flag)
- function isNumberValid(mystring,alert_flag)
- function isNumberDigits(mystring,anzahl,alert_flag)
- function isAmountValid(mystring,alert_flag)
- function onclickSearchInputField(standardvalue)
- function onblurSearchInputField(standardvalue)
-----------------------------------------------------------------------------------
*/

// Keine Frames bitte
if (top != self)
  top.location.href = self.location.href;

/* Funktion klappt die Schnellzugriff-Begriffe aus */
function extractFavorites(wert) {
	if (wert==true) {
		document.getElementById("favorites_on").style.display = "";
		document.getElementById("favorites_off").style.display = "none";
	}
	else {
		document.getElementById("favorites_on").style.display = "none";
		document.getElementById("favorites_off").style.display = "";
	}
}

/* Funktion druckt aktuelles Fenster */
function doPrint(dest){
  	if (dest.print != null){
    		dest.print();
	}//endif
 	else{
   		dest.alert( "Ihr Browser unterstützt diese Funktion leider nicht.\n" +
                "Bitte drucken Sie diese Seite über das Kontextmenü oder\n" +
                "per Tastaturkommando (z.B. Strg-P)." );
	}//endelse
}//end of function doPrint


/* Funktion druckt Inhaltsframe, öffnet dabei ein Popup-Fenster */
function drucken() { 
  var hoehe = screen.height-100;
  var breite, x, workWin;

  if ( hoehe > 923 )
    hoehe = 724;
  else if ( hoehe > 800 && hoehe < 924 )
  	hoehe = 600;
  	
  breite = 460;

  x = (screen.width-breite)/2;
	
	try {
	  workWin = window.open( "druck.htm?" + top.inhalt.location.href, '',
	            'toolbar=no,location=no,directories=no,status=yes,'+
	            'menubar=yes,scrollbars=yes,resizable=yes,copyhistory=no,width='+
	            breite+',height='+hoehe+',left='+x+',screenX='+x+',top=10,screenY=10' );
	
	  if ( workWin == null )
	    alert( "Achtung: Konnte kein neues Fenster öffnen!\n\n" +
	           "Falls Sie einen PopUp-Blocker oder andere Programme\n" +
	           "zum Unterdrücken von unerwünschter Werbung etc. benutzen,\n" +
	           "deaktivieren Sie diese bitte." );
		
  } 
	catch(E) { alert( "Diese Seite kann leider nicht gedruckt werden." ); } 
}


/* Funktion setzt alle Elemente des übergebenen Formulars zurück */
function resetForm(myformular){
  for(var i = myformular.length;i-- > 0;){
    var element = myformular.elements[i];
    if(element.type == "text" || element.type == "textarea"){
    	element.value = "";
    }//endif
    else{
    	if ( element.type == "radio" || element.type == "checkbox" ){
      		element.checked = false;
      	}//endif
    }//endelse
  }//endfor
}//end of function restForm


/* Funktion entfernt alle Leerzeichen einer Zeichenkette */
function strtrim_complete(myString){
	return myString.replace(/^\s+/,'').replace(/\s+/gi,'').replace(/\s+$/,'');
}//end of function strtrim_complete


/* Funktion entfernt Leerzeichen am Anfang und am Ende einer Zeichenkette */
function strtrim(myString){
	return myString.replace(/^\s+/,'').replace(/\s+$/,'');
}//end of function strtrim


/* Funktion entfernt Leerzeichen am Anfang einer Zeichenkette */
function strltrim(myString){
	return myString.replace(/^\s+/,'');
}//end of function strltrim


/* Funktion entfernt Leerzeichen am Ende einer Zeichenkette */
function strrtrim(myString){
	return myString.replace(/\s+$/,'');
}//end of function strrtrim


/* Funktion testet einen String, ob dieser leer ist oder nicht. */
/* Liefert TRUE oder FALSE zurück */
function isStringEmpty(myString){
  var this_string = myString;
  var re_String = /^(\s{1,})$/;
  if (((re_String.test(this_string))==true) || (this_string=="")){
  	return true;
  }//endif
  return false;
}//end of function isStringEmpty


/* Funktion testet ein Formularelement, ob dieser leer ist oder nicht. */
/* Liefert TRUE oder FALSE zurück */
function isElementEmpty(element){
  var this_element = element.value;
  var re_Element = /^(\s{1,})$/;
  if (((re_Element.test(this_element))==true) || (this_element=="")){
  	return true;
  }//endif
  return false;
}//end of function isElementEmpty


/* Funktion überprüft, ob der übergebene String nur aus Buchstaben besteht. 
   Liefert TRUE oder FALSE zurück. alert_flag (1=ja,0=nein) gibt an, ob eine 
   alert-Meldung erscheinen soll oder nicht.*/
function isLetterValid(mystring,alert_flag){
	var this_string = strtrim_complete(mystring);
	if (!isStringEmpty(this_string)){
		var re_string = /^[a-zA-Z]{1,}$/;
		if ((re_string.test(this_string))==false){
			if(alert_flag==1){
				alert( "Bitte geben Sie nur Buchstaben ein." );
			}//endif
			return false;
		}//endif
		else{
			return true;
		}//endelse
	}//endif
	else{
		return true;
	}//endelse
} //end of function isLetterValid


/* Funktion überprüft, ob die übergebene Zeit (STRING) syntaktisch korrekt ist.
   Liefert TRUE oder FALSE zurück. alert_flag (1=ja,0=nein) gibt an, ob eine 
   alert-Meldung erscheinen soll oder nicht.*/
function isTimeValid(mytime,alert_flag){	
	if(!isStringEmpty(mytime)){
		var this_time = mytime;
		var re_time = /^(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[0-5][0-9])$/;
		if ((re_time.test(this_time))==false){
			if(alert_flag==1){
				alert("Die angegebene Uhrzeit ist nicht korrekt.");
			}//endif
			return false;
      		}//endif
      		else{
      			return true;
      		}//endelse
      	}//endif
      	else{
      		return true;
	}//endelse
}//end of function isTimeValid 
   
   
/* Funktion überprüft, ob die übergebene Zeit (Formularelement) syntaktisch korrekt 
   ist. Liefert TRUE oder FALSE zurück. Korrigiert Uhrzeit im Formular. alert_flag
   (1=ja,0=nein) gibt an, ob eine alert-Meldung erscheinen soll oder nicht.*/  
function isTimeValid_correction(element,alert_flag){
	if(!isElementEmpty(element)){
		var this_time = element.value;
		var this_time = strtrim_complete(this_time);
		var re_time = /^(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[0-5][0-9])$/;
		if ((re_time.test(this_time))==false){
			if(alert_flag==1){
				alert("Die angegebene Uhrzeit ist nicht korrekt.");
			}//endif
			return false;
      		}//endif
      		else{
      			time_array = this_time.split(":");
      			if(time_array[0].length==1){
      				time_array[0] = "0"+time_array[0];
      			}
      			if(time_array[1].length==1){
      				time_array[1] = "0"+time_array[1];
      			}
      			element.value=time_array[0]+":"+time_array[1];
      			return true;
      		}//endelse	
	}//endif
	else{
		element.value = "";
		return true;
	}
}//end of function isTimeValid


/* Funktion überprüft, ob das Datum (String) syntaktisch korrekt ist und ob die
   Anzahl der Tage zum jeweiligen Monat passt. Liefert TRUE oder FALSE zurück.
   alert_flag (1=ja,0=nein) gibt an, ob eine alert-Meldung erscheinen soll oder nicht.*/ 
function isDateValid(mydate,alert_flag){
	/* Datum wird per regulärem Ausdruck auf korrekte Syntax kontrolliert*/
	var re_date = /^((0?[1-9]{1})|([12]{1}[0-9]{1})|(3[01]{1}))\.((0?[1-9]{1})|(1[0-2]{1}))\.([0-9]{2}|19?[0-9]{2}|20?[0-9]{2})$/;
	var this_date = mydate;
	this_date = strtrim_complete(this_date);
	if (isStringEmpty(mydate)){
        	return true;
    	}//endif    	
	if ((re_date.test(this_date))==false){
		if(alert_flag==1){
			alert('Das angegegebene Datum \" '+this_date+' \" ist ungültig.');
		}//endif
		return false;
	}//endif	
	date_array = this_date.split(".");
	this_day = date_array[0]
	this_month = date_array[1]
	this_year = date_array[2];
	var today = new Date();
	/* Anz. Tage des jeweiligen Monats werden kontrolliert */
	if(this_month=="2" || this_month=="02"){
		var is_leapyear = isleapyear(this_year);
		if(is_leapyear==28 && this_day==29){
			if(alert_flag==1){
				alert('Das von Ihnen angegebene Jahr ist kein Schaltjahr.\nDer Monat Februar hat somit nur 28 Tage.');
			}//endif
			return false;
		}//endif
		if(is_leapyear==28 && this_day>28){
			if(alert_flag==1){
				alert('Der Monat Februar hat im Jahr '+this_year+' nicht mehr als 28 Tage.');
			}//endif
			return false;
		}//endif
		if(is_leapyear==29 && this_day>29){
			if(alert_flag==1){
				alert('Der Monat Februar hat im Jahr '+this_year+' nicht mehr als 29 Tage.');
			}//endif
			return false;
		}//endif
	}//endif
	if(this_month=="4" || this_month=="04" || this_month=="6" || this_month=="06" || this_month=="9" || this_month=="09" || this_month=="11"){
		if(this_day>30){
			if(alert_flag==1){
				alert('Der angegebene Monat hat nicht mehr als 30 Tage.');
			}//endif
			return false;
		}//endif
	}//endif
	
	return true;
}// end of function check_date


/* Funktion überprüft, ob das Datum (Formularelement) syntaktisch korrekt ist, ob die
   Anzahl der Tage zum jeweiligen Monat passt und vervollständigt das Datum auf das
   Format tt.mm.jjjj, falls es notwenig ist. alert_flag (1=ja,0=nein) gibt an, ob eine
   alert-Meldung erscheinen soll oder nicht.*/ 
function isDateValid_correction(element,alert_flag){
	/* Datum wird per regulärem Ausdruck auf korrekte Syntax kontrolliert*/
	var re_date = /^((0?[1-9]{1})|([12]{1}[0-9]{1})|(3[01]{1}))\.((0?[1-9]{1})|(1[0-2]{1}))\.([0-9]{2}|19[0-9]{2}|20[0-9]{2})$/;
	var this_date = element.value;
	this_date = strtrim_complete(this_date);
	this_date = strtrim_complete(this_date);
	if (isElementEmpty(element)){
        	element.value = "";
        	return true;
    	}//endif    	
	if ((re_date.test(this_date))==false){
		if(alert_flag==1){
			alert('Das angegegebene Datum \" '+this_date+' \" ist ungültig.');
		}//endif
		return false;
	}//endif	
	date_array = this_date.split(".");
	this_day = date_array[0]
	this_month = date_array[1]
	this_year = date_array[2];
	var today = new Date();
	/* Anz. Tage des jeweiligen Monats werden kontrolliert */
	if(this_month=="2" || this_month=="02"){
		var is_leapyear = isleapyear(this_year);
		if(is_leapyear==28 && this_day==29){
			if(alert_flag==1){
				alert('Das von Ihnen angegebene Jahr ist kein Schaltjahr.\nDer Monat Februar hat somit nur 28 Tage.');
			}//endif
			return false;
		}//endif
		if(is_leapyear==28 && this_day>28){
			if(alert_flag==1){
				alert('Der Monat Februar hat im Jahr '+this_year+' nicht mehr als 28 Tage.');
			}//endif
			return false;
		}//endif
		if(is_leapyear==29 && this_day>29){
			if(alert_flag==1){
				alert('Der Monat Februar hat im Jahr '+this_year+' nicht mehr als 29 Tage.');
			}//endif
			return false;
		}//endif
	}//endif
	if(this_month=="4" || this_month=="04" || this_month=="6" || this_month=="06" || this_month=="9" || this_month=="09" || this_month=="11"){
		if(this_day>30){
			if(alert_flag==1){
				alert('Der angegebene Monat hat nicht mehr als 30 Tage.');
			}//endif
			return false;
		}//endif
	}//endif
		
	/* Datum wird auf das Format mm.tt.jjjj gebracht */		
	if(this_day.length == 1){ // falls Tag einstellig
		this_day = '0'+this_day;
	}//endif
	if(this_month.length == 1){ // falls Monat einstellig
		this_month = '0'+this_month;
	}//endif
	if(this_year.length == 2){ // falls Jahr zweistellig
		var num_year = Number(this_year);
		var today_year = today.getFullYear();
		var check_year = '20'+this_year;
		if(today_year<check_year){
			this_year='19'+this_year;
		}//endif
		else{
			this_year='20'+this_year;
		}//endelse	
	}//endif
		
	this_date = this_day+'.'+this_month+'.'+this_year;
	element.value = this_date;
	return true;
}// end of function check_date_correction


/* Testet, ob das angegebene Datum in Vergangenheit, Gegenwart oder Zukunft liegt.
   Gibt Werte -1 (Vergangenheit), 0 (Gegenwart) oder 1 (Zukunft) zurück*/
function check_date_tendency(mydate){
	if(mydate == ""){
		date_tendency = 2;
		return date_tendency;
	}
	date_array = mydate.split(".");
	this_day = date_array[0]
	this_month = date_array[1]
	this_year = date_array[2];
	
	today = new Date();
	
	var num_year = Number(this_year);
	var num_month = Number(this_month)-1;
	var num_day = Number(this_day);
	
	var Jhr = today.getYear();
	var today_year = ( Jhr >= 2000 ) ? Jhr : ( ( Jhr < 80 ) ? Jhr + 2000 : Jhr + 1900 );
	var today_day = today.getDate();
	var today_month = today.getMonth();
	
	var check_date = new Date(num_year,num_month,num_day,0,0,0);
	var check_today = new Date(today_year,today_month,today_day,0,0,0);
	
	
	if(check_date < check_today){
		date_tendency=-1; //past
	}//endif
	else{
		if(check_date > check_today){
			date_tendency=1; //future
		}//endif
		else{
			date_tendency=0; //present
		}//endelse
	}//endelse
	return date_tendency;	
}//end of function check_date_tendency


/* Testet, ob es sich bei dem angegebenen Jahr um ein Schaltjahr handelt.
   Liefert die Anzahl der Tage zurück, 28 bei Nicht-Schaltjahren, 29 bei Schaltjahren.*/
function isleapyear(this_year){
	this_days = 28;
	if (this_year % 4 == 0) {
		this_days = 29;
		if (this_year % 100 == 0 && this_year % 400 != 0) this_days = 28;
	}
	return this_days;
}//end of function


/* Überprüft die übergebene E-Mail-Adresse auf Gültigkeit.
   Liefert TRUE oder FALSE zurück.*/
function isEmailValid(myemail,alert_flag){
	/* 
	   Überprüfung mittels regulärem Ausdruck re_email, Zeichen _ / a-z / A-Z / 0-9 / - sind erlaubt (siehe [1])
	   Laut RFC2822 - 3.2.4 Atoms - sind auch folgende Zeichen im local-part ! # $ % & ' * + - / = ? ^ _ ` { | } ~ erlaubt (siehe[2])
	   Genaue Erläuterung finden Sie unter http://www.remote.org/jochen/mail/info/chars.html
	   Laut dieser Erläuterung bleiben folgende Zeichen übrig & ' * + - / = ? ^ _ } { (siehe [3])
	*/
	
	//var re_email = /^([_a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$/;//[1]
	//var re_email = /^([_a-zA-Z0-9-&'*+/=?^{}~]+)(\.[_a-zA-Z0-9-&'*+/=?^{}~]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$/;//[3]
	
	//var re_email = /^([_a-zA-Z0-9-&'*+/=?^{}!#$%&|`~]+)(\.[_a-zA-Z0-9-&'*+/=?^{}!#$%&|`~]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$/;//[2]
	var re_email = /^([_a-zA-Z0-9-&'*+\/=?^{}!#$%&|`~]+)(\.[_a-zA-Z0-9-&]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$/;//[2]
	
	
	/* E-Mail-Adresse muss dem "Muster" entsprechen*/
	if ((re_email.test(myemail))==false){
		if(alert_flag==1){
			alert("Die angegebene E-Mail-Adresse ist fehlerhaft.");
			return false;
		}//endif
	}//endif
	else{
		return true;
	}//endelse
}/* end of function isEmailValid */


/* Funktion überprüft, ob der übergebene String nur aus Zahlen besteht. 
   Liefert TRUE oder FALSE zurück. alert_flag (1=ja,0=nein) gibt an, ob eine 
   alert-Meldung erscheinen soll oder nicht.*/
function isNumberValid(mystring,alert_flag){
	var this_string = strtrim_complete(mystring);
	if (!isStringEmpty(this_string)){
		var re_string = /^[0-9]{1,}$/;
		if ((re_string.test(this_string))==false){
			if(alert_flag==1){
				alert( "Bitte geben Sie nur Zahlen ein." );
			}//endif
			return false;
		}//endif
		else{
			return true;
		}//endelse
	}//endif
	else{
		return true;
	}//endelse
}// end of function isNumberValid


/* Funktion überprüft, ob der übergebene String eine Zahl ist und ob diese n-Stellen hat.
   Liefert TRUE oder FALSE zurück. alert_flag (1=ja,0=nein) gibt an, ob eine 
   alert-Meldung erscheinen soll oder nicht.*/
function isNumberDigits(mystring,digits,alert_flag){
	var entry = strtrim_complete(mystring);
	if (!isStringEmpty(entry)){
		var c_entry = entry.length;
		if (c_entry!=digits || !isNumberValid(entry,0)){
      			if(alert_flag==1){
      				alert( "Bitte geben Sie eine " + digits + "-stellige Zahl ein!" );
      			}//endif
			return false;
    		}//endif
	}//endif
  	else{
  		return true;
	}//endelse
}// end of function isNumberAnz

/* Funktion überprüft, ob der übergebene String einen Betrag darstellt. 
   Ein Betrag kann mit Vorzeichen beginnen, kann Tausender-Kolonnenpunkte
   beinhalten und mit max. 2 Nachkommastellen enden.
   Beispiele: -12,3  12.345.455,33  12345 12.345 +12,34  u.s.w. 	
   Liefert TRUE oder FALSE zurück. alert_flag (1=ja,0=nein) gibt an, ob eine 
   alert-Meldung erscheinen soll oder nicht.*/
function isAmountValid(mystring,alert_flag){
	var this_string = strtrim_complete(mystring);
	if (!isStringEmpty(this_string)){
		var re_string = /^[+-]?\d{1,3}((\.\d\d\d)*|(\d\d\d)*)(,\d{1,2})?$/;
		if ((re_string.test(this_string))==false){
			if(alert_flag==1){
				alert( "Bitte geben Sie nur Zahlen ein." );
			}//endif
			return false;
		}//endif
		else{
			return true;
		}//endelse
	}//endif
	else{
		return true;
	}//endelse
}//end of function isAmountValid

/* Funktion steuert den Inhalt des Suchfeldes der DIV. */
function onclickSearchInputField(standardvalue){
	//alert('Methode onclickSearchInputField wird aufgerufen: '+standardvalue);
	var inhaltsuchfeld = document.getElementById('suchformular').suche.value;
	if (!isStringEmpty(inhaltsuchfeld)){
		if(inhaltsuchfeld == standardvalue){
			document.getElementById('suchformular').suche.value = "";
		}
	}else{
		document.getElementById('suchformular').suche.value = standardvalue;
	}
}//end of function onclickSearchInputField

/* Funktion steuert den Inhalt des Suchfeldes der DIV. */
function onblurSearchInputField(standardvalue){
	//alert('Methode onblurSearchInputField wird aufgerufen: '+standardvalue);
	var inhaltsuchfeld = document.getElementById('suchformular').suche.value;
	if (isStringEmpty(inhaltsuchfeld)){
		document.getElementById('suchformular').suche.value = standardvalue;
	}
}//end of function onblurSearchInputField