Index: trunk/mapbender/http/nav/alkisnav_adr.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_adr.php	(revision 276)
+++ trunk/mapbender/http/nav/alkisnav_adr.php	(revision 278)
@@ -1,14 +1,14 @@
 <?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
-	2013-04-16 "import_request_variables" entfÃ€llt in PHP 5.4
+	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
+	2013-04-26	"import_request_variables" entfÃ€llt in PHP 5.4.
+					ZurÃŒck-Link, Titel der Transaktion anzeigen
 
 	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
@@ -20,5 +20,5 @@
 $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);
-?>
+echo <<<END
 
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
@@ -31,7 +31,17 @@
 	<title>ALKIS-Suche Adressen</title>
 	<link rel="stylesheet" type="text/css" href="alkisnav.css">
+	<script type='text/javascript'>
+		function transtitle (trans) { // Titel der letzten Transaktion anzeigen
+			document.getElementById('transaktiontitle').innerHTML = trans;
+		}
+	</script>
 </head>
 <body>
-<?php
+<a title="zur&uuml;ck" href='javascript:history.back()'>
+	<img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" />
+</a>
+<dfn class='title' id='transaktiontitle'></dfn>
+
+END;
 
 function suchStrName() {
@@ -92,10 +102,12 @@
 	}
 	if($cnt == 0) {
-		echo "<p>Keine Stra&szlig;e.</p>";
+		echo "<pclass='anz'>Keine Stra&szlig;e</p>";
 	} elseif($cnt == 1) { // Eindeutig
 		$str_schl=$gkey; // dann gleich weiter
 	} elseif($cnt >= $linelimit) {
-		echo "<p>.. und weitere</p>";			
-	}	
+		echo "<p class='anz'>".$cnt." Stra&szlig;en ... und weitere</p>";			
+	} elseif ($cnt > 1) {
+		echo "\n<p class='anz'>".$cnt." Stra&szlig;en</p>";	
+	}
 	return;
 }
@@ -157,11 +169,11 @@
 	}
 	if($cnt == 0) {
-		echo "\n<p>Keine Stra&szlig;e mit Schl&uuml;ssel ".$match."</p>";
+		echo "\n<p class='anz'>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>";	
+	} elseif ($cnt >= $linelimit) {
+		echo "\n<p>".$cnt." Stra&szlig;en ... und weitere</p>";			
+	} elseif ($cnt > 1) {
+		echo "\n<p class='anz'>".$cnt." Stra&szlig;en</p>";	
 	}	
 	return;
@@ -170,5 +182,5 @@
 function suchHausZurStr($showParent){
 	// Haeuser zu einer Strasse
-	global $con, $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $hausnummernohnegebaeude, $debug;
+	global $con, $str_schl, $gkz, $scalestr, $scalehs, $epsg, $gemeinde, $epsg, $gfilter, $debug;
 	// Strasse zum Strassenschluessel
 	$sql ="SELECT g.bezeichnung AS gemname, k.bezeichnung, k.land, k.regierungsbezirk, k.kreis, k.gemeinde, k.lage ";
@@ -216,7 +228,9 @@
 			if ($x > 0) { // Koord. bekommen?
 				echo "\n\t<a title='Positionieren 1:".$scalestr."' href='javascript:"; // mit Link
+						echo "transtitle(\"auf Stra&szlig;e positioniert\"); ";
 						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 "document.location.href=\"".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$str_schl."\"";
+					echo "' "; // end href
 					echo "\n\t\tonmouseover='parent.parent.showHighlight(" .$x. "," .$y. ")' ";
 					echo "\n\t\tonmouseout='parent.parent.hideHighlight()'";
@@ -252,5 +266,4 @@
 /* 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 ";
@@ -259,6 +272,6 @@
 		$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);";
-*/
+		$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 ";
@@ -292,5 +305,7 @@
 			//	echo "<a".$cls." href='";
 				echo "<a href='";
-					echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); ";
+					echo "javascript:";
+					echo "transtitle(\"auf Haus positioniert\"); ";
+					echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalehs."); ";
 					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
 				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
@@ -308,7 +323,7 @@
 		if($count > 0) {echo "\n</tr>";}
 		echo "\n</table>";
-		echo "\n<p class='hilfe'>".$cnt." Hausnummern</p>";
+		echo "\n<p class='anz'>".$cnt." Hausnummern</p>";
 	} else {
-		echo "\n<p class='err'>Keine Stra&szlig;e.</p>";
+		echo "\n<p class='anz'>Keine Stra&szlig;e</p>";
 	}
 	return;
@@ -318,13 +333,11 @@
 // ===========
 if(isset($epsg)) {
-	if ($debug >= 2) {echo "\n<p>aktueller EPSG='".$epsg."'</p>";} // aus MB
+	#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>";}	
+	#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 ($debug >= 2) {echo "<p>Filter Gemeinde = ".$gemeinde."</p>";}
 if ($gemeinde == "") {
 	$gfilter = 0; // ungefiltert
@@ -335,19 +348,22 @@
 }
 if (isset($str_schl)) { // aus Link
-	if ($debug >= 2) {echo "\n<p>Link Strassenschluessel '".$str_schl."'</p>";}
+	$trans="Hausnummern zur Stra&szlig;e";
 	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
+	if (trim($street, "*,0..9") == "") { // Zahl, ggf. mit Wildcard
+		$trans="Suche Stra&szlig;enschl&uuml;ssel \"".$street."\"";
+		suchStrKey();
 	} else {
-		if ($debug >= 2) {echo "\n<p>Suche Name='".$street."'</p>";}
-		suchStrName(); // Suche nach Name
+		$trans="Suche Stra&szlig;enname \"".$street."\"";
+		suchStrName();
 	}
 	if(isset($str_schl)) { // Eindeutiges Ergebnis
-		if ($debug >= 2) {echo "\n<p>weitere Suche Haus zu ='".$str_schl."'</p>";}
+		$trans="1 Stra&szlig;e gefunden, Hausnummern";
 		suchHausZurStr(false);
 	}
 }
+// Titel im Kopf anzeigen
+echo "\n<script type='text/javascript'>\n\ttranstitle('".$trans."')\n</script>";
+
 ?>
 
Index: trunk/mapbender/http/nav/alkisnav_grd.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_grd.php	(revision 276)
+++ trunk/mapbender/http/nav/alkisnav_grd.php	(revision 278)
@@ -1,17 +1,23 @@
 <?php
 /* Version vom
-	2011-10-24 Nach Pos-Klick Highlight erneuern statt hideHighlight
-	2011-11-17 Nachweis-Links ÃŒber javascript im neuen Hochformat-Fenster
-	2011-12-14 "window.open(..,width=680"
-	2012-01-16 Blattnummer in 2 Varianten suchen
-	2012-01-17 Blattnummer ohne Buchstabe in 3 Varianten suchen
-	2013-04-16 "import_request_variables" entfÃ€llt in PHP 5.4
+	2011-10-24	Nach Pos-Klick Highlight erneuern statt hideHighlight
+	2011-11-17	Nachweis-Links ÃŒber javascript im neuen Hochformat-Fenster
+	2011-12-14	"window.open(..,width=680"
+	2012-01-16	Blattnummer in 2 Varianten suchen
+	2012-01-17	Blattnummer ohne Buchstabe in 3 Varianten suchen
+	2013-04-16	"import_request_variables" entfÃ€llt in PHP 5.4
+	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung"
+					Code aus _eig nach_fkt ausgelegert, hier mit nutzen. 
+					Dazu Var-Namen harmonisieren: $gblatt wird $blattgml
+					ZurÃŒck-Link, Titel der Transaktion anzeigen.
 */
 $cntget = extract($_GET);
-include("../../conf/alkisnav_conf.php");
+
+include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
+include("alkisnav_fkt.php"); // Funktionen
+
 $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);
-?>
-
+echo <<<END
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
@@ -28,9 +34,17 @@
 			window.open(link,'','left=10,top=10,width=680,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
 		}
+		function transtitle(trans) {
+			document.getElementById('transaktiontitle').innerHTML = trans;
+		}
 	</script>
 </head>
 <body>
-
-<?php
+<a title="zur&uuml;ck" href='javascript:history.back()'>
+	<img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" />
+</a>
+<dfn class='title' id='transaktiontitle'></dfn>
+
+END;
+
 function is_ne_zahl($wert) {
 	// Prueft, ob ein Wert ausschlieÃlich aus den Zahlen 0 bis 9 besteht
@@ -116,7 +130,9 @@
 	}
 	if($cnt == 0){ // falsch configuriert!
-		echo "\n<p class='err'>Kein Amtsgericht aus Liste ".$$liste_ag.".</p>";
+		echo "\n<p class='anz'>Kein Amtsgericht aus Liste ".$$liste_ag.".</p>";
 	} elseif ($cnt >= $linelimit) {
-		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+		echo "\n<p title='Bitte eindeutiger qualifizieren'>".$cnt." Amtsgerichte ... und weitere</p>";
+	} elseif ($cnt > 1) {
+		echo "\n<p class='anz'>".$cnt." Amtsgerichte</p>";
 	}
 	return 0;
