var colors = ['FF0000', 'E51900', 'CC3300', 'B24C00', '996600', '7F7F00', '669900', '4CB200', '33CC00', '19E500'];
var gusersids = new Array();
var gusersnames = new Array();
var gusersspeeds = new Array();
var gusersstatus = new Array();
var gusersmarkers = new Array();
var gusershtmls = new Array();
var gusersroutes = new Array();
var guserscolorroutes = new Array();
var guserspolylines = new Array();
var gusersroutedist = new Array();
var guserswalkdist = new Array();
var guserslines = new Array();
var tempItems = new Array();
var redraw_minutes = 0;
var route_color = 1;
var refresh_type = 1;
var selected_user = null;
var user_distance = 0;
var max_speed = 0;
var min_speed = 0;
var avg_speed = 0;
var speeds_colors = new Array();
var routes = "";
var refresh_active = 1;
var time_from = '';
var time_to = '';
var chart_url;
var globalroutePoints = Array();
var globalcolorRoutePoints = Array();

var flashMovi = '';
var interval = setInterval("redrawMap(true);", 1000*60*5);


function showMap()
{
map = new GMap2(document.getElementById("gmap"));
map.setCenter(new GLatLng(0,0), 0);
map.setUIToDefault();

selected_user = document.getElementById('user_to_show')[document.getElementById('user_to_show').selectedIndex].value;


chart_url = "generateChartData.php?uid="+selected_user;
GDownloadUrl("generateUserData.php?uid="+selected_user, processData);


	so = new SWFObject("amline/amline.swf", "amline", "600", "300", "8", "#ffffff");
	so.addVariable("path", "/amline/");
so.addVariable("chart_id", "amline_chart");
	so.addVariable("settings_file", encodeURIComponent("amline_settings.xml"));
	so.addVariable("data_file", encodeURIComponent(chart_url));
	so.write("flashcontent");

}




function processData(data, status, refresh)
{
	var bounds = new GLatLngBounds();
	if(status == 200){
		
		var users = eval('(' + data + ')');

		for(var i=0; i<users.length; i++){
			
			max_speed = new Number(users[i].max_speed).toFixed(0);
			min_speed = new Number(users[i].min_speed).toFixed(0);
			
			calculateSpeeds();
			
			var marker = createPoint(new GLatLng(users[i].last_seen.lat, users[i].last_seen.lng));
			var label = new ELabel(new GLatLng(users[i].last_seen.lat, users[i].last_seen.lng), '<div align="center" style="width: 60px; padding: 1px; background-color:#CCCCCC;border:1px solid black; font-size:8pt;">'+users[i].name+'<\/div>', null, new GSize(-30,40), 80);
			
			gusersids[i] = users[i].id;
			refresh = false;
			if(users[i].refresh == 'yes') refresh = true;
			gusersnames[users[i].id] = users[i].name;
			gusersspeeds[users[i].id] = users[i].last_seen.speed;
			gusersstatus[users[i].id] = users[i].status;
			gusersmarkers[users[i].id] = marker;
			bounds.extend(new GLatLng(users[i].last_seen.lat, users[i].last_seen.lng));
			gusershtmls[users[i].id] = users[i].name + "<br>" + users[i].last_seen.speed + "km/h";
			
			
			
			if((users[i].total_time/60) > 0){
			if(users[i].total_time > 60){
			document.getElementById('total_time').innerHTML = "Total time: "+(users[i].total_time/60).toFixed(2) +"h";	
			}else{
			document.getElementById('total_time').innerHTML = "Total time: "+users[i].total_time+"min";	
			}
			}else{
				if(document.getElementById('total_time').value != "") document.getElementById('total_time').innerHTML = "";
			}
			if((users[i].driving_time/60) > 0){
				if(users[i].driving_time > 60){
				document.getElementById('total_driving').innerHTML = "Total driving time: "+(users[i].driving_time/60).toFixed(2)+"h";
				}else{
				document.getElementById('total_driving').innerHTML = "Total driving time: "+users[i].driving_time+"min";	
				}
			}else{
				if(document.getElementById('total_driving').value != "") document.getElementById('total_driving').innerHTML = "";
				
			}
			map.addOverlay(marker);
			map.addOverlay(label);

			if(refresh == true){
				if(refresh_type != 1){
						if(refresh_type != 3){
					map.setZoom(map.getBoundsZoomLevel(bounds));
				}
					map.setCenter(bounds.getCenter());	
					map.setZoom(map.getZoom());
				}
							
			}else{

				map.setZoom(map.getBoundsZoomLevel(bounds));
				map.setCenter(bounds.getCenter());
		}
			routes = users[i].routes;
			addRoutes(refresh);
		}
	}


}


