function showTooltip(marker) 
{
	tooltip.innerHTML = '<div class="gtooltip">'+marker.tooltipText+'</div>';
	var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
	var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
	var anchor=marker.getIcon().iconAnchor;
	var width=marker.getIcon().iconSize.width;
	var height=tooltip.clientHeight;
	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);
	tooltip.style.visibility="visible";
}

function hookEvent(element, eventName, callback)
{
	if(typeof(element) == "string")
		element = document.getElementById(element);
	if(element == null)
		return;
	if(element.addEventListener)
	{
		if(eventName == 'mousewheel')
		element.addEventListener('DOMMouseScroll', callback, false);  
		element.addEventListener(eventName, callback, false);
	}
	else if(element.attachEvent)
		element.attachEvent("on" + eventName, callback);
}

function cancelEvent(e)
{
	e = e ? e : window.event;
	if(e.stopPropagation)
		e.stopPropagation();
	if(e.preventDefault)
		e.preventDefault();
	e.cancelBubble = true;
	e.cancel = true;
	e.returnValue = false;
	return false;
}

function printInfo(e)
{
    cancelEvent(e);
}

function chooseLineStyle(name, comment)
{
	if (comment == "BB" )
	{
		return(new Array("#00f0f0",5,.5));
	}
	return(new Array("#ff2000",6,.7));	// Color,Width,Opacity
}

function loadGpx(URL)
{
	//	Load and parse GPX file

	var request = GXmlHttp.create();
	request.open("GET", URL, true);
	request.onreadystatechange = function()
	{
		if (request.readyState == 4)
		{
			var gpxDoc = request.responseXML;
			if( !gpxDoc )
			{
				alert("Could not load GPX document " + URL);
			}
			else if( !gpxDoc.documentElement )
			{
				alert("Document " + URL + "\nwas not recognized by the XML loader");
			}
			else if( gpxDoc.documentElement.childNodes.length < 3 )
			{
				alert("The XML loader could not parse document " + URL);
			}
			else
			{
				//Do fancy bits
				//	Parse routes in <trkseg></trkseg>
				//
				var trkseg;
				trkseg = gpxDoc.documentElement.getElementsByTagName("trkseg");
				if (trkseg)
				{
					// Process each route
					//
					for (var i = 0; i < trkseg.length; i++)
					{
						tcolor="#ff2000";
						twidth=5;
						topacity=.5;
	
						// Extract <name></name> tag
						tname = "";
						element = trkseg[i].getElementsByTagName("name");
						if( element.length ) {
							if( element[0].firstChild ) {
								tname = element[0].firstChild.nodeValue;
								}
							}
	
						// Determine line color based on <cmt></cmt> and <name></name> tags
						type = trkseg[i].getElementsByTagName("cmt");
						if( type.length ) {
							if( type[0].firstChild ) {
								array    = chooseLineStyle( tname, type[0].firstChild.nodeValue );
								tcolor   = array[0];
								twidth   = array[1];
								topacity = array[2];
								}
							}
	
						// Process each point of each route, string 
						// them into a single polyline
						//
						points = [];
						var rtept = trkseg[i].getElementsByTagName("trkpt");
						for (var k = 0; k < rtept.length; k++) {
							points.push(new GPoint(
								parseFloat(rtept[k].getAttribute("lon")),
								parseFloat(rtept[k].getAttribute("lat"))));
							}
						map.addOverlay(new GPolyline(points, tcolor, twidth, topacity));
						points = [];
					}
					trkseg = []
				}
			}
		}
	}
	request.send(null);
}