/**
* Javaskripte des Frontends von SoMoSy
*
* Diese Datei wird vom Browser bei allen Aufrufen einer Inhaltsseite des
* Frontends benutzt.
* 
* @author Dr. Markus Soick <Markus@Soick.de>
* @copyright Copyright 2007-2010, Dr. Markus Soick
* @version 2.0
* @package SoMoSy
*/

// ------------------------------------------------------------------
// Namespace Funktion und Initialisierung
// ------------------------------------------------------------------

// globale this-Referenz
var SoMoSyThis=this;
var SoMoSyInit=new Array();
window.onload=SoMoSyStart;

// Funktion zum Anlegen von Namensräumen
function namespace(name)
{
	var namen=name.split(".");
	var p=SoMoSyThis;
	for (var i=0;i<namen.length;i++)
	{
		// Evtl. Name anlegen
		if (!p[namen[i]])
			p[namen[i]]={};
		// Ebene weiter
		p=p[namen[i]];
	}
}

// Die Funktion liest evtl. von der Website gesetzte Parameter aus
// und initialisiert bei Bedarf einzelne Pakete
function SoMoSyStart()
{
	while (SoMoSyInit.length>0)
		switch (SoMoSyInit.shift())
		{
			case 'Menuefix':
				SoMoSy.Menuefix.init(SoMoSyInit.shift(),SoMoSyInit.shift(),SoMoSyInit.shift());
				break;
			case 'Chat':
				SoMoSy.Chat.init(SoMoSyInit.shift(),SoMoSyInit.shift());
				break;
		}
}

// ------------------------------------------------------------------
// !allgemeine Funktionen
// ------------------------------------------------------------------

// Fenster mit gegebener URL, Breite und Höhe öffnen
function oeffneFenster(url,breite,hoehe)
{
	if (!breite) breite=screen.availWidth;
  if (!hoehe) hoehe=screen.availHeight;
  var Fenster=window.open(url,"_blank","dependent=yes, location=no, menubar=no, resizable=yes, scrollbars=yes, status=no, toolbar=no, width="+breite+", height="+hoehe);
  Fenster.focus();
  return false;
}

// Einfache Ja/Nein-Frage zur Sicherheit
function sicherheitsAbfrage(frage)
{
  return confirm(frage);
}

// Alle Checkboxen mit gleichen Namen auf den gleichen Wert setzen
function checkAll(name,wert)
{
  boxen=document.getElementsByName(name);
  for (var i=0;i<boxen.length;i++)
    boxen[i].checked=wert;
}

// Session am Leben erhalten
//letzterSessionCheck=new Date().getTime();
//zeitInterval=600; // Zeit-Intervall zwischen zwei Sessionchecks in s
function sessionAnimieren()
{
	var aktuelleZeit=new Date().getTime();
	var bild=new Image();
	bild.src="index.php?bef=sessioncheck&time="+aktuelleZeit;
	letzterSessionCheck=aktuelleZeit;
	window.setTimeout("sessionAnimieren();", zeitInterval*1000);
}
//window.setTimeout("sessionAnimieren();", zeitInterval*1000);

// ------------------------------------------------------------------
// !allgemeine Funktionen zur Bearbeitung von HTML-Inhalte
// ------------------------------------------------------------------

// Namespace erweitern
namespace('SoMoSy.DOM');

// Selektion eines Feldes als Start- und Endwert setzen
// feld ist ein Verweis auf das betreffende Feld
SoMoSy.DOM.getSelection=function(feld)
{
  feld.focus();
	// Position der Selektion lesen
  if (document.selection)
  {
  	// nur für IE bis mind. 8
    var range=document.selection.createRange();
    var alles=document.body.createTextRange();
    alles.moveToElementText(feld);
    alles.setEndPoint("EndToStart",range);
    feld.start=alles.text.length;
    feld.ende=feld.start+range.text.length;
  }
  else
  {
  	// alle anderen
    feld.start=feld.selectionStart;
    feld.ende=feld.selectionEnd;
  }
	feld.scrollPosition=feld.scrollTop;
}

