/* Copyright (c) 2008 Gabe Antypas (gabe@mezzagrille.com)
 * MIT (http://www.opensource.org/licenses/mit-license.php) licensed.
 *
 * Title: SlideBox
 * Version: 1.0
 *
 * Requires:
 *   jQuery 1.2+
 *   Dimensions (http://plugins.jquery.com/project/dimensions)
 */

(function($) {
    jQuery.fn.mezza_slideBox = function(options){
        
        // default values
        var defaults = {
            sb_img_path: "/images/carousel/",           //Location path of the Slide Box images.
            sb_img_name: "rinkoimage",          //Slide Box image name without slide number identifier.
            sb_img_ext: ".jpg",                     //Slide Box image file extension.
            fout_speed: 300,                        //Fade out speed.
            fin_speed: 400,                         //Fade in speed.
            num_slides: 8,                          //This defines total number of slides.
            autoplay_speed: 5000,                   //This defines the amount of time before the next slide loads.
            total_ctrl_elem: 3                      //This defines however many non slide elements exist under #controls.
        };
        //--

        //jQuery extend
        var options = $.extend(defaults, options);
        //--
        
        return this.each(function() {  
         
            //Firt child image element of the div labeled #slide_box.   
            var sb_img = $(this); // (sb_img: $("#slide_box img:first-child"), <- Was used originaly as a default value, but was extrapolated into plugin.    
            //Internal Global Variables
            var cur_slide = 1;
            var slide_timer;
            var play_is_on = false;
            //--
            
            //Initialize Slide Box
            sb_img.attr({src: options.sb_img_path + options.sb_img_name + cur_slide + options.sb_img_ext});
            sb_img.fadeIn(options.fin_speed);
            $("#slide_1").addClass("selected");
            //--
            
            //Events            
            $("#ctrl_play_pause").toggle(function(){
                play_is_on = true;
                clearInterval(slide_timer);
                $(this).removeClass("ctrlPlay");
                $(this).addClass("ctrlPause");
                autoPlay("$('#ctrl_forward').trigger('click', '1');", options.autoplay_speed);
            }, function(){
                play_is_on = false;
                clearInterval(slide_timer);
                $(this).removeClass("ctrlPause");
                $(this).addClass("ctrlPlay");
            });

            $("#ctrl_forward").click(function (e, play) {
                cur_slide++;

                if(cur_slide > options.num_slides) {
                  cur_slide = 1;
                }

                resetPlayButton(play);
                slideImg();
                setSlideStyle(cur_slide);
            });

            $("#ctrl_back").click(function () {
                cur_slide--;

                if(cur_slide == 0) {
                  cur_slide = options.num_slides;
                }

                resetPlayButton();
                slideImg();
                setSlideStyle(cur_slide);
            });

            $("#slide_1").click(function () {
                resetPlayButton();
                slideImg(1);
                setSlideStyle(1);
            });

            $("#slide_2").click(function () {
                resetPlayButton();
                slideImg(2);
                setSlideStyle(2);
            });

            $("#slide_3").click(function () {
                resetPlayButton();
                slideImg(3);
                setSlideStyle(3);
            });

            $("#slide_4").click(function () {
                resetPlayButton();
                clearInterval(slide_timer);
                slideImg(4);
                setSlideStyle(4);
            });

            $("#slide_5").click(function () {
                resetPlayButton();
                clearInterval(slide_timer);
                slideImg(5);
                setSlideStyle(5);
            });

            $("#slide_6").click(function () {
                resetPlayButton();
                clearInterval(slide_timer);
                slideImg(6);
                setSlideStyle(6);
            });

            $("#slide_7").click(function () {
                resetPlayButton();
                clearInterval(slide_timer);
                slideImg(7);
                setSlideStyle(7);
            });
            
            $("#slide_8").click(function () {
                resetPlayButton();
                clearInterval(slide_timer);
                slideImg(8);
                setSlideStyle(8);
            });
            //--

            //Methods
            var autoPlay = function(method, speed) {
                slide_timer = window.setInterval(method, speed);
            };
            
            var slideImg = function(next_slide){
                if(next_slide){ cur_slide = next_slide;} 
                sb_img.fadeOut(options.fout_speed, function(){
                    sb_img.attr({src: options.sb_img_path + options.sb_img_name + cur_slide + options.sb_img_ext, style: "display:none"});
                    sb_img.fadeIn(options.fin_speed);
                });
            };

            var setSlideStyle = function(slide_num){
                $("#controls a").each(function(i){
                    var pattern = /^slide*/i;
                    if (pattern.exec(this.id)){
                        if( (i - (options.total_ctrl_elem - 1)) != slide_num ){    
                            $(this).removeClass("selected");
                        } else {
                            $(this).addClass("selected");
                        }    
                    }
                });
            }

            var resetPlayButton = function(play){
                if(play == undefined && play_is_on){
                    $("#ctrl_play_pause").click();
                }
            }
            //--
        });
    }; // end : jQuery.fn.mezza_slideBox
})(jQuery);
