/* ------------------------------------------------------------------
Project:        Flightmap
File:		marker.js
Abstract:	marker handling (predefined and user-defined), info-window
Version:	1.0
Author:		Pascal Dreer / Joze Senegacnik

------------------------------------------------------------------ */


var gMarkers = [];
//var gUMarker = [];
var gTypeSelector = [];
var gUserMarkerControl;
var gMappoints = [];
var gTAS = 90;	// kts true air speed
var gGS = 0;	// kts ground speed obtained after applying wind data
var gFuelConsumption = 7.5;
var gWind = 0;
var gWindSpeed = 0;
var gWCA = 0; // wind correction angle
var gUserIcon = [];
var gRotateImg = 0;

var kUserMarkerRange = 1000;
var gUserMarkerID = 1000;

var gShowShortInfoWindow = false;

 
function tcoord( f, l )
{
  var gsst;
  var gsm; 
  var gsse; 
  var gdst; 
  var gdm; 
  var gdse;

  gsst = Math.floor(f);
  gsm  = Math.floor ((f-gsst)*60);
  gsse = roundNumber(Math.round( (((f-gsst)*60-gsm)*60)*1000000 )/1000000,2);

  gdst = Math.floor(l);
  gdm  = Math.floor ((l-gdst)*60);
  gdse = roundNumber(Math.round( (((l-gdst)*60-gdm)*60)*1000000 )/1000000,2);

  return gsst + " " + gsm + " " + gsse + "&nbsp;&nbsp;" + gdst + " " + gdm + " " + gdse;

}


function initUserIcon()
{
	gUserIcon = new Array();


	gUserIcon[10] = new GIcon();
	gUserIcon[10].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[10].image = "images/blue-dot.png";
	gUserIcon[10].iconSize = new GSize(32, 32);
	gUserIcon[10].shadowSize = new GSize(37, 34);
	gUserIcon[10].iconAnchor = new GPoint(14, 34);
	gUserIcon[10].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[10].infoShadowAnchor = new GPoint(18, 25);

	
	gUserIcon[9] = new GIcon();
	gUserIcon[9].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[9].image = "images/marker-cat9.png";
	gUserIcon[9].iconSize = new GSize(32, 32);
	gUserIcon[9].shadowSize = new GSize(37, 34);
	gUserIcon[9].iconAnchor = new GPoint(14, 34);
	gUserIcon[9].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[9].infoShadowAnchor = new GPoint(18, 25);

	
	gUserIcon[8] = new GIcon();
	gUserIcon[8].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[8].image = "images/marker-cat8.png";
	gUserIcon[8].iconSize = new GSize(32, 32);
	gUserIcon[8].shadowSize = new GSize(37, 34);
	gUserIcon[8].iconAnchor = new GPoint(14, 34);
	gUserIcon[8].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[8].infoShadowAnchor = new GPoint(18, 25);

	
	gUserIcon[7] = new GIcon();
	gUserIcon[7].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[7].image = "images/marker-cat7.png";
	gUserIcon[7].iconSize = new GSize(32, 32);
	gUserIcon[7].shadowSize = new GSize(37, 34);
	gUserIcon[7].iconAnchor = new GPoint(14, 34);
	gUserIcon[7].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[7].infoShadowAnchor = new GPoint(18, 25);
	
	gUserIcon[6] = new GIcon();
	gUserIcon[6].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[6].image = "images/marker-cat6.png";
	gUserIcon[6].iconSize = new GSize(32, 32);
	gUserIcon[6].shadowSize = new GSize(37, 34);
	gUserIcon[6].iconAnchor = new GPoint(14, 34);
	gUserIcon[6].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[6].infoShadowAnchor = new GPoint(18, 25);
	
	gUserIcon[5] = new GIcon();
	gUserIcon[5].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[5].image = "images/marker-cat5.png";
	gUserIcon[5].iconSize = new GSize(32, 32);
	gUserIcon[5].shadowSize = new GSize(37, 34);
	gUserIcon[5].iconAnchor = new GPoint(14, 52);
	gUserIcon[5].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[5].infoShadowAnchor = new GPoint(18, 25);
	
	gUserIcon[4] = new GIcon();
	gUserIcon[4].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[4].image = "images/marker-cat4.png";
	gUserIcon[4].iconSize = new GSize(32, 32);
	gUserIcon[4].shadowSize = new GSize(37, 34);
	gUserIcon[4].iconAnchor = new GPoint(14, 34);
	gUserIcon[4].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[4].infoShadowAnchor = new GPoint(18, 25);
	
	gUserIcon[3] = new GIcon();
	gUserIcon[3].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[3].image = "images/marker-cat3.png";
	gUserIcon[3].iconSize = new GSize(32, 32);
	gUserIcon[3].shadowSize = new GSize(37, 34);
	gUserIcon[3].iconAnchor = new GPoint(14, 34);
	gUserIcon[3].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[3].infoShadowAnchor = new GPoint(18, 25);
	
	gUserIcon[2] = new GIcon();
	gUserIcon[2].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[2].image = "images/marker-cat2.png";
	gUserIcon[2].iconSize = new GSize(32, 32);
	gUserIcon[2].shadowSize = new GSize(37, 34);
	gUserIcon[2].iconAnchor = new GPoint(14, 34);
	gUserIcon[2].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[2].infoShadowAnchor = new GPoint(18, 25);

	gUserIcon[1] = new GIcon();
	gUserIcon[1].shadow = "http://www.google.com/mapfiles/shadow50.png";
	gUserIcon[1].image = "images/marker-cat1.png";
	gUserIcon[1].iconSize = new GSize(32, 32);
	gUserIcon[1].shadowSize = new GSize(37, 34);
	gUserIcon[1].iconAnchor = new GPoint(14, 34);
	gUserIcon[1].infoWindowAnchor = new GPoint(14, 2);	
	gUserIcon[1].infoShadowAnchor = new GPoint(18, 25);

}


