/**
 * @author Arian Stolwijk
 */

var Slider = new Class({

    initialize: function(options){
        // Set some variables
        this.width = 750;
		this.height = 200;
		this.duration = 10000;
		this.direction = 'toLeft';
		
		this.element = $(options.element);
        if (this.element != null) {
			this.list = $E('ul', options.element);
			if (options.width != '') {
				this.width = options.width;
			}
			if (options.height != '') {
				this.height = options.height;
			}
			if (options.duration != '') {
				this.duration = options.duration;
			}
			this.tmpDuration = this.duration;
			if (options.direction != '') {
				this.direction = options.direction;
			}
			
			// Activate the functions						
			this.setListWidth();
			
			this.doubleList();
			this.marginLeft = '0';
			this.createSlider();
		}
 
     },
	   
     setListWidth: function(){
	    // Get the width of the list
        this.list.setStyle('display', 'inline');
        this.listSize = this.list.getSize();
        this.listSize = this.listSize.scrollSize;
        this.listWidth = this.listSize.x;
        this.list.setStyles({
            'display': 'block',
            'width': 2*this.listWidth,
			'overflow':'hidden',
			'margin-left': 0
        });
	},
	
	doubleList: function(){
		$ES('li',this.list).each(function(li,i){
			var clone = li.clone().injectBefore('clone');
		});
	},
		
    createSlider: function(){
	
	    // Set some css properties
        this.element.setStyles({
            width: this.width,
            height: this.height,
            overflow: 'hidden'
        });
		this.createEffect();
     },
	 
	 createEffect: function(){   
        if(this.marginLeft == ''){
			this.marginLeft = '0';
		}
		
		// Create the slide object
 		this.Slide = new Fx.Style(this.list, 'margin-left', {
            duration: this.duration,
            transition: Fx.Transitions.linear,
            onComplete: function(){
				if(this.duration != this.tmpDuration){
					this.createEffect();
				}else{
					this.startSlide('0');
				}								
				this.duration = this.tmpDuration;
            }.bind(this)
        });
        // Start the slide	
        this.startSlide(this.marginLeft);
    },
    
    startSlide: function(start){
		this.Slide.start(start,-this.listWidth);
	}
	
});
