// Исполнитель Переводчик
// -----------------------

// Звания
// ------
var picBonusRU = new Array(
'<IMG src=./pic/prav00.gif width=56 height=60 onmouseover="this.src=\'./pic/prav01.gif\'" onmouseout="this.src=\'./pic/prav00.gif\'" border=0 alt="Незнайка">',
'<IMG src=./pic/prav10.gif width=56 height=60 onmouseover="this.src=\'./pic/prav11.gif\'" onmouseout="this.src=\'./pic/prav10.gif\'" border=0 alt="Торопыжка">',
'<IMG src=./pic/prav20.gif width=56 height=60 onmouseover="this.src=\'./pic/prav21.gif\'" onmouseout="this.src=\'./pic/prav20.gif\'" border=0 alt="Студент">',
'<IMG src=./pic/prav30.gif width=56 height=60 onmouseover="this.src=\'./pic/prav31.gif\'" onmouseout="this.src=\'./pic/prav30.gif\'" border=0 alt="Профессор">'
                          );

// Конструктор Редактора строки
// ----------------------------
function perRU(name, numtasks)
{
  this.tasks     = new Array(); // массив заданий (index, op)
  this.numtasks  = numtasks;    // число заданий
  this.undo      = new Array(); // массив откатки (op1,op2,rez,typeop)
  this.name      = name;        // имя экземпляра
  this.nameform  = name+"f";    // имя формы
  this.edname    = name+"ed";   // имя поля ввода
  this.rezname   = name+"rez";  // имя поля результата
  this.lenname   = name+"l";    // имя поля "число заданий"
  this.taskname  = name+"t";    // имя поля "текст задания"
  this.bonusname = name+"b";    // имя поля "отметки о решении"
  this.zname     = name+"z";    // имя картинки "звание"
  this.opname    = name+"op";   // базовое имя картинки-операции
  this.ready     = false;       // готовность к решению
  this.num       = 0;           // текущий номер задания
  this.bonusmark = "";          // отметки о правильности решения задач
  this.bonusplus = 0;           // число правильно решенных задач
  this.typeop    = 0;           // тип установленный в исполнителе операции
  this.heighted  = "28pt";      // высота для текста заданий

  // Функции
  this.showperRU  = _showperRU;  // Показать исполнителя
  this.clearperRU = _clearperRU; // Сброс исполнителя
  this.undoperRU  = _undoperRU;  // Откатка последнего задания
  this.enterperRU = _enterperRU; // Ввод пользователя
  this.bonusRU     = _bonusRU;     // Вывод картинки-бонуса
  this.genperRU   = _genperRU;   // Генератор заданий
  this.setopperRU = _setopperRU; // Установка операции в исполнителе
  this.searchperRU = _searchperRU; // Поиск в словарике (возврат индекса)

  // Подготавливаем массив откатки
  for (var i=0; i<this.numtasks; i++)
    this.undo[i]  = new Array("", "", "","");

}

// Генерация заданий
// -----------------
function _genperRU()
{
  var work = "";
  for (var i=0; i<this.numtasks; i++)
  {
    this.tasks[i] = new Array();

    var t=1;
    // генерируем направление перевода
    if (Math.random() < 0.5) t = 0;
    this.tasks[i][1] = t;
    // генирируем индекс в словарике
    var flag = true;
    while(i>0 && flag)
    {
      t = Math.floor(dictperRU.length*Math.random());
      if (t==dictperRU.length) t--;
      flag=false;
      for(var j=0; j<i; j++) if(this.tasks[j][0] == t) flag = true;
    }
    this.tasks[i][0] = t;
    work += t+",";
  }
  alert(work);
}

// Ищем в словарике перевод
// ------------------------
function _searchperRU(str)
{
  for(var i=0; i<dictperRU.length; i++)
   if(str == dictperRU[i][1-this.typeop]) return i;
  return null;
}

