// --- common ---

var IE = 1;
var NS = 2;
var IE6 = (navigator.appName == "Microsoft Internet Explorer" && parseFloat(navigator.appVersion) <= 6);

var refresh_delay = 5 * 60 * 1000; // 5 mins
setTimeout('GetNewRecords()', refresh_delay);

window.onscroll = ScrollPage;
document.onscroll = ScrollPage;

function ScrollPage()
{
    if (IE6) SetTop('blackscreen', 0, 0);
    //if (IE6) SetTop('centerscreen', 0, 0);
    SetTop('tree_options_block', document.body.clientHeight - 151, 0);
}

function BrowserType()
{
	if (navigator.appName.toLowerCase().indexOf("microsoft") >= 0)
		return IE;
	else if (navigator.appName.toLowerCase().indexOf("netscape") >= 0)
		return NS;
}

function g()
{
    var elements = new Array();

    for (var i = 0; i < arguments.length; i++)
    {
        var element = arguments[i];
        if (typeof element == 'string')
            element = document.getElementById(element);

        if (arguments.length == 1)
        return element;

        elements.push(element);
    }

    return elements;
}

function saveMood(is_button, e)
{
    if (!e)
    	e = window.event;
    if (!e)
        e = global_event;
    if (!e)
        return;
    if (e.keyCode == 13 || is_button == true)
	{
	    var mood_text = g('mood_text');
	    g('mood_status').innerHTML = '...';
	    JsHttpRequest.query('/ajax.php?action=set_mood', {mood_text: mood_text.value}, function( res, err ) { if (res.success) g('mood_status').innerHTML = res.mood_text; }, true);
	    ShowHide(null, 'mood_text_div,mood_status');
	}
	if (e.keyCode == 27)
	{
	    g('mood_text').value = g('mood_status').innerHTML;
	    ShowHide(null, 'mood_text_div,mood_status');
	}
}

function GetNewRecords()
{
    var new_records = null;
    JsHttpRequest.query('/ajax.php?action=get_new_records', {}, function( res, err ) {
    	if (res.success != true)
    	    return;
       	if (res.new_records)
    	{
        	var list = res.new_records.split('|');
        	var count = list.length - 1;
        	var record = null;
        	var span = null;

        	for (var i = 0; i < count; i++)
        	{
        		record = list[i].split('=');
        		span = g('span_' + record[0]);
        		if (span != null && record[1] != '0')
        		    span.innerHTML = '+' + record[1] + ' ';
        	    else if (span != null)
        	        span.innerHTML = '';
        	}
        }
        setTimeout('GetNewRecords()', refresh_delay);
    }, true);
}

function SetTop(div_id, top, left)
{
    var d = g(div_id);
    if (!d)
        return false;
    d.style.top = (window.pageYOffset ? window.pageYOffset + top : document.body.scrollTop + top);
    if (left != null)
        d.style.left = (window.pageXOffset ? window.pageXOffset + left : document.body.scrollLeft + left);
    else
        d.style.left = (window.pageXOffset ? (window.pageXOffset + document.body.clientWidth - 280) : (document.body.scrollLeft + document.body.clientWidth - 280) );
    return true;
}

Array.prototype.deleteItem = function(index)
{
	if (index >= this.length)
	    return false;
    for (var i = index; i < this.length - 1; i++)
        this[i] = this[i+1];
    this.length = this.length - 1;
    return true;
}

function StringContain(str, strarray)
{
	for (var i = 0; i < strarray.length; i++)
	{
		var str2 = strarray[i].toLowerCase();
		if (str.toLowerCase().indexOf(str2) == -1)
			return false;
	}
	return true;
}

