
function updateOverlay(overlayid){
	var overlayObj = getLoadedOverlaybyID(overlayid)
	//If the menu item is checked and we're zoomed in enough
	if($("#"+overlayid).attr("checked")
			&& map.getZoom() >= minUpdateZoom
			){
		//If this overlay has been loaded...
		if (overlayObj){
			//Check to see if the overlay has been displayed before
			if(!overlayObj.lastBounds){
				loadOverlay(overlayid);
			//check to see if the map boundaries are contained by the last overlay boundaries
			}else if(!overlayObj.lastBounds.containsBounds(getRoundedMapBounds())){
				loadOverlay(overlayid);
			}else{
				//else show the markers
				for (var i = 0 ; i < gMarkers.length ; i++){  // go through all markers 
					if(gMarkers[i].overlay == overlayObj.id){ 
						 gMarkers[i].show() ; 
					} 
				}  
			}
		//Otherwise go and load the overlay
		}else{
			loadOverlay(overlayid);
		}
	}else{
		//If we've check a layer thats loaded but BELOW the min zoom...
		if (overlayObj){
		//If we're no zoomed in enough and we turn a layer on, just show what we have alrady loaded
			if($("#"+overlayid).attr("checked")){
			for (var i = 0 ; i < gMarkers.length ; i++){  // go through all markers & show
				if(gMarkers[i].overlay == overlayObj.id){ 
					 gMarkers[i].show() ; 
				} 
			}  
			//otherwise hide the layer
			}else{
				for (var i = 0 ; i < gMarkers.length ; i++){  // go through all markers & hide
					if(gMarkers[i].overlay == overlayObj.id){ 
						 gMarkers[i].hide() ; 
					} 
				}  
			}
		}else{
			//register the overlay so it will update when zoomed id
			registerOverlay(getOverlaybyID(overlayid));
		}
	}
}

function loadOverlay(overlayid){
	var overlayObj = getOverlaybyID(overlayid)
	
	updateMapBoundaries()

	//load the data
	switch (overlayObj.searchtype) {
		case "airport":
			importAirports()		
		break;
		case "event":
			importEvents({latitude_sw: lat_sw,longitude_sw: lng_sw,latitude_ne: lat_ne,longitude_ne: lng_ne})		
		break;
		case "weather":
			importWeather()		
		break;
		case "sh":
			showLoader(overlayid);
			importSH(overlayObj,{lang: lang,latitude_sw: lat_sw,longitude_sw: lng_sw,latitude_ne: lat_ne,longitude_ne: lng_ne});	
		break;
		case "isite":
			importOperators(overlayObj,{lang: lang});
		break;	
		default:
			importOperators(overlayObj,{lang: lang,latitude_sw: lat_sw,longitude_sw: lng_sw,latitude_ne: lat_ne,longitude_ne: lng_ne});	
	}
	//reset the layer boundaries
	overlayObj.lastBounds = getRoundedMapBounds();
	
}

function updateOverlays(){
	for(var overlay in mapOverlays){
		updateOverlay(mapOverlays[overlay].id)			
	}
}

function showLoader(overlayid){
	$("#icon"+overlayid).hide();
	$("#loader"+overlayid).show();
}

function hideLoader(overlayid){
	$("#loader"+overlayid).hide();
	$("#icon"+overlayid).show();
}

function clearLoaders(){
	$(".loader").hide();
	$(".icon").show();
}
function registerOverlay(overlayObj){
	//Register the overlay in global var
	if(!getLoadedOverlaybyID(overlayObj.id)){
		mapOverlays.push(overlayObj);		
	}
}

function getOverlaybyID(overlayID){
	for(var overlay in tnzoverlays){
		if(tnzoverlays[overlay].id == overlayID){
			return tnzoverlays[overlay];
			break;
		}
	}
	return null
}

function getLoadedOverlaybyID(overlayID){
	for(var overlay in mapOverlays){
		if(mapOverlays[overlay].id == overlayID){
			return mapOverlays[overlay];
			break;
		}
	}
	return null
}
