TablesBordersWidth=0;
//TablesBordersWidth=1;

HeadlineTitle='HT-Line<sup><small>&reg;</small></sup> - Мастер-Тесты';

QuestionHeader = '<table id="idQuestionTable" cellpadding="10" cellspacing="0" border="'+TablesBordersWidth+'" style="display:%display%;">'+"\n";
QuestionFooter = '</table>'+"\n";
QuestionQuestionRow = '<tr>'+"\n"+'<td align="center">%qtext%</td>'+"\n"+'</tr>'+"\n";
QuestionAnswersRow = '<tr>'+"\n"+'<td align="center">%answers%</td>'+"\n"+'</tr>'+"\n";
QuestionQuestionRowHorizontal = '<tr>'+"\n"+'<td align="center">%qtext%</td>'+"\n"+''+"\n";
QuestionAnswersRowHorizontal = ''+"\n"+'<td align="center">%answers%</td>'+"\n"+'</tr>'+"\n";

QuestionTimeoutText = '<div style="color:#aaaaaa;">(текст задания скрыт)</div>';
QuestionTimeoutTable = QuestionHeader + QuestionQuestionRow + QuestionFooter;
QuestionTimeoutTable = QuestionTimeoutTable.replace(/\%qtext\%/,QuestionTimeoutText);
QuestionTimeoutTable = QuestionTimeoutTable.replace(/idQuestionTable/,"idQuestionTimeoutTable");

AnswersHeader = '<table cellpadding="2" cellspacing="0" border="'+TablesBordersWidth+'">' + "\n" + '<tr>' + "\n";
AnswersFooter = '</tr>' + "\n" + '</table>' + "\n";

AnswersRow = "\n" +
'<td id="idCellAnswerControl%anumber%" class="%arowclass1%" onclick="setScreenAnswerChecked(%anumber%);" onmouseover="setAnswerPanelLigted(%anumber%,true);" onmouseout="setAnswerPanelLigted(%anumber%,false);">' + "\n" +
'%acontrol%' + "\n" + '</td>' + "\n" +
'<td id="idCellAnswerText%anumber%" class="%arowclass2%" onclick="setScreenAnswerChecked(%anumber%);" onmouseover="setAnswerPanelLigted(%anumber%,true);" onmouseout="setAnswerPanelLigted(%anumber%,false);">' + "\n" +
'%atext%' + "\n" + '</td>' + "\n";

AnswersRowRadios = '<td>%acontrol%</td>'+"\n"+'<td>%atext%</td>'+"\n";

AnswersRowSlider1 = '<td valign="top" style="padding-bottom:5pt;padding-top:5pt;border-top:1px #bbbbbb dashed;">%acontrol%</td>'+"\n"+'<td align="left" valign="top" width="50%" style="padding-left:20pt;padding-bottom:5pt;padding-top:5pt;border-top:1px #bbbbbb dashed;">&nbsp;%atext%</td>'+"\n";
AnswersRowSlider2 = '<td align="right" valign="top" width="%width1%" style="padding-right:20pt;padding-bottom:5pt;padding-top:5pt;border-top:1px #bbbbbb dashed;">%atext1%</td>'+"\n"+'<td valign="top" style="padding-bottom:5pt;padding-top:5pt;border-top:1px #bbbbbb dashed;">%acontrol%</td>'+"\n"+'<td align="left" valign="top" width="%width2%" style="padding-left:20pt;padding-top:5pt;padding-bottom:5pt;border-top:1px #bbbbbb dashed;">%atext2%</td>'+"\n";

QuestionsMultipleBepoleAnswersSeparator = "::";

TestImagesAttribs = {};

LogoImageFilePath = "";
LogoImageLinkUrl = "";
LogoImageLinkText = "";

AjaxLoadingIndicatorHidden = true;



// Generate Elements Html Code


