import torrus 1.0.9
[freeside.git] / httemplate / elements / fckeditor / editor / dialog / fck_replace.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\r
2 <!--\r
3  * FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
4  * Copyright (C) 2003-2010 Frederico Caldeira Knabben\r
5  *\r
6  * == BEGIN LICENSE ==\r
7  *\r
8  * Licensed under the terms of any of the following licenses at your\r
9  * choice:\r
10  *\r
11  *  - GNU General Public License Version 2 or later (the "GPL")\r
12  *    http://www.gnu.org/licenses/gpl.html\r
13  *\r
14  *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")\r
15  *    http://www.gnu.org/licenses/lgpl.html\r
16  *\r
17  *  - Mozilla Public License Version 1.1 or later (the "MPL")\r
18  *    http://www.mozilla.org/MPL/MPL-1.1.html\r
19  *\r
20  * == END LICENSE ==\r
21  *\r
22  * "Find" and "Replace" dialog box window.\r
23 -->\r
24 <html xmlns="http://www.w3.org/1999/xhtml">\r
25 <head>\r
26         <title></title>\r
27         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r
28         <meta content="noindex, nofollow" name="robots" />\r
29         <script src="common/fck_dialog_common.js" type="text/javascript"></script>\r
30         <script type="text/javascript">\r
31 \r
32 var dialog      = window.parent ;\r
33 var oEditor = dialog.InnerDialogLoaded() ;\r
34 var dialogArguments = dialog.Args() ;\r
35 \r
36 var FCKLang = oEditor.FCKLang ;\r
37 var FCKDomTools = oEditor.FCKDomTools ;\r
38 var FCKDomRange = oEditor.FCKDomRange ;\r
39 var FCKListsLib = oEditor.FCKListsLib ;\r
40 var FCKTools = oEditor.FCKTools ;\r
41 var EditorDocument = oEditor.FCK.EditorDocument ;\r
42 var HighlightStyle = oEditor.FCKStyles.GetStyle( '_FCK_SelectionHighlight' )  ;\r
43 \r
44 dialog.AddTab( 'Find', FCKLang.DlgFindTitle ) ;\r
45 dialog.AddTab( 'Replace', FCKLang.DlgReplaceTitle ) ;\r
46 var idMap = {} ;\r
47 \r
48 function OnDialogTabChange( tabCode )\r
49 {\r
50         ShowE( 'divFind', ( tabCode == 'Find' ) ) ;\r
51         ShowE( 'divReplace', ( tabCode == 'Replace' ) ) ;\r
52         idMap['FindText'] = 'txtFind' + tabCode ;\r
53         idMap['CheckCase'] = 'chkCase' + tabCode ;\r
54         idMap['CheckWord'] = 'chkWord' + tabCode ;\r
55 \r
56         if ( tabCode == 'Replace' )\r
57                 dialog.SetAutoSize( true ) ;\r
58 }\r
59 \r
60 GetNextNonEmptyTextNode = function( node, stopNode )\r
61 {\r
62         while ( ( node = FCKDomTools.GetNextSourceNode( node, false, 3, stopNode ) ) && node && node.length < 1 )\r
63                 1 ;\r
64         return node ;\r
65 }\r
66 \r
67 CharacterCursor = function( arg )\r
68 {\r
69         if ( arg.nodeType && arg.nodeType == 9 )\r
70         {\r
71                 this._textNode = GetNextNonEmptyTextNode( arg.body, arg.documentElement ) ;\r
72                 this._offset = 0 ;\r
73                 this._doc = arg ;\r
74         }\r
75         else\r
76         {\r
77                 this._textNode = arguments[0] ;\r
78                 this._offset = arguments[1] ;\r
79                 this._doc = FCKTools.GetElementDocument( arguments[0] ) ;\r
80         }\r
81 }\r
82 CharacterCursor.prototype =\r
83 {\r
84         GetCharacter : function()\r
85         {\r
86                 return ( this._textNode && this._textNode.nodeValue.charAt( this._offset ) ) || null ;\r
87         },\r
88 \r
89         // Non-normalized.\r
90         GetTextNode : function()\r
91         {\r
92                 return this._textNode ;\r
93         },\r
94 \r
95         // Non-normalized.\r
96         GetIndex : function()\r
97         {\r
98                 return this._offset ;\r
99         },\r
100 \r
101         // Return value means whehther we've crossed a line break or a paragraph boundary.\r
102         MoveNext : function()\r
103         {\r
104                 if ( this._offset < this._textNode.length - 1 )\r
105                 {\r
106                         this._offset++ ;\r
107                         return false ;\r
108                 }\r
109 \r
110                 var crossed = false ;\r
111                 var curNode = this._textNode ;\r
112                 while ( ( curNode = FCKDomTools.GetNextSourceNode( curNode ) )\r
113                                 && curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )\r
114                 {\r
115                         var tag = curNode.nodeName.toLowerCase() ;\r
116                         if ( FCKListsLib.BlockElements[tag] || tag == 'br' )\r
117                                 crossed = true ;\r
118                 }\r
119 \r
120                 this._textNode = curNode ;\r
121                 this._offset = 0 ;\r
122                 return crossed ;\r
123         },\r
124 \r
125         // Return value means whehther we've crossed a line break or a paragraph boundary.\r
126         MoveBack : function()\r
127         {\r
128                 if ( this._offset > 0 && this._textNode.length > 0 )\r
129                 {\r
130                         this._offset = Math.min( this._offset - 1, this._textNode.length - 1 ) ;\r
131                         return false ;\r
132                 }\r
133 \r
134                 var crossed = false ;\r
135                 var curNode = this._textNode ;\r
136                 while ( ( curNode = FCKDomTools.GetPreviousSourceNode( curNode ) )\r
137                                 && curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )\r
138                 {\r
139                         var tag = curNode.nodeName.toLowerCase() ;\r
140                         if ( FCKListsLib.BlockElements[tag] || tag == 'br' )\r
141                                 crossed = true ;\r
142                 }\r
143 \r
144                 this._textNode = curNode ;\r
145                 this._offset = curNode && curNode.length - 1 ;\r
146                 return crossed ;\r
147         },\r
148 \r
149         Clone : function()\r
150         {\r
151                 return new CharacterCursor( this._textNode, this._offset ) ;\r
152         }\r
153 } ;\r
154 \r
155 CharacterRange = function( initCursor, maxLength )\r
156 {\r
157         this._cursors = initCursor.push ? initCursor : [initCursor] ;\r
158         this._maxLength = maxLength ;\r
159         this._highlightRange = null ;\r
160 }\r
161 CharacterRange.prototype =\r
162 {\r
163         ToDomRange : function()\r
164         {\r
165                 var firstCursor = this._cursors[0] ;\r
166                 var lastCursor = this._cursors[ this._cursors.length - 1 ] ;\r
167                 var domRange = new FCKDomRange( FCKTools.GetElementWindow( firstCursor.GetTextNode() ) ) ;\r
168                 var w3cRange = domRange._Range = domRange.CreateRange() ;\r
169                 w3cRange.setStart( firstCursor.GetTextNode(), firstCursor.GetIndex() ) ;\r
170                 w3cRange.setEnd( lastCursor.GetTextNode(), lastCursor.GetIndex() + 1 ) ;\r
171                 domRange._UpdateElementInfo() ;\r
172                 return domRange ;\r
173         },\r
174 \r
175         Highlight : function()\r
176         {\r
177                 if ( this._cursors.length < 1 )\r
178                         return ;\r
179 \r
180                 var domRange = this.ToDomRange() ;\r
181                 HighlightStyle.ApplyToRange( domRange, false, true ) ;\r
182                 this._highlightRange = domRange ;\r
183 \r
184                 var charRange = CharacterRange.CreateFromDomRange( domRange ) ;\r
185                 var focusNode = domRange.StartNode ;\r
186                 if ( focusNode.nodeType != 1 )\r
187                         focusNode = focusNode.parentNode ;\r
188                 FCKDomTools.ScrollIntoView( focusNode, false ) ;\r
189                 this._cursors = charRange._cursors ;\r
190         },\r
191 \r
192         RemoveHighlight : function()\r
193         {\r
194                 if ( this._highlightRange )\r
195                 {\r
196                         HighlightStyle.RemoveFromRange( this._highlightRange, false, true ) ;\r
197                         var charRange = CharacterRange.CreateFromDomRange( this._highlightRange ) ;\r
198                         this._cursors = charRange._cursors ;\r
199                         this._highlightRange = null ;\r
200                 }\r
201         },\r
202 \r
203         GetHighlightDomRange : function()\r
204         {\r
205                 return this._highlightRange;\r
206         },\r
207 \r
208         MoveNext : function()\r
209         {\r
210                 var next = this._cursors[ this._cursors.length - 1 ].Clone() ;\r
211                 var retval = next.MoveNext() ;\r
212                 if ( retval )\r
213                         this._cursors = [] ;\r
214                 this._cursors.push( next ) ;\r
215                 if ( this._cursors.length > this._maxLength )\r
216                         this._cursors.shift() ;\r
217                 return retval ;\r
218         },\r
219 \r
220         MoveBack : function()\r
221         {\r
222                 var prev = this._cursors[0].Clone() ;\r
223                 var retval = prev.MoveBack() ;\r
224                 if ( retval )\r
225                         this._cursors = [] ;\r
226                 this._cursors.unshift( prev ) ;\r
227                 if ( this._cursors.length > this._maxLength )\r
228                         this._cursors.pop() ;\r
229                 return retval ;\r
230         },\r
231 \r
232         GetEndCharacter : function()\r
233         {\r
234                 if ( this._cursors.length < 1 )\r
235                         return null ;\r
236                 var retval = this._cursors[ this._cursors.length - 1 ].GetCharacter() ;\r
237                 return retval ;\r
238         },\r
239 \r
240         GetNextRange : function( len )\r
241         {\r
242                 if ( this._cursors.length == 0 )\r
243                         return null ;\r
244                 var cur = this._cursors[ this._cursors.length - 1 ].Clone() ;\r
245                 cur.MoveNext() ;\r
246                 return new CharacterRange( cur, len ) ;\r
247         },\r
248 \r
249         GetCursors : function()\r
250         {\r
251                 return this._cursors ;\r
252         }\r
253 } ;\r
254 \r
255 CharacterRange.CreateFromDomRange = function( domRange )\r
256 {\r
257         var w3cRange = domRange._Range ;\r
258         var startContainer = w3cRange.startContainer ;\r
259         var endContainer = w3cRange.endContainer ;\r
260         var startTextNode, startIndex, endTextNode, endIndex ;\r
261 \r
262         if ( startContainer.nodeType == 3 )\r
263         {\r
264                 startTextNode = startContainer ;\r
265                 startIndex = w3cRange.startOffset ;\r
266         }\r
267         else if ( domRange.StartNode.nodeType == 3 )\r
268         {\r
269                 startTextNode = domRange.StartNode ;\r
270                 startIndex = 0 ;\r
271         }\r
272         else\r
273         {\r
274                 startTextNode = GetNextNonEmptyTextNode( domRange.StartNode, domRange.StartNode.parentNode ) ;\r
275                 if ( !startTextNode )\r
276                         return null ;\r
277                 startIndex = 0 ;\r
278         }\r
279 \r
280         if ( endContainer.nodeType == 3 && w3cRange.endOffset > 0 )\r
281         {\r
282                 endTextNode = endContainer ;\r
283                 endIndex = w3cRange.endOffset - 1 ;\r
284         }\r
285         else\r
286         {\r
287                 endTextNode = domRange.EndNode ;\r
288                 while ( endTextNode.nodeType != 3 )\r
289                         endTextNode = endTextNode.lastChild ;\r
290                 endIndex = endTextNode.length - 1 ;\r
291         }\r
292 \r
293         var cursors = [] ;\r
294         var current = new CharacterCursor( startTextNode, startIndex ) ;\r
295         cursors.push( current ) ;\r
296         if ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) && !domRange.CheckIsEmpty() )\r
297         {\r
298                 do\r
299                 {\r
300                         current = current.Clone() ;\r
301                         current.MoveNext() ;\r
302                         cursors.push( current ) ;\r
303                 }\r
304                 while ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) ) ;\r
305         }\r
306 \r
307         return new CharacterRange( cursors, cursors.length ) ;\r
308 }\r
309 \r
310 // Knuth-Morris-Pratt Algorithm for stream input\r
311 KMP_NOMATCH = 0 ;\r
312 KMP_ADVANCED = 1 ;\r
313 KMP_MATCHED = 2 ;\r
314 KmpMatch = function( pattern, ignoreCase )\r
315 {\r
316         var overlap = [ -1 ] ;\r
317         for ( var i = 0 ; i < pattern.length ; i++ )\r
318         {\r
319                 overlap.push( overlap[i] + 1 ) ;\r
320                 while ( overlap[ i + 1 ] > 0 && pattern.charAt( i ) != pattern.charAt( overlap[ i + 1 ] - 1 ) )\r
321                         overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1 ;\r
322         }\r
323         this._Overlap = overlap ;\r
324         this._State = 0 ;\r
325         this._IgnoreCase = ( ignoreCase === true ) ;\r
326         if ( ignoreCase )\r
327                 this.Pattern = pattern.toLowerCase();\r
328         else\r
329                 this.Pattern = pattern ;\r
330 }\r
331 KmpMatch.prototype = {\r
332         FeedCharacter : function( c )\r
333         {\r
334                 if ( this._IgnoreCase )\r
335                         c = c.toLowerCase();\r
336 \r
337                 while ( true )\r
338                 {\r
339                         if ( c == this.Pattern.charAt( this._State ) )\r
340                         {\r
341                                 this._State++ ;\r
342                                 if ( this._State == this.Pattern.length )\r
343                                 {\r
344                                         // found a match, start over, don't care about partial matches involving the current match\r
345                                         this._State = 0;\r
346                                         return KMP_MATCHED;\r
347                                 }\r
348                                 return KMP_ADVANCED ;\r
349                         }\r
350                         else if ( this._State == 0 )\r
351                                 return KMP_NOMATCH;\r
352                         else\r
353                                 this._State = this._Overlap[ this._State ];\r
354                 }\r
355 \r
356                 return null ;\r
357         },\r
358 \r
359         Reset : function()\r
360         {\r
361                 this._State = 0 ;\r
362         }\r
363 };\r
364 \r
365 // Place a range at the start of document.\r
366 function OnLoad()\r
367 {\r
368         // First of all, translate the dialog box texts.\r
369         oEditor.FCKLanguageManager.TranslatePage( document ) ;\r
370 \r
371         // Show the appropriate tab at startup.\r
372         if ( dialogArguments.CustomValue == 'Find' )\r
373         {\r
374                 dialog.SetSelectedTab( 'Find' ) ;\r
375                 dialog.SetAutoSize( true ) ;\r
376         }\r
377         else\r
378                 dialog.SetSelectedTab( 'Replace' ) ;\r
379 \r
380         SelectField( 'txtFind' + dialogArguments.CustomValue ) ;\r
381 }\r
382 \r
383 function btnStat()\r
384 {\r
385         GetE('btnReplace').disabled =\r
386                 GetE('btnReplaceAll').disabled =\r
387                         GetE('btnFind').disabled =\r
388                                 ( GetE(idMap["FindText"]).value.length == 0 ) ;\r
389 }\r
390 \r
391 function btnStatDelayed()\r
392 {\r
393         setTimeout( btnStat, 1 ) ;\r
394 }\r
395 \r
396 function GetSearchString()\r
397 {\r
398         return GetE(idMap['FindText']).value ;\r
399 }\r
400 \r
401 function GetReplaceString()\r
402 {\r
403         return GetE("txtReplace").value ;\r
404 }\r
405 \r
406 function GetCheckCase()\r
407 {\r
408         return !! ( GetE(idMap['CheckCase']).checked ) ;\r
409 }\r
410 \r
411 function GetMatchWord()\r
412 {\r
413         return !! ( GetE(idMap['CheckWord']).checked ) ;\r
414 }\r
415 \r
416 /* Is this character a unicode whitespace or a punctuation mark?\r
417  * References:\r
418  * http://unicode.org/Public/UNIDATA/PropList.txt (whitespaces)\r
419  * http://php.chinaunix.net/manual/tw/ref.regex.php (punctuation marks)\r
420  */\r
421 function CheckIsWordSeparator( c )\r
422 {\r
423         if ( !c )\r
424                 return true;\r
425         var code = c.charCodeAt( 0 );\r
426         if ( code >= 9 && code <= 0xd )\r
427                 return true;\r
428         if ( code >= 0x2000 && code <= 0x200a )\r
429                 return true;\r
430         switch ( code )\r
431         {\r
432                 case 0x20:\r
433                 case 0x85:\r
434                 case 0xa0:\r
435                 case 0x1680:\r
436                 case 0x180e:\r
437                 case 0x2028:\r
438                 case 0x2029:\r
439                 case 0x202f:\r
440                 case 0x205f:\r
441                 case 0x3000:\r
442                         return true;\r
443                 default:\r
444         }\r
445         return /[.,"'?!;:]/.test( c ) ;\r
446 }\r
447 \r
448 FindRange = null ;\r
449 function _Find()\r
450 {\r
451         var searchString = GetSearchString() ;\r
452         if ( !FindRange )\r
453                 FindRange = new CharacterRange( new CharacterCursor( EditorDocument ), searchString.length ) ;\r
454         else\r
455         {\r
456                 FindRange.RemoveHighlight() ;\r
457                 FindRange = FindRange.GetNextRange( searchString.length ) ;\r
458         }\r
459         var matcher = new KmpMatch( searchString, ! GetCheckCase() ) ;\r
460         var matchState = KMP_NOMATCH ;\r
461         var character = '%' ;\r
462 \r
463         while ( character != null )\r
464         {\r
465                 while ( ( character = FindRange.GetEndCharacter() ) )\r
466                 {\r
467                         matchState = matcher.FeedCharacter( character ) ;\r
468                         if ( matchState == KMP_MATCHED )\r
469                                 break ;\r
470                         if ( FindRange.MoveNext() )\r
471                                 matcher.Reset() ;\r
472                 }\r
473 \r
474                 if ( matchState == KMP_MATCHED )\r
475                 {\r
476                         if ( GetMatchWord() )\r
477                         {\r
478                                 var cursors = FindRange.GetCursors() ;\r
479                                 var head = cursors[ cursors.length - 1 ].Clone() ;\r
480                                 var tail = cursors[0].Clone() ;\r
481                                 if ( !head.MoveNext() && !CheckIsWordSeparator( head.GetCharacter() ) )\r
482                                         continue ;\r
483                                 if ( !tail.MoveBack() && !CheckIsWordSeparator( tail.GetCharacter() ) )\r
484                                         continue ;\r
485                         }\r
486 \r
487                         FindRange.Highlight() ;\r
488                         return true ;\r
489                 }\r
490         }\r
491 \r
492         FindRange = null ;\r
493         return false ;\r
494 }\r
495 \r
496 function Find()\r
497 {\r
498         if ( ! _Find() )\r
499                 alert( FCKLang.DlgFindNotFoundMsg ) ;\r
500 }\r
501 \r
502 function Replace()\r
503 {\r
504         var saveUndoStep = function( selectRange )\r
505         {\r
506                 var ieRange ;\r
507                 if ( oEditor.FCKBrowserInfo.IsIE )\r
508                         ieRange = document.selection.createRange() ;\r
509 \r
510                 selectRange.Select() ;\r
511                 oEditor.FCKUndo.SaveUndoStep() ;\r
512                 var cloneRange = selectRange.Clone() ;\r
513                 cloneRange.Collapse( false ) ;\r
514                 cloneRange.Select() ;\r
515 \r
516                 if ( ieRange )\r
517                         setTimeout( function(){ ieRange.select() ; }, 1 ) ;\r
518         }\r
519 \r
520         if ( FindRange && FindRange.GetHighlightDomRange() )\r
521         {\r
522                 var range = FindRange.GetHighlightDomRange() ;\r
523                 var bookmark = range.CreateBookmark() ;\r
524                 FindRange.RemoveHighlight() ;\r
525                 range.MoveToBookmark( bookmark ) ;\r
526 \r
527                 saveUndoStep( range ) ;\r
528                 range.DeleteContents() ;\r
529                 range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;\r
530                 range._UpdateElementInfo() ;\r
531 \r
532                 FindRange = CharacterRange.CreateFromDomRange( range ) ;\r
533         }\r
534         else\r
535         {\r
536                 if ( ! _Find() )\r
537                 {\r
538                         FindRange && FindRange.RemoveHighlight() ;\r
539                         alert( FCKLang.DlgFindNotFoundMsg ) ;\r
540                 }\r
541         }\r
542 }\r
543 \r
544 function ReplaceAll()\r
545 {\r
546         oEditor.FCKUndo.SaveUndoStep() ;\r
547         var replaceCount = 0 ;\r
548 \r
549         while ( _Find() )\r
550         {\r
551                 var range = FindRange.GetHighlightDomRange() ;\r
552                 var bookmark = range.CreateBookmark() ;\r
553                 FindRange.RemoveHighlight() ;\r
554                 range.MoveToBookmark( bookmark) ;\r
555 \r
556                 range.DeleteContents() ;\r
557                 range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;\r
558                 range._UpdateElementInfo() ;\r
559 \r
560                 FindRange = CharacterRange.CreateFromDomRange( range ) ;\r
561                 replaceCount++ ;\r
562         }\r
563         if ( replaceCount == 0 )\r
564         {\r
565                 FindRange && FindRange.RemoveHighlight() ;\r
566                 alert( FCKLang.DlgFindNotFoundMsg ) ;\r
567         }\r
568         dialog.Cancel() ;\r
569 }\r
570 \r
571 window.onunload = function()\r
572 {\r
573         if ( FindRange )\r
574         {\r
575                 FindRange.RemoveHighlight() ;\r
576                 FindRange.ToDomRange().Select() ;\r
577         }\r
578 }\r
579         </script>\r
580 </head>\r
581 <body onload="OnLoad()" style="overflow: hidden">\r
582         <div id="divFind" style="display: none">\r
583                 <table cellspacing="3" cellpadding="2" width="100%" border="0">\r
584                         <tr>\r
585                                 <td nowrap="nowrap">\r
586                                         <label for="txtFindFind" fcklang="DlgReplaceFindLbl">\r
587                                                 Find what:</label>\r
588                                 </td>\r
589                                 <td width="100%">\r
590                                         <input id="txtFindFind" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"\r
591                                                 type="text" />\r
592                                 </td>\r
593                                 <td>\r
594                                         <input id="btnFind" style="width: 80px" disabled="disabled" onclick="Find();"\r
595                                                 type="button" value="Find" fcklang="DlgFindFindBtn" />\r
596                                 </td>\r
597                         </tr>\r
598                         <tr>\r
599                                 <td valign="bottom" colspan="3">\r
600                                         &nbsp;<input id="chkCaseFind" tabindex="3" type="checkbox" /><label for="chkCaseFind" fcklang="DlgReplaceCaseChk">Match\r
601                                                 case</label>\r
602                                         <br />\r
603                                         &nbsp;<input id="chkWordFind" tabindex="4" type="checkbox" /><label for="chkWordFind" fcklang="DlgReplaceWordChk">Match\r
604                                                 whole word</label>\r
605                                 </td>\r
606                         </tr>\r
607                 </table>\r
608         </div>\r
609         <div id="divReplace" style="display:none">\r
610                 <table cellspacing="3" cellpadding="2" width="100%" border="0">\r
611                         <tr>\r
612                                 <td nowrap="nowrap">\r
613                                         <label for="txtFindReplace" fcklang="DlgReplaceFindLbl">\r
614                                                 Find what:</label>\r
615                                 </td>\r
616                                 <td width="100%">\r
617                                         <input id="txtFindReplace" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"\r
618                                                 type="text" />\r
619                                 </td>\r
620                                 <td>\r
621                                         <input id="btnReplace" style="width: 80px" disabled="disabled" onclick="Replace();"\r
622                                                 type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" />\r
623                                 </td>\r
624                         </tr>\r
625                         <tr>\r
626                                 <td valign="top" nowrap="nowrap">\r
627                                         <label for="txtReplace" fcklang="DlgReplaceReplaceLbl">\r
628                                                 Replace with:</label>\r
629                                 </td>\r
630                                 <td valign="top">\r
631                                         <input id="txtReplace" style="width: 100%" tabindex="2" type="text" />\r
632                                 </td>\r
633                                 <td>\r
634                                         <input id="btnReplaceAll" style="width: 80px" disabled="disabled" onclick="ReplaceAll()" type="button"\r
635                                                 value="Replace All" fcklang="DlgReplaceReplAllBtn" />\r
636                                 </td>\r
637                         </tr>\r
638                         <tr>\r
639                                 <td valign="bottom" colspan="3">\r
640                                         &nbsp;<input id="chkCaseReplace" tabindex="3" type="checkbox" /><label for="chkCaseReplace" fcklang="DlgReplaceCaseChk">Match\r
641                                                 case</label>\r
642                                         <br />\r
643                                         &nbsp;<input id="chkWordReplace" tabindex="4" type="checkbox" /><label for="chkWordReplace" fcklang="DlgReplaceWordChk">Match\r
644                                                 whole word</label>\r
645                                 </td>\r
646                         </tr>\r
647                 </table>\r
648         </div>\r
649 </body>\r
650 </html>\r