function val_campo(titulo,formulario,campo,tipo,requerido,tmin,tmax,mascara){

// titulo - qdo erro
// formulario - form1
// campo - nomecampo
// tipo - tipo texto(N,L ou NL), numero, email, data, mascara, combo
// requerido - true/false
// tmin - 0
// tamx - 0
// mascara - N = numero, L = letra

	if ((tipo == "texto") || (tipo == "numero") || (tipo == "email") || (tipo == "data") || (tipo == "mascara") || (tipo == "hora")){

		var conteudo = document [formulario][campo].value;
		var bol = true;
		var msg_erro;

		if (requerido){
			//Verifica se o campo está vazio		
			if (conteudo == "" || conteudo == " "){
				erro(formulario,campo,"O campo "+titulo+" é obrigatório e não foi preenchido !");
			    return false;
			}else{
				//verifica se o campo está preenchido somente com espaco
				for (x=0;x<conteudo.length;x++){
					num = conteudo.charCodeAt(x);
				   	if (num != 32){
						bol = false;
					break;
					}
				}
			}
		}else{
			bol = false;
		}
		
		//Verrinfica a existencia de caracteres especiais
		for (x=0;x<conteudo.length;x++){
			num = conteudo.charCodeAt(x);
		   	if (((num >= 1) && (num <= 31)) || ((num >= 39) && (num <= 39))){
				bol = true;
				msg_erro = "Verifique se você digitou algum caractere especial no campo "+titulo+" \nou utilizou 'enter' para pular linha."
				break;
			}
		}

		if (tipo == "hora"){
		   	if (((conteudo.substring(0, 2).charCodeAt(0) <= 47) || (conteudo.substring(0, 2).charCodeAt(0) >= 58)) && ((conteudo.substring(0, 2).charCodeAt(0) != 46) && (conteudo.substring(0, 2).charCodeAt(0) != 44))){
				bol = true;
				msg_erro = "Formato inválido no campo "+titulo+" !";
			}
		   	if (((conteudo.substring(0, 2).charCodeAt(1) <= 47) || (conteudo.substring(0, 2).charCodeAt(1) >= 58)) && ((conteudo.substring(0, 2).charCodeAt(1) != 46) && (conteudo.substring(0, 2).charCodeAt(1) != 44))){
				bol = true;
				msg_erro = "Formato inválido no campo "+titulo+" !";
			}
		   	if (((conteudo.substring(3, 5).charCodeAt(0) <= 47) || (conteudo.substring(3, 5).charCodeAt(0) >= 58)) && ((conteudo.substring(3, 5).charCodeAt(0) != 46) && (conteudo.substring(3, 5).charCodeAt(0) != 44))){
				bol = true;
				msg_erro = "Formato inválido no campo "+titulo+" !";
			}
		   	if (((conteudo.substring(3, 5).charCodeAt(1) <= 47) || (conteudo.substring(3, 5).charCodeAt(1) >= 58)) && ((conteudo.substring(3, 5).charCodeAt(1) != 46) && (conteudo.substring(3, 5).charCodeAt(1) != 44))){
				bol = true;
				msg_erro = "Formato inválido no campo "+titulo+" !";
			}
			if (conteudo.substring(2, 3) != ":"){
				bol = true;
				msg_erro = "Formato inválido no campo "+titulo+" !";
			}
			if (conteudo.substring(0, 2) > 23){
				bol = true;
				msg_erro = "Hora inválida no campo "+titulo+" !";
			}
			if (conteudo.substring(3, 5) > 59){
				bol = true;
				msg_erro = "Hora inválida no campo "+titulo+" !";
			}
		}
		
		//Valida email
		if ((tipo == "email") && (conteudo != "")){
			var y;
			bol = true;
			for (x=0;x<conteudo.length;x++){
				num = conteudo.charCodeAt(x);
			   	if (num == 64){
					y = x;
					bol = false;
					break;
				}
			}
			if ((y+1 < conteudo.length) && (y != 0)){
				bol = true;
				for (x=y;x<conteudo.length;x++){
					num = conteudo.charCodeAt(x);
				   	if (num == 46){
						bol = false;
						break;
					}
				}
			}else{
				bol = true;
			}
			if (bol)msg_erro = "O endereço digitado no campo "+titulo+" não é válido !";
		}
		
		//Valida campos numericos
		if ((tipo == "numero") && (conteudo != "")){
			for (x=0;x<conteudo.length;x++){
				num = conteudo.charCodeAt(x);
			   	if (((num <= 47) || (num >= 58)) && ((num != 46) && (num != 44))){
					bol = true;
					msg_erro = "O campo "+titulo+" é numérico. \nDigite o valor desejado, utilizando  somente os caracteres permitidos !";
					break;
				}
				if (num==44){
					if ((conteudo.length-3 == x) || (conteudo.length-2 == x)){
						bol = false;
					}else{
						bol = true;
						msg_erro = "O número de casas decimais para o campo "+titulo+" esta incorreto.";
						break;
					}
				}
			}
		}
		
		//Valida campos Data
		if ((tipo == "data") && (conteudo != "")){

			var vet_conteudo = new Array();
			vet_conteudo = conteudo.split("/");
			
			for (x=0;x<conteudo.length;x++){
				num = conteudo.charCodeAt(x);
			   	if (((num <= 47) || (num >= 58)) && (num != 47)){
					msg_erro = "Digite o valor do campo "+titulo+", utilizando somente os caracteres permitidos !";
					bol = true;
					break;
				}
			}
			
			if( (!bol) && (vet_conteudo.length != 3) ){
				msg_erro = "A formatação do campo "+titulo+" esta incorreta. \nUtilize o modelo dd/mm/aaaa.";
				bol = true;
			}
			
			/*if ((conteudo.charCodeAt(5) != 47) || (conteudo.charCodeAt(2) != 47)){
				msg_erro = "A formatação do campo "+titulo+" esta incorreta. \nUtilize o modelo dd/mm/aaaa.";
				bol = true;
			}
			if (conteudo.length < 10){
				msg_erro = "A formatação do campo "+titulo+" esta incorreta. \nUtilize o modelo dd/mm/aaaa.";
				bol = true;
			}*/

			var mes, dia, ano;
			var retval = false;

			if(!bol){
				//mes = conteudo.substring(3,5);
				mes = vet_conteudo[1];
				if(nochars(mes) && parseInt(mes,10) > 0 && parseInt(mes,10) <= 12){
					mes = parseInt(mes,10);
					//ano = conteudo.substring(6,10);
					ano = vet_conteudo[2];
					if (nochars(ano) && parseInt(ano,10) >= 0000) {
						if ((parseInt(ano,10) % 4) == 0) {
							bissexto = 1;
						} else {
							bissexto = 0;
						}
						//dia = conteudo.substring(0,2);
						dia = vet_conteudo[0];
						if (nochars(dia)){
							dia = parseInt(dia,10);
							if (((mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) && (dia >= 1 && dia <= 31)) || ((mes==4 || mes==6 || mes==9 || mes==11) && (dia >= 1 && dia <= 30)) || (mes==2 && dia >= 1 && dia <= (28 + bissexto))) {
								retval=true;
							}
						}
					}
				}
			}
			if((!bol) && (!retval)){ 
				msg_erro = "A Data do campo "+titulo+" é inválida. \nUtilize o modelo dd/mm/aaaa.";
				bol = true;
			}
		}		
		
		//Valida máscara de formatação
		if ((tipo == "mascara") && (conteudo != "")){
			for (x=0;x<mascara.length;x++){
				num = conteudo.charCodeAt(x);
			   	if (mascara.charCodeAt(x) == 78){
					if ((num <= 47) || (num >= 58)){
						msg_erro = "A formatação do campo "+titulo+" esta incorreta. \nUtilize o modelo indicado ao lado do campo";
						bol = true;
						break;
					}
				}else{
				   	if (mascara.charCodeAt(x) == 76){
						if (((num >= 65) && (num <= 90)) || ((num >= 97) && (num <= 122))){
						}else{
							msg_erro = "A formatação do campo "+titulo+" esta incorreta. \nUtilize o modelo indicado ao lado do campo";
							bol = true;
							break;
						}
					}else{
						if (mascara.charCodeAt(x) != conteudo.charCodeAt(x)){
							msg_erro = "A formatação do campo "+titulo+" esta incorreta. \nUtilize o modelo indicado ao lado do campo";
							bol = true;
							break;
						}
					}
				}
			}
			if ((mascara.length != conteudo.length) && (!bol)){
				msg_erro = "A formatação do campo "+titulo+" esta incorreta. \nUtilize o modelo indicado ao lado do campo";
				bol = true;				
			}
		}





		// INCLUIDO POR MARCO 17/04/01

		//Valida campos texto de acordo com a mascara (N ou L nessa ordem obrigatoriamente)
		forma = ""
		i = 0
		if ((tipo == "texto") && (conteudo != "") && (mascara.length != 0)){
			for (x=0;x<conteudo.length;x++){
				num = conteudo.charCodeAt(x);
				//NL - NUMERO E LETRA
				if ((mascara.charCodeAt(0) == 78) && (mascara.charCodeAt(1) == 76)){
				//alert (conteudo)
				//alert (num)
				  if (((num >=65) && (num <=90)) || ((num >=97) && (num <=122)) || ((num >=47) && (num <=58)) || (num == 32) || (num == 45) || (num == 40) || (num == 41))
				  {
					i = i + 1
				  }
				  else
				  {
					i = 0
					forma = "NL"
					break
				  }  }
				//SL - SOMENTE LETRA
				if ((mascara.charCodeAt(0) != 78) && (mascara.charCodeAt(1) == 76)){
				  if (((num >=65) && (num <=90)) || ((num >=97) && (num <=122)) || (num == 32))
				  {
					i = i + 1
				  }
				  else
				  {
					i = 0
					forma = "SL"
					break
				  }  }
				//SN - SOMENTE NUMERO
				if ((mascara.charCodeAt(0) != 78) && (mascara.charCodeAt(1) == 78)){
				  if (((num >=47) && (num <=58)) || (num == 45))
				  {
					i = i + 1
				  }
				  else
				  {
					i = 0
					forma = "SN"
					break
				  }  }

			}
			if ((i == 0) && (forma == "NL"))
			{
				msg_erro = "O campo "+titulo+" Só aceita números e/ou letras.";
				bol = true
			}
			if ((i == 0) && (forma == "SL"))
			{
				msg_erro = "O campo "+titulo+" Só aceita letras.";
				bol = true
			}
			if ((i == 0) && (forma == "SN"))
			{
				msg_erro = "O campo "+titulo+" Só aceita números.";
				bol = true
			}
			
		}

		//FIM DA INCLUSAO DO MARCO



		
		if (bol){
			erro(formulario,campo,msg_erro);
		    return false;
		}else{
		
			//Verifica tamanho minimo 
			if ((conteudo.length < tmin) && (tmin != 0)){
				erro(formulario,campo,"O número mínimo de caracteres para o campo "+titulo+" é "+tmin);
			    return false;
			}
			//Verifica tamanho maximo
			if ((conteudo.length > tmax) && (tmax != 0)){
				erro(formulario,campo,"O número máximo de caracteres para o campo "+titulo+" é "+tmax);
			    return false;
			}
		}
		return true;

	}else{

		if (tipo == "combo"){
			// Verifica combo
			if (document [formulario][campo].options[document [formulario][campo].selectedIndex].value == ''){
			    erro(formulario,campo,"Selecione uma opção válida para o campo "+titulo+".");
				return false;
			}else{
				return true;
			}
		}
		var x = 0;
		var verificaRadio = true;
		
		if (tipo == "radio"){
			if (document [formulario][campo].checked==false){
			    erro(formulario,campo,"Selecione uma opção válida para o campo "+titulo+".");
				return false;
			}else{
				if (document [formulario][campo].checked==true){
					return true;
				}else{
					for (x=0;x<document [formulario][campo].length;x++){
						if (document [formulario][campo][x].checked==true){
							verificaRadio = false;
						}
					}
					if (verificaRadio){
					    erro(formulario,campo,"Selecione uma opção válida para o campo "+titulo+".");
						return false;
					}else{
						return true;
					}
				}
			}
		}

		if (tipo == "check"){
			if (document [formulario][campo].checked==false){
			    erro(formulario,campo,"Selecione uma opção válida para o campo "+titulo+".");
				return false;
			}else{
				if (document [formulario][campo].checked==true){
					return true;
				}else{
					for (x=0;x<document [formulario][campo].length;x++){
						if (document [formulario][campo][x].checked==true){
							verificaRadio = false;
						}
					}
					if (verificaRadio){
					    erro(formulario,campo,"Selecione uma opção válida para o campo "+titulo+".");
						return false;
					}else{
						return true;
					}
				}
			}
		}		
	}
}