function htmlQuestion(qnumber)
{

  var html = "";

  var html_question_table = QuestionHeader;

  var qtext = getTestQuestionText(qnumber);
  var qcode = getTestQuestionTypeCode(qnumber);

  var qimage = getTestQuestionImage(qnumber);
  if (qimage) {
    var html_container_header = '<table cellpadding="2" cellspacing="0" border="'+TablesBordersWidth+'">' + "\n" + '<tr>' + "\n";
    var html_container_footer = '</tr>' + "\n" + '</table>' + "\n";
    var html_container_qtext_cell = '<td align="center" valign="middle">' + qtext + '</td>' + "\n";
    var html_container_qimage_cell = '<td align="center" valign="middle">'+ htmlQuestionImage(qimage) +'</td>' + "\n";
    var html_container_rowfeed = '</tr>' + "\n" + '</tr>' + "\n";
    var align = getTestQuestionAlign(qnumber);
    switch (align) {
      case "top": 
        var html_container_table = html_container_header + html_container_qimage_cell + html_container_rowfeed + html_container_qtext_cell + html_container_footer;
        break;
      case "bottom": 
        var html_container_table = html_container_header + html_container_qtext_cell + html_container_rowfeed + html_container_qimage_cell + html_container_footer;
        break;
      case "left": 
        var html_container_table = html_container_header + html_container_qimage_cell + html_container_qtext_cell + html_container_footer;
        break;
      case "right": 
        var html_container_table = html_container_header + html_container_qtext_cell + html_container_qimage_cell + html_container_footer;
        break;
      default: 
        var html_container_table = html_container_header + html_container_qimage_cell + html_container_rowfeed + html_container_qtext_cell + html_container_footer;
        break;
    }
    qtext = html_container_table;
  }

  var sliders = isSlidersTestQuestion(qnumber);
  if (sliders) resetSlidersControls();

  var layout = getTestQuestionLayout(qnumber);
  var horizontal = (layout=="horizontal");
  var qrow = (!horizontal)? QuestionQuestionRow:QuestionQuestionRowHorizontal;
  html_question_table += qrow.replace(/\%qtext\%/,qtext);

  var timeout = getProtocolQuestionTimeIsOut(qnumber);
  var disabled = timeout;
  var acount = getTestQuestionAnswersCount(qnumber);
  var html_answers_table = "";
  var html_answers_arows = new Array("");

  for (var a=0;a<acount;a++) {

    var anumber = a+1;

    var atext = getTestQuestionAnswerText(qnumber,anumber);
    var acontrol = getQuestionAnswerControl(qnumber,anumber,disabled);
    var aimage = getTestQuestionAnswerImage(qnumber,anumber);
    if (aimage) atext=atext+htmlQuestionAnswerImage(aimage);

    switch (qcode) {
      case "single":
      case "multiple":
        var arow = AnswersRow;
        arow = arow.replace(/\%atext\%/,atext);
        arow = arow.replace(/\%acontrol\%/,acontrol);
        arow = arow.replace(/\%anumber\%/g,anumber);
        var selected = getProtocolAnswerChecked(qnumber,anumber);
        var cssclass = selected? "TdAnswerSelected":"TdAnswerDefault";
        arow = arow.replace(/\%arowclass1\%/g,cssclass+"1");
        arow = arow.replace(/\%arowclass2\%/g,cssclass+"2");
        break;
      case "multiple-radios":
      case "multiple-slider":
        var poles = getTestQuestionSlidersPoles(qnumber);
        if (poles==1) {
          var arow = AnswersRowSlider1;
          arow=arow.replace(/\%acontrol\%/,acontrol);
          arow=arow.replace(/\%atext\%/,atext);
        } else 
        if (poles==2) {
          var split = atext.split(QuestionsMultipleBepoleAnswersSeparator);
          var atext1 = split[0];
          var atext2 = (split.length>1)? split[1]:"";
          var arow = AnswersRowSlider2;
          var width1 = getCurrentBlockCaseNegativeAnswerWidth();
          var width2 = getCurrentBlockCasePositiveAnswerWidth();
          if (!width1 || !width2) width1 = width2 = "50%";
          arow = arow.replace(/\%acontrol\%/,acontrol);
          arow = arow.replace(/\%atext1\%/,atext1);
          arow = arow.replace(/\%atext2\%/,atext2);
          arow = arow.replace(/\%width1\%/,width1);
          arow = arow.replace(/\%width2\%/,width2);
        } 
        break;
    }
    var acontrolid = getQuestionAnswerControlId(qnumber,anumber);
    arow = arow.replace(/\%acontrolid\%/g,acontrolid);
    html_answers_arows[anumber]=arow;
  }

  html_answers_table = AnswersHeader;

  var html_answers_arows_shuffled = new Array();
  var arandom = getCurrentBlockRandomAnswers();
  for (var a=0; a<acount; a++) {
    var anumber = a+1;
    if (arandom) anumber=getAnswerAbsoluteNumberBySerial(qnumber,anumber);
    html_answers_arows_shuffled[a] = html_answers_arows[anumber]
  }

  var inline = getTestQuestionInline(qnumber);
  var glue = (inline!=2)? "\n"+'</tr>'+"\n"+'<tr>'+"\n" : "\n";
  html_answers_table += html_answers_arows_shuffled.join(glue);

  switch (qcode) {
    case "multiple-radios":
    case "multiple-slider":
      var atext = "&nbsp;";
      var poles = getTestQuestionSlidersPoles(qnumber);
      var positions = getTestQuestionSlidersPositions(qnumber);
      var acontrol = htmlMultipleRadiosAnswerHeader(poles,positions);
      var labels = getTestQuestionSlidersLabels(qnumber);
      if (!labels) acontrol="&nbsp;";
      if (poles==1) {
        var arow = AnswersRowSlider1;
        arow = arow.replace(/\%acontrol\%/,acontrol);
        arow = arow.replace(/\%atext\%/,atext);
      } else 
      if (poles==2) {
        var split = atext.split(":");
        var atext1 = "&nbsp;";
        var atext2 = "&nbsp;";
        var arow = AnswersRowSlider2;
        arow = arow.replace(/\%acontrol\%/,acontrol);
        arow = arow.replace(/\%atext1\%/,atext1);
        arow = arow.replace(/\%atext2\%/,atext2);
      } 
      html_answers_table += glue+arow;
      break;
  }

  html_answers_table += AnswersFooter;

  var arow = (!horizontal)? QuestionAnswersRow:QuestionAnswersRowHorizontal;
  arow = arow.replace(/\%answers\%/,html_answers_table);

  if (acount>0) html_question_table+=arow;

  html_question_table += QuestionFooter;

  html_question_timeout_table = QuestionTimeoutTable;

  html_question_table = html_question_table.replace(/\%display\%/,timeout? "none":"inline");
  html_question_timeout_table = html_question_timeout_table.replace(/\%display\%/,!timeout? "none":"inline");

  html += html_question_table;
  html += html_question_timeout_table;

  html = htmlContainerPanelTable(html);
  var sqnumber=getCurrentQuestionSequenceNumber();
  var header="Тестовое задание "+sqnumber+":";
  header=htmlContainerHeadlineTable(header);
  html=header+"<br>\n"+html;
  html+='<div id="idDivQuestionMessage" style="padding:2pt;">&nbsp;</div>'+"\n";

  var expertise=isTestExpertiseMode();
  if (expertise) html+=htmlTestExpertisePanel(qnumber)+"<br>\n";

  html+=htmlQuestionButtons();
  html+='<div style="padding:8pt;">Пожалуйста, укажите Ваш ответ и нажмите на кнопку "Далее".</div>'+"\n";
  html+=htmlTestDebugPanel();
  return html;
}


