var SliderBar = new Class({
	Extends: Slider,
	Implements: Options,
	options: {
		sliderContainerObject: null,
		sliderHandleObject: null,
		sliderBarItemsObject: null,
		sliderOptions: null,
		infoObject: null,
		increment: 0,
		totIncrement: 0,
		maxRightIncrement: 0,
		numberOfItems: 0,
		numberOfVisibleItems: 0,
		selectedItem: null,
		auto: true
	},

	initialize: function(options) {
		this.setOptions(options);
		this.parent(this.options.sliderContainerObject, this.options.sliderHandleObject, this.options.sliderOptions);
		this.fx = new Fx.Morph(this.options.sliderBarItemsObject, {duration: 300, transition: Fx.Transitions.Linear});
		this.timer = 0;
		if (this.options.auto) {
			this.auto();
		} else {
		    this.set(-this.options.totIncrement/this.options.increment);
		}
		if (this.options.selectedItem) this.onSelect(this.options.selectedItem);
	},
	
	auto: function() {
		this.onNext();
	    this.timer = this.auto.delay(3000, this);
	},

	onNext: function() {
	    if (this.options.totIncrement - this.options.increment < this.options.maxRightIncrement){
	        this.options.totIncrement = 0;
	    } else {
	        this.options.totIncrement -= this.options.increment;
	    }
	    this.set(-this.options.totIncrement/this.options.increment);
	    if (this.timer) this.timer = $clear(this.timer);
	},

    onMouseOver: function(event) {
		if (this.options.auto && this.timer) this.timer = $clear(this.timer);
	},
	
	onMouseOut: function(event) {
		if (this.options.auto) this.timer = this.auto.delay(1000, this);
	},

	setInfo: function() {
	    this.options.infoObject.innerHTML = ''+ Math.ceil(((-this.options.totIncrement/this.options.increment)+1)) + ' to ' + Math.ceil(((-this.options.totIncrement/this.options.increment)+this.options.numberOfVisibleItems)) + ' of ' + this.options.numberOfItems + '';
	},
	
	onUpdate: function(val) {
        this.options.totIncrement = val*(-this.options.increment);
        if (this.fx) this.fx.cancel();
        this.fx.start({'margin-left': this.options.totIncrement});
		this.setInfo();
	},
	
	onSelect: function(item) {
		if (this.options.selectedItem != null) {
			if ($(this.options.id+'-slider-bar-preview').innerHTML) $(this.options.selectedItem+'_details').innerHTML = $(this.options.id+'-slider-bar-preview').innerHTML;
			$(this.options.id+'-slider-bar-preview').innerHTML = '';
			$(this.options.selectedItem).className=this.options.id+'-slider-item';
			$(this.options.selectedItem+'_pointer').className=this.options.id+'-slider-item-pointer';
		}
		this.options.selectedItem = item;
		$(this.options.selectedItem).className=this.options.id+'-slider-item-selected';
		$(this.options.selectedItem+'_pointer').className=this.options.id+'-slider-item-pointer-selected';
		if ($(this.options.selectedItem+'_image')) {
			if ($(this.options.selectedItem+'_image').name) {
				$(this.options.selectedItem+'_image').src=$(this.options.selectedItem+'_image').name;
				$(this.options.selectedItem+'_image').setStyle('visibility', 'visible');
			} else {
				$(this.options.selectedItem+'_image').setStyle('visibility', 'hidden');
			}
		}
		$(this.options.id+'-slider-bar-preview').innerHTML = $(this.options.selectedItem+'_details').innerHTML;
		$(this.options.selectedItem+'_details').innerHTML='';
	}
});

