Index: trunk/wb/index.php
===================================================================
--- trunk/wb/index.php	(revision 564)
+++ trunk/wb/index.php	(revision 565)
@@ -59,10 +59,13 @@
 if($query_this_module->numRows() == 1) { // This is a menu_link. Get link of target-page and redirect
 	// get target_page_id
 	$table = TABLE_PREFIX.'mod_menu_link';
-	$query_tpid = $database->query("SELECT target_page_id FROM $table WHERE page_id = '$this_page_id'");
+	$query_tpid = $database->query("SELECT target_page_id, anchor FROM $table WHERE page_id = '$this_page_id'");
 	if($query_tpid->numRows() == 1) {
 		$res=$query_tpid->fetchRow();
 		$target_page_id = $res['target_page_id'];
+		$anchor = $res['anchor'];
+		if($anchor != '0') $anchor = ''.$anchor;
+		else $anchor = FALSE;
 		// get link of target-page
 		$table = TABLE_PREFIX.'pages';
 		$query_link = $database->query("SELECT link FROM $table WHERE page_id = '$target_page_id'");
@@ -70,7 +73,7 @@
 			$res=$query_link->fetchRow();
 			$target_page_link = $res['link'];
 			// redirect
-			header('Location: '.WB_URL.PAGES_DIRECTORY.$target_page_link.PAGE_EXTENSION);
+			header('Location: '.WB_URL.PAGES_DIRECTORY.$target_page_link.PAGE_EXTENSION.($anchor?'#'.$anchor:''));
 			exit;
 		}
 	}
Index: trunk/wb/languages/EN.php
===================================================================
--- trunk/wb/languages/EN.php	(revision 564)
+++ trunk/wb/languages/EN.php	(revision 565)
@@ -223,6 +223,7 @@
 $TEXT['FULL_NAME'] = 'Full Name';
 $TEXT['ACCOUNT_SIGNUP'] = 'Account Sign-Up';
 $TEXT['LINK'] = 'Link';
+$TEXT['ANCHOR'] = 'Anchor';
 $TEXT['TARGET'] = 'Target';
 $TEXT['NEW_WINDOW'] = 'New Window';
 $TEXT['SAME_WINDOW'] = 'Same Window';
Index: trunk/wb/modules/menu_link/save.php
===================================================================
--- trunk/wb/modules/menu_link/save.php	(revision 564)
+++ trunk/wb/modules/menu_link/save.php	(revision 565)
@@ -29,17 +29,17 @@
 $update_when_modified = true; // Tells script to update when this page was last updated
 require(WB_PATH.'/modules/admin.php');
 
-// Update id and target
-if(!isset($_POST['link']))
-	$foreign_page_id = 0;
-else
-	$foreign_page_id = $_POST['link']; // foreign-page_id
+// Update id, anchor and target
+if(isset($_POST['page_link'])) {
+	$foreign_page_id = $_POST['page_link'];
+	$page_target = $_POST['page_target'];
+	$url_target = $_POST['target'];
 
-$url_target = $_POST['target'];
-$table_pages = TABLE_PREFIX.'pages';
-$table_mod = TABLE_PREFIX.'mod_menu_link';
-$database->query("UPDATE $table_pages SET target = '$url_target' WHERE page_id = '$page_id'");
-$database->query("UPDATE $table_mod SET target_page_id = '$foreign_page_id' WHERE page_id = '$page_id'");
+	$table_pages = TABLE_PREFIX.'pages';
+	$table_mod = TABLE_PREFIX.'mod_menu_link';
+	$database->query("UPDATE $table_pages SET target = '$url_target' WHERE page_id = '$page_id'");
+	$database->query("UPDATE $table_mod SET target_page_id = '$foreign_page_id', anchor = '$page_target' WHERE page_id = '$page_id'");
+}
 
 // Check if there is a database error, otherwise say successful
 if($database->is_error()) {
Index: trunk/wb/modules/menu_link/install.php
===================================================================
--- trunk/wb/modules/menu_link/install.php	(revision 564)
+++ trunk/wb/modules/menu_link/install.php	(revision 565)
@@ -36,6 +36,7 @@
 		`section_id` INT(11) NOT NULL DEFAULT '0',
 		`page_id` INT(11) NOT NULL DEFAULT '0',
 		`target_page_id` INT(11) NOT NULL DEFAULT '0',
+		`anchor` VARCHAR(255) NOT NULL DEFAULT '' ,
 		PRIMARY KEY (`section_id`)
 	)
 ");
