/********************************************************************************
JavaScript Virtual Keyboard

Copyright (C) 2006 Dmitry Khudorozhkov (mailto:kh_dmitry2001@mail.ru)

This software is provided "as-is", without any express or implied warranty. In
no event will the author be held liable for any damages arising from the use
of this software.

Permission is granted to anyone to use this software for any purpose, including
commercial applications, and to alter it and redistribute it freely, subject to
the following restrictions:

1. The origin of this software must not be misrepresented; you must not claim
that you wrote the original software. If you use this software in a product,
an acknowledgment in the product documentation would be appreciated but is
not required.

2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.

3. This notice may not be removed or altered from any source distribution.

********************************************************************************/

var kbArray = new Array();

var agent = navigator.userAgent.toLowerCase();
var msie = (agent.indexOf("msie") != -1);

function setup_event(elem, eventType, handler) {
    if (elem)
        if (elem.attachEvent) {
        elem.attachEvent("on" + eventType, handler);
    }
    else if (elem.addEventListener) {
        elem.addEventListener(eventType, handler, false);
    }
}

function detach_event(elem, eventType, handler) {
    if (elem.detachEvent) {
        elem.detachEvent("on" + eventType, handler);
    }
    else if (elem.removeEventListener) {
        elem.removeEventListener(eventType, handler, false);
    }
}

function get_event_source(e) {
    var event = e ? e : window.event;
    return event.srcElement ? event.srcElement : event.target;
}

function setup_style(element, top, left, width, height, position, border_color, text_align, line_height, font_weight, font_size, padding_left, padding_right) {
    if (top) element.style.top = top;
    if (left) element.style.left = left;
    if (width) element.style.width = width;
    if (height) element.style.height = height;
    if (position) element.style.position = position;

    if (border_color) element.style.border = "1px solid " + "#c4c4c4"; //border_color;
    if (line_height) element.style.lineHeight = line_height;
    if (text_align) element.style.textAlign = text_align;

    if (padding_left) element.style.paddingLeft = padding_left;
    if (padding_right) element.style.paddingRight = padding_right;

    element.style.fontWeight = (font_weight ? font_weight : "bold");
    element.style.fontSize = (font_size ? font_size : "12px");

    if (msie) element.UNSELECTABLE = "on";
}

function setup_key_element(top, left, width, height, border_color, text_align, line_height, font_weight, font_size, padding_left, padding_right, disableHighlight) {
    var key = document.createElement("DIV");
    setup_style(key, top, left, width, height, "absolute");

    var key_sub = document.createElement("DIV");
    key.appendChild(key_sub);

    setup_style(key_sub, "", "", "", line_height, "relative", border_color, text_align, line_height, font_weight, font_size, padding_left, padding_right);
    if (!disableHighlight) {
        setup_event(key_sub, 'mouseover', new Function("event", "get_event_source(event).style.backgroundColor = '#DDD'"));
        setup_event(key_sub, 'mouseout', new Function("event", "get_event_source(event).style.backgroundColor = '#d6c9dc'"));
    }
    else {
        key.style.color = "#5E8CC3"; //"#AF624A";
    }
    var retObj = new Object();
    retObj.main = key;
    retObj.sub = key_sub;

    return retObj;
}

