﻿var ru_ycukeng_ltr = "ФИЦПВУМЯШОЛДЬТЩЗКЫЕГАРСХЪНЧЙБЖЮЭфицпвумяшолдьтщзкыегарс=хънч/ёйбжюэ,Ё!@#;%^&*()_+\\";
var ru_yawerty_ltr = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦШЩЫЬЯ<:>\"абвгдежзийклмнопрстуфхцчшщыьэюя,;.'/Ю!@ъЪ%ёЁ*()_ЧЭ";

var ua_ycukeng_ltr = "ФИЦПВУМЯШОЛДЬТЩЗКІЕГАРСХЇНЧЙБЖЮЄфицпвумяшолдьтщзкіегарс=хїнч/ґйбжює,Ґ!@#;%^&*()_+\\";
var ua_yawerty_ltr = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦШЩІЬЯ<:>\"абвгдежзийклмнопрстуфхцчшщіьєюя,;.'/Ю!@їЇ%ґҐ*()_ЧЄ";

var latin_ltr	= "ABWGDEVZIJKLMNOPRSTUFHC{}YXQ<:>\"abwgdevzijklmnoprstufhc=[]yx\\`q,;.'/~!@#$%^&*()_+|";
var hebrew_ltr	= "ABWGDEVZIJKLMNOPRSTUFHC{}YXQ<:>\"שנ'עגקהזןחלךצמםפרדאוכיב=][טס\\;/תףץ,.ְֱֲֳִֵֶַָֹֻּׁׂ";

// Keyboard picture:
var kbd_ru_std = "ё1234567890-=йцукенгшщзхъ/фывапролджэячсмитьбю.";
var kbd_ru_std_shift = "Ё!\"#;%:?*()_+ЙЦУКЕНГШЩЗХЪ\\ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,";
var kbd_ru_pho = "ю1234567890-чявертыуиопшщэасдфгхйкл;'зьцжбнм,./";
var kbd_ru_pho_shift = "Ю!@ъЪ%ёЁ*()-ЧЯВЕРТЫУИОПШЩЭАСДФГХЙКЛ:\"ЗЬЦЖБНМ<>/";

var kbd_en = "`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./";
var kbd_en_shift = "~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:\"ZXCVBNM<>?";

var kbd_he = ";1234567890-=/'קראטוןםפ][\\שדגכעיחלךף,זסבהנמצתץ.";
var kbd_he_shift = "ְֱֲֳִֵֶַָֹּׁׂQWERTYUIOP{}ֻASDFGHJKL:\"ZXCVBNM<>?";

var kbd_ua_std = "ґ1234567890-=йцукенгшщзхї/фівапролджєячсмитьбю.";
var kbd_ua_std_shift = "Ґ!\"#;%:?*()_+ЙЦУКЕНГШЩЗХЇ\\ФІВАПРОЛДЖЄЯЧСМИТЬБЮ'";
var kbd_ua_pho = "ю1234567890-чявертіуиопшщєасдфгхйкл;'зьцжбнм,./";
var kbd_ua_pho_shift = "Ю!@їЇ%ґҐ*()_ЧЯВЕРТІУИОПШЩЄАСДФГХЙКЛ:\"ЗЬЦЖБНМ<>?";

var kbds = []
kbds["ru_std"] = kbd_ru_std;
kbds["ru_std_shift"] = kbd_ru_std_shift;
kbds["ru_pho"] = kbd_ru_pho;
kbds["ru_pho_shift"] = kbd_ru_pho_shift;

kbds["en"] = kbd_en;
kbds["en_shift"] = kbd_en_shift;

kbds["he"] = kbd_he;
kbds["he_shift"] = kbd_he_shift;

kbds["ua_std"] = kbd_ua_std;
kbds["ua_std_shift"] = kbd_ua_std_shift;
kbds["ua_pho"] = kbd_ua_pho;
kbds["ua_pho_shift"] = kbd_ua_pho_shift;

