JQuery Modal Print Preview
<p>can anyone please do me a favor? I don't know much about jquery, and I have downloaded this plugin which allows me to produce a print preview in a modal window. My problem is I placed it on a page which is called by an iframe, so when I try to print preview it produces the preview inside the iframe. What I want is for the print preview window to be produced on the top page and not inside the iframe. Below is the jquery for the print preview.. Can anyone please direct me to where I can manipulate the code so that it produces the preview on the top page..</p>

<pre><code>(function($) { 

// Initialization
$.fn.printPreview = function() {
    this.each(function() {
        $(this).bind('click', function(e) {
            e.preventDefault();
            if (!$('#print-modal').length) {
                $.printPreview.loadPrintPreview();
            }
        });
    });
    return this;
};

// Private functions
var mask, size, print_modal, print_controls;
$.printPreview = {
    loadPrintPreview: function() {
        // Declare DOM objects
        print_modal = $('&lt;div id="print-modal"&gt;&lt;/div&gt;');
        print_controls = $('&lt;div id="print-modal-controls"&gt;' + 
                                '&lt;a href="#" class="print" title="Print page"&gt;Print page&lt;/a&gt;' +
                                '&lt;a href="#" class="close" title="Close print preview"&gt;Close&lt;/a&gt;').hide();
        var print_frame = $('&lt;iframe id="print-modal-content" scrolling="no" border="0" frameborder="0" name="print-frame" /&gt;');

        // Raise print preview window from the dead, zooooooombies
        print_modal
            .hide()
            .append(print_controls)
            .append(print_frame)
            .appendTo('body');

        // The frame lives
        for (var i=0; i &lt; window.frames.length; i++) {
            if (window.frames[i].name == "print-frame") {    
                var print_frame_ref = window.frames[i].document;
                break;
            }
        }
        print_frame_ref.open();
        print_frame_ref.write('&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;' +
            '&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;' + 
            '&lt;head&gt;&lt;title&gt;' + document.title + '&lt;/title&gt;&lt;/head&gt;' +
            '&lt;body&gt;&lt;/body&gt;' +
            '&lt;/html&gt;');
        print_frame_ref.close();

        // Grab contents and apply stylesheet
        var $iframe_head = $('head link[media*=print], head link[media=all]').clone(),
            $iframe_body = $('body &gt; *:not(#print-modal):not(script)').clone();
        $iframe_head.each(function() {
            $(this).attr('media', 'all');
        });
        if (!$.browser.msie &amp;&amp; !($.browser.version &lt; 7) ) {
            $('head', print_frame_ref).append($iframe_head);
            $('body', print_frame_ref).append($iframe_body);
        }
        else {
            $('body &gt; *:not(#print-modal):not(script)').clone().each(function() {
                $('body', print_frame_ref).append(this.outerHTML);
            });
            $('head link[media*=print], head link[media=all]').each(function() {
                $('head', print_frame_ref).append($(this).clone().attr('media', 'all')[0].outerHTML);
            });
        }

        // Disable all links
        $('a', print_frame_ref).bind('click.printPreview', function(e) {
            e.preventDefault();
        });

        // Introduce print styles
        $('head').append('&lt;style type="text/css"&gt;' +
            '@media print {' +
                '/* -- Print Preview --*/' +
                '#print-modal-mask,' +
                '#print-modal {' +
                    'display: none !important;' +
                '}' +
            '}' +
            '&lt;/style&gt;'
        );

        // Load mask
        $.printPreview.loadMask();

        // Disable scrolling
        $('body').css({overflowY: 'hidden', height: '100%'});
        $('img', print_frame_ref).load(function() {
            print_frame.height($('body', print_frame.contents())[0].scrollHeight);
        });

        // Position modal            
        starting_position = $(window).height() + $(window).scrollTop();
        var css = {
                top:         starting_position,
                height:      '100%',
                overflowY:   'auto',
                zIndex:      10000,
                display:     'block'
            }
        print_modal
            .css(css)
            .animate({ top: $(window).scrollTop()}, 400, 'linear', function() {
                print_controls.fadeIn('slow').focus();
            });
        print_frame.height($('body', print_frame.contents())[0].scrollHeight);

        // Bind closure
        $('a', print_controls).bind('click', function(e) {
            e.preventDefault();
            if ($(this).hasClass('print')) { window.print(); }
            else { $.printPreview.distroyPrintPreview(); }
        });
    },

    distroyPrintPreview: function() {
        print_controls.fadeOut(100);
        print_modal.animate({ top: $(window).scrollTop() - $(window).height(), opacity: 1}, 400, 'linear', function(){
            print_modal.remove();
            $('body').css({overflowY: 'auto', height: 'auto'});
        });
        mask.fadeOut('slow', function()  {
            mask.remove();
        });             

        $(document).unbind("keydown.printPreview.mask");
        mask.unbind("click.printPreview.mask");
        $(window).unbind("resize.printPreview.mask");
    },

    /* -- Mask Functions --*/
    loadMask: function() {
        size = $.printPreview.sizeUpMask();
        mask = $('&lt;div id="print-modal-mask" /&gt;').appendTo($('body'));
        mask.css({              
            position:           'absolute', 
            top:                0, 
            left:               0,
            width:              size[0],
            height:             size[1],
            display:            'none',
            opacity:            0,                          
            zIndex:             9999,
            backgroundColor:    '#000'
        });

        mask.css({display: 'block'}).fadeTo('400', 0.75);

        $(window).bind("resize..printPreview.mask", function() {
            $.printPreview.updateMaskSize();
        });

        mask.bind("click.printPreview.mask", function(e)  {
            $.printPreview.distroyPrintPreview();
        });

        $(document).bind("keydown.printPreview.mask", function(e) {
            if (e.keyCode == 27) {  $.printPreview.distroyPrintPreview(); }
        });
    },

    sizeUpMask: function() {
        if ($.browser.msie) {
            // if there are no scrollbars then use window.height
            var d = $(document).height(), w = $(window).height();
            return [
                window.innerWidth ||                        // ie7+
                document.documentElement.clientWidth ||     // ie6  
                document.body.clientWidth,                  // ie6 quirks mode
                d - w &lt; 20 ? w : d
            ];
        } else { return [$(document).width(), $(document).height()]; }
    },

    updateMaskSize: function() {
        var size = $.printPreview.sizeUpMask();
        mask.css({width: size[0], height: size[1]});
    }
}
})(jQuery);
</code></pre>
