function RouteViewer(map, points) {
    this.elevation_marker;
    
    this.points = points;

    this.map = map;

    this.map.setCenter(new GLatLng(this.points[0][0], this.points[0][1]), 15);

    this.plotRoute();

}      

RouteViewer.prototype.plotRoute = function() {
    var points = new Array();
    for (var i = 0; i < this.points.length; i++) {
        var point = new GLatLng(this.points[i][0], this.points[i][1]);
        points.push(point);                                           
        
        if (i == 0)
        {
            var icon = new MapIcon('green-start');            
            var gmarker = new GMarker(point, icon); 
            this.map.addOverlay(gmarker);
        }
        else if (i == (this.points.length-1))
        {
            if (this.points[i][0] == this.points[0][0] && this.points[i][1] == this.points[0][1])
            {
                var icon = new MapIcon('red-end-alt');                              
            }                                                   
            else
            {
                var icon = new MapIcon('red-end');                    
            }

            var gmarker = new GMarker(point, icon); 
            this.map.addOverlay(gmarker);
        }                                  
    }
    
    var route = new GPolyline(points, "#FF0000", 3);
    this.map.addOverlay(route);   
    this.setRouteBounds();
}

RouteViewer.prototype.elevationMarker = function(position) {
    
    this.map.removeOverlay(this.elevation_marker);
    
    var icon  = new MapIcon('gray');
    var point = new GLatLng(this.points[position][0], this.points[position][1]);
    
    this.elevation_marker = new GMarker(point, icon); 
    
    this.map.panTo(point);
    this.map.addOverlay(this.elevation_marker);
}

RouteViewer.prototype.setRouteBounds = function() {
    var lats = new Array();
    var lngs = new Array();
    
    function sortNumber(a, b)
    {
        return a - b;
    }
    
    for (var i = 0; i < this.points.length; i++) {
        lats.push(this.points[i][0]);
        lngs.push(this.points[i][1]);
    } 
          
    lats = lats.sort(sortNumber);
    lngs = lngs.sort(sortNumber);
    
    var latMin = lats[0];
    var latMax = lats[lats.length-1];
    var lngMin = lngs[0];
    var lngMax = lngs[lngs.length-1];
    var latCenter = (latMin + latMax)/2;
    var lngCenter = (lngMin + lngMax)/2;
    
    var south_west_point = new GLatLng(latMin, lngMin); 
    var north_east_point = new GLatLng(latMax, lngMax); 
    var lat_lng_bounds = new GLatLngBounds(south_west_point, north_east_point);
    zoom_level = this.map.getBoundsZoomLevel(lat_lng_bounds);
    
    this.map.setCenter(new GLatLng(latCenter, lngCenter), zoom_level);
}