// Сброс исполнителя
// -----------------
function _clearperRU()
{
  this.num   = 0;
  this.typeop = 0;
  this.genperRU();
  eval("document."+this.nameform+"."+this.edname+".value=''");
  eval("document."+this.nameform+"."+this.rezname+".value=''");

  eval("document.all['"+this.zname+"'].innerHTML=picBonusRU[3]");
  eval("document.all['"+this.taskname+"'].innerHTML='1. Перевести: <KBD>'+dictperRU[this.tasks[this.num][0]][this.tasks[this.num][1]]+'</KBD>'");
  eval("document.all['"+this.lenname+"'].innerText=this.tasks.length");
  eval("document.all['"+this.bonusname+"'].innerHTML='&nbsp;'");
  this.ready = true;
  this.bonusmark = "";
  this.bonusplus = 0;

  // Установка операции в исполнителе
  this.setopperRU(0);

}

// Установка операции в исполнителе
// --------------------------------
function _setopperRU(t)
{
  if (this.ready)
  {
    for(var i=0; i<2; i++)
     if (i == t)
       eval("document.all['"+this.opname+i+"'].src='./picper/key"+i+"_.gif'");
     else
       eval("document.all['"+this.opname+i+"'].src='./picper/key"+i+".gif'");
    this.typeop = t;
  }
}

// Откатка последнего задания
// --------------------------
function _undoperRU()
{
  if (this.ready && this.num)
  {
    this.num--;
    if (this.bonusmark.charAt(this.bonusmark.length-2) == "+")
    {
      this.bonusplus--;
      this.bonusmark = this.bonusmark.substring(0,this.bonusmark.length-2);
    }
    else
      this.bonusmark = this.bonusmark.substring(0,this.bonusmark.length-7);


    // Вывод строки с отметками о правильности решения
     eval("document.all['"+this.bonusname+"'].innerHTML=this.bonusmark");

        // Вывод числа оставшихся задач
        eval("document.all['"+this.lenname+"'].innerText=this.tasks.length-this.num");

        // Вывод нового задания
        if(this.num < this.tasks.length)
          eval("document.all['"+this.taskname+"'].innerHTML=parseInt(this.num+1)+'. Перевести: <KBD>'+dictperRU[this.tasks[this.num][0]][this.tasks[this.num][1]]+'</KBD>'");
        else
          eval("document.all['"+this.taskname+"'].innerHTML='<B style=\" color:red\">Все задания выполнены!</B>'");

        // Из откатки заполняем текстовые поля и операцию
        eval("document."+this.nameform+"."+this.edname+".value=this.undo[this.num][0]");
        eval("document."+this.nameform+"."+this.rezname+".value=this.undo[this.num][1]");
        this.setopperRU(this.undo[this.num][2]);

        // Вывод текущего звания-картинки
        this.bonusRU();

  }
}


// Ввод пользователя
// -----------------
function _enterperRU()
{
  if (this.ready)
  {
    if(this.num < this.tasks.length)
    {
      // проверка на пусто
      var str,rez;
      var str1 = eval("document."+this.nameform+"."+this.edname+".value");
      var ind,str2;
      if (str1 == "") alert("Ничего не записано!");
      else
      {
        var znak = "&#150;";

        // Ищем в словарике перевод
        ind = this.searchperRU(str1);
        if (ind==null) this.typeop ? alert("В английской части словаря такого слова нет!"):
                                     alert("В русской части словаря такого слова нет!");
        else
        {
          // Покажем перевод на экране
          str2 = dictperRU[ind][this.typeop];
          eval("document."+this.nameform+"."+this.rezname+".value=str2");

          // Заносим в массив откатки
          this.undo[this.num][0] = str1;
          this.undo[this.num][1] = str2;
          this.undo[this.num][2] = this.typeop;

          // Проверим правильность
          if (str1 == dictperRU[this.tasks[this.num][0]][this.tasks[this.num][1]]) {znak = "+"; this.bonusplus++;}

          this.bonusmark += znak+ " ";

          // Вывод строки с отметками о правильности решения
          eval("document.all['"+this.bonusname+"'].innerHTML=this.bonusmark");

          this.num++

          // Вывод числа оставшихся задач
          eval("document.all['"+this.lenname+"'].innerText=this.tasks.length-this.num");

          // Вывод нового задания
          if(this.num < this.tasks.length)
            eval("document.all['"+this.taskname+"'].innerHTML=parseInt(this.num+1)+'. Перевести: <KBD>'+dictperRU[this.tasks[this.num][0]][this.tasks[this.num][1]]+'</KBD>'");
          else
            eval("document.all['"+this.taskname+"'].innerHTML='<B style=\" color:red\">Все задания выполнены!</B>'");

          // Очистка строк ввода
          // eval("document."+this.nameform+"."+this.edname+".value=''");
          // eval("document."+this.nameform+"."+this.rezname+".value=''");

          // Вывод текущего звания-картинки
          this.bonusRU();
        }
      }
    }
    else alert("Все задания выполнены!");
  }

}

