bgneal@45: tinyMCEPopup.requireLangPack();
bgneal@45: 
bgneal@45: var SearchReplaceDialog = {
bgneal@45: 	init : function(ed) {
bgneal@45: 		var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
bgneal@45: 
bgneal@45: 		this.switchMode(m);
bgneal@45: 
bgneal@45: 		f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");
bgneal@45: 
bgneal@45: 		// Focus input field
bgneal@45: 		f[m + '_panel_searchstring'].focus();
bgneal@45: 	},
bgneal@45: 
bgneal@45: 	switchMode : function(m) {
bgneal@45: 		var f, lm = this.lastMode;
bgneal@45: 
bgneal@45: 		if (lm != m) {
bgneal@45: 			f = document.forms[0];
bgneal@45: 
bgneal@45: 			if (lm) {
bgneal@45: 				f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;
bgneal@45: 				f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;
bgneal@45: 				f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;
bgneal@45: 				f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;
bgneal@45: 			}
bgneal@45: 
bgneal@45: 			mcTabs.displayTab(m + '_tab',  m + '_panel');
bgneal@45: 			document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";
bgneal@45: 			document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";
bgneal@45: 			this.lastMode = m;
bgneal@45: 		}
bgneal@45: 	},
bgneal@45: 
bgneal@45: 	searchNext : function(a) {
bgneal@45: 		var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;
bgneal@45: 
bgneal@45: 		// Get input
bgneal@45: 		f = document.forms[0];
bgneal@45: 		s = f[m + '_panel_searchstring'].value;
bgneal@45: 		b = f[m + '_panel_backwardsu'].checked;
bgneal@45: 		ca = f[m + '_panel_casesensitivebox'].checked;
bgneal@45: 		rs = f['replace_panel_replacestring'].value;
bgneal@45: 
bgneal@45: 		if (s == '')
bgneal@45: 			return;
bgneal@45: 
bgneal@45: 		function fix() {
bgneal@45: 			// Correct Firefox graphics glitches
bgneal@45: 			r = se.getRng().cloneRange();
bgneal@45: 			ed.getDoc().execCommand('SelectAll', false, null);
bgneal@45: 			se.setRng(r);
bgneal@45: 		};
bgneal@45: 
bgneal@45: 		function replace() {
bgneal@45: 			if (tinymce.isIE)
bgneal@45: 				ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE
bgneal@45: 			else
bgneal@45: 				ed.getDoc().execCommand('InsertHTML', false, rs);
bgneal@45: 		};
bgneal@45: 
bgneal@45: 		// IE flags
bgneal@45: 		if (ca)
bgneal@45: 			fl = fl | 4;
bgneal@45: 
bgneal@45: 		switch (a) {
bgneal@45: 			case 'all':
bgneal@45: 				// Move caret to beginning of text
bgneal@45: 				ed.execCommand('SelectAll');
bgneal@45: 				ed.selection.collapse(true);
bgneal@45: 
bgneal@45: 				if (tinymce.isIE) {
bgneal@45: 					while (r.findText(s, b ? -1 : 1, fl)) {
bgneal@45: 						r.scrollIntoView();
bgneal@45: 						r.select();
bgneal@45: 						replace();
bgneal@45: 						fo = 1;
bgneal@183: 
bgneal@183: 						if (b) {
bgneal@183: 							r.moveEnd("character", -(rs.length)); // Otherwise will loop forever
bgneal@183: 						}
bgneal@45: 					}
bgneal@45: 
bgneal@45: 					tinyMCEPopup.storeSelection();
bgneal@45: 				} else {
bgneal@45: 					while (w.find(s, ca, b, false, false, false, false)) {
bgneal@45: 						replace();
bgneal@45: 						fo = 1;
bgneal@45: 					}
bgneal@45: 				}
bgneal@45: 
bgneal@45: 				if (fo)
bgneal@45: 					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));
bgneal@45: 				else
bgneal@45: 					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
bgneal@45: 
bgneal@45: 				return;
bgneal@45: 
bgneal@45: 			case 'current':
bgneal@45: 				if (!ed.selection.isCollapsed())
bgneal@45: 					replace();
bgneal@45: 
bgneal@45: 				break;
bgneal@45: 		}
bgneal@45: 
bgneal@45: 		se.collapse(b);
bgneal@45: 		r = se.getRng();
bgneal@45: 
bgneal@45: 		// Whats the point
bgneal@45: 		if (!s)
bgneal@45: 			return;
bgneal@45: 
bgneal@45: 		if (tinymce.isIE) {
bgneal@45: 			if (r.findText(s, b ? -1 : 1, fl)) {
bgneal@45: 				r.scrollIntoView();
bgneal@45: 				r.select();
bgneal@45: 			} else
bgneal@45: 				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
bgneal@45: 
bgneal@45: 			tinyMCEPopup.storeSelection();
bgneal@45: 		} else {
bgneal@45: 			if (!w.find(s, ca, b, false, false, false, false))
bgneal@45: 				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
bgneal@45: 			else
bgneal@45: 				fix();
bgneal@45: 		}
bgneal@45: 	}
bgneal@45: };
bgneal@45: 
bgneal@45: tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);