function htmlQuestionImage(qimage)
{
  var url = TestImagesPath+"/"+qimage;
  var width = getTestImageWidth(qimage);
  var height = getTestImageHeight(qimage);
  pauseTestingTimers(true);
  var html='<img src="'+url+'" class="ImageQuestion" onload="pauseTestingTimers(false);" border="'+TablesBordersWidth+'" style="margin:10px;' + '"'+((width>0)?' width="'+width+'"':'')+''+((height>0)?' height="'+height+'"':'')+'><br>';
  return html;
}


function htmlQuestionAnswerImage(aimage)
{
  var url = TestImagesPath+"/"+aimage;
  var html='<img src="'+url+'" class="ImageQuestion" borders="'+TablesBordersWidth+'" align="absmiddle" style="margin:10px;"><br>';
  return html;
}


function getTestImageWidth(image)
{
  var width = 0;
  var attribs = TestImagesAttribs[image];
  if (attribs!=undefined) width=attribs["width"];
  return width;
}


function getTestImageHeight(image)
{
  var height = 0;
  var attribs = TestImagesAttribs[image];
  if (attribs!=undefined) height=attribs["height"];
  return height;
}


function htmlResponderPassport()
{
  var html="";
  var gender = ResponderGender;
  var fnames = new Array("fullname","name","birth","age","gender","email","field1","field2","field3","field4","field5");
  html += '<table cellpadding="4" cellspacing="0" border="'+TablesBordersWidth+'">'+"\n";
  for (var i=0; i<fnames.length; i++) {
    var fname = fnames[i];
    var enabled = getResponderFieldEnabled(fname);
    if (!enabled) continue;
    var label=getResponderFieldLabel(fname);
    var mandatory=getResponderFieldMandatory(fname);
    if (mandatory) label="* "+label;
    var html_field_input="";
    switch (fname) {
      case "fullname": 
        var fields = ResponderFullName.split("#");
        var lname = fields[0];
        var fname = fields[1];
        var mname = fields[2];
        html_field_input_1 = '<input type="edit" id="idResponderLastName" name="ResponderLastName" value="'+lname+'" size="10" onblur="onBlurTrimmedField(this);">&nbsp; ';
        html_field_input_2 = '<input type="edit" id="idResponderFirstName" name="ResponderFirstName" value="'+fname+'" size="10" onblur="onBlurTrimmedField(this);">&nbsp; ';
        html_field_input_3 = '<input type="edit" id="idResponderMiddleName" name="ResponderMiddleName" value="'+mname+'" size="16" onblur="onBlurTrimmedField(this);">';
        html_field_input = '<table cellpadding="0" cellspacing="0" border="0">';
        html_field_input += '<tr><td>'+html_field_input_1+'</td><td>'+html_field_input_2+'</td>'+(ResponderMiddleNameEnabled? ('<td>'+html_field_input_3+'</td>'):'')+'</tr>';
        html_field_input += '<tr><td>Фамилия</td><td>Имя</td>'+(ResponderMiddleNameEnabled? '<td>Отчество</td>':'')+'</tr>';
        html_field_input += '</table>';
        break;
      case "name": 
        html_field_input = '<input type="edit" id="idResponderName" name="ResponderName" value="'+ResponderName+'" size="24" onblur="onBlurTrimmedField(this);">';
        break;
      case "birth": 
        var fields = ResponderBirthDate.split("#");
        var bday = fields[0];
        var bmon = fields[1];
        var byear = fields[2];
        html_field_input_1 = htmlSelectBirthDay("idResponderBirthDay","ResponderBirthDay",bday,"",false) + "&nbsp;";
        html_field_input_2 = htmlSelectBirthMon("idResponderBirthMon","ResponderBirthMon",bmon,"",false) + "&nbsp;";
        html_field_input_3 = htmlSelectBirthYear("idResponderBirthYear","ResponderBirthYear",byear,"",false) + "&nbsp;";
        html_field_input = '<table cellpadding="0" cellspacing="0" border="0">';
        html_field_input += '<tr><td>'+html_field_input_1+'</td><td>'+html_field_input_2+'</td><td>'+html_field_input_3+'</td></tr>';
        html_field_input += '<tr><td>День</td><td>Месяц</td><td>Год</td></tr>';
        html_field_input += '</table>';
        break;
      case "age": 
        html_field_input = '<input type="edit" id="idResponderAge" name="ResponderAge" value="'+ResponderAge+'" size="4" onblur="onBlurResponderAge();">';
        break;
      case "gender": 
        var html_gender_input_1='<input type="radio" id="idResponderGender1" name="ResponderGender" value="m"'+((gender=="m")? "checked":"")+'>';
        var html_gender_input_2='<input type="radio" id="idResponderGender2" name="ResponderGender" value="f"'+((gender=="f")? "checked":"")+'>';
        html_gender_input_1+='<label for="idResponderGender1">мужской</label>'+"\n";
        html_gender_input_2+='<label for="idResponderGender2">женский</label>'+"\n";
        html_field_input = html_gender_input_1+"\n"+html_gender_input_2;
        break;
      case "email": 
        html_field_input = '<input type="edit" id="idResponderEmail" name="ResponderEmail" value="'+ResponderEmail+'" size="20" onblur="onBlurTrimmedField(this);">';
        break;
      case "field1": case "field2": case "field3": case "field4": case "field5": 
        var number = fname.charAt(5);
        var id = "idResponderField" + number;
        var name = "ResponderField" + number;
        var value = eval("ResponderField"+number);
        var selector = getResponderFieldSelector(fname);
        if (!selector) {
          html_field_input='<input type="edit" id="'+id+'" name="'+name+'" value="'+value+'" size="20" onblur="onBlurTrimmedField(this);">';
        } else {
          html_field_input = htmlSelectFieldValues(fname,id,name,value,"",false);
        }
        break;
    }
    html+='<tr>'+"\n"+'<td align="right" valign="top">'+label+':</td>'+"\n";
    html+='<td align="left" valign="top">'+html_field_input+'</td>'+"\n"+'</tr>'+"\n";
  }
  html+='</table>'+"\n";
  html=htmlContainerPanelTable(html);
  var header="Информация о респонденте:";
  header=htmlContainerHeadlineTable(header);
  html=header+"<br>\n"+html;
  var comment='Пожалуйста, укажите информацию о себе и нажмите на кнопку "Далее".'+"\n";
  comment+="<br>\nПримечание: обязательные для заполнения поля отмечены символом \"звездочка\" (*).\n"
  html+="<br>\n"+comment+"<br>\n";
  var onclick="onSubmitResponderPassport();";
  html+="<br>\n"+htmlCommonButton("idButtonContinue","","Далее&nbsp;&gt;","Продолжить",onclick,false,90)+"&nbsp;\n";
  return html;
}


