/*global jQuery*/
(function($) {
    $.fn.slideshow = function(params) {
        // apply defaults
        var params = $.extend({
            data: [],
            slide_duration: 4000,
            panning: true,
            fading: true,
            auto_play: false,
            loop: true
        }, params);

        return this.each(function () {
            var slideshow = $(this);
            var viewer = null;

            $(this).data("params", params);

            slideshow.unbind("click").bind("click", function () {
                slideshow[0].startViewer();
                return false;
            });

            this._add = function (resource) {
                if (viewer) {
                    viewer.add(resource.url, resource.name);
                }
            }

            // =================================================================
            //	Public API
            // =================================================================
            this.addResources = function (resources) {
                var params = slide_obj.data("params");

                for (var i = 0; i < resources.length; i++) {
                    params.data.push(resources[i]);
                    this._add(resources[i]);
                }

                slideshow.data("params", params);
            };

            this.setResources = function (resources) {
                var params = slide_obj.data("params");
                params.data = [];
                slideshow.data("params", params);

                this.initViewer();
                this.addResources(resources);
            };

            this.initViewer = function () {
                var params = slideshow.data("params");
                viewer = new PhotoViewer();
                viewer.setSlideDuration(params.slide_duration);

                if (params.panning) {
                    viewer.enablePanning();
                } else {
                    viewer.disablePanning();
                }

                if (params.fading) {
                    viewer.enableFading();
                } else {
                    viewer.disableFading();
                }

                if (params.auto_play) {
                    viewer.enableAutoPlay();
                } else {
                    viewer.disableAutoPlay();
                }

                if (params.loop) {
                    viewer.enableLoop();
                } else {
                    viewer.disableLoop();
                }
                for (var i = 0; i < params.data.length; i++) {
                    this._add(params.data[i]);
                }
            };

            this.startViewer = function () {
                viewer.show(0);
            };

            // Initialize slideshow
            this.initViewer();
        });
    };
})(jQuery);