/// <summary>
 /// Handles a "Find Shortest Path" event.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void uxFindPath_Click(object sender, EventArgs e)
 {
     if (!_map.ContainsNode(uxStartNode.Text))
     {
         ShowError(uxStartNode.Text);
     }
     else if (!_map.ContainsNode(uxEndNode.Text))
     {
         ShowError(uxEndNode.Text);
     }
     else
     {
         Dictionary <string, string> paths;
         decimal len = Math.Round(ShortestPath(uxStartNode.Text, uxEndNode.Text, _map, out paths), 1);
         uxNodeList.Items.Clear();
         if (len < 0)
         {
             uxDistance.Text = "";
             MessageBox.Show("No path found.");
         }
         else
         {
             uxDistance.Text = len + _distanceUnit;
             uxNodeList.BeginUpdate();
             AddPath(uxStartNode.Text, uxEndNode.Text, paths, uxNodeList.Items);
             uxNodeList.EndUpdate();
         }
     }
 }
 /// <summary>
 /// Handles a Navigated event on the map.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void uxMap_Navigated(object sender, WebBrowserNavigatedEventArgs e)
 {
     if (uxMap.Url.Host == _mapServerHost)
     {
         bool viewingNode = uxMap.Url.AbsolutePath.StartsWith(_nodePrefix) &&
                            _map.ContainsNode(uxMap.Url.AbsolutePath.Substring(_nodePrefix.Length));
         uxSetStart.Enabled = viewingNode;
         uxSetEnd.Enabled   = viewingNode;
     }
     else
     {
         uxSetStart.Enabled = false;
         uxSetEnd.Enabled   = false;
         uxFindPath.Enabled = false;
     }
 }