Index: trunk/info/info/alkis/alkisfkt.php
===================================================================
--- trunk/info/info/alkis/alkisfkt.php	(revision 376)
+++ trunk/info/info/alkis/alkisfkt.php	(revision 377)
@@ -1,85 +1,80 @@
 <?php
 /*	Modul: alkisfkt.php
-
 	ALKIS-Buchauskunft, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo).
 	Functions
 
 	Version:
-	2016-02-24 Version fuer norGIS-ALKIS-Import, "function linkgml" raus. Case-EntschlÃŒsselung raus.
-	2016-03-03 Hinweis auf Datenfehler wenn "ax_person" fehlt in function "eigentuemer"
-	2016-03-14 Kleine Korrekturen
-	2016-11-29 Gemeinsam genutzte Datenbanken ermÃ¶glichen (Filter Gemeinde)
+	2010-12-17 Astrid Emde: Prepared Statements (pg_query -> pg_prepare + pg_execute)
+	2011-11-01 *Left* Join - Fehlertoleranz bei unvollstaendigen Schluesseltabellen
+	2011-11-02 Parameter debug in function eigentuemer
+	2011-11-17 Variable ($debug, $idanzeige, $showkey) von Parameter nach global. Die heiÃen in allen Programmteilen gleich.
+	2014-01-22 Eigentuemerart: Mehr Werte und Zugriff auf DB-SchlÃŒssel-Tabelle
+	2014-02-06 Korrektur EigentÃŒmerart
+	2014-09-09 PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
+	2014-09-15 Bei Relationen den Timestamp abschneiden
+	2014-09-30 Umbenennung SchlÃŒsseltabellen (Prefix), RÃŒckbau substring(gml_id)
+	2014-12-30 class='fsnr'
+	2015-12-09 Austausch .ico durch .png
 */
 
 function footer($gmlid, $link, $append) {
 	// Einen Seitenfuss ausgeben.
+	// Den URL-Parameter "&id=j/n" und "&showkey=j/n" in allen Kombinationen umschalten lassen.
 	// Die Parameter &gkz= und &gmlid= kommen in allen Modulen einheitlich vor
-	// Den URL-Parameter "&showkey=j/n" umschalten lassen.
-	// $append wird angehaengt wenn gefuellt. Anwendung: &eig=j bei FS-NW, &ltyp=m/p/o bei Lage
-	global $gkz, $showkey, $hilfeurl, $auth;
-
-	echo "\n<div class='confbereich noprint'>"
-	."\n<table class='outer'>\n<tr>";
+
+	// Der Parameter $append wird angehaengt wenn gefuellt
+	//  Anwendung: &eig=j bei FS-NW, &ltyp=m/p/o bei Lage
+	global $gkz, $idumschalter, $idanzeige, $showkey, $hilfeurl;
+
+	$customer=$_SESSION["mb_user_name"];
+	echo "\n<div class='confbereich noprint'>";
+	echo "\n<table class='outer'>\n<tr>";
 
 	// Spalte 1: Info Benutzerkennung
-	if ($auth == "mapbender") {
-		$customer=$_SESSION["mb_user_name"];
-		echo "\n\t<td title='Info'><i>Benutzer:&nbsp;".$customer."</i></td>";
-	} else {
-		echo "\n\t<td>&nbsp;</td>";
-	}
+	echo "\n\t<td title='Info'><i>Benutzer:&nbsp;".$customer."</i></td>";
 
 	// Spalte 2: Umschalter
 	echo "\n\t<td title='Konfiguration'>";
 		$mylink ="\n\t\t<a class='gmlid' href='".$link."gkz=".$gkz."&amp;gmlid=".$gmlid.$append;
-
-		if ($showkey) { // Umschalten SchlÃŒssel ein/aus
-			echo $mylink."&amp;showkey=n' title='Verschl&uuml;sselungen ausblenden'>Schl&uuml;ssel aus</a>";
+		if ($showkey) {$mykey = "&amp;showkey=j";} else {$mykey = "&amp;showkey=n";}
+		if ($idumschalter) { // fuer Entwicklung ODER Test
+			if ($idanzeige) {$myid = "&amp;id=j";} else {$myid = "&amp;id=n";}
+
+			// Umschalter nur ausgeben, wenn in conf gesetzt
+			if ($idanzeige) { // Umschalten ID ein/aus
+				echo $mylink.$mykey."&amp;id=n' title='Ohne Verfolgung der ALKIS-Beziehungen'>";
+				echo "<img src='ico/Beziehung_link.png' width='16' height='16' alt=''> ID aus</a>";
+			} else {
+				echo $mylink.$mykey."&amp;id=j' title='Verfolgung der GML-ID in den ALKIS-Beziehungen'>";
+				echo "<img src='ico/Beziehung_link.png' width='16' height='16' alt=''> ID ein</a>";
+			}
+			echo " | ";
+		} else { // keinen ID-Umschalter
+			$myid = "";
+		}
+
+		if ($showkey) { // // Umschalten SchlÃŒssel ein/aus
+			echo $mylink.$myid."&amp;showkey=n' title='Verschl&uuml;sselungen ausblenden'>Schl&uuml;ssel aus</a>";
 		} else {
-			echo $mylink."&amp;showkey=j' title='Verschl&uuml;sselungen anzeigen'>Schl&uuml;ssel ein</a>";
+			echo $mylink.$myid."&amp;showkey=j' title='Verschl&uuml;sselungen anzeigen'>Schl&uuml;ssel ein</a>";
 		}
 	echo "\n\t</td>";
 
 	// Spalte 3
-	echo "\n\t<td title='Hilfe'>"
-	."\n\t\t<p class='nwlink'>\n\t\t\t<a target='_blank' href='".$hilfeurl."' title='Dokumentation'>Hilfe zur ALKIS-Auskunft</a>\n\t\t</p>\n\t</td>"
-	."\n</tr>\n</table>\n</div>\n";
+	echo "\n\t<td title='Hilfe'>";
+	echo "\n\t\t<p class='nwlink'>\n\t\t\t<a target='_blank' href='".$hilfeurl."' title='Dokumentation'>Hilfe zur ALKIS-Auskunft</a>\n\t\t</p>\n\t</td>";
+	echo "\n</tr>\n</table>\n</div>\n";
 	return 0;
 }
 
-function ber_bs_hinw($gmls) {
-	// Unter einem Grundbuch-Link den Hinweis auf "berechtigte Buchungssstellen" anzeigen
-	// In FS-Nachweis wird nur der EigentÃŒmer des direkt gebuchten GrundstÃŒcks angezeigt.
-	// Den Erbbauberechtigten sieht man erst in der Grundbuch-Auskunft.
-	global $debug, $showkey;
-
-	// Buchungstelle dien. >an> Buchungstelle herr.
-	$sql ="SELECT count(sh.gml_id) AS anz, sh.buchungsart, a.v "
-	."FROM ax_buchungsstelle sd JOIN ax_buchungsstelle sh ON sd.gml_id=ANY(sh.an) " 
-	."LEFT JOIN alkis_wertearten a ON sh.buchungsart=cast(a.k AS integer) " 
-	."WHERE sd.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL AND a.element='ax_buchungsstelle' and a.bezeichnung='buchungsart' "
-	."GROUP BY sh.buchungsart, a.v;";
-
-	$v = array($gmls); // id dienende BS
-	$resan = pg_prepare("", $sql);
-	$resan = pg_execute("", $v);
-	if (!$resan) {
-		echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen'.</p>\n";
-		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmls."'</p>";}
-	}
-	$an=0;
-	while($rowan = pg_fetch_array($resan)) {
-		$an++;
-		if ($an == 1) {echo "\n\t<br>\n\t<p class='nwlink' title='Andere Grundst&uuml;cke mit Rechten an diesem.'>Berechtigte Buchungen:<br><b>";}
-		if ($an > 1) {echo",<br>";} // kann es gemischste Buchungsarten geben?
-		echo $rowan["anz"]." ".htmlentities($rowan["v"], ENT_QUOTES, "UTF-8");
-		if ($showkey) {echo " <span class='key'>(".$rowan["buchungsart"].")</span>";}
-	}
-	if ($an == 0) {
-		echo "<br><p class='nwlink' title='Kein anderes Grundst&uuml;ck hat ein Recht an diesem.'>Keine berechtigte Buchung</p>";
-	} else {
-		echo "</b></p>";
-	}
-	pg_free_result($resan);
+function linkgml($gkz, $gml, $typ, $tabelle)  {
+	// Einen Link zur Verfolgung der Beziehungen mit dem Modul alkisrelationen.php
+	// tabelle = nur angeben fÃŒr Tabellen, die Relationen-Spalten besitzen, sonst leer
+	$kurzid=substr($gml, 12, 4); // ID in Anzeige kuerzen (4 Zeichen), der Anfang ist immer gleich
+	// PostNAS 0.8: Timestamp abschneiden
+	echo "\n\t\t<a target='_blank' title='ID ".$typ."' class='gmlid noprint' ";
+	echo "href='alkisrelationen.php?gkz=".$gkz."&amp;gmlid=".$gml."&amp;otyp=".$typ."&amp;tabelle=".$tabelle."'>";
+	echo "<img src='ico/Beziehung_link.png' width='16' height='16' alt=''>".$kurzid."</a>";
+	return 0;
 }
 
@@ -90,16 +85,14 @@
 	$kurz=ltrim($kurz, "0"); // fuehrende Nullen am Anfang
 	$kurz=str_replace(".0",".",$kurz); // fuehrende Null jeder Stufe
-	$kurz=rtrim($kurz); // Leerzeichen hinten
-	// echo "/n<p class='dbg'> lang='".$lang."'</p>/n<p class='dbg'> kurz='".$kurz."'</p>";
 	return $kurz;
 }
 
