

// -----------------------------------------------------------------------
// Основная логика
// -----------------------------------------------------------------------

// Объект для работы с AJAX
var xmlHttp = createXmlHttpRequestObject();

// Отложенный запрос
var delayed_request = new Array();
var delayed_timeout = null;

function grow_step(obj, steps, step, step_x, step_y) {
  var t_w = Math.ceil(1 + step * step_x);
  var t_h = Math.ceil(1 + step * step_y);
  obj.style.width  = t_w + 'px';
  obj.style.height = t_h + 'px';
  if (t_txt = obj.getElementsByTagName('textarea')[0]) {
    t_txt.style.width  = t_w + 'px';
    t_txt.style.height = t_h + 'px';
  }
  if (step < steps) {
    setTimeout(function() {
      grow_step(obj, steps, step+1, step_x, step_y);
    }, 10);
  } else {
    window.scrollTo(obj.offsetLeft * 1, obj.offsetTop * 1 - 50);
  }
}


function show_code_area(t_link) {
  t_link = t_link || this;
  t_link.blur();
  if (t_div = document.getElementById('code_div')) {
    t_link.innerHTML = 'Получить HTML код';
    t_link.parentNode.removeChild(t_div);
  } else {
    if (!(t_div = document.createElement('div'))) {
      return false;
    }
    t_div.id = 'code_div';
    t_div.style.display = 'block';
    t_div.style.marginTop = '5px';
    t_div.style.width  = '1px';
    t_div.style.height = '1px';
    t_txt = document.createElement('textarea');
    t_txt.style.borderColor = '#E6E9C9';
    t_txt.style.borderStyle = 'solid';
    t_txt.style.borderWidth = '1px';
    t_txt.style.fontFamily = 'Arial, Sans Serif';
    t_txt.style.fontSize = '10px';
    t_txt.style.overflow = 'hidden';
    t_link.innerHTML = 'Скрыть HTML код';
    t_txt.value = '<a href="http://blograte.ru/" target="_blank"><img src="http://blograte.ru/button/" width="88" height="31" border="0" alt="Участник Blograte.ru" title="Участник Blograte.ru" /></a>';
    t_div.appendChild(t_txt);
    t_link.parentNode.appendChild(t_div);
    t_steps = 7;
    if ((typeof document['all'] != 'undefined') && (typeof window['opera'] == 'undefined')) {
      grow_step(t_div, t_steps, 0, 234/t_steps, 81/t_steps);
    } else {
      grow_step(t_div, t_steps, 0, 234/t_steps, 69/t_steps);
    }
  }
  return false;
}

function set_loading(t_obj) {
  if (typeof t_obj != 'undefined' ) {
    t_obj.innerHTML = '<div class="loading">идёт загрузка&hellip;</div>';
  }
}

function refresh_tablo( t_id ) {
  if (!(t_div = document.getElementById('tablo_' + t_id))) {
    return false;
  }

  t_div.innerHTML = '<a href="#" id="get_rss_' + t_id + '" class="service">посмотреть последние темы</a>';

  if (!(t_link = document.getElementById('get_rss_' + t_id))) {
    return false;
  }

  t_link.onclick = function() {
    this.blur();
    t_work_id = this.id.replace('get_rss_','');
    if (t_work_id.indexOf('_') > 0) {
      t_temp_id = t_work_id.split('_');
      t_blog_id = t_temp_id[t_temp_id.length-1];
    } else {
      t_blog_id = t_work_id;
    }
    if (t_div = document.getElementById('tablo_' + t_work_id)) {
      set_loading(t_div);
      ajax_send(null, '/xml/feed/id/' + t_blog_id + '/work/' + t_work_id + '/', 'GET', process_response);
    }
    return false;
  }

  return false;
}


