//ü
var FORMS = (function() {
  var msg = {
    en: {
      required: 'This field must not be empty',
      invalid: 'The format of this entry is invalid',
      range: 'The value must be between %min an %max',
      unique: 'This value already exists',
      match: 'The two values do not match'
    },
    fr: {
      required: 'Ce champ est obligatoire',
      invalid: 'Le format de ce valeur est invalide',
      range: 'Ce valeur doit être entre %min et %max',
      unique: 'Ce valeur existe déjà',
      match: 'Les deux valeurs sont differents'
    }
  };
  
  var lang = $('html').attr('lang') || 'en';
  msg = msg[lang];
    
  
  return {
    init : function(selector) {
      selector = selector || 'form';
      $(selector).each(function(){
        var form = $(this);
        var formRows = form.find('.form-row');
        var formElements = form.find(':input');
        
        formElements.each(function() {
          this.formRow = $(this).closest('.form-row');
        });
        
        var toggleDivClass = function(el, className){
          formRows.removeClass('active');
          el.closest('.form-row').addClass(className);
        };
        
        var addError = function(el, type) {
          el[0].formRow.removeClass('active').addClass('error ' + type);
          var errorUl = el[0].formRow.prev('ul.error_list').remove();
          errorUl = $('<ul class="error_list"/>');
          el[0].formRow.before(errorUl);
          errorUl.append('<li>' + msg[type] + '</li>');
          el.select();
        }

        var removeError = function(el) { 
          el[0].formRow.removeClass('error invalid required').prev('ul.error_list').remove();
        }  
        
        formElements.each(function(){
          var el = $(this);
          el.focus(function() {
            formRows.removeClass('active');
            el.closest('.form-row').addClass('active');
          });
    
          // autofocus
          if(this.getAttribute('autofocus') !== null) {
            el.focus();
          }
    
          el.blur(function() {
            removeError(el);
            // pattern
            var pattern = this.getAttribute('pattern');
            if(pattern) {
              var regExp = new RegExp(pattern, 'i');
              if(el.val() && !regExp.test(el.val())) {
                addError(el, 'invalid');
              }
            }
          });              
        });
        
        form.submit(function() {
          var hasError = false;
          formElements.each(function() {
            var el = $(this);
            if(this.getAttribute('required') !== null && !el.val()){
              addError(el, 'required');
            }
          })
          return !!hasError;
        })          
                   
      });
    }
  }
}());

    