function htmlMessage(header,content)
{
  content=htmlContainerTable(content,10);
  content=htmlContainerPanel(content);
  var html="";
  if (header!="") {
    header=htmlContainerHeadline(header);
    html+=header+"\n<br>\n";
  }
  html+=content;
  html=htmlContainerTable(html,0);
  return html;
}


function htmlInstruc(header,content,footer,onclick,printable)
{
  if (printable==undefined) printable=false;
  content='<div id="idDivInstructionText">'+content+'</div>';
  if (printable) {
    var link = '<a class="MTSLinkPopup" href="#" onclick="printInstructionText(); return false;">Распечатать инструкцию</a>';
    content += '<div style="text-align: right; padding-top: 2pt;">' + link + '</div>';
  }
  var copy = content;
  content = htmlContainerTable(content,10);
  content = htmlContainerPanel(content);
  header = htmlContainerHeadline(header);
  var html = header+"\n<br>\n"+content;
  html = htmlContainerTable(html,0);
  if (footer!="") html+="<br>\n"+'Пожалуйста, прочитайте инструкцию и нажмите на кнопку "Далее".'+"<br>\n";
  html += "<br>\n";
  html += "\n"+htmlCommonButton("idButtonContinue","","Далее&nbsp;&gt;","Продолжить",onclick,false,90)+"&nbsp;\n";
  html+='<div id="idDivInstrucMessage" style="padding:8pt;">&nbsp;</div>'+"\n";
  return html;
}


function htmlTestInstruc(content,runtime)
{
  var header = "Инструкция к тесту:";
  var footer = 'Пожалуйста, прочитайте инструкцию и нажмите на кнопку "Далее".';
  if (!content) content = 'Для начала тестирования нажмите кнопку "Далее"';
  var onclick = "onClickAfterTestInstruc("+(runtime?"true":"false")+");";
  var html = htmlInstruc(header,content,footer,onclick,true);
  return html;
}


function htmlBlockInstruc(content,runtime)
{
  var bcount = getTestBlocksCount();
  var bnumber = getCurrentBlockNumber();
  bnumber = (bcount>1)? (" "+bnumber):"";
  var header = "Инструкция к блоку"+bnumber+":";
  var footer = 'Пожалуйста, прочитайте инструкцию и нажмите на кнопку "Далее".';
  if (!content) content = 'Для начала тестирования нажмите кнопку "Далее"';
  var onclick = "onClickAfterBlockInstruc("+(runtime?"true":"false")+");";
  var html = htmlInstruc(header,content,footer,onclick,true);
  return html;
}


function htmlInstructBlockTimeout()
{
  var bnumber=getCurrentBlockNumber();
  var header="Блок "+bnumber+": Время истекло";
  var content='Время, отведенное на данный блок, истекло.<br>Для перехода к следующему блоку нажмите кнопку "Далее"';
  var onclick="onClickAfterBlockTimeout();";
  var html = htmlInstruc(header,content,"",onclick);
  return html;
}


function htmlInstructTestingComplete()
{
  var header="Завершение тестирования";
  var content='Для отправки протокола тестирования<br>на сервер для сохранения и обработки,<br>пожалуйста, нажмите кнопку "Далее".';
  var onclick="onClickAfterTestingComplete();";
  var html=htmlInstruc(header,content,"",onclick);
  return html;
}


function htmlCommonButton(id,name,label,hint,onclick,disabled,width)
{
  width=90;
  var sclass="MTSButton"+width+(disabled? "disabled":"");
  var html='<input id="'+id+'" type="button" class="'+sclass+'" value="'+label+'" title="'+hint+'" onclick="'+onclick+'"'+(disabled? " disabled":"")+'>'+"\n";
  return html;
}


