function onSubmit(form) {
	form.submit();
}

function highlight_elements(element, errorClass) {
    $(element).fadeOut(function() {
      $(element).fadeIn()
    })
 }

function onInvalid(form, validator) {
  /*
  $(document).find("input.error").each(function () {
		alert($(this).offset().top);
  });
  */
}

function add_validator() {
	
	jQuery.validator.addMethod("ads_img", function(value, element) {
		if (value.length == 0 )
			return true;
			
		var parts = value.split('.');
		var ext = parts[parts.length-1].toLowerCase();;
		if (ext != 'jpg' && ext != 'png' && ext != 'jpeg' && ext != 'gif') {
			return false;
		} else {
			return true;
		}
	}, "Sono supportati solo file con estensione .jpg, .jpeg, .png, e .gif");

	jQuery.validator.addMethod("ads_name", function(value, element) {
		var user = /[(0-9\@\*\(\)\[\]\+\.\,\/\?\:\;\"\`\~\\#\$\%\^\&\<\>)+]/;
		if (!value.match(user)) {
			if(value.length<2){
				return false;
			}
			return true;
		} else {
			return false;
		}
	}, "Il campo deve contenere almeno 2 caratteri. Numeri o caratteri speciali non sono ammessi");
	
	jQuery.validator.addMethod("ads_phone", function(value, element) {
		if (value.length == 0)
			return true;
		
		var phone = /^(\+){0,1}([0-9-()]|( ))+$/;
		if (value.match(phone)) {
			return true;
		} else {
			return false;
		}
	}, "Devi inserire un numero di telefono valido");
	
	jQuery.validator.addMethod("user_cf", function(value, element) {
		if (value=='')
			return true;
		
		if(value.length!=16){
			return false;
		}
		return true;
	}, "Il campo deve contenere 16 caratteri");
	
	jQuery.validator.addMethod("user_vat", function(value, element) {
		if(value.length!=11){
			return false;
		}
		
		return true;
	}, "Il campo deve contenere 11 caratteri");
	
	jQuery.validator.addMethod("user_cf_mixed", function(value, element) {
		if (value=='')
			return true;
		
		if(value.length!=11 && value.length!=16){
			return false;
		}
		
		return true;
	}, "Il campo può contenere 11 o 16 caratteri");
	
	jQuery.validator.addMethod("user_pw_confim", function(value, element) {
		var v = $('#password').val();
		if(value != v){
			return false;
		}
		return true;
	}, "Le due password non coincidono");
	
	jQuery.validator.addMethod("info_privacy", function(value, element) {
		if ($("#privacy").is(":checked"))
			return true;
		return false;
	}, 'Devi acconsentire al trattamento dei dati personali');

    jQuery.validator.addMethod("multiple", function(value, element, options) {
        required = options[0];
        selector = options[1];
        var parent_form = $(element).parents('form');
        var filled = 0;       
        parent_form.find(selector).each(function(){
            if ($(this).val()) {
                filled++;
            }
        });
        if (filled < required)
            return false;
        return true;
        /* jQuery.format("Numero minimo di campi: {0}")); */
    }, "Devi compilare almeno un campo");
}

/* This function is called in contatti.html */
function contact_form_validation() {
	
	add_validator();
	
	$('#contact_form').validate({
		submitHandler: onSubmit,
		invalidHandler: onInvalid,
		highlight: highlight_elements,
		rules : {
			name: {
		      required: true,
		      ads_name: true,
		      minlength: 2
		    },
		    place: {
		      required: true
		   	},
		   	telephone: {
		    	required: true,
		    	ads_phone: true
		    },
		    message: {
		      required: true
		   	},
		    email: {
		      required: true,
	    	  email: true
		   	},
		    privacy: {
		      info_privacy : true
		    }
		}
	});
}

function info_validation() {
	
	add_validator();
	
	$('#contact_form').validate({
		submitHandler: onSubmit,
		highlight: highlight_elements,
		rules : {
			first_name: {
		      required: true,
		      ads_name: true,
		      minlength: 2
		    },
		    last_name: {
		      required: true,
		      ads_name: true,
		      minlength: 2
		    },
		    email: {
		      required: true,
	    	  email: true
		   	},
		    message: {
		      required: true
		   	},
		    privacy: {
		      info_privacy : true
		    }
		}
	});	   	
}

function user_validation() {
	
	add_validator();
	
	$('#user_form').validate({
		submitHandler: onSubmit,
		invalidHandler: onInvalid,
		highlight: highlight_elements,
		rules : {
			first_name: {
		      required: true,
		      ads_name: true,
		      minlength: 2
		    },
		    last_name: {
		      required: true,
		      ads_name: true,
		      minlength: 2
		    },
		    birth_date_day: {
		    	required: true,
		    	minlength: 2,
		    	maxlength: 2,
		    	digits: true
		    },
		    birth_date_month: {
		    	required: true,
		    	minlength: 2,
		    	maxlength: 2,
		    	digits: true
		    },
		    birth_date_year: {
		    	required: true,
		    	minlength: 4,
		    	maxlength: 4,
		    	digits: true
		    },
		    region: {
		    	required: true
		    },
		    province: {
		    	required: true
		    },
		    municipality: {
		    	required: true
		    },
		    postal_code: {
		    	required: true,
		    	minlength: 5,
		    	maxlength: 5,
		    	digits: true
		    },
		    telephone: {
		    	required: true,
		    	ads_phone: true
		    },
		    'e-mail': {
		    	required: true,
		    	email: true
		    },
		    password: {
		    	required: true,
		    	minlength: 6,
		    	maxlength: 16
		    },
		    password_confirm: {
		    	required: true,
		    	user_pw_confim: true
		    },
		    secret_question: {
		    	required: true
		    },
		    secret_answer: {
		    	required: true
		    },
		    business_name: {
		    	required: true
		    },
		    vat_number: {
		    	user_vat: true
		    },
		    ad_category: {
		    	required: true
		    }
		}
	});
	
	var account_type = $("#account_type").val()
	
	if (account_type=='person')
	{
		$("#tax_number").addClass("user_cf");
	} else if (account_type=='company') {
		$("#tax_number").addClass("user_cf_mixed");
	} else {
		alert("Tipo non supportato!!!!!!!");
	}
}

function ad_validation() {
	
	add_validator();
	
	$('#ad_form').validate({
		submitHandler: onSubmit,
		invalidHandler: onInvalid,
		highlight: highlight_elements,
		rules : {
			'e-mail': {
				email: true
			},
			main_category: {
				required: true
			},
			format: {
		      required: true,
		      minlength: 1
		    },
			issue: {
				required: true
			},
			telephone: {
				ads_phone: true
			},
		    telephone_2: {
		    	ads_phone: true
		    },
		    website : {
		    	url: true
		    },
			title: {
				required: true,
                maxlength: 128
			},
			description: {
				required: true
			},
			image: {
				ads_img: true
			},
            multiple_validator: {
                multiple: [1,'.validate_group']
            }
		}
	});
	
	/* Pricing is done here because of hidden field */
	$("#price").addClass("digits_disabled");
	$("#price_decimal").addClass("digits_disabled");
}