// Selektion eines Feldes mit Start- und Endwert setzen
// feld ist ein Verweis auf das betreffende Feld
// start ist eine Startposition
// ende ist eine Endposition
SoMoSy.DOM.setSelection=function(feld,start,ende)
{
	// Wenn keine Werte übergeben wurden, dann gespeicherte Werte benutzen
	start=(typeof(start)=="undefined"?feld.start:start);
	ende=(typeof(ende)=="undefined"?feld.ende:ende);
	// Selektion neu setzen
  if (document.selection)
  {
  	// nur für IE bis mind. 8
		var range=feld.createTextRange();
		// Für jeden Zeilenumbruch die Werte um 1 verringern
		for (var i=0;i<=start;i++)
			if (feld.value.charAt(i)=="\n")
			{
		  	start--;
		  	ende--;
		  }
		range.collapse(true);
		range.moveEnd('character', ende);
		range.moveStart('character', start);
		range.select();
  }
  else
  	// alle anderen
		feld.setSelectionRange(start,ende);
	feld.scrollTop=feld.scrollPosition;
}

// Text aus Popupmenü eintragen.
// Der im Popupmenü ausgewählte Text wird in ein anderes Formularelement eingetragen
// menue ist das Select-Formularelement mit dem einzutragenden Inhalt
// id ist die ID des Ziel-Formularelementes
// prefix ist ein Textprefix (optional)
SoMoSy.DOM.textAusPopupEintragen=function(menue,id,prefix)
{
	if (typeof(prefix)=="undefined")
		prefix="";
	var index=menue.selectedIndex;
	if (index!=0)
	{
		document.getElementById(id).value=prefix+menue.options[index].text;
		menue.selectedIndex=0;
	}
}

// Text aus Popupmenü ergänzen.
// Der im Popupmenü ausgewählte Text wird in ein anderes Formularelement eingetragen
// Ist in diesem schon etwas enthalten, wird der Inhalte mit dem übergebenen Trenner
// angehängt
// menue ist das Select-Formularelement mit dem einzutragenden Inhalt
// id ist die ID des Ziel-Formularelementes
// prefix ist ein Textprefix (optional)
// trenner ist der Trenner (optional)
SoMoSy.DOM.textAusPopupErgaenzen=function(menue,id,prefix,trenner)
{
	if (typeof(prefix)=="undefined")
		prefix="";
	if (typeof(trenner)=="undefined")
		trenner="";
	var index=menue.selectedIndex;
	if (index!=0)
	{
		var alt=document.getElementById(id).value;
		if (alt!="")
			alt+=trenner;
		document.getElementById(id).value=alt+prefix+menue.options[index].text;
		menue.selectedIndex=0;
	}
}

// Popupmenü prüfen und Formular abschicken.
// Es wird evtl. eine Sicherheitsabfrage gestellt. Bei Zustimmung wird das Formular
// abgeschickt, bei Ablehnung das Popupmenü zurückgesetzt.
// menue ist das betroffene Select-Formularelement
// formular ist das abzuschickende Formular
// frage ist die evtl. zu stellende Sicherheitsabfrage
SoMoSy.DOM.popupAbschicken=function(menue,formular,frage)
{
	if (menue.selectedIndex!=0 && (typeof(frage)=="undefined" || sicherheitsAbfrage(frage)))
		formular.submit();
	else
		menue.selectedIndex=0;
}

