function validate(f){
	var validators = new Array();
	validators['default'] = function(fld){return true};
	validators['email'] = function(fld){var expr = /^[a-z0-9\.\-_]+@[a-z0-9\.\-_]+\.[a-z]{2,}$/i; return expr.test(fld.value)};
	validators['integer'] = function(fld){var expr = /^[0-9]+$/; return expr.test(fld.value)};
	validators['number'] = function(fld){var expr = /^-?[0-9]+([\.,][0-9]+)?$/; var val=fld.value.replace(',','.'); if(expr.test(val)){fld.value=val; return true}else return false;};
	validators['phone'] = function(fld){var expr = /^[0-9\+ \(\)]+$/; return expr.test(fld.value)};
	var fail = function(elm, msg){alert(msg); Field.activate(elm); return false;};
	var elms = f.elements;
	var radios = new Array();
	for(index=0;index<elms.length;index++){
		var elm = elms[index];
		if(elm.type != 'radio'){
			//if((elm.type != 'checkbox') && (elm.type != 'submit')){
			if(['checkbox','submit'].indexOf(elm.type) == -1){
				if(elm.attributes['validation']){
					var parts = elm.attributes['validation'].value.split(':');
					elm.plainName = parts[0];
					elm.required = (parts[1]=='required');
					elm.notDefaultValue = (parts[1]=='not_default_value');
					elm.validator = (['optional','required','not_default_value'].indexOf(parts[1]) > -1) ? ((parts.length > 2)? parts[2] : 'default') : parts[1];
					if(elm.type == 'select-one'){
						if(elm.required && (elm.selectedIndex == 0)) return fail(elm, 'Vær venligt at oplyse '+ elm.plainName);
					} else {
						//if(elm.required && (elm.value == '' || elm.value== elm.defaultValue)) return fail(elm, 'Du skal udfylde feltet '+ elm.plainName);
						if((elm.required && elm.value == '') || (elm.notDefaultValue && elm.value == elm.defaultValue)) return fail(elm, (elm.title ? elm.title:'Vær venligt at oplyse '+ elm.plainName));
						//if(elm.required && (elm.value == '')) return fail(elm, (elm.title ? elm.title:'Vær venligt at udfylde '+ elm.plainName));
						if(elm.value!=''){
							if(validators[elm.validator]){
								if(!validators[elm.validator](elm)) return fail(elm, (elm.title ? elm.title:'Vær venlig at kontrollere at ' + elm.plainName + ' er udfyldt korrekt'));
							} else {
								var expr = new RegExp(elm.validator);
								if(!expr.test(elm.value)) return fail(elm, elm.plainName + ' er ikke udfyldt korrekt');
							}
						}
					}
				}
			}
		} else {
			if(radios.indexOf(elm.name) == -1){
				radios[radios.length] = elm.name;
				var flds = Form.getInputs(f, 'radio', elm.name);
				if(flds.all(function(fld, indx){return !fld.checked})) return fail(elm, 'Vær venlig at oplyse ' + elm.attributes['validation'].value);
			}
		}
	}
	return true;
}
doLogin = function(event){
	f = $(event.target);
	if(validate(f)){
		params = f.serialize(true);
		params['action'] = 'ajaxlogin';
		new Ajax.Request('/',
			{
				method: 'post',
				parameters: params,
				onComplete: function(response){
					if(response.responseText == '1'){
						location.href = f.readAttribute('action');
					} else {
						alert('Login lykkedes ikke. Kontrollér at dit brugernavn og kodeord er indtastet korrekt og prøv igen.');
					}
				}
			}
		);
	}
}
Event.observe(document, 'dom:loaded',
	function(){
		$$('FORM').each(
			function(f){
				if(f.hasClassName('loginform')){
					f.observe('submit',
						function(event){
							Event.stop(event);
							doLogin(event);
						}
					);
				} else {
					if(!f.onsubmit){
						f.observe('submit',
							function(event){
								if(!validate(event.target)){
									Event.stop(event);
									return false;
								}
							}
						);
					}
				}
			}
		);
	}
);