function Validador(objForm) {
	
	
	var tipoAlphaNum = /[^\[\w\s\�������������\]+$\/i]/;
	var tipoFoneDDD = /[^\[\d\s\-()\]+$]/; //Com (DDD)
	var tipoFone = /[^\[\d\s\-\]+$]/; // Sem DDD
	var tipoMonetario = /[^\[\d\.,\]+$]/;
	var tipoGeral = /[^\[\d\.,\/\-()\]+$]/;
	var tipoNumero = /\D/;
	var tipoLetra = /[^a-zA-Z]/;

	var objLimite = new Limite();
	var arMsg = new Array();
	var arElem = new Array();
	var j=0;
	
	var prosseguirVerificacao = true;

	this.verifica = function(){
		
		var i = 0;
		var qtdeElementos = (objForm == undefined || objForm == null ? 0 :objForm.length);

		 while (i < qtdeElementos && prosseguirVerificacao) {
			objForm.elements[i].value = objLimite.trim(objForm.elements[i].value);

			if(this.checaVerificar(objForm.elements[i])) {

				if(this.checaObrigatorio(objForm.elements[i])){
					arMsg[j] = "O campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> &eacute; obrigat&oacute;rio." 
					arElem[j] = objForm.elements[i];
					j++;
				}
				else if(this.checaAlphaNumerico(objForm.elements[i])) {
					arMsg[j] = "O campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> s&oacute; aceita letras e n&uacute;meros." 
					arElem[j] = objForm.elements[i];
					j++;
					
				}
				else if(this.checaNumero(objForm.elements[i])) {
					arMsg[j] = "O campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> s&oacute; aceita n&uacute;meros." 
					arElem[j] = objForm.elements[i];
					j++;					
				}
				else if(this.checaCPF(objForm.elements[i])) {
					arMsg[j] = "O valor do campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> &eacute; inv&aacute;lido." 
					arElem[j] = objForm.elements[i];
					j++;					
				}
				else if(this.checaCNPJ(objForm.elements[i])) {
					arMsg[j] = "O valor do campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> &eacute; inv&aacute;lido." 
					arElem[j] = objForm.elements[i];
					j++;					
				}		
				else if(this.checaData(objForm.elements[i])) {
					arMsg[j] = "O valor do campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> &eacute; inv&aacute;lido." 
					arElem[j] = objForm.elements[i];
					j++;					
				}
				else if(this.checaHora(objForm.elements[i])) {
					arMsg[j] = "O valor do campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> &eacute; inv&aacute;lido." 
					arElem[j] = objForm.elements[i];
					j++;					
				}
				else if(this.checaHoraNaoObrigatoria(objForm.elements[i])) {
					arMsg[j] = "O valor do campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> &eacute; inv&aacute;lido." 
					arElem[j] = objForm.elements[i];
					j++;					
				}
				else if(this.checaPlaca(objForm.elements[i])) {
					arMsg[j] = "O valor do campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> &eacute; inv&aacute;lido." 
					arElem[j] = objForm.elements[i];
					j++;					
				}
				else if(this.checaTelefone(objForm.elements[i])) {
					arMsg[j] = "O valor do campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> &eacute; inv&aacute;lido." 
					arElem[j] = objForm.elements[i];
					j++;					
				}
				else if(this.checaCep(objForm.elements[i])) {
					arMsg[j] = "O valor do campo <strong>" + objForm.elements[i].getAttribute("nomeCampo") + "</strong> &eacute; inv&aacute;lido." 
					arElem[j] = objForm.elements[i];
					j++;					
				}																								
			}
			
			i++;
		}		
		
		var arTeste = new Array();
		
		if(arMsg.length > 0) {
			arTeste[0] = arMsg.shift();
			arTeste[1] = arElem.shift();
			return arTeste;
		} else {
			arTeste[0] = null;
			arTeste[1] = null;
			return arTeste;
		}	
	}
	
	
	this.checaVerificar = function(elemento) {
		var respChecagem = true;
		
		if(elemento.getAttribute("tipo") == "naoverificar") {
			respChecagem = false;
		}
		return respChecagem;
	}

	this.checaObrigatorio = function(elemento) {
		var respChecagem = false;
		
		if (elemento.getAttribute("visivel") != "n") {
			if(elemento.getAttribute("obrigatorio") == "s" && elemento.value == "") {
				respChecagem = true;
				prosseguirVerificacao = false;
			}
		}
		
		return respChecagem;
	}
	
	this.checaAlphaNumerico = function(elemento) {
		var respChecagem = false;
		
		if (elemento.getAttribute("visivel") != "n") {
			if(elemento.getAttribute("tipo") == "alphanumerico" && tipoAlphaNum.test(elemento.value)) {
				respChecagem = true;
				prosseguirVerificacao = false;
			}
		}
		
		return respChecagem;
	}
	
	this.checaMascara = function(elemento) {
		var respChecagem = false;
		
		if (elemento.getAttribute("visivel") != "n") {
			var attMasc = elemento.getAttribute("mascara");
			var valElem = elemento.value;
					
			if(attMasc == "telefone" && tipoFoneDDD.test(valElem)) { 
				respChecagem = true; 
				prosseguirVerificacao = false;
			}
			else if(attMasc == "monetario" && tipoMonetario.test(valElem)) { 
				respChecagem = true; 
				prosseguirVerificacao = false;
			}
		}

		return respChecagem;
	}
	
	this.checaNumero = function(elemento) {
		var respChecagem = false;
		
		if (elemento.getAttribute("visivel") != "n") {
			if(elemento.getAttribute("tipo") == "numero" && tipoNumero.test(elemento.value)) {
				respChecagem = true;
				prosseguirVerificacao = false;
			}		
		}
		return respChecagem;
	}
	
	this.checaCPF = function(elemento) {
		var respChecagem = false;
	
		if (elemento.getAttribute("visivel") != "n") {
			var s = this.limpaNumeros(elemento.value);
			
			var erro = 0;
			if(s != null) {		
				// Checa CPF
				var i;
				var c = s.substr(0,9);
				var dv = s.substr(9,2);
				var d1 = 0;
				for (i = 0; i < 9; i++) {
					d1 += c.charAt(i)*(10-i);
				}
				if (d1 == 0){
					erro = 1;
				}        
				d1 = 11 - (d1 % 11);
				if (d1 > 9) d1 = 0;        
				if (dv.charAt(0) != d1) {
					erro = 1;
				}
				d1 *= 2;
				for (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) {
					erro = 1;
				}	
				
				if(elemento.getAttribute("mascara") == "cpf" && erro == 1) {
					respChecagem = true;
					prosseguirVerificacao = false;
				}
			}	
		}
		
		return respChecagem;
	}
	
	this.checaCNPJ = function(elemento) {
		var respChecagem = false;
	
		if (elemento.getAttribute("visivel") != "n") {
			var s = this.limpaNumeros(elemento.value);
			
			var erro = 0;
	
			if(elemento.getAttribute("mascara") == "cnpj" && s != null) {
				// Checa CNPJ
				var i;
				var	c = s.substr(0,12);
				var	dv = s.substr(12,2);
				var	d1 = 0;
				
				for (i = 0; i <12; i++){
					d1 += c.charAt(11-i)*(2+(i % 8));
				}
				if (d1 == 0) erro = 1;
				d1 = 11 - (d1 % 11);
				if (d1 > 9) d1 = 0;
				if (dv.charAt(0) != d1){
					erro = 1;
				}
				d1 *= 2;
				for (i = 0; i < 12; i++){
					d1 += c.charAt(11-i)*(2+((i+1) % 8));
				}
				d1 = 11 - (d1 % 11);
				if (d1 > 9)
				d1 = 0;
				if (dv.charAt(1) != d1){
					erro = 1;
				}
	
				if(erro == 1) {
					respChecagem = true;
					prosseguirVerificacao = false;
				}
			}
		}
		
		return respChecagem;
	}	
	
	this.checaData = function(elemento) {
		var respChecagem = false;
		
		if (elemento.getAttribute("visivel") != "n") {
			var valorElemento = this.limpaNumeros(elemento.value);
			if(elemento.getAttribute("obrigatorio") == "s" && elemento.getAttribute("mascara") == "data") {
				if(valorElemento == null || valorElemento.length != 8) {
					respChecagem = true;
					prosseguirVerificacao = false;
				} 
			}
		}
		
		return respChecagem;
	}
	
	this.checaHora = function(elemento) {
		var respChecagem = false;
		
		if (elemento.getAttribute("visivel") != "n" && elemento.getAttribute("obrigatorio") == "s") {
			var valorElemento = this.limpaNumeros(elemento.value);
			if(elemento.getAttribute("obrigatorio") == "s" && elemento.getAttribute("mascara") == "hora") {
				if(valorElemento == null || valorElemento.length != 6) {
					respChecagem = true;
					prosseguirVerificacao = false;
				} 
			}
		}
		
		return respChecagem;
	}

	this.checaHoraNaoObrigatoria = function(elemento) {
		var respChecagem = false;
		
		if (elemento.disabled == false && elemento.getAttribute("validar") == "s" && elemento.value != "") {
			var valorElemento = this.limpaNumeros(elemento.value);
			if(elemento.disabled == false && elemento.getAttribute("mascara") == "hora") {
				if(valorElemento == null || valorElemento.length != 6) {
					respChecagem = true;
					prosseguirVerificacao = false;
				} 
			}
		}
		return respChecagem;
	}
	
	
	this.checaPlaca = function(elemento) {
		var respChecagem = false;
		
		if (elemento.getAttribute("visivel") != "n") {
			var valorElemento = elemento.value;		
			 
			if(elemento.getAttribute("tipo") == "placa") {
				if(valorElemento == "") {
					respChecagem = false;
				} 
				else if(valorElemento.length == 7) {
					var vLetras = valorElemento.substr(0, 3);
					var vNumeros = valorElemento.substr(3, 7);
					
					if((tipoLetra.test(vLetras) == false && vLetras.length == 3) && (tipoNumero.test(vNumeros) == false && vNumeros.length == 4)){
						respChecagem = false;					
					} 
					else {
						respChecagem = true;
						prosseguirVerificacao = false;
					}
				} 
				else {
					respChecagem = true;
					prosseguirVerificacao = false;
				}
			}
		}
		
		return respChecagem;
	}
	
	this.checaTelefone = function(elemento) {
		var respChecagem = false;
		
		if (elemento.getAttribute("visivel") != "n") {
			var valorElemento = this.limpaNumeros(elemento.value);
			var valorElementoInteiro = Number(this.limpaNumeros(elemento.value));
	
			if(valorElemento != null) {
				if(elemento.getAttribute("mascara") == "telefone") {
					if(valorElementoInteiro < 1000000000 || valorElementoInteiro > 9999999999) {
						respChecagem = true;
						prosseguirVerificacao = false;
					}
				}	
			}
		}
		
		return respChecagem;		
	}
	
	this.checaCep = function(elemento) {
		var respChecagem = false;
		
		if (elemento.getAttribute("visivel") != "n") {
			var valorElemento = this.limpaNumeros(elemento.value);
	
			if(valorElemento != null) {
				if(elemento.getAttribute("mascara") == "cep") {
					if(valorElemento.length < 8) {
						respChecagem = true;
						prosseguirVerificacao = false;
					}
				}	
			}
		}
		
		return respChecagem;		
	}
		
	this.limpaNumeros = function(valor) {
		var valorDadoFormulario = valor;

		var tipoNum = /\D/;
		var dadoFormSplit =  null;
		var dadoLimpo = "";

		var i=0;
		dadoFormSplit = valorDadoFormulario.split(tipoNum);

		for(i=0; i<dadoFormSplit.length; i++) {
			dadoLimpo = dadoLimpo + dadoFormSplit[i];
		}
		if(dadoLimpo == "") {
			return null;
		} 
		else {
			return dadoLimpo;
		}
	}		
	
}