<!--
/* Allgemeine JS-Funktionen, zentral zur Verfügung gestellt
*/


/******* Searchform und BLättern *********/



function checkSearchForm() {
/* für das Suchformular in tpl srch
*/
     var testme = document.searchform.what;
     if(check_plaintext(testme)==false)
         return false;
     return true;
}


function resetSearchForm() {
/* für das Suchformular in tpl srch
*/
     document.searchform.what.value = '';
     return true;
}



function toPage(pages,ds_perpage) {
/*  Prüft, ob die angegebene Ziel-Seite des Blättern-Menus plausibel ist. Wird von
der php-funktion mk:menu_multipage() Blättern-Menü benötigt
*/

	testme = document.gotoform.ds_act.value;
	if(testme==""){
		alert('Bitte geben Sie eine Seitennummer von 1 - '+pages+' an!');
	    document.gotoform.ds_act.focus();
	    return false;
	}
	if(isNaN(testme)){
		alert('Bitte eine Zahl angeben!');
         testme = "9";
         document.gotoform.ds_act.value="";
         document.gotoform.ds_act.focus();
	    return false;
	}
	if(testme<=0 || testme>pages){
		alert('Es gibt nur Seiten von 1 - '+pages);
         document.gotoform.ds_act.value = "";
	    document.gotoform.ds_act.focus();
	    return false;
	}
     tmp = testme * ds_perpage - ds_perpage;
     document.gotoform.ds_act.value = tmp;
}



/*************** SYSTEM **************************************/


function check_cookies_on() {
// Prüft, ob im Browsers Cookies aktiviert sind

	if (navigator.cookieEnabled == true) {
         return true;
	}
     else if (navigator.cookieEnabled == false) {
		alert("PROBLEM: cookies disabled -  " +
         	"Wenn Sie diesen Bereich der Website nutzen möchten, " +
         	"stellen Sie bítte Ihren Browser so ein, daß er Cookies akzeptiert!");
         return false;
	}
     else {
		alert("Kann nicht erkennen, ob Ihr Browser Cookies erlaubt! " +
         	"Wenn Sie diesen Bereich der Website nutzen möchten, " +
         	"stellen Sie bítte Ihren Browser so ein, daß er Cookies " +
            "akzeptiert!");
         return false;
	}
     return true;
}


function show_array(a) {
/* Gibt ein Array aus
	a	Array (nur einfache Liste)
*/
     document.write('<p>');
     for (var i = 0; i < a.length; i++) {
     	document.write(i,' ',a[i],'<br>');
     }
     document.write('</p>');
     return;
}


function wOpen (uri,wName,wPars) {
/*   Öffnet ein neues Fenster
     uri     zieldatei
     wName   Fenstername
     wPars   string mit Parametern
*/
  win = window.open(uri,wName,wPars);
  win.focus();
}


/*************** FORMULAR-PRÜFUNG ********************************/

function is_emptyString(mystr) {
/* Prüft, ob ein string leer ist oder nur aus whitespace besteht
*/

	if(mystr.replace(/\s+/g,"") == "")
         return true;

    return false;
}

function check_empty(testme) {
// Prüft ein Form-Objekt (textfeld, textarea) auf fehlende Eingaben

    var mystr = testme.value;
    if(is_emptyString(mystr)){
         alert('leeres Feld');
         testme.value="";
         testme.focus();
         return false;
	}
    return true;
}


function check_selectedUnblank(testme) {
/* checkt, ob eine Selectbox selektiert ist und ob der Selektierte String (angezeigter Wert)
nicht leer oder mit Blanks gefüllt ist.
*/
     result = true;
     if (testme.selectedIndex < 0) {
     	result = false;
     } else {
         tx = testme.options[testme.selectedIndex].text;
         if (is_emptyString(tx))
     		result = false;
     }
     if (result == false) {
     	testme.focus();
        alert('Bitte wählen Sie eine Option');
        return false;
     }
	return true;
}