@@ -125,9 +141,13 @@
 function ListGBBez($liste_ag, $mit_ag) {
 	// Grundbuch-Bezirke auflisten.
+	// +++ auch wenn BlÃ€tter da sind, kann es eine Sackgasse sein.
+	// +++ manchmal haben die BlÃ€tter keine FlurstÃŒcke.
 	global $con, $gkz, $gemeinde, $epsg, $debug, $gbkennz;
-	$linelimit=70;
+	$linelimit=90;
 	$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
+	// Diese Subquery stellt sicher, dass nur Bezirke aufgelistett werden, die auch BlÃ€tter enthalten:
+	$sql.="AND NOT (SELECT gml_id FROM ax_buchungsblatt b WHERE b.land=g.land and b.bezirk=g.bezirk LIMIT 1) IS NULL ";
 	$sql.="ORDER BY g.bezeichnung LIMIT $1 ;";
 	$res = pg_prepare("", $sql);
@@ -154,8 +174,10 @@
 		$cnt++;
 	}
-	if($cnt == 0){ // falsch configuriert
-		echo "\n<p class='err'>Kein Grundbuchbezirk zu den Amtsgerichten ".$liste_ag.".</p>";
+	if($cnt == 0){
+		echo "\n<p class='anz'>Kein Bezirk mit Bl&auml;ttern.</p>";
 	} elseif ($cnt >= $linelimit) {
-		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+		echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Bezirke ... und weitere</p>";
+	} elseif($cnt > 1) {
+		echo "\n<p class='anz'>".$cnt." Bezirke</p>"; // im Limit	
 	}
 	return 0;
@@ -194,5 +216,5 @@
 		$ag=htmlentities($row["ag"], ENT_QUOTES, "UTF-8");		
 		$anr=$row["stelle"];
-		echo "\n<div class='gk' title='GB-Bezirk'>";
+		echo "\n<div class='gk' title='Grundbuch-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."'>";		
@@ -203,9 +225,11 @@
 	}
 	if($cnt == 0){ 
-		echo "\n<p class='err'>Kein Grundbuchbezirk.</p>";
+		echo "\n<p class='anz'>Kein Grundbuchbezirk.</p>";
 	} elseif ($cnt >= $linelimit) {
-		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+		echo "\n<p title='Bitte eindeutiger qualifizieren'>".$cnt." Bezirke ... und weitere</p>";
 	} elseif ($cnt == 1) {
 		return $gnr; // Wenn eindeutig, gleich weiter
+	} elseif ($cnt > 1) {
+		echo "\n<p class='anz'>".$cnt." Bezirke</p>"; // im Limit	
 	}
 	return 0;
@@ -216,11 +240,11 @@
 	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 ...
+	// Dies Limit ist nicht ausreichend fÃŒr alle BlÃ€tter eines Bezirks, aber ...
 	// Wenn man die Blatt-Nr nicht kennt, kommt man hier sowieso nicht weiter.
-	// Es nutzt also nichts, hier Tausende Nummern aufzulisten.
+	// Es nutzt also nichts, hier tausende Nummern aufzulisten.
+	// +++ BlÃ€tter-Funktion einfÃŒhren analog Modul _eig
 	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 ;";
+		$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle WHERE g.bezirk= $1 ;";
 		$v=array($zgbbez);
 		$res=pg_prepare("", $sql);
@@ -279,15 +303,16 @@
 				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 "Blatt <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;blattgml=".$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>";
-		}
+		echo "\n<p class='anz'>Kein Blatt im Bezirk.</p>";
+	} elseif($cntbl >= $linelimit) {
+		echo "\n<p class='anz'>".$cntbl." Bl&auml;tter ... und weitere</p>";
+		// +++ Hier oft ÃŒberschritten! BlÃ€tter-Funktion einfÃŒhren
+		echo "\n<p>Geben sie ein: '".$zgbbez."-999A'<br>wobei '999A' = gesuchtes GB-Blatt</p>";
+	} elseif ($cntbl > 1) {
+		echo "\n<p class='anz'>".$cntbl." Bl&auml;tter</p>"; // im Limit	
 	}
 	return;
@@ -320,5 +345,5 @@
 	if($cntbl == 0) { 
 		echo "\n<p class='err'>Grundbuchblatt '".$zgbbez."-".$zblatt."' nicht gefunden.</p>";
-	} elseif($cntbl == 1) {
+	} elseif ($cntbl == 1) {
 		return $bl_gml;
 	}
@@ -326,20 +351,22 @@
 }
 
