Erro ao usar variavel global no javascript

Olá Pessoal!

Estou com uma certa dificuldade em usar variáveis globais no javascript.

Eu tenho duas funções que utilizam o callback (dwr) para comunicação com o java, cada função retorna uma mensagem, eu gostaria de setar essa mensagem em variáveis globais para a exibição delas na tela de uma só vez, se eu fizer a exibição dentro da função uma sobrescreve a outra.

Quando chega na função crtiticasRegua as variáveis globais estão todas indefinidas

Alguém sabe como poderia fazer isso

segue meu código:


var msgAuto;
var msgResidencial;
var msgContrato;
var msgGravLog;
var msgServicoAuto;  


function enviar() {
		        gravaDadosNaBaseSIMAS();
			efetuaEnvioEmail();
			crtiticasRegua();

	}

}

function efetuaEnvioEmail() {
	try {
		var melhorDiaAuto = jQuery('#melhorDiaDF').val();
		var prazoCorteAuto = jQuery("#prazoCorrenteDF").val();
		var prazoPreviaAuto = jQuery("#prazoPreviaDF").val();
		
		var bean = {
				numeroDoContrato : jQuery("#contratoResidencial").val(),
				prazoDePreviaAtual : jQuery("#prazoPreviaDF").val(),
				prazoDePreviaNovo : jQuery("#cdPrazoPreviaSimulacao").val(),
				prazoDeCorteAtual : jQuery("#prazoCorrenteDF").val(),
				prazoDeCorteNovo : jQuery("#cdPrazoCorteSimulacao").val(),
				codWorksite : jQuery("#cdWorksite").val()
		};
		
		if (melhorDiaAuto != '' && prazoCorteAuto != '' && prazoPreviaAuto != '') {
			
			FacadeReguaFatura.efetuaEnvioEmail(bean, {
				callback : function(retorno) {
					
					if (retorno[0] !== null && retorno[1] !== "") {
						msgServicoAuto = retorno[0];
						 alert("Envio Email" + msgServicoAuto);					
					}
					
					if (retorno[1] !== null && retorno[1] !== "") {
						if (retorno[1] > 1) {
							msgAuto = "E-Mail enviado para GECOF com Sucesso!";
							alert("Envio Email" + msgAuto);
						
						} else 
							msgAuto = "Não foi possível enviar o e-mail para a GECOF!";
							alert("Envio Email" + msgAuto);
						}
						
					}
					
					if (retorno[2] !== null && retorno[2] !== "") {
						msgGravLog = retorno[2];
						alert("Envio Email" + msgGravLog);
					}
				},
				errorHandler:function(errorString, exception) { 
					alert("Erro ao chamar o metodo gravaDadosNaBaseSIMAS "+errorString); 
					}
			});
		}
		
	} catch (e) {
		alert("Deu erro envio email");
	}


}



function gravaDadosNaBaseSIMAS() {
	msgCriticas = new Array();
try {
	
	var melhorDiaResidencial = jQuery('#melhorDiaMD').val();
	var prazoCorteReidencial = jQuery('#prazoCorrenteMD').val();
	var prazoPreviaResidencial = jQuery('#prazoPreviaMD').val();

	var numeroContrato = jQuery("#contratoResidencial").val();
	var quatidadeDeDiasReserva = jQuery("#cdPrazoPreviaSimulacao").val();
	var quantidadeDeDiasCorte = jQuery("#cdPrazoCorteSimulacao").val();

	if (numeroContrato != '' && numeroContrato != null) {

		if (melhorDiaResidencial != '' && prazoCorteReidencial != '' && prazoPreviaResidencial != '') {

			FacadeReguaFatura.gravaDadosNaBaseSIMAS(numeroContrato,
					quatidadeDeDiasReserva, quantidadeDeDiasCorte, {
 						callback : function(retorno) {
 							msgResidencial = retorno.mensagem;
							 alert("Grava SIMAS" + msgResidencial);
							
						 },
						 errorHandler:function(errorString, exception) { 
							 alert("Erro ao chamar o metodo gravaDadosNaBaseSIMAS "+errorString); 
							 }
					});
		}

	} else {
		jQuery("#msgContrato").val("Não foi possivel gravar os dados da grid residencial porque o contrato não foi localizado.");
		alert("CONTRATO" + jQuery('#msgContrato').val());
	}

	
} catch (e) {
	alert("Deu erro grava dados SIMAS!");
}
	
}


function crtiticasRegua() {

	var msgCriticas = new Array(); 
	msgCriticas[0] = msgAuto;
	msgCriticas[1] = msgResidencial;
	msgCriticas[2] = msgContrato;
	msgCriticas[3] = msgGravLog;
	msgCriticas[4] = msgServicoAuto;
	var criticas = new Array();
	var tamanho = msgCriticas.length;
	for ( var i = 0; i < tamanho; i++) {
		if (msgCriticas[i] !== null && msgCriticas[i] !== "") {
			criticas.add(msgCriticas[i]);
		}

	}

}

Voce esta usando ajax para envio? pode ser que o metodo crtiticasRegua esta sendo executado antes do FacadeReguaFatura.efetuaEnvioEmail devolver a resposta