var Validation = {

  init: function() {
    $('form.ajax').submit(function() {
      Validation.submit('#' + $(this).attr('id'));
      return false;
    });

		$('form.iframe').submit(function() {
      return Validation.iframeSubmit('#' + $(this).attr('id'));
    });
  },
  
  formatOfEmail: function(form) {
    $(form + ' input.email').each(function() {
      var regex = new RegExp("^[a-z0-9_\.%\+\-]+@(?:[a-z0-9\-]+\.)+(?:[a-z]{2,4}|museum|travel)$");
      
      if(regex.test($(this).val())) 
        Validation.removeError(this);
      else
        Validation.addError(this, 'formato inválido');
    });
  },
  
  formatOfPhone: function(form) {
    $(form + ' input.phone').each(function() {
      var regex = new RegExp("^\(.*\) (.*)\-(.*)$");
      
      if(regex.test($(this).val()))
        Validation.removeError(this);
      else
        Validation.addError(this, 'formato inválido');
    });
  },
  
  presenceOf: function(form) {
    $(form + ' input.required').each(function() {
      if($(this).hasClass('required') && $(this).val().length > 0)
        Validation.removeError(this);
      else
        Validation.addError(this, 'deve ser preenchido');
    });
    $(form + ' select.required').each(function() {
      if($(this).hasClass('required') && $(this).val().length > 0)
        Validation.removeError(this);
      else
        Validation.addError(this, 'deve ser preenchido');
    });
    $(form + ' textarea.required').each(function() {
      if($(this).hasClass('required') && $(this).val().length > 0)
        Validation.removeError(this);
      else
        Validation.addError(this, 'deve ser preenchido');
    });
  },
  
  addError: function(field, message) {
    if(!($(field).next('.error').length > 0)) {
      var error = document.createElement('p');
      $(error).addClass('error');
      $(error).text(message);
      $(error).insertAfter($(field));
    }
  },
  
  removeError: function(field) {
    $(field).next('.error').remove();
  },
  
  submit: function(form) {
    Validation.presenceOf(form);
    Validation.formatOfEmail(form);
    Validation.formatOfPhone(form);
    
    if($(form + ' .error').length > 0) {
       Validation.error(form);
     } else {
       $.ajax({
         url: $(form).attr('action'),
         data: $(form).serialize(),
         type: $(form).attr('method'),
         success: function(response) {
           Validation.success(form);
         }
       });
     }
  },

	iframeSubmit: function(form) {
    Validation.presenceOf(form);
    Validation.formatOfEmail(form);
    Validation.formatOfPhone(form);
    
    if($(form + ' .error').length > 0) {
       Validation.error(form);
			 return false;
     } else {
       return true;
     }
  },
  
  success: function(form) {
    var message = document.createElement('p');
    $(message).text('Mensagem enviada com sucesso');
		$(message).addClass("notification");
    $(message).insertBefore($(form));
    $('#error').remove();
    $(form).remove();
		setTimeout(function() {
		  closeWindowScreen();
		}, 5000);
  },
  
  error: function(form) {
    if(!($('#error').length > 0)) {
      var message = document.createElement('p');
			$(message).attr("id", "error");
      $(message).text('Preencha os campos corretamente');
      $(message).insertAfter($(form).children('h3'));
    }
  }
}