function check_plaintext(testme,allow_nl) {
/* Prüf, ob ein Text (Form-Objekt) aus einfachen Zeichen besteht.
allow_nl erlaubt Zeilenumbruch zB für Textareas.
*/
     var mystr = testme.value;
     var Numbers = "0123456789";
     var Spec = "_+-.,:()/@ß!?" + '"';
     var Chars = " qwertzuiopüasdfghjklöäyxcvbnmQWERTZUIOPÜASDFGHJKLÖÄYXCVBNM";
     var okChars = Chars + Numbers + Spec;

     msg = 'Bitte verwenden Sie keine Sonderzeichen oder Zeilenümbrüche!';
     if ( allow_nl || testme.type != 'textarea' ) {
     	msg = 'Bitte verwenden Sie keine Sonderzeichen!';
        mystr = mystr.replace(/\n/g, "");
        mystr = mystr.replace(/\r/g, "");
     }

     for(i=0;i<mystr.length;i++){
         z=mystr.substr(i,1);
         if(okChars.indexOf(z) == -1){
         	if (okChars.indexOf(z) != '"') {
	             alert(msg);
	             testme.focus();
             }
             return false;
         }
     }
     return true;
}



function check_plaintext_area(testme) {
/* Plaintext für eine Textarea */
	if (!check_plaintext(testme,1))
		return false;
	return true;
}


function check_real(testme) {
// Überprüft eine Real-Zahl (Form-Objekt) auf Plausibilität

   	var mystr = testme.value;
     result = true;

     var okChars = "0123456789+-.";
     for(i=0;i<mystr.length;i++){
         z=mystr.substr(i,1);
         if(okChars.indexOf(z) == -1)
             result = false;
     }
     if(result == false){
     	alert('Diese Zahl erscheint nicht plausibel!');
        testme.focus();
        return false;
     }
     return true;
}


function check_int(testme) {
// Überprüft eine Integer-Zahl (Form-Objekt) auf Plausibilität

   	var mystr = testme.value;
     result = true;

     var okChars = "0123456789+-";
     for(i=0;i<mystr.length;i++){
         z=mystr.substr(i,1);
         if(okChars.indexOf(z) == -1)
             result = false;
     }
     if(result == false){
     	alert('Diese Zahl erscheint nicht plausibel!');
        testme.focus();
        return false;
     }
     return true;
}


function check_textlengh(testme,max) {
// Überprüft den Inhalt (Form-Objekt) auf eine maximale (max) Zeichenanzahl

   	var mystr = testme.value;
     if(testme.value.length > max) {
     	alert('Bitte auf ' + max + ' Zeichen kürzen!');
        testme.focus();
        return false;
     }
     return true;
}


function check_separatator(testme,max_blanks,separator,separatorname) {
/*  Überprüft, ob ein String für eine Mehrfachangabe ein Komma enthält
	max_blanks		Max. Anzahl von Blanks per Angabe
	separator		Delimiter-zeichen
    separatorname   zB Komma, Strichpunkt etc
*/
     str = testme.value;
     if(is_emptyString(str)==true)
     	return;

     nr_blanks = 0;
     if(str.indexOf(' ') >= 0)
     	nr_blanks = str.split(' ').length - 1;

     if (nr_blanks > max_blanks && str.indexOf(separator) < 0) {
        alert('Bitte trennen Sie Mehrfachangaben mit ' + separatorname + '!');
        testme.focus();
        return false;
     }

     return;
}


function check_telefon(testme) {
// Überprüft eine Telefonnummer (Form-Objekt) auf Plausibilität. Nicht ausgefüllt ist true

   	var mystr = testme.value;
    result = true;

    if (is_emptyString(mystr))
    	return true;

     var okChars = "0123456789 +-.()/";
     for(i=0;i<mystr.length;i++){
         z=mystr.substr(i,1);
         if(okChars.indexOf(z) == -1)
             result = false;
     }
     if(result == false){
     	alert('Die Telefonnummer erscheint nicht plausibel!');
         testme.focus();
         return false;
     }
     return true;
}


function check_email(testme) {
/* Überprüft eine email-adresse (Form-Objekt) auf Plausibilität. Nicht ausgefüllt ist true
*/
   	var ema = testme.value;
     result = true;

    if (is_emptyString(ema))
    	return true;

   	if(ema.search(" ") != -1){
     	alert('keine Blanks erlaubt!');
         testme.focus();
     	return false;
     }
     if(ema.search("@")==-1){
     	alert('kein @ gefunden!');
         testme.focus();
     	return false;
     }
     if(ema.indexOf("@") != ema.lastIndexOf("@")) {
     	alert('Problem mit dem @ Zeichen!');
         testme.focus();
         return false;
     }
     ema = ema.split("@");
     if (ema[0].length < 1 || ema[1].length < 4) {
        	alert('Nicht plausible Zeichen-Anzahl!');
         testme.focus();
         return false;
     }
     ema = ema[1].split(".");
     if (ema.length < 2) {
        	alert('Keinen Punkt gefunden!');
         testme.focus();
         return false;
     }
     return true;
}