-function EinBlatt($showParent) {
+/*
+function EinBlatt_ALT($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'>";
+	// UrsprÃŒngliche Version bis 2013-04-24
+	global $con, $gkz, $debug, $gemeinde, $epsg, $auskpath, $zgbbez, $zblatt, $zblattn, $zblattz, $blattgml, $zbvnr;
+
+	if ($showParent) {
+	// +++ nur der Schluessel ist bekannt. Bezirks-Namen und Amtsgericht noch ermitteln ++++
+		echo "\n<div class='gk' title='Grundbuch-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<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$blattgml."\")'>";
 				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 "Blatt <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;blattgml=".$blattgml."&amp;gbkennz=".$zgbbez."-".$zblatt."'>&nbsp;".$zblattn.$zblattz."&nbsp;</a>";
 		echo "\n</div>";
 	}
@@ -351,5 +378,5 @@
 	// +++ Buchungen ohne FLST weglassen?
 	// +++ Counter FLST ausgeben, Buchungen mit 0 weglassen 
-	$v=array($gblatt);
+	$v=array($blattgml);
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
@@ -369,5 +396,5 @@
 	}
 	if($cntbu == 0) { 
-		echo "\n<p class='err'>Keine Buchung gefunden.</p>";
+		echo "\n<p class='anz'>Keine Buchung gefunden.</p>";
 	} elseif($cntbu == 1) {
 		$zbvnr=$lfd; // mit dieser BVNR gleich weiter machen
@@ -380,6 +407,36 @@
 			$zblattz=strtoupper(substr($zblatt,$len-1,1)); 
 		}
+	} else {
+		echo "\n<p class='anz'>".$cntbu."Buchungen.</p>";
 	}
 	return $cntbu;
+}
+*/
+
+function EinBlatt($showParent) {
+	// Kennzeichen Bezirk + Blatt wurde eingegeben
+	global $con, $gkz, $debug, $gemeinde, $epsg, $auskpath, $zgbbez, $zblatt, $zblattn, $zblattz, $blattgml, $zbvnr;
+
+	if ($showParent) {
+	// +++ nur der Schluessel ist bekannt. Bezirks-Namen und Amtsgericht noch ermitteln ++++
+		echo "\n<div class='gk' title='Grundbuch-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>";
+		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=".$blattgml."\")'>";
+				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;blattgml=".$blattgml."&amp;gbkennz=".$zgbbez."-".$zblatt."'>&nbsp;".$zblattn.$zblattz."&nbsp;</a>";
+		echo "\n</div>";
+	}
+
+	// Blatt -> Buchungsstelle -> Flurstueck
+	$linelimit = 200; // Max. Anzahl FS
+	GB_Buchung_FS($linelimit); // Externe Function
+
+	return 0; 
+	
 }
 
@@ -427,12 +484,14 @@
 	// Die gml_id der Buchungsstelle ist bekannt.
 	global $con, $gkz, $debug, $gemeinde, $epsg, $scalefs, $epsg, $auskpath, $gbuchung, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr, $gfilter;
+	// NoLimit?
 	if ($showParent) { // wenn Kennzeichen bekannt ist, dann auch Blatt ausgeben
-		if (isset($zgbbez) and isset($zblatt)) {
+
+		if ($zgbbez.$zblatt != "") {
+			// +++ SchlÃŒssel ist bekannt. Namen und Amtsgericht dazu ermitteln
+			// +++ oder Namen als &bez= ÃŒbermitteln?
 			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'>";
@@ -443,4 +502,5 @@
 			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'> ";
@@ -452,19 +512,34 @@
 	// +++ Filter "Gemeinde" berÃŒcksichtigt!! Wenn gesetzt.
 
-	// Buchungsstelle -> Flurstueck
-	$sql ="SELECT t.gemeinde, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
+	// SQL-Bausteine
+	$sql1 ="SELECT g.gemeinde, g.gemarkungsname, 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 ";
+		$sql1.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
+		$sql1.="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;";
+		$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.="FROM ";
+
+	$sqla1 ="JOIN alkis_beziehungen vfb ON s1.gml_id = vfb.beziehung_zu ";
+	$sqla2 ="JOIN alkis_beziehungen vfb ON s2.gml_id = vfb.beziehung_zu ";
+
+	// 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 ";
+
+	$sql2 ="JOIN ax_flurstueck f ON ....  ";
+	$sql2.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
+	$sql2.="WHERE v.beziehungsart='istGebucht' AND v.beziehung_zu= $1 "; // id buchungsstelle
+	switch ($gfilter) { // Filter Gemeinde
+		case 1: // Einzelwert
+			$sql2.="AND g.gemeinde=".$gemeinde." "; break;
+		case 2: // Liste
+			$sql2.="AND g.gemeinde in (".$gemeinde.") "; break;
+	}
+	$sql2.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+
+	$sql=$sql1.$sqla1.$sql2; // Direkte Buchungen
 	$v=array($gbuchung);
 	$res=pg_prepare("", $sql);
@@ -478,5 +553,5 @@
 		$fs_gml=$row["gml_id"];
 		$gemei=$row["gemeinde"];
-		$gmkg=$row["bezeichnung"];
+		$gmkg=$row["gemarkungsname"];
 		$flur=$row["flurnummer"];
 		$fskenn=$row["zaehler"];
@@ -484,8 +559,10 @@
 		$x=$row["x"];
 		$y=$row["y"];
+
+		// FILTER OBEN, IN SQL - nicht HIER
 		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>";}
-
+			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." )";
@@ -506,5 +583,9 @@
 		$zfs++;
 	}
-	if($zfs == 0) {echo "\n<p class='err'>Kein Flurst&uuml;ck.</p>";}
+	if($zfs == 0) {
+		echo "\n<p class='anz'>Kein Flurst&uuml;ck.</p>";
+	} elseif($zfs > 1) {
+		echo "\n<p class='anz'>".$zfs." Flurst&uuml;ck.</p>";
+	}
 	return;
 }
@@ -514,66 +595,78 @@
 // ===========
 if(isset($epsg)) {
-	if ($debug >= 2) {echo "<p class='dbg'>aktueller EPSG='".$epsg."'</p>";} // aus MB
+	#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>";}	
+	#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
+	#if ($debug >= 2) {echo "<p class='dbg'>Kein Filter Gemeinde</p>";}
 } elseif(strpos($gemeinde, ",") === false) {
 	$gfilter = 1; // Einzelwert
+	#if ($debug >= 2) {echo "<p class='dbg'>Filter Gemeinde Einzelwert = '".$gemeinde."'</p>";}
 } else {
 	$gfilter = 2; // Liste
+	#if ($debug >= 2) {echo "<p class='dbg'>Filter Gemeinde Liste = '".$gemeinde."'</p>";}
 }
 
 // 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>";}
+#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>";}
+// Dann hat das Prioritaet, also *nicht* nach $gbkennz suchen.
+if ($gbuchung != "") { // gml der Buchungsstelle
+	$trans="Buchungsstelle";
 	EinGrundstueck(true);
-} elseif(isset($gblatt)) { // gml des GB-Blattes
-	if ($debug >= 2) {echo "<p class='dbg'>Link Blatt(gml)=".$gblatt."</p>";}
+
+} elseif($blattgml != "") { // gml des GB-Blattes
+
+	// neue Version -> function GB_Buchung_FS
+	$trans="GB-Blatt mit Buchungen und Flst.";
+	EinBlatt(true);
+
+/*	alte Version (ohne die Function))
 	if (EinBlatt(true) == 1) { // darauf genau eine Buchung
 		$gbuchung=gml_buchungsstelle(); // gml_id zum Kennzeichen
+		$trans="Grundbuch-Blatt und 1 Buchung";
 		EinGrundstueck(false);
 	}
-} elseif(isset($ag)) { // Key 'stelle' des Amtsgerichtes
-	if ($debug >= 2) {echo "<p class='dbg'>Link Amtsgericht=".$ag."</p>";}
+*/
+
+} elseif(isset($ag)) { // Key des Amtsgerichtes
+	#if ($debug >= 2) {echo "<p class='dbg'>Link Amtsgericht=".$ag."</p>";}
+	$trans="GB-Bezirke zum Amtsgericht";
 	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
+
+} else { // Kein Self-Link, Eingabe im Formular
+
+	switch ($kennztyp) {
+		case 0: // keine Eingabe
+			$trans="Liste der Amtsgerichte";
+			ListAG($ag_liste);
 			break;
 		case 1: // Eingabe Bezirk-Name (-Teil) -> gefilterte Liste der Bezirke
-			if ($debug >= 2) {echo "<p class='dbg'>Eingabe Bez. ".$zgbbez."</p>";}
+			$trans="Grundbuchbezirke gefiltert";
 			$beznr=SuchGBBezName();
 			if ($beznr > 0) {  // eindeutig
 				$zgbbez=$beznr;
+				$trans="Bezirk gefunden, Bl&auml;tter dazu";
 				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>";}	
+			$trans="Bl&auml;tter im GB-Bezirk";
 			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		
+			$trans="Buchungen auf GB-Blatt";
+			$blattgml=gml_blatt(); // gml_id zum Blatt suchen
+			if ($blattgml != "") { // gefunden		
 				if (EinBlatt(true) == 1) { // darauf genau eine Buchung
+					$trans="GB-Blatt und 1 Buchung";
 					$gbuchung=gml_buchungsstelle(); // gml_id zum Kennzeichen
 					EinGrundstueck(false);
@@ -582,17 +675,22 @@
 			break;
 		case 4: // Eingabe Buchung (Grundstueck) -> Liste der Flurstuecke
-			if ($debug >= 2) {echo "<p class='dbg'>Eingabe Bez. ".$zgbbez." Blatt ".$zblatt." BVNR ".$zbvnr."</p>";}
+			$trans="Flurst. zur Buchungsstelle";
 			$gbuchung=gml_buchungsstelle(); // gml_id zum Kennzeichen
 			if ($gbuchung != "") { // .. wurde geliefert 
+				$trans="Buchungsstelle und 1 Flurst.";
 				EinGrundstueck(true);
 			}
 			break;
 		case 9: // Fehler
-			echo "<p class='err'>Bitte ein g&uuml;ltiges Grundbuchkennzeichen eingegeben, Format 'gggg-999999A-llll</p>";
+			$trans="fehlerhafte Eingabe";
+			echo "\n<p class='err'>Bitte ein g&uuml;ltiges Grundbuchkennzeichen eingegeben, Format 'gggg-999999A-llll</p>";
 			break;
 	}
 }
+// Titel im Kopf anzeigen
+echo "\n<script type='text/javascript'>\n\ttranstitle('".$trans."')\n</script>";
 
 ?>
+
 </body>
 </html>
Index: trunk/mapbender/http/nav/alkisnav.htm
===================================================================
--- trunk/mapbender/http/nav/alkisnav.htm	(revision 276)
+++ trunk/mapbender/http/nav/alkisnav.htm	(revision 278)
@@ -19,6 +19,6 @@
 		// 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 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];}
@@ -32,5 +32,5 @@
 
 <script type="text/javascript" language="JavaScript">
-	document.writeln("<!-- gkz=" + gkz + " gemeinde=" + gem + "-->");
+	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>");
Index: trunk/mapbender/http/nav/alkisnav.css
===================================================================
--- trunk/mapbender/http/nav/alkisnav.css	(revision 276)
+++ trunk/mapbender/http/nav/alkisnav.css	(revision 278)
@@ -4,4 +4,6 @@
 	 2011-11-09 Historie, dbg
 	 2011-12-09 p.nam
+	 2012-12-13 td.hsnro
+	 2013-04-19 frames hoeher
 */
 body,p,a,.textfield,.sbutton	{font-family: Verdana, Arial, Helvetica, sans-serif;}
@@ -14,13 +16,18 @@
 p.err		{font-size: 11px; color: red;}	/* Fehler -> Anwender */
 p.dbg		{font-size: 10px; color: gray;}	/* Debug -> Entwickler */
+p.ein, p.anz, p.blt	{font-size: 9px; text-align: right;}	/* Einleitung, Anzahl am Ende, BlÃ€ttern weitere ... */
+p.ein  	{color: navy; font-weight: bold;}
+p.anz, p.blt	{color: purple;}
 
-a			{text-decoration: none;} /* font-size: 11px; */
+a			{text-decoration: none;}
 a:hover, a:active	{color: red;}
 a.hislnk {color: gray; font-style: italic; text-align: right; padding-left: 50px;}	/* Link zur Historie */
+a.hsnro	{color: gray; font-style: italic;} /* HsNr ohne Haus */
+a.blt		{color: maroon; background-color: yellow;} 	/* Link weitere ... */
 
 /* 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.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 */
@@ -34,21 +41,13 @@
 
 div.stu		{color: maroon; font-size: 13px;} /* Strasse - Ueberschrift */
-div.stl		{color: maroon; font-size: 11px; margin-top: 3px;} /* Strasse - Liste*/
+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;
-}
+dfn.title	{color: maroon; font-size: 10px; text-align: right; padding-left: 8px; padding-right: 4px;}
+
+.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 */
@@ -56,12 +55,7 @@
 /* Registertabs */
 /* ul in einem <div id='tabs' */
-div#tabs ul {
-	position: absolute; top: 0px;
+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;
-}
+	padding: 0px; width: 220px; text-align: left; border: 0px dashed #00aa00;}
 div#tabs li {
 	cursor: pointer;
@@ -82,21 +76,13 @@
 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 */
+	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;
-}
+/* Anpassen an width des Tab in Mapbender */
+/* in alkisnav.htm */
+/* ALT: OuterFrame: height: 350px; ResultFrame: height: 240px; */
+iframe.OuterFrame{width: 225px; height:400px; 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;
-}
+iframe.ResultFrame {position: absolute; top: 78px; width: 220px; height: 290px;
+	padding: 0px; margin: 0px; border: 0px dotted #00ff00;}
Index: trunk/mapbender/http/nav/alkisnav_fkt.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 278)
+++ trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 278)
@@ -0,0 +1,178 @@
+<?php
+/* Version vom 
+	2013-04-26	NEU Function "GB_Buchung_FS" ausgelagert.
+					Code aus aus _eig soll auch in _grd verwendet werden
+		Dazu Var-Namen harmonisieren:
+		_eig    _grd     NEU
+		$gb     $gblatt  $blattgml
+*/
+
+function GB_Buchung_FS ($linelimit) {
+// Zu einem Grundbuch-Blatt (identifiziert ÃŒber seine gml_id):
+//  - suchen der Buchungen (Gruppenwechsel) 
+//  - und FlurstÃŒcke (Links)
+// Wird verwendet in den Modulen _eig und _grd.
+// 2013-04-26	Noch kein BlÃ€ttern und noch keine BerÃŒcksichtigung des Filters auf "Gemeinde"
+// ToDo: ZÃ€hler fÃŒr Blatt, Buchung, FS - am Ende ausgeben
+
+	global $gkz, $gemeinde, $blattgml, $scalefs, $auskpath, $epsg, $gfilter, $debug;
+
+	// 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.gemarkung, g.gemarkungsname ";
+   $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 pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
+	$sql2.="WHERE vbg.beziehung_zu= $1 AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' ";
+	switch ($gfilter) {
+		case 1: // Einzelwert
+			$sql2.="AND g.gemeinde=".$gemeinde." "; break;
+		case 2: // Liste
+			$sql2.="AND g.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($blattgml, $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;
+	$gwbv="";
+	while($row = pg_fetch_array($res)) {	
+
+		// Gruppenwechsel auf Ebene Buchungs-Stelle (BVNR)
+		$bvnr=$row["lfd"];
+		if ($gwbv != $bvnr) {
+			if ($bvnr == 0) {
+				$bvnra = "-";
+			} else {
+				$bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
+			}
+			$gwbv = $bvnr; // Steuerg GW BVNR
+			echo "\n<div class='gs' title='Grundst&uuml;ck'>";
+			echo "<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
+			echo "Buchung ".$bvnra."</div>";
+		}
+
+		$fs_gml=$row["gml_id"];
+		$gmkg=$row["gemarkungsname"];
+		$flur=$row["flurnummer"];
+		$fskenn=$row["zaehler"];
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
+		$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\t".$gmkg." <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
+					echo "javascript:";
+					echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
+					echo "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 ".$flur." ".$fskenn."</a>";
+		echo "\n</div>";
+		$zfs1++;
+	}
+	if($zfs1 == 0) { 
+		// "nichts gefunden" erst melden, wenn auch Teil 2 (Rechte an) nichts findet
+	} elseif($zfs1 >= $linelimit) {
+		echo "\n<p class='anz'>... und weitere</p>";
+	// +++  BlÃ€ttern einfÃŒhren?
+	} elseif($zfs1 > 1) { // ab 2
+		echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke zum Grundbuch</p>";
+	}
+
+	if($zfs1 > 1) { // wenn's was zu trennen gibt
+		echo "<hr>"; // Trennen
+	}
+
+	// Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
+	// buchungsStelle2 < an < buchungsStelle1
+	$sql=$sql1.$sqlz.$sqla2.$sql2; // Rechte an
+
+	$v=array($blattgml, $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='dbg'>".$sql."</p>";}
+		return;
+	}
+	$zfs2=0;
+	$gwbv="";
+	while($row = pg_fetch_array($res)) {	
+
+		// Gruppenwechsel auf Ebene Buchungs-Stelle (BVNR)
+		$bvnr=$row["lfd"];
+		if ($gwbv != $bvnr) {
+			if ($bvnr == 0) {
+				$bvnra = "-";
+			} else {
+				$bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
+			}
+			$gwbv = $bvnr; // Steuerg GW BVNR
+			echo "\n<div class='gs' title='Grundst&uuml;ck'>";
+			echo "<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
+			echo "Buchung ".$bvnra."</div>";
+		}
+
+		$fs_gml=$row["gml_id"];
+		$gmkg=$row["gemarkungsname"];
+		$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 ".$gmkg." <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
+					echo "javascript:";
+					echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
+					echo "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 ".$flur." ".$fskenn."</a>";
+		echo "\n</div>";
+		$zfs2++;
+	}
+	if($zfs1 + $zfs2 == 0) { 
+		echo "\n<p class='anz'>Kein Flurst&uuml;ck im berechtigten Bereich.</p>";
+	} elseif($zfs >= $linelimit) {
+		echo "\n<p class='anz'>... und weitere</p>";
+	// +++ BlÃ€ttern einfÃŒhren?
+	} elseif($zfs2 > 1) { // keine Meldung "nichts gefunden - Rechte an" wenn Treffer in Teil 1
+		echo "\n<p class='anz'>".$zfs2." Rechte an Flurst.</p>";
+	}
+	return;
+}
+
+?>
Index: trunk/mapbender/http/nav/alkisnav_fls.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fls.php	(revision 276)
+++ trunk/mapbender/http/nav/alkisnav_fls.php	(revision 278)
@@ -1,15 +1,17 @@
 <?php
 /* Version vom
-	2011-10-24 Nach Pos-Klick Highlight erneuern statt hideHighlight
-	2011-11-07 optional auch Historische FS suchen, Link auf Buchauskunft-Modul alkisfshis.php
-	2011-11-09 "h" hinter Flur oder FlurstÃŒck sucht sofort in Historie
+	2011-10-24	Nach Pos-Klick Highlight erneuern statt hideHighlight
+	2011-11-07	optional auch Historische FS suchen, Link auf Buchauskunft-Modul alkisfshis.php
+	2011-11-09	"h" hinter Flur oder FlurstÃŒck sucht sofort in Historie
 					Ausgabe Flur in Varianten aktuell/historisch mit gegenseitigen Verweisen
-	2011-11-11 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
-	2011-11-17 Nachweis-Links ÃŒber javascript im neuen Hochformat-Fenster
-	2013-04-16 "import_request_variables" entfÃ€llt in PHP 5.4, 
-				Fehlerkorrektur Komma in SQL bei FS-Suche.
+	2011-11-11	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
+	2011-11-17	Nachweis-Links ÃŒber javascript im neuen Hochformat-Fenster
+	2013-04-16	"import_request_variables" entfÃ€llt in PHP 5.4, 
+					Fehlerkorrektur Komma in SQL bei FS-Suche.
+	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung"
+					ZurÃŒck-Link, Titel der Transaktion anzeigen
 */
 $cntget = extract($_GET);
@@ -17,6 +19,5 @@
 $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);
-?>
-
+echo <<<END
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
@@ -33,9 +34,16 @@
 			window.open(link,'','left=10,top=10,width=620,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
 		}
+		function transtitle(trans) {
+			document.getElementById('transaktiontitle').innerHTML = trans;
+		}
 	</script>
 </head>
 <body>
-
-<?php
+<a title="zur&uuml;ck" href='javascript:history.back()'>
+	<img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" />
+</a>
+<dfn class='title' id='transaktiontitle'></dfn>
+
+END;
 
 function is_ne_zahl($wert) {
@@ -146,19 +154,16 @@
 	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
+	$sql ="SELECT gemeinde, gemeindename FROM pp_gemeinde ";
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql.="WHERE g.gemeinde=".$gemeinde." ";
+			$sql.="WHERE gemeinde=".$gemeinde." ";
 			break;
 		case 2: // Liste
-			$sql.="WHERE g.gemeinde in (".$gemeinde.") ";
+			$sql.="WHERE gemeinde in (".$gemeinde.") ";
 			break;
 		default: // kein Filter
 			break;
 	}
-	$sql.=" ORDER BY g.bezeichnung LIMIT $1 ;";
+	$sql.=" ORDER BY gemeindename LIMIT $1 ;";
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", array($linelimit));
@@ -170,7 +175,8 @@
 	$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"];
+		$gemeindename=$row["gemeindename"];
+		$stadt=htmlentities($gemeindename, ENT_QUOTES, "UTF-8");
+		$bez=urlencode($gemeindename);  // Uebergeben an ListGmkgInGemeinde
+		$gnr=$row["gemeinde"];
 		echo "\n<div class='gm' title='Gemeinde'>";
 			echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";
@@ -181,9 +187,12 @@
 	}
 	if($cnt == 0){ 
-		echo "\n<p class='err'>Keine Gemeinde.</p>";
+		echo "\n<p class='anz'>Keine Gemeinde.</p>";
 	} elseif($cnt >= $linelimit) {
-		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+		echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Gemeinden ... und weitere</p>";
+		// +++ BlÃ€ttern ?
 	} elseif($cnt == 1) { // Eindeutig!
 		return $gnr; 
+	} else {
+		echo "\n<p class='anz'>".$cnt." Gemeinden</p>";
 	}
 	return 0;