//--------------------------------------------------------
// Вывести оценку
// --------------
// Алгоритм определениЯ оценки:
//
// 5 - ошибок нет                         0
// 4 - ошибок меньше 2/5 от числа задач   1
// 3 - ошибок меньше 1/2 от числа задач   2
// 2 - в остальных случаЯх                3

function  _bonusRU()
{
  var bonus; // индекс картинки
  var error = this.num-this.bonusplus;

  if (!error)                    bonus = 3;
  else if (error < 2*this.num/5) bonus = 2;
  else if (error < this.num/2)   bonus = 1;
  else                           bonus = 0;

  eval("document.all['"+this.zname+"'].innerHTML=picBonusRU[bonus]");
}

// Показать исполнителя
// --------------------
function _showperRU()
{

  var str = "<FORM name="+this.nameform+">";
  str += '<DIV style="background-color:#EEE5DB;width:480;border-style:solid;border-width:2px;border-left-color:silver;border-top-color:silver;border-right-color:gray;border-bottom-color:gray;padding:10px;">';
  str += '<TABLE border=0 cellspacing=0 cellpadding=5 width=100%>';

  str += '<TR valign=top>';
  str +=  '<TD><IMG src=./picper/per.gif width=310 height=41 border=0 alt=""></TD>';
  str +=  '<TD><IMG src=./pic/clear.gif width=113 height=41 border=0 alt="Сброс" onmouseup="'+this.name+'.clearperRU()" onmousedown="this.src=\'./pic/clear2.gif\'" onmouseover="this.src=\'./pic/clear1.gif\'" '+
          'onmouseout ="this.src=\'./pic/clear.gif\'"></TD>';
  str += '</TR>';

  str += '<TR valign=top>';
  str += '<TD  colspan=2>';

  str += '<TABLE border=0 cellspacing=0 cellpadding=0>';
  str += ' <TR>';
  str += '   <TD>&nbsp;</TD>';
  str += '   <TD>&nbsp;</TD>';
  str += '   <TD rowspan=3 width=120><NOBR><IMG src=./picper/key0.gif width=60 height=30 border=0 hspace=0 vspace=0 alt="" name='+this.opname+'0 onclick="'+this.name+'.setopperRU(0)"';
  str += '            ><IMG src=./picper/key1.gif width=60 height=30 border=0 hspace=0 vspace=0 alt="" name='+this.opname+'1 onclick="'+this.name+'.setopperRU(1)"';
  str += '            ></NOBR><BR';
  str += '            ><IMG src=./picper/calci.gif width=120 height=40 border=0 hspace=0 vspace=0 alt=""><BR';
  str += '            ><NOBR><IMG src=./picper/calcp.gif width=90 height=30 border=0 hspace=0 vspace=0 alt="Пуск" onclick="'+this.name+'.enterperRU()"';
  str += '                  onmouseover="this.src=\'./picper/calcp_.gif\'"';
  str += '                  onmouseout="this.src=\'./picper/calcp.gif\'"';
  str += '            ><IMG src=./picper/undo.gif width=30 height=30 border=0 alt=Откатка onmouseover="this.src=\'./picper/undo_.gif\'" onmouseout="this.src=\'./picper/undo.gif\'" onclick="'+this.name+'.undoperRU()"></NOBR';
  str += '   ></TD>';
  str += '   <TD>&nbsp;</TD>';
  str += '   <TD>&nbsp;</TD>';
  str += ' </TR>';

  str += ' <TR>';
  str += '   <TD><INPUT style="font-size:16px" type=text size=15 value="" name='+this.edname+' onkeypress="if(event.keyCode==13) '+this.name+'.enterperRU()"></TD>';
  str += '   <TD valign=middle><IMG src=./picper/calca.gif width=30 height=10 border=0 hspace=0 alt=""></TD>';
  str += '   <TD valign=middle><IMG src=./picper/calca.gif width=30 height=10 border=0 hspace=0 alt=""></TD>';
  str += '   <TD><INPUT style="font-size:16px" type=text size=15 value="" readonly  name='+this.rezname+'></TD>';
  str += ' </TR>';

  str += ' <TR>';
  str += '   <TD>&nbsp;</TD>';
  str += '   <TD>&nbsp;</TD>';
  str += '   <TD>&nbsp;</TD>';
  str += '   <TD>';
  str += '     <SPAN id='+this.lenname+' style="font-size:14pt;color:#BE9802;font-weight:bold;">&nbsp;</SPAN>';
  str += '   </TD>';
  str += ' </TR>';
  str += '</TABLE>';

  str += '</TD>';
  str += '</TR>';
  str += '<TR valign=top>';
  str +=   '<TD colspan=2><SPAN id='+this.taskname+' style="height:'+this.heighted+';font-size:12pt;color:black;">Нажмите кнопку <B style="color:#009900">Сброс</B></SPAN></TD>';
  str += '</TR>';
  str += '<TR valign=top>';
  str +=   '<TD><BR><IMG src=./pic/line.gif width=310 height=2 border=0 alt=""><BR><SPAN id='+this.bonusname+' style=" font-size:14pt;color:#BE9802;font-weight:800;">&nbsp;</SPAN></TD>';
  str +=   '<TD id='+this.zname+' align=right><IMG src=./pic/prav30.gif width=56 height=60  border=0 alt=""></TD>';
  str += '</TR>';

  str += '</TABLE></DIV></FORM>';

  //alert(str);
  document.write(str);
}


