/**************************************************************
	Script : Validate
	Version : 2.1.4
	Authors : Samuel Birch, Klemens Schreiber, Philipp Lehner
	Desc : Form validation
	Licence : Open Source MIT Licence
**************************************************************/

window.addEvent('domready', function() {
	initForms();
});

function initForms() {
	if($$('#content form').length > 0) {
		$$('#content form').each(function(el, i) {
			var myFormValidation = new Validate(el.id);
		});
	}
	else {
		setTimeout('initForms()', 100);
	}
}

var Validate = new Class({
	
	getOptions: function() {
		return {
			errorClass: 'error',
			label: 'Bitte warten ...'
		};
	},

	initialize: function(form, options) {
		this.setOptions(this.getOptions(), options);
		this.form = $(form);
		this.elements = this.form.getElements('.required');
		this.list = [];
		this.elements.each(function(el,i) { el.addEvent('blur', this.validate.bind(this, el)); }.bind(this));
		this.form.addEvent('submit', function(e) {
			var event = new Event(e);
			var doSubmit = true;
			this.elements.each(function(el,i) {
				if(! this.validate(el)) {
					event.stop();
					doSubmit = false;
					this.list.include(el);
				}
			}.bind(this));

			this.checkboxelements = this.form.getElements('.required_checkbox');
			this.checkboxelements.each(function(el, i) {
				valid = false;
				checkboxes = $(el).getElementsByTagName('input');
				for(i=0; i<checkboxes.length; i++) {
					if(checkboxes[i].type == 'checkbox' && checkboxes[i].checked) {
						valid = true;
					}
				}
				if(valid == false) {
					doSubmit = false;
					this.setMsg(el, 'Kreuzen Sie mindestens eine Option an.');
					this.list.include(el);
				} 
				else {
					this.clearMsg(el);
				}
			}.bind(this));

			this.radioelements = this.form.getElements('.required_radio');
			this.radioelements.each(function(el, i) {
				valid = false;
				radios = $(el).getElementsByTagName('input');
				for(i=0; i<radios.length; i++) {
					if(radios[i].type == 'radio' && radios[i].checked) {
						valid = true;
					}
				}
				if(valid == false) {
					doSubmit = false;
					this.setMsg(el, 'Bitte wählen Sie eine Option an.');
					this.list.include(el);
				} 
				else {
					this.clearMsg(el);
				}
			}.bind(this));

			if(doSubmit)
				this.form.getElement('button[type=submit]').set('text', this.options.label);
			else
				showError(this.getList());
		}.bind(this));
	},
	
	getList: function(){
		var list = new Element('ul');
		this.list.each(function(el,i) {
			if(el.errorMessage != undefined)
				errorMessage = el.errorMessage;
			else
				var errorMessage = el.parentNode.getElementsByTagName('span')[0].innerHTML.replace(' *', '') + ' wurde nicht ausgefüllt.';
	
			var li = new Element('li').set('text',errorMessage).injectInside(list);
		});
		return list;
	},

	validate: function(el) {
		var valid = true;
		this.clearMsg(el);
		switch(el.type) {
			case 'text':
			case 'textarea':
			case 'select-one':
				if(el.value != '') {
					if(el.hasClass('email')) {
						var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
						if(el.value.toUpperCase().match(regEmail)){
							valid = true;
						}
						else {
							valid = false;
							this.setMsg(el, 'E-Mail Adresse ist ungültig.');
						}
					}
					if(el.hasClass('number')) {
						var regNum = /[-+]?[0-9]*\.?[0-9]+/;
						if(el.value.match(regNum)){
							valid = true;
						}
						else {
							valid = false;
							this.setMsg(el, 'PLZ ist ungültig.');
						}
					}
				}
				else {
					valid = false;
					this.setMsg(el);
				}
				break;
		}
		return valid;
	},

	setMsg: function(el, msg) {
		if(msg == undefined) {
			msg = el.parentNode.getElementsByTagName('span')[0].innerHTML.replace(' *', '') + ' wurde nicht ausgefüllt.';
		}

		$(el).errorMessage = msg;
		$(el.parentNode).addClass(this.options.errorClass);
	},

	clearMsg: function(el) {
		$(el.parentNode).removeClass(this.options.errorClass);
		if(el.error != undefined) {
			el.error.remove();
			el.error = undefined;
		}

		$(el).errorMessage = "";
	}
});

Validate.implement(new Options);
Validate.implement(new Events);

function showError (list) {
	$('validationMessage').innerHTML = "";
	$('validationMessage').adopt(list);
	document.location.href = '#validationMessage';
}