@@ -194,7 +203,6 @@
 	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 ;";
+	$sql ="SELECT gemarkung, gemarkungsname FROM pp_gemarkung ";
+   $sql.="WHERE gemeinde= $1 ORDER BY gemarkungsname LIMIT $2 ;";
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", array($gkey, $linelimit));
@@ -211,6 +219,6 @@
 	$cnt = 0;
 	while($row = pg_fetch_array($res)) {
-		$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
-		$gnr=$row["gemarkungsnummer"];
+		$gnam=htmlentities($row["gemarkungsname"], ENT_QUOTES, "UTF-8");
+		$gnr=$row["gemarkung"];
 		echo "\n<div class='gk' title='Gemarkung'>";
 			echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
@@ -221,9 +229,12 @@
 	}
 	if($cnt == 0){ 
-		echo "\n<p class='err'>Keine Gemarkung.</p>";
+		echo "\n<p class='anz'>Keine Gemarkung.</p>";
 	} elseif($cnt >= $linelimit) {
-		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+		echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Gemarkungen ... und weitere</p>";
+		// +++ BlÃ€ttern ?
 	} elseif($cnt == 1) { // Eindeutig!
 		return $gnr; 
+	} else {
+		echo "\n<p class='anz'>".$cnt." Gemarkungen</p>";
 	}
 	return 0;
