/*!
* Buttons helper for fancyBox
* version: 1.0.5 (Mon, 15 Oct 2012)
* @requires fancyBox v2.0 or later
*
* Usage:
*     $(".fancybox").fancybox({
*         helpers : {
*             buttons: {
*                 position : 'top'
*             }
*         }
*     });
*
*/

(function ($) {

//Shortcut for fancyBox object
var F = $.fancybox;

//Add helper object
F.helpers.buttons = {
        defaults : {
                skipSingle : false, // disables if gallery contains single image
                position   : 'top', // 'top' or 'bottom'
                tpl        : '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:;"></a></li></ul></div>'
        },

        list : null,
        buttons: null,

        beforeLoad: function (opts, obj) {
                //Remove self if gallery do not have at least two items

                if (opts.skipSingle && obj.group.length < 2) {
                        obj.helpers.buttons = false;
                        obj.closeBtn = true;

                        return;
                }

                //Increase top margin to give space for buttons
                obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30;
        },

        onPlayStart: function () {
                if (this.buttons) {
                        this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn');
                }
        },

        onPlayEnd: function () {
                if (this.buttons) {
                        this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn');
                }
        },

        afterShow: function (opts, obj) {
                var buttons = this.buttons;

                if (!buttons) {
                        this.list = $(opts.tpl).addClass(opts.position).appendTo('body');

                        buttons = {
                                prev   : this.list.find('.btnPrev').click( F.prev ),
                                next   : this.list.find('.btnNext').click( F.next ),
                                play   : this.list.find('.btnPlay').click( F.play ),
                                toggle : this.list.find('.btnToggle').click( F.toggle ),
                                close  : this.list.find('.btnClose').click( F.close )
                        }
                }

                //Prev
                if (obj.index > 0 || obj.loop) {
                        buttons.prev.removeClass('btnDisabled');
                } else {
                        buttons.prev.addClass('btnDisabled');
                }

                //Next / Play
                if (obj.loop || obj.index < obj.group.length - 1) {
                        buttons.next.removeClass('btnDisabled');
                        buttons.play.removeClass('btnDisabled');

                } else {
                        buttons.next.addClass('btnDisabled');
                        buttons.play.addClass('btnDisabled');
                }

                this.buttons = buttons;

                this.onUpdate(opts, obj);
        },

        onUpdate: function (opts, obj) {
                var toggle;

                if (!this.buttons) {
                        return;
                }

                toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn');

                //Size toggle button
                if (obj.canShrink) {
                        toggle.addClass('btnToggleOn');

                } else if (!obj.canExpand) {
                        toggle.addClass('btnDisabled');
                }
        },

        beforeClose: function () {
                if (this.list) {
                        this.list.remove();
                }

                this.list    = null;
                this.buttons = null;
        }
};

}(jQuery));