function myjax_check_manager(){

  this.http=null;
  if(!this.http){
      this.http = get_http();
      this.working = false;
  }
  // Запрос
  if (!this.working && this.http) {
    var http = this.http;
    //добавляем закодированный текст
    //в URL запроса
    url = "/chat/say?ch=1";
    //создаём запрос
    this.http.open("GET", url, true);
    //прикрепляем к запросу функцию-обработчик
    //событий
    this.http.onreadystatechange = function() {
      // 4 - данные готовы для обработки
      var res;
      // Получаем объект XMLHTTPRequest
      if(!(res = document.getElementById('result'))){
          res = document.createElement('div');
          res.id = 'result';
         
          // добавить дочерним в body документа
          document.body.appendChild(res);
      }
      if (http.readyState == 4) {
          res.innerHTML = http.responseText;
          this.working = false;
      }else{
          //message("Загрузка, ждите...");
      }
    }
    this.working = true;
    this.http.send(null);
  }
  if(!this.http){
    message('Ошибка при создании XMLHTTP объекта!')
  }
}

function myjax_gettable(){

  var bn = document.getElementById('bname');
  this.http=null;
  if(!this.http){
      this.http = get_http();
      this.working = false;
  }
  // Запрос
  if (!this.working && this.http) {
    var http = this.http;
    //добавляем закодированный текст
    //в URL запроса
    url = "/chat/say?base=" + encodeURI(bn.value);
    //создаём запрос
    this.http.open("GET", url, true);
    //прикрепляем к запросу функцию-обработчик
    //событий
    this.http.onreadystatechange = function() {
      // 4 - данные готовы для обработки
      var res;
      // Получаем объект XMLHTTPRequest
      if(!(res = document.getElementById('result'))){
          res = document.createElement('div');
          res.id = 'result';
         
          // добавить дочерним в body документа
          document.body.appendChild(res);
      }
      if (http.readyState == 4) {
          res.innerHTML = http.responseText;
          this.working = false;
          message("");
          document.getElementById('bname').value = '';
          document.getElementById('submitbut').disabled = false;
          document.getElementById('bname').disabled = false;
      }else{
          message("Отправка сообщения...");
          document.getElementById('submitbut').disabled = true;
          document.getElementById('bname').disabled = true;
      }
    }
    this.working = true;
    this.http.send(null);
  }
  if(!this.http){
    message('Ошибка при создании XMLHTTP объекта!')
  }
}

function get_http(){
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new 
            ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            xmlhttp = false;
        }
    }
  @else
    xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}

// функция get_http была найдена мною на просторах интернета довольно давно, но я ей пользуюсь, ибо она удобная и кроссбраузерная... Используется для создания ного объекта xmlhttprequest для нашего скрипта...
function get_http(){
    var xmlhttp;
   
    //message('Инициализация XMLHttpRequest');
   
    // проверка браузера
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        // у нас не IE
        try {
            xmlhttp = new XMLHttpRequest();
        } catch (e) {
            xmlhttp = false;
        }
    } else {
        // у нас все же IE
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            xmlhttp = false;
        }   
    }
   
    // ставим флаг активности = 0
    this.act = 0;
   
    if(!xmlhttp){
        // ошибка инициализации xmlhttprequest
        message('<font color="red"><b>Невозможно инициализировать XMLHttpRequest!</b></font>'    );
    } else {
        // инициализация xmlhttprequest успешна - возращаем объект
        return xmlhttp;
    }
   
}

// устанавливаем свойства класс, которые будут использованы при подключении
// синтаксис: myjax_setdata(хост_сервера_бд,порт_или_путь_к_сокету,имя_пользователя,пароль);
function myjax_setdata(host,portsock,user,password){
    //message("Установка параметров подключения...");
    this.host = host;
    this.portsock = portsock;
    this.user = user;
    this.password = password;
    //message("готов...");
}

function myjax_check_manager_(){
    // лишняя ненужная проверка
    if(!req)
           req = get_http(); // если xmlhttprequest не инициализирован, инициализировать

    // если в данный момент никакой запрос не обрабатывает или посылается, можно его формировать и посылать
    if(this.act == 0){
        reqstr =     "ch=1";

        req.onreadystatechange = status_tiho; // указываем, что при изменении статуса xmlhttprequest, должна выполняться функция status
          req.open('POST', '/chat/say', true); // открываем http-соединение для запроса
          req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); // заголовок с информацие о типа посылаймых в запросе данных
          req.setRequestHeader("Content-length", reqstr.length); // заголовок с указание длины данных = длине строки запроса
          req.setRequestHeader("Connection", "close"); // указываем, что http-соединение должно быть закрыто после выполнения запроса

        this.act = 1; // ставим флаг активности = 1, чтобы избежать повторной отправки запроса до завершения обработки предыдущего
          req.send(reqstr); // шлем запрос...
    } else {

    }
   
}


