
var map;
	
var mgr;
	
var timer;

var markers= new Hashtable();
	
var default_icon = "/item_icons/pushpin/red_pushpin.png";
//var default_icon = "/item_icons/label/box-small_80_31.png";
	
var icon_directory = "/item_icons/"
	
var root_address = "http://localize.redirectme.net"

var traceActive = false;

  function load() 
  {
  if (GBrowserIsCompatible()) 
    {
			map = new GMap2(document.getElementById("map"));
	 		map.addControl(new GLargeMapControl());
	 		map.addControl(new GMapTypeControl());
	 		map.addControl(new GOverviewMapControl());
			if (readCookie("map")!=null) 
				deserializeMapState(readCookie('map'));
			else
				map.setCenter(new GLatLng(43.54, 6.954), 13);
			map.setMapType(G_HYBRID_MAP);
	 		map.enableScrollWheelZoom();
	 		//mgr = new GMarkerManager(map, {trackMarkers:true}); 
	 		timer = setInterval(update,60000);
    }
  }


// Download the data in data.xml and load it on the map. The format we
// expect is:
// <items>
//   <item lat="37.441" lng="-122.141"/>
//   <item lat="37.322" lng="-121.213"/>
// </items>
function update()
{
	GDownloadUrl("last_location_data.php", function(data, responseCode) 
	{
		var icon;
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("item");
		for (var i = 0; i < markers.length; i++) 
		{
			display(parseInt(markers[i].getAttribute("id"),10), markers[i].getAttribute("name"),parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")), markers[i].getAttribute("icon"),markers[i].getAttribute("date"),markers[i].getAttribute("spd"),markers[i].getAttribute("dir"),markers[i].getAttribute("alt"));
		}
	});
}

function showInfos()
{
	
}

function display(mobileid, name, latitude, longitude, iconname, sentDate, speed, direction, altitude) 
{
	var baseIcon = new GIcon();
	// Extract icon name
	var html="<B>"+name+"</B><BR/>"+addOneHour(sentDate)+"<BR/>"; //+direction+"&deg;<BR/>"+speed+"km/h<BR/>"+altitude+"m<BR/>"
	if (iconname.length<=1)
	{
		iconurl = root_address + default_icon;
	}
	else
	{
		iconurl = root_address + icon_directory + iconname;
	}
	
	// Get icon properties
	/*var iconDescriptor = iconurl.replace(/png$/,"xml");
	alert(iconDescriptor);
	GDownloadUrl(iconDescriptor, function(data1, responseCode1) 
	{
		var xml = GXml.parse(data1);
		var icondesc = xml.documentElement.getElementsByTagName("icon");*/
		baseIcon.shadow = "http://localize.redirectme.net/item_icons/shadow.png";
		//baseIcon.iconSize = new GSize(50, 26);
		//baseIcon.shadowSize = new GSize(37, 34);
		baseIcon.iconAnchor = new GPoint(9, 34);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
		baseIcon.infoShadowAnchor = new GPoint(18, 25);
		var icon = new GIcon(baseIcon);
		icon.image = iconurl;
	//});
	var point = new GLatLng(latitude, longitude);
	if (markers.containsKey(mobileid)) 
	{
		markers.get(mobileid).setPoint(point);
		
	}
	else
	{
		opts = 
		{ 
			"icon": icon,
			"clickable": true,
			"labelText": name,
			"labelOffset": new GSize(-6, -30)
		};

		var marker = new LabeledMarker(point, opts);
		GEvent.addListener(marker, "click", function() 
		{
			marker.openInfoWindowHtml(html);
		});
		markers.add(mobileid,marker);
		map.addOverlay(marker);
	}
}

function showMarker(mobileid)
{
	markers.get(mobileid).show();
}

function hideMarker(mobileid)
{
	markers.get(mobileid).hide();
}

function centerOnMarker(mobileid)
{
	map.panTo(markers.get(mobileid).getPoint());
}

function setMarkerVisibility(mobileid,visible)
{
	if (visible)
	{
		markers.get(mobileid).show();
	}
	else 
	{
		markers.get(mobileid).hide();
	}
		
}


function displayHistory(mobileid)
{
	var kml = new GGeoXml(location.href+"/kml_history.php?ItemList='"+mobileid+"'");
	map.addOverlay(kml);
}

 
function serializeMapState()
{
	return map.getCenter().lat() + "!" + map.getCenter().lng() + "!" + map.getZoom();
}


function deserializeMapState(serializedString)
{
	var reg=new RegExp("[!]+", "g");
	var table=serializedString.split(reg);
	map.setCenter(new GLatLng(parseFloat(table[0]), parseFloat(table[1])), parseInt(table[2]));
}

function saveMapState()
{
	createCookie("map",serializeMapState(),365);
}

function addOneHour(dateString)
{
	//alert(dateString.substring(11,13));
	var hour=parseInt(dateString.substring(11,13),10);
	hour = hour +1;
	if (hour > 23) hour=0;
	var zh='';
	if (hour<10) zh='0';
	return dateString.substring(0,11)+zh+hour+dateString.substring(13);
	
} 
