ArcGIS Network Analyst extension Engine application
frmNALayerProperties.vb
' Copyright 2012 ESRI
' 
' All rights reserved under the copyright laws of the United States
' and applicable international laws, treaties, and conventions.
' 
' You may freely redistribute and use this sample code, with or
' without modification, provided you include the original copyright
' notice and use restrictions.
' 
' See the use restrictions.
' 

Imports Microsoft.VisualBasic
Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports ESRI.ArcGIS.NetworkAnalyst
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.esriSystem
Imports System.Collections.Generic

' This form allows users to change the NALayer/NAContext/NASolver properties

Namespace NAEngine
  ''' <summary>
  ''' Summary description for frmNALayerProperties.
  ''' </summary>
  Public Class frmNALayerProperties
    Inherits System.Windows.Forms.Form
    #Region "Windows Form Designer generated code (defining controls)"
    ''' <summary>
    ''' Required designer variable.
    ''' </summary>
    Private tabPropPages As TabControl
    Private tabGeneral As TabPage
    Private tabRoute As TabPage
    Private tabServiceArea As TabPage
    Private tabClosestFacility As TabPage
    Private tabODCostMatrix As TabPage
    Private tabVRP As TabPage
    Private WithEvents btnOK As Button
    Private WithEvents btnCancel As Button
    Private chkRouteIgnoreInvalidLocations As CheckBox
    Private cboRouteRestrictUTurns As ComboBox
    Private lblRouteRestrictUTurns As Label
    Private lblRouteAccumulateAttributeNames As Label
    Private chklstRouteAccumulateAttributeNames As CheckedListBox
    Private lblRouteRestrictionAttributeNames As Label
    Private chklstRouteRestrictionAttributeNames As CheckedListBox
    Private cboRouteImpedance As ComboBox
    Private lblRouteImpedance As Label
    Private chkRouteUseHierarchy As CheckBox
    Private labelRouteOutputLines As Label
    Private cboRouteOutputLines As ComboBox
    Private chkRouteUseTimeWindows As CheckBox
    Private chkRoutePreserveLastStop As CheckBox
    Private chkRoutePreserveFirstStop As CheckBox
    Private WithEvents chkRouteFindBestSequence As CheckBox
    Private WithEvents chkRouteUseStartTime As CheckBox
    Private txtRouteStartTime As TextBox
    Private txtLayerName As TextBox
    Private lblLayerName As Label
    Private components As System.ComponentModel.Container = Nothing
    Private cboCFOutputLines As ComboBox
    Private lblCFOutputLines As Label
    Private cboCFTravelDirection As ComboBox
    Private lblCFTravelDirection As Label
    Private txtCFDefaultTargetFacilityCount As TextBox
    Private lblCFDefaultTargetFacilityCount As Label
    Private txtCFDefaultCutoff As TextBox
    Private lblCFDefaultCutoff As Label
    Private chkCFIgnoreInvalidLocations As CheckBox
    Private cboCFRestrictUTurns As ComboBox
    Private lblCFRestrictUTurns As Label
    Private lblCFAccumulateAttributeNames As Label
    Private chklstCFAccumulateAttributeNames As CheckedListBox
    Private lblCFRestrictionAttributeNames As Label
    Private chklstCFRestrictionAttributeNames As CheckedListBox
    Private cboCFImpedance As ComboBox
    Private lblCFImpedance As Label
    Private chkCFUseHierarchy As CheckBox
    Private chkODIgnoreInvalidLocations As CheckBox
    Private cboODRestrictUTurns As ComboBox
    Private lblODRestrictUTurns As Label
    Private lblODAccumulateAttributeNames As Label
    Private chklstODAccumulateAttributeNames As CheckedListBox
    Private lblODRestrictionAttributeNames As Label
    Private chklstODRestrictionAttributeNames As CheckedListBox
    Private cboODImpedance As ComboBox
    Private lblODImpedance As Label
    Private chkODUseHierarchy As CheckBox
    Private cboODOutputLines As ComboBox
    Private lblODOutputLines As Label
    Private txtODDefaultTargetDestinationCount As TextBox
    Private lblODDefaultTargetDestinationCount As Label
    Private txtODDefaultCutoff As TextBox
    Private lblODDefaultCutoff As Label
    Private txtSADefaultBreaks As TextBox
    Private lblSADefaultBreaks As Label
    Private cboSAImpedance As ComboBox
    Private lblSAImpedance As Label
    Private lblSAOutputPolygons As Label
    Private WithEvents cboSAOutputPolygons As ComboBox
    Private lblSAOutputLines As Label
    Private WithEvents cboSAOutputLines As ComboBox
    Private chkSAMergeSimilarPolygonRanges As CheckBox
    Private chkSAIgnoreInvalidLocations As CheckBox
    Private cboSARestrictUTurns As ComboBox
    Private lblSARestrictUTurns As Label
    Private lblSAAccumulateAttributeNames As Label
    Private chklstSAAccumulateAttributeNames As CheckedListBox
    Private lblSARestrictionAttributeNames As Label
    Private chklstSARestrictionAttributeNames As CheckedListBox
    Private chkSAOverlapLines As CheckBox
    Private chkSASplitPolygonsAtBreaks As CheckBox
    Private chkSAOverlapPolygons As CheckBox
    Private chkSASplitLinesAtBreaks As CheckBox
    Private cboSATrimPolygonDistanceUnits As ComboBox
    Private txtSATrimPolygonDistance As TextBox
    Private chkSATrimOuterPolygon As CheckBox
    Private chkSAIncludeSourceInformationOnLines As CheckBox
    Private cboSATravelDirection As ComboBox
    Private lblSATravelDirection As Label
    Private lblMaxSearchTolerance As Label
    Private cboMaxSearchToleranceUnits As ComboBox
    Private gbSettings As GroupBox
    Private chkVRPUseHierarchy As CheckBox
    Private cboVRPOutputShapeType As ComboBox
    Private cboVRPAllowUTurns As ComboBox
    Private cboVRPTimeFieldUnits As ComboBox
    Private txtVRPCapacityCount As TextBox
    Private txtVRPDefaultDate As TextBox
    Private cboVRPDistanceAttribute As ComboBox
    Private cboVRPTimeAttribute As ComboBox
    Private label7 As Label
    Private label6 As Label
    Private label5 As Label
    Private label4 As Label
    Private label3 As Label
    Private label2 As Label
    Private label1 As Label
    Private lblTimeAttribute As Label
    Private gbRestrictions As GroupBox
    Private chklstVRPRestrictionAttributeNames As CheckedListBox
    Private cboVRPTimeWindow As ComboBox
    Private label10 As Label
    Private label9 As Label
    Private cboVRPTransitTime As ComboBox
    Private cboVRPDistanceFieldUnits As ComboBox
    Private tabLocationAllocation As TabPage
    Private lblTargetMarketShare As Label
    Private txtLATargetMarketShare As TextBox
    Private cboLAImpTransformation As ComboBox
    Private lblImpParameter As Label
    Private txtLAImpParameter As TextBox
    Private lblImpTransformation As Label
    Private lblCostAttribute As Label
    Private cboLAImpedance As ComboBox
    Private lblProblemType As Label
    Private WithEvents cboLAProblemType As ComboBox
    Private lblCutOff As Label
    Private txtLACutOff As TextBox
    Private lblNumFacilities As Label
    Private txtLAFacilitiesToLocate As TextBox
    Private cboLAOutputLines As ComboBox
    Private label11 As Label
    Private cboLATravelDirection As ComboBox
    Private label12 As Label
    Private lblLAAccumulateAttributeNames As Label
    Private chklstLAAccumulateAttributeNames As CheckedListBox
    Private lblLARestrictionAttributeNames As Label
    Private chklstLARestrictionAttributeNames As CheckedListBox
    Private chkLAUseHierarchy As CheckBox
    Private grpLASettings As GroupBox
        Private chkLAIgnoreInvalidLocations As CheckBox
        Private WithEvents label13 As System.Windows.Forms.Label
        Private WithEvents label8 As System.Windows.Forms.Label
        Private WithEvents cboCFTimeUsage As System.Windows.Forms.ComboBox
        Private WithEvents txtCFUseTime As System.Windows.Forms.TextBox
        Private WithEvents chkODUseTime As System.Windows.Forms.CheckBox
        Private WithEvents txtODUseTime As System.Windows.Forms.TextBox
        Private WithEvents chkSAUseTime As System.Windows.Forms.CheckBox
        Private WithEvents txtSAUseTime As System.Windows.Forms.TextBox
        Private WithEvents chkLAUseTime As System.Windows.Forms.CheckBox
        Private WithEvents txtLAUseTime As System.Windows.Forms.TextBox
        Friend WithEvents tabAttributeParameters As System.Windows.Forms.TabPage
        Private WithEvents attributeParameterGrid As System.Windows.Forms.DataGridView
        Private WithEvents dgvcAttribute As System.Windows.Forms.DataGridViewTextBoxColumn
        Private WithEvents dgvcParameter As System.Windows.Forms.DataGridViewTextBoxColumn
        Private WithEvents dgvcValue As System.Windows.Forms.DataGridViewTextBoxColumn
        Private WithEvents label14 As System.Windows.Forms.Label
        Private WithEvents btnReset As System.Windows.Forms.Button
        Private txtMaxSearchTolerance As TextBox

#End Region