function Mappoint(id, code, lat, lng, name, area, desc, type, elev, urlRef, urlData, country, ico, shared)
{

	var posA = 0;
	
	this.id = id;
	this.code = code;
	this.lat = lat;
	this.lng = lng;
	this.country = country;
	this.name = name;
	this.area = area;
	this.desc = desc;
        this.ico = ico;
	this.type = parseInt(type,10);
	this.elev = elev;
	this.urlRef = urlRef;
	this.urlData = new Array();
	if (urlData) {
		do {
			var posB = urlData.indexOf(",",posA);
			if (posB > 0) {
				this.urlData.push(urlData.substring(posA,posB));
				posA = posB + 1;
			}
			else {
				this.urlData.push(urlData.substring(posA,urlData.length));
				break;	
			}
		} while (true);
	}
	else
	this.urlData.push("");
	this.metar = "";
	this.taf = "";
	this.flightrule = "";
	this.shared = true;
	this.wpid = 0;
}




function myclick(i) 
{
	GEvent.trigger(gMarkers[i],"click");
}





function getMappointType(type)
{
	var typeName = "";

	switch (type) {
		case 1: typeName = "Int. Airport";		break;
		case 2: typeName = "Airport";			break;
		case 3: typeName = "Airfield";			break;
		case 4: typeName = "Heliport";			break;
		case 5: typeName = "Weather Stat.";	        break;
		case 6: typeName = "Nav-Aid";			break;
		case 7: typeName = "Points";	        	break;
		case 8: typeName = "VFR Pts";			break;
		case 9: typeName = "Webcams";			break;
		case 10: typeName = "User Pts";			break;
			
		default: ;
	}
	
	return typeName;
}




