Index: trunk/mapbender/http/nav/alkisnav_grd.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_grd.php	(revision 280)
+++ trunk/mapbender/http/nav/alkisnav_grd.php	(revision 282)
@@ -1,9 +1,4 @@
 <?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
 	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung"
@@ -12,7 +7,7 @@
 					ZurÃŒck-Link, Titel der Transaktion anzeigen.
 	2013-04-29	Test mit IE
+	2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
 */
 $cntget = extract($_GET);
-
 include("../../conf/alkisnav_conf.php"); // Konfigurations-Einstellungen
 include("alkisnav_fkt.php"); // Funktionen
@@ -38,13 +33,21 @@
 			document.getElementById('transaktiontitle').innerHTML = trans;
 		}
+		function formular_belegung(suchMich) {
+			parent.GrdGazetteerFrame.gbkennz.value=suchMich;
+		}
 	</script>
 </head>
 <body>
 <a href='javascript:history.back()'>
-	<img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" title="zur&uuml;ck" />
+	<img src="ico/zurueck.ico" width="16" height="16" alt="&lt;&lt;" title="zur&uuml;ck">
 </a>
 <dfn class='title' id='transaktiontitle'></dfn>
 
 END;
+
+function suchfeld($suchstring) {	// Suchstring Ausgeben UND das Eingabeformular damit belegen
+	$out="<a title='Dies als Suchbegriff setzen' href='javascript:formular_belegung(\"".$suchstring."-\")'>".$suchstring."</a>";
+	return $out;
+}
 
 function is_ne_zahl($wert) {
@@ -69,8 +72,8 @@
 		return 2; // Such Bezirk-NUMMER
 	} else  { // Format von BlattNr pruefen
-	//'19'       linksbÃŒndig
-	//'000019 '  gefÃŒllt 6 + blank
-	//'000019A'  .. mit Zusatzbuchstabe
-	//'0300001'  gefÃŒllt 7, bei Blattart 5000 "fiktives Blatt"
+	//'19'      linksbÃŒndig
+	//'000019 ' gefÃŒllt 6 + blank
+	//'000019A' .. mit Zusatzbuchstabe
+	//'0300001' gefÃŒllt 7, bei Blattart 5000 "fiktives Blatt"
 		$len=strlen($zblatt);
 		if ($len > 0 AND $len < 8) {		
@@ -106,5 +109,5 @@
 
 function ListAG($liste_ag) {
-	// Amtsgerichte (Grundbuch) auflisten, dazu als Filter eine AG-Liste aus conf
+	// Amtsgerichte (Grundbuch) auflisten, dazu als Filter eine AG-Liste
 	global $con, $gkz, $gemeinde, $epsg, $debug, $gbkennz;
 	$linelimit=40;
@@ -122,13 +125,10 @@
 	while($row = pg_fetch_array($res)) { // Loop AG 
 		$anr=$row["stelle"];
-		$ag=htmlentities($row["ag"], ENT_QUOTES, "UTF-8");		
-		echo "\n<div class='ga' title='Amtsgricht'>";
-			echo "\n\t\t<img class='nwlink' src='ico/Gericht.ico' width='16' height='16' alt='Amtsgericht'> ";
-			echo "AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>";		
-				echo $ag."</a> (".$anr.")";
-		echo "\n</div>";
+		$ag=$row["ag"];		
+		zeile_ag ($ag, $anr);
 		$cnt++;
 	}
-	if($cnt == 0){ // falsch configuriert!
+	// Foot
+	if($cnt == 0){
 		echo "\n<p class='anz'>Kein Amtsgericht aus Liste ".$$liste_ag.".</p>";
 	} elseif ($cnt >= $linelimit) {
@@ -140,47 +140,72 @@
 }
 
-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.
+function ListGBBez($agkey) {
+	// Grundbuch-Bezirke zu einem Amtsgericht auflisten.
+	// Auch wenn BlÃ€tter da sind, kann es eine Sackgasse sein. 
+	// Manchmal haben die BlÃ€tter keine FlurstÃŒcke im Filter-Bereich
 	global $con, $gkz, $gemeinde, $epsg, $debug, $gbkennz;
-	$linelimit=90;
-	$sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g ";
+	$linelimit=100; // Bezirke/AG
+	// Head
+	ListAG( "'".$agkey."'" ); // hier nur fÃŒr 1
+	// Body
+	$sql ="SELECT 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.="WHERE a.stelle = $1 AND a.stellenart = 1000 ";
+	// Diese Subquery stellt sicher, dass nur Bezirke aufgelistet 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 ;";
+	$sql.="ORDER BY g.bezeichnung LIMIT $2 ;";
+	$v = array($agkey, $linelimit);
 	$res = pg_prepare("", $sql);
-	$res = pg_execute("", array($linelimit));
+	$res = pg_execute("", $v);
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Grundbuch-Bezirk</p>";
-		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		#if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
 		return 0;
 	}
 	$cnt = 0;
-	while($row = pg_fetch_array($res)) { // Loop  B E Z I R K
-		$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+	while($row = pg_fetch_array($res)) { // Loop BEZIRK
+		$gnam=$row["bezeichnung"];
 		$gnr=$row["bezirk"];
-		$ag=htmlentities($row["ag"], ENT_QUOTES, "UTF-8");
-		$anr=$row["stelle"];
-		echo "\n<div class='gk' title='GB-Bezirk'>";
-			echo "\n\t\t<img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Gemkg'> ";
-			echo "Bezirk <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$gnr."'>";		
-				echo $gnam."</a> (".$gnr.")";
-				if ($mit_ag) {
-					echo " AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>".$ag."</a>";
-				}
-		echo "\n</div>";
+		zeile_gbbez($gnam, $gnr);
 		$cnt++;
 	}
+	// Foot
 	if($cnt == 0){
 		echo "\n<p class='anz'>Kein Bezirk mit Bl&auml;ttern.</p>";
 	} elseif ($cnt >= $linelimit) {
-		echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Bezirke ... und weitere</p>";
+		echo "\n<p class='anz' title='Bitte Name des Bezirks suchen lassen'>".$cnt." Bezirke ... und weitere</p>";
 	} elseif($cnt > 1) {
 		echo "\n<p class='anz'>".$cnt." Bezirke</p>"; // im Limit	
 	}
-	return 0;
+	return;
+}
+
+function ag_bez_head($gbbez) {
+	// Zu einem Grundbuchbezirks-SchlÃŒssel die Zeilen AG und Bezirk ausgeben
+	// Parameter = SchlÃŒssel des Bezirks
+	$sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezeichnung FROM ax_buchungsblattbezirk g ";
+	$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle WHERE g.bezirk= $1 LIMIT 1;";
+	$v=array($gbbez);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Amtsgericht und Grundbuchbezirk.</p>";
+		#if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+	}
+	$row = pg_fetch_array($res);
+	if ($row) {
+		$gnam=$row["bezeichnung"]; // GB-Bezirk Bezeichnung
+		$ag=$row["ag"]; // AG Bezeichnung
+		$anr=$row["stelle"]; // AG Key
+		zeile_ag($ag, $anr); // Amtsgericht
+		zeile_gbbez($gnam, $gbbez); // Bezirk
+	} else {
+  		echo "\n<div class='gk' title='Grundbuchbezirk'>";
+			echo "\n\t\t<p class='err'><img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Bez.'>";
+				echo  " Bezirk '".$gbbez."' ist unbekannt.</p>";
+		echo "\n</div>";
+		return;
+	}
+	return;
 }
 
@@ -188,9 +213,9 @@
 	// Grundbuch-Bezirk suchen nach Name(-nsanfang)
 	global $con, $gkz, $gemeinde, $debug, $gbkennz;
-	$linelimit=50;
+	$linelimit=80;
 	$sql ="SELECT a.stelle, a.bezeichnung AS ag, g.bezirk, g.bezeichnung FROM ax_buchungsblattbezirk g ";
 	$sql.="JOIN ax_dienststelle a ON g.stelle=a.stelle ";
 	$sql.="WHERE g.bezeichnung ILIKE $1 "; //	"AND a.stellenart=1000 " // Amtsgericht
-	$sql.="ORDER BY g.bezeichnung LIMIT $2 ;";
+	$sql.="ORDER BY a.bezeichnung, g.bezeichnung LIMIT $2 ;";
 	if ( $gbkennz == "") {
 		$match = "%";
@@ -207,22 +232,21 @@
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Grundbuch-Bezirk</p>";
-		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
-		return 0;
-	}
-	$cnt = 0;
-	// Loop  B E Z I R K
-	while($row = pg_fetch_array($res)) {
-		$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
+		return 1;
+	}
+	$cnt=0;
+	$gwag="";
+	while($row = pg_fetch_array($res)) { // Loop BEZIRK
+		$anr=$row["stelle"]; // Gruppierung AG
+		if ($gwag != $anr) {
+			$gwag = $anr;
+			$ag=$row["ag"];
+			zeile_ag($ag, $anr);
+		}
+		$gnam=$row["bezeichnung"];
 		$gnr=$row["bezirk"];
-		$ag=htmlentities($row["ag"], ENT_QUOTES, "UTF-8");		
-		$anr=$row["stelle"];
-		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."'>";		
-				echo $gnam."</a> (".$gnr.")";
-				echo " AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>".$ag."</a>";
-		echo "\n</div>";
+		zeile_gbbez ($gnam, $gnr);
 		$cnt++;
 	}
+	// Foot
 	if($cnt == 0){ 
 		echo "\n<p class='anz'>Kein Grundbuchbezirk.</p>";
@@ -234,5 +258,5 @@
 		echo "\n<p class='anz'>".$cnt." Bezirke</p>"; // im Limit	
 	}
-	return 0;
+	return;
 }
  
@@ -240,49 +264,15 @@
 	// Kennzeichen bestehend nur aus GB-Bezirk-SchlÃŒssel wurde eingegeben
 	global $con, $gkz, $gemeinde, $epsg, $debug, $zgbbez, $auskpath;
-	$linelimit=250; // max. Blatt je Bezirk
+	$linelimit=300; // max. Blatt je Bezirk
 	// 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.
 	// +++ BlÃ€tter-Funktion einfÃŒhren analog Modul _eig
+
+	// Head
 	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 WHERE g.bezirk= $1 ;";
-		$v=array($zgbbez);
-		$res=pg_prepare("", $sql);
-		$res=pg_execute("", $v);
-		if (!$res) {
-			echo "\n<p class='err'>Fehler bei Brundbuchbezirk.</p>";
-			if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
-		}
-		$zgmk=0;
-		while($row = pg_fetch_array($res)) {	
-			$gnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
-			$gnr=$row["bezirk"];
-			$ag=htmlentities($row["ag"], ENT_QUOTES, "UTF-8");	
-			$anr=$row["stelle"];
-			$zgmk++;
-		}
-		if ($zgmk == 0) {
-			echo "\n<div class='gk' title='Grundbuchbezirk'>";
-				echo "\n\t\t<p class='err'><img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Bez.'>";
-					echo  " Bezirk ".$zgbbez." ist unbekannt.</p>";
-			echo "\n</div>";
-			return;
-		}
-
-		// AG-Knoten davor setzen
-		echo "\n<div class='ga' title='Amtsgricht'>";
-			echo "\n\t\t<img class='nwlink' src='ico/Gericht.ico' width='16' height='16' alt='Amtsgericht'> ";
-			echo "AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>";		
-				echo $ag."</a> (".$anr.")";
-		echo "\n</div>";
-		echo "\n<div class='gk' title='GB-Bezirk'>";
-			echo "\n\t\t<img class='nwlink' src='ico/GB-Bezirk.ico' width='16' height='16' alt='Bez.'> ";
-			echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$zgbbez."'>";		
-			echo $gnam."</a> (".$zgbbez.")";
-			// alternativ AG-Link hinter dem Bezirk
-		//	echo " des AG <a href='alkisnav_grd.php?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>".$ag."</a>";			
-		echo "\n</div>";
-	}
+		ag_bez_head($zgbbez); // AG und BEZ ausgeben
+	}
+	// Body
 	$sql ="SELECT b.gml_id, b.buchungsblattnummermitbuchstabenerweiterung AS blatt FROM ax_buchungsblatt b ";
 	$sql.="WHERE b.bezirk= $1 ORDER BY b.buchungsblattnummermitbuchstabenerweiterung LIMIT $2 ;";
@@ -292,20 +282,14 @@
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Bezirk.</p>";
-		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
+		#if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
 	}
 	$cntbl=0; // Counter Blatt/Bezirk
