Index: /trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 646)
+++ /trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 647)
@@ -9,4 +9,5 @@
 
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
 
 /**
@@ -99,3 +100,45 @@
 		}
 	}
+    
+    /**
+     * calculates the sum of the lengths of all track segments
+     */
+    public double length(){
+        double result = 0.0; // in meters
+        WayPoint last = null;
+		
+        for (GpxTrack trk : tracks) {
+            for (Collection<WayPoint> trkseg : trk.trackSegs) {
+                for (WayPoint tpt : trkseg) {
+                    if(last != null){
+                        result += calcDistance(last.latlon, tpt.latlon);
+                    }
+                    last = tpt;
+                }
+                last = null; // restart for each track segment
+            }
+        }
+        return result;
+    }
+
+    /**
+     * returns the distance in meters between two LatLons
+     */
+    public static double calcDistance(LatLon p1, LatLon p2){
+        double lat1, lon1, lat2, lon2;
+        double dlon, dlat;
+	    
+        lat1 = p1.lat() * Math.PI / 180.0;
+        lon1 = p1.lon() * Math.PI / 180.0;
+        lat2 = p2.lat() * Math.PI / 180.0;
+        lon2 = p2.lon() * Math.PI / 180.0;
+
+        dlon = lon2 - lon1;
+        dlat = lat2 - lat1;
+
+        double a = (Math.pow(Math.sin(dlat/2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon/2), 2));
+        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
+        return 6367000 * c;
+    }
+
 }
Index: /trunk/src/org/openstreetmap/josm/data/gpx/WayPoint.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/gpx/WayPoint.java	(revision 646)
+++ /trunk/src/org/openstreetmap/josm/data/gpx/WayPoint.java	(revision 647)
@@ -13,5 +13,5 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 
-public class WayPoint extends WithAttributes {
+public class WayPoint extends WithAttributes implements Comparable{
 	
 	public final LatLon latlon;
@@ -50,3 +50,10 @@
 	}
 
+    public int compareTo(Object other){
+        if(other instanceof WayPoint){
+            WayPoint w = (WayPoint)other;
+            return (int)time - (int)w.time;
+        }
+        return 0;
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 646)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 647)
@@ -26,4 +26,7 @@
 import java.util.Comparator;
 import java.util.LinkedList;
+import java.util.Date;
+import java.text.DateFormat;
+import java.text.DecimalFormat;
 
 import javax.swing.AbstractAction;
@@ -279,4 +282,33 @@
 				.append("<br>");
 
+                if(data.tracks.size() > 0){
+                    boolean first = true;
+                    WayPoint earliest = null, latest = null;
+
+                    for(GpxTrack trk: data.tracks){
+                        for(Collection<WayPoint> seg:trk.trackSegs){
+                            for(WayPoint pnt:seg){
+                                if(first){
+                                    latest = earliest = pnt;
+                                    first = false;
+                                }else{
+                                    if(pnt.compareTo(earliest) < 0){
+                                        earliest = pnt;
+                                    }else{
+                                        latest = pnt;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
+                    info.append(tr("Timespan: ") + df.format(new Date((long)(earliest.time * 1000))) + " - " + df.format(new Date((long)(latest.time * 1000))));
+                    int diff = (int)(latest.time - earliest.time);
+                    info.append(" (" + (diff / 3600) + ":" + ((diff % 3600)/60) + ")");
+                    info.append("<br>");
+                }
+                info.append(tr("Length: ") + new DecimalFormat("#0.00").format(data.length() / 1000) + "km");
+                info.append("<br>");
+                
 		return info.append("</html>").toString();
 	}
