function validate(){
	$(this).find('li').removeClass('err');
	$(this).find('p.err').remove();
	var dirty=false;
	$("input[rel!=''],select[rel!='']",$(this)).each(function(){
		rules=false;
		try{
			var rules_json=$(this).attr('rel')
			rules=eval('('+rules_json+')');
		}catch(e){
			alert('invalid validation rule in rel - field '+ this.name+'('+this.id+')');
		}
		if(rules){
			if(rules.req=='0' && $(this).val()==''){
				return;
			}
			var reg=new RegExp(rules.reg);
			var val=$(this).val();
			if(!reg.test(val)){
				$(this).parent('li').addClass('err');
				$(this).parent().append('<p class="err">'+rules.msg+'</p>');
				if(!dirty){
					$(this).focus();
				}
				dirty=true;
			}
		}
	});
	if(dirty){
		return false;
	}else{
		return true;
	}
}

function validate_form(form){
	form.validate=validate;
	return form.validate();
}
