function $(id) {
    var d = document;
    if (!d._$) d._$ = new Array();
    
    if (d._$[id]==null) {
        d._$[id] = document.getElementById(id);
    }
    return d._$[id];
}

function addEvent(elm, evType, fn, useCapture) {
        if (elm.addEventListener) {
                elm.addEventListener(evType, fn, useCapture);
        return true;
        }
        else if (elm.attachEvent) {
                var r = elm.attachEvent('on' + evType, fn);
                return r;
        }
        else {
                elm['on' + evType] = fn;
        }
}

function MOUSE() {
    this.x = 0;
    this.y = 0;
    this.x_old = 0;
    this.y_old = 0;
    this.x_offset = 0;
    this.y_offset = 0;
}
var mouse = new MOUSE();

addEvent(
    document,
    'mousemove',
    function(event) {
        if(!event) event = window.event;
        mouse.x = event.clientX + document.documentElement.scrollLeft;
        mouse.y = event.clientY + document.documentElement.scrollTop;
        mouse.x_offset = mouse.x - mouse.x_old;
        mouse.y_offset = mouse.y - mouse.y_old;
        mouse.x_old = mouse.x;
        mouse.y_old = mouse.y;
    }
);

var glossary_fullpath = '';
var glossary_terms = new Array();

function glossaryShowTip(term) {
	glossaryUpdateTip( term );
	$('glossary_tip').style.display = 'block';
    if (parseInt(mouse.x) > (parseInt(document.body.clientWidth) / 2)) {
        $('abbr_top_img').src = '/images/structure/abbr_top_2.gif';
        $('glossary_tip').style.left = mouse.x - 367 + 'px';
    }
    else {
        $('abbr_top_img').src = '/images/structure/abbr_top.gif';
        $('glossary_tip').style.left = mouse.x - 33 + 'px';
    }
	$('glossary_tip').style.top  = mouse.y + 22 + 'px';
}

function glossaryHideTip() {
    $('glossary_tip_body').innerHTML = '&nbsp;';
    $('glossary_tip').style.display = 'none';
}

function glossaryUpdateTip(term) {
    if (!glossary_terms[term]) {
		glossary_terms[term] = 'Загрузка данных...';
		glossaryLoadTerm(term);
    }
    $('glossary_tip_body').innerHTML = glossary_terms[term];
}

function glossaryLoadTerm(term) {
	if (glossary_fullpath == '') return false;
	
    JsHttpRequest.query(
        glossary_fullpath+'?action=ajaxGetTerm',
        
        { 'term': term },
    
        function(result, errors) {
            if (errors) {
                alert(errors);
                return;
            }

            //Вставляем результат
            if (result['term']) {
			    glossary_terms[term] = result['term'];
			    glossaryUpdateTip(term);
            }
        },
        
        true
    );
}

addEvent(
    window,
	'load',
	function() {
		var abbr_arr = document.getElementById('body-content').getElementsByTagName( 'SPAN' );
		for(var i = 0; i < abbr_arr.length; i++) {
            if (abbr_arr[i].className != 'abbr') continue;

			abbr_arr[i].onmousemove = function() {
				glossaryShowTip(this.title ? this.title : this.innerHTML.toString());
			}

			addEvent(abbr_arr[i], 'mouseout', glossaryHideTip);
		}
	}
);