function check_feedback_form( frm ) {
  var t_obj = null;
  var t_value = '';
  var t_data = [];

  if (!(t_obj = document.getElementById('feedback_name'))) {
    return false;
  } else if ((t_value = t_obj.value.trim()) == '') {
    alert('Укажите Ваше имя');
    t_obj.focus();
    return false;
  } else {
    t_data.push('name=' + escape(t_value));
  }

  if (!(t_obj = document.getElementById('feedback_email'))) {
    return false;
  } else if ((t_value = t_obj.value.trim()) == '') {
    alert('Укажите Ваш E-mail');
    t_obj.focus();
    return false;
  } else {
    t_data.push('email=' + escape(t_value));
  }

  if (!(t_obj = document.getElementById('feedback_text'))) {
    return false;
  } else if ((t_value = t_obj.value.trim()) == '') {
    alert('Укажите текст сообщения');
    t_obj.focus();
    return false;
  } else {
    t_data.push('text=' + escape(t_value));
  }

  if (t_data.length > 0) {
    t_data.push('page=' + escape(location.href));
    ajax_send(t_data.join('&'), '/xml/send/', 'POST', process_feedback);
    set_loading(frm);
    frm.innerHTML += '<br/>';
  }

  return false;
}


function check_register_form( frm ) {
  if (frm) {
    var t_name = frm.name.value.trim();
    if (t_name == '') {
      alert('Укажите название блога');
      frm.name.focus();
      return false;
    }
    var t_url = frm.url.value.trim();
    if (t_url == '') {
      alert('Укажите URL блога');
      frm.url.focus();
      return false;
    }
    var t_feed = frm.feed.value.trim();
    var t_data = 'name=' + escape(t_name) + '&url=' + escape(t_url) + '&feed=' + escape(t_feed);
    set_loading(frm);
    ajax_send(t_data, '/xml/add/', 'POST', process_add_blog);
  }
  return false;
}


function close_panels() {
  var t_div = null;
  if ((t_div = document.getElementById('formpanel'))) {
    window.onscroll = t_div._old_onscroll;
    t_div.parentNode.removeChild(t_div);
  }
  if ((t_div = document.getElementById('fullshadow'))) {
    t_div.parentNode.removeChild(t_div);
  }
  return false;
}


function get_viewport_top() {
  var t_top = 0;
  if (typeof window.pageYOffset != 'undefined') {
    t_top = window.pageYOffset;
  } else if (typeof document.body.scrollTop != 'undefined') {
    t_top = document.body.scrollTop;
  }
  return t_top;
}


function scroll_panel() {
  var t_panel = null;
  if (!(t_panel = document.getElementById('formpanel'))) {
    return;
  }
  t_panel.style.top = get_viewport_top() + 75 + 'px';
   if (t_panel._old_onscroll) t_panel._old_onscroll();
}


