function checkDV10(cnum, creq, cpos, cfrm, cnome) {

/* ######################################################################### #
 # Esta função calcula dígitos verificadores "MODULO 10".                    #
 #                                                                           #
 # Parâmetros posicionais:                                                   #
 # cnum: campo a ser verificado. Se o DV estiver em um campo separado,       #
 #       ele deve ser concatenado ao número, na chamada da função.           #
 # creq: "1" indica que campo deve ser obrigatoriamente preenchido, "0" o    #
 #        contrário. Se o campo for preenchido, ele será sempre validado.    #
 # cpos: posicao relativa do campo no formulário: de "0" até (n-1),          #
 #       sendo "n" o número de campos do formulário.                         #
 #       Obs.: Este parâmetro é usado para posicionamento em caso de erro.   #
 #             Para obter cpos: cpos = getFieldPos("nome-do-campo").         #
 # cfrm: identificação (posição relativa) do formulário dentro do            #
 #       documento, sendo:                                                   #
 #       "0", a identificação do 1o. formulário, "1", do 2o., etc.           #
 # Exemplo de uso:                                                           #
 # A função "checkDV10" pode ser chamada no evento "onChange" do campo       #
 # associado ao número a ser consistido.                                     #
 # Ex.: <input ... onChange="checkDV10(this.value,1"> ou                     #
 #      <input name='dv' ... onChange="checkDV10(numero.value+this.value,1"> #
 #                                                                           #
 # Autor: Antonio Augusto Rocha Luz                               18/05/1998 #
 # ######################################################################### */

  var campoOK = "0123456789";
  var campo = cnome.name;
  var Valido = true;

  for (i = 0;  i < cnum.length;  i++)
  {
    ch = cnum.charAt(i);
    for (j = 0;  j < campoOK.length;  j++)
      if (ch == campoOK.charAt(j))
        break;
    if (j == campoOK.length)
    {
      Valido = false;
      break;
    }
  }
  if (!Valido)
  {
    alert("Este campo só aceita números.");
		document.forms[cfrm].elements[campo].focus();
		return false;
  } 
 
if (creq == null) { creq = 0; }
if (cpos == null) { cpos = 0; }
if (cfrm == null) { cfrm = 0; }

var spaces = "                  ";
var l = cnum.length;
spaces = spaces.substring(0,cnum.length);
 
document.forms[cfrm].elements[cpos].correct = false;

if ((cnum == "") || (cnum == spaces)) {
	if (creq == 1) {
		alert("Por favor, informe este campo!")
		document.forms[cfrm].elements[cpos].focus();
		document.forms[cfrm].elements[cpos].select();
		return false; }
	else {
		document.forms[cfrm].elements[cpos].correct = true;
		return true; }}

m = new Array(1);
d = new Array(l);
  
var sum1 = 0;
var sum2 = 0;
m[0] = 2;
m[1] = 1;

for (var i = 2; i <= l; i++) {
	d[i] = cnum.substring(l-i,l-i+1);
	j = Math.ceil(i%2);
	sum1 = d[i] * m[j];
	if (sum1 > 9) {
		var s1 = sum1 % 10;
		var s2 = (sum1 - s1) / 10;
		sum1 = s1 + s2; }
	sum2 = sum2 + sum1;
}
    
var resto = sum2 % 10;
var dvc = 10 - resto;
 
if (dvc == 10) { dvc = 0 }

dvi = cnum.substring(l-1,l);
// alert("num=" + document.forms[cfrm].elements[cpos].value + "; dvc=" + dvc + "; dvi=" + dvi);

if (dvi != dvc) {
	alert("Campo Inválido. Dígito Verificador não confere!")
	document.forms[cfrm].elements[campo].focus();
//	document.forms[cfrm].elements[cpos].focus();
//	document.forms[cfrm].elements[cpos].select();
	return false; }
  
return true;

}
/* ### [ end_CheckDV10 ] ################################################### */