function htmlCommonSelect(id,name,value,values,labels,onchange,disabled)
{
  var html="";
  html+='<select id="'+id+'" name="'+name+'" onchange="'+onchange+'"'+(disabled? " disabled":"")+'>'+"\n";
  for (var i=0;i<values.length;i++) {
    var selected=(value==values[i]);
    html+='<option value="'+values[i]+'"'+(selected? " selected":"")+'>'+labels[i]+'</option>'+"\n";
  }
  html+='</select>'+"\n";
  return html;
}


function htmlAjaxLoadingIndicator()
{
  var indicator = '<img src="'+ServiceRootPath+'/images/indicators/wheel-small.gif" border="'+TablesBordersWidth+'">';
  indicator = '<div id="idDivAjaxLoadingIndicator" style="display:' + (AjaxLoadingIndicatorHidden? "none":"inline") + ';">'+indicator+'</div>';
  return indicator;
}


function htmlQuestionButtons()
{
  var html = "";
  html += htmlCommonButton("idButtonPrev","","&lt;&nbsp;Назад","Переход к предыдущему вопросу","onClickPrevQuestion();",false,90)+"&nbsp;\n";
  html += htmlCommonButton("idButtonNext","","Далее&nbsp;&gt;","Переход к следующему вопросу","onClickNextQuestion();",false,90)+"&nbsp;\n";
  var ienabled = getCurrentBlockInstrucEnabled();
  var ivisible = getCurrentBlockInstrucVisible();
  if (ienabled && ivisible) {
    html+=htmlCommonButton("idButtonBlockInstruc","","Инструкция","Инструкция к блоку","showBlockInstruc(true);",false,90)+"&nbsp;\n";
  } else {
    var ienabled = getTestInstrucEnabled();
    var ivisible = getTestInstrucVisible();
    if (ienabled && ivisible) {
      html+=htmlCommonButton("idButtonTestInstruc","","Инструкция","Инструкция к тесту","showTestInstruc(true);",false,90)+"&nbsp;\n";
    }
  }
  var responder = isResponderMode();
  var expertise = isTestExpertiseMode();
  if ((!responder && !IsGuestMode && !RefuseTestDebug) || ExternalDebug) html+=htmlCommonButton("idButtonDebug","","Отладка","Режим отладки теста","onClickButtonDebug();",false,90)+"&nbsp;\n";
  var indicator = htmlAjaxLoadingIndicator();
  html = '<table cellpadding="0" cellspacing="0" border="0"><tr><td width="30px">&nbsp;</td><td>'+html+'</td><td width="30px" align="center" valign="middle">'+indicator+'</td></tr></table>';
  return html;
}


function htmlTestExpertisePanel(qnumber)
{
  var html="";
  var fcount = getExpertiseFactorsCount();
  var positions = getExpertiseFactorPositions();
  var comments = getExpertiseCommentsEnabled();
  html+='<table cellpadding="4" cellspacing="0" border="'+TablesBordersWidth+'">'+"\n";
  for (var f=0;f<fcount;f++) {
    var fname=getFactorFieldName(f);
    var ftitle=getExpertiseFactorTitle(f);
    var fvalue=getExpertiseQuestionFactorValue(qnumber,f);
    var html_factor_positions="";
    for (var p=1;p<=positions;p++) {
      var id = "id"+fname+p;
      var hint = ftitle+" = "+p;
      var radio='<input type="radio" id="'+id+'" name="'+fname+'" value="'+p+'" title="'+hint+'"'+((p==fvalue)?" checked":"")+'>';
      var label='<label for="'+id+'" title="'+hint+'">'+p+'&nbsp;</label>';
      html_factor_positions+=radio+label+"&nbsp;&nbsp;&nbsp;";
    }
    html+='<tr><td nowrap align="right">'+ftitle+':&nbsp</td>'+"\n";
    html+='<td nowrap align="left">'+html_factor_positions+'</td></tr>'+"\n";
  }
  if (comments) {
    var flabel="Комментарий";
    var cenabled = getExpertiseCommentsEnabled();
    var ecomment = cenabled? getExpertiseQuestionFactorsComment(qnumber) : "";
    var attribs = 'onfocus="DisableHotkeyHandler=true;" onblur="DisableHotkeyHandler=false;"';
    var html_comment_input='<textarea class="MTSInputField" name="ecomment" cols="24" rows="2" '+attribs+'>'+ecomment+'</textarea>';
    html+='<tr><td nowrap align="right" valign="top">'+flabel+':&nbsp</td>'+"\n";
    html+='<td nowrap align="left">'+html_comment_input+'</td></tr>'+"\n";
  }
  html+='</table>'+"\n";
  html=htmlContainerPanelTable(html);
  var header="Экспертная оценка задания:";
  header=htmlContainerHeadlineTable(header);
  html=header+"<br>\n"+html;
  return html;
}


