var d = document;

var month_names; //месяцы в дательном
var month_names_; //месяцы в обычном

var re_dn_search = /(^|\s)dn($|\s)/i;
var re_dh_search = /(^|\s)dh($|\s)/i;

//========
// {on:'dv', off:'dh'}
function OnOffClassName(el, logic, classes) {
 classes = isset(classes)?classes:{off:'dn'};
 if (!el) return;

 if (!logic)
 {
  el.addClassName(classes['off']);
  if (isset(classes['on']))
  {
   el.removeClassName(classes['on']);
  }
 }
 else
 {
  el.removeClassName(classes['off']);
  if (isset(classes['on']))
  {
   el.addClassName(classes['on']);
  }
 }
}
//========
function get_name_in_sq(s){
 var id_ = s.match(/\[(.*?)\]/i);
 var id = (!id_)?null:id_[1];
 return id;
}
//========
function str_delete_squares(s, into){
 if (into)
  s = s.replace(/\[.*?\]/ig, '');
 else
  s = s.replace(/[\[\]]/ig, '');
 return s;
}

function object_merge(o, add){
 var out = {};
 for (var i in o) if (o.hasOwnProperty(i))
 {
  out[i] = o[i];
 }
 for (var i in add) if (add.hasOwnProperty(i))
 {
  out[i] = add[i];
 }
 return out;
}
//========
function str_replace_square_for_regex(s){
 s = s.replace(/\[/ig, '\\['); s = s.replace(/\]/ig, '\\]');
 return s;
}
//========
function get_ids_in_sq(s){
 var id_ = s.match(/\[(\d+)\]\[(\d+)\]/i);
 return id_;
}
//========
function get_id_in_sq(s){
 var id_ = s.match(/\[(\d+)\]/i);
 var id = (!id_)?null:parseInt(id_[1]);
 return id;
}

function def(val, def_val) {
 return (typeof val == 'undefined')?def_val:val;
}

function input_get_val(el, t){
 var i = false;
 if (el)
 {
  i = el.value;

  if (t == 'int')
   i = (!i)?0:parseInt(i);
  else if (t == 'float')
   i = (!i)?0:parseFloat(i.replace(/,/ig, '.'));
  else if (t == 'string')
   i = (!i)?'':i;
 }
 return i;
}

function is_array(o){return (typeof o == 'object');}
function is_null(o){return !(o && o.length);}
function is_int(o){return (parseInt(o) == o);}
function is_zero_empty(o){return (o != '' && o != 0);}
function is_float(o){return (parseFloat(o) == o);}
function is_numeric(o){return (!isNaN(parseInt(o)) && !/[^\d\.,\-]/i.test(o))}
function is_empty(o){var f = 1; if (typeof o == 'object' && o && (isset(o.length) && o.length > 0) || !isset(o.length)) {for (i in o){f=0;}} return (f);}
function is_func(o){return (typeof o == 'function');}

function dom_size_css_get(size, delta){
 delta = isset(delta)?delta:0;

 var is_num = is_int(size);
 if (is_num)
 {
  size = size+delta;
 }
 else
 {
  var s_i = parseInt(size);
  var mm = (''+size).match(new RegExp(s_i+'(.*)', 'i'));
  var s_last = (mm && isset(mm[1]))?mm[1]:'';
  size = (s_i+(delta/100)).toFixed(0)+s_last;
 }
 var s = (is_num)?size+'px':size;
 return s;
}

function parse_str (str, obj) {
		for(var	arr, tmp = (''+str).replace(/&amp;/g, "&").split("&"), i = 0, j = tmp.length; i < j; i++) {
			arr = tmp[i].split("=");
			arr[1] = arr[1] ? decodeURIComponent(arr[1]) : "";
			if(/\[\]$/.test(arr[0])) {
				arr[0] = arr[0].substr(0, arr[0].length - 2);
				if(obj) {
					if(!obj[arr[0]])
						obj[arr[0]] = [];
					obj[arr[0]][obj[arr[0]].length] = arr[1];
				}
				else if(eval("typeof($".concat(arr[0], ")==='undefined'")))
					eval("$".concat(arr[0], "=[arr[1]]"));
				else
					eval("$".concat(arr[0], ".push(arr[1])"));
			}
			else if(obj)
				obj[arr[0]] = arr[1];
			else
				eval("$".concat(arr[0], "=arr[1]"));
		};
	}


