function addGlobalListener(onEvent,func,obj) {
	if (obj.addEventListener) {
		obj.addEventListener(onEvent, func, false);
	} else if (document.addEventListener) {
		obj.addEventListener(onEvent, func, false);
	} else if (window.attachEvent) {
		obj.attachEvent("on"+onEvent, func);
	}
}

function getFormsElement(event) {
	var theForm = $('Formular');
	if(!theForm) return false;
	Form.focusFirstElement(theForm);
	var firstElement =	Form.findFirstElement(theForm);
	getAncestor(firstElement).addClassName('focus');
	var formContent = Form.getElements(theForm);
	for(var i=0;i < formContent.length;i++) {
		var formElement = formContent[i];
		//alert(formElement);
		addGlobalListener('focus',focusField,formElement);
		addGlobalListener('blur',blurField,formElement);
		if(formElement.type == 'checkbox' || formElement.type == 'radio') {
			addGlobalListener('click',setCheckboxValue,formElement);
			addGlobalListener('keyup',setCheckboxValue,formElement);
		}
	}
	hideCheckboxValue();
	addGlobalListener('submit',verifyField,theForm);

}
function setCheckboxValue(event) {
	var target = event.target || event.srcElement;
	var element = target.parentNode
	if(element.cleanWhitespace()) element = element.cleanWhitespace();
	var noeuds = element.firstChild;
	if(target.checked) {
		while(noeuds!=null) {
			if(Element.hasClassName(noeuds,'checkbox-value')) {
				noeuds.removeClassName('hide');
			}
			noeuds = noeuds.nextSibling;
		}
	} else {
		while(noeuds!=null) {
			if(Element.hasClassName(noeuds,'checkbox-value')) {
				noeuds.addClassName('hide');
			}
			noeuds = noeuds.nextSibling;
		}
	}
}
function hideCheckboxValue() {
	var valuesElement = $$('.checkbox-value');
	for(var i = 0;i < valuesElement.length;i++) {
		var valueElement = valuesElement[i];
		valueElement.addClassName('hide');
	}
}
function focusField(event) {
	var target = event.target || event.srcElement;
	var element = getAncestor(target);
	element.addClassName('focus');
}
function blurField(event) {
	var target = Event.element(event);
	var element = getAncestor(target);
	if(target.hasClassName('required') && target.value == '') {
		markError(target);
	}
	element.removeClassName('focus');
}
function markError(field) {
	addGlobalListener('blur',checkField,field);
	var element = getAncestor(field);
	element.addClassName('error');
}
function removeError(field) {
	var element = getAncestor(field);
	element.removeClassName('error');
}
function checkField(event) {
	var field = Event.element(event);
	if(field.value != '') {
		removeError(field);
	}
}
function verifyField(event) {
	var theForm = Event.element(event);
	var error = false;
	var fieldsRequired = $$('.required');
	for(var i=0;i < fieldsRequired.length;i++) {
		var field = fieldsRequired[i];
		if(field.value == '') {
			markError(field);
			if(!error)field.focus();
			Event.stop(event);
			error = true;
		} else {
			removeError(field);
		}
	}
	var fieldsEmail = $$('input.email');
	//var regEmail = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z]{2,3}$/;
	var regEmail = /^[A-Za-z0-9\._-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]{2,4}$/;
	for(var i=0;i < fieldsEmail.length;i++) {
		var fieldEmail = fieldsEmail[i];
		if(regEmail.exec(fieldEmail.value)== null) {
			markError(fieldEmail);
			if(!error)fieldEmail.focus();
			Event.stop(event);
			error = true;
		} else {
			removeError(fieldEmail);
		}
	}
	return true;
}
function getAncestor(field) {
	var targetAncestors = field.ancestors();
	for(var i=0;i < targetAncestors.length;i++) {
		var element = targetAncestors[i];
		if(element.tagName == 'P' || element.tagName == 'UL'|| element.tagName == 'TD') {
			return element;
		}
	}
}
Event.observe(window,'load',getFormsElement);