/* zuerst einmal Funktionen zum Navigieren auf der Tabelle und dem dynamischen Ändern der Anzeige */
var suggestPortalInputField;
// Die Rubriken für das aktuelle Eingabefeld
var rubricsString;
// True, während sich der Mauszeiger über dem Suggest-Div-befindet
var lockTable = false;
// Die zuletzt gewählte Rubrik, bevor in der Tabelle selektiert wird
var startRubric = "";
// der aktuelle Hashcode
var curHashcode;
// der aktuelle Hashcode Typ
var curHashTyp;
// das aktuelle Portal
var curPortal;
// der aktuelle PortalPort
var curPortalPort;
// der aktuelle CMS-Pfad
var curCmsPath;
// Vom Suggest-Server geliefert: Für jede Zeile Suchbegriff und Rubrik
var valuesArray;
var rubricsArray;

//merken des letzten Requests
var lastRequestBatch;

function addEventList(ele) 
	{//zum Setzen von eventlistenern auf Tabellenzeilen
	for (i = 0 ; i < ele.rows.length ; i++)
		{
		if (window.addEventListener)
			{
			ele.rows[i].addEventListener("mouseover", setBG, false);
			//ele.rows[i].addEventListener("mouseout", removeBG, false);
			ele.rows[i].addEventListener("click", setSelValue, false);
			}
		else
			{
			ele.rows[i].attachEvent("onmouseover", setBG, false);
			//ele.rows[i].attachEvent("mouseout", removeBG, false);
			ele.rows[i].attachEvent("onclick", setSelValue, false);
			}
		}
	}	

function removeEventList(ele) 
	{//zum Aufheben von eventlistenern auf Tabellenzeilen
	var tvalue = document.getElementById("jurissuggest");
	for (i = 0 ; i < ele.rows.length ; i++)
		{
		if (window.removeEventListener)
			{
			ele.rows[i].removeEventListener("mouseover", setBG, false);
			ele.rows[i].removeEventListener("click", setSelValue, false);
			}
		else
			{
			ele.rows[i].detachEvent("onmouseover", setBG);
			ele.rows[i].detachEvent("onclick", setSelValue);
			}
		}
	}	

function changeBG(selElem,bvalue)
	{
	if (bvalue)
		eval(selElem).className = "suggesthighlight";
	else
		eval(selElem).className = "";
	}	

function setBG(event)
	{//bevor wir die neue Zeile setzen sollten wir die alte löschen, das würde auch den Listener auf mouseout überflüssig machen
	var iObject = document.getElementsByName("sugline")[0];
	var zeile = parseInt(iObject.value);
	if (zeile > -1)
		changeBG(document.getElementById("jurissuggest").rows[zeile],false);
	
	//hier müssen browserunabhängige Elemente eingestzt werden
	if (!event) event= window.event;
	var element = event.currentTarget ? event.currentTarget : event.srcElement.parentElement;
	while (element.tagName != "TR")
		{//dann hat ein inneres Element das Mouseover geworfen (z.B. Strong) => es muss sich das Parentelement 
		if (element.parentNode)
			element = element.parentNode;
		else
			return;
		}
	changeBG(element,true);
	iObject.value = element.rowIndex;
	}	


function setSelValue(event)
	{//wird sowohl beim ClickEvent der Maus als auch bei Drücken der Entertaste auf der Table aufgerufen
	//macht nur Sinn, wenn es eine aktive Tabelle gibt
	if (document.getElementById("jurissuggestdiv").style.visibility == "visible")
	{
		//hole dir die aktuelle Zeile
		var curZeile = parseInt(document.getElementsByName("sugline")[0].value);
		if (curZeile != -1)
		{//nur wenn wir überhaupt in der Tabelle stehen ist die Übernahnme möglich
			var iField = document.getElementById(suggestPortalInputField);
			var rField = document.getElementById("jurissuggest").rows[curZeile];
			if (event.keyCode)
			{
				if (event.keyCode == 13) //beim der Drücken der Eingabe auf einer Tabellenzeile
					setSuggestInputField(iField,curZeile);
				else
				{
					//hier sollte für den Fall ESC, der Ursprungswert gestzt werden !
					if (iField != null)
				     restoreStartValue();
				}
			}
			else 
				setSuggestInputField(iField,curZeile); //Click auf eine Tabellenzeile
			changeBG(rField,false);
		}
		closeSuggestTable();
	}	
}

