(function($){
    
    $.fc_slider = {
        defaults: {
            interval : 4000,
            img_container : "#fc_slider_img",
            img_slider : "#fc_slider_img > div:first-child",
            imgs : "#fc_slider_img > div:first-child > div",
            navs : "#fc_slider_nav > div",
            caption :"#fc_slider_ovl",
            start_index : 0,
            img_width : 743,
            anim_time : 600
        }
    };
    
    var vars = {
            cur_index : null,
            cont_width : null,
            timer : null,
            img_count : null
        };
        
    var cfg = $.fc_slider.defaults;
    var wrap = null;
    
    $.fn.extend({ 
        fc_slider: function(config) {
            
            wrap = this;
            var cfg = $.extend({}, $.fc_slider.defaults, config);
            var img_cont = $(cfg.img_container);
            var img_slider = $(cfg.img_slider);
            var imgs = img_slider.find("div");
            var navs = $(cfg.navs);
            vars.cont_width = cfg.img_width;
            vars.img_count = imgs.length;

            $.each(imgs,function() {
                $(this).width(vars.cont_width);
            });
            
            navs.click(function() {
                slide_to($(this).index());
                stop_slideshow();
            });
            
            
            init_slider();
            start_slideshow();
            
        }    
    });
    
    /*function fade_to(index) {
        var img_slider = $(cfg.img_slider);
        var imgs = img_slider.find("div");
        imgs.fadeOut(200);
        $(imgs.get(index)).fadeIn(200);
    }*/
    
    function slide_to(index) {
        if(index === vars.cur_index) return;
        var img_slider = $(cfg.img_slider);
        var navs = $(cfg.navs);
        var cap = $(cfg.caption);
        if(index !== 0) {
            var margin = vars.cont_width*index;
        }
        else {
            var margin = 0;
        }
        vars.cur_index = index;

        var margin = margin*-1;
        
        $(img_slider).stop().animate({
            marginLeft : margin + "px"
        },cfg.anim_time);
        
        var capbottom = cap.outerHeight()*-1;
        var atime = cfg.anim_time/2;
        cap.stop().animate({bottom: capbottom + "px"},atime,function() {
            var txt = $($(cfg.imgs).get(index)).find("span").html();
            cap.html(txt);
            cap.animate({bottom: 0},atime);
        });
        
        highlight_nav(index);
    }
    
    function highlight_nav(index) {
        var navs = $(cfg.navs);
        navs.removeClass("active");
        $(navs.get(index)).addClass("active");
    }
    
    function init_slider() {
        wrap.mouseenter(stop_slideshow);
        wrap.mouseleave(start_slideshow);
        highlight_nav(cfg.start_index);
        slide_to(cfg.start_index);
    }
    
    function start_slideshow() {
        vars.timer = setInterval(function() {
        var next_index = vars.cur_index+1;
        if(next_index == vars.img_count) {
            next_index = 0;
        }
        slide_to(next_index);
        },cfg.interval);
        $("#fc_slider_pause").hide();
    }
    
    function stop_slideshow() {
        $("#fc_slider_pause").show();
        clearInterval(vars.timer);
    }
    
})(jQuery);
