NS4				= (document.layers);
NS6				= ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 5));
IE4				= (document.all);
MAC45			= (navigator.appVersion.indexOf("MSIE 4.5") != -1);
ver4			= (NS4 || IE4);   
isMac			= (navigator.appVersion.indexOf("Mac") != -1);

function ButtonInit()	//Buttens in Anwendung animieren
{
	var ua = navigator.userAgent.toLowerCase();
	isIE		= ((ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1)); 
	isGecko		= (ua.indexOf("gecko") != -1);
	isSafari	= (ua.indexOf("safari") != -1);
	isKonqueror	= (ua.indexOf("konqueror") != -1);
	
	if (isIE)
	{
		document.onmouseover = raiseButton;
		document.onmouseout  = normalButton;
		document.onmousedown = lowerButton;
		document.onmouseup   = raiseButton;
	}
}
function raiseButton(e)
{
	var el = window.event.srcElement;
	if (el != null)
	{
		className = el.className;
		if (className == 'rteImage' || className == 'rteImageLowered')			el.className = 'rteImageRaised';
	}
}
function normalButton(e)
{
	var el = window.event.srcElement;
	if (el != null)
	{
		className = el.className;
		if (className == 'rteImageRaised' || className == 'rteImageLowered')	el.className = 'rteImage';
	}
}
function lowerButton(e)
{
	var el = window.event.srcElement;
	if (el != null)
	{
		className = el.className;
		if (className == 'rteImage' || className == 'rteImageRaised')			el.className = 'rteImageLowered';
	}
}

