Index: /trunk/mapbender/http/nav/alkisnav_adr.php
===================================================================
--- /trunk/mapbender/http/nav/alkisnav_adr.php	(revision 281)
+++ /trunk/mapbender/http/nav/alkisnav_adr.php	(revision 282)
@@ -1,13 +1,8 @@
 <?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-26	"import_request_variables" entfÃ€llt in PHP 5.4.
 					ZurÃŒck-Link, Titel der Transaktion anzeigen
 	2013-04-29	Test mit IE
+	2013-05-07  Strukturierung des Programms
 
 	ToDo:
@@ -40,5 +35,5 @@
 <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>
@@ -129,5 +124,4 @@
 	$sql.="JOIN ax_gemeinde g ON k.land=g.land AND k.regierungsbezirk=g.regierungsbezirk AND k.kreis=g.kreis AND k.gemeinde=g.gemeinde ";
 	$sql.="WHERE k.lage LIKE $1 ";
-
 	switch ($gfilter) {
 		case 1: // Einzelwert
@@ -155,5 +149,4 @@
 			echo $skey." <a class='st' href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;str_schl=".$gkey."' title='".$gemname."'>".$sname;
 			echo "</a>";
-
 			switch ($gfilter) {
 				case 0: // Kein Filter
@@ -162,6 +155,4 @@
 				case 2: // Liste
 					echo " in ".$gemname;
-					break;
-				default: // Einzelwert
 					break;
 			}
@@ -247,13 +238,9 @@
 					echo " in ".$gemname;
 					break;
-				default: // Einzelwert
-					break;
 			}			
 			echo "\n</div>";
 		}
 		echo "\n<hr>";
-
 		// Haeuser zum Strassenschluessel
-	//	$sql="SELECT replace(h.hausnummer,' ','') AS hsnr, subq.geb, "; // Subquery
 		$sql="SELECT replace(h.hausnummer,' ','') AS hsnr, ";
 		if($epsg == "25832") { // Transform nicht notwendig
@@ -264,16 +251,4 @@
 			$sql.="st_y(st_transform(p.wkb_geometry,".$epsg.")) AS y ";		
 		}
-
-/* Version mit // Subquery
-Liefert Informationen ÃŒber GebÃ€ude zur Hausnummer. LÃ€uft aber spÃŒrbar langsamer.
-		$sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von ";
-		$sql.="JOIN ax_lagebezeichnungmithausnummer h ON v.beziehung_zu = h.gml_id ";
-		$sql.="LEFT JOIN (SELECT b.beziehung_zu AS zu, g.gml_id AS geb FROM alkis_beziehungen b ";
-		$sql.="JOIN ax_gebaeude g ON b.beziehung_von=g.gml_id WHERE b.beziehungsart='zeigtAuf') subq ";
-		$sql.="ON h.gml_id = subq.zu WHERE v.beziehungsart='dientZurDarstellungVon' AND p.art = 'HNR' ";
-		$sql.="AND h.land= $1 AND h.regierungsbezirk= $2 AND h.kreis= $3 AND h.gemeinde= $4 AND h.lage= $5 ";
-		$sql.="ORDER BY lpad(split_part(hausnummer,' ',1), 4, '0'), split_part(hausnummer,' ',2);"; */
-
-		// Version ohne Subquery
 		$sql.="FROM ap_pto p JOIN alkis_beziehungen v ON p.gml_id = v.beziehung_von ";
 		$sql.="JOIN ax_lagebezeichnungmithausnummer h ON v.beziehung_zu = h.gml_id ";
@@ -291,18 +266,7 @@
 			if($count == 0){echo "\n<tr>";}	
 			$hsnr=$rowh["hsnr"];
-		//	$geb=$rowh["geb"]; // Subquery
 			$x=$rowh["x"];
 			$y=$rowh["y"];
-		/* // Subquery
-			if ($geb == "") { // kein GebÃ€ude
-				$cls=" class='hsnro'";
-				$ttl="kein Haus";
-			} else {
-				$cls="";
-				$ttl="Haus ".$geb;
-			}
-		*/		
 			echo "\n\t<td class='hsnr'>";
-			//	echo "<a".$cls." href='";
 				echo "<a href='";
 					echo "javascript:";
@@ -312,5 +276,4 @@
 				echo "onmouseover='parent.parent.showHighlight(".$x.",".$y.")' ";
 				echo "onmouseout='parent.parent.hideHighlight()";
-			//	echo "' title='".$ttl."'>".$hsnr."</a>"; // Subquery
 				echo "'>".$hsnr."</a>";
 			echo "</td>";
Index: /trunk/mapbender/http/nav/alkisnav_grd.php
===================================================================
--- /trunk/mapbender/http/nav/alkisnav_grd.php	(revision 281)
+++ /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;
Index: /trunk/mapbender/http/nav/alkisnav_fkt.php
===================================================================
--- /trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 281)
+++ /trunk/mapbender/http/nav/alkisnav_fkt.php	(revision 282)
@@ -1,23 +1,142 @@
 <?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
+	2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
 */
 
+// function Typ "zeile_**"  = Ausgabe eines Knotens
+// - Icon,  ggf. mit Link zur Buchauskunft
+// - Zeile, ggf. mit Link zur weiteren AuflÃ¶sung untergeordneter Knoten
+// Hierin die Encodierung fÃŒr url und HTML.
+
+function zeile_ag ($ag, $anr) {	// Zeile  A m t s g e r i c h t
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	if ($ag == "") {
+		$agd=$anr; // Ersatz: Nummer statt Name. Besser: Name immer fÃŒllen
+	} else {
+		$agd=htmlentities($ag, ENT_QUOTES, "UTF-8");
+	}
+	echo "\n<div class='ga' title='Amtsgericht'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Gericht.ico' width='16' height='16' alt='Amtsgericht'> ";
+		echo "AG <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;ag=".$anr."'>";		
+		echo $agd."</a> (".$anr.")";
+	echo "\n</div>";
+	return;
+}
+
+function zeile_gbbez ($gnam, $zgbbez) {	// Zeile Grundbuch - B e z i r k
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	$gnamd=htmlentities($gnam, ENT_QUOTES, "UTF-8");
+	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 ".$gnamd."</a> (".suchfeld($zgbbez).")";			
+	echo "\n</div>";
+	return;
+}
+
+function zeile_blatt ($bezirk, $beznam, $blattgml, $blatt, $dienend, $person) {
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	// Zeile Grundbuch - B l a t t
+	$blattd=ltrim($blatt, "0"); // Display-Version ohne fÃŒhrende Nullen
+	if ( $dienend) {$dientxt="dienendes ";}
+	$blattlnk=urlencode($blatt); // trailing Blank
+	if ($beznam != "") {$nam = $beznam." ";}
+	echo "\n<div class='gb' title='".$dientxt."GB-Blatt'>";
+	if ($blattgml == "") { // Link zum Nachweis nur wenn GML bekannt
+		echo "\n\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='Blatt'>";
+	} else {
+		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 $nam." <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg;
+	echo "&amp;blattgml=".$blattgml."&amp;gbkennz=".$bezirk."-".$blattlnk;
+
+	echo "&amp;gbbeznam=".urlencode($beznam);
+
+	if ($person != "") {echo "&amp;person=".$person;} // nur fÃŒr EigentÃŒmer-Suche
+	echo "'>Blatt&nbsp;".$blattd."</a>\n</div>";
+	return;
+}
+
+function zeile_buchung ($buchunggml, $bvnr, $gbkennz, $dienend) {
+	// Zeile  B u c h u n g s s t e l l e  -  GrundstÃŒck ausgeben
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	if ($bvnr == 0) {
+		$bvnra = "-";
+	} else {
+		$bvnra = str_pad($bvnr, 4, "0", STR_PAD_LEFT); // auf 4 Stellen
+	}
+	if ($diened) {
+		$ti="dienendes&nbsp;";
+		$re="Recht an ";
+	} else {
+		$ti="";
+		$re="";
+	}
+	echo "\n<div class='gs' title='".$ti."Grundst&uuml;ck'>";
+	echo "\n\t<img class='nwlink' src='ico/Grundstueck.ico' width='16' height='16' alt='GS'> ";
+	echo $re."Buchung";
+
+	if ($gbkennz == "") { // ohne Link
+		echo "&nbsp;".$bvnra."&nbsp;";
+	} else { // Bezirk-Blatt-lfd
+		echo "\n\t<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;buchunggml=".$buchunggml;			
+		echo "&amp;gbkennz=".$gbkennz;
+		echo "'>&nbsp;".$bvnra."&nbsp;</a>";
+	}
+	echo "\n</div>";	
+	return 0;
+}
+
+function zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur) {
+	// Zeile mit Icon (Link zum Buch-Nachweis) und Text (Link zum Positionieren)
+	global $gkz, $gemeinde, $epsg, $auskpath, $scalefs;
+
+	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>\n\t";			
+
+	echo "&nbsp;<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()'>";
+
+	if ($gmkg == "" ) {
+		echo "Flst. "; // Im FS-Teil: Gem+Flur als Knoten darÃŒber ($gmkg und $flur leer)
+	} else {
+		echo $gmkg." "; // Im GB-und Nam-Teil in der Zeile angezeigt
+	}
+	if ($flur != "" ) {echo $flur."-";}
+	echo $fskenn."</a>\n</div>";
+	return;
+}
+
+function zeile_person ($persongml, $nachname, $vorname) {
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	// Zeile  P e r s o n   (oder Firma)
+	$nnam=htmlentities($nachname, ENT_QUOTES, "UTF-8");
+	$namlnk=urlencode($nachname);
+	$vnam=htmlentities($vorname, ENT_QUOTES, "UTF-8");
+	// 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=".$persongml."&amp;name=".$namlnk."'>".$nnam.", ".$vnam."</a>";
+	return;
+}
+
 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;