function htmlTestDebugPanel()
{
  var html="";
  var value=DebugAutoRespondMode;

  var values=new Array(0,1,2,3);
  var labels=new Array("","Выбор случайного ответа","Выбор минимального ответа","Выбор максимального ответа");
  var scount=getScalesCount();
  for (var s=1;s<=scount;s++) {
    values.push(s+100);
    labels.push("Выбор ключевого ответа для шкалы "+s);
  }
  for (var s=1;s<=scount;s++) {
    values.push(s+200);
    labels.push("Выбор неключевого ответа для шкалы "+s);
  }
  var onchange="onChangedDebugMode();";
  var disabled=(DebugAutoRespondMode>0);
  var select_debug_mode=htmlCommonSelect("idSelectDebugMode","SelectDebugMode",value,values,labels,onchange,disabled);

  var onclick="onClickButtonDebugStop();";
  var button_debug_stop=htmlCommonButton("idButtonDebugStop","ButtonDebugStop","Остановить","",onclick,false,90);

  var values=new Array(0,1);
  var labels=new Array("","Установка случайного ответа");
  var scount=getScalesCount();
  for (var s=1;s<=scount;s++) {
    values.push(s+100);
    labels.push("Установка ключевого ответа для шкалы "+s);
  }
  var onchange="onChangedSetAnswers();";
  var disabled=(DebugAutoRespondMode>0);
  var select_set_answers=htmlCommonSelect("idSelectSetAnswers","SelectSetAnswers",0,values,labels,onchange,disabled);

  var admlink="";
  if (DebugJsdataUrl) admlink='<a class="MTSLink" href="'+DebugJsdataUrl+'" target="Debug'+TestTitle+'">view javascript vars</a>';
  html+='<table cellpadding="4" cellspacing="0" border="'+TablesBordersWidth+'">'+"\n";
//  html+='<tr><td nowrap>Установка текущего ответа:&nbsp</td>'+"\n";
//  html+='<td nowrap>'+select_set_answers+' '+admlink+'</td></tr>'+"\n";
  html+='<tr><td nowrap>Автоматическое тестирование:&nbsp</td>'+"\n";
  html+='<td nowrap>'+select_debug_mode+"&nbsp;"+button_debug_stop+"&nbsp;"+admlink+'</td></tr>'+"\n";
  html+='</table>'+"\n";
  html=htmlContainerPanelTable(html);

  var header="Режим отладки теста:";
  header=htmlContainerHeadlineTable(header);
  html=header+"<br>\n"+html;

  if (!ShowDebugPanel) ShowDebugPanel=(onChangedDebugMode>0);
  html='<div id="idDivTestDebugPanel" style="display:'+(ShowDebugPanel?"none":"")+';">'+html+'</div>'+"\n";
if (DebugStringMode) html+='<div id="idDebugMessageString">&nbsp;</div>'+"\n";
  return html;
}


function htmlTestingPage()
{
  var html="";
  var header=htmlTestingPageHeader();
  var footer=htmlTestingPageFooter();
  html+='<table cellpadding="10" cellspacing="0" border="'+TablesBordersWidth+'" width="100%" height="100%">'+"\n";
  html+='<tr><td><div id="idDivPageHeader">'+header+'</div></td></tr>'+"\n";
  html+='<tr><td id="idTestingContent" width="100%" height="100%" align="center" valign="middle" style="padding-left:75px;padding-right:75px;">&nbsp;</td></tr>'+"\n";
  html+='<tr><td><div id="idDivPagefooter">'+footer+'</div></td></tr>'+"\n";
  html+='</table>'+"\n";
  return html;
}


function htmlTestingPageHeader()
{
  var html_cabinet_logo='<img src="'+ServiceRootPath+'/images/htlogo2.gif" border="'+TablesBordersWidth+'">';
  html_cabinet_logo='<a href="http://www.ht.ru/" target="ht" title="www.ht.ru">'+html_cabinet_logo+'</a>';
  var html_cabinet_title = '<div class="MTSPageHeader" onclick="showServiceVersionInfo();">'+HeadlineTitle+'</div>';

  var html_test_title='<div class="MTSPageHeader">Тест: '+getTestTitle()+'</div>';
  var html_block_title='<span id="idSpanBlockTitle">&nbsp;</span>';
  html_block_title='<div class="MTSPageHeader">'+html_block_title+'</div>';

  var html_test_table='<table cellpadding="0" cellspacing="0" border="'+TablesBordersWidth+'">'+"\n";
  html_test_table+='<tr>'+"\n"+'<td align="right">'+html_test_title+'</td></tr>'+"\n";
  html_test_table+='<tr>'+"\n"+'<td align="right">'+html_block_title+'</td></tr>'+"\n";
  html_test_table+='</table>'+"\n";

  var html="";
  html+='<table cellpadding="10" cellspacing="0" border="'+TablesBordersWidth+'" width="100%">'+"\n";
  html+='<tr>'+"\n"+'<td align="left" nowrap style="padding-left:40px;">'+html_cabinet_logo+'</td>'+"\n";
  html+='<td align="left" nowrap>'+html_cabinet_title+'</td>'+"\n";
  html+='<td align="right" width="100%">'+"\n"+html_test_table+''+"\n"+'</td>'+"\n";
  var html_corporate_logo = htmlTestingCorporateLogo();
  if (html_corporate_logo!="") html+='<td align="left" nowrap style="padding-right:20px;padding-left:20px;">'+html_corporate_logo+'</td>'+"\n";
  html+='</tr>'+"\n";
  html+='</table>'+"\n";

  html=htmlContainerPanel(html);
  return html;
}


