//Global vars
var fw_map;
var fw_map_id = "gmap";

var fw_icon;
var fw_icon_iconSize = new GSize(20, 34);
var fw_icon_shadowSize = new GSize(37, 34);
var fw_icon_iconAnchor = new GPoint(6, 20);
var fw_icon_infoWindowAnchor = new GPoint(5, 1);
var fw_icon_shadow = "../images/icons/shadow50.png";

var fw_map_nocontrols = false;
var fw_map_small_controls = false;
var fw_markers = new Array;
var fw_poll_interval = 10000;

var fw_img_location = "../pics/portrait/preview/";
var fw_pic_location = "../pics/preview/";

var fw_ajax_flag = false;

var fw_centerLatitude = 47.410502;
var fw_centerLongitude = 8.579672;
var myTs;
var fw_startZoom = 7;
var map;
var icon;

var fLat;
var fLon;
var myLat = "";
var myLon = "";
var myTs = "";
var panCounter = true;

var counter = 0;




var fw_geodcode;




function load()
{

	fw_geodcode = new GClientGeocoder();

	//fw_gmap_init(fw_map_id);

	pollPosition(fw_map_query);
}



function fw_gmap_init(id)
{
	if (GBrowserIsCompatible())
	{
		fw_map = new GMap2(document.getElementById(id));
		if (!fw_map_nocontrols)
		{
			fw_map.addControl(new GLargeMapControl());
			fw_map.addControl(new GMapTypeControl());
			fw_map.addControl(new GOverviewMapControl());
		}
		if (fw_map_small_controls)
		{
			fw_map.addControl(new GLargeMapControl());
		}

		var location = new GLatLng(fw_centerLatitude, fw_centerLongitude);
		fw_map.setCenter(location, fw_startZoom);
		fw_map.setMapType(G_HYBRID_MAP);
		// Icon init
		fw_icon = new GIcon();
		fw_icon.iconSize = fw_icon_iconSize;
		fw_icon.shadowSize = fw_icon_shadowSize;
		fw_icon.iconAnchor = fw_icon_iconAnchor;
		fw_icon.infoWindowAnchor = fw_icon_infoWindowAnchor;
		fw_icon.shadow = fw_icon_shadow;

	}
}


function pollPosition(fw_map_query)
{
	var points = new Array();

	var request = GXmlHttp.create();
	request.open('GET', '../showpos.html'+ fw_map_query + '&objects.mode=xml', true);
	request.onreadystatechange = function()
	{
		if (request.readyState == 4)
		{
			var xmlDoc = request.responseXML;
			if(xmlDoc)
				var markers = xmlDoc.documentElement.getElementsByTagName("marker");
			if(fw_map)
				fw_map.clearOverlays();	// Map clearing
			if (markers)
			{
				for (var i = 0; i < markers.length; i++)
				{
					
					var ts = new Array();
					ts['uid'] = (markers[i].getAttribute("uid"));
					ts['mid'] = (markers[i].getAttribute("mid"));
					ts['time'] = (markers[i].getAttribute("time"));
					ts['speed'] = (markers[i].getAttribute("speed"));
					ts['zip'] = (markers[i].getAttribute("zip"));
					ts['city'] = (markers[i].getAttribute("city"));
					ts['street'] = (markers[i].getAttribute("street"));
					ts['country'] = (markers[i].getAttribute("country"));
					ts['login'] = (markers[i].getAttribute("login"));
					ts['firstname'] = (markers[i].getAttribute("firstname"));
					ts['lastname'] = (markers[i].getAttribute("lastname"));
					ts['icon'] = (markers[i].getAttribute("icon"));
					
					ts['ts_create'] = (markers[i].getAttribute("ts_create"));
					ts['logincount'] = (markers[i].getAttribute("logincount"));
					ts['ts_lastLogin'] = (markers[i].getAttribute("ts_lastLogin"));
					if (markers[i].getAttribute("pic"))
					{
						if (markers[i].getAttribute("type") != "photo")
						{
							ts['pic'] = fw_img_location + markers[i].getAttribute("pic");
						}
						if (markers[i].getAttribute("type") == "photo")
						{
							ts['pic'] = fw_pic_location + markers[i].getAttribute("pic");
						}
					
					}
					ts['type'] = markers[i].getAttribute("type");

					if (markers[i].getAttribute("lat") != '' && markers[i].getAttribute("lon") != '')
					{
						ts['lat'] = parseFloat(markers[i].getAttribute("lat"));
						ts['lon'] = parseFloat(markers[i].getAttribute("lon"));
					}

					if (ts.type == "photo")
					{
						fw_markers[ts['mid']] = ts;
					}
					else
					{
						fw_markers[ts['uid']] = ts;
					}
				
					var uid = ts.uid;
					var coordQuery = '';
					//-------------------------- Map types

					//Live-tracking and users
					if (ts.type == "user")
					{
						if (ts.lat && ts.lon)
						{
							
							setMarker(parseFloat(ts.lat), parseFloat(ts.lon), ts);
							points.push(new GPoint(parseFloat(ts.lon), parseFloat(ts.lat)));
							fw_map.addOverlay(new GPolyline(points, "#FF0000", 5)); //Lines - drow each var displayMarkers = 5; !!! :) Looks good :)
							fw_ajax_flag = true;
						}
						else
						{
							if ((ts.zip && ts.country) && (!ts.lat && !ts.lon))
							{
								fw_markers[ts['uid']]['nocoord'] = true;
								if (ts.street)
								{
									coordQuery = ts.street;
									fw_startZoom = 17;
								}
								coordQuery += ts.zip +' '+ ts.country;
								fw_geodcode.getLatLng(coordQuery, function(id)
								{
									return function(pos)
									{
										fw_geoDecoder(pos, id)
									}
								}(uid));
							}
						}
					}

					// Friends points
					if (ts.type == "friends")
					{
						if (!ts.lat && !ts.lon)
						{
							if (ts.zip && ts.country)
							{
								fw_markers[uid]['nocoord'] = true;


								fw_geodcode.getLatLng(ts.zip +' '+ ts.country,function(id)
								{
									return function(pos)
									{
										fw_geoDecoder(pos, id)
									}
								}(uid));
							}
						}
						else
						{
							setMarker(ts.lat, ts.lon, fw_markers[uid]);
						}
					}

					// Friends in group points
					if (markers[i].getAttribute("type") == "groupusers")
					{
						if (!ts.lat && !ts.lon)
						{
							if (ts.zip && ts.country)
							{
								fw_markers[uid]['nocoord'] = true;

								fw_geodcode.getLatLng(ts.zip +' '+ ts.country,function(id)
								{
									return function(pos)
									{
										fw_geoDecoder(pos, id)
									}
								}(uid));
							}
						}
						else
						{
							setMarker(ts.lat, ts.lon, fw_markers[uid]);
						}
					}

					//User list points
					if (markers[i].getAttribute("type") == "userlist")
					{
						if (!ts.lat && !ts.lon)
						{
							if (ts.zip && ts.country)
							{
								uid = ts['uid'];
								fw_markers[uid]['nocoord'] = true;

								fw_geodcode.getLatLng(ts.zip +' '+ ts.country,function(id)
								{
									return function(pos)
									{
										fw_geoDecoder(pos, id)
									}
								}(uid));
							}
						}
						else
						{
							setMarker(ts.lat, ts.lon, fw_markers[uid]);
						}
					}
					
					//Photos
					if (markers[i].getAttribute("type") == "photo")
					{
						if (ts.lat && ts.lon)
						{
							fw_icon_shadow = '';
							mid = ts['mid'];
							setMarker(ts.lat, ts.lon, fw_markers[mid]);
//							fw_ajax_flag = true;
							
						}
					}
				
				}
			}
			if (fw_ajax_flag)
			{
				setTimeout("pollPosition(fw_map_query)",fw_poll_interval);
			}
		}
	}
	request.send(null);
}