function comp_campo(titulo,formulario,campo1,campo2){
	var conteudo1 = document [formulario][campo1].value;
	var conteudo2 = document [formulario][campo2].value;
	if (conteudo1 != conteudo2){
	    erro(formulario,campo1,"O campo "+titulo+" está diferente da sua confirmação.");
		return false;
	}else{
		return true;
	}		
}

// Retorna mensagem de erro
function erro(formulario,campo,msg){
	alert(msg);
	if (document [formulario][campo].type != "hidden"){
		document [formulario][campo].focus();
	}
}




//VALIDAÇÃO DE CPF
	function val_cpf() {
	  dig_1 = 0;
	  dig_2 = 0;
	  controle_1 = 10;
	  controle_2 = 11;
	  lsucesso = 1;
	  numero = document.form.txtPessoa.value;
	  if ((numero.length != 12) || (numero.substring(9, 10) != "-")) {
	     alert("CPF inválido !");
	     
	     return false;
	  }
	  else {
	     for ( i=0 ; i < 9 ; i++) {
	        dig_1 = dig_1 + parseInt(numero.substring(i, i+1) * controle_1);
		  controle_1 = controle_1 - 1;
	     }
	    
	     resto = dig_1 % 11;
	     dig_1 = 11 - resto;
	     if ((resto == 0) || (resto == 1)) {
		  dig_1 = 0;
	     }
	     for ( i=0 ; i < 9 ; i++) {
		  dig_2 = dig_2 + parseInt(numero.substring(i, i + 1) * controle_2);
	        controle_2 = controle_2 - 1;
	     }
	     dig_2 = dig_2 + 2 * dig_1;
	     resto = dig_2 % 11;
	     dig_2 = 11 - resto;
	     if ((resto == 0) || (resto == 1)) {
	        dig_2 = 0;
	     }
	     dig_ver = (dig_1 * 10) + dig_2;
	     if (dig_ver != parseFloat(numero.substring(numero.length-2,numero.length))) {
		  alert("CPF inválido!");
		  
	 	  return false;
		}
	  }

	return true;
	}

