<!--
function lettersToFarsi(keyCode, key) {
  var newKeyCode = toFarsi(keyCode);
  //alert('Old: ' + keyCode);  
  //alert('New: ' + newKeyCode);
  
  if (newKey != newKeyCode) {
    var newKey = String.fromCharCode(newKeyCode);
    return { replaceKey: true,
             newKeyCode: newKey.charCodeAt(),
             newKey: newKey };
  }
  else {
    return { cancelKey: false };
  }
}

function changeKey(textControl, evt, keyChecker) {
  var keyCode = evt.keyCode ? evt.keyCode :
                evt.charCode ? evt.charCode :
		evt.which ? evt.which : void 0;
  if ((keyCode <= 40 || keyCode == 46) &&
      keyCode != 35) return true;
  
  var key;
  if (keyCode) {
    key = String.fromCharCode(keyCode);
  }
  var keyCheck = keyChecker(keyCode, key);
  if (keyCode && window.event && !window.opera) {
    if (keyCheck.cancelKey) {
      return false;
    }
    else if (keyCheck.replaceKey) {
      window.event.keyCode = keyCheck.newKeyCode;
      if (window.event.preventDefault) {
        window.event.preventDefault();
      }
      return true;
    }
    else {
      return true;
    }
  }
  else if (typeof textControl.setSelectionRange != 'undefined') {
    if (keyCheck.cancelKey) {
      if (evt.preventDefault) {

        evt.preventDefault();
      }
      return false;
    }
    else if (keyCheck.replaceKey) {
      // cancel the key event and insert the newKey for the current
      // selection
      if (evt.preventDefault) {
	  evt.preventDefault();
      }
      var oldSelectionStart = textControl.selectionStart;
      var oldSelectionEnd = textControl.selectionEnd;
      var selectedText = textControl.value.substring(oldSelectionStart,
                                                     oldSelectionEnd);
      var newText = typeof keyCheck.newKey != 'undefined'
                    ? keyCheck.newKey
                    : String.fromCharCode(keyCheck.newKeyCode);
      textControl.value = 
        textControl.value.substring(0, oldSelectionStart) +
        newText +
        textControl.value.substring(oldSelectionEnd);
      textControl.setSelectionRange(oldSelectionStart + newText.length,
                                    oldSelectionStart + newText.length);
      return false;
    }
    else {
      return true;
    } 
  }
  else if (keyCheck.cancelKey) {
    if (evt.preventDefault) {
      evt.preventDefault();
    }
    return false;
  }
  else {
    return true;
  }
}

function toFarsi(c) {
  var v = c;
  switch (c) {

  case 34:
    v=64;
    break;
  case 35:
  case 92:
  case 94:
  case 96:
    v=1662;
    break;
  case 38:
    v=94;
    break;
  case 40:
    v=42;
    break;
  case 42:
    v=125;
    break;
  case 43:
  case 93:
    v=1670;
    break;
  case 44:
    v=1608;
    break;
  case 45:
    v=47;
    break;
  case 47:
    v=38;
    break;
  case 58:
    v=62;
    break;
  case 61:
    v=40;
    break;
  case 62:
    v=124;
    break;
  case 63:
    v=95;
    break;
  case 65:
    v=1614;
    break;
  case 66:
    v=1573;
    break;
  case 67:
    v=1688;
    break;
  case 68:
    v=1616;
    break;
  case 69:
    v=1613;
    break;
  case 70:
    v=1617;
    break;
  case 71:
    v=1618;
    break;
  case 72:
    v=1570;
    break;
  case 73:
    v=91;
    break;
  case 74:
    v=1600;
    break;
  case 75:
    v=171;
    break;
  case 76:
    v=187;
    break;    
  case 77:
    v=1569;
    break;
  case 78:
    v=1571;
    break;
  case 79:
    v=93;
    break;
  case 80:
    v=92;
    break;
  case 81:
    v=1611;
    break;
  case 82:
    v=1604;
    break;
  case 83:
    v=1615;
    break;
  case 84:
    v=1548;
    break;
  case 85:
    v=44;
    break;
  case 86:
    v=1572;
    break;
  case 87:
    v=1612;
    break;
  case 88:
    v=1610;
    break;
  case 89:
    v=1577;
    break;
  case 90:
    v=1563;
    break;
  case 95:
    v=1567;
    break;    
  case 97:
    v=1588;
    break;
  case 98:
    v=1584;
    break;
  case 99:
    v=1586;
    break;
  case 100:
    v=1740;
    break;
  case 101:
    v=1579;
    break;
  case 102:
    v=1576;
    break;
  case 103:
    v=1604;
    break;    
  case 104:
    v=1575;
    break;
  case 105:
    v=1607;
    break;
  case 106:
    v=1578;
    break;
  case 107:
    v=1606;
    break;
  case 108:
    v=1605;
    break;
  case 109:
    v=1574;
    break;
  case 110:
    v=1583;
    break;
  case 111:
    v=1582;
    break;
  case 112:
    v=1581;
    break;
  case 113:
    v=1590;
    break;
  case 114:
    v=1602;
    break;
  case 115:
    v=1587;
    break;
  case 116:
    v=1601;
    break;
  case 117:
    v=1593;
    break;
  case 118:
    v=1585;
    break;
  case 119:
    v=1589;
    break;
  case 120:
    v=1591;
    break;    
  case 121:
    v=1592;
    break;
  case 122:
    v=1594;
    break;
  case 167:
    v=35;
    break;
  case 176:
    v=215;
    break;
  case 196:
    v=34;
    break; 
  case 214:
    v=58;
    break;
  case 220:
    v=123;
    break;    
  case 228:
  case 39:
    v=1711;
    break;    
  case 246:
  case 59:
    v=1705;
    break;
  case 252:
  case 91:
    v=1580;
    break;
   // Numbers
   case 49:
   v=1633;
  }
  
  return v;
}
-->