// Alle Unterknoten des übergebenen Knotens werden rekursiv durchlaufen
// und gefundene Formularelemente (Popupmenüs, Textfelder und Textareas)
// zurückgesetzt.
// knoten ist das zu durchlaufende Element
// tiefe gibt an, wieviele Unterebenen zusätzlich durchlaufen werden sollen.
SoMoSy.DOM.leereKnoten=function(knoten,tiefe)
{
	var aktuell=knoten.firstChild;
	while (aktuell!=null)
	{
		switch (aktuell.nodeName)
		{
			case 'SELECT':
				aktuell.childNodes[0].selected=true;
				break;
			case 'INPUT':
				if (aktuell.getAttribute('type')=='text' || aktuell.getAttribute('type')=='hidden')
					aktuell.value="";
				break;
			case 'TEXTAREA':
				if (aktuell.hasChildNodes())
					aktuell.childNodes[0].data='';
				break;
			case 'SPAN':
				if (aktuell.getAttribute('class')=='leeren')
					while (aktuell.hasChildNodes())
						aktuell.removeChild(aktuell.firstChild);
				break;
			default:
				if (aktuell.childNodes.length>0 && tiefe>0)
					SoMoSy.DOM.leereKnoten(aktuell,tiefe-1);
			break;
		}
		aktuell=aktuell.nextSibling;
	}
}

// Ein HTML-Element mit vorgegebenem Inhalt füllen
// knoten der Startknoten unterhalb dem gesucht werden soll.
// tiefe gibt an wieviele Unterebenen zusätzlich durchsucht werden.
// name gibt den Namen des gesuchten Elementes an.
// typ gibt an, was für ein Element gesucht wird:
// (1:Textfeld,2:Textarea,3:span-Tag,4:hidden-Feld,5:Select)
// wert gibt den einzufüllenden Wert an.
SoMoSy.DOM.fuelleWert=function(knoten,tiefe,name,typ,wert)
{
	var aktuell=knoten.firstChild;
	while (aktuell!=null)
	{
		// Textfeld oder hidden-Feld?
		if (aktuell.nodeName=='INPUT' && ((typ==1 && aktuell.getAttribute('type')=='text') || (typ==4 && aktuell.getAttribute('type')=='hidden')) && aktuell.getAttribute('name')==name)
			aktuell.value=wert;
		// TextArea?
		else if (typ==2 && aktuell.nodeName=='TEXTAREA' && aktuell.getAttribute('name')==name)
		{
			if (aktuell.hasChildNodes())
				aktuell.childNodes[0].data=wert;
			else
				aktuell.appendChild(document.createTextNode(wert));
		}
		// SPAN-Tag?
		else if (typ==3 && aktuell.nodeName=='SPAN' && aktuell.getAttribute('name')==name)
			aktuell.childNodes[0].data=wert;
		// Select?
		else if (typ==5 && aktuell.nodeName=='SELECT' && aktuell.getAttribute('name')==name)
			aktuell.selectedIndex=wert;
		// Unterknoten durchlaufen?
		else if (aktuell.childNodes.length>0 && tiefe>0)
			SoMoSy.DOM.fuelleWert(aktuell,tiefe-1,name,typ,wert);
		// Nächsten Knoten
		aktuell=aktuell.nextSibling;
	}
}

// Die Funktion ermittelt den aktuellen Style eines Elementes
// und gibt diesen zurück
// element ist ein Verweis auf das betreffende Element
SoMoSy.DOM.getStyle=function(element)
{
	if (window.getComputedStyle)
  	// Standard
    return window.getComputedStyle(element,null);
  else
  	if (element.currentStyle)
  		// IE
      return element.currentStyle;
    else
    	return false;
}

// Die Funktion tauscht ein Bild aus
// bild ist die ID des img-Tags
// url ist die URL des neuen Bildes
SoMoSy.DOM.tauscheBild=function(bild,url)
{
	document.getElementById(bild).src=url;
 	return false;
}

// ------------------------------------------------------------------
// !Funktionen zur Benutzung in Edit-Formularen
// ------------------------------------------------------------------

// Namespace erweitern
namespace('SoMoSy.Edit');

// Das Formular soll neugeladen werden, um die Anzeige zu aktualisieren.
// formular ist das Formular, das abgeschickt werden soll
// wert enthält den abzuschickenden Text
SoMoSy.Edit.reload=function(formular,wert)
{
	if (typeof(wert)=="undefined")
		wert="_reload"
	formular.send_save.value=wert;
	formular.send_save.click();
}