#Region "Windows Form Designer generated code (InitializeComponent)"
        ''' <summary>
        ''' Required method for Designer support - do not modify
        ''' the contents of this method with the code editor.
        ''' </summary>
        Private Sub InitializeComponent()
            Me.tabPropPages = New System.Windows.Forms.TabControl()
            Me.tabGeneral = New System.Windows.Forms.TabPage()
            Me.lblMaxSearchTolerance = New System.Windows.Forms.Label()
            Me.cboMaxSearchToleranceUnits = New System.Windows.Forms.ComboBox()
            Me.txtMaxSearchTolerance = New System.Windows.Forms.TextBox()
            Me.txtLayerName = New System.Windows.Forms.TextBox()
            Me.lblLayerName = New System.Windows.Forms.Label()
            Me.tabRoute = New System.Windows.Forms.TabPage()
            Me.labelRouteOutputLines = New System.Windows.Forms.Label()
            Me.cboRouteOutputLines = New System.Windows.Forms.ComboBox()
            Me.chkRouteUseTimeWindows = New System.Windows.Forms.CheckBox()
            Me.chkRoutePreserveLastStop = New System.Windows.Forms.CheckBox()
            Me.chkRoutePreserveFirstStop = New System.Windows.Forms.CheckBox()
            Me.chkRouteFindBestSequence = New System.Windows.Forms.CheckBox()
            Me.chkRouteUseStartTime = New System.Windows.Forms.CheckBox()
            Me.txtRouteStartTime = New System.Windows.Forms.TextBox()
            Me.chkRouteIgnoreInvalidLocations = New System.Windows.Forms.CheckBox()
            Me.cboRouteRestrictUTurns = New System.Windows.Forms.ComboBox()
            Me.lblRouteRestrictUTurns = New System.Windows.Forms.Label()
            Me.lblRouteAccumulateAttributeNames = New System.Windows.Forms.Label()
            Me.chklstRouteAccumulateAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.lblRouteRestrictionAttributeNames = New System.Windows.Forms.Label()
            Me.chklstRouteRestrictionAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.cboRouteImpedance = New System.Windows.Forms.ComboBox()
            Me.lblRouteImpedance = New System.Windows.Forms.Label()
            Me.chkRouteUseHierarchy = New System.Windows.Forms.CheckBox()
            Me.tabClosestFacility = New System.Windows.Forms.TabPage()
            Me.label13 = New System.Windows.Forms.Label()
            Me.label8 = New System.Windows.Forms.Label()
            Me.cboCFTimeUsage = New System.Windows.Forms.ComboBox()
            Me.txtCFUseTime = New System.Windows.Forms.TextBox()
            Me.chkCFIgnoreInvalidLocations = New System.Windows.Forms.CheckBox()
            Me.cboCFRestrictUTurns = New System.Windows.Forms.ComboBox()
            Me.lblCFRestrictUTurns = New System.Windows.Forms.Label()
            Me.lblCFAccumulateAttributeNames = New System.Windows.Forms.Label()
            Me.chklstCFAccumulateAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.lblCFRestrictionAttributeNames = New System.Windows.Forms.Label()
            Me.chklstCFRestrictionAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.cboCFImpedance = New System.Windows.Forms.ComboBox()
            Me.lblCFImpedance = New System.Windows.Forms.Label()
            Me.chkCFUseHierarchy = New System.Windows.Forms.CheckBox()
            Me.cboCFOutputLines = New System.Windows.Forms.ComboBox()
            Me.lblCFOutputLines = New System.Windows.Forms.Label()
            Me.cboCFTravelDirection = New System.Windows.Forms.ComboBox()
            Me.lblCFTravelDirection = New System.Windows.Forms.Label()
            Me.txtCFDefaultTargetFacilityCount = New System.Windows.Forms.TextBox()
            Me.lblCFDefaultTargetFacilityCount = New System.Windows.Forms.Label()
            Me.txtCFDefaultCutoff = New System.Windows.Forms.TextBox()
            Me.lblCFDefaultCutoff = New System.Windows.Forms.Label()
            Me.tabODCostMatrix = New System.Windows.Forms.TabPage()
            Me.chkODUseTime = New System.Windows.Forms.CheckBox()
            Me.txtODUseTime = New System.Windows.Forms.TextBox()
            Me.chkODIgnoreInvalidLocations = New System.Windows.Forms.CheckBox()
            Me.cboODRestrictUTurns = New System.Windows.Forms.ComboBox()
            Me.lblODRestrictUTurns = New System.Windows.Forms.Label()
            Me.lblODAccumulateAttributeNames = New System.Windows.Forms.Label()
            Me.chklstODAccumulateAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.lblODRestrictionAttributeNames = New System.Windows.Forms.Label()
            Me.chklstODRestrictionAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.cboODImpedance = New System.Windows.Forms.ComboBox()
            Me.lblODImpedance = New System.Windows.Forms.Label()
            Me.chkODUseHierarchy = New System.Windows.Forms.CheckBox()
            Me.cboODOutputLines = New System.Windows.Forms.ComboBox()
            Me.lblODOutputLines = New System.Windows.Forms.Label()
            Me.txtODDefaultTargetDestinationCount = New System.Windows.Forms.TextBox()
            Me.lblODDefaultTargetDestinationCount = New System.Windows.Forms.Label()
            Me.txtODDefaultCutoff = New System.Windows.Forms.TextBox()
            Me.lblODDefaultCutoff = New System.Windows.Forms.Label()
            Me.tabServiceArea = New System.Windows.Forms.TabPage()
            Me.chkSAUseTime = New System.Windows.Forms.CheckBox()
            Me.txtSAUseTime = New System.Windows.Forms.TextBox()
            Me.cboSATrimPolygonDistanceUnits = New System.Windows.Forms.ComboBox()
            Me.txtSATrimPolygonDistance = New System.Windows.Forms.TextBox()
            Me.chkSATrimOuterPolygon = New System.Windows.Forms.CheckBox()
            Me.chkSAIncludeSourceInformationOnLines = New System.Windows.Forms.CheckBox()
            Me.cboSATravelDirection = New System.Windows.Forms.ComboBox()
            Me.lblSATravelDirection = New System.Windows.Forms.Label()
            Me.chkSASplitPolygonsAtBreaks = New System.Windows.Forms.CheckBox()
            Me.chkSAOverlapPolygons = New System.Windows.Forms.CheckBox()
            Me.chkSASplitLinesAtBreaks = New System.Windows.Forms.CheckBox()
            Me.chkSAOverlapLines = New System.Windows.Forms.CheckBox()
            Me.chkSAIgnoreInvalidLocations = New System.Windows.Forms.CheckBox()
            Me.cboSARestrictUTurns = New System.Windows.Forms.ComboBox()
            Me.lblSARestrictUTurns = New System.Windows.Forms.Label()
            Me.lblSAAccumulateAttributeNames = New System.Windows.Forms.Label()
            Me.chklstSAAccumulateAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.lblSARestrictionAttributeNames = New System.Windows.Forms.Label()
            Me.chklstSARestrictionAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.lblSAOutputPolygons = New System.Windows.Forms.Label()
            Me.cboSAOutputPolygons = New System.Windows.Forms.ComboBox()
            Me.lblSAOutputLines = New System.Windows.Forms.Label()
            Me.cboSAOutputLines = New System.Windows.Forms.ComboBox()
            Me.chkSAMergeSimilarPolygonRanges = New System.Windows.Forms.CheckBox()
            Me.txtSADefaultBreaks = New System.Windows.Forms.TextBox()
            Me.lblSADefaultBreaks = New System.Windows.Forms.Label()
            Me.cboSAImpedance = New System.Windows.Forms.ComboBox()
            Me.lblSAImpedance = New System.Windows.Forms.Label()
            Me.tabVRP = New System.Windows.Forms.TabPage()
            Me.gbRestrictions = New System.Windows.Forms.GroupBox()
            Me.chklstVRPRestrictionAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.gbSettings = New System.Windows.Forms.GroupBox()
            Me.cboVRPDistanceFieldUnits = New System.Windows.Forms.ComboBox()
            Me.cboVRPTransitTime = New System.Windows.Forms.ComboBox()
            Me.cboVRPTimeWindow = New System.Windows.Forms.ComboBox()
            Me.label10 = New System.Windows.Forms.Label()
            Me.label9 = New System.Windows.Forms.Label()
            Me.chkVRPUseHierarchy = New System.Windows.Forms.CheckBox()
            Me.cboVRPOutputShapeType = New System.Windows.Forms.ComboBox()
            Me.cboVRPAllowUTurns = New System.Windows.Forms.ComboBox()
            Me.cboVRPTimeFieldUnits = New System.Windows.Forms.ComboBox()
            Me.txtVRPCapacityCount = New System.Windows.Forms.TextBox()
            Me.txtVRPDefaultDate = New System.Windows.Forms.TextBox()
            Me.cboVRPDistanceAttribute = New System.Windows.Forms.ComboBox()
            Me.cboVRPTimeAttribute = New System.Windows.Forms.ComboBox()
            Me.label7 = New System.Windows.Forms.Label()
            Me.label6 = New System.Windows.Forms.Label()
            Me.label5 = New System.Windows.Forms.Label()
            Me.label4 = New System.Windows.Forms.Label()
            Me.label3 = New System.Windows.Forms.Label()
            Me.label2 = New System.Windows.Forms.Label()
            Me.label1 = New System.Windows.Forms.Label()
            Me.lblTimeAttribute = New System.Windows.Forms.Label()
            Me.tabLocationAllocation = New System.Windows.Forms.TabPage()
            Me.chkLAUseTime = New System.Windows.Forms.CheckBox()
            Me.txtLAUseTime = New System.Windows.Forms.TextBox()
            Me.chkLAIgnoreInvalidLocations = New System.Windows.Forms.CheckBox()
            Me.grpLASettings = New System.Windows.Forms.GroupBox()
            Me.lblTargetMarketShare = New System.Windows.Forms.Label()
            Me.txtLATargetMarketShare = New System.Windows.Forms.TextBox()
            Me.cboLAImpTransformation = New System.Windows.Forms.ComboBox()
            Me.lblImpParameter = New System.Windows.Forms.Label()
            Me.txtLAImpParameter = New System.Windows.Forms.TextBox()
            Me.lblImpTransformation = New System.Windows.Forms.Label()
            Me.lblProblemType = New System.Windows.Forms.Label()
            Me.cboLAProblemType = New System.Windows.Forms.ComboBox()
            Me.lblCutOff = New System.Windows.Forms.Label()
            Me.txtLACutOff = New System.Windows.Forms.TextBox()
            Me.lblNumFacilities = New System.Windows.Forms.Label()
            Me.txtLAFacilitiesToLocate = New System.Windows.Forms.TextBox()
            Me.chkLAUseHierarchy = New System.Windows.Forms.CheckBox()
            Me.lblLAAccumulateAttributeNames = New System.Windows.Forms.Label()
            Me.chklstLAAccumulateAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.lblLARestrictionAttributeNames = New System.Windows.Forms.Label()
            Me.chklstLARestrictionAttributeNames = New System.Windows.Forms.CheckedListBox()
            Me.cboLAOutputLines = New System.Windows.Forms.ComboBox()
            Me.label11 = New System.Windows.Forms.Label()
            Me.cboLATravelDirection = New System.Windows.Forms.ComboBox()
            Me.label12 = New System.Windows.Forms.Label()
            Me.lblCostAttribute = New System.Windows.Forms.Label()
            Me.cboLAImpedance = New System.Windows.Forms.ComboBox()
            Me.tabAttributeParameters = New System.Windows.Forms.TabPage()
            Me.btnReset = New System.Windows.Forms.Button()
            Me.attributeParameterGrid = New System.Windows.Forms.DataGridView()
            Me.dgvcAttribute = New System.Windows.Forms.DataGridViewTextBoxColumn()
            Me.dgvcParameter = New System.Windows.Forms.DataGridViewTextBoxColumn()
            Me.dgvcValue = New System.Windows.Forms.DataGridViewTextBoxColumn()
            Me.label14 = New System.Windows.Forms.Label()
            Me.btnOK = New System.Windows.Forms.Button()
            Me.btnCancel = New System.Windows.Forms.Button()
            Me.tabPropPages.SuspendLayout()
            Me.tabGeneral.SuspendLayout()
            Me.tabRoute.SuspendLayout()
            Me.tabClosestFacility.SuspendLayout()
            Me.tabODCostMatrix.SuspendLayout()
            Me.tabServiceArea.SuspendLayout()
            Me.tabVRP.SuspendLayout()
            Me.gbRestrictions.SuspendLayout()
            Me.gbSettings.SuspendLayout()
            Me.tabLocationAllocation.SuspendLayout()
            Me.grpLASettings.SuspendLayout()
            Me.tabAttributeParameters.SuspendLayout()
            CType(Me.attributeParameterGrid, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'tabPropPages
            '
            Me.tabPropPages.Controls.Add(Me.tabGeneral)
            Me.tabPropPages.Controls.Add(Me.tabRoute)
            Me.tabPropPages.Controls.Add(Me.tabClosestFacility)
            Me.tabPropPages.Controls.Add(Me.tabODCostMatrix)
            Me.tabPropPages.Controls.Add(Me.tabServiceArea)
            Me.tabPropPages.Controls.Add(Me.tabVRP)
            Me.tabPropPages.Controls.Add(Me.tabLocationAllocation)
            Me.tabPropPages.Controls.Add(Me.tabAttributeParameters)
            Me.tabPropPages.Location = New System.Drawing.Point(8, 8)
            Me.tabPropPages.Name = "tabPropPages"
            Me.tabPropPages.SelectedIndex = 0
            Me.tabPropPages.Size = New System.Drawing.Size(720, 499)
            Me.tabPropPages.TabIndex = 0
            '
            'tabGeneral
            '
            Me.tabGeneral.Controls.Add(Me.lblMaxSearchTolerance)
            Me.tabGeneral.Controls.Add(Me.cboMaxSearchToleranceUnits)
            Me.tabGeneral.Controls.Add(Me.txtMaxSearchTolerance)
            Me.tabGeneral.Controls.Add(Me.txtLayerName)
            Me.tabGeneral.Controls.Add(Me.lblLayerName)
            Me.tabGeneral.Location = New System.Drawing.Point(4, 22)
            Me.tabGeneral.Name = "tabGeneral"
            Me.tabGeneral.Size = New System.Drawing.Size(712, 473)
            Me.tabGeneral.TabIndex = 0
            Me.tabGeneral.Text = "General"
            Me.tabGeneral.UseVisualStyleBackColor = True
            '
            'lblMaxSearchTolerance
            '
            Me.lblMaxSearchTolerance.Location = New System.Drawing.Point(24, 64)
            Me.lblMaxSearchTolerance.Name = "lblMaxSearchTolerance"
            Me.lblMaxSearchTolerance.Size = New System.Drawing.Size(100, 24)
            Me.lblMaxSearchTolerance.TabIndex = 123
            Me.lblMaxSearchTolerance.Text = "Search Tolerance"
            '
            'cboMaxSearchToleranceUnits
            '
            Me.cboMaxSearchToleranceUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboMaxSearchToleranceUnits.ItemHeight = 13
            Me.cboMaxSearchToleranceUnits.Items.AddRange(New Object() {"Unknown Units", "Inches", "Points", "Feet", "Yards", "Miles", "Nautical Miles", "Millimeters", "Centimeters", "Meters", "Kilometers", "DecimalDegrees", "Decimeters"})
            Me.cboMaxSearchToleranceUnits.Location = New System.Drawing.Point(258, 61)
            Me.cboMaxSearchToleranceUnits.Name = "cboMaxSearchToleranceUnits"
            Me.cboMaxSearchToleranceUnits.Size = New System.Drawing.Size(130, 21)
            Me.cboMaxSearchToleranceUnits.TabIndex = 122
            '
            'txtMaxSearchTolerance
            '
            Me.txtMaxSearchTolerance.Location = New System.Drawing.Point(130, 62)
            Me.txtMaxSearchTolerance.Name = "txtMaxSearchTolerance"
            Me.txtMaxSearchTolerance.Size = New System.Drawing.Size(122, 20)
            Me.txtMaxSearchTolerance.TabIndex = 121
            '
            'txtLayerName
            '
            Me.txtLayerName.Location = New System.Drawing.Point(130, 32)
            Me.txtLayerName.Name = "txtLayerName"
            Me.txtLayerName.Size = New System.Drawing.Size(258, 20)
            Me.txtLayerName.TabIndex = 1
            '
            'lblLayerName
            '
            Me.lblLayerName.Location = New System.Drawing.Point(24, 35)
            Me.lblLayerName.Name = "lblLayerName"
            Me.lblLayerName.Size = New System.Drawing.Size(88, 24)
            Me.lblLayerName.TabIndex = 0
            Me.lblLayerName.Text = "Layer Name"
            '
            'tabRoute
            '
            Me.tabRoute.Controls.Add(Me.labelRouteOutputLines)
            Me.tabRoute.Controls.Add(Me.cboRouteOutputLines)
            Me.tabRoute.Controls.Add(Me.chkRouteUseTimeWindows)
            Me.tabRoute.Controls.Add(Me.chkRoutePreserveLastStop)
            Me.tabRoute.Controls.Add(Me.chkRoutePreserveFirstStop)
            Me.tabRoute.Controls.Add(Me.chkRouteFindBestSequence)
            Me.tabRoute.Controls.Add(Me.chkRouteUseStartTime)
            Me.tabRoute.Controls.Add(Me.txtRouteStartTime)
            Me.tabRoute.Controls.Add(Me.chkRouteIgnoreInvalidLocations)
            Me.tabRoute.Controls.Add(Me.cboRouteRestrictUTurns)
            Me.tabRoute.Controls.Add(Me.lblRouteRestrictUTurns)
            Me.tabRoute.Controls.Add(Me.lblRouteAccumulateAttributeNames)
            Me.tabRoute.Controls.Add(Me.chklstRouteAccumulateAttributeNames)
            Me.tabRoute.Controls.Add(Me.lblRouteRestrictionAttributeNames)
            Me.tabRoute.Controls.Add(Me.chklstRouteRestrictionAttributeNames)
            Me.tabRoute.Controls.Add(Me.cboRouteImpedance)
            Me.tabRoute.Controls.Add(Me.lblRouteImpedance)
            Me.tabRoute.Controls.Add(Me.chkRouteUseHierarchy)
            Me.tabRoute.Location = New System.Drawing.Point(4, 22)
            Me.tabRoute.Name = "tabRoute"
            Me.tabRoute.Size = New System.Drawing.Size(712, 473)
            Me.tabRoute.TabIndex = 1
            Me.tabRoute.Text = "Route"
            Me.tabRoute.UseVisualStyleBackColor = True
            '
            'labelRouteOutputLines
            '
            Me.labelRouteOutputLines.Location = New System.Drawing.Point(20, 209)
            Me.labelRouteOutputLines.Name = "labelRouteOutputLines"
            Me.labelRouteOutputLines.Size = New System.Drawing.Size(40, 16)
            Me.labelRouteOutputLines.TabIndex = 96
            Me.labelRouteOutputLines.Text = "Shape"
            '
            'cboRouteOutputLines
            '
            Me.cboRouteOutputLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboRouteOutputLines.ItemHeight = 13
            Me.cboRouteOutputLines.Items.AddRange(New Object() {"No Lines", "Straight Lines", "True Shape", "True Shape With Measures"})
            Me.cboRouteOutputLines.Location = New System.Drawing.Point(148, 204)
            Me.cboRouteOutputLines.Name = "cboRouteOutputLines"
            Me.cboRouteOutputLines.Size = New System.Drawing.Size(200, 21)
            Me.cboRouteOutputLines.TabIndex = 95
            '
            'chkRouteUseTimeWindows
            '
            Me.chkRouteUseTimeWindows.Location = New System.Drawing.Point(20, 76)
            Me.chkRouteUseTimeWindows.Name = "chkRouteUseTimeWindows"
            Me.chkRouteUseTimeWindows.Size = New System.Drawing.Size(128, 16)
            Me.chkRouteUseTimeWindows.TabIndex = 92
            Me.chkRouteUseTimeWindows.Text = "Use Time Windows"
            '
            'chkRoutePreserveLastStop
            '
            Me.chkRoutePreserveLastStop.Location = New System.Drawing.Point(39, 151)
            Me.chkRoutePreserveLastStop.Name = "chkRoutePreserveLastStop"
            Me.chkRoutePreserveLastStop.Size = New System.Drawing.Size(331, 23)
            Me.chkRoutePreserveLastStop.TabIndex = 91
            Me.chkRoutePreserveLastStop.Text = "Preserve Last Stop"
            '
            'chkRoutePreserveFirstStop
            '
            Me.chkRoutePreserveFirstStop.Location = New System.Drawing.Point(39, 123)
            Me.chkRoutePreserveFirstStop.Name = "chkRoutePreserveFirstStop"
            Me.chkRoutePreserveFirstStop.Size = New System.Drawing.Size(331, 28)
            Me.chkRoutePreserveFirstStop.TabIndex = 90
            Me.chkRoutePreserveFirstStop.Text = "Preserve First Stop"
            '
            'chkRouteFindBestSequence
            '
            Me.chkRouteFindBestSequence.Checked = True
            Me.chkRouteFindBestSequence.CheckState = System.Windows.Forms.CheckState.Checked
            Me.chkRouteFindBestSequence.Location = New System.Drawing.Point(20, 98)
            Me.chkRouteFindBestSequence.Name = "chkRouteFindBestSequence"
            Me.chkRouteFindBestSequence.Size = New System.Drawing.Size(336, 32)
            Me.chkRouteFindBestSequence.TabIndex = 89
            Me.chkRouteFindBestSequence.Text = "Find Best Sequence"
            '
            'chkRouteUseStartTime
            '
            Me.chkRouteUseStartTime.Checked = True
            Me.chkRouteUseStartTime.CheckState = System.Windows.Forms.CheckState.Checked
            Me.chkRouteUseStartTime.Location = New System.Drawing.Point(20, 54)
            Me.chkRouteUseStartTime.Name = "chkRouteUseStartTime"
            Me.chkRouteUseStartTime.Size = New System.Drawing.Size(104, 16)
            Me.chkRouteUseStartTime.TabIndex = 93
            Me.chkRouteUseStartTime.Text = "Use Start Time"
            '
            'txtRouteStartTime
            '
            Me.txtRouteStartTime.Location = New System.Drawing.Point(151, 50)
            Me.txtRouteStartTime.Name = "txtRouteStartTime"
            Me.txtRouteStartTime.Size = New System.Drawing.Size(200, 20)
            Me.txtRouteStartTime.TabIndex = 94
            '
            'chkRouteIgnoreInvalidLocations
            '
            Me.chkRouteIgnoreInvalidLocations.Location = New System.Drawing.Point(20, 252)
            Me.chkRouteIgnoreInvalidLocations.Name = "chkRouteIgnoreInvalidLocations"
            Me.chkRouteIgnoreInvalidLocations.Size = New System.Drawing.Size(144, 29)
            Me.chkRouteIgnoreInvalidLocations.TabIndex = 81
            Me.chkRouteIgnoreInvalidLocations.Text = "Ignore Invalid Locations"
            '
            'cboRouteRestrictUTurns
            '
            Me.cboRouteRestrictUTurns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboRouteRestrictUTurns.ItemHeight = 13
            Me.cboRouteRestrictUTurns.Items.AddRange(New Object() {"No U-Turns", "Allow U-Turns", "Only At Dead Ends"})
            Me.cboRouteRestrictUTurns.Location = New System.Drawing.Point(148, 177)
            Me.cboRouteRestrictUTurns.Name = "cboRouteRestrictUTurns"
            Me.cboRouteRestrictUTurns.Size = New System.Drawing.Size(200, 21)
            Me.cboRouteRestrictUTurns.TabIndex = 80
            '
            'lblRouteRestrictUTurns
            '
            Me.lblRouteRestrictUTurns.Location = New System.Drawing.Point(20, 182)
            Me.lblRouteRestrictUTurns.Name = "lblRouteRestrictUTurns"
            Me.lblRouteRestrictUTurns.Size = New System.Drawing.Size(88, 16)
            Me.lblRouteRestrictUTurns.TabIndex = 88
            Me.lblRouteRestrictUTurns.Text = "UTurn Policy"
            '
            'lblRouteAccumulateAttributeNames
            '
            Me.lblRouteAccumulateAttributeNames.Location = New System.Drawing.Point(236, 284)
            Me.lblRouteAccumulateAttributeNames.Name = "lblRouteAccumulateAttributeNames"
            Me.lblRouteAccumulateAttributeNames.Size = New System.Drawing.Size(120, 16)
            Me.lblRouteAccumulateAttributeNames.TabIndex = 87
            Me.lblRouteAccumulateAttributeNames.Text = "Accumulate Attributes"
            '
            'chklstRouteAccumulateAttributeNames
            '
            Me.chklstRouteAccumulateAttributeNames.CheckOnClick = True
            Me.chklstRouteAccumulateAttributeNames.Location = New System.Drawing.Point(236, 300)
            Me.chklstRouteAccumulateAttributeNames.Name = "chklstRouteAccumulateAttributeNames"
            Me.chklstRouteAccumulateAttributeNames.ScrollAlwaysVisible = True
            Me.chklstRouteAccumulateAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstRouteAccumulateAttributeNames.TabIndex = 84
            '
            'lblRouteRestrictionAttributeNames
            '
            Me.lblRouteRestrictionAttributeNames.Location = New System.Drawing.Point(20, 284)
            Me.lblRouteRestrictionAttributeNames.Name = "lblRouteRestrictionAttributeNames"
            Me.lblRouteRestrictionAttributeNames.Size = New System.Drawing.Size(72, 16)
            Me.lblRouteRestrictionAttributeNames.TabIndex = 86
            Me.lblRouteRestrictionAttributeNames.Text = "Restrictions"
            '
            'chklstRouteRestrictionAttributeNames
            '
            Me.chklstRouteRestrictionAttributeNames.CheckOnClick = True
            Me.chklstRouteRestrictionAttributeNames.Location = New System.Drawing.Point(20, 300)
            Me.chklstRouteRestrictionAttributeNames.Name = "chklstRouteRestrictionAttributeNames"
            Me.chklstRouteRestrictionAttributeNames.ScrollAlwaysVisible = True
            Me.chklstRouteRestrictionAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstRouteRestrictionAttributeNames.TabIndex = 83
            '
            'cboRouteImpedance
            '
            Me.cboRouteImpedance.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboRouteImpedance.ItemHeight = 13
            Me.cboRouteImpedance.Location = New System.Drawing.Point(151, 23)
            Me.cboRouteImpedance.Name = "cboRouteImpedance"
            Me.cboRouteImpedance.Size = New System.Drawing.Size(200, 21)
            Me.cboRouteImpedance.TabIndex = 79
            '
            'lblRouteImpedance
            '
            Me.lblRouteImpedance.Location = New System.Drawing.Point(20, 28)
            Me.lblRouteImpedance.Name = "lblRouteImpedance"
            Me.lblRouteImpedance.Size = New System.Drawing.Size(64, 16)
            Me.lblRouteImpedance.TabIndex = 85
            Me.lblRouteImpedance.Text = "Impedance"
            '
            'chkRouteUseHierarchy
            '
            Me.chkRouteUseHierarchy.Location = New System.Drawing.Point(20, 228)
            Me.chkRouteUseHierarchy.Name = "chkRouteUseHierarchy"
            Me.chkRouteUseHierarchy.Size = New System.Drawing.Size(96, 26)
            Me.chkRouteUseHierarchy.TabIndex = 82
            Me.chkRouteUseHierarchy.Text = "Use Hierarchy"
            '
            'tabClosestFacility
            '
            Me.tabClosestFacility.Controls.Add(Me.label13)
            Me.tabClosestFacility.Controls.Add(Me.label8)
            Me.tabClosestFacility.Controls.Add(Me.cboCFTimeUsage)
            Me.tabClosestFacility.Controls.Add(Me.txtCFUseTime)
            Me.tabClosestFacility.Controls.Add(Me.chkCFIgnoreInvalidLocations)
            Me.tabClosestFacility.Controls.Add(Me.cboCFRestrictUTurns)
            Me.tabClosestFacility.Controls.Add(Me.lblCFRestrictUTurns)
            Me.tabClosestFacility.Controls.Add(Me.lblCFAccumulateAttributeNames)
            Me.tabClosestFacility.Controls.Add(Me.chklstCFAccumulateAttributeNames)
            Me.tabClosestFacility.Controls.Add(Me.lblCFRestrictionAttributeNames)
            Me.tabClosestFacility.Controls.Add(Me.chklstCFRestrictionAttributeNames)
            Me.tabClosestFacility.Controls.Add(Me.cboCFImpedance)
            Me.tabClosestFacility.Controls.Add(Me.lblCFImpedance)
            Me.tabClosestFacility.Controls.Add(Me.chkCFUseHierarchy)
            Me.tabClosestFacility.Controls.Add(Me.cboCFOutputLines)
            Me.tabClosestFacility.Controls.Add(Me.lblCFOutputLines)
            Me.tabClosestFacility.Controls.Add(Me.cboCFTravelDirection)
            Me.tabClosestFacility.Controls.Add(Me.lblCFTravelDirection)
            Me.tabClosestFacility.Controls.Add(Me.txtCFDefaultTargetFacilityCount)
            Me.tabClosestFacility.Controls.Add(Me.lblCFDefaultTargetFacilityCount)
            Me.tabClosestFacility.Controls.Add(Me.txtCFDefaultCutoff)
            Me.tabClosestFacility.Controls.Add(Me.lblCFDefaultCutoff)
            Me.tabClosestFacility.Location = New System.Drawing.Point(4, 22)
            Me.tabClosestFacility.Name = "tabClosestFacility"
            Me.tabClosestFacility.Size = New System.Drawing.Size(712, 473)
            Me.tabClosestFacility.TabIndex = 3
            Me.tabClosestFacility.Text = "Closest Facility"
            Me.tabClosestFacility.UseVisualStyleBackColor = True
            '
            'label13
            '
            Me.label13.Location = New System.Drawing.Point(20, 77)
            Me.label13.Name = "label13"
            Me.label13.Size = New System.Drawing.Size(114, 16)
            Me.label13.TabIndex = 121
            Me.label13.Text = "Time"
            '
            'label8
            '
            Me.label8.Location = New System.Drawing.Point(20, 51)
            Me.label8.Name = "label8"
            Me.label8.Size = New System.Drawing.Size(114, 16)
            Me.label8.TabIndex = 120
            Me.label8.Text = "Time Usage"
            '
            'cboCFTimeUsage
            '
            Me.cboCFTimeUsage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboCFTimeUsage.ItemHeight = 13
            Me.cboCFTimeUsage.Items.AddRange(New Object() {"Not used", "End time", "Start time"})
            Me.cboCFTimeUsage.Location = New System.Drawing.Point(151, 48)
            Me.cboCFTimeUsage.Name = "cboCFTimeUsage"
            Me.cboCFTimeUsage.Size = New System.Drawing.Size(200, 21)
            Me.cboCFTimeUsage.TabIndex = 119
            '
            'txtCFUseTime
            '
            Me.txtCFUseTime.Location = New System.Drawing.Point(151, 74)
            Me.txtCFUseTime.Name = "txtCFUseTime"
            Me.txtCFUseTime.Size = New System.Drawing.Size(200, 20)
            Me.txtCFUseTime.TabIndex = 118
            '
            'chkCFIgnoreInvalidLocations
            '
            Me.chkCFIgnoreInvalidLocations.Location = New System.Drawing.Point(20, 269)
            Me.chkCFIgnoreInvalidLocations.Name = "chkCFIgnoreInvalidLocations"
            Me.chkCFIgnoreInvalidLocations.Size = New System.Drawing.Size(144, 29)
            Me.chkCFIgnoreInvalidLocations.TabIndex = 105
            Me.chkCFIgnoreInvalidLocations.Text = "Ignore Invalid Locations"
            '
            'cboCFRestrictUTurns
            '
            Me.cboCFRestrictUTurns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboCFRestrictUTurns.ItemHeight = 13
            Me.cboCFRestrictUTurns.Items.AddRange(New Object() {"No U-Turns", "Allow U-Turns", "Only At Dead Ends"})
            Me.cboCFRestrictUTurns.Location = New System.Drawing.Point(151, 178)
            Me.cboCFRestrictUTurns.Name = "cboCFRestrictUTurns"
            Me.cboCFRestrictUTurns.Size = New System.Drawing.Size(200, 21)
            Me.cboCFRestrictUTurns.TabIndex = 104
            '
            'lblCFRestrictUTurns
            '
            Me.lblCFRestrictUTurns.Location = New System.Drawing.Point(20, 183)
            Me.lblCFRestrictUTurns.Name = "lblCFRestrictUTurns"
            Me.lblCFRestrictUTurns.Size = New System.Drawing.Size(88, 16)
            Me.lblCFRestrictUTurns.TabIndex = 112
            Me.lblCFRestrictUTurns.Text = "UTurn Policy"
            '
            'lblCFAccumulateAttributeNames
            '
            Me.lblCFAccumulateAttributeNames.Location = New System.Drawing.Point(236, 301)
            Me.lblCFAccumulateAttributeNames.Name = "lblCFAccumulateAttributeNames"
            Me.lblCFAccumulateAttributeNames.Size = New System.Drawing.Size(120, 16)
            Me.lblCFAccumulateAttributeNames.TabIndex = 111
            Me.lblCFAccumulateAttributeNames.Text = "Accumulate Attributes"
            '
            'chklstCFAccumulateAttributeNames
            '
            Me.chklstCFAccumulateAttributeNames.CheckOnClick = True
            Me.chklstCFAccumulateAttributeNames.Location = New System.Drawing.Point(236, 317)
            Me.chklstCFAccumulateAttributeNames.Name = "chklstCFAccumulateAttributeNames"
            Me.chklstCFAccumulateAttributeNames.ScrollAlwaysVisible = True
            Me.chklstCFAccumulateAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstCFAccumulateAttributeNames.TabIndex = 108
            '
            'lblCFRestrictionAttributeNames
            '
            Me.lblCFRestrictionAttributeNames.Location = New System.Drawing.Point(20, 301)
            Me.lblCFRestrictionAttributeNames.Name = "lblCFRestrictionAttributeNames"
            Me.lblCFRestrictionAttributeNames.Size = New System.Drawing.Size(72, 16)
            Me.lblCFRestrictionAttributeNames.TabIndex = 110
            Me.lblCFRestrictionAttributeNames.Text = "Restrictions"
            '
            'chklstCFRestrictionAttributeNames
            '
            Me.chklstCFRestrictionAttributeNames.CheckOnClick = True
            Me.chklstCFRestrictionAttributeNames.Location = New System.Drawing.Point(20, 317)
            Me.chklstCFRestrictionAttributeNames.Name = "chklstCFRestrictionAttributeNames"
            Me.chklstCFRestrictionAttributeNames.ScrollAlwaysVisible = True
            Me.chklstCFRestrictionAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstCFRestrictionAttributeNames.TabIndex = 107
            '
            'cboCFImpedance
            '
            Me.cboCFImpedance.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboCFImpedance.ItemHeight = 13
            Me.cboCFImpedance.Location = New System.Drawing.Point(151, 23)
            Me.cboCFImpedance.Name = "cboCFImpedance"
            Me.cboCFImpedance.Size = New System.Drawing.Size(200, 21)
            Me.cboCFImpedance.TabIndex = 103
            '
            'lblCFImpedance
            '
            Me.lblCFImpedance.Location = New System.Drawing.Point(20, 28)
            Me.lblCFImpedance.Name = "lblCFImpedance"
            Me.lblCFImpedance.Size = New System.Drawing.Size(64, 16)
            Me.lblCFImpedance.TabIndex = 109
            Me.lblCFImpedance.Text = "Impedance"
            '
            'chkCFUseHierarchy
            '
            Me.chkCFUseHierarchy.Location = New System.Drawing.Point(20, 237)
            Me.chkCFUseHierarchy.Name = "chkCFUseHierarchy"
            Me.chkCFUseHierarchy.Size = New System.Drawing.Size(96, 26)
            Me.chkCFUseHierarchy.TabIndex = 106
            Me.chkCFUseHierarchy.Text = "Use Hierarchy"
            '
            'cboCFOutputLines
            '
            Me.cboCFOutputLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboCFOutputLines.ItemHeight = 13
            Me.cboCFOutputLines.Items.AddRange(New Object() {"No Lines", "Straight Lines", "True Shape", "True Shape With Measures"})
            Me.cboCFOutputLines.Location = New System.Drawing.Point(151, 205)
            Me.cboCFOutputLines.Name = "cboCFOutputLines"
            Me.cboCFOutputLines.Size = New System.Drawing.Size(200, 21)
            Me.cboCFOutputLines.TabIndex = 101
            '
            'lblCFOutputLines
            '
            Me.lblCFOutputLines.Location = New System.Drawing.Point(20, 210)
            Me.lblCFOutputLines.Name = "lblCFOutputLines"
            Me.lblCFOutputLines.Size = New System.Drawing.Size(114, 16)
            Me.lblCFOutputLines.TabIndex = 102
            Me.lblCFOutputLines.Text = "Shape"
            '
            'cboCFTravelDirection
            '
            Me.cboCFTravelDirection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboCFTravelDirection.ItemHeight = 13
            Me.cboCFTravelDirection.Items.AddRange(New Object() {"From Facility", "To Facility"})
            Me.cboCFTravelDirection.Location = New System.Drawing.Point(151, 151)
            Me.cboCFTravelDirection.Name = "cboCFTravelDirection"
            Me.cboCFTravelDirection.Size = New System.Drawing.Size(200, 21)
            Me.cboCFTravelDirection.TabIndex = 99
            '
            'lblCFTravelDirection
            '
            Me.lblCFTravelDirection.Location = New System.Drawing.Point(20, 156)
            Me.lblCFTravelDirection.Name = "lblCFTravelDirection"
            Me.lblCFTravelDirection.Size = New System.Drawing.Size(114, 16)
            Me.lblCFTravelDirection.TabIndex = 100
            Me.lblCFTravelDirection.Text = "Travel Direction"
            '
            'txtCFDefaultTargetFacilityCount
            '
            Me.txtCFDefaultTargetFacilityCount.Location = New System.Drawing.Point(151, 125)
            Me.txtCFDefaultTargetFacilityCount.Name = "txtCFDefaultTargetFacilityCount"
            Me.txtCFDefaultTargetFacilityCount.Size = New System.Drawing.Size(200, 20)
            Me.txtCFDefaultTargetFacilityCount.TabIndex = 98
            '
            'lblCFDefaultTargetFacilityCount
            '
            Me.lblCFDefaultTargetFacilityCount.Location = New System.Drawing.Point(20, 129)
            Me.lblCFDefaultTargetFacilityCount.Name = "lblCFDefaultTargetFacilityCount"
            Me.lblCFDefaultTargetFacilityCount.Size = New System.Drawing.Size(114, 16)
            Me.lblCFDefaultTargetFacilityCount.TabIndex = 97
            Me.lblCFDefaultTargetFacilityCount.Text = "Number of Facilities"
            '
            'txtCFDefaultCutoff
            '
            Me.txtCFDefaultCutoff.Location = New System.Drawing.Point(151, 99)
            Me.txtCFDefaultCutoff.Name = "txtCFDefaultCutoff"
            Me.txtCFDefaultCutoff.Size = New System.Drawing.Size(200, 20)
            Me.txtCFDefaultCutoff.TabIndex = 96
            '
            'lblCFDefaultCutoff
            '
            Me.lblCFDefaultCutoff.Location = New System.Drawing.Point(20, 103)
            Me.lblCFDefaultCutoff.Name = "lblCFDefaultCutoff"
            Me.lblCFDefaultCutoff.Size = New System.Drawing.Size(114, 16)
            Me.lblCFDefaultCutoff.TabIndex = 95
            Me.lblCFDefaultCutoff.Text = "Default Cutoff"
            '
            'tabODCostMatrix
            '
            Me.tabODCostMatrix.Controls.Add(Me.chkODUseTime)
            Me.tabODCostMatrix.Controls.Add(Me.txtODUseTime)
            Me.tabODCostMatrix.Controls.Add(Me.chkODIgnoreInvalidLocations)
            Me.tabODCostMatrix.Controls.Add(Me.cboODRestrictUTurns)
            Me.tabODCostMatrix.Controls.Add(Me.lblODRestrictUTurns)
            Me.tabODCostMatrix.Controls.Add(Me.lblODAccumulateAttributeNames)
            Me.tabODCostMatrix.Controls.Add(Me.chklstODAccumulateAttributeNames)
            Me.tabODCostMatrix.Controls.Add(Me.lblODRestrictionAttributeNames)
            Me.tabODCostMatrix.Controls.Add(Me.chklstODRestrictionAttributeNames)
            Me.tabODCostMatrix.Controls.Add(Me.cboODImpedance)
            Me.tabODCostMatrix.Controls.Add(Me.lblODImpedance)
            Me.tabODCostMatrix.Controls.Add(Me.chkODUseHierarchy)
            Me.tabODCostMatrix.Controls.Add(Me.cboODOutputLines)
            Me.tabODCostMatrix.Controls.Add(Me.lblODOutputLines)
            Me.tabODCostMatrix.Controls.Add(Me.txtODDefaultTargetDestinationCount)
            Me.tabODCostMatrix.Controls.Add(Me.lblODDefaultTargetDestinationCount)
            Me.tabODCostMatrix.Controls.Add(Me.txtODDefaultCutoff)
            Me.tabODCostMatrix.Controls.Add(Me.lblODDefaultCutoff)
            Me.tabODCostMatrix.Location = New System.Drawing.Point(4, 22)
            Me.tabODCostMatrix.Name = "tabODCostMatrix"
            Me.tabODCostMatrix.Size = New System.Drawing.Size(712, 473)
            Me.tabODCostMatrix.TabIndex = 4
            Me.tabODCostMatrix.Text = "Origin-Destination Cost Matrix"
            Me.tabODCostMatrix.UseVisualStyleBackColor = True
            '
            'chkODUseTime
            '
            Me.chkODUseTime.Location = New System.Drawing.Point(20, 50)
            Me.chkODUseTime.Name = "chkODUseTime"
            Me.chkODUseTime.Size = New System.Drawing.Size(104, 16)
            Me.chkODUseTime.TabIndex = 133
            Me.chkODUseTime.Text = "Use Time"
            '
            'txtODUseTime
            '
            Me.txtODUseTime.Location = New System.Drawing.Point(151, 46)
            Me.txtODUseTime.Name = "txtODUseTime"
            Me.txtODUseTime.Size = New System.Drawing.Size(200, 20)
            Me.txtODUseTime.TabIndex = 134
            '
            'chkODIgnoreInvalidLocations
            '
            Me.chkODIgnoreInvalidLocations.Location = New System.Drawing.Point(20, 216)
            Me.chkODIgnoreInvalidLocations.Name = "chkODIgnoreInvalidLocations"
            Me.chkODIgnoreInvalidLocations.Size = New System.Drawing.Size(144, 29)
            Me.chkODIgnoreInvalidLocations.TabIndex = 123
            Me.chkODIgnoreInvalidLocations.Text = "Ignore Invalid Locations"
            '
            'cboODRestrictUTurns
            '
            Me.cboODRestrictUTurns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboODRestrictUTurns.ItemHeight = 13
            Me.cboODRestrictUTurns.Items.AddRange(New Object() {"No U-Turns", "Allow U-Turns", "Only At Dead Ends"})
            Me.cboODRestrictUTurns.Location = New System.Drawing.Point(151, 125)
            Me.cboODRestrictUTurns.Name = "cboODRestrictUTurns"
            Me.cboODRestrictUTurns.Size = New System.Drawing.Size(200, 21)
            Me.cboODRestrictUTurns.TabIndex = 122
            '
            'lblODRestrictUTurns
            '
            Me.lblODRestrictUTurns.Location = New System.Drawing.Point(20, 130)
            Me.lblODRestrictUTurns.Name = "lblODRestrictUTurns"
            Me.lblODRestrictUTurns.Size = New System.Drawing.Size(88, 16)
            Me.lblODRestrictUTurns.TabIndex = 130
            Me.lblODRestrictUTurns.Text = "UTurn Policy"
            '
            'lblODAccumulateAttributeNames
            '
            Me.lblODAccumulateAttributeNames.Location = New System.Drawing.Point(236, 248)
            Me.lblODAccumulateAttributeNames.Name = "lblODAccumulateAttributeNames"
            Me.lblODAccumulateAttributeNames.Size = New System.Drawing.Size(120, 16)
            Me.lblODAccumulateAttributeNames.TabIndex = 129
            Me.lblODAccumulateAttributeNames.Text = "Accumulate Attributes"
            '
            'chklstODAccumulateAttributeNames
            '
            Me.chklstODAccumulateAttributeNames.CheckOnClick = True
            Me.chklstODAccumulateAttributeNames.Location = New System.Drawing.Point(236, 264)
            Me.chklstODAccumulateAttributeNames.Name = "chklstODAccumulateAttributeNames"
            Me.chklstODAccumulateAttributeNames.ScrollAlwaysVisible = True
            Me.chklstODAccumulateAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstODAccumulateAttributeNames.TabIndex = 126
            '
            'lblODRestrictionAttributeNames
            '
            Me.lblODRestrictionAttributeNames.Location = New System.Drawing.Point(20, 248)
            Me.lblODRestrictionAttributeNames.Name = "lblODRestrictionAttributeNames"
            Me.lblODRestrictionAttributeNames.Size = New System.Drawing.Size(72, 16)
            Me.lblODRestrictionAttributeNames.TabIndex = 128
            Me.lblODRestrictionAttributeNames.Text = "Restrictions"
            '
            'chklstODRestrictionAttributeNames
            '
            Me.chklstODRestrictionAttributeNames.CheckOnClick = True
            Me.chklstODRestrictionAttributeNames.Location = New System.Drawing.Point(20, 264)
            Me.chklstODRestrictionAttributeNames.Name = "chklstODRestrictionAttributeNames"
            Me.chklstODRestrictionAttributeNames.ScrollAlwaysVisible = True
            Me.chklstODRestrictionAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstODRestrictionAttributeNames.TabIndex = 125
            '
            'cboODImpedance
            '
            Me.cboODImpedance.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboODImpedance.ItemHeight = 13
            Me.cboODImpedance.Location = New System.Drawing.Point(151, 23)
            Me.cboODImpedance.Name = "cboODImpedance"
            Me.cboODImpedance.Size = New System.Drawing.Size(200, 21)
            Me.cboODImpedance.TabIndex = 121
            '
            'lblODImpedance
            '
            Me.lblODImpedance.Location = New System.Drawing.Point(20, 28)
            Me.lblODImpedance.Name = "lblODImpedance"
            Me.lblODImpedance.Size = New System.Drawing.Size(64, 16)
            Me.lblODImpedance.TabIndex = 127
            Me.lblODImpedance.Text = "Impedance"
            '
            'chkODUseHierarchy
            '
            Me.chkODUseHierarchy.Location = New System.Drawing.Point(20, 184)
            Me.chkODUseHierarchy.Name = "chkODUseHierarchy"
            Me.chkODUseHierarchy.Size = New System.Drawing.Size(96, 26)
            Me.chkODUseHierarchy.TabIndex = 124
            Me.chkODUseHierarchy.Text = "Use Hierarchy"
            '
            'cboODOutputLines
            '
            Me.cboODOutputLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboODOutputLines.ItemHeight = 13
            Me.cboODOutputLines.Items.AddRange(New Object() {"No Lines", "Straight Lines"})
            Me.cboODOutputLines.Location = New System.Drawing.Point(151, 152)
            Me.cboODOutputLines.Name = "cboODOutputLines"
            Me.cboODOutputLines.Size = New System.Drawing.Size(200, 21)
            Me.cboODOutputLines.TabIndex = 119
            '
            'lblODOutputLines
            '
            Me.lblODOutputLines.Location = New System.Drawing.Point(20, 157)
            Me.lblODOutputLines.Name = "lblODOutputLines"
            Me.lblODOutputLines.Size = New System.Drawing.Size(114, 16)
            Me.lblODOutputLines.TabIndex = 120
            Me.lblODOutputLines.Text = "Shape"
            '
            'txtODDefaultTargetDestinationCount
            '
            Me.txtODDefaultTargetDestinationCount.Location = New System.Drawing.Point(151, 96)
            Me.txtODDefaultTargetDestinationCount.Name = "txtODDefaultTargetDestinationCount"
            Me.txtODDefaultTargetDestinationCount.Size = New System.Drawing.Size(200, 20)
            Me.txtODDefaultTargetDestinationCount.TabIndex = 116
            '
            'lblODDefaultTargetDestinationCount
            '
            Me.lblODDefaultTargetDestinationCount.Location = New System.Drawing.Point(20, 100)
            Me.lblODDefaultTargetDestinationCount.Name = "lblODDefaultTargetDestinationCount"
            Me.lblODDefaultTargetDestinationCount.Size = New System.Drawing.Size(125, 16)
            Me.lblODDefaultTargetDestinationCount.TabIndex = 115
            Me.lblODDefaultTargetDestinationCount.Text = "Number of Destinations"
            '
            'txtODDefaultCutoff
            '
            Me.txtODDefaultCutoff.Location = New System.Drawing.Point(151, 70)
            Me.txtODDefaultCutoff.Name = "txtODDefaultCutoff"
            Me.txtODDefaultCutoff.Size = New System.Drawing.Size(200, 20)
            Me.txtODDefaultCutoff.TabIndex = 114
            '
            'lblODDefaultCutoff
            '
            Me.lblODDefaultCutoff.Location = New System.Drawing.Point(20, 74)
            Me.lblODDefaultCutoff.Name = "lblODDefaultCutoff"
            Me.lblODDefaultCutoff.Size = New System.Drawing.Size(114, 16)
            Me.lblODDefaultCutoff.TabIndex = 113
            Me.lblODDefaultCutoff.Text = "Default Cutoff"
            '
            'tabServiceArea
            '
            Me.tabServiceArea.Controls.Add(Me.chkSAUseTime)
            Me.tabServiceArea.Controls.Add(Me.txtSAUseTime)
            Me.tabServiceArea.Controls.Add(Me.cboSATrimPolygonDistanceUnits)
            Me.tabServiceArea.Controls.Add(Me.txtSATrimPolygonDistance)
            Me.tabServiceArea.Controls.Add(Me.chkSATrimOuterPolygon)
            Me.tabServiceArea.Controls.Add(Me.chkSAIncludeSourceInformationOnLines)
            Me.tabServiceArea.Controls.Add(Me.cboSATravelDirection)
            Me.tabServiceArea.Controls.Add(Me.lblSATravelDirection)
            Me.tabServiceArea.Controls.Add(Me.chkSASplitPolygonsAtBreaks)
            Me.tabServiceArea.Controls.Add(Me.chkSAOverlapPolygons)
            Me.tabServiceArea.Controls.Add(Me.chkSASplitLinesAtBreaks)
            Me.tabServiceArea.Controls.Add(Me.chkSAOverlapLines)
            Me.tabServiceArea.Controls.Add(Me.chkSAIgnoreInvalidLocations)
            Me.tabServiceArea.Controls.Add(Me.cboSARestrictUTurns)
            Me.tabServiceArea.Controls.Add(Me.lblSARestrictUTurns)
            Me.tabServiceArea.Controls.Add(Me.lblSAAccumulateAttributeNames)
            Me.tabServiceArea.Controls.Add(Me.chklstSAAccumulateAttributeNames)
            Me.tabServiceArea.Controls.Add(Me.lblSARestrictionAttributeNames)
            Me.tabServiceArea.Controls.Add(Me.chklstSARestrictionAttributeNames)
            Me.tabServiceArea.Controls.Add(Me.lblSAOutputPolygons)
            Me.tabServiceArea.Controls.Add(Me.cboSAOutputPolygons)
            Me.tabServiceArea.Controls.Add(Me.lblSAOutputLines)
            Me.tabServiceArea.Controls.Add(Me.cboSAOutputLines)
            Me.tabServiceArea.Controls.Add(Me.chkSAMergeSimilarPolygonRanges)
            Me.tabServiceArea.Controls.Add(Me.txtSADefaultBreaks)
            Me.tabServiceArea.Controls.Add(Me.lblSADefaultBreaks)
            Me.tabServiceArea.Controls.Add(Me.cboSAImpedance)
            Me.tabServiceArea.Controls.Add(Me.lblSAImpedance)
            Me.tabServiceArea.Location = New System.Drawing.Point(4, 22)
            Me.tabServiceArea.Name = "tabServiceArea"
            Me.tabServiceArea.Size = New System.Drawing.Size(712, 473)
            Me.tabServiceArea.TabIndex = 2
            Me.tabServiceArea.Text = "Service Area"
            Me.tabServiceArea.UseVisualStyleBackColor = True
            '
            'chkSAUseTime
            '
            Me.chkSAUseTime.Location = New System.Drawing.Point(20, 51)
            Me.chkSAUseTime.Name = "chkSAUseTime"
            Me.chkSAUseTime.Size = New System.Drawing.Size(104, 16)
            Me.chkSAUseTime.TabIndex = 135
            Me.chkSAUseTime.Text = "Use Time"
            '
            'txtSAUseTime
            '
            Me.txtSAUseTime.Location = New System.Drawing.Point(151, 47)
            Me.txtSAUseTime.Name = "txtSAUseTime"
            Me.txtSAUseTime.Size = New System.Drawing.Size(200, 20)
            Me.txtSAUseTime.TabIndex = 136
            '
            'cboSATrimPolygonDistanceUnits
            '
            Me.cboSATrimPolygonDistanceUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboSATrimPolygonDistanceUnits.ItemHeight = 13
            Me.cboSATrimPolygonDistanceUnits.Items.AddRange(New Object() {"Unknown Units", "Inches", "Points", "Feet", "Yards", "Miles", "Nautical Miles", "Millimeters", "Centimeters", "Meters", "Kilometers", "DecimalDegrees", "Decimeters"})
            Me.cboSATrimPolygonDistanceUnits.Location = New System.Drawing.Point(241, 173)
            Me.cboSATrimPolygonDistanceUnits.Name = "cboSATrimPolygonDistanceUnits"
            Me.cboSATrimPolygonDistanceUnits.Size = New System.Drawing.Size(110, 21)
            Me.cboSATrimPolygonDistanceUnits.TabIndex = 120
            '
            'txtSATrimPolygonDistance
            '
            Me.txtSATrimPolygonDistance.Location = New System.Drawing.Point(169, 174)
            Me.txtSATrimPolygonDistance.Name = "txtSATrimPolygonDistance"
            Me.txtSATrimPolygonDistance.Size = New System.Drawing.Size(66, 20)
            Me.txtSATrimPolygonDistance.TabIndex = 119
            '
            'chkSATrimOuterPolygon
            '
            Me.chkSATrimOuterPolygon.Location = New System.Drawing.Point(41, 174)
            Me.chkSATrimOuterPolygon.Name = "chkSATrimOuterPolygon"
            Me.chkSATrimOuterPolygon.Size = New System.Drawing.Size(122, 22)
            Me.chkSATrimOuterPolygon.TabIndex = 118
            Me.chkSATrimOuterPolygon.Text = "Trim Outer Polygon"
            '
            'chkSAIncludeSourceInformationOnLines
            '
            Me.chkSAIncludeSourceInformationOnLines.Location = New System.Drawing.Point(329, 229)
            Me.chkSAIncludeSourceInformationOnLines.Name = "chkSAIncludeSourceInformationOnLines"
            Me.chkSAIncludeSourceInformationOnLines.Size = New System.Drawing.Size(215, 22)
            Me.chkSAIncludeSourceInformationOnLines.TabIndex = 117
            Me.chkSAIncludeSourceInformationOnLines.Text = "Include Source Information On Lines"
            '
            'cboSATravelDirection
            '
            Me.cboSATravelDirection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboSATravelDirection.ItemHeight = 13
            Me.cboSATravelDirection.Items.AddRange(New Object() {"From Facility", "To Facility"})
            Me.cboSATravelDirection.Location = New System.Drawing.Point(151, 95)
            Me.cboSATravelDirection.Name = "cboSATravelDirection"
            Me.cboSATravelDirection.Size = New System.Drawing.Size(200, 21)
            Me.cboSATravelDirection.TabIndex = 115
            '
            'lblSATravelDirection
            '
            Me.lblSATravelDirection.Location = New System.Drawing.Point(20, 100)
            Me.lblSATravelDirection.Name = "lblSATravelDirection"
            Me.lblSATravelDirection.Size = New System.Drawing.Size(114, 16)
            Me.lblSATravelDirection.TabIndex = 116
            Me.lblSATravelDirection.Text = "Travel Direction"
            '
            'chkSASplitPolygonsAtBreaks
            '
            Me.chkSASplitPolygonsAtBreaks.Location = New System.Drawing.Point(169, 150)
            Me.chkSASplitPolygonsAtBreaks.Name = "chkSASplitPolygonsAtBreaks"
            Me.chkSASplitPolygonsAtBreaks.Size = New System.Drawing.Size(154, 22)
            Me.chkSASplitPolygonsAtBreaks.TabIndex = 114
            Me.chkSASplitPolygonsAtBreaks.Text = "Split Polygons At Breaks"
            '
            'chkSAOverlapPolygons
            '
            Me.chkSAOverlapPolygons.Location = New System.Drawing.Point(41, 149)
            Me.chkSAOverlapPolygons.Name = "chkSAOverlapPolygons"
            Me.chkSAOverlapPolygons.Size = New System.Drawing.Size(122, 22)
            Me.chkSAOverlapPolygons.TabIndex = 113
            Me.chkSAOverlapPolygons.Text = "Overlap Polygons"
            '
            'chkSASplitLinesAtBreaks
            '
            Me.chkSASplitLinesAtBreaks.Location = New System.Drawing.Point(169, 229)
            Me.chkSASplitLinesAtBreaks.Name = "chkSASplitLinesAtBreaks"
            Me.chkSASplitLinesAtBreaks.Size = New System.Drawing.Size(154, 22)
            Me.chkSASplitLinesAtBreaks.TabIndex = 112
            Me.chkSASplitLinesAtBreaks.Text = "Split Lines At Breaks"
            '
            'chkSAOverlapLines
            '
            Me.chkSAOverlapLines.Location = New System.Drawing.Point(41, 229)
            Me.chkSAOverlapLines.Name = "chkSAOverlapLines"
            Me.chkSAOverlapLines.Size = New System.Drawing.Size(122, 22)
            Me.chkSAOverlapLines.TabIndex = 111
            Me.chkSAOverlapLines.Text = "Overlap Lines"
            '
            'chkSAIgnoreInvalidLocations
            '
            Me.chkSAIgnoreInvalidLocations.Location = New System.Drawing.Point(23, 283)
            Me.chkSAIgnoreInvalidLocations.Name = "chkSAIgnoreInvalidLocations"
            Me.chkSAIgnoreInvalidLocations.Size = New System.Drawing.Size(144, 29)
            Me.chkSAIgnoreInvalidLocations.TabIndex = 105
            Me.chkSAIgnoreInvalidLocations.Text = "Ignore Invalid Locations"
            '
            'cboSARestrictUTurns
            '
            Me.cboSARestrictUTurns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboSARestrictUTurns.ItemHeight = 13
            Me.cboSARestrictUTurns.Items.AddRange(New Object() {"No U-Turns", "Allow U-Turns", "Only At Dead Ends"})
            Me.cboSARestrictUTurns.Location = New System.Drawing.Point(151, 259)
            Me.cboSARestrictUTurns.Name = "cboSARestrictUTurns"
            Me.cboSARestrictUTurns.Size = New System.Drawing.Size(200, 21)
            Me.cboSARestrictUTurns.TabIndex = 104
            '
            'lblSARestrictUTurns
            '
            Me.lblSARestrictUTurns.Location = New System.Drawing.Point(20, 264)
            Me.lblSARestrictUTurns.Name = "lblSARestrictUTurns"
            Me.lblSARestrictUTurns.Size = New System.Drawing.Size(88, 16)
            Me.lblSARestrictUTurns.TabIndex = 110
            Me.lblSARestrictUTurns.Text = "UTurn Policy"
            '
            'lblSAAccumulateAttributeNames
            '
            Me.lblSAAccumulateAttributeNames.Location = New System.Drawing.Point(238, 314)
            Me.lblSAAccumulateAttributeNames.Name = "lblSAAccumulateAttributeNames"
            Me.lblSAAccumulateAttributeNames.Size = New System.Drawing.Size(120, 16)
            Me.lblSAAccumulateAttributeNames.TabIndex = 109
            Me.lblSAAccumulateAttributeNames.Text = "Accumulate Attributes"
            '
            'chklstSAAccumulateAttributeNames
            '
            Me.chklstSAAccumulateAttributeNames.CheckOnClick = True
            Me.chklstSAAccumulateAttributeNames.Location = New System.Drawing.Point(238, 330)
            Me.chklstSAAccumulateAttributeNames.Name = "chklstSAAccumulateAttributeNames"
            Me.chklstSAAccumulateAttributeNames.ScrollAlwaysVisible = True
            Me.chklstSAAccumulateAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstSAAccumulateAttributeNames.TabIndex = 107
            '
            'lblSARestrictionAttributeNames
            '
            Me.lblSARestrictionAttributeNames.Location = New System.Drawing.Point(22, 314)
            Me.lblSARestrictionAttributeNames.Name = "lblSARestrictionAttributeNames"
            Me.lblSARestrictionAttributeNames.Size = New System.Drawing.Size(72, 16)
            Me.lblSARestrictionAttributeNames.TabIndex = 108
            Me.lblSARestrictionAttributeNames.Text = "Restrictions"
            '
            'chklstSARestrictionAttributeNames
            '
            Me.chklstSARestrictionAttributeNames.CheckOnClick = True
            Me.chklstSARestrictionAttributeNames.Location = New System.Drawing.Point(22, 330)
            Me.chklstSARestrictionAttributeNames.Name = "chklstSARestrictionAttributeNames"
            Me.chklstSARestrictionAttributeNames.ScrollAlwaysVisible = True
            Me.chklstSARestrictionAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstSARestrictionAttributeNames.TabIndex = 106
            '
            'lblSAOutputPolygons
            '
            Me.lblSAOutputPolygons.Location = New System.Drawing.Point(20, 127)
            Me.lblSAOutputPolygons.Name = "lblSAOutputPolygons"
            Me.lblSAOutputPolygons.Size = New System.Drawing.Size(122, 16)
            Me.lblSAOutputPolygons.TabIndex = 103
            Me.lblSAOutputPolygons.Text = "Output Polygons"
            '
            'cboSAOutputPolygons
            '
            Me.cboSAOutputPolygons.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboSAOutputPolygons.ItemHeight = 13
            Me.cboSAOutputPolygons.Items.AddRange(New Object() {"No Polygons", "Simplified Polygons", "Detailed Polygons"})
            Me.cboSAOutputPolygons.Location = New System.Drawing.Point(151, 122)
            Me.cboSAOutputPolygons.Name = "cboSAOutputPolygons"
            Me.cboSAOutputPolygons.Size = New System.Drawing.Size(200, 21)
            Me.cboSAOutputPolygons.TabIndex = 102
            '
            'lblSAOutputLines
            '
            Me.lblSAOutputLines.Location = New System.Drawing.Point(20, 207)
            Me.lblSAOutputLines.Name = "lblSAOutputLines"
            Me.lblSAOutputLines.Size = New System.Drawing.Size(122, 16)
            Me.lblSAOutputLines.TabIndex = 101
            Me.lblSAOutputLines.Text = "Output Lines"
            '
            'cboSAOutputLines
            '
            Me.cboSAOutputLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboSAOutputLines.ItemHeight = 13
            Me.cboSAOutputLines.Items.AddRange(New Object() {"No Lines", "True Shape", "True Shape With Measures"})
            Me.cboSAOutputLines.Location = New System.Drawing.Point(151, 202)
            Me.cboSAOutputLines.Name = "cboSAOutputLines"
            Me.cboSAOutputLines.Size = New System.Drawing.Size(200, 21)
            Me.cboSAOutputLines.TabIndex = 100
            '
            'chkSAMergeSimilarPolygonRanges
            '
            Me.chkSAMergeSimilarPolygonRanges.Location = New System.Drawing.Point(329, 149)
            Me.chkSAMergeSimilarPolygonRanges.Name = "chkSAMergeSimilarPolygonRanges"
            Me.chkSAMergeSimilarPolygonRanges.Size = New System.Drawing.Size(192, 22)
            Me.chkSAMergeSimilarPolygonRanges.TabIndex = 99
            Me.chkSAMergeSimilarPolygonRanges.Text = "Merge Similar Polygon Ranges"
            '
            'txtSADefaultBreaks
            '
            Me.txtSADefaultBreaks.Location = New System.Drawing.Point(151, 69)
            Me.txtSADefaultBreaks.Name = "txtSADefaultBreaks"
            Me.txtSADefaultBreaks.Size = New System.Drawing.Size(200, 20)
            Me.txtSADefaultBreaks.TabIndex = 98
            '
            'lblSADefaultBreaks
            '
            Me.lblSADefaultBreaks.Location = New System.Drawing.Point(20, 73)
            Me.lblSADefaultBreaks.Name = "lblSADefaultBreaks"
            Me.lblSADefaultBreaks.Size = New System.Drawing.Size(114, 16)
            Me.lblSADefaultBreaks.TabIndex = 97
            Me.lblSADefaultBreaks.Text = "Default Breaks"
            '
            'cboSAImpedance
            '
            Me.cboSAImpedance.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboSAImpedance.ItemHeight = 13
            Me.cboSAImpedance.Location = New System.Drawing.Point(151, 23)
            Me.cboSAImpedance.Name = "cboSAImpedance"
            Me.cboSAImpedance.Size = New System.Drawing.Size(200, 21)
            Me.cboSAImpedance.TabIndex = 86
            '
            'lblSAImpedance
            '
            Me.lblSAImpedance.Location = New System.Drawing.Point(20, 28)
            Me.lblSAImpedance.Name = "lblSAImpedance"
            Me.lblSAImpedance.Size = New System.Drawing.Size(64, 16)
            Me.lblSAImpedance.TabIndex = 87
            Me.lblSAImpedance.Text = "Impedance"
            '
            'tabVRP
            '
            Me.tabVRP.Controls.Add(Me.gbRestrictions)
            Me.tabVRP.Controls.Add(Me.gbSettings)
            Me.tabVRP.Location = New System.Drawing.Point(4, 22)
            Me.tabVRP.Name = "tabVRP"
            Me.tabVRP.Size = New System.Drawing.Size(712, 473)
            Me.tabVRP.TabIndex = 5
            Me.tabVRP.Text = "VRP"
            Me.tabVRP.UseVisualStyleBackColor = True
            '
            'gbRestrictions
            '
            Me.gbRestrictions.Controls.Add(Me.chklstVRPRestrictionAttributeNames)
            Me.gbRestrictions.Location = New System.Drawing.Point(349, 3)
            Me.gbRestrictions.Name = "gbRestrictions"
            Me.gbRestrictions.Size = New System.Drawing.Size(206, 90)
            Me.gbRestrictions.TabIndex = 1
            Me.gbRestrictions.TabStop = False
            Me.gbRestrictions.Text = "Restrictions"
            '
            'chklstVRPRestrictionAttributeNames
            '
            Me.chklstVRPRestrictionAttributeNames.CheckOnClick = True
            Me.chklstVRPRestrictionAttributeNames.Location = New System.Drawing.Point(6, 14)
            Me.chklstVRPRestrictionAttributeNames.Name = "chklstVRPRestrictionAttributeNames"
            Me.chklstVRPRestrictionAttributeNames.ScrollAlwaysVisible = True
            Me.chklstVRPRestrictionAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstVRPRestrictionAttributeNames.TabIndex = 109
            '
            'gbSettings
            '
            Me.gbSettings.Controls.Add(Me.cboVRPDistanceFieldUnits)
            Me.gbSettings.Controls.Add(Me.cboVRPTransitTime)
            Me.gbSettings.Controls.Add(Me.cboVRPTimeWindow)
            Me.gbSettings.Controls.Add(Me.label10)
            Me.gbSettings.Controls.Add(Me.label9)
            Me.gbSettings.Controls.Add(Me.chkVRPUseHierarchy)
            Me.gbSettings.Controls.Add(Me.cboVRPOutputShapeType)
            Me.gbSettings.Controls.Add(Me.cboVRPAllowUTurns)
            Me.gbSettings.Controls.Add(Me.cboVRPTimeFieldUnits)
            Me.gbSettings.Controls.Add(Me.txtVRPCapacityCount)
            Me.gbSettings.Controls.Add(Me.txtVRPDefaultDate)
            Me.gbSettings.Controls.Add(Me.cboVRPDistanceAttribute)
            Me.gbSettings.Controls.Add(Me.cboVRPTimeAttribute)
            Me.gbSettings.Controls.Add(Me.label7)
            Me.gbSettings.Controls.Add(Me.label6)
            Me.gbSettings.Controls.Add(Me.label5)
            Me.gbSettings.Controls.Add(Me.label4)
            Me.gbSettings.Controls.Add(Me.label3)
            Me.gbSettings.Controls.Add(Me.label2)
            Me.gbSettings.Controls.Add(Me.label1)
            Me.gbSettings.Controls.Add(Me.lblTimeAttribute)
            Me.gbSettings.Location = New System.Drawing.Point(3, 3)
            Me.gbSettings.Name = "gbSettings"
            Me.gbSettings.Size = New System.Drawing.Size(340, 321)
            Me.gbSettings.TabIndex = 0
            Me.gbSettings.TabStop = False
            Me.gbSettings.Text = "Settings"
            '
            'cboVRPDistanceFieldUnits
            '
            Me.cboVRPDistanceFieldUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboVRPDistanceFieldUnits.ItemHeight = 13
            Me.cboVRPDistanceFieldUnits.Items.AddRange(New Object() {"Inches", "Points", "Feet", "Yards", "Miles", "Nautical Miles", "Millimeters", "Centimeters", "Meters", "Kilometers", "DecimalDegrees", "Decimeters"})
            Me.cboVRPDistanceFieldUnits.Location = New System.Drawing.Point(189, 151)
            Me.cboVRPDistanceFieldUnits.Name = "cboVRPDistanceFieldUnits"
            Me.cboVRPDistanceFieldUnits.Size = New System.Drawing.Size(136, 21)
            Me.cboVRPDistanceFieldUnits.TabIndex = 123
            '
            'cboVRPTransitTime
            '
            Me.cboVRPTransitTime.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboVRPTransitTime.FormattingEnabled = True
            Me.cboVRPTransitTime.Items.AddRange(New Object() {"High", "Medium", "Low"})
            Me.cboVRPTransitTime.Location = New System.Drawing.Point(189, 265)
            Me.cboVRPTransitTime.Name = "cboVRPTransitTime"
            Me.cboVRPTransitTime.Size = New System.Drawing.Size(136, 21)
            Me.cboVRPTransitTime.TabIndex = 20
            '
            'cboVRPTimeWindow
            '
            Me.cboVRPTimeWindow.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboVRPTimeWindow.FormattingEnabled = True
            Me.cboVRPTimeWindow.Items.AddRange(New Object() {"High", "Medium", "Low"})
            Me.cboVRPTimeWindow.Location = New System.Drawing.Point(189, 238)
            Me.cboVRPTimeWindow.Name = "cboVRPTimeWindow"
            Me.cboVRPTimeWindow.Size = New System.Drawing.Size(136, 21)
            Me.cboVRPTimeWindow.TabIndex = 19
            '
            'label10
            '
            Me.label10.AutoSize = True
            Me.label10.Location = New System.Drawing.Point(8, 268)
            Me.label10.Name = "label10"
            Me.label10.Size = New System.Drawing.Size(161, 13)
            Me.label10.TabIndex = 18
            Me.label10.Text = "Excess Transit Time Importance:"
            '
            'label9
            '
            Me.label9.AutoSize = True
            Me.label9.Location = New System.Drawing.Point(9, 241)
            Me.label9.Name = "label9"
            Me.label9.Size = New System.Drawing.Size(174, 13)
            Me.label9.TabIndex = 17
            Me.label9.Text = "Time Window Violation Importance:"
            '
            'chkVRPUseHierarchy
            '
            Me.chkVRPUseHierarchy.AutoSize = True
            Me.chkVRPUseHierarchy.Location = New System.Drawing.Point(12, 294)
            Me.chkVRPUseHierarchy.Name = "chkVRPUseHierarchy"
            Me.chkVRPUseHierarchy.Size = New System.Drawing.Size(93, 17)
            Me.chkVRPUseHierarchy.TabIndex = 16
            Me.chkVRPUseHierarchy.Text = "Use Hierarchy"
            Me.chkVRPUseHierarchy.UseVisualStyleBackColor = True
            '
            'cboVRPOutputShapeType
            '
            Me.cboVRPOutputShapeType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboVRPOutputShapeType.FormattingEnabled = True
            Me.cboVRPOutputShapeType.Items.AddRange(New Object() {"None", "Straight Line", "True Shape", "True Shape with Measure"})
            Me.cboVRPOutputShapeType.Location = New System.Drawing.Point(189, 208)
            Me.cboVRPOutputShapeType.Name = "cboVRPOutputShapeType"
            Me.cboVRPOutputShapeType.Size = New System.Drawing.Size(136, 21)
            Me.cboVRPOutputShapeType.TabIndex = 15
            '
            'cboVRPAllowUTurns
            '
            Me.cboVRPAllowUTurns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboVRPAllowUTurns.FormattingEnabled = True
            Me.cboVRPAllowUTurns.Items.AddRange(New Object() {"No U-Turns", "Allow U-Turns", "Only At Dead Ends"})
            Me.cboVRPAllowUTurns.Location = New System.Drawing.Point(189, 180)
            Me.cboVRPAllowUTurns.Name = "cboVRPAllowUTurns"
            Me.cboVRPAllowUTurns.Size = New System.Drawing.Size(136, 21)
            Me.cboVRPAllowUTurns.TabIndex = 14
            '
            'cboVRPTimeFieldUnits
            '
            Me.cboVRPTimeFieldUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboVRPTimeFieldUnits.FormattingEnabled = True
            Me.cboVRPTimeFieldUnits.Items.AddRange(New Object() {"Seconds", "Minutes", "Hours", "Days"})
            Me.cboVRPTimeFieldUnits.Location = New System.Drawing.Point(189, 124)
            Me.cboVRPTimeFieldUnits.Name = "cboVRPTimeFieldUnits"
            Me.cboVRPTimeFieldUnits.Size = New System.Drawing.Size(136, 21)
            Me.cboVRPTimeFieldUnits.TabIndex = 12
            '
            'txtVRPCapacityCount
            '
            Me.txtVRPCapacityCount.Location = New System.Drawing.Point(189, 97)
            Me.txtVRPCapacityCount.Name = "txtVRPCapacityCount"
            Me.txtVRPCapacityCount.Size = New System.Drawing.Size(136, 20)
            Me.txtVRPCapacityCount.TabIndex = 11
            '
            'txtVRPDefaultDate
            '
            Me.txtVRPDefaultDate.Location = New System.Drawing.Point(189, 70)
            Me.txtVRPDefaultDate.Name = "txtVRPDefaultDate"
            Me.txtVRPDefaultDate.Size = New System.Drawing.Size(136, 20)
            Me.txtVRPDefaultDate.TabIndex = 10
            '
            'cboVRPDistanceAttribute
            '
            Me.cboVRPDistanceAttribute.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboVRPDistanceAttribute.FormattingEnabled = True
            Me.cboVRPDistanceAttribute.Items.AddRange(New Object() {"", "Meters (Meters)"})
            Me.cboVRPDistanceAttribute.Location = New System.Drawing.Point(189, 42)
            Me.cboVRPDistanceAttribute.Name = "cboVRPDistanceAttribute"
            Me.cboVRPDistanceAttribute.Size = New System.Drawing.Size(136, 21)
            Me.cboVRPDistanceAttribute.TabIndex = 9
            '
            'cboVRPTimeAttribute
            '
            Me.cboVRPTimeAttribute.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboVRPTimeAttribute.FormattingEnabled = True
            Me.cboVRPTimeAttribute.Location = New System.Drawing.Point(189, 14)
            Me.cboVRPTimeAttribute.Name = "cboVRPTimeAttribute"
            Me.cboVRPTimeAttribute.Size = New System.Drawing.Size(136, 21)
            Me.cboVRPTimeAttribute.TabIndex = 8
            '
            'label7
            '
            Me.label7.AutoSize = True
            Me.label7.Location = New System.Drawing.Point(9, 50)
            Me.label7.Name = "label7"
            Me.label7.Size = New System.Drawing.Size(94, 13)
            Me.label7.TabIndex = 7
            Me.label7.Text = "Distance Attribute:"
            '
            'label6
            '
            Me.label6.AutoSize = True
            Me.label6.Location = New System.Drawing.Point(9, 78)
            Me.label6.Name = "label6"
            Me.label6.Size = New System.Drawing.Size(70, 13)
            Me.label6.TabIndex = 6
            Me.label6.Text = "Default Date:"
            '
            'label5
            '
            Me.label5.AutoSize = True
            Me.label5.Location = New System.Drawing.Point(9, 105)
            Me.label5.Name = "label5"
            Me.label5.Size = New System.Drawing.Size(82, 13)
            Me.label5.TabIndex = 5
            Me.label5.Text = "Capacity Count:"
            '
            'label4
            '
            Me.label4.AutoSize = True
            Me.label4.Location = New System.Drawing.Point(9, 132)
            Me.label4.Name = "label4"
            Me.label4.Size = New System.Drawing.Size(85, 13)
            Me.label4.TabIndex = 4
            Me.label4.Text = "Time Field Units:"
            '
            'label3
            '
            Me.label3.AutoSize = True
            Me.label3.Location = New System.Drawing.Point(8, 160)
            Me.label3.Name = "label3"
            Me.label3.Size = New System.Drawing.Size(104, 13)
            Me.label3.TabIndex = 3
            Me.label3.Text = "Distance Field Units:"
            '
            'label2
            '
            Me.label2.AutoSize = True
            Me.label2.Location = New System.Drawing.Point(9, 188)
            Me.label2.Name = "label2"
            Me.label2.Size = New System.Drawing.Size(74, 13)
            Me.label2.TabIndex = 2
            Me.label2.Text = "U-Turn Policy:"
            '
            'label1
            '
            Me.label1.AutoSize = True
            Me.label1.Location = New System.Drawing.Point(9, 216)
            Me.label1.Name = "label1"
            Me.label1.Size = New System.Drawing.Size(103, 13)
            Me.label1.TabIndex = 1
            Me.label1.Text = "Output Shape Type:"
            '
            'lblTimeAttribute
            '
            Me.lblTimeAttribute.AutoSize = True
            Me.lblTimeAttribute.Location = New System.Drawing.Point(9, 22)
            Me.lblTimeAttribute.Name = "lblTimeAttribute"
            Me.lblTimeAttribute.Size = New System.Drawing.Size(75, 13)
            Me.lblTimeAttribute.TabIndex = 0
            Me.lblTimeAttribute.Text = "Time Attribute:"
            '
            'tabLocationAllocation
            '
            Me.tabLocationAllocation.Controls.Add(Me.chkLAUseTime)
            Me.tabLocationAllocation.Controls.Add(Me.txtLAUseTime)
            Me.tabLocationAllocation.Controls.Add(Me.chkLAIgnoreInvalidLocations)
            Me.tabLocationAllocation.Controls.Add(Me.grpLASettings)
            Me.tabLocationAllocation.Controls.Add(Me.chkLAUseHierarchy)
            Me.tabLocationAllocation.Controls.Add(Me.lblLAAccumulateAttributeNames)
            Me.tabLocationAllocation.Controls.Add(Me.chklstLAAccumulateAttributeNames)
            Me.tabLocationAllocation.Controls.Add(Me.lblLARestrictionAttributeNames)
            Me.tabLocationAllocation.Controls.Add(Me.chklstLARestrictionAttributeNames)
            Me.tabLocationAllocation.Controls.Add(Me.cboLAOutputLines)
            Me.tabLocationAllocation.Controls.Add(Me.label11)
            Me.tabLocationAllocation.Controls.Add(Me.cboLATravelDirection)
            Me.tabLocationAllocation.Controls.Add(Me.label12)
            Me.tabLocationAllocation.Controls.Add(Me.lblCostAttribute)
            Me.tabLocationAllocation.Controls.Add(Me.cboLAImpedance)
            Me.tabLocationAllocation.Location = New System.Drawing.Point(4, 22)
            Me.tabLocationAllocation.Name = "tabLocationAllocation"
            Me.tabLocationAllocation.Padding = New System.Windows.Forms.Padding(3)
            Me.tabLocationAllocation.Size = New System.Drawing.Size(712, 473)
            Me.tabLocationAllocation.TabIndex = 6
            Me.tabLocationAllocation.Text = "Location-Allocation"
            Me.tabLocationAllocation.UseVisualStyleBackColor = True
            '
            'chkLAUseTime
            '
            Me.chkLAUseTime.Location = New System.Drawing.Point(11, 52)
            Me.chkLAUseTime.Name = "chkLAUseTime"
            Me.chkLAUseTime.Size = New System.Drawing.Size(104, 16)
            Me.chkLAUseTime.TabIndex = 135
            Me.chkLAUseTime.Text = "Use Time"
            '
            'txtLAUseTime
            '
            Me.txtLAUseTime.Location = New System.Drawing.Point(142, 48)
            Me.txtLAUseTime.Name = "txtLAUseTime"
            Me.txtLAUseTime.Size = New System.Drawing.Size(179, 20)
            Me.txtLAUseTime.TabIndex = 136
            '
            'chkLAIgnoreInvalidLocations
            '
            Me.chkLAIgnoreInvalidLocations.Location = New System.Drawing.Point(13, 149)
            Me.chkLAIgnoreInvalidLocations.Name = "chkLAIgnoreInvalidLocations"
            Me.chkLAIgnoreInvalidLocations.Size = New System.Drawing.Size(144, 29)
            Me.chkLAIgnoreInvalidLocations.TabIndex = 123
            Me.chkLAIgnoreInvalidLocations.Text = "Ignore Invalid Locations"
            '
            'grpLASettings
            '
            Me.grpLASettings.Controls.Add(Me.lblTargetMarketShare)
            Me.grpLASettings.Controls.Add(Me.txtLATargetMarketShare)
            Me.grpLASettings.Controls.Add(Me.cboLAImpTransformation)
            Me.grpLASettings.Controls.Add(Me.lblImpParameter)
            Me.grpLASettings.Controls.Add(Me.txtLAImpParameter)
            Me.grpLASettings.Controls.Add(Me.lblImpTransformation)
            Me.grpLASettings.Controls.Add(Me.lblProblemType)
            Me.grpLASettings.Controls.Add(Me.cboLAProblemType)
            Me.grpLASettings.Controls.Add(Me.lblCutOff)
            Me.grpLASettings.Controls.Add(Me.txtLACutOff)
            Me.grpLASettings.Controls.Add(Me.lblNumFacilities)
            Me.grpLASettings.Controls.Add(Me.txtLAFacilitiesToLocate)
            Me.grpLASettings.Location = New System.Drawing.Point(230, 129)
            Me.grpLASettings.Name = "grpLASettings"
            Me.grpLASettings.Size = New System.Drawing.Size(342, 241)
            Me.grpLASettings.TabIndex = 122
            Me.grpLASettings.TabStop = False
            Me.grpLASettings.Text = "Advanced Settings"
            '
            'lblTargetMarketShare
            '
            Me.lblTargetMarketShare.AccessibleDescription = "grpLA"
            Me.lblTargetMarketShare.AutoSize = True
            Me.lblTargetMarketShare.Location = New System.Drawing.Point(20, 205)
            Me.lblTargetMarketShare.Name = "lblTargetMarketShare"
            Me.lblTargetMarketShare.Size = New System.Drawing.Size(122, 13)
            Me.lblTargetMarketShare.TabIndex = 31
            Me.lblTargetMarketShare.Text = "Target Market Share (%)"
            '
            'txtLATargetMarketShare
            '
            Me.txtLATargetMarketShare.AccessibleDescription = "grpLA"
            Me.txtLATargetMarketShare.Location = New System.Drawing.Point(199, 201)
            Me.txtLATargetMarketShare.Name = "txtLATargetMarketShare"
            Me.txtLATargetMarketShare.Size = New System.Drawing.Size(129, 20)
            Me.txtLATargetMarketShare.TabIndex = 30
            Me.txtLATargetMarketShare.Text = "10.0"
            '
            'cboLAImpTransformation
            '
            Me.cboLAImpTransformation.AccessibleDescription = "grpLA"
            Me.cboLAImpTransformation.FormattingEnabled = True
            Me.cboLAImpTransformation.Items.AddRange(New Object() {"Linear", "Power", "Exponential"})
            Me.cboLAImpTransformation.Location = New System.Drawing.Point(202, 135)
            Me.cboLAImpTransformation.Name = "cboLAImpTransformation"
            Me.cboLAImpTransformation.Size = New System.Drawing.Size(128, 21)
            Me.cboLAImpTransformation.TabIndex = 29
            Me.cboLAImpTransformation.Text = "Linear"
            '
            'lblImpParameter
            '
            Me.lblImpParameter.AccessibleDescription = "grpLA"
            Me.lblImpParameter.AutoSize = True
            Me.lblImpParameter.Location = New System.Drawing.Point(19, 171)
            Me.lblImpParameter.Name = "lblImpParameter"
            Me.lblImpParameter.Size = New System.Drawing.Size(111, 13)
            Me.lblImpParameter.TabIndex = 28
            Me.lblImpParameter.Text = "Impedance Parameter"
            '
            'txtLAImpParameter
            '
            Me.txtLAImpParameter.AccessibleDescription = "grpLA"
            Me.txtLAImpParameter.Location = New System.Drawing.Point(200, 166)
            Me.txtLAImpParameter.Name = "txtLAImpParameter"
            Me.txtLAImpParameter.Size = New System.Drawing.Size(129, 20)
            Me.txtLAImpParameter.TabIndex = 27
            Me.txtLAImpParameter.Text = "1.0"
            '
            'lblImpTransformation
            '
            Me.lblImpTransformation.AccessibleDescription = "grpLA"
            Me.lblImpTransformation.AutoSize = True
            Me.lblImpTransformation.Location = New System.Drawing.Point(19, 135)
            Me.lblImpTransformation.Name = "lblImpTransformation"
            Me.lblImpTransformation.Size = New System.Drawing.Size(133, 13)
            Me.lblImpTransformation.TabIndex = 26
            Me.lblImpTransformation.Text = "Impedance Transformation"
            '
            'lblProblemType
            '
            Me.lblProblemType.AccessibleDescription = "grpLA"
            Me.lblProblemType.AutoSize = True
            Me.lblProblemType.Location = New System.Drawing.Point(19, 30)
            Me.lblProblemType.Name = "lblProblemType"
            Me.lblProblemType.Size = New System.Drawing.Size(72, 13)
            Me.lblProblemType.TabIndex = 23
            Me.lblProblemType.Text = "Problem Type"
            '
            'cboLAProblemType
            '
            Me.cboLAProblemType.AccessibleDescription = "grpLA"
            Me.cboLAProblemType.FormattingEnabled = True
            Me.cboLAProblemType.Items.AddRange(New Object() {"Minimize Impedance", "Maximize Coverage", "Minimize Facilities", "Maximize Attendance", "Maximize Market Share", "Target Market Share"})
            Me.cboLAProblemType.Location = New System.Drawing.Point(202, 24)
            Me.cboLAProblemType.Name = "cboLAProblemType"
            Me.cboLAProblemType.Size = New System.Drawing.Size(128, 21)
            Me.cboLAProblemType.TabIndex = 22
            Me.cboLAProblemType.Text = "Minimize Impedance"
            '
            'lblCutOff
            '
            Me.lblCutOff.AccessibleDescription = "grpLA"
            Me.lblCutOff.AutoSize = True
            Me.lblCutOff.Location = New System.Drawing.Point(20, 98)
            Me.lblCutOff.Name = "lblCutOff"
            Me.lblCutOff.Size = New System.Drawing.Size(91, 13)
            Me.lblCutOff.TabIndex = 21
            Me.lblCutOff.Text = "Impedance Cutoff"
            '
            'txtLACutOff
            '
            Me.txtLACutOff.AccessibleDescription = "grpLA"
            Me.txtLACutOff.Location = New System.Drawing.Point(202, 98)
            Me.txtLACutOff.Name = "txtLACutOff"
            Me.txtLACutOff.Size = New System.Drawing.Size(129, 20)
            Me.txtLACutOff.TabIndex = 20
            Me.txtLACutOff.Text = "<None>"
            '
            'lblNumFacilities
            '
            Me.lblNumFacilities.AccessibleDescription = "grpLA"
            Me.lblNumFacilities.AutoSize = True
            Me.lblNumFacilities.Location = New System.Drawing.Point(20, 63)
            Me.lblNumFacilities.Name = "lblNumFacilities"
            Me.lblNumFacilities.Size = New System.Drawing.Size(102, 13)
            Me.lblNumFacilities.TabIndex = 19
            Me.lblNumFacilities.Text = "Facilities To Choose"
            '
            'txtLAFacilitiesToLocate
            '
            Me.txtLAFacilitiesToLocate.AccessibleDescription = "grpLA"
            Me.txtLAFacilitiesToLocate.Location = New System.Drawing.Point(202, 63)
            Me.txtLAFacilitiesToLocate.Name = "txtLAFacilitiesToLocate"
            Me.txtLAFacilitiesToLocate.Size = New System.Drawing.Size(130, 20)
            Me.txtLAFacilitiesToLocate.TabIndex = 18
            Me.txtLAFacilitiesToLocate.Text = "1"
            '
            'chkLAUseHierarchy
            '
            Me.chkLAUseHierarchy.AutoSize = True
            Me.chkLAUseHierarchy.Location = New System.Drawing.Point(13, 120)
            Me.chkLAUseHierarchy.Name = "chkLAUseHierarchy"
            Me.chkLAUseHierarchy.Size = New System.Drawing.Size(93, 17)
            Me.chkLAUseHierarchy.TabIndex = 121
            Me.chkLAUseHierarchy.Text = "Use Hierarchy"
            Me.chkLAUseHierarchy.UseVisualStyleBackColor = True
            '
            'lblLAAccumulateAttributeNames
            '
            Me.lblLAAccumulateAttributeNames.Location = New System.Drawing.Point(11, 280)
            Me.lblLAAccumulateAttributeNames.Name = "lblLAAccumulateAttributeNames"
            Me.lblLAAccumulateAttributeNames.Size = New System.Drawing.Size(120, 16)
            Me.lblLAAccumulateAttributeNames.TabIndex = 120
            Me.lblLAAccumulateAttributeNames.Text = "Accumulate Attributes"
            '
            'chklstLAAccumulateAttributeNames
            '
            Me.chklstLAAccumulateAttributeNames.CheckOnClick = True
            Me.chklstLAAccumulateAttributeNames.Location = New System.Drawing.Point(11, 296)
            Me.chklstLAAccumulateAttributeNames.Name = "chklstLAAccumulateAttributeNames"
            Me.chklstLAAccumulateAttributeNames.ScrollAlwaysVisible = True
            Me.chklstLAAccumulateAttributeNames.Size = New System.Drawing.Size(192, 34)
            Me.chklstLAAccumulateAttributeNames.TabIndex = 119
            '
            'lblLARestrictionAttributeNames
            '
            Me.lblLARestrictionAttributeNames.Location = New System.Drawing.Point(11, 192)
            Me.lblLARestrictionAttributeNames.Name = "lblLARestrictionAttributeNames"
            Me.lblLARestrictionAttributeNames.Size = New System.Drawing.Size(71, 15)
            Me.lblLARestrictionAttributeNames.TabIndex = 118
            Me.lblLARestrictionAttributeNames.Text = "Restrictions"
            '
            'chklstLARestrictionAttributeNames
            '
            Me.chklstLARestrictionAttributeNames.CheckOnClick = True
            Me.chklstLARestrictionAttributeNames.Location = New System.Drawing.Point(11, 210)
            Me.chklstLARestrictionAttributeNames.Name = "chklstLARestrictionAttributeNames"
            Me.chklstLARestrictionAttributeNames.ScrollAlwaysVisible = True
            Me.chklstLARestrictionAttributeNames.Size = New System.Drawing.Size(191, 34)
            Me.chklstLARestrictionAttributeNames.TabIndex = 117
            '
            'cboLAOutputLines
            '
            Me.cboLAOutputLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboLAOutputLines.ItemHeight = 13
            Me.cboLAOutputLines.Items.AddRange(New Object() {"Straight Lines", "None"})
            Me.cboLAOutputLines.Location = New System.Drawing.Point(142, 93)
            Me.cboLAOutputLines.Name = "cboLAOutputLines"
            Me.cboLAOutputLines.Size = New System.Drawing.Size(178, 21)
            Me.cboLAOutputLines.TabIndex = 115
            '
            'label11
            '
            Me.label11.Location = New System.Drawing.Point(11, 98)
            Me.label11.Name = "label11"
            Me.label11.Size = New System.Drawing.Size(114, 15)
            Me.label11.TabIndex = 116
            Me.label11.Text = "Shape"
            '
            'cboLATravelDirection
            '
            Me.cboLATravelDirection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboLATravelDirection.ItemHeight = 13
            Me.cboLATravelDirection.Items.AddRange(New Object() {"Facility To Demand", "Demand To Facility"})
            Me.cboLATravelDirection.Location = New System.Drawing.Point(142, 69)
            Me.cboLATravelDirection.Name = "cboLATravelDirection"
            Me.cboLATravelDirection.Size = New System.Drawing.Size(178, 21)
            Me.cboLATravelDirection.TabIndex = 113
            '
            'label12
            '
            Me.label12.Location = New System.Drawing.Point(11, 74)
            Me.label12.Name = "label12"
            Me.label12.Size = New System.Drawing.Size(114, 16)
            Me.label12.TabIndex = 114
            Me.label12.Text = "Travel Direction"
            '
            'lblCostAttribute
            '
            Me.lblCostAttribute.AutoSize = True
            Me.lblCostAttribute.Location = New System.Drawing.Point(8, 25)
            Me.lblCostAttribute.Name = "lblCostAttribute"
            Me.lblCostAttribute.Size = New System.Drawing.Size(70, 13)
            Me.lblCostAttribute.TabIndex = 25
            Me.lblCostAttribute.Text = "Cost Attribute"
            '
            'cboLAImpedance
            '
            Me.cboLAImpedance.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
            Me.cboLAImpedance.FormattingEnabled = True
            Me.cboLAImpedance.Location = New System.Drawing.Point(142, 25)
            Me.cboLAImpedance.Name = "cboLAImpedance"
            Me.cboLAImpedance.Size = New System.Drawing.Size(176, 21)
            Me.cboLAImpedance.TabIndex = 24
            '
            'tabAttributeParameters
            '
            Me.tabAttributeParameters.Controls.Add(Me.btnReset)
            Me.tabAttributeParameters.Controls.Add(Me.attributeParameterGrid)
            Me.tabAttributeParameters.Controls.Add(Me.label14)
            Me.tabAttributeParameters.Location = New System.Drawing.Point(4, 22)
            Me.tabAttributeParameters.Name = "tabAttributeParameters"
            Me.tabAttributeParameters.Padding = New System.Windows.Forms.Padding(3)
            Me.tabAttributeParameters.Size = New System.Drawing.Size(712, 473)
            Me.tabAttributeParameters.TabIndex = 7
            Me.tabAttributeParameters.Text = "Attribute Parameters"
            Me.tabAttributeParameters.UseVisualStyleBackColor = True
            '
            'btnReset
            '
            Me.btnReset.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
            Me.btnReset.Location = New System.Drawing.Point(636, 446)
            Me.btnReset.Name = "btnReset"
            Me.btnReset.Size = New System.Drawing.Size(70, 21)
            Me.btnReset.TabIndex = 29
            Me.btnReset.Text = "&Reset"
            '
            'attributeParameterGrid
            '
            Me.attributeParameterGrid.AllowUserToAddRows = False
            Me.attributeParameterGrid.AllowUserToDeleteRows = False
            Me.attributeParameterGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill
            Me.attributeParameterGrid.BackgroundColor = System.Drawing.Color.White
            Me.attributeParameterGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
            Me.attributeParameterGrid.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.dgvcAttribute, Me.dgvcParameter, Me.dgvcValue})
            Me.attributeParameterGrid.Location = New System.Drawing.Point(13, 36)
            Me.attributeParameterGrid.Name = "attributeParameterGrid"
            Me.attributeParameterGrid.RowHeadersVisible = False
            Me.attributeParameterGrid.Size = New System.Drawing.Size(693, 404)
            Me.attributeParameterGrid.TabIndex = 28
            '
            'dgvcAttribute
            '
            Me.dgvcAttribute.HeaderText = "Attribute"
            Me.dgvcAttribute.Name = "dgvcAttribute"
            Me.dgvcAttribute.ReadOnly = True
            '
            'dgvcParameter
            '
            Me.dgvcParameter.HeaderText = "Parameter"
            Me.dgvcParameter.Name = "dgvcParameter"
            Me.dgvcParameter.ReadOnly = True
            '
            'dgvcValue
            '
            Me.dgvcValue.HeaderText = "Value"
            Me.dgvcValue.Name = "dgvcValue"
            '
            'label14
            '
            Me.label14.AutoSize = True
            Me.label14.Location = New System.Drawing.Point(6, 13)
            Me.label14.Name = "label14"
            Me.label14.Size = New System.Drawing.Size(267, 13)
            Me.label14.TabIndex = 27
            Me.label14.Text = "Specify the parameter values for the network attributes."
            '
            'btnOK
            '
            Me.btnOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
            Me.btnOK.Location = New System.Drawing.Point(598, 523)
            Me.btnOK.Name = "btnOK"
            Me.btnOK.Size = New System.Drawing.Size(58, 22)
            Me.btnOK.TabIndex = 1
            Me.btnOK.Text = "&OK"
            '
            'btnCancel
            '
            Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
            Me.btnCancel.Location = New System.Drawing.Point(666, 523)
            Me.btnCancel.Name = "btnCancel"
            Me.btnCancel.Size = New System.Drawing.Size(62, 22)
            Me.btnCancel.TabIndex = 2
            Me.btnCancel.Text = "&Cancel"
            '
            'frmNALayerProperties
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(739, 563)
            Me.Controls.Add(Me.btnCancel)
            Me.Controls.Add(Me.btnOK)
            Me.Controls.Add(Me.tabPropPages)
            Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
            Me.MaximizeBox = False
            Me.MinimizeBox = False
            Me.Name = "frmNALayerProperties"
            Me.ShowInTaskbar = False
            Me.Text = "Properties"
            Me.tabPropPages.ResumeLayout(False)
            Me.tabGeneral.ResumeLayout(False)
            Me.tabGeneral.PerformLayout()
            Me.tabRoute.ResumeLayout(False)
            Me.tabRoute.PerformLayout()
            Me.tabClosestFacility.ResumeLayout(False)
            Me.tabClosestFacility.PerformLayout()
            Me.tabODCostMatrix.ResumeLayout(False)
            Me.tabODCostMatrix.PerformLayout()
            Me.tabServiceArea.ResumeLayout(False)
            Me.tabServiceArea.PerformLayout()
            Me.tabVRP.ResumeLayout(False)
            Me.gbRestrictions.ResumeLayout(False)
            Me.gbSettings.ResumeLayout(False)
            Me.gbSettings.PerformLayout()
            Me.tabLocationAllocation.ResumeLayout(False)
            Me.tabLocationAllocation.PerformLayout()
            Me.grpLASettings.ResumeLayout(False)
            Me.grpLASettings.PerformLayout()
            Me.tabAttributeParameters.ResumeLayout(False)
            Me.tabAttributeParameters.PerformLayout()
            CType(Me.attributeParameterGrid, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)

        End Sub