//VALIDAÇÃO DE CNPJ
	function val_cgc() {
	numero = document.form.txtPessoa.value;
	dig_1 = 0;
	dig_2 = 0;
	controle_1 = 5;
	controle_2 = 6;

	if ((numero.length != 18)  || (numero.substring(2, 3) != ".") || (numero.substring(6, 7) != ".") || (numero.substring(10, 11) != "/") || (numero.substring(15, 16) != "-")) {
	     alert("CNPJ inválido ! Formato: xx.xxx.xxx/xxxx-xx");
	     
	     return false;
	}
	else { 
	numero = (numero.substring(0, 2)) + "" + (numero.substring(3, 6)) + "" + (numero.substring(7, 10))+ "" + (numero.substring(11, 15)) + "" + (numero.substring(16, 18)) 
	   for ( i=0 ; i < 12 ; i++) {
	        dig_1 = dig_1 + parseFloat(numero.substring(i, i+1) * controle_1);
		  controle_1 = controle_1 - 1;
	        if (i == 3) {
	           controle_1 = 9;
	        }
	     }
	   resto = dig_1 % 11;
	   dig_1 = 11 - resto;
	   if ((resto == 0) || (resto == 1)){
	 	dig_1 = 0;
	   }
	   for ( i=0 ; i < 12 ; i++) {
	        dig_2 = dig_2 + parseInt(numero.substring(i, i+1) * controle_2);
		  controle_2 = controle_2 - 1;
	        if (i == 4) {
	           controle_2 = 9;
	        }
	   }
	   dig_2 = dig_2 + (2 * dig_1);
	   resto = dig_2 %11;
	   dig_2 = 11 - resto;
	   if ((resto == 0) || (resto == 1)){
	 	dig_2 = 0;
	   }
	   dig_ver = (dig_1 * 10) + dig_2;
	   if (dig_ver != parseFloat(numero.substring(numero.length-2,numero.length))) {
		  alert("CNPJ inválido! Formato: xx.xxx.xxx/xxxx-xx");
		  
	 	  return false;
	   }

	  }
	  
	 return true;
	}

	function nochars(strval){
		var retval = true;
		for (var i = 0; i < strval.length; i++){
			if (strval.substring(i,i+1) < "0" || strval.substring(i,i+1) > "9"){
				retval=false;
				break;
			}
		}
		return retval;
	}

	function horaDiff(hora1,hora2){
		var h1 = hora1.substring(0, 2);
		var m1 = hora1.substring(3, 5);
		var h2 = hora2.substring(0, 2);
		var m2 = hora2.substring(3, 5);
		if (h2 > h1){
			return false;
		}else{
			if (h2 == h1){
				if (m2 > m1){
					return false;
				}else{
					return true;
				}
			}else{
				return true;
			}
		}
	}

function datamaiorigual(d1,d2){
	// if d1 >= d2 return true
	v_d1 = d1.split("/");
	v_d2 = d2.split("/");
	objd1 = new Date(v_d1[2], v_d1[1], v_d1[0]);
	objd2 = new Date(v_d2[2], v_d2[1], v_d2[0]);
	if(objd1 >= objd2 ){
		return true;
	}else{
		return false;
	}
}