function htmlTestingPageFooter()
{
  var curtime=getCurrentTimeString();
  var testtime=getTestingTimeString();

  var html_timers_table='<table cellpadding="0" cellspacing="0" border="'+TablesBordersWidth+'">'+"\n";
  html_timers_table+='<tr><td align="right">Текущее время:&nbsp;</td>'+"\n";
  html_timers_table+='<td align="left"><span id="idSpanCurrentTime">'+curtime+'</span></td></tr>'+"\n";
  html_timers_table+='<tr><td align="right">Время сеанса:&nbsp;</td>'+"\n";
  html_timers_table+='<td align="left"><span id="idSpanTestingTime">'+testtime+'</span></td></tr>'+"\n";
  html_timers_table+='</table>'+"\n";

  var html_empty_table='<table cellpadding="0" cellspacing="0" border="'+TablesBordersWidth+'">'+"\n";
  html_empty_table+='<tr><td>&nbsp;</td></tr>'+"\n";
  html_empty_table+='<tr><td>&nbsp;</td></tr>'+"\n";
  html_empty_table+='<tr><td>&nbsp;</td></tr>'+"\n";
  html_empty_table+='</table>'+"\n";

  var html_progress_table='<table cellpadding="0" cellspacing="0" border="'+TablesBordersWidth+'">'+"\n";
  html_progress_table+='<tr><td align="right" nowrap style="padding-right:10px;"><span id="idSpanBlockItemsProgressText">&nbsp;</span></td>'+"\n";
  html_progress_table+='<td align="left"><span id="idSpanBlockItemsProgressBar">&nbsp;</span></td></tr>'+"\n";
  html_progress_table+='<tr><td align="right" nowrap style="padding-right:10px;"><span id="idSpanBlockTimeProgressText">&nbsp;</span></td>'+"\n";
  html_progress_table+='<td align="left"><span id="idSpanBlockTimeProgressBar">&nbsp;</span></td></tr>'+"\n";
  html_progress_table+='<tr><td align="right" nowrap style="padding-right:10px;"><span id="idSpanQuestionTimeProgressText">&nbsp;</span></td>'+"\n";
  html_progress_table+='<td align="left"><span id="idSpanQuestionTimeProgressBar">&nbsp;</span></td></tr>'+"\n";
  html_progress_table+='</table>'+"\n";
  html_progress_table='<div id="idDivProgressBars">'+"\n"+html_progress_table+"\n"+'</div>'+"\n";

  var html_question_table='<table cellpadding="0" cellspacing="0" border="'+TablesBordersWidth+'">'+"\n";
  html_question_table+='<tr><td><big><span id="idSpanBlockQuestionNumber">&nbsp;</span></big></td>'+"\n";
  html_question_table+='</table>'+"\n";
  html_question_table='<div id="idDivQuestionNumber">'+"\n"+html_question_table+"\n"+'</div>'+"\n";

  var html="";
  html+='<table cellpadding="10" cellspacing="0" border="'+TablesBordersWidth+'" width="100%">'+"\n";
  html+='<tr><td align="left" width="100%">'+html_timers_table+'</td>'+"\n";
  html+='<td align="left" nowrap>'+html_empty_table+'</td>'+"\n";
  html+='<td align="left" nowrap>'+html_progress_table+'</td>'+"\n";
  html+='<td align="left" nowrap>'+html_question_table+'</td>'+"\n";
  html+='</table>'+"\n";

  html=htmlContainerPanel(html);

  return html;
}



function htmlTestingCorporateLogo()
{
  var html="";
  if (LogoImageFilePath!="") html='<img src="'+LogoImageFilePath+'" border="'+TablesBordersWidth+'">';
  if ((LogoImageLinkUrl!="") && (html!="")) html='<a href="'+LogoImageLinkUrl+'" title="'+LogoImageLinkText+'" target="'+LogoImageLinkUrl+'">'+html+'</a>';
  return html;
}



// Common Set Content Methods


function getObjectById(id)
{
  var object=document.getElementById(id);
//  if (object==undefined) showDebugAlert("Object not found: "+id);
  return object;
}


function setObjectTextContent(id,text)
{
return setObjectHtmlContent(id,text);
  var object=getObjectById(id);
  var result=(object!=undefined);
  if (result) object.innerText=text; 
  return result;
}


function setObjectHtmlContent(id,html)
{
  var object=getObjectById(id);
  var result=(object!=undefined);
  if (result) object.innerHTML=html; 
  return result;
}


function setObjectHidden(id,hidden)
{
  var object=getObjectById(id);
  var result=(object!=undefined);
  if (result) object.style.display=(hidden?"none":"");
  return result;
}


function setObjectFocused(id,focused)
{
  var object=getObjectById(id);
  var result=(object!=undefined);
  if (result) {
    if (focused) object.focus(); else object.blur();
  }
  return result;
}


function setObjectStyle(id,csstext)
{
  var object=getObjectById(id);
  var result=(object!=undefined);
  if (result) object.style.cssText=csstext;
  return result;
}


function setObjectClass(id,cssclass)
{
  var object = getObjectById(id);
  var result = (object!=undefined);
  if (result) object.className = cssclass;
  return result;
}


function setPageContent(html)
{
  return setObjectHtmlContent("idPageContent",html);
}


function setTestingContent(html)
{
  return setObjectHtmlContent("idTestingContent",html);
}




// Set Elements Text Content


function setCurrentTimeContent(string)
{
  return setObjectTextContent("idSpanCurrentTime",string);
}


function setTestingTimeContent(string)
{
  return setObjectTextContent("idSpanTestingTime",string);
}


function setBlockTitleContent(string)
{
  return setObjectTextContent("idSpanBlockTitle",string);
}


function setBlockItemsProgressTextContent(string)
{
  return setObjectTextContent("idSpanBlockItemsProgressText",string);
}


function setBlockTimeProgressTextContent(string)
{
  return setObjectTextContent("idSpanBlockTimeProgressText",string);
}


function setQuestionTimeProgressTextContent(string)
{
  return setObjectTextContent("idSpanQuestionTimeProgressText",string);
}