function show_feedback_form(t_link) {

  if (!t_link || !(t_main = document.getElementById('page'))) {
    return false;
  }

  var t_panel = null;
  if (!(t_panel = document.createElement('div'))) {
    return false;
  }

  var t_shadow = null;
  if ((t_shadow = document.createElement('div'))) {
    t_shadow.id = 'fullshadow';
    t_shadow.style.left = t_main.offsetLeft.toString() + 'px';
    t_shadow.style.top = t_main.offsetTop.toString() + 'px';
    t_shadow.style.width = t_main.offsetWidth.toString() + 'px';
    t_shadow.style.height = t_main.offsetHeight.toString() + 'px';
    document.body.appendChild(t_shadow);
  }

  t_panel.id = 'formpanel';
  t_panel.style.left = t_main.offsetLeft + parseInt((t_main.offsetWidth - 400) / 2) + 'px';
  t_panel.style.top = get_viewport_top() + 35 + 'px';
  t_panel._old_onscroll = window.onscroll;
  window.onscroll = scroll_panel;

  var t_title = null;
  if (!(t_title = document.createElement('div'))) {
    return false;
  }
  t_title.className = 'title';
  t_title.appendChild(document.createTextNode('Форма обратной связи'));
  t_panel.appendChild(t_title);

  var t_canvas = null;
  if (!(t_canvas = document.createElement('div'))) {
    return false;
  }
  t_canvas.className = 'box';

  var t_form = null;
  if (!(t_form = document.createElement('form'))) {
    return false;
  }
  t_form.id = 'feedback_form';
  t_form.action = '/';
  t_form.method = 'post';

  var t_warning = document.createElement('div');
  t_warning.appendChild(document.createTextNode('Ваше сообщение будет отправлено команде рейтинга BlogRate.ru.'));
  t_form.appendChild(t_warning);
  t_form.appendChild(document.createElement('br'));

  t_warning = document.createElement('div');
  t_warning.appendChild(document.createTextNode('Все поля требуется заполнить перед отправкой сообщения.'));
  t_form.appendChild(t_warning);
  t_form.appendChild(document.createElement('br'));

  t_form.appendChild(document.createTextNode('Ваше имя'));
  t_form.appendChild(document.createElement('br'));
  var t_name = document.createElement('input');
  t_name.type = 'text';
  t_name.name = 'name';
  t_name.id   = 'feedback_name';
  t_name.className = 'form_panel';
  t_form.appendChild(t_name);
  t_form.appendChild(document.createElement('br'));

  t_form.appendChild(document.createTextNode('Ваш e-mail'));
  t_form.appendChild(document.createElement('br'));
  var t_email = document.createElement('input');
  t_email.type = 'text';
  t_email.name = 'email';
  t_email.id   = 'feedback_email';
  t_email.className = 'form_panel';
  t_form.appendChild(t_email);
  t_form.appendChild(document.createElement('br'));

  t_form.appendChild(document.createTextNode('Текст'));
  t_form.appendChild(document.createElement('br'));
  var t_text = document.createElement('textarea');
  t_text.name = 'text';
  t_text.id   = 'feedback_text';
  t_text.className = 'form_panel';
  t_form.appendChild(t_text);
  t_form.appendChild(document.createElement('br'));

  t_form.appendChild(document.createElement('br'));
  var t_submit = document.createElement('input');
  t_submit.className = 'submit';
  t_submit.type = 'submit';
  t_submit.value = 'Отправить';
  t_form.appendChild(t_submit);

  var t_clear = document.createElement('div');
  t_clear.className = 'clear';
  t_form.appendChild(t_clear);

  t_canvas.appendChild(t_form);

  t_panel.appendChild(t_canvas);

  var t_close = document.createElement('img');
  t_close.src = '/image/close.png';
  t_close.className = 'close';
  t_close.style.left = t_panel.offsetLeft + 379 + 'px';
  t_close.style.top = t_panel.offsetTop - 21 + 'px';
  t_close.title = 'Закрыть форму обратной связи';
  t_close.onclick = close_panels;
  t_panel.appendChild(t_close);

  document.body.appendChild(t_panel);

  if (t_form = document.getElementById('feedback_form')) {
    t_form.onsubmit = function () {
      var l_form = t_form;
      return check_feedback_form(l_form);
    }
  }

  return false;
}