function createPoint(point)
{
icon = getBaseIcon();

pointmap = new GMarker(point, icon);

return pointmap;
}

function createRedPoint(point)
{
	pointmap = new GMarker(point);
tempItems.push(pointmap);
	return pointmap;
}

function createGreenPoint(point)
{
	var tinyIcon = new GIcon();
	tinyIcon.image = "new_start.png";
	tinyIcon.iconAnchor = new GPoint(10, 34);
	pointmap = new GMarker(point, tinyIcon);

	return pointmap;
}


function getBaseIcon()
{
	var tinyIcon = new GIcon();
	tinyIcon.image = "new_end.png";
	//tinyIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	//tinyIcon.iconSize = new GSize(12, 20);
	//tinyIcon.shadowSize = new GSize(22, 20);
	tinyIcon.iconAnchor = new GPoint(20, 20);
	//tinyIcon.infoWindowAnchor = new GPoint(5, 1);
	
return tinyIcon;
}

function addRoutes(refresh)
{
	var bounds = new GLatLngBounds();
	var id = gusersids[0];
		user_distance = 0;
	for(var q=0;q<routes.length;q++){
	var numOfPoints = routes.length;
	var routePoints = [];
	var colorRoutePoints = [];
	var tempDist = 0;


	for(var i=0; i<routes[q].length; i++){
		
		var newPoint = new GLatLng(routes[q][i].lat, routes[q][i].lng);
		bounds.extend(newPoint);
		if(i>0){
		tempDist = tempDist+oldPoint.distanceFrom(newPoint);
		
		}
	
		
		var oldPoint = new GLatLng(routes[q][i].lat, routes[q][i].lng);	
		
		
	routePoints[i] = newPoint;
	colorRoutePoints[i] = {speed: routes[q][i].speed, point:newPoint};

	}
	
		user_distance = user_distance+tempDist;
	
		gusersroutes.push({id:id, route:routePoints});
		guserscolorroutes.push({id:id, route:colorRoutePoints});
		
		if(route_color == 1){
		var poly = new GPolyline(routePoints);
		guserspolylines.push({id:id, polyline:poly});
		map.addOverlay(poly);
		}else{
			for(var e=0;e<colorRoutePoints.length;e++)
			{
				var new_point = colorRoutePoints[e];
				if(e> 0){
					var sp = old_point.speed;
					var cur_col = colors[0];
					
					for(var w=1;w<10;w++)
					{
						var temp_sp = speeds_colors[w].speed == 00 ? 0 : speeds_colors[w].speed;						
						if(temp_sp < sp) cur_col = colors[w];
					}
					var poly = new GPolyline([old_point.point, new_point.point], "#"+cur_col);
					guserspolylines.push({id:id, polyline:poly});
					map.addOverlay(poly);
					
				}
				var old_point = colorRoutePoints[e];
				
			}
			
			
		}
		
	}

		if(user_distance > 0){
			document.getElementById("total_distance").innerHTML = "Total distance: "+meterKilometer(user_distance);
		}else{
			document.getElementById('total_distance').innerHTML = "";	
		}

		
	if(routes.length > 0){
		var greenPoint = createGreenPoint(new GLatLng(routes[0][0].lat, routes[0][0].lng));
		map.addOverlay(greenPoint);
	}
	if(refresh==true){
		
		if(refresh_type == 2){
			map.setZoom(map.getBoundsZoomLevel(bounds));
			map.setCenter(bounds.getCenter());	
		}else if(refresh_type == 3){
			
			map.setZoom(map.getZoom());
		if(routes.length > 0){
		var rl = routes.length-1;
		var	rll = routes[rl].length-1;
			map.setCenter(new GLatLng(routes[rl][rll].lat, routes[rl][rll].lng));	
		}else{
			map.setCenter(bounds.getCenter());
		}
		}
		
	}else{
		if(routes.length > 0){
		map.setZoom(map.getBoundsZoomLevel(bounds));
		map.setCenter(bounds.getCenter());
	}
	}
}

function removeTempItems()
{
	for(var i=0; i<tempItems.length; i++)
	{

		tempItems[i].hide();
	}
}


function setRefreshInterval()
{
	var inter = document.getElementById('refresh_interval')[document.getElementById('refresh_interval').selectedIndex].value;
	var myDate = new Date();
	var old_d= time_to;
	var d = myDate.getDate()<10 ? '0'+myDate.getDate() : myDate.getDate();
	var m = (myDate.getMonth()+1)<10 ? '0'+(myDate.getMonth()+1) : (myDate.getMonth()+1);

	if((document.getElementById('end-date').value == "") || (document.getElementById('end-date').value == d+'/'+m+'/'+myDate.getFullYear()))
	{
			clearInterval(interval);
			interval = setInterval("redrawMap(true);", 1000*inter);
	}
	
}