// получение таблицы - основная функция.
function myjax_gettable_(){
   
    // получаем текстовые поля формы, куда вводили данные
    var bn = document.getElementById('bname'); // имя БД
    var tn = document.getElementById('tname'); // имя таблицы
    var pole = document.getElementById('tname'); // имя таблицы
   
    // лишняя ненужная проверка
    if(!req)
           req = get_http(); // если xmlhttprequest не инициализирован, инициализировать
   
    // ошибка если, имя БД не указано
    if(bn.value.length < 1) {
        message('<font color="red"><b>Пустой текст!</b></font>')
        return;
    }

    // ошибка если, имя таблицы данных не указано
    //if(tn.value.length < 1) {
    //    message('<font color="red"><b>Не указано имя таблицы!</b></font>')
    //    return;
    //}
   
    // если в данный момент никакой запрос не обрабатывает или посылается, можно его формировать и посылать
    if(this.act == 0){
       
        message('Построение запроса...');
       
        // формирование строки запроса. Для post и get запросов формирование одинаково:
        // параметр_1=значение_1&параметр_2=значение_2&...=...&параметр_N=значение_N
        // все значения надо пропускать через encodeURI, чтобы нормально обрабатывались служебные символы, как кавычки, пробелы и т.д.
        reqstr =     "base=" + encodeURI(bn.value);

        req.onreadystatechange = status; // указываем, что при изменении статуса xmlhttprequest, должна выполняться функция status
          req.open('POST', '/chat/say', true); // открываем http-соединение для запроса
          req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); // заголовок с информацие о типа посылаймых в запросе данных
          req.setRequestHeader("Content-length", reqstr.length); // заголовок с указание длины данных = длине строки запроса
          req.setRequestHeader("Connection", "close"); // указываем, что http-соединение должно быть закрыто после выполнения запроса
        message('Отправка запроса...');
        this.act = 1; // ставим флаг активности = 1, чтобы избежать повторной отправки запроса до завершения обработки предыдущего
          req.send(reqstr); // шлем запрос...
       
    } else {
       
        message("Дождитесь завершения предыдущего запроса..."); // пред. запрос не завершен, послать следующий нельзя
       
    }
   
}

// создание div-элемента для вывода статусных сообщений
function createbox(){
    var mb = document.createElement('div'); // создать в структуре документа новый элемент div
    document.body.appendChild(mb); // добавить элемент в конец структуры дочерним для тега body
   
    // изменяем стиль div-a
    mb.style.background = '#efefef';
    mb.style.border = '1px solid #ccc';
    mb.style.padding = '5px';
    mb.style.fontSize = '11px';
    mb.style.fontFamily = 'Verdana, Tahoma, Arial, sans-serif';
    mb.style.margin = '0';
    mb.style.position = 'absolute';
    mb.style.top = '5px';
    mb.style.right = '5px';
    mb.style.width = '250px';
    mb.style.color = '#666';
    mb.id = 'myjax_messageBox';
   
    // пишем внутрь нашего div-a сообщение
    mb.innerHTML = 'MYjax готов к работе...';
   
}

// функция вывода статусных соообщений
function message(msg){
    var messagebox = document.getElementById('myjax_messageBox');
    messagebox.innerHTML = msg;
}


// функция обработки запроса
function status_tiho(){
   
    // переменная для хранения div-элемента, в который будет выведен результат запроса
    var res;
       
    if (req.readyState == 4) { // запрос прошел успешно и завершен, http-ответ получен
           
            // переменная для хранения результата запроса, возвращаемого myjax.php
            var data = req.responseText;

            // если div-a res не существует, создать его и присвоить id = result
            if(!(res = document.getElementById('result'))){
                res = document.createElement('div');
                res.id = 'result';
               
                // добавить дочерним в body документа
                document.body.appendChild(res);
            }
           
            // в myjax.php обработчик mysql-ошибок при встрече с таковыми выдает die-сообщение с префиксом ОШИБКА!
            // если таковой префикс имеется, то вывод результата запроса пойдет в информационный контейнер
            if(data.indexOf('ОШИБКА!')==0)
                message(data);
           
            // если ошибок нет, то выводим результаты
            else {
                res.innerHTML = data;
                //vrem.value = vrem.value + 1;
                //message(vrem.value); 
                act = 0; // флаг активности = 0 - можно выполнять след. запрос
            }
           
        } else {

        }
}

function status(){
   
    // переменная для хранения div-элемента, в который будет выведен результат запроса
    var res;

    message('Отправка...');
       
    if (req.readyState == 4) { // запрос прошел успешно и завершен, http-ответ получен
           
            // переменная для хранения результата запроса, возвращаемого myjax.php
            var data = req.responseText;

            // если div-a res не существует, создать его и присвоить id = result
            if(!(res = document.getElementById('result'))){
                res = document.createElement('div');
                res.id = 'result';
               
                // добавить дочерним в body документа
                document.body.appendChild(res);
            }
           
            // в myjax.php обработчик mysql-ошибок при встрече с таковыми выдает die-сообщение с префиксом ОШИБКА!
            // если таковой префикс имеется, то вывод результата запроса пойдет в информационный контейнер
            if(data.indexOf('ОШИБКА!')==0)
                message(data);
           
            // если ошибок нет, то выводим результаты
            else {
                res.innerHTML = data;
                message('');
                act = 0; // флаг активности = 0 - можно выполнять след. запрос
                document.getElementById('bname').value = '';
            }
           
        } else {
            message('Отправка сообщения...'); // запрос еще не завершен, http-ответ не получен               
        }
}

// Создаем новый элемент (если его не существует), в который представляет собой div, куда будут выводиться сообщения о статусе работы скрипта
var messagebox;
if(!(messagebox = document.getElementById('myjax_messageBox')))
    //createbox(); // выполнить функцию createbox для создания и добавления к структуре документа нового элемента div
   
var req; // хендл для держания ссылки на объект xmlhttprequest
get_http(); // создание нового xmlhttprequest-объекта через функцию get_http.