function show_register_form(t_link) {

  if (!t_link || !(t_main = document.getElementById('page'))) {
    return false;
  }

  var t_panel = null;
  if (!(t_panel = document.createElement('div'))) {
    return false;
  }

  var t_shadow = null;
  if ((t_shadow = document.createElement('div'))) {
    t_shadow.id = 'fullshadow';
    t_shadow.style.left = t_main.offsetLeft.toString() + 'px';
    t_shadow.style.top = t_main.offsetTop.toString() + 'px';
    t_shadow.style.width = t_main.offsetWidth.toString() + 'px';
    t_shadow.style.height = t_main.offsetHeight.toString() + 'px';
    document.body.appendChild(t_shadow);
  }

  t_panel.id = 'formpanel';
  t_panel.style.left = t_main.offsetLeft + parseInt((t_main.offsetWidth - 400) / 2) + 'px';
  t_panel.style.top = get_viewport_top() + 75 + 'px';
  t_panel._old_onscroll = window.onscroll;
  window.onscroll = scroll_panel;

  var t_title = null;
  if (!(t_title = document.createElement('div'))) {
    return false;
  }
  t_title.className = 'title';
  t_title.appendChild(document.createTextNode('Добавить блог в рейтинг'));
  t_panel.appendChild(t_title);

  var t_canvas = null;
  if (!(t_canvas = document.createElement('div'))) {
    return false;
  }
  t_canvas.className = 'box';

  var t_form = null;
  if (!(t_form = document.createElement('form'))) {
    return false;
  }
  t_form.id = 'add_blog_form';
  t_form.action = '/';
  t_form.method = 'post';

  var t_warning = document.createElement('div');
  t_warning.innerHTML = '<span class="must">*</span> - обязательно для заполнения.';
  t_form.appendChild(t_warning);
  t_form.appendChild(document.createElement('br'));

  t_form.appendChild(document.createTextNode('Название блога '));
  t_form.innerHTML += '<span class="must">*</span>';
  t_form.appendChild(document.createElement('br'));
  var t_name = document.createElement('input');
  t_name.type = 'text';
  t_name.name = 'name';
  t_name.id   = 'blog_name';
  t_name.className = 'form_panel';
  t_form.appendChild(t_name);
  t_form.appendChild(document.createElement('br'));

  t_form.appendChild(document.createTextNode('URL блога '));
  t_form.innerHTML += '<span class="must">*</span>';
  t_form.appendChild(document.createElement('br'));
  var t_url = document.createElement('input');
  t_url.type = 'text';
  t_url.name = 'url';
  t_url.id   = 'blog_url';
  t_url.className = 'form_panel';
  t_form.appendChild(t_url);
  t_form.appendChild(document.createElement('br'));

  t_form.appendChild(document.createTextNode('URL фида (через FeedBurner)'));
  t_form.appendChild(document.createElement('br'));
  var t_feed = document.createElement('input');
  t_feed.type = 'text';
  t_feed.name = 'feed';
  t_feed.id   = 'blog_feed';
  t_feed.className = 'form_panel';
  t_form.appendChild(t_feed);
  t_form.appendChild(document.createElement('br'));

  t_form.appendChild(document.createElement('br'));
  t_submit = document.createElement('input');
  t_submit.type = 'image';
  t_submit.src = '/image/add-button.png';
  t_submit.className = 'image';
  t_submit.style.borderWidth = 0;
  t_form.appendChild(t_submit);

  var t_clear = document.createElement('div');
  t_clear.className = 'clear';
  t_form.appendChild(t_clear);

  t_canvas.appendChild(t_form);

  t_panel.appendChild(t_canvas);

  var t_close = document.createElement('img');
  t_close.src = '/image/close.png';
  t_close.className = 'close';
  t_close.style.left = t_panel.offsetLeft + 379 + 'px';
  t_close.style.top = t_panel.offsetTop - 21 + 'px';
  t_close.title = 'Закрыть форму добавления';
  t_close.onclick = close_panels;
  t_panel.appendChild(t_close);

  document.body.appendChild(t_panel);

  if (t_form = document.getElementById('add_blog_form')) {
    t_form.onsubmit = function () {
      var l_form = t_form;
      return check_register_form(l_form);
    }
  }

  return false;
}


var set_handlers_done = false;



function get_properties(t_obj) {
  t_text = '';
  t_list = new Array();
  for (t_param in t_obj) {
    t_list[t_list.length] = t_param;
  }
  t_list.sort();
  for (i = 0; i < t_list.length; i++) {
    t_text += t_list[i] + ' = ' + t_obj[t_list[i]] + "\n";
  }
  return t_text;
}