function updateTime()
{
	var inter = document.getElementById('refresh_interval')[document.getElementById('refresh_interval').selectedIndex].value;
	var myDate = new Date();
	var old_d= time_to;
	var d = myDate.getDate()<10 ? '0'+myDate.getDate() : myDate.getDate();
	var m = (myDate.getMonth()+1)<10 ? '0'+(myDate.getMonth()+1) : (myDate.getMonth()+1);
	if(document.getElementById('end-date').value != "" && document.getElementById('end-date').value != d+'/'+m+'/'+myDate.getFullYear())
	{
		clearInterval(interval);

	}
	
	if((document.getElementById('end-date').value == "") || (document.getElementById('end-date').value == d+'/'+m+'/'+myDate.getFullYear()))
	{
		if((old_d == "") || (old_d == d+'/'+m+'/'+myDate.getFullYear())) {
			interval = setInterval("redrawMap(true);", 1000*inter);
		}
	}
	
	time_to = document.getElementById('end-date').value;
	time_from = document.getElementById('start-date').value;
	
	redrawMap(false);
}

function redrawMap(refresh)
{

	map.clearOverlays();
	clearArrays();
	var tt = '';
	selected_user = document.getElementById('user_to_show')[document.getElementById('user_to_show').selectedIndex].value;
	var redraw_minutes = document.getElementById('redraw_minutes')[document.getElementById('redraw_minutes').selectedIndex].value;
	if(refresh == true) tt='&refresh=true'; 
	
	chart_url = "generateChartData.php?uid="+selected_user+"&time_to="+time_to+"&time_from="+time_from+"&rm="+redraw_minutes+tt;
    flashMovie = document.getElementById('amline');  
	flashMovie.reloadData(encodeURIComponent(chart_url));
	flashMovie.rebuild();
	
	GDownloadUrl("generateUserData.php?uid="+selected_user+"&time_to="+time_to+"&time_from="+time_from+"&rm="+redraw_minutes+tt , processData);	
}

function switchRouteColor()
{
	if(document.myform.track_color[0].checked == true){
		route_color = 1;
	}else if(document.myform.track_color[1].checked == true){
		route_color = 2;
	}
	
	for(var i=0;i<guserspolylines.length;i++)
	{
		map.removeOverlay(guserspolylines[i].polyline);

	}
	
	addRoutes();
	
}

function clearArrays()
{
	gusersids = new Array();
	gusersnames = new Array();
	gusersspeeds = new Array();
	gusersstatus = new Array();
	gusersmarkers = new Array();
	gusershtmls = new Array();
	gusersroutes = new Array();
	guserspolylines = new Array();
	gusersroutedist = new Array();
	guserswalkdist = new Array();
	tempItems = new Array();	
}

function calculateSpeeds()
{
	var av_speed = ((max_speed-min_speed)/2).toFixed(0);
	avg_speed = new Number(min_speed+av_speed);
	
	document.getElementById('low_speed').innerHTML = min_speed;
	document.getElementById('average_speed').innerHTML = avg_speed;
	document.getElementById('max_speed').innerHTML = max_speed;
	
	speeds_colors[0] = {speed: min_speed, color: "rgb(255, 0, 0)"};
	var num = ((max_speed-min_speed)/8).toFixed();
	for(var i=1;i<9;i++)
	{
		var l1 = 25*i;
		if((i%2 == 0)) var l1=26*i;
		
			var l2 = 25*i;
			if((i%2 == 0)) var l2=26*i;
		
		speeds_colors[i] = {speed: (min_speed+(num*i)), color: "rgb("+(255-l1)+", "+l2+", 0)"}
		
	}
	speeds_colors[9] = {speed: max_speed, color: "rgb(25, 229, 0)"};
	

	var spans = "";
	for(var i=0;i<speeds_colors.length;i++)
	{
		spans += "<span style='border-top:5px solid;display:inline;float:left;width:15px;border-color: "+speeds_colors[i].color+";'></span>";
	}
	
	document.getElementById('speed_graph').innerHTML = spans;
	
}

function meterKilometer(meter)
{
	if(meter > 1000){
		return (meter/1000).toFixed(2)+"km";
	}else{
		return (meter).toFixed(0)+"m";
	}
}

function compareIntegers(vNum1, vNum2)
{
	var iNum1 = parseInt(vNum1);
	var iNum2 = parseInt(vNum2);
	if(iNum1 < iNum2){
		return -1;
	}else if (iNum1 > iNum2){
		return 1;
	}else{
		return 0;
	}
}