@@ -239,18 +250,22 @@
 		$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 ";
+	$sql ="SELECT g.gemeinde, g.gemarkung, g.gemarkungsname ";
+	If ($gfilter == 0 OR $gfilter == 2) { // Stadt anzeigen
+		$sql.=", s.gemeindename FROM pp_gemarkung g JOIN pp_gemeinde s ON g.gemeinde = s.gemeinde ";
+	} else {
+		$sql.="FROM pp_gemarkung g ";
+	}
+	$sql.="WHERE g.gemarkungsname ILIKE $1 ";
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql.="AND v.gemeinde=".$gemeinde." ";
+			$sql.="AND g.gemeinde = ".$gemeinde." ";
 			break;
 		case 2: // Liste
-			$sql.="AND v.gemeinde in (".$gemeinde.") ";
+			$sql.="AND g.gemeinde in (".$gemeinde.") ";
 			break;
 		default: // kein Filter
 			break;
 	}
-	$sql.=" ORDER BY g.bezeichnung LIMIT $2 ;";
+	$sql.=" ORDER BY g.gemarkungsname LIMIT $2 ;";
 	$v=array($match, $linelimit);
 	$res=pg_prepare("", $sql);
@@ -263,7 +278,7 @@
 	$cnt = 0;
 	while($row = pg_fetch_array($res)) {
-		$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
-		$gnr=$row["gemarkungsnummer"];
-		$stadt=$row["gemeindename"];
+		$gnam=htmlentities($row["gemarkungsname"], ENT_QUOTES, "UTF-8");
+		$gnr=$row["gemarkung"];
+
 		echo "\n<div class='gk' title='Gemarkung'>";
 			echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
@@ -272,8 +287,8 @@
 			switch ($gfilter) {
 				case 0: // Kein Filter
-					echo " ".$stadt;
+					echo " ".$row["gemeindename"];
 					break;
 				case 2: // Liste
-					echo " ".$stadt;
+					echo " ".$row["gemeindename"];
 					break;
 				default: // Einzelwert
@@ -284,9 +299,11 @@
 	}
 	if($cnt == 0){ 
-		echo "\n<p class='err'>Keine Gemarkung.</p>";
+		echo "\n<p class='anz'>Keine Gemarkung.</p>";
 	} elseif($cnt >= $linelimit) {
-		echo "\n<p title='Bitte eindeutiger qualifizieren'>... und weitere</p>";
+		echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Gemarkungen ... und weitere</p>";
 	} elseif($cnt == 1) { // Eindeutig!
 		return $gnr; 
+	} else {
+		echo "\n<p class='anz'>".$cnt." Gemarkungen</p>";
 	}
 	return 0;
@@ -338,7 +355,9 @@
 	}
 	if($zfl == 0) { 
-		echo "\n<p class='err'>Keine Flur.</p>";
-	} elseif($cnt >= $linelimit) {
-		echo "\n<p>... und weitere</p>";
+		echo "\n<p class='anz'>Keine Flur.</p>";
+	} elseif($zfl >= $linelimit) {
+		echo "\n<p class='anz'>".$zfl." Fluren ... und weitere</p>";
+	} elseif($zfl > 1) {
+		echo "\n<p class='anz'>".$zfl." Fluren</p>";
 	}
 	return;
@@ -379,5 +398,7 @@
 			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 "javascript:";
+					echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
+					echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
 					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
 				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
@@ -387,7 +408,9 @@
 	}
 	if($zfs == 0) { 
-		echo "\n<p class='err'>Kein Flurst&uuml;ck.</p>";
+		echo "\n<p class='anz'>Kein Flurst&uuml;ck.</p>";
 	} elseif($zfs >= $linelimit) {
-		echo "\n<p>... und weitere</p>";
+		echo "\n<p class='anz'>".$zfs." Flurst&uuml;cke... und weitere</p>";
+	} elseif($zfs > 1) {
+		echo "\n<p class='anz'>".$zfs." Flurst&uuml;cke</p>";
 	}
 	return;
@@ -444,8 +467,10 @@
 	}
 	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>";}
+		echo "\n<p class='anz'>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>";
+		echo "\n<p class='anz'>".$zfs." historische Flurst. ... und weitere</p>";
+	} elseif($zfs > 1) {
+		echo "\n<p class='anz'>".$zfs." historische Flurst&uuml;cke</p>";
 	}
 	return;
@@ -490,5 +515,7 @@
 			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 "javascript:";
+					echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
+					echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
 					echo "parent.parent.showHighlight(".$x.",".$y.");' ";
 				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
@@ -578,5 +605,7 @@
 				// 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 "javascript:";
+						echo "transtitle(\"auf H-Flurst&uuml;ck positioniert\"); ";
+						echo "parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
 						echo "parent.parent.showHighlight(".$x.",".$y.");' ";
 					echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
@@ -663,6 +692,6 @@
 				}
 				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>";}
+					echo "\n<p class='err'>keine Nachfolger gefunden</p>";
+					if ($debug > 1) {echo "\n<p class='dbg'>SQL=<br>".$sqln."<br>Liste=<br> ".$stri."</p>";}
 				}		
 			}
@@ -672,5 +701,5 @@
 	if($zfs == 0) {
 		echo "\n<p class='err'>Kein historisches Flurst&uuml;ck.</p>";
-		if ($debug > 2) {echo "<p class='dbg'>".$sql."</p>";}
+		#if ($debug > 2) {echo "\n<p class='dbg'>".$sql."</p>";}
 	}
 	return;
@@ -684,5 +713,5 @@
 	$epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);	
 } else {
-	if ($debug >= 1) {echo "<p class='dbg'>kein EPSG gesetzt</p>";}	
+	if ($debug >= 1) {echo "\n<p class='dbg'>kein EPSG gesetzt</p>";}	
 	$epsg=$gui_epsg; // aus Conf
 }
@@ -697,26 +726,30 @@
 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(isset($gm)) { // Self-Link aus Gemeinde-Liste
+	$trans="Gemarkungen zur Gemeinde";
+	$gnr=ListGmkgInGemeinde($gm);
 	if ($gnr > 0) {
 		$zgemkg=$gnr;
 		EineGemarkung(false);
 	}
-} else {
-	// Die Formular-Eingabe interpretieren (kann auch ein Link sein)
+} 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>";}	
+	#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
+			$trans="Liste der Gemarkungen";
+			SuchGmkgName();
 		} else {
-			ListGemeinden(); // alle Gemeinden Listen
+			$trans="Liste der Gemeinden";
+			ListGemeinden();
 		}
 	break;
 	case 1:
-		if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsname ".$zgemkg."</p>";}
+		#if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsname ".$zgemkg."</p>";}
+		$trans="Suche Gemarkungsname";
 		$gnr=SuchGmkgName();
 		if ($gnr > 0) {
+			$trans="1 Gemarkung, Fluren dazu";
 			$zgemkg=$gnr;
 			EineGemarkung(false);
@@ -724,24 +757,45 @@
 	break;
 	case 2:
-		if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsnummer ".$zgemkg."</p>";}	
+		#if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsnummer ".$zgemkg."</p>";}
+		$trans="Fluren in Gemarkung";
 		EineGemarkung(true);
 	break;
 	case 3:
-		if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur."</p>";}
-		if ($phist)	{HistFlur();} else {EineFlur();}
+		#if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur."</p>";}
+		if ($phist)	{
+			$trans="historische Flurst. in Flur";
+			HistFlur();
+		} else {
+			$trans="Flurst&uuml;cke in Flur";
+			EineFlur();
+		}
 	break;
 	case 4:
-		if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur." FlurstÃŒck ".$zzaehler."</p>";}
-		if ($phist)	{HistFlurstueck();} else {EinFlurstueck();}
+		#if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur." FlurstÃŒck ".$zzaehler."</p>";}
+		if ($phist)	{
+			$trans="historisches Flurst&uuml;ck";
+			HistFlurstueck();
+		} else {
+			$trans="Flurst&uuml;ck";
+			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();}		
+		if ($phist) {
+			$trans="historisches Flurst&uuml;ck";
+			HistFlurstueck();
+		} else {
+			$trans="Flurst&uuml;ck";
+			EinFlurstueck();
+		}		
 	break;
 	case 9:
-		echo "<p class='err'>Bitte ein Flurst&uuml;ckskennzeichen eingegeben, Format 'gggg-fff-zzzz/nnn</p>";
+		$trans="falsche Eingabe";
+		echo "\n<p class='err'>Bitte ein Flurst&uuml;ckskennzeichen eingegeben, Format 'gggg-fff-zzzz/nnn</p>";
 	break;
 	}
 }
+// Titel im Kopf anzeigen
+echo "\n<script type='text/javascript'>\n\ttranstitle('".$trans."')\n</script>";
 
 ?>
Index: trunk/mapbender/http/nav/blank_eig.html
===================================================================
--- trunk/mapbender/http/nav/blank_eig.html	(revision 276)
+++ trunk/mapbender/http/nav/blank_eig.html	(revision 278)
@@ -8,10 +8,15 @@
 <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>
