// place type config for reports
function PPlaceTypeConfig2() {
        var placeTypes = {};
        var emptySet = [];
        var maxZoom = {};
        var minZoom = {};
        var none = "default";
        this.set = function( zoom, placetypes, source ) {
                if( arguments.length < 2 ) {
                        return false;
                }
                if( arguments.length <= 2 ) {
                        source = none;
                }
                if( !placeTypes[source] ) {
                        placeTypes[source] = {};
                }
                placeTypes[source][zoom] = placetypes;
                if( maxZoom[source] || maxZoom[source] === 0 ) {
                        if( zoom > maxZoom[source] ) {
                                maxZoom[source] = zoom;
                        }
                } else {
                        maxZoom[source] = zoom;
                }
                if( minZoom[source] || minZoom[source] === 0 ) {
                        if( zoom < minZoom[source] ) {
                                minZoom[source] = zoom;
                        }
                } else {
                        minZoom[source] = zoom;
                }
                return true;
        };
        this.get = function( zoom, source ) {
                if( arguments.length < 1 ) {
                        return emptySet;
                }
                if( arguments.length == 1 || !placeTypes[source] ) {
                        source = none;
                }
                if( placeTypes[source] && placeTypes[source][zoom] ) {
                        return placeTypes[source][zoom];
                }
                return emptySet;
        };
        this.getBestFitIn = function( zoom, source ) {
                if( arguments.length < 1 ) {
                        return emptySet;
                }
                if( arguments.length == 1 || !placeTypes[source] ) {
                        source = none;
                }
                if( placeTypes[source] && ( maxZoom[source] || maxZoom[source] === 0 ) ) {
                        if( zoom > maxZoom[source] ) {
                                zoom = maxZoom[source];
                        }
                        var perfectFit = this.get( zoom, source );
                        if( perfectFit.length > 0 ) {
                                return perfectFit;
                        }
                        for( var z = zoom; z <= maxZoom[source]; ++z ) {
                                if( placeTypes[source][z] ) {
                                        return placeTypes[source][z];
                                }
                        }
                }
                return emptySet;
        };
        this.getBestFitOut = function( zoom, source ) {
                if( arguments.length < 1 ) {
                        return emptySet;
                }
                if( arguments.length == 1 || !placeTypes[source] ) {
                        source = none;
                }
                if( placeTypes[source] && ( minZoom[source] || minZoom[source] === 0 ) ) {
                        if( zoom < minZoom[source] ) {
                                zoom = minZoom[source];
                        }
                        var perfectFit = this.get( zoom, source );
                        if( perfectFit.length > 0 ) {
                                return perfectFit;
                        }
                        for( var z = zoom; z >= minZoom[source]; --z ) {
                                if( placeTypes[source][z] ) {
                                       return placeTypes[source][z];
                                }
                        }
                }
                return emptySet;
        };
}
