/**
* Allgemeine JS-Funktionen
*/

/** ***** Searchform und BLättern ******** */

/* für das Suchformular in tpl srch */
function checkSearchForm()
{
     var testme = document.searchform.what;
     if(check_plaintext(testme)==false)
         return false;
     return true;
}


/* für das Suchformular in tpl srch */
function resetSearchForm()
{
     document.searchform.what.value = '';
     return true;
}


/** ************* SYSTEM ************************************* */

/* Prüft, ob im Browser Cookies aktiviert sind */
function check_cookies_on()
{
	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;
}

/**
 * Gibt ein Array a aus
 */
function show_array(a)
{
     document.write('<p>');
     for (var i = 0; i < a.length; i++) {
     	document.write(i,' ',a[i],'<br>');
     }
     document.write('</p>');
     return;
}


/* Öffnet ein neues Browser-Fenster */
function wOpen (uri,wName,wPars)
{
  win = window.open(uri,wName,wPars);
  win.focus();
}


/*
 * Toggelt die Anzeige des Displays, das im Versteckmich-div mit der id idel
 * sitzt
 */
function displaytoggle (idel)
{
    if (document.getElementById(idel).style.display != "none") {
    	document.getElementById(idel).style.display = "none";
    }
    else {
    	document.getElementById(idel).style.display = "block";
    }
}


/** ************* FORMULAR-PRÜFUNG ******************************* */

/* Prüft, ob ein string leer ist oder nur aus whitespace besteht */
function is_emptyString(mystr)
{
	if(mystr.replace(/\s+/g,"") == "") return true;
    return false;
}


/* Prüft ein Form-Objekt (textfeld, textarea) auf fehlende Eingaben */
function check_empty(testme)
{
    var mystr = testme.value;
    if (is_emptyString(mystr))
    {
         alert('leeres Feld');
         testme.value = "";
         testme.focus();
         return false;
	}
    return true;
}



/**
 * checkt, ob eine Selectbox (SELECT, SELECT_M) selektiert ist. Eine selektierte
 * erst-Option wird als unselektiert gewertet, wenn Sie leer ist.
 */
function check_selectedUnblank(testme)
{
	 tx = testme.options[0].text;

     if ( testme.name.search(/\[\]/)!= -1 )
     {
        //Mehrfachselektion
    	msg = 'Bitte wählen Sie eine oder mehrere Optionen!';
        if ( testme.options[0].selected == true && is_emptyString(tx) )
     	{
     		testme.options[0].selected = false;
     	}
      	anz = testme.options.length;
     	result = false;
     	for (var i = 0; i < anz; i++) {
     		if ( testme.options[i].selected == true ) result = true;
     	}
     }
     else
     {
     	//Einfachselektion
    	msg = 'Bitte wählen Sie eine Option!';
     	result = true;
     	if (testme.selectedIndex == 0 && is_emptyString(tx) ) result = false;
     	if (testme.selectedIndex < 0 ) result = false;
     }

     if (result == false)
     {
     	testme.focus();
        alert(msg);
        return false;
     }
	 return true;
}


/**
 * checkt, ob bei einer Mehrfach-Checkbox (CHECK_M) mindestens eine Option
 * gecheckt ist.
 * 
 * boxname Namen-Basis nboxes Anzahl der vorhandenen Boxen
 * 
 * Die box-Id's sind boxname[0], boxname[1], boxname[2] ....
 */
function check_checked_checkm(boxname,nboxes)
{
	result = false;
    for (i = 0; i< nboxes; i++)
    {
    	boxid = boxname + '[' + i + ']';
    	if (document.getElementById(boxid).checked == true) {
    		result = true;
    	}
    }

    if ( result == false ) {
     	boxid = boxname + '[0]';
     	document.getElementById(boxid).focus();
        alert('Bitte checken Sie eine oder mehrere Optionen!');
    }
	return result;
}



/**
 * Prüft, ob ein Text (Form-Objekt) aus einfachen Zeichen besteht. allow_nl
 * erlaubt Whitespace zB für Textareas, falls nicht angegeben, wird Whitespace
 * durch ein Blank ersetzt. Geht für Text und Textarea.
 */
function check_plaintext(testme,allow_nl)
{
     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!';
     mystr = str_condense_blk(mystr);
     if ( !allow_nl ) testme.value = mystr;

     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;
}


/* Plaintext für eine Textarea, Umbrüche zulassen */
function check_plaintext_area(testme)
{
	if (!check_plaintext(testme,1))
		return false;
	return true;
}


/* Überprüft eine Real-Zahl (Form-Objekt) auf Plausibilität */
function check_real(testme)
{
	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;
}


/* Überprüft eine Integer-Zahl (Form-Objekt) auf Plausibilität */
function check_int(testme)
{
	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;
}


