// Estas variables son para evitar repetir (inutilmente) una búsqueda.
var lastUserNameSearch = '',
    lastEmailSearch = '';

window.addEvent('domready', function(){
  $$('#form .input').addEvent('focus', function(){ this.addClass('focus'); })
                    .addEvent('blur', function(){ this.removeClass('focus'); });

  var helpers = $$('#form .info');

  var input_user_name = $('input_user_name');
  input_user_name.addEvent('focus', function(){
    helpers.setStyle('display', 'none');
    $('username_help').style.display = 'block';
  })
  input_user_name.addEvent('blur', searchUserName).focus();

  var input_email = $('input_email');
  input_email.addEvent('focus', function(){
    helpers.setStyle('display', 'none');
    $('email_help').style.display = 'block';
  });

  input_email.addEvent('blur', searchEmail);

  var input_password = $('input_password');
  input_password.value = '';
  input_password.addEvent('focus', function(){
    helpers.setStyle('display', 'none');
    $('password_help').style.display = 'block';
  });

  input_password.addEvent('keyup', checkRePassword)
                .addEvent('blur', checkPassword);

  var input_re_password = $('input_re_password');
  input_re_password.value = '';
  input_re_password.addEvent('focus', function(){
    helpers.setStyle('display', 'none');
    $('password_help').style.display = 'block';
  });

  input_re_password.addEvent('keyup', checkRePassword)
                   .addEvent('blur', checkRePassword);

  // Se asegura de solo enviar el formulario una vez
  $('form_submit').addEvent('click', function(){
    if (!$('terms').checked){
      $('form_data').addClass('bad_terms');
      return false;
    }
    this.removeEvents();
    $('form').submit();
  });

});


// Busca (con AJAX) si el nombre está disponible.
function searchUserName(){
  var input = $('input_user_name');
  if( !checkUserName() ){
    return false;
  };

  var val = input.value;
  if( (''==val) || val==lastUserNameSearch ){
    return false;
  };

  $('form_data').removeClass('ok_username');
  $('form_data').removeClass('bad_username_taken');
  $('form_data').addClass('searching_username');
  var jSonRequest = new Json.Remote('/user/check_user_name?r='+$random(0, 100),
    { onComplete: function(rpta){
        $('form_data').removeClass('searching_username');

        if (rpta.av){
          $('form_data').removeClass('bad_username_taken');
          $('form_data').addClass('ok_username');
        }
        else{
          $('form_data').addClass('bad_username_taken');
        }
      }
    }).send({'username':escape(val)});
   lastUserNameSearch = val;
};


// Busca (con AJAX) si el e-mail está disponible.
function searchEmail(e, force){
  var input = $('input_email');
  if( !checkEmail() ){
    return false;
  };

  var val = input.value;
  if( (''==val) || val==lastEmailSearch ){
    return false;
  };

  $('form_data').removeClass('ok_email');
  $('form_data').removeClass('bad_email_taken');
  $('form_data').addClass('searching_email');
  var jSonRequest = new Json.Remote('/user/check_email?r='+$random(0, 100),
    { onComplete: function(rpta){
        $('form_data').removeClass('searching_email');

        if (rpta.av){
          $('form_data').removeClass('bad_email_taken');
          $('form_data').addClass('ok_email');
        }
        else{
          $('form_data').addClass('bad_email_taken');
        }
      }
    }).send({'email':escape(val)});
  lastEmailSearch = val;
};


// Revisa si el formato de nombre es correcto.
function checkUserName(){
  var val, uniRules, pat, regex, input;
  input = $('input_user_name');
  val = input.value.trim();

  uniRules = {'\\s+':'_', '[áàä]':'a', '[éèë]':'e', '[íìï]':'i', '[óòö]':'o', '[úùü]':'u', 'ñ':'n'}
  for( pat in uniRules ){
    regex = new RegExp(pat, 'g');
    val = val.replace(regex, uniRules[pat]);
  };
  input.value = val;

  var reUser   = /^[0-9]*[a-zA-Z*_-]+[a-zA-Z0-9*_-]*$/;
  if( !reUser.test(val) ){
    $('form_data').addClass('bad_username_format');
    input.addEvent('keyup', checkUserName);
    return false;
  }
  else{
    $('form_data').removeClass('bad_username_format');
  };
  return true;
};


// Revisa si el formato de email es correcto (a grandes rasgos).
function checkEmail(){
  var input = $('input_email');
  var val = input.value;
  val = val.replace(/\s+/g, '');
  input.value = val;

  var reEmail  = /^.+@.+\..{2,5}$/;
  if( !reEmail.test(val) ){
    $('form_data').addClass('bad_email_format');
    input.addEvent('keyup', checkEmail);
    return false;
  }
  else{
    $('form_data').removeClass('bad_email_format');
  };
  return true;
};

// Revisa si el password es lo bastante seguro.
function checkPassword(){
  $('form_data').removeClass('ok_password');
  var input = $('input_password');
  var val = input.value;
  if( ''== val ){
    return false;
  };
  if( val.length < 6 ){
    $('form_data').addClass('bad_password_format');
    input.addEvent('keyup', checkPassword);
  }
  else{
    $('form_data').removeClass('bad_password_format');
  };
};


// Revisa si el password y su confirmación coinciden.
function checkRePassword(){
  var val = $('input_re_password').value;
  if( ''== val ){
    return false;
  };
  if( (''!= val) && (val != $('input_password').value) ){
    $('form_data').removeClass('ok_password');
    $('form_data').addClass('bad_repass_format');
  }
  else{
    $('form_data').removeClass('bad_repass_format');
    $('form_data').addClass('ok_password');
  };
};

