var isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") >= 0;
var dispVis = isFirefox ? '' : 'inline';

function validateEmail(eMail) {
  return /^(\w+\.)*([\w-]+)@([\w-]+\.)+([a-zA-Z]{2,4})$/.test(eMail);
}

function getInputSelection(input) {
  if (document.selection) {
    var range = document.selection.createRange();
    return (range.parentElement() == input) ? range.text : '';
  } else if (typeof(input.selectionStart) != undefined)
    return input.value.substring(input.selectionStart, input.selectionEnd);
  else
    return null;
}

function FormatMask(obj, mask, evt) {
  var keyCode = window.event ? window.event.keyCode : evt.charCode ? evt.charCode : evt.which;
  var ch = String.fromCharCode(keyCode);
  var isNumber = ((keyCode >= 48) && (keyCode <= 57));
  var textSel = getInputSelection(obj);

  if ((keyCode == 8) || (keyCode == 0))
    return true;

  if ((keyCode == 13) && validaFormulario())
    $('formulario').submit();

  if ((obj.value.length >= mask.length) && (textSel == ''))
    return false;

  if ((mask.charAt(obj.value.length) == '9') && !isNumber)
    return false;

  if ((mask.length > obj.value.length+1) && (mask.charAt(obj.value.length+1) != '9')) {
    obj.value += ch + mask.charAt(obj.value.length+1);
    return false;
  }

  if ((mask.length > obj.value.length) && (mask.charAt(obj.value.length) != '9')) {
    if (mask.charAt(obj.value.length) != ch) {
      obj.value += mask.charAt(obj.value.length);

      if ((mask.charAt(obj.value.length) != '9') || isNumber)
        obj.value += ch;
    } else
      obj.value += mask.charAt(obj.value.length);

    return false;
  }

  obj.value += '';
}

function $(id) {
  return document.getElementById(id);
}

function showDiv(dvName, visible, focus) {
  $(dvName).style.display = visible ? 'inline' : 'none';

  if (focus)
    $(focus).focus();
}

function tipoChanged(obj) {
  var fisica = (obj.value == 'fisica');

  $('trEmpresa1').style.display = !fisica ? dispVis : 'none';
  $('trEmpresa2').style.display = $('trEmpresa1').style.display;
  $('trCPF1').style.display = fisica ? dispVis : 'none';
  $('trCPF2').style.display = $('trCPF1').style.display;
  $('trCNPJ1').style.display = !fisica ? dispVis : 'none';
  $('trCNPJ2').style.display = $('trCNPJ1').style.display;
}

function validaFormulario() {
  var ret = true;
  var fisica = $('tipo_pessoa').value == 'fisica';

  showDiv('dvNome', false);
  showDiv('dvEmpresa', false);
  showDiv('dvEmail', false);
  showDiv('dvTelefone', false);
  showDiv('dvCPF', false);
  showDiv('dvCNPJ', false);
  showDiv('dvCidade', false);
  showDiv('dvEstado', false);
  showDiv('dvComentario', false);

  if (!fisica && ($('empresa').value == '')) {
    showDiv('dvEmpresa', true, ret?'empresa':false);
    ret = false;
  }

  if ($('nome').value == '') {
    showDiv('dvNome', true, ret?'nome':false);
    ret = false;
  }

  if (!validateEmail($('email').value)) {
    showDiv('dvEmail', true, ret?'email':false);
    ret = false;
  }

  if ($('telefone').value == '') {
    showDiv('dvTelefone', true, ret?'telefone':false);
    ret = false;
  }

  if (fisica && !validCPF($('cpf').value)) {
    showDiv('dvCPF', true, ret?'cpf':false);
    ret = false;
  }

  if (!fisica && !validCNPJ($('cnpj').value)) {
    showDiv('dvCNPJ', true, ret?'cnpj':false);
    ret = false;
  }

  if ($('cidade').value == '') {
    showDiv('dvCidade', true, ret?'cidade':false);
    ret = false;
  }

  if ($('estado').value == '0') {
    showDiv('dvEstado', true, ret?'estado':false);
    ret = false;
  }

  if ($('mensagem').value == '') {
    showDiv('dvComentario', true, ret?'mensagem':false);
    ret = false;
  }

  return ret;
}

function validCPF(num) {
  num = ParseNumb(num);
  if (num == 0)
    return false;
  else
    return TestDigit(num, 'CPF', num.length-2) && TestDigit(num, 'CPF', num.length-1);
}

function validCNPJ(num) {
  num = ParseNumb(num);
  if (num == 0)
    return false;
  else
    return TestDigit(num, 'CNPJ', num.length-2) && TestDigit(num, 'CNPJ', num.length-1);
}

function ClearStr(str, ch) {
  while ((cx = str.indexOf(ch)) != -1)
    str = str.substring(0, cx) + str.substring(cx + 1);

  return(str);
}

function ParseNumb(c) {
  c = ClearStr(ClearStr(ClearStr(c, '-'), '/'), '.');

  if(parseFloat(c) / c != 1)
    return (parseFloat(c) * c == 0) ? c : 0;
  else
    return c;
}

function TestDigit(num, type, g) {
  var dig = 0;
  var ind = 2;

  for(var f = g; f > 0; f--) {
    dig += parseInt(num.charAt(f - 1)) * ind;
    ind = (type == 'CNPJ') && (ind > 8) ? 2 : ind+1;
  }

  dig %= 11;
  dig = (dig < 2) ? 0 : 11-dig;

  return (dig == parseInt(num.charAt(g)));
}

function updateMsg(obj) {
  var msg = obj.options[obj.selectedIndex].getAttribute('msg');
  document.getElementById('msgDestinatario').value = msg ? msg : '';
}
