/*
gmap_v3_gpx_overlay.js, V 1.05, altm, 9.12.2011
Author: ATLSoft, Bernd Altmeier
Author URI: http://www.atlsoft.de
Google Map V3 gpx overlay
released under GNU General Public License
*/
	var actinfowinmarker = null;
	function showMarkers(map, sym, visible){
		for(var i = 0; i < maps[map.getDiv().id]["wpt"].length; i++){
			if (maps[map.getDiv().id]["wpt"][i].symbol == sym)
				maps[map.getDiv().id]["wpt"][i].setVisible(visible);
		}
	}

	function setMarker(map, pos, trk){	
		var title = trk.children("name").html();
		if (trk.children("name").html()){
			var content = title;
			var contentString = '<div class="gmv3_marker"><div class="gmv3_markerHeader">' + content + '</div>';
			content = trk.children("desc").html();
			if(content)
				contentString += '<div class="gmv3_markerText">' + content + '</div>';
			content = trk.children("link").attr("href");
			if(content){
				contentString += '<div><a class="gmv3_markerLink" target="_blank" href="' + content + '">'
				content = trk.children("link").next("text").html();
				if(content){
					contentString += content;
				} else
					contentString += 'more...';
				contentString += '</a></div>'	
			}
			contentString += '</div>';
		}

		var image;
		var shadow;
		var shape;
		var sym;
		var symNo = -1;
		var isTrack = true;
		if (trk.context.nodeName.toUpperCase() == "TRK"){
			sym = trk.children("type").html();
			if(escape(sym) >= 0 && escape(sym) < 16)
				sym = 'img/trz_'+sym+'.png';
			else{
				sym = 'img/trz_1.png';
			}
			image = new google.maps.MarkerImage(pluri + sym,
				new google.maps.Size(26, 28),
				new google.maps.Point(0,0),
				new google.maps.Point(7, 28));
			shadow = new google.maps.MarkerImage(pluri + 'img/trz_shw.png',
				new google.maps.Size(40, 28),
				new google.maps.Point(0,0),
				new google.maps.Point(7, 28));
		} else { //wpt marker
			isTrack = false;
			sym = trk.children("sym").html();
			if(escape(sym) >= 0 && escape(sym) < 28){
				symNo = parseInt(sym);
				sym = 'img/sym_'+sym+'.png';
			} else
				sym = 'img/sym_1.png';
			image = new google.maps.MarkerImage(pluri + sym,
				new google.maps.Size(20, 32),
				new google.maps.Point(0,0),
				new google.maps.Point(0, 32));
			shadow = new google.maps.MarkerImage(pluri + 'img/sym_shw.png',
				new google.maps.Size(37, 32),
				new google.maps.Point(0,0),
				new google.maps.Point(0, 32));
		}
		var marker = new google.maps.Marker({
			map: map, 
			icon: image,
			shadow: shadow,
			position: pos,
			symbol: symNo,
			title: title
		});
		marker.infowindow = new google.maps.InfoWindow({
			content: contentString
		});
		
		if(isTrack)
			maps[map.getDiv().id]["trk"].push(marker);
		else{
// altm will come later					marker.setVisible(false);
			maps[map.getDiv().id]["wpt"].push(marker);
		}
		
		google.maps.event.addListener(marker, 'click', function() {
			if(actinfowinmarker)
				actinfowinmarker.infowindow.close();
			marker.infowindow.open(map ,marker);
			actinfowinmarker = marker;
		});
	}
	function showGPX(map, uri){
		jQuery.ajax({
			type: "GET",
			url: uri,
			success: function(data) { 
				var gPath = [];
				maps[map.getDiv().id]["trk"] = new Array();
				maps[map.getDiv().id]["wpt"] = new Array();
				var xml = jQuery(data);
				var bounds = new google.maps.LatLngBounds ();
				// look for waypoints
				var trk = xml.children("trk");
				if (trk.length > 0){
					trk.each(function(){
						var trkseg = jQuery(this).children("trkseg");
						if (trkseg.length > 0){
							var actTrk = jQuery(this);
							var position = 0;
							var first = true;
							var color = "#cc3322";
							trkseg.each(function() {
								var trkpt = jQuery(this).children("trkpt");
								if (trkpt.length > 0){
									var points = [];
									points.length = 0;
									trkpt.each(function() {
										var lat = jQuery(this).attr("lat");
										var lon = jQuery(this).attr("lon");
										var p = new google.maps.LatLng(lat, lon);
										if(first){ 
											position = new google.maps.LatLng(lat, lon);
											first = false;
										}
										points.push(p);
										bounds.extend(p);
									});
									if(map['elevation']){
										gPath = gPath.concat(points);
									}
									var poly = new google.maps.Polyline({
										map : map,
										path: points,
										strokeColor: color,
										strokeOpacity: 0.7,
										strokeWeight: 3
									});
								}
							});
							setMarker(map, position, actTrk);
						}
					});
					if(map['elevation'] && gPath.length > 1){
						map['uri'] = uri;
						showElevation(map, gPath);
					} else if (map['download']){
						map['uri'] = uri;
						showDownload(map);
					}
				}
				// look for waypoints
				// fit bounds to track
				var wpt = xml.children("wpt");
				if (wpt.length > 0){
					wpt.each(function() {
						var lat = jQuery(this).attr("lat");
						var lon = jQuery(this).attr("lon");
						var p = new google.maps.LatLng(lat, lon);
						var position = new google.maps.LatLng(lat, lon);
						bounds.extend(p);
						setMarker(map, position, jQuery(this));
					});
				}
				if(!map["latlon"]){
					if(!map["bbox"].isEmpty)
						bounds.union(map["bbox"]);
					map["bbox"] = bounds;
					map.fitBounds(bounds);
				}
				google.maps.event.addListener(map, 'click', function() {
					if(actinfowinmarker)
						actinfowinmarker.infowindow.close();
				});
// altm will come later					moreControl(map);
			},
			complete:function (jqXHR, textStatus){
				/* enable for error check in loading gpx
				if(textStatus != "success")
					alert('Error: ' + jqXHR.responseText + ' + ' + textStatus);
				*/ 
			}    
		});	
	}