function check_link_external(testme) {
/* Überprüft einen externen Link (Form-Objekt) auf Plausibilität. Nicht ausgefüllt ist true.
*/
   	var ema = testme.value;
     result = true;

    if (is_emptyString(ema))
    	return true;

     if(ema==''){
     	alert('Angaben fehlen!');
         testme.focus();
     	return false;
     }
     if(ema.search("://")==-1){
     	alert('kein :// gefunden!');
         testme.focus();
     	return false;
     }
     return true;
}


function check_dbdate(testme) {
/* Überprüft einen DB-Datumsstring (Form-Objekt) auf Plausibilität. Eignet sich nur für
Datumsangaben, die nicht gespeichert werden sollen (zB Such-Felder der Dokumentlisten)
Zielformate: JJJJ-MM-TT, JJJJ-MM, JJJJ
*/
   	var mystr = testme.value;
     var result = true;

     msg = 'Bitte beachten Sie die Datums-Formate JJJJ-MM-TT, JJJJ-MM, JJJJ';
	var okChars = "0123456789-";
	for(i=0;i<mystr.length;i++){
		z = mystr.substr(i,1);
	    if(okChars.indexOf(z) == -1)
	    	result = false;
     }
     parts = mystr.split('-');
     if (result==true && parts.length < 1 || parts.length > 3)
	   result = false;
     if (result==true && parts[0].length != 4)
	   result = false;
     if (result==true && parts[1] && parts[1]<1 || parts[1]>12)
	   result = false;
     if (result==true && parts[2] && parts[2]<1 || parts[2]>31)
		result = false;

	if(result == false){
		alert('Das Datum ist nicht plausibel \n' + msg);
	    testme.focus();
	    return false;
	}
     return;
}


function check_date(testme,format) {
/* Überprüft einen Datums-Form-Objekt auf Plausibilität
	format 	Zielformate:
     		DB (JJJJ-MM-TT oder 0000-00-00)
             GERMAN (TT.MM.JJJJ)
*/
   	var mystr = testme.value;
     var result = true;
     if(format == '')
     	format = 'DB';

     if (format == 'DB'){
        	msg = 'Bitte beachten Sie das Format JJJJ-MM-TT für Datumsangaben';
         if(mystr == "0000-00-00")
         	return;

         var okChars = "0123456789-";
	    for(i=0;i<mystr.length;i++){
	         z = mystr.substr(i,1);
	         if(okChars.indexOf(z) == -1)
	             result = false;
         }
         parts = mystr.split('-');
         if (result==true && parts.length != 3)
	       result = false;
         if (result==true && parts[1] && parts[1]<1 || parts[1]>12)
	       result = false;
         if (result==true && parts[2] && parts[2]<1 || parts[2]>31)
	       result = false;
     }

     if (format == 'GERMAN'){
        	 msg = 'Bitte beachten Sie das Format TT.MM.JJJJ für Datumsangaben';
        	 tmp = mystr.replace(/\.+/g,'§');
          var okChars = "0123456789§";
	     for(i=0;i<tmp.length;i++){
	         z = tmp.substr(i,1);
	         if(okChars.indexOf(z) == -1)
	             result = false;
	     }
          parts = mystr.split('\.');
          if (result==true && parts.length != 3)
	        result = false;
          if (result==true && parts[0] > 31 || parts[1] > 12 || parts[2] > 2999 || parts[2] < 10)
          	result = false;
     }
	if(result == false){
		alert('Das Datum ist nicht plausibel \n' + msg);
	    testme.focus();
	    return false;
	}
     return;
}