function handleInput(keyEvent,rubrics, suggestID) {
	handleInput(keyEvent,rubrics, suggestID, false);
}	
	
function handleInput(keyEvent,rubrics,suggestID,typ)
{//wir stehen auf dem Inputfield und reagieren auf Keyeingaben
	if (document.getElementsByName("sugactive")[0].value == "true")
	{//nur wenn suggest aktiv ist dürfen Vorschläge gemacht werden
		if (typ == undefined) {
			curHashTyp = false;
		} else {
			curHashTyp = typ;
		}
	
		if (!keyEvent)
		{
			keyEvent= window.event;
		}
		  
		if (keyEvent && keyEvent.keyCode)  
		{
		  	//zuerst mal dal Element merken
		   //escape
			if(keyEvent.keyCode == 27 || keyEvent.keyCode == 13)
			{//=> ausblenden der Tabelle
				setSelValue(keyEvent);
			}
		   //Pfeil nach unten
			else
			{ 
				if(keyEvent.keyCode == 40)
				{//pfeil nach unten bedeutet in der Tabelle 1 Zeile nach unten oder 1.te Zeile wenn noch nicht in der Tabelle
					if (!setFocusToZeile(1))
						// Wenn Focus nicht gesetzt werden konnte, muss Box erst noch angezeigt werden
						createSuggest(keyEvent,rubrics,suggestID);
				}
				//Pfeil nach oben
				else 
				{
					if(keyEvent.keyCode == 38)
					{//pfeil nach oben bedeutet in der Tabelle 1 Zeile nach oben oder in der 1.te Zeile verweilen
						setFocusToZeile(-1);
					}
					// Box nur anzeigen/aktualisieren, wenn Text verändert oder Pfeil nach unten gedrückt
					else
					{ 
						if (!isFunctionKey(keyEvent.keyCode) && !isCursorKey(keyEvent.keyCode))
						//if((keyEvent.keyCode >= 48 && keyEvent.keyCode <= 90)||(keyEvent.keyCode >= 96 && keyEvent.keyCode <= 111)||(keyEvent.keyCode >= 186 && keyEvent.keyCode <= 192)||(keyEvent.keyCode >= 219 && keyEvent.keyCode <= 222))
						{//dann war es eine gewöhnliche Eingabe, im Framework muss die CallBackfunktion für Visibility sorgen
							//hier wechseln wir nur die Tabelle
							createSuggest(keyEvent,rubrics,suggestID);
						}
					}
				}
			}
		}
	}
}
	
// Feststellen, ob eine nicht textverändernde Funktionstaste gedrückt wurde (außer Cursortasten)	
function isFunctionKey(keyCode)
{
	// siehe http://www.mediaevent.de/javascript/Extras-Javascript-Keycodes.html
	return (keyCode == 9 || (keyCode >= 16 && keyCode <= 20) || (keyCode >= 33 && keyCode <= 36) || keyCode == 45 || (keyCode >= 91 && keyCode <= 93) || (keyCode >= 112 && keyCode <= 123) || keyCode == 144 || keyCode == 145);
}

// Feststellen, ob eine Cursortaste gedrückt wurde
function isCursorKey(keyCode)
{
	return (keyCode >= 37 && keyCode <= 40);
}
	
