		
    function updateMarkers(forcedRefresh){
    	var newType = scaleType(map.getZoom());
    	if(newType==''){
    		if(preType!=''){removeAllMarkers();	} 
    		preType='';
    	}  
    	else if(forcedRefresh){
    	        curBound = null;
    		 if(newType=='state') { updateStateInfo();}
    		 else if(newType=='county'){ removeAllMarkers();addCMarkers(map.getBounds());}
    		 else if(newType=='zip')   { removeAllMarkers();addProjectMarkers(map.getBounds());}
		} else {
			
			if(preType==newType){ if(newType=='county'){ updateCMarkers();}
				 if(newType=='zip'){    updateProjectMarkers();}
			}	 
			else{if(newType=='zip'){ removeAllMarkers(); addProjectMarkers(map.getBounds()); }
			     if(newType=='county'){removeAllMarkers(); addCMarkers(map.getBounds()); }
			     if(newType=='state'){ removeAllMarkers(); addStatePoly(); }
			}
		}
    	preType=newType;
    	
    }	
		    
    function scaleType(level){
    	var type = '';
    	if(level <3){ type = '';}
    	else if(level > CTLevel){ 
			type = 'zip';  
			document.getElementById("legend_state").style.display="none";
			document.getElementById("legend_county").style.display="none";
			document.getElementById("legend_projects").style.display="block";
		}else if(level <= cutLevel){ 
			type = 'state'; 
			document.getElementById("legend_state").style.display="block";
			document.getElementById("legend_county").style.display="none";
			document.getElementById("legend_projects").style.display="none";
		}	
    	else { 
			type = 'county';
			document.getElementById("legend_state").style.display="none";
			document.getElementById("legend_county").style.display="block";
			document.getElementById("legend_projects").style.display="none";
		}	
    	return type;
    }	
 
    function updateProjectMarkers(){
    	if(curBound != null && map.getBounds().equals(curBound)){addProjectMarkers(map.getBounds(), null);	}	
    	else{addProjectMarkers(map.getBounds(), curBound); }	
	}
    function removeZipMarkers(){    	for(var i = 0; i < zipMarkers.length; i++ ){ map.removeOverlay(zipMarkers[i]);}        zipMarkers=[];    }    
    function removeCMarkers(){ GEvent.removeListener(mousemovehandler);      	for(var i = 0; i < CMarkers.length; i++ ){ map.removeOverlay(CMarkers[i]);}    	CMarkers=[];    }
    function removeExpMarkers(){    	for(var i = 0; i < expMarkers.length; i++ ){ map.removeOverlay(expMarkers[i]);}    	expMarkers=[];    }
    function removeAllMarkers(){ 	if(hideMarker){removeExpand(hideMarker); } removeState(); removeZipMarkers(); removeExpMarkers(); removeCMarkers(); }    
  		
    function addProjectMarkers(newBox, curBox){
        document.getElementById("loadingImg").style.visibility='visible';
        var env = map.getBounds();
        var xmin = env.getSouthWest().lng(), ymin = env.getSouthWest().lat(), xmax = env.getNorthEast().lng(), ymax = env.getNorthEast().lat();
        var sqlUrl = "module/querydb.jsp?level=zip" + addFilterTag(newBox, curBox);
        GDownloadUrl(sqlUrl, function(doc) {
        	jDoc = eval('(' + doc + ')');
        	var marker, projnum=0;
        	
        	projnum = jDoc.Results.length; 
        	zipMarkers = removeMarkerOut(zipMarkers); 
        	
        	for(var i = 0; i < projnum; i++){ 
        		var rec = jDoc.Results[i]; 
        		var v = [rec.PNUM,rec.ID,rec.NAME,rec.BUDGET,rec.TITLE,rec.CITY,rec.COUNTY,rec.STATE,rec.ZIP,rec.AGCODE,rec.AGNAME,rec.AGABBR,rec.IMGNAME,rec.IMGWIDTH,rec.IMGHEIGHT,rec.DESCRIPTION,rec.DEPT,rec.X,rec.Y,rec.START_DATE,rec.END_DATE,rec.AGG_TYPE,rec.TYPE, rec.RCPT_TYPE, rec.HREF,rec.RID, rec.FISCAL_YEAR];
                            

        		var point = new GLatLng(parseFloat(rec.Y),parseFloat(rec.X));			
        		if(v[0] > 1){	var name = "<b>"+v[0]+"</b> projects at this location.<br/>Click to view project markers.";  		    
					marker = proGroupMarker(point,name, v[0], v[8]);
        		}else if (v[0] == 1){	var phtml = iwinHTML_1(v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10],v[11],v[12],v[13],v[14],v[15],v[16],v[19],v[20],v[21],v[22],v[23],v[24], v[25],v[26]);
				
    			var cwin_agency = (v[10]!=''?deptArray[v[16]][0]+' - '+v[10]:deptArray[v[16]][0]);
    			var cwin_name = '<span class="pname_program">'+deptArray[v[16]][0]+'</span>'+'<span class="pname_recip">'+(v[4]!=''?v[4]:cwin_agency+" ARRA Project")+'<p>'+v[2]+'</p></span>';
        		marker = projectMarker(point,cwin_name,phtml,v[16]);
        	}  zipMarkers.push(marker);  }

			
			
			var sn = 0; 
        	if(zipMarkers.length > projnum){sn = zipMarkers.length - projnum;} 
        	for(var n = sn; n < zipMarkers.length ; n++){ map.addOverlay(zipMarkers[n]);}
		    curLevel = map.getZoom(); curBound = map.getBounds();
			document.getElementById("loadingImg").style.visibility='hidden';});}
    function projectMarker(point, name, html,dept) { 
		//determine which marker to display (HUD/USDA specific)
		/*if(dept == 12){
		  	var marker=new GMarker(point, {icon:gearIcon_usda});
		}else if(dept == 86){
			var marker=new GMarker(point, {icon:gearIcon_hud});
		}*/
		var marker=new GMarker(point, {icon:gearIcon});
		marker.tooltip = '<div class="icontooltip">'+name+'<\/div>';
		marker.title = name;
		GEvent.addListener(marker,'click',function(){ marker.openInfoWindowHtml(html); });
		GEvent.addListener(marker,"mouseover", function() {Tip(marker.tooltip); });       
		return marker;
    }
    function removeMarkerOut(MList) { 
    	var newList =[];	
    	var env = map.getBounds();
    	var xmin = env.getSouthWest().lng(), ymin = env.getSouthWest().lat(), xmax = env.getNorthEast().lng(), ymax = env.getNorthEast().lat();
    	for(var i = 0; i < MList.length; i++){
    		var mxy = MList[i].getLatLng(); 
    		var x = mxy.lng(), y = mxy.lat();
    		if(x > xmin && x < xmax && y > ymin && y <ymax){newList.push(MList[i]);}
	        else{ 	map.removeOverlay( MList[i])}
    	}
    	return newList;	
    }
    function proGroupMarker(point, name,proNum, zip) {
    	var marker=new GMarker(point, {icon:gIcon});
    	marker.tooltip = '<div class="icontooltip">'+name+'<\/div>';	
        GEvent.addListener(marker,'click', function(){
        	expandMarker(point,proNum, zip); 
        	marker.hide();
        	hideMarker = marker; 		        });
        GEvent.addListener(marker,'mouseover', function(){Tip(marker.tooltip);});  
        return marker;}