function createMarker(mp, num, userMarker) 
{

	var point = new GLatLng(parseFloat(mp.lat),parseFloat(mp.lng));	
	var type = getMappointType(mp.type);
	
	if (userMarker) {
                //alert ('Type='+type);
		var marker = new GMarker(point,{icon: gUserIcon[10], draggable: true, title:mp.name + " (" + type + ")"});
        }
	else {

                switch (mp.type) {
                    case 1:
                    case 2:
                    case 4:
                    case 9:  {var marker = new GMarker(point,{icon: gUserIcon[mp.type],title:mp.name + " (" + type + ")"});
                             break;}


                    case 3:
                    case 5:
                    case 6:
                    case 7:
                    case 8:  { if ( mp.ico.length != "" ) {
                                  gUserIcon[mp.type].image = mp.ico;
                               }
//                             alert (gUserIcon[mp.type].image);
			     var marker = new GMarker(point,{icon: gUserIcon[mp.type], title:mp.name + " (" + type + ")"});
                             break;}


                    default: var marker = new GMarker(point,{title:mp.name + " (" + type + ")"});
                }


/*
                 if ( mp.type == 1 || mp.type == 2 || mp.type == 3 || mp.type == 4 || mp.type == 5 || mp.type == 6 || mp.type == 7) {
			    var marker = new GMarker(point,{icon: gUserIcon[mp.type],title:mp.name + " (" + type + ")"});
		        } else {
			   var marker = new GMarker(point,{title:mp.name + " (" + type + ")"});
                 }

*/  
      }

	        GEvent.addListener(marker, "click", function() {		// mouseover
		
		var metarTxt = "";
		var imgTxt = "";
		var urlRef = "";
		var daylight = "";
		var desc = "";
		var curDate = new Date();
		var name = mp.name;
		var tabsWindow = false;
		
		gRotateImg = 0;

		if (gConfigShowMetar && (mp.type == 1 || mp.type == 2)) {
			if (mp.flightrule.length > 0)
				var flightruleImg = "<img src ='images/mm_" + mp.flightrule.toLowerCase() + ".png'> ";
			else
				var flightruleImg = "";
                        var href="http://adds.aviationweather.gov/metars/index.php?submit=1&chk_metars=on&chk_tafs=on&std_trans=translated&station_ids="+mp.code;
			metarTxt = "<p style='line-height:10px'><span class='infoTextSmall'><a href="+ href +" target='_blank'><b>METAR:</b></a> " + flightruleImg + "" + mp.metar + "</span><br><span class='infoTextSmall'><br><a href="+ href +" target='_blank'><b>TAF:</b></a> " + mp.taf + "</span></p>";
		}
		
	
		switch (mp.type) {
			case 1: 
			case 2: 	
				        name = name + " (" + mp.code + ")";
						break;
			case 3: 	name = name + " (" + mp.code + ")";
						break;
			case 4: 	name = name + " (" + mp.code + ")";
						break;
                        // weather statsions
			case 5: 	name = name + " (" + mp.code + ")";
						break;
			case 6:		desc = mp.code + " ";
						break;
			case 7: 	break;
			case 8:         break;
			
			case 9: 	{
                                           //imgTxt = "<a href='javascript:openWebcamWindow(\"" + randomizeURL(mp.urlData[0]) + "\")'><img src='http:/" + randomizeURL(mp.urlData[0]) + "' border='0' width='200' height='150'></a><br>"; break;  // 640 x 480
                                           var randomizedURL = randomizeURL(mp.urlData[0]); 
                                           imgTxt = "<a href='javascript:zoomInImg(" + num + ")'><img src='http://" + randomizedURL + "' border='0' width='200' height='150'></a><br>"; // 640 x 480
                                           break;  
                                        }
			case 10: 	break;
			default: ;
		}

		if (mp.urlRef.length > 0)
			urlRef = "<span class='infoText'>Link: <a href='http://" + mp.urlRef + "' target='_blank'>" + mp.urlRef + "</a></span><br>";
	
		if (!routeStarted())
			var markLabel = "Start Route";
		else
			var markLabel = "Next Point";
	
		if (mp.desc.length > 0)
			var desc = desc + mp.desc + "<br>";
	
		if (mp.type >= 1 && mp.type <= 4) {
			var today = new Date();
			var daylight = "Sunrise: " + calculateSunrise(today,mp.lat,mp.lng,true) + ", Sunset: " + calculateSunrise(today,mp.lat,mp.lng,false) + " (UTC)<br>";
		}
	
		var windowHtml = "<span class='infoHead'>" + name + "</span><br><span class='infoText'>" + type + ", " + mp.elev + " ft (" + convertFtToM(mp.elev) +" m)<br>" + desc + daylight + "</span>"
							 + metarTxt + imgTxt + urlRef + " <p><span class='infoText'><a href='javascript:void(addTrackLeg(" + num + "))'>" + markLabel + "</a></span></p>";
		
		windowHtml = "<div id='infoDiv" + num + "' class='infoBox'>" + windowHtml + "</div>";
	
		if ((mp.type == 1 || mp.type == 2 || mp.type == 3 ) && mp.urlData[0]) {
			var randomizedURL = randomizeURL(mp.urlData[0]);
			var windowHtml2 = "<div id='info2Div" + num + "' class='infoBox'><span class='infoHead'>" + name + "</span><br><a href='javascript:zoomInImg(" + num + ")'><img src='http://" + randomizedURL + "' border='0' width='200' height='150'></a>";
			if (mp.urlData.length > 1)
				windowHtml2 += "<a href='javascript:changeImg(" + num + ")'> <img src='images/nextImg.png' onmousedown='changeImgMouseDown(event,this);' align='top' border='0'/></a>";
				
			windowHtml2 += "</div>";
				
			var infoTabs = [
  			new GInfoWindowTab("Info",windowHtml),
 			new GInfoWindowTab("Webcam",windowHtml2)
			];
			tabsWindow = true;
		}
	
		if (tabsWindow)
			marker.openInfoWindowTabsHtml(infoTabs);
		else
			marker.openInfoWindowHtml(windowHtml);
	});
	
	
	GEvent.addListener(marker, "infowindowclose", function() {
		zoomOutImg();
	});


	return marker;
}