+Schritt 1:<br>&nbsp;Anfang des Nachnamens eingeben<br>
+&nbsp;oder Nachname (Komma) Vorname<br>
+&nbsp;oder Teile des Namens mit Platzhalter *<br>
+&nbsp;&nbsp;z.B. *meier<br>
+&nbsp;oder Kombination davon<br>
+&nbsp;&nbsp;z.B. *meier, Ralf<br><br>
+Schritt 2:<br>&nbsp;Auswahl Person<br><br>
+Schritt 3:<br>&nbsp;Auswahl Grundbuch-Blatt<br><br>
+Schritt 4:<br>&nbsp;Auswahl Flurst&uuml;ck<br><br>
+Bei eindeutigen Treffern wird der n&auml;chste Schritt vom Programm sofort mit ausgef&uuml;hrt.
+</p>
 </body>
 </html>
Index: trunk/mapbender/http/nav/alkisnav_eig.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_eig.php	(revision 276)
+++ trunk/mapbender/http/nav/alkisnav_eig.php	(revision 278)
@@ -1,4 +1,4 @@
 <?php
-/* Version vom 
+/* Version vom
 	24.10.2011	Nach Pos-Klick Highlight erneuern statt hideHighlight
 	17.11.2011	Nachweis-Links ÃŒber javascript im neuen Hochformat-Fenster
@@ -8,12 +8,17 @@
 					Format css Person (Rahmen).
 	2013-04-16 "import_request_variables" entfÃ€llt in PHP 5.4
-	ToDo: Auf der Stufe 2 "getGBbyPerson" noch Filtern nach Gemeinde
+	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung".
+					Stufe 2: GB *und* FS mit einem Klick anzeigen.
+					BlÃ€tterfunktion (Folgeseiten) fÃŒr lange Listen. 
+					Function extern gemeinsam genutzt in _eig und _grd.
+					Dazu Var-Namen harmonisieren: $gb wird $blattgml.
+					ZurÃŒck-Link, Titel der Transaktion anzeigen.
 */
 $cntget = extract($_GET);
-include("../../conf/alkisnav_conf.php");
+include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
+include("alkisnav_fkt.php"); // Funktionen
 $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);
-?>
-
+echo <<<END
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
@@ -30,86 +35,20 @@
 			window.open(link,'','left=10,top=10,width=620,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');
 		}
+		function transtitle(trans) {
+			document.getElementById('transaktiontitle').innerHTML = trans;
+		}
 	</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;
+<a title="zur&uuml;ck" href='javascript:history.back()'>
+	<img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" />
+</a>
+<dfn class='title' id='transaktiontitle'></dfn>
+
+END;
+
+// Einen Link generieren, um nach anderen Personen mit gleichem Familiennamen zu suchen
+function familiensuche() {
+	global $gkz, $gemeinde, $epsg, $name; // $debug
 	if(isset($name)) { // Familiensuche
 		echo "\n<div class='back' title='Andere Personen mit diesem Nachnamen'>";
@@ -118,15 +57,23 @@
 		echo "\n</div>\n<br>";	
 	}
-	$sql="SELECT p.nachnameoderfirma, p.vorname, p.geburtsdatum, p.namensbestandteil, ";
+	return;
+}
+
+// Adresse und Geburtsdatum der aktuellen Person ausgeben
+function personendaten() {
+	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath; // $debug
+	$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';";	
+	$sql.="LEFT JOIN alkis_beziehungen b ON p.gml_id=b.beziehung_von ";
+	$sql.="LEFT JOIN ax_anschrift a ON a.gml_id=b.beziehung_zu ";
+	#sql.="WHERE p.gml_id= $1 AND b.beziehungsart='hat';";  // passt nicht zum LEFT
+	$sql.="WHERE p.gml_id= $1 ;";	
 	$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
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Name</p>\n";
+	}
 	echo "\n\t<table>\n\t<tr>\n\t\t<td valign='top'>";
 		// Sp. 1: Icon, Link zur Auskunft Person
@@ -148,14 +95,114 @@
 		}
 	echo "\n\t</p></td></tr>\n\t</table>";
-
+	return;
+}
+
+function getEigByName() {
+// 1 =============================
+// Eigentuemer nach Name(-nsanfang)
+// ===============================
+	global $gkz, $gemeinde, $epsg, $name, $person, $gfilter, $auskpath;
+	$linelimit=150;
+
+	$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 ($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<br>\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>";
+		$cnt++;
+	}
+	if($cnt == 0){ 
+		echo "\n<p class='anz'>Kein Eigent&uuml;mer gefunden.</p>";
+	} elseif($cnt >= $linelimit) { // das Limit war zu knapp
+		echo "\n<p class='anz' title='Bitte den Namen eindeutiger qualifizieren'>... und weitere</p>";
+	} elseif($cnt == 1){ // Eindeutig!
+		$person = $gml;
+	} else {
+		echo "\n<p class='anz'>".$cnt." Eigent&uuml;mer mit '".$name."'</p>";	// im Limit
+	}
+	return;
+}
+
+function getGBbyPerson() {
+// 2 =================================
+// GrundbÃŒcher zur gewÃ€hlten Person
+// ===================================
+// Es wird in dieser Function nicht geprÃŒft, ob die gefundenen GrundbÃŒcher auch FlurstÃŒcke
+// haben, die im gefilterten Bereich (Gemeinde) liegen. Es kÃ¶nnen daher Sackgassen entstehen,
+// also GrundbÃŒcher, die in der nÃ€chsten Stufe bei Filterung nicht zu Treffern fÃŒhren.
+// Das Joinen bis zum FS unter BerÃŒcksichtigung von speziellen Buchungen ist zu aufwÃ€ndig.
+// Dann kann entweder das FS gleich mit ausgegeben werden -> getGBuFSbyPerson.
+// Alternativ wÃŒrde eine Hilfstabelle benÃ¶tigt, in der im PostProcessing 
+// das GB-zu-Gemeinde-VerhÃ€ltnis vorbereitet wird.
+	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath, $debug, $bltbez, $bltblatt, $bltseite;
+	$linelimit=150;
+	$linelimit=15;  // +++ TEST +++	
+	familiensuche();
+	personendaten();
+	#if ($debug > 0) {echo "\n<p>Nur Grundb&uuml;cher</p>"; }
 	// Suche nach GrundbÃŒchern der Person
-	$sql ="SELECT g.gml_id AS gml_g, g.buchungsblattnummermitbuchstabenerweiterung as nr, b.bezeichnung AS beznam ";
+	$sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, 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.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id ";
+	$sql.="JOIN ax_buchungsblattbezirk b ON gb.land = b.land AND gb.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 ;";
+	if ($bltbez.$bltblatt != "") { // BlÃ€ttern, Fortsetzen bei ...
+		$sql.="AND ((b.bezeichnung > '".$bltbez."') ";
+		$sql.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."')) ";
+	}
+	$sql.="ORDER BY b.bezeichnung, gb.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
+
+	if ($bltseite == "") { // Seite 1
+		$bltseite = 1;
+	} else { // Folgeseite
+		echo "\n<p class='ein'>Teil ".$bltseite;
+	}
 	$v=array($person, $linelimit);
 	$res=pg_prepare("", $sql);
@@ -169,161 +216,350 @@
 		$gml=$row["gml_g"];
 		$beznam=$row["beznam"];
-		$nr=$row["nr"];
+		$blatt=$row["blatt"];
 		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\t".$beznam."<a title='Grundbuch' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;blattgml=".$gml."&amp;person=".$person."'> Blatt ".$blatt."&nbsp;</a>";
 		echo "\n</div>";
 		$cnt++;
 	}