var ru = 0;
var en = 1;
var he = 2;
var ua = 3;

var curLang = "ru";
var curKbd = kbd_ru_pho;

var ycukeng = 1;
var yawerty = 0;

var msgtxt;

var browser = "n/a";
var shift = 0;
var manualShift = 0;
var capslock = 0;

function myOnLoad()
{
	msgtxt = window.document.translitted.messagetext;

	if ((navigator.userAgent).indexOf("Opera")!=-1) {
		browser = "Opera";
	}
	else if (navigator.appName=="Netscape") {
		browser = "Netscape";
	}
	else if ((navigator.appName).indexOf("Microsoft")!=-1) {
		browser = "IE";
	}
}

function getEventCharCode (evnt)
{
	if (evnt.ctrlKey || evnt.altKey)
		return 0;

	if (browser == "Netscape")
		code = evnt.charCode;
	else
		code = evnt.keyCode;

	return code;
}

function insertCharMozilla(txtarea, ch)
{
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;

	var s1 = (txtarea.value).substring(0,selStart);
	var s3 = (txtarea.value).substring(selEnd, selLength);
	txtarea.value = s1 + ch + s3;
	txtarea.selectionStart = selStart+1;
	txtarea.selectionEnd = selStart+1;
	return;
}

function setCaretTo(obj, pos)
{
    if(obj.createTextRange)
    {
        var range = obj.createTextRange();
        range.move("character", pos);
        range.select();
    }
}

function insertCharIE(txtarea, ch)
{
    txtarea.focus();
    var range = document.selection.createRange();
    if(range.parentElement() != txtarea)
    {
        return false;
    }
    var orig = txtarea.value.replace(/rn/g, "n");
    range.text = ch;

    var actual = tmp = txtarea.value.replace(/rn/g, "n");

    var diff = 0;
    for(; diff < orig.length; ++diff)
    {
        if (orig.charAt(diff) != actual.charAt(diff))
            break;
    }

    setCaretTo(txtarea, diff+1);
}

function appendChar (ch)
{
	if (browser != "IE")
	{
		insertCharMozilla(msgtxt, ch);
	}
	else
	{
        insertCharIE(msgtxt, ch);
	}
}

function setEventChar (evnt,ch)
{
	if (browser != "IE")
	{
		insertCharMozilla(msgtxt, ch);
		return false;
	}
	else
	{
		evnt.keyCode = String(ch).charCodeAt(0);
		return true;
	}
}

function checkShiftDown(evnt)
{
    if (event.shiftKey==1)
    {
        manualShift = 1;
        shift = 1;
        refreshLayout();
    }
    return true;
}

function checkShiftUp(evnt)
{
    if (event.shiftKey==0)
    {
        manualShift = 0;
        shift = 0;
        refreshLayout();
    }
    return true;
}

function onSetFocus()
{
    if (!manualShift)
    {
        shift = 0;

        // capslock = 0;
        // capslockOff();
        refreshLayout();
    }
}

function convertLetter(evnt)
{
	// not supported by old Javascript versions

	var lang = window.document.translitted.lang_choice;
	var kbd = window.document.translitted.kbd_choice;

	if (lang[en].checked) // no conversion needed
    {
		return true;
    }

	code = getEventCharCode (evnt);
	ch = String.fromCharCode(code);

	if (lang[he].checked)
	{
		cur_lang_ltr = hebrew_ltr;
	}
	else
	{
		if (lang[ua].checked)
		{
			if (kbd[ycukeng].checked)
				cur_lang_ltr = ua_ycukeng_ltr;
			else
				cur_lang_ltr = ua_yawerty_ltr;
		}
		else
		{
			if (kbd[ycukeng].checked)
				cur_lang_ltr = ru_ycukeng_ltr;
			else
				cur_lang_ltr = ru_yawerty_ltr;
		}
	}

	idx = latin_ltr.indexOf(ch);
	if (idx != -1)
	{
		convChar = cur_lang_ltr.charAt(idx);

		if (convChar != "")
			return setEventChar (evnt, convChar);
	}

	return true;
}