function Filter(wrapper, prefix, suffix, text, has_class)
{
    if (has_class == null) has_class = '';
    var wrap = g(wrapper);
    if (!wrap) return;
    all = wrap.getElementsByTagName('*');
    for (var i = 0; i < all.length; i++)
    {
    	var div = all[i];
    	if (div.className.indexOf(prefix + ' ') != -1)
    	{
            if (!div.id) continue;
            var name_tag = g(div.id + "_" + suffix);
            if (!name_tag || !name_tag.innerHTML) continue;
            var name = name_tag.innerHTML;

            if ((StringContain(name, text.split(' ')) == true || text == '') && (div.className.indexOf(has_class) != -1 || has_class == ''))
                div.style.display = "block";
            else
                div.style.display = "none";
    	}
    }
}

function DisableButtons()
{
    var el = null;
    all = document.getElementsByTagName('*');
	for (var i = 0; i < all.length; i++)
	{
		el = all[i];
		if (el.tagName != null && el.type != null)
    		if (el.tagName.toLowerCase() == "input"  && (el.type.toLowerCase() == "submit" || el.type.toLowerCase() == "button"))
	    	    el.disabled = true;
	}
}

function ff()
{
	if (navigator.appName.toLowerCase().indexOf("netscape") >= 0)
		return true;
	return false;
}

function getUrlValue(inputField, defaultValue)
{
    var params = document.location.href.split('#')[0].split('?');
    if (params.length > 2)
    {
        for (var i = 2; i < params.length; i ++)
        {
            params[1] += "?" + params[i];
        }
    }
    if (params.length > 1)
    {
        params = params[1].split('&');
        var field;
        for (var i = 0; i < params.length; i++)
        {
	        field = params[i].split('=');
	        if (field[0].toLowerCase() == inputField.toLowerCase())
		        return field[1];
        }
    }
    return defaultValue;
}

function addUrlValue(param, value)
{
    var mainparts = document.location.href.split('?');
    var exists = false;
    var params = Array();
    if (mainparts[1])
    	params = mainparts[1].split('&');
    var data = null;
    var url = '';
    for (var i = 0; i < params.length; i++)
    {
        data = params[i].split('=');
        if (data[0] == param)
        {
            data[1] = value;
            exists = true;
        }
        url += '&' + data[0] + '=' + data[1];
    }
    if (!exists)
    {
        url += '&' + param + '=' + value;
    }
    url = mainparts[0] + '?' + url.substring(1);
    return url;
}

function ShowSelects(show, elem)
{
	var select = null;
	if (!elem)
	    elem = document;
	var select_list = elem.getElementsByTagName('select');
	for (var i = 0; i < select_list.length; i++)
	{
		select = select_list[i];
		select.style.visibility = show ? 'visible' : 'hidden';
	}
}

function Done()
{
	var kcode = '';
	var str = '';
	for (var i = 0; i <= 4; i++)
	{
		var group = g('g' + i);
		if (group.style.display == 'block')
        {
        	var list = g('level' + i)
            if ( !isNaN(list.value) && list.value.length > 0 )
            {
                kcode = list.value;
                str += ', ' + list.options[list.selectedIndex].text.replace(/,/,"");
            }
        }
	}
	var res = Array();
	res[0] = kcode;
	res[1] = g('level9').value;
	res[2] = str.substring(2);
	return res;
}

function NotInTheList()
{
    for (var i = 4; i > 0; i--)
	{
		var select = g('level' + i);
		var select_prev = g('level' + (i - 1));
		if ((select.value == '' || select.value == '-') && (select_prev.value == '' || select_prev.value == '-'))
		    g('g' + i).style.display = 'none';
	}

    g('g8').style.display='none';
    g('g9').style.display='block';

    g('level9').focus();
}

function textareasubmit(ta, event, f)
{
	if (event.ctrlKey && event.keyCode == 13)
	{
		DisableButtons();
		f.submit();
		var el = document.getElementById(f.name + '_load');
		if (el) el.style.display='block';
	}
	else if (ta.className == 'auto_size')
	{
		var min = 75;
		var max = 300;
		var step = 13;
		var lines = ta.value.split('\n').length;
		var h = Math.max(lines * step, min);
		h = Math.min(max, h);
		ta.style.height = h;
		status = h;
	}
}

