var markerManager;
var map;
var dsFarmacias;

$(document).ready(function(){
    $.getJSON("/localizador/list_cidades", {}, function(cidades){
        $('select#cidadesSelector').html('');
        $.each(cidades, function(i, item) {
            $('select#cidadesSelector').append('<option value="'+ ( i==0 ? '' : item.Cidade.slug ) +'">'+item.Cidade.nome+'</option>');
        })
    });
    $('select#cidadesSelector').change(function() {
        $('select#bairrosSelector').html('').append('<option value="">Carregando...</option>');
        $.getJSON("/localizador/list_bairros/" + $('select#cidadesSelector').val(), {}, function(bairros){
            $.each(bairros, function(i, item) { 
                if(i==0) $('select#bairrosSelector').html(''); $('select#bairrosSelector').append('<option value="'+ ( i==0 ? '' : item.Farmacia.bairro ) +'">'+item.Farmacia.bairro+'</option>');
            })
        });
    });

    $('#farmaciasIndexForm').change(function() { 
        changeMap('#farmaciasIndexForm');
    });
    
    $('#farmaciasIndexForm').submit(function() {
        atualizaMapa(this);
        updateFarmaciasList("/localizador/list_farmacias/"+str);
        return false;
    });
});

function changeMap(_id) {
    atualizaMapa(_id);
}

function atualizaMapa(_form) {
    str = pegarDadosForm(_form);
    populateMap(str);
}

function pegarDadosForm(_form) {
    var str = $(_form).serialize();
    str = str_replace_all('&', '/', str);
    str = str_replace_all('=', ':', str);
    str = str.replace('_method:POST', '');
    str = str.replace('Cidade.slug:', '');
    str = str.replace('bairro:', '');
    return str;
}

function startsMap(url) {
    if (GBrowserIsCompatible()) {
        //starts map
        map = new GMap2(document.getElementById("mapa"));
        map.setCenter(new GLatLng(-27.3522, -50.7568), 7);
        map.addControl(new GSmallMapControl());
        //map.addControl(new GMapTypeControl());
    
        markerManager = new MarkerManager(map, {
            trackMarkers:true
        });
        map.clearOverlays();
    }
    populateMap(url);
}

function populateMap(url) {
    var markers = [];
    var bounds = new GLatLngBounds();
    $.getJSON("/localizador/list_farmacias/"+(url!=null?url:'')+"/json:true", {}, function(farmacias){
        $.each(farmacias, function(i, item) {
            setMarker(item.Farmacia.slug, item.Farmacia.titulo, item.Farmacia.lat, item.Farmacia.lng, markers, bounds);
        });
        fixMarker(markers, bounds);
    });
}

function setMarker(id, titulo, lat, lng, markers, bounds) {
    var position;
    var marker;
    var icon = G_DEFAULT_ICON;

    if(notEmpty(lat) && notEmpty(lng)) {
        position = new GLatLng(lat, lng);
        marker = createMarker(id, position, titulo,G_DEFAULT_ICON);
        markers.push(marker);
        bounds.extend(marker.getPoint());
    }
}

function fixMarker(markers, bounds) {
    markerManager.clearMarkers();
    markerManager.addMarkers(markers, 0, 17);
    markerManager.refresh();

    //Se tiver somente um marcador, centralizar nele
    if(markers.length == 0) {
        map.setCenter(new GLatLng(-27.3522, -50.7568), 7);
    } else {
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
    }
}

function notEmpty(value) {
    return value != null && ''!=value;
}

function createMarker(id, posn, title, icon) {
    var marker = new GMarker(posn, {
        title: title,
        icon: icon
    });
    GEvent.addListener(marker, "click", function() {
        window.location = "/localizador/detalhe/"+id;
    });
    return marker;
}

function updateFarmaciasList(req) {
    inicio = false;
    
    if(req==null || req == '/localizador/list_farmacias/') {
        req = '/localizador/list_farmacias/';
        inicio = true;
    }

    _txtCarregando = '<h2 class="padding_bottom">Resultado da Busca <br /><span class="min_fonte cor_cinza">Carregando...</span></h2>';
    $('#CONTEUDO').html(_txtCarregando).load(req, function () {
        $('ul.paginacao li a').click(function() {
            updateFarmaciasList($(this).attr('href'));
            return false;
        });
        //if(!inicio) jHash('#CONTEUDO');
    });
}

function iniciarBusca(url) {
    startsMap(url);
    updateFarmaciasList('/localizador/list_farmacias/'+url);
}