function ChDat(frm,obj,prev)	// Datum auf gültig prüfen
{
	var strFehler = "";			// String mit Fehlermeldung
	var TErr = false;			// Fehler, true wenn ungültiger Tag
	var jetzt = new Date();		// Datum Objekt
	var strD;					// String / Array für Datum
	var autofill = false;		// Datum wurde unvollständig eingegeben - für Vergangenheit Prüfung
	strD = trim(obj.value);
	obj.value = strD;
	if (strD == "") return;
	// Trennzeichen mit . ersetzen
	strD = strD.split(" ").join(".");
	strD = strD.split(",").join(".");
	strD = strD.split(":").join(".");
	strD = strD.split(";").join(".");
	strD = strD.split("-").join(".");
	strD = strD.split("_").join(".");
	strD = strD.split("'").join(".");
	strD = strD.split("`").join(".");
	strD = strD.split("´").join(".");
	strD = strD.split("~").join(".");
	strD = strD.split("^").join(".");
	// Datum zerlegen in Tag - Monat - Jahr
	strD = strD.split(".");
	if (strD.length == 1 && strD[0].length == 4)	// Datum wurde ohne Trennzeichen eingegeben TTMM
	{
		strD[1] = strD[0].substr(2, 2)
		strD[0] = strD[0].substr(0, 2)
	}
	if (strD.length == 1 && strD[0].length == 6)	// Datum wurde ohne Trennzeichen eingegeben TTMMJJ
	{
		strD[2] = strD[0].substr(4, 2)
		strD[1] = strD[0].substr(2, 2)
		strD[0] = strD[0].substr(0, 2)
	}
	if (strD.length == 1 && strD[0].length == 8)	// Datum wurde ohne Trennzeichen eingegeben TTMMJJJJ
	{
		strD[2] = strD[0].substr(4, 4)
		strD[1] = strD[0].substr(2, 2)
		strD[0] = strD[0].substr(0, 2)
	}
	// Array auf 3 Elemente prüfen und ev korrigieren mit aktuellen Datumswerten
	if (strD.length < 2) 
	{
		strD[strD.length] = jetzt.getMonth()+1;
		autofill = true;
	}
	if (strD.length < 3)
	{
		strD[strD.length] = jetzt.getFullYear();
		autofill = true;
	}
	if (strD[2] == "")
	{
		strD[2] = jetzt.getFullYear();
		autofill = true;
	}
	while (strD.length > 3) strD.length=strD.length-1;
	// Element mit aktuellem Datumswert wenn leer
	if (strD[0] == "") strD[0] = jetzt.getDate();
	if (strD[1] == "") strD[1] = jetzt.getMonth()+1;
	if (strD[2] == "") strD[2] = jetzt.getFullYear();
	// Jahr auf 4-stellig
	if (strD[2].length < 4) strD[2] = 2000 + parseInt(strD[2],10);
	// Jahresbereich SQL Server 1.1.1753 - 31.12.9999 11:59:59
	if (strD[2] < 1753 || strD[2] > 9999) strFehler = "Kein gültiges Datum - Jahr -> " + strD[2];
	// Monat überprüfen
	if (strD[1] < 1 || strD[1] > 12) strFehler = "Kein gültiges Datum - Monat -> " + strD[1];
	// Tag überprüfen
	if ((strD[1]==1 || strD[1]==3 || strD[1]==5 || strD[1]==7 || strD[1]==8 || strD[1]==10 || strD[1]==12) && (strD[0]<1 || strD[0]>31)) TErr = true;
	if ((strD[1]==4 || strD[1]==6 || strD[1]==9 || strD[1]==11) && (strD[0]<1 || strD[0]>30)) TErr = true;
	if (strD[1]==2 && (parseInt(strD[2]/4,10)*4)!=strD[2] && (strD[0]<1 || strD[0]>28)) TErr = true;
	if (strD[1]==2 && (parseInt(strD[2]/4,10)*4)==strD[2] && (strD[0]<1 || strD[0]>29)) TErr = true;
	if (TErr == true) strFehler = "Kein gültiges Datum - Tag -> " + strD[0];
	// Auf Zahlen prüfen
	if (isNaN(strD[0]) || isNaN(strD[1]) || isNaN(strD[2])) strFehler = "Keine gültiges Datumt -> " + strD[0] + "." + strD[1] + "." + strD[2];
	// Fehlermeldungen und Übergabe
	if (strFehler.length > 0)
		AlertFocusSelect(strFehler,frm.name,obj.name);		// Fehlermeldungen, Feld highlighten
	else if (prev==true && Date.UTC(strD[2],strD[1],strD[0]) < Date.UTC(jetzt.getFullYear(),jetzt.getMonth()+1,jetzt.getDate()))
	{
		// auf Standardformat xx.xx.xxxx bringen
		if (String(strD[0]).length == 1) strD[0] = "0" + strD[0];
		if (String(strD[1]).length == 1) strD[1] = "0" + strD[1];
		if (autofill == true) strD[2] = parseInt(strD[2]) + 1;
		obj.value = strD.join(".");
		if (autofill == false) alert("Dieses Datum liegt in der Vergangenheit");
	}
	else
	{
		// auf Standardformat xx.xx.xxxx bringen
		if (String(strD[0]).length == 1) strD[0] = "0" + strD[0];
		if (String(strD[1]).length == 1) strD[1] = "0" + strD[1];
		obj.value = strD.join(".");
	}
}
function ChTime(frm,obj)		// Zeit auf gültig prüfen
{
	var strFehler = "";			// String mit Fehlermeldung
	var jetzt = new Date();		// Datum Objekt
	var strT;					// String / Array für Zeit
	strT = trim(obj.value);
	obj.value = strT;
	if (strT == "") return;
	// Trennzeichen mit : ersetzen
	strT = strT.split(" ").join(":");
	strT = strT.split(".").join(":");
	strT = strT.split(",").join(":");
	strT = strT.split(";").join(":");
	strT = strT.split("-").join(":");
	strT = strT.split("_").join(":");
	strT = strT.split("'").join(":");
	strT = strT.split("`").join(":");
	strT = strT.split("´").join(":");
	strT = strT.split("~").join(":");
	strT = strT.split("^").join(":");
	// Zeit zerlegen in Stunden - Minuten
	strT = strT.split(":");
	if (strT.length == 1 && strT[0].length == 4)	// Zeit wurde ohne Trennzeichen eingegeben SSMM
	{
		strT[1] = strT[0].substr(2, 2)
		strT[0] = strT[0].substr(0, 2)
	}
	// Array auf 2 Elemente prüfen und ev. ergänzen
	if (strT.length < 2) strT[strT.length] = "";
	while (strT.length > 2) strT.length=strT.length-1;
	// Element mit aktuellem Zeitwert wenn leer
	if (strT[0] == "") strT[0] = jetzt.getHours();
	if (strT[1] == "") strT[1] = jetzt.getMinutes();
	// Stunde überprüfen
	if (strT[0] < 0 || strT[0] > 24) strFehler = "Keine gültige Zeit - Stunde -> " + strT[0];
	// Minuten überprüfen
	if (strT[1] < 0 || strT[1] > 59) strFehler = "Keine gültige Zeit - Minuten -> " + strT[1];
	// Minuten nach 24 Uhr überprüfen
	if (strT[0] == 24 && strT[1] > 0) strFehler = "Keine gültige Zeit -> " + strT[0] + ":" + strT[1];
	// Auf Zahlen prüfen
	if (isNaN(strT[0]) || isNaN(strT[1])) strFehler = "Keine gültige Zeit -> " + strT[0] + ":" + strT[1];
	// Fehlermeldungen und Übergabe
	if (strFehler.length > 0)
		AlertFocusSelect(strFehler,frm.name,obj.name);		// Fehlermeldungen, Feld highlighten
	else
	{
		// auf Standardformat xx:xx bringen
		if (String(strT[0]).length == 1) strT[0] = "0" + strT[0];
		if (String(strT[1]).length == 1) strT[1] = "0" + strT[1];
		obj.value = strT.join(":");
	}
}
function ChMail(frm,obj)				// E-Mail auf gültig prüfen, mehr Adressen fähig
{
	var strFehler = "";					// String mit Fehlermeldung
	var strE;							// String E-Mail Adresse
	var atPos, dotPos, domLen, Madr, AnzAdr, actAdr;
	strE	= trim(obj.value);
	strE	= strE.replace(/ @/g, "@");	// Leerzeichen um @
	strE	= strE.replace(/@ /g, "@");
	while (strE.indexOf(". ") != -1)	strE = strE.substr(0,strE.indexOf(". ")+1)+strE.substr(strE.indexOf(". ")+2);	// Leerzeichen um Punkt
	while (strE.indexOf(" .") != -1)	strE = strE.substr(0,strE.indexOf(" ."))+strE.substr(strE.indexOf(" .")+1);
	strE	= strE.replace(/ /g, ";");	// mehrere Adressen separieren
	strE	= strE.replace(/,/g, ";");
	strE	= strE.replace(/;;/g, ";");
	if (strE.indexOf(";") == 0)					strE = strE.substr(1);
	if (strE.lastIndexOf(";") == strE.length-1)	strE = strE.substr(0,strE.length-1);
	obj.value = strE;
	if (strE == "") return;
	Madr	= strE.split(";");		// einzelne Adressen trennen
	AnzAdr	= Madr.length;
	for (i = 1; i <= AnzAdr; i++)	// jede Adresse prüfen
	{
		atPos	= Madr[i-1].indexOf("@");
		dotPos	= Madr[i-1].length - Madr[i-1].lastIndexOf(".");
		domLen	= Madr[i-1].lastIndexOf(".") - Madr[i-1].indexOf("@");
		if (AnzAdr > 1)	actAdr = i + ".  E-Mail Adresse -> " + Madr[i-1] + " <-\n";
		else			actAdr = "E-Mail Adresse -> " + Madr[i-1] + " <-\n";
		if (atPos < 1)					strFehler = actAdr + "ist unvollständig oder falsch.\nEine gültige E-Mail Adresse enthält einen Namen vor dem @";
		if (atPos == -1)				strFehler = actAdr + "ist unvollständig oder falsch.\nEine gültige E-Mail Adresse enthält ein -> @ <-";
		if (domLen < 3)					strFehler = actAdr + "ist unvollständig oder falsch.\nEine gültige E-Mail Adresse enthält eine Domain";
		if (dotPos > 5 || dotPos < 3)	strFehler = actAdr + "ist unvollständig oder falsch.\nEine gültige E-Mail Adresse enthält eine TopLevelDomain\n(2-4 Zeichen, z. B. .ch oder .com)";
	}
	if (strFehler.length > 0)	AlertFocusSelect(strFehler,frm.name,obj.name);		// Fehlermeldungen, Feld highlighten
}
function AlertFocusSelect(msg,frm,obj)		// ChDat, ChTime, ChMail, Fehlermeldung Feld highlighten
{
		document.forms[frm].elements[obj].focus();
		document.forms[frm].elements[obj].select();
		alert(msg);
		setTimeout("document.forms['"+frm+"'].elements['"+obj+"'].focus();document.forms['"+frm+"'].elements['"+obj+"'].select()", 100);
}

