$(document).ready(function(){
	
	var msg_address = "La dirección es muy corta";

var msg_yes_tos = "Debe Aceptar";

var msg_site_title = "Título muy corto";

var msg_birthday = "Fecha Inválida";

var msg_valid_username = "Nombre de usuario inválido";

var msg_invalid_username = "Nombre de usuario válido!";

var msg_city = "Nombre de Ciudad es muy corto";

var msg_country = "Nombre de País es muy corto";

var msg_email_in_use = "Email en uso";

var msg_valid_email = "Email válido";

var msg_invalid_email = "Email inválido";

var msg_name = "Nombre muy corto";

var msg_last_name = "Apellidos muy cortos";

var msg_valid_pass = "Contraseña válida";

var msg_invalid_pass = "Contraseña Inválida";

var msg_only_alphanumeric = "Sólo Alfanuméricos";

var msg_min_char = "Mínimo 6 caracteres";

var msg_confirm_rong = "No coincide con el código";

var msg_confirm_pass = "Confirmar Contraseña";

var msg_state = "Estado es demasiado corto";

	
	//global vars
	var form = $("#formDiv");  
	var name = $("#first_name");  
	var nameInfo = $("#first_nameInfo");
	
	var last_name = $("#last_name");  
	var last_nameInfo = $("#last_nameInfo");  
	
	var address = $("#address");  
	var addressInfo = $("#addressInfo");
	
	var city = $("#city");  
	var cityInfo = $("#cityInfo");
	
	var st_province = $("#st_province");  
	var st_provinceInfo = $("#st_provinceInfo");
	
	var country = $("#country");  
	var countryInfo = $("#countryInfo");
	
	var birthday = $("#birthday");
	var birthdayInfo = $("#birthdayInfo");
	
	var email = $("#email");  
	var emailInfo = $("#emailInfo"); 
	
	var username = $("#username");  
	var usernameInfo = $("#usernameInfo");  
	
	var pass1 = $("#password1");  
	var pass1Info = $("#password1Info");
	
	var pass2 = $("#password2");  
	var pass2Info = $("#password2Info");
	
	var site_title = $("#site_title");  
	var site_titleInfo = $("#site_titleInfo");
	
	var site_description = $("#site_description");  
	var site_descriptionInfo = $("#site_descriptionInfo");
	
	var yes_tos = $("#yes_tos");  
	var yes_tosInfo = $("#yes_tosInfo");
	
	var domain = $("#domain");
	
	var hear_about = $("#hear_about");
	var hear_about_where = $("#hear_about_where");
	
	var label_where = $("#label_where");
	
	//On blur
	name.blur(validateName);
	last_name.blur(validateLastName);
	address.blur(validateAddress);
	city.blur(validateCity);
	country.blur(validateCountry);
	st_province.blur(validateStProvince);
	birthday.blur(validateBirthday);
	email.blur(validateEmail);
	username.blur(validateUsername);
	pass1.blur(validatePass1);
	pass2.blur(validatePass2);
	site_title.blur(validateSiteTitle);
	site_description.blur(validateSiteDescription);
	yes_tos.blur(validateYesTos);
	
	hear_about.change(CheckValue);
	
	//On key press
	username.keyup(validateUsername);
	email.keyup(validateEmail);
	//address.keyup(validateAddress);
	//st_province.keyup(validateStProvince);
	//country.keyup(validateCountry);
	//city.keyup(validateCity);
	//username.keyup(validateUsername);
	
	//On Submitting
	form.submit(function(){
		if(validateEmail() & validateUsername() & validateAddress() & validateCity() & validateStProvince() & validateCountry() & validatePass1() & validatePass2())
			return true
		else
			return false;
	});
	
	
	
	function CheckValue(){
		if(hear_about.val() == "Other"){
			hear_about_where.show();
			label_where.show();
		} else{
			hear_about_where.hide();
			label_where.hide();
		} 
	}
	
	//validation functions
	function validateAddress(){
		//if it's NOT valid
		if(address.val().length < 4){
			address.addClass("error");
			addressInfo.text(msg_address);
			addressInfo.addClass("error");
			return false;
		}
		//if it's valid
		else{
			address.removeClass("error");
			addressInfo.text("");
			addressInfo.removeClass("error");
			return true;
		}
	}
	
	function validateYesTos(){
		//if it's NOT valid
		if (!yes_tos[0].checked) {
		//if(yes_tos.val()){
			yes_tos.addClass("error");
			yes_tosInfo.text(msg_yes_tos);
			yes_tosInfo.addClass("error");
			return false;
		}
		//if it's valid
		else{
			yes_tos.removeClass("error");
			yes_tosInfo.text("");
			yes_tosInfo.removeClass("error");
			return true;
		}
	}
	
	function validateSiteDescription(){
		//if it's NOT valid
		if(site_description.val().length < 4){
			site_description.addClass("error");
			site_descriptionInfo.text("");
			site_descriptionInfo.addClass("error");
			return false;
		}
		//if it's valid
		else{
			site_description.removeClass("error");
			site_descriptionInfo.text("");
			site_descriptionInfo.removeClass("error");
			return true;
		}
	}
	
	function validateSiteTitle(){
		//if it's NOT valid
		if(site_title.val().length < 4){
			site_title.addClass("error");
			site_titleInfo.text(msg_site_title);
			site_titleInfo.addClass("error");
			return false;
		}
		//if it's valid
		else{
			site_title.removeClass("error");
			site_titleInfo.text("");
			site_titleInfo.removeClass("error");
			return true;
		}
	}
	
	function validateBirthday(){
		//testing regular expression
		var a = $("#birthday").val();
		erro=0;
        hoje = new Date();
        anoAtual = hoje.getFullYear();
        barras = a.split("/");
        if(a == ''){
        	birthday.removeClass("error");
			birthdayInfo.text("");
			return true;
        }
        if (barras.length == 3){
	        mes = barras[0];
            dia = barras[1];
            ano = barras[2];
            resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900));
            //if it's valid Date
            if (resultado) {
				birthday.removeClass("error");
				birthdayInfo.text("");
				birthdayInfo.removeClass("error");
				return true;
			}
			//if it's NOT valid
			else{
				birthday.addClass("error");
				birthdayInfo.text(msg_birthday);
				birthdayInfo.addClass("error");
				return false;
			}
		} else{
			birthday.addClass("error");
			birthdayInfo.text(msg_birthday);
			birthdayInfo.addClass("error");
			return false;
		}	
	}
	
	function validateUsername(){
		var a = $("#username").val();
		var domain = $("#username").val()+'.'+$("#domain").val();
		var filter = /^[a-z0-9]{3,25}$/;
		var result;
		//if it's valid email
		if(filter.test(a)){
			result = $.post("app/controllers/ajax_controller.php", {queryString: ""+domain+""}, function(data){
				if(data.length >0) {
					username.addClass("error");
					usernameInfo.html('<font color="red"><b>'+msg_invalid_username+'</b></font>');
					return false;
				} else {
					username.removeClass("error");
					usernameInfo.html('<font color="green"><b>'+msg_valid_username+'</b></font>');
					return true;
				}
			});
			return true;
		}
		//if it's NOT valid
		else{
			username.addClass("error");
			usernameInfo.html('<font color="red"><b>'+msg_invalid_username+'</b></font>');
			return false;
		}
	}
	
	function validateCity(){
		//if it's NOT valid
		if(city.val().length < 4){
			city.addClass("error");
			cityInfo.text(msg_city);
			cityInfo.addClass("error");
			return false;
		}
		//if it's valid
		else{
			city.removeClass("error");
			cityInfo.text("");
			cityInfo.removeClass("error");
			return true;
		}
	}
	
		//validation functions
	function validateCountry(){
		//if it's NOT valid
		if(country.val().length < 4){
			country.addClass("error");
			countryInfo.text(msg_country);
			countryInfo.addClass("error");
			return false;
		}
		//if it's valid
		else{
			country.removeClass("error");
			countryInfo.text("");
			countryInfo.removeClass("error");
			return true;
		}
	}
	
	function validateEmail(){
		//testing regular expression
		var a = $("#email").val();
		var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
		//if it's valid email
		if(filter.test(a)){
			$.post("app/controllers/ajax_controller.php", {useremail: ""+a+""}, function(data){
				if(data.length >0) {
					email.addClass("error");
					emailInfo.html('<font color="red"><b>'+msg_email_in_use+'</b></font>');
					return false;
				} else {
					email.removeClass("error");
					emailInfo.html('<font color="green"><b>'+msg_valid_email+'</b></font>');
					return true;
				}
			});
			return true;
		}
		//if it's NOT valid
		else{
			email.addClass("error");
			emailInfo.html('<font color="red"><b>'+msg_invalid_email+'</b></font>');
			return false;
		}
	}
	
	function validateName(){
		//if it's NOT valid
		if(name.val().length < 4){
			name.addClass("error");
			nameInfo.text(msg_name);
			nameInfo.addClass("error");
			return false;
		}
		//if it's valid
		else{
			name.removeClass("error");
			nameInfo.text("");
			nameInfo.removeClass("error");
			return true;
		}
	}
	
	function validateLastName(){
		//if it's NOT valid
		if(last_name.val().length < 4){
			last_name.addClass("error");
			last_nameInfo.text(msg_last_name);
			last_nameInfo.addClass("error");
			return false;
		}
		//if it's valid
		else{
			last_name.removeClass("error");
			last_nameInfo.text("");
			last_nameInfo.removeClass("error");
			return true;
		}
	}
	
	function validatePass1(){
		var a = $("#password1").val();
		var filter = /^[a-zA-Z0-9]{3,25}$/;
		//if it's valid email
		if(filter.test(a) && pass1.val().length >5){
			pass1.removeClass("error");
			pass1Info.text(msg_valid_pass);
			pass1Info.removeClass("error");
			return true;
		}
		//if it's NOT valid
		else{
			pass1.addClass("error");
			if(!filter.test(a))
				pass1Info.text(msg_only_alphanumeric);
			else if(pass1.val().length <5)
				pass1Info.text(msg_min_char);	
			pass1Info.addClass("error");
			return false;
		}
	}
	
	function validatePass2(){
		var a = $("#password1");
		var b = $("#password2");
		//are NOT valid
		if( pass1.val() != pass2.val() ){
			pass2.addClass("error");
			pass2Info.text(msg_confirm_rong);
			pass2Info.addClass("error");
			return false;
		}
		//are valid
		else{
			pass2.removeClass("error");
			pass2Info.text(msg_confirm_pass);
			pass2Info.removeClass("error");
			return true;
		}
	}
	
	function validateStProvince(){
		//if it's NOT valid
		if(st_province.val().length < 4){
			st_province.addClass("error");
			st_provinceInfo.text(msg_state);
			st_provinceInfo.addClass("error");
			return false;
		}
		//if it's valid
		else{
			st_province.removeClass("error");
			st_provinceInfo.text("");
			st_provinceInfo.removeClass("error");
			return true;
		}
	}
	
	function validateMessage(){
		//it's NOT valid
		if(message.val().length < 10){
			message.addClass("error");
			return false;
		}
		//it's valid
		else{			
			message.removeClass("error");
			return true;
		}
	}
});