// Zum Kopieren von alten Daten wurde ein Popupmenü geändert
// formular ist das Formular, das abgeschickt werden soll
// select ist das Select-Formularelement mit dem Kopier-Menü
SoMoSy.Edit.alteDatenKopieren=function (formular,select)
{
	// Kopieren, wenn etwas ausgewählt ist
	if (select.selectedIndex>0)
		SoMoSy.Edit.reload(formular);
}

// Popup, um Codes in den Editor einzufügen
// feldname ist der Name der Textarea
// art gibt an, wie der Code eingefügt werden soll. (0=Absatzformat,1=Zeichenformat,2=Element)
// popup ist ein Verweis auf das Popupmenü
SoMoSy.Edit.codePopup=function (feldname,art,popup)
{
	if (popup.selectedIndex>0)
	{
		SoMoSy.Edit.codeEinfuegen(feldname,art,popup.value);
		// Popup zurücksetzen
		popup.selectedIndex=0;
	}
}

// Codes in Editor einzufügen
// feldname ist der Name der Textarea
// art gibt an, wie der Code eingefügt werden soll. (0=Absatzformat,1=Zeichenformat,2=Element,3=Besonderes)
// code ist der einzufügende Code.
// attribute sind die einzufügenden Attribute (optional)
SoMoSy.Edit.codeEinfuegen=function(feldname,art,code,attribute)
{
	if (typeof(attribute)=="undefined") attribute="";
	var feld=document.getElementById(feldname);
	SoMoSy.DOM.getSelection(feld);
	start=feld.start;
	ende=feld.ende;
	
	// bei Absatzformaten den Zeilenanfang suchen
	if (art==0)
	{
		while (start>0 && feld.value.charAt(start)!="\n")
			start--;
		if (feld.value.charAt(start)=="\n")
			start++;
		ende=start;
	}

	// an der Position Code einfügen
	var vorne=feld.value.substr(0,start);
	var mitte=feld.value.substr(start,ende-start);
	var hinten=feld.value.substr(ende);
	switch (art)
	{
		case 1:
			var neu="["+code+attribute+"]"+mitte+"[/"+code+"]";
			start+=code.length+attribute.length+2;
			ende+=code.length+attribute.length+2
			break;
		case 0:
		case 2:
			var neu="["+code+attribute+"]";
			start+=code.length+attribute.length+2;
			ende=start;
			break;
		case 3:
			var neu=code;
			start+=code.length;
			ende=start;
			break;
	}
	feld.value=vorne+neu+hinten;
	SoMoSy.DOM.setSelection(feld,start,ende);
}

// Link-Menü bearbeiten
// aktion gibt an, was getan werden soll (0=anzeigen,1=Werte übernehmen und schliessen,2=nur schliessen)
// feldname ist der Name des Formularfeldes
// Formular ist ein Verweis auf das Formular
SoMoSy.Edit.editorURL=function (aktion,feldname,formular)
{
	var feld=document.getElementById(feldname);
	switch (aktion)
	{
		case 0:
			// Formular einblenden
			SoMoSy.DOM.getSelection(feld);
			document.getElementById("url_"+feldname).style.display="block";
			break;
		case 1:
			// Werte lesen
			var code="url";
			var attribute="";
			var wert=formular.elements["urlHref_"+feldname].value;
			if (wert!="") attribute+=" ziel=\""+encodeURI(decodeURI(wert))+"\"";
			wert=formular.elements["urlTitle_"+feldname].value;
			if (wert!="") attribute+=" titel=\""+wert+"\"";
			if (typeof(formular.elements["urlTarget_"+feldname])!="undefined")
			{
				var radio=formular.elements["urlTarget_"+feldname];
				if (radio[0].checked) wert="";
				if (radio[1].checked) wert="_blank";
				if (radio[2].checked) wert=formular.elements["urlTargettext_"+feldname].value;
				if (wert!="") attribute+=" target=\""+wert+"\"";
			}
			// Formular ausblenden und Code einfügen
			document.getElementById("url_"+feldname).style.display="none";
			SoMoSy.DOM.setSelection(feld);
			SoMoSy.Edit.codeEinfuegen(feldname,1,code,attribute)
			break;
		case 2:
			// Formular ausblenden
			document.getElementById("url_"+feldname).style.display="none";
			SoMoSy.DOM.setSelection(feld);
			break;
	}
}