// Blättern in den Suggest-Results handeln
function handleBrowse(pageNr)
{
	var inputEle = document.getElementById(suggestPortalInputField);
	var qinput =  inputEle.value;

	dwr.engine._abortRequest(lastRequestBatch);
	lastRequestBatch = JurisAjaxUtils.getSuggests(qinput, rubricsString, pageNr, curHashcode, curPortal, curPortalPort,
						{	callback: function(domArray) {
		    					showSuggest(document.getElementById(suggestPortalInputField), domArray, qinput);},
							errorHandler:doErrorAusgabe,
						  	timeout: 3000
						});
	inputEle.focus();
	lockTable = false;						
}

// Schalter setzen der vorübergehend verhindert, dass die Tabelle bei onBlur versteckt wird.
function lockSuggestTable(lock)
{
//	if (lock != lockTable)
//	{
//		if (lock)
//			document.getElementById("jurissuggestdiv").style.border = "solid red 10px";
//		else
//			document.getElementById("jurissuggestdiv").style.border = "solid black 1px";
//	}
	lockTable = lock;
}

function getIndex() {
  var control = document.getElementsByName("controlElement")[0];
  if (control != null) {
    return control.selectedIndex;
  }
	return null;
}

function createSuggest(keyEvent,rubrics, suggestID)
{
	suggestPortalInputField = suggestID;
	rubricsString = rubrics;
	if (curHashTyp)
		curHashcode = document.getElementsByName("sugwebhashcode")[0].value;
	else {
		var index = getIndex();
		if (index == null) {
			curHashcode = document.getElementsByName("sughashcode")[0].value;
		} else {
		  suginput = document.getElementsByName("sughashcode" + index);
		  if (suginput != null && suginput.length > 0){
        curHashcode = suginput[0].value; 
      } else{
        curHashcode = document.getElementsByName("sughashcode")[0].value;
      }
		}
	}
	
	curPortal = document.getElementsByName("sugportal")[0].value;
	curPortalPort = document.getElementsByName("sugportalport")[0].value;
	curCmsPath = document.getElementsByName("sugcmspath")[0].value;

	var inputEle = document.getElementById(suggestPortalInputField);
	// Wenn der Inhalt des Suchfeldes geändert wurde, urspr. Suggest-Vorgabe für Suchaspekt aufheben
	if (!isCursorKey(keyEvent.keyCode))
   		setSearchLock(inputEle, "");
	var qinput =  inputEle.value;
	//findet kein Whitspace
	var isNurLeer = qinput.match(/\S/);
	if (isNurLeer != null)
	{// dann liegt eine Eingabe vor
		dwr.engine._abortRequest(lastRequestBatch);
		lastRequestBatch = JurisAjaxUtils.getSuggests(qinput, rubrics, 0, curHashcode, curPortal, curPortalPort, 
					{	callback: function(domArray) {
	    					showSuggest(document.getElementById(suggestPortalInputField), domArray, qinput);},
						errorHandler:doErrorAusgabe,
					  	timeout: 5000
					});
	}
	else
	{//beende SuggestTable
		closeSuggestTable();
	}
}

function showSuggest(inputEle, domArray, inputByCall)
	{//das wird die Callbackfunktion des DWR-Frameworks
	//Tabelle in die alles eingefügt wird
	var insertObject = document.getElementById("jurissuggest");
	//Div unterhalb der Tabelle, in das Blätterbuttons etc. reinkommen
	var controlObject = document.getElementById("jurissuggestcontrol");
	
	//Die Tabelle umgebendes div, zur Positionierung und Überdeckung nachfolgender Elemente
	var divObject = document.getElementById("jurissuggestdiv");
	//jetzt sollte hier eine Prüfung stattfinden, ob die Liste noch zu der aktuellen Eingabe passt => wenn ja , kann es losgehen
	//wenn nein gibt es mit Sicherheit einen weiteren Request
	if (document.getElementById(suggestPortalInputField).value == inputByCall)
		{//die Liste passt zu dem Inhalt des Inputfeldes
		if (domArray != null && domArray.length > 0)
			{//mache neue Werte sichtbar
			//setze noch die aktuelle Zeile auf -1, d.h. noch nicht in der Tabelle
		    document.getElementsByName("sugline")[0].value = -1;
			removeSuggestRows(insertObject, controlObject);
			fillSuggestRows(domArray,insertObject,controlObject);
			doVisible(inputEle, divObject, insertObject);
			}
		else
		  {//beende SuggestTable
			closeSuggestTable();
		  }
		}
	}