function expandMarker(pnt,n, zip){
        document.getElementById("loadingImg").style.visibility='visible';
	    if(hideMarker) removeExpand(hideMarker); 
	    var sqlUrl = "module/querydb.jsp?level=project&zip="+ zip + addFilterTag();
	    GDownloadUrl(sqlUrl, function(doc) {
	    	var jDoc = eval('('+ doc +')');
	    	var marker, pt = computePnts(pnt,n), pnum =0;
	    	
	  //  	if(jDoc.Results!='undefined'){ pnum = jDoc.Results.length}; 
	    	
	    	for(var i = 0; i < jDoc.Results.length; i++){ 
	    		var rec = jDoc.Results[i]; 
	    		var v = [rec.NAME, rec.BUDGET,rec.TITLE,rec.CITY,rec.COUNTY,rec.STATE,rec.ZIP,rec.AGCODE,rec.AGNAME,rec.AGABBR,rec.IMGNAME,rec.IMGWIDTH,rec.IMGHEIGHT,rec.DESCRIPTION,rec.DEPT,rec.START_DATE,rec.END_DATE,rec.AGG_TYPE,rec.TYPE, rec.RCP_TYPE, rec.HREF, rec.RID, rec.FISCAL_YEAR];
	    		var phtml = iwinHTML_1(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10],v[11],v[12],v[13],v[14],v[15],v[16],v[17],v[18],v[19],v[20],v[21],v[22]);
				var cwin_agency = (v[8]!=''?deptArray[v[14]][0]+' - '+v[8]:deptArray[v[14]][0]);
				var cwin_name = '<span class="pname_program">'+deptArray[v[14]][0]+'</span>'+'<span class="pname_recip">'+(v[2]!=''?v[2]:cwin_agency+" ARRA Project")+'<p>'+v[0]+'</p></span>';
				if(pt.length >= (i+1)){ marker = expMarker(pt[i],cwin_name,phtml, i,v[14]);
		        expMarkers.push(marker);
		        map.addOverlay(expMarkers[i]);
			    var linkpnts =[pnt,pt[i]];
			    links[i] = drawLink(linkpnts);
			 	map.addOverlay(links[i]);		 	
			 	}         }  document.getElementById("loadingImg").style.visibility='hidden';});}	

