/* FORUM.JS */
  function quote(a)
  {
  	var capt="";
  	var mess="";
  	var name="";
  	var d;
  	
  	if (d=document.getElementById('time'+a))
  	{
  		capt=d.innerHTML;
  	}
  	
  	if (d=document.getElementById('name'+a))
  	{
  		name=d.innerHTML;
  	}
  	
  	if (d=document.getElementById('mess'+a))
  	{
  		mess=d.innerHTML;
  	}
  	
  	if (d=document.getElementById('descr'))
  	{
  		d.value+='[quote='+name+' '+capt+']'+strip_tags(mess)+'[/quote]';
  	}
  }
  
  function strip_tags(str, allowed_tags) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Luke Godfrey
    // +      input by: Pul
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +      input by: Alex
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Marc Palau
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>');
    // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
    // *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');
    // *     returns 2: '<p>Kevin van Zonneveld</p>'
    // *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");
    // *     returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'
 
    var key = '', tag = '', allowed = false;
    var matches = allowed_array = [];
 
    var replacer = function(search, replace, str) {
        return str.split(search).join(replace);
    };
 
    // Build allowes tags associative array
    if (allowed_tags) {
        allowed_array = allowed_tags.match(/([a-zA-Z]+)/gi);
    }
  
    str += '';
 
    // Match tags
    matches = str.match(/(<\/?[^>]+>)/gi);
 
    // Go through all HTML tags
    for (key in matches) {
        if (isNaN(key)) {
            // IE7 Hack
            continue;
        }
 
        // Save HTML tag
        html = matches[key].toString();
 
        // Is tag not in allowed list? Remove from str!
        allowed = false;
 
        // Go through all allowed tags
        for (k in allowed_array) {
            // Init
            allowed_tag = allowed_array[k];
            i = -1;
 
            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}
            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');}
            if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag)   ;}
 
            // Determine
            if (i == 0) {
                allowed = true;
                break;
            }
        }
 
        if (!allowed) {
            str = replacer(html, "", str); // Custom replace. No regexing
        }
    }
 
    return str;
}

/*MENU.JS*/
var lm_t=0;

 function show(a)
   {
    clearTimeout(lm_t);
    var d=document.getElementById("leftmenu").childNodes[0];
    var i;
    for (i=0;i<d.childNodes.length;i++)
    {
     if (d.childNodes[i].className=='leftsubmenu') 
      {
       if (d.childNodes[i].id=='leftsubmenu_'+a) 
        {
         d.childNodes[i].style.visibility="visible";
         var p=(document.getElementById(d.childNodes[i].id+'p'));
          if (p)
           {
         	p.className='selected';
         	p.style.zIndex=10;
           }
        }
       else 
        {
         d.childNodes[i].style.visibility="hidden";
        }
      }
    }
   }

function stopTimer()
 {
 	clearTimeout(lm_t);
 }

 function hideAll()
  {
  	lm_t=setTimeout("show(0)",500);
  }
  
  var top_t=0;

 function top_show(a)
   {
    clearTimeout(top_t);
    var d=document.getElementById("topmenu").childNodes[0];
    var i;
    for (i=0;i<d.childNodes.length;i++)
    {
     if (d.childNodes[i].className=='main') 
      {
       if (d.childNodes[i].childNodes[0].id=='top_'+a+'_sub') 
        {
         d.childNodes[i].childNodes[0].style.visibility="visible";
         d.childNodes[i].childNodes[1].style.backgroundColor="rgb(196, 194, 194)";
        }
       else 
        {
         d.childNodes[i].childNodes[0].style.visibility="hidden";
          d.childNodes[i].childNodes[1].style.backgroundColor="";
        }
      }
    }
   }

function top_stopTimer()
 {
 	clearTimeout(top_t);
 }

 function top_hideAll()
  {
  	top_t=setTimeout("top_show(0)",500);
  }

/*REFERRER.JS*/
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+"="+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 c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}


var referrer_cookie;
referrer_cookie=readCookie('referrer_cookie');
if (!referrer_cookie) 
{
 referrer_cookie=document.referrer;
 createCookie('referrer_cookie',referrer_cookie,1);
}

/*ROLLBANNER.JS*/
function set_top_banner(img)
{
	if (!img) return;
	var d;
	if (d=document.getElementById("top_banner"))
	{
		d.src='/images/'+img;
	}
}

