function xibben_searchbox () {

	var url;
	var savedzips = [];
	
	this.setLookUpUrl = function (str) {
		url = str;
	}

	this.hideAllZips = function () {
		for (var i = 0; i <  savedzips.length; i++) {
			var t = $('zip'+savedzips[i]);
			if (t) {
				t.style.display = "none";
			}
		}
	}

	this.getZipFromInput = function (b) {

		var rex = /([0-9]{5})( )+/;
		if (b.match (rex)) {
			return (RegExp.$1);
		}
		

		var rex2 = /^([0-9]{5})$/;
		if (b.match (rex2)) {
			return (RegExp.$1);
		}
		return ("");
	}

	this.typer = function (a) {

      //  var b = $('frontsearchbox2').value;
	//	if (b.length > 4) {
			//return (true);
	//	} else {

            var b = $('frontsearchbox').value;

            if (b.length < 5) {
                return (true);
            }
            
      //  }


		// plz

		var z = xsb.getZipFromInput (b);

		if (!z || z == "") {
			xl.hide ();
			$('searchhintholder').style.display = "none";
			return (true);
		}
		



		var found = false;
			
		for (var i = 0; i <  savedzips.length; i++) {
			if (savedzips[i] == z) {
				var t = $('zip'+z);
				if (t) {
					t.style.display = "block";
				}
				found = true;
			} else {
				var t = $('zip'+savedzips[i]);
				if (t) {
					t.style.display = "none";
				}
			}
		}


		if (found) {
			$('searchhintholder').style.display = "block";
			return (true);
		}
			


		xl.show ();
		var d = doXHR(url, {
		'method': 'POST',
		'mimeType': 'text/plain',
		sendContent: "doajaxzip=true&zip="+escape (z),
		headers: {"Content-Type": "application/x-www-form-urlencoded"}
		}).addCallback(MochiKit.Async.evalJSONRequest);		
		d.addCallbacks(this.zipDone, this.error);	

		
	}

	this.zipDone = function (data) {


		xl.hide ();

		if (data.length == 0) {
			// alert ("NEE!");
			$('searchhintholder').style.display = "none";
			return (false);
		}




		savedzips[savedzips.length] = data['zip'];

		for (var i = 0; i < savedzips.length; i++) {
			var g = $('zip'+savedzips[i]);
			if (g) {
				g.style.display = "none";
			}
		}

		if (data['cities'].length == 1) {
			// direct city match
			var dd = DIV({'id': "zip"+data['zip']}, "");
			dd.innerHTML = "Möchten Sie vielleicht direkt nach dem "
					  +"<a href=\""+data['searchlink']+"\">&raquo; Besten in "
					  +data['cities'][0]
					  +" suchen</a>?";

			if (data['cats'].length > 0) {
				var catstr = "<br><br>Folgende Xibben-Portale könnten für Sie von Interesse sein: <br><ul>";
				for (var i = 0; i < data['cats'].length; i++) {
					catstr += "<li><a href=\""+data['cats'][i]['catlink']+"\">&raquo; "+data['cats'][i]['searchpathhuman']+"</a></li>";
				}
				catstr += "</ul>";
				dd.innerHTML += catstr;
			}

		    appendChildNodes('searchhintholder', 
							 dd);
		} else if (data['cities'].length > 1) {
			// more than one city
			var dd = DIV({'id': "zip"+data['zip']}, "");
			dd.innerHTML = "Möchten Sie nach einem der folgenden Orte suchen?<br>";
			dd.innerHTML += "<ul>";
			for (var i = 0; i < data['cities'].length; i++) {
				dd.innerHTML += "<li><a href=\"/Startseite/q-"+escape (data['cities'][i])+"\">&raquo; "+data['cities'][i]+"</a></li>";
			}
			dd.innerHTML += "</ul>";
		    appendChildNodes('searchhintholder', 
							 dd);
		}
		$('searchhintholder').style.display = "block";

	}
	
	this.error = function () {
		var a = 1;
	}

}