// Словарик
// --------
var dictperRU = new Array(
new Array("computer", "компьютер"),
new Array("task", "задача"),
new Array("address", "адрес"),
new Array("algorithm", "алгоритм"),
new Array("begin", "начало"),
new Array("end", "конец"),
new Array("if", "если"),
new Array("then", "тогда"),
new Array("else", "иначе"),
new Array("while", "пока"),
new Array("for", "для"),
new Array("step", "шаг"),
new Array("program", "программа"),
new Array("step", "шаг"),
new Array("load", "загрузить"),
new Array("error", "ошибка"),
new Array("monitor", "монитор"),
new Array("mouse", "мышь"),
new Array("keyboard", "клавиатура"),
new Array("disk", "диск"),
new Array("key", "ключ"),
new Array("job", "работа"),
new Array("save", "сохранить"),
new Array("binary", "двоичный"),
new Array("bit", "бит"),
new Array("byte", "байт"),
new Array("browser", "браузер"),
new Array("calculator", "калькулятор"),
new Array("memory", "память"),
new Array("control", "управление"),
new Array("copy", "копировать"),
new Array("edit", "редактировать"),
new Array("window", "окно"),
new Array("data", "данные"),
new Array("enter", "вход"),
new Array("object", "объект"),
new Array("file", "файл"),
new Array("game", "игра"),
new Array("help", "помощь"),
new Array("image", "изображение"),
new Array("index", "индекс"),
new Array("table", "таблица"),
new Array("list", "список"),
new Array("machine", "машина"),
new Array("message", "сообщение"),
new Array("modem", "модем"),
new Array("name", "имя"),
new Array("net", "сеть"),
new Array("open", "открывать"),
new Array("page", "страница"),
new Array("print", "печать"),
new Array("read", "читать"),
new Array("write", "писать"),
new Array("repeat", "повторять"),
new Array("stop", "стоп"),
new Array("reset", "сброс"),
new Array("result", "результат"),
new Array("return", "возврат"),
new Array("shift", "сдвиг"),
new Array("symbol", "символ"),
new Array("system", "система"),
new Array("tape", "лента"),
new Array("text", "текст"),
new Array("test", "тест"),
new Array("time", "время"),
new Array("tree", "дерево"),
new Array("user", "пользователь"),
new Array("wait", "ждать"),
new Array("work", "работа"),
new Array("word", "слово")
                    );