function changeImg(i) 
{
	gRotateImg += 1;
	
	if (gRotateImg >= gMappoints[i].urlData.length)
		gRotateImg = 0;
	
	var randomizedURL = randomizeURL(gMappoints[i].urlData[gRotateImg]);
	
	document.getElementById('info2Div' + i).innerHTML = "<span class='infoHead'>" + gMappoints[i].name + "</span><br><a href='javascript:zoomInImg(" + i + ")'><img src='http://" + randomizedURL + "' border='0' width='200' height='150'></a><a href='javascript:changeImg(" + i + ")'> <img src='images/nextImg.png' onmousedown='changeImgMouseDown(event,this);' align='top' border='0'/></a>";
}



function zoomInImg(i)
{
	
	var randomizedURL = randomizeURL(gMappoints[i].urlData[gRotateImg]);
	
	var camDiv = document.getElementById('cam');
//	var pixPnt = gMap.fromLatLngToDivPixel(gMarkers[i].getPoint());
	
	camDiv.style.top = "100px";
	camDiv.style.left = "270px";
//	camDiv.style.height = "30px";
//	camDiv.style.width = "40px";
	camDiv.style.visibility = "visible";
	camDiv.innerHTML = "<img name='fullSizeWebcam' src='http://" + randomizedURL + "' border='0' onclick='zoomOutImg()' />";
	//camDiv.innerHTML = "<img name='fullSizeWebcam' src='http://" + url + "' border='0' onclick='zoomOutImg()' />";
	
}


function zoomOutImg()
{
	var camDiv = document.getElementById('cam');
	camDiv.style.visibility = "hidden";
	camDiv.innerHTML = "";
}



function changeImgMouseDown(inEvent,inThis)
{
	var elem = (inEvent.target) ? inEvent.target : inEvent.srcElement;
	elem.src = "images/nextImgPressed.png";
	if (inEvent.stopPropagation)
		inEvent.stopPropagation();
	else
		inEvent.cancelBubble = true; // IE
	if (inEvent.preventDefault) 
		inEvent.preventDefault();
	else 
		inEvent.returnValue = false; // IE

	if (document.addEventListener)
		document.addEventListener("mouseup",changeImgMouseUp,true);
	else	
		document.attachEvent("onmouseup", changeImgMouseUp);	// IE 5+ Event Model
}


function changeImgMouseUp(inEvent)
{
	var elem = (inEvent.target) ? inEvent.target : inEvent.srcElement;
	elem.src = "images/nextImg.png";
	if (inEvent.stopPropagation)
		inEvent.stopPropagation();
	else
		inEvent.cancelBubble = true; // IE
	if (inEvent.preventDefault) 
		inEvent.preventDefault();
	else 
		inEvent.returnValue = false; // IE
		
		
	if (document.removeEventListener)
		document.removeEventListener("mouseup",changeImgMouseUp,true);
	else	
		document.detachEvent("onmouseup", changeImgMouseUp);	// IE 5+ Event Model
}






// *****************************************************************************************************
// USER MARKER
// *****************************************************************************************************


