// Функции для работы интерфейса CWA в целом

// Отключаем кнопку, назад на панели обозревателя - также дложно быть
//  включено кеширование страниц (в HTTP и HTML)
window.history.forward();

// Количество попыток отправить данные на сервер
var Submited = 0;
// Массив для хранения информационных деревьев и деревьев ввода
var objTrees = new Array();
// Массив для хранения диаграмм
var objGraphs = new Array();
// Показывает, осуществлялась ли, или нет отправка данных формы по
//  нажатию Enter (pressEnter)
var boolPressEnter_hasSent = false;


/* Функция инициализирующая работу страницы.
  @param strPathToImagesTable string - Имя папки с картинками для
    прорисовки направления сортировки в колонках таблицы.
  @return none */
function load(params) {

	function paramDefault(strPname, strDef) {
    return typeof params[strPname] == "undefined" ?
      strDef : params[strPname]
  }
 
  // Устанавливаем переменные, которые были указаны во время
  //  формирования HTML-страницы
  strPathToImagesTable = paramDefault("strPathToImagesTable", "./Common/img/SortTable/");
  systemInfo._strSupportEmail = paramDefault("strSupportEmail", "unknown");
  systemInfo._strCWAversion = paramDefault("strCWAversion", "unknown");
  systemInfo._numLevelErrMsg = paramDefault("numLevelErrMsg", 2);
  systemInfo._boolSendErrorData = paramDefault("boolSendErrorData", true);
  
  var objSVGembed;

  // Инициализируем сортируемые таблицы
  if (typeof(initSortTable) == "function") initSortTable(strPathToImagesTable);
  var f = document.mainForm;
  if (f.user_input_1) {
    if(f.user_input_1.type=='text')
      f.user_input_1.focus();
  }
  setTimestamp();

  if (objSVGembed = document.all["graphSVG"]) {
    var colLength;
    if (typeof(colLength = objSVGembed.length)=="undefined") {
      colLength = 1;
    }else{
      objSVGembed = objSVGembed[0];
    }

    // Проверяем, возможна ли работа обозревателя с SVG
    try { 
      objSVGembed.getSVGDocument();
      for (var I = 0; I < colLength; I++) {
        objGraphs[I].Initialize(I, "objGraphs[" + I + "].")
        objGraphs[I].Populate();
      }
    } catch (err) {
      showBrowserMsg("errSVG", err);
    }
  }

  // Регистрируем обработчик ошибок
  self.onerror = runtimeError;
  window.onerror = runtimeError;
  //  alert(self.onerror + "\n\n\n" + window.onerror );
}   


function checkSubmit() {
  if (document.mainForm.user_input_0.value == "_exit") {
   setTimestamp();
   return true;
  }
  /* Для предотвращения отправки данных на сервер еще до того, как
   загрузятся все скрипты и произойдет событие <body onload="load()">
   (только IE) */
  if (document.readyState != "complete" && document.clientInformation) {
    alert( 'Пожалуйста, подождите завершения текущей операции!');
    return false;
  }
  // Если true - то значит данные формы уже отсылались при нажатии
  //  Enter, поэтому повторной отправки данных не требуется
  if (boolPressEnter_hasSent) {
    return false;
  }
  Submited++;
  if (Submited == 1) return true;
  // opera некорректно обрабатывает mainForm.submit()
  if ((window.opera != null) && (Submited == 2)) return true;
  alert( 'Пожалуйста, подождите завершения текущей операции!');
  return false;
}

function setTimestamp(){
  var elTimestamp = document.mainForm.user_input_timestamp;
  if (elTimestamp){
    elTimestamp.value= (new Date()).getTime();
  } 
}

function jumpTo(id) {
  document.mainForm.user_input_0.value = id;
  if (checkSubmit() == true) document.mainForm.submit();
}

/* Обработчик событий клавиатуры. По нажатию "ВВОД", при наличии на
  странице кнопки "Далее" вызывает jumpTo("_next")
  @param e event - объект события (DOM).
  @return none */
function pressEnter(e) {
  if (!e) e = window.event; // Получение события для IE
  if (e && e.keyCode == 13 && document.getElementById("_next") &&
    // Если фокус ввода на этих элементах, переход не осуществляется
      !(e.srcElement.tagName.toUpperCase() == "TEXTAREA" ||
      (e.srcElement.tagName.toUpperCase() == "INPUT" && e.srcElement.type.toUpperCase() == "BUTTON") ||
      (e.srcElement.tagName.toUpperCase() == "INPUT" && e.srcElement.type.toUpperCase() == "FILE") ||
      e.srcElement.tagName.toUpperCase() == "A" ||
      e.srcElement.tagName.toUpperCase() == "SELECT")) {
    jumpTo("_next");
    // Отмечаем, что данные формы уже отправлялись
    boolPressEnter_hasSent = true;
  }
}

// Если пользователь закрывает обозреватель, то закрываем сессию CWA
function handlerOnUnload() {
  // Закрываем сессию, если пользователь закрывает обозреватель
  if (document.screenTop && screenTop > 9999) {
    document.mainForm.user_input_0.value = "_exit";
    document.mainForm.submit()
    // Задержка для отправки данных о закрытии обозревателя на сервер
    // Стандартная отрабатывает не всегда - setTimeout("return;", 300)
    var temp = new Date();
    for (var i=0; i < 100000; i++) temp = (new Date()).getTime();
  }
}
