(function($){
    $.fn.salah_slider = function(options){
        var defaults = {
            width: 400,
            height: 400,
            speed: 3000,
            easing: "",
            next:'',
            prev:'',
            curr_slide:1,
            dir:'left',
            slides_no:1,
            interval:0,
            active : 'active',
            slides_cont:'.slides',
            children:'li',
            slider:'.slider',
            slider_sub:'a',
            flexible:false

        };
        var options = $.extend(defaults, options);
        return this.each(function(){
            var slide = $(this);
            switch(options.dir){
                case "up":
                    $(options.slides_cont,slide).css({
                        "height":($(options.slides_cont+" "+options.children,slide).length*options.height)+"px",
                        'top':'0px',
                        'bottom':'auto'
                    });
                    $(options.slides_cont+' '+options.children,slide).css({
                        "height":options.height
                        });
                    break;
                case "down":
                    $(options.slides_cont,slide).css({
                        "height":($(options.slides_cont+" "+options.children,slide).length*options.height)+"px",
                        'bottom':'0px',
                        'top':'auto'
                    });
                    $(options.slides_cont+' '+options.children,slide).css({
                        "height":options.height
                        });
                    break;
                case "right":
                    if(options.flexible==true){
                            newheight=($('ul.slides>li:eq('+(0)+')',slide).height());
                            $(options.slides_cont,slide).parent().stop().animate({
                            'height':(newheight+'px')
                            },options.speed/2,function(){
                                newheight=($('ul.slides>li:eq('+(0)+')',slide).height());
                                $(options.slides_cont,slide).parent().animate({
                                'height':(newheight+'px')
                                },100);
                            });

                        }
                    $(options.slides_cont,slide).css({
                        "width":($(options.slides_cont+" "+options.children,slide).length*options.width)+"px",
                        'right':'0px',
                        'left':'auto'
                    });
                    $(options.slides_cont+' '+options.children,slide).css({
                        "width":options.width
                        });
                    break;
                case "left":
                default :
                    if(options.flexible==true){
                            newheight=($('ul.slides>li:eq('+(0)+')',slide).height());
                            $(options.slides_cont,slide).parent().stop().animate({
                            'height':(newheight+'px')
                            },options.speed/2,function(){
                                newheight=($('ul.slides>li:eq('+(0)+')',slide).height());                                
                                $(options.slides_cont,slide).parent().animate({
                                'height':(newheight+'px')
                                },100);
                            });
                            
                        }
                    $(options.slides_cont,slide).css({
                        "width":($(options.slides_cont+" "+options.children,slide).length*options.width)+"px",
                        'left':'0px',
                        'right':'auto'
                    });
                    $(options.slides_cont+' '+options.children,slide).css({
                        "width":options.width
                        });
                    break;
            }
                
            $(options.slider+" "+options.slider_sub,slide).removeClass(options.active);
            $(options.slider+" "+options.slider_sub+":first",this).addClass(options.active);
            $(options.slider+" "+options.slider_sub,slide).click(function(){			
                options.curr_slide=$(options.slider+" "+options.slider_sub,slide).index(this)+1;
                move_slides(options.curr_slide);
                return false
            });
			
            var next=function next(){
                options.curr_slide+=options.slides_no;
                if(options.curr_slide>$(options.slides_cont+" "+options.children,slide).length)
                    options.curr_slide=options.slides_no;
                move_slides(options.curr_slide);
                if(options.interval>0){
                    setTimeout(next,options.interval);
                }
                return false;
            }
            $(options.next,slide).click(next);

            $(options.prev,slide).click(function(){
                options.curr_slide-=options.slides_no;
                if(options.curr_slide<=0)
                    options.curr_slide=$(options.slides_cont+" "+options.children,slide).length;
                move_slides(options.curr_slide);
                return false;
            })

            if(options.interval>0){
                setTimeout(next,options.interval);
            }
			
            function move_slides(slide_num){
                num= slide_num;
                $(options.slider+" "+options.slider_sub,slide).removeClass(options.active);
                $(options.slider+" "+options.slider_sub+":nth-child("+(options.curr_slide)+")",slide).addClass(options.active);
                switch(options.dir){
                    case "up":
                        newpos=-(num-options.slides_no)*options.height;
                        $(options.slides_cont,slide).stop().animate({
                            "top":newpos+"px"
                        },options.speed,options.easing);
                        break;
                    case "down":
                        newpos=-(num-options.slides_no)*options.height;
                        $(options.slides_cont,slide).stop().animate({
                            "bottom":newpos+"px"
                        },options.speed,options.easing);
                        break;
                    case "right":
                        newpos=-(num-options.slides_no)*options.width;
                        if(options.flexible==true){
                            newheight=($('ul.slides>li:eq('+(num-1)+')',slide).height());
                            $(options.slides_cont,slide).parent().stop().animate({
                            'height':(newheight+'px')
                            },options.speed/2);
                            $(options.slides_cont,slide).stop().animate({
                            "right":newpos+"px",'height':(newheight+'px')
                            },options.speed,options.easing);
                        }else{
                        $(options.slides_cont,slide).stop().animate({
                            "right":newpos+"px"
                        },options.speed,options.easing);
                        }
                        break;
                    case "left":
                    default :
                        newpos=-(num-options.slides_no)*options.width;
                        if(options.flexible==true){
                            newheight=($('ul.slides>li:eq('+(num-1)+')',slide).height());
                            $(options.slides_cont,slide).parent().stop().animate({
                            'height':(newheight+'px')
                            },options.speed/2);
                            $(options.slides_cont,slide).stop().animate({
                            "left":newpos+"px",'height':(newheight+'px')
                            },options.speed,options.easing);
                        }else{
                            $(options.slides_cont,slide).stop().animate({
                            "left":newpos+"px"
                            },options.speed,options.easing);
                        }
                        
                        break;
                }
            }
        });
    };
})(jQuery);
