var current_menu_id = null;
var hide_timer = 200;
var can_hide_menu = false;
var kladr_old = false;
var kladr_streets = false;

function ShowForm(form_id)
{
	ShowSelects(false);
	g('blackscreen').style.display = 'block';
	g('centerscreen').innerHTML = '<div id="' + form_id + '" class="form_over">' + g(form_id).innerHTML + '</form>';
	g('centerscreen').style.display = 'block';
	ShowSelects(true, g('centerscreen'));
}

function HideForm()
{
	g('blackscreen').style.display = 'none';
	g('centerscreen').style.display = 'none';
	ShowSelects(true);
}

function ShowAddFamilyForm(whom_id)
{
	g('popup1_img').style.display = 'none';
	g('popup1_status').innerHTML = '';
	g('popup1_first_name').value = '';
	g('popup1_middle_name').value = '';
	g('popup1_last_name').value = '';
	g('popup1_email').value = '';
	g('popup1_died').checked = false;
	g('popup1_bd_year').value = '';
	g('popup1_bd_month').value = '';
	g('popup1_bd_day').value = '';
	g('popup1_who').innerHTML = '<b>' + g('person' + current_person_id + '_list').getElementsByTagName('span')[0].innerHTML + '</b>';
	g('popup1_add_type').value = (whom_id + 1) % 10 - 1;
	ShowForm('addFamilyForm');
}

function ShowMenu(senderId, menuPosition)
{
	if (!menuPosition) menuPosition = 0;
	var div = g(current_menu_id);
	var sender = g(senderId);
	if (div && sender)
	{
    	// live links
    	var links = Array(
            'user', //0
            'messages?send_to=', //1
            'setup/', //2
            'edit_profile/photo/', //3
            'tree', //4
            'oldtree?user_id=', //5
            'family/', //6
            'friends/', //7
            'family/edit?action=add_member&member_id=', //8
            'family/edit?action=remove_member&member_id=', //9
            'oldtree?user_id=', //10
            'family/edit?action=remove_member&m=', //11
            'family/edit?action=edit_link&m=', //12
            'family/edit?action=remove_link&m=', //13
            'edit_profile/', //14
            'family/list/' //15
    	);
    	var current_person_id = ParseId(sender.id);
    	var link_items = div.getElementsByTagName('a');
    	for (var link_id = 0; link_id < link_items.length; link_id++)
    	{
    		var link = link_items[link_id];
    		var link_code = link.getAttribute("l");
    		if (link_code !== null)
    		{
    			var extra = link.getAttribute("extra");
    			if (!extra) extra = "";
    			link.href = "/" + links[link_code] + current_person_id + (extra ? '&' + extra : '');
    		}
    	}

	    div.style.display = 'block';
        var m = null;
        switch (menuPosition)
        {
            case 0:
            case 1:
			    if (sender.style.left && sender.style.width && sender.style.top && sender.style.height)
		    	    m = {"x": parseInt(sender.style.left) + parseInt(sender.style.width) - 10, "y": parseInt(sender.style.top) + parseInt(sender.style.height) - 10};
		        else
		            m = mousePageXY();
                break;
            case 2:
                if (!sender.style.left)
                    sender = sender.parentNode;
                if (!sender.style.left)
                    sender = sender.parentNode;
                var left = parseInt(sender.style.left) - (parseInt(div.style.width) - parseInt(sender.style.width)) / 2;
                var top = parseInt(sender.style.top) - (parseInt(div.style.height) - parseInt(sender.style.height)) / 2;
                m = {"x": left, "y": top};
                break;
        }
	    div.style.left = m.x;
	    div.style.top = m.y;

		// attributes handler
	    var photos = document.getElementsByClassName('context_menu_photo', div);
	    for (var pi = 0; pi < photos.length; pi++)
	    {
        	var photo1 = photos[pi].getElementsByTagName('img')[0];
        	var photoa = photo1.parentNode;
        	if (sender.getAttribute("photo"))
        	{
        	    photo1.src = sender.getAttribute("photo");
        	    photoa.href = sender.getAttribute("photo2");
            }
        	else
        	{
        		photo1.src = '/images/h60_no_photo' + ((sender.getAttribute["sex"]) ? '_' + sender.getAttribute["sex"] : '') + '.gif';
        		photoa.href = "";
            }
        	photo1.title = 'Фотография';
        }
	}
}