function ShowVKeyboard(container_id, callback_proc, shownhide_on_change) {
    var ct = document.getElementById(container_id);

    var vkboard = kbArray[container_id];

    if (vkboard) {
        var changed = false;

        if ((vkboard.Callback != callback_proc) && (String(callback_proc).length > 0)) {
            vkboard.Callback = callback_proc;
            changed = true;
        }

        if (!changed || (changed && shownhide_on_change)) {
            ct.style.display = (ct.style.display == "none" ? "block" : "none");

            if (ct.style.display == "none") {
                var menu = document.getElementById(container_id + "___lang_menu");
                if (menu)
                    menu.style.display = "none";
            }
        }
    }
    else {
        vkboard = new Object;

        vkboard.Callback = callback_proc;
        vkboard.Caps = false;
        vkboard.Shift = false;
        vkboard.AltGr = false;
        vkboard.DeadAction = null;
        vkboard.DeadValue = null;
        vkboard.CurrentLayout = "Ar";

        vkboard.keys = new Array();
        vkboard.ctrl = new Array();

        kbArray[container_id] = vkboard;

        var kb = document.createElement("DIV");
        ct.appendChild(kb);

        kb.style.position = "relative";
        kb.style.top = "0px";
        kb.style.left = "0px";
        kb.style.width = "414px";
        kb.style.border = "1px solid #999";

        var kb_main = document.createElement("DIV");
        kb.appendChild(kb_main);

        kb_main.style.position = "relative";
        kb_main.style.width = "414px";
        kb_main.style.height = "131px";
        kb_main.style.cursor = "default";
        // for background color
        //    kb_main.style.backgroundColor = "#EFEFEF";

        // Number row:

        for (var i = 0; i < 13; i++) {
            var key = setup_key_element("1px", String(i * 26 + 1) + "px", "25px", "25px", "#777", "center", "23px");
            key.sub.id = container_id + "___key" + String(i);
            kb_main.appendChild(key.main);
            vkboard.keys[i] = key.sub;

        }

        var kb_kbp = setup_key_element("1px", "339px", "53px", "25px", "#777", "right", "23px", "normal", "14px", "", "4px");
        kb_kbp.sub.innerHTML = "BakSpc";
        kb_kbp.sub.style.fontFamily = "Verdana";
        kb_kbp.sub.style.fontSize = "11";
        kb_kbp.sub.id = container_id + "___kbp";
        kb_main.appendChild(kb_kbp.main);
        vkboard.ctrl[vkboard.ctrl.length] = kb_kbp.sub;

        var close = setup_key_element("1px", "393px", "20px", "25px", "#777", "right", "23px", "normal", "14px", null, "4px");
        close.sub.innerHTML = "X";
        close.sub.style.fontFamily = "Verdana";
        close.sub.style.fontSize = "12";
        close.sub.style.fontWeight = "bold";
        close.sub.id = container_id + "___close";
        kb_main.appendChild(close.main);
        vkboard.ctrl[vkboard.ctrl.length] = close.sub;


        // Top row:

        var kb_tab = setup_key_element("27px", "1px", "37px", "25px", "#777", "left", "23px", "normal", "14px", "4px");
        kb_tab.sub.innerHTML = "Tab";
        kb_tab.sub.style.fontFamily = "Verdana";
        kb_tab.sub.style.fontSize = "11";
        kb_tab.sub.id = container_id + "___tab";
        kb_main.appendChild(kb_tab.main);
        vkboard.ctrl[vkboard.ctrl.length] = kb_tab.sub;

        for (; i < 26; i++) {
            var key = setup_key_element("27px", String((i - 13) * 26 + 39) + "px", "25px", "25px", "#777", "center", "23px");
            key.sub.id = container_id + "___key" + String(i);
            kb_main.appendChild(key.main);

            vkboard.keys[i] = key.sub;

        }

        var kb_enter_top = setup_key_element("27px", "377px", "36px", "27px", null, "center", "25px", "", "", "", "", true);
        kb_enter_top.sub.innerHTML = "&nbsp;";
        kb_enter_top.sub.subst = "Enter";                   // Special expando
        kb_enter_top.sub.id = container_id + "___enter_top";
        kb_main.appendChild(kb_enter_top.main);
        vkboard.ctrl[vkboard.ctrl.length] = kb_enter_top.sub;

        // Home row:

        var kb_caps = setup_key_element("53px", "1px", "50px", "25px", "#777", "left", "23px", "normal", "14px", "4px", "", true);
        kb_caps.sub.id = container_id + "___caps";
        kb_main.appendChild(kb_caps.main);
        vkboard.ctrl[vkboard.ctrl.length] = kb_caps.sub;

        for (; i < 38; i++) {
            var key = setup_key_element("53px", String((i - 26) * 26 + 52) + "px", "25px", "25px", "#777", "center", "23px");
            key.sub.id = container_id + "___key" + String(i);
            kb_main.appendChild(key.main);

            vkboard.keys[i] = key.sub;
        }

        var kb_enter_l = setup_key_element("53px", "364px", "49px", "25px", null, "right", "23px", "normal", "14px", "", "4px", true);
        kb_enter_l.sub.innerHTML = "&nbsp";
        kb_enter_l.sub.subst = "Enter";
        kb_enter_l.sub.id = container_id + "___enter_l";
        kb_main.appendChild(kb_enter_l.main);
        vkboard.ctrl[vkboard.ctrl.length] = kb_enter_l.sub;

        var kb_enter = setup_key_element("53px", "377px", "36px", "25px", null, "left", "23px", "normal", "12px", "", "4px", true);
        kb_enter.sub.innerHTML = "Enter";
        kb_enter.sub.style.fontFamily = "Verdana";
        kb_enter.sub.style.fontSize = "11";
        kb_enter.sub.id = container_id + "___enter";
        kb_main.appendChild(kb_enter.main);
        vkboard.ctrl[vkboard.ctrl.length] = kb_enter.sub;

        // Bottom row:

        var kb_shift = setup_key_element("79px", "1px", "63px", "25px", "#777", "left", "23px", "normal", "14px", "4px", "", true);
        kb_shift.sub.innerHTML = "Shift";
        kb_shift.sub.style.fontFamily = "Verdana";
        kb_shift.sub.style.fontSize = "11";
        kb_shift.sub.id = container_id + "___shift";
        kb_main.appendChild(kb_shift.main);
        vkboard.ctrl[vkboard.ctrl.length] = kb_shift.sub;

        for (; i < 48; i++) {
            var key = setup_key_element("79px", String((i - 38) * 26 + 65) + "px", "25px", "25px", "#777", "center", "23px");
            key.sub.id = container_id + "___key" + String(i);
            kb_main.appendChild(key.main);
            vkboard.keys[i] = key.sub;
        }

        var kb_shift_r = setup_key_element("79px", "325px", "88px", "25px", "#777", "right", "23px", "normal", "14px", "", "4px", true);
        kb_shift_r.sub.innerHTML = "Shift";
        kb_shift_r.sub.style.fontFamily = "Verdana";
        kb_shift_r.sub.style.fontSize = "11";
        kb_shift_r.sub.id = container_id + "___shift_r";
        kb_main.appendChild(kb_shift_r.main);
        vkboard.ctrl[vkboard.ctrl.length] = kb_shift_r.sub;

        var kb_res_1 = setup_key_element("105px", "1px", "101px", "25px", "#CCC", "center", "23px", "bold", "10px", "", "", true);
        kb_res_1.sub.id = container_id + "___res_1";

        var kb_space = setup_key_element("105px", "103px", "157px", "25px", "#777", "center", "23px");
        kb_space.sub.id = container_id + "___space";
        setup_event(kb_space.sub, 'mousedown', generic_callback_proc);
        vkboard.ctrl[vkboard.ctrl.length] = kb_space.sub;
        //152     15
        var kb_alt_gr = setup_key_element("105px", "261px", "152px", "25px", "#ccc", "center", "23px", "bold", "10px", "", "", true);
        kb_alt_gr.sub.id = container_id + "___alt_gr";

        var kb_res_5 = setup_key_element("105px", "295px", "33px", "25px", "#CCC", "center", "23px");
        kb_res_5.sub.innerHTML = "&nbsp;";
        kb_res_5.sub.id = container_id + "___res_5";

        var kb_res_6 = setup_key_element("105px", "329px", "33px", "25px", "#CCC", "center", "23px");
        kb_res_6.sub.innerHTML = "&nbsp;";
        kb_res_6.sub.id = container_id + "___res_6";

        kb_main.appendChild(kb_res_1.main);
        kb_main.appendChild(kb_space.main);
        kb_main.appendChild(kb_alt_gr.main);

        refresh_layout(container_id);
    }
}