-	if($cnt == 0){ 
-		echo "\n<p class='err'>Kein Grundbuch.</p>";
+	if($cnt == 0) { 
+		echo "\n<p class='anz'>Kein Grundbuch zum Eigent&uuml;mer</p>";
 	} elseif($cnt >= $linelimit) {
-		echo "\n<p>... und weitere</p>";
-	} elseif($cnt == 1){ // Eindeutig!
-		$gb=$gml; // dann Stufe 3 gleich nachschieben
+		echo "\n<p class='blt'>".$cnt." Grundb. zum Eigent.";
+		$nxtbltbez=urlencode($beznam);
+		$nxtbltblatt=urlencode($blatt);
+		$nxtbltseite=$bltseite + 1;
+		echo "\n - <a class='blt' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person."&amp;bltbez=".$nxtbltbez."&amp;bltblatt=".$nxtbltblatt."&amp;bltseite=".$nxtbltseite."' ";
+		echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt."'>weitere</a>";
+		echo "</p>";
+	} elseif($cnt == 1) { // Eindeutig!
+		$blattgml=$gml; // dann Stufe 3 gleich nachschieben
+	} else {
+		echo "\n<p class='anz'>".$cnt." Grundb&uuml;cher zum Eigent&uuml;mer</p>";
 	}
 	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) {	
+// Zu einem Grundbuch (gml_id als Parameter) werden alle darauf gebuchten FlurstÃŒcke gesucht.
+// Im ersten Schritt sind das direkt gebuchten FlurstÃŒcke.
+// Im zweiten Schritt wird gesucht nach Rechten einer Buchungstelle des durchsuchten Blattes an anderen
+// Buchungstellen. Es werden dann die FlurstÃŒcke darauf gelistet.
+	global $gkz, $gemeinde, $name, $person, $blattgml, $scalefs, $auskpath, $epsg, $gfilter, $debug;
+	$linelimit=150;
+	if($backlink) { // Erneuter Ansatz bei Person oder GB mÃ¶glich.
+
+		// Namen ermitteln
+		$sql ="SELECT nachnameoderfirma, vorname FROM ax_person WHERE gml_id = $1 ";
+		$v=array($person);
+	 	$res=pg_prepare("", $sql);
+		$res=pg_execute("", $v);
+		if (!$res) {
+			echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
+		}
+		$row = pg_fetch_array($res); // nur eine Zeile
+		$nnam=htmlentities($row["nachnameoderfirma"], ENT_QUOTES, "UTF-8");
+		$vnam=htmlentities($row["vorname"], ENT_QUOTES, "UTF-8");
 		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 $nnam.", ".$vnam."</a><br>";		
 		echo "</div>";
+
+		// Grundbuch-Daten ermitteln
+		$sql ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezeichnung AS beznam ";
+		$sql.="FROM ax_buchungsblatt gb JOIN ax_buchungsblattbezirk b ON gb.land = b.land AND gb.bezirk = b.bezirk ";
+		$sql.="WHERE gb.gml_id= $1 ;";
+		$v=array($blattgml);
+		$res=pg_prepare("", $sql);
+		$res=pg_execute("", $v);
+		if (!$res) {
+			echo "\n<p class='err'>Fehler bei Grundbuch</p>";
+		}
+		$row = pg_fetch_array($res); // nur eine Zeile
+		$gml=$row["gml_g"];
+		$beznam=$row["beznam"];
+		$blatt=$row["blatt"];
 		echo "<div class='gb'>";
-			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gb."\")'>";
+			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$blattgml."\")'>";
 				echo "\n\t\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='GB'>";
-			echo "\n\t</a> Grundbuch";
+			echo "\n\t</a>&nbsp;".$beznam." Blatt ".$blatt;
 		echo "</div>";	
 	}
 
+	GB_Buchung_FS($linelimit); // Externe Function: Blatt > GrundstÃŒck > Flurst.
+	
+	return;
+}
+
+function getGBuFSbyPerson() {
+// 2 + 3 =========================================
+// GrundbÃŒcher UND FlurstÃŒcke zur gewÃ€hlten Person
+// ===============================================
+// Dies ist die Kombination von Stufe 2 (GrundbÃŒcher zur Person) und 3 (FlurstÃŒcke zum Grundbuch) 
+// in einem einzelnen Schritt. Wenn auf Gemeinde gefiltert wird, dann kÃ¶nnen in Stufe 2 (noch ohne Filter)
+// auch GrundbÃŒcher gefunden werden, die dann auf Stufe 3 (mit Filter) keine FS liefern ("Sackgasse"!).
+// Wenn aber per JOIN "GB -> FS -> Gemarkung -> Gemeinde" geprÃŒft wird, dann kÃ¶nnen 
+// die Daten ja auch gleich ausgegeben werden.
+// FÃŒr FÃ€lle in denen nicht nach Gemeinde gefiltert wird (z.B. ganzer Kreis) kann weiter 
+// Stufe 2 und 3 nacheinander verwendet werden. Dies ist wahrscheinlich ÃŒbersichtlicher, 
+// weil "ungefiltert" in "2+3" zu lange Listen entstehen wÃŒrden, die durchblÃ€ttert werden mÃŒssen. 
+	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $auskpath, $scalefs, $gfilter, $debug, $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht;
+	$linelimit=80; // als Limit "Anzahl FlurstÃŒcke" in den beiden folgenden Abfragen
+	// darf nun etwas knapper sein, weil man jetzt blÃ€ttern kann
+	familiensuche();
+	personendaten();
+
+	// Wenn das Limit ÃŒberschritten wurde: zusÃ€tzliche Parameter "blt"=BlÃ€ttern
+	// $bltbez   = Bezirk-Name  
+	// $bltblatt = BlattMitBuchstabe
+	// $bltbvnr  = lfd.Nr der Buchungsstelle
+	// $bltseite = fortlaufende Seiten-Nr
+	// $bltrecht = "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung 
+
 	// SQL-Bausteine vorbereiten
-	$sql1 ="SELECT s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
+	//  Direkte Buchungen suchen mit:  $sql1 +         $sqla1 + $sql2
+	//  SonderfÃ€lle suchen mit:        $sql1 + $sqlz + $sqla2 + $sql2
+
+	// Baustein: SQL-Anfang fuer beide Varianten
+	$sql1 ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezeichnung AS beznam, ";
+	$sql1.="s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ot.gemarkung, ot.gemarkungsname, ";
 	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, ";
+		$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>"; 
-	}
+		$sql1.="st_y(st_transform(st_centroid(f.wkb_geometry), ".$epsg.")) AS y ";			
+	}
+	$sql1.="FROM alkis_beziehungen bpn ";
+	$sql1.="JOIN ax_namensnummer nn ON bpn.beziehung_von=nn.gml_id ";
+	$sql1.="JOIN alkis_beziehungen bng ON nn.gml_id=bng.beziehung_von ";
+	$sql1.="JOIN ax_buchungsblatt gb ON bng.beziehung_zu=gb.gml_id ";
+   $sql1.="JOIN alkis_beziehungen vbg ON gb.gml_id=vbg.beziehung_zu ";
+	$sql1.="JOIN ax_buchungsstelle s1 ON vbg.beziehung_von=s1.gml_id ";
+	$sql1.="JOIN ax_buchungsblattbezirk b ON gb.land=b.land AND gb.bezirk=b.bezirk "; // quer-ab
+
+	// Baustein: Zwischen-JOIN (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 ";
+
+	// Baustein: Auswahl 1 oder 2
+	$sqla1 ="JOIN alkis_beziehungen vfb ON s1.gml_id=vfb.beziehung_zu ";
+	$sqla2 ="JOIN alkis_beziehungen vfb ON s2.gml_id=vfb.beziehung_zu ";
+
+	// Baustein: SQL-Ende fuer beide Varianten
+	$sql2.="JOIN ax_flurstueck f ON vfb.beziehung_von=f.gml_id ";
+   $sql2.="JOIN pp_gemarkung ot ON f.land=ot.land AND f.gemarkungsnummer=ot.gemarkung "; // Ortsteil
+	$sql2.="WHERE bpn.beziehung_zu= $1 AND bpn.beziehungsart='benennt' AND bng.beziehungsart='istBestandteilVon' ";
+	$sql2.="AND vbg.beziehungsart='istBestandteilVon' AND vfb.beziehungsart='istGebucht' ";
+	switch ($gfilter) { // Gemeinde-Filter
+		case 1: // Einzelwert
+			$sql2.="AND ot.gemeinde=".$gemeinde." "; break;
+		case 2: // Liste
+			$sql2.="AND ot.gemeinde in (".$gemeinde.") "; break;
+	}
+	$sql3 ="ORDER BY gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
+	// Sortier-Problem: laufendenummer in varchar linksbÃŒndig
+
+	// Die Bausteine in 2 Varianten kombinieren
+
+	// BlÃ€ttern mit folgenden Parametern: $bltbez, $bltblatt, $bltbvnr, $bltseite, $bltrecht
+	if ($bltbez.$bltblatt.$bltbvnr != "") { // BlÃ€ttern, Fortsetzen bei ...
+		$bltwhere ="AND ((b.bezeichnung > '".$bltbez."') ";
+		$bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung > '".$bltblatt."') ";
+		$bltwhere.="OR (b.bezeichnung = '".$bltbez."' AND gb.buchungsblattnummermitbuchstabenerweiterung = '".$bltblatt."' AND cast(s1.laufendenummer AS integer) >= ".$bltbvnr." )) ";
+	} // FlurstÃŒcke in der BVNR werden ggf. wiederholt
+
+	if ($bltseite == "") { // auf Seite 1 beide Teile ausgegeben
+		$bltseite = 1;
+	} else { // Folgegeseite: nur Teil 1 *oder* 2
+		echo "\n<p class='ein'>Teil ".$bltseite." - ";
+		switch ($bltrecht) {
+			case "nur":
+				echo "nur Rechte an .. Buchungen</p>"; break;
+			case "ohne":
+				echo "nur direkte Buchungen</p>"; break;
+			default:
+				echo "</p>"; break;
+		}
+	}
+
+	// FÃ€lle ohne "Rechte an"
+	if ($bltrecht != "nur") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung
+		// Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< Flurstck.
+		$sql=$sql1.$sqla1.$sql2.$bltwhere.$sql3; // Direkte Buchungen
+	
+		$v=array($person, $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;
+		$gwgb="";
+		while($row = pg_fetch_array($res)) {	
+			$gb_gml=$row["gml_g"];
+	
+			// Gruppenwechsel auf Ebene Grundbuch
+			if ($gwgb != $gb_gml) {
+				$beznam=$row["beznam"];
+				$blatt=$row["blatt"];
+				echo "\n<div class='gb'>"; // Ausgabe GB - B L A T T 
+					echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$gb_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;blattgml=".$gb_gml."&amp;person=".$person."'> Blatt ".$blatt."&nbsp;</a>";
+				echo "\n</div>";
+				$gwgb = $gb_gml;	// Steuerg GW GB
+				$gwbv = ""; 		// Steuerg GW BVNR
+			}
+	
+			// Gruppenwechsel auf Ebene Buchungs-Stelle (BVNR)
+			$bvnr=$row["lfd"];
+			if ($gwbv != $bvnr) {
+				if ($bvnr == 0) {
+					$bvnra = "-";
+				} else {
+					$bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
+				}
+				$gwbv = $bvnr; // Steuerg GW BVNR
+				echo "\n<div class='gs' title='Grundst&uuml;ck'>";
+				echo "<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
+				echo "Buchung ".$bvnra."</div>";
+			}
+	
+			$fs_gml=$row["gml_id"];
+			$gmkg=$row["gemarkungsname"];
+			$flur=$row["flurnummer"];
+			$fskenn=$row["zaehler"];
+			if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
+			$x=$row["x"];
+			$y=$row["y"];
+			echo "\n<div class='fs'>"; // F L U R S T Ã C K
+				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:";
+						echo "transtitle(\"auf Flurst&uuml;ck positioniert\"); ";
+						echo "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 ".$flur." ".$fskenn."</a>";
+			echo "\n</div>";
+			$zfs1++;
+		}
+		if($zfs1 == 0) {
+			if ($bltrecht == "ohne") {
+				echo "\n<p class='anz'>Keine direkte Buchung gefunden.</p>";
+				#if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
+			}
+		} elseif($zfs1 >= $linelimit) { // das Limit war zu knapp, das  B l Ã€ t t e r n  anbieten
+			echo "\n<p class='blt'>".$zfs1." Flurst&uuml;cke";
+			$nxtbltbez=urlencode($beznam);
+			$nxtbltblatt=urlencode($blatt);
+			$nxtbltseite=$bltseite + 1;
+			echo "\n - <a class='blt' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person."&amp;bltbez=".$nxtbltbez."&amp;bltblatt=".$nxtbltblatt."&amp;bltbvnr=".$bvnr."&amp;bltseite=".$nxtbltseite."&amp;bltrecht=ohne' ";
+			echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt." BVNR ".$bvnr."'>weitere</a>";
+			echo "</p>";
+		} elseif($zfs1 > 1) { // Meldung (Plural) ab 2 
+			echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke zum Eigent&uuml;mer</p>"; // im Limit
+		}
+	}	
+
+	if ($bltrecht == "" and $zfs1 > 0) { // beides
+		echo "<hr>"; // dann Trenner
+	}
+
+	// FÃ€lle mit "Rechte an"
+	if ($bltrecht != "ohne") { // "nur"/"ohne" liefert nur den abgebrochene Teil der Auflistung 
+		// Zweite Abfrage (Variante) aus den Bausteinen zusammen bauen
+		// buchungsStelle2 < an < buchungsStelle1
+		$sql=$sql1.$sqlz.$sqla2.$sql2.$bltwhere.$sql3; // Rechte an
+		$v=array($person, $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='dbg'>".$sql."</p>";}
+			return;
+		}
+		$zfs2=0;
+		$gwgb="";
+		while($row = pg_fetch_array($res)) {	
+			// Gruppenwechsel auf Ebene Grundbuch
+			$gb_gml=$row["gml_g"];
+			if ($gwgb != $gb_gml) { 
+				$beznam=$row["beznam"];
+				$blatt=$row["blatt"];
+				echo "\n<div class='gb'>"; // Ausgabe GB
+					echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;gmlid=".$gb_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;blattgml=".$gb_gml."&amp;person=".$person."'> Blatt ".$blatt."&nbsp;</a>";
+				echo "\n</div>";
+				$gwgb = $gb_gml;	// Steuerg GW GB
+				$gwbv = ""; 		// Steuerg GW BVNR
+			}
+
+			// Gruppenwechsel auf Ebene Buchungs-Stelle (BVNR)
+			$bvnr=$row["lfd"];
+			if ($gwbv != $bvnr) {
+				if ($bvnr == 0) {
+					$bvnra = "-";
+				} else {
+					$bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
+				}
+				$gwbv = $bvnr; // Steuerg GW BVNR
+				echo "\n<div class='gs' title='Grundst&uuml;ck'>";
+				echo "<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
+				echo "Buchung ".$bvnra."</div>";
+			}
+
+			$fs_gml=$row["gml_id"];
+			$gmkg=$row["gemarkungsname"];
+			$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 ".$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()'>";
+				echo " Flur ".$flur." ".$fskenn."</a>";
+			echo "\n</div>";
+			$zfs2++;
+		}
+		if($zfs2 == 0) {
+			if ($zfs1 == 0 or $bltrecht == "nur") { // keine Meldung wenn schon in Teil 1 eine Ausgabe
+				echo "\n<p class='anz'>Keine Rechte an Buchungen.</p>";
+				#if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
+			}
+		} elseif($zfs2 >= $linelimit) { // das Limit war zu knapp, das  B l Ã€ t t e r n  anbieten
+			echo "\n<p class='blt'>".$zfs2." Rechte an Flurst.";
+			$nxtbltbez=urlencode($beznam);
+			$nxtbltblatt=urlencode($blatt);
+			$nxtbltseite=$bltseite + 1;
+			echo "\n - <a class='blt' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;person=".$person."&amp;bltbez=".$nxtbltbez."&amp;bltblatt=".$nxtbltblatt."&amp;bltbvnr=".$bvnr."&amp;bltseite=".$nxtbltseite."&amp;bltrecht=nur' ";
+			echo "title='Bl&auml;ttern ab ".htmlentities($beznam)." Blatt ".$blatt." BVNR ".$bvnr."'>weitere</a>";
+			echo "</p>";
+		} elseif($zfs2 > 1) { // ab 2
+			echo "\n<p class='anz'>".$zfs2." Rechte an Flurst.</p>"; // im Limit		
+		}
+	} // ENDE FÃ€lle mit "Rechte an"
 	return;
 }