// Bild-Menü bearbeiten
// aktion gibt an, was getan werden soll (0=anzeigen,1=Werte übernehmen und schliessen,2=nur schliessen)
// feldname ist der Name des Formularfeldes
// Formular ist ein Verweis auf das Formular
SoMoSy.Edit.editorImg=function (aktion,feldname,formular)
{
	var feld=document.getElementById(feldname);
	switch (aktion)
	{
		case 0:
			// Formular einblenden
			SoMoSy.DOM.getSelection(feld);
			document.getElementById("img_"+feldname).style.display="block";
			break;
		case 1:
			// Werte lesen
			var code="img";
			var attribute="";
			var wert=formular.elements["imgSrc_"+feldname].value;
			if (wert!="") attribute+=" quelle=\""+encodeURI(decodeURI(wert))+"\"";
			wert=formular.elements["imgAlt_"+feldname].value;
			if (wert!="") attribute+=" text=\""+wert+"\"";
			if (typeof(formular.elements["imgWidth_"+feldname])!="undefined")
			{
				wert=formular.elements["imgWidth_"+feldname].value;
				if (wert!="") attribute+=" breite=\""+wert+"\"";
			}
			if (typeof(formular.elements["imgHeight_"+feldname])!="undefined")
			{
				wert=formular.elements["imgHeight_"+feldname].value;
				if (wert!="") attribute+=" hoehe=\""+wert+"\"";
			}
			if (typeof(formular.elements["imgClass_"+feldname])!="undefined")
			{
				wert=formular.elements["imgClass_"+feldname].value;
				if (wert!="") attribute+=" format=\""+wert+"\"";
			}
			// Formular ausblenden und Code einfügen
			document.getElementById("img_"+feldname).style.display="none";
			SoMoSy.DOM.setSelection(feld);
			SoMoSy.Edit.codeEinfuegen(feldname,2,code,attribute)
			break;
		case 2:
			// Formular ausblenden
			document.getElementById("img_"+feldname).style.display="none";
			SoMoSy.DOM.setSelection(feld);
			break;
	}
}

// Lightbox-Menü bearbeiten
// aktion gibt an, was getan werden soll (0=anzeigen,1=Werte übernehmen und schliessen,2=nur schliessen)
// feldname ist der Name des Formularfeldes
// Formular ist ein Verweis auf das Formular
SoMoSy.Edit.editorLightbox=function (aktion,feldname,formular)
{
	var feld=document.getElementById(feldname);
	switch (aktion)
	{
		case 0:
			// Formular einblenden
			SoMoSy.DOM.getSelection(feld);
			document.getElementById("lightbox_"+feldname).style.display="block";
			break;
		case 1:
			// Formular ausblenden
			document.getElementById("lightbox_"+feldname).style.display="none";
			// Link-Werte lesen
			var code="[url";
			var wert=formular.elements["lightboxHref_"+feldname].value;
			if (wert!="") code+=" ziel=\""+encodeURI(decodeURI(wert))+"\"";
			wert=formular.elements["lightboxAlt_"+feldname].value;
			if (wert!="") code+=" titel=\""+wert+"\"";
			code+=" target=\"_blank\"";
			code+=" rel=\"lightbox[artikel]\"";
			// Link einfügen
			// Bild-Werte lesen
			code+="][img";
			wert=formular.elements["lightboxSrc_"+feldname].value;
			if (wert!="") code+=" quelle=\""+encodeURI(decodeURI(wert))+"\"";
			wert=formular.elements["lightboxAlt_"+feldname].value;
			if (wert!="") code+=" text=\""+wert+"\"";
			wert=formular.elements["lightboxWidth_"+feldname].value;
			if (wert!="") code+=" breite=\""+wert+"\"";
			wert=formular.elements["lightboxHeight_"+feldname].value;
			if (wert!="") code+=" hoehe=\""+wert+"\"";
			wert=formular.elements["lightboxClass_"+feldname].value;
			if (wert!="") code+=" format=\""+wert+"\"";
			code+="][/url]"
			// Bild einfügen
			SoMoSy.DOM.setSelection(feld);
			SoMoSy.Edit.codeEinfuegen(feldname,3,code)
			break;
		case 2:
			// Formular ausblenden
			document.getElementById("lightbox_"+feldname).style.display="none";
			SoMoSy.DOM.setSelection(feld);
			break;
	}
}