-	// Loop  B L A T T	
-	while($row = pg_fetch_array($res)) {	
+	while($row = pg_fetch_array($res)) { // Loop BLATT	
 		$blatt=$row["blatt"];
-		$blattd=ltrim($blatt, "0");
-		$gml=$row["gml_id"];
-		echo "\n<div class='gb' title='GB-Blatt'>";
-			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml."\")'>";
-				echo "\n\t\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='Blatt'>";
-			echo "\n\t</a> ";
-			echo "Blatt <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;blattgml=".$gml."&amp;gbkennz=".$zgbbez."-".$blatt."'>&nbsp;".$blattd."&nbsp;</a>";
-		echo "\n</div>";
+		$blattgml=$row["gml_id"];
+		zeile_blatt($zgbbez, $gnam, $blattgml, $blatt, false, "");
 		$cntbl++;
 	}
+	// Foot
 	if($cntbl == 0) { 
 		echo "\n<p class='anz'>Kein Blatt im Bezirk.</p>";
@@ -314,4 +298,8 @@
 		// +++ Hier oft ÃŒberschritten! BlÃ€tter-Funktion einfÃŒhren
 		echo "\n<p>Geben sie ein: '".$zgbbez."-999A'<br>wobei '999A' = gesuchtes GB-Blatt</p>";
+
+		// Vorbelegen des Eingabefeldes fÃŒr neue Suche?
+		echo "<script type='text/javascript'>parent.GrdGazetteerFrame.gbkennz.value='".$zgbbez."-??';</script>";
+		
 	} elseif ($cntbl > 1) {
 		echo "\n<p class='anz'>".$cntbl." Bl&auml;tter</p>"; // im Limit	
@@ -352,96 +340,20 @@
 }
 
-/*
-function EinBlatt_ALT($showParent) {
-	// Kennzeichen Bezirk + Blatt wurde eingegeben
-	// UrsprÃŒngliche Version bis 2013-04-24
-	global $con, $gkz, $debug, $gemeinde, $epsg, $auskpath, $zgbbez, $zblatt, $zblattn, $zblattz, $blattgml, $zbvnr;
-
+function EinBlatt($showParent) {
+	// Kennzeichen Bezirk + Blatt wurde eingegeben oder verlinkt
+	global $con, $gkz, $debug, $gemeinde, $epsg, $zgbbez, $zblatt, $blattgml, $gbbeznam;
+	// Head
 	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 ->  B u c h u n g s s t e l l e
-	$sql ="SELECT s.gml_id, s.laufendenummer AS lfd FROM ax_buchungsstelle s ";
-	$sql.="JOIN alkis_beziehungen v ON s.gml_id=v.beziehung_von "; 
-	$sql.="JOIN ax_buchungsblatt b ON v.beziehung_zu=b.gml_id ";
-	$sql.="WHERE v.beziehungsart='istBestandteilVon' AND b.gml_id= $1 ORDER BY s.laufendenummer;";
-	// +++ Buchungen ohne FLST weglassen?
-	// +++ Counter FLST ausgeben, Buchungen mit 0 weglassen 
-	$v=array($blattgml);
-	$res=pg_prepare("", $sql);
-	$res=pg_execute("", $v);
-	if (!$res) {
-		echo "\n<p class='err'>Fehler bei Blatt.</p>";
-		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
-	}
-	$cntbu=0; // Counter Buchung/Blatt
-	while($row = pg_fetch_array($res)) {	
-		$bs_gml=$row["gml_id"];		
-		$lfd=$row["lfd"];
-		echo "\n<div class='gs'>";
-			echo "\n\t\t<img class='nwlink' title='Grundst&uuml;ck' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
-			echo "Buchung <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbuchung=".$bs_gml."&amp;gbkennz=".$zgbbez."-".$zblatt."-".$lfd."'>&nbsp;".$lfd."&nbsp;</a>";
-		echo "\n</div>";
-		$cntbu++;
-	}
-	if($cntbu == 0) { 
-		echo "\n<p class='anz'>Keine Buchung gefunden.</p>";
-	} elseif($cntbu == 1) {
-		$zbvnr=$lfd; // mit dieser BVNR gleich weiter machen
-		// Blatt zerteilen (benoetigt in gml_buchungsstelle)
-		if (trim($zblatt, "0..9") == "") { // Normalfall: nur Zahlen
-			$zblattn= ltrim($zblatt, "0");
-			$zblattz="";
-		} else { // Sonderfall: Zusatz-Buchstabe am Ende
-			$zblattn=ltrim(substr($zblatt,0,$len-1), "0"); // ohne fuehrende Nullen
-			$zblattz=strtoupper(substr($zblatt,$len-1,1)); 
-		}
-	} 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; 
-	
+		ag_bez_head($zgbbez); // AG + BEZ
+		zeile_blatt ($zgbbez, $gbbeznam, $blattgml, $zblatt, false, "");
+	}
+	// Body
+	GB_Buchung_FS(200); // Blatt -> Buchung -> Flurstueck (max. 200)
+	return; 
 }
 
 function gml_buchungsstelle() {
-	// Kennzeichen "Bezirk + Blatt + BVNR" eingegeben. Dazu die gml_id der Buchungsstelle ermitteln.
+	// Kennzeichen "Bezirk + Blatt + BVNR" wurde eingegeben.
+	// Dazu die gml_id der Buchungsstelle ermitteln, um "function EinGrundstueck" benutzen zu kÃ¶nnen.
 	global $con, $gkz, $debug, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr;
 	// Blatt ->  B u c h u n g s s t e l l e
@@ -474,7 +386,4 @@
 		echo "\n<p class='err'>Buchung ".$zgbbez."-".$zblattn.$zblattz."-".$zbvnr." nicht gefunden.</p>";
 		return;
-	} elseif($zbs > 1) { // nur TEST
-		echo "\n<p class='err'>Buchungsstelle mehrfach gefunden.</p>";
-		return;
 	} else {
 		return $bs_gml;
@@ -483,72 +392,66 @@
 
 function EinGrundstueck($showParent) {
-	// Die gml_id der Buchungsstelle ist bekannt.
-	global $con, $gkz, $debug, $gemeinde, $epsg, $scalefs, $epsg, $auskpath, $gbuchung, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr, $gfilter;
+	// Die gml_id der Buchungsstelle (BVNR, GrundstÃŒck) ist bekannt = $buchunggml
+	// Die gebuchten FlurstÃŒcke und dienende/herrschenden Buchungen werden ausgegeben.
+	global $con, $gkz, $debug, $gemeinde, $epsg, $scalefs, $epsg, $auskpath, $buchunggml, $zgbbez, $zblatt, $zblattn, $zblattz, $zbvnr, $gfilter;
 	// NoLimit?
 	if ($showParent) { // wenn Kennzeichen bekannt ist, dann auch Blatt ausgeben
-
 		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>";
-			echo "\n</div>";			
-			echo "\n<div class='gb' title='GB-Blatt'>";
-				echo "\n\t\t<img class='nwlink' src='ico/GBBlatt.ico' width='16' height='16' alt='Blatt'> ";
-				echo "Blatt <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbkennz=".$zgbbez."-".$zblatt."'>&nbsp;".$zblattn.$zblattz."&nbsp;</a>";
-			echo "\n</div>";
+			ag_bez_head($zgbbez); // AG + BEZ
+			zeile_blatt ($zgbbez, $gnam, "", $zblatt, false, "");
+			// $gnam leer lassen Knoten "Bezirk" steht drÃŒber
 		} else {
 			echo "<p class='err'>Kennzeichen Bezirk und Blatt nicht gesetzt</p>";
-		}
-
-		echo "\n<div class='gs'>";
-			echo "\n\t\t<img class='nwlink' title='Grundst&uuml;ck' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
-			echo "Buchung <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gbuchung=".$gbuchung."&amp;gbkennz=".$zgbbez."-".$zblattn.$zblattz."-".$zbvnr."'>&nbsp;".$zbvnr."&nbsp;</a>";
-		echo "\n</div>";
-	}
-	// +++ Ermitteln anderer Buchungsstellen mit Rechten an dieser
-	// +++ Ermitteln anderer Buchungsstellen wo diese Rechte hat
-	// +++ Filter "Gemeinde" berÃŒcksichtigt!! Wenn gesetzt.
-
-	// SQL-Bausteine
-	$sql1 ="SELECT g.gemeinde, g.gemarkungsname, f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
+			// +++ Dann suche sie !!			
+		}
+		zeile_buchung ($buchunggml, $zbvnr, $zgbbez."-".$zblattn.$zblattz."-".$zbvnr, false);
+	}
+
+// SQL-Bausteine
+// dienend $1 gml_id von
+//         Buchungsstelle  <vs/an<  Buchungsstelle sh
+//         (dienend)                (herrschend)
+//
+// direkt  $1 gml_id von 
+//         Buchungsstelle                              <vs/istGebucht< FlurstÃŒck > Gemarkung
+//
+// Recht   $1 gml_id von 
+//         Buchungsstelle  >vs/an>  Buchungsstelle sd  <vf/istGebucht< FlurstÃŒck > Gemarkung
+//         (herrschend)             (dienend)
+//                                                 sd  >vd/istBestandteilVon> bd > gd
+
+	// Anfang gleich (Select-Liste)
+	$sqlanf ="SELECT g.gemeinde, g.gemarkungsname, f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
 	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 ";
+		$sqlanf.="st_x(st_Centroid(f.wkb_geometry)) AS x, ";
+		$sqlanf.="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.="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
+		$sqlanf.="st_x(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS x, ";
+		$sqlanf.="st_y(st_transform(st_Centroid(f.wkb_geometry),".$epsg.")) AS y ";			
+	}
+	// Filter gleich
 	switch ($gfilter) { // Filter Gemeinde
 		case 1: // Einzelwert
-			$sql2.="AND g.gemeinde=".$gemeinde." "; break;
+			$sqlfitler="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);
+			$sqlfilter="AND g.gemeinde in (".$gemeinde.") "; break;
+	}
+
+	// Abfrage: Direkte Buchungen (FlurstÃŒcke)
+	$sql =$sqlanf."FROM alkis_beziehungen vs JOIN ax_flurstueck f ON vs.beziehung_von = f.gml_id ";
+	$sql.="JOIN pp_gemarkung  g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
+	$sql.="WHERE vs.beziehung_zu= $1 AND vs.beziehungsart='istGebucht' ";
+	$sql.=$sqlfilter."ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+
+	$v=array($buchunggml);
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
 	if (!$res) {
-		echo "\n<p class='err'>Fehler bei Buchungsstelle (gml).</p>";
-		if ($debug >= 3) {echo "\n<p class='err'>".$sql."</p>";}
-	}
-	$zfs=0;
+		echo "\n<p class='err'>Fehler bei Buchungsstelle (gml, direkt).</p>";
+		if ($debug >= 3) {
+			echo "\n<p class='err'>'".$sql."'<br>\nmit $1 ='".$buchunggml."'</p>";
+		}
+	}
+	$zfs1=0;
 	while($row = pg_fetch_array($res)) {	
 		$fs_gml=$row["gml_id"];
@@ -557,35 +460,76 @@
 		$flur=$row["flurnummer"];
 		$fskenn=$row["zaehler"];
-		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
-		$x=$row["x"];
-		$y=$row["y"];
-
-		// FILTER OBEN, IN SQL - nicht HIER
-		if($gemeinde > 0 and $gemeinde != $gemei and $gfilter == 1) { // ex-territorial 
-			if ($debug >= 2) {
-				echo "<p class='dbg'>Gemkg ".$gmkg." liegt in Gemeinde '".$gemei."' nicht '".$gemeinde."'</p>";
-			}
-			echo "\n<div class='fs' title='Kein Zugriff! Liegt au&szlig;erhalb des Gebietes.'>";
-				echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Leer.ico' width='16' height='16' alt='FS'> (".$gmkg." ".$flur."-".$fskenn." )";
-			echo "\n</div>";			
-		} else {
-			echo "\n<div class='fs'>";
-				echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
-					echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
-				echo "\n\t</a> ";
-				echo "\n\t".$gmkg." <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
-						echo "javascript:parent.parent.parent.mb_repaintScale(\"mapframe1\",".$x.",".$y.",".$scalefs."); ";
-						echo "parent.parent.showHighlight(".$x.",".$y.")' ";
-					echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
-					echo "onmouseout='parent.parent.hideHighlight()'>&nbsp;";
-				echo $flur."-".$fskenn."&nbsp;</a>";
-			echo "\n</div>";
-		}
-		$zfs++;
-	}
-	if($zfs == 0) {
-		echo "\n<p class='anz'>Kein Flurst&uuml;ck.</p>";
-	} elseif($zfs > 1) {
-		echo "\n<p class='anz'>".$zfs." Flurst&uuml;ck.</p>";
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
+		zeile_flurstueck ($fs_gml, $fskenn, $row["x"], $row["y"], $gmkg, $flur );
+		$zfs1++;
+	}
+	if($zfs1 == 0) {
+		echo "\n<p class='anz'>Kein Flurst&uuml;ck direkt</p>";
+	} elseif($zfs1 > 1) {
+		echo "\n<p class='anz'>".$zfs1." Flurst&uuml;cke</p>";
+	}
+	if($zfs1 > 0) { // wenn's was zu trennen gibt
+		echo "<hr>"; // Trennen
+	}
+
+	// Abfrage: Rechte an (dienende Buchungen und ihre FlurstÃŒcke)
+	$sql =$sqlanf.", sd.gml_id AS diengml, sd.laufendenummer AS dienlfd, ";		// Stelle dienend
+	$sql.="bd.gml_id AS dienbltgml, bd.buchungsblattnummermitbuchstabenerweiterung AS dienblatt, "; // Blatt dienend
+	$sql.="gd.stelle, gd.gml_id AS dienbezgml, gd.bezirk, gd.bezeichnung AS diengbbez ";	// AG und Bezirk dazu
+	$sql.="FROM alkis_beziehungen vs ";
+	$sql.="JOIN ax_buchungsstelle sd ON vs.beziehung_zu=sd.gml_id ";
+	$sql.="JOIN alkis_beziehungen vf ON vf.beziehung_zu=sd.gml_id "; // sd=Stelle dienend
+	$sql.="JOIN ax_flurstueck f ON vf.beziehung_von = f.gml_id ";
+	$sql.="JOIN pp_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkung ";
+
+	// Blatt und Bezirk (dienend)
+	$sql.="JOIN alkis_beziehungen vd ON vd.beziehung_von=sd.gml_id ";
+	$sql.="JOIN ax_buchungsblatt bd ON vd.beziehung_zu=bd.gml_id ";	// Blatt dienend
+	$sql.="JOIN ax_buchungsblattbezirk gd ON bd.land=gd.land AND bd.bezirk=gd.bezirk "; // GB-Bez. dienend
+	$sql.="WHERE vs.beziehung_von = $1 AND vs.beziehungsart='an' AND vf.beziehungsart='istGebucht' AND vd.beziehungsart='istBestandteilVon' ";
+	$sql.=$sqlfilter."ORDER BY gd.bezeichnung, bd.buchungsblattnummermitbuchstabenerweiterung, cast(sd.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+
+	$v=array($buchunggml);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Buchungsstelle (gml, Recht an).</p>";
+		if ($debug >= 3) {
+			echo "\n<p class='err'>'".$sql."'<br>\nmit $1 ='".$buchunggml."'</p>";
+		}
+	}
+	$zfs2=0;
+	$gwblatt="";
+	while($row = pg_fetch_array($res)) {
+		$dienstelle=$row["stelle"];		// Stelle (AG) des dienenden GrundstÃŒcks
+		$dienbezgml=$row["dienbezgml"];	// Bezirks des dien. GS: gml, Nr. und Bezeichnung
+		$diengbbez=$row["diengbbez"];	// Bezeichnung
+		$dienbezirk=$row["bezirk"];	// Key
+		$dienbltgml=$row["dienbltgml"];	// dienendes Blatt, gml und Nr
+		$dienblatt=$row["dienblatt"];
+		$diengml=$row["diengml"];		// gml_id des dienenden GrundstÃŒcks
+		$dienlfd=$row["dienlfd"];		// BVNR (laufendNr) des dien. GS
+		if ($gwblatt != $dienblatt) { // Gruppierung Blatt - dienend
+			$gwblatt = $dienblatt; // Steuerg GW Blatt
+			zeile_blatt ($dienbezirk, $diengbbez, $dienbltgml, $dienblatt, true, "");
+			$gwbvnr="";
+		}
+		if ($gwbvnr != $dienlfd) { // Gruppierung Buchung (BVNR) - dienend
+			$gwbvnr = $dienlfd; // Steuerg GW BVNR
+			zeile_buchung($diengml, $dienlfd, $dienbezirk."-".$dienblattlnk."-".$dienlfd, true);
+		} // ++ Buchungsart? Welches Recht?
+		$fs_gml=$row["gml_id"];
+		$gemei=$row["gemeinde"];
+		$gmkg=$row["gemarkungsname"];
+		$flur=$row["flurnummer"];
+		$fskenn=$row["zaehler"];
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // BruchNr
+		zeile_flurstueck ($fs_gml, $fskenn, $row["x"],$row["y"], $gmkg, $flur );
+		$zfs2++;
+	}
+	if($zfs2 == 0 AND $zfs1 == 0) {
+		echo "\n<p class='anz'>Kein Recht an Flst.</p>";
+	} elseif($zfs2 > 1) {
+		echo "\n<p class='anz'>".$zfs2." Rechte an Flurst.</p>";
 	}
 	return;
@@ -596,8 +540,6 @@
 // ===========
 if(isset($epsg)) {
-	#if ($debug >= 2) {echo "<p class='dbg'>aktueller EPSG='".$epsg."'</p>";} // aus MB
 	$epsg = str_replace("EPSG:", "" , $_REQUEST["epsg"]);	
 } else {
-	#if ($debug >= 1) {echo "<p class='err'>kein EPSG gesetzt</p>";}	
 	$epsg=$gui_epsg; // aus Conf
 }
@@ -605,44 +547,28 @@
 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>";}
 
 // Wurde eine gml_id (internes Kennzeichen) aus einem Self-Link verwendet?
 // Dann hat das Prioritaet, also *nicht* nach $gbkennz suchen.
-if ($gbuchung != "") { // gml der Buchungsstelle
-	$trans="Buchungsstelle";
+if ($buchunggml != "") { // gml der Buchungsstelle
+	$trans="Flurst. zur Buchungsstelle (Link)";
 	EinGrundstueck(true);
 
 } 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 des Amtsgerichtes
-	#if ($debug >= 2) {echo "<p class='dbg'>Link Amtsgericht=".$ag."</p>";}
+} elseif($ag != "") { // Key des Amtsgerichtes
 	$trans="GB-Bezirke zum Amtsgericht";
-	ListAG( "'".$ag."'" ); // noch mal Kopfzeile
-	ListGBBez("'".$ag."'", false);
-
-} else { // Kein Self-Link, Eingabe im Formular
+	ListGBBez($ag);
+
+} else { // Eingabe im Formular
 
 	switch ($kennztyp) {
@@ -652,5 +578,5 @@
 			break;
 		case 1: // Eingabe Bezirk-Name (-Teil) -> gefilterte Liste der Bezirke
-			$trans="Grundbuchbezirke gefiltert";
+			$trans="Bezirke suchen \"".$gbkennz."\"";
 			$beznr=SuchGBBezName();
 			if ($beznr > 0) {  // eindeutig
@@ -670,15 +596,16 @@
 				if (EinBlatt(true) == 1) { // darauf genau eine Buchung
 					$trans="GB-Blatt und 1 Buchung";
-					$gbuchung=gml_buchungsstelle(); // gml_id zum Kennzeichen
+					$buchunggml=gml_buchungsstelle(); // gml_id zum Kennzeichen
 					EinGrundstueck(false);
 				}
 			}
 			break;
-		case 4: // Eingabe Buchung (Grundstueck) -> Liste der Flurstuecke
-			$trans="Flurst. zur Buchungsstelle";
-			$gbuchung=gml_buchungsstelle(); // gml_id zum Kennzeichen
-			if ($gbuchung != "") { // .. wurde geliefert 
-				$trans="Buchungsstelle und 1 Flurst.";
-				EinGrundstueck(true);
+		case 4: // Eingabe Buchung (GrundstÃŒck) -> Liste der FlurstÃŒcke
+			$buchunggml=gml_buchungsstelle(); // gml_id zum Kennzeichen
+			if ($buchunggml != "") { 		// .. wurde geliefert 
+				$trans="Flurst. zur Buchungsstelle (Eingabe)";
+				EinGrundstueck(true);	// mit Backlink
+			} else{
+				$trans="Suche Buchungsstelle";
 			}
 			break;
