/*
* This script allows people without installed cyrillic on their computers to be
* able to write in cyrillic in browser. Currently it support only Bulgarain key
* mappings of Phonetic and BDS.
*
* NOTE!!!
* This file is in UTF-8 encoding and when included in the html should be specified.
*
* Copyright Slovored.com (c) 2009
*/

var PHO_LAT_MAP = "aAbBwWgGdDeEvVzZiIjJkKlLmMnNoOpPrRsStTuUfFhHcC`~[{]}yYxX\\|qQ";
var PHO_CYR_MAP = "аАбБвВгГдДеЕжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪьЬюЮяЯ";

var BDS_LAT_MAP = "dD/?lLhHoOeEgGpPrRxXuU.>;:kKfFmM,<iIjJwWbBnN[{\'\"tTyYcCaAzZsSvVqQ]}@#$^&*()_+`~";
var BDS_CYR_MAP = "аАбБвВгГдДеЕжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪьЬюЮяЯэЭыЫ;§?+\"=:/-#|V)(";

// Translation map: 0 - off, 1 - pho, 2 - bds
var translationMap = 0;


function processKey(event, element) {
if (typeof event == 'undefined') {
event = window.event
}
if (translationMap > 0) {
var code = event.keyCode ? event.keyCode : event.charCode ? event.charCode : event.which ? event.which : void 0;
var pos = translationMap == 1 ? PHO_LAT_MAP.indexOf(String.fromCharCode(code)) : BDS_LAT_MAP.indexOf(String.fromCharCode(code));
if (pos >= 0 && !event.ctrlKey && !event.altKey) {
rep = translationMap == 1 ? PHO_CYR_MAP.charAt(pos) : BDS_CYR_MAP.charAt(pos);
if (window.event && !isChrome) {
// for IE and hack not to be GC
window.event.keyCode = rep.charCodeAt();
} else {
if (isChrome) {
// for GC
replaceSelection(element, rep);
} else {
// for FF
var scrollTop = element.scrollTop;
var scrollHeight = element.scrollHeight;
var selectionStart = element.selectionStart;
replaceSelection(element, rep);
var height = element.scrollHeight - scrollHeight;
if (element.scrollTop == 0) {
element.scrollTop = scrollTop + height;
}
element.selectionStart = selectionStart + rep.length;
element.selectionEnd = selectionStart + rep.length;
}
if (event.preventDefault) {
event.preventDefault();
}
event.returnValue = false;
return false;
}
}
}
event.returnValue = true;
return true;
}

function replaceSelection(input, replaceString) {
if (input.setSelectionRange) {
var selectionStart = input.selectionStart;
var selectionEnd = input.selectionEnd;
input.value = input.value.substring(0, selectionStart) + replaceString + input.value.substring(selectionEnd);
input.focus();
input.setSelectionRange(selectionStart + replaceString.length, selectionStart + replaceString.length);
}
}

function toggleEncoding(element, focusElements) {
if (translationMap == 0) {
translationMap = 1;
element.innerHTML = "PHO";
element.style.backgroundColor="red";
try {
setCookie("lat2cyr", "PHO");
} catch(err) {
// Ignore error as this one is optional
}
} else if (translationMap == 1) {
translationMap = 2;
element.innerHTML = "BDS";
element.style.backgroundColor="orange";
try {
setCookie("lat2cyr", "BDS");
} catch(err) {
// Ignore error as this one is optional
}
} else {
translationMap = 0;
element.innerHTML = "OFF";
element.style.backgroundColor="navy";
try {
removeCookie("lat2cyr");
} catch(err) {
// Ignore error as this one is optional
}
}
try {
if (focusElements instanceof Array) {
for (var i = 0; i < focusElements.length; i++) {
try {
var e = document.getElementById(focusElements[i]);
if ((e != null) && (!e.disabled)) {
e.focus();
break;
}
} catch(err) {
// Ignore error as focusElements is optional or may not exist
}
}
} else {
var e = document.getElementById(focusElements);
if (e != null) {
e.focus();
}
}
} catch(err) {
// Ignore error as focusElements is optional or may not exist
}
return false;
}

function switchEncoding(element, encoding) {
try {
if (element != null) {
if (encoding == "PHO") {
translationMap = 1;
element.innerHTML = "PHO";
element.style.backgroundColor="red";
} else if (encoding == "BDS") {
translationMap = 2;
element.innerHTML = "BDS";
element.style.backgroundColor="orange";
} else {
translationMap = 0;
element.innerHTML = "OFF";
element.style.backgroundColor="navy";
}
}
} catch(err) {
// Ignore error as this function may be called when lat2cyr does not exist
}
}