/* Überprüft den Inhalt (Form-Objekt) auf eine maximale (max) Zeichenanzahl */
function check_textlengh(testme,max)
{
   	var mystr = testme.value;
    if (testme.value.length > max) {
     	alert('Bitte auf ' + max + ' Zeichen kürzen!');
        testme.focus();
        return false;
    }
    return true;
}


/**
 * Ü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
 */
function check_separatator(testme,max_blanks,separator,separatorname)
{
     str = testme.value;
     if (is_emptyString(str)==true)
     	return true;

     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 true;
}


/*
 * Überprüft eine Telefonnummer (Form-Objekt) auf Plausibilität. Nicht
 * ausgefüllt ist true
 */
function check_telefon(testme)
{
   	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;
}


/**
 * Überprüft eine email-adresse (Form-Objekt) auf Plausibilität. Nicht
 * ausgefüllt ist true
 */
function check_email(testme)
{
   	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;
}


/**
 * Überprüft einen externen Link (Form-Objekt) auf Plausibilität. Nicht
 * ausgefüllt ist true.
 */
function check_link_external(testme)
{
   	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 ) {
    	return true;
    }
    if ( ema.search("://") == -1) {
     	alert('kein :// gefunden!');
        testme.focus();
     	return false;
    }
    return true;
}


/*
 * Ü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
 */
function check_dbdate(testme)
{
   	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 result;
}



/**
 * Überprüft ein Form-Objekt auf einen gültigen Datei-Typ. Die gültigen Typen
 * werden als str übergeben: typ1#typ2....
 */
function check_filetype(testme,filetypes)
{
   	var mystr = testme.value;
    var result = false;   
    var allowed = filetypes.split('#');
    
    if ( mystr.indexOf('.') == -1) {
    	testme.focus();
    	alert('Falscher Dateityp!');
	    return false;
    }
    tmp = mystr.split('.');

    for ( i = 0; i < allowed.length; i++ ) {
		if ( tmp[1] == allowed[i] ) result = true;
    }
    if ( result == false ) {
    	testme.focus();
    	alert('Dateityp ' + tmp[1] + ' nicht erlaubt!');
	    return false;
	}

	return true;
}



/**
 * Überpüft ein Form-objekt auf Plausibilität als Datumsangabe. Leer ist true
 */
function check_date(testme,format)
{
   	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" || 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;
         }
         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 true;
}

/*
 * Überprüft ein Zeit-Form-Objekt auf Plausibilität. Gültig sind 'hh:mm:ss',
 * 'hh:mm' und 'hh'.
 */
function check_time(testme)
{
    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 true;
}


/*
 * Prüft einen date-time - Form-Objekt auf Plausibilität. Es muss keine
 * Zeit-komponente dabei sein.
 */
function check_datetime(testme,format)
{
     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;
}


/*
 * Prüft, ob das erste Datum früher als das zweite ist. do1,do2 input-objekte
 * mit Datum im db-format (dt)
 */
function check_dtSequence (do1,do2)
{
    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 true;
}



/** ************* PRÜFEN UND KORRIGIEREN *************** */

/**
 * entfernt Whitespace bis auf Leerzeichen, komprimiert multiple Leerzeichen und
 * entfernt Leerzeichen am Anfang und Ende
 */
function str_condense(str)
{
     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;
}


/*
 * Ersetzt Whitespace durch ein Leerzeichen, komprimiert multiple Leerzeichen
 * und entfernt Leerzeichen am Anfang und Ende
 */
function str_condense_blk(str)
{
     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;
}


/* Korrigiert ein Date-DB Formular-Feld */
function correct_datedb_fo(testme)
{
	str = testme.value;
	if (str == '')
		str = '0000-00-00';
	str = correct_date(str,'DB');
	testme.value = str;
	return true;
}


/* Korrigiert ein Date-DB Formular-Feld, falls es nicht leer ist */
function correct_andcheck_datedb_fo(testme)
{
	str = testme.value;
	if (str == '' || str == '0000-00-00') {
		testme.value = '';
		return true;
	}
	str = correct_date(str,'DB');
	testme.value = str;
	erg = check_dbdate(testme);
	return erg;
}



/*
 * versucht, einen date-string in ein bestimmtes Format zu portieren und gibt
 * ihn zurück str datums-String format Ziel-Format: (DB GERMAN ...) //TODO
 */
function correct_date(str,format)
{
     if (!format) {
     		format='DB';
     }

     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;
}


/*
 * versucht, einen time-string zu korrigieren und gibt ihn zurück, Zielformat
 * hh:mm:ss, hh:mm oder hh
 */
function correct_time(str)
{
	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];
    }
	if ( tmp.indexOf(":") == -1 ) {
		tmp = tmp + ':00';
	}
    return tmp;
}


/*
 * versucht, einen date-time-string zu korrigieren und gibt ihn zurück,
 * time-Komponente nicht nötig.
 */
