var formElements = new Class({
	/*** Implements ***/
	Implements: [Options],
	
	/*** Options ***/
	options: {
		elements       : 'formFx',
		styles         : ['color','background-color','border-color'],
		focusClass     : 'onFocus',
		blurClass      : 'onBlur',
		notEmptyClass  : 'nonEmpty',
		morphClass     : 'focusFx',
		transitionFx   : 'cubic:out',
		transitionTime : null
	},
	/*** Initialization ***/
	initialize: function(options) {
		this.setOptions(options);
		this.inputEvents();
	},
	/*** Methods ***/
	inputEvents : function(){
		var self = this;
		/*** For each element with class 'formFx' ***/
		$$('.'+self.options.elements).each(function(el) {
			/*** Get the label associated with the inputer field ***/
			var labels = el.getPrevious('label');
			/*** Get orignal styles so we can revert to them on blur ***/
			var origStyles = el.getStyles(self.options.styles);
			var blurColor = $$('label').getStyle('color');
			/*** Morph settings ***/
			el.set('morph', {duration: self.options.transitionTime, transition:self.options.transitionFx});
			el.addEvents({
				/*** On focus ***/
				'load': function() {
					(el.value == '' ? labels.morph('.'+self.options.blurClass) : labels.morph('.'+self.options.notEmptyClass));
				},
				/*** On focus ***/
				'focus': function() {
					el.morph('.'+self.options.morphClass);
					labels.morph('.'+self.options.focusClass);
				},
				/*** On blur ***/
				'blur': function() {
					el.morph(origStyles);
					(el.value == '' ? labels.morph('.'+self.options.blurClass) : labels.morph('.'+self.options.notEmptyClass));
				}
			});
		});
	}
});

/*** Autoloading Codeblock ***/
var runClass = function() {
	var form = new formElements({
		transitionTime : 400
	});
};
