                  function MM_findObj(n, d) { //v4.0
                    var p,i,x;  if(!d) d=document; if((p=n.indexOf('?'))>0&&parent.frames.length) {
                      d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
                    if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
                    for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
                    if(!x && document.getElementById) x=document.getElementById(n); return x;
                  }
                  function validateCombos()
                  {
                    var i,p,q,nm,test,num,min,max,errors='',args=validateCombos.arguments;

                   for (i=0; i<(args.length -1); i+=2)
                    {
                      val=MM_findObj(args[i]);
                      if (val.selectedIndex == 0) errors += '- '+args[i+1]+' é obrigatório.\n';
                    }
                    return(errors);

                  }

                  function validateOptions()
                  {
                    var i,p,q=0,nm,test,num,min,max,errors='',args=validateOptions.arguments;

                   for (i=0; i<(args.length -1); i+=3)
                    {
                      val=MM_findObj(args[i]);
                      q=0;
                      for(j=0;j<args[i+2];j++)
                      {
                         if (val[j].checked == true) q = 1;
                      }

                      if (q==0) errors += '- '+args[i+1]+' é obrigatório.\n';
                    }

                    return(errors);
                  }
                  function validateDate()
                  {
                      //txt,caption,r,dia_min,mes_min,ano_min,dia_max,mes_max,ano_max
                      var i,p,q=0,nm,test,num,min,max,errors='',data_min='',data_max='';
                      var args = validateDate.arguments;
                      var mes,dia,ano,ano_string,data,dia_min,mes_min,ano_min,dia_max,mes_max,ano_max,numeric_date;

                      for (i=0; i<(args.length -1); i+=9)
                      {

                          val=MM_findObj(args[i]);
                          data = val.value;

                          dia_min=args[i+3];
                          mes_min=args[i+4];
                          ano_min=args[i+5];
                          dia_max=args[i+6];
                          mes_max=args[i+7];
                          ano_max=args[i+8];
                          data_min = (ano_min+mes_min+dia_min);
                          data_max = (ano_max+mes_max+dia_max);
                          if (dia_min == 'n' || mes_min == 'n' || ano_min == 'n') data_min ='';
                          if (dia_max == 'n' || mes_max == 'n' ||  ano_max == 'n')  data_max = '';

                          if (args[i+2] != 'n' || data.length > 0)
                          {

                             if (data.length != 10)
                             {
                                 errors += '- Inválido(a) '+args[i+1]+'. A data deve estar no formato dd/mm/aaaa\n';

                             } else {

                                 dia = data.substr(0,2);
                                 dia = dia.valueOf();

                                 mes = data.substr(3,2);
                                 mes = mes.valueOf();

                                 ano = data.substr(6,4);
                                 ano = ano.valueOf();

                                 ano_string = ano.toString();

                                 numeric_date = data.substr(6,4) + data.substr(3,2) + data.substr(0,2);
                                 if ((dia.valueOf() > 31 || mes.valueOf() >12 || ano_string.length != 4) ||
                                 (dia.valueOf() == 31 && (mes == 2  || mes == 4  || mes == 6  || mes == 9  || mes == 11)) ||
                                 (mes == 2 && (dia == 30 || (dia == 29 && ano%4 !=0))))
                                 {

                                    errors += '- '+ args[i+1]+' deve conter uma data válida\n';

                                 } else if (data_min.length >0 && data_max.length >0) {

                                    if (numeric_date.valueOf() < data_min.valueOf() || numeric_date.valueOf() > data_max.valueOf())
                                    {
                                       errors += '- '+ args[i+1]+' deve conter uma data entre '+dia_min+'/'+mes_min+'/'+ano_min+' e '+dia_max+'/'+mes_max+'/'+ano_max+'\n';
                                    }

                                 }else if(data_min.length >0)
                                 {

                                    if (numeric_date.valueOf() < data_min.valueOf()) errors += '- '+ args[i+1]+' deve conter uma data posterior a '+dia_min+'/'+mes_min+'/'+ano_min+'\n';

                                 }else if(data_max.length >0){

                                    if (numeric_date.valueOf() > data_max.valueOf()) errors += '- '+ args[i+1]+' deve conter uma data anterior a '+dia_max+'/'+mes_max+'/'+ano_max+'\n';

                                 }

                             }
                         }
                      }

                      return(errors);

                  }
                  function validateChecks()
                  {
                    var i,p,q=0,nm,test,num,min,max,errors='',args=validateChecks.arguments;

                   for (i=0; i<(args.length -1); i+=4)
                    {

                      q=0;
                      for(j=args[i+2];j<=args[i+3];j++)
                      {
                        if (form1.elements[j].checked == true) q = 1;
                      }
                      if (q==0) errors += '- '+args[i+1]+' é obrigatório.\n';
                    }

                    return(errors);
                  }

                  function validateForm() { //v4.0
                    var i,p,q,nm,test,num,min,max,errors='',args=validateForm.arguments;
                    for (i=0; i<(args.length-2); i+=3)
                    {
                      test=args[i+2];
                      val=MM_findObj(args[i]);
                      if (val)
                          {
                        nm=val.name;
                        if ((val=val.value)!='')
                        {
                               if (test!='R')
                           {
                              if (isNaN(val)) errors+='- '+args[i+1]+' deve conter um número.\n';
                              if (test.indexOf('inRange') != -1)
                              {
                                         p=test.indexOf(':');
                                min=test.substring(8,p); max=test.substring(p+1);
                                if ((val.valueOf()-min.valueOf() < 0) || (max.valueOf()-val.valueOf()<0))
                                             {
                                               errors+='- '+args[i+1]+' deve conter um número entre '+min+' e '+max+'.\n';
                                     }
                                          }
                           }
                        }
                        else if (test.charAt(0) == 'R') errors += '- '+args[i+1]+' é obrigatório.\n';
                      }
                    }
                    return(errors);
                  }
                  
                  function validateForm2() { //v4.0
                    var i,p,q,nm,test,num,min,max,errors='',args=validateForm2.arguments;
                    for (i=0; i<(args.length-2); i+=3)
                    {
                      test=args[i+2];
                      val=MM_findObj(args[i]);
                      if (val)
                          {
                        nm=val.name;
                        tamanho=val.value.length;
                        //alert(tamanho);
                        if ((val=val.value)!='')
                        {
                               if (test!='R')
                           {
                              if (isNaN(val)) errors+='- '+args[i+1]+' deve conter um número.\n';
                              if (test.indexOf('inRange') != -1)
                              {
                                         p=test.indexOf(':');
                                min=test.substring(8,p); max=test.substring(p+1);
                                if ((val.valueOf()-min.valueOf() < 0) || (max.valueOf()-val.valueOf()<0))
                                             {
                                               errors+='- '+args[i+1]+' deve conter um número entre '+min+' e '+max+'.\n';
                                     }
                                          }
                           }
                           else
                           {
                           if(tamanho<=1) errors += '- '+args[i+1]+' é obrigatório.\n';
                           }
                        }
                        else if (test.charAt(0) == 'R')
                        {
                         errors += '- '+args[i+1]+' é obrigatório.\n';
                        }
                      }
                    }
                    return(errors);
                  }


function Mascara (formato, keypress, objeto){ 
campo = eval (objeto); 

if (formato=='CGC_CNPJ'){ 
separador1 = '.'; 
separador2 = '/'; 
separador3 = '-'; 
conjunto1 = 2; 
conjunto2 = 6; 
conjunto3 = 10; 
conjunto4 = 15; 
//var key = '';
//var strCheck = '0123456789';
//if (keypress == 13) return true; // Enter
//key = String.fromCharCode(keypress); // Get key value from key code
if ((keypress>=48 && keypress <=57) || (keypress>=96 && keypress <=105))
{
if (campo.value.length == conjunto1){ 
campo.value = campo.value + separador1; 
} 
if (campo.value.length == conjunto2){ 
campo.value = campo.value + separador1; 
} 
if (campo.value.length == conjunto3){ 
campo.value = campo.value + separador2; 
} 
if (campo.value.length == conjunto4){ 
campo.value = campo.value + separador3; 
} 
}
else
{
campo.value=campo.value.substring(0,campo.value.length -1);
}
}
if (formato=='cep'){ 
separador1 = '-'; 
conjunto1 = 5; 
conjunto2 = 3; 
if (campo.value.length == conjunto1){ 
campo.value = campo.value + separador1; 
} 
}
if (formato=='hora'){ 
separador1 = ':'; 
conjunto1 = 2; 
if (campo.value.length == conjunto1){ 
campo.value = campo.value + separador1; 
} 
}
if (formato=='fone'){ 
separador1 = ' ';
separador2 = '.'; 
conjunto1 = 2; 
conjunto2 = 7; 
if (campo.value.length == conjunto1){ 
campo.value = campo.value + separador1; 
} 
if (campo.value.length == conjunto2){ 
campo.value = campo.value + separador2; 
}
}
}

function currencyFormat(fld, milSep, decSep, e) { 
var sep = 0; 
var key = ''; 
var i = j = 0; 
var len = len2 = 0; 
var strCheck = '0123456789'; 
var aux = aux2 = ''; 
var whichCode = (window.Event) ? e.which : e.keyCode; 
if (whichCode == 13) return true; // Enter 
key = String.fromCharCode(whichCode); // Get key value from key code 
if (strCheck.indexOf(key) == -1) return false; // Not a valid key 
len = fld.value.length; 
for(i = 0; i < len; i++) 
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break; 
aux = ''; 
for(; i < len; i++) 
if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i); 
aux += key; 
len = aux.length; 
if (len == 0) fld.value = ''; 
if (len == 1) fld.value = '0'+ decSep + '0' + aux; 
if (len == 2) fld.value = '0'+ decSep + aux; 
if (len > 2) { 
aux2 = ''; 
for (j = 0, i = len - 3; i >= 0; i--) { 
if (j == 3) { 
aux2 += milSep; 
j = 0; 
} 
aux2 += aux.charAt(i); 
j++; 
} 
fld.value = ''; 
len2 = aux2.length; 
for (i = len2 - 1; i >= 0; i--) 
fld.value += aux2.charAt(i); 
fld.value += decSep + aux.substr(len - 2, len); 
} 
return false; 
}

