function showMessage(message, element, click) {
  element     = element !== undefined ? element : '';
  var dialog = $('<div class="js_dialog-message">' + message + '<div class="js_dialog-message-buttons"><button type="button" class="js_dialog-message-ok">OK</button></div></div>');
  dialog.keypress(function(e) {
    var k = e.keyCode;
    if (k == 13) {
      $('.js_dialog-message-ok').click();
    }
  });
  
  if (element == '') {
    $.blockUI({message: dialog});
  } else {
    element.block({message:dialog});
  }
  
  $('.js_dialog-message-ok').click(function() {
    if (click) click();
    if (element == '') $.unblockUI();
    else element.unblock();
  }).focus();
}

function validateCPF(cpf) {
  var num = cpf.substr(0, 9);
  if (num == '000000000' || num == '111111111' || num == '222222222' || 
      num == '333333333' || num == '444444444' || num == '555555555' ||
      num == '666666666' || num == '777777777' || num == '888888888' ||
      num == '999999999') return false;

  var digits = cpf.substr(9, 2);
  var d1 = 0;
  var d2 = 0;
  for (var i = 0; i < 9; i++) d1 += Number(num.charAt(i)) * (10 - i);
  d1 = 11 - d1 % 11;
  if (d1 > 9) d1 = 0;
  num += d1;
  
  for (var i = 0; i < 10; i++) d2 += Number(num.charAt(i)) * (11 - i);
  d2 = 11 - d2 % 11;
  if (d2 > 9) d2 = 0;
  return digits == (String(d1) + String(d2));
}

function validateCNPJ(cnpj) {
  var num = cnpj.substr(0, 12);
  if (num == '000000000000' || num == '111111111111' || num == '222222222222' || 
      num == '333333333333' || num == '444444444444' || num == '555555555555' ||
      num == '666666666666' || num == '777777777777' || num == '888888888888' ||
      num == '999999999999') return false;
      
  var digits = cnpj.substr(12, 2);
  var d1 = 0, d2 = 0;
  
  // Primeiro dígito verificador
  d1  = 5 * Number(num.charAt(0)) + 4 * Number(num.charAt(1)) + 3 * Number(num.charAt(2))  + 2 * Number(num.charAt(3));
  d1 += 9 * Number(num.charAt(4)) + 8 * Number(num.charAt(5)) + 7 * Number(num.charAt(6))  + 6 * Number(num.charAt(7));
  d1 += 5 * Number(num.charAt(8)) + 4 * Number(num.charAt(9)) + 3 * Number(num.charAt(10)) +  2 * Number(num.charAt(11));
  d1 = 11 - d1 % 11;
  if (d1 > 9) d1 = 0;
  
  // Segundo dígito verificador
  d2  = 6 * Number(num.charAt(0)) + 5 * Number(num.charAt(1)) + 4 * Number(num.charAt(2))  + 3 * Number(num.charAt(3));
  d2 += 2 * Number(num.charAt(4)) + 9 * Number(num.charAt(5)) + 8 * Number(num.charAt(6))  + 7 * Number(num.charAt(7));
  d2 += 6 * Number(num.charAt(8)) + 5 * Number(num.charAt(9)) + 4 * Number(num.charAt(10)) + 3 * Number(num.charAt(11));
  d2 += 2 * d1;
  d2 = 11 - d2 % 11;
  if (d2 > 9) d2 = 0;
  
  // Confere se os dígitos fornecidos pelo usuário estão corretos.
  return digits == (String(d1) + String(d2));
}

function checkLoginType(data) {
  if (data.length == 11) return validateCPF(data);
  else if (data.length == 14) return validateCNPJ(data);
  return false;
}

function encrypt(s) {
  setMaxDigits(19);
  var key = new RSAKeyPair(kp.e, '0', kp.n);
  var result = '';
  
  var blocks = Math.ceil(s.length / 8);
  var slen   = s.length;
  for (var i = 0; i < blocks; i++) {
    if (result)
      result += ' ';
    result += RSAEncrypt(key, s.substring(i * 8, i * 8 + 8));
  }
  
  return result;
}