function tagname_get(o) {
 if (o) return o.tagName.toLowerCase();
 return '';
}

//------------------
var select_none = {style:{arr:['-moz-user-select', '-o-user-select', '-khtml-user-select', 'user-select'], val:'none'}, attribute:{name:'unselectable', val:'on'}};
function select_none_getstring(){
 var out = [];
 for (var i in select_none) if (select_none.hasOwnProperty(i))
 {
  if (i == 'style')
  {
   if (select_none[i]['arr'].length)
   {
    out.push('style="');
    select_none[i]['arr'].each(function(value, index){ out.push(value+':'+select_none[i]['val']+';'); });
    out.push('" ');
   }
  }
  else
  {
   if (i == 'attribute' && isIE)
   {
    out.push(select_none[i]['name']+'="'+select_none[i]['val']+'"'+' ');
   }
  }
 }
 return out.join('');
}
function select_none_setreset(el, type, onlythis){
 onlythis = isset(onlythis)?onlythis:[];

 for (var i in select_none) if (select_none.hasOwnProperty(i) && ((onlythis.length && onlythis.indexOf(i) != -1) || !onlythis.length))
 {
  if (i == 'style')
  {
   if (select_none[i]['arr'].length)
   {
    select_none[i]['arr'].each(function(value, index){
     if (type == 'clear')
     {
      if (isIE)
       el.style['value'] = '';
      else
       el.style.removeProperty(value);
     }
     else if (type == 'set')
     {
      if (isIE)
       el.style['value'] = select_none[i]['val'];
      else
       el.style.setProperty(value, select_none[i]['val'], '');
     }
    });
   }
  }
  else
  {
   if (i == 'attribute' && isIE)
   {
    if (type == 'clear')
     el.removeAttribute(select_none[i]['name']);
    else if (type == 'set')
     el.setAttribute(select_none[i]['name'], select_none[i]['val']);
   }
  }
 }
}
function select_none_clear(el, onlythis){
 return select_none_setreset(el, 'clear', onlythis);
}
function select_none_set(el, onlythis){
 return select_none_setreset(el, 'set', onlythis);
}
//------------------

function scroll_save(el) {
 var i, eli, id, elc;
 var els = el.childNodes;
 for (i=0; i < els.length; i++)
 {
  eli = els[i];
  id = get_id(eli.id);
  elc = $('forum_content['+id+']');
  if (elc)
  {
   elc['scrollTop_saved'] = elc.scrollTop;
   elc['scrollLeft_saved'] = elc.scrollLeft;
  }
 }
}

function scroll_restore(el) {
 var i, eli, id, elc;
 var els = el.childNodes;
 for (i=0; i < els.length; i++)
 {
  eli = els[i];
  id = get_id(eli.id);
  elc = $('forum_content['+id+']');
  if (elc)
  {
   elc.scrollTop = elc['scrollTop_saved'];
   elc.scrollLeft = elc['scrollLeft_saved'];
  }
 }
}

