var mode = 1;
var PFractionCode = 8260;

function SetMode()
{
    if (window.event.keyCode == 123)
    {
        if (mode == 0)
            mode = 1;
        else
            mode = 0;

        window.event.returnValue = false;
        return;

    }
    window.event.returnValue = true;
}


/// Keyboard Mapping to Unicode characters
function inputNumber(thisElement, event)
{
    return ChangeToFarsi(thisElement, event, "Number");
}
function inputString(thisElement, event)
{
    return ChangeToFarsi(thisElement, event, "String");
}
function inputFarsi(thisElement, event)
{

    return ChangeToFarsi(thisElement, event, "none");
}

function ChangeToFarsi(thisElement, event, inputType)
{
    var code;

    // IE
    if (window.event)
        code = window.event.keyCode;
    else if (event.which) // Netscape/Firefox/Opera
        code = event.which;
    var key = String.fromCharCode(code);
    var persianKeyCode = null;
    var isNonChar = false;
    if (code > 127)
        return;
    if (mode == 1 && ((thisElement.maxLength == null) || thisElement.maxLength < 0 || thisElement.value.length < thisElement.maxLength))
    {
        if (!isNaN(key) && !isFinite(key)) {
            persianKeyCode = code;
            isNonChar = true;
        }
        if ((inputType == 'String') || (inputType == 'none'))
        {
            persianKeyCode = enNaNKeyToPersianKeyCodeUtf8(key);
        }
        if ((inputType == 'Number') || (inputType == 'none') && persianKeyCode == null)
        {
            persianKeyCode = enFiniteKeyToPersianKeyCodeUtf8(key);
        }
    if (window.event)
        event.keyCode = persianKeyCode;
    else if (event.which) {// Netscape/Firefox/Opera
        // event.which=persianKeyCode;
         //event.charCode=persianKeyCode;
           var currentValue = thisElement.value;
           var persianKey = String.fromCharCode(persianKeyCode);
            thisElement.value = currentValue + persianKey;
            return false;

        }
        if (isNonChar)
            return true;
        else
            return true;

    }
}
function enNaNKeyToPersianKeyCodeUtf8(key) {
    var persianKeyCode = null;
    switch (key)
            {
        case 'f'   : case 'F'   : persianKeyCode = 1576; break; case 'j'   : case 'J'   : persianKeyCode = 1578; break;
        case 'e'   : case 'E'   : persianKeyCode = 1579; break;case 'p'   : case 'P'   : persianKeyCode = 1581; break;
        case 'o'   : case 'O'   : persianKeyCode = 1582; break;case 'n'   : case 'N'   : persianKeyCode = 1583; break;
        case 'b'   : case 'B'   : persianKeyCode = 1584; break;case 'v'   : case 'V'   : persianKeyCode = 1585; break;
        case 'c'   : case 'C'   : persianKeyCode = 1586; break;case 's'   : case 'S'   : persianKeyCode = 1587; break;
        case 'a'   : case 'A'   : persianKeyCode = 1588; break;case 'w'   : case 'W'   : persianKeyCode = 1589; break;
        case 'q'   : case 'Q'   : persianKeyCode = 1590; break;case 'x'   : case 'X'   : persianKeyCode = 1591; break;
        case 'z'   : case 'Z'   : persianKeyCode = 1592; break;case 'u'   : case 'U'   : persianKeyCode = 1593; break;
        case 'y'   : case 'Y'   : persianKeyCode = 1594; break;case 't'   : case 'T'   : persianKeyCode = 1601; break;
        case 'r'   : case 'R'   : persianKeyCode = 1602; break;case 'g'   : case 'G'   : persianKeyCode = 1604; break;
        case 'i'   : case 'I'   : persianKeyCode = 1607; break;case 'm'   : case 'M'   : persianKeyCode = 1574; break;
        case 'H'   : persianKeyCode = 1570; break; case 'h'   : persianKeyCode = 1575; break;
        case '`'   : persianKeyCode = 1662; break;case '['   : persianKeyCode = 1580; break;
        case ']'   : persianKeyCode = 1670; break;case '\\'  : persianKeyCode = 1688; break;
        case ';'   : persianKeyCode = 1603; break;case '\''  : persianKeyCode = 1711; break;
        case 'l'   : persianKeyCode = 1605; break;case 'k'   : persianKeyCode = 1606; break;
        case 'K'   : persianKeyCode = 0161; break;case ','   : persianKeyCode = 1608; break;
        case 'd'   : persianKeyCode = 1610; break;case 'D'   : persianKeyCode = 1609; break;
        case 'L'   : persianKeyCode = 1548; break;
        case ' '   : persianKeyCode = 32; break;
       // default : persianKeyCode=key;
    
    }
    return persianKeyCode;
                                 
}
function enFiniteKeyToPersianKeyCodeUtf8(key) {
    var persianKeyCode = null;
    switch (key)
            {
        case '.'   : persianKeyCode = PFractionCode; break;  // previous 1632
        case '0'   : persianKeyCode = 1776; break;
        case '1'   : persianKeyCode = 1777; break;
        case '2'   : persianKeyCode = 1778; break;
        case '3'   : persianKeyCode = 1779; break;
        case '4'   : persianKeyCode = 1780; break;
        case '5'   : persianKeyCode = 1781; break;
        case '6'   : persianKeyCode = 1782; break;
        case '7'   : persianKeyCode = 1783; break;
        case '8'   : persianKeyCode = 1784; break;
        case '9'   : persianKeyCode = 1785; break;
    }
    return persianKeyCode;
}