function Proximo(atual,depois,tamanhoo)
{
	var tecla=window.event.keyCode;
	campo = eval (atual); 
	campo2 = eval (depois); 
	if (campo.value.length == tamanhoo || tecla==13)
	{ 
		campo2.focus(); 
		//alert(campo2.value+'oi');
	} 
}





// JavaScript Document
/*	********************************************************************
	####################################################################
	Assunto = Validação de CPF e CNPJ
	Autor = Marcos Regis
	Data = 24/01/2006
	Versão = 1.0
	Compatibilidade = Todos os navegadores.
	Pode ser usado e distribuído desde que esta linhas sejam mantidas
	====------------------------------------------------------------====

	Funcionamento = O script recebe como parâmetro um objeto por isso
	deve ser chamado da seguinte forma:
	E.: no evento onBlur de um campo texto
	<input name="cpf_cnpj" type="text" size="40" maxlength="18"
	onBlur="validar(this);">
	Ao deixar o campo o evento é disparado e chama validar() com o
	argumento "this" que representa o próprio objeto com todas as
	propriedades.
	A partir daí a função validar() trata a entrada removendo tudo que
	não for caracter numérico e deixando apenas números, portanto
	valores escritos só com números ou com separadores como '.' ou mesmo
	espaços são aceitos
	ex.: 111222333/44, 111.222.333-44, 111 222 333 44 serão tratadoc como
	11122233344 (para CPFs)
	De certa forma até mesmo valores como 111A222B333C44 será aceito mas
	aconselho a usar a função soNums() que encotra-se aqui mesmo para
	que o campo só aceite caracteres numéricos.
	Para usar a função soNums() chame-a no evento onKeyPress desta forma
	onKeyPress="return soNums(event);"
	Após limpar o valor verificamos seu tamanho que deve ser ou 11 ou 14
	Se o tamanho não for aceito a função retorna false e [opcional]
	mostra uma mensagem de erro.
	Sugestões e comentários marcos_regis@hotmail.com
	####################################################################
	********************************************************************	*/

