/*
 * OBSlider V. @VERSION
 *
 * OpenBox SoftWare - July 2010
 * Guga
 *
 */

(function($) {
    jQuery.fn.obslider = function(opts){
        
        // Default init values
        defaults = {
            forwardClass: 'ob-slider-forward',
            backwardClass: 'ob-slider-backward',
            forwardClassTop: '30px',
            backwardClassTop: '30px',
            contentElement: 'ob-slider',
            textBannerClass: 'ob-txt-slide',
            timerTiming: 5000,
            textBannerOpacity: 0.7
        }

        // Override defaults il options are passed
        if (opts) jQuery.extend(defaults, opts);

        forwardClass = '.' + defaults.forwardClass;
        backwardClass = '.' + defaults.backwardClass;
        forwardClassTop = defaults.forwardClassTop;
        backwardClasTop = defaults.backwardClassTop;
        contentElement = '#' + defaults.contentElement;
        sldShiftWidth = $(contentElement).children().next().css('width');
        sldShiftWidth = parseInt(sldShiftWidth.substring(0, sldShiftWidth.length-2));
        timerTiming = defaults.timerTiming;
        textBannerClass = '.' + defaults.textBannerClass;
        textBannerOpacity = defaults.textBannerOpacity;
        textBannerHeight = $(textBannerClass).css('height');
        textBannerHeight = textBannerHeight.substring(0, textBannerHeight.length-2);

        // Plugin Methods
        var methods = {
            startSliding: function() {
                preventSlidingAnim = false;
            },
            stopSliding: function() {
                preventSlidingAnim = true;
            },
            init: function() {
            }
        };

        jQuery.fn.obslider = function( method ) {
            // Method calling logic
            if ( methods[method] ) {
                return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
            } else if ( typeof method === 'object' || ! method ) {
                return methods.init.apply( this, arguments );
            } else {
                $.error( 'Method ' +  method + ' does not exist on jQuery.obslider' );
            }
        };

        // Main animation method
        function animateSlider(animDir){
            if(!preventSlidingAnim){
                preventSlidingAnim = true;
                if(animDir == 'l'){
                    sldWidth = -sldShiftWidth;
                } else {
                    sldWidth = sldShiftWidth;
                }

                curPos = parseInt(jQuery(contentElement).css("left")) ;

                newPos = curPos + sldWidth;

                jQuery(contentElement).stop().animate({
                    left: newPos
                },
                "slow",
                function(){
                    preventSlidingAnim = false;
                    if(animDir == 'l'){
                        curSlidePos--;
                        if(curSlidePos == 0){
                            jQuery(backwardClass).fadeOut("fast");
                        } else {
                            jQuery(forwardClass).fadeIn("fast");
                        }

                    } else {
                        curSlidePos++;
                        if(curSlidePos == totSlides-1){
                            jQuery(forwardClass).fadeOut("fast");
                        } else {
                            jQuery(backwardClass).fadeIn("fast");
                        }
                    }
                });
            }
        }

        // Cycle all mached elements
        this.each(function() {
            // Slider init
            preventAutoSliding = false;
            preventSlidingAnim = false;
            curSliderDir = 'r';
            $('#sld-video').remove();

            totSlides = jQuery(textBannerClass).length;
            
            curSlidePos = totSlides - 1;
            jQuery(textBannerClass).fadeTo(0, textBannerOpacity);
            jQuery(forwardClass).hide();
            jQuery(forwardClass).css('top', forwardClassTop);
            jQuery(backwardClass).css('top', backwardClasTop);

            // Click on backward/forward handles
            jQuery(forwardClass).click(function(e) {
                e.preventDefault();
                if (curSlidePos < totSlides-1){
                    animateSlider('r');
                    curSliderDir = 'r';
                    preventAutoSliding = true;
                    jQuery(this).oneTime(timerTiming,null,function() {
                        preventAutoSliding = false;
                    });
                }
            });

            jQuery(backwardClass).click(function(e) {
                e.preventDefault();
                if (curSlidePos > 0){
                    animateSlider('l');
                    curSliderDir = 'l';
                    preventAutoSliding = true;
                    jQuery(this).oneTime(timerTiming,null,function() {
                        preventAutoSliding = false;
                    });
                }
            });

            // Stop animation if mouse over handles
            jQuery('.forwardClass,.backwardClass').mouseover(function() {
                preventAutoSliding = true;
            });
            
            // Start animation on mouse out of handles
            jQuery('.forwardClass,.backwardClass').mouseout(function() {
                preventAutoSliding = false;
            });

            // Timed sliding
            jQuery(this).everyTime(timerTiming,null,function() {
                if(!preventAutoSliding){
                    if(curSliderDir == 'l'){
                        if(curSlidePos == 0){
                            curSliderDir = 'r';
                            animateSlider('r');
                        } else {
                            animateSlider('l');
                        }
                    } else {
                        if(curSlidePos == totSlides-1){
                            curSliderDir = 'l';
                            animateSlider('l');
                        } else {
                            animateSlider('r');
                        }
                    }
                }
            });

            // Show banner on mouse over slider
            jQuery(contentElement).mouseover(function(){
                jQuery(textBannerClass).stop().animate({
                    //bottom: 0
                    bottom: -textBannerHeight
                },
                "slow",
                function(){
                    preventAutoSliding = true;
                });
            });

            // Hide banner on mouse out of slider
            jQuery(contentElement).mouseout(function(){
                jQuery(textBannerClass).stop().animate({
                    //bottom: -textBannerHeight
                    bottom: -textBannerHeight
                },
                "slow",
                function(){
                    preventAutoSliding = false;
                });
            });
        });
        return this;
    };
})(jQuery);

