function Slider(container,left_trigger,right_trigger,options)
{
    this.container = $(container);
    try{
        this.left_trigger.hide();
        this.right_trigger.hide();
    }catch(e){

    }
    this.left_trigger = left_trigger;
    this.right_trigger = right_trigger;
    this.current_displaying = 0;
    this.tabs = [];
    this.options = $.extend(
        {
            slide_per_time: 7,
            display_per_time: 3,
            unit_tag_name: "li"
        },
        options
    );
    this.init = function()
    {
        this.register_events();
        this.tabs = this.container.find(this.options.unit_tag_name);
        this.container.css({
            width:"10000px"
        });
        this.refresh_tab();
    };
    this.refresh_tab = function(){
        this.tabs = this.container.find(this.options.unit_tag_name);
        var tabs_width = 0;
        for(var i = 0 ; i < this.tabs.length ; i++){
            tabs_width += $(this.tabs[i]).width();
        }
        var l = parseInt(this.container.css("marginLeft"));
        try{
            if (tabs_width >= this.options.cover_width || (l > 0)) {
                this.left_trigger.fadeIn();
                this.right_trigger.fadeIn();
            }else{
                this.left_trigger.fadeOut();
                this.right_trigger.fadeOut();

            };
        }catch(e){

        }
    };
    this.register_events = function()
    {
        try{
            this.left_trigger.bind("click",function(){
                this.move_left();
            }.bind(this))
            this.right_trigger.bind("click",function(){
                this.move_right();
            }.bind(this))

        }catch(e){

        }
    };
    this.move_right = function(){
        var offset = 0-(parseInt(this.container.css("marginLeft"),10) || 0);
        var distance = 0;
        var index = 0;
        for(var i = 0 ; i < this.tabs.length; i++)
        {
            distance += parseInt($(this.tabs[i]).width(),10) || 0;
            index = i;
            if (distance >= offset + this.options.cover_width) {
                break;
            };
        }
        this.moveTo(Math.min(index+this.options.display_per_time,this.tabs.length-1));
    };
    this.move_left = function(){
        var offset = 0-(parseInt(this.container.css("marginLeft"),10) || 0);
        if (offset == 0) {
            return;
        };
        var distance = 0;
        var index = 0;
        for(var i = 0 ; i < this.tabs.length; i++)
        {
            distance += parseInt($(this.tabs[i]).width(),10) || 0;
            index = i;
            if (distance >= offset) {
                break;
            };
        }
        this.moveTo(Math.max(index-this.options.display_per_time+1,0));
        // this.moveTo(Math.max((this.current_displaying - 1*this.options.display_per_time),0));
    };
    this.moveTo = function(n,call_back){
        if (n > this.tabs.length) {
            n = this.tabs.length;
        };
        if (n < 0) {
            n = 0;
        };
        var distance = 0;
        for(var i = 0 ; i < n ; ++i ){
            distance += (parseInt($(this.tabs[i]).width(),10) || 0);
        }
        var offset = 0-parseInt(this.container.css("marginLeft"),10) || 0;
        var width = parseInt($(this.tabs[n]).width(),10) || 0;
        if (distance <= offset) {
            this.container.animate(
                {
                    marginLeft: Math.min((0 - distance),0) + "px"
                },
                "normal",call_back
            );
        }else{
            if (distance > offset + this.options.cover_width - width) {
                this.container.animate(
                    {
                        marginLeft: Math.min(0,(0 - (distance - this.options.cover_width + width))) + "px"
                    },
                    "normal",call_back
                );
            };
        };
        $.each(this.options.triggers,function(index,item){
            if (index == i) {
                item.addClass("slider_active");
            }else{
                item.removeClass("slider_active");
            };
        })
        this.current_displaying = n;
        this.refresh_tab();
    };
    this.move_to_tab = function(tab_info){
        if (tab_info.is_active == true) {
            var index = TabInfo.all().indexOf(tab_info);
            this.moveTo(index);
        };
    };
    this.init();
}
