  var re_free   		 = /\S/;
  var re_num    		 = /^[0-9]+/;
  var re_data    		 = /^[0-9][0-9]?\/[0-9][0-9]?\/[0-9][0-9][0-9][0-9]/;
  var re_email   		 = /^\w[\w\-\.]*@\w[\w\-\.]*\.[a-z]{2,3}$/i;
  var re_multipleemail   = /^((\w[\w\-\.]*@\w[\w\-\.]*\.[a-z]{2,3})|(\s)+)+$/i;

  
  
	function testField(field){
	
		var regexp = null;
		
		     if(field.hasClass('free'))   			regexp = re_free
		else if(field.hasClass('num'))    			regexp = re_num
		else if(field.hasClass('email'))  			regexp = re_email
		else if(field.hasClass('data'))   			regexp = re_data
		else if(field.hasClass('multipleemail'))   	regexp = re_multipleemail
		
		
		switch(field.attr('type')){
		
			case 'text':
			
			if(field.hasClass('validifempty') && field.val() == '') return true
			else{
				if(regexp.test(field.val())) return true
				else {
					
					alert(field.attr('title'))					
					field.focus()
					return false
				
				}
			}
			break;
			
			case 'textarea':
			
			if(field.hasClass('validifempty') && field.val() == '') return true
			else{
					if(field.hasClass('multipleemail') && field.val() == ''){
						alert('Inserire almeno un destinatario valido')	
						field.focus()
						return false
					
				}
				else if(regexp.test(field.val())) return true
				else {
					
					alert(field.attr('title'))					
					field.focus()
					return false
				
				}
			}
			break;
			
			
			
			case 'radio':
				var rg = $(':input:radio[name="'+field.attr('name')+'"]');
				var atleastoneselected = false
				
				jQuery.each(rg, function(){
																	   
																	   if(this.checked) atleastoneselected = true
																	   
																	   })
				
				if(atleastoneselected) return true
				else{
					alert(field.attr('title'))
					field.focus()
					return false
				}
				
			break;
			
			case 'select-one':
			if(field.attr('selectedIndex') > 0) return true
			else{
				alert(field.attr('title'))
				field.focus()
				return false
			}
			break;
			
			
			case 'checkbox':
			
			if(field.attr('name').lastIndexOf("[]") == -1){
				if(field.attr('checked') == true) return true
				else{
					alert(field.attr('title'))
					field.focus()
					return false
				}				
			}else{
				//sono alla presenza di un array di dati	
				var all_cb = $(':input:checkbox[name="'+field.attr('name')+'"]');
				var atleastonecbselected = false
				
				jQuery.each(all_cb, function(){
																	   
																	   if(this.checked) atleastonecbselected = true
																	   
																	   })
				
				if(atleastonecbselected) return true
				else{
					alert(field.attr('title'))
					field.focus()
					return false
				}
				
			}
			
			
			
			break;
			
			default:
			if(regexp.test(field.val())) return true
				else {
					alert(field.attr('title'))
					field.focus()
					return false
				
				}
			break;
		
		}
	
	}
	
	function checkForm(form, callback){
			
			var is_valid  = true
			var all_input = $(':input', form)
			
			/*
			var radio_name = '';
			var all_radio = $(':input:radio', form)
			
			jQuery.each(all_radio, function(){
																				
											if($(this).attr('name') != radio_name){
												radio_group.push($(this).attr('name'));
												radio_name    = $(this).attr('name');
												
											}
											})
			
			jQuery.each(radio_group, function(){
											  
											  var rg = $(':input:radio[name="'+this+'"]');
											  var atleastoneselected = false
											  
											  jQuery.each(rg, function(){
																	   
																	   if(this.checked) atleastoneselected = true
																	   
																	   })
											  
											  if
											  
											  })
			
			*/
			jQuery.each(all_input, function(){
				
				if($(this).hasClass('required')) {
				
					if(!testField($(this))) {
						
						is_valid &= false
						return false
						
					}
					
				
				}
			
			})
			
			if(is_valid) {
			
				if(jQuery.isFunction(callback)) callback.call()
				else form.submit();
			
			}
			else return false
	
	}
	
	//function testCall(){alert('cicio')}