function GetElementIdByName(elementName)
{
   var element = null;
   for(formIndex=0; formIndex < document.forms.length; formIndex++)
   {
      for(elementIndex=0; elementIndex < document.forms[formIndex].elements.length; elementIndex++)
      {
         if(document.forms[formIndex].elements[elementIndex].name == elementName)
         {
            element = elementIndex;
            break;
         }
      }
   }
   return element;
}

function trim(sString)				// führende und abschliessende Leerzeichen entfernen
{
	while (sString.substring(0,1) == ' ')								// führende
		sString = sString.substring(1, sString.length);
	while (sString.substring(sString.length-1, sString.length) == ' ')	// abschliessende
		sString = sString.substring(0,sString.length-1);
   while (sString.indexOf("  ") != -1)									// 2 Leerzeichen
		sString = sString.substring(0, sString.indexOf("  ")) + sString.substring(sString.indexOf("  ") + 1, sString.length);
	return sString;
}
function CRtrim(sString)			// Leerzeichen und Zeilenumbrüche entfernen
{
	sString = trim(sString);
	while (sString.charCodeAt(sString.length-1) == 10 || sString.charCodeAt(sString.length-1) == 13)
	{
		sString = sString.substring(0,sString.length-1);
		sString = trim(sString);
	}	
	return trim(sString);
}