+// Zu einem Grundbuch-Blatt (identifiziert ÃŒber seine gml_id) suchen der 
+// Buchungen (Gruppenwechsel) und FlurstÃŒcke (Links)
+	global $gkz, $gemeinde, $blattgml, $epsg, $gfilter, $debug;
 
 	// SQL-Bausteine vorbereiten
-	$sql1 ="SELECT s1.laufendenummer AS lfd, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
+	// SQL vorne gleich
+	$sql1 ="SELECT s1.laufendenummer AS lfd, s1.gml_id AS bsgml, 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, ";
@@ -28,16 +147,20 @@
 	}
 	$sql1.="g.gemarkung, g.gemarkungsname ";
-   $sql1.="FROM alkis_beziehungen vbg ";
+	$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 ";
+	// Zwischen-JOIN verschieden
+	$sqlz1 ="JOIN alkis_beziehungen vfb ON s1.gml_id = vfb.beziehung_zu ";
+	
+	$sqlz2 ="JOIN alkis_beziehungen vss ON vss.beziehung_von = s1.gml_id ";
+	$sqlz2.="JOIN ax_buchungsstelle s2 ON vss.beziehung_zu = s2.gml_id ";
+	$sqlz2.="JOIN alkis_beziehungen vfb ON s2.gml_id = vfb.beziehung_zu ";
+
+	// ++	JOIN alkis_beziehungen - ax_buchungsblatt 
+	//		fÃŒr Link auf Buchung mit komplettem Grundbuchennzeichen
+
+	// SQL hinten gleich
+	$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) {
@@ -47,15 +170,16 @@
 			$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
+	$sql2.="ORDER BY cast(s1.laufendenummer AS integer), f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner LIMIT $2 ;";
+
+	// Abfrage:  d i r e k t e  B u c h u n g e n
+	// Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< FlurstÃŒck
+	#$sql=$sql1.$sqlz1.$sql2; // Direkte Buchungen
 
 	$v=array($blattgml, $linelimit);
-	$res=pg_prepare("", $sql);
+	$res=pg_prepare("", $sql1.$sqlz1.$sql2);
 	$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>";}
+		#if ($debug >= 3) {echo "\n<p class='err'>".$sql1.$sqlz1.$sql2."</p>";}
 		return;
 	}
@@ -63,19 +187,10 @@
 	$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>";
+		$bsgml=$row["bsgml"]; // Buchungsstelle gml_id
+		if ($gwbv != $bvnr) { // Gruppierung Buchungs-Stelle (BVNR)
+			$gwbv = $bvnr;
+			zeile_buchung ($bsgml, $bvnr, "", false); // FÃŒr GB-Kennz. (-> Link) fehlt Bezirk + Blatt
 		}
-
 		$fs_gml=$row["gml_id"];
 		$gmkg=$row["gemarkungsname"];
@@ -85,62 +200,35 @@
 		$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>";
+		zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur);
 		$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?
+	#if($zfs1 == 0) { // "nichts gefunden" erst melden, wenn auch Teil 2 (Rechte an) nichts findet
+	#} else
+	if($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
-
+	if($zfs1 > 0) {echo "<hr>";} // Trennen
+
+	// Abfrage:  R e c h t e  a n   /   d i e n e n d e  B u c h u n g e n
 	$v=array($blattgml, $linelimit);
-	$res=pg_prepare("", $sql);
+	$res=pg_prepare("", $sql1.$sqlz2.$sql2);
 	$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>";}
+		#if ($debug >= 3) {echo "\n<p class='dbg'>".$sql1.$sqlz2.$sql2."</p>";}
 		return;
 	}
 	$zfs2=0;
+	#$gwblatt="";
 	$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>";
+		$bsgml=$row["bsgml"]; // Buchungsstelle gml_id
+		if ($gwbv != $bvnr) { // Gruppierung Buchung (BVNR) - dienend
+			$gwbv = $bvnr;
+			zeile_buchung ($bsgml, $bvnr, "", true);
 		}
-
 		$fs_gml=$row["gml_id"];
 		$gmkg=$row["gemarkungsname"];
@@ -150,17 +238,5 @@
 		$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>";
+		zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur);
 		$zfs2++;
 	}
@@ -168,6 +244,5 @@
 		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?
+		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>";
Index: /trunk/mapbender/http/nav/alkisnav_fls.php
===================================================================
--- /trunk/mapbender/http/nav/alkisnav_fls.php	(revision 281)
+++ /trunk/mapbender/http/nav/alkisnav_fls.php	(revision 282)
@@ -1,13 +1,4 @@
 <?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
-					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.
@@ -15,7 +6,9 @@
 					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");
+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);
@@ -29,5 +22,5 @@
 	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 	<title>ALKIS-Suche Flurst&uuml;ck</title>
-	<link rel="stylesheet" type="text/css" href="alkisnav.css"></link>
+	<link rel="stylesheet" type="text/css" href="alkisnav.css">
 	<script type="text/javascript">
 		function imFenster(dieURL) {
@@ -42,5 +35,5 @@
 <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>
@@ -75,5 +68,4 @@
 // Das eingegebene FlurstÃŒcks-Kennzeichen auseinander nehmen. Erwartet wird gggg-fff-zzzz/nnn
 	global $debug, $zgemkg, $zflur, $zzaehler, $znenner;	
-//	if ($debug > 1) {echo "<p class='dbg'>Zerlegen: '".$fskennz."'</p>";}
 	$arr = explode("-", $fskennz, 4);
 	$zgemkg=trim($arr[0]);
@@ -111,58 +103,154 @@
 }
 