function show_alert(t_text) {
  if (!(t_div = document.getElementById('alert_div'))) {
    if (!(t_div = document.createElement('div'))) {
      return;
    }
    t_div.id = 'alert_div';
    t_div.style.backgroundColor = '#ffffff';
    t_div.style.position = 'absolute';
    t_div.style.left = '30px';
    t_div.style.top  = '30px';
    t_div.style.height = '500px';
    t_div.style.width  = '500px';
    t_div.style.border = '2px solid #444444';
    t_div.style.overflow = 'scroll';
    t_div.style.padding = '5px';
    t_div.style.display = 'none';
    document.body.appendChild(t_div);
  }
  t_div.innerHTML = '<div align="center"><a href="" onclick="if (t_div = document.getElementById(\'alert_div\')) {t_div.style.display = \'none\';}return false;">[x] close</a></div><pre>' + t_text + '</pre><div align="center"><a href="" onclick="if (t_div = document.getElementById(\'alert_div\')) {t_div.style.display = \'none\';}return false;">[x] close</a></div>';
  t_div.style.display = 'block';

  return false;
}


// Установка обработчиков на элементы управления
function set_handlers() {

  // Повторный запуск не нужен!
  if (set_handlers_done) {
    return;
  }

  // Код кнопки
  var code_button_link = null;
  if ((code_button_link = document.getElementById('show_button_code'))) {
    code_button_link.onclick = function() {
      return show_code_area(this);
    }
  }

  // Ссылки "посмотреть последние темы"
  var t_link_list = null;
  if ((t_link_list = document.getElementsByTagName('a'))) {
    for (i = 0; i < t_link_list.length; i++) {
      t_link = t_link_list[i];
      if (t_link.id.substr(0, 8) != 'get_rss_') {
        continue;
      }

      t_link.onclick = function() {
        this.blur();
        t_work_id = this.id.replace('get_rss_', '');
        if (t_work_id.indexOf('_') > 0) {
          t_temp_id = t_work_id.split('_');
          t_blog_id = t_temp_id[t_temp_id.length-1];
        } else {
          t_blog_id = t_work_id;
        }
        if (t_div = document.getElementById('tablo_'+t_work_id)) {
          t_div.innerHTML = '<div class="loading">идёт загрузка&hellip;</div>';
          ajax_send(null, '/xml/feed/id/'+t_blog_id+'/work/'+t_work_id+'/', 'GET', process_response);
        }
        return false;
      }
    }
  }

  // Форма обратной связи
  var t_feedback = null;
  if ((t_feedback = document.getElementById('feedback_link'))) {
    t_feedback.onclick = function() {
      return show_feedback_form(this);
    }
  }

  // Форма добавления блога
  var t_register = null;
  if ((t_register = document.getElementById('register_link'))) {
    t_register.onclick = function() {
      return show_register_form(this);
    }
  }

  // Форма поиска
  var t_search_field = null;
  if ((t_search_field = document.getElementById('find_blog_search'))) {
    var t_initial_msg = t_search_field.value.trim();
    t_search_field.onfocus = function() {
      if (t_initial_msg == this.value.trim()) {
        this.value = '';
      }
    }
    t_search_field.onblur = function() {
      if ('' == this.value.trim()) {
        this.value = t_initial_msg;
      }
    }
  }

  // Переключения табов
  var t_tab_link = null;
  if ((t_tab_link = document.getElementById('link-opml'))) {
    t_tab_link.onclick = function () {
      var t_tab = document.getElementById('tab-opml');
      var t_other_tab = document.getElementById('tab-map');
      var t_content = document.getElementById('content-opml');
      var t_other_content = document.getElementById('content-map');
      if (!t_tab || !t_other_tab || !t_content || !t_other_content) {
        return false;
      }
      if (0 <= t_tab.className.indexOf('active')) {
        return false;
      }
      del_class(t_other_tab, 'active');
      set_class(t_other_content, 'hidden');
      del_class(t_content, 'hidden');
      set_class(t_tab, 'active');
      return false;
    };
  }
  if ((t_tab_link = document.getElementById('link-map'))) {
    t_tab_link.onclick = function () {
      var t_tab = document.getElementById('tab-map');
      var t_other_tab = document.getElementById('tab-opml');
      var t_content = document.getElementById('content-map');
      var t_other_content = document.getElementById('content-opml');
      if (!t_tab || !t_other_tab || !t_content || !t_other_content) {
        return false;
      }
      if (0 <= t_tab.className.indexOf('active')) {
        return false;
      }
      del_class(t_other_tab, 'active');
      set_class(t_other_content, 'hidden');
      del_class(t_content, 'hidden');
      set_class(t_tab, 'active');
      return false;
    };
  }

  // Загрузка снимка блога
  var t_shot_link = null;
  if ((t_shot_link = document.getElementById('blogshot_link'))) {
    var t_img_list = t_shot_link.getElementsByTagName('img');
    if (0 < t_img_list.length) {
      var t_img = t_img_list[0];
      if (!t_img.complete) {
        t_shot_link.style.visibility = 'hidden';
        t_img.onload = function () {
          var t_link = document.getElementById('blogshot_link');
          if (t_link) {
            t_link.style.visibility = 'visible';
          }
        };
        t_img.onerror = function () {
          var t_image = document.getElementById('blogshot_image');
          if (t_image) {
            t_image.src = '/image/no-shot.png';
            t_image.style.display = 'none';
          }
          t_image = document.getElementById('blogshot_noshot');
          if (t_image) {
            set_class(t_image.parentNode, 'none');
            t_image.style.display = 'block';
          }
        };
        t_img.onabort = t_img.onerror;
      }
    }
  }

  // Вызов функции отрисовки графика
  if ('function' == typeof(memberHistoryChart)) {
    memberHistoryChart();
  }

  set_handlers_done = true;
}