function SetByte(strVal,Set0,Sig)	// gibt gültigen signed oder unsigned ByteWert zurück
{
	var strTemp	= "";
	for(i = 0; i < strVal.length; i++)				// nur Zahlen oder Minuszeichen übertragen
		if ((isNaN(strVal.substr(i, 1))==false && strVal.substr(i, 1)!=" ") || (i==0 && strVal.substr(i, 1)=="-"))	// nur Zahlen, Minuszeichen auf Pos. 1
			strTemp = strTemp + strVal.substr(i, 1);
	strTemp = parseFloat(strTemp);
	if		((isNaN(strTemp) || strTemp==0) && Set0==false)		return "";
	else if (isNaN(strTemp) && Set0==true)						return 0;
	else if (Sig==true && strTemp>127)							return 127;
	else if (Sig==true && strTemp<-128)							return -128;
	else if ((Sig==false || Sig==undefined) && strTemp>255)		return 255;
	else if ((Sig==false || Sig==undefined) && strTemp<0)		return 0;
	else														return strTemp;
}
function SetInt(strVal,Set0,Sig)	// gibt gültigen signed oder unsigned IntWert zurück
{
	var strTemp	= "";
	for(i = 0; i < strVal.length; i++)				// nur Zahlen oder Minuszeichen übertragen
		if ((isNaN(strVal.substr(i, 1))==false && strVal.substr(i, 1)!=" ") || (i==0 && strVal.substr(i, 1)=="-"))	// nur Zahlen, Minuszeichen auf Pos. 1
			strTemp = strTemp + strVal.substr(i, 1);
	strTemp = parseFloat(strTemp);
	if		((isNaN(strTemp) || strTemp==0) && Set0==false)		return "";
	else if (isNaN(strTemp) && Set0==true)						return 0;
	else if (Sig==true && strTemp>32767)						return 32767;
	else if (Sig==true && strTemp<-32768)						return -32768;
	else if ((Sig==false || Sig==undefined) && strTemp>65535)	return 65535;
	else if ((Sig==false || Sig==undefined) && strTemp<0)		return 0;
	else														return strTemp;
}
function SetFloat(strVal,Set0,Dec)	// gibt gültigen FloatWert zurück
{
	// In JavaScript ist das Dezimalzeichen ein Punkt (.)!
	// Das Script geht davon aus, dass der letzte Punkt oder das letzte Komma das Dezimalzeichen ist.
	// ec. andere nicht numerische Zeichen, ausser ev. Minuszeichen (-), z.B. 1000 Separator, werden entfernt
	var fltVal	= parseFloat(strVal);
	var intLen	= strVal.length;
	var strTemp	= "";
	var charDec;
	if (strVal == fltVal)						// strVal ist gültige (+/-)Zahl, ev. mit Dezimalstellen
		strTemp = fltVal;
	else if (intLen > 0)						// strVal ist nicht leer, aber keine gültige Zahl
	{
		if		(strVal.lastIndexOf(".") > strVal.lastIndexOf(","))	charDec = ".";	// Punkt als Dezimalzeichen verwendet
		else if (strVal.lastIndexOf(",") > strVal.lastIndexOf("."))	charDec = ",";	// Komma als Dezimalzeichen verwendet
		else	charDec = ".";					// hat keine Dezimalstellen
		for (i = 0; i < intLen; i++)			// nur Zahlen, Dezimalzeichen oder Minuszeichen übertragen
			if ((isNaN(strVal.substr(i, 1))==false && strVal.substr(i, 1)!=" ") || (i==0 && strVal.substr(i, 1)=="-") || i==strVal.lastIndexOf(charDec))	// nur Zahlen, Minuszeichen auf Pos. 1 und letztes Dezimalzeichen
				strTemp = strTemp + strVal.substr(i, 1);
		strTemp = strTemp.replace(",", ".");	// ev. Komma in Punkt umwandeln
	}
	if		(Set0==false && (isNaN(strTemp) || strTemp==0))						return "";
	else if (Set0==true && Dec==undefined && (isNaN(strTemp) || strTemp==0))	return 0;
	else if (Dec==undefined)													return strTemp;
	else if (Set0==true && (isNaN(strTemp) || strTemp==""))						strTemp=0;
	return parseFloat(strTemp).toFixed(Dec);
}
function SetNum(strVal,Set0)		// gibt ausschliesslich nummerischen Wert zurück
{
	var strTemp	= "";
	for(i = 0; i < strVal.length; i++)				// nur Zahlen oder Minuszeichen übertragen
		if (isNaN(strVal.substr(i, 1))==false && strVal.substr(i, 1)!=" ")	// nur Zahlen, Minuszeichen auf Pos. 1
			strTemp = strTemp + strVal.substr(i, 1);
	if		(Set0==false && (isNaN(strTemp) || strTemp==0))		return "";
	else if (Set0==true && (isNaN(strTemp) || strTemp==""))		return 0;
	else														return strTemp;
}