function showBigPhoto(url)
{
    window.open(url, null, 'status=0,height=820,width=820,menubar=0');
    return;
}

function jsCodeHtmlChars(s)
{
	s = s.toString();
	s = s.replace(/<br>/gi,"\n");
	s = s.replace(/<[^>]*>/g,'');
	s = s.replace(/&amp;/gi,"&");
	s = s.replace(/&lt;/gi,"<");
	s = s.replace(/&gt;/gi,">");
	s = s.replace(/&quot;/gi,'"');
	return (s);
}

// --- move ---

moveobject = null;
movefixlevel = null;
oldx = 0;
oldy = 0;
global_event = null;
global_x = 0;
global_y = 0;

document.onmousemove = function(event)
{
    global_event = event;
    m = mousePageXY();
    global_x = m.x;
    global_y = m.y;
    setHintXY(event);
    if (moveobject)
        doMove();
}

document.onmouseup = function()
{
    setMove(null, 0, 0);
}

function mousePageXY(e, topparam)
{
    var posx = 0, posy = 0;
    if (!e)
        e = window.event;
    if (!e)
    	e = global_event;
    if (!e)
    {
        //alert('Ошибка при определении координат мыши!');
        return {"x": 0, "y": 0};
    }

    if (e.pageX || e.pageY)     {
        posx = e.pageX;
        posy = e.pageY;
    }
    else if (e.clientX || e.clientY)     {
        posx = e.clientX + document.body.scrollLeft
            + document.documentElement.scrollLeft;
        posy = e.clientY + document.body.scrollTop
            + document.documentElement.scrollTop;
    }
    return {"x": posx, "y": posy};

}

function setMove(obj, x, y, fixlevel)
{
	//if ((!x || !y) && !window.event && !global_event)
	//    return;

	if (!x || !y)
	{
		m = mousePageXY()
		var add = (obj != null && obj.id == 'moveDiv') ? 5 : 0;
		if (!x) x = m.x + add;
		if (!y) y = m.y + add;
	}

	//if (event.button == 2)
	//{
    //}
    //else
    {
    	//if (!x) x = window.event.x + ((BrowserType() != IE) ? document.body.scrollLeft : 0);
    	//if (!y) y = window.event.y + ((BrowserType() != IE) ? document.body.scrollTop : 0);
    	oldx = x;
    	oldy = y;
    	movefixlevel = fixlevel;
		// ff hack
    	if (obj == null && moveobject != null && moveobject.id == 'moveDiv')
	    	setTimeout('moveobject = null', 100);
	  	else
    		moveobject = obj;
    }
}

function doMove()
{
	//HideMenu();
	if (moveobject == null)
	    return;
	if (mouseMode != 0 && moveobject.id != 'moveDiv')
	    return;

	var m = mousePageXY(null, true);

	moveobject.style.left = parseInt(moveobject.style.left) + m.x - oldx;
	if (moveobject.id == 'moveDiv')
    	moveobject.style.zIndex = 650;

	if (movefixlevel != true)
		moveobject.style.top = parseInt(moveobject.style.top) + m.y - oldy;

	oldx = m.x;
	oldy = m.y;

	RecombineTreeItems();
	RecombineTreeItems2();
}

// Работа с хинтом-подсказкой

var l = 0, t = 0;
var ns_tt = document.createElement("div");

function setHintXY(e)
{
    m = mousePageXY(e);
    l = m.x;
    t = m.y;
    ns_tt.style.left = l + "px";
    ns_tt.style.top = t + "px";
    return true;
}

function AddTT(tt_text)
{
    if (!tt_text || tt_text == '')
        return;
    document.body.appendChild(ns_tt);
    ns_tt.id = "ns_tt";
    ns_tt.innerHTML = tt_text;
}

function RemoveTT()
{
    var o = document.getElementById("ns_tt");
    if (o)
        document.body.removeChild(o);
}

