var marked_row = new Array;
function highlight_row(theRow, theRowNum, theAction, theDefaultColor, thePointerColor) {
    var theCells = null;
    if ((thePointerColor == '')
        || typeof(theRow.style) == 'undefined') {
        return false;
    }
    if (typeof(document.getElementsByTagName) != 'undefined') {
        theCells = theRow.getElementsByTagName('td');
    }
    else if (typeof(theRow.cells) != 'undefined') {
        theCells = theRow.cells;
    }
    else {
        return false;
    }
    var rowCellsCnt  = theCells.length;
    var domDetect    = null;
    var currentColor = null;
    var newColor     = null;
    if (typeof(window.opera) == 'undefined'
        && typeof(theCells[0].getAttribute) != 'undefined') {
        currentColor = theCells[0].getAttribute('bgcolor');
        domDetect    = true;
    }
    else {
        currentColor = theCells[0].style.backgroundColor;
        domDetect    = false;
    }
    if (currentColor == '' || currentColor == null || currentColor.toLowerCase() == theDefaultColor.toLowerCase()) {
        if (theAction == 'over' && thePointerColor != '') {
            newColor              = thePointerColor;
        }
    }
    else if (currentColor.toLowerCase() == thePointerColor.toLowerCase()
             && (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])) {
        if (theAction == 'out') {
            newColor              = theDefaultColor;
        }
    }

    if (newColor) {
        var c = null;
        if (domDetect) {
            for (c = 0; c < rowCellsCnt; c++) {
                theCells[c].setAttribute('bgcolor', newColor, 0);
            }
        }
        else {
            for (c = 0; c < rowCellsCnt; c++) {
                theCells[c].style.backgroundColor = newColor;
            }
        }
    }
    return true;
}