//Erzeugen der Tabelleneinträge für die aktuellen Vorschläge
function createSuggestEntry(insertObject, showRubric, rubric, label, t1, t2, t3, t4, relevance, searchValue)
{
	var z ; //Variable für den Zeilenknoten (tr)
	var k ; //Variable für alle Kindknoten (td,th), aber Achtung bei Kind von Kindknoten
	var t ; //Variable für alle Textknoten 
	var a ; //Variable für alle Attributte
	var img ; //Varibale für alle Bilder
	
	z = document.createElement("tr");

	//1. Spalte: Rubrik
	if (showRubric)
	{
		k = document.createElement("td");
		a = document.createAttribute("class");
		a.nodeValue = "rubrik";
		k.setAttributeNode(a);

		t = document.createTextNode(label);
		k.appendChild(t);
		z.appendChild(k);
	}

	//2.Spalte: der eigentliche Text, wobei t2 markiert wird
	k = document.createElement("td");

	//vor Markierung
	if (t1 != "")
	{
		k.appendChild(document.createTextNode(t1));
	}

	//Markierung
	t = document.createElement("strong");
	k.appendChild(t);
	t.appendChild(document.createTextNode(t2));

	//nach Markierung
	if (t3 != "")
	{
		k.appendChild(document.createTextNode(t3));
	}

	// Referenz
	if (t4 != "")
	{
		t = document.createElement("i");
		k.appendChild(t);
		t.appendChild(document.createTextNode(t4));
	}

	a = document.createAttribute("class");
	a.nodeValue = "vorschlag";
	k.setAttributeNode(a);

	z.appendChild(k);

  if (!curHashTyp) {
  	//3. Spalte:
  	k = document.createElement("td");
  	a = document.createAttribute("class");
  	a.nodeValue = "anzahl";
  	k.setAttributeNode(a);

  	img = document.createElement("img");
  	a = document.createAttribute("src");
  	a.nodeValue = curCmsPath+"juris/media/bilder/layout_bilder/suggest/grau_o_r.gif";
  	img.setAttributeNode(a);
  	a = document.createAttribute("height");
  	a.nodeValue = "10";
  	img.setAttributeNode(a);
  	a = document.createAttribute("width");
  	a.nodeValue = relevance;
  	img.setAttributeNode(a);
    k.appendChild(img);

    z.appendChild(k);
	
	}
	insertObject.appendChild(z);
}

// Die Blätterbuttons unterhalb der Tabelle erzeugen
function createSuggestButtons(controlObject, prevNr, nextNr)
{
	if (prevNr != -1)
		createSuggestButton(controlObject, "javascript:handleBrowse("+prevNr+")",curCmsPath+"juris/media/bilder/layout_bilder/icon/icon_pfeilLinks.gif", "Zurück blättern");
	else
		createSuggestButtonInactive(controlObject, curCmsPath+"juris/media/bilder/layout_bilder/icon/icon_pfeilLinks_inaktiv.gif", "Anfang der Vorschlagsliste");
		
	var t = document.createTextNode(" ");
	controlObject.appendChild(t);
		
	if (nextNr != -1)
		createSuggestButton(controlObject, "javascript:handleBrowse("+nextNr+")",curCmsPath+"juris/media/bilder/layout_bilder/icon/icon_pfeilRechts.gif", "Weiter blättern");
	else
		createSuggestButtonInactive(controlObject, curCmsPath+"juris/media/bilder/layout_bilder/icon/icon_pfeilRechts_inaktiv.gif", "Ende der Vorschlagsliste");
}

