Application.Controller.Pacotes = (function($) {

    function index() {
        aplicaCalendario();
        aplicaComportamentoDaBusca();
    }

    function exibir() {

        aplicaCalendario();

        var anotherRequestInProgress = false;

        aplicaComportamentoDaBusca();

        $('.indicar_pacote').click(function() {
            $('.flutuante').lightbox_me({
                centered: true,
                closeSelector: '.fechar a',
                onLoad: function() {
                    $('.carrossel ul').hide();
                },
                onClose: function() {
                    $('.carrossel ul').show();
                }
            });
            return false;
        });

        $formCriarIndicacao = $('form.criar_indicacao');

        $formCriarIndicacao.find('.adicionar a').click(function() {
            var $template = $formCriarIndicacao.find('.template');
            var totalDestinatarios = $formCriarIndicacao.find('input[name^=nomes]').length;
            var html = $template.html()
                .replace(/_X/g, '_'+totalDestinatarios)
                .replace(/NOMES/, 'nomes')
                .replace(/EMAILS/, 'emails');

            var $novoDestinatario = $('<div class="destinatario"></div>').html(html);

            $template.before($novoDestinatario);

            return false;
        });

        $formCriarIndicacao.find('.remover a').live('click', function() {
            $(this).closest('.destinatario').remove();
            return false;
        });

        $('form.criar_indicacao').submit(function() {

            if (anotherRequestInProgress) return false;

            $form = $(this);

            $.ajax({
                type: 'POST',
                url: $(this).attr('action'),
                data: $(this).serialize(),
                beforeSend: function() {
                    anotherRequestInProgress = true;
                    $form.find('.loader').show();
                    $form.find('.error').removeClass('error');
                },
                success: function() {
                    anotherRequestInProgress = false;
                    $form.find('.loader').hide();
                    $form.find('input[name^=nome]').val('');
                    $form.find('input[name^=email]').val('');
                    alert('Indicação submetida com sucesso.');
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    anotherRequestInProgress = false;
                    $form.find('.loader').hide();
                    if (XMLHttpRequest.status == 403) {
                        var jsonErrors = eval('('+XMLHttpRequest.responseText+')');

                        for (var i = 0; i < jsonErrors.length; i++) {
                            for (field in jsonErrors[i]) {
                                var id = field+'_'+i;
                                $form.find('.destinatario').eq(i).find('[id='+id+']').parent().addClass('error');
                            }
                        }
                    }
                    else {
                        alert('Um erro inesperado ocorreu no servidor. Sua indicação não foi submetida.');
                    }
                }
            });
            return false;
        });
    }

    function aplicaCalendario() {

        $('input.datepicker')
            .mask('99/99/9999')
            .datepicker({
                buttonImage: Application.build_url('sistema/img/jquery-ui/calendar.png'),
                buttonImageOnly: true,
                buttonText: 'Abrir calendário',
                dateFormat: 'dd/mm/yy',
                showOn: 'button'
            });
    }

    function aplicaComportamentoDaBusca() {

        $comboRegioes = $('select[name=regiao]');
        $comboPaises = $('select[name=pais]');
        $comboCidades = $('select[name=cidade]');

        $('input[name=tipo][value=n]').click(function() {
            $comboRegioes.val(0);
            $comboPaises.val(0);
            $comboCidades.val(0);

            $('.campos_pacotes_n').show();
            $('.campos_pacotes_i').hide();
        });

        $('input[name=tipo][value=i]').click(function() {
            $comboRegioes.val(0);
            $comboPaises.val(0);
            $comboCidades.val(0);

            $('.campos_pacotes_n').hide();
            $('.campos_pacotes_i').show();
        });

        $comboRegioes.change(function() {
            var regiao = $(this).val().toString();
            if (!regiao || regiao == '0') {
                var url = Application.build_url('paises_com_pacotes/');
            } else {
                var url = Application.build_url('paises_com_pacotes/'+regiao);
            }
            $.getJSON(url, function(data) {
                var options = '<option value="">Selecione o país</option>'; 
                var dataLength = data.length;
                for (i = 0; i < dataLength; i++) {
                    options += '<option value="'+data[i]['cd_alfa3']+'">'+data[i]['nome_pt']+'</option>';
                }   
                $comboPaises.html(options);
            }); 
        });
    }

    return {
        'index': index,
        'exibir': exibir
    };
})(jQuery);