-function gemkg_zeile($zgemkg) {
-// Eine Zeile zu Gemarkung ausgeben, SchlÃŒssel wird ÃŒbergeben, Name in DB nachschlagen
-	global $con, $gkz, $gemeinde, $epsg;
-	$sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;";
-	$v=array($zgemkg);
-	$res=pg_prepare("", $sql);
-	$res=pg_execute("", $v);
-	if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
-	$zgmk=0;
-	while($row = pg_fetch_array($res)) { // eigentlich nur EINE
-		$gmkg=$row["bezeichnung"];
-		$zgmk++;
-		echo "\n<div class='gk' title='Gemarkung'>";
-			echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
-			echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."'> ".$gmkg." (".$zgemkg.")</a>";
-		echo "\n</div>";
-	}
-	if ($zgmk == 0) {
-		echo "\n<div class='gk' title='Gemarkung'>";
-			echo "\n\t\t<p class='err'><img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
-				echo  " Gemarkung ".$zgemkg." ist unbekannt.</p>";
-		echo "\n</div>";
+function flurstueckskoordinaten($gml) {
+	// Die Koordinaten zu einem FlurstÃŒck aus der Datenbank liefern
+	global $epsg;
+	$sqlk ="SELECT ";
+	if($epsg == "25832") { // Transform nicht notwendig
+		$sqlk.="x(st_Centroid(wkb_geometry)) AS x, ";
+		$sqlk.="y(st_Centroid(wkb_geometry)) AS y ";
+	} else {  
+		$sqlk.="x(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS x, ";
+		$sqlk.="y(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS y ";			
+	}
+   $sqlk.="FROM ax_flurstueck WHERE gml_id= $1 ";
+	$v=array($gml);
+	$resk=pg_prepare("", $sqlk);
+	$resk=pg_execute("", $v);
+	if (!$resk) {echo "\n<p class='err'>Fehler bei Koordinate.</p>";}
+	$rowk = pg_fetch_array($resk);
+	$koor=array("x" => $rowk["x"], "y" => $rowk["y"]);
+	return $koor;
+}
+
+function zeile_gemeinde ($gnr, $gemeindename) {
+	// Eine Zeile zu Gemeinde ausgeben, SchlÃŒssel und Name wird ÃŒbergeben
+	global $gkz, $gemeinde, $epsg;
+	$stadt=htmlentities($gemeindename, ENT_QUOTES, "UTF-8");
+	$bez=urlencode($gemeindename);
+	echo "\n<div class='gm' title='Gemeinde'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";
+		echo " Gem. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gm=".$gnr."&amp;bez=".$bez."'>";		
+		echo  " ".$stadt."</a> (".$gnr.")";
+	echo "\n</div>";
+	return;
+}
+
+function zeile_gemarkung($gnr, $gemkgname) {
+	// Eine Zeile zu Gemarkung ausgeben
+	global $con, $gkz, $gemeinde, $epsg, $gfilter;
+	if ($gemkgname == "") { // Falls Gem.-Name fehlt, in DB nachschlagen
+		$sql ="SELECT g.gemarkungsname FROM pp_gemarkung g WHERE g.gemarkung = $1 LIMIT 1;";
+		$v=array($gnr);
+		$res=pg_prepare("", $sql);
+		$res=pg_execute("", $v);
+		if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkungsname.</p>";}
+		$row = pg_fetch_array($res);
+		$gemkgname=$row["gemarkungsname"];
+	}
+	if ($gemkgname == "") {$gemkgname = "(unbekannt)";}
+	$gnam=htmlentities($gemkgname, ENT_QUOTES, "UTF-8");
+	echo "\n<div class='gk' title='Gemarkung'>";
+	echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
+	echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gnr."'>";		
+	echo  " ".$gnam."</a> (".$gnr.")";
+	echo "\n</div>";
+	return;
+}
+
+function zeile_flur($zgemkg, $zflur, $historie) { // Eine Zeile zur Flur ausgeben
+	global $gkz, $gemeinde, $epsg;
+	echo "\n<div class='fl' title='Flur'>";
+	echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'> ";
+	$url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$zflur;
+	echo "<a title='Aktuelle Flurst&uuml;cke suchen' href='".$url."'>Flur ".$zflur." </a>"; 
+	If ($historie) { // Link zur hist. Suche anbieten
+		echo " <a class='hislnk' title='Historische Flurst&uuml;cke der Flur' href='".$url."&amp;hist=j'>Hist.</a>";
+	}
+	echo "\n</div>";	
+	return;
+}
+
+function zeile_hist_fs($fs_gml, $fskenn, $ftyp, $gknr, $flur) {
+	// Eine Zeile fÃŒr ein historisches FlurstÃŒck ausgeben 
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	if ($ftyp == "h") {
+		$ico="Flurstueck_Historisch_Lnk.ico";
+		$titl="Historisches Flurst&uuml;ck";
+	} else {
+		$ico="Flurstueck_Historisch_oR_Lnk.ico";
+		$titl="Historisches Flurst&uuml;ck ohne Raumbezug";
+	}
+	echo "\n<div class='hi' title='".$titl."'>";
+
+	// Icon -> Buchnachweis
+	echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
+		echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='Hist'>";
+	echo "\n\t</a>";
+
+	// Zeile -> tiefer in die Historie
+	$flurl =$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;hist=j";
+	$flurl.="&amp;fskennz=".$gknr."-".$flur."-";
+	echo "\n\thist. Flst. <a href='".$flurl.$fskenn."'>".$fskenn."</a>";		
+
+	echo "\n</div>";
+	return;
+}
+
+function zeile_nachf_fs($gml, $gknr, $flur, $fskenn, $ftyp) {
+	// Eine Zeile fÃŒr ein Nachfolger-FlurstÃŒck eines hist. Fs. ausgeben 
+	global $gkz, $gemeinde, $epsg, $auskpath;
+	$fs=$gknr."-".$flur."-".$fskenn;
+	switch ($ftyp) {
+
+	#case "a":
+	#	// Fuer ein akt. FS wird hier ein Link auf FS-Kennzeichen-Eingabe angeboten.
+	#	// Erst aus der nÃ€chsten Anzeige kann dann positioniert werden.
+	#	$ico="Flurstueck_Link.ico";
+	#	$titl="Aktuelles Flurst&uuml;ck";
+	#	$hisparm="";
+	#	$auskprog="alkisfsnw";
+	#	break;
+		
+	case "a": // Alternativ: hier gleich eine FS-Zeile mit Link ausgeben (EinrÃŒckung css passt nicht)
+		$koor=flurstueckskoordinaten($gml);
+		zeile_flurstueck($gml, $fskenn, $koor["x"], $koor["y"], "", "");
 		return;
-	}
-	return 0;
-}
-
-function flur_zeile($zgemkg, $zflur) {
-//	Eine Zeile zur Flur ausgeben
-	global $con, $gkz, $gemeinde, $epsg;
-	echo "\n<div class='fl' title='Flur'>";
-		echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'> ";
-		$url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$zflur;
-		echo "Flur <a href='".$url."'>".$zflur."</a>";
-		//echo "<span class='hislnk'>";
-		echo " <a class='hislnk' title='Historische Flurst&uuml;cke' href='".$url."&amp;hist=j'>Hist.</a>";		
+		break;
+
+	case "h":
+		$ico="Flurstueck_Historisch_Lnk.ico";
+		$titl="Historisches Flurst&uuml;ck";
+		$hisparm="&amp;hist=j";
+		$auskprog="alkisfshist";
+		break;
+	case "o":
+		$ico="Flurstueck_Historisch_oR_Lnk.ico";
+		$titl="Historisches Flurst&uuml;ck ohne Raumbezug";
+		$hisparm="&amp;hist=j";
+		$auskprog="alkisfshist";
+		break;
+	}
+	// fÃŒr die Hist.-FÃ€lle:
+	echo "\n<div class='hn' title='Nachfolger: ".$titl."'>";			
+		echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath.$auskprog.".php?gkz=".$gkz."&amp;gmlid=".$gml."\")'>";
+			echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='FS'>";
+		echo "\n\t</a> ";		
+		echo "Flst. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fs.$hisparm."'>".$fskenn."</a>";					
 	echo "\n</div>";
-	return 0;
+	return;
 }
 
 function ListGemeinden() {
-// bei Leereingabe die Gemeinden anlisten
+	// Bei Leereingabe im Formular die Gemeinden auflisten
 	global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter;
-	$linelimit=50;
+	$linelimit=60;
 	$sql ="SELECT gemeinde, gemeindename FROM pp_gemeinde ";
 	switch ($gfilter) {
 		case 1: // Einzelwert
-			$sql.="WHERE gemeinde=".$gemeinde." ";
-			break;
+			$sql.="WHERE gemeinde=".$gemeinde." "; break;
 		case 2: // Liste
-			$sql.="WHERE gemeinde in (".$gemeinde.") ";
-			break;
-		default: // kein Filter
-			break;
+			$sql.="WHERE gemeinde in (".$gemeinde.") "; break;
+		default: break;
 	}
 	$sql.=" ORDER BY gemeindename LIMIT $1 ;";
@@ -171,25 +259,19 @@
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Gemeinde</p>";
-		if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
+		#if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
 		return 0;
 	}
 	$cnt = 0;
 	while($row = pg_fetch_array($res)) {
+		$gnr=$row["gemeinde"];
 		$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'>";
-			echo " Gem. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;gm=".$gnr."&amp;bez=".$bez."'>";		
-			echo  " ".$stadt."</a> (".$gnr.")";
-		echo "\n</div>";
+		zeile_gemeinde($gnr, $gemeindename);
 		$cnt++;
 	}
-	if($cnt == 0){ 
+	// Foot
+	if($cnt == 0) { 
 		echo "\n<p class='anz'>Keine Gemeinde.</p>";
 	} elseif($cnt >= $linelimit) {
 		echo "\n<p class='anz' title='Bitte eindeutiger qualifizieren'>".$cnt." Gemeinden ... und weitere</p>";
-		// +++ BlÃ€ttern ?
 	} elseif($cnt == 1) { // Eindeutig!
 		return $gnr; 
@@ -197,106 +279,31 @@
 		echo "\n<p class='anz'>".$cnt." Gemeinden</p>";
 	}
-	return 0;
-}
-
-function ListGmkgInGemeinde($gkey) {
-// Die (gefuellten) Gemarkungen zu einem Gemeinde-Key (aus Link) listen
-	global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter, $bez;
+	return;
+}
+
+function ListGmkgInGemeinde($gkey, $bez) {
+	// Die Gemarkungen zu einem Gemeinde-Key (aus Link) listen
+	global $con, $gkz, $gemeinde, $epsg, $debug, $gfilter;
 	$linelimit=70;
-	$sql ="SELECT gemarkung, gemarkungsname FROM pp_gemarkung ";
-   $sql.="WHERE gemeinde= $1 ORDER BY gemarkungsname LIMIT $2 ;";
+
+	// Head
+	zeile_gemeinde($gkey, $bez);
+
+	// Body
+	$sql ="SELECT gemarkung, gemarkungsname FROM pp_gemarkung WHERE gemeinde= $1 ORDER BY gemarkungsname LIMIT $2 ;";
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", array($gkey, $linelimit));
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Gemarkungen</p>";
-		if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
-		return 0;
-	}
-	// Hierarchie Dokumentieren, Gemeinde-Name?
-	echo "\n<div class='gm' title='Gemeinde'>";
-		echo "\n\t\t<img class='nwlink' src='ico/Gemeinde.ico' width='16' height='16' alt='Stadt'>";	
-		echo  " Gem. ".$bez." (".$gkey.")"; // .urldecode($bez). ??
-	echo "\n</div>";
+		return 1;
+	}
 	$cnt = 0;
 	while($row = pg_fetch_array($res)) {
-		$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'>";
-			echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gnr."'>";		
-			echo  " ".$gnam."</a> (".$gnr.")";
-		echo "\n</div>";
+		$gnam=$row["gemarkungsname"];
+		zeile_gemarkung($gnr, $gnam, "");
 		$cnt++;
 	}