function computePnts(pnt, n){ var pt = [];
	if(n ==1 ){ pt[0] = pnt;} else{
		var env = map.getBounds(), msize = map.getSize(); 
		var dX = env.getNorthEast().lng() - env.getSouthWest().lng();
		var dY = env.getNorthEast().lat() - env.getSouthWest().lat();
		var r = 15 + n * 5;
		var dx = dX / msize.width * r; 
		var dy = dY / msize.height * r;       
		for(var i = 0; i < n; i++){
			var ang = 2* Math.PI * i / n ; 
			var x = parseFloat(pnt.lng()) + parseFloat(Math.cos(ang)* dx);
			var y = pnt.lat() + Math.sin(ang)* dy;
			pt[i] = new GLatLng(y,x);}}   return pt;}
var linkHigh = { color: "#ff0000",  weight: 3,  opacity: 1}
var linkNormal = {	color: "#000000", weight: 3,	opacity: 1}
function drawLink(linkPnts){	return new GPolyline(linkPnts, "#000000", 3, 1); }	
function expMarker(point, name, html, pnum, dept) {
	//determine which marker to display (HUD/USDA specific)
		/*if(dept == 12){
		  	var marker=new GMarker(point, {icon:gearIcon_usda});
		}else if(dept == 86){
			var marker=new GMarker(point, {icon:gearIcon_hud});
		}*/
	var marker=new GMarker(point, {icon:gearIcon});
	marker.tooltip = '<div class="icontooltip">'+name+'<\/div>';
	marker.title = name;
    
	GEvent.addListener(marker,'click',function(){ marker.openInfoWindowHtml(html); });
    GEvent.addListener(marker,'mouseover', function(){Tip(marker.tooltip);  links[pnum].setStrokeStyle(linkHigh);});        
    GEvent.addListener(marker,'mouseout',  function(){links[pnum].setStrokeStyle(linkNormal); });   return marker;}
function removeExpand(rmarker){	for(var i = 0; i < links.length; i++){	   map.removeOverlay(expMarkers[i]);		   map.removeOverlay(links[i]);}		
	expMarkers=[]; links=[]; if(rmarker){ rmarker.show();} }	

/**********************************************************/
function addCMarkers(newBox, curBox){
		document.getElementById("loadingImg").style.visibility='visible';
		var env = map.getBounds();
		var xmin = env.getSouthWest().lng(), ymin = env.getSouthWest().lat(), xmax = env.getNorthEast().lng(), ymax = env.getNorthEast().lat();
		var sqlUrl = "module/querydb.jsp?level=county" + addFilterTag(newBox, curBox);
		GDownloadUrl(sqlUrl, function(doc) {
			jDoc = eval('(' + doc + ')');
			var marker, projnum = jDoc.Results.length;
			CMarkers = removeMarkerOut(CMarkers); 
			for(var i = 0; i < projnum; i++){ 
				var rec = jDoc.Results[i]; 
				var point = new GLatLng(parseFloat(rec.Y_COORD),parseFloat(rec.X_COORD));			
				var tip = '<div class="statetooltip">' + tooltipHTML(rec.COUNTY + ", " + rec.STATE_NAME, rec.STATE,rec.PRONUM, rec.BUDGET) +'<\/div>';
				  
				marker = CMarker(point,'',tip);
			    CMarkers.push(marker);  } 
        	var sn = 0; 
        	if(CMarkers.length > projnum){sn = CMarkers.length - projnum;} 
    	   	for(var n = sn; n < CMarkers.length ; n++){ map.addOverlay(CMarkers[n]);}
	        curLevel = map.getZoom(); curBound = map.getBounds();
		    document.getElementById("loadingImg").style.visibility='hidden';});}
function CMarker(point,type,tip) { 
    var marker=new GMarker(point, {icon:countyIcon1});
 //   marker.tooltip = '<div class="statetooltip">'+tip+'<\/div>';
    marker.tooltip = tip;
    
    GEvent.addListener(marker,'click',function(){map.setCenter(point,CTLevel+1);});
    GEvent.addListener(marker,"mouseover", function() {Tip(marker.tooltip); });       
    return marker;
}
function updateCMarkers(){
	if(curBound != null && map.getBounds().equals(curBound)){addCMarkers(map.getBounds(), null);	}	
	else{addCMarkers(map.getBounds(), curBound); }	
}

