Index: /MediaWiki/trunk/FCKeditor.php
===================================================================
--- /MediaWiki/trunk/FCKeditor.php	(revision 1828)
+++ /MediaWiki/trunk/FCKeditor.php	(revision 1829)
@@ -68,9 +68,10 @@
 $wgAjaxExportList[] = 'wfSajaxGetImageUrl';
 $wgAjaxExportList[] = 'wfSajaxGetMathUrl';
+$wgAjaxExportList[] = 'wfSajaxSearchTemplateFCKeditor';
 
 $wgExtensionCredits['other'][] = array(
 "name" => "FCKeditor extension",
 "author" => "FCKeditor.net (inspired by the code written by Mafs [Meta])",
-"version" => 'fckeditor/mw-extension $Rev$ 2007',
+"version" => 'fckeditor/mw-extension $Rev$ 2008',
 "url" => "http://meta.wikimedia.org/wiki/FCKeditor",
 "description" => "FCKeditor extension"
Index: /MediaWiki/trunk/FCKeditorParser.body.php
===================================================================
--- /MediaWiki/trunk/FCKeditorParser.body.php	(revision 1828)
+++ /MediaWiki/trunk/FCKeditorParser.body.php	(revision 1829)
@@ -357,5 +357,5 @@
 					$inner = htmlspecialchars(strtr(substr($text, $startingPos, $pos - $startingPos + 19), $strtr));
 					$this->fck_mw_strtr_span['href="Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw"'] = 'href="'.$inner.'"';
-					$this->fck_mw_strtr_span['Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw'] = '<span class="fck_mw_template">'.$inner.'</span>';
+					$this->fck_mw_strtr_span['Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw'] = '<span class="fck_mw_template">'.str_replace(array("\r\n", "\n", "\r"),"fckLR",$inner).'</span>';
 					$startingPos = $pos + 19;
 					$this->fck_mw_strtr_span_counter++;
Index: /MediaWiki/trunk/FCKeditorSajax.body.php
===================================================================
--- /MediaWiki/trunk/FCKeditorSajax.body.php	(revision 1828)
+++ /MediaWiki/trunk/FCKeditorSajax.body.php	(revision 1829)
@@ -122,4 +122,23 @@
 }
 
+function wfSajaxSearchTemplateFCKeditor($empty)
+{
+	global $wgContLang, $wgOut;
+	$ns = NS_TEMPLATE;
+
+	$db =& wfGetDB( DB_SLAVE );
+	$res = $db->select( 'page', 'page_title',
+	array(  'page_namespace' => $ns),
+	"wfSajaxSearch"
+	);
+
+	$ret = "";
+	while ( $row = $db->fetchObject( $res ) ) {
+		$ret .= $row->page_title ."\n";
+	}
+
+	return $ret;
+}
+
 function wfSajaxWikiToHTML( $wiki )
 {
Index: /MediaWiki/trunk/FCKeditorSkin.body.php
===================================================================
--- /MediaWiki/trunk/FCKeditorSkin.body.php	(revision 1828)
+++ /MediaWiki/trunk/FCKeditorSkin.body.php	(revision 1829)
@@ -129,5 +129,6 @@
 
 		if ($found) {
-			$originalLink = Linker::makeImageLink2( $nt, $file, $frameParams, $handlerParams);
+			$linker = new Linker();
+			$originalLink = $linker->makeImageLink2( $nt, $file, $frameParams, $handlerParams);
 
 			if (false !== strpos($originalLink, "src=\"")) {
Index: /MediaWiki/trunk/mw12/FCKeditorParser_OldPP.body.php
===================================================================
--- /MediaWiki/trunk/mw12/FCKeditorParser_OldPP.body.php	(revision 1828)
+++ /MediaWiki/trunk/mw12/FCKeditorParser_OldPP.body.php	(revision 1829)
@@ -357,5 +357,5 @@
 					$inner = htmlspecialchars(strtr(substr($text, $startingPos, $pos - $startingPos + 19), $strtr));
 					$this->fck_mw_strtr_span['href="Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw"'] = 'href="'.$inner.'"';
-					$this->fck_mw_strtr_span['Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw'] = '<span class="fck_mw_template">'.$inner.'</span>';
+					$this->fck_mw_strtr_span['Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw'] = '<span class="fck_mw_template">'.str_replace(array("\r\n", "\n", "\r"),"fckLR",$inner).'</span>';
 					$startingPos = $pos + 19;
 					$this->fck_mw_strtr_span_counter++;
Index: /MediaWiki/trunk/plugins/mediawiki/dialogs/template.html
===================================================================
--- /MediaWiki/trunk/plugins/mediawiki/dialogs/template.html	(revision 1828)
+++ /MediaWiki/trunk/plugins/mediawiki/dialogs/template.html	(revision 1829)
@@ -27,4 +27,6 @@
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<link href="common/fck_dialog_common.css" rel="stylesheet" type="text/css" />
 	<script type="text/javascript">
 
@@ -40,4 +42,16 @@
 	</script>
 	<script type="text/javascript">
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'Edit', 'Edit' ) ;
+window.parent.AddTab( 'Manual', 'Manual' ) ;
+
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divEdit'		, ( tabCode == 'Edit' ) ) ;
+	ShowE('divManual'		, ( tabCode == 'Manual' ) ) ;
+}
 
 // Get the selected flash embed (if available).
@@ -66,9 +80,44 @@
 }
 