// a função principal de validação
function validar(obj,x) { // recebe um objeto
	var s = (obj.value).replace(/\D/g,'');
	var tam=(s).length; // removendo os caracteres não numéricos
	if(x=='cnpj'){
	if (!(tam==14)){ // validando o tamanho
		//alert("'"+s+"' não é um CNPJ válido!" ); // tamanho inválido
		return false;
	}
	}
	if(x=='cpf'){
	if (!(tam==11)){ // validando o tamanho
		//alert("'"+s+"' não é um CPF válido!" ); // tamanho inválido
		return false;
	}
	}


// se for CPF
	if (x=='cpf'){
		if (!validaCPF(s)){ // chama a função que valida o CPF
			//alert("'"+s+"' não é um CPF válido!" ); // se quiser mostrar o erro
			obj.select();  // se quiser selecionar o campo em questão
			return false;
		}
//		alert("'"+s+"' É um CPF válido!" ); // se quiser mostrar que validou
		obj.value=maskCPF(s);	// se validou o CPF mascaramos corretamente
		return true;
	}

// se for CNPJ
	if (x=='cnpj'){
		if(!validaCNPJ(s)){ // chama a função que valida o CNPJ
			//alert("'"+s+"' não é um CNPJ válido!" ); // se quiser mostrar o erro
			obj.select();	// se quiser selecionar o campo enviado
			return false;
		}
//		alert("'"+s+"' É um CNPJ válido!" ); // se quiser mostrar que validou
		obj.value=maskCNPJ(s);	// se validou o CNPJ mascaramos corretamente
		return true;
	}
}
// fim da funcao validar()