function createSuggestButton(p, call, icon, info)
{
	// Link
	var a = document.createElement("a");
	var href = document.createAttribute("href");
	href.nodeValue = call;
	a.setAttributeNode(href);
	
	// Bild
	var img = document.createElement("img");
	var src = document.createAttribute("src");
	src.nodeValue = icon;
	img.setAttributeNode(src);
	
	var alt = document.createAttribute("alt");
	alt.nodeValue = info;
	img.setAttributeNode(alt);
	a.appendChild(img);
	p.appendChild(a);
}

function createSuggestButtonInactive(p, icon, info)
{
	// Bild
	var img = document.createElement("img");
	var src = document.createAttribute("src");
	src.nodeValue = icon;
	img.setAttributeNode(src);
	
	var alt = document.createAttribute("alt");
	alt.nodeValue = info;
	img.setAttributeNode(alt);
	p.appendChild(img);
}


function removeSuggestRows(tObject, controlObject)
	{
	var tBody = tObject.tBodies[0]; //immer den ersten Tablebody holen
	removeEventList(tObject);
	dwr.util.removeAllRows(tBody == null ? tObject : tBody);
	
	while(controlObject.firstChild)
		controlObject.removeChild(controlObject.firstChild);
	}

function fillSuggestRows(domArray, tObject, controlObject)
	{
	var tBody = tObject.tBodies[0];
	//berechne nun die jedes Arrayelemnt
	createNewevalTable(domArray, tBody == null ? tObject : tBody, controlObject) 
	addEventList(tObject);
	}
	
	
function doVisible(inputEle, divEle, ele)
{//Initialisiert die SuggestTable
	if (divEle.style.visibility != "visible")
	{
	    //das Div unterhalb des aktuellen Eingabefeldes positionieren
		coords = getObjCoords(inputEle);
      var newWidth; 
		if (coords.width < 300)
      	newWidth = coords.width*2;
      else
         newWidth = coords.width;

      var newLeft = coords.left;
		if (window.innerWidth && (coords.left + newWidth > window.innerWidth))
	   	newLeft = (coords.left + coords.width) - newWidth;
		else if (document.body.clientWidth && (coords.left + newWidth > document.body.clientWidth))
	   	newLeft = (coords.left + coords.width) - newWidth;
	   	
	   // Auch sicherstellen, dass Fenster nicht nach links rausläuft, ggf. Breite verringern.
	   if (newLeft < 0)
	   {
	   	newLeft = coords.left;
	   	newWidth = coords.width;
	   }

		divEle.style.left = newLeft+"px";
		divEle.style.top = (coords.top + coords.height + 2)+"px";
      divEle.style.width = newWidth+"px";
	    
	   //dann muss die Tabelle zuerst einmal angezeigt werden
		divEle.style.visibility = "visible";
		divEle.style.display = "block";
		document.getElementsByName("sugline")[0].value = -1;
	   //jetzt noch den Startwert merken
		storeStartValue();
	}
	else
	{//wenn schon sichtbar, dann setze nur den neuen Input des Feldes
	    storeStartValue();
	}
}