// -----------------------------------------------------------------------


// -----------------------------------------------------------------------
// РАБОТА С AJAX
// -----------------------------------------------------------------------

// Создаёт экземпляр XMLHttpRequest
function createXmlHttpRequestObject () {
  var xmlHttp;
  try {
    xmlHttp = new XMLHttpRequest();
  } catch (e) {
    var XmlHttpVersion = new Array ('MSXML2.XMLHTTP.6.0' ,
                                    'MSXML2.XMLHTTP.5.0' ,
                                    'MSXML2.XMLHTTP.4.0' ,
                                    'MSXML2.XMLHTTP.3.0' ,
                                    'MSXML2.XMLHTTP' ,
                                    'Microsoft.XMLHTTP' );
    for (var i = 0; i < XmlHttpVersion.length && !xmlHttp; i++) {
      try {
        xmlHttp = new ActiveXObject(XmlHttpVersion[i]);
      } catch (e) {}
    }
  }
  if (!xmlHttp) {
    alert('Ошибка создания объекта XMLHttpRequest.');
  } else {
    return xmlHttp;
  }
}

// Отправляет AJAX-запрос
function ajax_send(data, url, method, handler) {
  if (!xmlHttp) {
    return;
  }

  method  = method || 'POST';
  handler = handler || process_response;

  if ((xmlHttp.readyState == 0) || (xmlHttp.readyState == 4)) {
    // Отправляем запрос на сервер
    xmlHttp.open(method, url, true);
    xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlHttp.onreadystatechange = handler;
    xmlHttp.send(data);
  } else {
    delayed_request[delayed_request.length] = function() {
      ajax_send(data, url, method, handler);
    }
    if (delayed_timeout == null) {
      delayed_timeout = setTimeout('check_request()', 100);
    }
  }
}


