function Filters_Panel_Class() {
    this.selected_categories = [];
    this.is_single_business_selected = false;

    this.init = function() {
        var my_panel = this;
        $(':checkbox').click(function() {
            var category_id = parseInt($(this).attr('category_id'));
            if (this.checked) {
                // just checked
                my_panel.selected_categories.push(category_id);
                tweets_panel.redraw();
                map_panel.redraw();
            } else {
                // just unchecked
                var array_position = jQuery.inArray(category_id, my_panel.selected_categories);
                my_panel.selected_categories.splice(array_position, 1);
                tweets_panel.redraw();
                map_panel.redraw();
            }
        });
        $('#reset_all_filters').click(function(event) {
            event.preventDefault();
            $(':checkbox').attr('checked', false);
            businesses_panel.selected_profiles = [];
            filters_panel.selected_categories = [];
            tweets_panel.redraw();
            businesses_panel.redraw();
            map_panel.redraw();
            map_panel.gmap.getInfoWindow().hide();
        });
    }
    this.show_single_profile = function(profile_id) {
        tweets_panel.hide_tweets();
        tweets_panel.show_tweets(profile_to_tweet_map[profile_id]);

        var business_ids = profile_to_business_map[profile_id];
        if (business_ids.length == 1) {
            for(i in map_panel.markers)
                if (i != business_ids[0])
                    map_panel.markers[i].hide();
            if (map_panel.gmap.getInfoWindow().isHidden())
                markers[business_ids[0]].openInfoWindowHtml(markers[business_ids[0]].tabs_array);
        } else {
            for(i in map_panel.markers)
                if (jQuery.inArray(parseInt(i), business_ids) == -1)
                    map_panel.markers[i].hide();
        }
//        this.last_marker = markers[profile_id];
        this.is_single_business_selected = true;
    }
    this.hide_single_business = function() {
        if (!map_panel.gmap.getInfoWindow().isHidden()) {
            map_panel.gmap.getInfoWindow().hide();
            map_panel.info_window_hidden_but_not_closed = true;
        }
        tweets_panel.redraw();
        map_panel.redraw();
        this.is_single_business_selected = false;
    }
    this.should_show_profile = function (profile_id) {
        var sel_profiles = businesses_panel.selected_profiles;
        var sel_categories = filters_panel.selected_categories;
        if (sel_profiles.length == 0 && sel_categories.length == 0)
            return true;
        if (jQuery.inArray(parseInt(profile_id), sel_profiles) != -1)
            return true;
        // check if business's category is in a selected category
        // also check if "other" is selected, and don't display'

        if (jQuery.inArray(-1, sel_categories) == -1) {
            // in selected categories
            for(k in profile_to_business_map[profile_id]) {
                var business_id = parseInt(profile_to_business_map[profile_id][k]);
                for(j in businesses[business_id].categories) {
                    var category_id = parseInt(businesses[business_id].categories[j]);
                    if (jQuery.inArray(category_id, sel_categories) != -1)
                        return true;
                }
            }
            return false;
        } else {
            // everything but the standard categories
            for(k in profile_to_business_map[profile_id]) {
                var business_id = parseInt(profile_to_business_map[profile_id][k]);
                for(j in businesses[business_id].categories) {
                    var category_id = parseInt(businesses[business_id].categories[j]);
                    if(sel_categories.length > 1) {
                        if (jQuery.inArray(category_id, sel_categories) != -1)
                            return true;
                    }
                    if (jQuery.inArray(category_id, [1,3,10,101,102]) != -1)
                        return false;
                }
            }
            return true;
        }
    }

    this.is_profile_on_map = function(profile_id) {
        for(k in profile_to_business_map[profile_id]) {
            if(this.is_business_on_map(profile_to_business_map[profile_id][k]))
                return true;
        }
        return false;
    }

    this.is_business_on_map = function(business_id) {
        bounds = map_panel.gmap.getBounds();
        if (bounds.containsLatLng(new GLatLng(businesses[business_id].latitude, businesses[business_id].longitude)))
            return true;
        else
            return false;
    }
    this.get_visible_businesses = function() {
        var sel_biz = businesses_panel.selected_businesses;
        var sel_categories = filters_panel.selected_categories;
        var i, business_ids = [];

        if (sel_biz.length == 0 && sel_categories.length == 0) {
            for (i in businesses) {
                business_ids.push(businesses[i].id);
            }
        } else {
            for (i in businesses)
                if (this.should_show_business(businesses[i].id))
                    business_ids.push(businesses[i].id);
        }

        return business_ids;
    }
}