// função que valida CPF
// O algorítimo de validação de CPF é baseado em cálculos
// para o dígito verificador (os dois últimos)
// Não entrarei em detalhes de como funciona
function validaCPF(s) {
	var c = s.substr(0,9);
	var dv = s.substr(9,2);
	var d1 = 0;
	for (var i=0; i<9; i++) {
		d1 += c.charAt(i)*(10-i);
 	}
	if (d1 == 0) return false;
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(0) != d1){
		return false;
	}
	d1 *= 2;
	for (var i = 0; i < 9; i++)	{
 		d1 += c.charAt(i)*(11-i);
	}
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(1) != d1){
		return false;
	}
    return true;
}

// Função que valida CNPJ
// O algorítimo de validação de CNPJ é baseado em cálculos
// para o dígito verificador (os dois últimos)
// Não entrarei em detalhes de como funciona
function validaCNPJ(CNPJ) {
	var a = new Array();
	var b = new Number;
	var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
	for (i=0; i<12; i++){
		a[i] = CNPJ.charAt(i);
		b += a[i] * c[i+1];
	}
	if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
	b = 0;
	for (y=0; y<13; y++) {
		b += (a[y] * c[y]);
	}
	if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
	if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
		return false;
	}
	return true;
}


	// Função que permite apenas teclas numéricas
	// Deve ser chamada no evento onKeyPress desta forma
	// return (soNums(event));
function soNums(e)
{
	if (document.all){var evt=event.keyCode;}
	else{var evt = e.charCode;}
	if (evt <20 || (evt >47 && evt<58)){return true;}
	return false;
}

//	função que mascara o CPF
function maskCPF(CPF){
	return CPF.substring(0,3)+"."+CPF.substring(3,6)+"."+CPF.substring(6,9)+"-"+CPF.substring(9,11);
}

//	função que mascara o CNPJ
function maskCNPJ(CNPJ){
	return CNPJ.substring(0,2)+"."+CNPJ.substring(2,5)+"."+CNPJ.substring(5,8)+"/"+CNPJ.substring(8,12)+"-"+CNPJ.substring(12,14);
}