function HideMenu()
{
	var div = g(current_menu_id);
	if (!can_hide_menu)
	    return;
	if (div)
	{
	    div.style.display = 'none';
	    current_menu_id = null;
	}
}

function SetAllMenus(newMenuId)
{
    if (current_menu_id != newMenuId)
    {
	    var tag = null;
	    all = document.getElementsByTagName('*');
	    for (var i = 0; i < all.length; i++)
	    {
	        tag = all[i];
	        if (tag.className)
	        {
	            if (tag.className.toLowerCase() == 'context_menu')
	            {
	                can_hide_menu = true;
	                HideMenu();
	            }
	        }
	    }
    	current_menu_id = newMenuId;
    }
}

function ParseId(str)
{
    var reg = /(.*)\D(\d+)(.*)/;
    var arr = reg.exec(str);
    var res = '';
    if (arr && arr.length > 2)
    {
        res = arr[2];
    }
    //status = res;
    return res;
}

function RegisterMenu(hintId, elementId, actionType, menuPosition)
{
	// actionType: 0 - onmousemove, 1 - onclick
	// menuPosition: 0 - mouse_point, 1 - fixed_corner, 2 - fixed_center
	if (!menuPosition) menuPosition = 0;
	var elem = g(elementId);
	var hint = g(hintId);
	var sub_hint = null;
	var sex = elem.getAttribute("sex");
	if (!elem)
	{
        //alert('Ошибка регистрации меню для элемента!');
	    return;
	}
	if (!actionType)
	    actionType = 0;

	switch (actionType)
	{
	    case 0:
	        elem.onmousemove = function() { SetAllMenus(hintId); ShowMenu(elem, menuPosition); } ;
	        //elem.onmouseout = function() { alert('out!');  };
	        //can_hide_menu = true; setTimeout('HideMenu()', hide_timer * 5);
	        break;
	    case 1:
	        elem.onclick = function() { SetAllMenus(hintId); ShowMenu(elem, menuPosition); return false; } ;
	        elem.style.cursor = 'pointer';
	        break;
	}

    hint.onmouseover = function() { can_hide_menu = false; } ;
    hint.onmouseout = function() { can_hide_menu = true; setTimeout('HideMenu()', hide_timer); } ;
    hint.onclick = function() { can_hide_menu = true; HideMenu(); } ;

    if (hint.all) // ff fix
    {
	    for (var i = 0; i < hint.all.length; i++)
	    {
	    	sub_hint = hint.all[i];
	    	sub_hint.onmousemove = function() { can_hide_menu = false; } ;
	    }
	}
}

function SearchParent(tag, parent_id)
{
	var current = tag;
    while (current.parentNode)
    {
    	current = current.parentNode;
    	if (current.id == parent_id)
    	    return true;
    }
    return false;
}