// Text in Editor einfügen
// stueck gibt an, was eingefügt werden soll
// feldname ist der Name des Formularfeldes
// Formular ist ein Verweis auf das Formular
SoMoSy.Edit.editorTextEinfuegen=function (stueck,feldname,formular)
{
	SoMoSy.Edit.codeEinfuegen(feldname,3,stueck)
}

// Neue Eingabezeile in einer Tabelle einfügen.
// button ist der +-Button zum Hinzufügen einer Zeile
SoMoSy.Edit.neueZeile=function(button)
{
	// Zeile kopieren
	var zeile=button.parentNode.parentNode;
	var original=(zeile.nextSibling==null)?zeile.previousSibling:zeile;
	var kopie=original.cloneNode(true);
	// Zeile leeren und einsetzen
	SoMoSy.DOM.leereKnoten(kopie,1);
	zeile.parentNode.insertBefore(kopie,zeile);
}

// Eingabezeile in einer Tabelle löschen
// button ist der --Button zum Entfernen einer Zeile
SoMoSy.Edit.loescheZeile=function(button)
{
	var zeile=button.parentNode.parentNode;
	// Nur löschen, wenn es nicht die letzte Zeile ist
	if (zeile.parentNode.childNodes.length>3)
		zeile.parentNode.removeChild(zeile);
	else
		SoMoSy.DOM.leereKnoten(zeile,1);
}

// Die Zeilen einer Tabelle mit variablem Inhalt werden durchnummeriert
// id ist die ID der Tabelle
// Name ist der Name des Formularelementes mit der Nummerierung
SoMoSy.Edit.nummeriere=function(id,name)
{
	// Erste Zeile suchen
	var zeile=document.getElementById(id).childNodes[0].childNodes[1];
	// Alle Zeilen durchlaufen
	var i=0;
	while (zeile!=null)
	{
		SoMoSy.DOM.fuelleWert(zeile,1,name,4,i);
		i++;
		zeile=zeile.nextSibling;
	}
}

// ------------------------------------------------------------------
// !Funktionen zum rutschenden Menü
// ------------------------------------------------------------------

// Namespace erweitern
namespace('SoMoSy.Menuefix');

// Die Funktion startet das Nachrutschen für ein div-Element
// ebene ist die ID des div-Elementes
// unten ist die ID des Elementes, die nach unten begrenzt
// wartezeit ist die Wartezeit zwischen User-Scrollen und Menü-Bewegung
SoMoSy.Menuefix.init=function(ebene,unten,wartezeit)
{
	// Parameter speichern
	SoMoSy.Menuefix.ebene=document.getElementById(ebene);
	SoMoSy.Menuefix.unten=document.getElementById(unten);
	SoMoSy.Menuefix.wartezeit=wartezeit;

	// Initialisierungen
	SoMoSy.Menuefix.randIst=0;
	SoMoSy.Menuefix.randNeu=0;
	SoMoSy.Menuefix.bewegung=false;
	
	// ursprüngliche Ränder des Menüs
	var style=SoMoSy.DOM.getStyle(SoMoSy.Menuefix.ebene);
	SoMoSy.Menuefix.minRand=parseInt(style.marginTop);
	SoMoSy.Menuefix.menueMarginBottom=parseInt(style.marginBottom);
	
	// onScroll- und onResize-Handler
	window.onscroll=SoMoSy.Menuefix.neuePosition;
	window.onresize=SoMoSy.Menuefix.neuePosition;
	
	// Startposition speichern
	SoMoSy.Menuefix.neuePosition();
}

