/***************************************************************************
 * Flexpaper JQuery plugin
 * - Depends on: SWF Objects
 *
 * - Author: Rob Schellhorn
 **************************************************************************/
(function($) {

    $.fn.flexpaper = function(options) {

        var options = $.extend({

            /**
             * 
             */
            callback: null,

            /**
             * 
             */
            size: { height: 252, width: 470 },

            /**
             * The url the the flexpaper viewer
             */
            viewerUrl: '/flex_paper_viewer.swf',

            /**
             * The url to the presentation file
             */
            presentationUrl: null

        }, options);

        if (!options.presentationUrl) throw new Error('Missing presentation URL');
        if (!options.size || !options.size.height || !options.size.width) throw new Error('Invalid size');

        var flexPaperVars = {
            SwfFile : escape(options.presentationUrl),
            Scale : 0.6,
            ZoomTransition : 'easeOut',
            ZoomTime : 0.5,
            ZoomInterval : 0.2,
            FitPageOnLoad : true,
            FitWidthOnLoad : false,
            PrintEnabled : true,
            FullScreenAsMaxWindow : false,
            ProgressiveLoading : true,
            localeChain: 'en_US'
        };

        var params = {
            quality: 'high',
            bgcolor: '#ffffff',
            allowscriptaccess: 'sameDomain',
            allowfullscreen: 'true'
        };

        var attributes = {
            id: 'FlexPaperViewer',
            name: 'FlexPaperViewer'
        };

        function createToolbar(box, viewer) {
            $('<div>').addClass('toolbar')

                      /**
                       * Print the sheets
                       */
                      .append($('<a>').addClass('button print').text('print').click(function(event) { event.preventDefault();
                          viewer.printPaper();
                      }))

                      /**
                       * Zoom
                      .append($('<input name="zoom" type="text">').keydown(function(event) {
                          if (event.keyCode == 13) {
                              
                          }
                      }))
                       */

                      /**
                       * Toggle fullscreen button
                       */
                      .append($('<a>').addClass('button fullscreen').text('fullscreen').click(function(event) { event.preventDefault();
                          $('body').toggleClass('fullscreen');
                          $(box).toggleClass('fullscreen');

                          function zoom() {
                              try { viewer.fitHeight(); }
                              catch (e) { /* ignore me */ }
                          }

                          setTimeout(zoom, 100);
                      }))

                      /**
                       * Page number
                       */
                      .append($('<input name="page" type="text">').val(1).keydown(function(event) {
                          if (event.keyCode == 13 /*enter */) {
                              var page = parseInt($(this).val()); 
                              if (!isNaN(page) && page > 0) {
                                  viewer.gotoPage(page);
                              }
                          }
                      }))
                      .appendTo(box);
        }

        this.each(function() {
            var box = this;

            function playerReadyCallback(event) {
                if (event.success) {
                    var viewer = event.ref;
                    createToolbar(box, viewer);
                    if (typeof options.callback == 'function') {
                        options.callback.call(this, viewer);
                    }
                }
            }

            try {
            swfobject.embedSWF(
                options.viewerUrl,
                /* DOM id: */ 'presentation',
                /* width: */ options.size.width,
                /* height: */ options.size.height,
                /* swfVersion: */ '10.0.0',
                /* xiSwfUrl: */ 'playerProductInstall.swf',
                flexPaperVars, params, attributes, playerReadyCallback
            );
            } catch (e) { alert(e); }
        });
    }

})(jQuery);

var flexPaperInfo = {
    totalPages: 0
};

function onDocumentLoaded(totalPages) {
    flexPaperInfo.totalPages = totalPages;
}