function setBlockQuestionNumberContent(string)
{
  return setObjectHtmlContent("idSpanBlockQuestionNumber",string);
}




// Set Elements Html Content


function setBlockItemsProgressBarContent(string)
{
  return setObjectHtmlContent("idSpanBlockItemsProgressBar",string);
}


function setBlockTimeProgressBarContent(string)
{
  return setObjectHtmlContent("idSpanBlockTimeProgressBar",string);
}


function setQuestionTimeProgressBarContent(string)
{
  return setObjectHtmlContent("idSpanQuestionTimeProgressBar",string);
}


function setBlockNumberTitleContent(string)
{
//  return setObjectTextContent("idSpanBlockItemsString",string);
}


function setQuestionMessageContent(string)
{
  return setObjectHtmlContent("idDivQuestionMessage",string);
}


function setInstrucMessageContent(string)
{
  return setObjectHtmlContent("idDivInstrucMessage",string);
}



function setRestoreMessageContent(string)
{
  return setObjectHtmlContent("idDivRestoreMessage",string);
}



// Show Object Methods


function showQuestion(qnumber)
{
  var html=htmlQuestion(qnumber);
  setTestingContent(html);
  return true;
}


function showCurrentQuestion()
{
  return showQuestion(CurrentQuestionNumber);
}


function showQuestionMessage(string)
{
  return setQuestionMessageContent(string);
}


function showQuestionMessageAlert(string)
{
  string='<span style="color:red;">'+string+'</span>';
  return setQuestionMessageContent(string);
}



// Set Element Properties


function setButtonEnabled(id,enabled)
{
  width=90;
  var sclass="MTSButton"+width+(enabled? "":"disabled");
  var object=document.getElementById(id);
  var found=(object!=undefined);
  if (found) {
    object.className = sclass;
    object.disabled = !enabled;
  } else {
    var message="Button not found: "+id;
    alert(message);
  }
  return found;
}


function setButtonLighted(id,lighted)
{
  var csstext=lighted? "color:yellow;":"";
  var result=setObjectStyle(id,csstext)
  return result;
}


function setNextButtonEnabled(enabled)
{
  return setButtonEnabled("idButtonNext",enabled);
}


function setPrevButtonEnabled(enabled)
{
  return setButtonEnabled("idButtonPrev",enabled);
}


function setQuestionEnabled(qnumber,enabled)
{
  var acount=getTestQuestionAnswersCount(qnumber);
  for (var a=0;a<acount;a++) {
    var anumber=a+1;
    setQuestionAnswerControlEnabled(qnumber,anumber,enabled);
  }
  return true;
}


function setProgressBarsHidden(hidden)
{
  return setObjectHidden("idDivProgressBars",hidden);
}


function setQuestionNumberHidden(hidden)
{
  return setObjectHidden("idDivQuestionNumber",hidden);
}


function setDebugPanelHidden(hidden)
{
  var id="idDivTestDebugPanel";
  setObjectHidden(id,hidden);
}


function setAjaxLoadingIndicatorHidden(hidden)
{
  AjaxLoadingIndicatorHidden = hidden;
  return setObjectHidden("idDivAjaxLoadingIndicator",hidden);
}



// Answers Lighted & Selected Methods


function getQuestionAnswerChecked(qnumber,anumber,answers)
{
  var qnumber = getCurrentQuestionAbsoluteNumber();
  var qcode = getTestQuestionTypeCode(qnumber);
  switch (qcode) {
    case "single":
      var checked = (anumber==answers[0]);
      break;
    case "multiple":
      var checked = (answers[anumber-1]==2);
      break;
    default:
      var checked = false;
      break;
  }
  return checked;
}


function getScreenAnswerChecked(anumber)
{
  var qnumber = getCurrentQuestionAbsoluteNumber();
  var answers = getScreenQuestionAnswers(qnumber);
  var checked = getQuestionAnswerChecked(qnumber,anumber,answers);
  return checked;
}


function getProtocolAnswerChecked(qnumber,anumber)
{
  var answers = getProtocolQuestionAnswers(qnumber);
  var checked = getQuestionAnswerChecked(qnumber,anumber,answers);
  return checked;
}


function setAnswerPanelLigted(anumber,lighted)
{
  var checked = getScreenAnswerChecked(anumber);
  if (!checked) {
    var id1 = "idCellAnswerControl" + anumber;
    var id2 = "idCellAnswerText" + anumber;
    var cssclass = lighted? "TdAnswerLighted":"TdAnswerDefault";
    setObjectClass(id1,cssclass+"1");
    setObjectClass(id2,cssclass+"2");
  }
}


function setAnswerPanelSelected(anumber,selected)
{
  var id1 = "idCellAnswerControl" + anumber;
  var id2 = "idCellAnswerText" + anumber;
  var cssclass = selected? "TdAnswerSelected":"TdAnswerDefault";
  setObjectClass(id1,cssclass+"1");
  setObjectClass(id2,cssclass+"2");
}


function displayAnswersSelections()
{
  var qnumber = getCurrentQuestionAbsoluteNumber();
  var acount = getTestQuestionAnswersCount(qnumber);
  for (var a=1; a<=acount; a++) {
    var checked = getScreenAnswerChecked(a);
    setAnswerPanelSelected(a,checked);
  }
}


function setScreenAnswerChecked(anumber)
{
  var qnumber = getCurrentQuestionAbsoluteNumber();
  setScreenQuestionAnswerNumber(qnumber,anumber);
}

