	//
	// get all the gmarkers for the specified region
	//
	function getMarkersForRegion(regionId){
    	currentRegionId = regionId;
	    map.closeInfoWindow();    
    	closeDirections();
    	clearFilter();
    	
    	
	    for(var i = 0; i < regions.length; i++)
    	{
        	if(regions[i].id == regionId) {
	   
				// get the upcoming markets from the data provider				
				eval(getDataProviderClassName()).getUpcomingMarkets(returnUpcoming, regionId);

    	        map.setCenter(new GLatLng(regions[i].latitude, regions[i].longitude), regions[i].zoomLevel);
                globalRegion = regions[i];
                break;
	        }
    	}
	}
	
	//
	// Close the directions box
	//
	var closeDirections = function () {
    	if(directions != null && directions.isVisible == true) { 
    		directions.isVisible = false;
    		directions.clear();
			initSideListing();
    	}
    }
	
	//
	// Return/Callback for the server's response to retrieve the upcoming markets for a region
	//
	// @see getMarkersForRegion
	//
	//
	var returnUpcoming = function(data){

		var label = globalRegion.label + " Upcoming Markets";
		var html = '<div class="textBoldGrey">' + label + '</div><div class="smallTextCenter"><br/>';	
		html += '<a target="_new" href="printmarkets.jsp?region=' + globalRegion.id + '"><img border="0" src="/app21/rtw/icons/market/printer3.gif"/></a><br/>';
		var prevDate = null;
		
		if(data != null)
		{
			html += '<br/>';
			for(var i = 0; i < data.length; i++)
			{
				if(prevDate == null)
				{
					html += '<b>' + data[i].marketDate + '</b><br/>';
					prevDate = data[i].marketDate;
				}
				if(prevDate != data[i].marketDate)
				{
					html += '<br/><b>' + data[i].marketDate + '</b><br/>';
					prevDate = data[i].marketDate;
				}
				html += renderMarkerForSideListing(data[i]);				
			}
					
			html += '<br/><br/><a class="smallURL" target="_new" href="printmarket.jsp?market=0">Printable list of all Markets</a>'
			
			html += '</div>';
			document.getElementById("sideListing").innerHTML = html;
		}
	}
	
	
	    //
    // shows only the Markers that match a filter
    //
    // Uses the function 'matchesAllSelectedFilters(markerObj) to determine
    // if the marker should be visible.
    //
    // Implementors should override matchesAllSelectedFilters or carefully
    // maintain the list of selected filters in the selectedFilters[] array
    //
    var applySelectedFilters = function (){
        if(!isFiltering()) 
        	return;
        	
        var filteredMarkers = [];
        var gmarker = 0;
        
        if(directions != null)
           directions.clear();        
        
        //hide all the markers
		for(m in gmarkers)  {
       		gmarkers[m].hide();
		}	
			
        var j=0;
		// 
		// show or hide each marker as required
		//
        for(var m = 0; m < markerObjs.length; m++)
        {
            //
            // Filter by selected nodes
            //
            if( matchesAllSelectedFilters(markerObjs[m]) ) {
             
               // (re)set the marker's color to the current filter if specified
               //if(selectedFilters[0].color) {
               //	  setGMarkerColor(markerObjs[m], selectedFilters[0].color);
               //}
               
               var info = markerObjs[m].infoHtml;
               info +=  "<p/>";        
               info += "<span class=\"smallTextCenter\"><a href=\"javascript:zoomIn('" + markerObjs[m].id + "');\">Zoom In</a>" + "</span>&nbsp;&nbsp;";

               show( markerObjs[m] );
               
				// add it to the resultset for display on the sidelisting
               filteredMarkers[j++] = markerObjs[m];
            } 
        }
		
	    var filter = {label:getSideListingsLabel()};
        globalRegion = filter;
		// display on the sidelisting
        returnFilteredMarkers(filteredMarkers);
       
        //
        //update the msg string
        //      
        var noun = markerInfo.markerTypeLabel;
        updateFilterResultMsg(filteredMarkers, noun);
    }
	
	