function createUserMarker(mppoint)
{
	var center = gMap.getCenter();
	var marker = new GMarker(center,{icon: gUserIcon[10], draggable: true, title: "User Defined"});
	var pnt = marker.getPoint();
	
	var name = "Untitled" + (gUserMarkerID - kUserMarkerRange);
	
	if (mppoint == null)
		var mp = new Mappoint(gUserMarkerID,"",pnt.lat(),pnt.lng(),name,"","",10,"?","","","");
	else 
		var mp = mppoint;
	
	gUserMarkerID++;

	gMarkers.push(marker);
	gMappoints.push(mp);
	var num = gMappoints.length-1;
	

	GEvent.addListener(marker,"click",function() {		// mouseover
		if (!routeStarted())
			var markLabel = "Start Route";
		else
			var markLabel = "Next Point";

		var metarTxt = "";
		if (gConfigShowMetar && gMappoints[num].code.length == 4) {
			if (mp.flightrule.length > 0)
				var flightruleImg = "<img src ='images/mm_" + gMappoints[num].flightrule.toLowerCase() + ".png'> ";
			else
				var flightruleImg = "";
				
			metarTxt = "<p style='line-height:10px'><span class='infoTextSmall'><b>METAR:</b> " + flightruleImg + "" + gMappoints[num].metar + "</span><br><span class='infoTextSmall'><b>TAF:</b> " + gMappoints[num].taf + "</span></p>"; 
	
		}
		
		var today = new Date();
		var daylight = "Sunrise/Sunset: " + calculateSunrise(today,mp.lat,mp.lng,true) + "/" + calculateSunrise(today,mp.lat,mp.lng,false) + " UTC<br>";
		
//		var wgsGrid = "Lat: " + roundNumber(mp.lat,6) + ", Lng: " + roundNumber(mp.lng,6) + " <a href='javascript:editWgsUserMarker(" + num + ")'>Edit</a>";
		var wgsGrid = "Lat: " + roundNumber(mp.lat,6) + ", Lng: " + roundNumber(mp.lng,6) + "<br>" + tcoord(mp.lat, mp.lng) + " <a href='javascript:editWgsUserMarker(" + num + ")'>Edit</a>";
		if (gConfigShowCH1903)
			var swissGrid = "<br>CH-1903: " + wgsLatToSwiss(mp.lat,mp.lng) + "/" + wgsLngToSwiss(mp.lat,mp.lng)  + " <a href='javascript:editCH1903UserMarker(" + num + ")'>Edit</a>";
		else
			var swissGrid = "";
	
		
		if (gMappoints[num].code.length == 4)
			var icao = " (" + gMappoints[num].code + ")";
		else
			var icao = "";
		
		var windowHtml = "<span class='infoHead'>" + mp.name + icao + "</span><br><span class='infoText'>" + daylight + wgsGrid + swissGrid + metarTxt +
		
		"<br><a href='javascript:editUserMarker(" + num + ")'>Edit Name</a> - <a href='javascript:editUserMarkerData(" + num + ")'>Edit Data</a> - <a href='javascript:void(deleteUserMarker(" + num + "))'>Delete</a></span><br><p>" + 
		"<span class='infoText'><a href='javascript:void(addTrackLeg(" + num + "))'>" + markLabel + "</a></p></span>";
		
		windowHtml = "<div class='infoBox'>" + windowHtml + "</div>";
		marker.openInfoWindowHtml(windowHtml);
	});

	GEvent.addListener(marker,"dragend",function() {
  		var newpnt = marker.getPoint();
		mp.lat = newpnt.lat();
		mp.lng = newpnt.lng();
		
		if (gRt) {
			gRt.updatePosition(num);		// gMarkers.length-1
			gRt.redraw();
			displayRouteInfo(gRt.getDistance(),gRt.getDuration(),0);
			updateRouteWindow();
		}
  	});

	GEvent.addListener(marker,"dragstart",function() {
  		gMap.closeInfoWindow();
  	});

	gMap.addOverlay(marker);
	addToMPList(num,10,name,"");
	displayMPList();
        sortListByType();
}




function deleteUserMarker(num)
{
	gMap.removeOverlay(gMarkers[num]);
	if (gRt) {
		gRt.remove(gRt.find(num));
		gRt.redraw();
		displayRouteInfo(gRt.getDistance(),gRt.getDuration(),0);
		updateRouteWindow();
	}
	
	
	if (gUID > 0) {
		waypointDelete(gMappoints[num].id,gUID);
	}
	
	gMap.closeInfoWindow();
	removeFromMPList(num);
	displayMPList();
	gMarkers[num] = null;
	gMappoints[num] = null;
}


function deleteWxMarker(num)
{

//	gMarkers[j] = createMarker(mp,j,false);
//	gMap.addOverlay(gMarkers[j]);	
//	gMappoints.push(mp);


        alert( num );        
	gMap.removeOverlay(gMarkers[num]);
        alert( 'after removeOverlay' );        
/*
	if (gRt) {
		gRt.remove(gRt.find(num));
		gRt.redraw();
		displayRouteInfo(gRt.getDistance(),gRt.getDuration(),0);
		updateRouteWindow();
	}
	
	
	if (gUID > 0) {
		waypointDelete(gMappoints[num].id,gUID);
	}
*/	
	gMap.closeInfoWindow();
        alert( 'after closeInfoWindow' );        
	removeFromMPList(num);
        alert( 'after removeFromMPList' );        
     
	displayMPList();
        alert( 'after displayMPList' );        
	gMarkers[num] = null;
	gMappoints[num] = null;
        alert( 'End deleteWxMarker' );        
        
}

function removeUserWaypoints()
{
	
	
	
}