function check_time(testme) {
/* Überprüft einen Zeit-Form-Objekt auf Plausibilität
   Gültig sind 'hh:mm:ss', 'hh:mm' und 'hh'.
*/
     var mystr = testme.value;
     var result = true;

     msg = 'Bitte beachten Sie die Zeitformate hh:mm:ss, hh:mm, hh';
	var okChars = "0123456789:";
	for(i=0;i<mystr.length;i++){
		z = mystr.substr(i,1);
	    if(okChars.indexOf(z) == -1)
	    result = false;
     }

     parts = mystr.split(':');
     if (result==true && parts.length < 1 || parts.length > 3)
	   result = false;
     if(result==true){
	     for(i=0;i<parts.length;i++){
	         if (parts[i].length < 1 || parts[i].length > 2) {
	             result = false;
	         }
	     }
     }
     if (result==true && parts[0]> 23){
	   result = false;
        msg = "Stundenangabe von 0 - 23";
     }
     if (result==true && parts[1] && parts[1]> 59){
	   result = false;
        msg = "Minutenangabe von 0 - 59";
     }
     if (result==true && parts[2] && parts[2]> 59){
	   result = false;
        msg = "Sekundenangabe von 0 - 59";
     }
	if(result == false){
		alert('Die Zeitangabe ist nicht plausibel \n' + msg);
	    testme.focus();
	    return false;
	}
     return;
}


function check_datetime(testme,format) {
/* Prüft einen date-time - Form-Objekt auf Plausibilität. Es muss keine
Zeit-komponente dabei sein.
*/
     str = testme.value
     str = str_condense(str);
     parts = str.split(" ");
     str_date = parts[0];
     str_time = parts[1];
     if (!str_time) {
     	str_time1 = '';
     } else {
         str_time1 = ' ' + str_time;
     }
     testme.value  = str_date;
     if (check_date(testme,format) == false) {
     	testme.value  = str_date + str_time1;
         return false;
     }
     if (str_time) {
         testme.value  = str_time;
	    if (check_time(testme) == false) {
	         testme.value  = str_date + str_time1;
	         return false;
	    }
     }
     testme.value  = str_date + str_time1;
     return true;
}


function check_dtSequence (do1,do2) {
/* Prüft, ob das erste Datum früher als das zweite ist.
	do1,do2	input-objekte mit Datum im db-format (dt)
*/
     var d1 = do1.value;
     var d2 = do2.value;
     if (smDate_islater(d1,d2) == false) {
         do2.focus();
         alert('Das Enddatum liegt vor dem Anfangsdatum oder beide Werte sind gleich!');
         return false;
     }
     return;
}



/*************** PRÜFEN UND KORRIGIEREN ****************/

function str_condense(str) {
/* entfernt Whitespace bis auf Leerzeichen, komprimiert multiple Leerzeichen und
entfernt Leerzeichen am Anfang und Ende
*/
     str = str.replace(/\n+/g,'');
     str = str.replace(/\r+/g,'');
     str = str.replace(/\t+/g,'');
     str = str.replace(/\f+/g,'');
     str = str.replace(/ +/g,' ');
     str = str.replace(/^ /,'');
     str = str.replace(/ $/,'');
     return str;
}


function correct_date(str,format){
/*  versucht, einen date-string in ein bestimmtes Format zu portieren und
gibt ihn zurück

	str		datums-String
     format	Ziel-Format: (DB GERMAN ...)

//TODO
*/
     if (format == 'DB'){
         tmp = str;
         tmp = tmp.replace(/\.+/g,'-');
         tmp = tmp.replace(/:+/g,'-');
         tmp = tmp.replace(/,+/g,'-');
         tmp = tmp.replace(/;+/g,'-');
         tmp = tmp.replace(/ +/g,'-');
         tmp = tmp.replace(/--+/g,'-');
         parts = tmp.split("-");
         if (parts.length == 3 && parts[2].length==4 && parts[0].length < 3) {
             erg = parts[2] + '-' + parts[1] + '-' + parts[0];
             tmp = erg;
         }
         parts = tmp.split("-");
         if(parts[1] && parts[1].length==1)
         	parts[1] = '0' + parts[1];
         if(parts[2] && parts[2].length==1)
         	parts[2] = '0' + parts[2];
         tmp = parts[0];
         for(i=1;i<parts.length;i++){
         	tmp = tmp + '-' + parts[i];
         }
         return tmp;
     }

     if (format == 'GERMAN'){
         tmp = str;
         tmp = tmp.replace(/-+/g,'\.');
         tmp = tmp.replace(/:+/g,'\.');
         tmp = tmp.replace(/,+/g,'\.');
         tmp = tmp.replace(/;+/g,'\.');
         tmp = tmp.replace(/ +/g,'\.');
         tmp = tmp.replace(/\.+/g,'\.');
         parts = tmp.split("\.");
         if (parts.length == 3 && parts[0].length==4 && parts[2].length < 3) {
             erg = parts[2] + '\.' + parts[1] + '\.' + parts[0];
             return erg;
         }
         return tmp;
     }

     return str;
}


