var insertionS = 0; var insertionE = 0; var activeEl = "doc";// 0 - input 1 - textararea /* if (!support_speech_attribute()) { if(window.location.href.indexOf("/en/") != -1) document.write('Your browser does not allow speech input - try to install google CHROME'); else document.write('Ваш браузер на поддерживает голосового ввода - попробуйте установить google CHROME'); } */ function getcaretpos(ctrl) { if(ctrl.id == "docel") activeEl = "doc"; else activeEl = "inp"; getCaretPositions(ctrl); } function getCaretPositions(ctrl) { var CaretPosS = -1, CaretPosE = 0; // Mozilla way: if(ctrl.selectionStart || (ctrl.selectionStart == '0')) { CaretPosS = ctrl.selectionStart; CaretPosE = ctrl.selectionEnd; insertionS = CaretPosS == -1 ? CaretPosE : CaretPosS; insertionE = CaretPosE; } // IE way: else if(document.selection && ctrl.createTextRange) { var start = end = 0; try { start = Math.abs(document.selection.createRange().moveStart("character", -10000000)); // start if (start > 0) { try { var endReal = Math.abs(ctrl.createTextRange().moveEnd("character", -10000000)); var r = document.body.createTextRange(); r.moveToElementText(ctrl); var sTest = Math.abs(r.moveStart("character", -10000000)); var eTest = Math.abs(r.moveEnd("character", -10000000)); if ((ctrl.tagName.toLowerCase() != 'input') && (eTest - endReal == sTest)) start -= sTest; } catch(err) {} } } catch (e) {} try { end = Math.abs(document.selection.createRange().moveEnd("character", -10000000)); // end if(end > 0) { try { var endReal = Math.abs(ctrl.createTextRange().moveEnd("character", -10000000)); var r = document.body.createTextRange(); r.moveToElementText(ctrl); var sTest = Math.abs(r.moveStart("character", -10000000)); var eTest = Math.abs(r.moveEnd("character", -10000000)); if ((ctrl.tagName.toLowerCase() != 'input') && (eTest - endReal == sTest)) end -= sTest; } catch(err) {} } } catch (e) {} insertionS = start; insertionE = end } } function support_speech_attribute() { var i = document.createElement('input'); return ('speech' in i || 'webkitSpeech' in i); } function add_speech() { var speechel = document.getElementById("speechel"); var docel = document.getElementById("docel"); if(docel.value != "" ) { if(docel.value.charAt(docel.value.length-1) != '\n') docel.value = docel.value + " " + speechel.value; else docel.value = docel.value + speechel.value; } else docel.value = speechel.value; activeEl = "doc"; insertionS = -1; } function getActiveField() { if(activeEl == "doc") return document.getElementById("docel"); else return document.getElementById("speechel"); } function add_punct(punct) { var punctval; switch(punct.value) { case "\\n": punctval = "\n"; break; default: punctval = punct.value; break; } var docel = getActiveField(); if(insertionS == -1) docel.value = docel.value + punctval; else { docel.value = docel.value.substring(0,insertionS) + punctval + docel.value.substring(insertionS); insertionS = insertionS + 1; } } function add_cap() { var docel = getActiveField(); if(insertionS == -1) { if(activeEl == "inp") docel.value = docel.value.charAt(0).toUpperCase() + docel.value.substr(1); //nothing for doc } else { var pospr = docel.value.lastIndexOf(" ",insertionS); var posent = docel.value.lastIndexOf("\n",insertionS); var pos = pospr > posent ? pospr : posent; if(pos == -1) docel.value = docel.value.charAt(0).toUpperCase() + docel.value.substr(1); else docel.value = docel.value.substr(0,pos+1) + docel.value.charAt(pos+1).toUpperCase() + docel.value.substr(pos+2); } }