
var Hermes = new Class({
	Implements: [Options],
	initialize: function(sElement, cOptions){
		this.setOptions(cOptions);
		this.element = $(sElement);
		this.elementWrap = null;
		this.scrollFx = null;
		
		this.timeoutID = 0;
		
		if(this.element.tagName != 'UL' && this.element.tagName != 'OL') alert('List must use a UL or OL list');
	},
	
	options: {
		pause: 4000,
		direction: 'up',
		height: 150,
		displayItems: 3,
		scrollItems: 1,
		speed: 2000,
		target: '',
		transition: 'expo:out',
		width: 250
	},
	
	render: function(){
		this.element.addEvents({
			'mouseenter': function(){
				this.pause();
			}.bind(this),
			'mouseleave': function(){
				this.resume();
			}.bind(this)
		});
		
		var oList = this.element.clone().cloneEvents(this.element);
		oList.setStyles({
			position: 'absolute',
			top: '0px'
		});
		
		oList.getChildren().setStyles({
			height: this.options.height + 'px',
			padding: '0px',
			border: 'solid 0px red'
		});
		
		var oBlock = new Element('div').setStyles({
			display: 'block',
			position: 'relative',
			width: this.options.width + 'px',
			height: (this.options.height * this.options.displayItems) + 'px',
			overflow: 'hidden'
		}).inject(this.element.parentNode);
		
		oList.inject(oBlock);
		this.element.destroy();
		this.element = oList;
		
		this.scrollFx = new Fx.Morph(this.element, {
			duration: this.options.speed, 
			transition: this.options.transition, 
			wait: true,
			onComplete: function(){
				this.resume();
			}.bind(this)
		});
		
		this.resume();
	},
	
	scroll: function(){
		var oBuffer = null;
		
		this.scrollFx.start({
			top: [0, ((this.options.height * this.options.scrollItems) * -1)]
		}).chain(function(){
			this.replaceItems();
		}.bind(this));
		
	},
	
	replaceItems: function(){
		for(var nIndex = 0; nIndex < this.options.scrollItems; nIndex++){
			if(this.element.getFirst()) this.element.getFirst().inject(this.element, 'bottom');
		}
		this.element.setStyle('top', '0px');
	},
	
	pause: function(){
		$clear(this.timeoutID);
		this.scrollFx.cancel();
	},
	
	resume: function(){
		this.timeoutID = this.scroll.bind(this).delay(this.options.pause);
		//this.scrollFx.resume();
	}
	
});

