This commit was manufactured by cvs2svn to create tag 'freeside_1_9_2'.
[freeside.git] / httemplate / elements / fckeditor / editor / dialog / fck_replace.html
index 2c574d2..fe5a788 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\r
 <!--\r
  * FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
- * Copyright (C) 2003-2010 Frederico Caldeira Knabben\r
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben\r
  *\r
  * == BEGIN LICENSE ==\r
  *\r
  *\r
  * == END LICENSE ==\r
  *\r
- * "Find" and "Replace" dialog box window.\r
+ * "Replace" dialog box window.\r
 -->\r
 <html xmlns="http://www.w3.org/1999/xhtml">\r
 <head>\r
        <title></title>\r
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r
        <meta content="noindex, nofollow" name="robots" />\r
-       <script src="common/fck_dialog_common.js" type="text/javascript"></script>\r
        <script type="text/javascript">\r
 \r
-var dialog     = window.parent ;\r
-var oEditor = dialog.InnerDialogLoaded() ;\r
-var dialogArguments = dialog.Args() ;\r
+var oEditor = window.parent.InnerDialogLoaded() ;\r
 \r
-var FCKLang = oEditor.FCKLang ;\r
-var FCKDomTools = oEditor.FCKDomTools ;\r
-var FCKDomRange = oEditor.FCKDomRange ;\r
-var FCKListsLib = oEditor.FCKListsLib ;\r
-var FCKTools = oEditor.FCKTools ;\r
-var EditorDocument = oEditor.FCK.EditorDocument ;\r
-var HighlightStyle = oEditor.FCKStyles.GetStyle( '_FCK_SelectionHighlight' )  ;\r
-\r
-dialog.AddTab( 'Find', FCKLang.DlgFindTitle ) ;\r
-dialog.AddTab( 'Replace', FCKLang.DlgReplaceTitle ) ;\r
-var idMap = {} ;\r
-\r
-function OnDialogTabChange( tabCode )\r
+function OnLoad()\r
 {\r
-       ShowE( 'divFind', ( tabCode == 'Find' ) ) ;\r
-       ShowE( 'divReplace', ( tabCode == 'Replace' ) ) ;\r
-       idMap['FindText'] = 'txtFind' + tabCode ;\r
-       idMap['CheckCase'] = 'chkCase' + tabCode ;\r
-       idMap['CheckWord'] = 'chkWord' + tabCode ;\r
+       // First of all, translate the dialog box texts\r
+       oEditor.FCKLanguageManager.TranslatePage( document ) ;\r
 \r
-       if ( tabCode == 'Replace' )\r
-               dialog.SetAutoSize( true ) ;\r
-}\r
+       window.parent.SetAutoSize( true ) ;\r
 \r
-GetNextNonEmptyTextNode = function( node, stopNode )\r
-{\r
-       while ( ( node = FCKDomTools.GetNextSourceNode( node, false, 3, stopNode ) ) && node && node.length < 1 )\r
-               1 ;\r
-       return node ;\r
+       oEditor.FCKUndo.SaveUndoStep() ;\r
 }\r
 \r
-CharacterCursor = function( arg )\r
+function btnStat(frm)\r
 {\r
-       if ( arg.nodeType && arg.nodeType == 9 )\r
-       {\r
-               this._textNode = GetNextNonEmptyTextNode( arg.body, arg.documentElement ) ;\r
-               this._offset = 0 ;\r
-               this._doc = arg ;\r
-       }\r
-       else\r
-       {\r
-               this._textNode = arguments[0] ;\r
-               this._offset = arguments[1] ;\r
-               this._doc = FCKTools.GetElementDocument( arguments[0] ) ;\r
-       }\r
+       document.getElementById('btnReplace').disabled =\r
+               document.getElementById('btnReplaceAll').disabled =\r
+                       ( document.getElementById('txtFind').value.length == 0 ) ;\r
 }\r