function hide_windows() {

 var el = $('forum_topics');
 scroll_save(el);
// el.hide();
 el = $('gallery_windows');
 scroll_save(el);
// el.hide();

 if ($('select_forum'))
 {
  $('select_forum').hide();
 }
}
function show_windows() {

 var el = $('forum_topics');
// el.show();
 scroll_restore(el);
 el = $('gallery_windows');
// el.show();
 scroll_restore(el);

 if ($('select_forum'))
 {
  $('select_forum').show();
 }
}
function document_body_get(){
 return document.getElementsByTagName('body')[0];
}
function picture_loaded(event, callback, url) {
 var event_element;

 event = event||window.event;
 event_element = $(url);
 if (!event_element) return false;

 var width = (isset(event_element.width))?event_element.width:1;
 var height = (isset(event_element.height))?event_element.height:1;

 Event.stopObserving(event_element, 'load', function (e){picture_loaded(e, callback);});
 Event.stopObserving(event_element, 'error', function (e){picture_loaded(e, callback);});

 dom_element_del(event_element);

 callback(parseInt(width), parseInt(height));
}
function picture_load(url, callback_ok, callback_err) {
 var pic = create_element_if_not_exists(url, 'img', document_body_get());
 var pic_el = pic['el'];
 pic_el.className = 'loaded_picture';

 Event.observe(pic_el, 'load', function (e){picture_loaded(e, callback_ok, url);});
 Event.observe(pic_el, 'error', function (e){picture_loaded(e, callback_err, url);});

 pic_el.src = url;
}
function hide_close(){
 $('hidescreen').hide();

 var body = document_body_get();
 body.style.overflowY = '';
 body.style.height = body['height_saved'];
}
function hide_set(el_id, pic_el, set_offset_top, set_offset_left){
 pic_el = isset(pic_el)?pic_el:false;
 set_offset_top = isset(set_offset_top)?set_offset_top:false;
 set_offset_left = isset(set_offset_left)?set_offset_left:false;

 var el = $(el_id);
 var sizes = Element.getDimensions(pic_el||el);

 var left_offset = (((getWindowWidth()/2)+scrollLeft())-(sizes['width']/2));
 var top_offset = (((getWindowHeight()/2)+scrollTop())-(sizes['height']/2));

 if (set_offset_left !== false && left_offset+set_offset_left >= 0)
 {
  if (left_offset*3+set_offset_left < sizes['width'] || !sizes['width'])
  {
   left_offset = left_offset+set_offset_left;
  }
 }
 if (set_offset_top !== false && !sizes['height']) top_offset = top_offset+set_offset_top;

 left_offset = Math.round(left_offset);
 top_offset = Math.round(top_offset);

 if (!pic_el)
 {
  el.style.left = left_offset+'px';
  el.style.top = top_offset+'px';
 }
 else
 {
  pic_el.style.left = left_offset+'px';
  pic_el.style.top = top_offset+'px';
 }

 el.style.width = getWindowWidth()+'px';
 el.style.height = (getWindowHeight()-6)+'px';

 el.style.zIndex=2000;
 el.style.display='block';

 var el_hide = $('hidescreen');
 el_hide.style.display = 'block';
 el_hide.style.height = (getWindowHeight()-6)+'px';

 var body = document_body_get();
 body.style.overflowY = 'hidden';
 body['height_saved'] = body.style.height;
 body.style.height = (getWindowHeight()-6)+'px';
}

function val_set_type(i, t) {
 if (t == 'int')
  i = (!i)?0:parseInt(i);
 else if (t == 'float')
  i = (!i)?0:parseFloat(i.replace(/,/ig, '.'));
 else if (t == 'string')
  i = (!i)?'':i;

 return i;
}
function html_get_val(el, t){
 var i = false;
 if (el)
 {
  i = val_set_type(el.innerHTML, t);
 }
 return i;
}
function html_set(el, val){if (el) el.innerHTML = val;}
function html_replace(el, el_re, is_replace) {
 var ret;

 if (is_replace)
 {
  var parent_el = el.parentNode;
  ret = parent_el.replaceChild(el_re, el);
 }
 else
 {
  ret = el.appendChild(el_re);
 }
 return ret;
}

function isset(o){return (typeof o != 'undefined');}

function quot_string(s) {
 s = ''+s;
 s = s.replace("\\'", "\\\\&#39;", 'ig');
 s = s.replace('\"', '&quot;', 'ig');
 return s;
}
function unquot_string(s) {
 s = ''+s;
 s = s.replace('&quot;', '\"', 'ig');
 s = s.replace('&#39;', "\'", 'ig');
 return s;
}
//========
function str_post_decode(c, encodeuri){
 var s = '';
 encodeuri = isset(encodeuri)?encodeuri:1;

 for (var i in c)
 {
  s += '&'+i+'='+((!encodeuri)?c[i]:encodeURIComponent(c[i]));
 }

 return s;
}
//========
function get_mode_id_in_sq(s){
 var id_ = s.match(/\[(.*?)\]\[(.*?)\]\[(.*?)\]/i);
 return id_;
}
function element_find_root(sel, c){
 var el = {};

 var count = 100000;

 while (count || sel)
 {
  sel = sel.parentNode;
  if (!sel) break;

  find = 0;
  for (i in c)
  {
   if (c[i] == sel[i])
   {
    find = 1;
    //break;
   }
   else
   {
    find = 0;
   }
  }
  if (find)
  {
   el['className'] = sel.className;
   el['id'] = sel.id;
   break;
  }

  count--;
 }

 return el;
}

