Ext.namespace('Ext.ux');
Ext.ux.ValidateForm = function(form){
	this.form = form;
	this.formel = Ext.get(form);

	/* regexp */
	//this.email = /^([\w]+)(\.[\w]+)*@([\w\-]+\.){1,5}([A-Za-z]){2,4}$/;
	this.email = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

	this.validate = function(){
		var result = true;
		var foutief = '';

		/* reset fields */
		var el = this.formel.select('.invalid').elements;
		for(var i=0; i < el.length; i++){
			Ext.get(el[i]).removeClass('invalid');
		}

		/* test required fields */
		el = this.formel.select('.req').elements;
		for(i=0; i < el.length; i++){
			if(el[i].value == ""){
				Ext.get(el[i]).addClass('invalid');
				foutief += ' '+Ext.get(el[i]).dom.name;
				result = false;
			}
		}

		/* test required radiobuttons */
		el = this.formel.select('.reqradio').elements;
		var fields = Array()
		for(i=0; i < el.length; i++){
			fields.push(Ext.get(el[i]).dom.name);
		}
		fields = fields.unique();
		var form = this.form;
		fields.forEach(function(name){
			var radios = eval('form.'+name);
			var checked = false;
			for(i=0; i < radios.length; i++){
				if(Ext.fly(radios[i]).dom.checked){
					checked = true;
				}
			}
			if(!checked){
				result = false;
				foutief += ' '+name;
				for(i=0; i < radios.length; i++){
					Ext.fly(radios[i]).parent().addClass('invalid');
				}
			}
		});

		/* test email fields */
		el = this.formel.select('.email').elements;
		for(i=0; i < el.length; i++){
			if(el[i].value != "" && !this.email.test(el[i].value)){
				Ext.get(el[i]).addClass('invalid');
				foutief += ' '+Ext.get(el[i]).dom.name;
				result = false;
			}
		}

		return result;
	}

	return this.validate();
}