function toogle_cookie (cookie)
{
	pos = document.location.href.lastIndexOf ('/');
	url = document.location.href.substring (0, pos);
	if (document.getElementById('no_tooltip').checked == true)
		url += '/ajax/tooltip.php?no_tooltip=set';
	else
		url += '/ajax/tooltip.php?no_tooltip=unset';

	try
	{
		request = new XMLHttpRequest();
	}
	catch (trymicrosoft)
	{
		try
		{
			request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (othermicrosoft)
		{
			try
			{
				request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (failed)
			{
				request = false;
			}
		}
	}

	if (!request) alert("Error initializing XMLHttpRequest!");
	else
	{
		request.open("GET", url, true);
//		request.onreadystatechange = updatePage;
		request.send(null);
	}
}

function updatePage() {
	 alert(request.responseText);
}

sections = new Array ('lage', 'zeit', 'objekt', 'kosten', 'wg_infos', 'ausstattung', 'titel', 'anzeigentext', 'pers_angaben');
status = new Array (true, false, false, false, false, false, false, false, false);
next_section = 'zeit';

function show_section (id)
{
//alert ("deaktiviert");
/*
	if (document.getElementById('show_all').checked == true) return false;

	for (i = 0; i < sections.length; i++)
	{
		if (sections[i] == id)
		{
			document.getElementById(sections[i]).style.display = 'block';
		}
		else
		{
			document.getElementById(sections[i]).style.display = 'none';
		}
	}
*/
}

function alles ()
{
	if (document.getElementById('show_all').checked == true)
	{
		for (i = 0; i < sections.length; i++)
			document.getElementById(sections[i]).style.display = 'block';
	}
	else show_section ('zeit');
}


function showPassword(inputID){
	var input = document.getElementById(inputID);
	try{
		var value = input.value;
		input.type = (input.type=='text'?'password':'text');
		input.value = value; //benötigt z. B. in Opera
	} catch(e){
		//für den IE
		var neuInp = document.createElement('input');
		neuInp.type = (input.type=='text'?'password':'text');
		neuInp.value = input.value;
		neuInp.name = input.name
		neuInp.id = input.id;
		neuInp.style.width = input.style.width;
		neuInp.maxlength = input.maxlength;
		input.parentNode.replaceChild(neuInp, input);
	}
}


function showinfo(box){
	var infobox = document.getElementById(box);
	infobox.style.display = 'inline';
}
function hideinfo(box){
	var infobox = document.getElementById(box);
	infobox.style.display = 'none';
}

/* Dynamic display of 'Tausch' box in Detail and Gallery view */
function showinfoDynamic(obj,id,lft,top) {
	var el = document.getElementById(id);
	el.style.display = "block";
	el.style.left=zxcPos(obj)[0]+lft+'px';
	el.style.top=zxcPos(obj)[1]+top+'px';
}
function zxcPos(obj){
	var rtn=[obj.offsetLeft,obj.offsetTop];
	while(obj.offsetParent!=null){
		var objp=obj.offsetParent;
		rtn[0]+=objp.offsetLeft-objp.scrollLeft;
		rtn[1]+=objp.offsetTop-objp.scrollTop;
		obj=objp;
	}
	return rtn;
}

	
	
	
	
	/*infobox = document.getElementById(box);
	if (window.Event) {
		document.captureEvents(Event.mouseover);
	}
	document.onmouseover = getCursorXY;
	document.onmouseout = hideinfo(box);*/



/*
function getCursorXY(e) {
	posX = (window.Event) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
	posY = (window.Event) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);

	newDivPosX = posX+20;
	newDivPosY = posY-130;
	newDivPosXtoStrring = newDivPosX+"px";
	newDivPosYtoStrring = newDivPosY+"px";

	infobox.style.display = 'inline';
	infobox.style.left = newDivPosXtoStrring;
	infobox.style.top = newDivPosYtoStrring;
}*/


//     Favoritenhandling
//-------------------------------------------------------------------

// Angebot zu Favoriten hinzufügen


//     Autocomplete
//-------------------------------------------------------------------
//-------------------------------------------------------------------

// "action"-Funktion: Link aufrufen
function loadPage(link) {
	window.location = link;
}

// diese Funktion muss anhand der Eingabe bestimmen, welche Elemente aus dem
// displayArray passen und somit angezeigt werden könnten. Mittels des
// Attributes 'pos' muss dazu noch die Wertigkeit definiert werden, dabei ist
// Position 0 die oberste/ beste Position. Die Werte im dataArray repräsentieren
// die tatsächlichen Daten, die hinter dem angezeigten String im displayArray
// stecken.
function fillIndexOf(input, displayArray, dataArray){
	input = input.toLowerCase(); //Groß-/Kleinschreibung nicht beachten
	var list = new Array();
	var ii = 0;
	for(var i = 0; i < displayArray.length; i++) {
		if (dataArray[i]) {
			if(displayArray[i].toLowerCase().indexOf(input) != -1){
				list[ii] = new Object();
				list[ii].text = displayArray[i];
				list[ii].data = dataArray[i];
				list[ii].pos = displayArray[i].toLowerCase().indexOf(input); //sortiere nach Position des Vorkommens
				ii++;
			}
		}
	}
	return list;
}

//einfaches Bubblesort eines Arrays mit Objekten nach der Objekteigenschaft 'pos'
function sortAutocompleteElements(autocompleteData){
	var n = autocompleteData.length;
	do{
		var vertauscht = false;
		for (var i = 0; i < n - 1; i++){
			if (autocompleteData[i].pos > autocompleteData[i+1].pos){
				var swap = autocompleteData[i];
				autocompleteData[i] = autocompleteData[i+1];
				autocompleteData[i+1] = swap;
				vertauscht = true;
			}
		}
		n--;
	} while(vertauscht && n >= 1);
}

// ermittelt das Autocompleteobjekt anhand seiner ID
function getAutocomplete(id) {
	for (var i = 0; i < autocomplete.length; i++) {
		if (autocomplete[i].id === id) {
			return autocomplete[i];;
		}
	}
	return null;
}

// erstellt eine weitere Liste ohne die doppelten Elemente
function uniqueAutocompleteElements(list)
{
   var r = new Array();
   o:for(var i = 0, n = list.length; i < n; i++)
   {
      for(var x = 0, y = r.length; x < y; x++)
      {
         if(r[x].data==list[i].data) continue o;
      }
      r[r.length] = list[i];
   }
   return r;
}


// überwacht die Pfeiltasten und Enter zur Auswahl der Autocompleteliste mit der Tastatur
// onkeydown und onkeypress verarbeiten die Pfeiltasten unterschiedlich
// call				- wird die Funktion durch onkeydown ausgeführt 2, bei onkeypress = 1
// keyCode			- die zuletzt gedrückte Taste
// autocompleteID	- eindeutige ID des zugehörigen Autocompleteobjektes
autocomplete_caller = 0;
function autocompleteSelection(caller, keyCode, autocompleteID) {
	if (keyCode == 38 || keyCode == 40) {
		if (autocomplete_caller==2&&caller==1) {autocomplete_caller=caller; return;}
		if (!autocomplete_caller) autocomplete_caller = caller;
		if (autocomplete_caller != caller) return;
	}
	// zu erst das Objekt anhand der ID ermitteln
	var autocompleteBox = getAutocomplete(autocompleteID);

	autocompleteBox.checkEnter(keyCode);
	switch (keyCode) {
		case 38: // Pfeil rauf
			if(autocompleteSelect == null){
				autocompleteSelect = document.getElementById('autocompel' + (autocompleteBox.count - 1) + autocompleteBox.prevID + autocompleteBox.id);
				while (autocompleteSelect && (autocompleteSelect.style.display == 'none' ||
				                              !autocompleteSelect.data)) {
					autocompleteSelect = autocompleteSelect.previousSibling;
				}
				if (autocompleteSelect != null) {
					autocompleteSelect.className = autocompleteSelect.autocomplete.css.keyselect;
				}
			} else {
				autocompleteSelect.className = autocompleteSelect.autocomplete.css.element;
				do {
					autocompleteSelect = autocompleteSelect.previousSibling;
				} while (autocompleteSelect && !autocompleteSelect.data);
				if (autocompleteSelect != null) {
					autocompleteSelect.className = autocompleteSelect.autocomplete.css.keyselect;
				}
			}
			break;
		case 40: // Pfeil runter
			if(autocompleteSelect == null){
				autocompleteSelect = document.getElementById('autocompel0' + autocompleteBox.prevID + autocompleteBox.id);
				while (autocompleteSelect && (autocompleteSelect.style.display == 'none' ||
				                              !autocompleteSelect.data)) {
					autocompleteSelect = autocompleteSelect.nextSibling;
				}
				autocompleteSelect.className = autocompleteSelect.autocomplete.css.keyselect;
			} else {
				autocompleteSelect.className = autocompleteSelect.autocomplete.css.element;
				do {
					autocompleteSelect = autocompleteSelect.nextSibling;
				} while (autocompleteSelect && !autocompleteSelect.data);
				if (autocompleteSelect != null) {
					if (autocompleteSelect.style.display == 'none') {
						autocompleteSelect = null;
					} else {
						autocompleteSelect.className = autocompleteSelect.autocomplete.css.keyselect;
					}
				}
			}
			break;
		case 37:  // Pfeil links
		case 39:  // Pfeil rechts
		case 13:  // Enter
			return;
		default:
			// Eingabe hat sich geändert, also Auswahl aufheben
			if (autocompleteSelect != null) {
				autocompleteSelect.className = autocompleteBox.css.element;
				autocompleteSelect = null;
			}
			return;
	}

	// die Auswahl per Tastatur wurde geändert
	if (!autocompleteBox.noMatch && (autocompleteBox.input || autocompleteBox.emptyDisplay)) {
		// es stehen Zeichen in der Eingabe, also muss das Autocompletefenster angezeigt werden
		if (autocompleteBox.input) {
			autocompleteBox.div.style.display = 'block';
			autocompleteBox.divAll.style.display = 'none';
			autocompleteBox.prevID = '';
		} else {
			autocompleteBox.div.style.display = 'none';
			autocompleteBox.divAll.style.display = 'block';
            autocompleteBox.prevID = 'All';
		}
		if (autocompleteSelect != null) {
			// es ist was Ausgewählt, also entsprechend zu dem Element scrollen
			if (autocompleteBox.input) {
				autocompleteBox.flow.scrollTop = autocompleteSelect.offsetTop - autocompleteBox.flow.clientHeight / 2;
			} else {
				autocompleteBox.flowAll.scrollTop = autocompleteSelect.offsetTop - autocompleteBox.flowAll.clientHeight / 2;
			}
		} else {
			// keine Auswahl, also zum Anfang der Liste scrollen
			if (autocompleteBox.input) {
				autocompleteBox.flow.scrollTop = 0;
			} else {
				autocompleteBox.flowAll.scrollTop = 0;
			}
		}
	}
}

// aktualisiert die angezeigte Autocompletliste
// autocompleteBox  - das aktuelle Autocomplete Object
function updateAutocompleteList(autocompleteBox){
	autocompleteBox.div.scrollTop = 0;
	if (autocompleteBox.input != '') {
		// Liste nur füllen, wenn auch min. ein Zeichen im Eingabefeld steht
		list = autocompleteBox.fill(autocompleteBox.input, autocompleteBox.displayArray, autocompleteBox.dataArray);
		if (list.length) {
			if (autocompleteBox.noMatch) {
				autocompleteBox.noMatch = false;
				autocompleteBox.div.style.display = 'block';
				autocompleteBox.divError.style.display = 'none';
			}
			sortAutocompleteElements(list); //sortieren
			list = uniqueAutocompleteElements(list); //löscht doppelte Vorkommen
			for (var i = 0; i < list.length; i++) {
				if (i >= autocompleteBox.count) break;
				var div = document.getElementById('autocompel' + i + autocompleteBox.id);
				div.innerHTML = list[i].text;
				div.style.display = 'block';
				div.data = list[i].data;
			}
			for(var i = list.length; i < autocompleteBox.count; i++){
				var vorschlag = document.getElementById('autocompel' + i + autocompleteBox.id);
				vorschlag.innerHTML = '';
				vorschlag.style.display = 'none';
			}
			autocompleteBox.divAll.style.display = 'none';
			autocompleteBox.div.style.display = 'block';
			autocompleteBox.prevID = '';
		} else {
			autocompleteBox.noMatch = true;
			autocompleteBox.div.style.display = 'none';
			autocompleteBox.divAll.style.display = 'none';
			autocompleteBox.divError.style.display = 'block';
		}
	} else if (autocompleteBox.emptyDisplay) {
		// kein Zeichen wurde angegeben, aber Gesamtliste soll angezeigt werden
		autocompleteBox.divAll.style.display = 'block';
		autocompleteBox.div.style.display = 'none';
		autocompleteBox.divError.style.display = 'none';
		autocompleteBox.prevID = 'All';
		autocompleteBox.noMatch = false;
	} else {
		// kein Zeichen wurde angegeben, alles verbergen
		autocompleteBox.divError.style.display = 'none';
		autocompleteBox.divAll.style.display = 'none';
		autocompleteBox.div.style.display = 'none';
		autocompleteBox.noMatch = false;
	}
}

// schreibt die Kontainer-Divs des Autocompletefensters in den
// HTML-Code per document.write(...);
// autocompleteBox  - das aktuelle Autocomplete Object
// width            - Breite des Fensters
// height           - max. Höhe des Fensters
// prevID           - eine zusätzliche ID für die Divs
function writeAutocompleteWindow(autocompleteBox, width, height, prevID) {
	document.write('<div id="autocomplete' + prevID + autocompleteBox.id + '" class="' + autocompleteBox.css.window + '" style="width:' + width + 'px;">');
	document.write(autocompleteBox.beforeHTML);
	document.write('<div id="autocompflow' + prevID + autocompleteBox.id + '" class="flow" style="max-height:' + height + 'em;">');
	document.write('</div>');
	document.write(autocompleteBox.afterHTML);
	document.write('</div>');
}

// generiert die gewünschte Anzahl Element für ein Autocompletefenster
// autocompleteBox  - das aktuelle Autocomplete Object
// maxElements      - Anzahl der Element die max. genutzt werden können
// parent           - DOM-Node in welchen die neuen Element eingefügt werden
// prevID           - eine zusätzliche ID für die Elemente
function createAutocompleteElements(autocompleteBox, maxElements, parent, prevID) {
	for (var i = 0; i < maxElements; i++) {
		var div = document.createElement('div');
		div.id = 'autocompel' + i + prevID + autocompleteBox.id;
		div.className = autocompleteBox.css.element;
		div.onclick = function () {
			if (this.data) {
				document.getElementById('autocompinp' + autocompleteBox.id).value = this.innerHTML;
				getAutocomplete(autocompleteBox.id).action(this.data);
			}
		};
		div.autocomplete = autocompleteBox;
		parent.appendChild(div);
	}
}

// aktualisiert die Autocompletevorschläge
// input			- eingabe String
// keyCode			- gedrückte Taste
// autocompleteID	- eindeutige ID des zugehörigen Autocompleteobjektes
function updateAutocomplete(input, keyCode, autocompleteID){
	// zu erst das Objekt anhand der ID ermitteln
	var autocompleteBox = getAutocomplete(autocompleteID);

	if (autocompleteBox.input != input) {
		// ein weiterer Buchstabe kam dazu
		autocompleteBox.input = input;
		autocompleteBox.flow.scrollTop = 0;
		updateAutocompleteList(autocompleteBox);
	}
}

// Schaltet zwischen Anzeigen und verstecken des übergebenden
// Autocompletefensters um.
function showAutocomplete(id){
	var autocompleteBox = getAutocomplete(id);

	if (autocompleteBox.noMatch) {
		if (autocompleteBox.divError.style.display == 'block') {
        	autocompleteBox.divError.style.display = 'none';
        } else {
        	autocompleteBox.divError.style.display = 'block';
        }
	} else {
		if (autocompleteBox.prevID == 'All') {
	        if (autocompleteBox.divAll.style.display == 'block') {
	        	autocompleteBox.divAll.style.display = 'none';
	        } else {
	        	autocompleteBox.divAll.style.display = 'block';
	        }
		} else {
	        if (autocompleteBox.div.style.display == 'block') {
	        	autocompleteBox.div.style.display = 'none';
	        } else {
	        	autocompleteBox.div.style.display = 'block';
	        }
		}
	}
}

// Autocomplete Objektdefinition
// id              - eindeutige ID eines Autocompletefensters
// adviceCount     - max. Anzahl der gleichzeitig angezeigten Vorschläge
// display         - Array mit allen Strings, die als entgültige Werte möglich sind
// data            - Array mit den Daten, die mit dem entsprechenden eingegebenen Wert verknüpft werden soll
// windowCSS       - CSS-Klasse die für das Autocompletefenster verwendet werden soll
// elementCSS      - CSS-Klasse die standardmäßig für ein nicht ausgewähltes Element ausgewählt werden soll
// keyselectCSS    - CSS-Klasse die für das ausgewählte Element genutzt werden soll
// headlineCSS     - CSS-Klasse die für die Überschriften der Kategorien genutzt werden soll
// fillFunction    - Funktion wird jedes mal aufgerufen, wenn sich die Eingabe verändert hat
//                   Die Funktion wird mit 3 Parametern aufgerufen: Eingabewert, display und data
// actionFunction  - Funktion wird aufgerufen, wenn tatsächlich ein Element entgültig ausgewählt wurde.
//                 - Übergeben wird dabei der Wert aus dem dataArray.
// beforeHTML      - HTML-Text wird vor die tatsächlichen Vorschlagsdivs geschrieben.
// afterHTML       - HTML-Text wird nach den tatsächlichen Vorschlagsdivs geschrieben.
// emptyDisplay    - false = Fenster verstecken bei leerer Eingabe/ true = alle möglichen Werte anzeigen
function Autocomplete(id, adviceCount, display, data, windowCSS, elementCSS, keyselectCSS, headlineCSS, fillFunction, actionFunction, beforeHTML, afterHTML, emptyDisplay){
	this.id = id;
	if (adviceCount > 0 && adviceCount < display.length) {
		this.count = adviceCount;
	} else {
		this.count = display.length;
	}
	this.css = new Object();
	this.displayArray = display;
	this.dataArray = data;
	this.css.window = windowCSS;
	this.css.element = elementCSS;
	this.css.keyselect = keyselectCSS;
	this.css.headline = headlineCSS;
	this.fill = fillFunction;
	this.action = actionFunction;
	this.beforeHTML = beforeHTML;
	this.afterHTML = afterHTML;
	this.emptyDisplay = emptyDisplay;
	this.input = '';
	this.noMatch = false;

	// schreibe dieses Objekt in ein Array für die nachstehende Funktion
	autocomplete[autocomplete.length] = this;

	// verstecke AutocompleteListe sofern ein Klickevent eintritt
	document.documentElement.onclick = function(e){
			for (var i = 0; i< autocomplete.length; i++){
				if (document.activeElement.getAttribute('id') != 'autocompinp' + autocomplete[i].id) {
					autocomplete[i].div.style.display = 'none';
					autocomplete[i].divAll.style.display = 'none';
					autocomplete[i].divError.style.display = 'none';
				}
				if (autocompleteSelect != null) {
					if (autocompleteSelect.autocomplete.id == autocomplete[i].id) {
						autocompleteSelect.className = autocomplete[i].css.element;
						autocompleteSelect = null;
					}
				}
			}
		};
	//--------

	// schreibt das Eingabefeld in den HTMLCode. Muss an der Stelle eingefügt werden, wo das
	// Eingabefeld tatsächlich angezeigt werden soll.
	// inputID         - eindeutige ID eines Eingabefeldes <input type="text" id="<inputID>">
	// height          - die gewünschte Höhe des Autocompletefensters in "em"
	// emptyValue      - Text, welcher angezeigt werden soll, so lange keine Benutzereingabe gemacht wurde.
	// errorCSS        - CSS-Klasse wird für das DIV-Verwendet, in dem der errorText stehen wird
	// errorText       - Text wird angezeigt, wenn die Eingabe kein Ergebnis aus der Liste enthält
	this.setInput = function(inputID, height, emptyValue, errorCSS, errorText) {
		//das eigentliche Eingabefeld anhand seiner ID ermitteln
 		input = document.getElementById(inputID);
		if (input == null) {
			return false;
		}
		input.id = 'autocompinp' + this.id;
		input.value = emptyValue;


		// das Autocompletefenster selber innerhalb eines 1x1 Pixel großen
		// Divs, damit das Layout nicht durch das Fenster verzogen wird.
		document.write('<div style="width:1px; height:1px; overflow: visible;">');
		writeAutocompleteWindow(this, input.offsetWidth, height, '');
		writeAutocompleteWindow(this, input.offsetWidth, height, 'All');
		writeAutocompleteWindow(this, input.offsetWidth, height, 'Error');
		document.write('</div>');

		// speichern der Elemente direkt im Objekt um später direkt darauf zugreifen zu können
		this.div = document.getElementById('autocomplete' + this.id);
		this.flow = document.getElementById('autocompflow' + this.id);
		this.divAll = document.getElementById('autocompleteAll' + this.id);
		this.flowAll = document.getElementById('autocompflowAll' + this.id);
		this.divError = document.getElementById('autocompleteError' + this.id);
		this.flowError = document.getElementById('autocompflowError' + this.id);
        this.flowError.className = errorCSS;
		this.flowError.innerHTML = errorText;


		// der IE speichert die tatsächliche Breite des Eingabefeldes nicht
		// während des landens in der er zugehörigen JS-Variable. Die
		// tatsächliche Breite muss deswegen nach dem laden der Seite
		// den Autocompletefenstern zugeteilt werden.
		if (!document.getElementById('autocompinp' + this.id).clientWidth) {
			document.body.onload = function() {
				for (var i = 0; i< autocomplete.length; i++) {
					var width = document.getElementById('autocompinp' + autocomplete[i].id).clientWidth + "px";
					autocomplete[i].div.style.width = width;
					autocomplete[i].divAll.style.width = width;
					autocomplete[i].divError.style.width = width;
				}
			};
		}

		// die Elemente innerhalb des Autocompletefensters
		createAutocompleteElements(this,
		                           this.count,
								   document.getElementById('autocompflow' + this.id),
								   '');

		// vorgenerieren der gesamten Liste, sofern diese angezeigt werden soll
		if (this.emptyDisplay) {
			createAutocompleteElements(this,
			                           this.displayArray.length,
									   document.getElementById('autocompflowAll' + this.id),
									   'All');

			for (var i = 0; i < this.displayArray.length; i++) {
				var div = document.getElementById('autocompel' + i + 'All' + this.id);
				if (this.dataArray[i]) {
					div.className = this.css.element;
				} else {
					div.className = this.css.headline;
				}
		        div.data = this.dataArray[i];
		        div.innerHTML = this.displayArray[i];
			}
			this.prevID = 'All';
		}
		//------------

		//Eingabefeld alle seine Javascriptfunktionen zuweisen
		input.emptyValue = emptyValue;
		input.autocompleteID = this.id;
		input.onkeypress = function(e) {
			e = (typeof(event)=='undefined'?e:event);
			autocompleteSelection(1, e.keyCode, this.autocompleteID);
			return e.keyCode!=13;
		};
		input.onkeydown = function(e) {
			e = (typeof(event)=='undefined'?e:event);
			autocompleteSelection(2, e.keyCode, this.autocompleteID);
			return e.keyCode!=13;
		};
		input.onkeyup = function(e) {
			e = (typeof(event)=='undefined'?e:event);
			updateAutocomplete(this.value, e.keyCode, this.autocompleteID);
			return e.keyCode!=13;
		};
		if (this.emptyDisplay) {
			input.onclick = function() {
				showAutocomplete(this.autocompleteID);
				if(this.value == this.emptyValue) this.value='';
			};
		} else {
			input.onclick = function() {
				 if (this.value == this.emptyValue) this.value='';
			}
		}
		input.onblur = function() {
			if(!this.value) this.value = this.emptyValue;
		}

		// Sicherheitshalber noch alle Autocomplete-Divs verstecken
		this.div.style.display = 'none';
		this.divAll.style.display = 'none';
		this.divError.style.display = 'none';

		return true;
	};
	//---------


/* Button aktuell nicht nötig

	this.button = function(css) {
		document.write('<div style="float:left;"><a class="' + css + '" href="javascript:getAutocomplete(\''+this.id+'\').checkEnter(13);">&nbsp;</a></div>');
	}
*/

	this.checkEnter = function(keyCode) {
		if (!this.noMatch) {
			if (keyCode == 13 || (keyCode == 9 && autocompleteSelect != null)) {
				//Auswahl wurde bestätigt
				var input = document.getElementById('autocompinp' + this.id);
				if(autocompleteSelect != null) {
					input.value = autocompleteSelect.innerHTML;
					this.action(autocompleteSelect.data);
				} else {
					var stadt = input.value.toLowerCase();
					if (stadt != '') {
						for(var i = 0; i < this.displayArray.length; i++) {
							if (stadt == this.displayArray[i].toLowerCase()){
								input.value = input.value;
								this.action(this.dataArray[i]);
								return;
							}
						}
						div = document.getElementById('autocompel0' + this.id);
						if (this.div.style.display != 'none') {
							while (div && (div.style.display == 'none' ||
							               !div.data ||
										   div.innerHTML.toLowerCase().indexOf(stadt) != 0)) {
								div = div.nextSibling;
							}
							input.value = div.innerHTML;
							this.action(div.data);
						} else {
							this.div.style.display = 'block';
						}
					}
				}
			}
		}
	};
}

// initialisiere die globalen Variablen (Liste aller Autocompletefenster und das aktuell ausgewählte Element)
autocompleteSelect = null;
autocomplete = new Array();

