function draw_form_error(field){

	field.addClassName('border-error');
}
function undraw_error(form){
	for (i=0;i<form.elements.length;i++){
		form.elements[i].removeClassName('border-error');
	}	
}
_validators = { 'int': function(f){ return validate(f, validate_int)},
				'string': function(f){ return validate(f, validate_string)},
				'datevalidator': function(f){ return validate(f, validate_date)},
				'bool': function(f){ return validate(f, validate_bool)},
				'number': function(f){ return validate(f, validate_number)},
				'listvalidator': function(f){ return validate(f, validate_listvalidator)}
				}

function validate(f, validator){
	// general validator - sprawdza, czy pole jest empty, przekazuje do właściwego walidatora wartość
	if (! f.value && f.hasClassName('empty')){
		return true;
	}
	else if (! f.value && !f.hasClassName('empty') ){
			return false;
	} else{
		return validator(f.value);	
	}
}


function validate_form(event, validators){
	// fields
	//
							
	if (!validators.length)	{return true}
	var form = event.target;
	undraw_error(form);
	var is_valid = true;
	for (i = 0; i<form.elements.length; i++ ){
		if (validators[form.elements[i].name]) {
			try{
			if( !validators[form.elements[i].name]( form.elements[i]) ) {
				draw_form_error(form.elements[i]);
				is_valid = false;
			}//walidacja 
			}catch(e){
//				alert(e);
				is_valid = false;}
		}
	}
	if (!is_valid){
			Event.stop(event); 

			Event.observe(form, 
							'submit',  
							function(e){ 
							return validate_form(e, validators)})}
			drawMessage('Formularz zawiera błędy');
	return is_valid;
}

function install_validators(){
	for (fi = 0; fi< document.forms.length; fi++ ){
		// sprawdzamy wszystkie formularze
		var f = document.forms[fi];
		Element.extend(f);
		var validators = {};
		for (i =0; i<f.elements.length; i++){
			// sprawdzamy wszystkie elementy 
			for (k in _validators){
					//
					Element.extend(f.elements[i]);
					//
					if (f.elements[i].hasClassName(k)){
						validators [f.elements[i].name] = _validators[k]; }
			}
		}

		Event.observe(document.forms[fi], 'submit',  
							function(event){ 
							return validate_form(event, validators)})

}
}


function validate_int(f){
	// 
	try{
		f = new Number(f);
		if (Math.round(f) == f){
			return true;		}
		return false;
	}catch (e){		
		return false;
	}
}

function validate_oneof(f){
	// 
	//
	return true;
	
}

function validate_listvalidator(f){
	// 
	//
	return true;
	
}


function validate_bool(f){
	if (f == 'on' || f == 'off'){
		return true;
		
	}
	return false;
	
}

function validate_number(f){
	// 
	try{
		f = new Number(f.gsub('/,/', '.'));
		if (isNaN(f)){
			return false;
		}
		return true;
	}catch (e){		
		return false;
	}
}


function validate_date(f){
	try{
		f = f.split('-');
		var valid_date = false
		if (f.length == 3){
			for (i=0;i<f.length;i++){
				if (!validate_int(f[i])){
					valid_date = false;
					break;
				}
			}
			
			
		}
		return valid_date;
		
	}catch (e){		
		return false;
	}
}

function validate_string(f){
	return true;
}


function _handle_date_change(field){
	var y = $(field+'_y').value;
	var m = $(field+'_m').value;
	var d = $(field+'_d').value;

	$(field).value = y+'-'+m+'-'+d;		
}



Event.observe(window, 'load', function() {
 install_validators();
});