var poly;
var count = 0;
var iconstd;
var iconstart;
var icon_url ="../pix/";
var tooltip;
var otid = 0;
var lineColor = "#0000af";
var lineWeight = 3;
var lineOpacity = .8;
var polyOptions = {geodesic:true};
var fillOpacity = .2;
var TooltipListener;
var polytrks = [];

function initialize1() {
  map = new google.maps.Map2(document.getElementById("map"));  
  var uiOptions = map.getDefaultUI();   
  uiOptions.zoom.scrollwheel = false;   
  map.setUI(uiOptions); 
  map.setMapType(G_HYBRID_MAP);
  initTooltip(map);
  initTripMarkers(map);
	showTrip(map);
}

function initialize2() {
  map = new google.maps.Map2(document.getElementById("map"));  
  var uiOptions = map.getDefaultUI();   
  uiOptions.zoom.scrollwheel = false;   
  map.setUI(uiOptions); 
  initTooltip(map);
  initMarker(map);
	setUp(map);
}

function initialize3() {
  map = new google.maps.Map2(document.getElementById("map"));  
  var uiOptions = map.getDefaultUI();   
  map.setUI(uiOptions); 
	tripArt(map);
}

function addIcon(iconx,a,b,c,d,e) { 
		iconx.shadow= icon_url + "mm_20_shadow.png";
		iconx.iconSize = new GSize(b, c);
		iconx.shadowSize = new GSize(d, e);
		iconx.iconAnchor = new GPoint(a, c);
		iconx.infoWindowAnchor = new GPoint(5, 1);
}

function initTooltip(map) {
		tooltip = document.createElement("div");
		tooltip.className="tooltip";
		map.getPane(G_MAP_MARKER_PANE).appendChild(tooltip);
}

function initTripMarkers(map) {
		gicons["yelS"] = new GIcon(G_DEFAULT_ICON, "../pix/yellow_MarkerS.png");
		addIcon(gicons["yelS"],9,18,30,26,30);
		gicons["yelE"] = new GIcon(G_DEFAULT_ICON, "../pix/yellow_MarkerE.png");
		addIcon(gicons["yelE"],9,18,30,26,30);
		gicons["bluT"] = new GIcon(G_DEFAULT_ICON, "../pix/blue_MarkerT.png");
		addIcon(gicons["bluT"],9,18,30,26,30);
		gicons["bluM"] = new GIcon(G_DEFAULT_ICON, "../pix/blue_MarkerM.png");
		addIcon(gicons["bluM"],9,18,30,26,30);
		gicons["redT"] = new GIcon(G_DEFAULT_ICON, "../pix/red_MarkerT.png");
		addIcon(gicons["redT"],9,18,30,26,30);
		gicons["redM"] = new GIcon(G_DEFAULT_ICON, "../pix/red_MarkerM.png");		
		addIcon(gicons["redM"],9,18,30,26,30);
		gicons["grnT"] = new GIcon(G_DEFAULT_ICON, "../pix/darkgreen_MarkerT.png");
		addIcon(gicons["grnT"],9,18,30,26,30);
		gicons["grnM"] = new GIcon(G_DEFAULT_ICON, "../pix/darkgreen_MarkerM.png");		
		addIcon(gicons["grnM"],9,18,30,26,30);
}

function initMarker(map) {
		iconstd = new GIcon();
		iconstd.image = icon_url +"mm_20_purple.png";
		addIcon(iconstd,6,12,20,22,20);		
}

