var user_data = null;
var inputs = [];

function isText(item)
{
  return item.type == "text" || item.type == "password";
}

function turn_off(item)
{
  item = $(item);
  item.disable();
  if (isText(item)) {
    item.value = "";
    item.up().up().hide();
  } /*else
    item.hide();*/
}

function turn_on(item)
{
  item = $(item);
  item.enable();
  if (isText(item)) {
    item.value = "";
    Effect.Appear(item.up().up());
  } /*else
    Effect.Appear(item);*/
}

function show(item, msg)
{
  $(item).innerHTML = msg;
}

function clear(item)
{
  $(item).innerHTML = "";
}

function show_error(what, response)
{
  show('results', what + " (" + response.statusText + "). Intente mas tarde");
}

function clear_messages()
{
  $$('.msg', '.out', '.proc').each(clear);
}

function reset_form()
{
  clear_messages();
  clear('usertype');
  $('emailmsg').hide();

  $w('key userid fullname pwd pw2 submit reset').each(turn_off);

  Ajax.Responders.register({
    onCreate: function() {
      show('processing', "Procesando...");
    },
    on404: function(response) {
      show_error("Falla de sistema", response);
    },
    on418: function(response) {
      show_error("Falla de Base de Datos", response);
    },
    on419: function(response) {
      show_error("Falla de activación", response);
    },
    onFailure: function(response) {
      show_error("Falla de servidor", response);
    },
    onComplete: function() {
      clear('processing');
    }
  });
}

function restart()
{
  reset_form();
  $('uid').value = "";
  $('uid').focus();
  $('uid').select();
}

function handle_uid(item)
{
  reset_form();

  var uid = item.value.strip();
  item.value = uid;
  if (uid.length == 0)
    return;

  turn_on('reset');

  if (uid.search(/\D/) < 0) {
    new Ajax.Request('cgi/check_user.py', {
          parameters: 'studentid=' + uid,
          onSuccess: function(response) {
            user_data = response.responseJSON;
            item.value = user_data.uid;
            process_uid();
          },
          on400: function(response) {
            switch (response.statusText) {
            case "Not Found":
              show('uidmsg', "Carnet inválido");
              break;

            default:
              show_error("Falla de sistema", response);
            }
          }
        });
  } else {
    new Ajax.Request('cgi/check_user.py', {
          parameters: 'uid=' + uid,
          onSuccess: function(response) {
            user_data = response.responseJSON;
            process_uid();
          },
          on400: function(response) {
            switch (response.statusText) {
            case "Not Found":
              show('uidmsg', "<b>USBID</b> inválido");
              break;

            default:
              show_error("Falla de sistema", response);
            }
          }
        });
  }
}

function process_uid()
{
  var user_type = user_data.userType;
  if (user_type == "Estudiante")
    user_type += " (No olvide su <b>USBID</b>)".fontcolor("black");
  show('usertype', user_type);

  if (!user_data.activable) {
    show('uidmsg', "El <b>USBID</b> ya está activo");
    return;
  }

  turn_on('submit');
  /*$('submit').enable();*/

  inputs = $w(user_data.hasKey? 'key pwd pw2': 'userid fullname pwd pw2');
  inputs.each(turn_on);
  $(inputs[0]).focus();
  $(inputs[0]).select();
}

function handle_key(item)
{
  item.value = item.value.strip().replace(/\s+/g, " ");
  clear('keymsg');
}

function handle_userid(item)
{
  item.value = item.value.replace(/\D/g, "");
  clear('idmsg');
}

function handle_fullname(item)
{
  item.value = item.value.strip().replace(/\s+/g, " ");
  clear('namemsg');
}

function check_pwd()
{
  if ($('pwd').value.length == 0)
    show('pwdval', "Ingrese una contraseña");
  else if ($('pwd').value.length < 6)
    show('pwdval', "Contraseña demasiado corta");
  else {
    clear('pwdval');
    return true;
  }
  $('pwd').focus();
  $('pwd').select()
  return false;
}

function validate_pwd()
{
  if ($('pw2').value != $('pwd').value) {
    show('pwdck', "La contraseña de verificación es distinta");
    $('pw2').value = "";
    $('pwd').focus();
    $('pwd').select();
    return false;
  }
  clear('pwdck');
  return true;
}

function handle_pwd(item)
{
  item.value = item.value.replace(/\s/g, "");
  check_pwd();

  $('pw2').value = "";
  clear('pwdck');
}

function handle_pw2(item)
{
  item.value = item.value.replace(/\s/g, "");
  validate_pwd();
}

function check_data()
{
  if (user_data.hasKey) {
    if ($('key').value.length == 0) {
      show('idmsg', "Ingrese su clave de activación");
      return false;
    }
  } else {
    if ($('userid').value.length == 0) {
      show('idmsg', "Ingrese su Cédula de identidad");
      return false;
    }
    if ($('fullname').value.length == 0) {
      show('namemsg', "Ingrese su nombre completo");
      return false;
    }
  }
  return check_pwd() && validate_pwd();
}

function activate_uid()
{
  clear_messages();
  if (!check_data())
    return;

  turn_off('submit');
  /*$('submit').disable();*/

  new Ajax.Request('cgi/activate_uid.py', {
        parameters: {
          uid:      $('uid').value,
          key:      $('key').value,
          userid:   $('userid').value,
          fullname: $('fullname').value,
          pwd:      $('pwd').value
        },
        onSuccess: function(response) {
          /*turn_off('submit');*/
          show_ok(response.responseJSON.has_email,
                  response.responseJSON.has_gmail,
                  response.responseJSON.gmail_enabled);
        },
        on400: function(response) {
          switch (response.statusText) {
          case "Key":
            show('keymsg', "Clave de Activación incorrecta");
            $('ḱey').focus();
            $('ḱey').select();
            break;

          case "ID":
            show('idmsg', "Cédula de Identidad incorrecta");
            $('userid').focus();
            $('userid').select();
            break;

          case "Name":
            show('namemsg', "Nombre incorrecto");
            $('fullname').focus();
            $('fullname').select();
            break;

          case "Pwd":
            show('pwdval', "Contraseña inválida");
            $('pwd').focus();
            $('pwd').select();
            break;

          case "PwdUnsafe":
            show('pwdval', "Contraseña denasiado corta");
            $('pwd').focus();
            $('pwd').select();
            break;

          default:
            show_error("Falla de sistema", response);
          }
          turn_on('submit');
          /*$('submit').enable();*/
        }
      });
}

function show_ok(has_email, has_gmail, gmail_enabled)
{
  var uid = user_data.uid;
  show('results', ("<b>USBID</b> " + uid + " activado exitosamente").fontcolor('green'));
  if (has_email) {
    var email = uid + "@usb.ve";
    $('email').href = "mailto:" + email;
    $('email').innerHTML = "<" + email + ">";
    $('gmail_login').hide();
    if (has_gmail) {
      $('webmail').href = "http://gmail.usb.ve";
      $('webmail').innerHTML = "Google Mail";
      if (!gmail_enabled)
        $('gmail_login').show();
    } else {
      $('webmail').href = "http://webmail.usb.ve";
      $('webmail').innerHTML = "Webmail";
    }
    $('emailmsg').show();
  }
}