function editUserMarker(num)
{
//	gMap.closeInfoWindow();
	
	var windowHtml = "<form='editUserForm'><span class='infoHead'>" + gMappoints[num].name + "</span><br>" +
			 "<table><tr><td colspan=3><span class='infoText'>Lat: " + roundNumber(gMappoints[num].lat,6) + ", Lng: " + roundNumber(gMappoints[num].lng,6) + "</span></td></tr> " +
			 "<tr><td><span class='infoText'>Name: </span></td><td colspan=2><input type='text' name='marker_name' id='marker_name' maxlength='30' width='50' size='20' /></td></tr> " +
			 "<tr><td><span class='infoText'>Area: </span></td><td><input type='text' name='marker_area' id='marker_area' maxlength='2' size='3' /><span class='infoText'></span>" +
			 "</td><td><span class='infoText'>Elev.: </span><input type='text' name='marker_elev' id='marker_elev' maxlength='5' size='5' /></td></tr>" +
			 "<tr><td><span class='infoText'>Type: </span></td><td><select name='marker_type' id='marker_type' size='1'><option>User-Point</option><option>Ausflugsziel</option></select>" +
			 "</td><td><input type='checkbox' name='marker_shared' id='marker_shared' value='yes' /> <span class='infoText'>Shared</span></td></tr></table>" +
			 "<p><span class='infoText'><a href='javascript:void(editUserMarkerCancel(" + num + "))'>Cancel</a> - <input type='button' id='ok_btn' value='Save' /><br></p></span></form>";
		
		windowHtml = "<div class='infoBox'>" + windowHtml + "</div>";
		gMarkers[num].openInfoWindowHtml(windowHtml);
			
		var submit = document.getElementById("ok_btn"); 
		
		var name = document.getElementById("marker_name");
		var area = document.getElementById("marker_area");
		var elev = document.getElementById("marker_elev");
		var type = document.getElementById("marker_type");
		var shared = document.getElementById("marker_shared");
		
		name.value = gMappoints[num].name;
		area.value = gMappoints[num].area;
		elev.value = gMappoints[num].elev;
		shared.checked = gMappoints[num].shared;
		if (gMappoints[num].type == 9)
			type.selectedIndex = 0;
		if (gMappoints[num].type == 7)
			type.selectedIndex = 1;
		
//		var icao = document.getElementById("marker_icao");
		
		
		// point parameters with those entered by the user. 
        submit.onclick = function(ev) { 
			gMappoints[num].name = name.value;
			gMappoints[num].area = area.value;
			gMappoints[num].elev = elev.value;
			gMappoints[num].shared = shared.checked;
			if (type.selectedIndex == 0)
				gMappoints[num].type = 9;
			if (type.selectedIndex == 1)
				gMappoints[num].type = 7;
			


			if (gUID > 0) {
				if (gMappoints[num].id < 10000)
					var wpid = null;
				else
					var wpid = gMappoints[num].id;
				
				waypointSave(num,wpid,gUID,gMappoints[num].code,gMappoints[num].lat,gMappoints[num].lng,gMappoints[num].name,gMappoints[num].area,gMappoints[num].desc,gMappoints[num].type,gMappoints[num].elev,gMappoints[num].urlRef,gMappoints[num].urlData,gMappoints[num].country,gMappoints[num].shared);
				
				
				
			}
			gMappoints[num].code = ""; 	// icao.value;
			submit.onclick = null; 
			gMap.closeInfoWindow();
			editInMPList(num,9,name.value,area.value);
			displayMPList();
//			updateMetarInterval();
		}; 
}


function editWgsUserMarker(num)
{
	var windowHtml = "<form='editUserForm'><span class='infoHead'>" + gMappoints[num].name + "</span><br><span class='infoText'>WGS84 Coordinates" +
						"<br>Lat: <input type='text' name='marker_lat' id='marker_lat' maxlength='10' size='12' /> " +
						"<br>Lng: <input type='text' name='marker_lng' id='marker_lng' maxlength='10' size='12' /> " +
						"<br><p><a href='javascript:void(editUserMarkerCancel(" + num + "))'>Cancel</a> - <input type='button' id='ok_btn' value='Save' /><br></p></span></form>";
		
		windowHtml = "<div class='infoBox'>" + windowHtml + "</div>";
		gMarkers[num].openInfoWindowHtml(windowHtml);
			
		var submit = document.getElementById("ok_btn"); 
		
		var lat = document.getElementById("marker_lat");
		var lng = document.getElementById("marker_lng");
		
		lat.value = roundNumber(gMappoints[num].lat,6);
		lng.value = roundNumber(gMappoints[num].lng,6);
		
        submit.onclick = function(ev) { 
			gMappoints[num].lat = lat.value;
			gMappoints[num].lng = lng.value;
			submit.onclick = null;
			gMap.closeInfoWindow();
			
			var point = new GLatLng(parseFloat(lat.value),parseFloat(lng.value));
			gMarkers[num].setPoint(point);
		}; 
}



