$(function()
{
    this.estados     = {};
    this.localidades = {};

    var self = this;

    self.emptySelect = function ( select )
    {
        var lastOption = select.lastChild;

        while( lastOption )
        {
            var option = select.lastChild;
            if ( ( 'getAttribute' in option && option.getAttribute('value').length > 0 ) || !('getAttribute' in option) )
                select.removeChild(select.lastChild);
            else
                lastOption = false;
        }

        select.selectedIndex = 0;
    };

    self.completeSelect = function( select, options )
    {
        var select = $('select#' + select);

        self.emptySelect(select[0]);

        for ( var id in options )
            select.append('<option value="' + id + '">' + options[id] + '</option>');
    };

    $('form select#pais').change(function()
    {
        var idPaises = $(this).val();

        if ( idPaises != '' )
        {
            if ( idPaises in self.estados )
                self.completeSelect('estado', self.estados[idPaises]);

            else
            {
                jQuery.post('/api/ApiPaisesEstados/', {idPaises:idPaises}, function( response )
                {
                    self.estados[idPaises] = response;
                    self.completeSelect('estado', response);
                }, 'json');
            }

            self.emptySelect($('select#localidad')[0]);
        }
    });

    $('form select#estado').change(function()
    {
        var idPaisesEstados = $(this).val();

        if ( idPaisesEstados != '' )
        {
            if ( idPaisesEstados in self.localidades )
                self.completeSelect('localidad', self.localidades[idPaisesEstados]);

            else
            {
                jQuery.post('/api/ApiPaisesEstadosLocalidades/', {idPaisesEstados:idPaisesEstados}, function( response )
                {
                    self.localidades[idPaisesEstados] = response;
                    self.completeSelect('localidad', response);
                }, 'json');
            }
        }
    });
    
    $('#desde, #hasta').date_input();
});