#End Region

        Private m_okClicked As Boolean
        Private m_naLayer As INALayer3

        Private Enum VARTYPE
            VT_EMPTY = 0 ' uninitialized (null)
            VT_NULL = 1 ' System.DBNull.Value
            VT_I2 = 2 ' short
            VT_I4 = 3 ' int
            VT_R4 = 4 ' float
            VT_R8 = 5 ' double
            VT_DATE = 7 ' DateTime
            VT_BSTR = 8 ' string
            VT_BOOL = 11 ' boolean
            VT_UNKNOWN = 13 ' COM object
            VT_ARRAY = 8192 ' array bitmask
        End Enum

        Private Enum AttributeParameterGridColumnType
            ATTRIBUTE_NAME = 0
            PARAMETER_NAME = 1
            PARAMETER_VALUE = 2
        End Enum

        Private m_restrictionParameterValues As Dictionary(Of String, Double) = New Dictionary(Of String, Double) From
        {
            {"Prohibit", -1},
            {"Avoid: High", 5}, {"Avoid: Medium", 2}, {"Avoid: Low", 1.3},
            {"Prefer: Low", 0.8}, {"Prefer: Medium", 0.5}, {"Prefer: High", 0.2}
        }

        Public Sub New()
            InitializeComponent()
        End Sub

        ''' <summary>
        ''' Clean up any resources being used.
        ''' </summary>
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If components IsNot Nothing Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
            m_naLayer = Nothing
        End Sub

        ''' <summary>
        ''' Called by clients to show the properties window and respond to changes made when OK is clicked.
        ''' </summary>
        Public Function ShowModal(ByVal naLayer As INALayer3) As Boolean
            m_okClicked = False

            If (naLayer Is Nothing) Then
                MessageBox.Show("Null NALayer")
            Else
                m_naLayer = naLayer
            End If

            ' Setup the window based on the current NALayer settings
            PopulateControls(naLayer)
            tabPropPages.SelectedIndex = 1
            Me.Text = (CType(naLayer, ILayer)).Name & " Properties"

            Me.ShowDialog()
            Return m_okClicked
        End Function

        ''' <summary>
        ''' Set controls based on the current NALayer settings
        ''' This function takes the current NALayer and determines what type of solver it's pointing to
        ''' and populates the corresponding controls and hides the tabs for the other solvers.
        ''' </summary>
        Private Sub PopulateControls(ByVal naLayer As INALayer)
            Dim layer As ILayer = TryCast(naLayer, ILayer)
            Dim naContext As INAContext = naLayer.Context
            Dim networkDataset As INetworkDataset = naContext.NetworkDataset
            Dim naLocator As INALocator2 = TryCast(naContext.Locator, INALocator2)

            Dim naSolver As INASolver = naContext.Solver
            Dim naSolverSettings As INASolverSettings = TryCast(naSolver, INASolverSettings2)
            Dim naTimeAwareSolverSettings As INATimeAwareSolverSettings = TryCast(naSolver, INATimeAwareSolverSettings)

            Dim routeSolver As INARouteSolver2 = TryCast(naSolver, INARouteSolver2)
            Dim cfSolver As INAClosestFacilitySolver = TryCast(naSolver, INAClosestFacilitySolver)
            Dim odSolver As INAODCostMatrixSolver = TryCast(naSolver, INAODCostMatrixSolver)
            Dim saSolver As INAServiceAreaSolver2 = TryCast(naSolver, INAServiceAreaSolver2)
            Dim vrpSolver As INAVRPSolver = TryCast(naSolver, INAVRPSolver)
            Dim laSolver As INALocationAllocationSolver = TryCast(naSolver, INALocationAllocationSolver)

            ' Populate general Layer controls
            txtLayerName.Text = layer.Name
            txtMaxSearchTolerance.Text = naLocator.MaxSnapTolerance.ToString()
            cboMaxSearchToleranceUnits.SelectedIndex = Convert.ToInt32(naLocator.SnapToleranceUnits)

            PopulateAttributeParameterControl(networkDataset)

            ' Populate controls for the particular solver

            If routeSolver IsNot Nothing Then ' ROUTE LAYER
                ' Remove unnecessary tabs
                tabPropPages.TabPages.Remove(tabClosestFacility)
                tabPropPages.TabPages.Remove(tabODCostMatrix)
                tabPropPages.TabPages.Remove(tabServiceArea)
                tabPropPages.TabPages.Remove(tabVRP)
                tabPropPages.TabPages.Remove(tabLocationAllocation)

                ' INARouteSolver2
                chkRouteFindBestSequence.Checked = routeSolver.FindBestSequence
                chkRoutePreserveFirstStop.Checked = routeSolver.PreserveFirstStop
                chkRoutePreserveLastStop.Checked = routeSolver.PreserveLastStop
                chkRouteUseTimeWindows.Checked = routeSolver.UseTimeWindows
                chkRouteUseStartTime.Checked = routeSolver.UseStartTime
                txtRouteStartTime.Text = routeSolver.StartTime.ToShortTimeString()
                cboRouteOutputLines.SelectedIndex = System.Convert.ToInt32(routeSolver.OutputLines)

                ' INASolverSettings
                PopulateImpedanceNameControl(cboRouteImpedance, networkDataset, naSolverSettings.ImpedanceAttributeName)
                chkRouteUseHierarchy.Enabled = (naSolverSettings.HierarchyAttributeName.Length > 0)
                chkRouteUseHierarchy.Checked = (chkRouteUseHierarchy.Enabled AndAlso naSolverSettings.UseHierarchy)
                chkRouteIgnoreInvalidLocations.Checked = naSolverSettings.IgnoreInvalidLocations
                cboRouteRestrictUTurns.SelectedIndex = System.Convert.ToInt32(naSolverSettings.RestrictUTurns)
                PopulateAttributeControl(chklstRouteAccumulateAttributeNames, networkDataset, naSolverSettings.AccumulateAttributeNames, esriNetworkAttributeUsageType.esriNAUTCost)
                PopulateAttributeControl(chklstRouteRestrictionAttributeNames, networkDataset, naSolverSettings.RestrictionAttributeNames, esriNetworkAttributeUsageType.esriNAUTRestriction)
            ElseIf cfSolver IsNot Nothing Then ' CLOSEST FACILITY LAYER
                ' Remove unnecessary tabs
                tabPropPages.TabPages.Remove(tabRoute)
                tabPropPages.TabPages.Remove(tabODCostMatrix)
                tabPropPages.TabPages.Remove(tabServiceArea)
                tabPropPages.TabPages.Remove(tabVRP)
                tabPropPages.TabPages.Remove(tabLocationAllocation)

                ' INAClosestFacilitySolver
                txtCFDefaultCutoff.Text = GetStringFromObject(cfSolver.DefaultCutoff)
                txtCFDefaultTargetFacilityCount.Text = cfSolver.DefaultTargetFacilityCount.ToString()
                cboCFTravelDirection.SelectedIndex = Convert.ToInt32(cfSolver.TravelDirection)
                cboCFOutputLines.SelectedIndex = Convert.ToInt32(cfSolver.OutputLines)

                ' INASolverSettings
                PopulateImpedanceNameControl(cboCFImpedance, networkDataset, naSolverSettings.ImpedanceAttributeName)
                chkCFUseHierarchy.Enabled = (naSolverSettings.HierarchyAttributeName.Length > 0)
                chkCFUseHierarchy.Checked = (chkCFUseHierarchy.Enabled AndAlso naSolverSettings.UseHierarchy)
                chkCFIgnoreInvalidLocations.Checked = naSolverSettings.IgnoreInvalidLocations
                cboCFRestrictUTurns.SelectedIndex = System.Convert.ToInt32(naSolverSettings.RestrictUTurns)
                PopulateAttributeControl(chklstCFAccumulateAttributeNames, networkDataset, naSolverSettings.AccumulateAttributeNames, esriNetworkAttributeUsageType.esriNAUTCost)
                PopulateAttributeControl(chklstCFRestrictionAttributeNames, networkDataset, naSolverSettings.RestrictionAttributeNames, esriNetworkAttributeUsageType.esriNAUTRestriction)

                ' INATimeAwareSolverSettings
                cboCFTimeUsage.SelectedIndex = System.Convert.ToInt32(naTimeAwareSolverSettings.TimeOfDayUsage)
                txtCFUseTime.Text = naTimeAwareSolverSettings.TimeOfDay.ToString("HH:mm:ss MM/dd/yyyy")

            ElseIf odSolver IsNot Nothing Then ' OD COST MATRIX LAYER
                ' Remove unnecessary tabs
                tabPropPages.TabPages.Remove(tabRoute)
                tabPropPages.TabPages.Remove(tabClosestFacility)
                tabPropPages.TabPages.Remove(tabServiceArea)
                tabPropPages.TabPages.Remove(tabVRP)
                tabPropPages.TabPages.Remove(tabLocationAllocation)

                ' INAODCostMatrixSolver
                txtODDefaultCutoff.Text = GetStringFromObject(odSolver.DefaultCutoff)
                txtODDefaultTargetDestinationCount.Text = GetStringFromObject(odSolver.DefaultTargetDestinationCount)
                cboODOutputLines.SelectedIndex = Convert.ToInt32(odSolver.OutputLines)

                ' INASolverSettings
                PopulateImpedanceNameControl(cboODImpedance, networkDataset, naSolverSettings.ImpedanceAttributeName)
                chkODUseHierarchy.Enabled = (naSolverSettings.HierarchyAttributeName.Length > 0)
                chkODUseHierarchy.Checked = (chkODUseHierarchy.Enabled AndAlso naSolverSettings.UseHierarchy)
                chkODIgnoreInvalidLocations.Checked = naSolverSettings.IgnoreInvalidLocations
                cboODRestrictUTurns.SelectedIndex = System.Convert.ToInt32(naSolverSettings.RestrictUTurns)
                PopulateAttributeControl(chklstODAccumulateAttributeNames, networkDataset, naSolverSettings.AccumulateAttributeNames, esriNetworkAttributeUsageType.esriNAUTCost)
                PopulateAttributeControl(chklstODRestrictionAttributeNames, networkDataset, naSolverSettings.RestrictionAttributeNames, esriNetworkAttributeUsageType.esriNAUTRestriction)

                ' INATimeAwareSolverSettings
                If (naTimeAwareSolverSettings.TimeOfDayUsage = esriNATimeOfDayUsage.esriNATimeOfDayUseAsStartTime) Then
                    chkODUseTime.Checked = True
                End If
                txtODUseTime.Text = naTimeAwareSolverSettings.TimeOfDay.ToString("HH:mm:ss MM/dd/yyyy")

            ElseIf saSolver IsNot Nothing Then 'SERVICE AREA SOLVER
                ' Remove unnecessary tabs
                tabPropPages.TabPages.Remove(tabRoute)
                tabPropPages.TabPages.Remove(tabClosestFacility)
                tabPropPages.TabPages.Remove(tabODCostMatrix)
                tabPropPages.TabPages.Remove(tabVRP)
                tabPropPages.TabPages.Remove(tabLocationAllocation)

                ' INAServiceAreaSolver2
                txtSADefaultBreaks.Text = ""
                For iBreak As Integer = 0 To saSolver.DefaultBreaks.Count - 1
                    txtSADefaultBreaks.Text = txtSADefaultBreaks.Text & " " & saSolver.DefaultBreaks.Element(iBreak).ToString()
                Next iBreak
                cboSATravelDirection.SelectedIndex = Convert.ToInt32(saSolver.TravelDirection)

                cboSAOutputPolygons.SelectedIndex = -1
                cboSAOutputPolygons.SelectedIndex = Convert.ToInt32(saSolver.OutputPolygons)
                chkSAOverlapPolygons.Checked = saSolver.OverlapPolygons
                chkSASplitPolygonsAtBreaks.Checked = saSolver.SplitPolygonsAtBreaks
                chkSAMergeSimilarPolygonRanges.Checked = saSolver.MergeSimilarPolygonRanges
                chkSATrimOuterPolygon.Checked = saSolver.TrimOuterPolygon
                txtSATrimPolygonDistance.Text = saSolver.TrimPolygonDistance.ToString()
                cboSATrimPolygonDistanceUnits.SelectedIndex = Convert.ToInt32(saSolver.TrimPolygonDistanceUnits)

                cboSAOutputLines.SelectedIndex = -1
                cboSAOutputLines.SelectedIndex = Convert.ToInt32(saSolver.OutputLines)
                chkSAOverlapLines.Checked = saSolver.OverlapLines
                chkSASplitLinesAtBreaks.Checked = saSolver.SplitLinesAtBreaks
                chkSAIncludeSourceInformationOnLines.Checked = saSolver.IncludeSourceInformationOnLines

                ' INASolverSettings
                PopulateImpedanceNameControl(cboSAImpedance, networkDataset, naSolverSettings.ImpedanceAttributeName)
                chkSAIgnoreInvalidLocations.Checked = naSolverSettings.IgnoreInvalidLocations
                cboSARestrictUTurns.SelectedIndex = System.Convert.ToInt32(naSolverSettings.RestrictUTurns)
                PopulateAttributeControl(chklstSAAccumulateAttributeNames, networkDataset, naSolverSettings.AccumulateAttributeNames, esriNetworkAttributeUsageType.esriNAUTCost)
                PopulateAttributeControl(chklstSARestrictionAttributeNames, networkDataset, naSolverSettings.RestrictionAttributeNames, esriNetworkAttributeUsageType.esriNAUTRestriction)

                ' INATimeAwareSolverSettings
                If (naTimeAwareSolverSettings.TimeOfDayUsage = esriNATimeOfDayUsage.esriNATimeOfDayUseAsStartTime) Then
                    chkSAUseTime.Checked = True
                End If
                txtSAUseTime.Text = naTimeAwareSolverSettings.TimeOfDay.ToString("HH:mm:ss MM/dd/yyyy")

            ElseIf vrpSolver IsNot Nothing Then ' VRP Solver
                ' Remove unnecessary tabs
                tabPropPages.TabPages.Remove(tabRoute)
                tabPropPages.TabPages.Remove(tabClosestFacility)
                tabPropPages.TabPages.Remove(tabODCostMatrix)
                tabPropPages.TabPages.Remove(tabServiceArea)
                tabPropPages.TabPages.Remove(tabLocationAllocation)

                cboVRPOutputShapeType.SelectedIndex = Convert.ToInt32(vrpSolver.OutputLines)
                cboVRPAllowUTurns.SelectedIndex = Convert.ToInt32(naSolverSettings.RestrictUTurns)
                ' VRP cannot have unknown units, so the index is offset by 1 from the solver field units
                cboVRPDistanceFieldUnits.SelectedIndex = Convert.ToInt32(vrpSolver.DistanceFieldUnits) - 1
                cboVRPTransitTime.SelectedIndex = Convert.ToInt32(vrpSolver.ExcessTransitTimePenaltyFactor)
                cboVRPTimeWindow.SelectedIndex = Convert.ToInt32(vrpSolver.TimeWindowViolationPenaltyFactor)
                cboVRPTimeFieldUnits.SelectedIndex = Convert.ToInt32(vrpSolver.TimeFieldUnits - 20)

                txtVRPCapacityCount.Text = vrpSolver.CapacityCount.ToString()
                txtVRPDefaultDate.Text = vrpSolver.DefaultDate.ToShortDateString()

                chkVRPUseHierarchy.Checked = naSolverSettings.UseHierarchy

                PopulateAttributeControl(chklstVRPRestrictionAttributeNames, networkDataset, naSolverSettings.RestrictionAttributeNames, esriNetworkAttributeUsageType.esriNAUTRestriction)

                'populate the time attribute combo box
                cboVRPTimeAttribute.Items.Clear()

                For i As Integer = 0 To networkDataset.AttributeCount - 1
                    Dim networkAttribute As INetworkAttribute = networkDataset.Attribute(i)

                    If networkAttribute.UsageType = esriNetworkAttributeUsageType.esriNAUTCost AndAlso networkAttribute.Units >= esriNetworkAttributeUnits.esriNAUSeconds Then
                        cboVRPTimeAttribute.Items.Add(networkAttribute.Name)
                    End If
                Next i

                If cboVRPTimeAttribute.Items.Count > 0 Then
                    cboVRPTimeAttribute.Text = naSolverSettings.ImpedanceAttributeName
                End If


                ' for VRP, the AccumulateAttributeNames hold the length, and it can only hold one length.
                '  Loop through the network dataset attributes
                cboVRPDistanceAttribute.Items.Clear()
                cboVRPDistanceAttribute.SelectedIndex = cboVRPDistanceAttribute.Items.Add("")

                For i As Integer = 0 To networkDataset.AttributeCount - 1
                    Dim networkAttribute As INetworkAttribute = networkDataset.Attribute(i)
                    If networkAttribute.UsageType = esriNetworkAttributeUsageType.esriNAUTCost AndAlso networkAttribute.Units < esriNetworkAttributeUnits.esriNAUSeconds Then
                        Dim attributeName As String = networkAttribute.Name

                        Dim cboindex As Integer = cboVRPDistanceAttribute.Items.Add(networkAttribute.Name)

                        ' If the attribute is in the strArray, it should be the selected one
                        For j As Integer = 0 To naSolverSettings.AccumulateAttributeNames.Count - 1
                            If naSolverSettings.AccumulateAttributeNames.Element(j) = attributeName Then
                                cboVRPDistanceAttribute.SelectedIndex = cboindex
                            End If
                        Next j
                    End If
                Next i
            ElseIf laSolver IsNot Nothing Then ' Location-Allocation LAYER
                ' Remove unnecessary tabs
                tabPropPages.TabPages.Remove(tabRoute)
                tabPropPages.TabPages.Remove(tabClosestFacility)
                tabPropPages.TabPages.Remove(tabODCostMatrix)
                tabPropPages.TabPages.Remove(tabServiceArea)
                tabPropPages.TabPages.Remove(tabVRP)

                ' INALocationAllocationSolver
                txtLACutOff.Text = GetStringFromObject(laSolver.DefaultCutoff)
                txtLAFacilitiesToLocate.Text = laSolver.NumberFacilitiesToLocate.ToString()
                txtLAImpParameter.Text = laSolver.TransformationParameter.ToString()
                txtLATargetMarketShare.Text = laSolver.TargetMarketSharePercentage.ToString()

                cboLAImpTransformation.SelectedIndex = Convert.ToInt32(laSolver.ImpedanceTransformation)
                cboLAProblemType.SelectedIndex = Convert.ToInt32(laSolver.ProblemType)
                cboLAOutputLines.SelectedIndex = Convert.ToInt32(laSolver.OutputLines)
                cboLATravelDirection.SelectedIndex = Convert.ToInt32(laSolver.TravelDirection)

                '// INASolverSettings
                PopulateImpedanceNameControl(cboLAImpedance, networkDataset, naSolverSettings.ImpedanceAttributeName)
                PopulateAttributeControl(chklstLAAccumulateAttributeNames, networkDataset, naSolverSettings.AccumulateAttributeNames, esriNetworkAttributeUsageType.esriNAUTCost)
                PopulateAttributeControl(chklstLARestrictionAttributeNames, networkDataset, naSolverSettings.RestrictionAttributeNames, esriNetworkAttributeUsageType.esriNAUTRestriction)
                chkLAUseHierarchy.Enabled = (naSolverSettings.HierarchyAttributeName.Length > 0)
                chkLAUseHierarchy.Checked = (chkCFUseHierarchy.Enabled AndAlso naSolverSettings.UseHierarchy)
                chkLAIgnoreInvalidLocations.Checked = naSolverSettings.IgnoreInvalidLocations

                ' INATimeAwareSolverSettings
                If (naTimeAwareSolverSettings.TimeOfDayUsage = esriNATimeOfDayUsage.esriNATimeOfDayUseAsStartTime) Then
                    chkLAUseTime.Checked = True
                End If
                txtLAUseTime.Text = naTimeAwareSolverSettings.TimeOfDay.ToString("HH:mm:ss MM/dd/yyyy")
            Else ' Unknown type of layer
                ' Remove unnecessary tabs
                tabPropPages.TabPages.Remove(tabRoute)
                tabPropPages.TabPages.Remove(tabClosestFacility)
                tabPropPages.TabPages.Remove(tabODCostMatrix)
                tabPropPages.TabPages.Remove(tabServiceArea)
                tabPropPages.TabPages.Remove(tabVRP)
                tabPropPages.TabPages.Remove(tabLocationAllocation)
            End If
        End Sub

        ''' <summary>
        ''' Interrogate the network dataset attributes to populate a list of attribute parameters
        ''' </summary>
        Private Sub PopulateAttributeParameterControl(ByVal networkDataset As INetworkDataset)
            Dim solverSettings As INASolverSettings2 = TryCast(m_naLayer.Context.Solver, INASolverSettings2)

            ' Track if there are attribute parameters, to decide if the attribute parameter tab should be displayed
            Dim hasAttributeParameters As Boolean = False

            ' Iterate over all of the network attributes to search for parameters
            For attrIndex As Integer = 0 To networkDataset.AttributeCount - 1
                Dim networkAttribute As INetworkAttribute3 = TryCast(networkDataset.Attribute(attrIndex), INetworkAttribute3)
                Dim attributeName As String = networkAttribute.Name

                ' Iterate over all of the parameters, to find their values
                For paramIndex As Integer = 0 To networkAttribute.Parameters.Count - 1
                    hasAttributeParameters = True

                    ' Find the current attribute parameter value for this layer
                    Dim attributeParameter As INetworkAttributeParameter2 = TryCast(networkAttribute.Parameters.Element(paramIndex), INetworkAttributeParameter2)
                    Dim paramValue As Object = solverSettings.AttributeParameterValue(attributeName, attributeParameter.Name)

                    Dim rowID As Integer = attributeParameterGrid.Rows.Add()
                    attributeParameterGrid(CInt(AttributeParameterGridColumnType.ATTRIBUTE_NAME), rowID).Value = networkAttribute.Name
                    attributeParameterGrid(CInt(AttributeParameterGridColumnType.PARAMETER_NAME), rowID).Value = attributeParameter.Name

                    UpdateAttributeParameterValueCell(rowID, paramValue, DirectCast(attributeParameter.VarType, VARTYPE), attributeParameter.ParameterUsageType)
                Next
            Next

            ' Don't display the attribute parameters tab, if there are no attribute parameters
            If Not hasAttributeParameters Then
                tabPropPages.TabPages.Remove(tabAttributeParameters)
            End If
        End Sub

        Private Sub UpdateAttributeParameterValueCell(ByVal rowID As Integer, ByVal paramValue As Object, ByVal paramVarType As VARTYPE, Optional ByVal paramUsageType As esriNetworkAttributeParameterUsageType = esriNetworkAttributeParameterUsageType.esriNAPUTGeneral)
            Dim cellText As String = ConvertAttributeParameterValueToString(paramValue, paramVarType, paramUsageType)

            ' Set up the combo box choices for restriction attribute parameters
            If paramUsageType = esriNetworkAttributeParameterUsageType.esriNAPUTRestriction Then
                attributeParameterGrid(CInt(AttributeParameterGridColumnType.PARAMETER_VALUE), rowID) = CreateRestrictionParameterCell(paramValue, cellText, rowID)
            End If

            attributeParameterGrid(CInt(AttributeParameterGridColumnType.PARAMETER_VALUE), rowID).Value = cellText
        End Sub

        Private Function CreateStandardRestrictionParameterCell(ByVal rowID As Integer) As DataGridViewComboBoxCell
            Dim cbcRestriction As New DataGridViewComboBoxCell()
            cbcRestriction.Items.AddRange(m_restrictionParameterValues.Keys.ToArray())

            cbcRestriction.DisplayStyle = DataGridViewComboBoxDisplayStyle.[Nothing]
            Return cbcRestriction
        End Function

        Private Function CreateRestrictionParameterCell(ByVal paramValue As Object, ByVal cellText As String, ByVal rowID As Integer) As DataGridViewComboBoxCell
            Dim comboBoxCell As DataGridViewComboBoxCell = CreateStandardRestrictionParameterCell(rowID)

            Dim isCustomRestrictionParamValue As Boolean = Not m_restrictionParameterValues.ContainsValue(CDbl(paramValue))
            If isCustomRestrictionParamValue Then
                comboBoxCell.Items.Add(cellText)
            End If

            Return comboBoxCell
        End Function

        Private Function ConvertAttributeParameterValueToString(ByVal paramValue As Object, ByVal paramVarType As VARTYPE, Optional ByVal paramUsageType As esriNetworkAttributeParameterUsageType = esriNetworkAttributeParameterUsageType.esriNAPUTGeneral) As String
            Dim paramValueString As String = ""

            ' Use bitwise arithmetic to determine if this parameter is an array.
            Dim vtBase As VARTYPE = DirectCast(CInt(paramVarType) And Not CInt(VARTYPE.VT_ARRAY), VARTYPE)
            Dim isArrayType As Boolean = (vtBase <> paramVarType)

            ' Null and DBNull should be represented as an empty string
            If Not System.DBNull.Value.Equals(paramValue) AndAlso paramValue IsNot Nothing Then
                ' For restriction attribute parameters, try to match the parameter double value with its associated
                '  text representation
                Dim isStandardRestrictionParamValue As Boolean = (paramUsageType = esriNetworkAttributeParameterUsageType.esriNAPUTRestriction AndAlso m_restrictionParameterValues.ContainsValue(CDbl(paramValue)))
                If isStandardRestrictionParamValue Then
                    If isStandardRestrictionParamValue Then
                        ' Assign celltext to a key name matching the paramValue
                        Dim matchingKeys As IEnumerable(Of String) = From pair In m_restrictionParameterValues _
                                             Where (CDbl(paramValue).Equals(pair.Value)) _
                                             Select pair.Key

                        paramValueString = matchingKeys.First()
                    End If

                    ' For attribute parameters that are array types, determine the type of array, 
                    '   then convert the array to a string for display purposes.
                ElseIf isArrayType Then
                    Select Case vtBase
                        Case VARTYPE.VT_I2
                            paramValueString = ConvertGenericArrayToString(DirectCast(paramValue, Short()))
                            Exit Select
                        Case VARTYPE.VT_I4
                            paramValueString = ConvertGenericArrayToString(DirectCast(paramValue, Integer()))
                            Exit Select
                        Case VARTYPE.VT_R4
                            paramValueString = ConvertGenericArrayToString(DirectCast(paramValue, Single()))
                            Exit Select
                        Case VARTYPE.VT_R8
                            paramValueString = ConvertGenericArrayToString(DirectCast(paramValue, Double()))
                            Exit Select
                        Case VARTYPE.VT_DATE
                            paramValueString = ConvertGenericArrayToString(DirectCast(paramValue, DateTime()))
                            Exit Select
                        Case VARTYPE.VT_BSTR
                            paramValueString = ConvertGenericArrayToString(DirectCast(paramValue, String()))
                            Exit Select
                        Case VARTYPE.VT_BOOL
                            paramValueString = ConvertGenericArrayToString(DirectCast(paramValue, Boolean()))
                            Exit Select
                        Case Else
                            Throw New Exception("Unexpected array base type")
                    End Select
                Else
                    paramValueString = paramValue.ToString()
                End If
            End If

            Return paramValueString
        End Function

        ''' <summary>
        ''' Take generic arrays and convert them to a string
        ''' </summary>
        Private Shared Function ConvertGenericArrayToString(Of T)(ByVal values As T()) As String
            Dim sValues As String() = System.Array.ConvertAll(values, Function(p) p.ToString())
            Return [String].Join(",", sValues)
        End Function

        ''' <summary>
        ''' Take string values and convert them to generic arrays
        ''' </summary>
        Private Shared Function ConvertStringToGenericArray(Of T)(ByVal cellValue As String) As T()
            Dim list As New List(Of T)()

            Dim values As String() = cellValue.Split(","c)
            For Each value As String In values
                list.Add(DirectCast(Convert.ChangeType(value, GetType(T)), T))
            Next

            Return list.ToArray()
        End Function

        ''' <summary>
        ''' Updates the NALayer based on the current controls.
        ''' This will update the solver settings for the solver referenced by the NALayer.
        ''' </summary>
        Private Sub UpdateNALayer(ByVal naLayer As INALayer)
            Dim layer As ILayer = TryCast(naLayer, ILayer)
            Dim naContext As INAContext = naLayer.Context
            Dim networkDataset As INetworkDataset = naContext.NetworkDataset
            Dim naLocator As INALocator2 = TryCast(naContext.Locator, INALocator2)

            Dim naSolver As INASolver = naContext.Solver
            Dim naSolverSettings As INASolverSettings = TryCast(naSolver, INASolverSettings2)
            Dim naTimeAwareSolverSettings As INATimeAwareSolverSettings = TryCast(naSolver, INATimeAwareSolverSettings)

            Dim routeSolver As INARouteSolver2 = TryCast(naSolver, INARouteSolver2)
            Dim cfSolver As INAClosestFacilitySolver = TryCast(naSolver, INAClosestFacilitySolver)
            Dim odSolver As INAODCostMatrixSolver = TryCast(naSolver, INAODCostMatrixSolver)
            Dim saSolver As INAServiceAreaSolver2 = TryCast(naSolver, INAServiceAreaSolver2)
            Dim vrpSolver As INAVRPSolver = TryCast(naSolver, INAVRPSolver)
            Dim laSolver As INALocationAllocationSolver = TryCast(naSolver, INALocationAllocationSolver)

            ' Set Layer properties
            layer.Name = txtLayerName.Text
            naLocator.MaxSnapTolerance = Convert.ToDouble(txtMaxSearchTolerance.Text)
            naLocator.SnapToleranceUnits = CType(cboMaxSearchToleranceUnits.SelectedIndex, esriUnits)

            SetAttributeParameters(networkDataset)

            ' Set Solver properties
            If routeSolver IsNot Nothing Then ' ROUTE LAYER
                ' INARouteSolver
                routeSolver.FindBestSequence = chkRouteFindBestSequence.Checked
                routeSolver.PreserveFirstStop = chkRoutePreserveFirstStop.Checked
                routeSolver.PreserveLastStop = chkRoutePreserveLastStop.Checked
                routeSolver.UseTimeWindows = chkRouteUseTimeWindows.Checked
                routeSolver.UseStartTime = chkRouteUseStartTime.Checked
                Try
                    routeSolver.StartTime = System.Convert.ToDateTime(txtRouteStartTime.Text)
                Catch e As Exception
                    MessageBox.Show("Invalid Time specified.  Use the format HH:mm:ss MM/dd/yyyy.")
                End Try
                routeSolver.OutputLines = CType(cboRouteOutputLines.SelectedIndex, esriNAOutputLineType)

                ' INASolverSettings
                naSolverSettings.ImpedanceAttributeName = cboRouteImpedance.Text
                naSolverSettings.UseHierarchy = chkRouteUseHierarchy.Checked
                naSolverSettings.IgnoreInvalidLocations = chkRouteIgnoreInvalidLocations.Checked
                naSolverSettings.RestrictUTurns = CType(cboRouteRestrictUTurns.SelectedIndex, esriNetworkForwardStarBacktrack)
                naSolverSettings.AccumulateAttributeNames = GetCheckedAttributeNamesFromControl(chklstRouteAccumulateAttributeNames)
                naSolverSettings.RestrictionAttributeNames = GetCheckedAttributeNamesFromControl(chklstRouteRestrictionAttributeNames)

            ElseIf cfSolver IsNot Nothing Then ' CLOSEST FACILITY LAYER
                If txtCFDefaultCutoff.Text.Length = 0 Then
                    cfSolver.DefaultCutoff = Nothing
                Else
                    cfSolver.DefaultCutoff = Convert.ToDouble(txtCFDefaultCutoff.Text)
                End If

                If txtCFDefaultTargetFacilityCount.Text.Length = 0 Then
                    cfSolver.DefaultTargetFacilityCount = 1
                Else
                    cfSolver.DefaultTargetFacilityCount = Convert.ToInt32(txtCFDefaultTargetFacilityCount.Text)
                End If

                cfSolver.TravelDirection = CType(cboCFTravelDirection.SelectedIndex, esriNATravelDirection)
                cfSolver.OutputLines = CType(cboCFOutputLines.SelectedIndex, esriNAOutputLineType)

                ' INASolverSettings
                naSolverSettings.ImpedanceAttributeName = cboCFImpedance.Text
                naSolverSettings.UseHierarchy = chkCFUseHierarchy.Checked
                naSolverSettings.IgnoreInvalidLocations = chkCFIgnoreInvalidLocations.Checked
                naSolverSettings.RestrictUTurns = CType(cboCFRestrictUTurns.SelectedIndex, esriNetworkForwardStarBacktrack)
                naSolverSettings.AccumulateAttributeNames = GetCheckedAttributeNamesFromControl(chklstCFAccumulateAttributeNames)
                naSolverSettings.RestrictionAttributeNames = GetCheckedAttributeNamesFromControl(chklstCFRestrictionAttributeNames)

                ' INATimeAwareSolverSettings
                Try
                    naTimeAwareSolverSettings.TimeOfDay = DateTime.Parse(txtCFUseTime.Text)
                Catch e As Exception
                    MessageBox.Show("Invalid Time specified.  Use the format HH:mm:ss MM/dd/yyyy.")
                End Try
                naTimeAwareSolverSettings.TimeOfDayUsage = CType(cboCFTimeUsage.SelectedIndex, esriNATimeOfDayUsage)

            ElseIf odSolver IsNot Nothing Then ' OD COST MATRIX LAYER
                If txtODDefaultCutoff.Text.Length = 0 Then
                    odSolver.DefaultCutoff = Nothing
                Else
                    odSolver.DefaultCutoff = Convert.ToDouble(txtODDefaultCutoff.Text)
                End If

                If txtODDefaultTargetDestinationCount.Text.Length = 0 Then
                    odSolver.DefaultTargetDestinationCount = Nothing
                Else
                    odSolver.DefaultTargetDestinationCount = Convert.ToInt32(txtODDefaultTargetDestinationCount.Text)
                End If

                odSolver.OutputLines = CType(cboODOutputLines.SelectedIndex, esriNAOutputLineType)

                ' INASolverSettings
                naSolverSettings.ImpedanceAttributeName = cboODImpedance.Text
                naSolverSettings.UseHierarchy = chkODUseHierarchy.Checked
                naSolverSettings.IgnoreInvalidLocations = chkODIgnoreInvalidLocations.Checked
                naSolverSettings.RestrictUTurns = CType(cboODRestrictUTurns.SelectedIndex, esriNetworkForwardStarBacktrack)
                naSolverSettings.AccumulateAttributeNames = GetCheckedAttributeNamesFromControl(chklstODAccumulateAttributeNames)
                naSolverSettings.RestrictionAttributeNames = GetCheckedAttributeNamesFromControl(chklstODRestrictionAttributeNames)

                ' INATimeAwareSolverSettings
                Try
                    naTimeAwareSolverSettings.TimeOfDay = DateTime.Parse(txtODUseTime.Text)
                Catch e As Exception
                    MessageBox.Show("Invalid Time specified.  Use the format HH:mm:ss MM/dd/yyyy.")
                End Try
                If (chkODUseTime.Checked) Then
                    naTimeAwareSolverSettings.TimeOfDayUsage = esriNATimeOfDayUsage.esriNATimeOfDayUseAsStartTime
                End If

            ElseIf saSolver IsNot Nothing Then ' SERVICE AREA SOLVER
                Dim defaultBreaks As IDoubleArray = saSolver.DefaultBreaks
                defaultBreaks.RemoveAll()
                Dim breaks As String = txtSADefaultBreaks.Text.Trim()
                breaks.Replace("  ", " ")
                Dim values() As String = breaks.Split(" "c)
                For iBreak As Integer = values.GetLowerBound(0) To values.GetUpperBound(0)
                    defaultBreaks.Add(System.Convert.ToDouble(values.GetValue(iBreak)))
                Next iBreak
                saSolver.DefaultBreaks = defaultBreaks
                saSolver.TravelDirection = CType(cboSATravelDirection.SelectedIndex, esriNATravelDirection)

                saSolver.OutputPolygons = CType(cboSAOutputPolygons.SelectedIndex, esriNAOutputPolygonType)
                saSolver.OverlapPolygons = chkSAOverlapPolygons.Checked
                saSolver.SplitPolygonsAtBreaks = chkSASplitPolygonsAtBreaks.Checked
                saSolver.MergeSimilarPolygonRanges = chkSAMergeSimilarPolygonRanges.Checked
                saSolver.TrimOuterPolygon = chkSATrimOuterPolygon.Checked
                saSolver.TrimPolygonDistance = Convert.ToDouble(Me.txtSATrimPolygonDistance.Text)
                saSolver.TrimPolygonDistanceUnits = CType(cboSATrimPolygonDistanceUnits.SelectedIndex, esriUnits)

                If cboSAOutputLines.SelectedIndex = 0 Then
                    saSolver.OutputLines = CType(cboSAOutputLines.SelectedIndex, esriNAOutputLineType)
                Else ' Does not support Straight lines, so not in combobox, up by one to account for this
                    saSolver.OutputLines = CType(cboSAOutputLines.SelectedIndex + 1, esriNAOutputLineType)
                End If

                saSolver.OverlapLines = chkSAOverlapLines.Checked
                saSolver.SplitLinesAtBreaks = chkSASplitLinesAtBreaks.Checked
                saSolver.IncludeSourceInformationOnLines = Me.chkSAIncludeSourceInformationOnLines.Checked

                ' INASolverSettings
                naSolverSettings.ImpedanceAttributeName = cboSAImpedance.Text
                naSolverSettings.IgnoreInvalidLocations = chkSAIgnoreInvalidLocations.Checked
                naSolverSettings.RestrictUTurns = CType(cboSARestrictUTurns.SelectedIndex, esriNetworkForwardStarBacktrack)
                naSolverSettings.AccumulateAttributeNames = GetCheckedAttributeNamesFromControl(chklstSAAccumulateAttributeNames)
                naSolverSettings.RestrictionAttributeNames = GetCheckedAttributeNamesFromControl(chklstSARestrictionAttributeNames)

                ' INATimeAwareSolverSettings
                Try
                    naTimeAwareSolverSettings.TimeOfDay = DateTime.Parse(txtSAUseTime.Text)
                Catch e As Exception
                    MessageBox.Show("Invalid Time specified.  Use the format HH:mm:ss MM/dd/yyyy.")
                End Try
                If (chkSAUseTime.Checked) Then
                    naTimeAwareSolverSettings.TimeOfDayUsage = esriNATimeOfDayUsage.esriNATimeOfDayUseAsStartTime
                End If
            ElseIf vrpSolver IsNot Nothing Then
                naSolverSettings.ImpedanceAttributeName = cboVRPTimeAttribute.Text
                naSolverSettings.AccumulateAttributeNames.RemoveAll()
                Dim strArray As IStringArray = naSolverSettings.AccumulateAttributeNames
                strArray.RemoveAll()
                strArray.Add(cboVRPDistanceAttribute.Text)
                naSolverSettings.AccumulateAttributeNames = strArray

                vrpSolver.CapacityCount = Convert.ToInt32(txtVRPCapacityCount.Text)
                Try
                    vrpSolver.DefaultDate = Convert.ToDateTime(txtVRPDefaultDate.Text)
                Catch e As Exception
                    MessageBox.Show("Invalid Time specified.  Use the format HH:mm:ss MM/dd/yyyy.")
                End Try
                vrpSolver.TimeFieldUnits = CType((cboVRPTimeFieldUnits.SelectedIndex + 20), esriNetworkAttributeUnits)

                ' there cannot be unknown units for a VRP, so the index is offset by 1
                vrpSolver.DistanceFieldUnits = CType((cboVRPDistanceFieldUnits.SelectedIndex + 1), esriNetworkAttributeUnits)
                naSolverSettings.RestrictUTurns = CType(cboVRPAllowUTurns.SelectedIndex, esriNetworkForwardStarBacktrack)
                vrpSolver.OutputLines = CType(cboVRPOutputShapeType.SelectedIndex, esriNAOutputLineType)
                vrpSolver.TimeWindowViolationPenaltyFactor = cboVRPTimeWindow.SelectedIndex
                vrpSolver.ExcessTransitTimePenaltyFactor = cboVRPTransitTime.SelectedIndex

                naSolverSettings.UseHierarchy = chkVRPUseHierarchy.Checked

                naSolverSettings.RestrictionAttributeNames = GetCheckedAttributeNamesFromControl(chklstVRPRestrictionAttributeNames)
            ElseIf laSolver IsNot Nothing Then ' Location-Allocation LAYER
                If txtLACutOff.Text.Length = 0 Then
                    laSolver.DefaultCutoff = Nothing
                ElseIf Convert.ToDouble(txtLACutOff.Text) = 0.0 Then
                    laSolver.DefaultCutoff = Nothing
                Else
                    laSolver.DefaultCutoff = Convert.ToDouble(txtLACutOff.Text)
                End If

                If txtLAFacilitiesToLocate.Text.Length = 0 Then
                    laSolver.NumberFacilitiesToLocate = 1
                Else
                    laSolver.NumberFacilitiesToLocate = Convert.ToInt32(txtLAFacilitiesToLocate.Text)
                End If

                laSolver.ProblemType = CType(cboLAProblemType.SelectedIndex, esriNALocationAllocationProblemType)
                laSolver.ImpedanceTransformation = CType(cboLAImpTransformation.SelectedIndex, esriNAImpedanceTransformationType)
                laSolver.TransformationParameter = Convert.ToDouble(txtLAImpParameter.Text)
                laSolver.TargetMarketSharePercentage = Convert.ToDouble(txtLATargetMarketShare.Text)
                laSolver.TravelDirection = CType(cboLATravelDirection.SelectedIndex, esriNATravelDirection)
                laSolver.OutputLines = CType(cboLAOutputLines.SelectedIndex, esriNAOutputLineType)

                '// INASolverSettings
                naSolverSettings.ImpedanceAttributeName = cboLAImpedance.Text
                naSolverSettings.UseHierarchy = chkLAUseHierarchy.Checked
                naSolverSettings.AccumulateAttributeNames = GetCheckedAttributeNamesFromControl(chklstLAAccumulateAttributeNames)
                naSolverSettings.RestrictionAttributeNames = GetCheckedAttributeNamesFromControl(chklstLARestrictionAttributeNames)
                naSolverSettings.IgnoreInvalidLocations = chkLAIgnoreInvalidLocations.Checked

                ' INATimeAwareSolverSettings
                Try
                    naTimeAwareSolverSettings.TimeOfDay = DateTime.Parse(txtLAUseTime.Text)
                Catch e As Exception
                    MessageBox.Show("Invalid Time specified.  Use the format HH:mm:ss MM/dd/yyyy.")
                End Try
                If (chkLAUseTime.Checked) Then
                    naTimeAwareSolverSettings.TimeOfDayUsage = esriNATimeOfDayUsage.esriNATimeOfDayUseAsStartTime
                End If
            End If
        End Sub

        ''' <summary>
        ''' Populate the attribute parameter values based on the data grid rows.
        ''' </summary>
        Private Sub SetAttributeParameters(ByVal networkDataset As INetworkDataset)
            Dim solverSettings As INASolverSettings2 = TryCast(m_naLayer.Context.Solver, INASolverSettings2)

            ' The parameter values will be updated for every row in the data grid view
            For rowIndex As Integer = 0 To attributeParameterGrid.Rows.Count - 1
                Dim row As DataGridViewRow = attributeParameterGrid.Rows(rowIndex)

                ' Use the first cell value to find the appropriate network attribute
                Dim netAttribute As INetworkAttribute3 = TryCast(networkDataset.AttributeByName(row.Cells(CInt(AttributeParameterGridColumnType.ATTRIBUTE_NAME)).Value.ToString()), INetworkAttribute3)
                Dim attributeName As String = netAttribute.Name

                For paramIndex As Integer = 0 To netAttribute.Parameters.Count - 1
                    Dim parameter As INetworkAttributeParameter2 = TryCast(netAttribute.Parameters.Element(paramIndex), INetworkAttributeParameter2)
                    Dim paramName As String = parameter.Name
                    Try
                        ' Get the base type for the parameter.  For example, if the type is a double array,
                        '  then the base type is double.
                        Dim vt As VARTYPE = DirectCast(parameter.VarType, VARTYPE)
                        Dim vtBase As VARTYPE = DirectCast(CInt(vt) And Not CInt(VARTYPE.VT_ARRAY), VARTYPE)

                        ' Determine if the parameter is an array
                        Dim isArrayType As Boolean = (vtBase <> vt)

                        ' Use the second cell value to find the appropriate parameter
                        If parameter.Name = row.Cells(CInt(AttributeParameterGridColumnType.PARAMETER_NAME)).Value.ToString() Then
                            Dim paramValue As Object = System.DBNull.Value

                            Dim cellValue As Object = row.Cells(CInt(AttributeParameterGridColumnType.PARAMETER_VALUE)).Value
                            If Not System.DBNull.Value.Equals(cellValue) AndAlso cellValue IsNot Nothing Then
                                paramValue = ConvertStringToAttributeParameterValue(cellValue.ToString(), DirectCast(parameter.VarType, VARTYPE), parameter.ParameterUsageType)
                            End If

                            solverSettings.AttributeParameterValue(attributeName, paramName) = paramValue
                        End If
                    Catch e As Exception
                        Throw New Exception(("Invalid attribute parameter value." & vbLf & "Attribute: " & attributeName & vbLf & "Parameter: " & paramName & vbLf & "Error Message: ") + e.Message)
                    End Try
                Next
            Next
        End Sub

        Private Function ConvertStringToAttributeParameterValue(ByVal paramValueText As String, ByVal paramVarType As VARTYPE, Optional ByVal paramUsageType As esriNetworkAttributeParameterUsageType = esriNetworkAttributeParameterUsageType.esriNAPUTGeneral) As Object
            Dim paramValue As Object = System.DBNull.Value
            ' Regardless of the VarType, the parameter value can be DBNull
            ' Use bitwise arithmetic to determine if this parameter is an array.
            Dim vtBase As VARTYPE = DirectCast(CInt(paramVarType) And Not CInt(VARTYPE.VT_ARRAY), VARTYPE)
            Dim isArrayType As Boolean = (vtBase <> paramVarType)

            If paramValueText <> "" Then
                ' Restriction parameters are specially handled, due to the conversion between displayed text values
                '  and stored double values
                Dim isRestrictionParm As Boolean = (paramUsageType = esriNetworkAttributeParameterUsageType.esriNAPUTRestriction)

                ' For restriction parameters that have text values in the list, use the associated double values
                If isRestrictionParm AndAlso m_restrictionParameterValues.ContainsKey(paramValueText) Then
                    paramValue = m_restrictionParameterValues(paramValueText)

                    ' For attribute parameters that are array types, determine the type of array, 
                    '   then convert the string to the appropriate array type.
                ElseIf isArrayType Then
                    Select Case vtBase
                        Case VARTYPE.VT_I2
                            paramValue = ConvertStringToGenericArray(Of Short)(paramValueText)
                            Exit Select
                        Case VARTYPE.VT_I4
                            paramValue = ConvertStringToGenericArray(Of Integer)(paramValueText)
                            Exit Select
                        Case VARTYPE.VT_R4
                            paramValue = ConvertStringToGenericArray(Of Single)(paramValueText)
                            Exit Select
                        Case VARTYPE.VT_R8
                            paramValue = ConvertStringToGenericArray(Of Double)(paramValueText)
                            Exit Select
                        Case VARTYPE.VT_DATE
                            paramValue = ConvertStringToGenericArray(Of DateTime)(paramValueText)
                            Exit Select
                        Case VARTYPE.VT_BSTR
                            paramValue = ConvertStringToGenericArray(Of String)(paramValueText)
                            Exit Select
                        Case VARTYPE.VT_BOOL
                            paramValue = ConvertStringToGenericArray(Of Boolean)(paramValueText)
                            Exit Select
                        Case Else
                            Throw New Exception("Unexpected array base type")
                    End Select
                Else
                    ' Simple type
                    ' Conversion for simple types is handled automatically, if the string can be converted to the VARTYPE
                    paramValue = paramValueText
                End If
            End If
            Return paramValue
        End Function

        ''' <summary>
        ''' Update the Impedance control based on the network dataset cost attributes
        ''' </summary>
        Private Sub PopulateImpedanceNameControl(ByVal cboImpedance As ComboBox, ByVal networkDataset As INetworkDataset, ByVal impedanceName As String)
            cboImpedance.Items.Clear()

            For i As Integer = 0 To networkDataset.AttributeCount - 1
                Dim networkAttribute As INetworkAttribute = networkDataset.Attribute(i)
                If networkAttribute.UsageType = esriNetworkAttributeUsageType.esriNAUTCost Then
                    cboImpedance.Items.Add(networkAttribute.Name)
                End If
            Next i

            If cboImpedance.Items.Count > 0 Then
                cboImpedance.Text = impedanceName
            End If
        End Sub

        ''' <summary>
        ''' Update the CheckedListBox control based on the network dataset attributes (checking the ones currently chosen by the solver)
        ''' </summary>
        Private Sub PopulateAttributeControl(ByVal chklstBox As CheckedListBox, ByVal networkDataset As INetworkDataset, ByVal strArray As IStringArray, ByVal usageType As esriNetworkAttributeUsageType)
            chklstBox.Items.Clear()

            '  Loop through the newtork dataset attributes
            For i As Integer = 0 To networkDataset.AttributeCount - 1
                Dim networkAttribute As INetworkAttribute = networkDataset.Attribute(i)
                If networkAttribute.UsageType = usageType Then
                    Dim attributeName As String = networkAttribute.Name
                    Dim checkState As CheckState = checkState.Unchecked

                    ' If the attribute is in the strArray, it should be checked
                    For j As Integer = 0 To strArray.Count - 1
                        If strArray.Element(j) = attributeName Then
                            checkState = checkState.Checked
                        End If
                    Next j

                    ' Add the attribute to the control
                    chklstBox.Items.Add(attributeName, checkState)
                End If
            Next i
        End Sub

        ''' <summary>
        ''' Returns the attribute names checked.
        ''' </summary>
        Private Function GetCheckedAttributeNamesFromControl(ByVal chklstBox As CheckedListBox) As IStringArray
            Dim attributeNames As IStringArray = New StrArrayClass()

            For i As Integer = 0 To chklstBox.CheckedItems.Count - 1
                attributeNames.Add(chklstBox.Items(chklstBox.CheckedIndices(i)).ToString())
            Next i

            Return attributeNames
        End Function

        ''' <summary>
        ''' Encapsulates returning an empty string if the object is NULL.
        ''' </summary>
        Private Function GetStringFromObject(ByVal value As Object) As String
            If value Is Nothing Then
                Return ""
            Else
                Return value.ToString()
            End If
        End Function

        Private Sub chkRouteUseStartTime_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles chkRouteUseStartTime.CheckedChanged
            txtRouteStartTime.Enabled = chkRouteUseStartTime.Checked
        End Sub

        Private Sub chkRouteFindBestSequence_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles chkRouteFindBestSequence.CheckedChanged
            chkRoutePreserveFirstStop.Enabled = chkRouteFindBestSequence.Checked
            chkRoutePreserveLastStop.Enabled = chkRouteFindBestSequence.Checked
        End Sub

        ' Enable/Disable SA Polygon controls if not generating polygons
        Private Sub cboSAOutputPolygons_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cboSAOutputPolygons.SelectedIndexChanged
            Dim bOutputPolygons As Boolean = (cboSAOutputPolygons.SelectedIndex > 0)
            chkSAOverlapPolygons.Enabled = bOutputPolygons
            chkSASplitPolygonsAtBreaks.Enabled = bOutputPolygons
            chkSAMergeSimilarPolygonRanges.Enabled = bOutputPolygons
            chkSATrimOuterPolygon.Enabled = bOutputPolygons
            txtSATrimPolygonDistance.Enabled = bOutputPolygons
            cboSATrimPolygonDistanceUnits.Enabled = bOutputPolygons
        End Sub

        ' Enable/Disable SA Line controls if not generating lines
        Private Sub cboSAOutputLines_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cboSAOutputLines.SelectedIndexChanged
            Dim bOutputLines As Boolean = (cboSAOutputLines.SelectedIndex > 0)
            chkSAOverlapLines.Enabled = bOutputLines
            chkSASplitLinesAtBreaks.Enabled = bOutputLines
            chkSAIncludeSourceInformationOnLines.Enabled = bOutputLines
        End Sub

        Private Sub cboLAProblemType_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cboLAProblemType.SelectedIndexChanged
            If (cboLAProblemType.SelectedIndex = 5) OrElse (cboLAProblemType.SelectedIndex = 2) Then
                txtLAFacilitiesToLocate.Enabled = False
            Else
                txtLAFacilitiesToLocate.Enabled = True
            End If

            If cboLAProblemType.SelectedIndex = 5 Then
                txtLATargetMarketShare.Enabled = True
            Else
                txtLATargetMarketShare.Enabled = False
            End If
        End Sub

        Private Sub btnOK_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOK.Click
            m_okClicked = True

            Try
                ' Get the NAContext and NetworkDataset
                Dim naContext As INAContext = m_naLayer.Context
                Dim networkDataset As INetworkDataset = naContext.NetworkDataset

                ' Update the layer properties based on the items chosen
                UpdateNALayer(m_naLayer)

                ' Update the Context so it can respond to changes made to the solver settings
                Dim gpMessages As IGPMessages = New GPMessagesClass()
                Dim deNetworkDataset As IDENetworkDataset = TryCast((CType(networkDataset, IDatasetComponent)).DataElement, IDENetworkDataset)
                naContext.Solver.UpdateContext(naContext, deNetworkDataset, gpMessages)

                Me.Close()
            Catch ex As Exception
                MessageBox.Show("Failed to update the layer. " + ex.Message)
            End Try
        End Sub

        Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click
            m_okClicked = False
            Me.Close()
        End Sub

        Private Sub btnReset_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnReset.Click
            Dim networkDataset As INetworkDataset = m_naLayer.Context.NetworkDataset
            Dim solverSettings As INASolverSettings2 = TryCast(m_naLayer.Context.Solver, INASolverSettings2)

            ' The parameter values will be reset for every row in the data grid view
            For rowID As Integer = 0 To attributeParameterGrid.Rows.Count - 1
                Dim row As DataGridViewRow = attributeParameterGrid.Rows(rowID)

                ' Use the first cell value to find the appropriate network attribute
                Dim netAttribute As INetworkAttribute3 = TryCast(networkDataset.AttributeByName(row.Cells(CInt(AttributeParameterGridColumnType.ATTRIBUTE_NAME)).Value.ToString()), INetworkAttribute3)
                Dim attributeParameters As IArray = netAttribute.Parameters
                Dim attributeName As String = netAttribute.Name

                ' Check every parameter to find the matching one
                For paramIndex As Integer = 0 To netAttribute.Parameters.Count - 1
                    Dim attributeParameter As INetworkAttributeParameter2 = TryCast(attributeParameters.Element(paramIndex), INetworkAttributeParameter2)
                    If attributeParameter.Name = row.Cells(CInt(AttributeParameterGridColumnType.PARAMETER_NAME)).Value.ToString() Then
                        solverSettings.AttributeParameterValue(attributeName, attributeParameter.Name) = attributeParameter.DefaultValue
                        UpdateAttributeParameterValueCell(rowID, attributeParameter.DefaultValue, DirectCast(attributeParameter.VarType, VARTYPE), attributeParameter.ParameterUsageType)
                    End If
                Next
            Next
        End Sub
    End Class
End Namespace