public void CalculateDates()
		{
			txtDataInicioNivel.Text = ControloDateValidation.GetComposedDate(mAnoInicioNivel, mMesInicioNivel, mDiaInicioNivel);
			txtDataFimNivel.Text = ControloDateValidation.GetComposedDate(mAnoFimNivel, mMesFimNivel, mDiaFimNivel);
			txtDataInicioUF.Text = ControloDateValidation.GetComposedDate(mAnoInicioUF, mMesInicioUF, mDiaInicioUF);
			txtDataFimUF.Text = ControloDateValidation.GetComposedDate(mAnoFimUF, mMesFimUF, mDiaFimUF);
		}
        // devolve a data mais vaga das datas ordenadas especificadas. as datas não preenchidas são ignoradas.
        // "datas" é um ArrayList de string(). cada uma das datas é um string() de 3 posicoes
        private string[] GetVaguerFromTopDates(ArrayList datas)
        {
            string[] DataMaisVaga = null;
            if (datas.Count == 0)
            {
                throw new ArgumentException("'datas' must have at least one item");
            }
            else if (datas.Count > 0)
            {
                int      i          = 0;
                int      count      = datas.Count;
                string[] dataActual = null;

                DataMaisVaga = (string[])(datas[i]);
                i            = i + 1;

                while (i < count)
                {
                    dataActual = (string[])(datas[i]);

                    ControloDateValidation.PartialComparisonResult result = ControloDateValidation.ComparePartialDate(DataMaisVaga, dataActual);
                    if (result == ControloDateValidation.PartialComparisonResult.Equal || result == ControloDateValidation.PartialComparisonResult.PartialyEqual)
                    {
                        // no caso de as datas serem parcialmente iguais é necessário
                        // escolher a que for mais vaga que, para este efeito, é a
                        // mais(correcta)
                        switch (ControloDateValidation.IsMoreCompleteThan(DataMaisVaga, dataActual))
                        {
                        case ControloDateValidation.ComparisonResult.Equal:
                            // sao igualmente vagas. ignorar
                            break;

                        case ControloDateValidation.ComparisonResult.FirstOne:
                            // "DataMaisVaga" é a data mais completa, trocamos para ficarmos com a data mais vaga
                            DataMaisVaga = dataActual;
                            break;

                        case ControloDateValidation.ComparisonResult.SecondOne:
                            // "DataMaisVaga" já é a data mais vaga. ignorar
                            break;
                        }
                    }
                    else
                    {
                        // só interessa procurar a data mais vaga de entre as datas
                        // parcialmente iguais.
                        break;
                    }
                    i = i + 1;
                }
            }
            return(DataMaisVaga);
        }