/*-------------------------------------------------------------------+
| JavaScript                                                         |
+--------------------------------------------------------------------+
| Copyright BERCUT (c)                                               |
| Authors: Kleshchev Maxim <kl_m@mail.ru>                            |
+--------------------------------------------------------------------+
// $Id: errorHandling.js, v 1.1.0 (9.6.2005)
  Обработка ошибок, вывод сообщений и т.д. для WEB-интерфейса */

// Определение функции-конструктора объекта для хранения информации о
//  настройках WEB-интерфейса CWA, его версии, настройках обозревателя
var systemInfo = new function() {
  /* Версия CWA */
  this._strCWAversion = "unknown";
  /* Адрес электронной почты адмистратора CWA */
  this._strSupportEmail = "unknown";
  /* Режим отображения сообщений CWA:
    0 - ничего не показываем;
    1 - показываем только те сообщения об ошибках, обработка которых
      НЕ была предусмотрена разработчиками;
    2 - также показываем сообщения об ошибках, для которых
      предусмотрен обработчик ошибок - выводим информационное
      сообщение с точной причиной возникновения ошибки;
    3 - то же, что и 2, но вместе с информационным сообщением
      разработчиков выводим и сообщение обозревателя. */
  this._numLevelErrMsg = 2;
  /* Предлагать или нет отправить данные о ошибке адмистратору CWA */
  this._boolSendErrorData = true;
  /* Строковый код последнего сообщения о ошибке - расшифровки всех
    кодов в browserMsg_RU.js */
  this._strLastCodeMsg = null;
  /* Объект error ошибки, произошедшей последней */
  this._objLastError = null;
  /* Пременная для гаринтии уникальность каждого окна с ошибкой -
    при возникновении новой ошибки она увеличивается на 1 */
  this._numErrorCount = 0;
}

/* Функция выводит сообщение для пользователя в зависимости от
    установленного уровня показываемых сообщений.
  @param strCodeMsg string - Строковый код сообщения.
  @param erObj error - объект error.
  @return none */
function showBrowserMsg(strCodeMsg, erObj) {
  // Определяем тип сообщения, и в зависимости от этого его обрабатываем
  switch (strCodeMsg.substr(0,3)) {
    // Ошибка на странице - при _numLevelErrMsg > 0 выводим сообщение
    case "err":
      if ((systemInfo._numLevelErrMsg > 1) ||
        (systemInfo._numLevelErrMsg == 1 && strCodeMsg == "errRunTimeJS"))
      {
        var strMessage = objBrMsg[strCodeMsg] + (erObj
            ? "\n\nСобщение обозревателя:\n" + erObj.message : "") +
          "\n\n" + objBrMsg["infCopyright"];
  
        // Вывод сообщения об ошибке
        if (systemInfo._boolSendErrorData) {
          if (confirm(strMessage + "\n\n\n" +
              objBrMsg["infConfirmMsgToSupport"])) {
            systemInfo._strLastCodeMsg = strCodeMsg;
            systemInfo._objLastError = erObj;
            sendErrMsgToSupport();
          }
        } else alert(strMessage);
      }          
      break;

    // Информационное сообщение      
    case "inf":
      alert(strMessage);
  }
}

/* Определяем обработчик ошибок времени выполнения JavaScript.
  @param strMsg string - Сообщение о ошибке;
  @param strURL string - URL ошибки;
  @param strLine string - строка в которой произошла ошибка.
  @return true - исполняющая система JavaScript не отображает ошибку. */
function runtimeError(strMsg, strURL, strLine) {
  var objEr = new Object();
  objEr.message = strMsg;
  objEr.URL = strURL;
  objEr.line = strLine;

  showBrowserMsg("errRunTimeJS", objEr);
  /* В зависимости от режима отображения сообщений CWA, выводим
   сообщение исполняющай системы JavaScript или нет:
   true - не выводим, false - выводим */
  return systemInfo._numLevelErrMsg < 3;
}

/* Функция открывает форму для отправки данных о ошибке в службе
  поддержки
  @return none */
function sendErrMsgToSupport() {
  w = window.open("./Common/HTML/sentError.html",
    "error" + systemInfo._numErrorCount++, // Имя (должно быть уникальным)
    "resizeable=yes, menubar=no, scrollbars=yes, top=0, screenY=0, "+
      "height=600");
}