function correct_datetime(str,format)
{
     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 *************** */

/**
 * SmDate gibt eine Pseudozeit in Sekunden seit 1970 an. 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
 */
function getSmDate(dt_str)
{
     // 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;
}


/* ergänzt eine führende 0 bei Zahlenwerten kleiner 10 */
function add_leadingzero(z)
{
    if (z < 10) z = '0' + z;
	return z;
}


/*
 * löscht eine führende Null in einem string. Der String muss mind. 2 Zeichen
 * langs sein
 */
function remove_leadingzero(z)
{
     zlen = z.length;
     if (zlen < 2) return z;
     if (z.charAt(0) == '0') z = z.substr(1);
     return z;
}


/* Vergleicht zwei dt-strings und ermittelt, ob das zweite Datum später ist. */
function smDate_islater(dt_str1, dt_str2)
{
     // 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;
}



/** ************* TOOLTIPS *************** */

/*
 * Zeigt den Tooltip mit dem übergebenen Text an. Der vorbereitete Tooltip mit
 * id='tooltip' muss existieren.
 */
function showTT(e, text)
{
	pos = getTTscrol();
	var myX = e.clientX + pos.x + 5;
	var myY = e.clientY + pos.y + 15;

	elementId = 'tooltip';
	// text = decodeURI(text);
	document.getElementById(elementId).style.left = myX + "px";
	document.getElementById(elementId).style.top = myY + "px";
	document.getElementById(elementId).innerHTML = text;
	document.getElementById(elementId).style.visibility = "visible";
}


/* Zeigt einen id-Tooltip für das Element id an der Mausposition */
function showIdTT(e,elementId)
{
	pos = getTTscrol();
	var myX = e.clientX + pos.x + 5;
	var myY = e.clientY + pos.y + 15;

	elementId = 'tooltip_for_' + elementId;
	document.getElementById(elementId).style.left = myX + "px";
	document.getElementById(elementId).style.top = myY + "px";
	document.getElementById(elementId).style.visibility = "visible";
}


/* Verbirgt einen Tooltip */
function hideTT()
{
	elementId = 'tooltip';
	document.getElementById(elementId).style.visibility = "hidden";
}


/* Verbirgt einen id-Tooltip */
function hideIdTT(elementId)
{
	elementId = 'tooltip_for_' + elementId;
	document.getElementById(elementId).style.visibility = "hidden";
}


/* berechnet die Scroll-Korrektur bei einem Tooltip */
function getTTscrol()
{
   if (document.body.scrollTop != undefined && navigator.appName.indexOf("Explorer") != -1 ) {
      var res = (document.compatMode != "CSS1Compat") ? document.body : document.documentElement;
      return {x : res.scrollLeft, y : res.scrollTop};
   }
   else {
      myo = {x : window.pageXOffset, y : window.pageYOffset};
      return myo;
   }
}

/** *********** Cookies **************** */

/* n: Cookiename, w: Wert, e: e: expires, Verfallszeit in Millisec */
function cookieAdd(n,w,e)
{
	if (!w) {
		cookieDelete(n);
		return;
	}	
	if (e) {
		var a = new Date();
 		a = new Date(a.getTime() + e);
 		document.cookie = n + '=' + w + '; expires=' + a.toGMTString() + ';';
	}
	else {
		document.cookie = n + '=' + w + ';';
	}
}


/* Gibt den Wert für das Cookie mit Namen n zurück */
function cookieRead(n)
{
	if (!document.cookie) {
		return '';
	}
	parts = document.cookie.split('; ');
	for (i=0; i < parts.length; i++) {
		tmp = parts[i].split('=');
		if (tmp[0] == n) {
			return tmp[1];
		}
	}
	return '';
}


function cookieDelete(n)
{
 	document.cookie = n + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 


/* Zeigt das Cookie, ggf nur den Wert für n davon */
function cookieShow(n)
{		
	if (document.cookie) {
  		info = document.cookie;
  		if (n) {
  			info = cookieRead(n);
  		} 		
	} else {
		info = 'kein Cookioe vorhanden!';
	}
	alert(info);	
}



/* Hängt die Werteliste wlist an das cookie n an */
function cookieAddWlist(n,wlist)
{
	if (!wlist) {
		return;
	}
	co = cookieRead(n) + ' ' + wlist.join(' ');
	co = str_condense(co);
	cookieAdd(n, co);
}


/* Entfernt die Werte wlist vom cookie n */
function cookieRemoveWlist(n,wlist)
{
	co = cookieRead(n);
	if (!wlist || !co) {
		return;
	}
	co = ' ' + co + ' ';
	for (i=0; i < wlist.length; i++) {
		id = ' ' + wlist[i] + ' ';
		co = co.replace(id,' ');		
	}
	co = str_condense(co);
	cookieAdd(n, co);
}


/** ************* TESTCODE *************** */

function test_genjs() {
     alert('js-function ok');
     return;
}