function set_key_state(key, onoff, textcolor, bordercolor, backgroundcolor) {
    if (key && key.style) {
        if (key.innerHTML == "Shift") {
            if (backgroundcolor) key.style.backgroundColor = backgroundcolor;
        }
        else {
            //    if(backgroundcolor) key.style.backgroundColor = '#EFEFEF';
        }

        if (bordercolor) key.style.borderColor = "#fff";
        if (textcolor) key.style.color = textcolor;
        if (key.id.indexOf("enter") != -1) {
            key.style.border = "#d6c9dc 0px solid";
        }
    }

    detach_event(key, 'mousedown', generic_callback_proc);
    if (onoff)
        setup_event(key, 'mousedown', generic_callback_proc);
}

function refresh_layout(container_id) {
    var vkboard = kbArray[container_id];

    var layout_name = vkboard.CurrentLayout;
    var arr_type = vkboard.AltGr ? (vkboard.Shift ? "alt_gr_shift" : "alt_gr") : (vkboard.Shift ? "shift" : (vkboard.Caps ? "caps" : "normal"));

    var nkeys = vkboard.keys.length;

    eval("var caps_arr = typeof(" + layout_name + "_caps) != 'undefined'");
    if (caps_arr)
        eval("caps_arr = " + layout_name + "_caps.length == " + String(nkeys));

    eval("var shift_arr = typeof(" + layout_name + "_shift) != 'undefined'");
    if (shift_arr)
        eval("shift_arr = " + layout_name + "_shift.length == " + String(nkeys));


    eval("var alt_gr_arr = typeof(" + layout_name + "_alt_gr) != 'undefined'");
    if (alt_gr_arr)
        eval("alt_gr_arr = " + layout_name + "_alt_gr.length == " + String(nkeys));

    eval("var alt_gr_shift_arr = alt_gr_arr && typeof(" + layout_name + "_alt_gr_shift) != 'undefined'");
    if (alt_gr_shift_arr)
        eval("alt_gr_shift_arr = " + layout_name + "_alt_gr_shift.length == " + String(nkeys));

    var caps = document.getElementById(container_id + "___caps");
    var shift = document.getElementById(container_id + "___shift");
    var shift_r = document.getElementById(container_id + "___shift_r");
    var alt_gr = document.getElementById(container_id + "___alt_gr");
    var space = document.getElementById(container_id + "___space");
    var lang = document.getElementById(container_id + "___lang");
    var enter_t = document.getElementById(container_id + "___enter_top");
    var enter_l = document.getElementById(container_id + "___enter_l");
    var enter_c = document.getElementById(container_id + "___enter");

    if (shift_arr) {
        set_key_state(shift, true, "#000", "#777", vkboard.Shift ? "#C4C4C4" : "#d6c9dc");
        set_key_state(shift_r, true, "#000", "#777", vkboard.Shift ? "#C4C4C4" : "#d6c9dc");

    }
    else {
        set_key_state(shift, false, "#CCC", "#CCC", "#d6c9dc");
        set_key_state(shift_r, false, "#CCC", "#CCC", "#d6c9dc");

        if (arr_type == "shift") {
            arr_type = "normal";
            vkboard.Shift = false;
        }
    }

    if (alt_gr_arr) {
        //        set_key_state(alt_gr, true, "#000", "#777", vkboard.AltGr ? "#DDD" : "#FFF");

        if ((arr_type == "alt_gr") || (arr_type == "alt_gr_shift")) {
            if (alt_gr_shift_arr) {
                alert('not good alt_gr_arr');
                set_key_state(shift, true, "#000", "#777", "");
                set_key_state(shift_r, true, "#000", "#777", "");
            }
            else {
                alert('not good alt_gr_arr');
                set_key_state(shift, false, "#CCC", "#CCC", "#FFF");
                set_key_state(shift_r, false, "#CCC", "#CCC", "#FFF");

                arr_type = "alt_gr";
                vkboard.Shift = false;
            }
        }
    }
    else {
        //        set_key_state(alt_gr, false, "#CCC", "#CCC", "#FFF");

        if (arr_type == "alt_gr") {
            arr_type = "normal";
            vkboard.AltGr = true;
        }
        else if (arr_type == "alt_gr_shift") {
            arr_type = "normal";
            vkboard.AltGr = false;
            vkboard.Shift = false;

            shift.style.backgroundColor = "#FFF";
            shift_r.style.backgroundColor = "#FFF";
        }
    }

    if (caps_arr && (arr_type != "alt_gr") && (arr_type != "alt_gr_shift")) {
        set_key_state(caps, true, "#000", "#777", vkboard.Caps ? "#DDD" : "#FFF");
    }
    else {
        set_key_state(caps, false, "#CCC", "#CCC", "#FFF");

        vkboard.Caps = false;
        if (arr_type == "caps") arr_type = "normal";
    }

    for (var i = 0; i < nkeys; i++) {
        var ndx = "[" + String(i) + "]";

        eval("var key_val = " + layout_name + "_" + arr_type + ndx);
        var key = vkboard.keys[i];

        if (vkboard.Shift && vkboard.Caps) {

            eval("var key_nrm = " + layout_name + "_normal" + ndx);
            eval("var key_cps = " + layout_name + "_caps" + ndx);
            eval("var key_shf = " + layout_name + "_shift" + ndx);



            if ((key_cps == key_shf) && (key_nrm != key_cps))
                key_val = key_nrm;
        }

        if (String(typeof (key_val)).toLowerCase() == "object") {
            key.innerHTML = key_val[0];
            key.dead = key_val[1];

            if (vkboard.DeadAction == key_val[1]) vkboard.DeadValue = key_val[0];

            set_key_state(key, true, "#F00", "#777", (vkboard.DeadValue == key_val[0] ? "#DDD" : "#FFF"));
        }
        else {
            key.dead = null;

            var block = false;
            if ((key_val != "") && vkboard.DeadAction) {
                eval("for(var j = 0; j < " + vkboard.DeadAction + ".length; j++) { if(" + vkboard.DeadAction + "[j][0] == key_val) { key_val = " + vkboard.DeadAction + "[j][1]; break; }}");

                eval("if(j == " + vkboard.DeadAction + ".length) block = true");
            }

            if (key_val != "") {
                key.innerHTML = key_val;

                if (block)
                    set_key_state(key, false, "#CCC", "#CCC", "#FFF");
                else
                    set_key_state(key, true, "#000", "#777", "#FFF");
            }
            else {
                key.innerHTML = "&nbsp;";
                set_key_state(key, false, "#CCC", "#CCC", "#FFF");
            }
        }
    }

    for (i = 0; i < vkboard.ctrl.length; i++) {
        var elem = vkboard.ctrl[i];
        switch (elem) {
            case caps: case shift: case shift_r: case alt_gr:
                break;

            case shift:
                shift.innerHTML = vkboard.DeadAction ? vkboard.DeadValue : "<img border=0 id=\"shift\" src=\"images/arrow.gif\"/>Shift";
                break;
            case shift_r:
                shift_r.innerHTML = vkboard.DeadAction ? vkboard.DeadValue : "<img border=0 id=\"shift\" src=\"images/arrow.gif\"/>Shift";
                break;


            case space:
                space.innerHTML = vkboard.DeadAction ? vkboard.DeadValue : "&nbsp;";
                // "<img border=0 id=\"space_image\" src=\"/search/images/spacer_image.gif\"/>";		
                break;

            case lang:
                {
                    detach_event(elem, 'mousedown', handle_lang_choice_menu);
                    if (vkboard.DeadAction) {
                        set_key_state(elem, false, "#CCC", "#CCC", "#FFF");
                    }
                    else {
                        set_key_state(elem, false, "#000", "#F77", "#FFF");
                        setup_event(elem, 'mousedown', handle_lang_choice_menu);
                    }
                }
                break;

            default:
                {
                    if (vkboard.DeadAction)
                        set_key_state(elem, false, "#CCC", "#CCC", "");
                    else
                        set_key_state(elem, true, "#000", "#777", "");

                    switch (elem) {
                        case enter_t: elem.style.borderBottomColor = "#EFEFEF"; break;
                        case enter_l: elem.style.borderRightColor = "#EFEFEF"; break;
                        case enter_c: elem.style.borderTopColor = elem.style.borderLeftColor = "#EFEFEF"; break;
                        default: break;
                    }
                }
        }
    }

}

