//*
//* Autor: João Carlos - PC4 Comunicação e Tecnologia
//*
// ################################################################################ //
// ###                       		FUNÇÃO VALIDA                               ### //
// ################################################################################ //

// ################################ CONFIGURAÇÕES ################################# //

var msgErro = "Existem erros no formulário. Confira os campos assinalados de vermelho.";
var msgSucesso = "Os dados no formulário foram preenchidos corretamente. Por favor aguarde enquanto estamos processando.";

// ################################################################################ //

function valida(stringCampos, idErro){
	function outputCampo(campo, tipo){
		if (tipo == "errado"){
			campo.style.backgroundColor = "#FFD0D2";
			campo.style.border = "1px #fb868b solid";
		}
		else {
			campo.style.backgroundColor = "#F1FFDB";
			campo.style.border = "1px #a9df5c solid";
		}
	}
	var erroArray = new Array();
	var campos = new String(stringCampos); 
	var camposArray = campos.split('; ');
	for (i in camposArray){
		var elementosArray = camposArray[i].split(':')
		var dCampo = document.getElementById(elementosArray[0]);
		var valorCampo = dCampo.value;
		var desativado = dCampo.getAttribute('disabled');
		var tipoValida = elementosArray[1];
		if(desativado == false || desativado == null){
			switch(tipoValida){
				
				//TIPO NONE
				case "none":
				outputCampo(dCampo);	
				break;

				//TIPO REQUERIDO
				case "requerido":
				if(valorCampo == ""){
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				else{
					outputCampo(dCampo);	
				}
				break;
				
				//TIPO SENHA
				case "min(8)":
				if(valorCampo.length < 8){
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				else{
					outputCampo(dCampo);	
				}
				break;
			
				// TIPO MAIL
				case "mail":
				var regExpMail = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
				if(regExpMail.test(valorCampo)){
					outputCampo(dCampo);	
				}
				else{
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				break;
			
				// TIPO LIST BOX
				case "listbox":
				if (valorCampo == -1) {
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				else{
					outputCampo(dCampo);	
				}
				break;
			
				// VALIDAÇÂO DATA
				case "data":
				var regExpData = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$/;
				if(regExpData.test(valorCampo)){
					outputCampo(dCampo);	
				}
				else{
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				break;
				
				// VALIDAÇÂO DATA
				case "url":
				var regExpUrl = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
				if(regExpUrl.test(valorCampo)){
					outputCampo(dCampo);	
				}
				else{
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				break;
				
			
				// VALIDAÇÃO VALOR MOEDA BR
				case "vlr_real":
				var regExpMoeda = /^\d{1,3}(\.\d{3})*\,\d{2}$/;
				if(regExpMoeda.test(valorCampo)){
					outputCampo(dCampo);	
				}
				else{
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				break;
				
				// VALIDAÇÃO CHECKBOX
				case "checkbox":
				var cbArray = new Array();
				function output(obj){
					if (obj.checked){
						cbArray.push("checado");
					}
				}
				function varreNode(obj){
					var elementos = obj.childNodes;
					for (i in elementos){
						defineTipo(elementos[i]);
					}
				}
				function defineCheck(obj){
					var tag = obj.nodeName;
					var tipoTag = obj.getAttribute('type');
					if(tag == "INPUT" && tipoTag == "checkbox"){
						output(obj);
					}
				}
				function defineTipo(obj){
					if (obj.nodeType == 1 && !obj.hasChildNodes()){
						defineCheck(obj);
					}
					if (obj.nodeType == 1 && obj.hasChildNodes()){
						varreNode(obj);
					}
				}
				function varreSeletor(obj){
					var elementos = obj.childNodes;
					for (i in elementos){
						defineTipo(elementos[i]);
					}
				}
				varreSeletor(dCampo);
				if (cbArray.length == 0){
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				else {
					outputCampo(dCampo);
				}					
				break;				

				// VALIDAÇÃO RADIO
				case "radio":
				var raArray = new Array();
				function output(obj){
					if (obj.checked){
						raArray.push("checado");
					}
				}
				function varreNode(obj){
					var elementos = obj.childNodes;
					for (i in elementos){
						defineTipo(elementos[i]);
					}
				}
				function defineCheck(obj){
					var tag = obj.nodeName;
					var tipoTag = obj.getAttribute('type');
					if(tag == "INPUT" && tipoTag == "radio"){
						output(obj);
					}
				}
				function defineTipo(obj){
					if (obj.nodeType == 1 && !obj.hasChildNodes()){
						defineCheck(obj);
					}
					if (obj.nodeType == 1 && obj.hasChildNodes()){
						varreNode(obj);
					}
				}
				function varreSeletor(obj){
					var elementos = obj.childNodes;
					for (i in elementos){
						defineTipo(elementos[i]);
					}
				}
				varreSeletor(dCampo);
				if (raArray.length == 0){
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				else {
					outputCampo(dCampo);
				}					
				break;
				
				// VALIDAÇÃO CPF
				case "cpf":
				if(valorCampo.length == 14){
					function checaCPF(numcpf) {
						var x = 0;
						var soma = 0;
						var dig1 = 0;
						var dig2 = 0;
						var texto = "";
						var numcpf1="";
						var len = numcpf.length;
						var x = len -1;
						for (var i=0; i <= len - 3; i++) {
							y = numcpf.substring(i,i+1);
							soma = soma + ( y * x);
							x = x - 1;
							texto = texto + y;
						}
						dig1 = 11 - (soma % 11);
						if (dig1 == 10) dig1=0 ;
						if (dig1 == 11) dig1=0 ;
						numcpf1 = numcpf.substring(0,len - 2) + dig1 ;
						x = 11; soma=0;
						for (var i=0; i <= len - 2; i++) {
							soma = soma + (numcpf1.substring(i,i+1) * x);
							x = x - 1;
						}
						dig2= 11 - (soma % 11);
						if (dig2 == 10) dig2=0;
						if (dig2 == 11) dig2=0;
						if ((dig1 + "" + dig2) == numcpf.substring(len,len-2)) {
							return true;
						}
						return false;
					}
					function arrumaCPF(cpf){
						var cpfNum = cpf.split(".");
						var cpfDig = cpfNum[2].split("-");
						var cpfCompleto = cpfNum[0] + cpfNum[1] + cpfDig[0] + cpfDig[1];
						return cpfCompleto;
					}
					var cpfCompleto = arrumaCPF(valorCampo);
					if(!checaCPF(cpfCompleto)){
						outputCampo(dCampo, "errado");
						erroArray.push(tipoValida);
					}
					else{
						outputCampo(dCampo);
					}
					
				}
				else {
					outputCampo(dCampo, "errado");
					erroArray.push(tipoValida);
				}
				break;

				// ALERTA SE O TIPO DE VALIDAÇÂO FOR DESCONHECIDO
				default:
				alert("Erro: Tipo desconhecido. Parametro passado: " + tipo);
				return false;
			}
		}
		
		// ELSE PARA OS CAMPOS DESABILITADOS
		else{
			outputCampo(dCampo);	
		}
    }
	// DEBUG
	/*
	for (a in erroArray){
		alert(erroArray[a]);
	}
	alert(erroArray.length);
	*/	
	if (erroArray.length == 0){
		var divErro = document.getElementById(idErro)
		divErro.className = "sucesso";
		divErro.innerHTML = msgSucesso;
		return true;
	}
	else {
		var divErro = document.getElementById(idErro)
		divErro.className = "erro";
		divErro.innerHTML = msgErro;
		return false;
	}
}

// ################################################################################ //
// ###                       		FUNÇÃO MÁSCARA                              ### //
// ################################################################################ //

function mascara(campo, tipo, e){
	if (window.event){
		var tecla = event.keyCode;
	}
	else{
		var tecla = e.which;
	}
	//alert(tecla);
	// LIBERA TECLAS BACKSPACE(8), DEL(127) E TAB(9)
	if(tecla == 8 || tecla == 127 || tecla == 9){
		return true;
	}
	
	var idCampo = document.getElementById(campo);
	var valorCampo = idCampo.value;
	switch(tipo){

		// TIPO INTEIROS
		case "int":
		if (!(tecla < 48 || tecla > 57)){
			return true;
		}
		else{
			return false;
		}
		break;
	
		// TIPO DATA
		case "data":
		if(valorCampo.length >= 10){
			return false;
		}
		if (!(tecla < 48 || tecla > 57)){
			if ((valorCampo.length == 2) || (valorCampo.length == 5)){
				valorCampo += '/';
			}
			document.getElementById(campo).value = valorCampo;
			return true;
		}
		else{
			return false;
		}
		break;
		
		// TIPO CPF
		case "cpf":
		if(valorCampo.length >= 14){
			return false;
		}
		if (!(tecla < 48 || tecla > 57)){
			if ((valorCampo.length == 3) || (valorCampo.length == 7)){
				valorCampo += '.';
			}
			if (valorCampo.length == 11){
				valorCampo += '-';
			}
			document.getElementById(campo).value = valorCampo;
			return true;
		}
		else{
			return false;
		}
		break;
		
		// CEP
		case "cep":
		if(valorCampo.length >= 10){
			return false;
		}
		if (!(tecla < 48 || tecla > 57)){
			if (valorCampo.length == 5){
				valorCampo += '-';
			}
			document.getElementById(campo).value = valorCampo;
			return true;
		}
		else{
			return false;
		}
		break;
		
		// TIPO VALOR R$
		case "vlr_real":
		if(valorCampo.length >= 22){
			return false;
		}
		if (!(tecla < 48 || tecla > 57)){
			vr = document.getElementById(campo).value;  
			vr = vr.toString().replace( "/", "" );  
			vr = vr.toString().replace( "/", "" );  
			vr = vr.toString().replace( ",", "" );  
			vr = vr.toString().replace( ".", "" );  
			vr = vr.toString().replace( ".", "" );  
			vr = vr.toString().replace( ".", "" );  
			vr = vr.toString().replace( ".", "" );
			var tammax = 22;
			tam = vr.length;  
			if (tam < tammax && tecla != 8){
				tam = vr.length + 1;
			}  
 			if ( tam <= 2 ){  
	 			document.getElementById(campo).value = vr;
			}	  
	 		if ( (tam > 2) && (tam <= 5) ){  
	 			document.getElementById(campo).value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam );
			}  
 			if ( (tam >= 6) && (tam <= 8) ){  
 				document.getElementById(campo).value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam );
			}  
	 		if ( (tam >= 9) && (tam <= 11) ){  
 				document.getElementById(campo).value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam );
			}  
 			if ( (tam >= 12) && (tam <= 14) ){  
	 			document.getElementById(campo).value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam );
			}  
	 		if ( (tam >= 15) && (tam <= 17) ){  
				document.getElementById(campo).value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam );
			}  
			return true;
		}
		else {
			return false;
		}
		break;
		
		// ALERTA SE O TIPO DE MASCARA FOR DESCONHECIDO
		default:
		alert("Erro: Tipo desconhecido. Parametro passado: " + tipo);
		return false;
	}
}

// ################################################################################ //
// ###                            FUNÇÃO ABLEDISBALE                            ### //
// ################################################################################ //

function ableDisable(objAtivador, tipo, stringCampos){
	var marcado = objAtivador.checked;
	var camposArray = stringCampos.split("+");
	for (i in camposArray){
		var idCampo = camposArray[i];
		var campo = document.getElementById(idCampo);
		switch(tipo){
			
			// TIPO ATIVAR DIRETO;
			case "able":
			campo.setAttribute("disabled","false");
			campo.removeAttribute("disabled");
			break;
			
			// TIPO ATIVAR DIRETO;
			case "disable":
			campo.setAttribute("disabled","disabled");
			break;
			
			// TIPO CHECKBOX, AO MARCAR HABILITA
			case "checked":
			if(marcado){
				campo.setAttribute("disabled","false");
				campo.removeAttribute("disabled");
			}
			else {
				campo.setAttribute("disabled","disabled");
			}
			break;

			// TIPO CHECKBOX, AO MARCAR DESABILITA
			case "unchecked":
			if(!marcado){
				campo.setAttribute("disabled","false");
				campo.removeAttribute("disabled");
			}
			else {
				campo.setAttribute("disabled","disabled");
			}
			break;
			
			// ALERTA SE O TIPO DE ATIVAÇÃO FOR DESCONHECIDO
			default:
			alert("Erro: Tipo desconhecido. Parametro passado: " + tipo);
			return false;
		}
	}	
}

// ################################################################################ //
// ###                           FUNÇÃO CHECKUNCHECK                            ### //
// ################################################################################ //

function checkUncheck(obj, tipo){
	function output(obj){
		switch(tipo){
			
			// TIPO UNCHECK
			case "uncheck":
			obj.checked = 0;
			break;

			// TIPO CHECK
			case "check":
			obj.checked = 1;
			break;
			
			default:
			alert("Erro: Tipo desconhecido. Parametro passado: " + tipo);
			return false;
		}
	}
	function varreNode(obj){
		var elementos = obj.childNodes;
		for (i in elementos){
			defineTipo(elementos[i]);
		}
	}
	function defineCheck(obj){
		var tag = obj.nodeName;
		var tipoTag = obj.getAttribute('type');
		if(tag == "INPUT" && tipoTag == "checkbox"){
			output(obj);
		}
	}
	function defineTipo(obj){
		if (obj.nodeType == 1 && !obj.hasChildNodes()){
			defineCheck(obj);
		}
		if (obj.nodeType == 1 && obj.hasChildNodes()){
			varreNode(obj);
		}
	}
	function varreSeletor(obj){
	var elementos = obj.childNodes;
		for (i in elementos){
			defineTipo(elementos[i]);
		}
	}
	var idSeletor = document.getElementById(obj);
	varreSeletor(idSeletor);
}
function checkUncheckButton(id, obj){
	if(obj.value == "Marcar Todos"){
		obj.value = "Desmarcar Todos";
		checkUncheck(id, 'check');
	}
	else{
		obj.value = "Marcar Todos";
		checkUncheck(id, 'uncheck');
	}
}
function checkUncheckLink(id, obj){
	if(obj.innerHTML == "Marcar Todos"){
		obj.innerHTML = "Desmarcar Todos";
		checkUncheck(id, 'check');
	}
	else{
		obj.innerHTML = "Marcar Todos";
		checkUncheck(id, 'uncheck');
	}
}
//document.write(".js carregado com sucesso!");