/**
 * Simple validation class.
 *
 * Step 1) Use the "validate-*" class names like:
 * -----------------------------------------------------------------
 * <input type="text" name="telefoon" id="telefoon" class="validate-required">
 * <div class="error-message error-message-telefoon">
 *		Vul a.u.b. uw telefoonnummer in.
 *	</div>
 *
 * Step 2) Set the "class" on the button which start validation
 * -----------------------------------------------------------------
 * <input type="submit" value="Verzenden" class="go-validate" />
 */
var Validate = new Class({
		Implements:Events,
		initialize: function() {
			this.m_email_reg = new RegExp(/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i);
			var me = this;
	
			var a_btns = $$('.go-validate');
			a_btns.each(function(oEl) {
				oEl.addEvent('click',me.validate.bind(me));
			});
			
			var a_err = $$('.error-message');
			a_err.each(function(oEl){
				oEl.setStyle('display','none');
			});
			
		}
		,validate: function(oEv) {
				this.m_errors = new Array();
				
				var a_err_mess = $$('.error-message');
				a_err_mess.each(function(oEl){
					oEl.setStyle('display','none');
				});
				
				
				var a_class_val = $$('[class^=validate');
				a_class_val.each(function(oEl){
						try {
							oEl.removeClass('error');
						}catch(e) {}
				});
				
				
				$$('.validate-email').store('validate',this).each(this.validateEmail);
				$$('.validate-required').store('validate',this).each(this.validateRequired);
				
					if(this.getErrors().length > 0) {
						oEv.stop();
						this.getErrors().each(function(oEl) {
							oEl.el.addClass('error');
							$$('.error-message-' +oEl.el.get('name')).setStyle('display','block');
						});
					}
			this.fireEvent('validated');
			return true;
		}
		,validateRequired : function(oEl) {
			if (oEl.get('value').trim() == "") {
				oEl.retrieve('validate').addError(oEl, 'required');
				return false;
			}
			return true;
		}
		,validateEmail: function(oEl) {
			if (!oEl.retrieve('validate').m_email_reg.test(oEl.get('value'))) {
				oEl.retrieve('validate').addError(oEl,'email');
			}
		}
		,getErrors: function() {
			//alert('x:'+this.m_errors);
			return this.m_errors;
		}
		,addError: function(oEl, sType) {
			this.m_errors.push({el:oEl, type:sType});
		}
			
});
window.addEvent('domready', function() {
	var valid = new Validate();
});