function str_del_leading_zero(s){
 s = ''+s;
 return (s.replace(/^0(\d)/i, '$1'));
}
function date_current_get(){
 var cd = new Date();
 return cd.getFullYear()+'-'+(cd.getMonth()+1)+'-'+cd.getDate();
}
function time_current_get(){
 var cd = new Date();
 return cd.getHours()+':'+(cd.getMinutes())+':'+cd.getSeconds();
}
function is_date_current(s){
 var cd = new Date();
 if (cd.getFullYear() != s.substr(0, 4)) return false;
 if (cd.getMonth()+1 != parseInt(s.substr(5, 2))) return false;
 if (cd.getDate() != parseInt(s.substr(8, 2))) return false;
 return true;
}
function is_year_current(s){
 var cd = new Date();
 if (cd.getFullYear() != s.substr(0, 4)) return false;
 return true;
}
function date_format_default(s){
 s = ''+s;
 s = s.replace(/%d/g, 'ДД');
 s = s.replace(/%m/g, 'ММ');
 s = s.replace(/%Y/g, 'ГГГГ');
 return s;
}
function date_format(s, is_human, dont_print_day, print_year_always){
 is_human = isset(is_human)?is_human:0;
 dont_print_day = isset(dont_print_day)?dont_print_day:0;
 print_year_always = isset(print_year_always)?print_year_always:0;

 var date_out;
 var date_out_d;

 if (!s) return '';
 var c = s.match(/(\d+)-(\d+)-(\d+)/i);
 if (!c)
  return s;
 else
 {
  if (c[1] == 0 || c[2] == 0 || c[3] == 0) return '';
  if (parseInt(str_del_leading_zero(c[2])) > 12) return '';
  if (parseInt(str_del_leading_zero(c[3])) > 31) return '';
  var date_out_d = (!dont_print_day)?str_del_leading_zero(c[3])+'&nbsp;'+month_names[str_del_leading_zero(c[2])].toLowerCase():month_names_[str_del_leading_zero(c[2])].toLowerCase()
  var date_wo_year = (!month_names)?'':date_out_d;
  var human_add = ' '+c[1]+' года';

  if (!is_year_current(s) || !month_names || print_year_always)
  {
   date_out_d = (!dont_print_day)?c[3]+'.'+c[2]+'.'+c[1]:c[2]+'.'+c[1];
   date_out = (!is_human && !print_year_always)?date_out_d:date_wo_year+human_add;
  }
  else
  {
   date_out = date_wo_year;
  }

  if (!date_wo_year)
   return date_out;
  else
   return '<span title="'+date_wo_year+human_add+'">'+date_out+'</span>';

 }
}