function correct_time(str){
/*  versucht, einen time-string zu korrigieren und gibt ihn zurück. Das
Zielformat ist hh:mm:ss, hh:mm oder hh
*/
	tmp = str;
     tmp = tmp.replace(/\.+/g,':');
     tmp = tmp.replace(/,+/g,':');
     tmp = tmp.replace(/;+/g,':');
     tmp = tmp.replace(/ +/g,':');
     tmp = tmp.replace(/::+/g,':');

     parts = tmp.split(":");
     if(parts[0] && parts[0].length==1)
     	parts[0] = '0' + parts[0];
     tmp = parts[0];
     for(i=1;i<parts.length;i++){
     	if(parts[i].length==1)
     		parts[i] = '0' + parts[i];
     	tmp = tmp + ':' + parts[i];
     }
     return tmp;

}


function correct_datetime(str,format) {
/* versucht, einen date-time-string zu korrigieren und gibt ihn zurück. Eine
time-Komponente ist nicht nötig.
*/
     str = str_condense(str);
     parts = str.split(" ");
     str_date = parts[0];
     str_time = parts[1];
     str_date = correct_date(str_date,format);
     str_new = str_date;
     if (str_time) {
     	str_time = correct_time(str_time,format);
         str_new = str_date + " " + str_time;
     }
     return str_new;
}

/*************** ALLGEMEINE DATUMS/ZEITFUNKTIONEN ****************/


function getSmDate(dt_str){
/* SmDate gibt eine Pseudozeit in Sekunden seit 1970 an. Es ist ein Ersatz
für das DOM Zeit-objekt, da das im Monat (Dezember) einen Fehler hat. DimoDate rechnet in
Sekunden ab 1970 und ist nicht gregorianisch (Monat hat 31 Tage, kein Schaltjahr).
Dadurch ist nur ein relativer Vergleich der Zeiten möglich, aber keine Berechnung der Dauer!

     dt_str	gültiger Datums/Zeit-string im db-Format

*/
     //init
     var tmp = dt_str.split(' ');
     if (tmp.length > 2)
       	return false;
     tparts = new Array();
     for(i=0; i<6; i++){
     	tparts[i] = 0;
     }

     //Datums-Anteil
     tmp1 = tmp[0].split('-');
     for(i=0; i<3; i++) {
         if(tmp1[i]) {
             tparts[i] = parseInt(remove_leadingzero(tmp1[i]));
             if (isNaN(tparts[i]))
             	tparts[i] = 0;
         }
     }

	//Zeit-anteil
     tmp1 = 0;
     if (tmp[1])
     	tmp1 = tmp[1].split(':');
     for (i=0; i<3; i++) {
         var k = i+3;
         tparts[k] = 0;
         if(tmp1[i]) {
         	tparts[k] = parseInt(remove_leadingzero(tmp1[i]));
             if (isNaN(tparts[k]))
             	tparts[k] = 0;
         }
     }

     //smd berechnen
     smd_y = (tparts[0] - 1970) * 12 * 31 * 24 * 60 * 60;
     smd_m = tparts[1] * 31 * 24 * 60 * 60;
     smd_d = tparts[2] * 24 * 60 * 60;
     smd_h = tparts[3] * 60 * 60;
     smd_mi = tparts[4] * 60;
     smd_s = tparts[5];
     smd = smd_y + smd_m +  smd_d + smd_h + smd_mi + smd_s;

     return smd;
}


function add_leadingzero(z){
/* ergänzt eine führende 0 bei Zahlenwerten kleiner 10
*/
     if (z < 10)
     	z = '0' + z;
	return z;
}


function remove_leadingzero(z){
/* löscht eine führende Null in einem string. Der String muss mind. 2 Zeichen langs sein
*/
     zlen = z.length;
     if (zlen < 2)
     	return z;
     if (z.charAt(0) == '0')
     	z = z.substr(1);
     return z;
}


function smDate_islater(dt_str1, dt_str2) {
/* Vergleicht zwei dt-strings und ermittelt, ob das zweite Datum später ist.
*/
     //init
     smd1 = getSmDate(dt_str1);
     smd2 = getSmDate(dt_str2);
     if (smd1 == false || smd2 == false)
     	return false;

     //zeitspanne
     erg = true;
     if (smd2 - smd1 <= 0)
     	erg = false;

     return erg;
}


function test_genjs(){
/**/
     alert('js-function ok');
     return;
}

//-->