function insertAtCursor(myField, myValue) { //IE support if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; } //MOZILLA/NETSCAPE support else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; var restoreTop = myField.scrollTop; myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length); if (restoreTop > 0) { myField.scrollTop = restoreTop + 20; } myField.setSelectionRange(startPos+1, endPos+1); } else { myField.value += myValue; } } function uniCope(e) { function timeoutFunc(){ buildBar(obj); } if (!e) e = window.event; var obj = (e.target) ? e.target : e.srcElement; var keyCode = (window.event)? e.keyCode : e.which; var thisForm = document.forms.postForm; /* kbpref = 0 for Phonetic keyboard * kbPref = 1 for Standard keyboard * kbPref = -1 for unicode */ if (lang == 'ru'){ if (keyCode < 127) {// If the ascii code is phonetic or stndard if (keyCode > 32) { var chr = convert[kbPref][String.fromCharCode(keyCode)]; if (chr != '') { insertAtCursor(obj, chr); return false; } }//if (keyCode > 32) }//if (keyCode < 127) else if (keyCode > 256){ if(kbPref!=-1){ kbPref = -1; // use in convert updateKBPref(); removeChildren(document.getElementById('languageBar')); makeTitleDIV(obj); var spanTitle = document.getElementById('spanTitle'); spanTitle.appendChild(document.createTextNode("Online keyboard exiting...")); spanTitle.style.fontSize = '9pt'; document.getElementById('kbImg').style.visibility = 'hidden'; adjustLangBarPosition(obj); document.getElementById('languageBar').style.visibility = 'visible'; timerID=setTimeout(timeoutFunc, 3000); lang = 'en'; if (thisForm.isWarmup) { thisForm.examineeTextSamp.value = ''; showWarning(); } var keyboardDIV = document.getElementById('keyboardDIV'); if (keyboardDIV.style.visibility == 'visible'){ keyboardDIV.style.visibility = "hidden"; } if (keyboardDIV) { keyboardDIV.style.backgroundImage = "url(images/keyboard/none.gif)"; } } //if (kbPref!=-1) }//if (keyCode > 256) // alert user if they are using non unicode character else { if (thisForm.isWarmup) { thisForm.examineeTextSamp.value = ''; } alert('You are using a keyboard driver which is not permitted. Please switch your system keyboard driver to English'); } }//if (lang == 'ru') return true; } window.addListener(window,'load',textInit, false); var initialFocusField = -1; function textInit() { var texts = document.getElementsByTagName("TEXTAREA"); var inputs = document.getElementsByTagName("INPUT"); for (i = 0; i < texts.length; i++) { if (texts[i].id) { text = texts[i]; if (text.className=="conversionEnabled") { // hacky what can we use besides class to mark unicode fields? if (initialFocusField == -1) initialFocusField = text; text.onkeypress = uniCope; text.onfocus = function () {createLanguageBar(document.getElementById(text.id), languageOps, kbPref, lang)} } } } for (i = 0; i < inputs.length; i++) { if (inputs[i].id) { if (inputs[i].type == "text") { text = inputs[i]; if (initialFocusField == -1) initialFocusField = text; if (text.className == "conversionEnabled") { text.onkeypress = uniCope; text.onfocus = function () {createLanguageBar(document.getElementById(text.id), languageOps, kbPref, lang)} } } } } if (initialFocusField != -1) { timerID=setTimeout("firstFocus()",100); } // IE NOT WORKING ??? //var body = (document.body) ? document.body : document.getElementsByTagName("body").item(0); var body = document.getElementsByTagName("body").item(0); var languageBar = document.createElement('div'); languageBar.id = 'languageBar'; languageBar.name = 'languageBar'; body.appendChild(languageBar); var keyboardDIV = document.createElement('div'); keyboardDIV.id = 'keyboardDIV'; keyboardDIV.name = 'keyboardDIV'; keyboardDIV.className = 'drag'; body.appendChild(keyboardDIV); } function firstFocus(){ initialFocusField.focus() } function switchKeyboard(num,textField){ var thisForm = document.forms.postForm; var kbPrefRef = thisForm.kbPref; kbPref = num; // use in convert var keyboardDIV = document.getElementById('keyboardDIV'); if (keyboardDIV.style.visibility == 'visible'){ keyboardDIV.style.visibility = "hidden"; } removeWarning(); if (keyboardDIV) { var kbImg = (num == 0) ? 'phonetic' : 'standard'; keyboardDIV.style.backgroundImage = "url(images/keyboard/" + kbImg + ".gif)"; } textField.focus(); } function showWarning() { var msgAnchor = document.getElementById('msgAnchor'); var msgDiv = document.createElement('div'); msgDiv.className = 'warningMsg_kb'; var msg = "We have detected that you are using your own keyboard driver you may countinue to use this through out " + "the exam however we cannot supply you with a keyboard layout." + "To use the default Russian keyboard driver: "; var msgBody = document.createTextNode(msg); msgDiv.appendChild(msgBody); var msgOL = document.createElement('ol'); var msgLi_1 = document.createElement('li'); var msgLi_2 = document.createElement('li'); var liMsg_1 = 'Switch your system keyboard driver to English.'; var liMsg_2 = 'Select either Phonetic or Standard keyboard.'; var msgBody_1 = document.createTextNode(liMsg_1); var msgBody_2 = document.createTextNode(liMsg_2); msgLi_1.appendChild(msgBody_1); msgLi_2.appendChild(msgBody_2); msgOL.appendChild(msgLi_1); msgOL.appendChild(msgLi_2); msgDiv.appendChild(msgOL); msgAnchor.appendChild(msgDiv); } function removeWarning(){ var msgAnchor = document.getElementById('msgAnchor'); if (msgAnchor) { while(msgAnchor.hasChildNodes()) { msgAnchor.removeChild(msgAnchor.childNodes[0]); } } } function returnToExam(userKey){ updateKBPref(kbPref); var thisForm = document.forms.postForm; if (thisForm.examineeTextSamp.value == ''){ alert ('Please enter the specified text into the text area.'); return; } var sampleText = rusSmallP + rusSmallO + rusSmallR + rusSmallA + rusSmallP + rusSmallEE + rusSmallS + rusSmallA + rusSmallT + rusSmallSoftSign; var string = thisForm.examineeTextSamp.value.toLowerCase(); string = string.replace(/\s*/g,''); string = string.replace(/(\.|\,|\;|\:|\-|\'\|\")*/g,''); var stringMatchCounter = 0; for (var i=0;i