/*
bxCarousel v1.0
Plugin developed by: Steven Wanderski
http://bxcarousel.com
http://stevenwanderski.com

Released under the GPL license:
http://www.gnu.org/licenses/gpl.html
*/

(function($){
    $.fn.bxCarousel=function(options){
        var defaults={
            move:4,
            display_num:4,
            speed:500,
            width:467,
            height:467,
            margin:0,
            auto:false,
            auto_interval:2000,
            auto_dir:'next',
            auto_hover:false,
            next_text:'next',
            next_image:'',
            prev_text:'prev',
            prev_image:'',
            controls:true
        };

        var options=$.extend(defaults,options);
        return this.each(function(){
            var $this=$(this);
            var li=$this.find('li');
            var first=0;
            var fe=0;
            var last=options.display_num-1;
            var le=options.display_num-1;
            var is_working=false;
            var j='';
            var clicked=false;
            li.css({
                'float':'left',
                'listStyle':'none',
                'marginRight':options.margin
                });
            var ow=li.outerWidth(true);
            wrap_width=(ow*options.display_num)-options.margin;
            var seg=ow*options.move;
            $this.wrap('<div class="bx_container"></div>').width(999999);
            if(options.controls){
                if(options.next_image!=''||options.prev_image!=''){
                    var controls='<a href="" class="prev"><img src="'+options.prev_image+'"/></a><a href="" class="next"><img src="'+options.next_image+'"/></a>';
                }
                else{
                    var controls='<a href="" class="prev">'+options.prev_text+'</a><a href="" class="next">'+options.next_text+'</a>';
                }
            }
        $this.parent('.bx_container').wrap('<div class="bx_wrap"></div>').css({
            'position':'relative',
            'overflow':'hidden',
            'width':+options.width,
            'height':+options.height
            }).before(controls);
            var w=li.slice(0,options.display_num).clone();
            var last_appended=(options.display_num+options.move)-1;
            $this.empty().append(w);
            get_p();
            get_a();
            $this.css({
            'position':'relative',
            'left':-(seg)
            });
        $this.parent().siblings('.next').click(function(){
            slide_next();
            clearInterval(j);
            clicked=true;
            return false;
        });
        $this.parent().siblings('.prev').click(function(){
            slide_prev();
            clearInterval(j);
            clicked=true;
            return false;
        });
        if(options.auto){
            start_slide();
            if(options.auto_hover&&clicked!=true){
                $this.find('li').live('mouseenter',function(){
                    if(!clicked){
                        clearInterval(j);
                    }
                });
            $this.find('li').live('mouseleave',function(){
                if(!clicked){
                    start_slide();
                }
            });
            
        }
    }
function start_slide(){
    if(options.auto_dir=='next'){
        j=setInterval(function(){
            slide_next()
            },options.auto_interval);
    }else{
        j=setInterval(function(){
            slide_prev()
            },options.auto_interval);
    }
}
function slide_next(){
    if(!is_working){
        is_working=true;
        set_pos('next');
        $this.animate({
            left:'-='+seg
            },options.speed,function(){
            $this.find('li').slice(0,options.move).remove();
            $this.css('left',-(seg));
            get_a();
            is_working=false;
        });
    }
}
function slide_prev(){
    if(!is_working){
        is_working=true;
        set_pos('prev');
        $this.animate({
            left:'+='+seg
            },options.speed,function(){
            $this.find('li').slice(-options.move).remove();
            $this.css('left',-(seg));
            get_p();
            is_working=false;
        });
    }
}
function get_a(){
    var str=new Array();
    var lix=li.clone();
    le=last;
    for(i=0;i<options.move;i++){
        le++
        if(lix[le]!=undefined){
            str[i]=$(lix[le]);
        }else{
            le=0;
            str[i]=$(lix[le]);
        }
    }
$.each(str,function(index){
    $this.append(str[index][0]);
});
}
function get_p(){
    var str=new Array();
    var lix=li.clone();
    fe=first;
    for(i=0;i<options.move;i++){
        fe--
        if(lix[fe]!=undefined){
            str[i]=$(lix[fe]);
        }else{
            fe=li.length-1;
            str[i]=$(lix[fe]);
        }
    }
$.each(str,function(index){
    $this.prepend(str[index][0]);
});
}
function set_pos(dir){
    if(dir=='next'){
        first+=options.move;
        if(first>=li.length){
            first=first%li.length;
        }
        last+=options.move;
        if(last>=li.length){
            last=last%li.length;
        }
    }else if(dir=='prev'){
    first-=options.move;
    if(first<0){
        first=li.length+first;
    }
    last-=options.move;
    if(last<0){
        last=li.length+last;
    }
}
}
});
}
})(jQuery);
