﻿// Esta função põe o foco no campo 'User Name' (elemento com ID = txtUserName, teoricamente dentro do arquivo xxxLogon.ascx).
function LogonFocus() {
  try {
    document.getElementById('txtUserName').focus();
  }
  catch(excError) {
    OpenError('Default', excError, '');
  }
}
// Função que efetivamente faz o logon do usuário. Comentada inline.
function CheckUser() {
  // Esconde o link de acesso pelo Internet Explorer (elemento com ID = ancLinkIE, teoricamente dentro do arquivo xxxLogon.ascx).
  document.getElementById('ancLinkIE').style.display = 'none';
  // Cria a variável local XMLHttp e coloca nela o objeto XMLHTTPRequest instanciado e retornado pela função createXMLHttp do arquivo createXMLHttp.js.
  var XMLHttp = createXMLHttp();
  // Se o objeto XMLHTTPRequest foi instanciado corretamente dentro da variável XMLHttp.
  if (XMLHttp) {
    // Cria a variável local strUsername e coloca nela o que estiver dentro do campo User Name (elemento com ID = txtUserName, teoricamente dentro do arquivo xxxLogon.ascx).
    var strUsername = document.getElementById('txtUserName').value;
    // Se o usuário digitou o User Name.
    if (strUsername != '') {
      // Cria a variável local strPassword e coloca nela o que estiver dentro do campo Password (elemento com ID = txtPassword, teoricamente dentro do arquivo xxxLogon.ascx).
      var strPassword = document.getElementById('txtPassword').value;
      // Se o usuário digitou a Password.
      if (strPassword != '') {
        // Cria a variável local strLogonParams e configura nela os parâmetros (UserName e Password) que serão enviados via post para a página xxxLogon.aspx.
        var strLogonParams = 'UserName=' + strUsername + '&Password=' + strPassword;
        // Abre a conexão pelo objeto XMLHTTPRequest configurado na variável XMLHttp.
        XMLHttp.open('POST', '../controls/xxxLogon.aspx', true);
        // Configura o cabeçalho da requisição http.
        XMLHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        XMLHttp.setRequestHeader('Cache-Control', 'no-cache');
        XMLHttp.setRequestHeader('Content-length', strLogonParams.length);
        XMLHttp.setRequestHeader('Connection', 'close');
        // Define a função que tratará a resposta da requisição http.
        XMLHttp.onreadystatechange = function() {
          // Tente processar o código abaixo.
          try {
            // Se o estado da requisição for igual a 4 (interactive).
            if (XMLHttp.readyState == 4) {
              // Se o status da resposta http for igual a 200 (OK).
              if (XMLHttp.status == 200) {
                // Se a resposta do servidor começar com a string 'False' (Indicação de que aconteceu um erro).
                if (XMLHttp.responseText.indexOf('False') == 0) {
                  // Mostra o erro 'Logon_error' com a resposta completa do servidor como detalhe de erro.
                  OpenError('Logon_error', '', XMLHttp.responseText);
                }
                // Se a resposta do servidor não começar com a string 'False' (Indicação de que a requisição foi bem sucedida - Normalmente começa com 'True').
                else {
                  // Cria a variável local objAgt e coloca nela o nome do agente (browser) em caixa baixa.
                  var objAgt = navigator.userAgent.toLowerCase();
                  // Se o browser for o Internet Explorer.
                  if (objAgt.indexOf('msie') != -1) {
                    // Fecha qualquer erro eventualmente aberto;
                    CloseError();
                    // Mostra, configura e pôe o foco no link para acesso pelo Internet Explorer (elemento com ID = ancLinkIE, teoricamente dentro do arquivo xxxLogon.ascx).
                    document.getElementById('ancLinkIE').style.display = 'block';
                    if (gup('Origem') == '') {
                      document.getElementById('ancLinkIE').href = 'pages/xxxPage.aspx?UserControl=' + XMLHttp.responseText.substring(5, XMLHttp.responseText.lastIndexOf(';')) + '&UserName=' + strUsername + '&UserId=' + XMLHttp.responseText.substr(XMLHttp.responseText.lastIndexOf(';') + 1, XMLHttp.responseText.length);
                    }
                    else {
                      if (gup('Origem').toString().indexOf('?') > -1) {
                        var strCaracter = '&';
                      }
                      else {
                        var strCaracter = '?';
                      }
                      document.getElementById('ancLinkIE').href = gup('Origem') + strCaracter + 'UserControl=' + XMLHttp.responseText.substring(5, XMLHttp.responseText.lastIndexOf(';')) + '&UserName=' + strUsername + '&UserId=' + XMLHttp.responseText.substr(XMLHttp.responseText.lastIndexOf(';') + 1, XMLHttp.responseText.length);
                    }
                    document.getElementById('ancLinkIE').focus();
                  }
                  // Se o browser não for o Internet Explorer.
                  else {
                    // Redireciona para o sistema passando o UserControl e o UserName como parâmetros.
                    if (gup('Origem') == '') {
                      window.location = 'pages/xxxPage.aspx?UserControl=' + XMLHttp.responseText.substring(5, XMLHttp.responseText.lastIndexOf(';')) + '&UserName=' + strUsername + '&UserId=' + XMLHttp.responseText.substr(XMLHttp.responseText.lastIndexOf(';') + 1, XMLHttp.responseText.length);
                    }
                    else {
                      if (gup('Origem').toString().indexOf('?') > -1) {
                        var strCaracter = '&';
                      }
                      else {
                        var strCaracter = '?';
                      }
                      window.location = gup('Origem') + strCaracter + 'UserControl=' + XMLHttp.responseText.substring(5, XMLHttp.responseText.lastIndexOf(';')) + '&UserName=' + strUsername + '&UserId=' + XMLHttp.responseText.substr(XMLHttp.responseText.lastIndexOf(';') + 1, XMLHttp.responseText.length);
                    }
                  }
                }
              }
              // Se o status da resposta http não for igual a 200 (OK).
              else {
                // Mostra o erro 'Default' com o detalhe mostrando que o status da resposta http foi diferente de 200.
                OpenError('Default', '', 'The response http status was different of 200. (XMLHttp.status != 200)');
              } 
            }
            // Enquanto o estado da requisição não for igual a 4 (interactive).
            else {
              // Por alguma coisa do tipo: Carregando...
            }
          }
          // Se ocorreu algum erro ao processar o código.
          catch(excError) {
            // Mostra o erro 'Default' com a descrição do erro como detalhe.
            OpenError('Default', excError, '');
          }
        }
        // Envia a requisição http com os parâmetros da string strLogonParams via POST.
        XMLHttp.send(strLogonParams);
      }
      // Se o usuário não digitou a Password.
      else {
        // Mostra o erro 'Logon_blank_Password' sem nenhum detalhe.
        OpenError('Logon_blank_Password', '', '');
        // põe o foco no campo 'Password' (elemento com ID = txtPassword, teoricamente dentro do arquivo xxxLogon.ascx).
        document.getElementById('txtPassword').focus();
      }
    }
    // Se o usuário não digitou o User Name.
    else {
      // Mostra o erro 'Logon_blank_Username' sem nenhum detalhe.
      OpenError('Logon_blank_Username', '', '');
      // Põe o foco no campo 'User Name' (elemento com ID = txtUserName, teoricamente dentro do arquivo xxxLogon.ascx).
      document.getElementById('txtUserName').focus();
    }
  }
  // Se o objeto XMLHTTPRequest não foi instanciado corretamente dentro da variável XMLHttp.
  else {
    // Mostra o erro 'Ajax_error' sem nenhum detalhe.
    OpenError('Ajax_error', '', '');
  }
}
// Esta função é executada quando uma tecla é precionada no campo que a possui em seu evento onkeydown (normalmente). Ela recebe como parâmetro o evento disparado quando a tecla é precionada, checa se esta tecla foi o ENTER e, em caso positivo, executa a função CheckUser deste mesmo arquivo javascript.
function IfIsKey13CheckUser(event) {
  if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
    CheckUser();
  }
}