function editCH1903UserMarker(num)
{
	var windowHtml = "<form='editUserForm'><span class='infoHead'>" + gMappoints[num].name + "</span><br><span class='infoText'>CH-1903 (Swiss Grid) Coordinates" +
						"<br>X: <input type='text' name='marker_lat' id='marker_lat' maxlength='7' size='10' /> " +
						"<br>Y: <input type='text' name='marker_lng' id='marker_lng' maxlength='7' size='10' /> " +
						"<br><p><a href='javascript:void(editUserMarkerCancel(" + num + "))'>Cancel</a> - <input type='button' id='ok_btn' value='Save' /><br></p></span></form>";
		
		windowHtml = "<div class='infoBox'>" + windowHtml + "</div>";
		gMarkers[num].openInfoWindowHtml(windowHtml);
			
		var submit = document.getElementById("ok_btn"); 
		
		var lat = document.getElementById("marker_lat");
		var lng = document.getElementById("marker_lng");
		
		lat.value = wgsLatToSwiss(gMappoints[num].lat,gMappoints[num].lng);
		lng.value = wgsLngToSwiss(gMappoints[num].lat,gMappoints[num].lng);
		
        submit.onclick = function(ev) { 
			gMappoints[num].lat = swissToWgsLat(lat.value,lng.value);
			gMappoints[num].lng = swissToWgsLng(lat.value,lng.value);
			submit.onclick = null;
			gMap.closeInfoWindow();
			
			var point = new GLatLng(gMappoints[num].lat,gMappoints[num].lng);
			gMarkers[num].setPoint(point);
		}; 
}





function editUserMarkerData(num)
{
//	gMap.closeInfoWindow();
	
	var windowHtml = "<form='editUserForm'><span class='infoHead'>" + gMappoints[num].name + "</span><br>" +
						"<table><tr><td><span class='infoText'>Description: </span></td><td><input type='text' name='marker_desc' id='marker_desc' maxlength='30' width='50' size='20' /></td></tr>" +
						"<tr><td><span class='infoText'>URL Ref.: </span></td><td><input type='text' name='marker_urlRef' id='marker_urlRef' maxlength='30' size='20' /> </td></tr>" +
						"<tr><td><span class='infoText'>URL Data: </span></td><td><input type='text' name='marker_urlData' id='marker_urlData' maxlength='30' size='20' /></td></tr>" +
						"<tr><td><span class='infoText'>ICAO ID: </span></td><td><input type='text' name='marker_icao' id='marker_icao' maxlength='4' size='6' /><span class='infoText'> (falls vorhanden)</span></td></tr></table>" +
						"<p><span class='infoText'><a href='javascript:void(editUserMarkerCancel(" + num + "))'>Cancel</a> - <input type='button' id='ok_btn' value='Save' /><br></p></span></form>";
		
		windowHtml = "<div class='infoBox'>" + windowHtml + "</div>";
		gMarkers[num].openInfoWindowHtml(windowHtml);
			
		var submit = document.getElementById("ok_btn"); 
		
		var desc = document.getElementById("marker_desc");
		var urlRef = document.getElementById("marker_urlRef");
		var urlData = document.getElementById("marker_urlData");
		var icao = document.getElementById("marker_icao");
		
		desc.value = gMappoints[num].desc;
		urlRef.value = gMappoints[num].urlRef;
		urlData.value = gMappoints[num].urlData;
		icao.value = gMappoints[num].code;
		
		
//		gMappoints[num].name = document.getElementById("marker_name").value;
		
		    // point parameters with those entered by the user. 
        submit.onclick = function(ev) { 
			gMappoints[num].desc = desc.value;
			gMappoints[num].urlRef = urlRef.value;
			gMappoints[num].urlData = urlData.value;
			gMappoints[num].code = icao.value;

			if (gUID > 0) {
				if (gMappoints[num].id < 10000)
					var wpid = null;
				else
					var wpid = gMappoints[num].id;
				waypointSave(num,wpid,gUID,gMappoints[num].code,gMappoints[num].lat,gMappoints[num].lng,gMappoints[num].name,gMappoints[num].area,gMappoints[num].desc,gMappoints[num].type,gMappoints[num].elev,gMappoints[num].urlRef,gMappoints[num].urlData,gMappoints[num].country,gMappoints[num].shared);
//				waypointSave(num,wpid,gUID,"","","","","",gMappoints[num].desc,"","",gMappoints[num].urlRef,gMappoints[num].urlData,gMappoints[num].shared);
				
			}
	//		gMappoints[num].code = ""; 	// icao.value;
			submit.onclick = null; 
			gMap.closeInfoWindow();
	//		editInMPList(num,9,name.value,area.value);
//			displayMPList();
			updateMetarInterval();
		}; 
}