-function bnw_fsdaten($con, $lfdnr, $gml_bs, $ba, $anteil, $bvnraus, $bartkey, $bartstory) {
+function bnw_fsdaten($con, $lfdnr, $gml_bs, $ba, $anteil, $bvnraus) {
 /*	Bestandsnachweis - Flurstuecksdaten
 	Die Tabellenzeilen mit den Flurstuecksdaten zu einer Buchungsstelle im Bestandsnachweis ausgeben.
 	Die Funktion wird je einmal aufgerufen fÃŒr die Buchungen direkt auf dem GB (Normalfall).
 	Weiterere Aufrufe ggf. bei Erbbaurecht fÃŒr die mit "an" verknuepften Buchungsstellen.
-	Table-Tag und Tabellenkopf werden im aufrufenden Programm ausgegeben. */
-	global $debug, $gkz, $showkey, $filtkreis, $filtgem;
+	Table-Tag und Kopfzeile im aufrufenden Programm. */
+	global $debug, $gkz, $idanzeige, $showkey;
 
 	// F L U R S T U E C K
@@ -107,12 +100,7 @@
 	FROM ax_flurstueck f JOIN ax_buchungsstelle s ON f.istgebucht=s.gml_id 
 	LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-	WHERE f.endet IS NULL AND s.endet IS NULL AND g.endet IS NULL AND s.gml_id= $1 ";
-	if ($filtgem == '' ) { // ungefiltert
-		$v=array($gml_bs);
-	} else {
-		$sql.="AND f.kreis = $2 AND f.gemeinde = $3 "; // ZustÃ€ndiges Gebiet
-		$v=array($gml_bs, $filtkreis, $filtgem);
-	}
-	$sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+	WHERE s.gml_id= $1 AND f.endet IS NULL AND s.endet IS NULL AND g.endet IS NULL ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
+
+	$v = array($gml_bs);
 	$resf = pg_prepare("", $sql);
 	$resf = pg_execute("", $v);
@@ -121,6 +109,4 @@
 	if($bvnraus) { // nur bei direkten Buchungen die lfdNr ausgeben
 		$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
-	} else {
-		$bvnr="";
 	}
 	$altlfdnr="";
@@ -137,37 +123,43 @@
 		echo "\n<tr>"; // eine Zeile je Flurstueck
 			// Sp. 1-3 der Tab. aus Buchungsstelle, nicht aus FS
-			if($lfdnr == $altlfdnr) { // gleiches Grundstueck
-				echo "\n\t<td>&nbsp;</td>"
-				."\n\t<td>&nbsp;</td>"
-				."\n\t<td>&nbsp;</td>";
-			} else { // Sprungmarke, BVNR
-				echo "\n\t<td>"
-					."<a id='bvnr".$lfdnr."'></a><span class='wichtig'>".$bvnr."</span>" /// ++++ FEHLER?? $bvnr
-				."</td>";
-
-				echo "\n\t<td title ='".$bartstory."'>"; // Buchungsart 
-					if ($showkey) {echo "<span class='key'>".$bartkey."</span>&nbsp;";} // Schluessel
+			if($lfdnr == $altlfdnr) {	// gleiches Grundstueck
+				echo "\n\t<td>&nbsp;</td>";
+				echo "\n\t<td>&nbsp;</td>";
+				echo "\n\t<td>&nbsp;</td>";
+			} else {
+				echo "\n\t<td>";
+					echo "<a name='bvnr".$lfdnr."'></a>"; // Sprungmarke
+					echo "<span class='wichtig'>".$bvnr."</span>";  // BVNR
+					if ($idanzeige) {linkgml($gkz, $gml_bs, "Buchungsstelle", "ax_buchungsstelle");}
+				echo "</td>";
+
+				echo "\n\t<td>"; // Buchungsart 
+					//	if ($showkey) {echo "<span class='key'>".$???."</span>&nbsp;";} // Schluessel
 					echo $ba; // entschluesselt
-				echo "</td>"
-				."\n\t<td>&nbsp;</td>"; // Anteil
+				echo "</td>"; 
+				echo "\n\t<td>&nbsp;</td>"; // Anteil
 				$altlfdnr=$lfdnr;
 			}
 			//Sp. 4-7 aus Flurstueck
 			echo "\n\t<td>";
-			if ($showkey) {echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";}
-			echo $rowf["bezeichnung"]."</td>"
-			."\n\t<td>".$flur."</td>"
-			."\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span>"
-			."</td>"
-			."\n\t<td class='fla'>".$flae."</td>";
-
-			echo "\n\t<td><p class='nwlink noprint'>"
-				."<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
+			if ($showkey) {
+				echo "<span class='key'>".$rowf["gemarkungsnummer"]."</span> ";
+			}
+			echo $rowf["bezeichnung"]."</td>";
+			echo "\n\t<td>".$flur."</td>";
+			echo "\n\t<td class='fsnr'><span class='wichtig'>".$fskenn."</span>";
+				if ($idanzeige) {linkgml($gkz, $rowf["gml_id"], "Flurst&uuml;ck", "ax_flurstueck");}
+			echo "</td>";
+			echo "\n\t<td class='fla'>".$flae."</td>";
+
+			echo "\n\t<td><p class='nwlink noprint'>";
+				echo "<a href='alkisfsnw.php?gkz=".$gkz."&amp;gmlid=".$rowf["gml_id"]."&amp;eig=n";
+					if ($idanzeige) {echo "&amp;id=j";}
 					if ($showkey)   {echo "&amp;showkey=j";}
-					echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck "
-					."<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>"
-				."</a>"
-			."</p></td>"
-		."\n</tr>";
+					echo "' title='Flurst&uuml;cksnachweis'>Flurst&uuml;ck ";
+					echo "<img src='ico/Flurstueck_Link.png' width='16' height='16' alt=''>";
+				echo "</a>";
+			echo "</p></td>";
+		echo "\n</tr>";
 
 		$j++;
@@ -178,4 +170,5 @@
 		if ($debug > 2) {echo "<p class='dbg'>SQL='".$sql."'<br>$1 = '".$gml_bs."'</p>";}
 	} */
+
 	pg_free_result($resf);
 	return $j;
@@ -192,5 +185,5 @@
 	// Schleife 1: N a m e n s n u m m e r
 	// Beziehung: ax_namensnummer >istBestandteilVon> ax_buchungsblatt
-	global $debug, $gkz, $showkey;
+	global $debug, $gkz, $idanzeige, $showkey;
 
 	// Link ÃŒber Java-Class? (Ja in alkisinlayausk.php, sonst normal)
@@ -203,9 +196,6 @@
 	} // Beispiel-Link href='javascript:imFenster(\"alkislage.php?gkz= ... ."\")'>xxx ";
 
-	$sqln="SELECT n.gml_id, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, n.artderrechtsgemeinschaft AS adr, n.beschriebderrechtsgemeinschaft as beschr, n.eigentuemerart, n.anlass, n.benennt, wn.v AS adrv, we.v AS eiartv
-FROM ax_namensnummer n 
-LEFT JOIN alkis_wertearten wn ON cast(n.artderrechtsgemeinschaft AS character varying)=wn.k AND wn.element='ax_namensnummer' AND wn.bezeichnung='artderrechtsgemeinschaft' 
-LEFT JOIN alkis_wertearten we ON cast(n.eigentuemerart AS character varying)=we.k AND we.element='ax_namensnummer' AND we.bezeichnung='eigentuemerart'
-WHERE n.istbestandteilvon= $1 AND n.endet IS NULL ORDER BY n.laufendenummernachdin1421;";
+	$sqln="SELECT n.gml_id, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, n.artderrechtsgemeinschaft AS adr, n.beschriebderrechtsgemeinschaft as beschr, n.eigentuemerart, n.anlass ";
+	$sqln.="FROM ax_namensnummer n WHERE n.istbestandteilvon= $1 AND n.endet IS NULL ORDER BY n.laufendenummernachdin1421;";
 
 	$v = array($gmlid); // 16 Stellen bei Relationen
@@ -214,25 +204,28 @@
 
 	if (!$resn) {
-		echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>\n";
+		echo "<p class='err'>Fehler bei Eigent&uuml;mer</p>\n";
 		if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqln."<br>$1=gml= '".$gmlid."'</p>";}
 	}
 
-	echo "\n<table class='eig'>";
+	echo "\n\n<table class='eig'>";
 	$n=0; // Z.NamNum.
 
 	while($rown = pg_fetch_array($resn)) {
 		$gmlnn=$rown["gml_id"];
-		$namnum=kurz_namnr($rown["lfd"]);
-		$rechtsg=$rown["adr"];
-		echo "\n<tr>"
-			."\n\t<td class='nanu' title='Namens-Nummer'>\n\t\t<p>" // Sp. 1
-				.$namnum."&nbsp;" // VOR die Tabelle: "EigentÃŒmer"
-			."</p>\n\t</td>"
-			. "\n\t<td>"; // Sp. 2
+		echo "\n<tr>";
+			echo "\n\t<td class='nanu' title='Namens-Nummer'>\n\t\t<p>"; // Sp. 1
+				// VOR die Tabelle: "EigentÃŒmer"
+				$namnum=kurz_namnr($rown["lfd"]);
+				echo $namnum."&nbsp;";
+				if ($idanzeige) {linkgml($gkz, $rown["gml_id"], "Namensnummer", "ax_namensnummer");}
+			echo "</p>\n\t</td>";
+
+			echo "\n\t<td>"; // Sp. 2
+			$rechtsg=$rown["adr"];
 			if ($rechtsg != "" ) {
 				if ($rechtsg == 9999) { // sonstiges
 					echo "\n\t\t<p class='zus' title='Beschrieb der Rechtsgemeinschaft'>".htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8")."</p>";
 				} else {
-					echo "\n\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".htmlentities($rown["adrv"], ENT_QUOTES, "UTF-8")."</p>";
+					echo "\n\t\t<p class='zus' title='Art der Rechtsgemeinschaft'>".htmlentities(rechtsgemeinschaft($rown["adr"]), ENT_QUOTES, "UTF-8")."</p>";
 				}
 			}
@@ -247,26 +240,22 @@
 			// die zu allen Namensnummern der Rechtsgemeinschaft eine Relation besitzt.
 
+
 		// Schleife 2: P e r s o n
 		// Beziehung: ax_person  <benennt<  ax_namensnummer
-
-	//	$sqlp="SELECT p.gml_id, p.nachnameoderfirma, p.vorname, p.geburtsname, p.geburtsdatum, p.namensbestandteil, p.akademischergrad "
-	//	."FROM ax_person p JOIN ax_namensnummer nn ON nn.benennt=p.gml_id WHERE nn.gml_id= $1 AND p.endet IS NULL AND nn.endet IS NULL;";
-	//	$v = array($gmlnn);
-
-	// 03.03.16:
-		$sqlp="SELECT gml_id, nachnameoderfirma, vorname, geburtsname, geburtsdatum, namensbestandteil, akademischergrad "
-		."FROM ax_person WHERE gml_id= $1 AND endet IS NULL;";
-		$gmlpers=$rown["benennt"];
-		$v = array($gmlpers); // gml_id von ax_person
+		$sqlp ="SELECT p.gml_id, p.nachnameoderfirma, p.vorname, p.geburtsname, p.geburtsdatum, p.namensbestandteil, p.akademischergrad ";
+		$sqlp.="FROM ax_person p JOIN ax_namensnummer nn ON nn.benennt=p.gml_id WHERE nn.gml_id= $1 AND p.endet IS NULL AND nn.endet IS NULL;";
+
+		$v = array($gmlnn);
 		$resp = pg_prepare("", $sqlp);
 		$resp = pg_execute("", $v);
+
 		if (!$resp) {
 			echo "\n\t<p class='err'>Fehler bei Person</p>\n";
-			if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqlp."<br>$1=gml= '".$gmlpers."'</p>";}
+			if ($debug > 2) {echo "<p class='err'>SQL=<br>".$sqlp."<br>$1=gml= '".$gmlnn."'</p>";}
 		}
 
 		$i=0; // cnt Person
-		while($rowp = pg_fetch_array($resp)) { // Schleife weglassen? nn >benennt> Person ist KEIN Array!
-			$diePerson=""; //++ Anrede?
+		while($rowp = pg_fetch_array($resp)) {  // ++ Schleife? nn >benennt> Person ist kein Array!
+			$diePerson="";
 			if ($rowp["akademischergrad"] <> "") {$diePerson=$rowp["akademischergrad"]." ";}
 			$diePerson.=$rowp["nachnameoderfirma"];
@@ -277,27 +266,30 @@
 			$diePerson=htmlentities($diePerson, ENT_QUOTES, "UTF-8"); // Umlaute
 
-			if ($i > 0) { // Spalte 1 enthÃ€lt die Namensnummer, nur in Zeile 0
+			// Spalte 1 enthÃ€lt die Namensnummer, nur in Zeile 0
+			if ($i > 0) {
 				echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td>";
 			}
 			// Spalte 2 = Angaben
-			$eiartkey=$rown["eigentuemerart"]; // Key
-			$eiart=$rown["eiartv"]; // Value
+			$eiartkey=$rown["eigentuemerart"];
+			$eiart=eigentuemerart($eiartkey);
 			echo "\n\t\t<p class='geig' title='Eigent&uuml;merart: ".$eiart."'>".$diePerson."</p>\n\t</td>";
 
 			// Spalte 3 = Link
 			echo "\n\t<td>\n\t\t<p class='nwlink noprint'>";
+				if ($idanzeige) {linkgml($gkz, $rowp["gml_id"], "Person", "ax_person"); echo "&nbsp";}
 				if ($showkey AND $eiartkey != '') { // oft leer
 						echo "<span class='key'>(".$eiartkey.")</span> ";
 				}
-				echo "\n\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$rowp[0];
+				echo "\n\t\t<a href='".$lnkvor."alkisnamstruk.php?gkz=".$gkz."&amp;gmlid=".$rowp["gml_id"];
+				if ($idanzeige) {echo "&amp;id=j";}
 				if ($showkey)   {echo "&amp;showkey=j";}
-				echo $lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart
-				." <img src='ico/Eigentuemer.png' width='16' height='16' alt=''></a>\n\t\t</p>"
-			."\n\t</td>\n</tr>";
+				echo $lnknach."' title='vollst&auml;ndiger Name und Adresse eines Eigent&uuml;mers'>".$eiart;
+				echo " <img src='ico/Eigentuemer.png' width='16' height='16' alt=''></a>\n\t\t</p>";
+			echo "\n\t</td>\n</tr>";
 
 			if ($mitadresse) {
 				// Schleife 3:  A d r e s s e  (OPTIONAL)
-				$sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland "
-				."FROM ax_anschrift a JOIN ax_person p ON a.gml_id=ANY(p.hat) WHERE p.gml_id= $1 AND a.endet IS NULL AND p.endet IS NULL LIMIT 2;";
+				$sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland 
+				FROM ax_anschrift a JOIN ax_person p ON a.gml_id=ANY(p.hat) WHERE p.gml_id= $1 AND a.endet IS NULL AND p.endet IS NULL LIMIT 2;";
 				$gmlp=$rowp["gml_id"]; // Person
 				$v = array($gmlp);
@@ -327,9 +319,23 @@
 						echo "\n<tr>\n\t<td>&nbsp;</td>"; //Sp. 1
 						echo "\n\t<td><p class='gadr'>"; //Sp. 2
-						if ($str.$hsnr != "") {echo $str." ".$hsnr."<br>";}
-						if ($plz.$ort != "") {echo $plz." ".$ort;}
-						if ($land != "" and $land != "DEUTSCHLAND") {echo ", ".$land;}
-						echo "</p></td>\n\t<td>"; // Sp. 3
-						echo "&nbsp;</td>\n</tr>";
+						if ($str.$hsnr != "") {
+							echo $str." ".$hsnr."<br>";
+						}
+						if ($plz.$ort != "") {
+							echo $plz." ".$ort;
+						}
+						if ($land != "" and $land != "DEUTSCHLAND") {
+							echo ", ".$land;
+						}
+						echo "</p></td>";
+						echo "\n\t<td>"; // Sp. 3
+						if ($idanzeige) {
+							echo "<p class='nwlink noprint'>";
+							linkgml($gkz, $gmla, "Adresse", "ax_adresse");
+							echo "</p>";
+						} else { 
+							echo "&nbsp;";
+						}
+						echo "</td>\n</tr>";
 					} else { // manchmal dopplete Angaben (_straÃe / _str.)
 						echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td><p class='dbg' title='Siehe Auskunft zur Person'>weitere Adresse</p></td>\n\t<td>&nbsp;</td>\n</tr>";
@@ -348,31 +354,132 @@
 				$nenner=str_replace(".", ",", $rown["nenner"]);
 				$comnt="Anteil der Berechtigten in Bruchteilen (Par. 47 GBO) an einem gemeinschaftlichen Eigentum (Grundst&uuml;ck oder Recht).";
-				echo "\n<tr>\n\t<td>&nbsp;</td>" // Sp. 1
-				."\n\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>"
-				."\n\t<td>&nbsp;</td>\n</tr>"; // Sp. 3
+				echo "\n<tr>\n\t<td>&nbsp;</td>"; // Sp. 1
+				echo "\n\t<td><p class='avh' title='".$comnt."'>".$zaehler."/".$nenner." Anteil</p></td>";
+				echo "\n\t<td>&nbsp;</td>\n</tr>"; // Sp. 3
 			}
 		} // End Loop Person
-		if ($i == 0) { // Kine Parson. Kommt vor hinter Zeile "Erbengemeinschaft", ist dann KEIN Fehler
-			if ($rechtsg != 9999) {
-				echo "\n<p class='err'>(Die Person mit der ID '".$gmlpers."' fehlt im Datenbestand)</p>";
-			} else {
-				if ($debug > 1) { // nur bei Entwicklung
-					echo "\n\t\t<p class='dbg'>Rechtsgemeinschaft = '".$rechtsg."'</p>";
+		if ($i == 0) { // kommt vor hinter Zeile Erbengemeinschaft, ist dann KEIN Fehler
+			if ($debug > 1) { // nur bei Entwicklung
+				echo "\n<p class='dbg'>Rechtsgemeinschaft = '".$rechtsg."'</p>";
+				if ($rechtsg != 9999) {
+					echo "\n<p class='dbg'>Fehler: Keine Person zur Namensnummer ".$namnum."</p>";
+				//	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqlp."<br>$1 = gml(NamNum) = '".$gmlnn."'</p>";}
 				}
 			}
-			echo "</td>\n\t<td>&nbsp;</td>\n</tr>";
+			echo "</td>\n\t<td>&nbsp;</td>\n<tr>";
 		}
 		$n++; // cnt NamNum
 	} // End Loop NamNum
-	echo "\n</table>";
+	echo "\n</table>\n";
 	if ($n == 0) { // bei "Fiktives Blatt" KEIN Fehler 
-		if ($debug > 1) {
-			echo "\n<p class='dbg'>keine Namensnummern zum Blatt</p>";
-			if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sqln."<br>$1=gml(Blatt)= '".$gmlid."'</p>";}
-		}
+		if ($debug > 1) {echo "<p class='dbg'>keine Namensnummern zum Blatt</p>";}
+	//	if ($debug > 2) {echo "<p class='dbg'>Namensnummern: SQL=<br>".$sqln."<br>$1=gml(Blatt)= '".$gmlid."'</p>";}
 	}
 	pg_free_result($resn);
 	return $n; 
-} // End function eigentuemer
-
+} // End Function eigentuemer
+
+// **  Functions  zum   E n t s c h l u e s s e l n  **
+
+// Entschluesslung ax_person.anrede
+function anrede($key) {
+	switch ($key) {
+		case 1000: $wert = "Frau"; break;
+		case 2000: $wert = "Herr"; break;
+		case 3000: $wert = "Firma"; break;
+		default:   $wert = ""; break;
+	}
+	return $wert;
+}
+
+// Entschluesslung AX_Namensnummer.artDerRechtsgemeinschaft
+function rechtsgemeinschaft($key) {
+	switch ($key) {
+		case 1000: $wert = "Erbengemeinschaft"; break;
+		case 2000: $wert = "GÃŒtergemeinschaft"; break;
+		case 3000: $wert = "BGB-Gesellschaft"; break;
+		case 9999: $wert = "Sonstiges"; break;	// dann: beschriebDerRechtsgemeinschaft
+		default:   $wert = ""; break;
+	}
+	return $wert;
+}
+
+// Entschluesslung AX_Namensnummer.eigentuemerart
+function eigentuemerart($key) {
+	// Die hÃ€ufigsten Werte direkt aus den Programmcode liefern, ggf. angepasst.
+	// FÃŒr seltene Werte in der Datenbank nachschlagen.
+	// SchlÃŒsseltabelle dazu ist vorhanden seit 2014-01-22.
+	// Hier Verwendung fÃŒr Text zum Link.
+	// FÃŒr korrekte Wiedergabe der amtlichen Werte einen Join auf Tabelle verwenden statt dieser Function. 
+	global $debug;
+	switch ($key) {
+		case 1000: $wert = "Nat&uuml;rliche Person"; break; // singular fuer Link-Text
+		case 2000: $wert = "Juristische Person"; break; // singl.
+		case 3000: $wert = "KÃ¶rperschaft"; break; // singl.
+		case 4000: $wert = "Kirchliches Eigentum"; break;
+		case 4100: $wert = "Evangelische Kirche"; break;
+		case 4200: $wert = "Katholische Kirche"; break;
+		case 5100: $wert = "Bundesrepublik Deutschland"; break;
+		case 5400: $wert = "Kreis"; break;
+		case 5500: $wert = "Gemeinde"; break;
+		case 5920: $wert = "Land"; break; // "Eigenes Bundesland"
+		case "":   $wert = "Person"; break; // falls (noch) nicht gefuellt
+		default: // Datenbank-Abfrage
+			$sql="SELECT bezeichner FROM v_namnum_eigart WHERE wert= $1 ;";
+			$v=array($key);
+			$res=pg_prepare("", $sql);
+			$res=pg_execute("", $v);
+			if ($res) {
+				$row=pg_fetch_array($res);
+				$wert=htmlentities($row["bezeichner"], ENT_QUOTES, "UTF-8");
+				if ($wert == "") {$wert="** Eigent&uuml;merart '".$key."' nicht gefunden **";}
+			} else {
+				echo "\n\t<p class='err'>Fehler bei DB-Zugriff auf EigentÃŒmerart.</p>\n";
+				$wert="** Unbekannte Eigent&uuml;merart '".$key."' **";
+			}
+			pg_free_result($res);
+			break;
+	}
+	return $wert;
+}
+
+// Entschluesslung ax_buchungsblatt.blattart
+function blattart($key) {
+	switch ($key) {
+		case 1000: $wert = "Grundbuchblatt"; break;
+		// Ein Grundbuchblatt ist ein Buchungsblatt, das die Buchung im Grundbuch enthÃ€lt.
+		case 2000: $wert = "Katasterblatt"; break;
+		// Ein Katasterblatt ist ein Buchungsblatt, das die Buchung im Liegenschaftskataster enthÃ€lt.
+		case 3000: $wert = "Pseudoblatt"; break;
+		// Ein Pseudoblatt ist ein Buchungsblatt, das die Buchung, die bereits vor Eintrag im Grundbuch Rechtskraft erlangt hat, enthÃ€lt 
+		// (z.B. Ãbernahme von Flurbereinigungsverfahren, Umlegungsverfahren).
+		case 5000: $wert = "Fiktives Blatt"; break;
+		// Das fiktive Blatt enthÃ€lt die aufgeteilten GrundstÃŒcke und Rechte als Ganzes. 
+		// Es bildet um die Miteigentumsanteile eine fachliche Klammer.
+		default: $wert = "** Unbekannter Wert '".$key."'"; break;
+	}
+	return $wert;
+}
+// Entschluesslung ax_dienststelle.stellenart
+function dienststellenart($key) {
+	switch ($key) {
+		case 1000: $wert = "Grundbuchamt"; break;
+		case 1100: $wert = "Katasteramt"; break;
+		case 1200: $wert = "Finanzamt"; break;
+		case 1300: $wert = "Flurbereinigungsbeh&ouml;rde"; break;
+		case 1400: $wert = "Forstamt"; break;
+		case 1500: $wert = "Wasserwirtschaftsamt"; break;
+		case 1600: $wert = "StraÃenbauamt"; break;
+		case 1700: $wert = "Gemeindeamt"; break;
+		case 1900: $wert = "Kreis- oder Stadtverwaltung"; break;
+		case 2000: $wert = "Wasser- und Bodenverband"; break;
+		case 2100: $wert = "Umlegungsstelle"; break;
+		case 2200: $wert = "Landesvermessungsverwaltung"; break;
+		case 2300: $wert = "&Ouml;bVI"; break;
+		case 2400: $wert = "Bundeseisenbahnverm&ouml;gen"; break;
+		case 2500: $wert = "Landwirtschaftskammer"; break;
+		default: $wert = "** Unbekannter Wert '".$key."'"; break;
+	}
+	return $wert;
+}
 ?>