function RegisterAllMenus()
{
    var tag = null;

    all = document.getElementsByTagName('*');
    var mode = '';
    try { mode = getUrlValue('type').toLowerCase(); }
    catch (e) {}
    for (var i = 0; i < all.length; i++)
    {
        tag = all[i];

        if (tag.title && typeof(tag.title)=='string' && tag.title != "" && !tag.onfocus && (!tag.type || tag.type != 'text'))
        {
        	tag.onmouseover = function() { AddTT(this.title); this.title = ''; };
        	tag.onmouseout = function() { if(g('ns_tt')) this.title = g('ns_tt').innerHTML; RemoveTT(); };
        }

        if (tag.className)
        {
            var tag_classes = tag.className.split(' ');
            for (var ci = 0; ci < tag_classes.length; ci++)
            {
                var current_class = tag_classes[ci];
                switch (current_class.toLowerCase())
                {
                    case "my_photo_menu":
                        RegisterMenu('my_photo_menu', tag, 1);
                        break;
    	            case "family_active_menu":
    	                RegisterMenu('family_active_menu', tag, 1);
    	                break;
    	            case "other_active_menu":
    	                RegisterMenu('other_active_menu', tag, 1);
    	                break;
    	            case "family_inactive_menu":
    	                RegisterMenu('family_inactive_menu', tag, 1);
    	                break;
    	            case "other_inactive_menu":
    	                RegisterMenu('other_inactive_menu', tag, 1);
    	                break;
    	            case "edit_family_menu":
    	                RegisterMenu('edit_family_menu', tag, 1);
    	                break;
    	            case "dateselector":
    		            fillDateSelector(tag.id);
       	            	var text = g(tag.id + '_loading');
       	            	if (text) text.style.display = 'none';
       	            	tag.style.display = 'block';
    				    break;
                	case "decl":
    					var pad = parseInt(tag.title.split('-')[0]);
    					var sex = (tag.title.split('-')[1] == '2') ? 'f' : 'm';
    					tag.title = '';
    					var t = tag.innerHTML.split(' ');
    					var rn = new RussianName(t[0], t[1], t[2], sex);
    					switch(pad)
    					{
    						case 2:
    							tag.innerHTML = rn.fullName(rn.gcaseRod);
    							break;
    						case 3:
    							tag.innerHTML = rn.fullName(rn.gcaseDat);
    							break;
    						case 4:
    							tag.innerHTML = rn.fullName(rn.gcaseVin);
    							break;
    						case 5:
    							tag.innerHTML = rn.fullName(rn.gcaseTvor);
    							break;
    						case 6:
    							var temp = rn.fullName(rn.gcasePred);
    							tag.innerHTML = 'о' + (temp.match(/^[уеыаоэёяию]/i)?'б':'') + ' ' + temp;
    							break;
    					}
                		break;
                    case "auto_title":
                        set_field_style(tag, false);
                        tag.onfocus = function() { set_field_style(this, true); }
                        tag.onblur = function() { set_field_style(this, false); }
                        break;
                    case "comment":
	                    tag.onmouseover = function() { this.className = this.className + ' comment_hover'; }
                        tag.onmouseout = function() { this.className = this.className.replace(' comment_hover', ''); }
                    	break;
                }
            }
        }
    }
}

function updateHiddenField(id)
{
	var hidden = g(id + '_hidden');	if (!hidden) return;
	var date = g(id + '_date');
	var month = g(id + '_month');
	var year = g(id + '_year');
	hidden.value = (year ? year.value : '0000') + '-' + (month ? month.value : '00') + '-' + (date ? date.value : '00');
}

function fillSelect(id, values, selected)
{
    var tag = g(id);
    if (!tag) return;

    tag.innerHTML = '';

    for (var i = 0; i < values.length; i++)
    {
    	var item = document.createElement('option');
    	item.value = values[i]['value'];
    	item.innerHTML = values[i]['item'];
    	tag.appendChild(item);
    }

    tag.value = selected;
}

function fillSelectWithDays(id, def)
{
    var days_values = Array();
    for (var i = 0; i <= 31; i++)
    {
    	var item = Array();
    	item['item'] = (i == 0 ? '-день-' : i);
    	item['value'] = (i < 10 ? '0' : '') + i;
    	days_values.push(item);
    }
    fillSelect(id, days_values, def);
}

