var ERROR_BASE                  = 1000;
var ERROR_DOM_NODE_NOT_FOUND    = ERROR_BASE + 1;

function _(id)
{
    var o = document.getElementById(id);
    if (!o) {
        throw new Exception(ERROR_DOM_NODE_NOT_FOUND, "'" + id + "'" + ' - this id does not exit in DOM');
    }
    return o;
}

//for popup
function getRealHeight()
{
    try {
        var $document_bottom = $(_('document-bottom'));
    } catch (e) {
        var $document_bottom = $('body').append('<div style="clear: both;"><!-- --></div><div id="document-bottom"><!-- --></div>').css('clear', 'both');
    }
    return Math.max(_('document-bottom').offsetTop, $(window).height());
}

function viewportOffset()
{
    var x, y;
    if (self.pageYOffset) { // all except Explorer
        x = self.pageXOffset;
        y = self.pageYOffset;
    }
    else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
        x = document.documentElement.scrollLeft;
        y = document.documentElement.scrollTop;
    }
    else if (document.body) { // all other Explorers
        x = document.body.scrollLeft;
        y = document.body.scrollTop;
    }

    return {'offsetX': x, 'offsetY': y};
}

var jGlassWindow = {
    showGlassWindow: function()
    {
        try {
            var $document_glass = $(_('document-glass'));
        } catch (e) {
            var $document_glass = $('<div id="document-glass"><!-- --></div>').prependTo('body');
        }

        var height = getRealHeight();
        $document_glass.css('height', height + 'px').show();
    },

    hideGlassWindow: function()
    {
        try {
            $(_('document-glass')).hide();
        } catch(e) {}
    }
};

function showPopup(popup_id)
{
    var popup = document.getElementById(popup_id);

    if (!popup) return;

    jGlassWindow.showGlassWindow();

    var $popup = $(popup).show();

    //centered
    var viewport_offset = viewportOffset()


//    alert(Math.ceil(($(window).width() - $popup.outerWidth()) / 2 + viewport_offset.offsetX));

    $popup.css({
        'left' : Math.ceil(($(window).width() - $popup.outerWidth()) / 2 + viewport_offset.offsetX) + 'px',
        'top'  : Math.ceil(($(window).height() - $popup.outerHeight()) / 2 + viewport_offset.offsetY) + 'px'
    });

    $popup.find('._hide_popup').unbind('click').click(
        function() {
            jGlassWindow.hideGlassWindow();
            $popup.hide();
            return false;
        }
    );
}