var ua=navigator.userAgent.toLowerCase(); var isOpera=(ua.indexOf('opera')>-1); var isSafari=(ua.indexOf('safari')>-1); var isIE=(window.ActiveXObject); var isIEless7=(ua.indexOf('msie 6')>-1); var isChrome=(ua.indexOf('chrome')>-1); 
function scrollTop () {if (window.innerHeight) return window.pageYOffset; if (document.documentElement && document.documentElement.scrollTop) return document.documentElement.scrollTop; if (document.body) return document.body.scrollTop;}
function scrollLeft () {if (window.innerWidth) return window.pageXOffset; if (document.documentElement && document.documentElement.scrollLeft)return document.documentElement.scrollLeft;if (document.body) return document.body.scrollLeft;}
function getRealLeftPos(el) {iPos = 0; while (el!=null) {iPos += el.offsetLeft;el = el.offsetParent;}return iPos;}
function getRealTopPos(el) {iPos = 0; while (el!=null) {iPos += el.offsetTop;el = el.offsetParent;}return iPos;}
function getDocumentHeight(){var scrollHeight=-1,windowHeight=-1,bodyHeight=-1;var marginTop=0;var marginBottom=0;var mode=document.compatMode;if((mode||isIE)&&!isOpera){switch(mode){case'CSS1Compat':scrollHeight=((window.innerHeight&&window.scrollMaxY)?window.innerHeight+window.scrollMaxY:-1);windowHeight=[document.documentElement.clientHeight,self.innerHeight||-1].sort(function(a,b){return(a-b);})[1];bodyHeight=document.body.offsetHeight+marginTop+marginBottom;break;default:scrollHeight=document.body.scrollHeight;bodyHeight=document.body.clientHeight;}}else{scrollHeight=document.documentElement.scrollHeight;windowHeight=self.innerHeight;bodyHeight=document.documentElement.clientHeight;}var h=[scrollHeight,windowHeight,bodyHeight].sort(function(a,b){return(a-b);});return h[2];}
function getDocumentWidth(){var docWidth=-1,bodyWidth=-1,winWidth=-1;var marginRight=0;var marginLeft=0;var mode=document.compatMode;if(mode||isIE){switch(mode){case'CSS1Compat':docWidth=document.documentElement.clientWidth;bodyWidth=document.body.offsetWidth+marginLeft+marginRight;winWidth=self.innerWidth||-1;break;default:bodyWidth=document.body.clientWidth;winWidth=document.body.scrollWidth;break;}}else{docWidth=document.documentElement.clientWidth;bodyWidth=document.body.offsetWidth+marginLeft+marginRight;winWidth=self.innerWidth;}var w=[docWidth,bodyWidth,winWidth].sort(function(a,b){return(a-b);});return w[2];}
function getWindowHeight(){var windowHeight=-1;var mode=document.compatMode;if((mode||isIE)&&!isOpera){switch(mode){case'CSS1Compat':windowHeight=[document.documentElement.clientHeight,self.innerHeight||-1].sort(function(a,b){return(a-b);})[1];break;default:windowHeight=document.body.clientHeight;}}else{windowHeight=self.innerHeight;}return windowHeight;}
function getWindowWidth(){var windowWidth=-1;var mode=document.compatMode;if((mode||isIE)&&!isOpera){switch(mode){case'CSS1Compat':windowWidth=[document.documentElement.clientWidth,self.innerWidth||-1].sort(function(a,b){return(a-b);})[1];break;default:windowWidth=document.body.clientWidth;}}else{windowWidth=self.innerWidth;}return windowWidth;}

function dom_element_create(tagname, id, classname, sizes){
 sizes = isset(sizes)?sizes:0;

 var t;
 t = d.createElement(tagname);
 if (isset(classname)) t.className = classname;
 t.id = id;
 if (sizes)
 {
  t.style.width = dom_size_css_get(sizes['width']);
  t.style.height = dom_size_css_get(sizes['height']);
 }
 return t;
}

function array2element(s, tagname, tagid, tagclass) {
 var el = dom_element_create(tagname, tagid, tagclass);
 el.innerHTML = s.join('');
 return el;
}
function array2html(s) {
 var div_fr = document.createDocumentFragment();
 div_fr.innerHTML = s.join('');
 return div_fr.innerHTML;
}
function array2dom(el, s) {
 var div_fr = document.createDocumentFragment();
 div_fr.innerHTML = s.join('');
 el.innerHTML = div_fr.innerHTML;
}

//========
function str_get_id(suff, mode, id, index_num){
 return suff+'['+mode+']['+id+']['+index_num+']';
}
function create_element_if_not_exists(id, tagname, parent){
 var e = null;
 var was = 1;
 if (!(e = get_el(id)))
 {
  e = d.createElement(tagname); e.id = id; parent.appendChild(e);
  was = 0;
 }
 return {"el":e, "was":was};
}

function getCrdsElementForVisiblePlaceOnClient(el, size_x, size_y, ofs_x, ofs_y){
 x = getRealLeftPos(el); y = getRealTopPos(el); if (!x) x=650; if (!y) y=250; x += ofs_x; y += ofs_y;
 var xo = x, yo = y;

 if (y<10) y=10; if (x<10) x=10;
 if (y < scrollTop()) y = scrollTop(); if (x < scrollLeft()) x = scrollLeft();
 if (y+size_y > getWindowHeight()+scrollTop()) y = getWindowHeight()+scrollTop()-size_y-5;
 if (x+size_x > getDocumentWidth()+scrollLeft()) x = getDocumentWidth()+scrollLeft()-size_x-10;

 return ({"x":x, "y":y, "xo":xo, "yo":yo});
}
function get_id(s){
 var id = -1;
 var id_ = s.match(/^(.*?)\[(\d+)\]$/i);
 if (id_ && id_.length > 1) id = id_[2];
 return id;
}
function get_id_(s){
 var id_ = s.match(/^(.*?)\[(\d+)\]$/i);
 return id_;
}