Index: trunk/wb/modules/menu_link/modify.php
===================================================================
--- trunk/wb/modules/menu_link/modify.php	(revision 564)
+++ trunk/wb/modules/menu_link/modify.php	(revision 565)
@@ -31,17 +31,18 @@
 $sql_result = $database->query("SELECT * FROM $table WHERE section_id = '$section_id'");
 $sql_row = $sql_result->fetchRow();
 $target_page_id = $sql_row['target_page_id'];
+$anchor = $sql_row['anchor'];
+$sel = ' selected';
 
 // Get list of all visible page-links, except menu_links and actual page
+$links = array();
 $table_p = TABLE_PREFIX."pages";
 $table_s = TABLE_PREFIX."sections";
-$query_page = $database->query("SELECT DISTINCT p.* FROM $table_p AS p, $table_s AS s WHERE p.page_id=s.page_id AND s.module != 'menu_link' AND p.page_id != '$page_id' AND parent = '0' ORDER BY position");
-if($query_page->numRows() > 0) {
+if($query_page = $database->query("SELECT DISTINCT p.* FROM $table_p AS p INNER JOIN $table_s AS s ON p.page_id=s.page_id WHERE s.module != 'menu_link' AND p.page_id != '$page_id' AND parent = '0' ORDER BY position")) {
 	while($page = $query_page->fetchRow()) {
 		if($admin->page_is_visible($page)) {
 			$links[$page['page_id']]='/'.$page['menu_title'];
-			$query_subpage = $database->query("SELECT DISTINCT p.* FROM $table_p AS p, $table_s AS s WHERE p.page_id=s.page_id AND s.module != 'menu_link' AND p.page_id != '$page_id' AND root_parent = '{$page['page_id']}' ORDER BY level");
-			if($query_subpage->numRows() > 0) {
+			if($query_subpage = $database->query("SELECT DISTINCT p.* FROM $table_p AS p INNER JOIN $table_s AS s ON p.page_id=s.page_id WHERE s.module != 'menu_link' AND p.page_id != '$page_id' AND root_parent = '{$page['page_id']}' ORDER BY level")) {
 				while($sub = $query_subpage->fetchRow()) {
 					if($admin->page_is_visible($sub)) {
 						$parent_link = (array_key_exists($sub['parent'],$links))?$links[$sub['parent']]:"";
@@ -52,14 +53,73 @@
 		}
 	}
 }
-
-// get URL-target for actual page
+// Get list of targets (id=... or <a name ...>) from pages in $links
+$targets = array();
+$table_mw = TABLE_PREFIX."mod_wysiwyg";
+$table_s = TABLE_PREFIX."sections";
+foreach($links as $pid=>$l) {
+	if($query_section = $database->query("SELECT section_id, module FROM $table_s WHERE page_id = '$pid' ORDER BY position")) {
+		while($section = $query_section->fetchRow()) {
+			$targets[$pid][] = "wb_section_{$section['section_id']}";
+			if($section['module'] == 'wysiwyg') {
+				if($query_page = $database->query("SELECT content FROM $table_mw WHERE section_id = '{$section['section_id']}' LIMIT 1")) {
+					$page = $query_page->fetchRow();
+					if(preg_match_all('/<(?:[^>]+id|\s*a[^>]+name)\s*=\s*"(.*)"/iuU',$page['content'], $match)) {
+						foreach($match[1] AS $t) {
+							$targets[$pid][] = $t;
+						}
+					}
+				}
+			}
+		}
+	}
+}
+// get target-window for actual page
 $table = TABLE_PREFIX."pages";
 $query_page = $database->query("SELECT target FROM $table WHERE page_id = '$page_id'");
 $page = $query_page->fetchRow();
 $target = $page['target'];
 
+
+// script for target-select-box
 ?>
+<script type="text/javascript">
+	function populate()
+	{
+		o=document.getElementById('page_link');
+		d=document.getElementById('page_target');
+		if(!d){return;}			
+		var mitems=new Array();
+		mitems['0']=[' ','0'];
+		<?php
+		foreach($links AS $pid=>$link) {
+			$str="mitems['$pid']=[";
+			$str.="' ',";
+			$str.="'0',";
+			if(is_array($targets) && is_array($targets[$pid])) {
+				foreach($targets[$pid] AS $value) {
+					$str.="'#$value',";
+					$str.="'$value',";
+				}
+				$str=rtrim($str, ',');
+				$str.="];\n";
+			}
+			echo $str;
+		}
+		?>
+		d.options.length=0;
+		cur=mitems[o.options[o.selectedIndex].value];
+		if(!cur){return;}
+		d.options.length=cur.length/2;
+		j=0;
+		for(var i=0;i<cur.length;i=i+2)
+		{
+			d.options[j].text=cur[i];
+			d.options[j++].value=cur[i+1];
+		}
+	}
+</script>
+
 <form action="<?php echo WB_URL ?>/modules/menu_link/save.php" method="post">
 <input type="hidden" name="page_id" value="<?php echo $page_id ?>" />
 <input type="hidden" name="section_id" value="<?php echo $section_id ?>" />
@@ -69,19 +129,30 @@
 		<?php echo $TEXT['LINK'].':' ?>
 	</td>
 	<td>
-		<select name="link" style="WIDTH: 100%;" value="<?php echo "" ?>" />
-		<?php
-		foreach($links as $id=>$l) { ?>
-			<option value="<?php echo $id ?>"<?php if($id==$target_page_id) echo ' selected'; ?>><?php echo $l ?></option>
-		<?php } ?>
+		<select name="page_link" id="page_link" onchange="populate()" style="width: 100%;">
+			<option value="0"<?php echo $target_page_id=='0'?$sel:''?>><?php echo $TEXT['PLEASE_SELECT']; ?></option>
+			<?php foreach($links AS $pid=>$link) {
+				echo "<option value=\"$pid\" ".($target_page_id==$pid?$sel:'').">$link</option>";
+			} ?>
+		</select>
 	</td>
 </tr>
 <tr>
 	<td>
+		<?php echo $TEXT['ANCHOR'].':' ?>
+	</td>
+	<td>
+		<select name="page_target" id="page_target" onfocus="populate()" style="width: 100%;">
+			<option value="<?php echo $anchor ?>" selected><?php echo $anchor=='0'?' ':'#'.$anchor ?></option>
+		</select>
+	</td>
+</tr>
+<tr>
+	<td>
 		<?php echo $TEXT['TARGET'].':' ?>
 	</td>
 	<td>
-		<select name="target" style="WIDTH: 100%;" value="<?php echo "" ?>" />
+		<select name="target" style="width: 100%" />
 			<option value="_blank"<?php if($target=='_blank') echo ' selected'; ?>><?php echo $TEXT['NEW_WINDOW'] ?></option>
 			<option value="_self"<?php if($target=='_self') echo ' selected'; ?>><?php echo $TEXT['SAME_WINDOW'] ?></option>
 			<option value="_top"<?php if($target=='_top') echo ' selected'; ?>><?php echo $TEXT['TOP_FRAME'] ?></option>
Index: trunk/wb/modules/menu_link/add.php
===================================================================
--- trunk/wb/modules/menu_link/add.php	(revision 564)
+++ trunk/wb/modules/menu_link/add.php	(revision 565)
@@ -29,6 +29,6 @@
 }
 
 $table = TABLE_PREFIX ."mod_menu_link";
-$database->query("INSERT INTO `$table` (`page_id`, `section_id`, target_page_id) VALUES ('$page_id', '$section_id', '0')");
+$database->query("INSERT INTO `$table` (`page_id`, `section_id`, target_page_id, anchor) VALUES ('$page_id', '$section_id', '0', '')");
 
 ?>
\ No newline at end of file