function showTrip(map) {
	markers.length = 0;		
	bounds = new GLatLngBounds();

	var request = GXmlHttp.create();
	request.open("GET", "../route/trmarkspl.xml", true);
	request.onreadystatechange = function() 
	{
		if (request.readyState == 4) 
		{
				var xmlDoc = GXml.parse(request.responseText);

			  var stp = xmlDoc.documentElement.getElementsByTagName("marker");
			  
			  
			  for (var i = 0; i < stp.length; i++) 
			  {

						var lat = parseFloat(stp[i].getAttribute("lat"));
						var lng = parseFloat(stp[i].getAttribute("lng"));
						var point = new GLatLng(lat,lng);

						var ccy = stp[i].getAttribute("ccy");
						var mt = stp[i].getAttribute("mt");
						var kd = stp[i].getAttribute("kd");

						var tid = stp[i].getAttribute("tid");
						var icontype = stp[i].getAttribute("ict");

						if ((ctry=="all") || (ctry.length==0) || (ctry.value=="") ) 
						{
									loadMrkr(tid,point,icontype);
									if (kd==trip) 
									{
										bounds.extend(point);
									}
						}
						else 
						{
									if (sel=="ccd") 
									{
										if (ccy==ctry) 
										{
											loadMrkr(tid,point,icontype);
											bounds.extend(point);
										}
									}
									else 
									{
										if (mt==ctry) 
										{
											loadMrkr(tid,point,icontype);
											bounds.extend(point);
										}
									}

						}
				}
				var lines = xmlDoc.documentElement.getElementsByTagName("line");
				for (var a = 0; a < lines.length; a++) 
				{
						var colour = lines[a].getAttribute("colour");
						var points = lines[a].getElementsByTagName("point");
						var pts = [];
						for (var i = 0; i < points.length; i++) 
						{
							 pts[i] = new GLatLng(parseFloat(points[i].getAttribute("lat")),
									 parseFloat(points[i].getAttribute("lng")));
						}
						map.addOverlay(new GPolyline(pts, colour, lineWeight, lineOpacity, polyOptions));
				}
				
				var mZL = map.getBoundsZoomLevel(bounds);
				map.setCenter(bounds.getCenter());
				map.setZoom(mZL);
				
		}
	}
	request.send(null);

}

function tripArt(map) {
	bounds = new GLatLngBounds();

	var request = GXmlHttp.create();
	request.open("GET", "../src/tripxml.php", true);
	request.onreadystatechange = function() 
	{
		if (request.readyState == 4) 
		{
				var xmlDoc = GXml.parse(request.responseText);
				
				var ptA = new GLatLng(47.2723,8.84479);
				var ptB;
				

				var points = xmlDoc.documentElement.getElementsByTagName("p");
				for (var i = 0; i < points.length; i++) 
				{
					ptB = new GLatLng(parseFloat(points[i].getAttribute("lat")),parseFloat(points[i].getAttribute("lon")));
					map.addOverlay(new GPolyline(Array(ptA,ptB), points[i].getAttribute("c"), 3, 50, polyOptions));		
					bounds.extend(ptB);
				}
				
				var mZL = map.getBoundsZoomLevel(bounds);
				map.setCenter(bounds.getCenter());
				map.setZoom(mZL);
				
		}
	}
	request.send(null);

}

function showTrack(datei) {
	var request = GXmlHttp.create();
	bounds = new GLatLngBounds();
	request.open("GET", "../route/gps/"+datei, true);
	request.onreadystatechange = function() 
	{
			if (request.readyState == 4) 
			{
					var xmlDoc = GXml.parse(request.responseText);

					if (polytrks.length>0)
					{
						for (p = 0; p<polytrks.length; p++) 
						{
							map.removeOverlay(polytrks[p]);
						}
					}

					var trks = xmlDoc.documentElement.getElementsByTagName("trk");
					for (i = 0; i<trks.length; i++) 
					{
							var pts = [];
							var lines = xmlDoc.documentElement.getElementsByTagName("trkpt");
							for (var a = 0; a < lines.length; a++) 
							{
								pts[a] = new GLatLng(parseFloat(lines[a].getAttribute("lat")),
									 parseFloat(lines[a].getAttribute("lon")));
								bounds.extend(pts[a]);
							}
							polytrks[i] = new GPolyline(pts, "#ffcc00", lineWeight, lineOpacity, polyOptions);
							map.addOverlay(polytrks[i]);
					}				
					var mZL = map.getBoundsZoomLevel(bounds);
					map.setCenter(bounds.getCenter());
					map.setZoom(mZL);
			}
	}
	request.send(null);

}