function createMarker(point, ts)
{
	if (ts.icon != '')
	{
		fw_icon.image = "../images/icons/marker_"+ ts.icon +".png"; 
		var marker = new GMarker(point, fw_icon);
	}
	else
	{
		var marker = new GMarker(point);
	}	

	if (!fw_ajax_flag)
	{
		fw_map.panTo(new GLatLng(point.y,point.x));		
	}

	GEvent.addListener(marker, "mouseover", function()
	{
/*		
		window.setTimeout(function() {
			fw_map.panTo(new GLatLng(point.y,point.x));
		}, 10);
*/
		marker.openInfoWindowHtml(markerHtml(ts));
	}
	);
		
	return marker;
}



function setMarker(lat,lon, ts)
{
	if ((ts.type == "user" && ts.nocoord) || ts.type == "photo")
	{
		var temp = document.getElementById(fw_map_id);
		temp.style.display = "block";
	}

	if (!fw_map)
	{
		fw_gmap_init(fw_map_id);
	}
	var gpnt = new GPoint(lon,lat);
	fw_map.addOverlay(createMarker(gpnt, ts));
	myLat=lat;
	myLon=lon;
	myTs=ts;
}

function fw_geoDecoder(adr, uid)
{
	if (adr)
	{
		fw_markers[uid]['lat'] = adr['y'];
		fw_markers[uid]['lon'] = adr['x'];
		setMarker(adr['y'], adr['x'], fw_markers[uid]);
///* for test period
		var request2 = GXmlHttp.create();
		request2.open('GET', '../savepos.html?objects.mode=setgeohome&objects.uid='+ uid +'&objects.lat='+adr['y']+'&objects.lon='+adr['x'], true);
		request2.onreadystatechange = function() { }
		request2.send(null);
//*/		
	}
///*
	else
	{
		var request2 = GXmlHttp.create();
		request2.open('GET', '../savepos.html?objects.mode=setgeohome&objects.uid='+ uid +'&objects.lat=(none)&objects.lon=(none)', true);
		request2.onreadystatechange = function() { }
		request2.send(null);
	}
//*/
}

function dbl()
{
	fw_map.zoomIn();
}

function vardump(obj)
{
	var str ='';
	for (i in obj)
	{
		str += '['+i+']:'+obj[i]+'\n-------------------------------------\n';
	}
	alert(str);
}

