

function createMarker(point,name,html,iconUrl) {

	var Icon = new GIcon(G_DEFAULT_ICON, iconUrl );
	var marker = new PdMarker(point,Icon);
	marker.setTooltip(name);
	marker.setDetailWinHTML(html);
    map.addOverlay(marker);
	
	if (html!='Start') {
		marker.setTooltipHiding(false);
		marker.showTooltip();
	}
	
	/*
	GEvent.addListener(marker, "click", function() {
		if (marker.getMouseOutEnabled())
		{
			// don't hide on hover, disable setImage, restoreImage
			marker.setMouseOutEnabled(false);
			marker.setOpacity(0); // not transparent
			
		}
		else
		{
			marker.setMouseOutEnabled(true); // hide after hover
			marker.setOpacity(70); // 30% transparent
			if (html!='Start') {
				marker.setTooltipHiding(false);
				marker.showTooltip();
			}
			
		}
	});
	*/

	return marker;
}

function markerSetDescripton(marker,text){
	marker.setDetailWinHTML(text);	
}

function updateTrack(trackID) {
	if ( loadedTracksList[trackID]['control']['trackLine'] == 0 ) {
		return;
	}
	  
	var lastTrackTm= loadedTracksList[trackID]['control']['lastTrackTm'];

	if (lastTrackTm==0)	{
		// $("#infoDiv").append("Track "+trackID+"points not yet loaded<br>");
		return;
	}
	
	//$("#infoDiv").append("Track "+trackID+" lastTrackTm: "+lastTrackTm+"<BR>"); 
	
	$.post('/live_track_ajax.php',{ op:"trackPoints",trackID:trackID,fromTm:lastTrackTm}, 
		function(result){ 

			//$("#infoDiv").html( 'result: '+result); 

			var jsonData = eval('(' + result + ')');
			var pts = [];
			var pointsNum=jsonData.lat.length;
			if (pointsNum <=0 ) return;
			
			if (pointsNum==1 && lastTrackTm==jsonData.tm[0] )  {
				//$("#infoDiv").html( 'Track loaded - no new points: '+pointsNum+' polylines: '+trackPolyLinesNum); 	
				return;
			}
			
			var trackPolyLinesNum=loadedTracksList[trackID]['control']['trackPolyLinesNum'];
			var color=	loadedTracksList[trackID]['info']['color'];
			
			if (trackPolyLinesNum >0 &&
				loadedTracksList[trackID]['control']['trackPolyLines'][trackPolyLinesNum-1].getVertexCount() < 50 ) {
				// add to current 				
				var vNum=loadedTracksList[trackID]['control']['trackPolyLines'][trackPolyLinesNum-1].getVertexCount();
				for (var i=0; i<pointsNum; i++) {
					lastPoint[trackID]=new GLatLng(jsonData.lat[i], jsonData.lon[i]);
					loadedTracksList[trackID]['control']['trackPolyLines'][trackPolyLinesNum-1].insertVertex(vNum,lastPoint[trackID] );
					vNum++;									
				}
			} else {
				if ( typeof lastPoint[trackID] == "undefined"  ) {
				
				} else {
					 pts[0] =lastPoint[trackID];
				}
				
				for (var i=0; i<pointsNum; i++) {
					pts[i+1] = new GLatLng(jsonData.lat[i], jsonData.lon[i]);
					if (lastTrackTm==0) bounds.extend(pts[i+1]);
				}
								
				loadedTracksList[trackID]['control']['trackPolyLines'][trackPolyLinesNum]=new GPolyline(pts, '#'+color , 2 );			
				map.addOverlay( loadedTracksList[trackID]['control']['trackPolyLines'][trackPolyLinesNum]  );
				trackPolyLinesNum++;
				loadedTracksList[trackID]['control']['trackPolyLinesNum']=trackPolyLinesNum;
				
				lastPoint[trackID]=pts[pointsNum] ;
			}	
			
			/*
			for (var i=0; i<pointsNum; i++) {
				addLinesToTrack(trackID,jsonData.lat[i],jsonData.lon[i],jsonData.alt[i]);
				
				//pts[i+1] = new GLatLng(jsonData.lat[i], jsonData.lon[i]);
				pts[i+1]=ge.createPoint('');
				pts[i+1].set(jsonData.lat[i],jsonData.lon[i],jsonData.alt[i],ge.ALTITUDE_ABSOLUTE,true,false);
				
				// if (lastTrackTm==0) bounds.extend(pts[i+1]);
			}
				*/			
			//trackPolyLines[trackPolyLinesNum]=new GPolyline(pts, '#ff0000', 2 );			
			// map.addOverlay( trackPolyLines[trackPolyLinesNum]  );
			// trackPolyLinesNum++;
			
			lastPoint[trackID]=pts[pointsNum] ;
					
			
			loadedTracksList[trackID]['control']['lastTrackTm']=jsonData.tm[(pointsNum-1)];

			//$("#infoDiv").html( 'Track loaded: '+pointsNum+' polylines: '+trackPolyLinesNum); 	
			 
			if (lastTrackTm<=1)	{
				var marker=createMarker(pts[1],'Start for '+loadedTracksList[trackID]['info']['username'],'Start',background['green'],true);
			}	
				
		}
	);	
}