function setUp(map) {
		markers.length = 0;		
		bounds = new GLatLngBounds();

		for(var i = 0; i < loadFPmrkrsPos.length; i++) {
			var pos = loadFPmrkrsPos[i];
			var lat = loadFPmrkrsLat[i];
			var lng = loadFPmrkrsLon[i];
			var point = new GLatLng(lat,lng);
			loadMrkr(pos,point,'');
			bounds.extend(point);
			count++;
		}

		var mZL = map.getBoundsZoomLevel(bounds);
		map.setCenter(bounds.getCenter());
		mZL = Math.min(10,mZL);
		map.setZoom(mZL);
		drawOverlay();

}

function loadMrkr(pos,point,icontype) {

		var insrtPos = point;
		if (icontype.length>0)
		{
			var marker = new GMarker(insrtPos, {icon:gicons[icontype]});
		}
		else
		{
			var marker = new GMarker(insrtPos, {icon:iconstd});
		}
		map.addOverlay(marker);
		marker.content = pos;
		markers.push(marker);

		marker.tooltip = " ";

		GEvent.addListener(marker, "click", function() {
				showTooltip(marker);
		});

}

function drawOverlay() {

		if(poly) { map.removeOverlay(poly); }
		points.length = 0;

		for(i = 0; i < markers.length; i++) {
			points.push(markers[i].getLatLng());
			if (i==0) {
			
				var sIconUrl = icon_url +"mm_20_red.png";
				markers[i].setImage(sIconUrl) ;			
				map.setCenter(markers[i].getLatLng());
			}
			else {
				var sIconUrl = icon_url +"mm_20_purple.png";
				markers[i].setImage(sIconUrl) ;			
			}

		}

		poly = new GPolyline(points, lineColor, lineWeight, lineOpacity, polyOptions);
		map.addOverlay(poly);
}

function outerClick(tid,xotid,hasgps) {
		for(i = 0; i < markers.length; i++) {
			if (markers[i].content == tid) 
			{
				otid = xotid;
				GEvent.trigger(markers[i], "click");
			}
		}
		if (hasgps!='0')
			showTrack(hasgps);
}

function showTooltip(marker) { 

		if (tooltip.style.display == "block") 
		{
				tooltip.style.display = "none";
		} 
		else 
		{
				var tid = marker.content;

				tooltip.style.display = "block";
				tooltip.innerHTML = "loading...";

				GDownloadUrl('../src/tooltip.php?tid='+tid+'&otid='+otid, function(response, status){

						if (response == null || status == -1 ) {
							tooltip.innerHTML = '<span>ERROR: Cannot display waypoint details.</span>';
						} else {
							tooltip.innerHTML = response;
							otid = 0;
						}
				});

				/* Tooltip transparency for IE */
				if(typeof(tooltip.style.filter) == "string") {
					tooltip.style.filter = "alpha(opacity:70)";
				}

				var currtype = map.getCurrentMapType().getProjection();
				var point= currtype.fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
				var offset= currtype.fromLatLngToPixel(marker.getLatLng(),map.getZoom());
				var anchor = marker.getIcon().iconAnchor;
				var width = marker.getIcon().iconSize.width + 6;
				var height = 10;
				var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width, offset.y - point.y -anchor.y - height));
				pos.apply(tooltip);
		}
		
		TooltipListener = GEvent.addListener(map, "click", function() {
			tooltip.style.display = "none";
			GEvent.removeListener(TooltipListener);
		});
}

function setRoadshowImage(id) {
	var olAjax = new Ajax.Request('../src/getImage.php',{
		method: 'post',
		parameters: {foto: id },
		onSuccess:function (resp) {
				$('roadshowContainer').innerHTML = resp.responseText;
				$('ImageInfo').innerHTML = $('srcImageInfo').innerHTML;
				
				loadFPmrkrsPos.length = 0;
				loadFPmrkrsLat.length = 0;
				loadFPmrkrsLon.length = 0;

				loadFPmrkrsPos[0] = $('tripid').value;
				loadFPmrkrsLat[0] = $('nextlat').value;
				loadFPmrkrsLon[0] = $('nextlon').value;			

				if (tooltip.style.display == "block") 
				{
						tooltip.style.display = "none";
				} 

				setUp(map);
				
				browseRoadShow();
		}
	});
}