function highlightAll()
{
	msgtxt.select();
	msgtxt.focus();
}
function copyAll() {
	highlightAll();
	textRange = msgtxt.createTextRange();
	textRange.execCommand("RemoveFormat");
	textRange.execCommand("Copy");
}

function preprocessKbdName(lang)
{
    var res = lang;
    var kbd = window.document.translitted.kbd_choice;
    var cyrVariant;

    if (lang == 'ua' || lang == 'ru')
    {
        if (kbd[ycukeng].checked)
        {
            cyrVariant = 'std';
        }
        else
        {
            cyrVariant = 'pho';
        }
        res += '_' + cyrVariant;
    }

    if (shift || capslock || manualShift)
    {
        res += '_shift';
    }

    return res;
}


function setLayout(lang)
{
    curLang = lang;
    var kbd_name = preprocessKbdName(lang);
    curKbd = kbds[kbd_name];
    var basename = 'char';
    for (c=0; c<curKbd.length; ++c)
    {
        window.document.getElementById(basename + c).value = curKbd.charAt(c);
    }
}

function refreshLayout()
{
    setLayout(curLang);
}

function addKey(c)
{
    var thisCh = curKbd.charAt(c);
    appendChar(thisCh);
    if (shift && !capslock && !manualShift)
    {
        shift = 0;
        refreshLayout();
    }
    msgtxt.focus();
}

function shiftPressed()
{
    if (!capslock)
    {
        shift = !shift;
        refreshLayout();
    }
}

function capslockOn()
{
    var capslockKey = window.document.getElementById('capslock');
    capslockKey.style.background = "#666666";
    capslockKey.style.color = "white";
}

function capslockOff()
{
    var capslockKey = window.document.getElementById('capslock');
    capslockKey.style.background = "white";
    capslockKey.style.color = "#666666";
}

function capslockPressed()
{
    capslock = !capslock;
    shift = capslock;
    refreshLayout();

    if (capslock)
    {
        capslockOn();
    }
    else
    {
        capslockOff();
    }
}

function addEnter()
{
    appendChar('\n');
    msgtxt.focus();
}


///////////////////////////////////////////////////////////////

// From http://www.massless.org/mozedit/
function backspaceMozilla(txtarea)
{
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd == 1 || selEnd == 2)
		selEnd = selLength;

	var s1 = (txtarea.value).substring(0,selStart);
	var s3 = (txtarea.value).substring(selEnd, selLength);
	txtarea.value = s1 + ch + s3;
	txtarea.selectionStart = selEnd+1;
	txtarea.selectionEnd = selEnd+1;
	return;
}

///////////////////////////////////////////////////////////
//

function backspaceMozilla(txtarea)
{
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;

    var selBack = selStart;

	var selEnd = txtarea.selectionEnd;

    if (selEnd == selStart && selBack > 0)
        --selBack;

	var head = (txtarea.value).substring(0,selBack);
	var tail = (txtarea.value).substring(selEnd, selLength);

	txtarea.value = head + tail;
	txtarea.selectionStart = selBack;
	txtarea.selectionEnd = selBack;
}

function backspaceIE(txtarea)
{
    sel = document.selection.createRange();

    // selection is not empty
    if (sel.text!="")
    {
        sel.text = "";
        sel.collapse();
        sel.select()
        return;
    }

    // selection empty: just a regular backspace step
    sel.moveStart("character",-1);
    prev = sel.text;

    if (prev!="")
    {
        sel.select();
        sel.collapse();
    }

    var range = document.selection.createRange();
    range.text = "";
    range.collapse();
    range.select();
}

function backspacePressed()
{
    msgtxt.focus();

    if (browser == "IE" || browser == "Opera")
    {
        backspaceIE(msgtxt);
    }
	else
	{
        backspaceMozilla(msgtxt);
	}

    msgtxt.focus();
}