-CharacterCursor.prototype =\r
-{\r
-       GetCharacter : function()\r
-       {\r
-               return ( this._textNode && this._textNode.nodeValue.charAt( this._offset ) ) || null ;\r
-       },\r
-\r
-       // Non-normalized.\r
-       GetTextNode : function()\r
-       {\r
-               return this._textNode ;\r
-       },\r
 \r
-       // Non-normalized.\r
-       GetIndex : function()\r
-       {\r
-               return this._offset ;\r
-       },\r
-\r
-       // Return value means whehther we've crossed a line break or a paragraph boundary.\r
-       MoveNext : function()\r
-       {\r
-               if ( this._offset < this._textNode.length - 1 )\r
-               {\r
-                       this._offset++ ;\r
-                       return false ;\r
-               }\r
-\r
-               var crossed = false ;\r
-               var curNode = this._textNode ;\r
-               while ( ( curNode = FCKDomTools.GetNextSourceNode( curNode ) )\r
-                               && curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )\r
-               {\r
-                       var tag = curNode.nodeName.toLowerCase() ;\r
-                       if ( FCKListsLib.BlockElements[tag] || tag == 'br' )\r
-                               crossed = true ;\r
-               }\r
-\r
-               this._textNode = curNode ;\r
-               this._offset = 0 ;\r
-               return crossed ;\r
-       },\r
-\r
-       // Return value means whehther we've crossed a line break or a paragraph boundary.\r
-       MoveBack : function()\r
-       {\r
-               if ( this._offset > 0 && this._textNode.length > 0 )\r
-               {\r
-                       this._offset = Math.min( this._offset - 1, this._textNode.length - 1 ) ;\r
-                       return false ;\r
-               }\r
-\r
-               var crossed = false ;\r
-               var curNode = this._textNode ;\r
-               while ( ( curNode = FCKDomTools.GetPreviousSourceNode( curNode ) )\r
-                               && curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )\r
-               {\r
-                       var tag = curNode.nodeName.toLowerCase() ;\r
-                       if ( FCKListsLib.BlockElements[tag] || tag == 'br' )\r
-                               crossed = true ;\r
-               }\r
-\r
-               this._textNode = curNode ;\r
-               this._offset = curNode && curNode.length - 1 ;\r
-               return crossed ;\r
-       },\r
-\r
-       Clone : function()\r
-       {\r
-               return new CharacterCursor( this._textNode, this._offset ) ;\r
-       }\r
-} ;\r
-\r
-CharacterRange = function( initCursor, maxLength )\r
-{\r
-       this._cursors = initCursor.push ? initCursor : [initCursor] ;\r
-       this._maxLength = maxLength ;\r
-       this._highlightRange = null ;\r
-}\r
-CharacterRange.prototype =\r
+function ReplaceTextNodes( parentNode, regex, replaceValue, replaceAll, hasFound )\r
 {\r
-       ToDomRange : function()\r
+       for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )\r
        {\r
-               var firstCursor = this._cursors[0] ;\r
-               var lastCursor = this._cursors[ this._cursors.length - 1 ] ;\r
-               var domRange = new FCKDomRange( FCKTools.GetElementWindow( firstCursor.GetTextNode() ) ) ;\r
-               var w3cRange = domRange._Range = domRange.CreateRange() ;\r
-               w3cRange.setStart( firstCursor.GetTextNode(), firstCursor.GetIndex() ) ;\r
-               w3cRange.setEnd( lastCursor.GetTextNode(), lastCursor.GetIndex() + 1 ) ;\r
-               domRange._UpdateElementInfo() ;\r
-               return domRange ;\r
-       },\r
-\r
-       Highlight : function()\r
-       {\r
-               if ( this._cursors.length < 1 )\r
-                       return ;\r
-\r
-               var domRange = this.ToDomRange() ;\r
-               HighlightStyle.ApplyToRange( domRange, false, true ) ;\r
-               this._highlightRange = domRange ;\r
-\r
-               var charRange = CharacterRange.CreateFromDomRange( domRange ) ;\r
-               var focusNode = domRange.StartNode ;\r
-               if ( focusNode.nodeType != 1 )\r
-                       focusNode = focusNode.parentNode ;\r
-               FCKDomTools.ScrollIntoView( focusNode, false ) ;\r
-               this._cursors = charRange._cursors ;\r
-       },\r
-\r
-       RemoveHighlight : function()\r
-       {\r
-               if ( this._highlightRange )\r
-               {\r
-                       HighlightStyle.RemoveFromRange( this._highlightRange, false, true ) ;\r
-                       var charRange = CharacterRange.CreateFromDomRange( this._highlightRange ) ;\r
-                       this._cursors = charRange._cursors ;\r
-                       this._highlightRange = null ;\r
-               }\r
-       },\r
-\r
-       GetHighlightDomRange : function()\r
-       {\r
-               return this._highlightRange;\r
-       },\r
-\r
-       MoveNext : function()\r
-       {\r
-               var next = this._cursors[ this._cursors.length - 1 ].Clone() ;\r
-               var retval = next.MoveNext() ;\r
-               if ( retval )\r
-                       this._cursors = [] ;\r
-               this._cursors.push( next ) ;\r
-               if ( this._cursors.length > this._maxLength )\r
-                       this._cursors.shift() ;\r
-               return retval ;\r
-       },\r
-\r
-       MoveBack : function()\r
-       {\r
-               var prev = this._cursors[0].Clone() ;\r
-               var retval = prev.MoveBack() ;\r
-               if ( retval )\r
-                       this._cursors = [] ;\r
-               this._cursors.unshift( prev ) ;\r
-               if ( this._cursors.length > this._maxLength )\r
-                       this._cursors.pop() ;\r
-               return retval ;\r
-       },\r
-\r
-       GetEndCharacter : function()\r
-       {\r
-               if ( this._cursors.length < 1 )\r
-                       return null ;\r
-               var retval = this._cursors[ this._cursors.length - 1 ].GetCharacter() ;\r
-               return retval ;\r
-       },\r
-\r
-       GetNextRange : function( len )\r
-       {\r
-               if ( this._cursors.length == 0 )\r
-                       return null ;\r
-               var cur = this._cursors[ this._cursors.length - 1 ].Clone() ;\r
-               cur.MoveNext() ;\r
-               return new CharacterRange( cur, len ) ;\r
-       },\r
-\r
-       GetCursors : function()\r
-       {\r
-               return this._cursors ;\r
-       }\r
-} ;\r
-\r
-CharacterRange.CreateFromDomRange = function( domRange )\r
-{\r
-       var w3cRange = domRange._Range ;\r
-       var startContainer = w3cRange.startContainer ;\r
-       var endContainer = w3cRange.endContainer ;\r
-       var startTextNode, startIndex, endTextNode, endIndex ;\r
-\r
-       if ( startContainer.nodeType == 3 )\r
-       {\r
-               startTextNode = startContainer ;\r
-               startIndex = w3cRange.startOffset ;\r
-       }\r
-       else if ( domRange.StartNode.nodeType == 3 )\r
-       {\r
-               startTextNode = domRange.StartNode ;\r
-               startIndex = 0 ;\r
-       }\r
-       else\r
-       {\r
-               startTextNode = GetNextNonEmptyTextNode( domRange.StartNode, domRange.StartNode.parentNode ) ;\r
-               if ( !startTextNode )\r
-                       return null ;\r
-               startIndex = 0 ;\r
-       }\r
-\r
-       if ( endContainer.nodeType == 3 && w3cRange.endOffset > 0 )\r
-       {\r
-               endTextNode = endContainer ;\r
-               endIndex = w3cRange.endOffset - 1 ;\r
-       }\r
-       else\r
-       {\r
-               endTextNode = domRange.EndNode ;\r
-               while ( endTextNode.nodeType != 3 )\r
-                       endTextNode = endTextNode.lastChild ;\r
-               endIndex = endTextNode.length - 1 ;\r
-       }\r
-\r
-       var cursors = [] ;\r
-       var current = new CharacterCursor( startTextNode, startIndex ) ;\r
-       cursors.push( current ) ;\r
-       if ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) && !domRange.CheckIsEmpty() )\r
-       {\r
-               do\r
+               var oNode = parentNode.childNodes[i] ;\r
+               if ( oNode.nodeType == 3 )\r
                {\r
-                       current = current.Clone() ;\r
-                       current.MoveNext() ;\r
-                       cursors.push( current ) ;\r
-               }\r
-               while ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) ) ;\r
-       }\r
-\r
-       return new CharacterRange( cursors, cursors.length ) ;\r
-}\r
-\r
-// Knuth-Morris-Pratt Algorithm for stream input\r
-KMP_NOMATCH = 0 ;\r
-KMP_ADVANCED = 1 ;\r
-KMP_MATCHED = 2 ;\r
-KmpMatch = function( pattern, ignoreCase )\r
-{\r
-       var overlap = [ -1 ] ;\r
-       for ( var i = 0 ; i < pattern.length ; i++ )\r
-       {\r
-               overlap.push( overlap[i] + 1 ) ;\r
-               while ( overlap[ i + 1 ] > 0 && pattern.charAt( i ) != pattern.charAt( overlap[ i + 1 ] - 1 ) )\r
-                       overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1 ;\r
-       }\r
-       this._Overlap = overlap ;\r
-       this._State = 0 ;\r
-       this._IgnoreCase = ( ignoreCase === true ) ;\r
-       if ( ignoreCase )\r
-               this.Pattern = pattern.toLowerCase();\r
-       else\r
-               this.Pattern = pattern ;\r
-}\r
-KmpMatch.prototype = {\r
-       FeedCharacter : function( c )\r
-       {\r
-               if ( this._IgnoreCase )\r
-                       c = c.toLowerCase();\r
-\r
-               while ( true )\r
-               {\r
-                       if ( c == this.Pattern.charAt( this._State ) )\r
+                       var sReplaced = oNode.nodeValue.replace( regex, replaceValue ) ;\r
+                       if ( oNode.nodeValue != sReplaced )\r
                        {\r
-                               this._State++ ;\r
-                               if ( this._State == this.Pattern.length )\r
-                               {\r
-                                       // found a match, start over, don't care about partial matches involving the current match\r
-                                       this._State = 0;\r
-                                       return KMP_MATCHED;\r
-                               }\r
-                               return KMP_ADVANCED ;\r
+                               oNode.nodeValue = sReplaced ;\r
+                               if ( ! replaceAll )\r
+                                       return true ;\r
+                               hasFound = true ;\r
                        }\r
-                       else if ( this._State == 0 )\r
-                               return KMP_NOMATCH;\r
-                       else\r
-                               this._State = this._Overlap[ this._State ];\r
                }\r
 \r
-               return null ;\r
-       },\r
-\r
-       Reset : function()\r
-       {\r
-               this._State = 0 ;\r
-       }\r
-};\r
-\r
-// Place a range at the start of document.\r
-function OnLoad()\r
-{\r
-       // First of all, translate the dialog box texts.\r
-       oEditor.FCKLanguageManager.TranslatePage( document ) ;\r
-\r
-       // Show the appropriate tab at startup.\r
-       if ( dialogArguments.CustomValue == 'Find' )\r
-       {\r
-               dialog.SetSelectedTab( 'Find' ) ;\r
-               dialog.SetAutoSize( true ) ;\r
+               hasFound = ReplaceTextNodes( oNode, regex, replaceValue, replaceAll, hasFound ) ;\r
+               if ( ! replaceAll && hasFound )\r
+                       return true ;\r
        }\r
-       else\r
-               dialog.SetSelectedTab( 'Replace' ) ;\r
 \r
-       SelectField( 'txtFind' + dialogArguments.CustomValue ) ;\r
+       return hasFound ;\r
 }\r
 \r