function serialize( mixed_value ) {
 
    var _getType = function( inp ) {
        var type = typeof inp, match;
        var key;
        if (type == 'object' && !inp) {
            return 'null';
        }
        if (type == "object") {
            if (!inp.constructor) {
                return 'object';
            }
            var cons = inp.constructor.toString();
            if (match = cons.match(/(\w+)\(/)) {
                cons = match[1].toLowerCase();
            }
            var types = ["boolean", "number", "string", "array"];
            for (key in types) {
                if (cons == types[key]) {
                    type = types[key];
                    break;
                }
            }
        }
        return type;
    };
    var type = _getType(mixed_value);
    var val, ktype = '';
    
    switch (type) {
        case "function": 
            val = ""; 
            break;
        case "undefined":
            val = "N";
            break;
        case "boolean":
            val = "b:" + (mixed_value ? "1" : "0");
            break;
        case "number":
            val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
            break;
        case "string":
            val = "s:" + mixed_value.length + ":\"" + mixed_value + "\"";
            break;
        case "array":
        case "object":
            val = "a";
            /*
            if (type == "object") {
                var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
                if (objname == undefined) {
                    return;
                }
                objname[1] = serialize(objname[1]);
                val = "O" + objname[1].substring(1, objname[1].length - 1);
            }
            */
            var count = 0;
            var vals = "";
            var okey;
            var key;
            for (key in mixed_value) {
                ktype = _getType(mixed_value[key]);
                if (ktype == "function") { 
                    continue; 
                }
                
                okey = (key.match(/^[0-9]+$/) ? parseInt(key) : key);
                vals += serialize(okey) +
                        serialize(mixed_value[key]);
                count++;
            }
            val += ":" + count + ":{" + vals + "}";
            break;
    }
    if (type != "object" && type != "array") val += ";";
    return val;
}

function Set_Cookie( name, value, expires, path, domain, secure )
{
var today = new Date();
today.setTime( today.getTime() );
if ( expires )
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}


function renew_news_list()
{
	var form=document.getElementById("news_select");
	var arr=Array();
	for (var i=0;i<form.elements.length;i++)
	{
		if(form.elements[i].checked) arr[arr.length+1]=form.elements[i].value;
	}
	Set_Cookie('selected_rss',serialize(arr),7);
}

function show_description(div)
{
	div.childNodes[2].style.display='block';
	var pos=getPosition(div);
	div.childNodes[2].style.top=parseInt(pos.y-div.childNodes[2].offsetHeight) + "px";
	div.childNodes[2].style.left=parseInt(pos.x+50)+"px";
}

function hide_description(div)
{
	div.childNodes[2].style.display='none';
}

function hide_description_id(id)
{
	document.getElementById(id).childNodes[2].style.display='none';
}


function getPosition(e){
	var left = 0;
	var top  = 0;

	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	} 

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

/*SCROLL.JS*/

function init(id) {
  var obj = document.getElementById(id);
  if (obj) {
    obj.state = 0;//инициализируем состояние
    obj.timer = null;
    obj.maxVert = obj.scrollHeight - obj.offsetHeight;//максимальная высота прокрутки
  }
}

//Это будет у нас функция инициализация объекта, которым у нас будет #scrollme. Устанавливаем значение поля state = 0, которое будет отвечать за текущее состояние блока: 0 - ничего не происходит, 1 - прокрутка вниз, -1 - прокрутка вверх. В поле timer будет хранится таймер вызова прокрутки. Ну и значение максмимального расстояния вертикальной прокрутки - maxVert.

function scroll_down(id,timer) {
  var obj = document.getElementById(id);//получаем объект по ID
  if (!obj.maxVert) init(id);//если объект еще не иниициализировался - инициализируем
  if (timer == undefined) obj.state = 1;//если не передан второй параметр timer, значит вызов был от кнопки прокрутки, ставим состояние прокрутки вниз
  if ((obj.maxVert > obj.scrollTop) && (obj.state == 1)) {//если не достигли предела и состояние прокрутки все еще "вниз"(1)
    obj.scrollTop = obj.scrollTop + 10;//добавляем смещение прокрутки на 10 пикселей
    obj.timer = setTimeout('scroll_down(\''+id+'\',true)',100);//устанавливаем таймер вызова этой же функции для дальнейшей прокрутки
  }
}

//Делаем аналогичную функцию для прокрутки вверх.
function scroll_up(id,timer) {
  var obj = document.getElementById(id);//получаем объект по ID
  if (!obj.maxVert) init(id);//если объект еще не иниициализировался - инициализируем
  if (timer == undefined) obj.state = -1;//если не передан второй параметр timer, значит вызов был от кнопки прокрутки,ставим состояние прокрутки вверх
  if ((obj.scrollTop > 0) && (obj.state == -1)) {//если не достигли начала и состояние прокрутки все еще "вверх"(-1)
    obj.scrollTop = obj.scrollTop > 10 ? obj.scrollTop - 10 : 0;//добавляем смещение прокрутки на 10 пикселей
    obj.timer = setTimeout('scroll_up(\''+id+'\',true)',100);//устанавливаем таймер вызова этой же функции для дальнейшей прокрутки
  }
}

//И еще одна небольшая функция для остановки прокрутки, которая сбрасывает состояния в "ничего не происходит"
function scroll_stop(id) {
  var obj = document.getElementById(id);//получаем объект по ID
  if (obj) {
    if (obj.timer) clearTimeout(obj.timer);
    obj.state = 0;
  }

} 

function open_hide_div(divname,href)
{
	if (d=document.getElementById(divname))
	{
		if (d.style.display!='none') 
		 {
		  d.style.display="none";
		  if (href.childNodes[0].src) 
		   {
		    href.childNodes[0].src="/images/plus.jpg";
		   }
		 }
		else 
		 {
		  d.style.display="block";
 		  if (href.childNodes[0].src) 
		   {
		    href.childNodes[0].src="/images/minus.jpg";
		   }

		 }
	}
}
