Index: typo3/class.browse_links.php
===================================================================
--- typo3/class.browse_links.php	(revision 3534)
+++ typo3/class.browse_links.php	(working copy)
@@ -552,7 +552,7 @@
 			$bgColorClass=($c+1)%2 ? 'bgColor' : 'bgColor-10';
 
 				// Creating blinking arrow, if applicable:
-			if ($GLOBALS['SOBE']->browser->curUrlInfo['act']=='file' && $cmpPath==$v['row']['path'])	{
+			if (($GLOBALS['SOBE']->browser->curUrlInfo['act']=='file' || $GLOBALS['SOBE']->browser->curUrlInfo['act']=='folder') && $cmpPath==$v['row']['path'])	{
 				$arrCol='<td><img'.t3lib_iconWorks::skinImg($BACK_PATH,'gfx/blinkarrow_right.gif','width="5" height="9"').' class="c-blinkArrowR" alt="" /></td>';
 				$bgColorClass='bgColor4';
 			} else {
@@ -816,6 +816,21 @@
 				'target' => $currentLinkParts[1]
 			);
 			$this->curUrlInfo=$this->parseCurUrl($this->siteURL.'?id='.$currentLinkParts[0],$this->siteURL);
+			if ($this->curUrlInfo['pageid']==0) { // pageid==0 means that this is not an internal (page) link
+				if (@file_exists(PATH_site.rawurldecode($currentLinkParts[0])))	{ // check if this is a link to a file
+					if (t3lib_div::isFirstPartOfStr($currentLinkParts[0],PATH_site)) {
+						$currentLinkParts[0] = substr($currentLinkParts[0], strlen(PATH_site));
+					}
+					$this->curUrlInfo = $this->parseCurUrl($this->siteURL.$currentLinkParts[0],$this->siteURL);
+				} elseif (strstr($currentLinkParts[0],'@')) { // check for email link
+					if (t3lib_div::isFirstPartOfStr($currentLinkParts[0],'mailto:')) {
+						$currentLinkParts[0] = substr($currentLinkParts[0],7);
+					}
+					$this->curUrlInfo = $this->parseCurUrl('mailto:'.$currentLinkParts[0],$this->siteURL);
+				} else { // nothing of the above. this is an external link
+					$this->curUrlInfo = $this->parseCurUrl($currentLinkParts[0],$this->siteURL);
+				}
+			} 
 		} else {
 			$this->curUrlArray = t3lib_div::_GP('curUrl');
 			if ($this->curUrlArray['all'])	{
@@ -868,15 +883,15 @@
 			var cur_target="'.($this->setTarget?$this->setTarget:'').'";
 			var cur_title="'.($this->setTitle?$this->setTitle:'').'";
 
-			function setTarget(target)	{	//
+			function browse_links_setTarget(target)	{	//
 				cur_target=target;
 				add_target="&curUrl[target]="+escape(target);
 			}
-			function setTitle(title)	{	//
+			function browse_links_setTitle(title)	{	//
 				cur_title=title;
 				add_title="&curUrl[title]="+escape(title);
 			}
-			function setValue(value)	{	//
+			function browse_links_setValue(value)	{	//
 				cur_href=value;
 				add_href="&curUrl[href]="+value;
 			}
@@ -912,10 +927,19 @@
 				}
 				function link_current()	{	//
 					if (cur_href!="http://" && cur_href!="mailto:")	{
-						var setValue = cur_href+" "+cur_target+" "+cur_title;
-						if (setValue.substr(0,7)=="http://")	setValue = setValue.substr(7);
-						if (setValue.substr(0,7)=="mailto:")	setValue = setValue.substr(7);
-						updateValueInMainForm(setValue);
+						returnBeforeCleaned = cur_href+" "+cur_target+" "+cur_title;
+						if (returnBeforeCleaned.substr(0,7)=="http://") {
+							returnToMainFormValue = returnBeforeCleaned.substr(7);
+						} else if (returnBeforeCleaned.substr(0,7)=="mailto:") {
+							if (returnBeforeCleaned.substr(0,14)=="mailto:mailto:") {
+								returnToMainFormValue = returnBeforeCleaned.substr(14);
+							} else {
+								returnToMainFormValue = returnBeforeCleaned.substr(7);
+							}
+						} else {
+							returnToMainFormValue = returnBeforeCleaned;
+						}
+						updateValueInMainForm(returnToMainFormValue);
 						close();
 					}
 					return false;
@@ -1249,7 +1273,7 @@
 							<tr>
 								<td>'.$GLOBALS['LANG']->getLL('emailAddress',1).':</td>
 								<td><input type="text" name="lemail"'.$this->doc->formWidth(20).' value="'.htmlspecialchars($this->curUrlInfo['act']=='mail'?$this->curUrlInfo['info']:'').'" /> '.
-									'<input type="submit" value="'.$GLOBALS['LANG']->getLL('setLink',1).'" onclick="setTarget(\'\');setValue(\'mailto:\'+document.lurlform.lemail.value); return link_current();" /></td>
+									'<input type="submit" value="'.$GLOBALS['LANG']->getLL('setLink',1).'" onclick="browse_links_setTarget(\'\');browse_links_setValue(\'mailto:\'+document.lurlform.lemail.value); return link_current();" /></td>
 							</tr>
 						</table>
 					</form>';
@@ -1266,7 +1290,7 @@
 							<tr>
 								<td>URL:</td>
 								<td><input type="text" name="lurl"'.$this->doc->formWidth(20).' value="'.htmlspecialchars($this->curUrlInfo['act']=='url'?$this->curUrlInfo['info']:'http://').'" /> '.
-									'<input type="submit" value="'.$GLOBALS['LANG']->getLL('setLink',1).'" onclick="setValue(document.lurlform.lurl.value); return link_current();" /></td>
+									'<input type="submit" value="'.$GLOBALS['LANG']->getLL('setLink',1).'" onclick="browse_links_setValue(document.lurlform.lurl.value); return link_current();" /></td>
 							</tr>
 						</table>
 					</form>';
@@ -1330,7 +1354,7 @@
 
 								// URL + onclick event:
 							$onClickEvent='';
-							if (isset($v[$k2i.'.']['target']))	$onClickEvent.="setTarget('".$v[$k2i.'.']['target']."');";
+							if (isset($v[$k2i.'.']['target']))	$onClickEvent.="browse_links_setTarget('".$v[$k2i.'.']['target']."');";
 							$v[$k2i.'.']['url'] = str_replace('###_URL###',$this->siteURL,$v[$k2i.'.']['url']);
 							if (substr($v[$k2i.'.']['url'],0,7)=='http://' || substr($v[$k2i.'.']['url'],0,7)=='mailto:')	{
 								$onClickEvent.="cur_href=unescape('".rawurlencode($v[$k2i.'.']['url'])."');link_current();";
@@ -1405,7 +1429,7 @@
 					<table border="0" cellpadding="2" cellspacing="1" id="typo3-linkTarget">
 						<tr>
 							<td>'.$GLOBALS['LANG']->getLL('title',1).'</td>
-							<td><input type="text" name="ltitle" onchange="setTitle(this.value);" value="'.htmlspecialchars($this->setTitle).'"'.$this->doc->formWidth(10).' /></td>
+							<td><input type="text" name="ltitle" onchange="browse_links_setTitle(this.value);" value="'.htmlspecialchars($this->setTitle).'"'.$this->doc->formWidth(10).' /></td>
 							<td><input type="submit" value="'.$GLOBALS['LANG']->getLL('update',1).'" onclick="return link_current();" /></td>
 						</tr>
 					</table>
@@ -1425,9 +1449,9 @@
 					<table border="0" cellpadding="2" cellspacing="1" id="typo3-linkTarget">
 						<tr>
 							<td>'.$GLOBALS['LANG']->getLL('target',1).':</td>
-							<td><input type="text" name="ltarget" onchange="setTarget(this.value);" value="'.htmlspecialchars($this->setTarget).'"'.$this->doc->formWidth(10).' /></td>
+							<td><input type="text" name="ltarget" onchange="browse_links_setTarget(this.value);" value="'.htmlspecialchars($this->setTarget).'"'.$this->doc->formWidth(10).' /></td>
 							<td>
-								<select name="ltarget_type" onchange="setTarget(this.options[this.selectedIndex].value);document.ltargetform.ltarget.value=this.options[this.selectedIndex].value;this.selectedIndex=0;">
+								<select name="ltarget_type" onchange="browse_links_setTarget(this.options[this.selectedIndex].value);document.ltargetform.ltarget.value=this.options[this.selectedIndex].value;this.selectedIndex=0;">
 									<option></option>
 									<option value="_top">'.$GLOBALS['LANG']->getLL('top',1).'</option>
 									<option value="_blank">'.$GLOBALS['LANG']->getLL('newWindow',1).'</option>
@@ -1443,8 +1467,8 @@
 			$selectJS = '
 				if (document.ltargetform.popup_width.options[document.ltargetform.popup_width.selectedIndex].value>0 && document.ltargetform.popup_height.options[document.ltargetform.popup_height.selectedIndex].value>0)	{
 					document.ltargetform.ltarget.value = document.ltargetform.popup_width.options[document.ltargetform.popup_width.selectedIndex].value+"x"+document.ltargetform.popup_height.options[document.ltargetform.popup_height.selectedIndex].value;
-					setTarget(document.ltargetform.ltarget.value);
-          			setTitle(document.ltitleform.ltitle.value);
+					browse_links_setTarget(document.ltargetform.ltarget.value);
+	          			browse_links_setTitle(document.ltitleform.ltitle.value);
 					document.ltargetform.popup_width.selectedIndex=0;
 					document.ltargetform.popup_height.selectedIndex=0;
 				}
@@ -2513,7 +2537,11 @@
 				$rel = substr($href,strlen($siteUrl));
 				if (@file_exists(PATH_site.rawurldecode($rel)))	{	// URL is a file, which exists:
 					$info['value']=rawurldecode($rel);
-					$info['act']='file';
+					if (@is_dir(PATH_site.$info['value'])) {
+						$info['act']='folder';
+					} else {
+						$info['act']='file';
+					}
 				} else {	// URL is a page (id parameter)
 					$uP=parse_url($rel);
 					if (!trim($uP['path']))	{