function setFocusToZeile(nDirection)
	{//diese Funktion dient zum Highlighten der aktuellen Cursorposition und zu Übernahme des Inhaltes
	if (document.getElementById("jurissuggestdiv").style.visibility == "visible")
		{
		var iField = document.getElementById(suggestPortalInputField);
		var sTable = document.getElementById("jurissuggest");
		var zObject = document.getElementsByName("sugline")[0];
		var curZeile = parseInt(zObject.value);
		var aktZeile = curZeile + nDirection;
	
		if (aktZeile < sTable.rows.length && aktZeile > -1)
			{//der Focus kann auf einen gültigen Bereich gesetzt werden
			var aktRow = sTable.rows[aktZeile];
			//merke dir den letzten Inputwert
			if (curZeile == -1)
				{//bei einem erneutem reinspringen in einer sichtbaren Tabelle muss der Wert neu gestzt werden
	  			storeStartValue();
	  			}
			//wechsle die Hintergrundfarbe
			if (curZeile > -1)
				changeBG(sTable.rows[curZeile],false);
			
			changeBG(aktRow,true);
			
			//setze den Wert
			setSuggestInputField(iField,aktZeile);
			
			//setze die Zeile
			zObject.value = aktZeile;
			}
		else
		if (aktZeile == -1)
			{//dann setze den Wert auf den Ursprungswert
	  		restoreStartValue();
	  		//wechsel Hintergrundfarbe
			changeBG(sTable.rows[curZeile],false);
			//setze die Zeile
			zObject.value = aktZeile;
			}
			return true;
		}
		else
			return false;
			
	}

function setSuggestInputField(iField,rowNr)
{
	iField.value = valuesArray[rowNr];
	iField.focus();
	setSearchLock(iField, rubricsArray[rowNr]);	
}

// Inhalt und Rubrik des Eingabefelds sichern
function storeStartValue()
{
   var inputEle = document.getElementById(suggestPortalInputField);
   document.getElementsByName("sugstart")[0].value = inputEle.value;
	startRubric = getSearchLock(inputEle);
}

// Inhalt und Rubrik des Eingabefelds wiederherstellen
function restoreStartValue()
{
   var inputEle = document.getElementById(suggestPortalInputField);
   inputEle.value = document.getElementsByName("sugstart")[0].value;
   setSearchLock(inputEle, startRubric);
   inputEle.focus();
}

// Ermitteln, welche Rubrik für das Eingabefeld zuletzt festgelegt wurde 
function getSearchLock(fieldEle)
{
   lockEle = getLockEle(fieldEle);
	 if (lockEle)
	    return lockEle.value;
   return "";
}

// Die über Suggest getroffene Auswahl als Hidden-Parameter für das aktuelle Eingabefeld festsetzen
function setSearchLock(fieldEle, rubricID)
{
  lockEle = getLockEle(fieldEle);
	if (lockEle)
	{
/*		if (rubricID.toString() != "")
			fieldEle.style.border = "solid red 1px";
		else
			fieldEle.style.border = "solid black 1px";*/
		 
		lockEle.value = rubricID;
	}
}

// Für das Eingabefeld das hidden-field ermitteln, in der die Rubrik für anschl. Suche festgesetzt wird
function getLockEle(fieldEle)
{
	var frm = fieldEle.form;
	var len = frm.length;
	var lockEle = undefined;
	// Das Suggest-Hidden-Field suchen, es muss vor dem Eingabefeld stehen!
	for(x=0;x<len;x++)
	{
		if(frm[x] == fieldEle)
			break;
		if(frm[x].type == "hidden" && frm[x].name.indexOf("sug_") > -1)
			lockEle = frm[x];
	}
	return lockEle;
}

function createNewevalTable(evalArray, insertObject, controlObject) 
	{//einbauen einer neuen Tabelle mit vorbereitetem DOM-Code => auf jede Zeile ist einfach nur die eval-Funktion anzuwenden
	var z ; //Variable, die in dem DomArray benutzt wird und für den Zeilenknoten steht (tr)
	var k ; //Variable, die in dem DomArray benutzt wird und für alle Kindknoten steht (td,th), aber Achtung bei Kind von Kindknoten
	var t ; //Variable, die in dem DomArray benutzt wird und für alle Textknoten steht )
	
	// Arrays mit Werten für die Suche löschen
	rubricsArray = new Array();
	valuesArray = new Array();
	
	for (i=0 ;  i < evalArray.length ; i++)
		{//dann berechne jeden einzelnen Ausdruck, Test für eine Zeile
		eval(evalArray[i]);
		}
	}		