// Проверяем и отрабатываем запросы
 function check_request() {
  if (delayed_request.length > 0) {
    t_request = delayed_request.shift();
    if (typeof t_request != 'undefined') {
      t_request();
    }
    if ((delayed_request.length > 0) && (delayed_timeout != null)) {
      delayed_timeout = setTimeout('check_request()', 100);
    }
  }
  if (delayed_request.length == 0) {
    delayed_timeout = null;
  }
}

// Обрабатываем ответ с сервера
function process_response() {
  if (!xmlHttp) {
    return;
  }

  if (xmlHttp.readyState != 4) {
    return;
  }

  if (xmlHttp.status != 200) {
    return;
  }

  // Читаем XML-документ ответа
  if ( xmlHttp.responseXML ) {
    resp = xmlHttp.responseXML.documentElement;
  } else {
    resp = null;
  }

  if (resp && (resp.nodeName != 'parsererror')) {
    x_id   = resp.getElementsByTagName('id');
    x_code = resp.getElementsByTagName('code');
    respID   = x_id[0].firstChild.data;
    respCode = x_code[0].firstChild.data;
    if (t_div = document.getElementById('tablo_' + respID)) {
      if ( typeof respCode != 'undefined' ) {
        t_div.innerHTML  = '<div class="tablo">' + respCode + '</div>';
        t_div.innerHTML += '<a href="" onclick="return refresh_tablo(\'' + respID + '\')" class="service">закрыть темы</a>';
      } else {
        t_div.innerHTML = '<a href="#" id="get_rss_' + respID + '" class="service">посмотреть последние темы</a>';
        if (t_link = document.getElementById('get_rss_'+respID)) {
          t_link.onclick = function() {
            this.blur();
            t_blog_id = this.id.replace('get_rss_','');
            if (t_div = document.getElementById('tablo_'+t_blog_id)) {
              //t_div.innerHTML = '<div class="loading">идёт загрузка&hellip;</div>';
              set_loading(t_div);
              ajax_send(null, '/xml/feed/id/'+t_blog_id+'/', 'GET', process_response);
            }
            return false;
          }
        }
      }
    } else {
      alert("ID:\n" + respID + "\n\nCode:\n" + respCode);
    }
  } else {
    var t_div = document.getElementsByTagName('div');
    for (i = 0; i < t_div.length; i++) {
      if (t_div[i].className == 'loading') {
        t_div[i].innerHTML = 'Невозможно получить данные';
      }
    }
  }
}

// Обрабатываем ответ с сервера
function process_add_blog() {
  if (!xmlHttp ) {
    return;
  }

  if (xmlHttp.readyState != 4 ) {
    return;
  }

  if (xmlHttp.status != 200 ) {
    return;
  }


  // Читаем XML-документ ответа
  var resp = xmlHttp.responseXML.documentElement;
  respCode = resp.getElementsByTagName('code')[0].firstChild.data;
  if (t_form = document.getElementById('add_blog_form')) {
    if (typeof respCode != 'undefined') {
      t_form.parentNode.innerHTML = respCode;
    }
  } else {
    alert(respCode);
  }
}

// Обрабатываем ответ с сервера
function process_feedback() {
  if (!xmlHttp) {
    return;
  }

  if (xmlHttp.readyState != 4) {
    return;
  }

  if (xmlHttp.status != 200) {
    return;
  }

  if (t_panel = document.getElementById('feedback_form')) {
    if ((t_resp = xmlHttp.responseXML.documentElement) && (t_list = t_resp.getElementsByTagName('code')) && (t_code = t_list[0])) {
      t_panel.innerHTML = t_code.firstChild.data + '<br/><br/>';
    }
  }
}

// -----------------------------------------------------------------------


// -----------------------------------------------------------------------
// РАБОТА С DOM
// -----------------------------------------------------------------------

// Определить X-координату элемента
function pos_left(t_obj) {
  return t_obj.offsetLeft + ((t_obj.offsetParent.tagName != 'BODY') ? pos_left(t_obj.offsetParent) : 0);
}

