var Validator = new Class({
	options: {
		text: {
			name: "Name fehlt",
			first_name: "Vorname fehlt",
			last_name: "Nachname fehlt",
			firma: "Firma fehlt",
			adresse: "Adresse fehlt",
			plz:"PLZ fehlt",
			ort:"Stadt fehlt",
			telefon:"Telefon fehlt",
			fax:"Telefax fehlt",
			email:"eMail Adresse fehlt"
		},
		selector: "error",
		form:"",
		event:"submit"
	},
	
	fields:[],
	backups:[],
	form:null,
	error:false,
	lastValue:"",
	
	regexp: {
		required:/[^.*]/,
		alpha:/^[a-z ._-]+$/i,
		alphanum:/^[a-z0-9 ._-]+$/i,
		digit:/^[-+]?[0-9]+$/,
		nodigit:/^[^0-9]+$/,
		number:/^[-+]?\d*\.?\d+$/,
		email:/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i,
		phone:/^[\d\s ().-]+$/
	},
	
	initialize:function(A){
		this.setOptions(A);
		this.form = $(this.options.form);
		this.form.getElements("input").each(function(B){
			if(B.className.test(/validate\[/i)){
				this.fields.push({
					el:B,
					tests:B.className.match(/validate\[(.*)\]$/i)[1].split(",")
				})
			}},this);
		
		this.form.addEvent("submit",this.validate.bind(this))},
		
		validate:function(A){
			this.error=false;
			this.fields.each(function(B){
				if(!this.form.getElements("input").contains(B.el)){return }
				B.tests.each(function(C){
					this.validateSingeItem(C,B)},this)}.bind(this));if(this.error){A=new Event(A).stop();return false}else{return true}},validateSingeItem:function(B,A){B=B.split("-");this.currentElement=A;valid=true;switch(B[0]){case"email":case"mail":valid=this._regexp(this.regexp.email);break;case"number":case"zahl":valid=this._regexp(this.regexp.number);break;case"zip":case"plz":valid=(this._regexp(this.regexp.number)&&this._length(4,6));break;case"length":valid=this._length(B[1],B[2]);break;case"phone":case"tel":case"telefon":valid=this._regexp(this.regexp.phone);break}if(!valid||this.lastValue==this.options.text[this.currentElement.el.id]){this.setError()}},setError:function(){el=this.currentElement.el;if(this.options.text[el.id]!=this.lastValue.clean()){this.backups[el.id]=this.lastValue}el.setProperty("value",this.options.text[el.id]).addClass(this.options.selector).addEvent("focus",this.removeError.bind(this));this.error=true},removeError:function(A){this.currentElement=new Event(A).target;this.fields.each(function(B){if(this.currentElement==B.el&&this.currentElement.hasClass(this.options.selector)){this.currentElement.removeClass(this.options.selector).setProperty("value",this.backups[this.currentElement.id])}}.bind(this))},_regexp:function(A){this.lastValue=this.currentElement.el.getProperty("value");if(this.lastValue.search(A)==-1){return false}else{return true}},_length:function(B,A){B=B.toInt();A=(A=="x")?999999:A.toInt();this.lastValue=this.currentElement.el.getProperty("value");if(this.lastValue.length<B||this.lastValue.length>A){return false}else{return true}}});
Validator.implement(new Options);