function updateTrackOLD(trackID) {
	

	var lastTrackTm;
	if ( typeof trackTm[trackID] == "undefined"  ) lastTrackTm=0;
	else lastTrackTm=trackTm[trackID];

	if (lastTrackTm==0)	{
		// $("#infoDiv").html("<img src='/img/ajax-loader.gif'>");
	}
	
	// $("#infoDiv").html( 'lastTrackTm: '+lastTrackTm); 
	
	$.post('/live_track_ajax.php',{ op:"trackPoints",trackID:trackID,fromTm:lastTrackTm}, 
		function(result){ 

			//$("#infoDiv").html( 'result: '+result); 

			var jsonData = eval('(' + result + ')');
			var pts = [];
			var pointsNum=jsonData.lat.length;
			if (pointsNum <=0 ) return;
			
			if (pointsNum==1 && lastTrackTm==jsonData.tm[0] )  {
				//$("#infoDiv").html( 'Track loaded - no new points: '+pointsNum+' polylines: '+trackPolyLinesNum); 	
				return;
			}
		
			
			if (trackPolyLinesNum>0 && trackPolyLines[trackPolyLinesNum-1].getVertexCount() < 50 ) {
				// add to current 
				
				var vNum=trackPolyLines[trackPolyLinesNum-1].getVertexCount();
				for (var i=0; i<pointsNum; i++) {
					lastPoint[trackID]=new GLatLng(jsonData.lat[i], jsonData.lon[i]);
					trackPolyLines[trackPolyLinesNum-1].insertVertex(vNum,lastPoint[trackID] );
					vNum++;									
				}
			} else {
				if ( typeof lastPoint[trackID] == "undefined"  ) {
				
				} else {
					 pts[0] =lastPoint[trackID];
				}
				
				for (var i=0; i<pointsNum; i++) {
					pts[i+1] = new GLatLng(jsonData.lat[i], jsonData.lon[i]);
					if (lastTrackTm==0) bounds.extend(pts[i+1]);
				}
								
				trackPolyLines[trackPolyLinesNum]=new GPolyline(pts, '#'+color, 2 );			
				map.addOverlay( trackPolyLines[trackPolyLinesNum]  );
				trackPolyLinesNum++;
				
				lastPoint[trackID]=pts[pointsNum] ;
			}			
			
			trackTm[trackID]=jsonData.tm[(pointsNum-1)];
			
			//$("#infoDiv").html( 'Track loaded: '+pointsNum+' polylines: '+trackPolyLinesNum); 	
			 
			if (lastTrackTm<=1)	{
				var marker=createMarker(pts[1],'Start for '+loadedTracksList[trackID]['info']['username'],'Start','green',true);
				map.addOverlay(marker);
				// createMarker(pts[pointsNum-1],'End','End','red',true);
				map.setZoom(map.getBoundsZoomLevel(bounds));
				map.setCenter(bounds.getCenter());
				
			}
			
			
			
			
				
		}
	);	
}


