var filterLocations = function( tag, mapLocations ) {
    
    var mapBounds = new GLatLngBounds();
    var classesToShow = [];
    var classesToHide = [];
    
    if ( tag == 'all' ) {
        mapLocations.each( function( junk, i ) {
            mapLocations[i].marker.show();
            classesToShow.push( mapLocations[i].filterClass );
            mapBounds.extend( mapLocations[i].point );
        });
    }
    else {
        mapLocations.each( function( junk, i ) {

            if ( mapLocations[i].tags != null && 
                mapLocations[i].tags.contains(tag) != false ) {
                mapLocations[i].marker.show();
                classesToShow.push( mapLocations[i].filterClass );
                mapBounds.extend( mapLocations[i].point );
            }
            else {
                mapLocations[i].marker.hide();
                classesToHide.push( mapLocations[i].filterClass );
                // not modifying bounds
            }
        });
    }
    
    classesToShow.each( function(item, i) {
        
        $$('.'+item).setStyle('display', 'block');
        $$('.'+item).setStyle('visibility', 'visible');
        
        if (i==0) {
            $$('dt.'+item).fireEvent('click');
        }
    });
    
    classesToHide.each( function(item, i) {
        $$('.'+item).setStyle('display', 'none');
        $$('.'+item).setStyle('visibility', 'hidden');
    });
    
    gMap.setZoom( gMap.getBoundsZoomLevel(mapBounds) );
    gMap.panTo( mapBounds.getCenter() );
};