/* 
 ver 0.2
 */

(function( $ )
{
    $.fn.slideShow = function( m_options )
    {
        var setting = $.extend( {
            element: "",
            speed: 500,
            speedFast: 200,
            timeout: 2000,
            flagNumberButtons: false,
            numButtonsClass: ".b-slide-buttons",
            numButtonClassActive: "b-slide-button-active",
            numButtonClassPassive: "b-slide-button-passive",
            flagSlideLabel: false,
            slideLabel: ".b-slide-label",
            slideLabelDefault: "",
            flagClickBtn: false,
            current: 0
        }, m_options );

        $( this ).css( 'position', 'relative' );
        $.fn.slideShow._data = setting;

        var elements = $( this ).children();

        setting.countElement = elements.length;

        for ( var i = 0; i < elements.length; i++ )
        {
            $( elements[i] ).css( 'z-index', String( elements.length - i ) ).css( 'position', 'absolute' );
            $( elements[i] ).hide();
        }

        if ( setting.flagNumberButtons )
        {
            for ( var i = 0; i < elements.length; i++ )
            {
                $( setting.numButtonsClass ).append( "<a href='#'></a>" );
            }

            var parentSlideButtons = $( setting.numButtonsClass ).children();
            for ( var i = 0; i < parentSlideButtons.length; i++ )
            {
                $( parentSlideButtons[i] ).attr( 'class', setting.numButtonClassPassive );
                $( parentSlideButtons[i] ).attr( 'slideNum', i );
                $( parentSlideButtons[i] ).bind( 'click', function()
                {
                    if ( $.fn.slideShow._data.current != $( this ).attr( 'slideNum' ) )
                    {
                        $.fn.slideShow._data.flagClickBtn = true;
                        var slideButtons = $( $.fn.slideShow._data.numButtonsClass ).children();
                        $( slideButtons[$.fn.slideShow._data.current] ).attr( 'class', setting.numButtonClassPassive );

                        if ( $.fn.slideShow._timer != null )
                        {
                            window.clearTimeout( $.fn.slideShow._timer );
                            $.fn.slideShow._timer = null;
                        }
                        $( this ).attr( 'class', setting.numButtonClassActive );
                        $.fn.slideShow.showNext( { next: $( this ).attr( 'slideNum' ) } );
                    }
                    else
                    {
                        if ( $.fn.slideShow._timer != null )
                        {
                            window.clearTimeout( $.fn.slideShow._timer );
                            $.fn.slideShow._timer = null;
                        }

                        var elementName = $.fn.slideShow._data.element;
                        $.fn.slideShow._timer = window.setTimeout( function()
                        {
                            $( elementName ).slideShow.showNext();
                        }, $.fn.slideShow._data.timeout );
                    }
                    return false;
                } );
            }
            $( parentSlideButtons[0] ).attr( 'class', setting.numButtonClassActive );
        }

        var elementName = setting.element;
        $.fn.slideShow._timer = null;
        $.fn.slideShow._timer = window.setTimeout( function()
        {
            $( elementName ).slideShow.showNext();
        }, setting.timeout );
        $( elements[0] ).show();

        if ( $.fn.slideShow._data.flagSlideLabel )
        {
            var label = $( elements[0] ).attr( 'alt' );
            label = label ? label : $.fn.slideShow._data.slideLabelDefault;
            $( $.fn.slideShow._data.slideLabel ).text( label );
        }
    };

    $.fn.slideShow.showNext = function( number )
    {
        $.fn.slideShow._data.flagClickBtn = false;
        var elements = $( $.fn.slideShow._data.element ).children();

        var animateSpeed = $.fn.slideShow._data.speed;

        var nextNumber = 0;
        if ( !number )
        {
            nextNumber = ( $.fn.slideShow._data.current * 1 + 1);
            if ( nextNumber > ( elements.length - 1 ) )
            {
                nextNumber = 0;
            }
        }
        else
        {
            animateSpeed = $.fn.slideShow._data.speedFast;
            nextNumber = number.next;
        }

        if ( $.fn.slideShow._data.flagNumberButtons )
        {
            var slideButtons = $( $.fn.slideShow._data.numButtonsClass ).children();
            $( slideButtons[$.fn.slideShow._data.current] ).attr( 'class', $.fn.slideShow._data.numButtonClassPassive );
            $( slideButtons[nextNumber] ).attr( 'class', $.fn.slideShow._data.numButtonClassActive );
        }

        $( elements[$.fn.slideShow._data.current] ).stop();
        $( elements[$.fn.slideShow._data.current] ).fadeTo( animateSpeed, 0 );
        $.fn.slideShow._data.current = nextNumber;

        if ( $.fn.slideShow._data.flagSlideLabel )
        {
            var label = $( elements[nextNumber] ).attr( 'alt' );
            label = label ? label : $.fn.slideShow._data.slideLabelDefault;
            $( $.fn.slideShow._data.slideLabel ).text( label );
        }

        $( elements[nextNumber] ).fadeTo( animateSpeed, 1, function()
        {
            if ( !$.fn.slideShow._data.flagClickBtn )
            {
                if ( $.fn.slideShow._timer != null )
                {
                    window.clearTimeout( $.fn.slideShow._timer );
                    $.fn.slideShow._timer = null;
                }

                var elementName = $.fn.slideShow._data.element;
                $.fn.slideShow._timer = window.setTimeout( function()
                {
                    $( elementName ).slideShow.showNext();
                }, $.fn.slideShow._data.timeout );
            }
        } );
    };

    $.fn.slideShow.next = function()
    {
        if ( $.fn.slideShow._timer != null )
        {
            window.clearTimeout( $.fn.slideShow._timer );
            $.fn.slideShow._timer = null;
        }
        $.fn.slideShow.showNext();
    };

    $.fn.slideShow.prev = function()
    {
        if ( $.fn.slideShow._timer != null )
        {
            window.clearTimeout( $.fn.slideShow._timer );
            $.fn.slideShow._timer = null;
        }
        var prev = ( $.fn.slideShow._data.current - 1 );
        if ( prev < 0 )
        {
            prev = $.fn.slideShow._data.countElement - 1;
        }
        $.fn.slideShow.showNext( { next: prev } );
    };
})( jQuery );
