
function InfoMessages() {
    this.infoMessageDiv;
    this.messages = new Array();

    this.init = function() {
        this.infoMessageDiv = getDocumentObject("helpDivAtMousePosition"); // Always printed in included template footer...
        if (!this.infoMessageDiv)
            return;
        this.infoMessageDiv.className = "defaultMouseOverInfo";
        this.infoMessageDiv.style.position = 'absolute';
        this.infoMessageDiv.style.zIndex = '99999';
    };
    this.displayMessage = function(e, triggerObj, key, leftCompensation, topCompensation) {
        var message = this.lookupMessage(key);
        this.displayHoverMessage(e, triggerObj, message, leftCompensation, topCompensation);
    };
    this.displayHoverMessage = function(e, triggerObj, message, leftCompensation, topCompensation) {
        if (message) {
            if (!e) var e = window.event;
            // position
            var mPos = getActualMousePosXY(e);
            var mousePosX = mPos[0]+(leftCompensation?leftCompensation:0)+5; // additional 5 is to keep message away from mouse cursor
            var mousePosY = mPos[1]+(topCompensation?topCompensation:0);
            this.infoMessageDiv.className="defaultMouseOverInfo";
            this.infoMessageDiv.style.height="";

            this.infoMessageDiv.style.top = mousePosY+'px';
            this.infoMessageDiv.style.left = mousePosX+'px';
            // text
            this.infoMessageDiv.innerHTML = (message.header ? "<b>"+message.header+"</b><br/>" : "") + message.message;
            // display (and prepare to hide...)
            display(this.infoMessageDiv.id, true);
            hideSelectBoxesUnderDiv(this.infoMessageDiv.id);
            triggerObj.onmouseout = function() { display(PageInfoMessages.infoMessageDiv.id, false); };
        }
    };
    this.lookupMessage = function(key) {
        for (var i=0; i < this.messages.length; i++) {
            if (this.messages[i].key == key)
                return this.messages[i];
        }
        return null;
    };
    this.addMessage = function(key, header, message) {
        // make sure we don't already have a message with that key
        for (var i=0; i < this.messages.length; i++) {
            if (this.messages[i].key == key)
                return;
        }
        this.messages[this.messages.length] = new InfoMessage(key, header, message);
    };
}

function InfoMessage(key, header, message) {
    this.key = key;
    this.header = header;
    this.message = message;
}

var PageInfoMessages = new InfoMessages();
addEvent(window, "load", function(){PageInfoMessages.init();});