function RemoveLink(who, family)
{
    ajax('/ajax.php?action=remove_link&who=' + who + '&family=' + family, function (res, err) { if (res.success) ShowHide(false, 'request' + who); }, null, null);
}

function KeyPress( symbol, field_id, symbol2 )
{
	if (!field_id)
		field_id = 'keyboard_text';
	var field = document.getElementById(field_id);
	if( !field )
		return;
	if (document.selection) {
		field.focus();
		sel = document.selection.createRange();
		if (symbol2)
		    sel.text = symbol + sel.text + symbol2;
	    else
    		sel.text = symbol;
	}
	else {
		if (field.selectionStart || field.selectionStart == '0') {
			var startPos = field.selectionStart;
			var endPos = field.selectionEnd;
			if (symbol2)
			{
			    field.value = field.value.substring(0, startPos) + symbol + field.value.substring(startPos, endPos) + symbol2 + field.value.substring(endPos, field.value.length);
       			field.focus();
	    		field.selectionStart = endPos + symbol.length + symbol2.length;
    			field.selectionEnd = endPos + symbol.length + symbol2.length;
	        }
			else
			{
			    field.value = field.value.substring(0, startPos) + symbol + field.value.substring(endPos, field.value.length);
       			field.focus();
	    		field.selectionStart = endPos + symbol.length;
    			field.selectionEnd = endPos + symbol.length;
	        }
		}
		else {
  			field.value += symbol + symbol2;
		}
	}
	return;
}

function MarkSpam(type, post_id, spammer_id)
{
	var b = confirm ("Вы уверены, что это сообщение - спам?");
    if (b) ajax('/ajax.php?action=mark_spam&type='+type+'&post_id='+post_id+'&spammer_id='+spammer_id, null, 'spam_link_'+post_id, null);
}

function doSVR(id)
{
	type = g('svr_type');
	if(type) {
		var post = {};
		// Что спрашиваем
		switch (type.value) {
   		case "sms":
   			// Это вопрос про sms оповещения
			var phone = g('svr_sms_phone');
			if( phone && phone.value != '') {
				post = {'phone': phone.value};
			}
   			break;
   		case "poll":
   			// Это опрос
   			var answers = document.svr_form.poll_option;
   			if( answers ) {
   				post['other'] = '';
   				post['answer'] = 0;
	   			for ( var i = 0; i < answers.length; i++ )
					if ( answers[i].checked === true )
						post = {'answer': answers[i].value};
				if( post['answer'] == 0 ) {
					var other = g('svr_poll_other');
					if(other) post['other'] = other.value;
				}
				post['poll_id'] = g('svr_poll_id').value;
				if( post['answer'] == 0 && post['other'].length == 0 )
					post = {};
			}
   			break;
   		default:
   			// Это информация о  пользователе ( id - номер пользователя )
   			if( id > 0 ) {
				var photo = g('photo_' + id);
				if( photo && photo.value != '') post = {'photo': photo};

				var date = g(id+'_hidden');
				if( date && date.value != '0000-00-00' ) post = {'birthday': date.value}

				var place = g('place_' + id);
				if( place && place.value != '' ) post = {'place': place.value};

	   			var handed = document.svr_form.handed;
	   			if( handed ) {		   			for ( var i = 0; i < handed.length; i++ ) {
						if ( handed[i].checked === true ) {
							post = {'handed': handed[i].value};
						}
					}
				}
			}
   			break;
		}

		// Если есть, что отправлять, то делаем запрос
		if( post && hashLength(post) > 0 ) {
			post['type'] = type.value;
			JsHttpRequest.query('/ajax.php?action=svr&id=' + id , post,
		    	function( res, err ) {
		    		var text = g('svr_text');
		    		if( res.success ) {
		    			if( res.redirect ) {
		    				document.location.href = res.redirect;
		    			}
		    			else {
							if (res.html_success)
	    						text.innerHTML = res.html_success;
	    	                else
	    	                    text.innerHTML = 'Спасибо, информация сохранена.';
	    				}
		    		}
		    		else {
						text.innerHTML = 'Информация не сохранена.';
		    		}
		    	}
		    , true
		    )
		}
		else {
			alert('Проверьте правильность указанной информации');
		}

	}
}