function setCurrentPos(trackID,lat,lon,alt,zoomToUser) {
	var marker=loadedTracksList[trackID]['control']['marker'];	
	var newpos= new GLatLng(lat, lon);
	marker.setPoint(newpos);
	
	if ( (autoCenterMap && trackID==activeTrackID) || zoomToUser==true ) {
		map.setCenter(newpos, map.getZoom());
	}
}

	
function updatePosOLD(result) {	

	for (var i=0; i<lastPoints.length; i++) {
	   map.removeOverlay(lastPoints[i]);
	}
		
	var jsonData = eval('(' + result + ')');
	var pts = [];
	var pointsNum=jsonData.lat.length;
	
	for (var i=0; i<pointsNum; i++) {
		var lat=jsonData.lat[i];
		var lon=jsonData.lon[i];
		var time=jsonData.time[i];
		
		if ( i == 1 )  {
			var vario=(jsonData.alt[0]-jsonData.alt[1] ) / ( jsonData.tm[0] - jsonData.tm[1]) ;
			vario=Math.floor(vario*10);
			vario/=10;
			$("#ii_vario").html(vario);
			if (vario >0 ) {
				$("#ii_vario_img").html('<img src="/img/icon_up.gif" align="top">');
			} else if (vario < 0 ) {
				$("#ii_vario_img").html('<img src="/img/icon_down.gif" align="top">');
			} else {
				$("#ii_vario_img").html('');
			}
			
		}
		
		var label=time+", "+jsonData.alt[i]+"m, "+jsonData.sog[i]+"km/h";
		if ( i == 0 )  {
			if (firstTime){	
				 var html = "live track";
				// var label =  "live track";
				 var point = new GLatLng(lat,lon);
			
				 var zoom=14;
				 marker = createMarker(point,label,html,markerBg,false);
				 map.addOverlay(marker);
				 if (autoCenterMap || true) {
				 	map.setCenter(point, zoom);
				 }
				 firstTime=false;
			} else {
				setCurrentPos(lat,lon);
			}

		} else {
				lastPoint=new BdccBlock(new GLatLng(lat,lon),fadeColor( i/pointsNum ),label);
				lastPoints.push(lastPoint); 
				map.addOverlay(lastPoint );
		}
	}
				
	
}


function zoomToFlight() {		
	zoom=map.getBoundsZoomLevel(bounds);	
	map.setCenter(new GLatLng( center_lat,center_lon), zoom);
}

function zoomToTrack(trackID) {
	var lat=loadedTracksList[trackID]['pos']['lat'];
	var lon=loadedTracksList[trackID]['pos']['lon'];
	zoom=14;
	
	map.setCenter(new GLatLng( lat,lon), zoom);

	$("#trackMenu").hide();
}



/*-------------------------------------------------------------------------------
---------------------------------------------------------------------------------

	Function ported from 3d

---------------------------------------------------------------------------------
-------------------------------------------------------------------------------*/



function loadTrackToMap(trackID) {
   if (loadedTracksList[trackID]== null) {
	   $("#infoBox").html("Track "+trackID+" not found in the list!");
	   return; 	   
   }
   
   if ( loadedKmlList[trackID] != null) {	   	   
		$("#infoBox").html("Track already loaded");
   } else {
	   $("#infoBox").html("Track loaded OK");
		loadedTracksList[trackID]['control']['lastTrackTm']=1;	   
	    updateTrack(trackID);
		
		//for (var i=0; i<trackPolyLinesNum; i++) {
		//	map.addOverlay( trackPolyLines[i]  );
		//}
		loadedKmlList[trackID]=1;
   }
}

function removeTrackFromMap(trackID){
	 if (loadedKmlList[trackID]== null) {
	   $("#infoBox").html("removeTrackFromMap: Track not found in the list!");
	   return; 	   
   }
   
	for (var i=0; i<loadedTracksList[trackID]['control']['trackPolyLinesNum']; i++) {
		map.removeOverlay( loadedTracksList[trackID]['control']['trackPolyLines'][i]  );	
	}

   loadedKmlList[trackID] = null;
}
	
function removeMarkerFromMap(trackID){
   if (loadedTracksList[trackID]== null) {
	   $("#infoBox").html("removeMarkerFromMap: Track not found in the list!");
	   return; 	   
   }
   if (loadedTracksList[trackID]['control']['marker']!=null){
	   map.removeOverlay(loadedTracksList[trackID]['control']['marker']);
	   loadedTracksList[trackID]['control']['marker']= null;
   }
}

function color2geColor(col) {
	// bbggrr -> rrggbb and vice versa	
	return 	col.substr(4,2)+col.substr(2,2)+col.substr(0,2);
}


function changeTrackColor(event) {  //trackID,color

	var trackID=event.data.trackID;
	
	$("#infoBox").html(trackID);
	
	var color=$('#geColor'+trackID).val().substr(1);			
		
			
	if (loadedTracksList[trackID] == null) {
		$("#infoBox").html("changeTrackColor: Track not found in the list!");
	} 
	
	// $("#infoDiv").append("Track "+trackID+" changing color to "+color+"<BR>");		
		
	loadedTracksList[trackID]['info']['color']=color;
	
	// convert to ge color format
	// color=color2geColor(color);		
	
	if ( loadedKmlList[trackID] == null) {	   	   
	   $("#infoBox").html("Track is not loaded ("+color+" !");
	} else {
	   $("#infoBox").html("Track changed color to "+color);
		
		for (var i=0; i<loadedTracksList[trackID]['control']['trackPolyLinesNum']; i++) {
			
			loadedTracksList[trackID]['control']['trackPolyLines'][i].setStrokeStyle({color: '#'+color});

		}  

   }
}



