﻿MenuEstudo = {
    VALOR_DEFAULT_COMBO: "[default]",
    SEPARADOR_VALUE_STOP: "|",

    PopulaCarregando: function(objeto) {
        objeto.options.length = 0;
        objeto.options[0] = new Option('Carregando...');
    },

    RetornaSelectedText: function(id) {
        var objeto = $Get(id);

        if (objeto == null)
            return "";
        if (objeto.selectedIndex == 0)
            return "";
        if (objeto.value == this.VALOR_DEFAULT_COMBO)
            return "";

        return objeto.SelectedText();
    },

    RetornaSelectedValue: function(id) {
        var objeto = $Get(id);

        if (objeto == null)
            return "";
        if (objeto.selectedIndex == 0)
            return "";

        var array = objeto.value.split(this.SEPARADOR_VALUE_STOP);
        if (array.length > 0)
            return array[0];

        return objeto.value;
    },

    RetornaSelectedStop: function(id) {
        var objeto = $Get(id);

        if (objeto == null)
            return false;
        if (objeto.selectedIndex == 0)
            return false;

        var array = objeto.value.split(this.SEPARADOR_VALUE_STOP);
        if (array.length > 1)
            return ((array[1] || 'false').toLowerCase() == 'true');

        return false;
    },

    RetornaSelectedTextDataInicio: function(id) {
        var objeto = $Get(id);

        if (objeto == null)
            return "";
        if (objeto.selectedIndex == 0)
            return "";
        if (objeto.value == this.VALOR_DEFAULT_COMBO)
            return "";

        var valor = "01/" + objeto.SelectedText();

        var array = valor.split(this.SEPARADOR_VALUE_STOP);
        if (array.length > 0)
            return array[0];

        return valor;
    },

    VerificaPopulaRetorno: function(ret, titulo, combo) {
        combo.AddAt(0, titulo, '');
        if (ret.Count() == 1)
            combo.options.selectedIndex = 1;
        else
            combo.options.selectedIndex = 0;
    },

    PopulaRetorno: function(ret, titulo, objeto, texto, valor) {
        //window.alert('PopulaRetorno()');
        var itemPadrao = null;
        var defaultExisteLista = false;

        var config = this.ObtemConfiguracaoField(objeto);
        if (config != null && config.ValorPadrao != '') {
            for (var i = 0; i < ret.length; i++) {
                if (ret[i][texto] == config.ValorPadrao) //Valor padrão já está na lista de retorno
                {
                    defaultExisteLista = true;
                    break;
                }
            }

            if (!defaultExisteLista) {
                //Adiciona valor padrão
                itemPadrao = {};
                itemPadrao[texto] = config.ValorPadrao;
                itemPadrao[valor] = this.VALOR_DEFAULT_COMBO;

                ret.unshift(itemPadrao);
            }
        }

        //Oculta campo no Refinamento da Busca, que tem alteração de tipo de produto no client e não no server
        if (!config.Mostrar) {
            objeto.style.display = 'none';
        }
        
        if (ret.Count() > 0) {
            objeto.disabled = false;
            objeto.DataBind(ret, texto, valor);

            MenuEstudo.VerificaPopulaRetorno(ret, titulo, objeto);

            var valorSelecionar = '';
            if (config != null) {
                if (config.ValorAnterior != null && config.ValorAnterior != '') {
                    //Seleciona o valor anterior
                    valorSelecionar = config.ValorAnterior;
                }
                else if (config.ValorPadrao != null && config.ValorPadrao != '') {
                    //Seleciona o valor padrão
                    valorSelecionar = config.ValorPadrao;
                }
            }
            else {
                //Não seleciona nada, não tem padrão nem valor anterior
            }

            //Seleciona o valor padrão
            if (valorSelecionar != '') {
                for (var j = 0; j < objeto.options.length; j++) {
                    if (objeto.options[j].text == valorSelecionar) {
                        objeto.selectedIndex = j;
                        break;
                    }
                }
            }

            objeto.onchange();
            return true;
        }
        else {
            objeto.disabled = true;
            alert(String.Format('Não há dados para: {0}', titulo))
            return false;
        }
    },

    PopulaRetornoEM: function(ret, titulo, objeto, texto, valor) {
        if (ret.Count() > 0) {
            objeto.disabled = false;
            objeto.DataBind(ret, texto, valor);
            MenuEstudo.VerificaPopulaRetorno(ret, titulo, objeto);
            objeto.onchange();
            return true;
        }
        else {
            alert(String.Format('Não há dados para: {0}', titulo))
            objeto.disabled = true;
            return false;
        }
    },

    TestaAcomodacao: function() {
        if (this.GetAcomodacao())
            $Get(lnkFields.cmbAcomodacao).style.display = ''; //Exibe Tipo Acomodação');
        else
            $Get(lnkFields.cmbAcomodacao).style.display = 'none'; //Oculta Tipo Acomodação
    },

    GetAcomodacao: function() {
        var selectedRadio = GetSelectedRadio(lnkFields.rdbAcomodacao);
        return selectedRadio && selectedRadio.value == 'Sim';
    },

    PopulaTipoExtensao: function() {
        this.TestaAcomodacao();
        this.PopulaCarregando($Get(lnkFields.cmbTipoExtensao));
        Ajax.Tarifario.ListaPorTipoExtensao(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.EndPopulaTipoExtensao);
    },

    EndPopulaTipoExtensao: function(ret) {
        MenuEstudo.PopulaRetorno(ret, 'Extensão', $Get(lnkFields.cmbTipoExtensao), 'nom_curso', 'num_ordem_curso');
    },

    ObtemConfiguracaoField: function(field) {
        var item;
        for (var i = 0; i < window.configuracaoCamposBusca.length; i++) {
            item = window.configuracaoCamposBusca[i];

            if (field.id.match('txtAnos$') && item.Campo == 'Idade')
                return item;
            else if (field.id.match('rdbAcomodacao$') && item.Campo == 'Acomodacao')
                return item;
            else if (field.id.match('cmbIdioma$') && item.Campo == 'Idioma')
                return item;
            else if (field.id.match('cmbNivelIdioma$') && item.Campo == 'NivelIdioma')
                return item;
            else if (field.id.match('cmbTipoCurso$') && item.Campo == 'TipoCurso')
                return item;
            else if (field.id.match('cmbPais$') && item.Campo == 'Pais')
                return item;
            else if (field.id.match('cmbCidade$') && item.Campo == 'Cidade')
                return item;
            else if (field.id.match('cmbDataInicio$') && item.Campo == 'DataInicio')
                return item;
            else if (field.id.match('cmbDuracao$') && item.Campo == 'Duracao')
                return item;
            else if (field.id.match('cmbCarga$') && item.Campo == 'CargaHoraria')
                return item;
            else if (field.id.match('cmbAcomodacao$') && item.Campo == 'TipoAcomodacao')
                return item;
        }

        return null;
    },

    ObtemConfiguracaoFieldPorNomeCampo: function(nomeCampo) {
        for (var i = 0; i < window.configuracaoCamposBusca.length; i++) {
            if (window.configuracaoCamposBusca[i].Campo == nomeCampo)
                return window.configuracaoCamposBusca[i];
        }

        return null;
    },

    AtualizaValorAnteriorConfiguracaoField: function(idade, acomodacao, idioma, nivelIdioma, tipoCurso, pais, cidade, dataInicio, duracao, cargaHoraria, tipoAcomodacao) {
        var item;
        for (var i = 0; i < window.configuracaoCamposBusca.length; i++) {
            item = window.configuracaoCamposBusca[i];

            if (item.Campo == 'Idade')
                item.ValorAnterior = idade;
            else if (item.Campo == 'Acomodacao')
                item.ValorAnterior = acomodacao;
            else if (item.Campo == 'Idioma')
                item.ValorAnterior = idioma;
            else if (item.Campo == 'NivelIdioma')
                item.ValorAnterior = nivelIdioma;
            else if (item.Campo == 'TipoCurso')
                item.ValorAnterior = tipoCurso;
            else if (item.Campo == 'Pais')
                item.ValorAnterior = pais;
            else if (item.Campo == 'Cidade')
                item.ValorAnterior = cidade;
            else if (item.Campo == 'DataInicio')
                item.ValorAnterior = dataInicio;
            else if (item.Campo == 'Duracao')
                item.ValorAnterior = duracao;
            else if (item.Campo == 'CargaHoraria')
                item.ValorAnterior = cargaHoraria;
            else if (item.Campo == 'TipoAcomodacao')
                item.ValorAnterior = tipoAcomodacao;
        }
    },

    LimpaValorAnteriorConfiguracaoField: function(idade, acomodacao, idioma, nivelIdioma, tipoCurso, pais, cidade, dataInicio, duracao, cargaHoraria, tipoAcomodacao) {
        var item;
        for (var i = 0; i < window.configuracaoCamposBusca.length; i++) {
            item = window.configuracaoCamposBusca[i];

            if (item.Campo == 'Idade' && idade)
                item.ValorAnterior = '';
            else if (item.Campo == 'Acomodacao' && acomodacao)
                item.ValorAnterior = '';
            else if (item.Campo == 'Idioma' && idioma)
                item.ValorAnterior = '';
            else if (item.Campo == 'NivelIdioma' && nivelIdioma)
                item.ValorAnterior = '';
            else if (item.Campo == 'TipoCurso' && tipoCurso)
                item.ValorAnterior = '';
            else if (item.Campo == 'Pais' && pais)
                item.ValorAnterior = '';
            else if (item.Campo == 'Cidade' && cidade)
                item.ValorAnterior = '';
            else if (item.Campo == 'DataInicio' && dataInicio)
                item.ValorAnterior = '';
            else if (item.Campo == 'Duracao' && duracao)
                item.ValorAnterior = '';
            else if (item.Campo == 'CargaHoraria' && cargaHoraria)
                item.ValorAnterior = '';
            else if (item.Campo == 'TipoAcomodacao' && tipoAcomodacao)
                item.ValorAnterior = '';
        }
    },

    AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo: function(nomeCampo, valorAnterior) {
        var item = this.ObtemConfiguracaoFieldPorNomeCampo(nomeCampo);
        item.ValorAnterior = valorAnterior;
    },

    ValidaItemComboSelecionadoOutro: function(objeto) {
        return (objeto.options[objeto.selectedIndex].text == 'Outro');
    },
    
    PopulaIdiomas: function(field) {
        //window.alert('PopulaIdiomas()');
        this.TestaAcomodacao();
        this.PopulaCarregando($Get(lnkFields.cmbIdioma));
        Ajax.Tarifario.ListaPorIdioma(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.EndPopulaIdiomas);
    },

    EndPopulaIdiomas: function(ret) {
        //window.alert('EndPopulaIdiomas()');
        MenuEstudo.PopulaRetorno(ret, 'Idioma', $Get(lnkFields.cmbIdioma), 'Value', 'Key');
    },

    IdiomaOnChange: function() {
        //window.alert('IdiomaOnChange()');
    },

    PopulaAcomodacao: function(field) {
        //window.alert('PopulaAcomodacao()');
        this.TestaAcomodacao();

        var config = this.ObtemConfiguracaoField(field);
        if (config.ValorPadrao != '') //Se tem valor padrão, preenche
        {
            var radioSim = $Get(field.id + '0');
            var radioNao = $Get(field.id + '1');
            var radioSelecionado = (config.ValorPadrao == 'SIM' ? radioSim : radioNao);
            radioSelecionado.checked = true;
            radioSelecionado.OnRadioClick = field.fieldSet.OnRadioClick;
            radioSelecionado.OnRadioClick();
        }
    },

    PopulaNivelIdioma: function() {
        this.TestaAcomodacao();

        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('Idioma', this.RetornaSelectedText(lnkFields.cmbIdioma));

        if (this.RetornaSelectedStop(lnkFields.rdbAcomodacao)) {
            this.Busca(true);
            return;
        }

        this.PopulaCarregando($Get(lnkFields.cmbNivelIdioma));
        Ajax.Tarifario.ListaPorNivelIdioma(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.EndPopulaNivelIdioma);
    },

    PopulaNivelIdiomaFiltro: function() {
        this.TestaAcomodacao();
        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('Idioma', this.RetornaSelectedText(lnkFields.cmbIdioma));
        this.PopulaCarregando($Get(lnkFields.cmbNivelIdioma));
        Ajax.Tarifario.ListaPorNivelIdioma(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.EndPopulaNivelIdioma);
    },

    EndPopulaNivelIdioma: function(ret) {
        MenuEstudo.PopulaRetorno(ret, 'Nível do idioma', $Get(lnkFields.cmbNivelIdioma), 'Value', 'Key');
    },

    NivelIdiomaOnChange: function() {
        if (this.ValidaItemComboSelecionadoOutro($Get(lnkFields.cmbNivelIdioma))) //Limpa NivelIdioma
            this.LimpaValorAnteriorConfiguracaoField(false, false, false, true, true, true, true, true, true, true, true);
    },

    PopulaTipoCurso: function() {
        this.TestaAcomodacao();

        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('NivelIdioma', this.RetornaSelectedText(lnkFields.cmbNivelIdioma));

        if (this.RetornaSelectedStop(lnkFields.cmbNivelIdioma)) {
            this.Busca(true);
            return;
        }

        this.PopulaCarregando($Get(lnkFields.cmbTipoCurso));
        Ajax.Tarifario.ListaPorTipoCurso(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.EndPopulaTipoCurso);
    },

    PopulaTipoCursoFiltro: function() {
        this.TestaAcomodacao();
        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('NivelIdioma', this.RetornaSelectedText(lnkFields.cmbNivelIdioma));
        this.PopulaCarregando($Get(lnkFields.cmbTipoCurso));
        Ajax.Tarifario.ListaPorTipoCurso(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.EndPopulaTipoCurso);
    },

    EndPopulaTipoCurso: function(ret) {
        MenuEstudo.PopulaRetorno(ret, 'Tipo', $Get(lnkFields.cmbTipoCurso), 'Value', 'Key');
    },

    TipoCursoOnChange: function() {
        if (this.ValidaItemComboSelecionadoOutro($Get(lnkFields.cmbTipoCurso))) //Limpa TipoCurso
            this.LimpaValorAnteriorConfiguracaoField(false, false, false, false, true, true, true, true, true, true, true);
    },

    PopulaPais: function() {
        this.TestaAcomodacao();

        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('TipoCurso', this.RetornaSelectedText(lnkFields.cmbTipoCurso));

        if (this.RetornaSelectedStop(lnkFields.cmbTipoCurso)) {
            this.Busca(true);
            return;
        }

        this.PopulaCarregando($Get(lnkFields.cmbPais));
        Ajax.Tarifario.ListaPorPais(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.EndPopulaPais);
    },

    EndPopulaPais: function(ret) {
        MenuEstudo.PopulaRetorno(ret, 'País', $Get(lnkFields.cmbPais), 'Value', 'Key');
    },

    PaisOnChange: function() {
        if (this.ValidaItemComboSelecionadoOutro($Get(lnkFields.cmbPais))) //Limpa Pais
            this.LimpaValorAnteriorConfiguracaoField(false, false, false, false, false, true, true, true, true, true, true);
    },

    PopulaCidade: function() {
        this.TestaAcomodacao();

        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('Pais', this.RetornaSelectedText(lnkFields.cmbPais));

        if (this.RetornaSelectedStop(lnkFields.cmbPais)) {
            this.Busca(true);
            return;
        }

        this.PopulaCarregando($Get(lnkFields.cmbCidade));
        Ajax.Tarifario.ListaPorCidade(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.RetornaSelectedText(lnkFields.cmbPais), this.EndPopulaCidade);
    },

    EndPopulaCidade: function(ret) {
        MenuEstudo.PopulaRetorno(ret, 'Cidade', $Get(lnkFields.cmbCidade), 'Value', 'Key');
    },

    CidadeOnChange: function() {
        if (this.ValidaItemComboSelecionadoOutro($Get(lnkFields.cmbCidade))) //Limpa Cidade
            this.LimpaValorAnteriorConfiguracaoField(false, false, false, false, false, false, true, true, true, true, true);
    },

    PopulaDataInicio: function() {
        this.TestaAcomodacao();

        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('Cidade', this.RetornaSelectedText(lnkFields.cmbCidade));

        if (this.RetornaSelectedStop(lnkFields.cmbCidade)) {
            this.Busca(true);
            return;
        }

        this.PopulaCarregando($Get(lnkFields.cmbDataInicio));
        Ajax.Tarifario.ListaPorDataInicio(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.RetornaSelectedText(lnkFields.cmbPais), this.RetornaSelectedText(lnkFields.cmbCidade), this.EndPopulaDataInicio);
    },

    PopulaDataInicioFiltro: function() {
        this.TestaAcomodacao();
        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('Cidade', this.RetornaSelectedText(lnkFields.cmbCidade));
        this.PopulaCarregando($Get(lnkFields.cmbDataInicio));
        Ajax.Tarifario.ListaPorDataInicio(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.RetornaSelectedText(lnkFields.cmbPais), this.RetornaSelectedText(lnkFields.cmbCidade), this.EndPopulaDataInicio);
    },

    EndPopulaDataInicio: function(ret) {
        for (var i = 0; i < ret.Count(); i++) {
            ret[i].Value = ret[i].Value.substr(3);
            ret[i].Key = ret[i].Key.substr(3);
        }

        MenuEstudo.PopulaRetorno(ret, 'Data de início', $Get(lnkFields.cmbDataInicio), 'Value', 'Key')
    },

    DataInicioOnChange: function() {
        if (this.ValidaItemComboSelecionadoOutro($Get(lnkFields.cmbDataInicio))) //Limpa DataInicio
            this.LimpaValorAnteriorConfiguracaoField(false, false, false, false, false, false, false, true, true, true, true);
    },

    PopulaDuracao: function() {
        this.TestaAcomodacao();

        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('DataInicio', this.RetornaSelectedTextDataInicio(lnkFields.cmbDataInicio));

        if (this.RetornaSelectedStop(lnkFields.cmbDataInicio)) {
            this.Busca(true);
            return;
        }

        this.PopulaCarregando($Get(lnkFields.cmbDuracao));
        Ajax.Tarifario.ListaPorDuracao(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.RetornaSelectedText(lnkFields.cmbPais), this.RetornaSelectedText(lnkFields.cmbCidade), this.RetornaSelectedTextDataInicio(lnkFields.cmbDataInicio), this.EndPopulaDuracao);
    },

    PopulaDuracaoFiltro: function() {
        this.TestaAcomodacao();
        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('DataInicio', this.RetornaSelectedTextDataInicio(lnkFields.cmbDataInicio));
        this.PopulaCarregando($Get(lnkFields.cmbDuracao));
        Ajax.Tarifario.ListaPorDuracao(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.RetornaSelectedText(lnkFields.cmbPais), this.RetornaSelectedText(lnkFields.cmbCidade), this.RetornaSelectedTextDataInicio(lnkFields.cmbDataInicio), this.EndPopulaDuracao);
    },

    EndPopulaDuracao: function(ret) {
        MenuEstudo.PopulaRetorno(ret, 'Duração', $Get(lnkFields.cmbDuracao), 'Value', 'Key')
    },

    DuracaoOnChange: function() {
        if (this.ValidaItemComboSelecionadoOutro($Get(lnkFields.cmbDuracao))) //Limpa Duracao
            this.LimpaValorAnteriorConfiguracaoField(false, false, false, false, false, false, false, false, true, true, true);
    },

    PopulacargaHoraria: function() {
        this.TestaAcomodacao();

        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('Duracao', this.RetornaSelectedText(lnkFields.cmbDuracao));

        if (this.RetornaSelectedStop(lnkFields.cmbDuracao)) {
            this.Busca(true);
            return;
        }

        this.PopulaCarregando($Get(lnkFields.cmbCarga));
        Ajax.Tarifario.ListaPorCargaHoraria(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.RetornaSelectedText(lnkFields.cmbPais), this.RetornaSelectedText(lnkFields.cmbCidade), this.RetornaSelectedTextDataInicio(lnkFields.cmbDataInicio), this.RetornaSelectedText(lnkFields.cmbDuracao), this.EndPopulacargaHoraria);
    },

    PopulacargaHorariaFiltro: function() {
        this.TestaAcomodacao();

        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('Duracao', this.RetornaSelectedText(lnkFields.cmbDuracao));

        this.PopulaCarregando($Get(lnkFields.cmbCarga));
        Ajax.Tarifario.ListaPorCargaHoraria(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.RetornaSelectedText(lnkFields.cmbPais), this.RetornaSelectedText(lnkFields.cmbCidade), this.RetornaSelectedTextDataInicio(lnkFields.cmbDataInicio), this.RetornaSelectedText(lnkFields.cmbDuracao), this.EndPopulacargaHoraria);
    },

    EndPopulacargaHoraria: function(ret) {
        MenuEstudo.PopulaRetorno(ret, 'Carga horária', $Get(lnkFields.cmbCarga), 'Value', 'Key')
    },

    CargaHorariaOnChange: function() {
        if (this.ValidaItemComboSelecionadoOutro($Get(lnkFields.cmbCarga))) //Limpa CargaHoraria
            this.LimpaValorAnteriorConfiguracaoField(false, false, false, false, false, false, false, false, false, true, true);
    },

    PopulaTipoAcomodacao: function() {
        this.TestaAcomodacao();

        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('CargaHoraria', this.RetornaSelectedText(lnkFields.cmbCarga));

        if (this.RetornaSelectedStop(lnkFields.cmbCarga)) {
            this.Busca(true);
            return;
        }

        this.PopulaCarregando($Get(lnkFields.cmbAcomodacao));
        Ajax.Tarifario.ListaPorTipoAcomodacao(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.RetornaSelectedText(lnkFields.cmbPais), this.RetornaSelectedText(lnkFields.cmbCidade), this.RetornaSelectedTextDataInicio(lnkFields.cmbDataInicio), this.RetornaSelectedText(lnkFields.cmbDuracao), this.RetornaSelectedText(lnkFields.cmbCarga), this.EndPopulaTipoAcomodacao);
    },

    PopulaTipoAcomodacaoFiltro: function() {
        this.TestaAcomodacao();
        this.AtualizaValorAnteriorConfiguracaoFieldPorNomeCampo('CargaHoraria', this.RetornaSelectedText(lnkFields.cmbCarga));
        this.PopulaCarregando($Get(lnkFields.cmbAcomodacao));
        Ajax.Tarifario.ListaPorTipoAcomodacao(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.RetornaSelectedText(lnkFields.cmbNivelIdioma), this.RetornaSelectedText(lnkFields.cmbTipoCurso), this.RetornaSelectedText(lnkFields.cmbPais), this.RetornaSelectedText(lnkFields.cmbCidade), this.RetornaSelectedTextDataInicio(lnkFields.cmbDataInicio), this.RetornaSelectedText(lnkFields.cmbDuracao), this.RetornaSelectedText(lnkFields.cmbCarga), this.EndPopulaTipoAcomodacao);
    },

    EndPopulaTipoAcomodacao: function(ret) {
        MenuEstudo.PopulaRetorno(ret, 'Tipo de acomodação', $Get(lnkFields.cmbAcomodacao), 'Value', 'Key')
    },

    TipoAcomodacaoOnChange: function() {
        if (this.ValidaItemComboSelecionadoOutro($Get(lnkFields.cmbAcomodacao))) //Limpa TipoAcomodacao
            this.LimpaValorAnteriorConfiguracaoField(false, false, false, false, false, false, false, false, false, false, true);
    },

    Busca: function(ignoraValidacao) {
        if (ignoraValidacao != true) {
            if (this.Valida() == false)
                return false;
        }

        App.Loading.Show();
        var resultadoBusca = new App.URLRedirect(page.ResolveUrl("~/aspx/Produtos/ResultadoBusca.aspx"));
        resultadoBusca.Add('idTipoIntercambio', 1);
        resultadoBusca.Add('idTipoProduto', idTipoProduto);
        resultadoBusca.Add('txtAnos', $Get(lnkFields.txtAnos).value);
        resultadoBusca.Add('acomodacao', this.GetAcomodacao());
        resultadoBusca.Add('cmbIdioma', encodeURIComponent(this.RetornaSelectedText(lnkFields.cmbIdioma)));
        resultadoBusca.Add('TipoCurso', encodeURIComponent(this.RetornaSelectedText(lnkFields.cmbTipoCurso)));
        resultadoBusca.Add('cmbAtividade', encodeURIComponent(this.RetornaSelectedText(lnkFields.cmbAtividades)));
        resultadoBusca.Add('cmbNivelidioma', encodeURIComponent(this.RetornaSelectedText(lnkFields.cmbNivelIdioma)));
        resultadoBusca.Add('cmbPais', encodeURIComponent(this.RetornaSelectedText(lnkFields.cmbPais)));
        resultadoBusca.Add('cmbCidade', encodeURIComponent(this.RetornaSelectedText(lnkFields.cmbCidade)));
        resultadoBusca.Add('cmbDataInicio', encodeURIComponent(this.RetornaSelectedTextDataInicio(lnkFields.cmbDataInicio)));
        resultadoBusca.Add('cmbDuracao', encodeURIComponent(this.RetornaSelectedText(lnkFields.cmbDuracao)));
        resultadoBusca.Add('cmbCarga', encodeURIComponent(this.RetornaSelectedText(lnkFields.cmbCarga)));
        resultadoBusca.Add('cmbAcomodacao', encodeURIComponent(this.RetornaSelectedText(lnkFields.cmbAcomodacao)));
        resultadoBusca.Add('Ordem', 1);
        resultadoBusca.Add('Pagina', 0);
        resultadoBusca.Add('NumItens', 10);
        resultadoBusca.Go();
    },

    PopulaAtividades: function() {
        this.PopulaCarregando($Get(lnkFields.cmbAtividades));
        Ajax.Tarifario.ListaPorAtividades(idTipoProduto, $Get(lnkFields.txtAnos).value, this.GetAcomodacao(), this.RetornaSelectedText(lnkFields.cmbIdioma), this.EndPopulaAtividades);
    },

    EndPopulaAtividades: function(ret) {
        MenuEstudo.PopulaRetorno(ret, 'Atividade', $Get(lnkFields.cmbAtividades), 'nom_curso', 'num_ordem_curso');
    },

    //Ensino médio

    PopulaDuracaoEM: function() {
        this.PopulaCarregando($Get(lnkFieldsEM.cmbDuracaoEM));
        Ajax.Duracao.List($Get(lnkFieldsEM.cmbEscolaPublicaEM).SelectedValue(), $Get(lnkFieldsEM.cmbCidadeEM).SelectedValue(), idTipoProduto, this.EndPopulaDuracaoEM);
    },

    EndPopulaDuracaoEM: function(ret) {
        MenuEstudo.PopulaRetornoEM(ret, 'Duração', $Get(lnkFieldsEM.cmbDuracaoEM), 'Descricao', 'IdDuracao')
        $Get(lnkFieldsEM.cmbDuracaoEM).AddAt(1, 'Indiferente', '-1');
    },

    PopulaAcomodacaoEM: function() {
        this.PopulaCarregando($Get(lnkFieldsEM.cmbAcomodacaoEM));
        Ajax.TipoAcomodacao.List($Get(lnkFieldsEM.cmbEscolaPublicaEM).SelectedValue(), $Get(lnkFieldsEM.cmbCidadeEM).SelectedValue(), $Get(lnkFieldsEM.cmbDuracaoEM).SelectedValue(), $Get(lnkFieldsEM.cmbDataInicioEM).SelectedValue(), idTipoProduto, this.EndPopulaAcomodacaoEM);
    },

    EndPopulaAcomodacaoEM: function(ret) {
        MenuEstudo.PopulaRetornoEM(ret, 'Tipo de acomodação', $Get(lnkFieldsEM.cmbAcomodacaoEM), 'Nome', 'IdTipoAcomodacao')
        $Get(lnkFieldsEM.cmbAcomodacaoEM).AddAt(1, 'Indiferente', '-1');
    },

    BuscaEM: function() {
        if (this.ValidaEM() == false)
            return false;
        var resultadoBusca = new App.URLRedirect(page.ResolveUrl("~/aspx/Produtos/ResultadoBusca.aspx"));
        resultadoBusca.Add('idTipoIntercambio', 1);
        resultadoBusca.Add('idTipoProduto', idTipoProduto);
        resultadoBusca.Add('cmbEscolaPublica', $Get(lnkFieldsEM.cmbEscolaPublicaEM).SelectedValue());
        resultadoBusca.Add('cmbCidade', $Get(lnkFieldsEM.cmbCidadeEM).SelectedValue());
        resultadoBusca.Add('cmbDuracao', $Get(lnkFieldsEM.cmbDuracaoEM).SelectedValue());
        resultadoBusca.Add('cmbInicio', $Get(lnkFieldsEM.cmbDataInicioEM).SelectedValue());
        resultadoBusca.Add('cmbAcomodacao', $Get(lnkFieldsEM.cmbAcomodacaoEM).SelectedValue());
        resultadoBusca.Go();
    },

    Valida: function() {
        if ($Get(lnkFields.txtAnos).value == "") {
            alert('Campo Idade obrigatório');
            return false;
        }
        if (this.GetAcomodacao() == null) {
            alert('Campo Acomodação obrigatório');
            return false;
        }
        if (this.RetornaSelectedText(lnkFields.cmbTipoCurso) == null && $Get(lnkFields.cmbTipoCurso).value != this.VALOR_DEFAULT_COMBO) {
            alert('Campo Tipo obrigatório');
            return false;
        }
        if (this.RetornaSelectedText(lnkFields.cmbIdioma) == "" && $Get(lnkFields.cmbIdioma).value != this.VALOR_DEFAULT_COMBO) {
            alert('Campo idioma obrigatório');
            return false;
        }
        if (this.RetornaSelectedText(lnkFields.cmbNivelIdioma) == "" && $Get(lnkFields.cmbNivelIdioma).value != this.VALOR_DEFAULT_COMBO) {
            alert('Campo Nivel de idioma  obrigatório');
            return false;
        }
        if (this.RetornaSelectedText(lnkFields.cmbPais) == "" && $Get(lnkFields.cmbPais).value != this.VALOR_DEFAULT_COMBO) {
            alert('Campo País obrigatório');
            return false;
        }
        if (this.RetornaSelectedText(lnkFields.cmbCidade) == "" && $Get(lnkFields.cmbCidade).value != this.VALOR_DEFAULT_COMBO) {
            alert('Campo Cidade obrigatório');
            return false;
        }
        if (this.RetornaSelectedText(lnkFields.cmbDataInicio) == "" && $Get(lnkFields.cmbDataInicio).value != this.VALOR_DEFAULT_COMBO) {
            alert('Campo Data de inicio obrigatório');
            return false;
        }
        return true;
    },


    ValidaEM: function() {
        if (this.RetornaSelectedText(lnkFieldsEM.cmbEscolaPublicaEM) == "") {
            alert('Campo escola pública obrigatório');
            return false;
        }
        if (this.RetornaSelectedText(lnkFieldsEM.cmbCidadeEM) == "") {
            alert('Campo Cidade obrigatório');
            return false;
        }

        if (this.RetornaSelectedText(lnkFieldsEM.cmbDuracaoEM) == "") {
            alert('Campo Duracao obrigatório');
            return false;
        }
        if (this.RetornaSelectedText(lnkFieldsEM.cmbDataInicioEM) == "") {
            alert('Campo Data de inicio obrigatório');
            return false;
        }

        if (this.RetornaSelectedText(lnkFieldsEM.cmbAcomodacaoEM) == "") {
            alert('Campo tipo de acomodação obrigatório');
            return false;
        }
        return true;
    }
}