String.prototype.parseJSON = function () {try { return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(this.replace(/"(\\.|[^"\\])*?"/g, ''))) && eval('(' + this + ')');} catch (e) { return false;}};
function Array_push() {var A_p = 0; for (A_p = 0; A_p < arguments.length; A_p++) {this[this.length] = arguments[A_p]}; return this.length} if (typeof Array.prototype.push == "undefined") {Array.prototype.push = Array_push}
function Array_shift() {var A_s = 0; var response = this[0]; for (A_s = 0; A_s < this.length-1; A_s++) {this[A_s] = this[A_s + 1]}; this.length--; return response;} if (typeof Array.prototype.shift == "undefined") { Array.prototype.shift = Array_shift}
if(!Number.prototype.toFixed){Number.prototype.toFixed=function(e){ var y=Math.round(this*Math.pow(10,e))/Math.pow(10,e); var i=e-y.toString().length+y.toString().indexOf('.')+1; if(e>0){if(y.toString().indexOf('.')<0)return y+'.'+Math.pow(10,e).toString().substring(1); else if(i>0)return y+Math.pow(10,i).toString().substring(1); else return y;} else return y;}};

function dom_delete_all_childs(n){while (n.hasChildNodes()) n.removeChild(n.lastChild);}
function dom_element_del(id){
 var element = (typeof id == 'object')?id:$(id);
 if (element) element.parentNode.removeChild(element);
}
function get_el(id){return document.getElementById(id);}
function get_el_cat(arr, id){for (var i=0, m = arr.length; i < m; i++) if (arr[i]["id"] == id) return i;return -1;}
function get_el_by_field(arr, f, v) {
 for (var i=0, m = arr.length; i < m; i++) if (typeof arr[i] != 'undefined' && arr[i][f] == v) return i;return -1;
}

function get_el_by_fields(arr, fv) {
 var j, k, l;
 for (var i=0, m = arr.length; i < m; i++)
 {
  if (typeof arr[i] != 'undefined')
  {
   k=0, l=0;
   for (j in fv) if (fv.hasOwnProperty(j))
   {
    l++;
    if (isset(arr[i][j]))
    {
     if (arr[i][j] == fv[j]) k++;
    }
   }
   if (l > 0 && k == l) return i;
  }
 }
 return -1;
}

function get_els_by_field(arr, f, v) {
 var els = [];
 for (var i=0, m = arr.length; i < m; i++)
 {
  if (arr[i][f] == v)
  {
   els.push(arr[i]);
   els[els.length-1]['index'] = i;
  }
 }
 return els;
}

function nextid(arr) {if(!arr || !arr.length) return 1; var i, j=-1; for (i=0;i<arr.length;i++) if (parseInt(arr[i]["id"]) > j) j=parseInt(arr[i]["id"]); return parseInt(j)+1;}

function createCookie(name,value,days){if (days) {var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString();} else var expires = ""; document.cookie = name+"="+encodeURIComponent(value)+expires+"; path=/";}
function readCookie(name) {var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) {var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length,c.length));} return null;}
function eraseCookie(name){createCookie(name,"",-1);}
//========
function createCookie_json(name, time, o){
 createCookie(name, o.toJSON(), time);
}
//========
function readCookie_json(name){
 var c = readCookie(name);
 if (!c) return false;
 return c.evalJSON();
}

function load_cat(q){
 c = [];
 var dat_c = "", s;
 if (dc = get_el("div_cat"+q))
 {
  if (cn = dc.childNodes) if (cn.length > 0) for (i=0; i < cn.length; i++) dat_c += cn.item(i).nodeValue;
  dc.innerHTML = "";
  s = new String(dat_c);
  c = s.parseJSON();
 }
 return c;
}

