/*
 * jQuery goValidate plugin
 * @name jquery.validation.js
 * @author Massimiliano Pesente - http://www.go2-studio.com/
 * @version 0.7
 * @date October 20, 2009
*/

  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')){
		
			//txt
			case 'text':
			
			if(field.hasClass('validifempty') && field.val() == '') return true
			else{
				if(regexp.test(field.val())){
				
					
					
					var lab =  $(':label[for="'+field.attr('name')+'"]');
					var tmp = lab.html().toLowerCase();
					
					field.removeClass('error');
					
					
					
					var errorindex = tmp.indexOf('<em>('+field.attr('title').toLowerCase()+')</em>');
					
					if(errorindex > -1) {
					
						var oldstr = lab.html().substring(0, errorindex -1);
						lab.html(oldstr)
					
					}
					return true
				} 
				else {
					
					var lab =  $(':label[for="'+field.attr('name')+'"]');
					var tmp = lab.html();
					
					if(tmp.indexOf(field.attr('title')) == -1) {
						lab.html(tmp+' <em>('+field.attr('title')+')</em>');						  
						field.addClass('error');
					}
					
					field.focus()
					return false
				
				}
			}
			break;
			
			//textarea
			case 'textarea':
			
			if(field.hasClass('validifempty') && field.val() == '') return true
			else{
				if(regexp.test(field.val())){
				
				
					
					var lab =  $(':label[for="'+field.attr('name')+'"]');
					var tmp = lab.html().toLowerCase();
					
					field.removeClass('error');
					
					
					
					var errorindex = tmp.indexOf('<em>('+field.attr('title').toLowerCase()+')</em>');
					if(errorindex > -1) {
					
						var oldstr = lab.html().substring(0, errorindex -1)
						lab.html(oldstr)
						
					
					}
					
					return true
				} 
				else {
					
					var lab =  $(':label[for="'+field.attr('name')+'"]');
					var tmp = lab.html();
					
					if(tmp.indexOf(field.attr('title')) == -1) {
						lab.html(tmp+' <em>('+field.attr('title')+')</em>');						  
						field.addClass('error');
					}
					
					field.focus()
					return false
				
				}
			}
			break;
			
			//radio
			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;
			
			//checkbox
			case 'checkbox':
			
			if(field.attr('name').lastIndexOf("[]") == -1){
				if(field.attr('checked') == true) {
				
					var lab =  $(':label[for="'+field.attr('name')+'"]');
					var tmp = lab.html().toLowerCase();
					
					var errorindex = tmp.indexOf('<em>('+field.attr('title').toLowerCase()+')</em>');
					if(errorindex > -1) {
					
						var oldstr = lab.html().substring(0, errorindex -1)
						lab.html(oldstr)
					
					}
					
					return true
				
				}
				else{
					var lab =  $(':label[for="'+field.attr('name')+'"]');
					var tmp = lab.html();
					
					if(tmp.indexOf(field.attr('title')) == -1) {
						lab.html(tmp+' <span id="privacy-error"><em>('+field.attr('title')+')</em></span>');	
					}		
				
					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
			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
	
	}