function hashLength(hash)
{
    var counter = 0;
    for( var k in hash )
        counter++;
    return counter;
}

function generateSVR()
{
	var div = g('svr_wrapper');
	var old_html = div.innerHTML;
    div.innerHTML = '<div style="margin: 35px 350px; height: 60px;"><img src="/images/loading_c.gif" alt="Загрузка"></div>';
	JsHttpRequest.query('/ajax.php?action=generate_svr' , {},
		function( res, err ) {
	    	if( res.success && res.text ) {
    			div.innerHTML = res.text;
    			RegisterAllMenus();
	    	}
	    	else {
	    		div.innerHTML = old_html;
	    	}
	    }
	, true
	);
}

function generateProfileSVR(user_id)
{
	if( !user_id )
		return false;
	var div = g('svr_wrapper');
	var old_html = div.innerHTML;
    div.innerHTML = '<div style="margin: 35px 350px; height: 60px;"><img src="/images/loading_c.gif" alt="Загрузка"></div>';
	JsHttpRequest.query('/ajax.php?action=generate_profile_svr&user_id=' + user_id , {},
		function( res, err ) {
	    	if( res.success && res.text ) {
    			div.innerHTML = res.text;
    			RegisterAllMenus();
	    	}
	    	else {
	    		div.innerHTML = old_html;
	    	}
	    }
	, true
	);
}

function set_field_style(tag, in_focus)
{
    var default_text = tag.getAttribute('placeholder');
    if (in_focus) {
        tag.style.color = 'black';
        if (tag.value == default_text) {
            tag.value = '';
        }
       } else {
           if (tag.value == '') {
               tag.value = default_text;
               tag.style.color = 'silver';
		}
	}
}

function GotoUrl(dest_site_url, dest_uri, src_site_id, sid)
{
    function AddField(x_form, f_name, f_value)
    {
        var input = document.createElement('input');
        input.type = 'hidden';
        input.name = f_name;
        input.value = f_value;
        x_form.appendChild(input);
    }
    if (!dest_uri) dest_uri = '';
    var d_form = document.createElement('form');
    d_form.method = 'post';
    d_form.action = dest_site_url + 'gotos.php';
    AddField(d_form, 'sid', sid);
    AddField(d_form, 'dest_uri', encodeURI(dest_uri));
    AddField(d_form, 'src_site_id', src_site_id);
    AddField(d_form, 'cookies', document.cookie);
    document.body.appendChild(d_form);
    d_form.submit();
}

function ShowHide(show,f_list)
{
	var style = null;
	if (show != null)
	    style = show ? "block" : "none";
	var list = Array();
	list = f_list.split(',');
	for (var i = 0; i < list.length; i++)
	{
		var elem = g(list[i]);
		if (show == null)
		    style = (elem.style.display == 'none') ? 'block' : 'none';
		if (elem)
		    elem.style.display = style;
	}
}

function ajax(query, func, message_tag, default_text)
{
    function activate_message_tag(message_tag, text, can_alert)
    {
        try {
           	tag = g(message_tag);
        	if (tag.style.display == 'none');
        	    tag.style.display = 'block';
        	if (tag.parentNode.style.display == 'none');
        	    tag.parentNode.style.display = 'block';
        	tag.innerHTML = text;
        } catch (e) {
            if (can_alert == true)
                alert(text);
        }
    }

	if (default_text)
	    activate_message_tag(message_tag, default_text);

	JsHttpRequest.query(query, {}, function( res, err ) { if (func) func(res, err); if (res.result_html) activate_message_tag(message_tag, res.result_html, true); if (res.result_href) window.location = res.result_href; }, true);
}

