

/*
  Обработка исключений
  objForm - объект формы (опционально)
*/
Exception_Multiline = function (objForm) {
  this.arrExceptions = [];
  if (objForm) this.jqForm = $(objForm);
  return this;
}
Exception_Multiline.prototype.arrExceptions = []; //здесь будут храниться исключения
Exception_Multiline.prototype.jqForm = null; //JQ объект формы
//сбрасываем объект исключений до исходного состояния (удаляем крестики и все исключения)
Exception_Multiline.prototype.reset = function () {
  this.arrExceptions = []; //удаляем уже выброшенные исключения
  if (this.jqForm) this.jqForm.find("img.errOrCor").remove();
}
//добавляем очередное исключение в массив
Exception_Multiline.prototype.add = function (data) {
  var objData = typeof(data) == "string" ? {text: data} : data; //
  this.arrExceptions.push(objData);
  return this;
}
//добавляем сразу несколько исключений
Exception_Multiline.prototype.addMany = function (objData) {
  var size = objData.length;
  if (!size) return;
  for (var i = size; i--;) {
    this.add(objData[i]);
  }
  return this;
}
//Добавить исключение и сразу выбросить
Exception_Multiline.prototype.throwOne = function (data) {
  var objData = typeof(data) == "string" ? {text: data} : data; //
  //если задана форма и при этом для данного элемента есть элемент для привязки
  if (this.jqForm && objData.selector && objData.selector.length) { 
    var html = "<a href='#' title='" + objData.text + "' onclick='alert($(this).attr('title'));return false;'>\
                  <img alt='' class='errOrCor' src='" + W_IMAGES + "icons/error.gif'>\
                </a>";
    $(objData.selector).append(html);
  } 
  else { //если форма не задана
    alert(" - " + objData.text)  ;
  }
  return this;
}
//Выбросить все добавленные исключения
Exception_Multiline.prototype.throwAll = function () {
  var size = this.arrExceptions.length;
  if (size) { //если исключения есть
    if (this.jqForm) { //если задана форма
        if (this.jqForm) this.jqForm.find("img.errOrCor").remove();
        for (var i = size; i--;) {
          if (this.arrExceptions[i].selector && this.arrExceptions[i].selector.length) {
            var html = "<a href='#' title='" + this.arrExceptions[i].text + "' onclick='alert($(this).attr(\"title\"));return false;'>\
                          <img alt='' class='errOrCor' src='" + W_IMAGES + "icons/error.gif'>\
                        </a>";
            $(html).insertAfter(this.arrExceptions[i].selector);
          } else alert(" - " + this.arrExceptions[i].text);
        }
    } 
    else { //если форма не задана
      alert(this.getPlain());
    }
    this.arrExceptions = []; //удаляем уже выброшенные исключения
  }
  return this;
}
//Проверяем, есть ли исключения
Exception_Multiline.prototype.exist = function () {
  return this.arrExceptions.length > 0;
}
//Возвращает оформленный для вывода список ошибок
// options.bullet (string) - элемент списка
// options.separator (string) - разделитель (\n, <br />)
Exception_Multiline.prototype.getPlain = function (options) {
  var settings = {bullet: " - ", separator: "\n"};
  jQuery.extend(settings, options);
  var size = this.arrExceptions.length;
  if (!size) return "";
  var arrExceptionsTexts = [];
  for (var i = size; i--;) {
    arrExceptionsTexts.push(this.arrExceptions[i].text);
  }
  return settings.bullet + arrExceptionsTexts.join(settings.separator + settings.bullet);
}