-	if($cnt == 0){ 
-		echo "\n<p class='anz'>Keine Gemarkung.</p>";
-	} elseif($cnt >= $linelimit) {
-		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;
-}
-
-function SuchGmkgName() {
-// Gemarkung suchen nach Name(-nsanfang)
-	global $con, $gkz, $gemeinde, $epsg, $debug, $fskennz, $gfilter;
-	$linelimit=120;
-	if(preg_match("/\*/",$fskennz)){
-		$match = trim(preg_replace("/\*/i","%", strtoupper($fskennz)));
-	} else {
-		$match = trim($fskennz)."%";
-	}	
-	$sql ="SELECT 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 g.gemeinde = ".$gemeinde." ";
-			break;
-		case 2: // Liste
-			$sql.="AND g.gemeinde in (".$gemeinde.") ";
-			break;
-		default: // kein Filter
-			break;
-	}
-	$sql.=" ORDER BY g.gemarkungsname LIMIT $2 ;";
-	$v=array($match, $linelimit);
-	$res=pg_prepare("", $sql);
-	$res=pg_execute("", $v);
-	if (!$res) {
-		echo "\n<p class='err'>Fehler bei Gemarkung</p>";
-		if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
-		return 0;
-	}
-	$cnt = 0;
-	while($row = pg_fetch_array($res)) {
-		$gnam=htmlentities($row["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'>";
-			echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$gnr."'>";		
-			echo  " ".$gnam."</a> (".$gnr.")";
-			switch ($gfilter) {
-				case 0: // Kein Filter
-					echo " ".$row["gemeindename"];
-					break;
-				case 2: // Liste
-					echo " ".$row["gemeindename"];
-					break;
-				default: // Einzelwert
-					break;
-			}
-		echo "\n</div>";
-		$cnt++;
-	}
+	// Foot
 	if($cnt == 0){ 
 		echo "\n<p class='anz'>Keine Gemarkung.</p>";
@@ -308,38 +315,90 @@
 		echo "\n<p class='anz'>".$cnt." Gemarkungen</p>";
 	}
-	return 0;
+	return;
+}
+
+function SuchGmkgName() {
+	// Gemarkung suchen nach Name(-nsanfang)
+	global $con, $gkz, $gemeinde, $epsg, $debug, $fskennz, $gfilter;
+	$linelimit=120;
+	if(preg_match("/\*/",$fskennz)){
+		$match = trim(preg_replace("/\*/i","%", strtoupper($fskennz)));
+	} else {
+		$match = trim($fskennz)."%";
+	}	
+	$sql ="SELECT g.gemeinde, g.gemarkung, g.gemarkungsname, s.gemeindename ";
+	$sql.="FROM pp_gemarkung g JOIN pp_gemeinde s ON g.gemeinde = s.gemeinde ";
+	$sql.="WHERE g.gemarkungsname ILIKE $1 ";
+	switch ($gfilter) {
+		case 1: // Einzelwert
+			$sql.="AND g.gemeinde = ".$gemeinde." "; break;
+		case 2: // Liste
+			$sql.="AND g.gemeinde in (".$gemeinde.") "; break;
+	}
+	$sql.=" ORDER BY s.gemeindename, g.gemarkungsname LIMIT $2 ;";
+	$v=array($match, $linelimit);
+	$res=pg_prepare("", $sql);
+	$res=pg_execute("", $v);
+	if (!$res) {
+		echo "\n<p class='err'>Fehler bei Gemarkung</p>";
+		return;
+	}
+	$cnt = 0;
+	$gwgem="";
+	while($row = pg_fetch_array($res)) {
+		$gemeindename=$row["gemeindename"];
+		if ($gwgem != $gemeindename) { // Gruppierung Gemeinde
+			$gwgem = $gemeindename;
+			$skey=$row["gemeinde"];
+			zeile_gemeinde($skey, $gemeindename);
+		}
+		$gnam=$row["gemarkungsname"];
+		$gnr=$row["gemarkung"];
+		zeile_gemarkung($gnr, $gnam, $gemeindename);
+		$cnt++;
+	}
+	// Foot
+	if($cnt == 0){ 
+		echo "\n<p class='anz'>Keine Gemarkung.</p>";
+	} elseif($cnt >= $linelimit) {
+		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;
+}
+
+function gg_head($gkgnr) {
+	// Ãbergeordnete Zeilen (Head) fÃŒr Gemeinde und Gemarkung ausgeben
+	// Parameter = Gemarkungsnummer
+	$sqlh ="SELECT g.gemarkungsname, s.gemeinde, s.gemeindename FROM pp_gemarkung g ";
+	$sqlh.="JOIN pp_gemeinde s ON g.gemeinde=s.gemeinde AND g.land=s.land ";
+	$sqlh.="WHERE g.gemarkung = $1 ;";
+	$v=array($gkgnr);
+	$resh=pg_prepare("", $sqlh);
+	$resh=pg_execute("", $v);
+	if (!$resh) {echo "\n<p class='err'>Fehler bei Gemeinde und Gemarkung.</p>";}
+	$rowh = pg_fetch_array($resh);
+	$gmkg=$rowh["gemarkungsname"];
+	$skey=$rowh["gemeinde"];
+	$snam=$rowh["gemeindename"];
+	zeile_gemeinde($skey, $snam);
+	zeile_gemarkung($gkgnr, $gmkg);
+	return;
 }
 
 function EineGemarkung($AuchGemkZeile) {
-// Kennzeichen bestehend nur aus Gemarkung-SchlÃŒssel wurde eingegeben
+	// Kennzeichen bestehend nur aus Gemarkung-SchlÃŒssel wurde eingegeben
+	// Parameter = $zgemkg
 	global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg;
-	$linelimit=120; // max. Fluren je Gemarkung
-	if ($AuchGemkZeile) {
-		$sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 ;"; // WHERE f.land= ?
-		$v=array($zgemkg);
-		$res=pg_prepare("", $sql);
-		$res=pg_execute("", $v);
-		if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
-		$zgmk=0;
-		while($row = pg_fetch_array($res)) {	
-			$gmkg=$row["bezeichnung"];
-			$zgmk++;
-		}
-		if ($zgmk == 0) {
-			echo "\n<div class='gk' title='Gemarkung'>";
-				echo "\n\t\t<p class='err'><img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'>";
-					echo  " Gemarkung ".$zgemkg." ist unbekannt.</p>";
-			echo "\n</div>";
-			return;
-		}
-		// > 1 auch mÃ¶glich?
-		echo "\n<div class='gk' title='Gemarkung'>";
-			echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='Gemarkung'> ";
-			echo " OT <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."'>";		
-			echo $gmkg."</a>  (".$zgemkg.")"; // in Gemeinde?
-		echo "\n</div>";
-	}
+	$linelimit=120; // max.Fluren/Gemkg
+
+	// Head
+	if ($AuchGemkZeile) {gg_head($zgemkg);}
+	// Body
 	$sql ="SELECT gemarkungsteilflur AS flur FROM ax_gemarkungsteilflur f ";
-	$sql.="WHERE gemarkung= $1 ORDER BY gemarkungsteilflur LIMIT $2 ;"; 	// WHERE f.land= ?
+	$sql.="WHERE gemarkung= $1 ORDER BY gemarkungsteilflur LIMIT $2 ;"; //WHERE f.land=?
 	$v=array($zgemkg, $linelimit);
 	$res=pg_prepare("", $sql);
@@ -348,11 +407,9 @@
 	$zfl=0;
 	while($row = pg_fetch_array($res)) {	
-		$flur=$row["flur"];
-		echo "\n<div class='fl' title='Flur'>";
-			echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur'>&nbsp;";
-			echo "Flur<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$flur."'>&nbsp;".$flur."&nbsp;</a>";
-		echo "\n</div>";
+		$zflur=$row["flur"];
+		zeile_flur($zgemkg, $zflur, false);
 		$zfl++;
 	}
+	// Foot
 	if($zfl == 0) { 
 		echo "\n<p class='anz'>Keine Flur.</p>";
@@ -366,10 +423,13 @@
 
 function EineFlur() {
-// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, dazu aktuelle FlurstÃŒcke suchen
-	global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $zgemkg, $zflur;
+	// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben, dazu aktuelle FlurstÃŒcke suchen
+	global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg, $zflur;
 	$linelimit=600; // Wie groÃ kann eine Flur sein?
-	gemkg_zeile($zgemkg);
-	flur_zeile($zgemkg, $zflur);
-
+
+	// Head
+	gg_head($zgemkg);
+	zeile_flur($zgemkg, $zflur, true);
+
+	// Body
 	$sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.gemeinde, ";
 	if($epsg == "25832") { // Transform nicht notwendig
@@ -381,5 +441,5 @@
 	}
    $sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 ";
-	$sql.="ORDER BY f.zaehler, f.nenner LIMIT $3 ;"; // WHERE f.land= ?
+	$sql.="ORDER BY f.zaehler, f.nenner LIMIT $3 ;"; // WHERE f.land=?
 	$v=array($zgemkg, $zflur, $linelimit);
 	$res=pg_prepare("", $sql);
@@ -394,19 +454,8 @@
 		$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:";
-					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()'>&nbsp;".$fskenn."&nbsp;</a>";
-		echo "\n</div>";
+		zeile_flurstueck ($fs_gml, $fskenn, $x, $y, "", "");
 		$zfs++;
 	}
-	if($zfs == 0) { 
+	if($zfs == 0) {
 		echo "\n<p class='anz'>Kein Flurst&uuml;ck.</p>";
 	} elseif($zfs >= $linelimit) {
@@ -419,16 +468,14 @@
 
 function HistFlur() {
-// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben
-// Die Flur nach historischen FlurstÃŒcken durchsuchen
+	// Kennzeichen aus Gemarkung und FlurNr wurde eingegeben
+	// Die Flur nach historischen FlurstÃŒcken durchsuchen
 	global $con, $gkz, $gemeinde, $epsg, $debug, $scalefs, $auskpath, $land, $zgemkg, $zflur;
 	$linelimit=500;
 
-	gemkg_zeile($zgemkg);
-	echo "\n<div class='fl' title='Flur'>";
-		echo "\n\t\t<img class='nwlink' src='ico/Flur.ico' width='16' height='16' alt='Flur-Historie'> ";
-		$url=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$zgemkg."-".$zflur;
-		echo "Historie: Flur<a title='Aktuelle Flurst&uuml;cke suchen' href='".$url."'> ".$zflur." </a>"; 
-	echo "\n</div>";
-
+	// Head	
+	gg_head($zgemkg);
+	zeile_flur($zgemkg, $zflur, true);
+
+	// Body
 	$whcl.="WHERE flurstueckskennzeichen like $1 ";
 	$sql ="SELECT 'h' AS ftyp, gml_id, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
@@ -441,8 +488,4 @@
 	if (!$res) {echo "\n<p class='err'>Fehler bei Historie Flur.</p>";}
 	$zfs=0;
-
-	// Konst. Teil d.URL (Flur), FS anhÃ€ngen
-	$flurl=$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;hist=j&amp;fskennz=".$zgemkg."-".$zflur."-";
-
 	while($row = pg_fetch_array($res)) {	
 		$ftyp=$row["ftyp"];
@@ -450,21 +493,9 @@
 		$fskenn=$row["zaehler"];
 		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
-		if ($ftyp == "h") {
-			$ico="Flurstueck_Historisch_Lnk.ico";
-			$titl="Historisches Flurst&uuml;ck";		
-		} else {
-			$ico="Flurstueck_Historisch_oR_Lnk.ico";
-			$titl="Historisches Flurst&uuml;ck ohne Raumbezug";
-		}  // h: Karte Pos.?
-		echo "\n<div class='hi' title='".$titl."'>"; // Zeile
-			// Icon -> Bauchauskunft
-			echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
-				echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='Hist'>";
-			echo "\n\t</a> ";		
-			// Kennzeichen -> weiter in die Historie hinein
-			echo "\n\tFlst. <a href='".$flurl.$fskenn."'>".$fskenn."</a>";					
-		echo "\n</div>";
+		zeile_hist_fs($fs_gml, $fskenn, $ftyp, $zgemkg, $zflur);
 		$zfs++;
 	}
+
+	// Foot
 	if($zfs == 0) { 
 		echo "\n<p class='anz'>Kein historisches Flurst&uuml;ck.</p>";
@@ -479,17 +510,18 @@
 
 function EinFlurstueck() {
-// FlurstÃŒckskennzeichen wurde komplett bis zum Zaehler eingegeben
-// Sonderfall: bei Bruchnummer, mehrere Nenner zum Zaehler
-	global $con, $gkz, $debug, $scalefs, $epsg, $auskpath, $fskennz, $zgemkg, $zflur, $zzaehler, $znenner;
-
-	gemkg_zeile($zgemkg);
-	flur_zeile($zgemkg, $zflur);
-
+	// FlurstÃŒckskennzeichen wurde komplett bis zum Zaehler eingegeben
+	// Sonderfall: bei Bruchnummer, mehrere Nenner zum Zaehler
+	global $con, $gkz, $debug, $epsg, $gemeinde, $fskennz, $zgemkg, $zflur, $zzaehler, $znenner;
+
+	// Head
+	gg_head($zgemkg);
+	zeile_flur($zgemkg, $zflur, true);
+
+	// Body
 	$sql ="SELECT f.gml_id, f.flurnummer, f.zaehler, f.nenner, ";
 	if($epsg == "25832") { // Transform nicht notwendig
 		$sql.="x(st_Centroid(f.wkb_geometry)) AS x, ";
 		$sql.="y(st_Centroid(f.wkb_geometry)) AS y ";
-	}
-	else {  
+	} else {  
 		$sql.="x(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS x, ";
 		$sql.="y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";			
@@ -508,28 +540,17 @@
 		$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:";
-					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 $fskenn."</a>";
-		echo "\n</div>";
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
+		zeile_flurstueck($fs_gml, $fskenn, $row["x"], $row["y"], "", "");
 		$zfs++;
 	}
+	// Foot
 	if($zfs == 0) {
-		echo "\n<p class='err'>Kein aktuelles Flurst&uuml;ck.</p>";
-		// Soll in der Historie weiter gesucht werden?
-		echo "\n<div class='hi' title='Historie'>";
+		echo "\n<p class='anz'>Kein aktuelles Flurst&uuml;ck.</p>";
+		echo "\n<div class='hi' title='in Historie suchen'>";
 			echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Historisch.ico' width='16' height='16' alt='Historisches Flurst&uuml;ck'>&nbsp;";
-			echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fskennz."&amp;hist=j'>in Historie suchen</a>";
+			echo "<a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fskennz."&amp;hist=j'>";
+			echo $zgemkg."-".$zflur."-".$zzaehler;
+			if ($znenner != "") {echo "/".$znenner;}
+			echo " h - suchen</a>";
 		echo "\n</div>";		
 	}
@@ -538,17 +559,18 @@
 
 function HistFlurstueck() {
-	// Ein Nachfolger-FS-Kennzeichen soll recherchiert werden.
-	// Es ist unbekannt, ob dies aktuell ist oder auch schon historisch.
-	global $con, $gkz, $debug, $scalefs, $epsg, $auskpath, $land, $zgemkg, $zflur, $zzaehler, $znenner;
-
-	gemkg_zeile($zgemkg);
-	flur_zeile($zgemkg, $zflur);
-
-	// Suche ueber das Flurstueckskennzeichen, gml ist meist unbekannt
+	// Die Nachfolger-FS-Kennzeichen sollen recherchiert werden.
+	global $debug, $land, $zgemkg, $zflur, $zzaehler, $znenner;
+
+	// Head
+	gg_head($zgemkg);
+	zeile_flur($zgemkg, $zflur, true);
+
+	// Body
+	// Suche ueber das Flurstueckskennzeichen, gml unbekannt
+	$fldlist=" AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, ";
 	$whcl.="WHERE flurstueckskennzeichen= $1 ";
-	$sql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, null as nachf FROM ax_flurstueck ".$whcl;
-	$sql.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
-	$sql.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner, nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
-
+	$sql ="SELECT 'a'".$fldlist."null as nachf FROM ax_flurstueck ".$whcl;
+	$sql.="UNION SELECT 'h'".$fldlist."nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueck ".$whcl;
+	$sql.="UNION SELECT 'o'".$fldlist."nachfolgerflurstueckskennzeichen as nachf FROM ax_historischesflurstueckohneraumbezug ".$whcl;
 	$fskzwhere =$land.$zgemkg; // Flurst-Kennz. f. Where
 	$fskzwhere.=str_pad($zflur, 3, "0", $STR_PAD_LEFT);
@@ -556,10 +578,11 @@
 	if ($znenner == "") {$fskzwhere.="______";}
 	else {$fskzwhere.=str_pad($znenner, 4, "0", $STR_PAD_LEFT)."__";}
-
 	$v=array($fskzwhere);
+
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
 	if (!$res) {echo "\n<p class='err'>Fehler bei hist. Flurst&uuml;ck.</p>";}
 	$zfs=0;
+
 	while($row = pg_fetch_array($res)) {
 		$ftyp=$row["ftyp"];
@@ -569,138 +592,53 @@
 		$fskenn=$row["zaehler"];
 		$nachf=$row["nachf"];
-		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
-
-		if ($ftyp == "a") { // aktuelles FS gefunden, Koordinate holen
-
-			// BEGINN +++ als function ?
-			$sqlk ="SELECT ";
-			if($epsg == "25832") { // Transform nicht notwendig
-				$sqlk.="x(st_Centroid(wkb_geometry)) AS x, ";
-				$sqlk.="y(st_Centroid(wkb_geometry)) AS y ";
-			} else {  
-				$sqlk.="x(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS x, ";
-				$sqlk.="y(st_transform(st_Centroid(wkb_geometry), ".$epsg.")) AS y ";			
-			}
-		   $sqlk.="FROM ax_flurstueck WHERE gml_id= $1 ";
-			$v=array($fs_gml);
-			$resk=pg_prepare("", $sqlk);
-			$resk=pg_execute("", $v);
-			if (!$resk) {echo "\n<p class='err'>Fehler bei Koordinate.</p>";}
-			$zfsk=0;
-			while($rowk = pg_fetch_array($resk)) {	
-				$x=$rowk["x"];
-				$y=$rowk["y"];
-				$zfsk++;
-			}
-			if ($zfsk == 0) {echo "\n<p class='err'>Kein Treffer bei Koordinate.</p>";}
-			// ENDE +++ als function ?
-
-			echo "\n<p>aktueller Nachfolger:</p>";	
-			echo "\n<div class='fs' title='Aktuelles Nachfolger-Flurst&uuml;ck'>"; // Zeile
-
-				// Icon -> Nachweis FS-Hist. in Buchauskunft
-				echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
-					echo "\n\t\t<img class='nwlink' src='ico/Flurstueck_Link.ico' width='16' height='16' alt='FS'>";
-				echo "\n\t</a> ";	
-
-				// Kennzeichen -> Karte positionieren
-				echo "\n\tFlst. <a title='Flurst&uuml;ck positionieren 1:".$scalefs."' href='";
-						echo "javascript:";
-						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.")' ";
-					echo "onmouseout='parent.parent.hideHighlight()'>";
-			//	echo $flur."-".$fskenn."</a>";
-				echo $fskenn."</a>";
-
-			echo "\n</div>";
-
+		if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
+		if ($ftyp == "a") { // als aktuelles FS gefunden, das "h" war also unnÃ¶tig!
+			$koor=flurstueckskoordinaten($fs_gml);
+			echo "\n<p>Flurst&uuml;ck ".$fskenn." ist aktuell, nicht historisch</p>";	
+			zeile_flurstueck ($fs_gml, $fskenn, $koor["x"], $koor["y"], $gknr, $flur);
 		} else { // Historisches FS gefunden (h oder o)
-		//	echo "\n<p>Historisches Flurst&uuml;ck:</p>";
-
-			if ($ftyp == "h") {
-				$ico="Flurstueck_Historisch_Lnk.ico";
-				$titl="Historisches Flurst&uuml;ck";
-			} else {
-				$ico="Flurstueck_Historisch_oR_Lnk.ico";
-				$titl="Historisches Flurst&uuml;ck ohne Raumbezug";
-			}  // h: Karte Pos.?
-			echo "\n<div class='hi' title='".$titl."'>";
-				echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath."alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$fs_gml."\")'>";
-					echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='Hist'>";
-				echo "\n\t</a> Historisches Flst. ".$fskenn."</a>";
-			echo "\n</div>";
-
+			zeile_hist_fs($fs_gml, $fskenn, $ftyp, $gknr, $flur);
 			if ($nachf == "") {
 				echo "\n<p class='err'>keine Nachfolger</p>";	
 			} else {
 				echo "\n<p>Nachfolger-Flurst&uuml;cke:</p>";
-				// Die direkten Nachfolger ermitteln
+				// Direkte Nachfolger ermitteln. In $nachf steht ein Array von FS-Kennzeichen.
+				// Von den einzelnen Kennz. ist unbekannt, ob diese noch aktuell sind 
+				// oder auch schon wieder historisch.
 				// Nachfolger in DB suchen um den Status aktuell/historisch zu ermitteln
 				$stri=trim($nachf, "{}");
 				$stri="'".str_replace(",", "','", $stri)."'";
-			//	$whcln.="WHERE flurstueckskennzeichen IN ( $1 ) ";
 				$whcln.="WHERE flurstueckskennzeichen IN ( ".$stri." ) ";
-				$sqln ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_flurstueck ".$whcln;
-				$sqln.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueck ".$whcln;
-				$sqln.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueckohneraumbezug ".$whcln;
-		//		$v=array($stri);
+				$nasql ="SELECT 'a' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_flurstueck ".$whcln;
+				$nasql.="UNION SELECT 'h' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueck ".$whcln;
+				$nasql.="UNION SELECT 'o' AS ftyp, gml_id, gemarkungsnummer, flurnummer, zaehler, nenner FROM ax_historischesflurstueckohneraumbezug ".$whcln;
 				$v=array();
-				$resn=pg_prepare("", $sqln);
-				$resn=pg_execute("", $v);
-				if (!$resn) {echo "\n<p class='err'>Fehler bei Nachfolger.</p>";}
+				$nares=pg_prepare("", $nasql);
+				$nares=pg_execute("", $v);
+				if (!$nares) {echo "\n<p class='err'>Fehler bei Nachfolger.</p>";}
 				$zfsn=0;
-				while($rown = pg_fetch_array($resn)) {
-					$ftypn=$rown["ftyp"];
-					$na_gml=$rown["gml_id"];
-					$gknrn=$rown["gemarkungsnummer"];
-					$flurn=$rown["flurnummer"];
-					$fskennn=$rown["zaehler"];
-					if ($rown["nenner"] != "") {$fskennn.="/".$rown["nenner"];}
-
-					switch ($ftypn) {
-					case "a":
-						$ico="Flurstueck_Link.ico";
-						$titl="Aktuelles Flurst&uuml;ck";
-						$hisparm="";
-						$auskprog="alkisfsnw";
-						// ++ Koordinaten holen? siehe oben "als function"
-					break;
-					case "h":
-						$ico="Flurstueck_Historisch_Lnk.ico";
-						$titl="Historisches Flurst&uuml;ck";
-						$hisparm="&amp;hist=j";
-						$auskprog="alkisfshist";
-					break;
-					case "o":
-						$ico="Flurstueck_Historisch_oR_Lnk.ico";
-						$titl="Historisches Flurst&uuml;ck ohne Raumbezug";
-						$hisparm="&amp;hist=j";
-						$auskprog="alkisfshist";
-					break;
-					}
-					$fs=$gknrn."-".$flurn."-".$fskennn;
-					echo "\n<div class='hn' title='Nachfolger: ".$titl."'>";			
-						echo "\n\t<a title='Nachweis' href='javascript:imFenster(\"".$auskpath.$auskprog.".php?gkz=".$gkz."&amp;gmlid=".$na_gml."\")'>";
-							echo "\n\t\t<img class='nwlink' src='ico/".$ico."' width='16' height='16' alt='FS'>";
-						echo "\n\t</a> ";		
-						echo "Flst. <a href='".$_SERVER['SCRIPT_NAME']."?gkz=".$gkz."&amp;gemeinde=".$gemeinde."&amp;epsg=".$epsg."&amp;fskennz=".$fs.$hisparm."'>".$fskennn."</a>";					
-					echo "\n</div>";
-
+				while($narow = pg_fetch_array($nares)) {
+					$naftyp=$narow["ftyp"];
+					$nagml=$narow["gml_id"];
+					$nagknr=$narow["gemarkungsnummer"];
+					$naflur=$narow["flurnummer"];
+					$nafskenn=$narow["zaehler"];
+					if ($narow["nenner"] != "") {$nafskenn.="/".$narow["nenner"];}
+					zeile_nachf_fs ($nagml, $nagknr, $naflur, $nafskenn, $naftyp);
 					$zfsn++;
-					// Kontrollieren: Wurden auch so viele FS in DB gefunden, wie im Array "Where in()" standen?
 				}
 				if ($zfsn == 0) {
-					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>";}
-				}		
+					echo "\n<p class='anz'>keine Nachfolger gefunden</p>";
+				} else { // if($zfsn > 1)
+					echo "\n<p class='anz'>".$zfsn." Nachfolger-Flurst&uuml;cke</p>";
+				}
 			}
 		}
 		$zfs++;
 	}
+	// Foot
 	if($zfs == 0) {
-		echo "\n<p class='err'>Kein historisches Flurst&uuml;ck.</p>";
-		#if ($debug > 2) {echo "\n<p class='dbg'>".$sql."</p>";}
+		echo "\n<p class='anz'>Kein historisches Flurst&uuml;ck.</p>";
+		#if ($debug > 2) {echo  "\n<p class='dbg'> SQL= ".$sql."\n<br> $1 = FS-Kennz = '".$fskzwhere."'</p>";}
 	}
 	return;
@@ -711,13 +649,11 @@
 // ===========
 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 "\n<p class='dbg'>kein EPSG gesetzt</p>";}	
-	$epsg=$gui_epsg; // aus Conf
-}
-//if ($debug >= 2) {echo "<p class='dbg'>Filter Gemeinde = ".$gemeinde."</p>";}
+	#if ($debug >= 1) {echo "\n<p class='dbg'>kein EPSG gesetzt</p>";}	
+	$epsg=$gui_epsg; // Conf
+}
 if ($gemeinde == "") {
-	$gfilter = 0; // ungefiltert
+	$gfilter = 0;
 } elseif(strpos($gemeinde, ",") === false) {
 	$gfilter = 1; // Einzelwert
@@ -727,7 +663,7 @@
 if ($hist == "j") {$phist = true;} else {$phist = false;}
 
-if(isset($gm)) { // Self-Link aus Gemeinde-Liste
+if($gm != "") { // Self-Link aus Gemeinde-Liste
 	$trans="Gemarkungen zur Gemeinde";
-	$gnr=ListGmkgInGemeinde($gm);
+	$gnr=ListGmkgInGemeinde($gm, $bez);
 	if ($gnr > 0) {
 		$zgemkg=$gnr;
@@ -736,8 +672,7 @@
 } else { // Die Formular-Eingabe interpretieren (kann auch ein Link sein)
 	$retzer=ZerlegungFsKennz($fskennz);
-	#if ($debug > 1) {echo "<p class='dbg'>Return Zerlegung (case) = '".$retzer."'</p>";}	
 	switch ($retzer) {
 	case 0: // leere Eingabe
-		if ($gfilter == 1) { // Die GUI ist bereits auf eine Gemeinde gefiltert
+		if ($gfilter == 1) { // Die GUI ist bereits auf EINE Gemeinde gefiltert
 			$trans="Liste der Gemarkungen";
 			SuchGmkgName();
@@ -746,7 +681,6 @@
 			ListGemeinden();
 		}
-	break;
+		break;
 	case 1:
-		#if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsname ".$zgemkg."</p>";}
 		$trans="Suche Gemarkungsname";
 		$gnr=SuchGmkgName();
@@ -756,12 +690,10 @@
 			EineGemarkung(false);
 		}
-	break;
+		break;
 	case 2:
-		#if ($debug >= 2) {echo "<p class='dbg'>Gemarkungsnummer ".$zgemkg."</p>";}
 		$trans="Fluren in Gemarkung";
 		EineGemarkung(true);
-	break;
+		break;
 	case 3:
-		#if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur."</p>";}
 		if ($phist)	{
 			$trans="historische Flurst. in Flur";
@@ -771,7 +703,6 @@
 			EineFlur();
 		}
-	break;
+		break;
 	case 4:
-		#if ($debug >= 2) {echo "<p class='dbg'>Gemarkung ".$zgemkg." Flur ".$zflur." FlurstÃŒck ".$zzaehler."</p>";}
 		if ($phist)	{
 			$trans="historisches Flurst&uuml;ck";
@@ -781,5 +712,5 @@
 			EinFlurstueck();
 		}
-	break;
+		break;
 	case 5:
 		if ($phist) {
@@ -789,12 +720,13 @@
 			$trans="Flurst&uuml;ck";
 			EinFlurstueck();
-		}		
-	break;
+		}	
+		break;
 	case 9:
 		$trans="falsche Eingabe";
 		echo "\n<p class='err'>Bitte ein Flurst&uuml;ckskennzeichen eingegeben, Format 'gggg-fff-zzzz/nnn</p>";
-	break;
-	}
-}
+		break;
+	}
+}
+
 // Titel im Kopf anzeigen
 echo "\n<script type='text/javascript'>\n\ttranstitle('".$trans."')\n</script>";
Index: /trunk/mapbender/http/nav/alkisnav_eig.php
===================================================================
--- /trunk/mapbender/http/nav/alkisnav_eig.php	(revision 281)
+++ /trunk/mapbender/http/nav/alkisnav_eig.php	(revision 282)
@@ -1,10 +1,4 @@
 <?php
 /* Version vom
-	24.10.2011	Nach Pos-Klick Highlight erneuern statt hideHighlight
-	17.11.2011	Nachweis-Links ÃŒber javascript im neuen Hochformat-Fenster
-	02.12.2011	Suche nach Vorname Nachname oder Nachname
-	09.12.2011	Filter "Gemeinde" fÃŒr Ebene FlurstÃŒcke.
-					Filter "Gemeinde" fÃŒr Personen ÃŒber neue Hilfstabelle "gemeinde_person".
-					Format css Person (Rahmen).
 	2013-04-16 "import_request_variables" entfÃ€llt in PHP 5.4
 	2013-04-26	Ersetzen View "gemeinde_gemarkung" durch Tabelle "pp_gemarkung".
@@ -14,5 +8,6 @@
 					Dazu Var-Namen harmonisieren: $gb wird $blattgml.
 					ZurÃŒck-Link, Titel der Transaktion anzeigen.
-	2013-04-29	Test mit IE
+	2013-04-29	Darstellung mit IE
+	2013-05-07  Strukturierung des Programms, redundanten Code in Functions zusammen fassen
 */
 $cntget = extract($_GET);
@@ -43,5 +38,5 @@
 <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>
@@ -51,5 +46,5 @@
 // Einen Link generieren, um nach anderen Personen mit gleichem Familiennamen zu suchen
 function familiensuche() {
-	global $gkz, $gemeinde, $epsg, $name; // $debug
+	global $gkz, $gemeinde, $epsg, $name;
 	if(isset($name)) { // Familiensuche
 		echo "\n<div class='back' title='Andere Personen mit diesem Nachnamen'>";
@@ -61,20 +56,14 @@
 }
 
-// Adresse und Geburtsdatum der aktuellen Person ausgeben
-function personendaten() {
+function personendaten() { // Adresse und Geburtsdatum der aktuellen Person ausgeben
 	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.="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 ;";	
+	$sql.="FROM ax_person p 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 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";
-	}
+	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
@@ -100,10 +89,7 @@
 
 function getEigByName() {
-// 1 =============================
-// Eigentuemer nach Name(-nsanfang)
-// ===============================
-	global $gkz, $gemeinde, $epsg, $name, $person, $gfilter, $auskpath;
+	// 1 // Eigentuemer nach Name(-nsanfang)
+	global $gkz, $gemeinde, $epsg, $name, $person, $gfilter;
 	$linelimit=150;
-
 	$arr = explode(",", $name);
 	$name0 = trim($arr[0]);
@@ -148,12 +134,8 @@
 	$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>";
+		$nachname=$row["nachnameoderfirma"];
+		$vorname=$row["vorname"];
+		$persongml=$row["gml_id"];
+		zeile_person ($persongml, $nachname, $vorname);
 		$cnt++;
 	}
@@ -163,5 +145,5 @@
 		echo "\n<p class='anz' title='Bitte den Namen eindeutiger qualifizieren'>... und weitere</p>";
 	} elseif($cnt == 1){ // Eindeutig!
-		$person = $gml;
+		$person = $persongml;
 	} else {
 		echo "\n<p class='anz'>".$cnt." Eigent&uuml;mer mit '".$name."'</p>";	// im Limit
@@ -171,7 +153,5 @@
 
 function getGBbyPerson() {
-// 2 =================================
-// GrundbÃŒcher zur gewÃ€hlten Person
-// ===================================
+	// 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,
@@ -181,10 +161,8 @@
 // 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;
+	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $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 gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezeichnung AS beznam ";
@@ -218,10 +196,5 @@
 		$beznam=$row["beznam"];
 		$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;blattgml=".$gml."&amp;person=".$person."'> Blatt ".$blatt."&nbsp;</a>";
-		echo "\n</div>";
+		zeile_blatt ($zgbbez, $beznam, $gml, $blatt, false, $person);
 		$cnt++;
 	}
@@ -245,15 +218,11 @@
 
 function getFSbyGB($backlink) {
-// 3 =================================
-// FlurstÃŒcke zum gewÃ€hlten Grundbuch
-// ===================================
+	// 3 // FlurstÃŒcke zum Grundbuch
 // 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;
+// Buchungstellen.
+	global $gkz, $gemeinde, $name, $person, $blattgml, $epsg, $gfilter, $debug;
 	if($backlink) { // Erneuter Ansatz bei Person oder GB mÃ¶glich.
-
 		// Namen ermitteln
 		$sql ="SELECT nachnameoderfirma, vorname FROM ax_person WHERE gml_id = $1 ";
@@ -261,10 +230,9 @@
 	 	$res=pg_prepare("", $sql);
 		$res=pg_execute("", $v);
-		if (!$res) {
-			echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
-		}
+		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'> ";
@@ -274,33 +242,25 @@
 
 		// 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 ="SELECT gb.gml_id AS gml_g, gb.buchungsblattnummermitbuchstabenerweiterung as blatt, b.bezirk, 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
+		if (!$res) {echo "\n<p class='err'>Fehler bei Grundbuch</p>";}
+		$row = pg_fetch_array($res); // eine Zeile
 		$gml=$row["gml_g"];
+		$bezirk=$row["bezirk"];
 		$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=".$blattgml."\")'>";
-				echo "\n\t\t<img class='nwlink' src='ico/GBBlatt_link.ico' width='16' height='16' alt='GB'>";
-			echo "\n\t</a>&nbsp;".$beznam." Blatt ".$blatt;
-		echo "</div>";	
-	}
-
-	GB_Buchung_FS($linelimit); // Externe Function: Blatt > GrundstÃŒck > Flurst.
-	
+		zeile_blatt ($bezirk, $beznam, $blattgml, $blatt, false, $person);	
+	}
+	GB_Buchung_FS(200); // Blatt > GrundstÃŒck > Flurst. (max. 200))
 	return;
 }
 
 function getGBuFSbyPerson() {
-// 2 + 3 =========================================
-// GrundbÃŒcher UND FlurstÃŒcke zur gewÃ€hlten Person
-// ===============================================
+	// 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)
@@ -311,5 +271,5 @@
 // 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;
+	global $gkz, $gemeinde, $epsg, $name, $person, $blattgml, $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
@@ -375,5 +335,5 @@
 		$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
+	} // FlurstÃŒcke in der angeblÃ€tterten BVNR werden ggf. wiederholt
 
 	if ($bltseite == "") { // auf Seite 1 beide Teile ausgegeben
@@ -395,5 +355,4 @@
 		// Blatt <vbg/istBestandteilVon<  Buchungsstelle <vfb/istGebucht< Flurstck.
 		$sql=$sql1.$sqla1.$sql2.$bltwhere.$sql3; // Direkte Buchungen
-	
 		$v=array($person, $linelimit);
 		$res=pg_prepare("", $sql);
@@ -401,5 +360,4 @@
 		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;
 		}
@@ -408,33 +366,16 @@
 		while($row = pg_fetch_array($res)) {	
 			$gb_gml=$row["gml_g"];
-	
-			// Gruppenwechsel auf Ebene Grundbuch
-			if ($gwgb != $gb_gml) {
+			if ($gwgb != $gb_gml) { // Gruppierung Blatt (Grundbuch)
 				$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>";
+				zeile_blatt ($bezirk, $beznam, $gb_gml, $blatt, false, $person);
 				$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>";
+			if ($gwbv != $bvnr) { // Gruppierung Buchung (BVNR)
+				$gwbv = $bvnr;
+				zeile_buchung ($bsgml, $bvnr, "", false);
 			}
-	
 			$fs_gml=$row["gml_id"];
 			$gmkg=$row["gemarkungsname"];
@@ -444,24 +385,9 @@
 			$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>";
+			zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur );
 			$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>";}
-			}
+			if ($bltrecht == "ohne") {echo "\n<p class='anz'>Keine direkte Buchung gefunden.</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";
@@ -476,5 +402,4 @@
 		}
 	}	
-
 	if ($bltrecht == "" and $zfs1 > 0) { // beides
 		echo "<hr>"; // dann Trenner
@@ -491,5 +416,4 @@
 		if (!$res) {
 			echo "\n<p class='err'>Fehler bei Recht an Buchung.</p>";
-			if ($debug >= 3) {echo "\n<p class='dbg'>".$sql."</p>";}
 			return;
 		}
@@ -497,51 +421,25 @@
 		$gwgb="";
 		while($row = pg_fetch_array($res)) {	
-			// Gruppenwechsel auf Ebene Grundbuch
 			$gb_gml=$row["gml_g"];
-			if ($gwgb != $gb_gml) { 
+			if ($gwgb != $gb_gml) {  // Gruppierung Blatt (Grundbuch)
 				$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>";
+				zeile_blatt ($bezirk, $beznam, $gb_gml, $blatt, false, $person);
 				$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>";
+			if ($gwbv != $bvnr) { // Gruppierung Buchungs (BVNR)
+				$gwbv = $bvnr;
+				zeile_buchung ($bsgml, $bvnr, "", true); // Recht an ...
 			}
-
 			$fs_gml=$row["gml_id"];
 			$gmkg=$row["gemarkungsname"];
 			$flur=$row["flurnummer"];
 			$fskenn=$row["zaehler"];
-			if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];} // Bruchnummer
+			if ($row["nenner"] != "") {$fskenn.="/".$row["nenner"];}
 			$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>";
+			zeile_flurstueck ($fs_gml, $fskenn, $x, $y, $gmkg, $flur);
 			$zfs2++;
 		}
@@ -549,5 +447,4 @@
 			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
@@ -569,5 +466,4 @@
 // Start hier!
 // ===========
-
 // Parameter:  
 // 1. name   = Suche nach Namensanfang oder -bestandteil.
@@ -576,11 +472,8 @@
 
 if(isset($epsg)) {
-	#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='dbg'>kein EPSG gesetzt</p>";}	
 	$epsg=$gui_epsg; // aus Conf
 }
-#if ($debug >= 2) {echo "\n<p class='dbg'>Filter Gemeinde = '".$gemeinde."'</p>";}
 if ($gemeinde == "") {
 	$gfilter = 0; // Gemeinde ungefiltert
@@ -592,5 +485,5 @@
 
 // Quo Vadis?
-if(isset($blattgml)) {		// 3. Stufe: FlurstÃŒcke zum Grundbuch
+if(isset($blattgml)) {		// FlurstÃŒcke zum Grundbuch
 
 	// Das Programm hat sich selbst verlinkt aus einer Liste der GB zu einem EigentÃŒmer.
@@ -599,5 +492,5 @@
 	getFSbyGB(true);				// mit BackLink
 
-} elseif(isset($person)) { 	// 2. Stufe: GrundbÃŒcher zur Person
+} elseif(isset($person)) { 	// GrundbÃŒcher zur Person
 	// Das Programm hat sich selbst verlinkt aus einer Liste der Personen zu einer Suchmaske.
 	if ($debug >= 2) {echo "\n<p class='dbg'>Gemeinde-Filter-Steuerung = '".$gfilter."'</p>";}
@@ -609,6 +502,4 @@
 		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";
@@ -617,17 +508,21 @@
 
 	} 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
+} elseif(isset($name)) {	// Suchbegriff aus Form: 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
+	if(isset($person)) {		// genau EIN Treffer zum Namen
+		if ($gfilter == 0) {
+			$trans="Grundb&uuml;cher zum Namen";
+			getGBbyPerson();		// Dann gleich das Grundbuch hinterher
+		} else {
+			$trans="Grdb. und Flst. zum Namen";
+			getGBuFSbyPerson();	// .. oder auch GB + FS
+		}
 	}
 