function handle_lang_choice_menu(event) {
    var in_el = get_event_source(event);
    var container_id = in_el.id.substring(0, in_el.id.indexOf("___"));

    var menu = document.getElementById(container_id + "___lang_menu");
    if (menu) {
        menu.style.display = (menu.style.display == "block" ? "none" : "block");
    }
    else {
        var ct = document.getElementById(container_id);

        menu = document.createElement("DIV");
        ct.appendChild(menu);

        menu.id = container_id + "___lang_menu";
        menu.style.display = "block";
        menu.style.position = "relative";
        // menu.style.backgroundColor = "#777"
        menu.style.top = "1px";

        // changed for the front end from 1 to -311
        menu.style.left = "1px";
        menu.style.width = "102px";
        menu.style.border = "1px solid #777";

        var menu_main = document.createElement("DIV");
        menu.appendChild(menu_main);

        menu_main.style.position = "relative";
        menu_main.style.width = "102px";
        menu_main.style.height = String(avail_langs.length * 26 + 1) + "px";
        menu_main.style.cursor = "default";

        for (var j = 0; j < avail_langs.length; j++) {
            var item = setup_key_element(String(26 * j + 1) + "px", "1px", "100px", "25px", "#CCC", "left", "23px", "normal", "14px", "4px");
            menu_main.appendChild(item.main);

            item.sub.id = container_id + "___lang_" + String(j);
            item.sub.innerHTML = avail_langs[j][1];

            setup_event(item.sub, 'mousedown', handle_lang_choice_item);
            setup_event(item.sub, 'mouseover', new Function("event", "get_event_source(event).style.backgroundColor = '#DDD'"));
            setup_event(item.sub, 'mouseout', new Function("event", "get_event_source(event).style.backgroundColor = '#FFF'"));
        }
    }
}