function SetPhoneNum(sString)
{
	var tempString = "";
	for (var i = 0; i < sString.length; i++)
	{
		if (isNaN(sString.substring(i,i+1))==false ||
			sString.substring(i,i+1)=="+" ||
			sString.substring(i,i+1)=="(" ||
			sString.substring(i,i+1)==")")
			tempString = tempString + sString.substring(i,i+1);
		if (sString.substring(i,i+1)=="." ||
			sString.substring(i,i+1)=="," ||
			sString.substring(i,i+1)==":" ||
			sString.substring(i,i+1)==";" ||
			sString.substring(i,i+1)=="'" ||
			sString.substring(i,i+1)=="/" ||
			sString.substring(i,i+1)=="_" ||
			sString.substring(i,i+1)=="-") 
			tempString = tempString + " ";
	}
	return tempString;
}

function SetClick(ObjName,NewVal)	// In Listen Icon Klick lösst Form-Post aus
{
	document.getElementsByName(ObjName)[0].value = NewVal;
	document.getElementsByName(ObjName)[0].click();
}

function findloc(imgname)		// position of Image
{
	var image	= document.images[imgname];
	var posLeft	= (FindLeftEdge(image)) ? FindLeftEdge(image) : image.x;	// Mozilla or NS4+6
	var posTop	= (FindTopEdge(image)) ? FindTopEdge(image) : image.y;
	return ([posLeft,posTop]);
}
function FindLeftEdge(img)
{
	var xPos = img.offsetLeft;
	var tempEl = img.offsetParent;
	while (tempEl != null)
	{
		xPos += tempEl.offsetLeft;
		tempEl = tempEl.offsetParent;
	}
	return xPos;
}
function FindTopEdge(img)
{
	var yPos = img.offsetTop;
	var tempEl = img.offsetParent;
	while (tempEl != null)
	{
		yPos += tempEl.offsetTop;
		tempEl = tempEl.offsetParent;
	}
	return yPos;
}