@@ -332,40 +568,73 @@
 // 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
+	#if ($debug >= 2) {echo "\n<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>";}	
+	#if ($debug >= 1) {echo "<p class='dbg'>kein EPSG gesetzt</p>";}	
 	$epsg=$gui_epsg; // aus Conf
 }
-if ($debug >= 2) {echo "<p>Filter Gemeinde = ".$gemeinde."</p>";}
+#if ($debug >= 2) {echo "\n<p class='dbg'>Filter Gemeinde = '".$gemeinde."'</p>";}
 if ($gemeinde == "") {
-	$gfilter = 0; // ungefiltert
+	$gfilter = 0; // Gemeinde ungefiltert
 } elseif(strpos($gemeinde, ",") === false) {
-	$gfilter = 1; // Einzelwert
+	$gfilter = 1; // Gemeinde Einzelwert
 } else {
-	$gfilter = 2; // Liste
-}
-
-// Welche Parameter?
-// 3. Stufe: FlurstÃŒcke zum Grundbuch
-if(isset($gb)) { // gml_id
+	$gfilter = 2; // Gemeinde Filter-Liste
+}
+
+// Quo Vadis?
+if(isset($blattgml)) {		// 3. Stufe: FlurstÃŒcke zum Grundbuch
+
 	// 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
+	$trans="Flurst&uuml;cke zum Grundbuch";
+	getFSbyGB(true);				// mit BackLink
+
+} elseif(isset($person)) { 	// 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();}
+	if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";}
+
+	// Die Filtereinstellung beeinflusst die Such-Strategie:
+	if ($gfilter == 0) {			// Keine Filterung auf "Gemeinde": groÃe Datenmenge
+
+		$trans="Grundb&uuml;cher zum Eigent&uuml;mer";
+		getGBbyPerson();
+		// Also schrittweise erst mal Stufe 2 = GrundbÃŒcher zur Person suchen.
+		// Diese Function hat auch noch keine Gemeinde-Filter-Funktion auf GB-Ebene.
+									
+		if(isset($blattgml) ) {	// Es wurde nur EIN Grundbuch zu der Person gefunden.
+			$trans="1 Blatt zum Eigent&uuml;mer";
+			getFSbyGB(false); 	// Dann dazu auch gleich die Stufe 3 hinterher, aber ohne Backlink.
+		} 
+
+	} else { 						// mit Filter auf Gemeinde: weniger Daten?
+
+		$trans="Grundb. und Flurst. zum Eigent&uuml;mer";
+		getGBuFSbyPerson();		// Schritte 2+3 gleichzeitig, dabei Gemeinde-Filter auf Stufe 3
+	}
+
+} elseif(isset($name)) {	// Suchbegriff aus Form - 1. Stufe: Suche nach Name
+
+	$trans="Namensuche \"".$name."\"";
+	getEigByName(); 			// Suchen nach Namensanfang
+
+	if(isset($person)) {		// genau EIN Treffer
+		$trans="1 Grundbuch zum Namen";
+		getGBbyPerson();		// Dann gleich das Grundbuch hinterher
+	}
+
 } elseif ($debug >= 2) {
-	echo "\n<p>Parameter?</p>"; // Programmfehler
-}
+	echo "\n<p class='dbg'>Parameter?</p>"; // Programmfehler, soll nicht vorkommen
+}
+// Titel im Kopf anzeigen
+echo "\n<script type='text/javascript'>\n\ttranstitle('".$trans."')\n</script>";
+
 ?>
 
