//SKIP-COMPRESSION
CH.ns(function() {with(CH) {
	Slidezilla = Class.create({
		options: {}, list_count: 0,  container_id: null, current_index: 0, li_size: 0, anim_done: true, ul: null,
		
		initialize: function(container_id, options) {
			this.setOptions(options);
			this.container_id = container_id;
			this.ul = $$('#' + container_id + ' ul')[0];
			container = $(container_id);
			this.button_top = $A(container.getElementsByClassName(this.options.top_class))[0];
			this.button_bottom = $A(container.getElementsByClassName(this.options.bottom_class))[0];
			this.button_up = $A(container.getElementsByClassName(this.options.up_class))[0];
			this.button_down = $A(container.getElementsByClassName(this.options.down_class))[0];
			this.list_count = this.ul.getElementsByTagName("li").length;
			this.current_index = 0;
		},
		
		check_bottom: function(id, delta, offset_arg){

            if(!this.active) {
				
                this.active = true;

                this.down(-delta);

				var offset = 3;
				if(offset_arg) {
					offset = offset_arg;
				}
                if(vidplaylist.the_list.oldest_loaded_id > 0){
                    if((this.list_count - this.current_index) <= (this.options.num_visible + offset)){
                        new Req.ajax({
                            url: '/ajax/item/refresh_continuous_vids_list/',
                            options: {
                                parameters: 'item_id='+id+'&action=older',
                                onComplete: function() {
                                    sz.list_count = sz.ul.getElementsByTagName("li").length;
                                    sz.active = false;
                                }
                            }
                        });
                    }
                    else{
                        this.list_count = this.ul.getElementsByTagName("li").length;
                        this.active = false;
                    }
                }
                else{
                    this.active = false;
                }

            }
            else{
                return false;
            }
        },
		check_top: function(id, delta, offset_arg){

            if(!this.active) {

                this.active = true;
				
				this.up(delta);
				
				var offset = 0;
				if(offset_arg) {
					offset = offset_arg;
				}
                if(vidplaylist.the_list.newest_loaded_id > 0){
                    if(this.current_index + 1 < this.options.num_visible){
                        success = new Req.ajax({
                            url: '/ajax/item/refresh_continuous_vids_list/',
                            options: {
                                parameters: 'item_id='+id+'&action=newer&delta='+delta,
                                onComplete: function(){
                                    sz.list_count = sz.ul.getElementsByTagName("li").length;
                                    sz.active = false;
                                }
                            }
                        });
                    }
                    else{
                        this.list_count = this.ul.getElementsByTagName("li").length;
                        this.active = false;
                    }
                }
                else{
                    this.active = false;
                }
            }
            else{
                return false;
           } 
        },
		down: function(delta) {
            if(!delta)
                delta = -1;

			if (this.anim_done != true) {
	      		return false;
			}
			
		    if (this.current_index + this.options.num_visible + this.options.increment <= this.list_count) {
				this._scroll(delta);
			} else {
				this._scroll(-(this.list_count - (this.current_index + this.options.num_visible)));
			}
			if((this.list_count - (this.current_index + this.options.num_visible)) == 0) {
				//Element.addClassName(this.button_bottom, this.options.disabled_class);
				//Element.addClassName(this.button_down, this.options.disabled_class);
			}
            
			Element.removeClassName(this.button_top, this.options.disabled_class);
			Element.removeClassName(this.button_up, this.options.disabled_class);
		},
		
		up: function(delta) {
            if(!delta)
                delta = 1;

			if (this.anim_done != true) {
	      		return false;
			}
			
		    var inc = delta;
	
		    if (this.current_index - inc < 0) {
				inc = this.current_index;
		    }
		    
		    this._scroll(inc);
		    if (this.current_index == 0) {
				Element.addClassName(this.button_top, this.options.disabled_class);
				Element.addClassName(this.button_up, this.options.disabled_class);
		    }
		    
		    Element.removeClassName(this.button_bottom, this.options.disabled_class);
			Element.removeClassName(this.button_down, this.options.disabled_class);
		    
		},
		
		top: function() {
			if (this.anim_done != true) {
	      		return false;
			}
	
			this._scroll(this.current_index);
			
			Element.removeClassName(this.button_bottom, this.options.disabled_class);
			Element.removeClassName(this.button_down, this.options.disabled_class);
			Element.addClassName(this.button_top, this.options.disabled_class);
			Element.addClassName(this.button_up, this.options.disabled_class);
		},
		
		bottom: function() {
			if (this.anim_done != true) {
	      		return false;
			}
			
			var inc = this.list_count - this.current_index - this.options.num_visible;
			this._scroll(-inc);
	
			Element.addClassName(this.button_bottom, this.options.disabled_class);
			Element.addClassName(this.button_down, this.options.disabled_class);
			Element.removeClassName(this.button_top, this.options.disabled_class);
			Element.removeClassName(this.button_up, this.options.disabled_class);
			
		},
		
		_scroll: function(delta) {
		    this.anim_done = false;
		    
		    if(this.li_size <= 0) {
				this.li_size = this._get_li_element_size();
		    }
			new Effect.MoveBy(this.ul, delta * this.li_size, 0, {duration: 0.3, afterFinish: function() {this.anim_done = true}.bind(this)});
	
		    this.current_index -= delta;
	
	  	},
	  
		_get_li_element_size: function() {
			var li = $(this.ul.getElementsByTagName("li")[0]);
			return li.getDimensions().height + parseFloat(li.getStyle("margin-top")) + parseFloat(li.getStyle("margin-bottom"));
	  	},
		_selected_in_view: function() {
			var inview = 0;
			for(var i=this.current_index; i<this.current_index + this.options.num_visible; i++) {
				var tempelement = $(this.ul.getElementsByTagName("li")[i]);
				if(tempelement.hasClassName('selected')){
					inview = 1;
				}
			}
			return inview;
		},
	  	setOptions: function(options) {
			this.options = {
				num_visible: 4,
	      		increment: 1,
	      		content_class: 'content',
	      		up_class: 'slide_up',
	      		down_class: 'slide_down',
	      		top_class: 'slide_top',
	      		bottom_class: 'slide_bottom',
	      		disabled_class: 'disabled'
			};
			Object.extend(this.options, options || {});
		}
       
	});
}});
