/*
gmap_v3_gpx_overlay.js, V 1.04, altm, 18.10.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;
	var maps = new Array();

	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) { 
				maps[map.getDiv().id] = new Array();
				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);
										});
										var poly = new google.maps.Polyline({
											map : map,
											path: points,
											strokeColor: color,
											strokeOpacity: 0.7,
											strokeWeight: 3
										});
									}
								});
								setMarker(map, position, actTrk);
							}
						});
					}
					// 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));
						});
					}
					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);
					*/ 
				}    
			});	
	}
