var Validator = new Class({
	initialize: function(formId,options){
		this.form = document.getElementById(formId);
		//this.setOptions(options);
		this.data = [];
		this.errors = [];
		this.form.onsubmit = function(){if(!this.validate()){ return false }; }.bind(this);
	},
	
	addField: function(name,rules,userName){
		var element = this.form.elements[name];
		userName = ( userName!='' )?userName:name;
		this.data.push({'ref':element,'rules':rules,'userName':userName});
	},
	
	validate: function(){
		this.errors = [];
		this.data.each(function(el){
			for( rule in el.rules ){
				var test = {'ref':el.ref,'rule':el.rules[rule],'userName':el.userName};
				var testName = 'this.test'+rule.substring(0,1).toUpperCase()+rule.substring(1)+'(test)';
				eval(testName);
			}
		}.bind(this));
		if( this.errors.length>0 ){
			this.displayErrors(this);
			return false;
		}else{
			return true;
		}
	},
	
	displayErrors: function(o){
		var e = null;
		var els = o.form.getElementsByTagName('div');
		for(var i=0,j=els.length;i<j;i++){
			
			if(els[i].getAttribute('class')=='errorInfo'){
				e = els[i];
			}
		}
		if(e) e.setStyle('display','block');
	},
	
	hideErrors: function(){
		document.getElement('.'+this.options.errorsContainerClassName).remove();
	}
})

var Tests = Validator.implement({
	testReq: function(element){ 
		
		element.ref.style.border='1px solid #A5ACB2';
		if( element.ref.value=='' ){
			element.ref.style.border='1px solid #cc3300';
			this.errors.push([element.ref,'Pole <strong>'+element.userName+'</strong> jest wymagane.']) 
		}
		
	},
	
	testSelReq: function(element){
		

		element.ref.style.border='1px solid #A5ACB2';
		if( element.ref.options[element.ref.selectedIndex].value==0 ){
			element.ref.style.border='1px solid #cc3300';
			this.errors.push([element.ref,'Musisz wybrać coś z listy <strong>'+element.userName+'</strong>.'])
		}
	},
	
	testEmail: function(element){
		

		element.ref.style.border='1px solid #A5ACB2';
		if( !/^[\w\.-]+@([\w-\.]+)*\.[a-z]{2,4}$/.test( element.ref.value ) && element.ref.value != '' ){
			element.ref.style.border='1px solid #cc3300';
			this.errors.push([element.ref,'Pole <strong>'+element.userName+'</strong> musi zawierać poprawny adres e-mail.']);
		}
	},
	
	testSubReq: function(element){
		
		element.ref.style.border='1px solid #A5ACB2';
		var el = this.form.elements["type"];
		if(el.options[el.selectedIndex].value==1 && element.ref.options[element.ref.selectedIndex].value==0){
			element.ref.style.border='1px solid #cc3300';
			this.errors.push([element.ref,'Musisz wybrać coś z listy <strong>'+element.userName+'</strong>.']);
		}
	}
})

