//init variables var isRichText = false; var rng; var currentRTE; var allRTEs = ""; var isIE; var isGecko; var imagesPath; var includesPath; var cssFile; var use_textarea=false; var win_content_width,win_content_height; function initRTE(imgPath, incPath, css){ //check to see if designMode mode is available if (document.getElementById && document.designMode) isRichText = true; //set browser vars var ua = navigator.userAgent.toLowerCase(); isIE = ((ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1)); isGecko = (ua.indexOf("gecko") != -1 && ua.indexOf("safari") == -1); //set paths vars imagesPath = imgPath; includesPath = incPath; cssFile = css; //for testing standard textarea, uncomment the following line //isRichText = false; } function create_rich_text(rte, html, width, height, buttons, readOnly, use_textarea, enable_view_source){ if(isRichText) { if(allRTEs.length>0)allRTEs += ";"; allRTEs += rte; writeRTE(rte, html, width, height, buttons, readOnly,use_textarea,enable_view_source); }else{ default_create_rich_text(rte, html, width, height, buttons, readOnly); } } function default_create_rich_text(rte, html, width, height, buttons, readOnly) { if (!readOnly) { document.writeln('');//width: ' + width + 'px; } else { document.writeln('');//width: ' + width + 'px; } } function writeRTE(rte, html, width, height, buttons, readOnly,use_textarea,enable_view_source){ if(parent.main_rte_loaded_status){return;} main_rte_loaded_status=false; if (readOnly) buttons = false; if (buttons == true) { document.writeln(''); document.writeln(''); //document.writeln(''); //width="' + width + 'px" if(enable_view_source){ if(!readOnly)document.writeln(''); }else{ if(!readOnly)document.writeln('
'); } document.writeln(''); document.writeln('
'); document.writeln(''); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(''); if(use_textarea){ document.writeln(''); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln('
'); document.writeln(' Check Spelling'); document.writeln('
'); } if(!use_textarea){ document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); //document.writeln(' '); //document.writeln('
'); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln('
'); //document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); document.writeln(' '); //document.writeln(' '); //if (isIE) THEN MAKE SPELLCHECKER document.writeln(' '); document.writeln(' '); //document.writeln(' '); //document.writeln(' '); //document.writeln(' '); //document.writeln(' '); //document.writeln(' '); //document.writeln(' '); //document.writeln(' '); document.writeln(' '); document.writeln('
BoldItalicUnderline Align LeftCenterAlign RightJustify Full Ordered ListUnordered List OutdentIndent
Text Color
Background Color
Insert LinkAdd ImageSpell Check df Check Spelling CutCopyPaste UndoRedo
'); }else{ document.writeln('
'); } } if(use_textarea){ document.writeln(''); }else{ document.writeln(''); //style="display: block;" } document.writeln('
 View Source
