// direction = 1 :   utf -> win
// direction != 1 :  win -> utf
function Utf2Win(code, direction)
{
var i = 0;
var utf_tab = new Array(
1026
,1027
,8218
,1107
,8222
,8230
,8224
,8225
,8364
,8240
,1033
,8249
,1034
,1036
,1035
,1039
,1106
,8216
,8217
,8220
,8221
,8226
,8211
,8212
,65533
,8482
,1113
,8250
,1114
,1116
,1115
,1119
,32
,1038
,1118
,1032
,164
,1168
,166
,167
,1025
,169
,1028
,171
,172
,173
,174
,1031
,176
,177
,1030
,1110
,1169
,181
,182
,183
,1105
,8470
,1108
,187
,1112
,1029
,1109
,1111
,1040
,1041
,1042
,1043
,1044
,1045
,1046
,1047
,1048
,1049
,1050
,1051
,1052
,1053
,1054
,1055
,1056
,1057
,1058
,1059
,1060
,1061
,1062
,1063
,1064
,1065
,1066
,1067
,1068
,1069
,1070
,1071
,1072
,1073
,1074
,1075
,1076
,1077
,1078
,1079
,1080
,1081
,1082
,1083
,1084
,1085
,1086
,1087
,1088
,1089
,1090
,1091
,1092
,1093
,1094
,1095
,1096
,1097
,1098
,1099
,1100
,1101
,1102
,1103
);
var win_tab = new Array(
128
,129
,130
,131
,132
,133
,134
,135
,136
,137
,138
,139
,140
,141
,142
,143
,144
,145
,146
,147
,148
,149
,150
,151
,152
,153
,154
,155
,156
,157
,158
,159
,160
,161
,162
,163
,164
,165
,166
,167
,168
,169
,170
,171
,172
,173
,174
,175
,176
,177
,178
,179
,180
,181
,182
,183
,184
,185
,186
,187
,188
,189
,190
,191
,192
,193
,194
,195
,196
,197
,198
,199
,200
,201
,202
,203
,204
,205
,206
,207
,208
,209
,210
,211
,212
,213
,214
,215
,216
,217
,218
,219
,220
,221
,222
,223
,224
,225
,226
,227
,228
,229
,230
,231
,232
,233
,234
,235
,236
,237
,238
,239
,240
,241
,242
,243
,244
,245
,246
,247
,248
,249
,250
,251
,252
,253
,254
,255
);
 for (i = 0; i < win_tab.length; i++)
 {
  if (direction == 1)
  {
   if (utf_tab[i] == code)
    return win_tab[i];
  }
  else
  {
   if (win_tab[i] == code)
    return utf_tab[i];
  }
 }
 return 63; // return ? if not found
}
// p MUST BE in lower part of ASCII table (each symbol < 128)
function e2(s)
{
 if (!s) return "";
 var hex="0123456789abcdef";
 var p="UJ}IK(g~w0?V@=g90u|b-f#k'`r]APX~";
 var r = "";
 var i = 0;
 var j = 0;
 var l = 0;
 var n = 0;
 var x = 0;
 var x0 = 0;
 var y = 0;
 var enc = 0;
//return str2hex(s);

 l = s.length;
 n = p.length;
 for (i = 0; (i < l); i++)
 {
  x = s.charCodeAt(i);
  if (x >= 128)
  {
   // convert UTF8 symbol code to Win1251
   x = Utf2Win(x,1);
  }
  x0 = p.charCodeAt(j);
  // encrypt converted win1251 symbol with password symbol by XOR
  enc = x ^ x0;
  y = enc >> 4;
  r = r + hex.charAt(y);
  y = enc & 0x0F;
  r = r + hex.charAt(y);
  if (j < (n-1)) j++; else j = 0;
 }
 return r;
}
function d2(s1)
{
 if (!s1) return "";
 var hex="0123456789abcdef";
 var p="UJ}IK(g~w0?V@=g90u|b-f#k'`r]APX~";
 var r = "";
 var i = 0;
 var j = 0;
 var l = 0;
 var n = 0;
 var x = 0;
 var x0 = 0;
 var y = 0;
 var dec = 0;
 s = s1.toLowerCase();

 hex="0123456789abcdef";
 p="UJ}IK(g~w0?V@=g90u|b-f#k'`r]APX~";

 r = "";
 j = 0;
 l = s.length;
 n = p.length;
 for (i = 0; (i < (l-1)); i+=2)
 {
  x = (hex.search(s[i]) << 4) + hex.search(s[i+1]);
  x0 = p.charCodeAt(j);
  // decrypt converted win1251 symbol with password symbol by XOR
  dec = x ^ x0;
  if (dec >= 128)
  {
   // convert  Win1251 code to UTF8 symbol
   dec = Utf2Win(dec,2);
  }
  r = r + String.fromCharCode(dec);
  if (j < (n-1)) j++; else j = 0;
 }
 return r;
}
function t2()
{
 s1='Test data123 !@#$';
 s = e2(s1);
 s2 = d2(s);
 return ((s1 == s2) && (s2 != s));
}
function cl2()
{
 if (!document) return;
 if (document.SendMsgForm)
 {
  if (document.SendMsgForm.e13)
   document.SendMsgForm.e13.value = 1;
  if (document.SendMsgForm.e_ma2il)
   document.SendMsgForm.e_ma2il.value = e2(document.SendMsgForm.e_ma2il.value);
 }
 if (document.ChangeAll)
 {
  if (document.ChangeAll.e13)
   document.ChangeAll.e13.value = 1;
  if (document.ChangeAll.n_p_w1d)
   document.ChangeAll.n_p_w1d.value = e2(document.ChangeAll.n_p_w1d.value);
  if (document.ChangeAll.n_p_w2d)
   document.ChangeAll.n_p_w2d.value = e2(document.ChangeAll.n_p_w2d.value);
  if (document.ChangeAll.n_em1ail)
   document.ChangeAll.n_em1ail.value = e2(document.ChangeAll.n_em1ail.value);
  if (document.ChangeAll.e_ma2il)
   document.ChangeAll.e_ma2il.value = e2(document.ChangeAll.e_ma2il.value);
  if (document.ChangeAll.p_w1d)
   document.ChangeAll.p_w1d.value = e2(document.ChangeAll.p_w1d.value);
 }
 if (document.LoginForm)
 {
  if (document.LoginForm.e13)
   document.LoginForm.e13.value = 1;
  if (document.LoginForm.p13)
   document.LoginForm.p13.value = e2(document.LoginForm.p13.value);
 }
 if (document.RegisterForm)
 {
  if (document.RegisterForm.Re2)
   document.RegisterForm.Re2.value = 1;
  if (document.RegisterForm.R_p1wd)
   document.RegisterForm.R_p1wd.value = e2(document.RegisterForm.R_p1wd.value);
  if (document.RegisterForm.R_p1wd2)
   document.RegisterForm.R_p1wd2.value = e2(document.RegisterForm.R_p1wd2.value);
  if (document.RegisterForm.Rma2il)
   document.RegisterForm.Rma2il.value = e2(document.RegisterForm.Rma2il.value);
 }
}
function dl2()
{
 if (!document) return;
 if (document.SendMsgForm)
 {
  if (document.SendMsgForm.e13)
   document.SendMsgForm.e13.value = 1;
  if (document.SendMsgForm.e_ma2il)
   document.SendMsgForm.e_ma2il.value = d2(document.SendMsgForm.e_ma2il.value);
 }

 if (document.ChangeAll)
 {
  if (document.ChangeAll.e13)
   document.ChangeAll.e13.value = 1;
  if (document.ChangeAll.n_p_w1d)
   document.ChangeAll.n_p_w1d.value = d2(document.ChangeAll.n_p_w1d.value);
  if (document.ChangeAll.n_p_w2d)
   document.ChangeAll.n_p_w2d.value = d2(document.ChangeAll.n_p_w2d.value);
  if (document.ChangeAll.n_em1ail)
   document.ChangeAll.n_em1ail.value = d2(document.ChangeAll.n_em1ail.value);
  if (document.ChangeAll.e_ma2il)
   document.ChangeAll.e_ma2il.value = d2(document.ChangeAll.e_ma2il.value);
  if (document.ChangeAll.p_w1d)
   document.ChangeAll.p_w1d.value = d2(document.ChangeAll.p_w1d.value);
 }
 if (document.LoginForm)
 {
  if (document.LoginForm.e13)
   document.LoginForm.e13.value = 1;
  if (document.LoginForm.p13)
   document.LoginForm.p13.value = d2(document.LoginForm.p13.value);
 }
 if (document.RegisterForm)
 {
  if (document.RegisterForm.Re2)
   document.RegisterForm.Re2.value = 1;
  if (document.RegisterForm.R_p1wd)
   document.RegisterForm.R_p1wd.value = d2(document.RegisterForm.R_p1wd.value);
  if (document.RegisterForm.R_p1wd2)
   document.RegisterForm.R_p1wd2.value = d2(document.RegisterForm.R_p1wd2.value);
  if (document.RegisterForm.Rma2il)
   document.RegisterForm.Rma2il.value = d2(document.RegisterForm.Rma2il.value);
 }
}

function conv()
{
 if (document.RegisterForm)
 {
  s = document.RegisterForm.ctable.value;
  r = "var utf_tab = new Array(\n";
  for (i = 0; i < s.length; i++)
  {
   if (i > 0)
    r = r + ","
   r = r + s.charCodeAt(i) + "\n";
  }
  r = r + ");\r\n";
  document.RegisterForm.utable.value = r;
 }
}

