//class is in
var Typewriter = new Class({

	//implements
	Implements: [Options, Events],

	//options
	options: {
		container: $(document.body),
		message: '',
		delay: 150,
		cursor: 0,
		pause: 5000
	},

	//initialization
	initialize: function(options) {
		//set options
		this.setOptions(options);
		// create a 'link container' for if it is needed
		this.linkcontainer = new Element('a', {
			html: '',
			href: '#'
		});
	},

	//start the typewriter
	start: function() {

		if (this.options.message.getElement('a')){
			this.linkcontainer.set({
				'href': this.options.message.getElement('a').get('href'),
				'html': ''
			}).inject(this.options.container);
			this.options.isLink = true;
		} else {
			this.linkcontainer.dispose();
			this.options.isLink = false;
		}
		this.options.message = this.options.message.get('text');

		//for every letter
		for(x = 0; x < this.options.message.length; x++)
		{
			//spit out the letter
			var id = this.setLetter.delay(this.options.delay * x,this);
		}
		var self = this;
		(function(){
			self.fireEvent('complete');
		}).delay((this.options.delay * this.options.message.length) + this.options.pause);
	},

	//place the newest letter in the container
	setLetter: function() {

		if (this.options.isLink){
			this.linkcontainer.set('html',this.options.container.get('text') + '' + this.options.message.charAt(this.options.cursor));
		}
		else {
			this.options.container.set('html',this.options.container.get('html') + '' + this.options.message.charAt(this.options.cursor));
		}

		//increment cursor
		this.options.cursor++;
	}
});