function finddist(imgname1,imgname2)	// Position of Image File
{
	var image1	= document.images[imgname1];
	var image2	= document.images[imgname2];
	var posLeft1	= (NS4 && !NS6) ? image1.x : FindLeftEdge(image1);
	var posLeft2	= (NS4 && !NS6) ? image2.x : FindLeftEdge(image2);
	return posLeft2 - posLeft1;
}

function OpenPopUp(FName,PopName,w,h)
{
	if (isNaN(w)) w = 620;
	if (isNaN(h)) h = 445;
	FNameWindow = window.open(FName, PopName, "width="+w+", height="+h+", resizeable=no,location=no,toolbar=no,status=no,scrollbars=no,menubar=no");
	if (FNameWindow == null)	PopUpError();
	else						FNameWindow.focus();
}
function OpenScrollPopUp(FName,SPopName,w,h)
{
	if (isNaN(w)) w = 620;
	if (isNaN(h)) h = 445;
	FNameWindow = window.open(FName, SPopName, "width="+w+", height="+h+", resizeable=no,toolbar=no,status=no,scrollbars=yes,menubar=no");
	if (FNameWindow == null)	PopUpError();
	else						FNameWindow.focus();
}
function PopUpError()	// PopUp Error für PopUpfenster oder ScrollPopUpfenster
{
	alert("Das PopUp Fenster konnte nicht angezeigt werden\n\nWahrscheinlich blockiert Ihr Browser PopUp Fenster. Überprüfen Sie:\n\n- Im Internet Explorer, Menü Extras - Popupblocker\n- Google Symbolleiste\n- Yahoo Symbolleiste\n- MSN Symbolleiste\n- ev. andere Software wie «WebWasher» oder ähnlich\n\n(Tip: Symbolleisten können ausgeblendet sein - Klicken sie mit der\nrechten Maustaste in den Symbolleistenbereich)");
}

function MakeHome(URL)		// URL zur Startseite machen
{
	if (NS4 || NS6) alert("Netscape unterstütz diese Funktion nicht!");
	else
	{
		document.all.home.style.behavior= "url(#default#homepage)";
		document.all.home.sethomepage("http://" + URL);
	}
}
function MakeFavorit(URL,Titel)		// zu Favoriten hinzufügen
{ 
	if (document.all)	window.external.AddFavorite("http://"+URL,Titel);
} 
function empfehlen(FName,w,h)	// Seite Empfehlen
{
	if (isNaN(w)) w = 620;
	if (isNaN(h)) h = 445;
	FNameWindow=window.open(FName, "FNameWindow", "width="+w+", height="+h+", resizeable=no, toolbar=no, status=no, scrollbars=no, menubar=no");
}

// E-Mail Adresse im HTML vor Spam schützen
function mail(name,domain,toplevel,style,text)
{
	if (style) style = 'class="'+style+'"';
	document.write('<a ' + style + ' href="mailto:' + name + '@' + domain + '.' + toplevel + '">');
	if (text) document.write(text + '</a>');
	else	document.write(name  + '@' + domain + '.' + toplevel + '</a>');
}