// altera atributos de estilo de um campo após verificação
function mostraCampoErro(objCampo,erro) {
	if(erro) {
		objCampo.style.backgroundColor = '#ffcccc';
		objCampo.style.fontWeight = 'bold';
		objCampo.style.color = '#cc0000';
	} else {
		objCampo.style.backgroundColor = '#ffffff';
		objCampo.style.fontWeight = 'normal';
		objCampo.style.color = '#000000';
	}
}

// cria objetos de validação com expressão regular de verificação e mensagem de erro
function Validador(regex,tipo,msgErro) {
	this.regex = regex;
	this.tipo  = tipo;
	this.aviso = msgErro;
}

// Definição dos patterns (regexp) de validação de campos do formulário
Valida = new Object;
var valObj 		= 'Valida.';
Valida.nulo 	= new Validador(/^$|^undefined$|^null$/,'v','');
Valida.naonulo 	= new Validador(/.|^[^undefined]$|^[^null]$/,'v','Por favor, preencha o campo %campo%');
Valida.numero 	= new Validador(/^\d*$/,'v','O campo %campo% deve ser preenchido apenas com números');
Valida.ddd 		= new Validador(/^(?:\d{2})?$/,'v','O campo %campo% deve ser preenchido com exatamente dois números');
Valida.telefone = new Validador(/^(?:[\d]*[\.\-\/]?)*$/,'v','O campo %campo% deve ser preenchido apenas com números ou pontuação (-./)');
Valida.alfa 	= new Validador(/^[a-z]*$/i,'v','O campo %campo% deve ser preenchido apenas com letras');
Valida.alfanum 	= new Validador(/^[\w\.\-\/]*$/i,'v','O campo %campo% deve ser preenchido apenas com letras e números');
Valida.email 	= new Validador(/^[\w\.\%\-]+[^\.]{1}@(?:[\w\-]+\.)+[A-Z]{2,4}$/i,'v','O email informado é inválido, por favor corrija');

Valida.lcase 	= new Validador('toLowerCase()','t','');
Valida.ucase 	= new Validador('toUpperCase()','t','');

// verificação e envio do formulário do Fale Com a Gente
function envia_fale() {
	var df 		= document.fale;
	var formOK 	= true;
	
	for(f=0;f<df.length;f++) {
		if(!valorNulo(df.elements[f].valida)) {
			lista_validar = df.elements[f].valida.split(/\|/);
			for(v=0;v<lista_validar.length;v++) {
				validadorCampo = eval(valObj+lista_validar[v]);
				if(validadorCampo) {
					formOK = valida_campo(df.elements[f],df.elements[f].nomecampo,validadorCampo);
					if(!formOK) return(false);
				}
			}
		}
	}
	
	if(formOK) {
		df.urlDestino.value = 'http://www.aeromil.com.br/fale_enviado.shtml';
		df.urlTemplate.value = 'aeromil/aeromil_fale_email.html';
		df.assunto.value = '[aeromil.com] Fale Conosco / Cadastro';
		df.emailTo.value = 'faleconosco@aeromil.com.br';
		df.nome.value = df.nomeFrom.value;
		df.email.value = df.emailFrom.value;
		if(!df.optin.checked) {
			df.optin.checked = true;
			df.optin.value = 'não';
		}
		df.action = 'http://www.amil.com.br/amilportal/email.do';
		df.submit();
		return(false);
	}
}

// verificação e envio do formulário do Solicite Já
function envia_solicite() {
	var df 		= document.solicite;
	var formOK 	= true;
	
	for(f=0;f<df.length;f++) {
		if(!valorNulo(df.elements[f].valida)) {
			lista_validar = df.elements[f].valida.split(/\|/);
			for(v=0;v<lista_validar.length;v++) {
				validadorCampo = eval(valObj+lista_validar[v]);
				if(validadorCampo) {
					formOK = valida_campo(df.elements[f],df.elements[f].nomecampo,validadorCampo);
					if(!formOK) return(false);
				}
			}
		}
	}
	
	if(formOK) {
		var dataAtual = new Date();
		df.urlDestino.value = 'http://www.aeromil.com.br/solicite_enviado.shtml';
		df.urlTemplate.value = 'aeromil/aeromil_solicite_email.html';
		df.assunto.value = '[aeromil.com] SOLICITAÇÃO ORÇAMENTO';
		df.emailTo.value = 'coordenacao@aeromil.com.br';
		df.nomeFrom.value = df.nomeContato.value;
		df.emailFrom.value = df.emailContato.value;
		for(n=0;n<df.length;n++) {
			if(valorNulo(df.elements[n].valida) && valorNulo(df.elements[n].value)) {
				df.elements[n].value = '&nbsp;';
			}
		}
		df.dataHora.value = dataAtual.toLocaleString() + ' (GMT ' + (dataAtual.getTimezoneOffset()/-60) + ')';
		df.action = 'http://www.amil.com.br/amilportal/email.do';
		df.submit();
		return(false);
	}
}

// função principal modularizada para verificação de campos do formulário com RegExp
function valida_campo(objCampo, nomeCampo, objValida) {
	var regexp_fields	= /password|text|textarea/;
	
	switch (objValida.tipo) {
	case 'v':
		if(!objValida.regex.test(trimStr(objCampo.value)))  {
			mostraCampoErro(objCampo,true);
			if(regexp_fields.test(objCampo.type)) objCampo.select();
			objCampo.focus();
			alert(msgCampo(objValida.aviso,nomeCampo));
			return(false);
		}
		mostraCampoErro(objCampo,false);
		return(true);
		break;
	case 't':
		objCampo.value = eval('objCampo.value.' + objValida.regex);
		return(true);
		break;
	}
}
 
// validação em tempo real da digitação em campo numérico
function fNumero(obj) {
	s = new String(obj.value);
	// Garante a digitação apenas de números
	if (window.event.keyCode < 45 || window.event.keyCode > 57) {
		window.event.returnValue = 0;
	}
	return(true);
}

function msgCampo(textoMsg,nomeCampo) {
	return textoMsg.replace(/%campo%/g,nomeCampo);
}

function trimStr(sInString) {
	//sInString = sInString.replace( /^\s+/g, "" );// strip leading
	//return sInString.replace(/\s+$/g,"");// strip trailing
	return sInString.replace( /^[\s]+|[\s]+$/g , "" );
}

function valorNulo(valor) {
	try {
		return(Valida.nulo.regex.test(valor));
	} catch(e) {
		return(true);
	}
}