function loginValidate() {
  $('#js_log_frm').ajaxForm({
    clearForm: true,
    dataType: 'json',
    beforeSubmit: function(formData, jqForm, options) {
      if (!checkLoginType($('#js_log_cpfcnpj').val())) {
        showMessage('Usuário inválido ou em branco.', '', function() {$('#js_log_cpfcnpj').focus()});
        return false;
      }
      
      if ($('#js_log_senha').val() == '') {
        showMessage('Senha em branco.', '', function() {$('#js_log_senha').focus()});
        return false;
      }

      $.blockUI({
        message: '<img border="0" src="app/main/templates/img/ajax-loader.gif" alt=""/>',
        css: {
          backgroundColor:'#fff',
          border: '0px',
          textAlign: 'center',
          width:'',
          padding: '10px 143px'
        }
      });
      for (var i = 0; i < formData.length; i++) {
        if (formData[i].name == 'log_cpfcnpj' || formData[i].name == 'log_senha') {
          formData[i].value = encrypt(formData[i].value);
        }
      }
    },
    success: function(data) {
      switch (data) {
        case 0:
          $.unblockUI();
          showMessage('Login inválido.', '', function() {$('#js_log_cpfcnpj').focus()});
          break;
          
        case -1:
        case 1:
          window.location = '?route=Home/page/areacliente';
          break;
          
        default:
          $.unblockUI();
      }
    }
  });
}

function setPasswordValidate() {
  $.validator.messages.required = 'Campo obrigatório.';
  $('#js_sen_frm').validate({
    rules: {
      sen_atual: 'required',
      sen_nova: 'required',
      sen_confirmacao: {
        required: '#js_sen_nova:filled',
        equalTo: '#js_sen_nova'
      }
    },
    messages: {
      sen_confirmacao: {
        equalTo: 'As senhas não conferem.'
      }
    },
    submitHandler: function(form){
      $(form).ajaxSubmit({
        resetForm: true,
        beforeSubmit: function(formData, jqForm, options){
         $.blockUI({
            message: '<img border="0" src="app/main/templates/img/ajax-loader.gif" alt=""/>',
            css: {
              backgroundColor:'#fff',
              border: '0px',
              textAlign: 'center',
              width:'',
              padding: '10px 143px'
            }
          });
          for (var i = 0; i < formData.length; i++) {
            if (formData[i].name == 'sen_atual' || formData[i].name == 'sen_nova' || formData[i].name == 'sen_confirmacao') {
              formData[i].value = encrypt(formData[i].value);
            }
          }
        },
        success: function(data) {
          $.unblockUI();
          switch (data) {
            case '-1':
              showMessage('Senha incorreta.', '', function() {$('#js_sen_atual').focus()});
              break;
              
            case '0':
              showMessage('Ocorreu um erro.', '', function() {$('#js_sen_atual').focus()});
              break;
              
            case '1':
              showMessage('Senha alterada com sucesso.', '', null);
              break;
              
            default:
              $.unblockUI();
          }
        }
      });
    }
  });
}

$(function() {
  if ($(".cop_noticias marquee").length)
    $(".cop_noticias marquee")[0].start();
  
  loginValidate();
  setPasswordValidate();

  if ($('#js_arquivo').length) {
    $.loadUploader('#js_arquivo', {
      allowedExt: ['doc', 'docx', 'odf', 'odp', 'ods', 'odt', 'pdf', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'rtf', 'gif', 'jpg', 'png', 'zip', '7z'],
      url: '?route=Enviar/arquivo',
      forceCreateForm: true,
      noReplace: false,
      beforeUpload: function(form){
        if ($('#js_arquivo').val() == '') {
          alert('Selecione o arquivo.');
          return false;
        }
        $.blockUI({
          baseZ: 3500,
          message: 'Aguarde, por favor...'
        });
      },
      onResponse: function(data, element){
        $.unblockUI();
        if (data[0]) {
          $('#js_mensagem').focus();
        }
        else {
          alert(data[1]);
        //alert('Desculpe o arquivo não pôde ser enviado. Tente novamente.');
        }
      },
      onChangeFile: function(element){
        $.get('?route=Enviar/cancelFile');
      }
    });
  }
  
  $('#js_enviar').click(function() {
    if ($('#js_arquivo').length == 0) {
      $.blockUI({
        baseZ: 3500,
        message: 'Aguarde, por favor...'
      });
      $.post('?route=Enviar/mensagem', {
        mensagem: $('#js_mensagem').val()
      }, function(data){
        $.unblockUI();
        if (data) {
          $('#js_uploader_changeFile').click();
          $('#js_mensagem').val('');
        } else {
          alert('Ocorreu um erro. Tente novamente.\nSe esta mensagem continuar aparecendo contate o administrador.');
        }
      }, 'json');
    } else {
      alert('Você deve escolher um arquivo.');
    }
  });
});
