var Marquee = new Class({
    initialize: function(element, _options) {
		this.options = $extend({
			steps: 1,
			speed: 40,
            startPosition: 100,
			pauseOnOver: true
	    }, _options || {} );
	    this.timer = null;
	    this.marqueeElement = element;
	    this.constructMarquee();
	},
	constructMarquee: function() {
		var el = this.marqueeElement;
        this.setStartPos();
        if(this.options.pauseOnOver){this.addMouseEvents();}
		this.timer = this.startMarquee.delay(this.options.speed, this);
	},
	setStartPos: function(){
        this.marqueeElement.setStyle( 'margin-left', this.options.startPosition );
	},
	addMouseEvents : function(){
        this.marqueeElement.addEvents({
            'mouseenter' : function(me){
                this.clearTimer();
            }.bind(this),
            'mouseleave' : function(me){
                this.timer = this.startMarquee.delay(this.options.speed, this);
            }.bind(this)
        });
	},
    startMarquee: function(){
        var pos = this.marqueeElement.getStyle('margin-left').toInt();
        this.marqueeElement.setStyle( 'margin-left', ( pos - this.options.steps ) + 'px' );
        this.checkEnd(pos);
        this.timer = this.startMarquee.delay(this.options.speed, this);
    },
    resumeMarquee: function(){
        this.stopMarquee();
        if(this.options.pauseOnOver){this.addMouseEvents();}
        this.timer = this.startMarquee.delay(this.options.speed, this);
    },
    stopMarquee: function(){
        this.clearTimer();
        this.marqueeElement.removeEvents();
    },
    clearTimer: function(){
        $clear(this.timer);
    },
    checkEnd: function(pos){
        if(pos < -this.marqueeElement.getCoordinates().width.toInt())
            this.marqueeElement.setStyle('margin-left', this.options.startPosition);
    }
});