var loading = "<center><img src=\"files/img/loading.gif\" /></center>";

function get_element(id)
{
 return document.getElementById(id);
}

function $(element)
{
 return typeof element == "object" ? element : document.getElementById(element);
}

function show(element)
{
 element.style.display = "";
}

function hide(element)
{
 element.style.display = "none";
}

function show_hide(element)
{
 element.style.display = element.style.display == "none" ? "" : "none";
}

function show_elements(element, class_name)
{
 if (element.className && element.className == class_name) element.style.display = ""; else
 if (element.childNodes)
  for (var i = 0; i < element.childNodes.length; i++)
   show_elements(element.childNodes[i], class_name);
}

function hide_elements(element, class_name)
{
 if (element.className && element.className == class_name) element.style.display = "none"; else
 if (element.childNodes)
  for (var i = 0; i < element.childNodes.length; i++)
   hide_elements(element.childNodes[i], class_name);
}

function set_table_style(element, r1, r1h, r2, r2h)
{
 while (element && element.nodeName != "TR")
  element = element.childNodes.length ? element.childNodes[0] : element.nextSibling;
 var n = 0;
 while (element)
 {
  if (element.nodeName == "TR")
  {
   if (n % 2)
   {
    element.style.background = r1;
    if (r1h)
    {
     element.onmouseover = function() { this.style.background = r1h; }
     element.onmouseout = function() { this.style.background = r1; }
    }
   } else
   {
    element.style.background = r2;
    if (r2h)
    {
     element.onmouseover = function() { this.style.background = r2h; }
     element.onmouseout = function() { this.style.background = r2; }
    }
   }
   for (var i = 0; i < element.childNodes.length; i++)
    if (element.childNodes[i].nodeName == "TD")
     element.childNodes[i].style.background = "none";
   n++;
  }
  element = element.nextSibling;
 }
}

function set_content(element, content)
{
 element.innerHTML = content;
}

function get_attribute(element, attribute)
{
 for (var i = 0; i < element.attributes.length; i++)
  if (element.attributes[i].name == attribute)
   return element.attributes[i].value;
 return false;
}

function get_attributes(element)
{
 var result = {};
 for (var i = 0; i < element.attributes.length; i++)
  result[element.attributes[i].name] = element.attributes[i].value;
 return result;
}

function set_attributes(element, attributes)
{
 for (var i = 0; i < element.attributes.length; i++)
  if (typeof attributes[element.attributes[i].name] != "undefined")
   element.attributes[i].value = attributes[element.attributes[i].name];
}

function get_field(form, field)
{
 for (var i = 0; i < form.elements.length; i++)
  if (form.elements[i].name == field)
   return form.elements[i].value;
}

function get_fields(form)
{
 var result = {};
 for (var i = 0; i < form.elements.length; i++)
  result[form.elements[i].name] = form.elements[i].value;
 return result;
}

function set_fields(form, fields)
{
 for (var i = 0; i < form.elements.length; i++)
  if (typeof fields[form.elements[i].name] != "undefined")
   form.elements[i].value = fields[form.elements[i].name];
}

function add_select_option(select, text, value, isDefaultSelected, isSelected)
{
 var option = new Option(text, value, isDefaultSelected, isSelected);
 select.options.add(option);
}

function add_select_options(select, options)
{
 for (var i in options)
  add_select_option(select, options[i], i, false, false);
}

function remove_select_option(select, index)
{
 select.remove(i);
}

function remove_select_options(select)
{
 for (var i = select.options.length - 1; i >= 0; i--) select.remove(i);
}

function set_select_options(select, options)
{
 remove_select_options(select);
 add_select_options(select, options);
}

function get_url_component(s, name)
{
 var p = s.indexOf("?" + name + "=");
 if (p == -1) p = s.indexOf("&" + name + "=");
 if (p >= 0)
 {
  p += name.length + 2;
  var e = s.indexOf("&", p);
  if (e == -1) e = s.length;
  return (p <= e) ? s.substring(p, e) : "";
 }
 else return "";
}

function load_url(url, post, container)
{
 var success_callback = (arguments.length > 3 && typeof arguments[3] == "function") ? arguments[3] : null,
  error_callback = (arguments.length > 4 && typeof arguments[4] == "function") ? arguments[4] : null;
 set_content(container, loading);
 ajax_request({
  url: url,
  post: post,
  onsuccess: function(request) {
   set_content(container, request.responseText);
   if (success_callback) success_callback(request);
  },
  onerror: function(request) {
   set_content(container, request.statusText);
   if (error_callback) error_callback(request);
  }
 });
}

function submit_form(form, container)
{
 var attributes = get_attributes(form), url = attributes.action, post = "", method = attributes.method;
 var success_callback = arguments.length > 2 && typeof arguments[2] == "function" ? arguments[2] : null;
 var error_callback = arguments.length > 3 && typeof arguments[3] == "function" ? arguments[3] : null;
 if (method.toLowerCase() == "post") post = serialize_form(form);
 else url += (url.indexOf("?") >= 0 ? "&" : "?") + serialize_form(form);
 load_url(url, post, container, success_callback, error_callback);
}

function load_json(url, post, onload)
{
 var success_callback = (arguments.length > 3 && typeof arguments[3] == "function") ? arguments[3] : null,
  error_callback = (arguments.length > 4 && typeof arguments[4] == "function") ? arguments[4] : null;
 ajax_request({
  url: url,
  post: post,
  onsuccess: function(request) {
   try { var jso = eval(request.responseText); } catch (e) { jso = null; };
   onload(jso);
   if (success_callback) success_callback(request);
  },
  onerror: function(request) {
   onload(null);
   if (error_callback) error_callback(request);
  }
 });
}

function load_select_options(url, post, select)
{
 var success_callback = (arguments.length > 3 && typeof arguments[3] == "function") ? arguments[3] : null,
  error_callback = (arguments.length > 4 && typeof arguments[4] == "function") ? arguments[4] : null;
 set_select_options(select, ["Загрузка..."]);
 ajax_request({
  url: url,
  post: post,
  onsuccess: function(request) {
   try { var jso = eval(request.responseText); } catch (e) { jso = null; };
   if (typeof jso == "object")
    set_select_options(select, jso);
   else
    set_select_options(select, [request.responseText]);
   if (success_callback) success_callback(request);
  },
  onerror: function(request) {
   set_select_options(select, ["Error " + request.status + ": " + request.statusText]);
   if (error_callback) error_callback(request);
  }
 });
}

function add_node_function(element, node_name, event, action)
{
 for (var i = 0; i < element.childNodes.length; i++)
 {
  if (element.childNodes[i].nodeName == node_name)
   element.childNodes[i][event] = action;
  add_node_function(element.childNodes[i], node_name, event, action);
 }
}

function set_node_class(element, node_name, class_name)
{
 for (var i = 0; i < element.childNodes.length; i++)
 {
  if (element.childNodes[i].nodeName == node_name)
   element.childNodes[i].className = class_name;
  set_node_class(element.childNodes[i], node_name, class_name);
 }
}

function nl2br(s)
{
 return s.replace(/\n/g, "<br />\n");
}

function html_special_chars(s)
{
 return s.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
}