-function btnStat()\r
+function GetRegexExpr()\r
 {\r
-       GetE('btnReplace').disabled =\r
-               GetE('btnReplaceAll').disabled =\r
-                       GetE('btnFind').disabled =\r
-                               ( GetE(idMap["FindText"]).value.length == 0 ) ;\r
-}\r
-\r
-function btnStatDelayed()\r
-{\r
-       setTimeout( btnStat, 1 ) ;\r
-}\r
+       var sExpr = EscapeRegexString( document.getElementById('txtFind').value ) ;\r
 \r
-function GetSearchString()\r
-{\r
-       return GetE(idMap['FindText']).value ;\r
-}\r
+       if ( document.getElementById('chkWord').checked )\r
+               sExpr = '\\b' + sExpr + '\\b' ;\r
 \r
-function GetReplaceString()\r
-{\r
-       return GetE("txtReplace").value ;\r
+       return sExpr ;\r
 }\r
 \r
-function GetCheckCase()\r
+function GetCase()\r
 {\r
-       return !! ( GetE(idMap['CheckCase']).checked ) ;\r
+       return ( document.getElementById('chkCase').checked ? '' : 'i' ) ;\r
 }\r
 \r
-function GetMatchWord()\r
+function GetReplacement()\r
 {\r
-       return !! ( GetE(idMap['CheckWord']).checked ) ;\r
-}\r
-\r
-/* Is this character a unicode whitespace or a punctuation mark?\r
- * References:\r
- * http://unicode.org/Public/UNIDATA/PropList.txt (whitespaces)\r
- * http://php.chinaunix.net/manual/tw/ref.regex.php (punctuation marks)\r
- */\r
-function CheckIsWordSeparator( c )\r
-{\r
-       if ( !c )\r
-               return true;\r
-       var code = c.charCodeAt( 0 );\r
-       if ( code >= 9 && code <= 0xd )\r
-               return true;\r
-       if ( code >= 0x2000 && code <= 0x200a )\r
-               return true;\r
-       switch ( code )\r
-       {\r
-               case 0x20:\r
-               case 0x85:\r
-               case 0xa0:\r
-               case 0x1680:\r
-               case 0x180e:\r
-               case 0x2028:\r
-               case 0x2029:\r
-               case 0x202f:\r
-               case 0x205f:\r
-               case 0x3000:\r
-                       return true;\r
-               default:\r
-       }\r
-       return /[.,"'?!;:]/.test( c ) ;\r
-}\r
-\r
-FindRange = null ;\r
-function _Find()\r
-{\r
-       var searchString = GetSearchString() ;\r
-       if ( !FindRange )\r
-               FindRange = new CharacterRange( new CharacterCursor( EditorDocument ), searchString.length ) ;\r
-       else\r
-       {\r
-               FindRange.RemoveHighlight() ;\r
-               FindRange = FindRange.GetNextRange( searchString.length ) ;\r
-       }\r
-       var matcher = new KmpMatch( searchString, ! GetCheckCase() ) ;\r
-       var matchState = KMP_NOMATCH ;\r
-       var character = '%' ;\r
-\r
-       while ( character != null )\r
-       {\r
-               while ( ( character = FindRange.GetEndCharacter() ) )\r
-               {\r
-                       matchState = matcher.FeedCharacter( character ) ;\r
-                       if ( matchState == KMP_MATCHED )\r
-                               break ;\r
-                       if ( FindRange.MoveNext() )\r
-                               matcher.Reset() ;\r
-               }\r
-\r
-               if ( matchState == KMP_MATCHED )\r
-               {\r
-                       if ( GetMatchWord() )\r
-                       {\r
-                               var cursors = FindRange.GetCursors() ;\r
-                               var head = cursors[ cursors.length - 1 ].Clone() ;\r
-                               var tail = cursors[0].Clone() ;\r
-                               if ( !head.MoveNext() && !CheckIsWordSeparator( head.GetCharacter() ) )\r
-                                       continue ;\r
-                               if ( !tail.MoveBack() && !CheckIsWordSeparator( tail.GetCharacter() ) )\r
-                                       continue ;\r
-                       }\r
-\r
-                       FindRange.Highlight() ;\r
-                       return true ;\r
-               }\r
-       }\r
-\r
-       FindRange = null ;\r
-       return false ;\r
+       return document.getElementById('txtReplace').value.replace( /\$/g, '$$$$' ) ;\r
 }\r
 \r
-function Find()\r
+function EscapeRegexString( str )\r
 {\r
-       if ( ! _Find() )\r
-               alert( FCKLang.DlgFindNotFoundMsg ) ;\r
+       return str.replace( /[\\\^\$\*\+\?\{\}\.\(\)\!\|\[\]\-]/g, '\\$&' ) ;\r
 }\r
 \r
 function Replace()\r
 {\r
-       var saveUndoStep = function( selectRange )\r
-       {\r
-               var ieRange ;\r
-               if ( oEditor.FCKBrowserInfo.IsIE )\r
-                       ieRange = document.selection.createRange() ;\r
-\r
-               selectRange.Select() ;\r
-               oEditor.FCKUndo.SaveUndoStep() ;\r
-               var cloneRange = selectRange.Clone() ;\r
-               cloneRange.Collapse( false ) ;\r
-               cloneRange.Select() ;\r
-\r
-               if ( ieRange )\r
-                       setTimeout( function(){ ieRange.select() ; }, 1 ) ;\r
-       }\r
-\r
-       if ( FindRange && FindRange.GetHighlightDomRange() )\r
-       {\r
-               var range = FindRange.GetHighlightDomRange() ;\r
-               var bookmark = range.CreateBookmark() ;\r
-               FindRange.RemoveHighlight() ;\r
-               range.MoveToBookmark( bookmark ) ;\r
-\r
-               saveUndoStep( range ) ;\r
-               range.DeleteContents() ;\r
-               range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;\r
-               range._UpdateElementInfo() ;\r
-\r
-               FindRange = CharacterRange.CreateFromDomRange( range ) ;\r
-       }\r
-       else\r
-       {\r
-               if ( ! _Find() )\r
-               {\r
-                       FindRange && FindRange.RemoveHighlight() ;\r
-                       alert( FCKLang.DlgFindNotFoundMsg ) ;\r
-               }\r
-       }\r
+       var oRegex = new RegExp( GetRegexExpr(), GetCase() ) ;\r
+       if ( !ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, GetReplacement(), false, false ) )\r
+               alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ;\r
 }\r
 \r
 function ReplaceAll()\r
 {\r
-       oEditor.FCKUndo.SaveUndoStep() ;\r
-       var replaceCount = 0 ;\r
-\r
-       while ( _Find() )\r
-       {\r
-               var range = FindRange.GetHighlightDomRange() ;\r
-               var bookmark = range.CreateBookmark() ;\r
-               FindRange.RemoveHighlight() ;\r
-               range.MoveToBookmark( bookmark) ;\r
-\r
-               range.DeleteContents() ;\r
-               range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;\r
-               range._UpdateElementInfo() ;\r
-\r
-               FindRange = CharacterRange.CreateFromDomRange( range ) ;\r
-               replaceCount++ ;\r
-       }\r
-       if ( replaceCount == 0 )\r
-       {\r
-               FindRange && FindRange.RemoveHighlight() ;\r
-               alert( FCKLang.DlgFindNotFoundMsg ) ;\r
-       }\r
-       dialog.Cancel() ;\r
-}\r
-\r
-window.onunload = function()\r
-{\r
-       if ( FindRange )\r
-       {\r
-               FindRange.RemoveHighlight() ;\r
-               FindRange.ToDomRange().Select() ;\r
-       }\r
+       var oRegex = new RegExp( GetRegexExpr(), GetCase() + 'g' ) ;\r
+       if ( !ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, GetReplacement(), true, false ) )\r
+               alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ;\r
+       window.parent.Cancel() ;\r
 }\r
        </script>\r
 </head>\r
 <body onload="OnLoad()" style="overflow: hidden">\r