// Определить Y-координату элемента
function pos_top(t_obj) {
  return t_obj.offsetTop + ((t_obj.offsetParent.tagName != 'BODY') ? pos_top(t_obj.offsetParent) : 0);
}

// Добавить класс
function set_class(w_object, c_name) {
  w_object = w_object || null;
  c_name   = c_name || '';

  if ((w_object == null) || (c_name.length == 0)) {
    return;
  }

  if (typeof w_object['className'] == 'undefined') {
    return;
  }

  var c_list = w_object.className.split(' ');
  if (c_list.find(c_name) < 0) {
    c_list[c_list.length] = c_name;
    w_object.className = c_list.join(' ');
  }
}

// Убрать класс
function del_class(w_object, c_name) {
  w_object = w_object || null;
  c_name   = c_name || '';

  if ((w_object == null) || (c_name.length == 0)) {
    return;
  }

  if (typeof w_object['className'] == 'undefined') {
    return;
  }

  var c_list  = w_object.className.split(' ');
  var c_index = c_list.find(c_name);
  if (c_index >= 0) {
    delete c_list[c_index];
    w_object.className = c_list.join(' ');
  }
}

// -----------------------------------------------------------------------


// -------------------------------------------------------
// Доработки (хаки) объектов JavaScript
// -------------------------------------------------------

// Вернуть индекс элемента массива или -1, если его там нет
Array.prototype.find = function(value) {
  var l = this.length;
  for (var i = 0; i < l; i++) {
    if (this[i] == value) {
      return i;
    }
  }
  return -1;
}

String.prototype._empty_chars = new Array(' ', "\t", "\r", "\n");

// Убрать "пустые" символы в начале строки
String.prototype.ltrim = function() {
  var s = '';
  var l = this.length;
  var c = null;
  var starting = true;
  for (var i = 0; i < l; i++) {
    c = this.substr(i, 1);
    if (this._empty_chars.find(c) < 0) {
      s += c;
      if (starting) {
        starting = false;
      }
    } else if (!starting) {
      s += c;
    }
  }
  return s;
}

// Убрать "пустые" символы в конце строки
String.prototype.rtrim = function() {
  var s = '';
  var l = this.length;
  var c = null;
  var delayed = '';
  for (var i = 0; i < l; i++) {
    c = this.substr(i, 1);
    if (this._empty_chars.find(c) < 0) {
      s += delayed + c;
      delayed = '';
    } else {
      delayed += c;
    }
  }
  return s;
}

// Убрать "пустые" символы в начале и конце строки
String.prototype.trim = function() {
  return this.rtrim().ltrim();
}

// -----------------------------------------------------------------------


// Стартовый обработчик страницы, проводящий инциализацию сценариев
function init_site() {
  // Установка обработчиков ссылок
  set_handlers();
}


//// -----------------------------------------------------
//// МЕГАХАК для старта скриптов после загрузки DOM
//// -----------------------------------------------------

/* для Mozilla/Firefox/Opera 9 */
if (document.addEventListener) {
  document.addEventListener("DOMContentLoaded", init_site, false);
}

///* для Internet Explorer */
///*@cc_on @*/
///*@if (@_win32)
//document.write("<script id=\"__ie_onload\" defer=\"defer\" src=\"javascript:void(0)\"><\/script>");
//var script = document.getElementById("__ie_onload");
//script.onreadystatechange = function() {
//  if (this.readyState == "complete") {
//    init_site(); // вызываем обработчик для onload
//  }
//};
///*@end @*/

/* для Safari */
if (/WebKit/i.test(navigator.userAgent)) { // условие для Safari
  var _timer = setInterval(function() {
    if (/loaded|complete/.test(document.readyState)) {
      clearInterval(_timer);
      init_site(); // вызываем обработчик для onload
    }
  }, 10);
}

/* для остальных браузеров */
window.onload = init_site;

//// -----------------------------------------------------
//// Окончание МЕГАХАКА
//// -----------------------------------------------------


