Index: trunk/mapbender/http/nav/nav_in_gui.sql
===================================================================
--- trunk/mapbender/http/nav/nav_in_gui.sql	(revision 216)
+++ trunk/mapbender/http/nav/nav_in_gui.sql	(revision 216)
@@ -0,0 +1,82 @@
+-- ALKIS Navigation in eine MB-GUI einfuegen 
+-- 2010-11-17
+
+
+-- MB 2.6.2
+
+INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, e_title, 
+e_element, e_src, e_attributes, e_left, e_top, e_width, e_height, e_z_index, 
+e_more_styles, e_content, e_closetag, e_js_file, e_mb_mod, e_target, e_requires, e_url) 
+VALUES(
+	'Lage_1',
+	'gazetteer_alkis',
+	2,1,
+	'ALKIS-Navigation (in Tab)',
+	'Liegenschaftskataster ALKIS',
+	'iframe',
+	'../nav/alkisnav.htm?gkz=150&gemeinde=40&sessionID',
+	'frameborder = "0" onmouseover="this.style.zIndex=300;this.style.width=280;" onmouseout="this.style.zIndex=2;this.style.width=225"',1,1,1,1,1,'visibility:hidden; border: 1px solid #a19c8f;'
+	,'','iframe','','','mapframe1','','');
+
+
+
+-- MB 2.5
+
+-- Lage 150  40
+-- HBM  140  32
+-- Leo  070  48
+
+-- Demo rlp 103    epsg 25832
+
+INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+e_title, e_element, e_src, e_attributes, e_left, e_top, 
+e_width, e_height, e_z_index, e_more_styles, e_content, 
+e_closetag, e_js_file, e_mb_mod, e_target, e_requires, e_url) 
+VALUES(
+	'Lage_1',   -- GUI-Name
+	'gazetteer_alkis',
+	2,1,
+	'ALKIS-Navigation (in Tab)',
+	'Liegenschaftskataster ALKIS',
+	'iframe',
+	'../nav/alkisnav.htm?gkz=150&gemeinde=40&sessionID',  -- GKZ, Gemeinde-Schluessel
+	'frameborder = "1"',1,1,1,1,1,
+	'visibility:hidden',
+	'','iframe','','','mapframe1','','');
+
+
+INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+e_title, e_element, e_src, e_attributes, e_left, e_top, 
+e_width, e_height, e_z_index, e_more_styles, e_content, 
+e_closetag, e_js_file, e_mb_mod, e_target, e_requires, e_url) 
+VALUES(
+	'Leopoldshoehe_1',   -- GUI-Name
+	'gazetteer_alkis',
+	2,1,
+	'ALKIS-Navigation (in Tab)',
+	'Liegenschaftskataster ALKIS',
+	'iframe',
+	'../nav/alkisnav.htm?gkz=070&gemeinde=&sessionID',  -- GKZ, Gemeinde-Schluessel
+	'frameborder = "1"',1,1,1,1,1,
+	'visibility:hidden',
+	'','iframe','','','mapframe1','','');
+
+
+-- WWW
+
+INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+e_title, e_element, e_src, e_attributes, e_left, e_top, 
+e_width, e_height, e_z_index, e_more_styles, e_content, 
+e_closetag, e_js_file, e_mb_mod, e_target, e_requires, e_url) 
+VALUES(
+	'ALKIS_Demo',   -- GUI-Name
+	'gazetteer_alkis',
+	2,1,
+	'ALKIS-Navigation (in Tab)',
+	'Liegenschaftskataster ALKIS',
+	'iframe',
+	'../nav/alkisnav.htm?gkz=rlp&gemeinde=103&sessionID',  -- GKZ, Gemeinde-Schluessel
+	'frameborder = "1"',1,1,1,1,1,
+	'visibility:hidden',
+	'','iframe','','','mapframe1','','');
+
Index: trunk/mapbender/http/nav/blank_eig.html
===================================================================
--- trunk/mapbender/http/nav/blank_eig.html	(revision 216)
+++ trunk/mapbender/http/nav/blank_eig.html	(revision 216)
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<title></title>
+</head>
+<body>
+<p class='start'>Suche nach Eigent&uuml;mern in ALKIS:<br><br>
+Schritt 1: Anfang des Nachnamens eingeben<br>
+oder Suche nach Nachname, Vorname<br>
+oder Suche nach Namensbestandteilen mit Platzhalter "*", z.B. "*meier"<br><br>
+Schritt 2: Auswahl Person<br><br>
+Schritt 3: Auswahl Grundbuch-Blatt<br><br>
+Schritt 4: Auswahl Flurst&uuml;ck</p>
+</body>
+</html>
Index: trunk/mapbender/http/nav/blank_adr.html
===================================================================
--- trunk/mapbender/http/nav/blank_adr.html	(revision 216)
+++ trunk/mapbender/http/nav/blank_adr.html	(revision 216)
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<title></title>
+</head>
+<body>
+<p class='start'>Suche nach Geb&auml;ude-Adressen in ALKIS:<br><br>
+Schritt 1:<br>Anfang des Stra&szlig;ennamens eingeben<br>oder Mausklick auf einen Anfangsbuchstaben<br>
+oder Suche nach Namensbestandteilen mit Platzhalter "*", z.B. "*kamp"<br><br>
+Schritt 2:<br>Auswahl Stra&szlig;enname<br><br>
+Schritt 3:<br>Auswahl Hausnummer</p>
+</body>
+</html>
Index: trunk/mapbender/http/nav/alkisnav_eig.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_eig.php	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav_eig.php	(revision 216)
@@ -0,0 +1,372 @@
+<?php
+/* Version vom 
+	24.10.2011	Nach Pos-Klick Highlight erneuern statt hideHighlight
+	17.11.2011	Nachweis-Links ÃŒber javascript im neuen Hochformat-Fenster
+	02.12.2011	Suche nach Vorname Nachname oder Nachname
+	09.12.2011	Filter "Gemeinde" fÃŒr Ebene FlurstÃŒcke.
+					Filter "Gemeinde" fÃŒr Personen ÃŒber neue Hilfstabelle "gemeinde_person".
+					Format css Person (Rahmen).
+	ToDo: Auf der Stufe 2 "getGBbyPerson" noch Filtern nach Gemeinde
+*/
+import_request_variables("PG");
+include("../../conf/alkisnav_conf.php");
+$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
+$con = pg_connect ($con_string) or die ("<p class='err'>Fehler bei der Verbindung zur Datenbank</p>".$dbname.$dbvers.$gkz);
+?>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS-Suche Eigent&uuml;mer</title>
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<script type="text/javascript">
+		function imFenster(dieURL) {
+			var link = encodeURI(dieURL);
+			window.open(link,'','left=10,top=10,width=620,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
+		}
+	</script>
+</head>
+<body>
+
+<?php
+
+function getEigByName() {
+// 1 =============================
+// Eigentuemer nach Name(-nsanfang)
+// ===============================
+	global $gkz, $gemeinde, $epsg, $con, $name, $person, $gb, $gfilter, $persfilter, $auskpath;
+	$linelimit=120;
+	$arr = explode(",", $name);
+	$name0 = trim($arr[0]);
+	$name1 = trim($arr[1]);
+	if(preg_match("/\*/",$name0)){
+		$match = trim(preg_replace("/\*/i","%", strtoupper($name0)));
+	} else {
+		$match = trim($name0)."%";
+	}	
+	if(preg_match("/\*/",$name1)){
+		$match1 = trim(preg_replace("/\*/i","%", strtoupper($name1)));
+	} else {
+		$match1 = trim($name1)."%";
+	}		
+	
+	$sql ="SELECT p.nachnameoderfirma, p.vorname, p.gml_id FROM ax_person p ";
+
+	if ($persfilter and ($gfilter > 0)) {
+		$sql.="JOIN gemeinde_person g ON p.gml_id = g.person WHERE ";
+		switch ($gfilter) {
+			case 1: // Einzelwert
+				$sql.="g.gemeinde=".$gemeinde." AND "; break;
+			case 2: // Liste
+				$sql.="g.gemeinde in (".$gemeinde.") AND "; break;
+		}
+	} else {
+		$sql.="WHERE ";
+	}
+	if($match1 != '%'){
+		$sql.="nachnameoderfirma ILIKE $1 AND p.vorname ILIKE $2 ";		
+		$sql.="ORDER BY p.nachnameoderfirma, p.vorname LIMIT $3 ;";
+		$v=array($match, $match1, $linelimit);
+	}else{
+		$sql.="nachnameoderfirma ILIKE $1 ";		
+		$sql.="ORDER BY p.nachnameoderfirma, p.vorname LIMIT $2 ;";
+		$v=array($match, $linelimit);
+	} 
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
+		return;
+	}
+	$cnt = 0;
+	while($row = pg_fetch_array($res)) {
+		$nnam=htmlentities($row["nachnameoderfirma"], ENT_QUOTES, "UTF-8");
+		$vnam=htmlentities($row["vorname"], ENT_QUOTES, "UTF-8");
+		$gml=$row["gml_id"];
+		// Link zur Auskunft Person  +++ Icon differenzieren? Firma/Person
+		echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisnamstruk.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$gml."\")'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer.ico' width='16' height='16' alt='EIG'>";
+		echo "\n\t</a> ";		
+		echo "\n<a title='Person' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$gml."&amp;name=".$nnam."'>".$nnam.", ".$vnam."</a>\n<br>";
+		$cnt++;
+	}
+	if($cnt == 0){ 
+		echo "\n<p class='err'>Keine Person.</p>";
+	} elseif($cnt >= $linelimit) {
+		echo "\n<p title='Bitte den Namen eindeutiger qualifizieren'>... und weitere</p>";
+	} elseif($cnt == 1){ // Eindeutig!
+		$person = $gml;
+	}
+	return;
+}
+
+function getGBbyPerson() {
+// 2 =================================
+// GrundbÃŒcher zur gewÃ€hlten Person
+// ===================================
+	global $gkz, $gemeinde, $epsg, $con, $name, $person, $gb, $auskpath;
+	$linelimit=120;
+	if(isset($name)) { // Familiensuche
+		echo "\n<div class='back' title='Andere Personen mit diesem Nachnamen'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer_2.ico' width='16' height='16' alt='FAM'> ";
+			echo "\n<a class='back' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;name=".$name."'>\"".$name."\"</a>";
+		echo "\n</div>\n<br>";	
+	}
+	$sql="SELECT p.nachnameoderfirma, p.vorname, p.geburtsdatum, p.namensbestandteil, ";
+	$sql.="a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer ";
+	$sql.="FROM ax_person p ";
+	$sql.="JOIN alkis_beziehungen b ON p.gml_id=b.beziehung_von ";
+	$sql.="JOIN ax_anschrift a ON a.gml_id=b.beziehung_zu ";
+	$sql.="WHERE p.gml_id= $1 AND b.beziehungsart='hat';";	
+	$v=array($person);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {echo "\n<p class='err'>Fehler bei Name</p>\n";}
+	// Daten der Person
+	echo "\n\t<table>\n\t<tr>\n\t\t<td valign='top'>";
+		// Sp. 1: Icon, Link zur Auskunft Person
+		echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisnamstruk.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$person."\")'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer.ico' width='16' height='16' alt='EIG'>";
+		echo "\n\t</a></td>\n\t\t<td>";
+		echo "\n\t<p class='nam'>"; // Sp. 2: Rahmen
+		if ($row = pg_fetch_array($res)) {
+			$namzeil=$row["nachnameoderfirma"].", ".$row["vorname"];
+			$gebdat=$row["geburtsdatum"];
+			if ($gebdat != "") {$namzeil.= ", geb. ".$gebdat;}
+			$best=$row["namensbestandteil"];
+			if ($best != "") {$namzeil.= ", ".$best;}
+			echo htmlentities($namzeil, ENT_QUOTES, "UTF-8");
+			$namzeil=$row["plz"]." ".$row["ort_post"];
+			if (trim($namzeil) != "") {echo "\n\t<br>".htmlentities($namzeil, ENT_QUOTES, "UTF-8");}
+			$namzeil=$row["strasse"]." ".$row["hausnummer"];
+			if (trim($namzeil) != "") {echo "\n\t<br>".htmlentities($namzeil, ENT_QUOTES, "UTF-8");}
+		}
+	echo "\n\t</p></td></tr>\n\t</table>";
+
+	// Suche nach GrundbÃŒchern der Person
+	$sql ="SELECT g.gml_id AS gml_g, g.buchungsblattnummermitbuchstabenerweiterung as nr, b.bezeichnung AS beznam ";
+	$sql.="FROM alkis_beziehungen bpn ";
+	$sql.="JOIN ax_namensnummer n ON bpn.beziehung_von=n.gml_id ";
+	$sql.="JOIN alkis_beziehungen bng ON n.gml_id=bng.beziehung_von ";
+	$sql.="JOIN ax_buchungsblatt g ON bng.beziehung_zu=g.gml_id ";
+	$sql.="JOIN ax_buchungsblattbezirk b ON g.land = b.land AND g.bezirk = b.bezirk ";
+	$sql.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
+	$sql.="ORDER BY g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
+	$v=array($person, $linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Grundbuch</p>";
+		return;
+	}
+	$cnt = 0;
+	while($row = pg_fetch_array($res)) {
+		$gml=$row["gml_g"];
+		$beznam=$row["beznam"];
+		$nr=$row["nr"];
+		echo "\n<div class='gb'>";
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$gml."\")'>";
+				echo "\n\t\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='GB'>";
+			echo "\n\t</a> ";		
+			echo "\n\t".$beznam."<a title='Grundbuch' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gb=".$gml."&amp;person=".$person."'> Blatt ".$nr."&nbsp;</a>";
+		echo "\n</div>";
+		$cnt++;
+	}
+	if($cnt == 0){ 
+		echo "\n<p class='err'>Kein Grundbuch.</p>";
+	} elseif($cnt >= $linelimit) {
+		echo "\n<p>... und weitere</p>";
+	} elseif($cnt == 1){ // Eindeutig!
+		$gb=$gml; // dann Stufe 3 gleich nachschieben
+	}
+	return;
+}
+	
+function getFSbyGB($backlink) {
+// 3 =================================
+// FlurstÃŒcke zum gewÃ€hlten Grundbuch
+// ===================================
+	global $gkz, $gemeinde, $con, $name, $person, $gb, $scalefs, $auskpath, $epsg, $gfilter, $persfilter;
+	$linelimit=120;
+
+	if($backlink) {	
+		echo "\n\t<div class='back' title='zur&uuml;ck zur Person'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Eigentuemer.ico' width='16' height='16' alt='EIG'> ";
+			echo "\n\t<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person."'>";
+			echo "zur&uuml;ck</a><br>";		
+		echo "</div>";
+		echo "<div class='gb'>";
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gb."\")'>";
+				echo "\n\t\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='GB'>";
+			echo "\n\t</a> Grundbuch";
+		echo "</div>";	
+	}
+
+	// SQL-Bausteine vorbereiten
+	$sql1 ="SELECT s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
+	if($epsg == "25832") { // Transform nicht notwendig
+		$sql1.="st_x(st_centroid(f.wkb_geometry)) AS x, ";
+		$sql1.="st_y(st_centroid(f.wkb_geometry)) AS y, ";
+	} else {  
+		$sql1.="st_x(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
+		$sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y, ";			
+	}
+	$sql1.="g.gemarkungsnummer, g.bezeichnung ";
+   $sql1.="FROM alkis_beziehungen vbg ";
+	$sql1.="JOIN ax_buchungsstelle s1 ON vbg.beziehung_von = s1.gml_id "; 
+
+	// Zwischen-JOIN (zusÃ€tzlich nur bei zweiter Abfrage)
+	$sqlz ="JOIN alkis_beziehungen vss ON vss.beziehung_von = s1.gml_id ";
+	$sqlz.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu = s2.gml_id ";
+
+	$sqla1 ="JOIN alkis_beziehungen vfb ON s1.gml_id = vfb.beziehung_zu ";
+	$sqla2 ="JOIN alkis_beziehungen vfb ON s2.gml_id = vfb.beziehung_zu ";
+
+	$sql2.="JOIN ax_flurstueck f  ON vfb.beziehung_von = f.gml_id ";
+   $sql2.="JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ";
+
+	if ($persfilter and ($gfilter > 0)) {
+		$sql2.="JOIN gemeinde_gemarkung v ON g.land=v.land AND g.gemarkungsnummer=v.gemarkung ";
+	}
+
+	$sql2.="WHERE vbg.beziehung_zu= $1 AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' ";
+
+	if ($persfilter and ($gfilter > 0)) {
+		switch ($gfilter) {
+			case 1: // Einzelwert
+				$sql2.="AND v.gemeinde=".$gemeinde." "; break;
+			case 2: // Liste
+				$sql2.="AND v.gemeinde in (".$gemeinde.") "; break;
+		}
+	}
+	$sql2.="ORDER BY s1.laufendenummer, f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
+
+	// Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< Flurstck.
+	$sql=$sql1.$sqla1.$sql2; // Direkte Buchungen
+
+	$v=array($gb, $linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Buchung und Flurst&uuml;ck.</p>";
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		return;
+	}
+	$zfs1=0;
+	while($row = pg_fetch_array($res)) {	
+		$fs_gml=$row["gml_id"];
+		$bvnr=$row["lfd"];
+		if ($bvnr > 0) {$bvnr=str_pad($bvnr, 4, "0", STR_PAD_LEFT);} else {$bvnr="";}
+		$gmkg=$row["bezeichnung"];
+		$flur=$row["flurnummer"];
+		$fskenn=$row["zaehler"];
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
+		$x=$row["x"];
+		$y=$row["y"];
+		echo "\n<div class='fs'>";
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+				echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
+			echo "\n\t</a> ";	
+			echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
+					echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
+					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
+				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
+				echo "onmouseout='parent.parent.hideHighlight()'>";
+			echo $bvnr." ".$gmkg." ".$flur."-".$fskenn."</a>";
+		echo "\n</div>";
+		$zfs1++;
+	}
+
+	// Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
+	// buchungsStelle2 < an < buchungsStelle1
+	$sql=$sql1.$sqlz.$sqla2.$sql2; // Rechte an
+
+	$v=array($gb, $linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Recht an Buchung.</p>";
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		return;
+	}
+	$zfs2=0;
+	while($row = pg_fetch_array($res)) {	
+		$fs_gml=$row["gml_id"];
+		$bvnr=$row["lfd"];
+		if ($bvnr > 0) {$bvnr=str_pad($bvnr, 4, "0", STR_PAD_LEFT);} else {$bvnr="";}
+		$gmkg=$row["bezeichnung"];
+		$flur=$row["flurnummer"];
+		$fskenn=$row["zaehler"];
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
+		$x=$row["x"];
+		$y=$row["y"];
+		echo "\n<div class='fs'>";
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+				echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
+			echo "\n\t</a> ";	
+			echo "\n\tRecht an <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
+					echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
+					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
+				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
+				echo "onmouseout='parent.parent.hideHighlight()'>";
+			echo $bvnr." ".$gmkg." ".$flur."-".$fskenn."</a>";
+		echo "\n</div>";
+		$zfs2++;
+	}
+
+	if($zfs1 + $zfs2 == 0) { 
+		echo "\n<p class='err'>Kein Flurst&uuml;ck im berechtigten Bereich.</p>";
+	//	echo "\n<p class='hilfe'>Hinweis: Sonderf&auml;lle wie 'Erbbaurecht' sind noch nicht umgesetzt.</p>";
+	} elseif($zfs >= $linelimit) {
+		echo "\n<p>... und weitere</p>"; 
+	}
+	return;
+}
+
+// ===========
+// Start hier!
+// ===========
+// Parameter:  
+// 1. name   = Suche nach Namensanfang oder -bestandteil.
+// 2. person = gml_id der Person      -> Suche nach GrundbÃŒchern
+// 3. gb     = gml_id des Grundbuches -> Suche nach FlurstÃŒcken
+if(isset($epsg)) {
+	if ($debug >= 2) {echo "<p>aktueller EPSG='".$epsg."'</p>";} // aus MB
+	$epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);	
+} else {
+	if ($debug >= 1) {echo "<p class='err'>kein EPSG gesetzt</p>";}	
+	$epsg=$gui_epsg; // aus Conf
+}
+if ($debug >= 2) {echo "<p>Filter Gemeinde = ".$gemeinde."</p>";}
+if ($gemeinde == "") {
+	$gfilter = 0; // ungefiltert
+} elseif(strpos($gemeinde, ",") === false) {
+	$gfilter = 1; // Einzelwert
+} else {
+	$gfilter = 2; // Liste
+}
+
+// Welche Parameter?
+// 3. Stufe: FlurstÃŒcke zum Grundbuch
+if(isset($gb)) { // gml_id
+	// Das Programm hat sich selbst verlinkt aus einer Liste der GB zu einem EigentÃŒmer.
+	// Wenn Parameter mitgegeben wurden, kÃ¶nnen diese fÃŒr einen "Link zurÃŒck" verwendet werden.
+	getFSbyGB(true);
+} elseif(isset($person)) { // gml_id - 2. Stufe: GrundbÃŒcher zur Person
+	// Das Programm hat sich selbst verlinkt aus einer Liste der Personen zu einer Suchmaske.
+	getGBbyPerson(); 
+	if(isset($gb) ) { getFSbyGB(false);} // Es wurde nur EIN Grundbuch zu der Person gefunden.
+} elseif(isset($name)) { // Suchbegriff aus Form - 1. Stufe: Suche nach Name
+	getEigByName(); 
+	if(isset($person)) { getGBbyPerson();}
+} elseif ($debug >= 2) {
+	echo "\n<p>Parameter?</p>"; // Programmfehler
+}
+?>
+
+</body>
+</html>
Index: trunk/mapbender/http/nav/alkisnav_eig.htm
===================================================================
--- trunk/mapbender/http/nav/alkisnav_eig.htm	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav_eig.htm	(revision 216)
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<base target="_self">
+	<title>ALKIS-Suche Eigent&uuml;mer</title>
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<script type="text/javascript" language="JavaScript">
+		// Parameter fuer Mandant aus url lesen
+		// &gkz=150&gemeinde=40&test=ja
+		var parms = location.search.split("&");    // 0: "?gkz=150" 1: "gemeinde=40" 2: "test=ja"
+		var arr = parms[0].split("=", 2); // 0: "?gkz"  1: "150"
+		var gkz = "000";
+		if(arr[0] == "?gkz") {gkz = arr[1];}
+		var arr = parms[1].split("=", 2)
+		var gem = "0";
+		if(arr[0] == "gemeinde") {gem = arr[1];}
+		// aktueller EPSG-Code (Version 2.7)
+		function sendGuiEpsg () {
+			var ind = parent.parent.getMapObjIndexByName("mapframe1");
+			var epsg = parent.parent.mb_mapObj[ind].getSRS();
+			document.forms[0].epsg.value = epsg;
+		}
+		function validate(){
+			sendGuiEpsg();
+			document.forms[0].gkz.value = gkz;
+			document.forms[0].gemeinde.value = gem;
+		}
+	</script>
+</head>
+<body onload="javascript:validate();">
+
+<div id='tabs'>
+<ul>
+	<script type="text/javascript" language="JavaScript">
+		document.writeln("<li><a target='_self' href='alkisnav_adr.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Adresse</a></li>");
+		document.writeln("<li class='aktiveTab'>Name</a></li>");
+		document.writeln("<li><a target='_self' href='alkisnav_fls.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Flurst&uuml;ck</a></li>");
+		document.writeln("<li><a target='_self' href='alkisnav_grd.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Grundb.</a></li>");
+	</script>
+</ul>
+</div>
+
+<form class='nav' name='EigGazetteerFrame' onsubmit='return validate()' target='EigResultFrame' action='alkisnav_eig.php'>
+	<input name='gkz' type='hidden'>
+	<input name='gemeinde' type='hidden'>
+	<input name='epsg' type='hidden'>
+	<input class='textfield' name='name' type='text' size='22' title='Eigent&uuml;mername (Anfang)'>
+	<input class='sbutton' type='submit' value='ok'>
+	<br>
+</form>
+
+<iframe name="EigResultFrame" src="blank_eig.html" class='ResultFrame'></iframe>
+
+</body>
+</html>
Index: trunk/mapbender/http/nav/alkisnav_adr.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_adr.php	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav_adr.php	(revision 216)
@@ -0,0 +1,354 @@
+<?php
+/* Version vom 
+	2011-04-11 epsg in Link, transform nur wenn notwendig
+	2011-07-25 PostNAS 0.5/0.6 Versionen unterscheiden
+	2011-10-24 Nach Pos-Klick Highlight erneuern statt hideHighlight
+	2011-12-09 Sonderfall PostNAS 0.5 raus,
+	2012-12-03 A.E.: Ausgabe von Hausnr ohne Gebaeude
+	2013-01-15 F.J.: HsNr ohne GebÃ€ude auf NRW/krz-Daten anpassen
+
+	ToDo:
+	-  auskommentierte Variante mit "subquery" entfernen
+	-	Eingabe aus "Balken" von Buchauskunft "Lage" zulassen: Numerisch: Gem-Str-Haus-lfd
+		Analog zur Zerlegung des FS-Kennz in _fls
+	-	Mouse-Over in StraÃenliste soll Position zeigen.
+		Dazu in der DB eine Tabelle mit Koordinate zum StraÃenschlÃŒssel aufbauen. 
+*/
+import_request_variables("G");
+include("../../conf/alkisnav_conf.php");
+$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
+$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$$dbname.$dbvers.$gkz);
+?>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS-Suche Adressen</title>
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+</head>
+<body>
+<?php
+
+function suchStrName() {
+	// Strassen nach Name(-nsanfang)
+	global $con, $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug;
+	$linelimit=120;  // -> in die Conf?
+	preg_match("/^(\D+)(\d*)(\D*)/",$street,$matches); # 4 matches name/nr/zusatz echo "match: ".$matches[1].",".$matches[2].",".$matches[3];
+	$matches[1] = preg_replace("/strasse/i","str", $matches[1]);
+	$matches[1] = preg_replace("/str\./i","str", $matches[1]); 
+	if(preg_match("/\*/",$matches[1])){
+		$match=trim(preg_replace("/\*/i","%", strtoupper($matches[1])));
+	} else {
+		$match=trim($matches[1])."%";
+	}
+	$sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage ";
+	$sql.="FROM ax_lagebezeichnungkatalogeintrag as k ";
+	$sql.="JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde ";
+	$sql.="WHERE k.bezeichnung ILIKE $1 ";
+	switch ($gfilter) {
+		case 1: // Einzelwert
+			$sql.="AND k.gemeinde=".$gemeinde." ";
+			break;
+		case 2: // Liste
+			$sql.="AND k.gemeinde in (".$gemeinde.") ";
+			break;
+		default: // kein Filter
+			break;
+	}
+	$sql.="ORDER BY k.bezeichnung, g.bezeichnung, k.lage LIMIT $2 ;";
+ 	$v=array($match,$linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {return "\n<p class='err'>Fehler bei Name</p>";}
+	$cnt = 0;
+	while($row = pg_fetch_array($res)) {
+		$sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");		
+		$gkey=$row["schluesselgesamt"]; // Land-Kreis-Gem-Strasse
+		$gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8");
+		$skey=$row["lage"];
+		echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>";
+			if (trim($skey, "0..9") == "") { // Integer
+				echo "<a class='stl' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."'>".$sname."</a>";
+			} else { // Klassifizierung?
+				echo $sname; // nicht brauchbar fuer ax_lagebezeichnungmithausnummer.lage (Integer)
+			}	
+			switch ($gfilter) {
+				case 0: // Kein Filter
+					echo " in ".$gemname;
+					break;
+				case 2: // Liste
+					echo " in ".$gemname;
+					break;
+				default: // Einzelwert
+					break;
+			}			
+		echo "</div>";
+		$cnt++;
+	}
+	if($cnt == 0) {
+		echo "<p>Keine Stra&szlig;e.</p>";
+	} elseif($cnt == 1) { // Eindeutig
+		$str_schl=$gkey; // dann gleich weiter
+	} elseif($cnt >= $linelimit) {
+		echo "<p>.. und weitere</p>";			
+	}	
+	return;
+}
+
+function suchStrKey() {
+	// Strassen nach Strassen-Schluessel
+	global $con, $street, $scalestr, $str_schl, $gkz, $gemeinde, $epsg, $gfilter, $debug;
+	$linelimit=50;
+	if(preg_match("/\*/",$street)) {
+		$match=trim(preg_replace("/\*/i","%",$street));
+		// -> Anwender muss fuehrende Nullen eingeben oder fuehrende Wildcard
+	} else {
+		$match=str_pad($street, 5, "0", STR_PAD_LEFT); // "Wie eine Zahl" verarbeiten 
+	}
+   //if ($debug >= 2) {echo "<p>sql-Match='".$match."'</p>";}
+	$sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.schluesselgesamt, k.lage ";
+	$sql.="FROM ax_lagebezeichnungkatalogeintrag as k ";
+	$sql.="JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde ";
+	$sql.="WHERE k.lage LIKE $1 ";
+
+	switch ($gfilter) {
+		case 1: // Einzelwert
+			$sql.="AND k.gemeinde=".$gemeinde." ";
+			break;
+		case 2: // Liste
+			$sql.="AND k.gemeinde in (".$gemeinde.") ";
+			break;
+		default: // kein Filter
+			break;
+	}
+
+	$sql.="ORDER BY k.lage, k.bezeichnung LIMIT $2 ;";
+ 	$v=array($match,$linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {return "\n<p class='err'>Fehler bei Schl&uuml;ssel</p>";}
+	$cnt = 0;
+	while($row = pg_fetch_array($res)) {
+		$sname=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");		
+		$gkey=$row["schluesselgesamt"];
+		$gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8");
+		$skey=$row["lage"];
+		echo "\n\t<div class='stl' title='Stra&szlig;enschl&uuml;ssel ".$skey."'>";
+			echo $skey." <a class='st' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."' title='".$gemname."'>".$sname;
+			echo "</a>";
+
+			switch ($gfilter) {
+				case 0: // Kein Filter
+					echo " in ".$gemname;
+					break;
+				case 2: // Liste
+					echo " in ".$gemname;
+					break;
+				default: // Einzelwert
+					break;
+			}
+		echo "</div>";
+		$cnt++;
+	}
+	if($cnt == 0) {
+		echo "\n<p>Keine Stra&szlig;e mit Schl&uuml;ssel ".$match."</p>";
+	} elseif($cnt == 1) { // Eindeutig
+		$str_schl=$gkey; // dann gleich weiter
+	} elseif($cnt >= $linelimit) {
+		echo "\n<p>.. und weitere</p>";			
+	} else {
+		echo "\n<p class='hilfe'>".$cnt." Stra&szlig;en</p>";	
+	}	
+	return;
+}
+
+function suchHausZurStr($showParent){
+	// Haeuser zu einer Strasse
+	global $con, $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $hausnummernohnegebaeude, $debug;
+	// Strasse zum Strassenschluessel
+	$sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage ";
+	$sql.="FROM ax_lagebezeichnungkatalogeintrag as k ";
+	$sql.="JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde ";
+	$sql.="WHERE k.schluesselgesamt = $1 LIMIT 1"; 
+  	$v=array($str_schl);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if($row = pg_fetch_array($res)) { // Strassenschluessel gefunden
+		$sname=$row["bezeichnung"];
+		$land =$row["land"];
+		$regb =$row["regierungsbezirk"];
+		$kreis=$row["kreis"];
+		$gemnd=$row["gemeinde"];
+		$gemname=htmlentities($row["gemname"], ENT_QUOTES, "UTF-8");
+		$nr=$row["lage"];
+		if ($showParent) {
+			// eine Koordinate zur Strasse besorgen
+			// ax_Flurstueck  >zeigtAuf>  ax_LagebezeichnungOhneHausnummer
+			$sqlko ="SELECT ";
+			if($epsg == "25832") { // Transform nicht notwendig
+				$sqlko.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
+				$sqlko.="st_y(st_Centroid(f.wkb_geometry)) AS y ";
+			} else {
+				$sqlko.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
+				$sqlko.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";
+			}
+			$sqlko.="FROM ax_lagebezeichnungohnehausnummer o ";
+			$sqlko.="JOIN alkis_beziehungen v ON o.gml_id=v.beziehung_zu "; 
+			$sqlko.="JOIN ax_flurstueck f ON v.beziehung_von=f.gml_id ";
+			$sqlko.="WHERE o.land= $1 AND o.regierungsbezirk= $2 AND o.kreis= $3 AND o.gemeinde= $4 AND o.lage= $5 ";	
+			$sqlko.="AND v.beziehungsart='zeigtAuf' LIMIT 1;"; // die erstbeste Koordinate
+			$v=array($land,$regb,$kreis,$gemnd,$nr);
+			$resko=pg_prepare("", $sqlko);
+			$resko=pg_execute("", $v);
+			if ($resko) {
+				$rowko=pg_fetch_array($resko); 
+				$x=$rowko["x"];
+				$y=$rowko["y"];
+			} else {		
+				echo "\n<p class='err'>Fehler bei Koordinate zur Stra&szlig;e</p>";
+			}
+			echo "\n<div class='stu'>";		
+			if ($x > 0) { // Koord. bekommen?
+				echo "\n\t<a title='Positionieren 1:".$scalestr."' href='javascript:"; // mit Link
+						echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalestr."); ";
+						echo "parent.parent.showHighlight(".$x.",".$y."); ";
+						echo "document.location.href=\"".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$str_schl."\"' ";
+					echo "\n\t\tonmouseover='parent.parent.showHighlight(" .$x. "," .$y. ")' ";
+					echo "\n\t\tonmouseout='parent.parent.hideHighlight()'";
+				echo ">\n\t\t".$sname." (".$nr.")\n\t</a>";
+			} else { // keine Koord. gefunden
+				echo $sname." (".$nr.")"; // nur Anzeige, ohne Link
+			}
+			switch ($gfilter) {
+				case 0: // Kein Filter
+					echo " in ".$gemname;
+					break;
+				case 2: // Liste
+					echo " in ".$gemname;
+					break;
+				default: // Einzelwert
+					break;
+			}			
+			echo "\n</div>";
+		}
+		echo "\n<hr>";
+
+		// Haeuser zum Strassenschluessel
+	//	$sql="SELECT replace(h.hausnummer,' ','') AS hsnr, subq.geb, "; // Subquery
+		$sql="SELECT replace(h.hausnummer,' ','') AS hsnr, ";
+		if($epsg == "25832") { // Transform nicht notwendig
+			$sql.="st_x(p.wkb_geometry) AS x, ";
+			$sql.="st_y(p.wkb_geometry) AS y ";		
+		} else {  
+			$sql.="st_x(st_transform(p.wkb_geometry,".$epsg.")) AS x, ";
+			$sql.="st_y(st_transform(p.wkb_geometry,".$epsg.")) AS y ";		
+		}
+
+/* Version mit // Subquery
+Liefert Informationen ÃŒber GebÃ€ude zur Hausnummer. LÃ€uft aber spÃŒrbar langsamer.
+
+		$sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von ";
+		$sql.="JOIN ax_lagebezeichnungmithausnummer h ON v.beziehung_zu = h.gml_id ";
+		$sql.="LEFT JOIN (SELECT b.beziehung_zu AS zu, g.gml_id AS geb FROM alkis_beziehungen b ";
+		$sql.="JOIN ax_gebaeude g ON b.beziehung_von=g.gml_id WHERE b.beziehungsart='zeigtAuf') subq ";
+		$sql.="ON h.gml_id = subq.zu WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' ";
+		$sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 ";
+		$sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);";
+*/
+		// Version ohne Subquery
+		$sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von ";
+		$sql.="JOIN ax_lagebezeichnungmithausnummer h ON v.beziehung_zu = h.gml_id ";
+		$sql.="WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' ";
+		$sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 ";
+		$sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);";
+
+ 		$v=array($land,$regb,$kreis,$gemnd,$nr);
+		$resh=pg_prepare("", $sql);
+		$resh=pg_execute("", $v);
+		$cnt=0;
+		$count=0;
+		echo "\n<table>";
+		while($rowh = pg_fetch_array($resh)) { // mehrere HsNr je Zeile
+			if($count == 0){echo "\n<tr>";}	
+			$hsnr=$rowh["hsnr"];
+		//	$geb=$rowh["geb"]; // Subquery
+			$x=$rowh["x"];
+			$y=$rowh["y"];
+		/* // Subquery
+			if ($geb == "") { // kein GebÃ€ude
+				$cls=" class='hsnro'";
+				$ttl="kein Haus";
+			} else {
+				$cls="";
+				$ttl="Haus ".$geb;
+			}
+		*/		
+			echo "\n\t<td class='hsnr'>";
+			//	echo "<a".$cls." href='";
+				echo "<a href='";
+					echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); ";
+					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
+				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
+				echo "onmouseout='parent.parent.hideHighlight()";
+			//	echo "' title='".$ttl."'>".$hsnr."</a>"; // Subquery
+				echo "'>".$hsnr."</a>";
+			echo "</td>";
+			$cnt++;
+			$count++;
+			if($count == 6) {
+				echo "\n</tr>";
+				$count = 0;
+			}
+		}
+		if($count > 0) {echo "\n</tr>";}
+		echo "\n</table>";
+		echo "\n<p class='hilfe'>".$cnt." Hausnummern</p>";
+	} else {
+		echo "\n<p class='err'>Keine Stra&szlig;e.</p>";
+	}
+	return;
+}
+// ===========
+// Start hier!
+// ===========
+if(isset($epsg)) {
+	if ($debug >= 2) {echo "\n<p>aktueller EPSG='".$epsg."'</p>";} // aus MB
+	$epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);	
+} else {
+	if ($debug >= 1) {echo "\n<p class='err'>kein EPSG gesetzt</p>";}	
+	$epsg=$gui_epsg; // aus Conf
+}
+if ($debug >= 2) {
+	echo "<p>Filter Gemeinde = ".$gemeinde."</p>";
+}
+if ($gemeinde == "") {
+	$gfilter = 0; // ungefiltert
+} elseif(strpos($gemeinde, ",") === false) {
+	$gfilter = 1; // Einzelwert
+} else {
+	$gfilter = 2; // Liste
+}
+if (isset($str_schl)) { // aus Link
+	if ($debug >= 2) {echo "\n<p>Link Strassenschluessel '".$str_schl."'</p>";}
+	suchHausZurStr(true);
+} elseif(isset($street)) { // Eingabe in Form
+	if (trim($street, "*,0..9") == "") { // Zahl mit Wildcard
+		if ($debug >= 2) {echo "\n<p>Suche Key='".$street."'</p>";}
+		suchStrKey(); // Suche nach Schluessel
+	} else {
+		if ($debug >= 2) {echo "\n<p>Suche Name='".$street."'</p>";}
+		suchStrName(); // Suche nach Name
+	}
+	if(isset($str_schl)) { // Eindeutiges Ergebnis
+		if ($debug >= 2) {echo "\n<p>weitere Suche Haus zu ='".$str_schl."'</p>";}
+		suchHausZurStr(false);
+	}
+}
+?>
+
+</body>
+</html>
Index: trunk/mapbender/http/nav/alkisnav_adr.htm
===================================================================
--- trunk/mapbender/http/nav/alkisnav_adr.htm	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav_adr.htm	(revision 216)
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<base target="_self">
+	<title>ALKIS-Suche Adressen</title>
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<script type="text/javascript" language="JavaScript">
+		// Parameter fuer Mandant aus url lesen
+		// &gkz=150&gemeinde=40&test=ja
+		var parms = location.search.split("&");    // 0: "?gkz=150" 1: "gemeinde=40" 2: "test=ja"
+		var arr = parms[0].split("=", 2); // 0: "?gkz"  1: "150"
+		var gkz = "000";
+		if(arr[0] == "?gkz") {gkz = arr[1];}
+		var arr = parms[1].split("=", 2)
+		var gem = "0";
+		if(arr[0] == "gemeinde") {gem = arr[1];}
+		// aktueller EPSG-Code
+		function sendGuiEpsg () {
+			var ind = parent.parent.getMapObjIndexByName("mapframe1");
+			var epsg = parent.parent.mb_mapObj[ind].getSRS();
+			document.forms[0].epsg.value = epsg;
+		}
+		function validate(){
+			sendGuiEpsg();
+			document.forms[0].gkz.value = gkz;
+			document.forms[0].gemeinde.value = gem;
+		}
+	</script>
+</head>
+<body onload="javascript:validate();">
+
+<div id='tabs'>
+<ul>
+	<script type="text/javascript" language="JavaScript">
+		document.writeln("<li class='aktiveTab'>Adresse</li>");
+		document.writeln("<li><a target='_self' href='alkisnav_eig.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Name</a></li>");
+		document.writeln("<li><a target='_self' href='alkisnav_fls.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Flurst&uuml;ck</a></li>");
+		document.writeln("<li><a target='_self' href='alkisnav_grd.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Grundb.</a></li>");
+	</script>
+</ul>
+</div>
+
+<form class='nav' name='AdrGazetteerFrame' onsubmit='return validate()' target='AdrResultFrame' action='alkisnav_adr.php'>
+	<input name='gkz' type='hidden'>
+	<input name='gemeinde' type='hidden' >
+	<input name='epsg' type='hidden'>
+	<input class='textfield' name='street' type='text' size='22' title='Stra&szlig;enname (Anfang)'>
+	<input class='sbutton' type='submit' value='ok'>
+	<br>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='A'; document.forms[0].submit();">A</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='B'; document.forms[0].submit();">B</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='C'; document.forms[0].submit();">C</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='D'; document.forms[0].submit();">D</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='E'; document.forms[0].submit();">E</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='F'; document.forms[0].submit();">F</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='G'; document.forms[0].submit();">G</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='H'; document.forms[0].submit();">H</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='I'; document.forms[0].submit();">I</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='J'; document.forms[0].submit();">J</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='K'; document.forms[0].submit();">K</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='L'; document.forms[0].submit();">L</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='M'; document.forms[0].submit();">M</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='N'; document.forms[0].submit();">N</span>
+	<br>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='O'; document.forms[0].submit();">O</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='P'; document.forms[0].submit();">P</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='Q'; document.forms[0].submit();">Q</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='R'; document.forms[0].submit();">R</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='S'; document.forms[0].submit();">S</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='T'; document.forms[0].submit();">T</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='U'; document.forms[0].submit();">U</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='V'; document.forms[0].submit();">V</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='W'; document.forms[0].submit();">W</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='X'; document.forms[0].submit();">X</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='Y'; document.forms[0].submit();">Y</span>
+	<span class="letter" onclick="sendGuiEpsg(); document.forms[0].street.value='Z'; document.forms[0].submit();">Z</span>
+</form>
+
+<iframe name="AdrResultFrame" src="blank_adr.html" class='ResultFrame'></iframe>
+
+</body>
+</html>
Index: trunk/mapbender/http/nav/blank_grd.html
===================================================================
--- trunk/mapbender/http/nav/blank_grd.html	(revision 216)
+++ trunk/mapbender/http/nav/blank_grd.html	(revision 216)
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<title></title>
+</head>
+<body>
+<p class='start'>Suche nach Grundbuchblatt in ALKIS:<br><br>
+Schritt 1: Suche Grundbuch-Bezirk<br><br>
+Schritt 2: Auswahl Grundbuch-Blatt<br><br>
+Schritt 3: Auswahl Grundst&uuml;ck (Buchungsstelle, BVNR)<br><br>
+Schritt 4: Auswahl Flurst&uuml;ck</p>
+</body>
+</html>
Index: trunk/mapbender/http/nav/alkisnav_grd.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_grd.php	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav_grd.php	(revision 216)
@@ -0,0 +1,597 @@
+<?php
+/* Version vom
+	24.10.2011 Nach Pos-Klick Highlight erneuern statt hideHighlight
+	17.11.2011 Nachweis-Links ÃŒber javascript im neuen Hochformat-Fenster
+	14.12.2011 "window.open(..,width=680"
+	16.01.2012 Blattnummer in 2 Varianten suchen
+	17.01.2012 Blattnummer ohne Buchstabe in 3 Varianten suchen
+*/
+import_request_variables("G");
+include("../../conf/alkisnav_conf.php");
+$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
+$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname.$dbvers.$gkz);
+?>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS-Suche Grundbuch</title>
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<script type="text/javascript">
+		function imFenster(dieURL) {
+			var link = encodeURI(dieURL);
+			window.open(link,'','left=10,top=10,width=680,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
+		}
+	</script>
+</head>
+<body>
+
+<?php
+function is_ne_zahl($wert) {
+	// Prueft, ob ein Wert ausschlieÃlich aus den Zahlen 0 bis 9 besteht
+	if (trim($wert, "0..9") == "") {return true;} else {return false;}
+}
+
+function ZerlegungGBKennz($gbkennz) {
+	// Das eingegebene Grundbuch-Kennzeichen auseinander nehmen (gggg-999999z-BVNR)
+	// Return: 9=Fehler, 0=Listen alle Bezirke 1=Such Bezirk-Name
+	//         2=Such Bezirk-Nummer $zgbbez, 3=Such Blatt $zblatt, 4=Such BVNR $zbvnr
+	global $debug, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr;	
+	$arr=explode("-", $gbkennz, 3);
+	$zgbbez=trim($arr[0]);
+	$zblatt=trim($arr[1]);
+	$zbvnr=trim($arr[2]);
+	if ($zgbbez == "") { // keine Eingabe
+		return 0; // Amtsgerichte oder Bezirke listen
+	} elseif ( ! is_ne_zahl($zgbbez)) { // Alphabetische Eingabe
+		return 1; // Such Bezirk-NAME
+	} elseif ($zblatt == "") {
+		return 2; // Such Bezirk-NUMMER
+	} else  { // Format von BlattNr pruefen
+	//'19'       linksbÃŒndig
+	//'000019 '  gefÃŒllt 6 + blank
+	//'000019A'  .. mit Zusatzbuchstabe
+	//'0300001'  gefÃŒllt 7, bei Blattart 5000 "fiktives Blatt"
+		$len=strlen($zblatt);
+		if ($len > 0 AND $len < 8) {		
+			if (trim($zblatt, "0..9 ") == "") { // Normalfall: nur Zahlen (und Blank))
+				$zblattn= rtrim(ltrim($zblatt, "0"), " ");
+				$zblattz="";
+			} else { // Sonderfall: Zusatz-Buchstabe am Ende
+				$zblattn=substr($zblatt,0,$len-1);
+				$zblattz=strtoupper(substr($zblatt,$len-1,1)); 
+				if ((trim($zblattn, "0..9") == "") and (trim($zblattz, "A..Z") == "")) {
+					$zblattn= ltrim($zblattn, "0"); // ohne fuehrende Nullen
+				} else {
+					echo "<p class='err>Format 'Blatt': bis zu 6 Zahlen und ggf. ein Buchstabe</p>";	
+					return 9;
+				}
+			}
+			if ($zbvnr == "") {
+				return 3; // Such BLATT
+			} elseif (is_ne_zahl($zbvnr)) {		
+				// $zbvnr=ltrim($zbvnr,"0"); // DB-Format ist integer
+				// Vorsicht, Wert "0" ist moeglich und gueltig
+				return 4; // Such Grundstueck
+			} else {
+				echo "<p class='err>Die Buchungsstelle (BVNR) '".$zbvnr."' ist nicht numerisch</p>";
+				return 9;
+			}
+		} else {
+			echo "<p class='err>Das Grundbuch-Blatt '".$zblatt."' ist ung&uuml;ltig.</p>";
+			return 9;
+		}
+	}
+}
+
+function ListAG($liste_ag) {
+	// Amtsgerichte (Grundbuch) auflisten, dazu als Filter eine AG-Liste aus conf
+	global $con, $gkz, $gemeinde, $epsg, $debug, $gbkennz;
+	$linelimit=40;
+	$sql ="SELECT a.stelle, a.bezeichnung AS ag FROM ax_dienststelle a ";
+	$sql.="WHERE a.stelle IN (".$liste_ag.") AND a.stellenart = 1000 "; // Amtsgerichte aus Liste
+	$sql.="ORDER BY a.bezeichnung LIMIT $1 ;";
+	$res = pg_prepare("", $sql);
+	$res = pg_execute("", array($linelimit));
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Amtsgerichte</p>";
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		return 0;
+	}
+	$cnt = 0;
+	while($row = pg_fetch_array($res)) { // Loop AG 
+		$anr=$row["stelle"];
+		$ag=htmlentities($row["ag"], ENT_QUOTES, "UTF-8");		
+		echo "\n<div class='ga' title='Amtsgricht'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Gericht.ico' width='16' height='16' alt='Amtsgericht'> ";
+			echo "AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>";		
+				echo $ag."</a> (".$anr.")";
+		echo "\n</div>";
+		$cnt++;
+	}
+	if($cnt == 0){ // falsch configuriert!
+		echo "\n<p class='err'>Kein Amtsgericht aus Liste ".$$liste_ag.".</p>";
+	} elseif ($cnt >= $linelimit) {
+		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+	}
+	return 0;
+}
+
+function ListGBBez($liste_ag, $mit_ag) {
+	// Grundbuch-Bezirke auflisten.
+	global $con, $gkz, $gemeinde, $epsg, $debug, $gbkennz;
+	$linelimit=70;
+	$sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g ";
+	$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle ";
+	$sql.="WHERE a.stelle IN (".$liste_ag.") AND a.stellenart = 1000 "; // Amtsgericht aus Liste
+	$sql.="ORDER BY g.bezeichnung LIMIT $1 ;";
+	$res = pg_prepare("", $sql);
+	$res = pg_execute("", array($linelimit));
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Grundbuch-Bezirk</p>";
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		return 0;
+	}
+	$cnt = 0;
+	while($row = pg_fetch_array($res)) { // Loop  B E Z I R K
+		$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+		$gnr=$row["bezirk"];
+		$ag=htmlentities($row["ag"], ENT_QUOTES, "UTF-8");
+		$anr=$row["stelle"];
+		echo "\n<div class='gk' title='GB-Bezirk'>";
+			echo "\n\t\t<img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Gemkg'> ";
+			echo "Bezirk <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$gnr."'>";		
+				echo $gnam."</a> (".$gnr.")";
+				if ($mit_ag) {
+					echo " AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>".$ag."</a>";
+				}
+		echo "\n</div>";
+		$cnt++;
+	}
+	if($cnt == 0){ // falsch configuriert
+		echo "\n<p class='err'>Kein Grundbuchbezirk zu den Amtsgerichten ".$liste_ag.".</p>";
+	} elseif ($cnt >= $linelimit) {
+		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+	}
+	return 0;
+}
+
+function SuchGBBezName() {
+	// Grundbuch-Bezirk suchen nach Name(-nsanfang)
+	global $con, $gkz, $gemeinde, $debug, $gbkennz;
+	$linelimit=50;
+	$sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g ";
+	$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle ";
+	$sql.="WHERE g.bezeichnung ILIKE $1 "; //	"AND a.stellenart=1000 " // Amtsgericht
+	$sql.="ORDER BY g.bezeichnung LIMIT $2 ;";
+	if ( $gbkennz == "") {
+		$match = "%";
+	} else {	
+		if(preg_match("/\*/",$gbkennz)){
+			$match = trim(preg_replace("/\*/i","%", strtoupper($gbkennz)));
+		} else {
+			$match = trim($gbkennz)."%";
+		}	
+	}
+	$v = array($match, $linelimit);
+	$res = pg_prepare("", $sql);
+	$res = pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Grundbuch-Bezirk</p>";
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		return 0;
+	}
+	$cnt = 0;
+	// Loop  B E Z I R K
+	while($row = pg_fetch_array($res)) {
+		$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+		$gnr=$row["bezirk"];
+		$ag=htmlentities($row["ag"], ENT_QUOTES, "UTF-8");		
+		$anr=$row["stelle"];
+		echo "\n<div class='gk' title='GB-Bezirk'>";
+			echo "\n\t\t<img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Gemkg'> ";
+			echo "Bezirk <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$gnr."'>";		
+				echo $gnam."</a> (".$gnr.")";
+				echo " AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>".$ag."</a>";
+		echo "\n</div>";
+		$cnt++;
+	}
+	if($cnt == 0){ 
+		echo "\n<p class='err'>Kein Grundbuchbezirk.</p>";
+	} elseif ($cnt >= $linelimit) {
+		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+	} elseif ($cnt == 1) {
+		return $gnr; // Wenn eindeutig, gleich weiter
+	}
+	return 0;
+}
+ 
+function EinBezirk($showParent) {
+	// Kennzeichen bestehend nur aus GB-Bezirk-SchlÃŒssel wurde eingegeben
+	global $con, $gkz, $gemeinde, $epsg, $debug, $zgbbez, $auskpath;
+	$linelimit=250; // max. Blatt je Bezirk
+	// Dies linelimit ist nicht ausreichend fuer alle Blaetter eines Bezirks, aber ...
+	// Wenn man die Blatt-Nr nicht kennt, kommt man hier sowieso nicht weiter.
+	// Es nutzt also nichts, hier Tausende Nummern aufzulisten.
+	if ($showParent) {
+		$sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezeichnung FROM ax_buchungsblattbezirk g ";
+		$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle ";
+		$sql.="WHERE g.bezirk= $1 ;";
+		$v=array($zgbbez);
+		$res=pg_prepare("", $sql);
+		$res=pg_execute("", $v);
+		if (!$res) {
+			echo "\n<p class='err'>Fehler bei Brundbuchbezirk.</p>";
+			if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		}
+		$zgmk=0;
+		while($row = pg_fetch_array($res)) {	
+			$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+			$gnr=$row["bezirk"];
+			$ag=htmlentities($row["ag"], ENT_QUOTES, "UTF-8");	
+			$anr=$row["stelle"];
+			$zgmk++;
+		}
+		if ($zgmk == 0) {
+			echo "\n<div class='gk' title='Grundbuchbezirk'>";
+				echo "\n\t\t<p class='err'><img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Bez.'>";
+					echo  " Bezirk ".$zgbbez." ist unbekannt.</p>";
+			echo "\n</div>";
+			return;
+		}
+
+		// AG-Knoten davor setzen
+		echo "\n<div class='ga' title='Amtsgricht'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Gericht.ico' width='16' height='16' alt='Amtsgericht'> ";
+			echo "AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>";		
+				echo $ag."</a> (".$anr.")";
+		echo "\n</div>";
+		echo "\n<div class='gk' title='GB-Bezirk'>";
+			echo "\n\t\t<img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Bez.'> ";
+			echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$zgbbez."'>";		
+			echo $gnam."</a> (".$zgbbez.")";
+			// alternativ AG-Link hinter dem Bezirk
+		//	echo " des AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>".$ag."</a>";			
+		echo "\n</div>";
+	}
+	$sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b ";
+	$sql.="WHERE b.bezirk= $1 ORDER BY b.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
+	$v=array($zgbbez, $linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Bezirk.</p>";
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+	}
+	$cntbl=0; // Counter Blatt/Bezirk
+	// Loop  B L A T T	
+	while($row = pg_fetch_array($res)) {	
+		$blatt=$row["blatt"];
+		$blattd=ltrim($blatt, "0");
+		$gml=$row["gml_id"];
+		echo "\n<div class='gb' title='GB-Blatt'>";
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml."\")'>";
+				echo "\n\t\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='Blatt'>";
+			echo "\n\t</a> ";
+			echo "Blatt <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gblatt=".$gml."&amp;gbkennz=".$zgbbez."-".$blatt."'>&nbsp;".$blattd."&nbsp;</a>";
+		echo "\n</div>";
+		$cntbl++;
+	}
+	if($cntbl == 0) { 
+		echo "\n<p class='err'>Kein Blatt im Bezirk.</p>";
+	} else {
+		if($cntbl >= $linelimit) {
+			echo "\n<p>... und weitere</p>";
+			echo "\n<p>Geben sie ein: '".$zgbbez."-999A'<br>wobei '999A' = gesuchtes GB-Blatt</p>";
+		}
+	}
+	return;
+}
+
+function gml_blatt() {
+	// Kennzeichen "Bezirk + Blatt" eingegeben. Dazu die gml_id des Blattes ermitteln.
+	global $con, $gkz, $debug, $zgbbez, $zblatt, $zblattn, $zblattz;
+	$sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b "; 
+	$sql.="WHERE b.bezirk= $1 AND b.buchungsblattnummermitbuchstabenerweiterung ";
+
+	if ($zblattz == "") { // Ohne Buchstabenerweiterung: Formate '123','000123 ','0000123'
+		$sql.="IN ('".$zblattn."','".str_pad($zblattn, 6, "0", STR_PAD_LEFT)." ','".str_pad($zblattn, 7, "0", STR_PAD_LEFT)."');";
+	} else { // Mit Buchstabenerweiterung: '000123A'
+		$sql.="='".str_pad($zblattn, 6, "0", STR_PAD_LEFT).$zblattz."';";
+	}
+	$v=array($zgbbez);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Blatt (Kennzeichen).</p>";
+		return;
+	}
+	$cntbl=0; // Counter Blatt
+	while($row = pg_fetch_array($res)) {	
+		$bl_gml=$row["gml_id"];
+		$zblatt=$row["blatt"]; // das tatsaechliche Format (mit/ohne fuehrende 0)
+		$cntbl++;
+	}
+	if($cntbl == 0) { 
+		echo "\n<p class='err'>Grundbuchblatt '".$zgbbez."-".$zblatt."' nicht gefunden.</p>";
+	} elseif($cntbl == 1) {
+		return $bl_gml;
+	}
+	return;
+}
+
+function EinBlatt($showParent) {
+	// Kennzeichen Bezirk + Blatt wurde eingegeben
+	global $con, $gkz, $debug, $gemeinde, $epsg, $auskpath, $zgbbez, $zblatt, $zblattn, $zblattz, $gblatt, $zbvnr;
+
+	if ($showParent) {	
+		echo "\n<div class='gk' title='GB-Bezirk'>";
+			echo "\n\t\t<img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Bez.'> ";
+			echo "Bezirk <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$zgbbez."'>";		
+			echo $zgbbez."</a>";
+			// Key ist bekannt. Sollte man sich die Muehe machen, Namen und Amtsgericht zu ermitteln?
+		echo "\n</div>";
+		echo "\n<div class='gb' title='GB-Blatt'>";
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gblatt."\")'>";
+				echo "\n\t\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='Blatt'>";
+			echo "\n\t</a> ";
+			echo "Blatt <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gblatt=".$gblatt."&amp;gbkennz=".$zgbbez."-".$zblatt."'>&nbsp;".$zblattn.$zblattz."&nbsp;</a>";
+		echo "\n</div>";
+	}
+	// Blatt ->  B u c h u n g s s t e l l e
+	$sql ="SELECT s.gml_id, s.laufendenummer AS lfd FROM ax_buchungsstelle s ";
+	$sql.="JOIN alkis_beziehungen v ON s.gml_id=v.beziehung_von "; 
+	$sql.="JOIN ax_buchungsblatt b ON v.beziehung_zu=b.gml_id ";
+	$sql.="WHERE v.beziehungsart='istBestandteilVon' AND b.gml_id= $1 ORDER BY s.laufendenummer;";
+	// +++ Buchungen ohne FLST weglassen?
+	// +++ Counter FLST ausgeben, Buchungen mit 0 weglassen 
+	$v=array($gblatt);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Blatt.</p>";
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+	}
+	$cntbu=0; // Counter Buchung/Blatt
+	while($row = pg_fetch_array($res)) {	
+		$bs_gml=$row["gml_id"];		
+		$lfd=$row["lfd"];
+		echo "\n<div class='gs'>";
+			echo "\n\t\t<img class='nwlink' title='Grundst&uuml;ck' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
+			echo "Buchung <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbuchung=".$bs_gml."&amp;gbkennz=".$zgbbez."-".$zblatt."-".$lfd."'>&nbsp;".$lfd."&nbsp;</a>";
+		echo "\n</div>";
+		$cntbu++;
+	}
+	if($cntbu == 0) { 
+		echo "\n<p class='err'>Keine Buchung gefunden.</p>";
+	} elseif($cntbu == 1) {
+		$zbvnr=$lfd; // mit dieser BVNR gleich weiter machen
+		// Blatt zerteilen (benoetigt in gml_buchungsstelle)
+		if (trim($zblatt, "0..9") == "") { // Normalfall: nur Zahlen
+			$zblattn= ltrim($zblatt, "0");
+			$zblattz="";
+		} else { // Sonderfall: Zusatz-Buchstabe am Ende
+			$zblattn=ltrim(substr($zblatt,0,$len-1), "0"); // ohne fuehrende Nullen
+			$zblattz=strtoupper(substr($zblatt,$len-1,1)); 
+		}
+	}
+	return $cntbu;
+}
+
+function gml_buchungsstelle() {
+	// Kennzeichen "Bezirk + Blatt + BVNR" eingegeben. Dazu die gml_id der Buchungsstelle ermitteln.
+	global $con, $gkz, $debug, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr;
+	// Blatt ->  B u c h u n g s s t e l l e
+	$sql ="SELECT s.gml_id FROM ax_buchungsstelle s ";
+	$sql.="JOIN alkis_beziehungen v ON s.gml_id=v.beziehung_von "; 
+	$sql.="JOIN ax_buchungsblatt b ON b.gml_id=v.beziehung_zu "; 
+	$sql.="WHERE v.beziehungsart='istBestandteilVon' ";
+	$sql.="AND b.bezirk= $1 AND b.buchungsblattnummermitbuchstabenerweiterung ";
+	if ($zblattz == "") { // Ohne Buchstabenerweiterung
+		//Formate '123','000123 ','0000123'
+		$sql.="IN ('".$zblattn."','".str_pad($zblattn, 6, "0", STR_PAD_LEFT)." ','".str_pad($zblattn, 7, "0", STR_PAD_LEFT)."')";
+	} else { // Mit Buchstabenerweiterung: '000123A'
+		$sql.="='".str_pad($zblattn, 6, "0", STR_PAD_LEFT).$zblattz."'";
+	}
+	$sql.=" AND s.laufendenummer= $2 ;";
+
+	$v=array($zgbbez, $zbvnr);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Buchungsstelle (Kennzeichen).</p>";
+		return;
+	}
+	$zbs=0;
+	while($row = pg_fetch_array($res)) {	
+		$bs_gml=$row["gml_id"];
+		$zbs++;
+	}
+	if($zbs == 0) { 
+		echo "\n<p class='err'>Buchung ".$zgbbez."-".$zblattn.$zblattz."-".$zbvnr." nicht gefunden.</p>";
+		return;
+	} elseif($zbs > 1) { // nur TEST
+		echo "\n<p class='err'>Buchungsstelle mehrfach gefunden.</p>";
+		return;
+	} else {
+		return $bs_gml;
+	}
+}
+
+function EinGrundstueck($showParent) {
+	// Die gml_id der Buchungsstelle ist bekannt.
+	global $con, $gkz, $debug, $gemeinde, $epsg, $scalefs, $epsg, $auskpath, $gbuchung, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr, $gfilter;
+	if ($showParent) { // wenn Kennzeichen bekannt ist, dann auch Blatt ausgeben
+		if (isset($zgbbez) and isset($zblatt)) {
+			echo "\n<div class='gk' title='GB-Bezirk'>";
+				echo "\n\t\t<img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Bez.'> ";
+				echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$zgbbez."'>";		
+				echo "Bezirk ".$zgbbez."</a>";
+				// Key ist bekannt. Sollte man sich die Muehe machen, Namen und Amtsgericht zu ermitteln?
+				// ++++ Namen als &bez= ÃŒbermitteln?
+			echo "\n</div>";			
+			echo "\n<div class='gb' title='GB-Blatt'>";
+				echo "\n\t\t<img class='nwlink' src='ico/GBBlatt.ico' width='16' height='16' alt='Blatt'> ";
+				echo "Blatt <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$zgbbez."-".$zblatt."'>&nbsp;".$zblattn.$zblattz."&nbsp;</a>";
+			echo "\n</div>";
+		} else {
+			echo "<p class='err'>Kennzeichen Bezirk und Blatt nicht gesetzt</p>";
+		}
+		echo "\n<div class='gs'>";
+			echo "\n\t\t<img class='nwlink' title='Grundst&uuml;ck' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
+			echo "Buchung <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbuchung=".$gbuchung."&amp;gbkennz=".$zgbbez."-".$zblattn.$zblattz."-".$zbvnr."'>&nbsp;".$zbvnr."&nbsp;</a>";
+		echo "\n</div>";
+	}
+	// +++ Ermitteln anderer Buchungsstellen mit Rechten an dieser
+	// +++ Ermitteln anderer Buchungsstellen wo diese Rechte hat
+	// +++ Filter "Gemeinde" berÃŒcksichtigt!! Wenn gesetzt.
+
+	// Buchungsstelle -> Flurstueck
+	$sql ="SELECT t.gemeinde, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
+	if($epsg == "25832") { // Transform nicht notwendig
+		$sql.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
+		$sql.="st_y(st_Centroid(f.wkb_geometry)) AS y ";
+	} else {  
+		$sql.="st_x(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS x, ";
+		$sql.="st_y(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS y ";			
+	}
+	$sql.="FROM ax_gemarkung g ";
+	$sql.="JOIN ax_flurstueck f ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer ";
+	$sql.="JOIN alkis_beziehungen v ON f.gml_id=v.beziehung_von "; 
+	$sql.="LEFT JOIN gemeinde_gemarkung t ON g.gemarkungsnummer=t.gemarkung ";
+	$sql.="WHERE v.beziehungsart='istGebucht' AND v.beziehung_zu= $1 "; // id buchungsstelle
+	$sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+	$v=array($gbuchung);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Buchungsstelle (gml).</p>";
+		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+	}
+	$zfs=0;
+	while($row = pg_fetch_array($res)) {	
+		$fs_gml=$row["gml_id"];
+		$gemei=$row["gemeinde"];
+		$gmkg=$row["bezeichnung"];
+		$flur=$row["flurnummer"];
+		$fskenn=$row["zaehler"];
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
+		$x=$row["x"];
+		$y=$row["y"];
+		if($gemeinde > 0 and $gemeinde != $gemei and $gfilter == 1) { // ex-territorial 
+		// +++ Wie Abgleich mit Filter=Gemeinde-Liste? Als Array aufbereiten?
+			if ($debug >= 2) {echo "<p class='dbg'>Gemkg ".$gmkg." liegt in Gemeinde '".$gemei."' nicht '".$gemeinde."'</p>";}
+
+			echo "\n<div class='fs' title='Kein Zugriff! Liegt au&szlig;erhalb des Gebietes.'>";
+				echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Leer.ico' width='16' height='16' alt='FS'> (".$gmkg." ".$flur."-".$fskenn." )";
+			echo "\n</div>";			
+		} else {
+			echo "\n<div class='fs'>";
+				echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+					echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
+				echo "\n\t</a> ";
+				echo "\n\t".$gmkg." <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
+						echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
+						echo "parent.parent.showHighlight(".$x.",".$y.")' ";
+					echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
+					echo "onmouseout='parent.parent.hideHighlight()'>&nbsp;";
+				echo $flur."-".$fskenn."&nbsp;</a>";
+			echo "\n</div>";
+		}
+		$zfs++;
+	}
+	if($zfs == 0) {echo "\n<p class='err'>Kein Flurst&uuml;ck.</p>";}
+	return;
+}
+
+// ===========
+// Start hier!
+// ===========
+if(isset($epsg)) {
+	if ($debug >= 2) {echo "<p class='dbg'>aktueller EPSG='".$epsg."'</p>";} // aus MB
+	$epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);	
+} else {
+	if ($debug >= 1) {echo "<p class='err'>kein EPSG gesetzt</p>";}	
+	$epsg=$gui_epsg; // aus Conf
+}
+if ($debug >= 2) {
+	if(isset($gemeinde)) {echo "<p class='dbg'>Filter Gemeinde = ".$gemeinde."</p>";
+	} else {echo "<p class='dbg'>Kein Filter Gemeinde</p>";}
+}
+if ($gemeinde == "") {
+	$gfilter = 0; // ungefiltert
+} elseif(strpos($gemeinde, ",") === false) {
+	$gfilter = 1; // Einzelwert
+} else {
+	$gfilter = 2; // Liste
+}
+
+// Auch wenn redundant: Das Kennzeichen fÃŒr Anzeige und weitere Links zerlegen
+$kennztyp=ZerlegungGBKennz($gbkennz);
+if ($debug >= 2) {echo "<p class='dbg'>GB-Kennzeichen Typ=".$kennztyp."</p>";}
+
+// Wurde eine gml_id (internes Kennzeichen) aus einem Self-Link verwendet?
+// Dann hat das Prioritaet, nicht nach $gbkennz suchen.
+if (isset($gbuchung)) { // gml der Buchungsstelle
+	if ($debug >= 2) {echo "<p class='dbg'>Link Buchung(gml)=".$gbuchung."</p>";}
+	EinGrundstueck(true);
+} elseif(isset($gblatt)) { // gml des GB-Blattes
+	if ($debug >= 2) {echo "<p class='dbg'>Link Blatt(gml)=".$gblatt."</p>";}
+	if (EinBlatt(true) == 1) { // darauf genau eine Buchung
+		$gbuchung=gml_buchungsstelle(); // gml_id zum Kennzeichen
+		EinGrundstueck(false);
+	}
+} elseif(isset($ag)) { // Key 'stelle' des Amtsgerichtes
+	if ($debug >= 2) {echo "<p class='dbg'>Link Amtsgericht=".$ag."</p>";}
+	ListAG( "'".$ag."'" ); // noch mal Kopfzeile
+	ListGBBez("'".$ag."'", false);
+} else { // Kein Self-Link
+	// (manuelle) Eingabe im Formular interpretieren.
+	switch ($kennztyp) { // +++ Wie kann Filter "Gemeinde" berÃŒcksichtigt werden?
+		case 0: // keine Eingabe, 2 Alternativen
+			// +++ Alternativen-Auswahl konfigurieren?
+		//	ListGBBez($ag_liste, true); // gefilterte Liste der Bezirke
+			ListAG($ag_liste); // gefilterte Liste der Amtsgerichte
+			break;
+		case 1: // Eingabe Bezirk-Name (-Teil) -> gefilterte Liste der Bezirke
+			if ($debug >= 2) {echo "<p class='dbg'>Eingabe Bez. ".$zgbbez."</p>";}
+			$beznr=SuchGBBezName();
+			if ($beznr > 0) {  // eindeutig
+				$zgbbez=$beznr;
+				EinBezirk(false); // gleich weiter
+			};	
+			break;
+		case 2: // Eingabe Bezirk-Nummer -> Liste der BlÃ€tter
+			if ($debug >= 2) {echo "<p class='dbg'>Eingabe Bez. ".$zgbbez."</p>";}	
+			EinBezirk(true);
+			break;
+		case 3: // Eingabe Blatt -> Liste der Buchungen
+			if ($debug >= 2) {echo "<p class='dbg'>Eingabe Bez. ".$zgbbez." Blatt ".$zblatt."</p>";}
+			$gblatt=gml_blatt(); // gml_id zum Blatt suchen
+			if ($gblatt != "") { // gefunden		
+				if (EinBlatt(true) == 1) { // darauf genau eine Buchung
+					$gbuchung=gml_buchungsstelle(); // gml_id zum Kennzeichen
+					EinGrundstueck(false);
+				}
+			}
+			break;
+		case 4: // Eingabe Buchung (Grundstueck) -> Liste der Flurstuecke
+			if ($debug >= 2) {echo "<p class='dbg'>Eingabe Bez. ".$zgbbez." Blatt ".$zblatt." BVNR ".$zbvnr."</p>";}
+			$gbuchung=gml_buchungsstelle(); // gml_id zum Kennzeichen
+			if ($gbuchung != "") { // .. wurde geliefert 
+				EinGrundstueck(true);
+			}
+			break;
+		case 9: // Fehler
+			echo "<p class='err'>Bitte ein g&uuml;ltiges Grundbuchkennzeichen eingegeben, Format 'gggg-999999A-llll</p>";
+			break;
+	}
+}
+
+?>
+</body>
+</html>
Index: trunk/mapbender/http/nav/alkisnav_grd.htm
===================================================================
--- trunk/mapbender/http/nav/alkisnav_grd.htm	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav_grd.htm	(revision 216)
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<base target="_self">
+	<title>ALKIS-Suche Grundbuch</title>
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<script type="text/javascript" language="JavaScript">
+		// Parameter fuer Mandant aus url lesen
+		// &gkz=150&gemeinde=40&test=ja
+		var parms = location.search.split("&");    // 0: "?gkz=150" 1: "gemeinde=40" 2: "test=ja"
+		var arr = parms[0].split("=", 2); // 0: "?gkz"  1: "150"
+		var gkz = "000";
+		if(arr[0] == "?gkz") {gkz = arr[1];}
+		var arr = parms[1].split("=", 2)
+		var gem = "0";
+		if(arr[0] == "gemeinde") {gem = arr[1];}
+		// aktueller EPSG-Code
+		function sendGuiEpsg () {
+			var ind = parent.parent.getMapObjIndexByName("mapframe1");
+			var epsg = parent.parent.mb_mapObj[ind].getSRS();
+			document.forms[0].epsg.value = epsg;
+		}
+		function validate(){
+			sendGuiEpsg();
+			document.forms[0].gkz.value = gkz;
+			document.forms[0].gemeinde.value = gem;
+		}
+	</script>
+</head>
+<body onload="javascript:validate();">
+
+<div id='tabs'>
+<ul>
+	<script type="text/javascript" language="JavaScript">
+		document.writeln("<li><a target='_self' href='alkisnav_adr.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Adresse</a></li>");
+		document.writeln("<li><a target='_self' href='alkisnav_eig.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Name</a></li>");
+		document.writeln("<li><a target='_self' href='alkisnav_fls.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Flurst&uuml;ck</a></li>");
+		document.writeln("<li class='aktiveTab'>Grundb.</li>");
+	</script>
+</ul>
+</div>
+
+<form class='nav' name='GrdGazetteerFrame' onsubmit='return validate()' target='GrdResultFrame' action='alkisnav_grd.php'>
+	<input name='gkz' type='hidden'>
+	<input name='gemeinde' type='hidden'>
+	<input name='epsg' type='hidden'>
+	<input class='textfield' name='gbkennz' type='text' size='22' title='Grunbuchkennzeichen'>
+	<input class='sbutton' type='submit' value='ok'>
+</form>
+
+<iframe name="GrdResultFrame" src="blank_grd.html" class='ResultFrame'></iframe>
+
+</body>
+</html>
Index: trunk/mapbender/http/nav/blank_fls.html
===================================================================
--- trunk/mapbender/http/nav/blank_fls.html	(revision 216)
+++ trunk/mapbender/http/nav/blank_fls.html	(revision 216)
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<title></title>
+</head>
+<body>
+<p class='start'>Suche nach Flurst&uuml;ckskennzeichen.<br>
+M&ouml;gliche Eingaben:<br><br>
+leer: zeigt Liste der Gemarkungen<br>
+Anfang oder Teil des Gemarkungsnamens<br>
+Flur <em>gggg-fff</em><br>
+Flurst&uuml;ck <em>gggg-fff-zzzzz</em><br>
+ oder <em>gggg-fff-zzzzz/nnn</em><br>
+Historisches Flurst. <em>gggg-fff-zzzzzH</em><br>
+Hist. Flurst. aus einer Flur <em>gggg-fffH</em></p>
+
+<p class='start'>Wobei:<br>
+<em>gggg</em> = Gemarkungsnummer<br>
+<em>fff</em> = Flurnummer<br>
+<em>zzzzz</em> = Z&auml;hler / nnn = Nenner<br>
+<em>H</em> = Buchstabe "h" f&uuml;r "Historisch"</p>
+</body>
+</html>
Index: trunk/mapbender/http/nav/alkisnav.css
===================================================================
--- trunk/mapbender/http/nav/alkisnav.css	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav.css	(revision 216)
@@ -0,0 +1,102 @@
+/* Style fuer ALKIS-Navigation 
+	Version
+	 2011-04-11
+	 2011-11-09 Historie, dbg
+	 2011-12-09 p.nam
+*/
+body,p,a,.textfield,.sbutton	{font-family: Verdana, Arial, Helvetica, sans-serif;}
+body		{font-size: 11px; color: #000000; margin: 0px;}
+
+p			{font-size: 10px;}
+p.hilfe 	{font-size:  9px; text-align: right; color: gray; padding-right: 3px;} /* Programmier-Hilfsfelder */
+p.start 	{font-size:  9px; color: gray;}
+p.nam		{font-size: 10px; border: 1px solid navy; padding: 3px; margin: 0px; color: maroon;}
+p.err		{font-size: 11px; color: red;}	/* Fehler -> Anwender */
+p.dbg		{font-size: 10px; color: gray;}	/* Debug -> Entwickler */
+
+a			{text-decoration: none;} /* font-size: 11px; */
+a:hover, a:active	{color: red;}
+a.hislnk {color: gray; font-style: italic; text-align: right; padding-left: 50px;}	/* Link zur Historie */
+
+/* abgestuft eingerueckte Treffer in der Suche */
+div			{margin: 0px; padding: 0px;}
+div.back 	{font-size: 10px; color: gray; border-bottom: 1px dotted gray;}
+/* div.nam		{color: maroon;}   Name */
+div.ga		{color: fuchsia;	margin-left:  0px; margin-top: 6px;} /* GB-Amtsgericht */
+div.gm		{color: green;		margin-left:  0px; margin-top: 6px;} /* Gemeinde */
+div.gk		{color: black;		margin-left:  5px; margin-top: 6px;} /* Gemarkung o. GB-Bezirk*/
+div.fl		{color: olive;		margin-left: 12px; margin-top: 4px;} /* Flur */
+div.gb		{color: green;		margin-left: 10px; margin-top: 3px;} /* Grundbuch */
+div.gs		{color: olive;		margin-left: 15px; margin-top: 2px;} /* Grundstueck, BVNR */
+div.fs		{color: navy;		margin-left: 20px; margin-top: 0px;} /* Flurstueck */
+div.hi		{color: gray;		margin-left: 20px; margin-top: 0px;} /* Historie */
+div.hn		{color: gray;		margin-left: 25px; margin-top: 0px;} /* Historie-Nachfolger */
+
+div.stu		{color: maroon; font-size: 13px;} /* Strasse - Ueberschrift */
+div.stl		{color: maroon; font-size: 11px; margin-top: 3px;} /* Strasse - Liste*/
+td.hsnr		{font-size: 11px; text-align: center; padding-left: 4px; padding-right: 4px;} /* Hausnummer */
+hr				{color: gray;}
+
+.textfield{
+	border: 1px solid #990000;
+	height: 20px;
+	width: 140px;
+	background: #FFFFFF;
+}
+.sbutton{font-size: 11px;
+	font-weight: normal;
+	border: solid thin;
+	width: 22px;
+	height: 20px;
+	background: #6699FF;
+}
+img.nwlink	{border: 0px; margin: 0px; padding: 0px;} /* Icons mit Link zum Buch-Nachweis */
+.letter		{cursor: pointer; font-weight: bold;} /* Liste Anfangsbuchstaben */
+
+/* Registertabs */
+/* ul in einem <div id='tabs' */
+div#tabs ul {
+	position: absolute; top: 0px;
+	margin-top: 0px; margin-left: 0px; margin-bottom: 20px;
+	padding: 0px;
+	width: 220px;
+	text-align: left;
+	border: 0px dashed #00aa00;
+}
+div#tabs li {
+	cursor: pointer;
+	list-style: none; /* Eintraege NEBENeinander */
+	float: left;
+	text-align: center;
+	background-color: #F9F9F9;
+	border: 1px solid #CCD5DE;
+	border-bottom-width: 1px;
+	vertical-align: text-bottom;
+	position: relative;
+	background-image: url(./img/tab_bg_grau.gif); /* inaktive Tabs grau */
+	background-repeat: repeat-x;
+	background-position: top left;
+	margin: 0 3px 0 0;
+	padding: 2px;
+}
+div#tabs li.aktiveTab {
+	background-image: url(./img/tab_bg_rot.gif);  /* aktive Tabs rot */
+	background-color: #F9F9F9;
+	border-bottom-color: #F9F9F9; /* nicht sichtbar, wie Hintergrund */
+}
+
+/* passt in Mapbender 2.5: tabs width=280, tab_frameHeight[n]=360 */
+iframe.OuterFrame{
+	width: 250px; height: 330px; 
+	padding: 0px; margin: 0px;
+	border: 0px dotted #ff0000;
+	overflow: hidden;
+	background-color: white;
+}
+form.nav {position: absolute; top: 22px;}
+iframe.ResultFrame {
+	position: absolute; top: 78px;
+	width: 235px; height: 220px;
+	padding: 0px; margin: 0px;
+	border: 0px dotted #00ff00;
+}
Index: trunk/mapbender/http/nav/alkisnav.htm
===================================================================
--- trunk/mapbender/http/nav/alkisnav.htm	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav.htm	(revision 216)
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<script type="text/javascript" language="JavaScript">
+		function showHighlight(x,y){
+			parent.mb_showHighlight("mapframe1",x,y);
+			parent.mb_showHighlight("overview",x,y);
+		}
+		function hideHighlight(){
+			parent.mb_hideHighlight("mapframe1");
+			parent.mb_hideHighlight("overview");
+		}
+		function validate(){
+			if(document.forms[0].street.value.length < 1) {return false;}
+			else {return true;}
+		}
+		// Parameter fuer Mandant aus url lesen
+		// &gkz=150&gemeinde=40&test=ja
+		var parms = location.search.split("&");   // 0: "?gkz=150" 1: "gemeinde=40" 2: "test=ja"
+		var arr = parms[0].split("=", 2); // 0: "?gkz"  1: "150"
+		var gkz = "000";
+		if(arr[0] == "?gkz") {gkz = arr[1];}
+		var arr = parms[1].split("=", 2)
+		var gem = "0";
+		if(arr[0] == "gemeinde") {gem = arr[1];}
+	</script>
+	<title>ALKIS-Suche</title>
+</head>
+<body>
+
+<script type="text/javascript" language="JavaScript">
+	document.writeln("<!-- gkz=" + gkz + " gemeinde=" + gem + "-->");
+	// Rahmen mit Form und ResultFrame
+	document.writeln("<iframe frameborder='0' name='OuterFrame' src='alkisnav_eig.htm?gkz=" + gkz + "&gemeinde=" + gem + "' class='OuterFrame' scrolling='auto'></iframe>");
+</script>
+
+</body>
+</html>
Index: trunk/mapbender/http/nav/alkisnav_fls.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fls.php	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav_fls.php	(revision 216)
@@ -0,0 +1,748 @@
+<?php
+/* Version vom
+	24.10.2011 Nach Pos-Klick Highlight erneuern statt hideHighlight
+	07.11.2011 optional auch Historische FS suchen, Link auf Buchauskunft-Modul alkisfshis.php
+	09.11.2011 "h" hinter Flur oder FlurstÃŒck sucht sofort in Historie
+					Ausgabe Flur in Varianten aktuell/historisch mit gegenseitigen Verweisen
+	11.11.2011 Nachfolger-Liste in der DB nachschlagen, und aktuelle FS als solche kennzeichnen
+				neue Icons fÃŒr Link mit Pfeil
+				Differenzierung mit/ohne Raumbezug bei Icons fuer Histor. FS
+				Gemarkung- und Flur-Zeile vor einzelnem FlurstÃŒck ausgeben
+	17.11.2011 Nachweis-Links ÃŒber javascript im neuen Hochformat-Fenster
+*/
+import_request_variables("G");
+include("../../conf/alkisnav_conf.php");
+$con_string = "host=".$host." port=".$port." dbname=".$dbname.$dbvers.$gkz." user=".$user." password=".$password;
+$con = pg_connect ($con_string) or die ("Fehler bei der Verbindung zur Datenbank ".$dbname.$dbvers.$gkz);
+?>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<title>ALKIS-Suche Flurst&uuml;ck</title>
+	<link rel="stylesheet" type="text/css" href="alkisnav.css"></link>
+	<script type="text/javascript">
+		function imFenster(dieURL) {
+			var link = encodeURI(dieURL);
+			window.open(link,'','left=10,top=10,width=620,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
+		}
+	</script>
+</head>
+<body>
+
+<?php
+
+function is_ne_zahl($wert) {
+	// Prueft, ob ein Wert ausschlieÃlich aus den Zahlen 0 bis 9 besteht
+	if (trim($wert, "0..9") == "") {return true;} else {return false;}
+}
+
+function h_hinten($zahl) {
+	// Testen: Wurde an eine Zahl ein "h" angehÃ€ngt?
+	// Wenn ja, dann Schalter setzen und nur numerischen Teil zurÃŒck geben.
+	global $phist, $debug;
+	$zahl=trim($zahl);
+	$zlen=strlen($zahl) - 1;
+	if ($zlen > 0) {
+		$hinten = ucfirst(substr($zahl, $zlen, 1));
+		if ($hinten == "H" ) {
+			$vorn=trim(substr($zahl, 0, $zlen));
+			if (is_ne_zahl($vorn)) { // Zahl *und* "H"
+				$zahl = $vorn;
+				$phist = true;
+			}
+		}
+	}
+	return $zahl;
+}
+
+function ZerlegungFsKennz($fskennz) {
+// Das eingegebene FlurstÃŒcks-Kennzeichen auseinander nehmen. Erwartet wird gggg-fff-zzzz/nnn
+	global $debug, $zgemkg, $zflur, $zzaehler, $znenner;	
+//	if ($debug > 1) {echo "<p class='dbg'>Zerlegen: '".$fskennz."'</p>";}
+	$arr = explode("-", $fskennz, 4);
+	$zgemkg=trim($arr[0]);
+	$zflur=h_hinten($arr[1]);
+	$zfsnr=trim($arr[2]);
+	if ($debug > 1) {echo "<p class='dbg'>Gemkg: '".$zgemkg."' Flur: '".$zflur."' NR: '".$zfsnr."'</p>";}
+	
+	if ($zgemkg == "") {
+		return 0; // Gemeinden oder Gemarkungen listen
+	} elseif ( ! is_ne_zahl($zgemkg)) {
+		return 1; // Such Name
+	} elseif ($zflur == "") {
+		return 2; // G-Nr
+	} elseif ( ! is_ne_zahl($zflur)) {
+		echo "<p class='err'>Die Flurnummer '".$zflur."' ist nicht numerisch</p>";
+		return 9;
+	} elseif ($zfsnr == "") {
+		return 3; // Flur				
+	} else {
+		$zn=explode("/", $zfsnr, 2);
+		$zzaehler=h_hinten(trim($zn[0]));
+		$znenner =h_hinten(trim($zn[1]));
+		if ( ! is_ne_zahl($zzaehler)) {
+			echo "<p class='err'>FlurstÃŒcksnummer '".$zzaehler."' ist nicht numerisch</p>";
+			return 9;
+		} elseif ($znenner == "") {
+			return 4;
+		} elseif (is_ne_zahl($znenner)) {
+			return 5;								
+		} else {
+			echo "<p class='err'>FlurstÃŒcks-Nenner '".$znenner."' ist nicht numerisch</p>";
+			return 9;
+		}
+	}
+}
+
+function gemkg_zeile($zgemkg) {
+// Eine Zeile zu Gemarkung ausgeben, SchlÃŒssel wird ÃŒbergeben, Name in DB nachschlagen
+	global $con, $gkz, $gemeinde, $epsg;
+	$sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;";
+	$v=array($zgemkg);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
+	$zgmk=0;
+	while($row = pg_fetch_array($res)) { // eigentlich nur EINE
+		$gmkg=$row["bezeichnung"];
+		$zgmk++;
+		echo "\n<div class='gk' title='Gemarkung'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
+			echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."'> ".$gmkg." (".$zgemkg.")</a>";
+		echo "\n</div>";
+	}
+	if ($zgmk == 0) {
+		echo "\n<div class='gk' title='Gemarkung'>";
+			echo "\n\t\t<p class='err'><img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
+				echo  " Gemarkung ".$zgemkg." ist unbekannt.</p>";
+		echo "\n</div>";
+		return;
+	}
+	return 0;
+}
+
+function flur_zeile($zgemkg, $zflur) {
+//	Eine Zeile zur Flur ausgeben
+	global $con, $gkz, $gemeinde, $epsg;
+	echo "\n<div class='fl' title='Flur'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'> ";
+		$url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$zflur;
+		echo "Flur <a href='".$url."'>".$zflur."</a>";
+		//echo "<span class='hislnk'>";
+		echo " <a class='hislnk' title='Historische Flurst&uuml;cke' href='".$url."&amp;hist=j'>Hist.</a>";		
+	echo "\n</div>";
+	return 0;
+}
+
+function ListGemeinden() {
+// bei Leereingabe die Gemeinden anlisten
+	global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter;
+	$linelimit=50;
+	$sql ="SELECT DISTINCT g.gemeinde AS key, g.bezeichnung FROM ax_gemeinde g ";
+	$sql.="JOIN gemeinde_gemarkung v ON g.regierungsbezirk=v.regierungsbezirk AND g.kreis=v.kreis AND g.gemeinde=v.gemeinde ";
+	// "ax_gemeinde" enthÃ€lt mehrfache Gemeinde-Schluessel (Filtern regierungsbezirk, kreis)	
+	// "gemeinde_gemarkung" enthaelt nur gefÃŒllte Gemarkungen aber Gemeinde mehrfach
+	switch ($gfilter) {
+		case 1: // Einzelwert
+			$sql.="WHERE g.gemeinde=".$gemeinde." ";
+			break;
+		case 2: // Liste
+			$sql.="WHERE g.gemeinde in (".$gemeinde.") ";
+			break;
+		default: // kein Filter
+			break;
+	}
+	$sql.=" ORDER BY g.bezeichnung LIMIT $1 ;";
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", array($linelimit));
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Gemeinde</p>";
+		if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
+		return 0;
+	}
+	$cnt = 0;
+	while($row = pg_fetch_array($res)) {
+		$stadt=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+		$bez=urlencode($row["bezeichnung"]);  // Uebergeben an ListGmkgInGemeinde
+		$gnr=$row["key"];
+		echo "\n<div class='gm' title='Gemeinde'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";
+			echo " Gem. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gm=".$gnr."&amp;bez=".$bez."'>";		
+			echo  " ".$stadt."</a> (".$gnr.")";
+		echo "\n</div>";
+		$cnt++;
+	}
+	if($cnt == 0){ 
+		echo "\n<p class='err'>Keine Gemeinde.</p>";
+	} elseif($cnt >= $linelimit) {
+		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+	} elseif($cnt == 1) { // Eindeutig!
+		return $gnr; 
+	}
+	return 0;
+}
+
+function ListGmkgInGemeinde($gkey) {
+// Die (gefuellten) Gemarkungen zu einem Gemeinde-Key (aus Link) listen
+	global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter, $bez;
+	$linelimit=70;
+	$sql ="SELECT g.gemarkungsnummer, g.bezeichnung ";
+	$sql.="FROM ax_gemarkung g JOIN gemeinde_gemarkung v ON g.gemarkungsnummer=v.gemarkung ";
+   $sql.="WHERE v.gemeinde= $1 ORDER BY g.bezeichnung LIMIT $2 ;";
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", array($gkey, $linelimit));
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Gemarkungen</p>";
+		if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
+		return 0;
+	}
+	// Hierarchie Dokumentieren, Gemeinde-Name?
+	echo "\n<div class='gm' title='Gemeinde'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";	
+		echo  " Gem. ".$bez." (".$gkey.")"; // .urldecode($bez). ??
+	echo "\n</div>";
+	$cnt = 0;
+	while($row = pg_fetch_array($res)) {
+		$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+		$gnr=$row["gemarkungsnummer"];
+		echo "\n<div class='gk' title='Gemarkung'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
+			echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gnr."'>";		
+			echo  " ".$gnam."</a> (".$gnr.")";
+		echo "\n</div>";
+		$cnt++;
+	}
+	if($cnt == 0){ 
+		echo "\n<p class='err'>Keine Gemarkung.</p>";
+	} elseif($cnt >= $linelimit) {
+		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+	} elseif($cnt == 1) { // Eindeutig!
+		return $gnr; 
+	}
+	return 0;
+}
+
+function SuchGmkgName() {
+// Gemarkung suchen nach Name(-nsanfang)
+	global $con, $gkz, $gemeinde, $epsg, $debug, $fskennz, $gfilter;
+	$linelimit=120;
+	if(preg_match("/\*/",$fskennz)){
+		$match = trim(preg_replace("/\*/i","%", strtoupper($fskennz)));
+	} else {
+		$match = trim($fskennz)."%";
+	}	
+	$sql ="SELECT v.gemeindename, g.gemarkungsnummer, g.bezeichnung ";
+	$sql.="FROM ax_gemarkung g JOIN gemeinde_gemarkung v ON g.gemarkungsnummer=v.gemarkung ";
+   $sql.="WHERE bezeichnung ILIKE $1 ";
+	switch ($gfilter) {
+		case 1: // Einzelwert
+			$sql.="AND v.gemeinde=".$gemeinde." ";
+			break;
+		case 2: // Liste
+			$sql.="AND v.gemeinde in (".$gemeinde.") ";
+			break;
+		default: // kein Filter
+			break;
+	}
+	$sql.=" ORDER BY g.bezeichnung LIMIT $2 ;";
+	$v=array($match, $linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Gemarkung</p>";
+		if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
+		return 0;
+	}
+	$cnt = 0;
+	while($row = pg_fetch_array($res)) {
+		$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+		$gnr=$row["gemarkungsnummer"];
+		$stadt=$row["gemeindename"];
+		echo "\n<div class='gk' title='Gemarkung'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
+			echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gnr."'>";		
+			echo  " ".$gnam."</a> (".$gnr.")";
+			switch ($gfilter) {
+				case 0: // Kein Filter
+					echo " ".$stadt;
+					break;
+				case 2: // Liste
+					echo " ".$stadt;
+					break;
+				default: // Einzelwert
+					break;
+			}
+		echo "\n</div>";
+		$cnt++;
+	}
+	if($cnt == 0){ 
+		echo "\n<p class='err'>Keine Gemarkung.</p>";
+	} elseif($cnt >= $linelimit) {
+		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+	} elseif($cnt == 1) { // Eindeutig!
+		return $gnr; 
+	}
+	return 0;
+}
+
+function EineGemarkung($AuchGemkZeile) {
+// Kennzeichen bestehend nur aus Gemarkung-SchlÃŒssel wurde eingegeben
+	global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg;
+	$linelimit=120; // max. Fluren je Gemarkung
+	if ($AuchGemkZeile) {
+		$sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;"; // WHERE f.land= ?
+		$v=array($zgemkg);
+		$res=pg_prepare("", $sql);
+		$res=pg_execute("", $v);
+		if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
+		$zgmk=0;
+		while($row = pg_fetch_array($res)) {	
+			$gmkg=$row["bezeichnung"];
+			$zgmk++;
+		}
+		if ($zgmk == 0) {
+			echo "\n<div class='gk' title='Gemarkung'>";
+				echo "\n\t\t<p class='err'><img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
+					echo  " Gemarkung ".$zgemkg." ist unbekannt.</p>";
+			echo "\n</div>";
+			return;
+		}
+		// > 1 auch mÃ¶glich?
+		echo "\n<div class='gk' title='Gemarkung'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'> ";
+			echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."'>";		
+			echo $gmkg."</a>  (".$zgemkg.")"; // in Gemeinde?
+		echo "\n</div>";
+	}
+	$sql ="SELECT gemarkungsteilflur AS flur FROM ax_gemarkungsteilflur f ";
+	$sql.="WHERE gemarkung= $1 ORDER BY gemarkungsteilflur LIMIT $2 ;"; 	// WHERE f.land= ?
+	$v=array($zgemkg, $linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {echo "\n<p class='err'>Fehler bei Flur.</p>";}
+	$zfl=0;
+	while($row = pg_fetch_array($res)) {	
+		$flur=$row["flur"];
+		echo "\n<div class='fl' title='Flur'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'>&nbsp;";
+			echo "Flur<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$flur."'>&nbsp;".$flur."&nbsp;</a>";
+		echo "\n</div>";
+		$zfl++;
+	}
+	if($zfl == 0) { 
+		echo "\n<p class='err'>Keine Flur.</p>";
+	} elseif($cnt >= $linelimit) {
+		echo "\n<p>... und weitere</p>";
+	}
+	return;
+}
+
+function EineFlur() {
+// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, dazu aktuelle FlurstÃŒcke suchen
+	global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $zgemkg, $zflur;
+	$linelimit=600; // Wie groÃ kann eine Flur sein?
+	gemkg_zeile($zgemkg);
+	flur_zeile($zgemkg, $zflur);
+
+	$sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
+	if($epsg == "25832") { // Transform nicht notwendig
+		$sql.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
+		$sql.="st_y(st_Centroid(f.wkb_geometry)) AS y ";
+	} else {  
+		$sql.="st_x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
+		$sql.="st_y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";			
+	}
+   $sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 ";
+	$sql.="ORDER BY f.zaehler, f.nenner LIMIT $3 ;"; // WHERE f.land= ?
+	$v=array($zgemkg, $zflur, $linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {echo "\n<p class='err'>Fehler bei Flur.</p>";}
+	$zfs=0;
+	while($row = pg_fetch_array($res)) {	
+		$fs_gml=$row["gml_id"];
+		$flur=$row["flurnummer"];
+		$fskenn=$row["zaehler"];
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
+		$x=$row["x"];
+		$y=$row["y"];
+		echo "\n<div class='fs'>";
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+				echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
+			echo "\n\t</a> ";			
+			echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
+					echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
+					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
+				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
+				echo "onmouseout='parent.parent.hideHighlight()'>&nbsp;".$fskenn."&nbsp;</a>";
+		echo "\n</div>";
+		$zfs++;
+	}
+	if($zfs == 0) { 
+		echo "\n<p class='err'>Kein Flurst&uuml;ck.</p>";
+	} elseif($zfs >= $linelimit) {
+		echo "\n<p>... und weitere</p>";
+	}
+	return;
+}
+
+function HistFlur() {
+// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben
+// Die Flur nach historischen FlurstÃŒcken durchsuchen
+	global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $land, $zgemkg, $zflur;
+	$linelimit=500;
+
+	gemkg_zeile($zgemkg);
+	echo "\n<div class='fl' title='Flur'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur-Historie'> ";
+		$url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$zflur;
+		echo "Historie: Flur<a title='Aktuelle Flurst&uuml;cke suchen' href='".$url."'> ".$zflur." </a>"; 
+	echo "\n</div>";
+
+	$whcl.="WHERE flurstueckskennzeichen like $1 ";
+	$sql ="SELECT 'h' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
+	$sql.="UNION SELECT 'o' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
+	$sql.="ORDER BY zaehler, nenner LIMIT $2 ;"; 
+	$fskzwhere =$land.$zgemkg.str_pad($zflur, 3, "0", $STR_PAD_LEFT)."%";
+	$v=array($fskzwhere,   $linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {echo "\n<p class='err'>Fehler bei Historie Flur.</p>";}
+	$zfs=0;
+
+	// Konst. Teil d.URL (Flur), FS anhÃ€ngen
+	$flurl=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;hist=j&amp;fskennz=".$zgemkg."-".$zflur."-";
+
+	while($row = pg_fetch_array($res)) {	
+		$ftyp=$row["ftyp"];
+		$fs_gml=$row["gml_id"];	// fuer Buchausk.
+		$fskenn=$row["zaehler"];
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
+		if ($ftyp == "h") {
+			$ico="Flurstueck_Historisch_Lnk.ico";
+			$titl="Historisches Flurst&uuml;ck";		
+		} else {
+			$ico="Flurstueck_Historisch_oR_Lnk.ico";
+			$titl="Historisches Flurst&uuml;ck ohne Raumbezug";
+		}  // h: Karte Pos.?
+		echo "\n<div class='hi' title='".$titl."'>"; // Zeile
+			// Icon -> Bauchauskunft
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+				echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='Hist'>";
+			echo "\n\t</a> ";		
+			// Kennzeichen -> weiter in die Historie hinein
+			echo "\n\tFlst. <a href='".$flurl.$fskenn."'>".$fskenn."</a>";					
+		echo "\n</div>";
+		$zfs++;
+	}
+	if($zfs == 0) { 
+		echo "\n<p class='err'>Kein historisches Flurst&uuml;ck.</p>";
+		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = ".$fskzwhere."</p>";}
+	} elseif ($zfs >= $linelimit) {
+		echo "\n<p>... und weitere</p>";
+	}
+	return;
+}
+
+function EinFlurstueck() {
+// FlurstÃŒckskennzeichen wurde komplett bis zum Zaehler eingegeben
+// Sonderfall: bei Bruchnummer, mehrere Nenner zum Zaehler
+	global $con, $gkz, $debug, $scalefs, $epsg, $auskpath, $fskennz, $zgemkg, $zflur, $zzaehler, $znenner;
+
+	gemkg_zeile($zgemkg);
+	flur_zeile($zgemkg, $zflur);
+
+	$sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
+	if($epsg == "25832") { // Transform nicht notwendig
+		$sql.="x(st_Centroid(f.wkb_geometry)) AS x, ";
+		$sql.="y(st_Centroid(f.wkb_geometry)) AS y ";
+	}
+	else {  
+		$sql.="x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
+		$sql.="y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";			
+	}
+   $sql.="FROM ax_flurstueck f ";
+	$sql.="WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND f.zaehler= $3 ";
+	If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";} // wie prepared?
+	$sql.="ORDER BY f.zaehler, f.nenner;";
+	$v=array($zgemkg, $zflur, $zzaehler);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>";}
+	$zfs=0;
+	while($row = pg_fetch_array($res)) {	
+		$fs_gml=$row["gml_id"];
+		$flur=$row["flurnummer"];
+		$fskenn=$row["zaehler"];
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
+		$x=$row["x"];
+		$y=$row["y"];
+		echo "\n<div class='fs'>";
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+				echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
+			echo "\n\t</a> ";		
+			echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
+					echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
+					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
+				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
+				echo "onmouseout='parent.parent.hideHighlight()'>";
+			echo $fskenn."</a>";
+		echo "\n</div>";
+		$zfs++;
+	}
+	if($zfs == 0) {
+		echo "\n<p class='err'>Kein aktuelles Flurst&uuml;ck.</p>";
+		// Soll in der Historie weiter gesucht werden?
+		echo "\n<div class='hi' title='Historie'>";
+			echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Historisch.ico' width='16' height='16' alt='Historisches Flurst&uuml;ck'>&nbsp;";
+			echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fskennz."&amp;hist=j'>in Historie suchen</a>";
+		echo "\n</div>";		
+	}
+	return;
+}
+
+function HistFlurstueck() {
+	// Ein Nachfolger-FS-Kennzeichen soll recherchiert werden.
+	// Es ist unbekannt, ob dies aktuell ist oder auch schon historisch.
+	global $con, $gkz, $debug, $scalefs, $epsg, $auskpath, $land, $zgemkg, $zflur, $zzaehler, $znenner;
+
+	gemkg_zeile($zgemkg);
+	flur_zeile($zgemkg, $zflur);
+
+	// Suche ueber das Flurstueckskennzeichen, gml ist meist unbekannt
+	$whcl.="WHERE flurstueckskennzeichen= $1 ";
+	$sql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, null as nachf FROM ax_flurstueck ".$whcl;
+	$sql.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
+	$sql.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
+
+	$fskzwhere =$land.$zgemkg; // Flurst-Kennz. f. Where
+	$fskzwhere.=str_pad($zflur, 3, "0", $STR_PAD_LEFT);
+	$fskzwhere.=str_pad($zzaehler, 5, "0", $STR_PAD_LEFT);
+	if ($znenner == "") {$fskzwhere.="______";}
+	else {$fskzwhere.=str_pad($znenner, 4, "0", $STR_PAD_LEFT)."__";}
+
+	$v=array($fskzwhere);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {echo "\n<p class='err'>Fehler bei hist. Flurst&uuml;ck.</p>";}
+	$zfs=0;
+	while($row = pg_fetch_array($res)) {
+		$ftyp=$row["ftyp"];
+		$fs_gml=$row["gml_id"];
+		$gknr=$row["gemarkungsnummer"];
+		$flur=$row["flurnummer"];
+		$fskenn=$row["zaehler"];
+		$nachf=$row["nachf"];
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
+
+		if ($ftyp == "a") { // aktuelles FS gefunden, Koordinate holen
+
+			// BEGINN +++ als function ?
+			$sqlk ="SELECT ";
+			if($epsg == "25832") { // Transform nicht notwendig
+				$sqlk.="x(st_Centroid(wkb_geometry)) AS x, ";
+				$sqlk.="y(st_Centroid(wkb_geometry)) AS y ";
+			} else {  
+				$sqlk.="x(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS x, ";
+				$sqlk.="y(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS y ";			
+			}
+		   $sqlk.="FROM ax_flurstueck WHERE gml_id= $1 ";
+			$v=array($fs_gml);
+			$resk=pg_prepare("", $sqlk);
+			$resk=pg_execute("", $v);
+			if (!$resk) {echo "\n<p class='err'>Fehler bei Koordinate.</p>";}
+			$zfsk=0;
+			while($rowk = pg_fetch_array($resk)) {	
+				$x=$rowk["x"];
+				$y=$rowk["y"];
+				$zfsk++;
+			}
+			if ($zfsk == 0) {echo "\n<p class='err'>Kein Treffer bei Koordinate.</p>";}
+			// ENDE +++ als function ?
+
+			echo "\n<p>aktueller Nachfolger:</p>";	
+			echo "\n<div class='fs' title='Aktuelles Nachfolger-Flurst&uuml;ck'>"; // Zeile
+
+				// Icon -> Nachweis FS-Hist. in Buchauskunft
+				echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+					echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
+				echo "\n\t</a> ";	
+
+				// Kennzeichen -> Karte positionieren
+				echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
+						echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
+						echo "parent.parent.showHighlight(".$x.",".$y.");' ";
+					echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
+					echo "onmouseout='parent.parent.hideHighlight()'>";
+			//	echo $flur."-".$fskenn."</a>";
+				echo $fskenn."</a>";
+
+			echo "\n</div>";
+
+		} else { // Historisches FS gefunden (h oder o)
+		//	echo "\n<p>Historisches Flurst&uuml;ck:</p>";
+
+			if ($ftyp == "h") {
+				$ico="Flurstueck_Historisch_Lnk.ico";
+				$titl="Historisches Flurst&uuml;ck";
+			} else {
+				$ico="Flurstueck_Historisch_oR_Lnk.ico";
+				$titl="Historisches Flurst&uuml;ck ohne Raumbezug";
+			}  // h: Karte Pos.?
+			echo "\n<div class='hi' title='".$titl."'>";
+				echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+					echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='Hist'>";
+				echo "\n\t</a> Historisches Flst. ".$fskenn."</a>";
+			echo "\n</div>";
+
+			if ($nachf == "") {
+				echo "\n<p class='err'>keine Nachfolger</p>";	
+			} else {
+				echo "\n<p>Nachfolger-Flurst&uuml;cke:</p>";
+				// Die direkten Nachfolger ermitteln
+				// Nachfolger in DB suchen um den Status aktuell/historisch zu ermitteln
+				$stri=trim($nachf, "{}");
+				$stri="'".str_replace(",", "','", $stri)."'";
+			//	$whcln.="WHERE flurstueckskennzeichen IN ( $1 ) ";
+				$whcln.="WHERE flurstueckskennzeichen IN ( ".$stri." ) ";
+				$sqln ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_flurstueck ".$whcln;
+				$sqln.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueck ".$whcln;
+				$sqln.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueckohneraumbezug ".$whcln;
+		//		$v=array($stri);
+				$v=array();
+				$resn=pg_prepare("", $sqln);
+				$resn=pg_execute("", $v);
+				if (!$resn) {echo "\n<p class='err'>Fehler bei Nachfolger.</p>";}
+				$zfsn=0;
+				while($rown = pg_fetch_array($resn)) {
+					$ftypn=$rown["ftyp"];
+					$na_gml=$rown["gml_id"];
+					$gknrn=$rown["gemarkungsnummer"];
+					$flurn=$rown["flurnummer"];
+					$fskennn=$rown["zaehler"];
+					if ($rown["nenner"] != "") {$fskennn.="/".$rown["nenner"];}
+
+					switch ($ftypn) {
+					case "a":
+						$ico="Flurstueck_Link.ico";
+						$titl="Aktuelles Flurst&uuml;ck";
+						$hisparm="";
+						$auskprog="alkisfsnw";
+						// ++ Koordinaten holen? siehe oben "als function"
+					break;
+					case "h":
+						$ico="Flurstueck_Historisch_Lnk.ico";
+						$titl="Historisches Flurst&uuml;ck";
+						$hisparm="&amp;hist=j";
+						$auskprog="alkisfshist";
+					break;
+					case "o":
+						$ico="Flurstueck_Historisch_oR_Lnk.ico";
+						$titl="Historisches Flurst&uuml;ck ohne Raumbezug";
+						$hisparm="&amp;hist=j";
+						$auskprog="alkisfshist";
+					break;
+					}
+					$fs=$gknrn."-".$flurn."-".$fskennn;
+					echo "\n<div class='hn' title='Nachfolger: ".$titl."'>";			
+						echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath.$auskprog.".php?gkz=".$gkz."&amp;gmlid=".$na_gml."\")'>";
+							echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='FS'>";
+						echo "\n\t</a> ";		
+						echo "Flst. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fs.$hisparm."'>".$fskennn."</a>";					
+					echo "\n</div>";
+
+					$zfsn++;
+					// Kontrollieren: Wurden auch so viele FS in DB gefunden, wie im Array "Where in()" standen?
+				}
+				if ($zfsn == 0) {
+					echo "<p class='err'>keine Nachfolger gefunden</p>";
+					if ($debug > 1) {echo "<p class='dbg'>SQL=<br>".$sqln."<br>Liste=<br> ".$stri."</p>";}
+				}		
+			}
+		}
+		$zfs++;
+	}
+	if($zfs == 0) {
+		echo "\n<p class='err'>Kein historisches Flurst&uuml;ck.</p>";
+		if ($debug > 2) {echo "<p class='dbg'>".$sql."</p>";}
+	}
+	return;
+}
+
+// ===========
+// Start hier!
+// ===========
+if(isset($epsg)) {
+	//if ($debug >= 2) {echo "<p class='dbg'>aktueller EPSG='".$epsg."'</p>";} // aus MB
+	$epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);	
+} else {
+	if ($debug >= 1) {echo "<p class='dbg'>kein EPSG gesetzt</p>";}	
+	$epsg=$gui_epsg; // aus Conf
+}
+//if ($debug >= 2) {echo "<p class='dbg'>Filter Gemeinde = ".$gemeinde."</p>";}
+if ($gemeinde == "") {
+	$gfilter = 0; // ungefiltert
+} elseif(strpos($gemeinde, ",") === false) {
+	$gfilter = 1; // Einzelwert
+} else {
+	$gfilter = 2; // Liste
+}
+if ($hist == "j") {$phist = true;} else {$phist = false;}
+
+if(isset($gm)) { // Self-Link aus Gemeinde-Liste 
+	$gnr=ListGmkgInGemeinde($gm); // Gemarkungen zu dieser Gemeinde listen
+	if ($gnr > 0) {
+		$zgemkg=$gnr;
+		EineGemarkung(false);
+	}
+} else {
+	// Die Formular-Eingabe interpretieren (kann auch ein Link sein)
+	$retzer=ZerlegungFsKennz($fskennz);
+//	if ($debug > 1) {echo "<p class='dbg'>Return Zerlegung (case) = '".$retzer."'</p>";}	
+	switch ($retzer) {
+	case 0: // leere Eingabe
+		if ($gfilter == 1) { // Die GUI ist bereits auf eine Gemeinde gefiltert
+			SuchGmkgName(); // Gemarkungen listen
+		} else {
+			ListGemeinden(); // alle Gemeinden Listen
+		}
+	break;
+	case 1:
+		if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsname ".$zgemkg."</p>";}
+		$gnr=SuchGmkgName();
+		if ($gnr > 0) {
+			$zgemkg=$gnr;
+			EineGemarkung(false);
+		}
+	break;
+	case 2:
+		if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsnummer ".$zgemkg."</p>";}	
+		EineGemarkung(true);
+	break;
+	case 3:
+		if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur."</p>";}
+		if ($phist)	{HistFlur();} else {EineFlur();}
+	break;
+	case 4:
+		if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur." FlurstÃŒck ".$zzaehler."</p>";}
+		if ($phist)	{HistFlurstueck();} else {EinFlurstueck();}
+	break;
+	case 5:
+		if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur." FlurstÃŒck ".$zzaehler."/".$znenner."</p>";}
+		if ($phist) {HistFlurstueck();} else {EinFlurstueck();}		
+	break;
+	case 9:
+		echo "<p class='err'>Bitte ein Flurst&uuml;ckskennzeichen eingegeben, Format 'gggg-fff-zzzz/nnn</p>";
+	break;
+	}
+}
+
+?>
+
+</body>
+</html>
Index: trunk/mapbender/http/nav/alkisnav_fls.htm
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fls.htm	(revision 216)
+++ trunk/mapbender/http/nav/alkisnav_fls.htm	(revision 216)
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="cache-control" content="no-cache">
+	<meta http-equiv="pragma" content="no-cache">
+	<meta http-equiv="expires" content="0">
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<base target="_self">
+	<title>ALKIS-Suche Flurst&uuml;ck</title>
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<script type="text/javascript" language="JavaScript">
+		// Parameter fuer Mandant aus url lesen
+		// &gkz=150&gemeinde=40&test=ja
+		var parms = location.search.split("&"); // 0: "?gkz=150" 1: "gemeinde=40" 2: "test=ja"
+		var arr = parms[0].split("=", 2); // 0: "?gkz"  1: "150"
+		var gkz = "000";
+		if(arr[0] == "?gkz") {gkz = arr[1];}
+		var arr = parms[1].split("=", 2)
+		var gem = "0";
+		if(arr[0] == "gemeinde") {gem = arr[1];}
+		// aktueller EPSG-Code
+		function sendGuiEpsg () {
+			var ind = parent.parent.getMapObjIndexByName("mapframe1");
+			var epsg = parent.parent.mb_mapObj[ind].getSRS();
+			document.forms[0].epsg.value = epsg;
+		}
+		function validate(){
+			sendGuiEpsg();
+			document.forms[0].gkz.value = gkz;
+			document.forms[0].gemeinde.value = gem;
+		}
+	</script>
+</head>
+<body onload="javascript:validate();">
+
+<div id='tabs'>
+<ul>
+	<script type="text/javascript" language="JavaScript">
+		document.writeln("<li><a target='_self' href='alkisnav_eig.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Adresse</a></li>");
+		document.writeln("<li><a target='_self' href='alkisnav_eig.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Name</a></li>");
+		document.writeln("<li class='aktiveTab'>Flurst&uuml;ck</li>");
+		document.writeln("<li><a target='_self' href='alkisnav_grd.htm?gkz=" + gkz + "&amp;gemeinde=" + gem + "'>Grundb.</a></li>");
+	</script>
+</ul>
+</div>
+
+<form class='nav' name='FlsGazetteerFrame' onsubmit='return validate()' target='FlsResultFrame' action='alkisnav_fls.php'>
+	<input name='gkz' type='hidden'>
+	<input name='gemeinde' type='hidden'>
+	<input name='epsg' type='hidden'>
+	<input class='textfield' name='fskennz' type='text' size='22' title='Flurst&uuml;ckskennzeichen'>
+	<input class='sbutton' type='submit' value='ok'>
+</form>
+
+<iframe name="FlsResultFrame" src="blank_fls.html" class='ResultFrame'></iframe>
+
+</body>
+</html>
Index: trunk/mapbender/conf/alkisnav_conf.php
===================================================================
--- trunk/mapbender/conf/alkisnav_conf.php	(revision 216)
+++ trunk/mapbender/conf/alkisnav_conf.php	(revision 216)
@@ -0,0 +1,48 @@
+<?php
+/* Einstellungen fuer Mapbender-Navigation mit ALKIS-Daten
+	ALKIS-PostGIS-Datenbank aus Konverter PostNAS 0.6
+	krz Mi.-Ra./Li.
+	2011-07-26
+	2011-11-07 Land
+	2011-12-09 $persfilter (gemeinde_person)
+*/
+
+# DB-Connection
+$host="localhost";
+$port="5432";
+$dbname="alkis";	// .$dbvers.$gkz - Mandant
+$dbvers="06";		// 05 oder 06 (steuert Format von .lage)
+$user="***";
+$password="***";
+
+# Pfad zu den ALKIS-Auskunft-Programmen
+$auskpath="../../../info/alkis";
+
+# Massstab zum Positionieren auf Flurstueck, Strasse, Hausnummer
+# in MapProxy gecachte Masstaebe verwenden
+$scalefs=750;
+$scalestr=2500;
+$scalehs=500;
+
+# default-Koordinatensystem der GUI
+$gui_epsg=31467;
+
+# Landes-Kennung
+$land="05"; // NRW
+
+# Filter:
+# Liste der relevanten Amtsgerichts-Nummern aus ax_dienststelle.stelle
+# Form: WHERE IN ()
+# Bei leerer Eingabe in Tab 'Grundb.'
+$ag_liste = "'2102','2105','2106','2107','2108','2110','2303','2307'";
+
+# Nur Personen anzeigen, die Eigentum in der Gemeinde (-liste) haben
+# "true" setzt voraus, dass die Hilfstabelle "gemeinde_person" gefuellt ist
+$persfilter=true;
+
+# hausnummernohnegebaeude - sollen Hausnummern ohne GebÃ€ude ausgegeben werden? 1 ja / 0 nein
+$hausnummernohnegebaeude = 1;
+
+# Entwicklungsumgebung
+$debug=0; // 0=Produktion, 1=mit Fehlermeldungen, 2=mit Informationen, 3=mit SQL
+?>
