Overlay =
{
    show: function()
    {
        var overlay = $("popup_overlay");
        if (Browser.IE6) {
            window.origWidth = document.documentElement.scrollWidth;
            window.origHeight = document.documentElement.scrollHeight;
            var iframe = $("popup_overlay_iframe");
            if (!iframe) {
                var iframe = document.createElement("iframe");
                iframe.id = "popup_overlay_iframe";
                overlay.parentNode.insertBefore(iframe, overlay);
                iframe.style.left = 0;
                iframe.style.top = 0;
            }
            var w = "Math.max(documentElement.clientWidth, window.origWidth) + 'px'";
            var h = "Math.max(documentElement.clientHeight, window.origHeight) + 'px'";  
            var is = iframe.style;
            is.setExpression("width", w);
            is.setExpression("height", h);
            is.display = "block";
            var os = overlay.style;
            os.setExpression("width", w);
            os.setExpression("height", h);
            os.display = "block";
        }
        else {
            // Overlay should be made visible by changing width instead of
            // display: block, otherwise text cursor disappears in Firefox 2.
            // Moreover, the overlay can not be created on the fly, but should
            // exists in the original DOM 
            overlay.style.width = "100%";
            overlay.style.height = "100%";
        }
    },

    hide: function()
    {
        var overlay = $("popup_overlay");
        if (overlay) {
            var os = overlay.style;
            if (Browser.IE6) {
                os.removeExpression("width");
                os.removeExpression("height");
                os.display = "none";
                var iframe = $("popup_overlay_iframe");
                var is = iframe.style;
                is.removeExpression("width");
                is.removeExpression("height");
                is.display = "none";
            }
            else {
                os.width = 0;
                os.height = 0;
            }
        }
    }
};

Popup =
{
    _prepare: function(opts)
    {
        var elems = Popup.popup.getElementsByTagName("*");
        for (var i = 0; i < elems.length; i++) {
            var e = elems[i];
            if (opts && opts.title && hasClass(e, "title")) {
                e.innerHTML = opts.title;
            }
            else if (opts && opts.message && hasClass(e, "message")) {
                e.innerHTML = opts.message;
            }
            else if (hasClass(e, "dialog_button")) {
                e.onclick = function() {
                    Popup.hide();
                    if (Popup._clickCallback) {
                        // IE workaround for getting value attribute.
                        var item = this.attributes.getNamedItem("value");
                        var value = item ? item.value : "";
                        Popup._clickCallback(value);
                    }
                }
            }
        }
    },
    
    show: function(id, opts)
    {
        Popup.hide();
        Popup.popup = $(id);
        Popup._prepare(opts);
        Popup._clickCallback = opts ? opts.onclick : null;
        var style = Popup.popup.style;
        style.display = "block";
        if (Browser.IE6) {
            style.position = "absolute";
            style.setExpression("left", "(documentElement.clientWidth - this.offsetWidth) / 2 + documentElement.scrollLeft + 'px'" );
            style.setExpression("top", "(documentElement.clientHeight - this.offsetHeight) / 2 + documentElement.scrollTop + 'px'" );
        }
        else {
            style.marginLeft = -(Popup.popup.offsetWidth / 2) + "px";
            style.marginTop = -(Popup.popup.offsetHeight / 2) + "px";
        }
        Overlay.show();
    },

    hide: function()
    {
        var p = Popup.popup;
        if (p) {
            p.style.display = "none";
            if (Browser.IE6) {
                p.style.removeExpression("left");
                p.style.removeExpression("top");
            }
            Overlay.hide();
            Popup.popup = null;
        }
    }
};
