//
// File : markets-rtwgmap-filtering.js
//
// Description : Javascript functions for filtering components on the Farmers' Markets Map
//               implementation. Overrides several functions found in the 
//               RTWGMap's javascript lib
//
// Contents    : 
//               returnFilters(data)

 var selectBoxes = [];
	
	
	var isFiltering = function() {
      return document.getElementById("filterButton").checked;
    }
    
    
	//
    // Callback for getFilters()
    //
    var returnFilters = function(data){
        if(data != null)   {
	        selectBoxes = [];
	        filterMsgConnector = " and ";
	        filterMsgSuffix = " Markets";
	        
        	var container = document.getElementById("advFilterContainer");
        
        	var filterBySelectBox = document.createElement("select");
        	filterBySelectBox.id = "filterBy";
        	filterBySelectBox.onchange=filterChanged;
        	container.appendChild( filterBySelectBox );
			// add a divider under the "filterby" select box
			container.appendChild( document.createElement("br") );        		
        		
            for(var i = 0; i < data.length; i++)   {                        
                filters[i] = data[i]; 
                                
                // create the filter by <blat> option
				filterBySelectBox.appendChild( createSelectOption(filters[i]) );
				
				// create the a select box for each child of 'Filter'
				if(filters[i].children) {
					filters[i].selectBoxes = new Array();
					
					for(var c=0;c<filters[i].children.length; c++) {
						var filter = filters[i].children[c];
						var filterId = filter.id;
						if(!filterId) {
						  filterId = c;
						  filters[i].id = filterId;
						}
						  
						//create a select box for this filter
						var selectBox = createSelectBox(filter);
			        	selectBox.onchange=filterChanged;
			        	selectBox.setAttribute("style","width: 175px; color: " + filter.color);
						if(selectBox.width) 
						   selectBox.width = 125;
						   			        			        	
			        	//create the container/panel for the select box with it's label
			       		var selContainer = document.createElement("div");
						//filters[i].selectBoxes[c] = selContainer;	
						filters[i].selectBoxes[c] = selectBox;						
			       		container.appendChild(selContainer); 
			       		selContainer.style.visibility = 'hidden';			        	
        				
        				//add filter/selectbox label
        				//selContainer.appendChild( document.createTextNode(filter.label + ':' ) );
        				selContainer.appendChild( selectBox );
        			}
				}
			}    
        }
    }
    
    
    function createSelectBox(filter) {
     	var selectBox = document.createElement("select");
        selectBox.id = "select" + filter.id;            
				
        if(filter.children) {
        	for(var cc=0;cc<filter.children.length; cc++) {					
				selectBox.appendChild( createSelectOption(filter.children[cc]) );
			}
        }
        
        return selectBox;
    }
    
    function createSelectOption(filter) {
    	var _option=document.createElement("OPTION");
		_option.value=filter;
		_option.innerHTML=filter.label;
		
		return _option;
    }
    
    
    function getAdvFilteredMarkers() {
        eval(getDataProviderClassName()).getFilteredMarkers(returnFilteredMarkers, selectedFilters);    
    }
    
    //
    //
    //
    function clearFilter() {
	    document.getElementById("filterButton").checked = false;
	    filterChanged();
    }
    
    //
    //
    //
	function filterByChanged() { 
		document.getElementById("filterButton").checked = true; 
		
		var filterBy = filters[document.getElementById("filterBy").selectedIndex];
		if(filterBy.label.indexOf("Markets" == -1))
			filterMsgSuffix = " Markets";
		
		filterChanged();
	}

	//
	//
	//
	var filterChanged = function() {		
	 	map.closeInfoWindow();    
    	closeDirections();
    	
		//hide all the select boxes
		for(var i=0; i< filters.length; i++) {
			filter = filters[i];
			for(s=0;s<filters[i].selectBoxes.length; s++) {
				filters[i].selectBoxes[s].parentNode.style.visibility = 'hidden';
				filters[i].selectBoxes[s].style.visibility = 'hidden';
			}
		}
	
		if( document.getElementById("filterButton").checked ) {
			// only show the select boxes for the current filterby selection
			var index = document.getElementById("filterBy").selectedIndex;
			var filterBy = filters[index];
			for(s=0;s<filterBy.selectBoxes.length; s++) {
				filterBy.selectBoxes[s].parentNode.style.visibility = 'visible';
				filterBy.selectBoxes[s].style.visibility = 'visible';
			}
				
    	 	selectedFilters = [];
     
			if(	filterBy.children ) {	
     			for(var c=0;c<filterBy.children.length; c++) {
     				//set the selected filters
     				var filter = filterBy.children[c];
	     			var selectBox = filterBy.selectBoxes[c];
    	 			selectBox.style.visibility = 'visible';
     				index = selectBox.selectedIndex; //selectBox.value doesn't work !?
					var filter = filter.children[index];
					selectedFilters[selectedFilters.length] = filter;
				}				
    	 	}
     	}
     	
     	if( isFiltering() )  {     	
 	    	applySelectedFilters();
 	    } else {
 	    	document.getElementById("filters").innerHTML = "";
 	    	showAllMarkers(); 	    	
 	    }
 	    
 	    //
        // Zoom out on the map until at least one marker
        // is visiable
        //     
        panZoomToAtLeastOneVisibleMarker();
	}
    
    