// IE6 hack:
var maxtooltipwidth, guessedcharwidth = 6;
try {
    for (var s in document.styleSheets) {
        var rules = document.styleSheets[s].rules;
        for (var i in rules) {
            if (rules[i].selectorText == '.tooltip') {
                maxtooltipwidth = parseInt(rules[i].style.maxWidth);
                if (maxtooltipwidth)
                    break;
            }
        }
        if (maxtooltipwidth)
            break;
    }
} catch(err) {}

var enabled = false;
var mousepos = { x: 0, y: 0 };

function escapeHTML(str) {
    return str.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;');
}

function updatepos(id) {
    var t = document.getElementById('tooltip_'+id);
    var grid_w = window['grid_w_'+id];
    var x = Math.round((grid_w - 4 - t.clientWidth) * (mousepos.x / grid_w));
    var y = Math.round(mousepos.y + 20);
    t.style.left = x + 'px';
    t.style.top = y + 'px';
}

function m(obj, evt, id) {
    var x, y, tgt;
    if (evt) { // Mozilla, Opera
        if (typeof(evt.offsetX) != 'undefined') { // Opera
            x = evt.offsetX;
            y = evt.offsetY;
        } else { // Mozilla
            x = evt.layerX;
            y = evt.layerY;
        }
        tgt = evt.target;
    } else { // IE6
        x = event.offsetX;
        y = event.offsetY;
        tgt = event.srcElement;
    }
    if (tgt != obj) {
        var p = tgt;
        while (p.parentNode && p.parentNode != obj) {
            p = p.parentNode;
        }
        x += p.offsetLeft;
        y += p.offsetTop;
    }
    mousepos.x = x;
    mousepos.y = y;

    if (enabled) {
        updatepos(id);
    }
}

function d(obj, id) { // mouseover
    var title = obj.title;
    if (title) { // move into a different attribute, to hide the browser's normal tooltip
        obj.setAttribute('_title', obj.title);
        obj.title = '';
    } else {
        title = obj.getAttribute('_title');
    }
    var author = obj.getAttribute('_author');
    var text = '<div class="author">' + escapeHTML(author) + '</div><div class="message">' + escapeHTML(title).replace(/\n/g, '<br>') + '</div>';

    var img = obj.getAttribute('_img');
    if (img) {
        text = '<img src="'+window.graphiclinks_domain+'/images/graphiclinks/graphiclinks/user/' + escapeHTML(img) + '" class="image">' + text;
    }

    var t = document.getElementById('tooltip_'+id);
    t.innerHTML = text;
    if (maxtooltipwidth) {
        t.setAttribute('_iewidth', title.length > (maxtooltipwidth/guessedcharwidth) ? maxtooltipwidth+'px' : 'auto');
    }
    updatepos(id);
    t.style.visibility = 'visible';
    enabled = true;
}

function e(obj, id) { // mouseout
    var t = document.getElementById('tooltip_'+id);
    t.style.visibility = 'hidden';
    enabled = false;
}

function c(obj) { // click
    var win = window.open(obj.href, 'glwindow', 'width=800,height=600,resizable=yes,scrollbars=yes,status=yes');
    if (win) {
        win.focus();
        return false;
    }
    return true;
}

var previously_highlighted_ids = [];
function highlight_categories(select, id) {
    var value = select.options[select.selectedIndex].value;

    var ids = previously_highlighted_ids[id] || [];
    for (var i = 0; i < ids.length; ++i) {
        var e = document.getElementById('link_'+ids[i]);
        e.className = e.className.replace(/highlighted-link/, '');
    }
    ids = window['categories_'+id][value] || [];
    for (var i = 0; i < ids.length; ++i) {
        var e = document.getElementById('link_'+ids[i]);
        e.className += ' highlighted-link';
    }
    previously_highlighted_ids[id] = ids;
}