function alertContents(http_request, obj_ref) {
 if (http_request.readyState == 4) {
  if (http_request.status == 200)
  {
   var w = new String(http_request.responseText); // mprint(http_request.responseText);
   w = w.replace(/^<pre>[\s\w\W]+<\/pre>/gi, '');
   w = w.replace(/^[\s\w\W]*?({"[\w\W]+")/gi, '$1');
   var s = w.evalJSON();

   if (typeof (s["status"]) != "undefined")
   {
    if (s["status"] == "ok")
    {
     switch (s["action"])
     {
      case "loadforum":
      {
       LoadForum_real(s["data"]);
       break;
      }
      case "loadforumtopic":
      {
       OpenForumTopic_real(s["data"], 0);
       break;
      }
      case 'loadpicgallery':
      {
       obj_ref.load_ok.call(obj_ref, s);
       break;
      }
      case 'pic_update':
      {
       obj_ref.pic_update_end.call(obj_ref, s);
       break;
      }
      case "addmsg":
      {
       AddMsgSend_real(s["data"]);
       break;
      }
      case "thread_hide":
      {
       ForumTopicHide_real(s["data"]);
       break;
      }
      case 'forum_hide':
      {
       ForumHide_real(s["data"]);
       break;
      }
      case "thread_star":
      {
       ForumTopicStar_real(s["data"]);
       break;
      }
      default:
      {
       setTimeout(AjaxLoadErr, 100, w);
      }
     }
    }
    else if (s["status"] == "err")
    {
     switch (s["action"])
     {
      case "addmsg":
      {
       AddMsgSend_err(s["data"]);
       break;
      }
      case "thread_hide":
      {
       ForumTopicHide_err(s["data"]);
       break;
      }
      case 'forum_hide':
      {
       ForumHide_err(s["data"]);
       break;
      }
      case "thread_star":
      {
       ForumTopicStar_err(s["data"]);
       break;
      }
      case 'pic_update':
      {
       obj_ref.pic_update_end.call(obj_ref, s);
       break;
      }
      default:
      {
       setTimeout(AjaxLoadErr, 100, w);
      }
     }
    }
    else if (s["status"] == "alr")
    {
     switch (s["action"])
     {
      default:
      {
       setTimeout(AjaxLoadErr, 100, w);
      }
     }
    }
    else setTimeout(AjaxLoadErr, 100, w);
   }
   else setTimeout(AjaxLoadErr, 100, w);
   delete w; delete s;
  }
  else alert('There was a problem with the request.');
 }
}

function makeRequest(metod, url, data, obj) {
var http_request = false;

if (window.XMLHttpRequest) {
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
        http_request.overrideMimeType('text/plain');
    }
} else if (window.ActiveXObject) {
    try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
    }
}

if (!http_request) {
    alert('Giving up :( Cannot create an XMLHTTP instance');
}

var obj_ref = obj;
http_request.onreadystatechange = function() { alertContents(http_request, obj_ref); };

http_request.open(metod, url, true);
http_request.setRequestHeader('Accept', 'text/plain;q=1.0');
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded, charset=utf-8');
http_request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
http_request.send(data);
}


//========
function Dump(d, l, t) {
 if (typeof(t) == "undefined") t = "\n";
 var space = (t == "\n")?' ':'&nbsp;';

    if (l == null) l = 1;
    var s = '';

    if (typeof(d) == "object") {
        s += typeof(d) + space+"{"+t;
        for (var k in d) {
            if (typeof(d[k]) != "function"){
             for (var i=0; i<l; i++) s += space+space;
             s += k+":"+space + Dump(d[k],l+1, t);
            }
        }
        for (var i=0; i<l-1; i++) s += space+space;
        s += "}"+t;
    } else if (typeof(d) != "function"){
        s += "" + d + t;
    }
    return s;
}
function mprint(o) {alert(Dump(o, 1));}
function mprinti(o) {$("debug").innerHTML = Dump(o, 1);}
function mprintia(o) {$("debug").innerHTML += Dump(o, 1);}
function mprintiap(o, out_el) {out_el = isset(out_el)?out_el:$("debug"); out_el.innerHTML += Dump(o, 1, '<br />')+'<p>';}
function printi(o) {$("debug").innerHTML = o;}
function printia(o) {$("debug").innerHTML += o;}
function mprintp(o, own, out_el) {
 own = isset(own)?own:0;
 out_el = isset(out_el)?out_el:$("debug"); 

 var t = [];
 for (var i in o) if (!own || (own && o.hasOwnProperty(i)))
 {
  t.push(i);
 }
 out_el.innerHTML = t.join('<br />');
}