function handle_lang_choice_item(event) {
    var in_el = get_event_source(event);

    var ndx = in_el.id.indexOf("___lang_");
    var lng = in_el.id.substring(ndx + 8, in_el.id.length);

    var container_id = in_el.id.substring(0, ndx);
    var vkboard = kbArray[container_id];

    vkboard.CurrentLayout = avail_langs[lng][0];
    refresh_layout(container_id);

    document.getElementById(container_id + "___lang_menu").style.display = "none";
}

function generic_callback_proc(event) {
    var space_pressed = false;
    event.cancelBubble = true;
    event.returnValue = false;

    var in_el = get_event_source(event);
    if (in_el.id == "space_image") {
        in_el = in_el.parentNode;
        space_pressed = true;
    }
    if (in_el.id == "shift") {
        in_el = in_el.parentNode;
        var shift_pressed = true;
    }

    var container_id = in_el.id.substring(0, in_el.id.indexOf("___"));

    var vkboard = kbArray[container_id];
    var val = in_el.subst ? in_el.subst : in_el.innerHTML;
    if (space_pressed == true) {
        val = "&nbsp;";
    }
    if (shift_pressed == true) {
        val = "Shift";
    }

    if (vkboard)
        if ((val != "Caps") && (val != "Shift") && (val != "AltGr") && (in_el.dead || vkboard.DeadAction)) {
        if (vkboard.DeadAction) {
            if (in_el.dead) val = "";

            vkboard.DeadAction = null;
            vkboard.DeadValue = null;
            refresh_layout(container_id);
        }
        else {
            vkboard.DeadAction = in_el.dead;
            refresh_layout(container_id);
            return;
        }
    }

    switch (val) {
        case "Caps": case "Shift": case "AltGr":
            {
                eval("vkboard." + val + " = !vkboard." + val);
                refresh_layout(container_id);
                return;
            }

        case "Tab": val = "   "; break;
        case "&lt;": val = "<"; break;
        case "&gt;": val = ">"; break;
        case "&amp;": val = "&"; break;
        case "&nbsp;": val = " "; break;
        case "&quot;": val = "\""; break;
        default: break;
    }

    if (val && vkboard.Callback)
        eval(vkboard.Callback + (val == "\"" ? "('" + val + "')" : (val == "\\" ? "(\"\\\\\")" : "(\"" + val + "\")")));
}

