/** * bbCode control by subBlue design [ www.subBlue.com ] * Includes unixsafe colour palette selector by SHS` */ // Startup variables var imageTag = false; var theSelection = false; var bbcodeEnabled = true; // Check for Browser & Platform for PC & IE specific bits // More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html var clientPC = navigator.userAgent.toLowerCase(); // Get client info var clientVer = parseInt(navigator.appVersion); // Get browser version var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1)); var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1)); var baseHeight; /** * Shows the help messages in the helpline window */ function helpline(help) { document.forms[form_name].helpbox.value = help_line[help]; } /** * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html */ function initInsertions() { var doc; if (document.forms[form_name]) { doc = document; } else { doc = opener.document; } var textarea = doc.forms[form_name].elements[text_name]; if (is_ie && typeof(baseHeight) != 'number') { textarea.focus(); baseHeight = doc.selection.createRange().duplicate().boundingHeight; if (!document.forms[form_name]) { document.body.focus(); } } } /** * bbstyle */ function bbstyle(bbnumber) { if (bbnumber != -1) { bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); } else { insert_text('[*]'); document.forms[form_name].elements[text_name].focus(); } } /** * Apply bbcodes */ function bbfontstyle(bbopen, bbclose) { theSelection = false; var textarea = document.forms[form_name].elements[text_name]; textarea.focus(); if ((clientVer >= 4) && is_ie && is_win) { // Get text selection theSelection = document.selection.createRange().text; if (theSelection) { // Add tags around selection document.selection.createRange().text = bbopen + theSelection + bbclose; document.forms[form_name].elements[text_name].focus(); theSelection = ''; return; } } else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) { mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose); document.forms[form_name].elements[text_name].focus(); theSelection = ''; return; } //The new position for the cursor after adding the bbcode var caret_pos = getCaretPosition(textarea).start; var new_pos = caret_pos + bbopen.length; // Open tag // >>>BEGIN>>>SECTION>>>1 // >>>IMG_L>>>1 if (bbopen == '[img_l]') { var Error = ''; var IMGL = prompt('URL изображения' , 'http://'); if (!IMGL) { Error = "У Вас нет URL изображения"; } if (Error) { alert("Ошибка: "+Error); return; } if (IMGL) { insert_text(bbopen + IMGL + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>IMG_R>>>1 else if (bbopen == '[img_r]') { var Error = ''; var IMGR = prompt('URL изображения' , 'http://'); if (!IMGR) { Error = "У Вас нет URL изображения"; } if (Error) { alert("Ошибка: "+Error); return; } if (IMGR) { insert_text(bbopen + IMGR + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>FLV>>>1 else if (bbopen == '[flv]') { var Error = ''; var FLV = prompt('Ссылка на FLV файл' , 'http://'); if (!FLV) { Error = "Вы не ввели ссылку на FLV файл"; } if (Error) { alert("Ошибка: "+Error); return; } if (FLV) { insert_text(bbopen + FLV + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>STREAM>>>1 else if (bbopen == '[stream]') { var Error = ''; var STREAM = prompt('Ссылка на MP3 файл' , 'http://'); if (!STREAM) { Error = "Вы не ввели ссылку на MP3 файл"; } if (Error) { alert("Ошибка: "+Error); return; } if (STREAM) { insert_text(bbopen + STREAM + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>FLASH_I>>>1 else if (bbopen == '[flash_i]') { var Error = ''; var FLASHI = prompt('Ссылка на Flash файл' , 'http://'); if (!FLASHI) { Error = " Вы не ввели ссылку на Flash файл"; } if (Error) { alert("Ошибка: "+Error); return; } if (FLASHI) { insert_text(bbopen + FLASHI + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>MOV>>>1 else if (bbopen == '[mov]') { var Error = ''; var MOV = prompt('Ссылка на Quicktime файл' , 'http://'); if (!MOV) { Error = "Вы не ввели ссылку на Quicktime файл"; } if (Error) { alert("Ошибка: "+Error); return; } if (MOV) { insert_text(bbopen + MOV + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>RAM>>>1 else if (bbopen == '[rm]') { var Error = ''; var RM = prompt('Ссылка на RealTime файл' , 'http://'); if (!RM) { Error = "Вы не ввели ссылку на RealTime файл"; } if (Error) { alert("Ошибка: "+Error); return; } if (RM) { insert_text(bbopen + RM + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>WMV>>>1 else if (bbopen == '[wmv]') { var Error = ''; var WMV = prompt('Ссылка на WMV файл' , 'http://'); if (!WMV) { Error = "Вы не ввели ссылку на WMV файл"; } if (Error) { alert("Ошибка: "+Error); return; } if (WMV) { insert_text(bbopen + WMV + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>DIVX>>>1 else if (bbopen == '[divx]') { var Error = ''; var DIVX = prompt('Ссылка на DIVX файл' , 'http://'); if (!DIVX) { Error = "Вы не ввели ссылку на DIVX файл"; } if (Error) { alert("Ошибка: "+Error); return; } if (DIVX) { insert_text(bbopen + DIVX + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>SPOIL_TAG=>>>1 /* else if (bbopen == '[spoil_tag=]') { var Error = ''; var SPTAG = prompt('Spoil-Tag Text eingegeben' , ''); if (!SPTAG) { Error = "Отсутствует текст для Спойлера"; } if (Error) { alert("Ошибка: "+Error); return; } if (SPTAG) { var RAND = Math.floor(Math.random() * 100000 + 50000); // var RAND = Math.random(); insert_text('[spoil_tag=' + RAND + ']' + SPTAG + bbclose) } else { insert_text(bbopen + bbclose); } } */ else if (bbopen == '[spoil_tag=]') { var RAND = Math.floor(Math.random() * 1000000 + 500000); insert_text('[spoil_tag=' + RAND + ']' + '[/spoil_tag]') } // >>>IMG_LYTEBOX=>>>1 else if (bbopen == '[img_lytebox=]') { var Error = ''; var IMGLYTEBOXTITLE = prompt('Название изображения' , ''); if (!IMGLYTEBOXTITLE) { Error = "Отсутствует название изображения"; } if (Error) { alert("Ошибка: "+Error); return; } if (IMGLYTEBOXTITLE && IMGLYTEBOXTITLE != '') { var IMGLYTEBOX = prompt('Image URL' , 'http://'); if (!IMGLYTEBOX) { Error = "Вы не ввели URL изображения"; } if (Error) { alert("Ошибка: "+Error); return; } if (IMGLYTEBOX) { insert_text("[img_lytebox=" + IMGLYTEBOXTITLE + "]" + IMGLYTEBOX + bbclose); } } } // >>>COPYRIGHT>>>1 else if (bbopen == '[copyright=]') { var Error = ''; var COPYRIGHTOWNER = prompt('Введите имя владельца авторских прав' , ''); if (!COPYRIGHTOWNER) { Error = "Вы не ввели имя владельца авторских прав"; } if (Error) { alert("Ошибка: "+Error); return; } var COPYRIGHTLEFT = prompt('Позиция ссылки: % как номер (eg 25)\r\Hinweis: % включительно выравнивания должно быть не более чем 50%' , ''); if (!COPYRIGHTLEFT) { Error = "Не верное имя домена"; } if (Error) { alert("Ошибка: "+Error); return; } var COPYRIGHTRIGHT = prompt(' Position of justice:% as a number (eg 25)\r\nHinweis: Inclusive% of links should be no more than 50%.' , ''); if (!COPYRIGHTRIGHT) { Error = "Введенный домен не верхнего уровня"; } if (Error) { alert("Ошибка: "+Error); return; } var COPYRIGHTDOMAIN = prompt('URL владельца авторского права' , ''); if (!COPYRIGHTDOMAIN) { Error = "Вы не указали URL владельца авторского права"; } if (Error) { alert("Ошибка: "+Error); return; } if (COPYRIGHTOWNER && COPYRIGHTLEFT && COPYRIGHTRIGHT && COPYRIGHTDOMAIN) { insert_text('[copyright=' + COPYRIGHTOWNER + '|' + COPYRIGHTLEFT + '|' + COPYRIGHTRIGHT + ']' + COPYRIGHTDOMAIN + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>COPYRIGHT>>>1 else if (bbopen == '[websnap=]') { var Error = ''; var WEBSNAPURL = prompt('Websnap URL' , 'http://'); if (!WEBSNAPURL) { Error = "Вы не ввели Websnap URL"; } if (Error) { alert("Ошибка: "+Error); return; } var WEBSNAPIMG = prompt('URL Websnap изображения' , 'http://'); if (!WEBSNAPIMG) { Error = "Вы не ввели URL Websnap изображения"; } if (Error) { alert("Ошибка: "+Error); return; } var WEBSNAPTITLE = prompt('Описание или название' , ''); if (!WEBSNAPTITLE) { Error = "Вы не ввели описание или название"; } if (Error) { alert("Ошибка: "+Error); return; } if (WEBSNAPURL && WEBSNAPIMG && WEBSNAPTITLE) { insert_text('[websnap=' + WEBSNAPURL + ' pic=' + WEBSNAPIMG + ']' + WEBSNAPTITLE + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>MAIL>>>1 else if (bbopen == '[mail=]') { var Error = ''; var TESTMAILNAME = prompt('E-mail адрес\r\nТолько то, что перед @' , ''); if (!TESTMAILNAME) { Error = "Вы не ввели e-mail адрес"; } if (Error) { alert("Ошибка: "+Error); return; } var TESTMAILDOMAIN = prompt('Имя домена\r\nВсе что после @ и до. Xx' , ''); if (!TESTMAILDOMAIN) { Error = "Вы не ввели имя домена"; } if (Error) { alert("Ошибка: "+Error); return; } var TESTMAILTLD = prompt('Домен верхнего уровня (TLD) введите\r\nБез точки до: de, com, net, etc.' , ''); if (!TESTMAILTLD) { Error = "Вы не ввели домен верхнего уровня"; } if (Error) { alert("Ошибка: "+Error); return; } var TESTMAILDESCRIPT = prompt('ВВедите имя почты\r\nнапример.: E-mail адрес Путина\r\nНи в коем случае не адрес электроной почты ;)' , ''); if (!TESTMAILDESCRIPT) { Error = "Вы не ввели имя почты"; } if (Error) { alert("Ошибка: "+Error); return; } if (TESTMAILNAME && TESTMAILDOMAIN && TESTMAILTLD && TESTMAILDESCRIPT) { insert_text('[mail=' + TESTMAILNAME + '|' + TESTMAILTLD + '|' + TESTMAILDOMAIN + ']' + TESTMAILDESCRIPT + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>URL>>>1 else if (bbopen == '[url]') { var Error = ''; var URL = prompt('Введите URL' , 'http://'); if (!URL) { Error = "Вы не ввели URL"; } if (Error) { alert("Ошибка: "+Error); return; } var URLTITEL = prompt('Описание или название URL' , ''); if (!URLTITEL) { Error = "Вы не указали описание или название URL"; } if (Error) { alert("Ошибка: "+Error); return; } if (URL && URLTITEL) { insert_text('[url=' + URL + ']' + URLTITEL + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>QUOTE>>>1 else if (bbopen == '[quote]') { var Error = ''; var QUOTENAME = prompt('Введите ник цитируемого' , ''); if (!QUOTENAME) { Error = "Вы не указали ник цитируемого"; } if (Error) { alert("Ошибка: "+Error); return; } if (QUOTENAME) { insert_text('[quote=' + '"' + QUOTENAME + '"' + ']' + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>YOUTUBE>>>1 else if (bbopen == '[youtube]') { var Error = ''; var YOUTUBE = prompt('Введите ссылку Youtube \r\nhttp://youtube.com/watch?v=xxxxxxxxxxx' , 'http://'); if (!YOUTUBE) { Error = "Вы не ввели ссылку Youtube"; } if (Error) { alert("Ошибка: "+Error); return; } if (YOUTUBE) { insert_text(bbopen + YOUTUBE + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>GVIDEO>>>1 else if (bbopen == '[gvideo]') { var Error = ''; var GVIDEO = prompt('Ссылка Google Видео\r\nhttp://video.google.com/videoplay?docid=123456789' , 'http://'); if (!GVIDEO) { Error = "Вы не ввели Ссылка Google Видеоk"; } if (Error) { alert("Ошибка: "+Error); return; } if (GVIDEO) { insert_text(bbopen + GVIDEO + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>MYSPACE>>>1 else if (bbopen == '[myspace]') { var Error = ''; var MYSPACE = prompt('Введите ссылку Myspace\r\nhttp://vids.myspace.com/index.cfm?fuseaction=vids.individual&videoid=12345' , 'http://'); if (!MYSPACE) { Error = "Вы не ввели ссылку Myspace"; } if (Error) { alert("Ошибка: "+Error); return; } if (MYSPACE) { insert_text(bbopen + MYSPACE + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>MYVIDEO>>>1 else if (bbopen == '[myvideo]') { var Error = ''; var MYVIDEO = prompt('Введите ссылку MyVideo \r\nhttp://www.myvideo.de/watch/1234567' , 'http://'); if (!MYVIDEO) { Error = "Вы не ввели ссылку MyVideo"; } if (Error) { alert("Ошибка: "+Error); return; } if (MYVIDEO) { insert_text(bbopen + MYVIDEO + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>CLIPFISH>>>1 else if (bbopen == '[clipfish]') { var Error = ''; var CLIPFISH = prompt('Введите Clipfish ссылку\r\nhttp://www.clipfish.de/player.php?videoid=xxxxxxxxxxxx' , 'http://'); if (!CLIPFISH) { Error = "Вы не ввели Введите Clipfish ссылку"; } if (Error) { alert("Ошибка: "+Error); return; } if (CLIPFISH) { insert_text(bbopen + CLIPFISH + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>AMAZON>>>1 else if (bbopen == '[amazon]') { var Error = ''; var AMAZON = prompt('ISBN-номер\r\nнапример: 3897214210' , ''); if (!AMAZON) { Error = "Вы не ввели ISBN-номер"; } if (Error) { alert("Ошибка: "+Error); return; } if (AMAZON) { insert_text(bbopen + AMAZON + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>WIKI>>>1 else if (bbopen == '[wiki=]') { var Error = ''; var WIKIWORD = prompt('Wiki term' , ''); if (!WIKIWORD) { Error = "Введите поисковый запрос Wiki"; } if (Error) { alert("Ошибка: "+Error); return; } if (WIKIWORD && WIKIWORD != '') { var WIKITITLE = prompt('Wiki термин' , ''); if (!WIKITITLE) { Error = "Вы не ввели в Wiki термин"; } if (Error) { alert("Ошибка: "+Error); return; } if (WIKITITLE) { insert_text("[wiki=" + WIKIWORD + "]" + WIKITITLE + bbclose); } } } // >>>GMAP2>>>1 else if (bbopen == '[gmap2]') { var Error = ''; var LOCATION2 = prompt('Введите расположение\r\nнапример: Москва, Рублевка' , ''); if (!LOCATION2) { Error = "Вы не ввели расположение"; } if (Error) { alert("Ошибка: "+Error); return; } if (LOCATION2) { insert_text("[gmap2]" + LOCATION2 + bbclose); } } // >>>GMAP>>>1 else if (bbopen == '[gmap=]') { var Error = ''; var LOCATION = prompt('Расположение или описание\r\n' , ''); if (!LOCATION) { Error = "Вы не ввели расположение"; } if (Error) { alert("Ошибка: "+Error); return; } var UTF8LINK = prompt(' Введите сылку Google Map в UTF8\r\nТолько UTF8 вида z = xx:\r\nUTF8&ll=50.796535,7.206337&spn=0.000815,0.001824&z=19' , ''); if (!UTF8LINK) { Error = "Вы не указали ссылку в UTF8"; } if (Error) { alert("Ошибка: "+Error); return; } if (LOCATION && UTF8LINK) { insert_text("[gmap=" + LOCATION + "]" + "http://maps.google.de/maps?t=k&ie=" + UTF8LINK + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>IMG>>>1 else if (bbopen == '[img]') { var Error = ''; var IMG = prompt('Введите URL изображения' , 'http://'); if (!IMG) { Error = "Вы не ввели URL изображения"; } if (Error) { alert("Ошибка: "+Error); return; } if (IMG) { insert_text(bbopen + IMG + bbclose); } else { insert_text(bbopen + bbclose); } } // >>>ALL_OTHER_ONE_CLICK_TAGS>>> else { insert_text(bbopen + bbclose); } // >>>END>>>SECTION>>>1 // Center the cursor when we don't have a selection // Gecko and proper browsers if (!isNaN(textarea.selectionStart)) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; } // IE else if (document.selection) { var range = textarea.createTextRange(); range.move("character", new_pos); range.select(); storeCaret(textarea); } textarea.focus(); return; } /** * Insert text at position */ function insert_text(text, spaces, popup) { var textarea; if (!popup) { textarea = document.forms[form_name].elements[text_name]; } else { textarea = opener.document.forms[form_name].elements[text_name]; } if (spaces) { text = ' ' + text + ' '; } // Since IE9, IE also has textarea.selectionStart, but it still needs to be treated the old way. // Therefore we simply add a !is_ie here until IE fixes the text-selection completely. if (!isNaN(textarea.selectionStart) && !is_ie) { var sel_start = textarea.selectionStart; var sel_end = textarea.selectionEnd; mozWrap(textarea, text, ''); textarea.selectionStart = sel_start + text.length; textarea.selectionEnd = sel_end + text.length; } else if (textarea.createTextRange && textarea.caretPos) { if (baseHeight != textarea.caretPos.boundingHeight) { textarea.focus(); storeCaret(textarea); } var caret_pos = textarea.caretPos; caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; } else { textarea.value = textarea.value + text; } if (!popup) { textarea.focus(); } } /** * Add inline attachment at position */ function attach_inline(index, filename) { insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); document.forms[form_name].elements[text_name].focus(); } /** * Add quote text to message */ function addquote(post_id, username, l_wrote) { var message_name = 'message_' + post_id; var theSelection = ''; var divarea = false; if (l_wrote === undefined) { // Backwards compatibility l_wrote = 'wrote'; } if (document.all) { divarea = document.all[message_name]; } else { divarea = document.getElementById(message_name); } // Get text selection - not only the post content :( // IE9 must use the document.selection method but has the *.getSelection so we just force no IE if (window.getSelection && !is_ie && !window.opera) { theSelection = window.getSelection().toString(); } else if (document.getSelection && !is_ie) { theSelection = document.getSelection(); } else if (document.selection) { theSelection = document.selection.createRange().text; } if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null) { if (divarea.innerHTML) { theSelection = divarea.innerHTML.replace(/
/ig, '\n'); theSelection = theSelection.replace(//ig, '\n'); theSelection = theSelection.replace(/<\;/ig, '<'); theSelection = theSelection.replace(/>\;/ig, '>'); theSelection = theSelection.replace(/&\;/ig, '&'); theSelection = theSelection.replace(/ \;/ig, ' '); } else if (document.all) { theSelection = divarea.innerText; } else if (divarea.textContent) { theSelection = divarea.textContent; } else if (divarea.firstChild.nodeValue) { theSelection = divarea.firstChild.nodeValue; } } if (theSelection) { if (bbcodeEnabled) { insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); } else { insert_text(username + ' ' + l_wrote + ':' + '\n'); var lines = split_lines(theSelection); for (i = 0; i < lines.length; i++) { insert_text('> ' + lines[i] + '\n'); } } } return; } function split_lines(text) { var lines = text.split('\n'); var splitLines = new Array(); var j = 0; for(i = 0; i < lines.length; i++) { if (lines[i].length <= 80) { splitLines[j] = lines[i]; j++; } else { var line = lines[i]; do { var splitAt = line.indexOf(' ', 80); if (splitAt == -1) { splitLines[j] = line; j++; } else { splitLines[j] = line.substring(0, splitAt); line = line.substring(splitAt); j++; } } while(splitAt != -1); } } return splitLines; } /** * From http://www.massless.org/mozedit/ */ function mozWrap(txtarea, open, close) { var selLength = (typeof(txtarea.textLength) == 'undefined') ? txtarea.value.length : txtarea.textLength; var selStart = txtarea.selectionStart; var selEnd = txtarea.selectionEnd; var scrollTop = txtarea.scrollTop; if (selEnd == 1 || selEnd == 2) { selEnd = selLength; } var s1 = (txtarea.value).substring(0,selStart); var s2 = (txtarea.value).substring(selStart, selEnd); var s3 = (txtarea.value).substring(selEnd, selLength); txtarea.value = s1 + open + s2 + close + s3; txtarea.selectionStart = selStart + open.length; txtarea.selectionEnd = selEnd + open.length; txtarea.focus(); txtarea.scrollTop = scrollTop; return; } /** * Insert at Caret position. Code from * http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 */ function storeCaret(textEl) { if (textEl.createTextRange) { textEl.caretPos = document.selection.createRange().duplicate(); } } /** * Color pallette */ function colorPalette(dir, width, height) { var item = document.getElementById('palette-container'), html = ''; if(!item) return; var r = 0, g = 0, b = 0; var numberList = new Array(6); var color = ''; numberList[0] = '00'; numberList[1] = '40'; numberList[2] = '80'; numberList[3] = 'BF'; numberList[4] = 'FF'; html += ''; for (r = 0; r < 5; r++) { if (dir == 'h') { html += ''; } for (g = 0; g < 5; g++) { if (dir == 'v') { html += ''; } for (b = 0; b < 5; b++) { color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); html += ''; } if (dir == 'v') { html += ''; } } if (dir == 'h') { html += ''; } } html += '
'; html += '#' + color + ''; html += '
'; item.innerHTML = html; } /** * Caret Position object */ function caretPosition() { var start = null; var end = null; } /** * Get the caret position in an textarea */ function getCaretPosition(txtarea) { var caretPos = new caretPosition(); // simple Gecko/Opera way if(txtarea.selectionStart || txtarea.selectionStart == 0) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; } // dirty and slow IE way else if(document.selection) { // get current selection var range = document.selection.createRange(); // a new selection of the whole textarea var range_all = document.body.createTextRange(); range_all.moveToElementText(txtarea); // calculate selection start point by moving beginning of range_all to beginning of range var sel_start; for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) { range_all.moveStart('character', 1); } txtarea.sel_start = sel_start; // we ignore the end value for IE, this is already dirty enough and we don't need it caretPos.start = txtarea.sel_start; caretPos.end = txtarea.sel_start; } return caretPos; }