/*
 onchange='editUserMarkerOK2(" + this.value + ");'

*/


function editUserMarkerCancel(num)
{
	gMap.closeInfoWindow();
}






function dragUserMarker()
{
	
	
	
}



function UserMarkerControl() 
{
}
UserMarkerControl.prototype = new GControl();

UserMarkerControl.prototype.initialize = function(map) {
  var container = document.createElement("div");


  var markerDiv = document.createElement("div");
  this.setButtonStyle_(markerDiv);
  container.appendChild(markerDiv);
  markerDiv.appendChild(document.createTextNode("User-Marker"));
  GEvent.addDomListener(markerDiv, "click", function() {
    createUserMarker(null);
  });

  map.getContainer().appendChild(container);
  return container;
}

// By default, the control will appear in the top left corner of the
// map with 7 pixels of padding.
UserMarkerControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(100, 7));
}

// Sets the proper CSS for the given button element.
UserMarkerControl.prototype.setButtonStyle_ = function(button) {
  button.style.color = "#0000cc";
  button.style.backgroundColor = "white";
  button.style.font = "small Arial";
  button.style.border = "1px solid black";
  button.style.padding = "2px";
  button.style.marginBottom = "3px";
  button.style.textAlign = "center";
  button.style.width = "6em";
  button.style.cursor = "pointer";
}



function showUserControls()
{
	gUserMarkerControl = new UserMarkerControl();
	gMap.addControl(gUserMarkerControl);
}


function hideUserControls()
{
	
	gMap.removeControl(gUserMarkerControl);
}







cRad = 0.0174532925199433;
cArad = 57.2957795130823;
zenith = 90.8333333333;


function calculateSunrise(date,latitude,longitude,sunrise)
{
	// based to: Almanac for Computers, 1990; published by Nautical Almanac Office

	var n1 = Math.floor(275 * (date.getMonth()+1) / 9);			// get day of year
	var n2 = Math.floor(((date.getMonth()+1) + 9) / 12);
	var n3 = (1 + Math.floor((date.getFullYear() - 4 * Math.floor(date.getFullYear() / 4) + 2) / 3));
	var n = n1 - (n2 * n3) + date.getDate() - 30;

	
	var lngHour = longitude / 15;
	if (sunrise)
		var t = n + ((6 - lngHour) / 24);
	else
		var t = n + ((18 - lngHour) / 24);

	var m = (0.9856 * t) - 3.289;
	
	var l = m + (1.916 * Math.sin(m * cRad)) + (0.020 * Math.sin(2 * m * cRad)) + 282.634;
	if (l < 0)
		l = l + 360;
	if (l > 360)
		l = l - 360;
		
	var ra = Math.atan(0.91764 * Math.tan(l * cRad)) * cArad;
	if (ra < 0)
		ra = ra + 360;
	if (ra > 360)
		ra = ra - 360;
		
	var lquad = (Math.floor(l / 90)) * 90;
	var raquad = (Math.floor(ra / 90)) * 90;
	ra = ra + (lquad - raquad);
	ra = ra / 15;
	
	var sinDec = 0.39782 * Math.sin(l * cRad);
	var cosDec = Math.cos((Math.asin(sinDec) * cArad) * cRad);
	
	
	var cosH = (Math.cos(zenith * cRad) - (sinDec * Math.sin(latitude * cRad))) / (cosDec * Math.cos(latitude * cRad));
	if (cosH > 1) {
		return 0;
	}
	if (cosH < -1) {
		return 0;
	}
	

	if (sunrise)
		var h = 360 - (Math.acos(cosH) * cArad);
	else
		var h = Math.acos(cosH) * cArad;
	h = h / 15;
	
	var t = h + ra - (0.06571 * t) - 6.622;
	var ut = t - lngHour;
	
	if (ut >= 24)
		ut = ut - 24;
	if (ut < 0)
		ut = ut + 24;
	
	var hrs = Math.floor(ut);
	var mins = Math.floor((ut - hrs) * 60);
	
	date.setHours(hrs);
	date.setMinutes(mins);

	var timeTmp = date.getTime() - (date.getTimezoneOffset() * 60000);
	date.setTime(timeTmp);

	
	
	return ((hrs < 10) ? "0" + hrs : hrs) + ":" + ((mins < 10) ? "0" + mins : mins);
}