'); document.getElementById('hdn' + rte).value = html; if(!use_textarea){enableDesignMode(rte, html, readOnly);} enableDesignMode('spellcheck_' + rte, html, true); if(!use_textarea){rte_design_mode_handlers();} spellcheck_RTEinit(); } ////////////////////////////////////// // MY CUSTOM JAVASCRIPT FUNCTIONS // ////////////////////////////////////// //IE6 bug?: even if the onload event handlers are removed, toggling on designMode calls those event handlers - none of the following will prevent RTEinit from being called twice: rteElt.onload = null; rteElt.detachEvent('onload', rteElt); rteElt.setAttribute('onload', null); rteElt.contentWindow.onload = null; rteElt.contentWindow.detachEvent('onload', rteElt); so make sure this function never executes more than once (this should get rid of some infinite onload loop problems) function spellcheck_RTEinit(){ if(spellcheck_rte_loaded_status){return;} spellcheck_rte_loaded_status=true; var rteElt = document.getElementById('spellcheck_main_rte'); var rteWin = rteElt.contentWindow; var rte = rteWin.document; rteElt.onload = null; setTimeout(function(){ if(rte.addEventListener){ //Gecko: onevent properties don't work (e.g. rte.onclick doesn't work) so DOM2 events must be used rte.addEventListener('keypress', spellcheck_rte_keypress, false); //Gecko: default action of key accelerators (i.e. hotkeys) occurs onkeypress rte.addEventListener('click', spellcheck_rte_onclick, false); }else if(rte.attachEvent){ //IE: attachEvent for ie keydown for shortcuts rte.attachEvent('onkeydown', spellcheck_rte_keypress); //IE: default action of key accelerators occurs onkeydown rte.attachEvent('onclick', spellcheck_rte_onclick); } rteWin.focus(); }, 0); } function spellcheck_rte_onclick(){ //if user clicks the checkspeller text area and a checkspeller suggestion div exists then hide the suggestion div if(!spelling_suggestions_div_active){ spelling_suggestions_div_active=false; spelling_suggestions_div.style.display = "none"; return; } } //note: Gecko doesn't support formatting key accelerators, e.g. ctrl-I, ctrl-B (bug 191190) function spellcheck_rte_keypress(evt){ var keyCode = evt.keyCode || evt.charCode; evt = evt || window.event; //backspace (makesbrowser go back) so stop this action from occuring if(keyCode==8){ try{evt.preventDefault();}catch(e){} return false; } if(evt.ctrlKey){ var keyCode = evt.keyCode || evt.charCode; //IE: keyCode | Gecko: charCode (uses keyCode for keys that aren't characters, e.g. left arrow, and for keydown and keyup events) switch (keyCode) { case 67: //ctrl-c case 86: //ctrl-v case 88: //ctrl-x return; } //ctrl-(anything else) if(evt.preventDefault){ evt.preventDefault(); }else{ evt.returnValue = false; } } } function spellcheck_recheck(rte){ clean_spellcheck_source_remove_spans(); var spellcheck_frame = window.frames['spellcheck_main_rte'].document; src_pre_spell_checker=spellcheck_frame.body.innerHTML; spellcheck_status_busy(true); parent.xajax_spell_checker(src_pre_spell_checker); } function document_width_height(){ //opera Netscape 6 Netscape 4x Mozilla if (window.innerWidth || window.innerHeight){ docwidth = window.innerWidth; docheight = window.innerHeight; win_content_width=docwidth; win_content_height=docheight; } //IE Mozilla if (document.body.clientWidth || document.body.clientHeight){ docwidth = document.body.clientWidth; docheight = document.body.clientHeight; win_content_width=docwidth; win_content_height=docheight; } } function clean_spellcheck_source_remove_spans(){ var class_id_arr = new Array(); var class_value_arr = new Array(); var classElements = new Array(); var spellcheck_frame_doc = window.frames['spellcheck_main_rte'].document; class_id_array=getElementsByClass('misspelled_word',spellcheck_frame_doc.body); class_arr_len=class_id_array.length; for(i=0,j=0;i"; //}else{ //currObj.statusSpan.innerHTML = "Searching..."; //} //alert('yay'); var x = findPosXById(id); var y = findPosYById(id); var x2 = main_find_x_by_id('spellcheck_main_rte'); var y2 = main_find_y_by_id('spellcheck_main_rte'); x=x+x2; y=y+y2; var scrollPos = 0; //if(parent.browser_type_found!='msie'){ //scrollPos = currObj.spellingResultsDiv.scrollTop; //scrollPos = rte_frame.scrollTop; //} spelling_suggestions_div = document.getElementById("spelling_suggestions_div"); spelling_suggestions_div.style.display = "none"; spelling_suggestions_div.cur_word_id=id; spelling_suggestions_div.className = 'suggestion_box'; spelling_suggestions_div.style.position = 'absolute'; spelling_suggestions_div.style.left = x+2 + 'px'; spelling_suggestions_div.style.top = (y+21-scrollPos) + 'px'; xajax_show_suggestions(word, id); } function spellcheck_status_busy(spellchecker_busy){ var rte_to_location_inside_of='main_spellcheck_holder_table'; //main_spellcheck_holder_table //if(document.getElementById(rte_to_location_inside_of).style.display!="block"){rte_to_location_inside_of='spellcheck_main_rte';} var spellchecker_busy_div_var = document.getElementById("spellchecker_busy_div"); var main_spellcheck_holder_table_var=document.getElementById(rte_to_location_inside_of); var main_spellcheck_holder_table_var_top=main_find_y_by_id(rte_to_location_inside_of); var main_spellcheck_holder_table_var_left=main_find_x_by_id(rte_to_location_inside_of); var main_spellcheck_holder_table_var_width=main_spellcheck_holder_table_var.style.width; var main_spellcheck_holder_table_var_height=main_spellcheck_holder_table_var.style.height; if(main_spellcheck_holder_table_var_width=='100%'){document_width_height();main_spellcheck_holder_table_var_width=win_content_width-main_spellcheck_holder_table_var_left-main_spellcheck_holder_table_var_left;} if(main_spellcheck_holder_table_var_height=='100%'){document_width_height();main_spellcheck_holder_table_var_height=win_content_height-main_spellcheck_holder_table_var_top-2;} if(spellchecker_busy){ spellchecker_busy_div_var.style.top=main_spellcheck_holder_table_var_top; spellchecker_busy_div_var.style.left=main_spellcheck_holder_table_var_left; spellchecker_busy_div_var.style.width=main_spellcheck_holder_table_var_width; spellchecker_busy_div_var.style.height=main_spellcheck_holder_table_var_height; spellchecker_busy_div_var.style.display = "block"; //alert('top[' + main_spellcheck_holder_table_var_top + '] \n\r\n\r left[' + main_spellcheck_holder_table_var_left + '] \n\r\n\r width[' + main_spellcheck_holder_table_var_width + '] \n\r\n\r height[' + main_spellcheck_holder_table_var_height + '] \n\r\n\r'); }else{ spellchecker_busy_div_var.style.display = "none"; spelling_suggestions_div = document.getElementById("spelling_suggestions_div"); spelling_suggestions_div.style.display = "none"; } } function update_word(word_to_replace,new_word,span_id){ var rte_frame; var new_source; var pre_edit_src; if(parent.browser_type_found=='msie'){ var lsRegExp = "" + word_to_replace + ""; }else{ var lsRegExp = "" + word_to_replace + ""; } spellcheck_rte_frame = window.frames['spellcheck_main_rte'].document; pre_edit_src=spellcheck_rte_frame.body.innerHTML; new_source = pre_edit_src.replace(lsRegExp, new_word); spellcheck_rte_frame.body.innerHTML=new_source; try{spelling_suggestions_div.style.display = 'none';}catch(e){} } function set_spellcheck_mode(rte,spellcheck_mode){ var main_frame = window.frames['main_rte'].document; var spellcheck_frame = window.frames['spellcheck_main_rte'].document; if(spellcheck_mode){ //SPELLCHECKER ENABLED document.getElementById("view_source_div").style.display = "none"; document.getElementById("spellchecker_active_options" + rte).style.display = "block"; document.getElementById("richtxt_options" + rte).style.display = "none"; document.getElementById("spellcheck_" + rte).style.display = "block"; document.getElementById(rte).style.display = "none"; }else{ //SPELLCHECKER DISABLED clean_spellcheck_source_remove_spans(); document.getElementById("view_source_div").style.display = "block"; document.getElementById(rte).style.display = "block"; document.getElementById("spellcheck_" + rte).style.display = "none"; document.getElementById("spellchecker_active_options" + rte).style.display = "none"; document.getElementById("richtxt_options" + rte).style.display = "block"; try{ main_frame.body.innerHTML=spellcheck_frame.body.innerHTML; //[RICHTEXT] UPDATE EDITOR WITH SPELLCHECKED TEXT }catch(e){ document.getElementById(rte).value = url_decode(stripHTML(spellcheck_frame.body.innerHTML)); //[TEXTAREA] UPDATE EDITOR WITH SPELLCHECKED TEXT } } } function check_spelling(rte){ var oRTE; var rte_frame; var src_pre_spell_checker,src_post_spell_checker; //GET TEXT FROM EXISTING SOURCE try{ rte_frame = window.frames[rte].document; src_pre_spell_checker = rte_frame.body.innerHTML; }catch(e){ try{ oRTE = document.getElementById(rte);//.contentWindow; src_pre_spell_checker=oRTE.innerHTML; }catch(e){ alert('TRYING METHOD 3 | ERROR 2 | E:[' + e + ']'); } } //RUN SPELLCHECKER BUSY FUNCTION spellcheck_status_busy(true); //RUN XAJAX SPELL CHECKER parent.xajax_spell_checker(src_pre_spell_checker); //DISABLE DESIGN MODE set_spellcheck_mode(rte,true); } function url_decode(str_to_decode){ var lsRegExp = /\+/g; return unescape(String(str_to_decode).replace(lsRegExp, " ")); } function update_src(new_src){ var oRTE; oRTE = document.getElementById('main_rte').contentWindow; oRTE.document.body.innerHTML=new_src; } function getElementsByClass(searchClass,node,tag){ var classElements = new Array(); if(node==null) node = document; if(tag==null ) tag = '*'; var els = node.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)'); for(i = 0, j = 0; i < elsLen; i++){ if(pattern.test(els[i].className)){ classElements[j] = els[i]; j++; } } return classElements; } function main_find_x_by_id(object){ var curleft = 0; var obj = document.getElementById(object); if(obj.offsetParent){ while(obj.offsetParent){ curleft += obj.offsetLeft - obj.scrollLeft; obj = obj.offsetParent; } }else if(obj.x){ curleft += obj.x; } return curleft; } function main_find_y_by_id(object){ var curtop = 0;var curtop = 0; var obj = document.getElementById(object); if(obj.offsetParent){ while(obj.offsetParent){ curtop += obj.offsetTop - obj.scrollTop; obj = obj.offsetParent; } }else if(obj.y){ curtop += obj.y; } return curtop; } function findPosXById(object,frame_id){ var curleft = 0; if(frame_id==null){frame_id='spellcheck_main_rte';} var rte_frame = window.frames[frame_id]; var obj = rte_frame.document.getElementById(object); if(obj.offsetParent){ while(obj.offsetParent){ curleft += obj.offsetLeft - obj.scrollLeft; obj = obj.offsetParent; } }else if(obj.x){ curleft += obj.x; } return curleft; } function findPosYById(object,frame_id){ var curtop = 0;var curtop = 0; if(frame_id==null){frame_id='spellcheck_main_rte';} var rte_frame = window.frames[frame_id]; var obj = rte_frame.document.getElementById(object); if(obj.offsetParent){ while(obj.offsetParent){ curtop += obj.offsetTop - obj.scrollTop; obj = obj.offsetParent; } }else if(obj.y){ curtop += obj.y; } return curtop; } function show_suggestions_style(){ spelling_suggestions_div.style.display = 'block'; //spelling_suggestions_div.className = 'suggestion_box'; //spelling_suggestions_div.style.position = 'absolute'; //spelling_suggestions_div.style.left = spelling_suggestions_div.style.left; //spelling_suggestions_div.style.top = spelling_suggestions_div.style.top; spelling_suggestions_div_active=false; } ////////////////////////////////////// // MY CUSTOM JAVASCRIPT FUNCTIONS // ////////////////////////////////////// function enableDesignMode(rte, html, readOnly){ var frameHtml = "\n"; frameHtml += "\n"; //to reference your stylesheet, set href property below to your stylesheet path and uncomment if (cssFile.length > 0) { frameHtml += "\n"; } frameHtml += "\n"; frameHtml += "\n"; frameHtml += "\n"; frameHtml += html + "\n"; frameHtml += "\n"; frameHtml += ""; if(document.all){ var oRTE = frames[rte].document; oRTE.open(); oRTE.write(frameHtml); oRTE.close(); if (!readOnly) oRTE.designMode = "On"; } else { try { if (!readOnly) document.getElementById(rte).contentDocument.designMode = "on"; try { var oRTE = document.getElementById(rte).contentWindow.document; oRTE.open(); oRTE.write(frameHtml); oRTE.close(); //oRTE.addEventListener("blur", updateRTE(rte), true); if (isGecko && !readOnly) { //attach a keyboard handler for gecko browsers to make keyboard shortcuts work oRTE.addEventListener("keypress", kb_handler, true); } } catch (e) { alert("Error preloading content."); } } catch (e) { //gecko may take some time to enable design mode. //Keep looping until able to set. if (isGecko) { setTimeout("enableDesignMode('" + rte + "', '" + html + "');", 10); } else { return false; } } } } function updateRTEs() { var vRTEs = allRTEs.split(";"); for (var i = 0; i < vRTEs.length; i++) { updateRTE(vRTEs[i]); } } function updateRTE(rte) { //set message value var oHdnMessage = document.getElementById('hdn' + rte); var oRTE = document.getElementById(rte); var readOnly = false; //check for readOnly mode if (document.all) { if (frames[rte].document.designMode != "On") readOnly = true; } else { if (document.getElementById(rte).contentDocument.designMode != "on") readOnly = true; } if (isRichText && !readOnly) { //if viewing source, switch back to design view if (document.getElementById("chkSrc" + rte).checked) { document.getElementById("chkSrc" + rte).checked = false; toggleHTMLSrc(rte); } if (oHdnMessage.value == null) oHdnMessage.value = ""; if (document.all) { oHdnMessage.value = frames[rte].document.body.innerHTML; } else { oHdnMessage.value = oRTE.contentWindow.document.body.innerHTML; } //if there is no content (other than formatting) set value to nothing if (stripHTML(oHdnMessage.value.replace(" ", " ")) == "") oHdnMessage.value = ""; } } function toggleHTMLSrc(rte) { //contributed by Bob Hutzel (thanks Bob!) var oRTE; if (document.all) { oRTE = frames[rte].document; } else { oRTE = document.getElementById(rte).contentWindow.document; } if(document.getElementById("chkSrc" + rte).checked){ document.getElementById("richtxt_options" + rte).style.display = "none"; if (document.all) { oRTE.body.innerText = oRTE.body.innerHTML; } else { var htmlSrc = oRTE.createTextNode(oRTE.body.innerHTML); oRTE.body.innerHTML = ""; oRTE.body.appendChild(htmlSrc); } }else{ document.getElementById("richtxt_options" + rte).style.display = "block"; if (document.all) { oRTE.body.innerHTML = oRTE.body.innerText; } else { var htmlSrc = oRTE.body.ownerDocument.createRange(); htmlSrc.selectNodeContents(oRTE.body); oRTE.body.innerHTML = htmlSrc.toString(); } } oRTE.body.focus(); //[ADDED] to keep from having space bar enable/disable toggle html/src command while editing } //Function to format text in the text box function FormatText(rte, command, option){ var oRTE; if (document.all) { oRTE = frames[rte]; //get current selected range var selection = oRTE.document.selection; if (selection != null) { rng = selection.createRange(); } } else { oRTE = document.getElementById(rte).contentWindow; //get currently selected range var selection = oRTE.getSelection(); rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange(); } try { if((command == "forecolor")||(command == "hilitecolor")){ //save current values parent.command = command; currentRTE = rte; //position and show color palette buttonElement = document.getElementById(command + '_' + rte); document.getElementById('cp' + rte).style.left = getOffsetLeft(buttonElement) + "px"; document.getElementById('cp' + rte).style.top = (getOffsetTop(buttonElement) + buttonElement.offsetHeight) + "px"; if (document.getElementById('cp' + rte).style.visibility == "hidden") { document.getElementById('cp' + rte).style.visibility = "visible"; document.getElementById('cp' + rte).style.display = "inline"; } else { document.getElementById('cp' + rte).style.visibility = "hidden"; document.getElementById('cp' + rte).style.display = "none"; } }else if(command == "createlink"){ var szURL = prompt("Enter a URL:", ""); try{ //ignore error for blank urls oRTE.document.execCommand("Unlink", false, null); oRTE.document.execCommand("CreateLink", false, szURL); }catch(e){} }else{ //oRTE.focus(); oRTE.document.execCommand(command, false, option); //oRTE.focus(); } } catch (e) { alert(e); } } //Function to set color function setColor(color) { var rte = currentRTE; var oRTE; if (document.all) { oRTE = frames[rte]; } else { oRTE = document.getElementById(rte).contentWindow; } var parentCommand = parent.command; if (document.all) { //retrieve selected range var sel = oRTE.document.selection; if (parentCommand == "hilitecolor") parentCommand = "backcolor"; if (sel != null) { var newRng = sel.createRange(); newRng = rng; newRng.select(); } } else { //oRTE.focus(); } oRTE.document.execCommand(parentCommand, false, color); //oRTE.focus(); document.getElementById('cp' + rte).style.visibility = "hidden"; document.getElementById('cp' + rte).style.display = "none"; } //Function to add image function AddImage(rte) { var oRTE; if (document.all) { oRTE = frames[rte]; //get current selected range var selection = oRTE.document.selection; if (selection != null) { rng = selection.createRange(); } } else { oRTE = document.getElementById(rte).contentWindow; //get currently selected range var selection = oRTE.getSelection(); rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange(); } imagePath = prompt('Enter Image URL:', 'http://'); if ((imagePath != null) && (imagePath != "")) { //oRTE.focus(); oRTE.document.execCommand('InsertImage', false, imagePath); } //oRTE.focus(); } function getOffsetTop(elm) { var mOffsetTop = elm.offsetTop; var mOffsetParent = elm.offsetParent; while(mOffsetParent){ mOffsetTop += mOffsetParent.offsetTop; mOffsetParent = mOffsetParent.offsetParent; } return mOffsetTop; } function getOffsetLeft(elm) { var mOffsetLeft = elm.offsetLeft; var mOffsetParent = elm.offsetParent; while(mOffsetParent) { mOffsetLeft += mOffsetParent.offsetLeft; mOffsetParent = mOffsetParent.offsetParent; } return mOffsetLeft; } function Select(rte, selectname) { var oRTE; if (document.all) { oRTE = frames[rte]; //get current selected range var selection = oRTE.document.selection; if (selection != null) { rng = selection.createRange(); } } else { oRTE = document.getElementById(rte).contentWindow; //get currently selected range var selection = oRTE.getSelection(); rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange(); } var idx = document.getElementById(selectname).selectedIndex; // First one is always a label if (idx != 0) { var selected = document.getElementById(selectname).options[idx].value; var cmd = selectname.replace('_' + rte, ''); oRTE.document.execCommand(cmd, false, selected); document.getElementById(selectname).selectedIndex = 0; } //oRTE.focus(); } function kb_handler(evt){ var rte = evt.target.id; if (evt.ctrlKey) { var key = String.fromCharCode(evt.charCode).toLowerCase(); var cmd = ''; switch (key) { case 'b': cmd = "bold"; break; case 'i': cmd = "italic"; break; case 'u': cmd = "underline"; break; }; if (cmd) { FormatText(rte, cmd, true); //evt.target.ownerDocument.execCommand(cmd, false, true); stop the event bubble evt.preventDefault(); evt.stopPropagation(); } } } //USELESS ?!?!?!? TRY REMOVING THIS BULLSHIT function docChanged (evt) { alert('changed'); } function stripHTML(oldString) { var newString = oldString.replace(/(<([^>]+)>)/ig,""); //replace carriage returns and line feeds newString = escape(newString); newString = newString.replace("%0D%0A"," "); newString = newString.replace("%0A"," "); newString = newString.replace("%0D"," "); newString = unescape(newString); //trim string newString = trim(newString); return newString; } function trim(inputString) { // Removes leading and trailing spaces from the passed string. Also removes consecutive spaces and replaces it with one space. If something besides a string is passed in (null, custom object, etc.) then return the input. if (typeof inputString != "string") return inputString; var retValue = inputString; var ch = retValue.substring(0, 1); while (ch == " ") { // Check for spaces at the beginning of the string retValue = retValue.substring(1, retValue.length); ch = retValue.substring(0, 1); } ch = retValue.substring(retValue.length-1, retValue.length); while (ch == " ") { // Check for spaces at the end of the string retValue = retValue.substring(0, retValue.length-1); ch = retValue.substring(retValue.length-1, retValue.length); } // Note that there are two spaces in the string - look for multiple spaces within the string while (retValue.indexOf(" ") != -1) { // Again, there are two spaces in each of the strings retValue = retValue.substring(0, retValue.indexOf(" ")) + retValue.substring(retValue.indexOf(" ")+1, retValue.length); } return retValue; // Return the trimmed string back to the user } //add RTEonload to window onload event for browsers that support RTE function rte_design_mode_handlers(){ if(main_rte_loaded_status){return;} var rte_frame; var err_handler_fra; try{ rte_frame = window.frames['main_rte'].document; if(window.frames['main_rte']==''){ err_handler_fra=true; } }catch(e){ //error err_handler_fra=true; } if(!err_handler_fra){ if(rte_frame.designMode){ if(window.addEventListener){ window.addEventListener('load', RTEonload, false); }else if(window.attachEvent){ window.attachEvent('onload', RTEonload); } RTEinit(); } } } function RTEonload(){ //dynamically create RTE iframe var rteElt = document.getElementById('main_rte'); //rteElt.id = 'main_rte'; //IE6 bug?: setting iframe onload doesn't work, so use attachEvent if(rteElt.attachEvent){ rteElt.attachEvent('onload', RTEinit); }else{ rteElt.onload = RTEinit(); } //Gecko 1.7 bug: see RTEonunload if(window.addEventListener){ window.addEventListener('unload', RTEonunload, false); } } //IE6 bug?: even if the onload event handlers are removed, toggling on designMode calls those event handlers - none of the following will prevent RTEinit from being called twice: rteElt.onload = null; rteElt.detachEvent('onload', rteElt); rteElt.setAttribute('onload', null); rteElt.contentWindow.onload = null; rteElt.contentWindow.detachEvent('onload', rteElt); so make sure this function never executes more than once (this should get rid of some infinite onload loop problems) function RTEinit(){ if(main_rte_loaded_status){return;} if(RTEinit.hasRun){return;} RTEinit.hasRun = true; main_rte_loaded_status=true; var rteElt = document.getElementById('main_rte'); var rteWin = rteElt.contentWindow; var rte = rteWin.document; rteElt.onload = null; setTimeout(function(){ if(rte.addEventListener){ //Gecko: onevent properties don't work (e.g. rte.onclick doesn't work) so DOM2 events must be used rte.addEventListener('keypress', RTEonkeypress, false); //Gecko: default action of key accelerators (i.e. hotkeys) occurs onkeypress }else if(rte.attachEvent){ //IE: attachEvent for ie keydown for shortcuts rte.attachEvent('onkeydown', RTEonkeypress); //IE: default action of key accelerators occurs onkeydown } rteWin.focus(); }, 0); } //Gecko 1.7 bug: designMode persists even after leaving the page; this shouldn't really affect iframes, but I've seen some strange things, so this is one of those "just in case" things function RTEonunload(){ var rte = document.getElementById('main_rte').contentWindow.document; rte.designMode = 'off'; } //note: Gecko doesn't support formatting key accelerators, e.g. ctrl-I, ctrl-B (bug 191190) function RTEonkeypress(evt){ evt = evt || window.event; if(evt.ctrlKey){ var keyCode = evt.keyCode || evt.charCode; //IE: keyCode | Gecko: charCode (uses keyCode for keys that aren't characters, e.g. left arrow, and for keydown and keyup events) switch (keyCode) { case 67: //ctrl-c case 86: //ctrl-v case 88: //ctrl-x return; } //ctrl-(anything else) if(evt.preventDefault){ evt.preventDefault(); }else{ evt.returnValue = false; } } }