<%

    Dim Map : Set Map = OpenMap()

    Dim oRouting, DSeg, rProblem, i, rStop, RouteID, r, DDirs

    ' get the RoutingProblem object
    Set rProblem = Map.getRouting().createRoutingProblem()

    ' set routing stops array
    Dim stops() : ReDim stops(2)

    Set stops(0) = new GeoLocation : stops(0).init "Redlands, CA", 34.0528, -117.1531
    Set stops(1) = new GeoLocation : stops(1).init "Redlands, CO", 39.0854, -108.6515

    ' add routing stops
    For i = 0 To UBound( stops) - 1

        Set rStop = Server.CreateObject("RMIMS.RoutingStop")
        rStop.setStop createPoint( stops(i).x, stops(i).y)
        rStop.setLabel stops(i).label
        rProblem.addStop (rStop)

    Next
	
    rProblem.setHighwayPreference 50
    rProblem.setWeight rmShortest ' to find quickest use rmQuickest

    rProblem.setOptimize false ' no optimization
    
    ' Trip planning *****************************************************************

    rProblem.setTripStart( createTime( 8, 0, 0))
    rProblem.setDayDriveStart( createTimeSpan( 0, 8, 30, 0))
    rProblem.setDayDriveEnd( createTimeSpan( 0, 17, 0, 0))
    rProblem.setDriveBetweenRest( createTimeSpan( 0, 3, 0, 0))
    rProblem.setRestDuration( createTimeSpan( 0, 0, 30, 0))
    rProblem.setDriveFlexibility( createTimeSpan( 0, 0, 30, 0))
    rProblem.enableRestBreaks true
    rProblem.enableTripPlanning true

    '********************************************************************************
    
    Set Routing = Map.getRouting()
    RouteID = Routing.findRoute((rProblem), true, -1)

    ' show the route
    Routing.setRoute RouteID
    Set r = Routing.getDrivingDirections( RouteID).getExtent()
    Map.setExtent inflateRect(r, 10) ' increase borders

    ' print driving directions
    Set DDirs = Routing.getDrivingDirections( RouteID)
	
    Response.Write( "<p>"&DDirs.getStartText()&"<br>"&vbCrLf)
    Response.Write( DDirs.getFinishText()&"<br>"&vbCrLf)
    Response.Write( DDirs.getTotalText()&"<p>"&vbCrLf)

    For i = 0 To DDirs.getSegmentCount()-1

        Set DSeg = DDirs.getSegment( i)
        Response.Write( (i+1) & ". " & DSeg.getText()+"<br>"&vbCrLf)
        ' if there is TimeLengthText
        If DSeg.getSegmentType <> rmArrive AND _
           DSeg.getSegmentType() <> rmDepart Then 
            Response.Write( DSeg.getTimeLengthText()&"<br>"&vbCrLf)
        End If
    Next

    Class GeoLocation

        Public label
        Public x
        Public y	
    
        Public Function init( ilabel, ilat, ilon)
            Set proj = Map.getProjection()
            Set pt = proj.project( ilat, ilon)
            label = ilabel
            x = pt.x
            y = pt.y
        End Function

    End Class


    Function inflateRect(ByRef r, percVal)

        Dim dx, dy

        dx = ((r.right - r.left) * percVal) / 100.0
        dy = ((r.top - r.bottom) * percVal) / 100.0

        r.left   = r.left   - dx
        r.top    = r.top    + dy
        r.right  = r.right  + dx
        r.bottom = r.bottom - dy

        Set inflateRect = r
	
    End Function

    Function createPoint(x, y)

        Dim pt
        Set pt = Server.CreateObject("RMIMS.GeoPoint")

        pt.x = x
        pt.y = y

        Set createPoint = pt
	
    End Function


    Function createTimeSpan( days, hours, minutes, seconds)

        Dim ts
        Set ts = Server.CreateObject( "RMIMS.TimeSpan")
        ts.setDays days
        ts.setHours hours
        ts.setMinutes minutes
        ts.setSeconds seconds
        
        Set createTimeSpan = ts
        
    End Function
    
    Function createTime( hours, minutes, seconds)

        Dim t
        Set t  = Server.CreateObject( "RMIMS.Time")
        t.setHours hours
        t.setMinutes minutes
        t.setSeconds seconds
        
        Set createTime = t

    End Function
%>


<img src="<%= Map.getMapImageURL(Map.getImageWidth(), Map.getImageHeight(), rmDefault)%>"
width="<%=Map.getImageWidth()%>" height="<%=Map.getImageHeight()%>">