//erzeuge ein neues HTML-Element
function createNewElement(element, ltext, refObject)
{//element z.B.= "strong", ltext = zugehöriger Textknoten, refObject = Knoten wird Kind dieses Objekts 
var ele = document.createElement(element);
var textnode;

if (ltext != null)
	{//dann erzeuge noch einen Textknoten
	textnode = document.createTextNode(ltext);
	ele.appendChild(textnode);
	}

refObject.appendChild(ele);

return ele;
} 

//erzeuge ein neues Element-Attribut
function createNewAttribut(type, value, refObject)
{//type z.B. = "class", value = Attributwert z.B. "css-Klassenname", refObject = Knoten wird Kind dieses Objekts
var att = document.createAttribute(type);

if (value != null)
	{//dann erzeuge den Knotenwert
	att.nodeValue = value; 
	}

refObject.setAttributeNode(att);

return att;
} 

// Werte, die für die Suche benötigt werden, für eine Suggest-Zeile speichern
function storeSearchData(rubric, value)
{
	rubricsArray[rubricsArray.length] = rubric;
	valuesArray[valuesArray.length] = value;
}

function createNewhtmlTable(htmlArray, insertObject) 
	{//Einfügen von fertigem HTML-Code
	//leider gibe es keine Möglichkeit beim IE auf das innerHTML-Objekt von Tabellenträgen zuzugreifen
	insertObject.innerHTML = "";
	for (i=0 ;  i < htmlArray.length ; i++)
		{//dann berechne jeden einzelnen Ausdruck, Test für eine Zeile
		var hilf = insertObject.innerHTML + htmlArray[i] + "\n";
		insertObject.innerHTML =  hilf;
		}
	}		


function closeSuggestTable()
	{
	var dObject = document.getElementById("jurissuggestdiv"); 
	var tObject = document.getElementById("jurissuggest");
	if (dObject.style.visibility == "visible")
		{
		document.getElementsByName("sugline")[0].value = -1;
		//hänge die eventListener wieder ab
		removeEventList(tObject);
		//Div aus Fenster schieben, damit Eingabefelder nicht überlagert werden.
		dObject.style.visibility = "hidden";
		dObject.style.display = "none";
		}
	}

//falls Fehler ausgegeben werden möchten, sollte dies hier geschehen, da diese Funktion an den Errorhandler gebunden wird
function doErrorAusgabe(wert)
	{
	//alert(wert);
	}


function handleOutput(event)
	{//das Inputfeld wird verlassen, Frage: Weshalb ? Tab , Mouseevent in der Tabelle oder ausserhalb usw.
	// da nach dem Schließen der Tabelle die Mauseevents dieser abgehängt werden, darf das Schließen erst verzögert eintreten um evt. noch ein Clickevent auf der Tabelle zu garantieren
	if (!lockTable)
		window.setTimeout("closeSuggestTable()",300);
	else
		lockTable = false;
	}
	
function toggleSuggestActive()
{
	if (document.getElementsByName("sugactive")[0].value == "true")
	{//dann setze Suggest für die Session und die aktuelle Eingabe aus
		document.getElementsByName("sugactive")[0].value = "false";
	}
	else
	{//dann schalte Suggest für die Session und die aktuelle Eingabe ein
		document.getElementsByName("sugactive")[0].value = "true";
	}

	JurisAjaxUtils.toggleSuggest();		
}

function closeSuggest()
{
	//dann setze Suggest für die Session und die aktuelle Eingabe aus
	closeSuggestTable();
	document.getElementsByName("sugactive")[0].value = "false";
	JurisAjaxUtils.closeSuggest();		
}