function EventsAction(type)
{
	div = g('events_feed');
	var old_html = div.innerHTML;
    div.innerHTML = '<div style="margin: 0 0 0 200px;"><img src="/images/loading_c.gif" alt="Загрузка"></div>';
	if( div ) {
		JsHttpRequest.query('/ajax.php?action=events_feed&type=' + type, {},
		    function( res, err )
		    {
		    	if (res.success) {
					div.innerHTML = res.html;
		    	}
				else {
	    			div.innerHTML = old_html;
				}
		    }
		, true);
	}
}

function doDecimalField(id)
{
	pattern = '0123456789';
	field = g(id);
	if( field && field.value != '' ) {
		value = field.value;
		res = '';
  		for( i=0; i < value.length; i++ ) {
  			if( pattern.indexOf(value.charAt(i)) != -1 ) {
  				res = res + value.charAt(i);
  			}
  		}
  		field.value = res;
	}
}

function bookmark(title,url)
{
  if (navigator.appName === "Microsoft Internet Explorer")
    window.external.AddFavorite(url, title);
  else if (window.opera && window.print)
  {
    var elem = document.createElement('a');
    elem.setAttribute('href',url);
    elem.setAttribute('title',title);
    elem.setAttribute('rel','sidebar');
    elem.click();
  }
  else {
    window.sidebar.addPanel(title, url, "");
  }
}

function form_add_value(tag)
{
    var values_count = document.getElementsByClassName('value', tag.parentNode.parentNode).length;
    var hidden_value = document.getElementsByClassName('hidden_value', tag.parentNode.parentNode)[0];
    var new_value = hidden_value.getElementsByTagName('*')[0].cloneNode(true);
    tag.parentNode.parentNode.insertBefore(new_value, hidden_value);
    close_buttons = document.getElementsByClassName('remove_value', tag.parentNode.parentNode);
    if (close_buttons.length > 2)
    	for (i = 0; i < close_buttons.length; i++)
   	        close_buttons[i].style.display = 'inline';
}

function form_remove_value(tag)
{
	var values_count = document.getElementsByClassName('value', tag.parentNode.parentNode).length;
    if (values_count == 3)
    {
    	close_buttons = document.getElementsByClassName('remove_value', tag.parentNode.parentNode);
    	for (i = 0; i < close_buttons.length; i++)
   	        close_buttons[i].style.display = 'none';
    }
    tag.parentNode.parentNode.removeChild(tag.parentNode);
}

document.getElementsByClassName = function(className, tag)
{
    if (!tag) tag = document;
    var result = [];
    var myclass = new RegExp('\\b'+className+'\\b');
    var elems = tag.getElementsByTagName('*');
    for (var i=0;i<elems.length;i++)
    {
        var classes = elems[i].className;
        if (myclass.test(classes)) result.push(elems[i]);
    }
    return result;
}

Array.prototype.common = function(array2)
{	var common_items = Array();
	for (var i=0;i<this.length;i++)
	{		for (var j=0;j<array2.length;j++)
		{		    if (this[i] == array2[j])
		    {		    	common_items[common_items.length] = this[i];
		    	break;
		    }
		}
	}
	return common_items;
}

Array.prototype.contains = function (element)
{
    for (var i = 0; i < this.length; i++)
    {
        if (this[i] == element)
        {
            return true;
        }
    }
    return false;
}

function TabButton(tabTag, classNames)
{	var tabs_wrapper = tabTag.parentNode;
	var tabs = document.getElementsByClassName('tab_button',tabs_wrapper);
	for (var i=0; i<tabs.length; i++) { tabs[i].id = ''; }
	tabTag.id = 'selected_tab';
	var items = document.getElementsByClassName('list_item');
	for (var i=0; i<items.length; i++)
	{		var display = 'none';
		var tagClasses = items[i].className.split(' ');
		if (tagClasses.common(classNames).length > 0)
		{			display = 'block';
		}
		items[i].style.display = display;
	}
}