//
// Javascript object to provide modal divs (actually a modal iFrame)
//
// Usage:
// 
// ModalDiv__LaunchTerms({
//     src: 'termspopup.tlx?type=download',
//     onFinish: 'PerformDownload'
// });
// 
// Parameters: src      - the src file for the iFrame
//             onFinish - callback that is called when the iFrame closes
//                        This receives as its only parameter a token that has
//                        been passed directly from the iFrame. This allows the 
//                        iFrame to pass back any object it likes to the calling.
//                        script.
//
//
var ModalDiv = Class.create({
    initialize: function(id, contentsSrc, onFinish) {
        this.id = id;
        this.contentsSrc = contentsSrc;
        this.calleeOnFinish = onFinish;
    },
    show: function() {
        var backgroundDiv = new Element('div');
        var scrollOffsets = document.viewport.getScrollOffsets();
        backgroundDiv.id = this.id+'.background';
        backgroundDiv.setStyle({
            position:'absolute',
            top:scrollOffsets.top+'px',
            left:scrollOffsets.left+'px',
            width:document.viewport.getWidth()+'px',
            height:document.viewport.getHeight()+'px',
            backgroundColor:'#000',
            zIndex:2000,
            opacity:0.7
        });
        var foregroundDiv = new Element('div');
        foregroundDiv.id = this.id+'.foreground';
        foregroundDiv.setStyle({
            position:'absolute',
            top:scrollOffsets.top+150+'px',
            left:scrollOffsets.left+150+'px',
            width:document.viewport.getWidth()-300+'px',
            height:document.viewport.getHeight()-300+'px',
            backgroundColor:'#fff',
            zIndex:2001,
            opacity:1
        });
        var contentsIFrame = new Element('iframe');
        contentsIFrame.id = this.id+'.contents';
        contentsIFrame.src=this.contentsSrc;
        contentsIFrame.frameBorder = '0';
        contentsIFrame.setStyle({
            position:'relative',
            top:'0',
            left:'0',
            width:'100%',
            height:'100%',
            border:'solid black 0'
        });
        $(document.body).insert({top: backgroundDiv});
        $(document.body).insert({top: foregroundDiv});
        foregroundDiv.insert({bottom: contentsIFrame});
        this._hideSelectBoxes();
        this.boundOnResizeOrScroll = this._onResizeOrScroll.bindAsEventListener(this);
        Event.observe(window, "resize", this.boundOnResizeOrScroll);
        Event.observe(window, "scroll", this.boundOnResizeOrScroll);
    },
    destroy: function() {
        if ($(this.id+'.foreground')) {
            $(this.id+'.foreground').remove();
        }
        if ($(this.id+'.background')) {
            $(this.id+'.background').remove();
        }
        Event.stopObserving(window, "resize", this.boundOnResizeOrScroll)
        Event.stopObserving(window, "scroll", this.boundOnResizeOrScroll)
    },
    onFinish: function(token) {
        this.calleeOnFinish(token);
    },
    _hideSelectBoxes: function() {
        if (Prototype.Browser.IE) {
            var selectBoxes = document.getElementsByTagName('select');
            $A(selectBoxes).each(function (selectBox) {
                selectBox.style.visibility='hidden'; 
            });
        }
    },
    _onResizeOrScroll: function(e) {
        var scrollOffsets = document.viewport.getScrollOffsets();
        if ($(this.id+'.background')) {
            $(this.id+'.background').setStyle({
                top:scrollOffsets.top+'px',
                left:scrollOffsets.left+'px',
                width:document.viewport.getWidth()+'px',
                height:document.viewport.getHeight()+'px'
            });
        }
        if ($(this.id+'.foreground')) {
            $(this.id+'.foreground').setStyle({
                top:scrollOffsets.top+150+'px',
                left:scrollOffsets.left+150+'px',
                width:document.viewport.getWidth()-300+'px',
                height:document.viewport.getHeight()-300+'px'
            });
        }
    }
});

var ModalDiv__modalDivs = [];

function ModalDiv__LaunchTerms(params) {
    params = params || {};
    params = $H({
        id: 'termsAndConditions'
    }).update(params || {}).toObject();
    
    var termsModal = new ModalDiv(params.id, params.src, params.onFinish);
    ModalDiv__modalDivs.push(termsModal);
    termsModal.show();
}

function ModalDiv__onFinish(token)
{
    var thisModal = ModalDiv__modalDivs.pop()
    thisModal.destroy();
    window.setTimeout(function() {
        thisModal.onFinish(token);
    }, 50);
}