function showRes(result)
{
    if(result != null)
    {
      document.getElementById("jurisSuggestSelectionDiv").style.visibility = "visible";
      document.getElementById("jurisSuggestSelectionDiv").style.display = "block";
      dwr.util.removeAllOptions("jurisSuggestSelection");
      dwr.util.addOptions("jurisSuggestSelection",result);
	}
	else
	{
      document.getElementById("jurisSuggestSelectionDiv").style.visibility = "hidden";
      document.getElementById("jurisSuggestSelectionDiv").style.display = "none";
	}
}

function jurisSuggest(keyEvent){
  if (!keyEvent)
  {
    keyEvent= window.event;
  }
  if (keyEvent && keyEvent.keyCode)  
  {
    //escape
    if(keyEvent.keyCode == 27)
    {
      document.getElementById("jurisSuggestSelectionDiv").style.visibility = "hidden";
      document.getElementById("jurisSuggestSelectionDiv").style.display = "none";
    }
    //Pfeil nach unten
    else if(keyEvent.keyCode == 40)
    {
      document.getElementById("jurisSuggestSelection").options[0].selected=true;
      document.getElementById("jurisSuggestSelection").focus();
    }
    
    else if((keyEvent.keyCode >= 48 && keyEvent.keyCode <= 90)||(keyEvent.keyCode >= 96 && keyEvent.keyCode <= 111)||(keyEvent.keyCode >= 186 && keyEvent.keyCode <= 192)||(keyEvent.keyCode >= 219 && keyEvent.keyCode <= 222))
    {
      JurisAjaxUtils.getFilenumbers(DWRUtil.getValue("fastsearchquery"),showRes);
    }
  }
  
  
}

function jurisClickSubmit(inputField)
{
      document.getElementById("jurisSuggestSelectionDiv").style.visibility = "hidden";
      document.getElementById("jurisSuggestSelectionDiv").style.display = "none";
      document.getElementById(inputField).value=document.getElementById('jurisSuggestSelection').options[document.getElementById('jurisSuggestSelection').selectedIndex].value;document.searchForm.submit();
}

function jurisKeydownSubmit(keyEvent,inputField)
{
  if (!keyEvent)
  {
    keyEvent= window.event;
  }
  if (keyEvent && keyEvent.keyCode)  
  {
    //return
    if(keyEvent.keyCode == 13)
    {
      document.getElementById("jurisSuggestSelectionDiv").style.visibility = "hidden";
      document.getElementById("jurisSuggestSelectionDiv").style.display = "none";
      document.getElementById(inputField).value=document.getElementById('jurisSuggestSelection').options[document.getElementById('jurisSuggestSelection').selectedIndex].value;document.searchForm.submit();
    }
    //escape
    else if(keyEvent.keyCode == 27)
    {
      document.getElementById("jurisSuggestSelectionDiv").style.visibility = "hidden";
      document.getElementById("jurisSuggestSelectionDiv").style.display = "none";
    }
  }
}

function setJavaScriptActive()
{
  JurisAjaxUtils.setJavaScriptActive();
}

// Abmessungen eines Objekts (links, rechts, Breite, Höhe) feststellen
function getObjCoords(o) 
{
  	var coords =  new Object();
   coords.left = 0;
   coords.top = 0;
   coords.width = 0;
   coords.height = 0;

   try 
   {
	   if (o.offsetParent)
	   {
   		coords.width = o.offsetWidth;
   		coords.height = o.offsetHeight;
	   	while(o)
	   	{
	   		coords.left += o.offsetLeft;
	   		coords.top += o.offsetTop;
	         o = o.offsetParent;
	      }
	   }
	   else if (o.x) 
	   {
	   	coords.left = o.x;
	      coords.top = o.y;
	      coords.width = o.width;
	      coords.height = o.height;
	   }
   }
   catch(error) 
   {
   }
 	return coords;
}


// Funktion zum Setzen des Attributs Autocomplete auf off, wegen Validierung notwendig 
function setAutocompletteOff(id)
{
var refObject = document.getElementById(id);

if (refObject != null)
	createNewAttribut("autocomplete","off", refObject);
}
