var DreamCatcher = new Class({
	
	Implements: [Options, Events],
	
	options: {
		delay: 5000
	},
	
	initialize: function(container,options) {
		this.container = container;
		this.items = $(this.container).getElements('input[type=text]');
		this.setOptions(options);
		this.items.each(function(el) {
			el.baseValue = el.value;
			el.indicated = false;
			el.addEvent('focus',function() {
				if(el.value==el.baseValue) {
					el.value = '';
				}
			});
			el.addEvent('blur',(function() {
				if(el.value=='') {
					el.value = el.baseValue;
				}
				this.validate(el);
			}).bind(this));
		},this);
		this.beautify();
		
		$(this.container).addEvent('submit',this.validate.bind(this));
	},
	
	validate: function(elm) {
		var error = false;
		if(elm.type=='submit') {
			this.items.each(function(el) {
				if(el.value==el.baseValue || el.value=='') {
					if(el.indicated==false) {
						this.showError(el);
						el.indicated = true;
					}
					error = true;
				} else {
					if(el.indicated) {
						this.removeError(el);
					}
					el.indicated = false;
				}
			},this);
		} else {
			el = elm;
			if(el.value==el.baseValue || el.value=='') {
				if(el.indicated==false) {
					this.showError(el);
					el.indicated = true;
				}
				error = true;
			} else {
				if(el.indicated) {
					this.removeError(el);
				}
				el.indicated = false;
			}
		}
		if(error==true) {
			return false;
		} else {
			return true;
		}
	},
	
	showError: function(el) {
		var elm = el.getParent().getPrevious();
		var errdiv = new Element('div');
		errdiv.addClass('error');
		errdiv.set('opacity','0');
		var errp = new Element('p');
		errp.set('text','This field is required');
		errdiv.inject(elm,'before');
		errp.inject(errdiv);
		errdiv.fade('in');
	},
	
	removeError: function(el) {
		var elm = el.getParent().getParent().getElements('div.error');
		if(elm.length>0) {
			new Fx.Tween(elm[0],{
				property: 'opacity',
				onComplete: function() {
					elm[0].destroy();
				}
			}).start(0);
		}
	},
	
	beautify: function() {
		this.chks = $(this.container).getElements('input[type=checkbox]');
		this.chks.each(function(el) {
			el.set('opacity','0');
			var div = new Element('div');
			div.inject(el,'before');
			el.getParent().addEvent('click',function() {
				if(el.checked) {
					el.checked = false;
					div.removeClass('checked');
				} else {
					el.checked = true;
					div.addClass('checked');
				}
			});
		});
	}
	
});

window.addEvent('domready',function() {
	new DreamCatcher('frmDcatcher');
});