У меня получилось так (наборы символов оставил из топика, можно расширять, добавить uppercase и др.):
function toggleEncoding(txt) {
var rus = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
var eng = "f,dult`;pbqrkvyjghcnea[wxio]sm'.z";
if(txt.search(/[а-яА-Я]/i) > -1) var from = rus, to = eng;
else var from = eng, to = rus;
txt = txt.split('');
for (var i = 0; i < txt.length; i++) {
console.log(from.indexOf(txt[i]));
txt[i] = to.charAt(from.indexOf(txt[i])) || txt[i];
}
txt = txt.join('');
alert(txt);
}
toggleEncoding('тест');
toggleEncoding('ntcn');