
	glbNotamLayer = null;

	function initNOTAMLayer ( oGeMap )
	{
		if ( glbNotamLayer == null ) {
			glbNotamLayer = new NOTAMLayer(oGeMap);
		}
		return glbNotamLayer;
	}
	
	
	function NOTAMLayer(oGeMap) {
		this.geMap = oGeMap; // Referenz auf google earth objekt
		this.markerMgr = new MarkerManager(this.geMap);
		this.myMapObjects = new Object();
		this.myMapMarker = new Object();
		this.myMarkedNotam = null;
		this.MIN_VIS_LAYER = 5;
		this.MAX_VIS_LAYER = 17;
	}

	// remove all items from notam layer
	NOTAMLayer.prototype.clear = function() {
		this.markerMgr.clearMarkers();
	}

	// set all items to default display
	NOTAMLayer.prototype.clearSelection = function() 
	{
		for(var i in this.myMapObjects) {
			var item = this.myMapObjects[i];
			this.markNotam(item, false, false);
		}
		this.refresh();
	}
	
	// move map center to given notam
	NOTAMLayer.prototype.centerNotamOnMap = function( locationId ) 
	{
		var notam = this.myMapObjects[locationId];
		if ( notam ) {
			var marker = this.myMapMarker[notam.lfdnr];
			showInfo(marker, myAllNotams);
		}
	}
	
	// add thisNotam to map
	NOTAMLayer.prototype.addNotam = function(thisNotam, updateMap) {
		
		var idLocation = parseInt(thisNotam.lfdnr);
		this.myMapObjects[idLocation] = thisNotam;
		
		var item = this.createMarker( thisNotam, "images/icon_notam.png");
		this.markerMgr.addMarker(item, this.MIN_VIS_LAYER, this.MAX_VIS_LAYER);
		if (updateMap) {
			this.markerMgr.refresh();
		}
	}

	// redraw all marker
	NOTAMLayer.prototype.refresh = function() {
		this.markerMgr.refresh();
	}

	// mark NOTAM thisNotam as used in PIB if markNotam == true, 
	// otherwise set default display
	NOTAMLayer.prototype.markNotam = function( thisNotam, markNotam, updateMap ) 
	{
		var marker = this.myMapMarker[thisNotam.lfdnr];
		if ( marker ) {
		
			var nameIcon = null;
			if ( markNotam ) {
				nameIcon = "images/icon_notam_marked.png";
			} else {
				nameIcon = "images/icon_notam.png";
			}
		
			var oldNameIcon = marker.getIcon().image;
			if ( oldNameIcon != nameIcon ) {
			
				this.markerMgr.removeMarker(marker);
				
				var newItem = this.createMarker (thisNotam, nameIcon)
				
				this.markerMgr.addMarker(newItem, this.MIN_VIS_LAYER, this.MAX_VIS_LAYER);
				if ( updateMap ) {
					this.markerMgr.refresh();
				}
			}
		
		}
	}

	NOTAMLayer.prototype.createMarker = function ( thisNotam, urlIcon )
	{
		var idLocation = parseInt(thisNotam.lfdnr);
		var item = new GMarker(new GLatLng(thisNotam.lat, thisNotam.lon), { icon: getIcon(urlIcon) });
		item.lfdnr = thisNotam.lfdnr;
		GEvent.addListener(item, "click", function () {showInfo(this, myAllNotams);} );
		this.myMapMarker[idLocation] = item;
		return item;
	}

	NOTAMLayer.prototype.createInfoMarker = function ( lat, lon, urlIcon )
	{
		var item = new GMarker(new GLatLng(lat, lon), { icon: getIcon(urlIcon) });
		return item;
	}

	var infoMarker = null;
	NOTAMLayer.prototype.showNOTAMInfo = function ( lat, lon, query )
	{
		if ( query && query.notams.length>0) {

			if ( infoMarker ) {
				this.markerMgr.removeMarker(infoMarker);
			}

			infoMarker = this.createInfoMarker( lat, lon, "");
			infoMarker.lfdnr = -1;
			this.markerMgr.addMarker(infoMarker, 1, 21);

			this.refresh();
			
			showInfo (infoMarker, query);
		}
	}
	
	// private
	var ICON = new Object();
	function getIcon( key ) {
		if (!ICON[key]) {
			var icon = new GIcon();
			icon.image = key;
			icon.iconAnchor = new GPoint(7, 7);
			icon.infoWindowAnchor = new GPoint(7, 7);
			icon.iconSize = new GSize(14, 14);
			ICON[key] = icon;
		}
		return ICON[key];
	}	

	// ATTENTION, this function uses myAllNotams defined in modnotam.js
	function showInfo(thisMarker, query) {
		
		if ( query == null ) {
			query = myAllNotams;
		}
		
		var lfdnr = parseInt(thisMarker.lfdnr );
		var myText = "<b>" + lfdnr + "</b><br/>"

		var textToShow = '';
		var i;
		var numItems = 0;
		for ( i=0; i<query.notams.length; i++ ) {
			var notam = query.notams[i];
			if ( lfdnr == parseInt(notam.lfdnr) || lfdnr == -1) {
			
				if ( numItems  == 0) {
					if ( lfdnr != -1 ) {
						// first item, create header
//						textToShow = "<div id=vfr_toolTipHeader>" + notam.locator;
//						if ( notam.locationname ) {
//						textToShow +=  "&nbsp;" + notam.locationname;
//						}
//						textToShow +=  "</div>";
						textToShow += "<div id=vfr_toolTipContent>";
					} else {
						textToShow += "<div id=vfr_toolTipContent>";
					}
				}
			
				// create title and body text
				var NOTAMTitle = notam.number + " " + notam.qcodedecoded;
				
				var NOTAMBody = "";
				//if ( notam.locationname && lfdnr == -1) {
				if ( notam.locationname ) {
					NOTAMBody = notam.locationname + '<br/>';
				}
				NOTAMBody += notam.fromto + "<br/>" + notam.body;
				
				// add item to popup
				textToShow += '<span class="vfr_toolTipContentHeader">'+NOTAMTitle+'</span><br/>';
				textToShow += '<span class=".vfr_toolTipContentBody">' + NOTAMBody + '</span><p/>';
				
				numItems++;
			}
		}
		textToShow += "</div>";
		
		thisMarker.openInfoWindowHtml(textToShow);
	}	