+function LoadSearchResults( result )
+{
+	var results = result.responseText.Trim().split( '\n' ) ;
+	var select = GetE( 'xWikiResults' ) ;
+
+	if ( results.length > 0 && !( results.length == 1 && results[0].length == 0 ) )
+	{
+		for ( var i = 0 ; i < results.length ; i++ )
+			FCKTools.AddSelectOption( select, 'Template:' + results[i], results[i] ) ;
+	}
+}
+
 function LoadSelection()
 {
+	// Make an Ajax search for the pages.
+	var empty = '';
+	oEditor.window.parent.sajax_request_type = 'GET' ;
+	oEditor.window.parent.sajax_do_call( 'wfSajaxSearchTemplateFCKeditor',[empty], LoadSearchResults ) ;
+	
 	if ( !oTemplateSpan ) return ;
 
-	GetE('xTemplateRaw').value = FCKTools.HTMLDecode( oTemplateSpan.innerHTML ).replace( /&quot;/g, '"' ) ;
+	var inputText = FCKTools.HTMLDecode(oTemplateSpan.innerHTML);
+	if (inputText.length>0 && inputText.indexOf('{{#')<0 && inputText.indexOf('{{:')<0 ) 
+	{
+		var templateName = inputText.substring(2,inputText.indexOf('fckLR'));
+		if (inputText.indexOf('fckLR')<1) 
+			templateName = inputText.substring(2,inputText.indexOf('|'));
+		if (inputText.indexOf('|')<1) 
+			templateName = inputText.substring(2,inputText.indexOf('}}'));
+			
+		SetUrl(templateName.charAt(0).toUpperCase() + templateName.substr(1));
+	}
+	GetE('xTemplateRaw').value = inputText.replace(/fckLR/g,'\r\n').replace( /&quot;/g, '"' );
+}
+
+function SetUrl(link)
+{
+	var urlTemplate = oEditor.window.parent.location.pathname + '?title=Template:' + link + '&printable=yes';
+	SetAttribute(GetE('xTemplateManual'),'src',urlTemplate);
+	GetE('xTemplateRaw').value = "{{" + link + "}}";
 }
 
@@ -82,5 +131,5 @@
 	}
 	
-	var templateData = FCKTools.HTMLEncode( GetE('xTemplateRaw').value ).Trim().replace( /"/g, '&quot;' ) ;
+	var templateData = FCKTools.HTMLEncode(GetE('xTemplateRaw').value.Trim().replace(/(\r\n|\n)/g, 'fckLR')).replace( /"/g, '&quot;' ) ;
 	
 	if ( !( /^{{[\s\S]+}}$/.test( templateData ) ) )
@@ -99,4 +148,5 @@
 	}
 
+	//GetE('xTestSpan').innerHTML = GetE('xTemplateRaw').value.Trim().replace( /"/g, '&quot;' ).replace(/(\r\n|\n)/g, '___') ;
 	return true ;
 }
@@ -105,5 +155,5 @@
 </head>
 <body style="overflow: hidden">
-	<div id="divInfo">
+	<div id="divEdit">
 		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
 			<tr>
@@ -118,4 +168,23 @@
 				</td>
 			</tr>
+			<tr>
+				<td>
+					<span id="xTestSpan" class="fck_mw_template"></span>
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divManual" style="display: none">
+		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
+			<tr>
+				<select id="xWikiResults" style="width: 100%;" onchange="SetUrl( this.value );">
+				<option value="">&lt;Pick up a template manual here&gt;</option>
+				</select>
+			</tr>
+			<tr>
+				<td>
+					<iframe id="xTemplateManual" width="100%" scrolling="yes" height="100%" src="" style="margin:5px;padding:0px;"></iframe>
+				</td>
+			</tr>
 		</table>
 	</div>
Index: /MediaWiki/trunk/plugins/mediawiki/fckplugin.js
===================================================================
--- /MediaWiki/trunk/plugins/mediawiki/fckplugin.js	(revision 1828)
+++ /MediaWiki/trunk/plugins/mediawiki/fckplugin.js	(revision 1829)
@@ -428,5 +428,5 @@
 
 								case 'fck_mw_template' :
-									stringBuilder.push( FCKTools.HTMLDecode(htmlNode.innerHTML) ) ;
+									stringBuilder.push( FCKTools.HTMLDecode(htmlNode.innerHTML).replace(/fckLR/g,'\r\n') ) ;
 									return ;
 								
