[].indexOf || ( Array.prototype.indexOf = function( v ){
    for ( var i = this.length; i-- && this[i] !== v; );
    return i;
});

$(function()
{
    var estadosLocalidades = {};
    var lastPaisesEstados  = 0;
    var changing           = false;
    
    var updateOptions = function( localidades ){

        var select = $('form dl dd select#barrio').empty();
        
        for ( var i = 0, len = localidades.length; i < len; i++ )
            select.append('<option name="' + localidades[i] + '">' + localidades[i] + '</option>');
            
        changing = false;
    };
    
    $('form dl dd select#provincia').change(function()
    {
        changing = true;
        
        var idPaisesEstados = $(this).val();
        
        if ( idPaisesEstados != lastPaisesEstados )
        {
            if ( idPaisesEstados in estadosLocalidades ){
                lastPaisesEstados = idPaisesEstados;
                return updateOptions(estadosLocalidades[idPaisesEstados]);
            }
    
            $.getJSON('/api/ApiEstadosLocalidades/' + idPaisesEstados + '/', function( response )
            {
                estadosLocalidades[idPaisesEstados] = response;
                updateOptions(response);
                updateQuery();
            });
                
            lastPaisesEstados = idPaisesEstados;
        }
        
        return null;
    });

    function c ( v ){
        return v.length == 1 ? "0" + v : v;
    }
    
    function findQuery(){
    
        var f            = $('form#filtros')[0];
        var buscar       = [];
        var preciosTipos = [null, 'mes', 'quincena', 'semana'];

        for ( var i = 0, len = f.tipo.length; i < len; i++ )
        {
            if ( f.tipo[i].checked )
                buscar.push(f.tipo[i].value);
        }

        if ( f.ambientes.value != '' ){
            buscar.push(f.ambientes.value);
            buscar.push('ambientes');
        }

        if ( $(f.barrio).val() != '' && $(f.barrio).val() != 'Seleccionar' ){
            buscar.push($(f.barrio).val());
        }
        
        else if ( f.provincia.value != '' )
            buscar.push( $(f.provincia[f.provincia.selectedIndex]).text() );
            
        if ( f.desde && f.desde.value != '' ){
            buscar.push('u$s');
            
            if ( f.precioTipo.value != '' )
                buscar.push(preciosTipos[f.precioTipo.value]);
            
            buscar.push('desde');
            buscar.push(f.desde.value);
        }

        if ( f.hasta && f.hasta.value != '' ){

            if ( ( f.desde.value != '' && parseInt(f.desde.value) <= parseInt(f.hasta.value) ) || f.desde.value == '' ){

                if ( buscar.indexOf('u$s') == -1 )
                    buscar.push('u$s');
    
                if ( f.precioTipo.value != '' && buscar.indexOf(preciosTipos[f.precioTipo.value]) == -1 )
                    buscar.push(preciosTipos[f.precioTipo.value]);
    
                buscar.push('hasta');
                buscar.push(f.hasta.value);
            }
        }

        if ( f.d_desde.value != '' && f.m_desde.value != '' && f.Y_desde.value != '' ){

            var desde = f.Y_desde.value + "" + c(f.m_desde.value) + "" + c(f.d_desde.value);

            if ( f.d_hasta.value != '' && f.m_hasta.value != '' && f.Y_hasta.value != '' ){

                var hasta = f.Y_hasta.value + "" + c(f.m_hasta.value) + "" + c(f.d_hasta.value);

                if ( hasta >= desde ){
                    buscar.push('desde');
                    buscar.push(f.d_desde.value + '-' + f.m_desde.value + '-' + f.Y_desde.value);
                    buscar.push('hasta');
                    buscar.push(f.d_hasta.value + '-' + f.m_hasta.value + '-' + f.Y_hasta.value);
                }
            }
        }
        
        return buscar;
    }
    
    function updateQuery(){
        
        var query = findQuery();
        
        if ( query.length > 0 )
            $('input#q').val(query.join(' '));
    }
    
    $('form#filtros input').click(function(){
            updateQuery();
    });
    
    $('form#filtros select').change(function(){
            updateQuery();
    });
    
    $('a.search[href=#]').click(function()
    {
        var buscar = $('input#q').val().replace(/\s/g, '+');

        if ( buscar.length > 0 )
            document.location.href = '/buscar/' + buscar + '/';

        return false;
    });
    
    
});