// Die Funktion berechnet eine neue Zielposition für die Ebene
SoMoSy.Menuefix.neuePosition=function()
{
	// Menuedaten sammeln
	var menueHoehe=SoMoSy.Menuefix.ebene.offsetHeight;
	var menueTop=SoMoSy.Menuefix.ebene.offsetTop;
	var style=SoMoSy.DOM.getStyle(SoMoSy.Menuefix.ebene);
	var menueMarginTop=parseInt(style.marginTop);
	// untere Daten sammeln
	var untenTop=SoMoSy.Menuefix.unten.offsetTop;
	style=SoMoSy.DOM.getStyle(SoMoSy.Menuefix.unten);
	var untenMarginTop=parseInt(style.marginTop);
	
	// Scrollbereich berechnen
	var maxRand=untenTop-menueTop-menueHoehe-SoMoSy.Menuefix.menueMarginBottom-untenMarginTop+menueMarginTop;

	// Scrollposition und Fensterhöhe auslesen
	var offset=0;
	var hoehe=false;
	if (typeof(self.pageYOffset)=="number") // normale Browser
	{
		offset=self.pageYOffset;
		hoehe=self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight) // IE 6/7
	{
		offset=document.documentElement.scrollTop;
		hoehe=document.documentElement.clientHeight;
	}
	else if (document.body) // IE 5.x
	{
		offset=document.body.scrollTop;
		hoehe=document.body.clientHeight;
	}
	if (hoehe)
	{
		var rand=offset-(menueTop-menueMarginTop);
		if (hoehe<menueHoehe)
			// Bei zu kleinem Bildschirm das Menü nicht scrollen
			rand=0;
		if (rand<SoMoSy.Menuefix.minRand) rand=SoMoSy.Menuefix.minRand;
		if (rand>maxRand) rand=maxRand;
		// Menü verschieben, wenn neuer Wert
		if (rand!=SoMoSy.Menuefix.randNeu)
		{
			SoMoSy.Menuefix.randNeu=rand;
			SoMoSy.Menuefix.neuerWert=new Date().getTime();
			if (!SoMoSy.Menuefix.bewegung)
			{
				SoMoSy.Menuefix.bewegung=true;
				setTimeout("SoMoSy.Menuefix.ebeneBewegen();",SoMoSy.Menuefix.wartezeit*0.8);
			}
		}
	}
}

// Die Funktion bewegt die Ebene ein Stück
SoMoSy.Menuefix.ebeneBewegen=function()
{
	if (new Date().getTime()-SoMoSy.Menuefix.neuerWert>SoMoSy.Menuefix.wartezeit)
	{
		var randSoll=SoMoSy.Menuefix.randNeu;
		var diff=Math.abs(randSoll-SoMoSy.Menuefix.randIst);
		var schritt=parseInt(1+0.5*diff);
		if (randSoll>SoMoSy.Menuefix.randIst)
			SoMoSy.Menuefix.randIst=SoMoSy.Menuefix.randIst+schritt;
		else
			SoMoSy.Menuefix.randIst=SoMoSy.Menuefix.randIst-schritt;
		SoMoSy.Menuefix.ebene.style.marginTop=SoMoSy.Menuefix.randIst+"px";
		if (randSoll!=SoMoSy.Menuefix.randIst)
			setTimeout("SoMoSy.Menuefix.ebeneBewegen();",50);
		else
			SoMoSy.Menuefix.bewegung=false;
	}
	else
		setTimeout("SoMoSy.Menuefix.ebeneBewegen();",SoMoSy.Menuefix.wartezeit*0.2);
}

function ausgabe(meldung)
{
	if (window.console)
		window.console.log (meldung);
	else
		alert(meldung);
}