-       <div id="divFind" style="display: none">\r
-               <table cellspacing="3" cellpadding="2" width="100%" border="0">\r
-                       <tr>\r
-                               <td nowrap="nowrap">\r
-                                       <label for="txtFindFind" fcklang="DlgReplaceFindLbl">\r
-                                               Find what:</label>\r
-                               </td>\r
-                               <td width="100%">\r
-                                       <input id="txtFindFind" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"\r
-                                               type="text" />\r
-                               </td>\r
-                               <td>\r
-                                       <input id="btnFind" style="width: 80px" disabled="disabled" onclick="Find();"\r
-                                               type="button" value="Find" fcklang="DlgFindFindBtn" />\r
-                               </td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td valign="bottom" colspan="3">\r
-                                       &nbsp;<input id="chkCaseFind" tabindex="3" type="checkbox" /><label for="chkCaseFind" fcklang="DlgReplaceCaseChk">Match\r
-                                               case</label>\r
-                                       <br />\r
-                                       &nbsp;<input id="chkWordFind" tabindex="4" type="checkbox" /><label for="chkWordFind" fcklang="DlgReplaceWordChk">Match\r
-                                               whole word</label>\r
-                               </td>\r
-                       </tr>\r
-               </table>\r
-       </div>\r
-       <div id="divReplace" style="display:none">\r
-               <table cellspacing="3" cellpadding="2" width="100%" border="0">\r
-                       <tr>\r
-                               <td nowrap="nowrap">\r
-                                       <label for="txtFindReplace" fcklang="DlgReplaceFindLbl">\r
-                                               Find what:</label>\r
-                               </td>\r
-                               <td width="100%">\r
-                                       <input id="txtFindReplace" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"\r
-                                               type="text" />\r
-                               </td>\r
-                               <td>\r
-                                       <input id="btnReplace" style="width: 80px" disabled="disabled" onclick="Replace();"\r
-                                               type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" />\r
-                               </td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td valign="top" nowrap="nowrap">\r
-                                       <label for="txtReplace" fcklang="DlgReplaceReplaceLbl">\r
-                                               Replace with:</label>\r
-                               </td>\r
-                               <td valign="top">\r
-                                       <input id="txtReplace" style="width: 100%" tabindex="2" type="text" />\r
-                               </td>\r
-                               <td>\r
-                                       <input id="btnReplaceAll" style="width: 80px" disabled="disabled" onclick="ReplaceAll()" type="button"\r
-                                               value="Replace All" fcklang="DlgReplaceReplAllBtn" />\r
-                               </td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td valign="bottom" colspan="3">\r
-                                       &nbsp;<input id="chkCaseReplace" tabindex="3" type="checkbox" /><label for="chkCaseReplace" fcklang="DlgReplaceCaseChk">Match\r
-                                               case</label>\r
-                                       <br />\r
-                                       &nbsp;<input id="chkWordReplace" tabindex="4" type="checkbox" /><label for="chkWordReplace" fcklang="DlgReplaceWordChk">Match\r
-                                               whole word</label>\r
-                               </td>\r
-                       </tr>\r
-               </table>\r
-       </div>\r
+       <table cellspacing="3" cellpadding="2" width="100%" border="0">\r
+               <tr>\r
+                       <td nowrap="nowrap">\r
+                               <label for="txtFind" fcklang="DlgReplaceFindLbl">\r
+                                       Find what:</label>\r
+                       </td>\r
+                       <td width="100%">\r
+                               <input id="txtFind" onkeyup="btnStat(this.form)" style="width: 100%" tabindex="1"\r
+                                       type="text" />\r
+                       </td>\r
+                       <td>\r
+                               <input id="btnReplace" style="width: 100%" disabled="disabled" onclick="Replace();"\r
+                                       type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" />\r
+                       </td>\r
+               </tr>\r
+               <tr>\r
+                       <td valign="top" nowrap="nowrap">\r
+                               <label for="txtReplace" fcklang="DlgReplaceReplaceLbl">\r
+                                       Replace with:</label>\r
+                       </td>\r
+                       <td valign="top">\r
+                               <input id="txtReplace" style="width: 100%" tabindex="2" type="text" />\r
+                       </td>\r
+                       <td>\r
+                               <input id="btnReplaceAll" disabled="disabled" onclick="ReplaceAll()" type="button"\r
+                                       value="Replace All" fcklang="DlgReplaceReplAllBtn" />\r
+                       </td>\r
+               </tr>\r
+               <tr>\r
+                       <td valign="bottom" colspan="3">\r
+                               &nbsp;<input id="chkCase" tabindex="3" type="checkbox" /><label for="chkCase" fcklang="DlgReplaceCaseChk">Match\r
+                                       case</label>\r
+                               <br />\r
+                               &nbsp;<input id="chkWord" tabindex="4" type="checkbox" /><label for="chkWord" fcklang="DlgReplaceWordChk">Match\r
+                                       whole word</label>\r
+                       </td>\r
+               </tr>\r
+       </table>\r
 </body>\r
 </html>\r