function fillSelectWithMonths(id, def)
{
    var months_values = Array();
	var months = Array('-месяц-', 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
	for (var i = 0; i < months.length; i++)
	{
		var item = Array();
		item['item'] = months[i];
    	item['value'] = (i < 10 ? '0' : '') + i;
    	months_values.push(item);
	}
	fillSelect(id, months_values, def);
}

function fillSelectWithYears(id, def, year_p)
{
    year_p = parseInt(year_p);
    var years_values = Array();
	var item = Array();
   	item['item'] = '-год-';
   	item['value'] = '0000';
   	years_values.push(item);
    for (var i = year_p; i >= 1600; i--)
    {
    	var item = Array();
    	item['item'] = i;
    	item['value'] = i;
    	years_values.push(item);
    }
    fillSelect(id, years_values, def);
}

function fillDateSelector(id)
{
    var defs = g(id + '_hidden');
    if (!defs) return;
    defs = defs.value.split('-');
    var year_p = g(id + '_p').value;

    fillSelectWithDays(id + '_date', defs[2]);
	fillSelectWithMonths(id + '_month', defs[1]);
    fillSelectWithYears(id + '_year', defs[0], year_p);
}

/***************** Kladr *****************/
function ShowEditKladrForm(field, _old, _streets) {
	_old = (_old ? "1" : "0");
	ShowForm2('kladr', field, _old, _streets);
}
function KladrCallback() {
	kladr_old = g('field_kladr_old').value;
	kladr_streets = g('field_kladr_streets').value;
	FillLevel(1, kladr_old);
}
function ClearKladrField(field) {
	g(field + '_show').value = '<не указано>';
    g(field).value = '|';
	g(field + '_show').onchange();
}
function FillLevel(level, old, streets) {
    var sel_val = g('level' + (level - 1)).value;
    for (var i = 0; i <= 4; i++) {
    	g('g' + i).style.display = (i < level) ? 'block' : 'none';
    	if (i >= level)
    	    g('level' + i).innerHTML = '';
    }
    if (level != 1 && sel_val == '')
        return;

    //g('g6').style.display = 'none';
    //g('g7').style.display = 'block';
    g('EditKladrFormOkButton').disabled = true;
    var kladr = MakeAjaxRequest('action=q_kladr&level=' + sel_val + '&old=' + (old ? '1' : '0'), false);
    //g('g7').style.display = 'none';
    //g('g6').style.display = 'block';
    g('EditKladrFormOkButton').disabled = false;

    if (kladr != '') {
        var list = kladr.split('\n');
        var select = g('level' + level);

        var option = document.createElement('option');
        option.innerHTML = 'выберите...';
        option.value = '';
        select.appendChild(option);

        for (var i = 0; i < list.length; i++) {
        	if (list == '') continue;
        	var item = list[i].split('|');
        	if (item.length != 4) continue;
        	var option = document.createElement('option');
        	option.value = item[0];
        	option.innerHTML = item[1];
        	var className = '';
        	if (item[2] == '1')
        		className += 'bold ';
        	if (item[3] == '1')
	        	className += 'old ';
	      	option.className = className;
            select.appendChild(option);
        }
        select.style.width = '220px';
        g('g' + level).style.display = 'block';
    }
}
function getPlaceKladr(field) {
    if (!field) return;
    var kcode = g(field);
    var show = g(field + '_show');
    if(!kcode || !show) return;
    res = Done();
    kcode.value = res[0] + '|' + res[1];
    show.value = res[2] + ((res[1] == '')? '' : ', ' + res[1]);
    if (show.onchange) show.onchange();

    CloseForm2();
}
/***************** END: Kladr *****************/


/***************** Virtual Keyboard *****************/
function VirtualKeyboardCallback()
{
	var keyboard_field = g('virtual_keyboard_field');
	if (keyboard_field) {
		var old_val = document.getElementById('field_' + keyboard_field.value);
		var val = document.getElementById('keyboard_text');
		if( old_val && val) {
			val.value = old_val.value;
			val.focus();
		}
		return;
	}
}
function VirtualKeyboardOK()
{
	var field, field_name;
	var keyboard_field = g('virtual_keyboard_field');
	if( keyboard_field ) {
		field = document.getElementById('field_' + keyboard_field.value);
		if( field )
			field.value = document.getElementById('keyboard_text').value;
	}
 	CloseForm2();
	return;
}
/***************** END: Virtual Keyboard *****************/


/***************** New Forms *****************/
function ShowForm2() {
	if( arguments[0] == '' || arguments[0] == null ) {
		return false;
	}
	// Затемнить фон и отобразить лоадер
	ShowSelects(false);

	if (BrowserType() == IE) { g('centring-table').style.marginTop = document.body.scrollTop; g('grayscreen').style.height = parseInt(document.body.scrollHeight) + parseInt(document.body.clientHeight); }
	//g('popup-wrapper').style.marginTop = document.body.scrollTop);
	g('popup_form').style.display = 'block';
	g('popup_form_close').style.display = 'none';
	g('popup_form_controls').style.display = 'none';
	g('popup-wrapper').style.width = '90px';
	g('popup-inner').innerHTML = '<div><img src="/images/loading_c.gif" alt="Загрузка"></div>';
	get = '';
	for(i = 1; i < arguments.length; i++) {
		get = get + '&param' + i + '=' + arguments[i];
	}
	// Сделать запрос на получение формы
	JsHttpRequest.query('/ajax.php?action=q_get_form&form_id=' + arguments[0] + get, {},
		function( res, err ) {
			var default_width = 300;
	    	if( res.success && res.text ) {
	    		var width = ( res.width > 0 ) ? res.width : default_width;
	    		if( res.height > 0 )
	    			g('popup-inner').style.height = res.height;
				g('popup-wrapper').style.width = width + 'px';
				//g('popup-wrapper').className = 'pform_' + res.form_id;
				g('popup_form_close').style.display = 'block';
				g('popup-inner').innerHTML = res.text;
				if( res.controls != '' && res.controls != null ) {
					g('popup_form_controls').style.display = 'block';
					g('popup_form_controls').innerHTML = res.controls;
				}
				if( res.callback != '' && res.callback != null ) {
					window[res.callback]();
				}
	        	ShowSelects(true, g('centring-table'));
	    	}
	    	else {
	    		g('popup_form').style.display = 'none';
	    	}
	    }
	, true
	);
}
function CloseForm2() {
	g('popup_form').style.display = 'none';
	ShowSelects(true);
}
/***************** END: New Forms *****************/


/***************** START: MoodMeter *****************/
function MoodMakeSmile(smile) {
	current = g('mood_smile_current');
	if(current) {
		if(smile != current.value) {
			if( old = g('mood_smile_'+current.value) )
				old.className="";
			if( new_smile = g('mood_smile_'+smile) )
				new_smile.className="active";
			current.value = smile;
		}
	}
}
function MoodOK() {
	if( (text = g('mood_status_text')) && (smile = g('mood_smile_current')) && (full_text = g('mood_status_full_text')) ) {
		//alert("Сохранить:\n" + text.value + "\n" + smile.value + "\n" + full_text.value);
		JsHttpRequest.query('/ajax.php?action=mood_save',
			{'text':text.value, 'smile':smile.value, 'full_text':full_text.value},
			MoodOKCallback,
			true
		);
	}
	else {
		CloseForm2();
	}
}
function MoodOKCallback(res, err) {
	CloseForm2();
	if(res.html != '') {
		if( mood = g('mood_status_inner') ) {
			mood.innerHTML = res.html;
		}
	}
}
/***************** END: MoodMeter *****************/

RegisterAllMenus();


function copyToClipboard(content) {
    if (window.clipboardData && window.clipboardData.setData) {
        window.clipboardData.setData("Text", content);
        return true;
    }
    else {
        try {
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        }
        catch (e) {
            return false;
        }

        var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"].getService();
        if (clipboard) {
            clipboard = clipboard.QueryInterface(Components.interfaces.nsIClipboard);
        }

        var transferable = Components.classes["@mozilla.org/widget/transferable;1"].createInstance();
        if (transferable) {
            transferable = transferable.QueryInterface(Components.interfaces.nsITransferable);
        }

        if (clipboard && transferable) {
            var textObj = new Object();
            var textObj = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
            if (textObj) {
                textObj.data = content;
                transferable.setTransferData("text/unicode", textObj, content.length*2);
                var clipid=Components.interfaces.nsIClipboard;
                clipboard.setData(transferable,null,clipid.kGlobalClipboard);

                return true;
            }
        }

        return false;
    }
}

function AjaxSelect(tag, type, params)
{	// add cache variable

	var selected = '';
	var values;
	tag = g(tag);

    tag.disabled = true;
    tag.className = tag.className + ' loading_s';
    tag.innerHTML = '<option value="">подождите...</option>';

	JsHttpRequest.query('/ajax.php?action=q_get_select&type=' + type + '&' + params, {},
		function( res, err ) {	    	if( res.success) {
				AjaxFillSelect(tag, res.items, '');
				tag.disabled = false;
	    	}
	    	else {
	    		AjaxFillSelect(tag, false);
	    	}
	    	tag.className = tag.className.replace(' loading_s', '');
	    }
	, true
	);
}

function AjaxFillSelect(tag, items, selected)
{    var tag = g(tag);
    if (!tag) return;

	tag.innerHTML = '';
	if (items != false)
	{
		for (value in items)
	    {
	    	var item = document.createElement('option');
	    	item.value = (items[value]['id']) ? items[value]['id'] : '';
	    	item.innerHTML = items[value]['label'];
	    	if (items[value]['bold'] == 1) item.className = 'bold';
	    	tag.appendChild(item);
	    }
	}
	else
	{		tag.innerHTML = '<option value="">недоступно</option>';
		tag.disabled = true;
	}

    if (selected != null) tag.value = selected;
}