// Layout info:

var avail_langs = new Array(Array("Ar", "Arabic"));

// Arabic:

var Ar_normal = new Array("&#x0630;", "&#x0031;", "&#x0032;", "&#x0033;", "&#x0034;", "&#x0035;", "&#x0036;", "&#x0037;", "&#x0038;", "&#x0039;", "&#x0030;", "&#x002D;", "&#x003D;",
                          "&#x0636;", "&#x0635;", "&#x062B;", "&#x0642;", "&#x0641;", "&#x063A;", "&#x0639;", "&#x0647;", "&#x062E;", "&#x062D;", "&#x062C;", "&#x062F;", "&#x005C;",
                          "&#x0634;", "&#x0633;", "&#x064A;", "&#x0628;", "&#x0644;", "&#x0627;", "&#x062A;",
"&#x0646;", "&#x0645;", "&#x0643;", "&#x0637;", "&#x002F;",
                          "&#x0626;", "&#x0621;", "&#x0624;", "&#x0631;", "&#x0644;" + "&#x0627;", "&#x0649;", "&#x0629;", "&#x0648;", "&#x0632;", "&#x0638;");

var Ar_shift = new Array("&#x007E;", "&#x0021;", "&#x0040;", "&#x0023;", "&#x0024;", "&#x0025;", "&#x005E;", "&#x0026;", "&#x002A;", "&#x0028;", "&#x0029;", "&#x005F;", "&#x002B;",
			             "&#x2018;", "&#x00F7;", "&#x00D7;", "&#x061B;", "&#x003C;", "&#x003E;", "&#x007C;", "&#x005B;", "&#x005D;", "&#x0640;", "&#x060C;", "&#x061B;", "&#x003A;",
			              "&#x0022;","&#x007b;", "&#x007d;", "&#x2019;", "&#x0201A;", "&#x002e;", "&#x061F;", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");

var Ar_alt_gr = new Array("", "", "", "", "", "", "", "", "", "", "", "&#x0671;", "", "", "", "", "", "", "", "&#x00a4;", "", "", "", "",
                          "", "", "", "", "", "", "", "&#x066b;", "&#x0670;", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");

